{"id":6387,"date":"2026-07-10T16:22:56","date_gmt":"2026-07-10T16:22:56","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-9-test-2-speaking\/"},"modified":"2026-07-12T03:16:19","modified_gmt":"2026-07-12T03:16:19","slug":"celpip-set-9-test-2-speaking","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-9-test-2-speaking\/","title":{"rendered":"CELPIP Speaking \u2014 Set 9 \u00b7 Practice Test 2"},"content":{"rendered":"<div id=\"clp-spk-root\" style=\"min-height:300px\">\n<p style=\"text-align:center;padding:40px 0;color:#888\">Loading CELPIP Speaking\u2026<\/p>\n<\/div>\n<p><script>eval(atob(\"d2luZG93LkNMUFNQS19EQVRBPXsic2V0Ijo5LCJ0ZXN0IjoyLCJ0aXRsZSI6IkNFTFBJUCBTcGVha2luZyBcdTIwMTQgU2V0IDkgXHUwMGI3IFByYWN0aWNlIFRlc3QgMiIsImhlYWRlciI6IlByYWN0aWNlIFRlc3QgMiIsImltZ3MiOnsic2NlbmUiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczl0Mi1zY2VuZS5qcGciLCJvcHRBIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3M5dDItb3B0LWEuanBnIiwib3B0QiI6Imh0dHBzOi8vYWxsZW5nbGlzaDR1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8wNy9zOXQyLW9wdC1iLmpwZyIsIm9wdE90aGVyIjoiaHR0cHM6Ly9hbGxlbmdsaXNoNHUuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzA3L3M5dDItb3B0LW90aGVyLmpwZyIsInVudXN1YWwiOiJodHRwczovL2FsbGVuZ2xpc2g0dS5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMjYvMDcvczl0Mi11bnVzdWFsLmpwZyJ9LCJvdGhlclVybCI6Ii9jZWxwaXAtc2V0LTktdGVzdC0xLXNwZWFraW5nLyIsInRhc2tzIjpbeyJrIjoidyIsIm51bSI6MCwidHlwZUVuIjoiU3BlYWtpbmcgUHJhY3RpY2UgVGFzayIsInByZXAiOjMwLCJyZWMiOjYwLCJ3YXJtdXAiOnRydWUsInByb21wdCI6IlRhbGsgYWJvdXQgb25lIG9mIHlvdXIgYmVzdCBmcmllbmRzLiIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIlRoZSBQcmFjdGljZSBUYXNrICh3YXJtLXVwKSBpcyBOT1Qgc2NvcmVkIFx1MjAxNCBpdCBpcyBoZXJlIHRvIGhlbHAgeW91IGdldCB1c2VkIHRvIHRoZSBjb250cm9scyBhbmQgd2FybSB1cCB5b3VyIHZvaWNlLiIsIlNwZWFrIG5hdHVyYWxseSBhYm91dCBhIGJlc3QgZnJpZW5kOiB0aGVpciBuYW1lLCBob3cgeW91IG1ldCwgdGhlaXIgcGVyc29uYWxpdHksIGEgbWVtb3J5IHlvdSBzaGFyZS4iLCJVc2UgaXQgdG8gYWRqdXN0IHlvdXIgcG9zdHVyZSwgbWljcm9waG9uZSBkaXN0YW5jZSwgYW5kIHNwZWFraW5nIHBhY2UuIl0sInBocmFzZXMiOlsiTXkgYmVzdCBmcmllbmQncyBuYW1lIGlzXHUyMDI2IiwiV2UgbWV0IHdoZW5cdTIwMjYiLCJXaGF0IEkgbGlrZSBtb3N0IGFib3V0IGhpbS9oZXIgaXNcdTIwMjYiXX0sInM2IjpudWxsLCJzOSI6bnVsbH0seyJrIjoidDEiLCJudW0iOjEsInR5cGVFbiI6IkdpdmluZyBBZHZpY2UiLCJwcmVwIjozMCwicmVjIjo5MCwicHJvbXB0IjoiWW91ciBmcmllbmQgaGFzIHRvIHdvcmsgd2l0aCBhIGNsYXNzbWF0ZSBvbiBhIHNjaG9vbCBwcm9qZWN0LiBUaGUgY2xhc3NtYXRlIGRvZXNuJ3QgZG8gYW55IHdvcmssIHNvIHlvdXIgZnJpZW5kIGRvZXMgZXZlcnl0aGluZy4gWW91ciBmcmllbmQgZmVlbHMgdXBzZXQgYW5kIGFuZ3J5LiBBZHZpc2UgeW91ciBmcmllbmQgYWJvdXQgd2hhdCBoZSBzaG91bGQgZG8gdG8gc29sdmUgdGhpcyBwcm9ibGVtLiIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIk9wZW5pbmc6IGdyZWV0IHlvdXIgZnJpZW5kIGFuZCByZXN0YXRlIHRoZSBzaXR1YXRpb24gaW4gb25lIHNlbnRlbmNlLiIsIkJvZHk6IGdpdmUgMlx1MjAxMzMgcGllY2VzIG9mIGFkdmljZSwgZWFjaCB3aXRoIGEgcmVhc29uIG9yIGV4YW1wbGUgKEZpcnN0XHUyMDI2LCBiZWNhdXNlXHUyMDI2OyBBbm90aGVyIGlkZWEgaXNcdTIwMjYpLiIsIkNsb3Npbmc6IGVuY291cmFnZSB0aGVtIGFuZCB3aXNoIHRoZW0gbHVjay4iLCJBZHZpY2UgbGFkZGVyIGZvciBhIGZyZWVsb2FkaW5nIHBhcnRuZXI6ICgxKSB0YWxrIHRvIHRoZSBjbGFzc21hdGUgZGlyZWN0bHkgZmlyc3QgLSBjYWxtLCBzcGVjaWZpYywgbm8gYWNjdXNhdGlvbnM7ICgyKSBzcGxpdCB0aGUgcHJvamVjdCBpbnRvIG5hbWVkIHRhc2tzIHdpdGggZGVhZGxpbmVzIGluIHdyaXRpbmc7ICgzKSBpZiBub3RoaW5nIGNoYW5nZXMsIHNob3cgdGhlIHRlYWNoZXIgdGhlIGV2aWRlbmNlIC0gdGhhdCBpcyBmYWlybmVzcywgbm90IHRhdHRsaW5nOyAoNCkgcHJvdGVjdCBoaXMgb3duIGdyYWRlIGFuZCBtZW50YWwgaGVhbHRoIGVpdGhlciB3YXkuIl0sInBocmFzZXMiOlsiSWYgSSB3ZXJlIHlvdSwgSSdkXHUyMDI2IiwiWW91IHNob3VsZCBkZWZpbml0ZWx5XHUyMDI2IiwiQW5vdGhlciBvcHRpb24gaXMgdG9cdTIwMjYiLCJUcnVzdCBtZSwgeW91IHdvbid0IHJlZ3JldCBpdC4iXX0sInM2IjoiQWxleCwgSSB1bmRlcnN0YW5kIHdoeSB5b3UgYXJlIGFuZ3J5IFx1MjAxNCBkb2luZyBhbGwgdGhlIHdvcmsgYWxvbmUgd2hpbGUgeW91ciBwYXJ0bmVyIHJlbGF4ZXMgaXMgcmVhbGx5IHVuZmFpci4gQnV0IGRvIG5vdCBleHBsb2RlIGF0IGhpbSBvciBzaWxlbnRseSBzdWZmZXIuIExldCBtZSBnaXZlIHlvdSBhIHBsYW4uIFN0ZXAgb25lOiB0YWxrIHRvIGhpbSBkaXJlY3RseSwgdG9kYXksIGFuZCBzdGF5IGNhbG0uIE1heWJlIGhlIHRoaW5rcyB5b3UgZW5qb3kgZG9pbmcgZXZlcnl0aGluZywgb3IgbWF5YmUgaGUgaGFzIHByb2JsZW1zIGF0IGhvbWUgdGhhdCB5b3UgZG8gbm90IGtub3cgYWJvdXQuIFNheSBzb21ldGhpbmcgc2ltcGxlOiBJIGNhbm5vdCBmaW5pc2ggdGhpcyBwcm9qZWN0IGFsb25lLiBJIG5lZWQgeW91IHRvIGRvIHlvdXIgcGFydC4gU3RlcCB0d286IGRpdmlkZSB0aGUgcHJvamVjdCBpbnRvIGNsZWFyIHRhc2tzLCBpbiB3cml0aW5nLiBGb3IgZXhhbXBsZTogeW91IGRvIHRoZSByZXNlYXJjaCBwYXJ0LCBJIGRvIHRoZSBwcmVzZW50YXRpb24gc2xpZGVzLCBib3RoIGZpbmlzaGVkIGJ5IEZyaWRheS4gU2VuZCBpdCB0byBoaW0gaW4gYSBtZXNzYWdlLCBzbyBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCBub2JvZHkgY2FuIHNheSBJIGRpZCBub3Qga25vdy4gU3RlcCB0aHJlZTogaWYgaGUgc3RpbGwgZG9lcyBub3RoaW5nIGFmdGVyIHRoaXMsIHRoZW4gZ28gdG8geW91ciB0ZWFjaGVyIFx1MjAxNCBhbmQgc2hvdyBoZXIgdGhlIG1lc3NhZ2VzLiBUaGF0IGlzIG5vdCBiZWluZyBhIHNuaXRjaCwgQWxleC4gVGhlIHRlYWNoZXIgZ2l2ZXMgb25lIGdyYWRlIGZvciB0d28gcGVvcGxlLCBzbyBzaGUgbmVlZHMgdG8ga25vdyB0aGUgdHJ1dGguIE1hbnkgdGVhY2hlcnMgY2FuIGdyYWRlIHlvdSBzZXBhcmF0ZWx5LiBBbmQgc3RlcCBmb3VyOiB3aGF0ZXZlciBoYXBwZW5zLCBwcm90ZWN0IHlvdXIgZ3JhZGUgXHUyMDE0IGZpbmlzaCB0aGUgaW1wb3J0YW50IHBhcnRzLCBiZWNhdXNlIHlvdXIgZnV0dXJlIGlzIHdvcnRoIG1vcmUgdGhhbiB0aGlzIGxhenkgY2xhc3NtYXRlLiBCdXQgc3RhcnQgd2l0aCB0aGUgY2FsbSB0YWxrIGZpcnN0LCBva2F5PyIsInM5IjoiQWxleCwgeW91ciBmcnVzdHJhdGlvbiBpcyBjb21wbGV0ZWx5IGp1c3RpZmllZCBcdTIwMTQgY2FycnlpbmcgYSB0d28tcGVyc29uIHByb2plY3QgYWxvbmUgaXMgb25lIG9mIHNjaG9vbCdzIGNsYXNzaWMgaW5qdXN0aWNlcyBcdTIwMTQgYnV0IGxldCdzIHR1cm4gdGhlIGFuZ2VyIGludG8gYSBzdHJhdGVneSwgYmVjYXVzZSB5b3UgaGF2ZSBtb3JlIHBvd2VyIGhlcmUgdGhhbiB5b3UgdGhpbmsuIFN0ZXAgb25lOiB0aGUgZGlyZWN0IGNvbnZlcnNhdGlvbiwgYW5kIGRvIGl0IGJlZm9yZSB5b3UncmUgYm9pbGluZy4gUHVsbCBoaW0gYXNpZGUsIHN0YXkgZmFjdHVhbCwgc2tpcCB0aGUgYWNjdXNhdGlvbnM6IEkndmUgZG9uZSB0aGUgcmVzZWFyY2gsIHRoZSBvdXRsaW5lIGFuZCB0aGUgZHJhZnQgYWxvbmUuIFRoYXQncyBub3Qgd29ya2luZyBmb3IgbWUuIFdoaWNoIHBhcnRzIGFyZSB5b3UgdGFraW5nPyBQZW9wbGUgZG9kZ2UgdmFndWUgcmVzZW50bWVudCBlYXNpbHksIGJ1dCBhIGRpcmVjdCBxdWVzdGlvbiB3aXRoIGEgZGVhZGxpbmUgaXMgaGFyZCB0byBlc2NhcGUuIEFuZCBsaXN0ZW4gZm9yIGEgbW9tZW50IHRvbyBcdTIwMTQgb2NjYXNpb25hbGx5IHRoZSBzbGFja2VyIHR1cm5zIG91dCB0byBiZSBhIGtpZCBkcm93bmluZyBpbiBwcm9ibGVtcyBhdCBob21lLCB3aGljaCBjaGFuZ2VzIHRoZSBhcHByb2FjaC4gU3RlcCB0d286IHB1dCB0aGUgZGl2aXNpb24gb2YgbGFib3VyIGluIHdyaXRpbmcuIFNwbGl0IHRoZSBwcm9qZWN0IGludG8gbmFtZWQgdGFza3Mgd2l0aCBkYXRlcyBcdTIwMTQgcmVzZWFyY2gsIHNsaWRlcywgYmlibGlvZ3JhcGh5LCByZWhlYXJzYWwgXHUyMDE0IGFuZCBzZW5kIGl0IHRvIGhpbSBieSBtZXNzYWdlIHNvIHRoZXJlJ3MgYSByZWNvcmQuIFRoaXMgZG9lcyB0d28gdGhpbmdzOiBpdCByZW1vdmVzIGV2ZXJ5IGV4Y3VzZSwgYW5kIGl0IHF1aWV0bHkgYnVpbGRzIHlvdXIgZXZpZGVuY2UgZmlsZS4gU3RlcCB0aHJlZTogZ2l2ZSBpdCBhIGZldyBkYXlzLiBJZiBoaXMgcGFydCBzdGlsbCBkb2Vzbid0IG1hdGVyaWFsaXplLCB0YWtlIHRoZSBwYXBlciB0cmFpbCB0byB0aGUgdGVhY2hlciBcdTIwMTQgbm90IGFzIGRyYW1hLCBidXQgYXMgaW5mb3JtYXRpb246IEhlcmUncyB0aGUgcGxhbiB3ZSBhZ3JlZWQgb247IGhlcmUncyB3aGF0IGhhcHBlbmVkLiBUaGF0IGlzbid0IHNuaXRjaGluZywgQWxleDsgZ3JvdXAgZ3JhZGVzIGFyZSBzdXBwb3NlZCB0byBtZWFzdXJlIGdyb3VwIHdvcmssIGFuZCB0ZWFjaGVycyBjYW4ndCBmaXggd2hhdCB0aGV5IGNhbid0IHNlZS4gTW9zdCB3aWxsIGVpdGhlciBpbnRlcnZlbmUgb3IgZ3JhZGUgeW91IHNlcGFyYXRlbHkuIEFuZCBzdGVwIGZvdXIsIHJlZ2FyZGxlc3Mgb2YgZXZlcnl0aGluZzogcHJvdGVjdCB5b3VyIG93biBvdXRjb21lLiBGaW5pc2ggdGhlIHBhcnRzIHRoYXQgZGV0ZXJtaW5lIHRoZSBncmFkZSwgYmVjYXVzZSB0aGUgYmVzdCByZXZlbmdlIG9uIGEgZnJlZWxvYWRlciBpc24ndCBhIHNjZW5lIFx1MjAxNCBpdCdzIHlvdSB3YWxraW5nIGF3YXkgd2l0aCB0aGUgbWFyayB5b3UgZWFybmVkIGFuZCBhIHN0b3J5IGFib3V0IGhhbmRsaW5nIGNvbmZsaWN0IGxpa2UgYW4gYWR1bHQuIFRoYXQgc2tpbGwsIGhvbmVzdGx5LCB3aWxsIG91dGxhc3QgZXZlcnkgc2Nob29sIHByb2plY3QuIn0seyJrIjoidDIiLCJudW0iOjIsInR5cGVFbiI6IlRhbGtpbmcgYWJvdXQgYSBQZXJzb25hbCBFeHBlcmllbmNlIiwicHJlcCI6MzAsInJlYyI6NjAsInByb21wdCI6IlRhbGsgYWJvdXQgYSB0aW1lIHlvdSBwYXJ0aWNpcGF0ZWQgaW4gYSBwcm9ncmFtLiBNYXliZSB5b3UgY2FuIHRhbGsgYWJvdXQgYSB0aW1lIHlvdSBwYXJ0aWNpcGF0ZWQgaW4gYSBsYW5ndWFnZSBwcm9ncmFtLCBhbiBhcnQgd29ya3Nob3AsIG9yIGEgc3VtbWVyIGNhbXAuIFdoYXQgd2FzIHRoZSBwcm9ncmFtLCB3aGF0IGRpZCB5b3UgZG8sIGFuZCB3aHkgZGlkIHlvdSB3YW50IHRvIHBhcnRpY2lwYXRlPyIsImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIkFuc3dlciBldmVyeSBwYXJ0IG9mIHRoZSBxdWVzdGlvbiAod2hhdCBoYXBwZW5lZCBcdTIwMTMgaG93IGl0IHVuZm9sZGVkIFx1MjAxMyB0aGUgb3V0Y29tZSAvIHdoeSBpdCBpcyBtZW1vcmFibGUpLiIsIlVzZSBwYXN0IHRlbnNlcyBhbmQgdGVsbCBpdCBpbiBvcmRlcjogVGhpcyBoYXBwZW5lZFx1MjAyNiBcdTIxOTIgVGhlblx1MjAyNiBcdTIxOTIgSW4gdGhlIGVuZFx1MjAyNiIsIkZpbmlzaCB3aXRoIGEgZmVlbGluZyBvciBhIGxlc3NvbiBsZWFybmVkLiIsIkFuc3dlciB0aGUgdGhyZWUgcGFydHM6IHdoYXQgdGhlIHByb2dyYW0gd2FzIC0gd2hhdCB5b3UgZGlkIGluIGl0IC0gd2h5IHlvdSBqb2luZWQuIEVuZCB3aXRoIHdoYXQgaXQgZ2F2ZSB5b3UgKGEgc2tpbGwsIGNvbmZpZGVuY2UsIGZyaWVuZHMpLiJdLCJwaHJhc2VzIjpbIlRoaXMgaGFwcGVuZWQgYWJvdXQgdHdvIHllYXJzIGFnb1x1MjAyNiIsIkF0IGZpcnN0XHUyMDI2LCBidXQgdGhlblx1MjAyNiIsIldoYXQgbWFkZSBpdCB1bmZvcmdldHRhYmxlIHdhc1x1MjAyNiIsIkxvb2tpbmcgYmFjaywgXHUyMDI2Il19LCJzNiI6Ikkgd2FudCB0byB0YWxrIGFib3V0IGFuIEVuZ2xpc2ggY29udmVyc2F0aW9uIHByb2dyYW0gdGhhdCBJIGpvaW5lZCBhdCB0aGUgY29tbXVuaXR5IGNlbnRyZSwgdHdvIHllYXJzIGFnbywgc29vbiBhZnRlciBJIG1vdmVkIHRvIENhbmFkYS4gVGhlIHByb2dyYW0gd2FzIGZyZWUsIGV2ZXJ5IFR1ZXNkYXkgYW5kIFRodXJzZGF5IGV2ZW5pbmcsIGZvciBuZXdjb21lcnMgd2hvIHdhbnRlZCB0byBwcmFjdGlzZSBzcGVha2luZy4gSSBqb2luZWQgYmVjYXVzZSBteSBFbmdsaXNoIHdhcyBva2F5IG9uIHBhcGVyIFx1MjAxNCBJIGNvdWxkIHJlYWQgYW5kIHdyaXRlIFx1MjAxNCBidXQgc3BlYWtpbmcgbWFkZSBtZSBzbyBuZXJ2b3VzLiBBdCB3b3JrIEkgc3RheWVkIHF1aWV0IGluIGV2ZXJ5IG1lZXRpbmcsIGFuZCBJIGhhdGVkIHRoYXQgZmVlbGluZy4gSW4gdGhlIHByb2dyYW0sIHdlIHNhdCBpbiBzbWFsbCBncm91cHMgb2YgZm91ciBvciBmaXZlIHBlb3BsZSwgd2l0aCBhIHZvbHVudGVlciBsZWFkZXIsIGFuZCBldmVyeSBzZXNzaW9uIGhhZCBhIHRvcGljOiBzaG9wcGluZywgam9iIGludGVydmlld3MsIHNtYWxsIHRhbGsgYWJvdXQgd2VhdGhlciwgQ2FuYWRpYW4gY3VsdHVyZS4gV2UgcGxheWVkIHNwZWFraW5nIGdhbWVzLCBkaWQgcm9sZS1wbGF5cyBcdTIwMTQgb25lIGRheSBJIHdhcyBhIGN1c3RvbWVyIHJldHVybmluZyBicm9rZW4gaGVhZHBob25lcywgYW5kIGV2ZXJ5Ym9keSBsYXVnaGVkIGF0IG15IGFjdGluZyEgU2xvd2x5LCB3ZWVrIGJ5IHdlZWssIG15IGZlYXIgYmVjYW1lIHNtYWxsZXIuIEFmdGVyIHRocmVlIG1vbnRocywgSSBub3RpY2VkIHNvbWV0aGluZyBhbWF6aW5nOiBJIHdhcyBqb2tpbmcgaW4gRW5nbGlzaC4gSSBhbHNvIG1ldCBwZW9wbGUgZnJvbSBtYW55IGNvdW50cmllcyBcdTIwMTQgQnJhemlsLCBJcmFuLCBLb3JlYSBcdTIwMTQgYW5kIHR3byBvZiB0aGVtIGFyZSBzdGlsbCBteSBnb29kIGZyaWVuZHMgdG9kYXkuIFRoYXQgcHJvZ3JhbSBnYXZlIG1lIG1vcmUgdGhhbiBsYW5ndWFnZS4gSXQgZ2F2ZSBtZSBjb25maWRlbmNlIGFuZCBmcmllbmRzLCBhbmQgSSBldmVuIHZvbHVudGVlcmVkIHRoZXJlIG15c2VsZiB0aGUgbmV4dCB5ZWFyLiIsInM5IjoiSSdkIGxpa2UgdG8gdGVsbCB5b3UgYWJvdXQgYSBmcmVlIEVuZ2xpc2ggY29udmVyc2F0aW9uIHByb2dyYW0gYXQgbXkgbG9jYWwgY29tbXVuaXR5IGNlbnRyZSB0aGF0IEkgam9pbmVkIGFib3V0IHR3byB5ZWFycyBhZ28sIHNob3J0bHkgYWZ0ZXIgbW92aW5nIHRvIENhbmFkYSBcdTIwMTQgYSBtb2Rlc3QgbGl0dGxlIHByb2dyYW0gdGhhdCBlbmRlZCB1cCBjaGFuZ2luZyBteSBsaWZlIGhlcmUgbW9yZSB0aGFuIGFueXRoaW5nIGVsc2UgSSBkaWQuIE9uIHBhcGVyLCBteSBFbmdsaXNoIHdhcyBmaW5lOiBJIGNvdWxkIHJlYWQgcmVwb3J0cyBhbmQgd3JpdGUgZW1haWxzLiBCdXQgc3BlYWtpbmcgd2FzIGFub3RoZXIgc3RvcnkgXHUyMDE0IGluIG1lZXRpbmdzIEknZCByZWhlYXJzZSBhIHNlbnRlbmNlIGZpdmUgdGltZXMgaW4gbXkgaGVhZCBhbmQgc3RheSBzaWxlbnQgYW55d2F5LCBhbmQgdGhhdCBnYXAgYmV0d2VlbiB3aGF0IEkga25ldyBhbmQgd2hhdCBJIGNvdWxkIHNheSB3YXMgZWF0aW5nIGF0IG15IGNvbmZpZGVuY2UuIFRoYXQncyBleGFjdGx5IHdoeSBJIHNpZ25lZCB1cC4gVGhlIGZvcm1hdCB3YXMgc2ltcGxlIGFuZCBicmlsbGlhbnQ6IFR1ZXNkYXkgYW5kIFRodXJzZGF5IGV2ZW5pbmdzLCBzbWFsbCB0YWJsZXMgb2YgZm91ciBvciBmaXZlIG5ld2NvbWVycyB3aXRoIGEgdm9sdW50ZWVyIGZhY2lsaXRhdG9yLCBhbmQgYSBwcmFjdGljYWwgdGhlbWUgZWFjaCBzZXNzaW9uIFx1MjAxNCBqb2IgaW50ZXJ2aWV3cywgc21hbGwgdGFsaywgcGhvbmUgY2FsbHMsIHVuZGVyc3RhbmRpbmcgQ2FuYWRpYW4gaHVtb3VyLiBXZSBkaWQgcm9sZS1wbGF5cyBjb25zdGFudGx5OyBJIHN0aWxsIHJlbWVtYmVyIHBsYXlpbmcgYW4gYW5ncnkgY3VzdG9tZXIgcmV0dXJuaW5nIGJyb2tlbiBoZWFkcGhvbmVzLCBoYW1taW5nIGl0IHVwIHdoaWxlIG15IHRhYmxlIGNyaWVkIHdpdGggbGF1Z2h0ZXIuIEFuZCB0aGF0IHdhcyB0aGUgc2VjcmV0IGluZ3JlZGllbnQ6IGl0IHdhcyBhIHJvb20gd2hlcmUgbWlzdGFrZXMgY29zdCBub3RoaW5nLiBOb2JvZHkgZ3JhZGVkIHVzOyBwZW9wbGUgZnJvbSBCcmF6aWwsIElyYW4gYW5kIEtvcmVhIHdlcmUgYWxsIHN0dW1ibGluZyB0b2dldGhlciwgY2hlZXJpbmcgZWFjaCBvdGhlciBvbi4gUHJvZ3Jlc3MgY3JlcHQgdXAgcXVpZXRseSBcdTIwMTQgYXJvdW5kIG1vbnRoIHRocmVlIEkgY2F1Z2h0IG15c2VsZiBtYWtpbmcgYSBzcG9udGFuZW91cyBqb2tlIGluIEVuZ2xpc2ggYW5kIHJlYWxpemVkIHRoZSBmZWFyIGhhZCBzaW1wbHkuLi4gbGVmdC4gVGhlIHByb2dyYW0gZ2F2ZSBtZSBmbHVlbmN5LCB5ZXMsIGJ1dCB0aGUgZGVlcGVyIGdpZnRzIHdlcmUgY29uZmlkZW5jZSBhbmQgY29tbXVuaXR5OiB0d28gb2YgbXkgY2xvc2VzdCBmcmllbmRzIHRvZGF5IGNhbWUgZnJvbSB0aGF0IHRhYmxlLiBUaGUgZm9sbG93aW5nIHllYXIgSSB3ZW50IGJhY2sgYXMgYSB2b2x1bnRlZXIgZmFjaWxpdGF0b3IgbXlzZWxmIFx1MjAxNCB3aGljaCwgSSB0aGluaywgaXMgdGhlIGJlc3QgcmV2aWV3IGEgcHJvZ3JhbSBjYW4gZ2V0LiJ9LHsiayI6InQzIiwibnVtIjozLCJ0eXBlRW4iOiJEZXNjcmliaW5nIGEgU2NlbmUiLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiRGVzY3JpYmUgc29tZSB0aGluZ3MgdGhhdCBhcmUgaGFwcGVuaW5nIGluIHRoZSBwaWN0dXJlIGJlbG93IGFzIHdlbGwgYXMgeW91IGNhbi4gVGhlIHBlcnNvbiB3aXRoIHdob20geW91IGFyZSBzcGVha2luZyBjYW5ub3Qgc2VlIHRoZSBwaWN0dXJlLiIsImltZyI6InNjZW5lIiwidGlwcyI6eyJidWxsZXRzIjpbIkZpcnN0IHNlbnRlbmNlOiBnaXZlIHRoZSBvdmVydmlldyAod2hlcmUgaXQgaXMsIHdoYXQgdGhlIGF0bW9zcGhlcmUgaXMgbGlrZSkuIiwiRGVzY3JpYmUgNFx1MjAxMzYgZGV0YWlscyBieSBsb2NhdGlvbjogaW4gdGhlIGZvcmVncm91bmQgLyBvbiB0aGUgbGVmdCAvIGF0IHRoZSBiYWNrXHUyMDI2OyB1c2UgdGhlIHByZXNlbnQgY29udGludW91cy4iLCJUaGUgbGlzdGVuZXIgQ0FOTk9UIHNlZSB0aGUgcGljdHVyZSBcdTIwMTQgYmUgc3BlY2lmaWM7IHdoZW4gdW5zdXJlLCB1c2Ugc2VlbXMgLyBhcHBlYXJzIC8gbG9va3MgbGlrZS4iLCJBIHNjaG9vbCBzcG9ydHMgZGF5IC8gZmllbGQgZGF5IGluIGZ1bGwgc3dpbmc6IGdvIGluIG9yZGVyIC0gdGhlIHR1Zy1vZi13YXIgaW4gdGhlIGZyb250ICh0d28gdGVhbXMgcHVsbGluZyBhIHJvcGUsIGEgcmVmZXJlZSBpbiBncmV5IHdhdGNoaW5nKSAtPiB0aGUgcmVsYXkgcmFjZSBvbiB0aGUgcGluayB0cmFjayAoYSBnaXJsIGluIG1pZC1qdW1wIG92ZXIgYSBiYXIsIGEgYm95IHdhdmluZyB0aGUgY2hlY2tlcmVkIGZsYWcpIC0+IHRoZSBraWRzIGNsaW1iaW5nIHRoZSBiaWcgcm9ja3Mgb24gdGhlIGxlZnQgLT4gdGhlIGNoZWVybGVhZGVycyB3aXRoIGdyZWVuIHBvbS1wb21zIGF0IHRoZSB0b3AgLT4gdGhlIGR1bmsgdGFuayBvbiB0aGUgcmlnaHQgKGEgbWFuIHNpdHRpbmcgb24gdGhlIHBsYXRmb3JtIGFib3ZlIHRoZSB3YXRlciB0YW5rIHdpdGggYSB0YXJnZXQpIC0+IHRoZSB0ZWFtcyBjaGVlcmluZyBpbiB0aGUgY29ybmVyLiJdLCJwaHJhc2VzIjpbIkluIHRoZSBmb3JlZ3JvdW5kLCBcdTIwMjYiLCJPbiB0aGUgcmlnaHQtaGFuZCBzaWRlLCBcdTIwMjYiLCJJdCBsb29rcyBsaWtlXHUyMDI2IiwiVGhlIHdob2xlIHBsYWNlIGZlZWxzXHUyMDI2Il19LCJzNiI6IlRoaXMgcGljdHVyZSBzaG93cyBhIHNjaG9vbCBzcG9ydHMgZGF5IG9uIGEgZ3JlZW4gZmllbGQsIGFuZCB0aGVyZSBhcmUgc28gbWFueSBhY3Rpdml0aWVzIGhhcHBlbmluZyBhdCB0aGUgc2FtZSB0aW1lLiBJbiB0aGUgZnJvbnQsIHRoZSBiaWdnZXN0IGV2ZW50OiBhIHR1Zy1vZi13YXIuIFR3byB0ZWFtcyBvZiBraWRzIGFyZSBwdWxsaW5nIGEgbG9uZyByb3BlIHdpdGggYWxsIHRoZWlyIHBvd2VyLCBhbmQgYSBtYW4gaW4gYSBncmV5IHNoaXJ0LCB0aGUgcmVmZXJlZSwgaXMgc3RhbmRpbmcgaW4gdGhlIG1pZGRsZSBhbmQgd2F0Y2hpbmcgY2FyZWZ1bGx5LiBCZWhpbmQgdGhlbSwgb24gYSBwaW5rIHJ1bm5pbmcgdHJhY2ssIGNoaWxkcmVuIGFyZSBoYXZpbmcgYSByZWxheSByYWNlIFx1MjAxNCBvbmUgZ2lybCBpcyBqdW1waW5nIGluIHRoZSBhaXIgb3ZlciBhIGJhciwgYW5kIGEgYm95IG5leHQgdG8gaGVyIGlzIHdhdmluZyBhIGJsYWNrIGFuZCB3aGl0ZSBjaGVja2VyZWQgZmxhZy4gT24gdGhlIGxlZnQgc2lkZSwgc29tZSBraWRzIGFyZSBjbGltYmluZyBvbiBiaWcgYnJvd24gcm9ja3MsIGxpa2UgYSBjbGltYmluZyBnYW1lLiBBdCB0aGUgdG9wIG9mIHRoZSBwaWN0dXJlLCBJIGNhbiBzZWUgY2hlZXJsZWFkZXJzIHdpdGggZ3JlZW4gcG9tLXBvbXMsIGRhbmNpbmcgYW5kIHN1cHBvcnRpbmcgdGhlIHRlYW1zLiBBbmQgb24gdGhlIHJpZ2h0IHNpZGUsIHRoZXJlIGlzIHRoZSBmdW5uaWVzdCB0aGluZzogYSBkdW5rIHRhbmshIEEgbWFuIGlzIHNpdHRpbmcgb24gYSBwbGF0Zm9ybSBhYm92ZSBhIGJpZyB0YW5rIG9mIHdhdGVyLCBhbmQgdGhlcmUgaXMgYSByb3VuZCB0YXJnZXQgbmV4dCB0byBpdCBcdTIwMTQgaWYgc29tZWJvZHkgaGl0cyB0aGUgdGFyZ2V0IHdpdGggYSBiYWxsLCB0aGUgbWFuIGZhbGxzIGludG8gdGhlIHdhdGVyLiBBcm91bmQgdGhlIGZpZWxkLCB0ZWFtcyBpbiByZWQgc2hpcnRzIGFuZCBibHVlIHNoaXJ0cyBhcmUgY2hlZXJpbmcgbG91ZGx5LiBFdmVyeW9uZSBpcyBoYXZpbmcgc28gbXVjaCBmdW4uIiwiczkiOiJUaGlzIGlzIGEgc2Nob29sIGZpZWxkIGRheSBpbiBhYnNvbHV0ZWx5IGZ1bGwgc3dpbmcgXHUyMDE0IHRoZSBraW5kIG9mIHBpY3R1cmUgd2hlcmUgZXZlcnkgY29ybmVyIGhhcyBpdHMgb3duIGxpdHRsZSBkcmFtYS4gRnJvbnQgYW5kIGNlbnRyZSBpcyB0aGUgaGVhdnl3ZWlnaHQgZXZlbnQ6IGEgdHVnLW9mLXdhciwgdHdvIHRlYW1zIG9mIGtpZHMgbGVhbmluZyBiYWNrIGF0IGltcG9zc2libGUgYW5nbGVzLCBmYWNlcyBzY3J1bmNoZWQgd2l0aCBlZmZvcnQsIHdoaWxlIGEgcmVmZXJlZSBpbiBncmV5IHN0YW5kcyBvdmVyIHRoZSBtaWRkbGUgb2YgdGhlIHJvcGUgbGlrZSBhIGp1ZGdlIGF0IGEgdGl0bGUgZmlnaHQuIEp1c3QgYmVoaW5kIHRoZW0sIHRoZSBwaW5rIHJ1bm5pbmcgdHJhY2sgaXMgaG9zdGluZyBhIHJlbGF5IHJhY2UsIGFuZCB0aGUgZnJlZXplLWZyYW1lIGNhdWdodCBpdHMgYmVzdCBtb21lbnQ6IG9uZSBnaXJsIGlzIGluIG1pZC1haXIsIGxlYXBpbmcgb3ZlciBhIGJhciB3aXRoIGhlciBwb255dGFpbCBmbHlpbmcsIHdoaWxlIGEgYm95IGJlc2lkZSB0aGUgdHJhY2sgd2F2ZXMgYSBjaGVja2VyZWQgZmxhZyBsaWtlIGl0J3MgdGhlIEdyYW5kIFByaXguIE92ZXIgb24gdGhlIGxlZnQsIGEgY2x1c3RlciBvZiBraWRzIGhhcyB0dXJuZWQgYSBwaWxlIG9mIGJpZyBicm93biBib3VsZGVycyBpbnRvIGEgY2xpbWJpbmcgY2hhbGxlbmdlLCBzY3JhbWJsaW5nIHVwIHdpdGggbW9yZSBlbnRodXNpYXNtIHRoYW4gdGVjaG5pcXVlLiBBbG9uZyB0aGUgdG9wIG9mIHRoZSBzY2VuZSwgYSBzcXVhZCBvZiBjaGVlcmxlYWRlcnMgc2hha2VzIGdyZWVuIHBvbS1wb21zLCBwcm92aWRpbmcgdGhlIHNvdW5kdHJhY2suIEJ1dCB0aGUgc3RhciBhdHRyYWN0aW9uIGlzIG9uIHRoZSByaWdodDogYSBnZW51aW5lIGR1bmsgdGFuayBcdTIwMTQgYSBtYW4gc2l0cyBvbiBhIHBsYXRmb3JtIGFib3ZlIGEgdGFuayBvZiB3YXRlciwgYXJtcyBjcm9zc2VkIHdpdGggdGhlYXRyaWNhbCBjb25maWRlbmNlLCBuZXh0IHRvIGEgcm91bmQgcmVkLWFuZC13aGl0ZSB0YXJnZXQganVzdCB3YWl0aW5nIGZvciBhIHdlbGwtYWltZWQgYmFsbCB0byBlbmQgaGlzIGRpZ25pdHkuIEFuZCBwYWNrZWQgaW50byB0aGUgYm90dG9tIGNvcm5lciwgdGhlIHN1cHBvcnRlcnM6IGtpZHMgaW4gcmVkIHNoaXJ0cyBhbmQgYmx1ZSBzaGlydHMganVtcGluZyBhbmQgY2hlZXJpbmcgZm9yIHRoZWlyIHRlYW1zLiBUaGUgd2hvbGUgZmllbGQgaHVtcyB3aXRoIHRoYXQgc3BlY2lhbCBzcG9ydHMtZGF5IGNoYW9zIFx1MjAxNCBjb21wZXRpdGlvbiwgbGF1Z2h0ZXIgYW5kIHRoZSBjb25zdGFudCB0aHJlYXQgb2Ygc29tZWJvZHkgZ2V0dGluZyB2ZXJ5IHdldC4ifSx7ImsiOiJ0NCIsIm51bSI6NCwidHlwZUVuIjoiTWFraW5nIFByZWRpY3Rpb25zIiwicHJlcCI6MzAsInJlYyI6NjAsInByb21wdCI6IkluIHRoaXMgcGljdHVyZSwgd2hhdCBkbyB5b3UgdGhpbmsgd2lsbCBtb3N0IHByb2JhYmx5IGhhcHBlbiBuZXh0PyIsImltZyI6InNjZW5lIiwidGlwcyI6eyJidWxsZXRzIjpbIkVhY2ggcHJlZGljdGlvbiA9IHdpbGwgLyBiZSBnb2luZyB0byAvIHdpbGwgcHJvYmFibHkgKyBhIFJFQVNPTiBiYXNlZCBvbiBhIGRldGFpbCBpbiB0aGUgcGljdHVyZS4iLCJNYWtlIDNcdTIwMTM0IHByZWRpY3Rpb25zIGFib3V0IGRpZmZlcmVudCBwZW9wbGUgXHUyMDE0IGRvbid0IHN0b3AgYXQgb25lIGlkZWEuIiwiRmluaXNoIHdpdGggb25lIG92ZXJhbGwgcHJlZGljdGlvbiBmb3IgdGhlIHdob2xlIHNjZW5lLiIsIlNhbWUgZmllbGQgZGF5IGFzIFRhc2sgMyAtIG5vdyBwcmVkaWN0OiBvbmUgdHVnLW9mLXdhciB0ZWFtIHdpbGwgY29sbGFwc2UgYmFja3dhcmQgaW4gYSBsYXVnaGluZyBwaWxlLCBzb21lYm9keSB3aWxsIGhpdCB0aGUgdGFyZ2V0IGFuZCBkdW5rIHRoZSBtYW4gaW50byB0aGUgd2F0ZXIsIHRoZSBqdW1waW5nIGdpcmwgd2lsbCBjbGVhciB0aGUgYmFyLCB0aGUgcmVsYXkgd2lsbCBmaW5pc2ggdW5kZXIgdGhlIGNoZWNrZXJlZCBmbGFnLCBhbmQgdGhlIGNoZWVybGVhZGVycyB3aWxsIGNlbGVicmF0ZSB0aGUgd2lubmVycy4iXSwicGhyYXNlcyI6WyJcdTIwMjZpcyBhYm91dCB0b1x1MjAyNiIsIkhlJ2xsIG1vc3QgbGlrZWx5XHUyMDI2IiwiSnVkZ2luZyBieVx1MjAyNiwgSSBleHBlY3RcdTIwMjYiLCJXaXRoaW4gbWludXRlcywgXHUyMDI2Il19LCJzNiI6IkkgdGhpbmsgdGhlIG5leHQgbWludXRlcyBvZiB0aGlzIHNwb3J0cyBkYXkgd2lsbCBiZSBmdWxsIG9mIGFjdGlvbi4gRmlyc3QsIHRoZSB0dWctb2Ytd2FyIG11c3QgZW5kIHNvb24gXHUyMDE0IGJvdGggdGVhbXMgYXJlIHB1bGxpbmcgd2l0aCBtYXhpbXVtIHBvd2VyLCBzbyBvbmUgdGVhbSB3aWxsIHN1ZGRlbmx5IHdpbiwgYW5kIHRoZSBvdGhlciB0ZWFtIHdpbGwgZmFsbCBiYWNrd2FyZCBvbiB0aGUgZ3Jhc3MgaW4gYSBiaWcsIGxhdWdoaW5nIHBpbGUuIFRoZSByZWZlcmVlIHdpbGwgcmFpc2UgaGlzIGhhbmQgYW5kIGFubm91bmNlIHRoZSB3aW5uZXJzLiBTZWNvbmQsIHRoZSBnaXJsIHdobyBpcyBqdW1waW5nIG92ZXIgdGhlIGJhciB3aWxsIGxhbmQgc2FmZWx5LCBhbmQgSSB0aGluayBzaGUgd2lsbCBjbGVhciBpdCBcdTIwMTQgc2hlIGxvb2tzIHN0cm9uZyBhbmQgY29uZmlkZW50LiBUaGUgYm95IHdpbGwgd2F2ZSB0aGUgY2hlY2tlcmVkIGZsYWcgd2hlbiB0aGUgbGFzdCBydW5uZXIgY3Jvc3NlcyB0aGUgbGluZSwgYW5kIG9uZSByZWxheSB0ZWFtIHdpbGwgY2VsZWJyYXRlLiBUaGlyZCwgYW5kIHRoaXMgaXMgd2hhdCBldmVyeW9uZSBpcyB3YWl0aW5nIGZvcjogc29tZWJvZHkgd2lsbCBmaW5hbGx5IGhpdCB0aGUgcm91bmQgdGFyZ2V0IHdpdGggYSBiYWxsLCBhbmQgdGhlIG1hbiBvbiB0aGUgcGxhdGZvcm0gd2lsbCBmYWxsIFx1MjAxNCBzcGxhc2ghIFx1MjAxNCBpbnRvIHRoZSBjb2xkIHdhdGVyLiBUaGUgd2hvbGUgZmllbGQgd2lsbCBsYXVnaCBhbmQgc2NyZWFtLCBhbmQgdGhlbiBhbGwgdGhlIGtpZHMgd2lsbCB3YW50IHRvIHRyeSB0aGUgZHVuayB0YW5rIHRvby4gVGhlIGNoZWVybGVhZGVycyB3aWxsIGRhbmNlIGZvciB0aGUgd2lubmluZyB0ZWFtcywgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGRheSwgdGhlIHRlYWNoZXJzIHdpbGwgZ2l2ZSBzbWFsbCBtZWRhbHMgdG8gZXZlcnlvbmUuIFRoZSBraWRzIHdpbGwgZ28gaG9tZSB0aXJlZCwgZGlydHksIGFuZCBjb21wbGV0ZWx5IGhhcHB5LiIsInM5IjoiRXZlcnkgZXZlbnQgaW4gdGhpcyBwaWN0dXJlIGlzIHNlY29uZHMgYXdheSBmcm9tIGl0cyBjbGltYXgsIHNvIGxldCBtZSBjYWxsIHRoZW0gb25lIGJ5IG9uZS4gVGhlIHR1Zy1vZi13YXIgaXMgYXQgbWF4aW11bSB0ZW5zaW9uLCB3aGljaCBtZWFucyBwaHlzaWNzIHdpbGwgc2V0dGxlIGl0IGFueSBtb21lbnQ6IG9uZSB0ZWFtIHdpbGwgZmluZCBhIGZpbmFsIGJ1cnN0LCB0aGUgb3RoZXIncyBncmlwIHdpbGwgZ2l2ZSwgYW5kIGFuIGVudGlyZSB0ZWFtIG9mIGNoaWxkcmVuIHdpbGwgY29sbGFwc2UgYmFja3dhcmQgaW50byBhIHRhbmdsZWQsIGdpZ2dsaW5nIGhlYXAgb24gdGhlIGdyYXNzIFx1MjAxNCB0aGUgcmVmZXJlZSBpbiBncmV5IHdpbGwgZGVjbGFyZSB2aWN0b3J5IHRvIGEgY2hvcnVzIG9mIHRyaXVtcGhhbnQgc2NyZWFtaW5nLiBPbiB0aGUgdHJhY2ssIHRoZSBqdW1waW5nIGdpcmwgaXMgYXQgdGhlIHRvcCBvZiBoZXIgYXJjIGFuZCwganVkZ2luZyBieSBoZXIgZm9ybSwgc2hlJ2xsIGNsZWFyIHRoZSBiYXIgYW5kIHN0aWNrIHRoZSBsYW5kaW5nIHRvIGFwcGxhdXNlLCB3aGlsZSB0aGUgYm95IHdpdGggdGhlIGNoZWNrZXJlZCBmbGFnIGdldHMgaGlzIGJpZyBtb21lbnQgYXMgdGhlIHJlbGF5J3MgZmluYWwgcnVubmVyIGNvbWVzIHNwcmludGluZyBob21lLiBUaGUgY2xpbWJlcnMgb24gdGhlIHJvY2tzIHdpbGwga2VlcCByYWNpbmcgdG8gdGhlIHRvcCB1bnRpbCBhIHRlYWNoZXIgaW5ldml0YWJseSBzdWdnZXN0cyB0aGV5IGNsaW1iIHNvbWV3aGVyZSBsZXNzIHZlcnRpY2FsLiBCdXQgdGhlIGhlYWRsaW5lIGV2ZW50IGlzIG9idmlvdXNseSB0aGUgZHVuayB0YW5rOiB0aGF0IG1hbidzIGNvbmZpZGVudCBwb3NlIGhhcyBhbiBleHBpcnkgZGF0ZS4gU29tZSBraWQgd2l0aCBhIHN1c3BpY2lvdXNseSBnb29kIHRocm93aW5nIGFybSB3aWxsIHNtYWNrIHRoZSB0YXJnZXQgZGVhZCBjZW50cmUsIHRoZSBwbGF0Zm9ybSB3aWxsIGRyb3AsIGFuZCBcdTIwMTQgc3BsYXNoIFx1MjAxNCBkb3duIGhlIGdvZXMsIHRvIHRoZSBsb3VkZXN0IGNoZWVyIG9mIHRoZSBlbnRpcmUgZGF5LiBBZnRlciB0aGF0LCB0aGVyZSdsbCBiZSBhIGxpbmUgb2YgdHdlbnR5IGNoaWxkcmVuIGFsbCBkZW1hbmRpbmcgYSB0dXJuIHRvIHRocm93LiBUaGUgY2hlZXJsZWFkZXJzIHdpbGwgcG9tLXBvbSB0aGVpciB3YXkgdGhyb3VnaCB0aGUgd2lubmVycycgY2VsZWJyYXRpb25zLCBhbmQgdGhlIGRheSB3aWxsIHdpbmQgZG93biB0aGUgd2F5IGFsbCBncmVhdCBmaWVsZCBkYXlzIGRvOiByaWJib25zIGFuZCBtZWRhbHMsIGdyYXNzIHN0YWlucyBvbiBldmVyeSBrbmVlLCBvbmUgc29ha2luZy13ZXQgYWR1bHQsIGFuZCBhIGJ1c2xvYWQgb2Yga2lkcyBhc2xlZXAgYmVmb3JlIHRoZXkncmUgaGFsZndheSBob21lLiJ9LHsiayI6InQ1IiwibnVtIjo1LCJ0eXBlRW4iOiJDb21wYXJpbmcgYW5kIFBlcnN1YWRpbmciLCJwaGFzZWQiOnRydWUsImNob29zZSI6eyJwcmVwIjo2MCwic2l0dWF0aW9uIjoiWW91IGFuZCB5b3VyIGZyaWVuZCBEYW5pZWwgYXJlIGxvb2tpbmcgZm9yIGEgcGxhY2UgdG8gc2l0IGRvd24gYW5kIGVuam95IGEgZHJpbmsuIFlvdSBmb3VuZCB0d28gc3VpdGFibGUgb3B0aW9ucy4gVXNpbmcgdGhlIHBpY3R1cmVzIGFuZCBpbmZvcm1hdGlvbiBiZWxvdywgY2hvb3NlIHRoZSBvcHRpb24gdGhhdCB5b3UgcHJlZmVyLiBJbiB0aGUgbmV4dCBzZWN0aW9uLCB5b3Ugd2lsbCBuZWVkIHRvIHBlcnN1YWRlIERhbmllbCB0aGF0IHlvdXIgY2hvaWNlIGlzIHRoZSBiZXR0ZXIgY2hvaWNlLiIsIm5vdGUiOiJJZiB5b3UgZG8gbm90IGNob29zZSBhbiBvcHRpb24sIHRoZSBjb21wdXRlciB3aWxsIGNob29zZSBvbmUgZm9yIHlvdS4gWW91IGRvIG5vdCBuZWVkIHRvIHNwZWFrIGZvciB0aGlzIHBhcnQuIiwib3B0aW9ucyI6W3sidGl0bGUiOiJNb2Rlcm4gQ29mZmVlIFNob3AiLCJpbWciOiJvcHRBIiwiYnVsbGV0cyI6WyIkNyBwZXIgY29mZmVlIiwiZnJlZSBpbnRlcm5ldCIsIm1vZGVybiBpbnRlcmlvciB3aXRoIGFpciBjb25kaXRpb25pbmciLCJzcGVjaWFsaXplcyBpbiBjb2ZmZWUsIHN3ZWV0cywgYW5kIGJha2VkIGdvb2RzIl19LHsidGl0bGUiOiJDb3p5IFNtb290aGllIFNob3AiLCJpbWciOiJvcHRCIiwiYnVsbGV0cyI6WyIkNSBwZXIgc21vb3RoaWUiLCJvdXRkb29yIHNlYXRzIGF2YWlsYWJsZSIsImNvenkgYW5kIGZyaWVuZGx5IGF0bW9zcGhlcmUiLCJzcGVjaWFsaXplcyBpbiBhIHZhcmlldHkgb2YgbWl4ZWQgZnJ1aXQgYW5kIHZlZ2V0YWJsZSBkcmlua3MiXX1dfSwic3BlYWsiOnsicHJlcCI6NjAsInJlYyI6NjAsInByb21wdCI6IkRhbmllbCBpcyBzdWdnZXN0aW5nIGEgZGlmZmVyZW50IHBsYWNlIChzaG93biBiZWxvdykuIFBlcnN1YWRlIERhbmllbCB0aGF0IHRoZSBwbGFjZSB5b3UgY2hvc2UgaXMgdGhlIGJldHRlciBjaG9pY2UgYnkgY29tcGFyaW5nIHRoZSB0d28uIiwib3RoZXJMYWJlbCI6IkRhbmllbCdzIENob2ljZSIsIm90aGVyIjp7InRpdGxlIjoiRmFtaWx5IExlbW9uYWRlIFN0YW5kIiwiaW1nIjoib3B0T3RoZXIiLCJidWxsZXRzIjpbImZhc3Qgc2VydmljZSIsIiQzIHBlciBsZW1vbmFkZSIsInVzZXMgZnJlc2gsIG9yZ2FuaWMgbGVtb25zIiwic2lkZXdhbGsgc2VhdHMgYXZhaWxhYmxlIl19fSwidGlwcyI6eyJidWxsZXRzIjpbIlN0cnVjdHVyZTogYWNrbm93bGVkZ2UgdGhlIG90aGVyIHBlcnNvbidzIGNob2ljZSBcdTIxOTIgZ2l2ZSAyXHUyMDEzMyBhZHZhbnRhZ2VzIG9mIHlvdXJzIChkaXJlY3QgY29tcGFyaXNvbikgXHUyMTkyIHdyYXAgdXAuIiwiQ29tcGFyZSB1c2luZyB0aGUgbnVtYmVycyBvbiB0aGUgY2FyZHM6IHByaWNlLCBkdXJhdGlvbiwgY2FwYWNpdHksIGV4cGVyaWVuY2UuIiwiWW91IGRvIE5PVCBuZWVkIHRvIHNwZWFrIGR1cmluZyB0aGUgY2hvb3Npbmcgc3RlcCBcdTIwMTQganVzdCBjbGljayBhbiBvcHRpb24uIiwiVGhlIHNhbXBsZXMgYmVsb3cgY2hvb3NlIHRoZSBDb3p5IFNtb290aGllIFNob3AgKCQ1LCByZWFsIG91dGRvb3Igc2VhdHMsIGh1Z2UgZHJpbmsgdmFyaWV0eSwgcmVsYXhlZCBhdG1vc3BoZXJlIGZvciBhIGxvbmcgY2hhdCkuIERhbmllbCdzIGxlbW9uYWRlIHN0YW5kIGlzIGNoYXJtaW5nIGFuZCBjaGVhcCAoJDMsIG9yZ2FuaWMpIGJ1dCBpdCBpcyBhIGtpZHMnIHNpZGV3YWxrIHN0YW5kIC0gb25lIGRyaW5rIG9uIHRoZSBtZW51IGFuZCBubyByZWFsIHBsYWNlIHRvIHNpdCBhbmQgdGFsay4gSWYgeW91IHByZWZlciB0aGUgY29mZmVlIHNob3AsIHN0cmVzcyB0aGUgYWlyIGNvbmRpdGlvbmluZyBhbmQgZnJlZSBpbnRlcm5ldC4iXSwicGhyYXNlcyI6WyJJIHNlZSB3aHkgeW91IGxpa2VcdTIwMjYsIGJ1dFx1MjAyNiIsIkNvbXBhcmVkIHRvXHUyMDI2LCB0aGlzIG9uZVx1MjAyNiIsIkl0J3MgYmV0dGVyIHZhbHVlOiBcdTIwMjYgdmVyc3VzIFx1MjAyNiIsIklmIHRoZSBnb2FsIGlzXHUyMDI2LCB0aGUgY2hvaWNlIGlzIGNsZWFyLiJdfSwiczYiOiJEYW5pZWwsIHRoZSBsZW1vbmFkZSBzdGFuZCBpcyBhZG9yYWJsZSwgSSBhZ3JlZSBcdTIwMTQgdGhlIGtpZHMgYXJlIHN3ZWV0LCB0aGUgbGVtb25zIGFyZSBvcmdhbmljLCBhbmQgdGhyZWUgZG9sbGFycyBpcyBhIGdyZWF0IHByaWNlLiBCdXQgdGhpbmsgYWJvdXQgd2hhdCB3ZSBhY3R1YWxseSB3YW50IHRvZGF5OiB0byBzaXQgZG93biwgcmVsYXgsIGFuZCB0YWxrIGZvciBhbiBob3VyIG9yIHR3by4gQ2FuIHdlIHJlYWxseSBkbyB0aGF0IGF0IGEgbGVtb25hZGUgc3RhbmQ\/IExvb2sgYXQgaXQgXHUyMDE0IGl0IGlzIGEgd29vZGVuIHRhYmxlIG9uIHRoZSBzaWRld2Fsay4gVGhlIHNlYXRzIGFyZSBqdXN0IHRoZSBzdHJlZXQhIFdlIHdvdWxkIHN0YW5kIHRoZXJlLCBkcmluayBvbmUgc21hbGwgY3VwIGluIGZpdmUgbWludXRlcywgYW5kIHRoZW4gd2hhdD8gQWxzbywgdGhlIG1lbnUgaXMgb25lIGRyaW5rOiBsZW1vbmFkZS4gVGhhdCBpcyBhbGwuIE5vdyBjb21wYXJlIHRoYXQgd2l0aCB0aGUgY296eSBzbW9vdGhpZSBzaG9wLiBGaXJzdCwgaXQgaGFzIHJlYWwgb3V0ZG9vciBzZWF0cywgY29tZm9ydGFibGUgb25lcywgd2hlcmUgd2UgY2FuIHNpdCBpbiB0aGUgc3VuIGFuZCB0YWxrIGFzIGxvbmcgYXMgd2Ugd2FudC4gU2Vjb25kLCB0aGUgbWVudSBoYXMgbWFueSBkaWZmZXJlbnQgZHJpbmtzIFx1MjAxNCBmcnVpdCBzbW9vdGhpZXMsIHZlZ2V0YWJsZSBkcmlua3MsIGV2ZXJ5dGhpbmcgZnJlc2ggXHUyMDE0IHNvIHdlIGJvdGggZmluZCBzb21ldGhpbmcgd2UgbG92ZS4gVGhpcmQsIGl0IGNvc3RzIGZpdmUgZG9sbGFycywgb25seSB0d28gbW9yZSB0aGFuIHRoZSBsZW1vbmFkZSwgYW5kIHRoZSBhdG1vc3BoZXJlIGlzIGZyaWVuZGx5IGFuZCByZWxheGVkLiBJdCBpcyBhIHJlYWwgcGxhY2UgZm9yIGEgcmVhbCBjb252ZXJzYXRpb24uIEhlcmUgaXMgbXkgb2ZmZXI6IHdlIGdvIHRvIHRoZSBzbW9vdGhpZSBzaG9wIG5vdywgYW5kIG9uIHRoZSB3YXkgYmFjaywgd2UgYnV5IG9uZSBsZW1vbmFkZSBmcm9tIHRoZSBraWRzIHRvIHN1cHBvcnQgdGhlbS4gRXZlcnlib2R5IHdpbnMhIFdoYXQgZG8geW91IHNheT8iLCJzOSI6IkRhbmllbCwgSSdsbCBnaXZlIHlvdSB0aGlzOiB0aGUgbGVtb25hZGUgc3RhbmQgaXMgdGhlIG1vc3QgY2hhcm1pbmcgb3B0aW9uIG9uIHRoZSB0YWJsZSBcdTIwMTQgZnJlc2ggb3JnYW5pYyBsZW1vbnMsIHRocmVlIGRvbGxhcnMsIGFkb3JhYmxlIGtpZHMgcnVubmluZyB0aGVpciBmaXJzdCBidXNpbmVzcy4gSWYgd2UganVzdCB3YW50ZWQgYSBxdWljayBkcmluayB0byBnbywgeW91J2Qgd2luLiBCdXQgdGhhdCdzIG5vdCB0b2RheSdzIG1pc3Npb24sIGlzIGl0PyBXZSdyZSBsb29raW5nIGZvciBhIHBsYWNlIHRvIHNpdCBkb3duIGFuZCBhY3R1YWxseSBjYXRjaCB1cCBcdTIwMTQgYW5kIHRoYXQncyB3aGVyZSB0aGUgc21vb3RoaWUgc2hvcCBiZWF0cyB0aGUgc3RhbmQgb24gZXZlcnkgcG9pbnQgdGhhdCBtYXR0ZXJzLiBGaXJzdCwgc2VhdGluZzogdGhlIHNtb290aGllIHNob3AgaGFzIHByb3BlciBvdXRkb29yIHNlYXRzIFx1MjAxNCB0YWJsZXMsIHNoYWRlLCByb29tIHRvIHNldHRsZSBpbiBmb3IgdHdvIGhvdXJzLiBUaGUgbGVtb25hZGUgc3RhbmQgb2ZmZXJzIGEgc3RyZXRjaCBvZiBzaWRld2Fsazsgd2UnZCBiZSBzdGFuZGluZyBvbiB0aGUgY3VyYiBob2xkaW5nIHBhcGVyIGN1cHMsIGRvbmUgaW4gdGVuIG1pbnV0ZXMsIGNvbnZlcnNhdGlvbiBvdmVyIGJlZm9yZSBpdCBzdGFydHMuIFNlY29uZCwgdGhlIG1lbnU6IHRoZSBzdGFuZCBzZWxscyBleGFjdGx5IG9uZSBkcmluay4gVGhlIHNtb290aGllIHNob3Agc3BlY2lhbGl6ZXMgaW4gdmFyaWV0eSBcdTIwMTQgZnJ1aXQgYmxlbmRzLCB2ZWdnaWUgZHJpbmtzLCBzb21ldGhpbmcgZGlmZmVyZW50IGZvciBlYWNoIG9mIHVzLCBtYXliZSBhIHNlY29uZCByb3VuZCBvZiBzb21ldGhpbmcgbmV3LiBUaGlyZCwgYXRtb3NwaGVyZTogdGhlIHdob2xlIHBvaW50IG9mIHRvZGF5IGlzIGEgcmVsYXhlZCwgY296eSBzZXR0aW5nIHdoZXJlIHdlIGNhbiB0YWxrIFx1MjAxNCB0aGF0J3MgbGl0ZXJhbGx5IHRoZSBzaG9wJ3Mgc2lnbmF0dXJlLCBhbmQgaXQncyBvbmx5IHR3byBkb2xsYXJzIG1vcmUgdGhhbiB0aGUgbGVtb25hZGUuIEkgZGlkIGNvbnNpZGVyIHRoZSBjb2ZmZWUgc2hvcCB0b28gXHUyMDE0IHRoZSBhaXIgY29uZGl0aW9uaW5nIGFuZCB3aWZpIGFyZSB0ZW1wdGluZyBcdTIwMTQgYnV0IHNldmVuIGRvbGxhcnMgZm9yIGNvZmZlZSB3aGVuIGl0J3MgdGhpcyBzdW5ueSBvdXRzaWRlPyBUaGUgc21vb3RoaWUgcGF0aW8gd2lucy4gU28gaGVyZSdzIG15IHByb3Bvc2FsLCBhbmQgaXQncyBhIGdvb2Qgb25lOiBzbW9vdGhpZXMgbm93LCBsb25nIG92ZXJkdWUgY29udmVyc2F0aW9uIGluY2x1ZGVkLCBhbmQgb24gdGhlIHdhbGsgYmFjayB3ZSBzdG9wIGF0IHRoZSBraWRzJyBzdGFuZCBhbmQgYnV5IHR3byBsZW1vbmFkZXMgdG8gc3VwcG9ydCB0aGUgeW91bmcgZW50cmVwcmVuZXVycy4gQmVzdCBvZiBib3RoIHdvcmxkcywgYW5kIGV2ZXJ5b25lIGdvZXMgaG9tZSBoYXBweSBcdTIwMTQgZGVhbD8ifSx7ImsiOiJ0NiIsIm51bSI6NiwidHlwZUVuIjoiRGVhbGluZyB3aXRoIGEgRGlmZmljdWx0IFNpdHVhdGlvbiIsInByZXAiOjYwLCJyZWMiOjYwLCJwcm9tcHQiOiJZb3UgaGF2ZSByZWNlbnRseSBzdGFydGVkIGEgbmV3IGpvYi4gQW4gZW1wbG95ZWUgYXQgeW91ciBuZXcgd29ya3BsYWNlIGlzIHJldGlyaW5nIGFuZCBhIGNvbGxlYWd1ZSwgTWluZywgaGFzIGFza2VkIGV2ZXJ5b25lIHRvIGNoaXAgaW4gJDMwIGZvciBhIHJldGlyZW1lbnQgZ2lmdC4gSG93ZXZlciwgeW91IGRvIG5vdCBrbm93IHRoZSBwZXJzb24gd2hvIGlzIHJldGlyaW5nIGFuZCB5b3VyIHNwb3VzZSBiZWxpZXZlcyB0aGF0IHlvdSBzaG91bGQgbm90IHNwZW5kIHRoaXMgbXVjaCBtb25leSBvbiBhIGdpZnQgZm9yIGEgc3RyYW5nZXIuIiwiY2hvb3NlT25lIjpbIlRhbGsgdG8gTWluZy4gRXhwbGFpbiB3aHkgeW91IHNob3VsZCBub3QgaGF2ZSB0byBjaGlwIGluIGFueSBtb25leSBmb3IgYSByZXRpcmVtZW50IGdpZnQuIiwiVGFsayB0byB5b3VyIHNwb3VzZS4gRXhwbGFpbiB3aHkgeW91IHNob3VsZCBjaGlwIGluIHRoZSBtb25leSBmb3IgYSByZXRpcmVtZW50IGdpZnQuIl0sImltZyI6bnVsbCwidGlwcyI6eyJidWxsZXRzIjpbIlBpY2sgT05FIG9wdGlvbiAoRUlUSEVSIG9yIE9SKSBpbW1lZGlhdGVseSBcdTIwMTQgZG9uJ3Qgd2FzdGUgdGltZSBkZWNpZGluZy4iLCJTdHJ1Y3R1cmU6IG9wZW4gcG9saXRlbHkgXHUyMTkyIGV4cGxhaW4geW91ciByZWFzb25zL2V2aWRlbmNlIFx1MjE5MiBwcm9wb3NlIGEgc29sdXRpb24gXHUyMTkyIHNtb290aCB0aGluZ3Mgb3Zlci4iLCJTdGF5IGNhbG0gYW5kIHJlc3BlY3RmdWwgXHUyMDE0IGhvdyB5b3UgaGFuZGxlIHRoZSBzaXR1YXRpb24gaXMgcGFydCBvZiB3aGF0J3MgYmVpbmcgcmF0ZWQgKExpc3RlbmFiaWxpdHkpLiIsIlRoZSBzYW1wbGVzIGNob29zZSBvcHRpb24gMiAocGVyc3VhZGUgeW91ciBzcG91c2UgdG8gY2hpcCBpbikuIEFja25vd2xlZGdlIHRoZSBidWRnZXQgY29uY2VybiBmaXJzdCAtICQzMCBpcyByZWFsIG1vbmV5IGFuZCB0aGUgcmV0aXJlZSBpcyBhIHN0cmFuZ2VyLiBUaGVuIHRoZSByZWFzb25zOiBhcyB0aGUgbmV3ZXN0IGVtcGxveWVlLCBmaXJzdCBpbXByZXNzaW9ucyBzaGFwZSB5b3VyIHdob2xlIHN0YXJ0OyByZWZ1c2luZyBtYXJrcyB5b3UgYXMgc2VwYXJhdGUgZnJvbSB0aGUgdGVhbTsgJDMwIGJ1eXMgYmVsb25naW5nIGFuZCBnb29kd2lsbCB0aGF0IGhlbHBzIHlvdXIgY2FyZWVyIGZhciBiZXlvbmQgaXRzIHByaWNlLiBPZmZlciBhIGNvbXByb21pc2U6IHRyaW0gc29tZXRoaW5nIGVsc2UgZnJvbSB0aGlzIG1vbnRoJ3MgYnVkZ2V0LiJdLCJwaHJhc2VzIjpbIkNvdWxkIEkganVtcCBpbiBmb3IgYSBtb21lbnQ\/IiwiSSB1bmRlcnN0YW5kIHlvdXIgY29uY2VybiwgYnV0XHUyMDI2IiwiSG93IGFib3V0IHdlXHUyMDI2PyIsIkknbGwgdGFrZSByZXNwb25zaWJpbGl0eSBmb3IgdGhpcy4iXX0sInM2IjoiSG9uZXksIEkgdGhvdWdodCBhYm91dCB3aGF0IHlvdSBzYWlkLCBhbmQgeW91IGFyZSByaWdodCBhYm91dCBvbmUgdGhpbmc6IHRoaXJ0eSBkb2xsYXJzIGlzIHJlYWwgbW9uZXksIGFuZCBJIGRvIG5vdCBldmVuIGtub3cgdGhpcyByZXRpcmluZyBtYW4uIFlvdXIgZmVlbGluZyBpcyBmYWlyLiBCdXQgcGxlYXNlIGxldCBtZSBleHBsYWluIHdoeSBJIHN0aWxsIHRoaW5rIEkgc2hvdWxkIHBheS4gRmlyc3QsIHJlbWVtYmVyOiBJIHN0YXJ0ZWQgdGhpcyBqb2IgdGhyZWUgd2Vla3MgYWdvLiBFdmVyeW9uZSBpcyBzdGlsbCBmb3JtaW5nIHRoZWlyIG9waW5pb24gYWJvdXQgbWUuIElmIHRoZSB3aG9sZSBvZmZpY2UgZ2l2ZXMgbW9uZXkgZm9yIHRoZSByZXRpcmVtZW50IGdpZnQgYW5kIG9ubHkgdGhlIG5ldyBwZXJzb24gc2F5cyBubywgd2hhdCB3aWxsIHRoZXkgcmVtZW1iZXIgYWJvdXQgbWU\/IE5vdCBteSBnb29kIHdvcmsgXHUyMDE0IHRoZXkgd2lsbCByZW1lbWJlciB0aGF0IEkgZGlkIG5vdCBqb2luLiBGaXJzdCBpbXByZXNzaW9ucyBhcmUgc28gaW1wb3J0YW50LCBhbmQgdGhpcnR5IGRvbGxhcnMgaXMgYSB2ZXJ5IGNoZWFwIHByaWNlIGZvciBhIGdvb2Qgb25lLiBTZWNvbmQsIHRoaXMgaXMgbm90IHJlYWxseSBhIGdpZnQgZm9yIGEgc3RyYW5nZXIuIEl0IGlzIGEgdHJhZGl0aW9uIG9mIHRoZSB0ZWFtLCBhbmQgam9pbmluZyB0aGUgdHJhZGl0aW9uIG1lYW5zIGpvaW5pbmcgdGhlIHRlYW0uIFRoZXJlIHdpbGwgYmUgYSBwYXJ0eSwgZXZlcnlvbmUgd2lsbCBzaWduIGEgY2FyZCwgYW5kIEkgd2lsbCBtZWV0IHBlb3BsZSwgdGFsaywgYW5kIGJlY29tZSBvbmUgb2YgdGhlbS4gVGhhdCBoZWxwcyBteSBjYXJlZXIgbXVjaCBtb3JlIHRoYW4gdGhpcnR5IGRvbGxhcnMgaW4gdGhlIGJhbmsuIFRoaXJkLCBJIHByb21pc2UgdGhpcyBpcyBub3QgZXZlcnkgbW9udGggXHUyMDE0IHJldGlyZW1lbnQgaGFwcGVucyBvbmNlIGluIG1hbnkgeWVhcnMuIExldCdzIGRvIHRoaXM6IEkgd2lsbCBza2lwIG15IHJlc3RhdXJhbnQgbHVuY2hlcyB0aGlzIHdlZWssIGFuZCB0aGUgdGhpcnR5IGRvbGxhcnMgaXMgY292ZXJlZC4gT2theT8gSSByZWFsbHkgYmVsaWV2ZSB0aGlzIHNtYWxsIG1vbmV5IGJ1eXMgbWUgYSBnb29kIHN0YXJ0IGluIHRoZSBjb21wYW55LiIsInM5IjoiSG9uZXksIEkndmUgYmVlbiB0aGlua2luZyBhYm91dCB0aGUgcmV0aXJlbWVudCBnaWZ0LCBhbmQgSSB3YW50IHRvIHRhbGsgaXQgdGhyb3VnaCwgYmVjYXVzZSB5b3VyIG9iamVjdGlvbiBpcyBnZW51aW5lbHkgcmVhc29uYWJsZTogdGhpcnR5IGRvbGxhcnMsIGZvciBhIG1hbiBJJ3ZlIHNwb2tlbiB0byBtYXliZSB0d2ljZSBcdTIwMTQgb24gYSBzdHJpY3QgYnVkZ2V0IGxvZ2ljLCB5b3UncmUgcmlnaHQuIEJ1dCBJIHRoaW5rIHRoaXMgaXMgb25lIG9mIHRob3NlIGNhc2VzIHdoZXJlIHRoZSBidWRnZXQgbG9naWMgbWlzc2VzIHdoYXQncyBhY3R1YWxseSBiZWluZyBib3VnaHQsIHNvIGhlYXIgbWUgb3V0LiBGaXJzdCwgbXkgcG9zaXRpb246IEkgYW0gdGhlIG5ld2VzdCBwZXJzb24gaW4gdGhhdCBvZmZpY2UuIFRocmVlIHdlZWtzIGluLCBubyB0cmFjayByZWNvcmQsIG5vIGFsbGlhbmNlcyBcdTIwMTQgSSdtIHN0aWxsIGEgc3RyYW5nZXIgYmVpbmcgZXZhbHVhdGVkLiBXaGVuIE1pbmcgY29sbGVjdHMgZm9yIHRoZSBnaWZ0LCB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMgd2lsbCBiZSwgaW4gZWZmZWN0LCBhIGxpc3Qgb2Ygd2hvJ3MgcGFydCBvZiB0aGUgdGVhbS4gSWYgZXZlcnkgbmFtZSBpcyBvbiBpdCBleGNlcHQgdGhlIG5ldyBoaXJlJ3MsIHRoYXQgYmVjb21lcyBteSBpbnRyb2R1Y3Rpb246IHRoZSBvbmUgd2hvIGRpZG4ndCBjaGlwIGluLiBVbmZhaXI\/IE1heWJlLiBCdXQgb2ZmaWNlIHJlcHV0YXRpb25zIGFyZSBidWlsdCBvbiBleGFjdGx5IHN1Y2ggc21hbGwgbW9tZW50cywgYW5kIHRoaXJ0eSBkb2xsYXJzIGlzIGFuIGFic3VyZGx5IGxvdyBwcmljZSB0byBhdm9pZCBhIGxhYmVsIHRoYXQgY291bGQgZm9sbG93IG1lIGZvciB5ZWFycy4gU2Vjb25kLCB0aGUgZGVlcGVyIHBvaW50OiB0aGlzIGlzbid0IHJlYWxseSBhIGdpZnQgZm9yIHRoZSByZXRpcmluZyBnZW50bGVtYW4gXHUyMDE0IGl0J3MgYSByaXR1YWwgb2YgYmVsb25naW5nLiBUaGUgY2FyZCBldmVyeW9uZSBzaWducywgdGhlIGxpdHRsZSBwYXJ0eSwgdGhlIHNoYXJlZCBnZXN0dXJlIFx1MjAxNCB0aGF0J3MgdGhlIHRlYW0gc3RpdGNoaW5nIGl0c2VsZiB0b2dldGhlciwgYW5kIGJlaW5nIHBhcnQgb2YgaXQgbWVhbnMgY2FzdWFsIGNoYXRzLCBiZWluZyBpbmNsdWRlZCwgZmVlbGluZyBsaWtlIGEgY29sbGVhZ3VlIGluc3RlYWQgb2YgYSBndWVzdC4gVGhhdCBnb29kd2lsbCBkaXJlY3RseSBoZWxwcyBteSBwcm9iYXRpb24gcmV2aWV3LCBteSBwcm9qZWN0cywgbXkgd2hvbGUgc3RhcnQgdGhlcmUuIFRoaXJkLCBwZXJzcGVjdGl2ZTogcmV0aXJlbWVudHMgY29tZSBhcm91bmQgb25jZSBldmVyeSBmZXcgeWVhcnMgXHUyMDE0IHRoaXMgaXNuJ3QgYSByZWN1cnJpbmcgdGF4LiBTbyBoZXJlJ3MgbXkgb2ZmZXIgdG8gdGhlIGZhbWlseSBidWRnZXQ6IEknbGwgYnJvd24tYmFnIG15IGx1bmNoZXMgdGhpcyB3ZWVrIGFuZCBza2lwIHRoZSBzdHJlYW1pbmcgdXBncmFkZSB0aGlzIG1vbnRoOyB0aGF0IGNvdmVycyB0aGUgdGhpcnR5IGNvbXBsZXRlbHkuIFdlIGxvc2Ugbm90aGluZywgYW5kIEkgYnV5IHRoZSBjaGVhcGVzdCBjYXJlZXIgaW5zdXJhbmNlIG9uIHRoZSBtYXJrZXQuIERvIHdlIGhhdmUgYSBkZWFsPyJ9LHsiayI6InQ3IiwibnVtIjo3LCJ0eXBlRW4iOiJFeHByZXNzaW5nIE9waW5pb25zIiwicHJlcCI6MzAsInJlYyI6OTAsInByb21wdCI6IkRvIHlvdSB0aGluayBoaWdoIHNjaG9vbCBncmFkdWF0ZXMgc2hvdWxkIHdvcmsgZm9yIGEgd2hpbGUgYmVmb3JlIGdvaW5nIHRvIHVuaXZlcnNpdHk\/IEV4cGxhaW4geW91ciByZWFzb25zLiIsInByb21wdExlYWQiOiJBbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbiBhbmQgZ2l2ZSByZWFzb25zIGZvciB5b3VyIGFuc3dlci4iLCJpbWciOm51bGwsInRpcHMiOnsiYnVsbGV0cyI6WyJTdGF0ZSB5b3VyIHBvc2l0aW9uIGNsZWFybHkgaW4gdGhlIGZpcnN0IHNlbnRlbmNlIChwaWNraW5nIG9uZSBzaWRlIGlzIGVhc2llciB0byBkZXZlbG9wIHRoYW4gc3RheWluZyBuZXV0cmFsKS4iLCJHaXZlIDJcdTIwMTMzIHJlYXNvbnMsIGVhY2ggZGV2ZWxvcGVkIG92ZXIgMlx1MjAxMzMgc2VudGVuY2VzIHdpdGggYW4gZXhhbXBsZTsgOTAgc2Vjb25kcyBpcyBsb25nIFx1MjAxNCBkb24ndCBzdG9wIGVhcmx5LiIsIkFja25vd2xlZGdlIHRoZSBvdGhlciBzaWRlIGluIG9uZSBzZW50ZW5jZSAoVGhhdCBzYWlkLCBcdTIwMjYpIHRoZW4gY29uY2x1ZGUgXHUyMDE0IGl0IHNob3dzIGJhbGFuY2VkIHRoaW5raW5nLiIsIlBpY2sgb25lIHNpZGUgKHRoZSBzYW1wbGVzIGFyZ3VlIFlFUyAtIGEgd29ya2luZyBnYXAgYmVmb3JlIHVuaXZlcnNpdHkgaXMgdmFsdWFibGUgZm9yIG1vc3Qgc3R1ZGVudHMpLiBDb25jcmV0ZSByZWFzb25zOiB3b3JrIGV4cGVyaWVuY2UgY2xhcmlmaWVzIHdoYXQgdG8gc3R1ZHkgKHNhdmluZyB5ZWFycyBvZiBleHBlbnNpdmUgd3JvbmcgbWFqb3JzKSwgZWFybmVkIG1vbmV5IHJlZHVjZXMgc3R1ZGVudCBkZWJ0LCBhbmQgd29ya3BsYWNlIG1hdHVyaXR5IG1ha2VzIGJldHRlciBzdHVkZW50cyAtIHRoZW4gY29uY2VkZSBvbmUgc2VudGVuY2UgYWJvdXQgdGhlIHJpc2sgb2YgbG9zaW5nIG1vbWVudHVtIGFuZCBuZXZlciBnb2luZyBiYWNrLiJdLCJwaHJhc2VzIjpbIklmIEkgaGFkIHRvIGNob29zZSwgSSdkIHNheVx1MjAyNiIsIk15IG1haW4gcmVhc29uIGlzXHUyMDI2IiwiRm9yIGV4YW1wbGUsIFx1MjAyNiIsIlRoYXQgc2FpZCwgXHUyMDI2IiwiQWxsIHRoaW5ncyBjb25zaWRlcmVkLCBcdTIwMjYiXX0sInM2IjoiWWVzLCBJIHRoaW5rIHdvcmtpbmcgZm9yIGEgeWVhciBiZWZvcmUgdW5pdmVyc2l0eSBpcyBhIGdvb2QgaWRlYSBmb3IgbW9zdCBzdHVkZW50cywgYW5kIEkgaGF2ZSB0aHJlZSByZWFzb25zLiBGaXJzdCwgd29yayBoZWxwcyB5b3VuZyBwZW9wbGUgY2hvb3NlIHRoZSByaWdodCBtYWpvci4gQXQgZWlnaHRlZW4sIG1hbnkgc3R1ZGVudHMgcGljayB0aGVpciBzdHVkeSBvbmx5IGJlY2F1c2UgdGhlaXIgcGFyZW50cyBzYWlkIHNvLCBvciBiZWNhdXNlIHRoZWlyIGZyaWVuZHMgY2hvc2UgaXQuIFRoZW4sIGFmdGVyIHR3byBleHBlbnNpdmUgeWVhcnMsIHRoZXkgZGlzY292ZXIgdGhleSBoYXRlIGl0IGFuZCBzdGFydCBhZ2Fpbi4gQnV0IGEgc3R1ZGVudCB3aG8gd29ya2VkIGZvciBhIHllYXIgXHUyMDE0IGV2ZW4gaW4gYSBzaG9wIG9yIGEgcmVzdGF1cmFudCBcdTIwMTQga25vd3MgaGltc2VsZiBiZXR0ZXI6IHdoYXQgaGUgbGlrZXMsIHdoYXQgaGUgaGF0ZXMsIHdoYXQgaGUgaXMgZ29vZCBhdC4gQ2hvb3NpbmcgcmlnaHQgdGhlIGZpcnN0IHRpbWUgc2F2ZXMgeWVhcnMgYW5kIGEgbG90IG9mIG1vbmV5LiBTZWNvbmQsIG1vbmV5LiBVbml2ZXJzaXR5IGlzIHZlcnkgZXhwZW5zaXZlLCBhbmQgbWFueSBzdHVkZW50cyBmaW5pc2ggd2l0aCBodWdlIGRlYnRzLiBPbmUgeWVhciBvZiB3b3JraW5nIG1lYW5zIHJlYWwgc2F2aW5ncywgYW5kIG1heWJlIHNtYWxsZXIgbG9hbnMuIEl0IGFsc28gdGVhY2hlcyBob3cgaGFyZCBtb25leSBpcyB0byBlYXJuLCBzbyB0aGUgc3R1ZGVudCB3aWxsIG5vdCB3YXN0ZSBoaXMgc3R1ZHkgeWVhcnMuIFRoaXJkLCB3b3JrIG1ha2VzIHBlb3BsZSBtYXR1cmUuIEEgbmluZXRlZW4teWVhci1vbGQgd2hvIGhhZCBhIGJvc3MsIGEgc2NoZWR1bGUsIGFuZCBkaWZmaWN1bHQgY3VzdG9tZXJzIGJlY29tZXMgYSBtdWNoIG1vcmUgc2VyaW91cyBzdHVkZW50IHRoYW4gc29tZW9uZSB3aG8gY2FtZSBzdHJhaWdodCBmcm9tIG1vbSdzIGtpdGNoZW4uIE9mIGNvdXJzZSwgdGhlcmUgaXMgb25lIGRhbmdlcjogc29tZSBwZW9wbGUgc3RhcnQgZWFybmluZyBhbmQgbmV2ZXIgcmV0dXJuIHRvIHN0dWR5LiBTbyBteSBhZHZpY2UgaXM6IHRha2UgdGhlIGdhcCB5ZWFyLCBidXQgd2l0aCBhIHBsYW4gYW5kIGEgc3RhcnQgZGF0ZSBmb3IgdW5pdmVyc2l0eS4gVGhlbiBpdCBpcyB0aGUgYmVzdCBkZWNpc2lvbi4iLCJzOSI6IlllcyBcdTIwMTQgZm9yIG1vc3Qgc3R1ZGVudHMsIEkgYmVsaWV2ZSBhIHllYXIgb3IgdHdvIG9mIHdvcmsgYmV0d2VlbiBoaWdoIHNjaG9vbCBhbmQgdW5pdmVyc2l0eSBpcyBnZW51aW5lbHkgdmFsdWFibGUsIGFuZCBJJ2QgZGVmZW5kIHRoYXQgd2l0aCB0aHJlZSBhcmd1bWVudHMuIEZpcnN0LCBjbGFyaXR5LiBBdCBzZXZlbnRlZW4gb3IgZWlnaHRlZW4sIG1vc3QgcGVvcGxlIGNob29zZSB0aGVpciBkZWdyZWUgd2l0aCBhbG1vc3Qgbm8gZGF0YSBhYm91dCB0aGVtc2VsdmVzOiB0aGV5IGZvbGxvdyBwYXJlbnRhbCBwcmVzc3VyZSwgYSBmcmllbmQncyBjaG9pY2UsIG9yIGEgdmFndWUgaW1hZ2UgZnJvbSB0ZWxldmlzaW9uLiBUaGUgcmVzdWx0IGlzIHdlbGwgZG9jdW1lbnRlZCBcdTIwMTQgYSBsYXJnZSBzaGFyZSBvZiBzdHVkZW50cyBzd2l0Y2ggbWFqb3JzIG9yIGRyb3Agb3V0LCBlYWNoIHdyb25nIHR1cm4gY29zdGluZyBhIHllYXIgYW5kIHRob3VzYW5kcyBvZiBkb2xsYXJzLiBFdmVuIHVuZ2xhbW9yb3VzIHdvcmsgXHUyMDE0IHJldGFpbCwgYSB3YXJlaG91c2UsIGFuIG9mZmljZSBqdW5pb3Igcm9sZSBcdTIwMTQgaXMgYSBjcmFzaCBjb3Vyc2UgaW4gc2VsZi1rbm93bGVkZ2U6IHlvdSBkaXNjb3ZlciB3aGV0aGVyIHlvdSBsaWtlIHdvcmtpbmcgd2l0aCBwZW9wbGUgb3Igc3ByZWFkc2hlZXRzLCB3aGV0aGVyIHlvdSBjcmF2ZSBzdHJ1Y3R1cmUgb3IgaW5kZXBlbmRlbmNlLiBTdHVkZW50cyB3aG8gYXJyaXZlIGF0IHVuaXZlcnNpdHkgd2l0aCB0aGF0IGtub3dsZWRnZSBjaG9vc2UgYmV0dGVyIGFuZCBmaW5pc2ggZmFzdGVyLiBTZWNvbmQsIHRoZSBmaW5hbmNpYWwgYXJndW1lbnQ6IHR1aXRpb24gaGFzIG5ldmVyIGJlZW4gaGlnaGVyLCBhbmQgZ3JhZHVhdGluZyB3aXRoIGNydXNoaW5nIGRlYnQgc2hhcGVzIGEgZGVjYWRlIG9mIGxpZmUgY2hvaWNlcy4gQSB3b3JraW5nIHllYXIgYnVpbGRzIHNhdmluZ3MsIHNocmlua3MgZnV0dXJlIGxvYW5zLCBhbmQgXHUyMDE0IGp1c3QgYXMgaW1wb3J0YW50IFx1MjAxNCB0ZWFjaGVzIHRoZSB0cnVlIHByaWNlIG9mIG1vbmV5LCB3aGljaCB0cmFuc2Zvcm1zIGhvdyBzZXJpb3VzbHkgeW91IHRyZWF0IGEgbGVjdHVyZSB5b3UncmUgcGF5aW5nIGZvci4gVGhpcmQsIG1hdHVyaXR5IGNvbXBvdW5kczogc29tZW9uZSB3aG8gaGFzIG1hbmFnZWQgc2hpZnRzLCBkaWZmaWN1bHQgY3VzdG9tZXJzIGFuZCBhIHJlYWwgYm9zcyB3YWxrcyBpbnRvIGZpcnN0LXllYXIgc2VtaW5hcnMgd2l0aCBkaXNjaXBsaW5lIGFuZCBwZXJzcGVjdGl2ZSB0aGF0IHN0cmFpZ2h0LWZyb20tc2Nob29sIGNsYXNzbWF0ZXMgc2ltcGx5IGRvbid0IGhhdmUgeWV0LiBQcm9mZXNzb3JzIHdpbGwgdGVsbCB5b3U6IG1hdHVyZSBzdHVkZW50cyBhcmUgdGhlaXIgYmVzdCBzdHVkZW50cy4gTm93LCB0aGUgaG9uZXN0IGNvbmNlc3Npb246IHRoZSBnYXAgeWVhciBoYXMgYSBmYWlsdXJlIG1vZGUuIE1vbWVudHVtIGlzIHJlYWwsIGFuZCBzb21lIHBlb3BsZSB3aG8gc3RhcnQgZWFybmluZyBuZXZlciBtYWtlIGl0IGJhY2sgdG8gdGhlIGNsYXNzcm9vbSBcdTIwMTQgdGhlIHNhbGFyeSBmZWVscyBnb29kLCBsaWZlIGhhcHBlbnMuIFRoYXQncyB3aHkgbXkgcG9zaXRpb24gaXNuJ3QgZHJpZnQgZm9yIGEgd2hpbGU7IGl0J3MgYSBzdHJ1Y3R1cmVkIGdhcDogYSBkZWZpbmVkIHllYXIgb3IgdHdvLCBzYXZpbmdzIHRhcmdldHMsIGFuZCBhIHVuaXZlcnNpdHkgc3RhcnQgZGF0ZSBhbHJlYWR5IG9uIHRoZSBjYWxlbmRhci4gRG9uZSB0aGF0IHdheSwgd29ya2luZyBmaXJzdCBkb2Vzbid0IGRlbGF5IGFuIGVkdWNhdGlvbiBcdTIwMTQgaXQgZHJhbWF0aWNhbGx5IGltcHJvdmVzIHRoZSByZXR1cm4gb24gaXQuIn0seyJrIjoidDgiLCJudW0iOjgsInR5cGVFbiI6IkRlc2NyaWJpbmcgYW4gVW51c3VhbCBTaXR1YXRpb24iLCJwcmVwIjozMCwicmVjIjo2MCwicHJvbXB0IjoiWW91IGFyZSBhdCBhIGZlc3RpdmFsIGRvd250b3duLCBhbmQgeW91IHNlZSBhbiBpbnRlcmVzdGluZyBwYXJhZGUuIFlvdXIgZnJpZW5kIEdsb3JpYSBsaWtlcyBwYXJhZGVzLiBDYWxsIEdsb3JpYSwgZGVzY3JpYmUgaW4gZGV0YWlsIHdoYXQgdGhlIHBhcmFkZSBsb29rcyBsaWtlLCBhbmQgYXNrIGhlciBpZiBzaGUgd291bGQgbGlrZSB0byBjb21lIGFuZCBzZWUgaXQuIiwiaW1nIjoidW51c3VhbCIsInRpcHMiOnsiYnVsbGV0cyI6WyJUaGlzIGlzIGEgUEhPTkUgQ0FMTDogZ3JlZXQgdGhlIHJpZ2h0IHBlcnNvbiAodGhlIHBvbGljZSAvIHlvdXIgZnJpZW5kKSwgdGhlbiBzYXkgd2hlcmUgeW91IGFyZS4iLCJEZXNjcmliZSBmcm9tIGdlbmVyYWwgdG8gc3BlY2lmaWM7IHRoZSBwaWN0dXJlIGlzIG1lYW50IHRvIGJlIHN0cmFuZ2UgXHUyMDE0IGp1c3QgZGVzY3JpYmUgd2hhdCB5b3Ugc2VlLCB1c2luZyAnSXQgbG9va3MgbGlrZSAvIGFzIGlmXHUyMDI2Jy4iLCJFbmQgd2l0aCBhIHJlcXVlc3QgZm9yIGFjdGlvbiAoc2VuZCBhIHBhdHJvbCAvIGFzayB3aGVyZSB0byBidXkpLiIsIlRoaXMgaXMgYSBwaG9uZSBjYWxsIHRvIEdsb3JpYS4gS2V5IGRldGFpbHM6IGFuIEFsaWNlLWluLVdvbmRlcmxhbmQgbmlnaHQgcGFyYWRlIC0gYSBiaWcgZ3JlZW4gZmxvYXQgZGVjb3JhdGVkIHdpdGggcGxheWluZy1jYXJkIGhlYXJ0cyBhbmQgc3BhZGVzLCB0b3BwZWQgYnkgYSBnaWFudCByZWQgcm9zZSBhbmQgYSB0ZWFwb3QgcG91cmluZyB0ZWEsIGEgd2hpdGUgcmFiYml0IGhvbGRpbmcgYSB0ZWFjdXAgYW5kIGEgTWFkIEhhdHRlciBpbiBhIHRhbGwgYmx1ZSBoYXQsIGEgaHVnZSBjYWtlLCBhIHBlcnNvbiBkcmVzc2VkIGFzIGEgcGxheWluZyBjYXJkIG1hcmNoaW5nIGJlc2lkZSBpdCwgYSBnaWFudCBtb3VzZSB3aXRoIGEgcHVycGxlIGJvdywgYW5kIEFsaWNlIGluIGhlciBibHVlIGRyZXNzIHdhdmluZyBhdCB0aGUgZnJvbnQgLSBhbGwgdW5kZXIgc3RyaW5ncyBvZiBnbG93aW5nIGxhbnRlcm5zIGF0IGR1c2suIEVuZCBieSBpbnZpdGluZyBHbG9yaWEgdG8gY29tZSBxdWlja2x5LiJdLCJwaHJhc2VzIjpbIkknbSBjYWxsaW5nIHRvIHJlcG9ydFx1MjAyNiIsIlBpY3R1cmUgdGhpczogXHUyMDI2IiwiSXQgbG9va3MgYXMgaWZcdTIwMjYiLCJDb3VsZCB5b3Ugc2VuZFx1MjAyNiAvIERvIHlvdSBrbm93IHdoZXJlXHUyMDI2PyJdfSwiczYiOiJHbG9yaWEsIGhpISBRdWljaywgbGlzdGVuIFx1MjAxNCBJIGFtIGRvd250b3duIGF0IHRoZSBmZXN0aXZhbCwgYW5kIHRoZXJlIGlzIGEgcGFyYWRlIHJpZ2h0IG5vdyB0aGF0IHlvdSB3aWxsIGFic29sdXRlbHkgbG92ZS4gSXQgbG9va3MgbGlrZSBBbGljZSBpbiBXb25kZXJsYW5kIGNhbWUgdG8gbGlmZSEgTGV0IG1lIGRlc2NyaWJlIGl0LiBUaGUgbWFpbiBmbG9hdCBpcyBodWdlIGFuZCBncmVlbiwgZGVjb3JhdGVkIHdpdGggcGxheWluZyBjYXJkIHN5bWJvbHMgXHUyMDE0IHJlZCBoZWFydHMgYW5kIGJsYWNrIHNwYWRlcy4gT24gdG9wIG9mIHRoZSBmbG9hdCwgdGhlcmUgaXMgYSBnaWFudCByZWQgcm9zZSwgYXMgYmlnIGFzIGEgY2FyLCBhbmQgYSBiaWcgdGVhcG90IHRoYXQgaXMgcG91cmluZyB0ZWEhIE5leHQgdG8gdGhlIHRlYXBvdCwgSSBjYW4gc2VlIGEgd2hpdGUgcmFiYml0IGhvbGRpbmcgYSB0ZWFjdXAsIGFuZCB0aGUgTWFkIEhhdHRlciB3aXRoIGhpcyB0YWxsIGJsdWUgaGF0LiBUaGVyZSBpcyBhbHNvIGEgaHVnZSB3aGl0ZSBjYWtlIHdpdGggYSBjaGVycnkgb24gdG9wLiBBbmQgdGhlIGNoYXJhY3RlcnMgYXJlIHdhbGtpbmcgd2l0aCB0aGUgZmxvYXQgdG9vOiBhIHBlcnNvbiBkcmVzc2VkIGFzIGEgcGxheWluZyBjYXJkIFx1MjAxNCBmbGF0IGxpa2UgYSByZWFsIGNhcmQsIHdpdGggYSBiaWcgcmVkIGhlYXJ0IFx1MjAxNCBpcyBtYXJjaGluZyBvbiB0aGUgbGVmdCwgYW5kIG9uIHRoZSByaWdodCwgdGhlcmUgaXMgYSBnaWFudCBncmV5IG1vdXNlIHdpdGggYSBwdXJwbGUgYm93LCB3YXZpbmcgdG8gdGhlIGNoaWxkcmVuLiBJbiB0aGUgZnJvbnQsIGEgZ2lybCBkcmVzc2VkIGFzIEFsaWNlLCBpbiBoZXIgYmx1ZSBkcmVzcyBhbmQgd2hpdGUgYXByb24sIGlzIHdhdmluZyB0byBldmVyeWJvZHkuIEFib3ZlIHRoZSB3aG9sZSBzdHJlZXQsIHN0cmluZ3Mgb2YgY29sb3VyZnVsIGxhbnRlcm5zIGFyZSBnbG93aW5nIFx1MjAxNCB5ZWxsb3csIHBpbmssIGdyZWVuIFx1MjAxNCBiZWNhdXNlIGl0IGlzIGdldHRpbmcgZGFyaywgYW5kIGV2ZXJ5dGhpbmcgbG9va3MgbWFnaWNhbC4gR2xvcmlhLCB5b3UgbG92ZSBwYXJhZGVzLCBhbmQgdGhpcyBpcyB0aGUgbW9zdCBiZWF1dGlmdWwgb25lIEkgaGF2ZSBldmVyIHNlZW4uIENhbiB5b3UgY29tZSByaWdodCBub3c\/IEl0IG1vdmVzIHNsb3dseSwgc28gaWYgeW91IGh1cnJ5LCB5b3Ugd2lsbCBjYXRjaCBpdCBuZWFyIHRoZSBtYWluIHNxdWFyZSEiLCJzOSI6Ikdsb3JpYSwgZHJvcCBldmVyeXRoaW5nIFx1MjAxNCBJJ20gZG93bnRvd24gYXQgdGhlIGZlc3RpdmFsLCBhbmQgdGhlcmUgaXMgYSBwYXJhZGUgZ29pbmcgcGFzdCBtZSByaWdodCBub3cgdGhhdCB3YXMgcHJhY3RpY2FsbHkgZGVzaWduZWQgZm9yIHlvdS4gSXQncyBhIGZ1bGwgQWxpY2UgaW4gV29uZGVybGFuZCBuaWdodCBwYXJhZGUsIGFuZCBpdCBpcyBzcGVjdGFjdWxhci4gTGV0IG1lIHBhaW50IGl0IGZvciB5b3UuIFRoZSBjZW50cmVwaWVjZSBpcyBhIGh1Z2UgZ3JlZW4gZmxvYXQsIGl0cyBzaWRlcyBkZWNvcmF0ZWQgd2l0aCBwbGF5aW5nLWNhcmQgc3ltYm9scyBcdTIwMTQgcmVkIGhlYXJ0cywgYmxhY2sgc3BhZGVzIFx1MjAxNCBsaWtlIHRoZSBRdWVlbiBvZiBIZWFydHMnIGdhcmRlbiBvbiB3aGVlbHMuIEFuZCB0aGUgdG9wIG9mIHRoZSBmbG9hdCBpcyBwdXJlIE1hZCBIYXR0ZXIncyB0ZWEgcGFydHk6IGEgZ2lhbnQgcmVkIHJvc2UgdGhlIHNpemUgb2YgYSBzbWFsbCBjYXIgYmxvb21pbmcgaW4gdGhlIG1pZGRsZSwgYSBtYXNzaXZlIHRlYXBvdCB0aXBwZWQgbWlkLXBvdXIsIHRoZSBXaGl0ZSBSYWJiaXQgXHUyMDE0IGVhcnMsIHdhaXN0Y29hdCBhbmQgYWxsIFx1MjAxNCBjbHV0Y2hpbmcgYSB0ZWFjdXAsIGFuZCB0aGUgTWFkIEhhdHRlciBoaW1zZWxmIGdyaW5uaW5nIHVuZGVyIGEgdGFsbCBibHVlIHRvcCBoYXQuIFRoZXJlJ3MgZXZlbiBhbiBlbm9ybW91cyB3aGl0ZSBjYWtlIHdpdGggd2hhdCBsb29rcyBsaWtlIGEgY2hlcnJ5IG9uIHRvcCwgcGx1cyB0d2lzdGluZyBncmVlbiB2aW5lcyB3cmFwcGluZyBhcm91bmQgZXZlcnl0aGluZy4gVGhlIHdhbGtpbmcgY2hhcmFjdGVycyBtaWdodCBiZSBldmVuIGJldHRlcjogYSBwZXJmb3JtZXIgZHJlc3NlZCBhcyBhbiBhY3R1YWwgcGxheWluZyBjYXJkIFx1MjAxNCBjb21wbGV0ZWx5IGZsYXQsIHBhaW50ZWQgd2l0aCBhIGJpZyByZWQgaGVhcnQgXHUyMDE0IGlzIG1hcmNoaW5nIGJlc2lkZSB0aGUgZmxvYXQgd2l0aCBhIHN0YWZmLCBhbmQgb24gdGhlIG90aGVyIHNpZGUgdGhlcmUncyBhIGdpYW50IGdyZXkgbW91c2Ugd2l0aCBhIHB1cnBsZSBib3cgYXJvdW5kIGl0cyBuZWNrLCBoaWdoLWZpdmluZyBjaGlsZHJlbiBhbG9uZyB0aGUgcm91dGUuIExlYWRpbmcgaXQgYWxsIGlzIEFsaWNlIGhlcnNlbGYsIGJsdWUgZHJlc3MsIHdoaXRlIGFwcm9uLCBibG9uZGUgaGFpciwgd2F2aW5nIHRvIHRoZSBjcm93ZC4gQW5kIHRoZSBzZXR0aW5nIG1ha2VzIGl0IG1hZ2ljOiBkdXNrIGlzIGZhbGxpbmcsIHRoZSBtb3VudGFpbnMgYmVoaW5kIHRoZSBzdHJlZXQgaGF2ZSBnb25lIHB1cnBsZSwgYW5kIHN0cmluZ3Mgb2YgZ2xvd2luZyBsYW50ZXJucyBcdTIwMTQgeWVsbG93LCBwaW5rLCBncmVlbiwgYmx1ZSBcdTIwMTQgY3Jpc3MtY3Jvc3MgYWJvdmUgdGhlIHBhcmFkZSBsaWtlIGZsb2F0aW5nIGNhbmR5LiBHbG9yaWEsIGluIGFsbCB0aGUgeWVhcnMgSSd2ZSBrbm93biB5b3UgYW5kIHlvdXIgcGFyYWRlIG9ic2Vzc2lvbiwgdGhpcyBpcyBUSEUgb25lLiBJdCdzIG1vdmluZyBzbG93bHkgdG93YXJkIHRoZSBtYWluIHNxdWFyZSBcdTIwMTQgaWYgeW91IGp1bXAgb24geW91ciBiaWtlIHJpZ2h0IG5vdywgeW91J2xsIGNhdGNoIHRoZSB3aG9sZSB0aGluZy4gU2hhbGwgSSBzYXZlIHlvdSBhIHNwb3QgYXQgdGhlIGNvcm5lcj8gSHVycnkhIn1dLCJ1aSI6eyJzdGFydFRlc3QiOiJTdGFydCB0aGUgdGVzdCIsIm1pY0VuYWJsZSI6IkVuYWJsZSBtaWNyb3Bob25lIiwibWljUmVhZHkiOiJNaWNyb3Bob25lIHJlYWR5IiwibWljQmxvY2tlZCI6Ik1pY3JvcGhvbmUgaXMgYmxvY2tlZCBvciB1bmF2YWlsYWJsZSBcdTIwMTQgdGhlIHBhZ2Ugd2lsbCBydW4gaW4gdGltZXItb25seSBtb2RlICh5b3UgY2FuIHN0aWxsIHByYWN0aXNlIHNwZWFraW5nIGFsb25nIHdpdGggdGhlIHRpbWVycykuIiwibWljTm90ZSI6IlJlY29yZGluZ3MgYXJlIHN0b3JlZCB0ZW1wb3JhcmlseSBpbiB5b3VyIGJyb3dzZXIgb25seSBcdTIwMTQgbm90aGluZyBpcyB1cGxvYWRlZCB0byBhbnkgc2VydmVyLiBUaGV5IGFyZSBsb3N0IHdoZW4geW91IGNsb3NlIHRoZSBwYWdlLCBzbyBkb3dubG9hZCBhbnkgeW91IHdhbnQgdG8ga2VlcC4iLCJwcmVwVGl0bGUiOiJQcmVwYXJhdGlvbiBUaW1lIiwicmVjVGl0bGUiOiJSZWNvcmRpbmciLCJzdGFydFByZXAiOiJcdTI1YjYgU3RhcnQgcHJlcGFyYXRpb24iLCJza2lwUHJlcCI6IlNraXAgXHUyMDE0IHJlY29yZCBub3cgXHUwMGJiIiwic3RvcFJlYyI6Ilx1MjVhMCBTdG9wIHJlY29yZGluZyIsInJlY29yZGVkIjoiUmVjb3JkZWQiLCJyZVJlY29yZCI6Ilx1MjFiYiBSZWNvcmQgYWdhaW4iLCJkb3dubG9hZCI6Ilx1MmIwNyBEb3dubG9hZCIsInRpbWVyT25seSI6IlRpbWVyLW9ubHkgbW9kZSAobm90IHJlY29yZGluZykiLCJzcGVha05vdyI6IlNQRUFLIE5PVyBcdTIwMTQgcmVjb3JkaW5nIHN0b3BzIGF1dG9tYXRpY2FsbHkgd2hlbiB0aW1lIGlzIHVwIiwibmV4dCI6Ik5FWFQiLCJjaG9vc2VIaW50IjoiQ2xpY2sgdG8gY2hvb3NlIG9uZSBvcHRpb24gXHUyMDE0IGlmIHRoZSA2MCBzZWNvbmRzIHJ1biBvdXQsIHRoZSBzeXN0ZW0gY2hvb3NlcyBmb3IgeW91IiwiY29uZmlybUNob2ljZSI6IkNvbmZpcm0gY2hvaWNlICYgY29udGludWUgXHUwMGJiIiwieW91ckNob2ljZSI6IllvdXIgQ2hvaWNlIiwidGlwc1RvZ2dsZSI6Ilx1ZDgzZFx1ZGNhMSBUaXBzICYgc2FtcGxlIGFuc3dlcnMgKG9wZW4gYWZ0ZXIgeW91IGZpbmlzaCBzcGVha2luZykiLCJ0YWJUaXBzIjoiT3V0bGluZSAmIHBocmFzZXMiLCJ0YWJTNiI6IlNhbXBsZSBDTEIgNiIsInRhYlM5IjoiU2FtcGxlIENMQiA5IiwidGFiUnVicmljIjoiU2VsZi1hc3Nlc3NtZW50IiwicnVicmljTm90ZSI6Ikxpc3RlbiB0byB5b3VyIHJlY29yZGluZywgdGhlbiByYXRlIHlvdXJzZWxmIDFcdTIwMTM1IG9uIGVhY2ggY3JpdGVyaW9uICh0aGUgNCBvZmZpY2lhbCBDRUxQSVAgcmF0aW5nIGRpbWVuc2lvbnMpOiIsInJ1YnJpY0NyaXQiOlsiQ29udGVudCAmIENvaGVyZW5jZSBcdTIwMTQgY29tcGxldGUgaWRlYXMsIGxvZ2ljYWwgZmxvdyIsIlZvY2FidWxhcnkgXHUyMDE0IHJhbmdlIGFuZCBwcmVjaXNpb24iLCJMaXN0ZW5hYmlsaXR5IFx1MjAxNCBwcm9udW5jaWF0aW9uLCBpbnRvbmF0aW9uLCBmbHVlbmN5IiwiVGFzayBGdWxmaWxsbWVudCBcdTIwMTQgYWRkcmVzc2VzIHRoZSB0YXNrLCBhcHByb3ByaWF0ZSBsZW5ndGgiXSwiZXN0aW1hdGUiOiJFc3RpbWF0ZWQgbGV2ZWwgKGZvciByZWZlcmVuY2UpOiIsImVzdERpc2NsYWltZXIiOiJTZWxmLWFzc2Vzc21lbnQgaXMgYSByb3VnaCBndWlkZSBvbmx5IFx1MjAxNCBpdCBkb2VzIG5vdCByZXBsYWNlIGFuIG9mZmljaWFsIHNjb3JlLiIsInVzZWZ1bFBocmFzZXMiOiJVc2VmdWwgcGhyYXNlcyIsImVuZFRpdGxlIjoiU3BlYWtpbmcgdGVzdCBjb21wbGV0ZSEiLCJlbmRTdWIiOiJSZXBsYXkgZWFjaCB0YXNrLCBjb21wYXJlIHlvdXIgYW5zd2VycyB3aXRoIHRoZSBDTEIgNiAvIENMQiA5IHNhbXBsZXMsIHRoZW4gcmF0ZSB5b3Vyc2VsZi4iLCJlbmROb1JlYyI6Im5vdCByZWNvcmRlZCIsImVuZFJlZG8iOiJcdTIxYmIgU3RhcnQgb3ZlciIsImVuZFQyIjoiQ29udGludWUgdG8gUHJhY3RpY2UgVGVzdCIsImVuZEh1YiI6Ilx1MjE5MCBCYWNrIHRvIENFTFBJUCBIdWIiLCJ3YXJtdXBCYWRnZSI6Ildhcm0tdXAgXHUyMDE0IG5vdCBzY29yZWQiLCJpbnRyb05vdGVzIjpbIkFuIGFjY3VyYXRlIHNpbXVsYXRpb24gb2YgdGhlIHJlYWwgQ0VMUElQIEdlbmVyYWwgU3BlYWtpbmcgdGVzdDogMSBwcmFjdGljZSAod2FybS11cCkgdGFzayArIDggc2NvcmVkIHRhc2tzLCBhYm91dCAyMCBtaW51dGVzIGluIHRvdGFsLiIsIkVhY2ggdGFzazogcmVhZCB0aGUgcHJvbXB0IFx1MjE5MiA8Yj5QcmVwYXJhdGlvbjwvYj4gY291bnRkb3duIFx1MjE5MiBzd2l0Y2hlcyBhdXRvbWF0aWNhbGx5IHRvIDxiPlJlY29yZGluZzwvYj4gKHdpdGggYSBiZWVwKSBcdTIxOTIgc3RvcHMgd2hlbiB0aW1lIGlzIHVwLiIsIk9uIHRoZSByZWFsIHRlc3QgeW91IGNhbm5vdCBnbyBiYWNrIHRvIGEgcHJldmlvdXMgdGFzay4gSW4gcHJhY3RpY2UgbW9kZSwgeW91IGNhbiBjbGljayB0aGUgbnVtYmVyZWQgY2hpcHMgYWJvdmUgdG8gcmV2aXNpdCBhbnkgdGFzay4iLCJBZnRlciBzcGVha2luZyBvbiBlYWNoIHRhc2ssIG9wZW4gPGI+VGlwcyAmIHNhbXBsZSBhbnN3ZXJzPC9iPiB0byBjb21wYXJlIHlvdXIgcmVzcG9uc2Ugd2l0aCB0aGUgQ0xCIDYgYW5kIENMQiA5IHNhbXBsZXMuIl0sImhlcm9UYWciOiJDRUxQSVAgR2VuZXJhbCBcdTIwMTQgU3BlYWtpbmciLCJoZXJvTWV0YSI6WyI4IHRhc2tzICsgd2FybS11cCIsIn4yMCBtaW51dGVzIiwiUmVjb3JkICYgcmVwbGF5IiwiQ0xCIDYgLyBDTEIgOSBzYW1wbGVzIl19fTsKLyogQ0VMUElQIFNwZWFraW5nIEVuZ2luZSB2MS4wIC0gQWxsRW5nbGlzaDRVIC0gdmFuaWxsYSBKUywgcHJlZml4IGNscC1zcGsgKi8KKGZ1bmN0aW9uKCl7CiJ1c2Ugc3RyaWN0IjsKdmFyIEQgPSB3aW5kb3cuQ0xQU1BLX0RBVEEsIFUgPSBELnVpOwp2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHAtc3BrLXJvb3QiKTsKaWYoIXJvb3QpIHJldHVybjsKCi8qIC0tLS0tLS0tLS0gc3R5bGUgLS0tLS0tLS0tLSAqLwp2YXIgQ1NTID0gIiIrCiIuY2xwLXNway13cmFwe21heC13aWR0aDoxMTQwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjAgMTRweCA2MHB4O2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLEFyaWFsLHNhbnMtc2VyaWY7Y29sb3I6IzIzMjcyZDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfSIrCiIuY2xwLXNway13cmFwICp7Ym94LXNpemluZzpib3JkZXItYm94fSIrCiIuY2xwLXNway1oZXJve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjN2YxZDFkIDAlLCNiOTFjMWMgNTUlLCNkYzI2MjYgMTAwJSk7Ym9yZGVyLXJhZGl1czoxOHB4O2NvbG9yOiNmZmY7cGFkZGluZzozMHB4IDMwcHggMjZweDttYXJnaW46MThweCAwIDIwcHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufSIrCiIuY2xwLXNway1oZXJvOmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTYwcHg7dG9wOi02MHB4O3dpZHRoOjIyMHB4O2hlaWdodDoyMjBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA4KX0iKwoiLmNscC1zcGstaGVybyAudGFne2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTYpO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMzUpO3BhZGRpbmc6M3B4IDEycHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTIuNXB4O2xldHRlci1zcGFjaW5nOi42cHg7Zm9udC13ZWlnaHQ6NjAwfSIrCiIuY2xwLXNway1oZXJvIGgxe21hcmdpbjoxMHB4IDAgNnB4O2ZvbnQtc2l6ZToyN3B4O2xpbmUtaGVpZ2h0OjEuMjU7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstaGVybyAubWV0YXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tdG9wOjEycHh9IisKIi5jbHAtc3BrLWhlcm8gLm1ldGEgc3BhbntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIyKTtwYWRkaW5nOjRweCAxMnB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjEyLjVweH0iKwoiLmNscC1zcGstY2hpcHN7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo3cHg7bWFyZ2luOjAgMCAxNHB4fSIrCiIuY2xwLXNway1jaGlwe21pbi13aWR0aDozOHB4O2hlaWdodDozNHB4O2JvcmRlci1yYWRpdXM6OXB4O2JvcmRlcjoxLjVweCBzb2xpZCAjZDNkOGRmO2JhY2tncm91bmQ6I2ZmZjtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzLjVweDtjb2xvcjojNWI2NTcyO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MCAxMHB4fSIrCiIuY2xwLXNway1jaGlwLmN1cntiYWNrZ3JvdW5kOiMwYjU3ZDA7Ym9yZGVyLWNvbG9yOiMwYjU3ZDA7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstY2hpcC5kb25le2JhY2tncm91bmQ6I2U2ZjRlYTtib3JkZXItY29sb3I6IzdiYzM5NDtjb2xvcjojMWU3YjNlfSIrCiIuY2xwLXNway1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZDlkZGUzO2JvcmRlci1yYWRpdXM6MTJweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDJweCAxMHB4IHJnYmEoMzAsNDAsNjAsLjA2KX0iKwoiLmNscC1zcGstYmFye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7YmFja2dyb3VuZDojZWNlY2VlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkNWQ1ZDg7cGFkZGluZzo5cHggMTRweDtmbGV4LXdyYXA6d3JhcH0iKwoiLmNscC1zcGstYmFyIC50e2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTQuNXB4O2NvbG9yOiMzYzQwNDZ9IisKIi5jbHAtc3BrLWJhciAubXttYXJnaW4tbGVmdDphdXRvO2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6IzU1NTt3aGl0ZS1zcGFjZTpub3dyYXB9IisKIi5jbHAtc3BrLWJhciAubSBie2NvbG9yOiMyMzI3MmR9IisKIi5jbHAtc3BrLW5leHR7YmFja2dyb3VuZDojMTQ2N2M2O2NvbG9yOiNmZmY7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMi41cHg7bGV0dGVyLXNwYWNpbmc6LjhweDtwYWRkaW5nOjdweCAxOHB4O2N1cnNvcjpwb2ludGVyfSIrCiIuY2xwLXNway1uZXh0OmhvdmVye2JhY2tncm91bmQ6IzBmNTdhYn0iKwoiLmNscC1zcGstYm9keXtwYWRkaW5nOjE4cHggMjBweCAyMnB4fSIrCiIuY2xwLXNway1wcm9tcHR7ZGlzcGxheTpmbGV4O2dhcDo5cHg7Y29sb3I6IzBiNTM5NDtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE1LjVweDtsaW5lLWhlaWdodDoxLjV9IisKIi5jbHAtc3BrLXByb21wdCAuaXtmbGV4OjAgMCBhdXRvO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojMmM3Y2IwO2NvbG9yOiNmZmY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6ODAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjJweH0iKwoiLmNscC1zcGstbGVhZHtjb2xvcjojMGI1Mzk0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjRweH0iKwoiLmNscC1zcGstY2hvb3NlMXttYXJnaW46MTRweCAwIDA7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDojZjVmN2ZhO2JvcmRlcjoxcHggc29saWQgI2RmZTRlYTtib3JkZXItcmFkaXVzOjlweDtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNTV9IisKIi5jbHAtc3BrLWNob29zZTEgLmV7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiM4YTFmMWY7bGV0dGVyLXNwYWNpbmc6LjRweH0iKwoiLmNscC1zcGstaW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjU0MHB4O3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjY2ZkNGRhO2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbjoxNnB4IDAgNHB4fSIrCiIuY2xwLXNway1ub3Rle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4YTkyOWM7bWFyZ2luLXRvcDo2cHh9IisKIi5jbHAtc3BrLXRpbWVycm93e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDAgNnB4fSIrCiIuY2xwLXNway10aW1lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O2JhY2tncm91bmQ6I2U5ZWNlZjtib3JkZXI6MXB4IHNvbGlkICNkNmRhZGU7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTZweCAyNnB4O21pbi13aWR0aDozMDBweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSIrCiIuY2xwLXNway10aW1lciAuaWN7d2lkdGg6NDRweDtoZWlnaHQ6NDRweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiNmOGY5ZmE7Ym9yZGVyOjFweCBzb2xpZCAjZDZkYWRlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MjJweH0iKwoiLmNscC1zcGstdGltZXIgLmxie2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMzMzODNmO2ZvbnQtc2l6ZToxNXB4fSIrCiIuY2xwLXNway10aW1lciAubntmb250LXNpemU6MjZweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzBiNTdkMDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7bWluLXdpZHRoOjUycHg7dGV4dC1hbGlnbjpjZW50ZXJ9IisKIi5jbHAtc3BrLXRpbWVyLnJlY3tiYWNrZ3JvdW5kOiNmZGVjZWI7Ym9yZGVyLWNvbG9yOiNmM2I2YjN9IisKIi5jbHAtc3BrLXRpbWVyLnJlYyAubntjb2xvcjojYzYyODI4fSIrCiIuY2xwLXNway10aW1lci5yZWMgLmlje2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6I2YzYjZiM30iKwoiLmNscC1zcGstZG90e3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZTUzOTM1O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2FuaW1hdGlvbjpjbHBibGluayAxcyBpbmZpbml0ZX0iKwoiQGtleWZyYW1lcyBjbHBibGlua3swJSwxMDAle29wYWNpdHk6MX01MCV7b3BhY2l0eTouMjV9fSIrCiIuY2xwLXNway1jdHJ7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC13cmFwOndyYXA7bWFyZ2luOjE0cHggMCAycHh9IisKIi5jbHAtc3BrLWJ0bntib3JkZXI6MS41cHggc29saWQgI2M5Y2ZkNjtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzMzMzgzZjtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjlweCAxOHB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTMuNXB4O2N1cnNvcjpwb2ludGVyfSIrCiIuY2xwLXNway1idG46aG92ZXJ7Ym9yZGVyLWNvbG9yOiM5YWEzYWR9IisKIi5jbHAtc3BrLWJ0bi5wcml7YmFja2dyb3VuZDojMGI1N2QwO2JvcmRlci1jb2xvcjojMGI1N2QwO2NvbG9yOiNmZmZ9IisKIi5jbHAtc3BrLWJ0bi5wcmk6aG92ZXJ7YmFja2dyb3VuZDojMGE0Y2I1fSIrCiIuY2xwLXNway1idG4ud2FybntiYWNrZ3JvdW5kOiNjNjI4Mjg7Ym9yZGVyLWNvbG9yOiNjNjI4Mjg7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstc3BlYWtub3d7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2M2MjgyODtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDo4cHg7bGV0dGVyLXNwYWNpbmc6LjNweH0iKwoiLmNscC1zcGstcmV2aWV3e21hcmdpbjoxNnB4IGF1dG8gMDttYXgtd2lkdGg6NjQwcHg7YmFja2dyb3VuZDojZjJmOWYzO2JvcmRlcjoxcHggc29saWQgI2JmZTNjNjtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4IDE4cHh9IisKIi5jbHAtc3BrLXJldmlldyAub2t7Y29sb3I6IzFlN2IzZTtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0LjVweH0iKwoiLmNscC1zcGstcmV2aWV3IGF1ZGlve3dpZHRoOjEwMCU7bWFyZ2luOjEwcHggMCA4cHh9IisKIi5jbHAtc3BrLW1pY3ttYXJnaW46MTJweCBhdXRvIDA7bWF4LXdpZHRoOjY0MHB4O2JhY2tncm91bmQ6I2ZmZjhlNjtib3JkZXI6MXB4IHNvbGlkICNlY2Q5YTA7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTBweCAxNnB4O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOiM3YTViMTJ9IisKIi5jbHAtc3BrLW9wdHN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNnB4O21hcmdpbjoxOHB4IDAgNHB4fSIrCiIuY2xwLXNway1jYXJke2JvcmRlcjoycHggc29saWQgI2Q1ZGFlMDtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxM3B4IDE1cHggMTVweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNmZmY7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE1c30iKwoiLmNscC1zcGstY2FyZDpob3Zlcntib3JkZXItY29sb3I6IzhmYjRlOH0iKwoiLmNscC1zcGstY2FyZC5zZWx7Ym9yZGVyLWNvbG9yOiMyZTllNGY7YmFja2dyb3VuZDojZWVmOWYwfSIrCiIuY2xwLXNway1jYXJkLnBsYWlue2N1cnNvcjpkZWZhdWx0fSIrCiIuY2xwLXNway1jYXJkIC5oZHt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTIuNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNmI3NDgwO2xldHRlci1zcGFjaW5nOi4zcHg7bWFyZ2luLWJvdHRvbTo4cHh9IisKIi5jbHAtc3BrLWNhcmQgaW1ne3dpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo3cHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlNmVhfSIrCiIuY2xwLXNway1jYXJkIC50dHtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE1cHg7bWFyZ2luOjEwcHggMCA2cHg7Y29sb3I6IzIzMjcyZH0iKwoiLmNscC1zcGstY2FyZCB1bHttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MThweDtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6IzNjNDM0Yn0iKwoiLmNscC1zcGstY2FyZCAucGlja3ttYXJnaW4tdG9wOjEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiMyZTllNGY7Zm9udC1zaXplOjEzcHg7bWluLWhlaWdodDoxOHB4fSIrCiIuY2xwLXNway1oaW50e3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM2Yjc0ODA7Zm9udC1zaXplOjEzcHg7bWFyZ2luLXRvcDoxMHB4fSIrCiIuY2xwLXNway1hY2N7bWFyZ2luLXRvcDoyMnB4O2JvcmRlcjoxcHggc29saWQgI2Q5ZGRlMztib3JkZXItcmFkaXVzOjExcHg7b3ZlcmZsb3c6aGlkZGVufSIrCiIuY2xwLXNway1hY2M+YnV0dG9ue3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQ6I2Y2ZjdmOTtib3JkZXI6MDtwYWRkaW5nOjEycHggMTZweDtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzNjNDA0NjtjdXJzb3I6cG9pbnRlcn0iKwoiLmNscC1zcGstYWNjYm9keXtkaXNwbGF5Om5vbmU7cGFkZGluZzoxNHB4IDE2cHggMThweDtiYWNrZ3JvdW5kOiNmZmZ9IisKIi5jbHAtc3BrLWFjYy5vcGVuIC5jbHAtc3BrLWFjY2JvZHl7ZGlzcGxheTpibG9ja30iKwoiLmNscC1zcGstdGFic3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEycHh9IisKIi5jbHAtc3BrLXRhYntib3JkZXI6MS41cHggc29saWQgI2M5Y2ZkNjtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjZweCAxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTIuNXB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM0YTUyNWN9IisKIi5jbHAtc3BrLXRhYi5vbntiYWNrZ3JvdW5kOiMwYjU3ZDA7Ym9yZGVyLWNvbG9yOiMwYjU3ZDA7Y29sb3I6I2ZmZn0iKwoiLmNscC1zcGstdGFicGFuZXtkaXNwbGF5Om5vbmU7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjY1fSIrCiIuY2xwLXNway10YWJwYW5lLm9ue2Rpc3BsYXk6YmxvY2t9IisKIi5jbHAtc3BrLXRhYnBhbmUgdWx7cGFkZGluZy1sZWZ0OjIwcHg7bWFyZ2luOjhweCAwfSIrCiIuY2xwLXNway10YWJwYW5lIGxpe21hcmdpbjo1cHggMH0iKwoiLmNscC1zcGstc2FtcGxle2JhY2tncm91bmQ6I2Y4ZjlmYjtib3JkZXI6MXB4IHNvbGlkICNlM2U3ZWM7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICMwYjU3ZDA7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxM3B4IDE2cHg7d2hpdGUtc3BhY2U6cHJlLXdyYXB9IisKIi5jbHAtc3BrLXNhbXBsZS5zNntib3JkZXItbGVmdC1jb2xvcjojZThhMTNjfSIrCiIuY2xwLXNway1waHJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2dhcDo3cHg7bWFyZ2luLXRvcDoxMHB4fSIrCiIuY2xwLXNway1waHIgc3BhbntiYWNrZ3JvdW5kOiNlZWYzZmI7Ym9yZGVyOjFweCBzb2xpZCAjY2RkZGY1O2NvbG9yOiMxNzRhOWM7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjRweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwfSIrCiIuY2xwLXNway1ydWJ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO3dpZHRoOjEwMCU7Zm9udC1zaXplOjEzLjVweH0iKwoiLmNscC1zcGstcnViIHRke3BhZGRpbmc6N3B4IDZweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVmMGYzfSIrCiIuY2xwLXNway1zdGFye2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxOXB4O2NvbG9yOiNjOWNmZDY7cGFkZGluZzowIDFweDt1c2VyLXNlbGVjdDpub25lfSIrCiIuY2xwLXNway1zdGFyLm9ue2NvbG9yOiNmMGE3MWJ9IisKIi5jbHAtc3BrLWVzdHttYXJnaW4tdG9wOjEwcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZTdiM2V9IisKIi5jbHAtc3BrLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6I2ZmZjNjZDtib3JkZXI6MXB4IHNvbGlkICNlOGQ0OGI7Y29sb3I6IzdhNWIxMjtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAxMnB4O21hcmdpbi1ib3R0b206MTBweH0iKwoiLmNscC1zcGstaW50cm8gdWx7Zm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjc7cGFkZGluZy1sZWZ0OjIwcHh9IisKIi5jbHAtc3BrLWludHJvIGxpe21hcmdpbjo3cHggMH0iKwoiLmNscC1zcGstbWljcm93e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHg7ZmxleC13cmFwOndyYXA7YmFja2dyb3VuZDojZjZmN2Y5O2JvcmRlcjoxcHggc29saWQgI2UwZTRlOTtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxM3B4IDE2cHg7bWFyZ2luOjE2cHggMH0iKwoiLmNscC1zcGstbWljc3R7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMy41cHh9IisKIi5jbHAtc3BrLW1pY3N0Lm9re2NvbG9yOiMxZTdiM2V9LmNscC1zcGstbWljc3QuYmFke2NvbG9yOiNjNjI4Mjh9IisKIi5jbHAtc3BrLWVuZCB0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJTtmb250LXNpemU6MTRweH0iKwoiLmNscC1zcGstZW5kIHRkLC5jbHAtc3BrLWVuZCB0aHtwYWRkaW5nOjlweCA4cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VjZWZmMjt0ZXh0LWFsaWduOmxlZnR9IisKIi5jbHAtc3BrLWVuZCBhdWRpb3toZWlnaHQ6MzRweDttYXgtd2lkdGg6MjMwcHh9IisKIkBtZWRpYShtYXgtd2lkdGg6NzAwcHgpey5jbHAtc3BrLW9wdHN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0uY2xwLXNway1iYXIgLm17b3JkZXI6MzttYXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LmNscC1zcGstaGVybyBoMXtmb250LXNpemU6MjJweH0uY2xwLXNway1ib2R5e3BhZGRpbmc6MTRweCAxMnB4IDE4cHh9fSI7CnZhciBzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7IHN0LnRleHRDb250ZW50ID0gQ1NTOyBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0KTsKCi8qIC0tLS0tLS0tLS0gc3RhdGUgLS0tLS0tLS0tLSAqLwp2YXIgUyA9IHsKICBjdXI6IC0xLCAgICAgICAgICAgIC8qIC0xIGludHJvLCAwLi44IHRhc2tzLCA5OSBlbmQgKi8KICBtaWNTdGF0ZTogImlkbGUiLCAgIC8qIGlkbGV8b2t8YmFkICovCiAgc3RyZWFtOiBudWxsLCByZWNvcmRlcjogbnVsbCwgY2h1bmtzOiBbXSwKICB0aW1lcjogbnVsbCwgcGhhc2U6IHt9LCB0NWNob2ljZToge30sIHJlY3M6IHt9LCBydWJyaWM6IHt9LAogIG1pbWU6ICIiLCBleHQ6ICJ3ZWJtIgp9OwpELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7IFMucGhhc2VbdC5rXSA9IHQucGhhc2VkID8gImNob29zZS1pZGxlIiA6ICJpZGxlIjsgfSk7CgpmdW5jdGlvbiBwaWNrTWltZSgpewogIGlmKCF3aW5kb3cuTWVkaWFSZWNvcmRlcikgcmV0dXJuIG51bGw7CiAgdmFyIGNhbmRzID0gW1siYXVkaW8vd2VibTtjb2RlY3M9b3B1cyIsIndlYm0iXSxbImF1ZGlvL3dlYm0iLCJ3ZWJtIl0sWyJhdWRpby9tcDQiLCJtNGEiXSxbImF1ZGlvL29nZztjb2RlY3M9b3B1cyIsIm9nZyJdXTsKICBmb3IodmFyIGk9MDtpPGNhbmRzLmxlbmd0aDtpKyspeyB0cnl7IGlmKE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKGNhbmRzW2ldWzBdKSkgcmV0dXJuIGNhbmRzW2ldOyB9Y2F0Y2goZSl7fSB9CiAgcmV0dXJuIFsiIiwid2VibSJdOwp9CmZ1bmN0aW9uIGVuc3VyZU1pYyhjYil7CiAgaWYoUy5taWNTdGF0ZT09PSJvayIpIHJldHVybiBjYih0cnVlKTsKICBpZihTLm1pY1N0YXRlPT09ImJhZCIpIHJldHVybiBjYihmYWxzZSk7CiAgaWYoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhIHx8ICF3aW5kb3cuTWVkaWFSZWNvcmRlcil7IFMubWljU3RhdGU9ImJhZCI7IHJldHVybiBjYihmYWxzZSk7IH0KICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7YXVkaW86dHJ1ZX0pLnRoZW4oZnVuY3Rpb24oc3RyZWFtKXsKICAgIFMuc3RyZWFtID0gc3RyZWFtOyB2YXIgbSA9IHBpY2tNaW1lKCk7IFMubWltZSA9IG1bMF07IFMuZXh0ID0gbVsxXTsgUy5taWNTdGF0ZT0ib2siOyBjYih0cnVlKTsKICB9KS5jYXRjaChmdW5jdGlvbigpeyBTLm1pY1N0YXRlPSJiYWQiOyBjYihmYWxzZSk7IH0pOwp9CmZ1bmN0aW9uIGJlZXAobil7CiAgdHJ5ewogICAgdmFyIGN0eCA9IHdpbmRvdy5fX2NscEFDID0gd2luZG93Ll9fY2xwQUMgfHwgbmV3ICh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpOwogICAgdmFyIHQwID0gY3R4LmN1cnJlbnRUaW1lOwogICAgZm9yKHZhciBpPTA7aTxuO2krKyl7CiAgICAgIHZhciBvID0gY3R4LmNyZWF0ZU9zY2lsbGF0b3IoKSwgZyA9IGN0eC5jcmVhdGVHYWluKCk7CiAgICAgIG8uZnJlcXVlbmN5LnZhbHVlID0gODgwOyBvLmNvbm5lY3QoZyk7IGcuY29ubmVjdChjdHguZGVzdGluYXRpb24pOwogICAgICBnLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC4wMDAxLHQwK2kqMC4yNSk7IGcuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMTgsdDAraSowLjI1KzAuMDIpOwogICAgICBnLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAwMDEsdDAraSowLjI1KzAuMTgpOwogICAgICBvLnN0YXJ0KHQwK2kqMC4yNSk7IG8uc3RvcCh0MCtpKjAuMjUrMC4yKTsKICAgIH0KICB9Y2F0Y2goZSl7fQp9CmZ1bmN0aW9uIHN0b3BUaW1lcigpeyBpZihTLnRpbWVyKXsgY2xlYXJJbnRlcnZhbChTLnRpbWVyKTsgUy50aW1lcj1udWxsOyB9IH0KZnVuY3Rpb24gY291bnRkb3duKHNlY3MsIG9uVGljaywgb25FbmQpewogIHN0b3BUaW1lcigpOwogIHZhciBlbmQgPSBEYXRlLm5vdygpICsgc2VjcyoxMDAwOwogIG9uVGljayhzZWNzKTsKICBTLnRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgIHZhciBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoZW5kLURhdGUubm93KCkpLzEwMDApKTsKICAgIG9uVGljayhsZWZ0KTsKICAgIGlmKGxlZnQ8PTApeyBzdG9wVGltZXIoKTsgb25FbmQoKTsgfQogIH0sIDI1MCk7Cn0KZnVuY3Rpb24gc3RvcFJlY29yZGluZygpewogIGlmKFMucmVjb3JkZXIgJiYgUy5yZWNvcmRlci5zdGF0ZSE9PSJpbmFjdGl2ZSIpeyB0cnl7IFMucmVjb3JkZXIuc3RvcCgpOyB9Y2F0Y2goZSl7fSB9CiAgUy5yZWNvcmRlciA9IG51bGw7Cn0KZnVuY3Rpb24gbGVhdmVDbGVhbnVwKCl7IHN0b3BUaW1lcigpOyBzdG9wUmVjb3JkaW5nKCk7IH0KCi8qIC0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIGVsKHRhZywgY2xzLCBodG1sKXsgdmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOyBpZihjbHMpZS5jbGFzc05hbWU9Y2xzOyBpZihodG1sIT1udWxsKWUuaW5uZXJIVE1MPWh0bWw7IHJldHVybiBlOyB9CmZ1bmN0aW9uIGZtdE1ldGEodCl7CiAgaWYodC5waGFzZWQpIHJldHVybiAiIjsKICByZXR1cm4gIlByZXBhcmF0aW9uOiA8Yj4iK3QucHJlcCsiIHNlY29uZHM8L2I+ICZuYnNwO1JlY29yZGluZzogPGI+Iit0LnJlYysiIHNlY29uZHM8L2I+IjsKfQpmdW5jdGlvbiB0YXNrVGl0bGUodCl7CiAgaWYodC53YXJtdXApIHJldHVybiBELmhlYWRlcisiIC0gU3BlYWtpbmcgUHJhY3RpY2UgVGFzayI7CiAgcmV0dXJuIEQuaGVhZGVyKyIgLSBTcGVha2luZyBUYXNrICIrdC5udW0rIjogIit0LnR5cGVFbjsKfQpmdW5jdGlvbiBlc3RUZXh0KGF2Zyl7CiAgaWYoYXZnPj00LjUpIHJldHVybiAiQ0xCIDkrIjsgaWYoYXZnPj0zLjUpIHJldHVybiAiQ0xCIDdcdTIwMTM4IjsgaWYoYXZnPj0yLjUpIHJldHVybiAiQ0xCIDVcdTIwMTM2IjsgcmV0dXJuICJDTEIgNCBvciBiZWxvdyI7Cn0KCi8qIC0tLS0tLS0tLS0gcmVuZGVyIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gcmVuZGVyKCl7CiAgbGVhdmVDbGVhbnVwKCk7CiAgcm9vdC5pbm5lckhUTUwgPSAiIjsKICB2YXIgd3JhcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXdyYXAiKTsKICB3cmFwLmFwcGVuZENoaWxkKGhlcm8oKSk7CiAgaWYoUy5jdXI+PTAgJiYgUy5jdXI8RC50YXNrcy5sZW5ndGgpIHdyYXAuYXBwZW5kQ2hpbGQoY2hpcHMoKSk7CiAgaWYoUy5jdXI9PT0tMSkgd3JhcC5hcHBlbmRDaGlsZChpbnRybygpKTsKICBlbHNlIGlmKFMuY3VyPT09OTkpIHdyYXAuYXBwZW5kQ2hpbGQoZW5kU2NyZWVuKCkpOwogIGVsc2Ugd3JhcC5hcHBlbmRDaGlsZCh0YXNrUGFuZWwoRC50YXNrc1tTLmN1cl0pKTsKICByb290LmFwcGVuZENoaWxkKHdyYXApOwogIHRyeXsgd2luZG93LnNjcm9sbFRvKHt0b3A6IHJvb3Qub2Zmc2V0VG9wLTEwLCBiZWhhdmlvcjoic21vb3RoIn0pOyB9Y2F0Y2goZSl7fQp9CmZ1bmN0aW9uIGhlcm8oKXsKICB2YXIgaCA9IGVsKCJkaXYiLCJjbHAtc3BrLWhlcm8iKTsKICBoLmFwcGVuZENoaWxkKGVsKCJzcGFuIiwidGFnIixVLmhlcm9UYWcpKTsKICBoLmFwcGVuZENoaWxkKGVsKCJoMSIsbnVsbCxELnRpdGxlLnNwbGl0KCJcdTIwMTQiKVsxXSA\/ICJTcGVha2luZyBcdTIwMTQiK0QudGl0bGUuc3BsaXQoIlx1MjAxNCIpWzFdIDogRC50aXRsZSkpOwogIHZhciBtID0gZWwoImRpdiIsIm1ldGEiKTsKICBVLmhlcm9NZXRhLmZvckVhY2goZnVuY3Rpb24oeCl7IG0uYXBwZW5kQ2hpbGQoZWwoInNwYW4iLG51bGwseCkpOyB9KTsKICBoLmFwcGVuZENoaWxkKG0pOwogIHJldHVybiBoOwp9CmZ1bmN0aW9uIGNoaXBzKCl7CiAgdmFyIGMgPSBlbCgiZGl2IiwiY2xwLXNway1jaGlwcyIpOwogIEQudGFza3MuZm9yRWFjaChmdW5jdGlvbih0LGkpewogICAgdmFyIGIgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1jaGlwIisoaT09PVMuY3VyPyIgY3VyIjooUy5yZWNzW3Qua10\/IiBkb25lIjoiIikpLCB0Lndhcm11cD8iVyI6U3RyaW5nKHQubnVtKSk7CiAgICBiLnRpdGxlID0gdC50eXBlRW47CiAgICBiLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBTLmN1cj1pOyByZW5kZXIoKTsgfTsKICAgIGMuYXBwZW5kQ2hpbGQoYik7CiAgfSk7CiAgdmFyIGUgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1jaGlwIisoUy5jdXI9PT05OT8iIGN1ciI6IiIpLCJcdWQ4M2NcdWRmYzEiKTsKICBlLnRpdGxlID0gIkZpbmlzaCI7IGUub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyPTk5OyByZW5kZXIoKTsgfTsKICBjLmFwcGVuZENoaWxkKGUpOwogIHJldHVybiBjOwp9CmZ1bmN0aW9uIGludHJvKCl7CiAgdmFyIHAgPSBlbCgiZGl2IiwiY2xwLXNway1wYW5lbCBjbHAtc3BrLWludHJvIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLEQuaGVhZGVyKyIgLSBTcGVha2luZyIpKTsKICB2YXIgbnggPSBlbCgiYnV0dG9uIiwiY2xwLXNway1uZXh0IixVLm5leHQpOyBueC5zdHlsZS5tYXJnaW5MZWZ0PSJhdXRvIjsKICBueC5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9MDsgcmVuZGVyKCk7IH07CiAgYmFyLmFwcGVuZENoaWxkKG54KTsKICBwLmFwcGVuZENoaWxkKGJhcik7CiAgdmFyIGIgPSBlbCgiZGl2IiwiY2xwLXNway1ib2R5Iik7CiAgdmFyIHByID0gZWwoImRpdiIsImNscC1zcGstcHJvbXB0Iik7CiAgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLCJpIiwiaSIpKTsgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLG51bGwsIlNwZWFraW5nIFRlc3QgSW5zdHJ1Y3Rpb25zIikpOwogIGIuYXBwZW5kQ2hpbGQocHIpOwogIHZhciB1bCA9IGVsKCJ1bCIpOwogIFUuaW50cm9Ob3Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB1bC5hcHBlbmRDaGlsZChlbCgibGkiLG51bGwseCkpOyB9KTsKICBiLmFwcGVuZENoaWxkKHVsKTsKICB2YXIgbWljcm93ID0gZWwoImRpdiIsImNscC1zcGstbWljcm93Iik7CiAgdmFyIG1idG4gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4gcHJpIixVLm1pY0VuYWJsZSk7CiAgdmFyIG1zdCA9IGVsKCJzcGFuIiwiY2xwLXNway1taWNzdCIsIiIpOwogIG1idG4ub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICBtYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgIGVuc3VyZU1pYyhmdW5jdGlvbihvayl7CiAgICAgIG1zdC5jbGFzc05hbWUgPSAiY2xwLXNway1taWNzdCAiKyhvaz8ib2siOiJiYWQiKTsKICAgICAgbXN0LmlubmVySFRNTCA9IG9rID8gIlx1MjcxNCAiK1UubWljUmVhZHkgOiAiXHUyNzE2ICIrVS5taWNCbG9ja2VkOwogICAgICBpZighb2spIG1idG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0pOwogIH07CiAgbWljcm93LmFwcGVuZENoaWxkKG1idG4pOyBtaWNyb3cuYXBwZW5kQ2hpbGQobXN0KTsKICBiLmFwcGVuZENoaWxkKG1pY3Jvdyk7CiAgYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1ub3RlIixVLm1pY05vdGUpKTsKICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgdmFyIGdvID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFRlc3QrIiBcdTI1YjYiKTsKICBnby5zdHlsZS5mb250U2l6ZT0iMTVweCI7IGdvLnN0eWxlLnBhZGRpbmc9IjEycHggMjZweCI7CiAgZ28ub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyPTA7IHJlbmRlcigpOyB9OwogIGN0ci5hcHBlbmRDaGlsZChnbyk7CiAgYi5hcHBlbmRDaGlsZChjdHIpOwogIHAuYXBwZW5kQ2hpbGQoYik7CiAgcmV0dXJuIHA7Cn0KCi8qIC0tLS0tLS0tLS0gdGFzayBwYW5lbCAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIHRhc2tQYW5lbCh0KXsKICB2YXIgcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBhbmVsIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLHRhc2tUaXRsZSh0KSkpOwogIHZhciBtZXRhID0gZWwoInNwYW4iLCJtIiwgdC5waGFzZWQgPyBwaGFzZWRNZXRhKHQpIDogZm10TWV0YSh0KSk7CiAgYmFyLmFwcGVuZENoaWxkKG1ldGEpOwogIHZhciBueCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLW5leHQiLFUubmV4dCk7CiAgbngub25jbGljayA9IGZ1bmN0aW9uKCl7IFMuY3VyID0gKFMuY3VyKzEgPCBELnRhc2tzLmxlbmd0aCkgPyBTLmN1cisxIDogOTk7IHJlbmRlcigpOyB9OwogIGJhci5hcHBlbmRDaGlsZChueCk7CiAgcC5hcHBlbmRDaGlsZChiYXIpOwogIHZhciBiID0gZWwoImRpdiIsImNscC1zcGstYm9keSIpOwogIGlmKHQud2FybXVwKSBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLWJhZGdlIixVLndhcm11cEJhZGdlKSk7CiAgaWYodC5waGFzZWQpIHJlbmRlclQ1KHQsYixtZXRhKTsKICBlbHNlIHJlbmRlclN0ZCh0LGIpOwogIGlmKHQudGlwcykgYi5hcHBlbmRDaGlsZChhY2NvcmRpb24odCkpOwogIHAuYXBwZW5kQ2hpbGQoYik7CiAgcmV0dXJuIHA7Cn0KZnVuY3Rpb24gcGhhc2VkTWV0YSh0KXsKICB2YXIgcGggPSBTLnBoYXNlW3Qua118fCIiOwogIGlmKHBoLmluZGV4T2YoImNob29zZSIpPT09MCkgcmV0dXJuICJQcmVwYXJhdGlvbjogPGI+Iit0LmNob29zZS5wcmVwKyIgc2Vjb25kczwvYj4iOwogIHJldHVybiAiUHJlcGFyYXRpb246IDxiPiIrdC5zcGVhay5wcmVwKyIgc2Vjb25kczwvYj4gJm5ic3A7UmVjb3JkaW5nOiA8Yj4iK3Quc3BlYWsucmVjKyIgc2Vjb25kczwvYj4iOwp9CmZ1bmN0aW9uIHByb21wdFJvdyh0ZXh0LCBsZWFkKXsKICB2YXIgYm94ID0gZWwoImRpdiIpOwogIGlmKGxlYWQpeyBib3guYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbGVhZCIsbGVhZCkpOyB9CiAgdmFyIHByID0gZWwoImRpdiIsImNscC1zcGstcHJvbXB0Iik7CiAgcHIuYXBwZW5kQ2hpbGQoZWwoInNwYW4iLCJpIiwiaSIpKTsKICBwci5hcHBlbmRDaGlsZChlbCgic3BhbiIsbnVsbCx0ZXh0KSk7CiAgYm94LmFwcGVuZENoaWxkKHByKTsKICByZXR1cm4gYm94Owp9CmZ1bmN0aW9uIHJlbmRlclN0ZCh0LGIpewogIGIuYXBwZW5kQ2hpbGQocHJvbXB0Um93KHQucHJvbXB0LCB0LnByb21wdExlYWQpKTsKICBpZih0LmNob29zZU9uZSl7CiAgICB2YXIgYyA9IGVsKCJkaXYiLCJjbHAtc3BrLWNob29zZTEiLCI8ZGl2IGNsYXNzPSdlJz5DaG9vc2UgT05FOjwvZGl2PjxkaXYgY2xhc3M9J2UnIHN0eWxlPSdtYXJnaW4tdG9wOjZweCc+RUlUSEVSPC9kaXY+PGRpdj4iK3QuY2hvb3NlT25lWzBdKyI8L2Rpdj48ZGl2IGNsYXNzPSdlJyBzdHlsZT0nbWFyZ2luLXRvcDo2cHgnPk9SPC9kaXY+PGRpdj4iK3QuY2hvb3NlT25lWzFdKyI8L2Rpdj4iKTsKICAgIGIuYXBwZW5kQ2hpbGQoYyk7CiAgfQogIGlmKHQuaW1nICYmIEQuaW1nc1t0LmltZ10pewogICAgdmFyIGltID0gZWwoImltZyIsImNscC1zcGstaW1nIik7IGltLnNyYyA9IEQuaW1nc1t0LmltZ107IGltLmFsdCA9IHQudHlwZUVuOwogICAgYi5hcHBlbmRDaGlsZChpbSk7CiAgfQogIGIuYXBwZW5kQ2hpbGQodGltZXJCbG9jayh0LmssIHQucHJlcCwgdC5yZWMsICJ0IikpOwp9CmZ1bmN0aW9uIHJlbmRlclQ1KHQsYixtZXRhRWwpewogIHZhciBwaCA9IFMucGhhc2VbdC5rXTsKICBpZihwaC5pbmRleE9mKCJjaG9vc2UiKT09PTApewogICAgYi5hcHBlbmRDaGlsZChwcm9tcHRSb3codC5jaG9vc2Uuc2l0dWF0aW9uKSk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLHQuY2hvb3NlLm5vdGUpKTsKICAgIHZhciBncmlkID0gZWwoImRpdiIsImNscC1zcGstb3B0cyIpOwogICAgdC5jaG9vc2Uub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG8saWR4KXsKICAgICAgdmFyIGNhcmQgPSBlbCgiZGl2IiwiY2xwLXNway1jYXJkIisoUy50NWNob2ljZVt0LmtdPT09aWR4PyIgc2VsIjoiIikpOwogICAgICBjYXJkLmFwcGVuZENoaWxkKGltZ1RpdGxlQnVsbGV0cyhvKSk7CiAgICAgIHZhciBwayA9IGVsKCJkaXYiLCJwaWNrIiwgUy50NWNob2ljZVt0LmtdPT09aWR4ID8gIlx1MjcxNCBTZWxlY3RlZCIgOiAiIik7CiAgICAgIGNhcmQuYXBwZW5kQ2hpbGQocGspOwogICAgICBjYXJkLm9uY2xpY2sgPSBmdW5jdGlvbigpewogICAgICAgIFMudDVjaG9pY2VbdC5rXSA9IGlkeDsKICAgICAgICBncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jbHAtc3BrLWNhcmQiKS5mb3JFYWNoKGZ1bmN0aW9uKGNkLGopewogICAgICAgICAgY2QuY2xhc3NOYW1lID0gImNscC1zcGstY2FyZCIrKGo9PT1pZHg\/IiBzZWwiOiIiKTsKICAgICAgICAgIGNkLnF1ZXJ5U2VsZWN0b3IoIi5waWNrIikudGV4dENvbnRlbnQgPSAoaj09PWlkeCk\/Ilx1MjcxNCBTZWxlY3RlZCI6IiI7CiAgICAgICAgfSk7CiAgICAgICAgY2J0bi5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CiAgICAgIH07CiAgICAgIGdyaWQuYXBwZW5kQ2hpbGQoY2FyZCk7CiAgICB9KTsKICAgIGIuYXBwZW5kQ2hpbGQoZ3JpZCk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLWhpbnQiLFUuY2hvb3NlSGludCkpOwogICAgLyogY291bnRkb3duIGZvciBjaG9vc2UgcGhhc2UgKi8KICAgIHZhciB0cm93ID0gZWwoImRpdiIsImNscC1zcGstdGltZXJyb3ciKTsKICAgIHZhciB0bSA9IGVsKCJkaXYiLCJjbHAtc3BrLXRpbWVyIik7CiAgICB0bS5hcHBlbmRDaGlsZChlbCgic3BhbiIsImljIiwiXHVkODNkXHVkZDUyIikpOwogICAgdmFyIGxiID0gZWwoImRpdiIpOyBsYi5hcHBlbmRDaGlsZChlbCgiZGl2IiwibGIiLFUucHJlcFRpdGxlKSk7CiAgICB0bS5hcHBlbmRDaGlsZChsYik7CiAgICB2YXIgbiA9IGVsKCJzcGFuIiwibiIsU3RyaW5nKHQuY2hvb3NlLnByZXApKTsKICAgIHRtLmFwcGVuZENoaWxkKG4pOwogICAgdHJvdy5hcHBlbmRDaGlsZCh0bSk7CiAgICBiLmFwcGVuZENoaWxkKHRyb3cpOwogICAgdmFyIGN0ciA9IGVsKCJkaXYiLCJjbHAtc3BrLWN0ciIpOwogICAgdmFyIHN0YXJ0ID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFByZXApOwogICAgdmFyIGNidG4gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuY29uZmlybUNob2ljZSk7CiAgICBjYnRuLnN0eWxlLmRpc3BsYXkgPSAoUy50NWNob2ljZVt0LmtdIT1udWxsKT8iaW5saW5lLWJsb2NrIjoibm9uZSI7CiAgICB2YXIgZ29TcGVhayA9IGZ1bmN0aW9uKCl7CiAgICAgIHN0b3BUaW1lcigpOwogICAgICBpZihTLnQ1Y2hvaWNlW3Qua109PW51bGwpIFMudDVjaG9pY2VbdC5rXSA9IDA7CiAgICAgIFMucGhhc2VbdC5rXSA9ICJzcGVhayI7CiAgICAgIHJlbmRlcigpOwogICAgfTsKICAgIHN0YXJ0Lm9uY2xpY2sgPSBmdW5jdGlvbigpewogICAgICBzdGFydC5kaXNhYmxlZCA9IHRydWU7CiAgICAgIFMucGhhc2VbdC5rXSA9ICJjaG9vc2UtcnVuIjsKICAgICAgY291bnRkb3duKHQuY2hvb3NlLnByZXAsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBnb1NwZWFrKTsKICAgIH07CiAgICBjYnRuLm9uY2xpY2sgPSBnb1NwZWFrOwogICAgY3RyLmFwcGVuZENoaWxkKHN0YXJ0KTsgY3RyLmFwcGVuZENoaWxkKGNidG4pOwogICAgYi5hcHBlbmRDaGlsZChjdHIpOwogICAgaWYoUy5waGFzZVt0LmtdPT09ImNob29zZS1ydW4iKXsKICAgICAgc3RhcnQuZGlzYWJsZWQgPSB0cnVlOwogICAgICBjb3VudGRvd24odC5jaG9vc2UucHJlcCwgZnVuY3Rpb24obGVmdCl7IG4udGV4dENvbnRlbnQ9U3RyaW5nKGxlZnQpOyB9LCBnb1NwZWFrKTsKICAgIH0KICB9IGVsc2UgewogICAgbWV0YUVsLmlubmVySFRNTCA9IHBoYXNlZE1ldGEodCk7CiAgICBiLmFwcGVuZENoaWxkKHByb21wdFJvdyh0LnNwZWFrLnByb21wdCkpOwogICAgdmFyIGdyaWQgPSBlbCgiZGl2IiwiY2xwLXNway1vcHRzIik7CiAgICB2YXIgb3RoZXIgPSBlbCgiZGl2IiwiY2xwLXNway1jYXJkIHBsYWluIik7CiAgICBvdGhlci5hcHBlbmRDaGlsZChlbCgiZGl2IiwiaGQiLHQuc3BlYWsub3RoZXJMYWJlbCkpOwogICAgb3RoZXIuYXBwZW5kQ2hpbGQoaW1nVGl0bGVCdWxsZXRzKHQuc3BlYWsub3RoZXIpKTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQob3RoZXIpOwogICAgdmFyIGNob3NlbiA9IHQuY2hvb3NlLm9wdGlvbnNbUy50NWNob2ljZVt0LmtdIT1udWxsID8gUy50NWNob2ljZVt0LmtdIDogMF07CiAgICB2YXIgbWluZSA9IGVsKCJkaXYiLCJjbHAtc3BrLWNhcmQgcGxhaW4gc2VsIik7CiAgICBtaW5lLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJoZCIsVS55b3VyQ2hvaWNlKSk7CiAgICBtaW5lLmFwcGVuZENoaWxkKGltZ1RpdGxlQnVsbGV0cyhjaG9zZW4pKTsKICAgIGdyaWQuYXBwZW5kQ2hpbGQobWluZSk7CiAgICBiLmFwcGVuZENoaWxkKGdyaWQpOwogICAgYi5hcHBlbmRDaGlsZCh0aW1lckJsb2NrKHQuaywgdC5zcGVhay5wcmVwLCB0LnNwZWFrLnJlYywgInQ1cyIpKTsKICB9Cn0KZnVuY3Rpb24gaW1nVGl0bGVCdWxsZXRzKG8pewogIHZhciBib3ggPSBlbCgiZGl2Iik7CiAgaWYoby5pbWcgJiYgRC5pbWdzW28uaW1nXSl7IHZhciBpbSA9IGVsKCJpbWciKTsgaW0uc3JjID0gRC5pbWdzW28uaW1nXTsgaW0uYWx0ID0gby50aXRsZTsgYm94LmFwcGVuZENoaWxkKGltKTsgfQogIGJveC5hcHBlbmRDaGlsZChlbCgiZGl2IiwidHQiLG8udGl0bGUpKTsKICB2YXIgdWwgPSBlbCgidWwiKTsKICBvLmJ1bGxldHMuZm9yRWFjaChmdW5jdGlvbih4KXsgdWwuYXBwZW5kQ2hpbGQoZWwoImxpIixudWxsLHgpKTsgfSk7CiAgYm94LmFwcGVuZENoaWxkKHVsKTsKICByZXR1cm4gYm94Owp9CgovKiAtLS0tLS0tLS0tIHByZXAvcmVjb3JkIGJsb2NrIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gdGltZXJCbG9jayhrZXksIHByZXBTZWNzLCByZWNTZWNzLCBtb2RlKXsKICB2YXIgYm94ID0gZWwoImRpdiIpOwogIHZhciB0cm93ID0gZWwoImRpdiIsImNscC1zcGstdGltZXJyb3ciKTsKICB2YXIgdG0gPSBlbCgiZGl2IiwiY2xwLXNway10aW1lciIpOwogIHZhciBpYyA9IGVsKCJzcGFuIiwiaWMiLCJcdWQ4M2RcdWRkNTIiKTsKICB2YXIgbGIgPSBlbCgiZGl2Iik7IHZhciBsYnQgPSBlbCgiZGl2IiwibGIiLFUucHJlcFRpdGxlKTsgbGIuYXBwZW5kQ2hpbGQobGJ0KTsKICB2YXIgbiA9IGVsKCJzcGFuIiwibiIsU3RyaW5nKHByZXBTZWNzKSk7CiAgdG0uYXBwZW5kQ2hpbGQoaWMpOyB0bS5hcHBlbmRDaGlsZChsYik7IHRtLmFwcGVuZENoaWxkKG4pOwogIHRyb3cuYXBwZW5kQ2hpbGQodG0pOyBib3guYXBwZW5kQ2hpbGQodHJvdyk7CiAgdmFyIHNwZWFrbm93ID0gZWwoImRpdiIsImNscC1zcGstc3BlYWtub3ciLCIiKTsgYm94LmFwcGVuZENoaWxkKHNwZWFrbm93KTsKICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7IGJveC5hcHBlbmRDaGlsZChjdHIpOwogIHZhciByZXZpZXdTbG90ID0gZWwoImRpdiIpOyBib3guYXBwZW5kQ2hpbGQocmV2aWV3U2xvdCk7CiAgdmFyIG1pY25vdGUgPSBlbCgiZGl2Iik7IGJveC5hcHBlbmRDaGlsZChtaWNub3RlKTsKCiAgZnVuY3Rpb24gc2hvd0lkbGUoKXsKICAgIGN0ci5pbm5lckhUTUwgPSAiIjsgc3BlYWtub3cudGV4dENvbnRlbnQgPSAiIjsKICAgIHRtLmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRpbWVyIjsgbGJ0LnRleHRDb250ZW50ID0gVS5wcmVwVGl0bGU7IGljLnRleHRDb250ZW50ID0gIlx1ZDgzZFx1ZGQ1MiI7IG4udGV4dENvbnRlbnQgPSBTdHJpbmcocHJlcFNlY3MpOwogICAgdmFyIHN0YXJ0ID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIHByaSIsVS5zdGFydFByZXApOwogICAgc3RhcnQub25jbGljayA9IHN0YXJ0UHJlcDsKICAgIGN0ci5hcHBlbmRDaGlsZChzdGFydCk7CiAgICBpZihTLnJlY3Nba2V5XSkgc2hvd1JldmlldyhmYWxzZSk7CiAgfQogIGZ1bmN0aW9uIHN0YXJ0UHJlcCgpewogICAgZW5zdXJlTWljKGZ1bmN0aW9uKCl7CiAgICAgIGN0ci5pbm5lckhUTUwgPSAiIjsKICAgICAgdmFyIHNraXAgPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuc2tpcFByZXApOwogICAgICBza2lwLm9uY2xpY2sgPSBmdW5jdGlvbigpeyBzdG9wVGltZXIoKTsgc3RhcnRSZWMoKTsgfTsKICAgICAgY3RyLmFwcGVuZENoaWxkKHNraXApOwogICAgICBjb3VudGRvd24ocHJlcFNlY3MsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBmdW5jdGlvbigpeyBzdGFydFJlYygpOyB9KTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBzdGFydFJlYygpewogICAgYmVlcCgyKTsKICAgIHRtLmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRpbWVyIHJlYyI7CiAgICBpYy5pbm5lckhUTUwgPSAiPHNwYW4gY2xhc3M9J2NscC1zcGstZG90Jz48L3NwYW4+IjsKICAgIG4udGV4dENvbnRlbnQgPSBTdHJpbmcocmVjU2Vjcyk7CiAgICBjdHIuaW5uZXJIVE1MID0gIiI7CiAgICB2YXIgc3RvcHBlZCA9IGZhbHNlOwogICAgdmFyIGhhdmVNaWMgPSAoUy5taWNTdGF0ZT09PSJvayIgJiYgUy5zdHJlYW0pOwogICAgbGJ0LnRleHRDb250ZW50ID0gaGF2ZU1pYyA\/IFUucmVjVGl0bGUgOiBVLnRpbWVyT25seTsKICAgIHNwZWFrbm93LnRleHRDb250ZW50ID0gVS5zcGVha05vdzsKICAgIG1pY25vdGUuaW5uZXJIVE1MID0gaGF2ZU1pYyA\/ICIiIDogIjxkaXYgY2xhc3M9J2NscC1zcGstbWljJz4iK1UubWljQmxvY2tlZCsiPC9kaXY+IjsKICAgIHZhciB0MCA9IERhdGUubm93KCk7CiAgICB2YXIgZmluaXNoID0gZnVuY3Rpb24oKXsKICAgICAgaWYoc3RvcHBlZCkgcmV0dXJuOyBzdG9wcGVkID0gdHJ1ZTsKICAgICAgc3RvcFRpbWVyKCk7IGJlZXAoMSk7CiAgICAgIHNwZWFrbm93LnRleHRDb250ZW50ID0gIiI7CiAgICAgIHZhciBzZWNzID0gTWF0aC5taW4ocmVjU2VjcywgTWF0aC5yb3VuZCgoRGF0ZS5ub3coKS10MCkvMTAwMCkpOwogICAgICBpZihoYXZlTWljICYmIFMucmVjb3JkZXIpewogICAgICAgIFMucmVjb3JkZXIub25zdG9wID0gZnVuY3Rpb24oKXsKICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoUy5jaHVua3MsIFMubWltZT97dHlwZTpTLm1pbWV9OnVuZGVmaW5lZCk7CiAgICAgICAgICBpZihTLnJlY3Nba2V5XSAmJiBTLnJlY3Nba2V5XS51cmwpeyB0cnl7IFVSTC5yZXZva2VPYmplY3RVUkwoUy5yZWNzW2tleV0udXJsKTsgfWNhdGNoKGUpe30gfQogICAgICAgICAgUy5yZWNzW2tleV0gPSB7IGJsb2I6IGJsb2IsIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSwgc2Vjczogc2VjcyB9OwogICAgICAgICAgUy5yZWNvcmRlciA9IG51bGw7CiAgICAgICAgICBzaG93SWRsZSgpOyBzaG93UmV2aWV3KHRydWUpOwogICAgICAgIH07CiAgICAgICAgdHJ5eyBTLnJlY29yZGVyLnN0b3AoKTsgfWNhdGNoKGUpeyBTLnJlY3Nba2V5XSA9IHtibG9iOm51bGwsdXJsOm51bGwsc2VjczpzZWNzfTsgc2hvd0lkbGUoKTsgc2hvd1Jldmlldyh0cnVlKTsgfQogICAgICB9IGVsc2UgewogICAgICAgIFMucmVjc1trZXldID0geyBibG9iOm51bGwsIHVybDpudWxsLCBzZWNzOiBzZWNzIH07CiAgICAgICAgc2hvd0lkbGUoKTsgc2hvd1Jldmlldyh0cnVlKTsKICAgICAgfQogICAgfTsKICAgIGlmKGhhdmVNaWMpewogICAgICBTLmNodW5rcyA9IFtdOwogICAgICB0cnl7CiAgICAgICAgUy5yZWNvcmRlciA9IFMubWltZSA\/IG5ldyBNZWRpYVJlY29yZGVyKFMuc3RyZWFtLHttaW1lVHlwZTpTLm1pbWV9KSA6IG5ldyBNZWRpYVJlY29yZGVyKFMuc3RyZWFtKTsKICAgICAgICBTLnJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IGZ1bmN0aW9uKGV2KXsgaWYoZXYuZGF0YSAmJiBldi5kYXRhLnNpemUpIFMuY2h1bmtzLnB1c2goZXYuZGF0YSk7IH07CiAgICAgICAgUy5yZWNvcmRlci5zdGFydCgpOwogICAgICB9Y2F0Y2goZSl7IFMucmVjb3JkZXIgPSBudWxsOyBoYXZlTWljID0gZmFsc2U7IGxidC50ZXh0Q29udGVudCA9IFUudGltZXJPbmx5OyB9CiAgICB9CiAgICB2YXIgc3RvcCA9IGVsKCJidXR0b24iLCJjbHAtc3BrLWJ0biB3YXJuIixVLnN0b3BSZWMpOwogICAgc3RvcC5vbmNsaWNrID0gZmluaXNoOwogICAgY3RyLmFwcGVuZENoaWxkKHN0b3ApOwogICAgY291bnRkb3duKHJlY1NlY3MsIGZ1bmN0aW9uKGxlZnQpeyBuLnRleHRDb250ZW50ID0gU3RyaW5nKGxlZnQpOyB9LCBmaW5pc2gpOwogIH0KICBmdW5jdGlvbiBzaG93UmV2aWV3KHNjcm9sbFRvKXsKICAgIHZhciByID0gUy5yZWNzW2tleV07IGlmKCFyKSByZXR1cm47CiAgICByZXZpZXdTbG90LmlubmVySFRNTCA9ICIiOwogICAgdmFyIHJ2ID0gZWwoImRpdiIsImNscC1zcGstcmV2aWV3Iik7CiAgICBydi5hcHBlbmRDaGlsZChlbCgiZGl2Iiwib2siLCJcdTI3MTQgIitVLnJlY29yZGVkKyIgKCIrci5zZWNzKyJzKSIpKTsKICAgIGlmKHIudXJsKXsKICAgICAgdmFyIGF1ID0gZWwoImF1ZGlvIik7IGF1LmNvbnRyb2xzID0gdHJ1ZTsgYXUuc3JjID0gci51cmw7CiAgICAgIHJ2LmFwcGVuZENoaWxkKGF1KTsKICAgICAgdmFyIHJvdyA9IGVsKCJkaXYiLCJjbHAtc3BrLWN0ciIpOwogICAgICB2YXIgZGwgPSBlbCgiYSIsImNscC1zcGstYnRuIixVLmRvd25sb2FkKTsKICAgICAgZGwuaHJlZiA9IHIudXJsOyBkbC5kb3dubG9hZCA9ICJjZWxwaXAtcyIrRC5zZXQrInQiK0QudGVzdCsiLXRhc2siKyhrZXk9PT0idyI\/IjAiOmtleS5yZXBsYWNlKCJ0IiwiIikpKyIuIitTLmV4dDsKICAgICAgcm93LmFwcGVuZENoaWxkKGRsKTsKICAgICAgcnYuYXBwZW5kQ2hpbGQocm93KTsKICAgIH0KICAgIHJldmlld1Nsb3QuYXBwZW5kQ2hpbGQocnYpOwogICAgaWYoc2Nyb2xsVG8peyB0cnl7IHJ2LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIn0pOyB9Y2F0Y2goZSl7fSB9CiAgfQogIHNob3dJZGxlKCk7CiAgcmV0dXJuIGJveDsKfQoKLyogLS0tLS0tLS0tLSB0aXBzL3NhbXBsZXMgYWNjb3JkaW9uIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gYWNjb3JkaW9uKHQpewogIHZhciBhY2MgPSBlbCgiZGl2IiwiY2xwLXNway1hY2MiKTsKICB2YXIgYnRuID0gZWwoImJ1dHRvbiIsbnVsbCxVLnRpcHNUb2dnbGUpOwogIGJ0bi5vbmNsaWNrID0gZnVuY3Rpb24oKXsgYWNjLmNsYXNzTmFtZSA9IGFjYy5jbGFzc05hbWUuaW5kZXhPZigib3BlbiIpPi0xID8gImNscC1zcGstYWNjIiA6ICJjbHAtc3BrLWFjYyBvcGVuIjsgfTsKICBhY2MuYXBwZW5kQ2hpbGQoYnRuKTsKICB2YXIgYm9keSA9IGVsKCJkaXYiLCJjbHAtc3BrLWFjY2JvZHkiKTsKICB2YXIgdGFicyA9IGVsKCJkaXYiLCJjbHAtc3BrLXRhYnMiKTsKICB2YXIgcGFuZXMgPSBbXTsKICBmdW5jdGlvbiBhZGRUYWIobGFiZWwsIHBhbmVCdWlsZGVyKXsKICAgIHZhciBpID0gcGFuZXMubGVuZ3RoOwogICAgdmFyIHRiID0gZWwoImJ1dHRvbiIsImNscC1zcGstdGFiIisoaT09PTA\/IiBvbiI6IiIpLGxhYmVsKTsKICAgIHZhciBwbiA9IGVsKCJkaXYiLCJjbHAtc3BrLXRhYnBhbmUiKyhpPT09MD8iIG9uIjoiIikpOwogICAgcGFuZUJ1aWxkZXIocG4pOwogICAgdGIub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgIHRhYnMucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstdGFiIikuZm9yRWFjaChmdW5jdGlvbih4LGopeyB4LmNsYXNzTmFtZSA9ICJjbHAtc3BrLXRhYiIrKGo9PT1pPyIgb24iOiIiKTsgfSk7CiAgICAgIGJvZHkucXVlcnlTZWxlY3RvckFsbCgiLmNscC1zcGstdGFicGFuZSIpLmZvckVhY2goZnVuY3Rpb24oeCxqKXsgeC5jbGFzc05hbWUgPSAiY2xwLXNway10YWJwYW5lIisoaj09PWk\/IiBvbiI6IiIpOyB9KTsKICAgIH07CiAgICB0YWJzLmFwcGVuZENoaWxkKHRiKTsgcGFuZXMucHVzaChwbik7CiAgfQogIGFkZFRhYihVLnRhYlRpcHMsIGZ1bmN0aW9uKHBuKXsKICAgIHZhciB1bCA9IGVsKCJ1bCIpOwogICAgdC50aXBzLmJ1bGxldHMuZm9yRWFjaChmdW5jdGlvbih4KXsgdWwuYXBwZW5kQ2hpbGQoZWwoImxpIixudWxsLHgpKTsgfSk7CiAgICBwbi5hcHBlbmRDaGlsZCh1bCk7CiAgICBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IixudWxsLCI8Yj4iK1UudXNlZnVsUGhyYXNlcysiOjwvYj4iKSk7CiAgICB2YXIgcGggPSBlbCgiZGl2IiwiY2xwLXNway1waHIiKTsKICAgIHQudGlwcy5waHJhc2VzLmZvckVhY2goZnVuY3Rpb24oeCl7IHBoLmFwcGVuZENoaWxkKGVsKCJzcGFuIixudWxsLHgpKTsgfSk7CiAgICBwbi5hcHBlbmRDaGlsZChwaCk7CiAgfSk7CiAgaWYodC5zNikgYWRkVGFiKFUudGFiUzYsIGZ1bmN0aW9uKHBuKXsgcG4uYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstc2FtcGxlIHM2Iix0LnM2KSk7IH0pOwogIGlmKHQuczkpIGFkZFRhYihVLnRhYlM5LCBmdW5jdGlvbihwbil7IHBuLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLXNhbXBsZSIsdC5zOSkpOyB9KTsKICBpZighdC53YXJtdXApIGFkZFRhYihVLnRhYlJ1YnJpYywgZnVuY3Rpb24ocG4pewogICAgcG4uYXBwZW5kQ2hpbGQoZWwoImRpdiIsbnVsbCxVLnJ1YnJpY05vdGUpKTsKICAgIHZhciB0YiA9IGVsKCJ0YWJsZSIsImNscC1zcGstcnViIik7CiAgICBpZighUy5ydWJyaWNbdC5rXSkgUy5ydWJyaWNbdC5rXSA9IFswLDAsMCwwXTsKICAgIHZhciBlc3REID0gZWwoImRpdiIsImNscC1zcGstZXN0IiwiIik7CiAgICBVLnJ1YnJpY0NyaXQuZm9yRWFjaChmdW5jdGlvbihjcixjaSl7CiAgICAgIHZhciB0ciA9IGVsKCJ0ciIpOwogICAgICB0ci5hcHBlbmRDaGlsZChlbCgidGQiLG51bGwsY3IpKTsKICAgICAgdmFyIHRkID0gZWwoInRkIik7IHRkLnN0eWxlLndoaXRlU3BhY2UgPSAibm93cmFwIjsgdGQuc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgZm9yKHZhciBzMj0xO3MyPD01O3MyKyspewogICAgICAgIChmdW5jdGlvbihzdil7CiAgICAgICAgICB2YXIgc3AgPSBlbCgic3BhbiIsImNscC1zcGstc3RhciIrKFMucnVicmljW3Qua11bY2ldPj1zdj8iIG9uIjoiIiksIlx1MjYwNSIpOwogICAgICAgICAgc3Aub25jbGljayA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIFMucnVicmljW3Qua11bY2ldID0gc3Y7CiAgICAgICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jbHAtc3BrLXN0YXIiKS5mb3JFYWNoKGZ1bmN0aW9uKHgsail7IHguY2xhc3NOYW1lID0gImNscC1zcGstc3RhciIrKGo8c3Y\/IiBvbiI6IiIpOyB9KTsKICAgICAgICAgICAgdXBkKCk7CiAgICAgICAgICB9OwogICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoc3ApOwogICAgICAgIH0pKHMyKTsKICAgICAgfQogICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgIHRiLmFwcGVuZENoaWxkKHRyKTsKICAgIH0pOwogICAgcG4uYXBwZW5kQ2hpbGQodGIpOwogICAgcG4uYXBwZW5kQ2hpbGQoZXN0RCk7CiAgICBwbi5hcHBlbmRDaGlsZChlbCgiZGl2IiwiY2xwLXNway1ub3RlIixVLmVzdERpc2NsYWltZXIpKTsKICAgIGZ1bmN0aW9uIHVwZCgpewogICAgICB2YXIgYXJyID0gUy5ydWJyaWNbdC5rXTsgdmFyIGRvbmUgPSBhcnIuZXZlcnkoZnVuY3Rpb24oeCl7cmV0dXJuIHg+MDt9KTsKICAgICAgZXN0RC50ZXh0Q29udGVudCA9IGRvbmUgPyAoVS5lc3RpbWF0ZSsiICIrZXN0VGV4dChhcnIucmVkdWNlKGZ1bmN0aW9uKGEsYil7cmV0dXJuIGErYjt9LDApLzQpKSA6ICIiOwogICAgfQogICAgdXBkKCk7CiAgfSk7CiAgYm9keS5pbnNlcnRCZWZvcmUodGFicywgYm9keS5maXJzdENoaWxkKTsKICBwYW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHBuKXsgYm9keS5hcHBlbmRDaGlsZChwbik7IH0pOwogIGFjYy5hcHBlbmRDaGlsZChib2R5KTsKICByZXR1cm4gYWNjOwp9CgovKiAtLS0tLS0tLS0tIGVuZCBzY3JlZW4gLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBlbmRTY3JlZW4oKXsKICB2YXIgcCA9IGVsKCJkaXYiLCJjbHAtc3BrLXBhbmVsIGNscC1zcGstZW5kIik7CiAgdmFyIGJhciA9IGVsKCJkaXYiLCJjbHAtc3BrLWJhciIpOwogIGJhci5hcHBlbmRDaGlsZChlbCgic3BhbiIsInQiLEQuaGVhZGVyKyIgLSBTcGVha2luZyBcdTIwMTQgIitVLmVuZFRpdGxlKSk7CiAgcC5hcHBlbmRDaGlsZChiYXIpOwogIHZhciBiID0gZWwoImRpdiIsImNscC1zcGstYm9keSIpOwogIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsbnVsbCwiPGI+IitVLmVuZFRpdGxlKyI8L2I+ICIrVS5lbmRTdWIpKTsKICB2YXIgdGIgPSBlbCgidGFibGUiKTsKICB2YXIgdGhyID0gZWwoInRyIik7IFsiVGFzayIsIlR5cGUiLCJSZWNvcmRpbmciLCIiXS5mb3JFYWNoKGZ1bmN0aW9uKGgpeyB0aHIuYXBwZW5kQ2hpbGQoZWwoInRoIixudWxsLGgpKTsgfSk7CiAgdGIuYXBwZW5kQ2hpbGQodGhyKTsKICB2YXIgbnJlYyA9IDA7CiAgRC50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKHQsaSl7CiAgICB2YXIgdHIgPSBlbCgidHIiKTsKICAgIHRyLmFwcGVuZENoaWxkKGVsKCJ0ZCIsbnVsbCwiPGI+IisodC53YXJtdXA\/IlciOnQubnVtKSsiPC9iPiIpKTsKICAgIHRyLmFwcGVuZENoaWxkKGVsKCJ0ZCIsbnVsbCx0LnR5cGVFbikpOwogICAgdmFyIHIgPSBTLnJlY3NbdC5rXTsKICAgIHZhciB0ZCA9IGVsKCJ0ZCIpOwogICAgaWYociAmJiByLnVybCl7IG5yZWMrKzsgdmFyIGF1ID0gZWwoImF1ZGlvIik7IGF1LmNvbnRyb2xzID0gdHJ1ZTsgYXUuc3JjID0gci51cmw7IHRkLmFwcGVuZENoaWxkKGF1KTsgfQogICAgZWxzZSBpZihyKXsgbnJlYysrOyB0ZC50ZXh0Q29udGVudCA9IHIuc2VjcysicyAoIitVLnRpbWVyT25seSsiKSI7IH0KICAgIGVsc2UgdGQuaW5uZXJIVE1MID0gIjxzcGFuIHN0eWxlPSdjb2xvcjojYzYyODI4Jz4iK1UuZW5kTm9SZWMrIjwvc3Bhbj4iOwogICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgdmFyIHRkMiA9IGVsKCJ0ZCIpOwogICAgdmFyIGdvID0gZWwoImJ1dHRvbiIsImNscC1zcGstYnRuIiwiXHUyMTkyIik7CiAgICBnby5vbmNsaWNrID0gZnVuY3Rpb24oKXsgUy5jdXI9aTsgcmVuZGVyKCk7IH07CiAgICB0ZDIuYXBwZW5kQ2hpbGQoZ28pOwogICAgdHIuYXBwZW5kQ2hpbGQodGQyKTsKICAgIHRiLmFwcGVuZENoaWxkKHRyKTsKICB9KTsKICBiLmFwcGVuZENoaWxkKHRiKTsKICAvKiBydWJyaWMgYXZnICovCiAgdmFyIHZhbHMgPSBbXTsKICBPYmplY3Qua2V5cyhTLnJ1YnJpYykuZm9yRWFjaChmdW5jdGlvbihrKXsgdmFyIGE9Uy5ydWJyaWNba107IGlmKGEgJiYgYS5ldmVyeShmdW5jdGlvbih4KXtyZXR1cm4geD4wO30pKSB2YWxzLnB1c2goYS5yZWR1Y2UoZnVuY3Rpb24oeCx5KXtyZXR1cm4geCt5O30sMCkvNCk7IH0pOwogIGlmKHZhbHMubGVuZ3RoKXsKICAgIHZhciBhdmcgPSB2YWxzLnJlZHVjZShmdW5jdGlvbihhLGMpe3JldHVybiBhK2M7fSwwKS92YWxzLmxlbmd0aDsKICAgIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstZXN0IixVLmVzdGltYXRlKyIgIitlc3RUZXh0KGF2ZykrIiAoIit2YWxzLmxlbmd0aCsiIHRhc2socykgc2VsZi1yYXRlZCkiKSk7CiAgICBiLmFwcGVuZENoaWxkKGVsKCJkaXYiLCJjbHAtc3BrLW5vdGUiLFUuZXN0RGlzY2xhaW1lcikpOwogIH0KICB2YXIgY3RyID0gZWwoImRpdiIsImNscC1zcGstY3RyIik7CiAgdmFyIHJlZG8gPSBlbCgiYnV0dG9uIiwiY2xwLXNway1idG4iLFUuZW5kUmVkbyk7CiAgcmVkby5vbmNsaWNrID0gZnVuY3Rpb24oKXsKICAgIE9iamVjdC5rZXlzKFMucmVjcykuZm9yRWFjaChmdW5jdGlvbihrKXsgaWYoUy5yZWNzW2tdJiZTLnJlY3Nba10udXJsKXsgdHJ5e1VSTC5yZXZva2VPYmplY3RVUkwoUy5yZWNzW2tdLnVybCk7fWNhdGNoKGUpe30gfSB9KTsKICAgIFMucmVjcyA9IHt9OyBTLnJ1YnJpYyA9IHt9OyBTLnQ1Y2hvaWNlID0ge307CiAgICBELnRhc2tzLmZvckVhY2goZnVuY3Rpb24odCl7IFMucGhhc2VbdC5rXSA9IHQucGhhc2VkPyJjaG9vc2UtaWRsZSI6ImlkbGUiOyB9KTsKICAgIFMuY3VyID0gLTE7IHJlbmRlcigpOwogIH07CiAgdmFyIHQyID0gZWwoImEiLCJjbHAtc3BrLWJ0biBwcmkiLFUuZW5kVDIrIiAiKyhELnRlc3Q9PT0xPzI6MSkrIiBcdTIxOTIiKTsgdDIuaHJlZiA9IEQub3RoZXJVcmw7CiAgdmFyIGh1YiA9IGVsKCJhIiwiY2xwLXNway1idG4iLFUuZW5kSHViKTsgaHViLmhyZWYgPSAiL2NlbHBpcC8iOwogIGN0ci5hcHBlbmRDaGlsZChyZWRvKTsgY3RyLmFwcGVuZENoaWxkKHQyKTsgY3RyLmFwcGVuZENoaWxkKGh1Yik7CiAgYi5hcHBlbmRDaGlsZChjdHIpOwogIGIuYXBwZW5kQ2hpbGQoZWwoImRpdiIsImNscC1zcGstbWljIixVLm1pY05vdGUpKTsKICBwLmFwcGVuZENoaWxkKGIpOwogIHJldHVybiBwOwp9CgovKiBleHBvc2UgZm9yIHRlc3RzICovCndpbmRvdy5DTFBTUEsgPSB7IHN0YXRlOiBTLCBkYXRhOiBELCBnb3RvOiBmdW5jdGlvbihpKXsgUy5jdXI9aTsgcmVuZGVyKCk7IH0sIHJlbmRlcjogcmVuZGVyIH07CnJlbmRlcigpOwp9KSgpOwo=\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Speaking Set 9 Practice Test 2: all 8 official-style tasks with on-screen prep and recording timers, sample responses and self-assessment tips. Free, no sign-up.<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-6387","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=6387"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6387\/revisions"}],"predecessor-version":[{"id":6513,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6387\/revisions\/6513"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}