{"id":6473,"date":"2026-07-11T11:39:42","date_gmt":"2026-07-11T11:39:42","guid":{"rendered":"https:\/\/allenglish4u.com\/celpip-set-12-test-2-writing\/"},"modified":"2026-07-12T03:24:19","modified_gmt":"2026-07-12T03:24:19","slug":"celpip-set-12-test-2-writing","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/celpip-set-12-test-2-writing\/","title":{"rendered":"CELPIP Writing \u2014 Set 12 \u00b7 Practice Test 2"},"content":{"rendered":"<div class=\"clpw-wrap\" id=\"clpwApp\"><\/div>\n<p><script>eval(atob(\"dmFyIFdEQVRBPXsibWV0YSI6eyJicmFuZCI6IkNFTFBJUCIsInNldCI6IlNldCAxMiBcdTAwYjcgUHJhY3RpY2UgVGVzdCAyIiwidGl0bGUiOiJDRUxQSVAgV3JpdGluZyBQcmFjdGljZSBUZXN0IiwidG90YWxNaW4iOjUzfSwidGFza3MiOlt7ImlkIjoxLCJiYXJUaXRsZSI6IlByYWN0aWNlIFRlc3QgMiBcdTIwMTMgV3JpdGluZyBUYXNrIDE6IFdyaXRpbmcgYW4gRW1haWwiLCJuYW1lIjoiV3JpdGluZyBhbiBFbWFpbCIsIm1pbnV0ZXMiOjI3LCJ3b3JkQWltIjoiMTUwXHUyMDEzMjAwIHdvcmRzIiwicmVhZEhlYWQiOiJSZWFkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIiwic2NlbmFyaW8iOiJZb3UgcmVjZW50bHkgdmlzaXRlZCBhIGZyaWVuZCdzIGFwYXJ0bWVudC4gWW91IG5vdGljZWQgdGhhdCB5b3VyIGZyaWVuZCdzIGJ1aWxkaW5nIGhhcyBhIHNoYXJlZCBib29rY2FzZSBpbiB0aGUgbG9iYnkgd2hlcmUgcGVvcGxlIGNhbiBsZWF2ZSBhbmQgdGFrZSBib29rcy4gWW91IHdvdWxkIGxpa2UgdG8gc3VnZ2VzdCBoYXZpbmcgYSBzaW1pbGFyIGJvb2tjYXNlIGluIHlvdXIgYXBhcnRtZW50IGJ1aWxkaW5nLiIsInByb21wdEhlYWQiOiJXcml0ZSBhbiBlbWFpbCB0byB5b3VyIGJ1aWxkaW5nIG1hbmFnZXIuIFlvdXIgZW1haWwgc2hvdWxkIGRvIHRoZSBmb2xsb3dpbmcgdGhpbmdzOiIsImJ1bGxldHMiOlsiZGVzY3JpYmUgaG93IHRoZSBzaGFyZWQgYm9va2Nhc2Ugd291bGQgd29yayIsImV4cGxhaW4gd2h5IHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgYSBzaGFyZWQgYm9va2Nhc2UiLCJwcm9wb3NlIHdoYXQgeW91IGNhbiBkbyB0byBzdGFydCB0aGlzIHByb2plY3QiXSwib3B0aW9ucyI6bnVsbCwic2FtTm90ZSI6IlRoZXNlIGFyZSBBbGxFbmdsaXNoNFUgbW9kZWwgYW5zd2VycyB3cml0dGVuIGZvciB0aGlzIGV4YWN0IFRhc2sgMSBlbWFpbCBwcm9tcHQgKHN1Z2dlc3RpbmcgdG8gYSBidWlsZGluZyBtYW5hZ2VyIHRoYXQgdGhlIGFwYXJ0bWVudCBidWlsZGluZyBzZXQgdXAgYSBzaGFyZWQgbG9iYnkgYm9va2Nhc2UgbGlrZSB0aGUgb25lIGluIGEgZnJpZW5kJ3MgYnVpbGRpbmcpLCBzaG93biBhdCB0aHJlZSBzY29yZSBsZXZlbHMgKENFTFBJUCA0XHUyMDEzNSwgN1x1MjAxMzggYW5kIDEwXHUyMDEzMTIpIHNvIHlvdSBjYW4gc2VlIGhvdyB0aGUgc2FtZSB0YXNrIHJlYWRzIGFzIGl0IGltcHJvdmVzLiBUaGV5IGFyZSBBRTRVIHN0dWR5IG1vZGVscywgbm90IG9mZmljaWFsIENFTFBJUCBzYW1wbGVzOyB0aGUgNFx1MjAxMzUgbW9kZWwgZGVsaWJlcmF0ZWx5IGtlZXBzIHNvbWUgZXJyb3JzLiIsInNhbXBsZXMiOlt7ImxldmVsIjoiQ0VMUElQIDRcdTIwMTM1IFJlc3BvbnNlIiwibm90ZSI6IkFsbCB0aHJlZSBwb2ludHMgY292ZXJlZCB3aXRoIGEgZnJpZW5kbHkgb2ZmZXIgdG8gaGVscDsgcGxhaW4gcGhyYXNpbmcgYW5kIHNldmVyYWwgbmF0dXJhbCBncmFtbWFyIHNsaXBzLiIsInRleHQiOiJEZWFyIEJ1aWxkaW5nIE1hbmFnZXIsXG5cbk15IG5hbWUgaXMgSHVuZyBUcmFuIGFuZCBJIGxpdmUgaW4gYXBhcnRtZW50IDEyQi4gSSBhbSB3cml0aW5nIGJlY2F1c2UgSSBoYXZlIGFuIGlkZWEgdGhhdCBjYW4gbWFrZSBvdXIgYnVpbGRpbmcgbW9yZSBmcmllbmRseSwgYW5kIEkgaG9wZSB5b3Ugd2lsbCBsaWtlIGl0LlxuXG5MYXN0IHdlZWsgSSB2aXNpdCBhIGZyaWVuZCBpbiBhbm90aGVyIGJ1aWxkaW5nLCBhbmQgdGhleSBoYXZlIGEgc2hhcmVkIGJvb2tjYXNlIGluIHRoZSBsb2JieS4gVGhlIGlkZWEgaXMgdmVyeSBzaW1wbGUuIFBlb3BsZSBwdXQgdGhlIGJvb2tzIHRoZXkgZG9uJ3Qgd2FudCBhbnltb3JlIG9uIHRoZSBzaGVsZiwgYW5kIG90aGVyIHBlb3BsZSBjYW4gdGFrZSB0aGVtIGZvciBmcmVlLiBXaGVuIHlvdSBmaW5pc2ggYSBib29rLCB5b3UgYnJpbmcgaXQgYmFjayBvciB5b3UgZ2l2ZSBhbm90aGVyIG9uZS4gTm9ib2R5IG5lZWQgdG8gcGF5LlxuXG5JIHdvdWxkIGxpa2UgdGhpcyBpbiBvdXIgYnVpbGRpbmcgYmVjYXVzZSBtYW55IG5laWdoYm91cnMgbG92ZSByZWFkaW5nIGJ1dCBib29rcyBhcmUgZXhwZW5zaXZlLiBBIHNoYXJlZCBib29rY2FzZSBhbHNvIGhlbHAgdXMgdG8ga25vdyBlYWNoIG90aGVyIGJldHRlciwgYmVjYXVzZSBwZW9wbGUgd2lsbCBtZWV0IGFuZCB0YWxrIGluIHRoZSBsb2JieS5cblxuVG8gc3RhcnQgdGhpcyBwcm9qZWN0LCBJIGNhbiBicmluZyBhIHNtYWxsIGJvb2tjYXNlIGZyb20gbXkgaG9tZSBhbmQgc29tZSBib29rcyB0byBiZWdpbi4gTWF5YmUgeW91IGNhbiBoZWxwIG1lIHRvIGNob29zZSBhIHNhZmUgY29ybmVyIGluIHRoZSBsb2JieS5cblxuUGxlYXNlIHRlbGwgbWUgd2hhdCB5b3UgdGhpbmsuIFRoYW5rIHlvdSB2ZXJ5IG11Y2guXG5cbkJlc3QgcmVnYXJkcyxcbkh1bmcgVHJhbiJ9LHsibGV2ZWwiOiJDRUxQSVAgN1x1MjAxMzggUmVzcG9uc2UiLCJub3RlIjoiUG9saXRlIGFuZCBwcmFjdGljYWw6IGV4cGxhaW5zIGhvdyB0aGUgYm9va2Nhc2Ugd29ya3MsIHdoeSBpdCBoZWxwcywgYW5kIG9mZmVycyB0byBkb25hdGUgb25lLiIsInRleHQiOiJEZWFyIE1yLiBSb2JlcnRzLFxuXG5JIGFtIHdyaXRpbmcgdG8gc3VnZ2VzdCBhIHNtYWxsIGJ1dCB3b3J0aHdoaWxlIGlkZWEgZm9yIG91ciBhcGFydG1lbnQgYnVpbGRpbmc6IGEgc2hhcmVkIGJvb2tjYXNlIGluIHRoZSBsb2JieS4gSSByZWNlbnRseSB2aXNpdGVkIGEgZnJpZW5kIHdob3NlIGJ1aWxkaW5nIGhhcyBvbmUsIGFuZCBJIHdhcyBpbXByZXNzZWQgYnkgaG93IHBvcHVsYXIgYW5kIHdlbGwtdXNlZCBpdCB3YXMuXG5cblRoZSBjb25jZXB0IGlzIHNpbXBsZS4gQSBzaW5nbGUgYm9va2Nhc2UgaXMgcGxhY2VkIGluIHRoZSBsb2JieSwgYW5kIHJlc2lkZW50cyBsZWF2ZSBib29rcyB0aGV5IGhhdmUgZmluaXNoZWQgc28gdGhhdCBvdGhlcnMgY2FuIGJvcnJvdyBvciBrZWVwIHRoZW0uIFRoZXJlIGFyZSBubyBmZWVzIGFuZCBubyBmb3JtYWwgc3lzdGVtOyBwZW9wbGUgc2ltcGx5IHRha2UgYSBib29rIGFuZCByZXR1cm4gaXQgb3IgcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgd2hlbiB0aGV5IGNhbi5cblxuSSB3b3VsZCBsb3ZlIHRvIHNlZSBzb21ldGhpbmcgc2ltaWxhciBoZXJlIGZvciB0d28gcmVhc29ucy4gRmlyc3QsIGl0IHdvdWxkIGdpdmUgcmVzaWRlbnRzIGVhc3ksIGZyZWUgYWNjZXNzIHRvIGEgY2hhbmdpbmcgc2VsZWN0aW9uIG9mIHJlYWRpbmcgbWF0ZXJpYWwuIFNlY29uZCwgYW5kIGp1c3QgYXMgaW1wb3J0YW50bHksIGl0IHdvdWxkIGhlbHAgbmVpZ2hib3VycyBnZXQgdG8ga25vdyBvbmUgYW5vdGhlciwgc2luY2UgdGhlIGJvb2tjYXNlIG5hdHVyYWxseSBiZWNvbWVzIGEgZnJpZW5kbHkgbWVldGluZyBwb2ludC5cblxuVG8gZ2V0IHRoZSBwcm9qZWN0IHN0YXJ0ZWQsIEkgd291bGQgYmUgaGFwcHkgdG8gZG9uYXRlIGEgc3R1cmR5IGJvb2tjYXNlIGFuZCBhcm91bmQgdGhpcnR5IGJvb2tzIG9mIG15IG93bi4gSSBjb3VsZCBhbHNvIHByZXBhcmUgYSBzaG9ydCBzZXQgb2YgZ3VpZGVsaW5lcyBhbmQgYSBzbWFsbCBzaWduLiBBbGwgSSB3b3VsZCBuZWVkIGZyb20geW91IGlzIHBlcm1pc3Npb24gYW5kIGEgc3VpdGFibGUgc3BvdC5cblxuVGhhbmsgeW91IGZvciBjb25zaWRlcmluZyBteSBzdWdnZXN0aW9uLlxuXG5CZXN0IHJlZ2FyZHMsXG5UaGFvIERvIn0seyJsZXZlbCI6IkNFTFBJUCAxMFx1MjAxMzEyIFJlc3BvbnNlIiwibm90ZSI6Ik1lYXN1cmVkIGFuZCBwZXJzdWFzaXZlIFx1MjAxNCBhIGNsZWFyIHBsYW4sIGEgY29tbXVuaXR5LW1pbmRlZCByYXRpb25hbGUsIGFuZCBhIGNvbmNyZXRlIGZpcnN0IHN0ZXAuIiwidGV4dCI6IkRlYXIgTXIuIFJvYmVydHMsXG5cbkkgYW0gd3JpdGluZyB0byBwcm9wb3NlIGFuIGlkZWEgdGhhdCBJIGJlbGlldmUgY291bGQgYnJpbmcgcmVhbCB3YXJtdGggdG8gb3VyIGJ1aWxkaW5nOiBhIHNoYXJlZCBib29rY2FzZSBpbiB0aGUgbG9iYnkuIFRoZSBpbnNwaXJhdGlvbiBjYW1lIGZyb20gYSByZWNlbnQgdmlzaXQgdG8gYSBmcmllbmQncyBhcGFydG1lbnQsIHdoZXJlIGV4YWN0bHkgc3VjaCBhIGJvb2tjYXNlIGhhcyBiZWNvbWUgYSBtdWNoLWxvdmVkIGZlYXR1cmUgb2YgZGFpbHkgbGlmZS5cblxuVGhlIGFycmFuZ2VtZW50IHdvdWxkIGJlIHJlZnJlc2hpbmdseSBzaW1wbGUuIEEgc2luZ2xlLCBzdHVyZHkgYm9va2Nhc2Ugd291bGQgc3RhbmQgaW4gYSBjb3JuZXIgb2YgdGhlIGxvYmJ5LCBhbmQgcmVzaWRlbnRzIHdvdWxkIGxlYXZlIGJvb2tzIHRoZXkgaGF2ZSBhbHJlYWR5IHJlYWQgZm9yIG90aGVycyB0byBib3Jyb3cgb3Iga2VlcC4gVGhlcmUgd291bGQgYmUgbm8gY2hhcmdlcywgbm8gbWVtYmVyc2hpcCwgYW5kIG5vIGNvbXBsaWNhdGVkIHRyYWNraW5nOyB0aGUgc2hlbGYgd291bGQgcnVuIG9uIG11dHVhbCB0cnVzdCwgd2l0aCBwZW9wbGUgYWRkaW5nIGEgdGl0bGUgd2hlbmV2ZXIgdGhleSB0YWtlIG9uZS5cblxuSSB3b3VsZCB3ZWxjb21lIHN1Y2ggYSBib29rY2FzZSBmb3IgdHdvIHJlYXNvbnMuIFByYWN0aWNhbGx5LCBpdCB3b3VsZCBvZmZlciBldmVyeW9uZSBmcmVlIGFuZCBldmVyLWNoYW5naW5nIHJlYWRpbmcgbWF0ZXJpYWwuIE1vcmUgc3VidGx5LCBpdCB3b3VsZCBudXJ0dXJlIGEgc2Vuc2Ugb2YgY29tbXVuaXR5LCB0dXJuaW5nIHRoZSBsb2JieSBpbnRvIGEgcGxhY2Ugd2hlcmUgbmVpZ2hib3VycyBwYXVzZSwgYnJvd3NlLCBhbmQgc3RyaWtlIHVwIGNvbnZlcnNhdGlvbnMgdGhleSBtaWdodCBvdGhlcndpc2UgbmV2ZXIgaGF2ZS5cblxuVG8gc2V0IHRoaW5ncyBpbiBtb3Rpb24sIEkgd291bGQgZ2xhZGx5IGRvbmF0ZSBhIHN1aXRhYmxlIGJvb2tjYXNlIGFsb25nIHdpdGggc2V2ZXJhbCBib3hlcyBvZiBteSBvd24gYm9va3MsIGFuZCBJIHdvdWxkIGhhcHBpbHkgZHJhZnQgc2ltcGxlIGd1aWRlbGluZXMgYW5kIGEgdGlkeSBzaWduLiBXaXRoIHlvdXIgYXBwcm92YWwgYW5kIGEgc21hbGwgc3BhY2UsIHdlIGNvdWxkIGhhdmUgaXQgcnVubmluZyB3aXRoaW4gYSB3ZWVrLlxuXG5UaGFuayB5b3UgdmVyeSBtdWNoIGZvciBjb25zaWRlcmluZyB0aGlzIHByb3Bvc2FsLlxuXG5CZXN0IHJlZ2FyZHMsXG5UaGFvIERvIn1dfSx7ImlkIjoyLCJiYXJUaXRsZSI6IlByYWN0aWNlIFRlc3QgMiBcdTIwMTMgV3JpdGluZyBUYXNrIDI6IFJlc3BvbmRpbmcgdG8gU3VydmV5IFF1ZXN0aW9ucyIsIm5hbWUiOiJSZXNwb25kaW5nIHRvIFN1cnZleSBRdWVzdGlvbnMiLCJtaW51dGVzIjoyNiwid29yZEFpbSI6IjE1MFx1MjAxMzIwMCB3b3JkcyIsInJlYWRIZWFkIjoiUmVhZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiIsInNjZW5hcmlvSGVhZCI6IkdlbmVyYWwgSW50ZXJlc3QgQ291cnNlcyIsInNjZW5hcmlvIjoiVGhlIGxvY2FsIGNvbW11bml0eSBjb2xsZWdlIGlzIGFza2luZyBzdHVkZW50cyB3aGF0IGdlbmVyYWwgaW50ZXJlc3QgY291cnNlcyB0aGV5IHdvdWxkIGxpa2Ugb2ZmZXJlZCBhdCB0aGUgY29sbGVnZS4gVGhlIGNvbGxlZ2Ugd2FudHMgdG8gb2ZmZXIgZWl0aGVyIGEgYmFzaWMgY29va2luZyBjb3Vyc2Ugb3IgYW4gaW50cm9kdWN0b3J5IHBpYW5vIGNvdXJzZS4gWW91IGhhdmUgYmVlbiBhc2tlZCB0byByZXNwb25kIHRvIGFuIG9waW5pb24gc3VydmV5LiIsInByb21wdEhlYWQiOiJDaG9vc2UgdGhlIG9wdGlvbiB0aGF0IHlvdSBwcmVmZXIuIFdoeSBkbyB5b3UgcHJlZmVyIHlvdXIgY2hvaWNlPyBFeHBsYWluIHRoZSByZWFzb25zIGZvciB5b3VyIGNob2ljZS4gV3JpdGUgYWJvdXQgMTUwXHUyMDEzMjAwIHdvcmRzLiIsImJ1bGxldHMiOltdLCJvcHRpb25zIjpbeyJrZXkiOiJBIiwibGFiZWwiOiJPcHRpb24gQTogSSB3b3VsZCBwcmVmZXIgdG8gdGFrZSBhIGJhc2ljIGNvb2tpbmcgY291cnNlLiJ9LHsia2V5IjoiQiIsImxhYmVsIjoiT3B0aW9uIEI6IEkgd291bGQgcHJlZmVyIHRvIHRha2UgYW4gaW50cm9kdWN0b3J5IHBpYW5vIGNvdXJzZS4ifV0sInNhbU5vdGUiOiJUaGVzZSBhcmUgQWxsRW5nbGlzaDRVIG1vZGVsIGFuc3dlcnMgd3JpdHRlbiBmb3IgdGhpcyBleGFjdCBUYXNrIDIgb3Bpbmlvbi1zdXJ2ZXkgcHJvbXB0IChjaG9vc2luZyBiZXR3ZWVuIGEgYmFzaWMgY29va2luZyBjb3Vyc2UgYW5kIGFuIGludHJvZHVjdG9yeSBwaWFubyBjb3Vyc2UgYXQgdGhlIGxvY2FsIGNvbW11bml0eSBjb2xsZWdlKSwgc2hvd24gYXQgdGhyZWUgc2NvcmUgbGV2ZWxzIChDRUxQSVAgNFx1MjAxMzUsIDdcdTIwMTM4IGFuZCAxMFx1MjAxMzEyKSBzbyB5b3UgY2FuIHNlZSBob3cgdGhlIHNhbWUgdGFzayByZWFkcyBhcyBpdCBpbXByb3Zlcy4gVGhleSBhcmUgQUU0VSBzdHVkeSBtb2RlbHMsIG5vdCBvZmZpY2lhbCBDRUxQSVAgc2FtcGxlczsgdGhlIDRcdTIwMTM1IG1vZGVsIGRlbGliZXJhdGVseSBrZWVwcyBzb21lIGVycm9ycy4iLCJzYW1wbGVzIjpbeyJsZXZlbCI6IkNFTFBJUCA0XHUyMDEzNSBSZXNwb25zZSIsIm5vdGUiOiJPcHRpb24gQSBmb3IgZXZlcnlkYXkgdXNlZnVsbmVzcyBhbmQgaGVhbHRoOyBzaW1wbGUgcmVhc29uaW5nIGFuZCBhIGZpcm0sIGNsZWFyIHByZWZlcmVuY2UuIiwidGV4dCI6IkkgY2hvb3NlIE9wdGlvbiBBLiBJIHdvdWxkIHByZWZlciB0byB0YWtlIGEgYmFzaWMgY29va2luZyBjb3Vyc2UuXG5cblRoZSBmaXJzdCByZWFzb24gaXMgdmVyeSBwcmFjdGljYWwuIENvb2tpbmcgaXMgYSBza2lsbCB0aGF0IGV2ZXJ5Ym9keSB1c2UgZXZlcnkgZGF5LiBJZiBJIGtub3cgaG93IHRvIGNvb2ssIEkgY2FuIG1ha2UgaGVhbHRoeSBmb29kIGF0IGhvbWUgYW5kIGFsc28gc2F2ZSBhIGxvdCBvZiBtb25leSwgYmVjYXVzZSBlYXRpbmcgaW4gcmVzdGF1cmFudCBpcyBleHBlbnNpdmUuIFRoaXMgaXMgdXNlZnVsIGZvciBhbGwgbXkgbGlmZS5cblxuVGhlIHNlY29uZCByZWFzb24gaXMgYWJvdXQgaGVhbHRoLiBNYW55IHlvdW5nIHN0dWRlbnRzIGVhdCBmYXN0IGZvb2QgYmVjYXVzZSB0aGV5IGRvbid0IGtub3cgaG93IHRvIGNvb2suIElmIHRoZSBjb2xsZWdlIG9mZmVyIGEgYmFzaWMgY29va2luZyBjb3Vyc2UsIHN0dWRlbnRzIGNhbiBsZWFybiB0byBwcmVwYXJlIHNpbXBsZSBhbmQgaGVhbHRoeSBtZWFscy4gVGhpcyBpcyBnb29kIGZvciB0aGVpciBib2R5IGFuZCBhbHNvIGZvciB0aGVpciBzdHVkeS5cblxuQWxzbywgY29va2luZyBpcyBhIGZ1biBhY3Rpdml0eSB0byBkbyB3aXRoIGZyaWVuZHMuIEluIHRoZSBjbGFzcyB3ZSBjYW4gY29vayB0b2dldGhlciwgdGFzdGUgdGhlIGZvb2QsIGFuZCBzaGFyZSByZWNpcGVzLiBJdCBpcyBhIG5pY2Ugd2F5IHRvIG1lZXQgbmV3IHBlb3BsZS5cblxuQSBwaWFubyBjb3Vyc2UgaXMgYWxzbyBpbnRlcmVzdGluZywgYnV0IG5vdCBldmVyeWJvZHkgaGFzIGEgcGlhbm8gYXQgaG9tZSB0byBwcmFjdGlzZS4gRm9yIGNvb2tpbmcsIGV2ZXJ5Ym9keSBoYXMgYSBraXRjaGVuLiBTbyBPcHRpb24gQSBpcyBtb3JlIHVzZWZ1bCBmb3IgdGhlIG1vc3Qgc3R1ZGVudHMuIFRoaXMgaXMgd2h5IEkgcHJlZmVyIE9wdGlvbiBBLiJ9LHsibGV2ZWwiOiJDRUxQSVAgN1x1MjAxMzggUmVzcG9uc2UiLCJub3RlIjoiT3B0aW9uIEIgZGVmZW5kZWQgYXMgYSBnZW51aW5lbHkgbmV3IHNraWxsIHdpdGggYmVuZWZpdHMgZm9yIHRoZSBtaW5kLCBjb25jZWRpbmcgY29va2luZydzIHZhbHVlLiIsInRleHQiOiJCZXR3ZWVuIHRoZSB0d28gY291cnNlcyBvbiBvZmZlciwgSSB3b3VsZCBjaG9vc2UgT3B0aW9uIEI6IGFuIGludHJvZHVjdG9yeSBwaWFubyBjb3Vyc2UuXG5cbk15IGZpcnN0IHJlYXNvbiBpcyB0aGF0IGEgY29va2luZyBjb3Vyc2UsIHdoaWxlIHVzZWZ1bCwgdGVhY2hlcyBzb21ldGhpbmcgbW9zdCBvZiB1cyBhbHJlYWR5IGRvIGF0IGhvbWUgZXZlcnkgZGF5LiBBIHBpYW5vIGNvdXJzZSwgYnkgY29udHJhc3QsIG9wZW5zIGEgZG9vciB0byBhIGdlbnVpbmVseSBuZXcgc2tpbGwgdGhhdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBiZWdpbiBvbiB5b3VyIG93bi4gSGF2aW5nIGEgdGVhY2hlciBhbmQgYSBwcm9wZXIgaW5zdHJ1bWVudCBhdCB0aGUgY29sbGVnZSB3b3VsZCBtYWtlIHRob3NlIGNydWNpYWwgZmlyc3Qgc3RlcHMgZmFyIGVhc2llci5cblxuU2Vjb25kbHksIGxlYXJuaW5nIGFuIGluc3RydW1lbnQgb2ZmZXJzIHJlYWwgYmVuZWZpdHMgZm9yIHRoZSBtaW5kLiBTdHVkaWVzIHN1Z2dlc3QgdGhhdCBwbGF5aW5nIHRoZSBwaWFubyBpbXByb3ZlcyBtZW1vcnksIGNvbmNlbnRyYXRpb24sIGFuZCBwYXRpZW5jZSwgYWxsIG9mIHdoaWNoIGhlbHAgc3R1ZGVudHMgaW4gdGhlaXIgb3RoZXIgc3ViamVjdHMuIEFmdGVyIGEgc3RyZXNzZnVsIGRheSBvZiBsZWN0dXJlcywgc2l0dGluZyBkb3duIHRvIHBsYXkgYSBmZXcgbm90ZXMgd291bGQgYWxzbyBiZSBhIHdvbmRlcmZ1bCB3YXkgdG8gcmVsYXguXG5cbkkgcmVjb2duaXplIHRoYXQgY29va2luZyBpcyBhIHByYWN0aWNhbCBsaWZlIHNraWxsIGFuZCB0aGF0IG1hbnkgc3R1ZGVudHMgd291bGQgZW5qb3kgaXQuIEhvd2V2ZXIsIG1vc3QgcGVvcGxlIGNhbiBwaWNrIHVwIGJhc2ljIGNvb2tpbmcgZnJvbSBmYW1pbHkgb3IgdGhlIGludGVybmV0LCB3aGVyZWFzIHN0cnVjdHVyZWQgbXVzaWMgbGVzc29ucyBhcmUgZmFyIGhhcmRlciB0byBhcnJhbmdlIHByaXZhdGVseS5cblxuRm9yIHRoZSBjaGFuY2UgdG8gbGVhcm4gc29tZXRoaW5nIG5ldyBhbmQgZW5yaWNoaW5nLCBteSBwcmVmZXJlbmNlIGlzIGNsZWFybHkgT3B0aW9uIEIuIn0seyJsZXZlbCI6IkNFTFBJUCAxMFx1MjAxMzEyIFJlc3BvbnNlIiwibm90ZSI6IkEgcmVmbGVjdGl2ZSBPcHRpb24gQSBjYXNlIG9uIGRhaWx5IHByYWN0aWNhbGl0eSBhbmQgc2hhcmVkIGtpdGNoZW5zLCBjb25jZWRpbmcgdGhlIHBpYW5vJ3MgYXBwZWFsLiIsInRleHQiOiJBZnRlciBnaXZpbmcgYm90aCBvcHRpb25zIGdlbnVpbmUgdGhvdWdodCwgSSB3b3VsZCBjaG9vc2UgT3B0aW9uIEE6IGEgYmFzaWMgY29va2luZyBjb3Vyc2UuXG5cbk15IGZpcnN0IHJlYXNvbiBpcyB0aGUgc2hlZXIgdXNlZnVsbmVzcyBvZiB0aGUgc2tpbGwuIENvb2tpbmcgaXMgc29tZXRoaW5nIGV2ZXJ5IHN0dWRlbnQgd2lsbCByZWx5IG9uIGZvciB0aGUgcmVzdCBvZiB0aGVpciBsaXZlcywgd2hhdGV2ZXIgY2FyZWVyIHRoZXkgZXZlbnR1YWxseSBwdXJzdWUuIEEgY291cnNlIHRoYXQgdGVhY2hlcyBob3cgdG8gcGxhbiwgcHJlcGFyZSwgYW5kIHN0b3JlIHNpbXBsZSBtZWFscyB3b3VsZCBwYXkgZGl2aWRlbmRzIGRhaWx5LCBoZWxwaW5nIHN0dWRlbnRzIGVhdCBtb3JlIGhlYWx0aGlseSBhbmQgc3BlbmQgZmFyIGxlc3Mgb24gZXhwZW5zaXZlIHRha2Vhd2F5cyBhbmQgcmVzdGF1cmFudHMuXG5cbk15IHNlY29uZCByZWFzb24gaXMgdGhlIHNvY2lhbCBhbmQgY3VsdHVyYWwgdmFsdWUgb2YgYSBzaGFyZWQga2l0Y2hlbi4gQSBjb29raW5nIGNsYXNzIG5hdHVyYWxseSBicmluZ3MgcGVvcGxlIHRvZ2V0aGVyOiBzdHVkZW50cyBjaG9wLCB0YXN0ZSwgYW5kIGNsZWFuIHVwIHNpZGUgYnkgc2lkZSwgYW5kIGluIGEgZGl2ZXJzZSBjb2xsZWdlIHRoZXkgY2FuIGV4Y2hhbmdlIGRpc2hlcyBhbmQgdHJhZGl0aW9ucyBmcm9tIG1hbnkgY3VsdHVyZXMuIEZldyBjbGFzc3Jvb20gc3ViamVjdHMgYnVpbGQgZnJpZW5kc2hpcHMgc28gZWFzaWx5LlxuXG5JIGRvIHNlZSB0aGUgYXBwZWFsIG9mIGFuIGludHJvZHVjdG9yeSBwaWFubyBjb3Vyc2UsIGFuZCBtdXNpYyB1bmRvdWJ0ZWRseSBlbnJpY2hlcyBsaWZlLiBZZXQgYSBwaWFubyBpcyBjb3N0bHkgYW5kIGhhcmQgdG8gcHJhY3Rpc2Ugd2l0aG91dCBhbiBpbnN0cnVtZW50IGF0IGhvbWUsIHdoZXJlYXMgZXZlcnkgc3R1ZGVudCBoYXMgYWNjZXNzIHRvIGEga2l0Y2hlbiBhbmQgbXVzdCBlYXQgcmVnYXJkbGVzcy4gVGhlIGNvb2tpbmcgY291cnNlIHRoZXJlZm9yZSByZWFjaGVzIG1vcmUgcGVvcGxlIGFuZCBwcm9kdWNlcyBiZW5lZml0cyB0aGV5IGNhbiB1c2UgaW1tZWRpYXRlbHkuXG5cbkZvciBpdHMgZXZlcnlkYXkgcHJhY3RpY2FsaXR5IGFuZCBpdHMgcG93ZXIgdG8gYnJpbmcgc3R1ZGVudHMgdG9nZXRoZXIsIG15IGZpcm0gcHJlZmVyZW5jZSBpcyBPcHRpb24gQS4ifV19XSwicnVicmljIjpbeyJrIjoiQ29udGVudCAvIENvaGVyZW5jZSIsImQiOiJBbGwgcmVxdWlyZWQgcG9pbnRzIGFyZSBjb3ZlcmVkIGFuZCBkZXZlbG9wZWQgd2l0aCBjbGVhciwgbG9naWNhbGx5IGNvbm5lY3RlZCBpZGVhcyBhbmQgcGFyYWdyYXBocy4ifSx7ImsiOiJWb2NhYnVsYXJ5IiwiZCI6IldvcmQgY2hvaWNlIGlzIHZhcmllZCwgcHJlY2lzZSBhbmQgc3VpdHMgdGhlIHRvbmUgKGEgc2VtaS1mb3JtYWwgZW1haWwgLyBhIHJlYXNvbmVkIG9waW5pb24pLiJ9LHsiayI6IlJlYWRhYmlsaXR5IiwiZCI6IkdyYW1tYXIsIHNwZWxsaW5nIGFuZCBwdW5jdHVhdGlvbiBhcmUgYWNjdXJhdGUgZW5vdWdoIHRoYXQgdGhlIHJlYWRlciBpcyBuZXZlciBzbG93ZWQgZG93bi4ifSx7ImsiOiJUYXNrIEZ1bGZpbGxtZW50IiwiZCI6IlRoZSByZXNwb25zZSBmaXRzIHRoZSBwdXJwb3NlIGFuZCBhdWRpZW5jZSwga2VlcHMgdGhlIDE1MFx1MjAxMzIwMCB3b3JkIGxlbmd0aCwgYW5kIHJlYWRzIGxpa2UgYSByZWFsIGVtYWlsIC8gc3VydmV5IGFuc3dlci4ifV0sInNjb3JpbmdOb3RlIjoiQ0VMUElQIFdyaXRpbmcgaXMgcmF0ZWQgYnkgaHVtYW4gcmF0ZXJzIG9uIGEgc2NhbGUgZnJvbSBNIHRvIDEyIHRoYXQgbWFwcyAxOjEgdG8gdGhlIENhbmFkaWFuIExhbmd1YWdlIEJlbmNobWFya3MgKENMQikuIEVhY2ggdGFzayBpcyBqdWRnZWQgaG9saXN0aWNhbGx5IG9uIGZvdXIgZGltZW5zaW9ucyBcdTIwMTQgQ29udGVudC9Db2hlcmVuY2UsIFZvY2FidWxhcnksIFJlYWRhYmlsaXR5IGFuZCBUYXNrIEZ1bGZpbGxtZW50LiBUaGVyZSBpcyBubyBzaW5nbGUgXHUyMDE4Y29ycmVjdFx1MjAxOSBhbnN3ZXIsIHNvIHVzZSB0aGUgc2FtcGxlIHJlc3BvbnNlcyBhbmQgdGhlIHNlbGYtY2hlY2sgYmVsb3cgdG8gc2VlIHdoZXJlIHlvdXIgd3JpdGluZyBzaXRzIGFuZCB3aGF0IHRvIGltcHJvdmUuIn07CihmdW5jdGlvbigpewogICJ1c2Ugc3RyaWN0IjsKICBpZih3aW5kb3cuX19jbHB3SW5pdCkgcmV0dXJuOyB3aW5kb3cuX19jbHB3SW5pdCA9IHRydWU7CgogIHZhciBMUyA9ICJhZTR1X2NscHdfczF0MV92MSI7CiAgdmFyIHN0YXRlID0geyBhY3RpdmU6MSwgc2FtcGxlczp7MTpmYWxzZSwyOmZhbHNlfSwgdGFiOnsxOjAsMjowfSwgb3B0Om51bGwsCiAgICAgICAgICAgICAgICB0ZXh0OnsxOiIiLDI6IiJ9LCBydWJyaWM6ezE6e30sMjp7fX0sCiAgICAgICAgICAgICAgICB0aW1lcjp7MTp7cmVtOldEQVRBLnRhc2tzWzBdLm1pbnV0ZXMqNjAscnVuOmZhbHNlLGl2Om51bGx9LAogICAgICAgICAgICAgICAgICAgICAgICAyOntyZW06V0RBVEEudGFza3NbMV0ubWludXRlcyo2MCxydW46ZmFsc2UsaXY6bnVsbH19IH07CgogIC8vIC0tLS0tLS0tLS0gaGVscGVycyAtLS0tLS0tLS0tCiAgZnVuY3Rpb24gZXNjKHMpeyByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKTsgfQogIGZ1bmN0aW9uIHdjKHMpeyB2YXIgbT0oc3x8IiIpLnRyaW0oKS5tYXRjaCgvXFMrL2cpOyByZXR1cm4gbT9tLmxlbmd0aDowOyB9CiAgZnVuY3Rpb24gZm10KHNlYyl7IHNlYz1NYXRoLm1heCgwLHNlY3wwKTsgdmFyIG09TWF0aC5mbG9vcihzZWMvNjApLCBzPXNlYyU2MDsgcmV0dXJuIChtPDEwPyIwIjoiIikrbSsiOiIrKHM8MTA\/IjAiOiIiKStzOyB9CiAgZnVuY3Rpb24gbG9hZCgpeyB0cnl7IHZhciBvPUpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTFMpKTsgaWYobyYmdHlwZW9mIG89PT0ib2JqZWN0Iil7CiAgICAgICAgc3RhdGUudGV4dFsxXT1vLnQxfHwiIjsgc3RhdGUudGV4dFsyXT1vLnQyfHwiIjsgc3RhdGUub3B0PW8ub3B0fHxudWxsOwogICAgICAgIHN0YXRlLnJ1YnJpY1sxXT1vLnIxfHx7fTsgc3RhdGUucnVicmljWzJdPW8ucjJ8fHt9OyB9IH1jYXRjaChlKXt9IH0KICBmdW5jdGlvbiBzYXZlKCl7IHRyeXsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFMsIEpTT04uc3RyaW5naWZ5KHsKICAgICAgICB0MTpzdGF0ZS50ZXh0WzFdLCB0MjpzdGF0ZS50ZXh0WzJdLCBvcHQ6c3RhdGUub3B0LCByMTpzdGF0ZS5ydWJyaWNbMV0sIHIyOnN0YXRlLnJ1YnJpY1syXSB9KSk7IH1jYXRjaChlKXt9CiAgICAgICAgZmxhc2hTYXZlZCgpOyB9CiAgdmFyIHNhdmVkVE89bnVsbDsKICBmdW5jdGlvbiBmbGFzaFNhdmVkKCl7IHZhciBlbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1NhdmVkIik7IGlmKCFlbCkgcmV0dXJuOwogICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoImNscHctc2F2ZWQtb24iKTsgaWYoc2F2ZWRUTykgY2xlYXJUaW1lb3V0KHNhdmVkVE8pOwogICAgICAgIHNhdmVkVE89c2V0VGltZW91dChmdW5jdGlvbigpeyBlbC5jbGFzc0xpc3QucmVtb3ZlKCJjbHB3LXNhdmVkLW9uIik7IH0sMTIwMCk7IH0KCiAgLy8gLS0tLS0tLS0tLSBDU1MgLS0tLS0tLS0tLQogIHZhciBDU1MgPSAiIgogICsiLmNscHctd3JhcHstLW5hdnk6IzA1MEUyMDstLWI5MDA6IzBEMjM1MjstLWI3MDA6IzEyNDVBODstLWI1MDA6IzI1NjNFQjstLWI0MDA6IzNCODJGNjstLWIyMDA6IzkzQzVGRDstLWIxMDA6I0RCRUFGRTstLWI1MDojRUZGNkZGOy0tdGVhbDojMEQ5NDg4Oy0tZ3JlZW46IzEwQjk4MTstLWdyZWVuNTA6I0VDRkRGNTstLXJvc2U6I0Y0M0Y1RTstLXJvc2U1MDojRkZGMUYzOy0tb3JhbmdlOiNGOTczMTY7LS1hbWJlcjUwOiNGRkZCRUI7LS10ZXh0OiMwRjE3MkE7LS1tdXRlZDojNDc1NTY5Oy0tc3VidGxlOiM5NEEzQjg7LS1ib3JkZXI6I0UyRThGMDstLWNyaW1zb246I0I0MkIzQzstLXBhZ2U6I0Y4RkFGRjtmb250LWZhbWlseTonUGx1cyBKYWthcnRhIFNhbnMnLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxzYW5zLXNlcmlmO2NvbG9yOnZhcigtLXRleHQpO21heC13aWR0aDoxMTQwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjE2cHggMTZweCA1NnB4O2xpbmUtaGVpZ2h0OjEuNTU7Zm9udC1zaXplOjE2cHg7fSIKICArIi5jbHB3LXdyYXAgKiwuY2xwdy13cmFwICo6OmJlZm9yZSwuY2xwdy13cmFwICo6OmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDt9IgogICsiLmNscHctd3JhcCBidXR0b257Zm9udC1mYW1pbHk6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjt9IgogICsiLmNscHctd3JhcCBoMSwuY2xwdy13cmFwIGgyLC5jbHB3LXdyYXAgaDMsLmNscHctd3JhcCBwe21hcmdpbjowO30iCiAgLy8gaGVybwogICsiLmNscHctaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoyMnB4O2JhY2tncm91bmQ6dmFyKC0tbmF2eSk7Y29sb3I6I2ZmZjtwYWRkaW5nOjM0cHggMzhweDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxM3B4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Ym94LXNoYWRvdzowIDIwcHggNDBweCAtMjBweCByZ2JhKDUsMTQsMzIsLjQ1KSwwIDRweCAxMnB4IC02cHggcmdiYSg1LDE0LDMyLC4zKTt9IgogICsiLmNscHctYXVyb3Jhe3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt9IgogICsiLmNscHctYXVyb3JhIHNwYW57cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7ZmlsdGVyOmJsdXIoNjBweCk7b3BhY2l0eTouNTthbmltYXRpb246Y2xwd0Zsb2F0IDE0cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGU7fSIKICArIi5jbHB3LWF1cm9yYSBzcGFuOm50aC1jaGlsZCgxKXt3aWR0aDo0MjBweDtoZWlnaHQ6NDIwcHg7bGVmdDotMTIwcHg7dG9wOi0yMDBweDtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIzEyNDVBOCAwJSx0cmFuc3BhcmVudCA3MCUpO30iCiAgKyIuY2xwdy1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMil7d2lkdGg6MzgwcHg7aGVpZ2h0OjM4MHB4O3JpZ2h0Oi04MHB4O3RvcDotMTYwcHg7YmFja2dyb3VuZDpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLCMwRDk0ODggMCUsdHJhbnNwYXJlbnQgNzAlKTthbmltYXRpb24tZGVsYXk6LTRzO30iCiAgKyIuY2xwdy1hdXJvcmEgc3BhbjpudGgtY2hpbGQoMyl7d2lkdGg6MzQwcHg7aGVpZ2h0OjM0MHB4O3JpZ2h0OjIyJTtib3R0b206LTI0MHB4O2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwjMjU2M0VCIDAlLHRyYW5zcGFyZW50IDcwJSk7YW5pbWF0aW9uLWRlbGF5Oi04czt9IgogICsiQGtleWZyYW1lcyBjbHB3RmxvYXR7ZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApIHNjYWxlKDEpO310b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoNDBweCwyNnB4LDApIHNjYWxlKDEuMTIpO319IgogICsiLmNscHctaGJhZGdlc3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO3Bvc2l0aW9uOnJlbGF0aXZlO30iCiAgKyIuY2xwdy1iYnJhbmR7YmFja2dyb3VuZDp2YXIoLS1jcmltc29uKTtjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjgwMDtmb250LXNpemU6MTJweDtsZXR0ZXItc3BhY2luZzouMTJlbTtwYWRkaW5nOjVweCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O30iCiAgKyIuY2xwdy1ic2V0e2NvbG9yOnZhcigtLWIyMDApO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDt9IgogICsiLmNscHctaGVybyBoMXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6Y2xhbXAoMjZweCw0dncsNDBweCk7Zm9udC13ZWlnaHQ6ODAwO2xldHRlci1zcGFjaW5nOi0uMDJlbTtsaW5lLWhlaWdodDoxLjEyO30iCiAgKyIuY2xwdy1oZXJvLXN1Yntwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojQzdEMkU4O2ZvbnQtc2l6ZToxNXB4O21heC13aWR0aDo2MGNoO30iCiAgKyIuY2xwdy1oY2hpcHN7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7cG9zaXRpb246cmVsYXRpdmU7fSIKICArIi5jbHB3LWNoaXB7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wOSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDE0NywxOTcsMjUzLC4yNSk7Y29sb3I6I0RCRUFGRTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7cGFkZGluZzo2cHggMTRweDtib3JkZXItcmFkaXVzOjMycHg7YmFja2Ryb3AtZmlsdGVyOmJsdXIoNHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGVhc2UsYmFja2dyb3VuZCAuMjVzIGVhc2U7fSIKICArIi5jbHB3LWNoaXA6aG92ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTJweCk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xNSk7fSIKICArIi5jbHB3LWN0YXtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjEzcHggMzRweDttYXJnaW4tdG9wOjJweDtib3gtc2hhZG93OjAgMTBweCAyMnB4IC04cHggcmdiYSgzNyw5OSwyMzUsLjY1KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjJzIGVhc2UsYm94LXNoYWRvdyAuMjJzIGVhc2UsYmFja2dyb3VuZCAuMjJzIGVhc2U7fSIKICArIi5jbHB3LWN0YTpob3Zlcnt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMnB4KTtiYWNrZ3JvdW5kOnZhcigtLWI0MDApO2JveC1zaGFkb3c6MCAxNHB4IDI2cHggLThweCByZ2JhKDM3LDk5LDIzNSwuNzUpO30iCiAgLy8gdG9vbGJhcgogICsiLmNscHctdG9vbHN7cG9zaXRpb246c3RpY2t5O3RvcDo4cHg7ei1pbmRleDo2MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuOTMpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDhweCk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjhweCAxMnB4O21hcmdpbjoxOHB4IDAgMDtib3gtc2hhZG93OjAgOHB4IDI0cHggLTE0cHggcmdiYSgxNSwyMyw0MiwuMjUpLDAgMnB4IDZweCAtNHB4IHJnYmEoMTUsMjMsNDIsLjEyKTttaW4taGVpZ2h0OjUycHg7fSIKICArIi5jbHB3LXdjb3VudHtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tYjkwMCk7YmFja2dyb3VuZDp2YXIoLS1iNTApO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYjEwMCk7Ym9yZGVyLXJhZGl1czozMnB4O3BhZGRpbmc6N3B4IDE0cHg7fSIKICArIi5jbHB3LXNwYWNlcntmbGV4OjE7fSIKICArIi5jbHB3LXNhdmVke2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ncmVlbik7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZTt9IgogICsiLmNscHctc2F2ZWQtb257b3BhY2l0eToxO30iCiAgKyIuY2xwdy10YnRue2JvcmRlci1yYWRpdXM6MTBweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7cGFkZGluZzo5cHggMTZweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7YmFja2dyb3VuZDojZmZmO2NvbG9yOnZhcigtLW11dGVkKTttaW4taGVpZ2h0OjQwcHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UsYm94LXNoYWRvdyAuMnMgZWFzZSxiYWNrZ3JvdW5kIC4ycyBlYXNlO30iCiAgKyIuY2xwdy10YnRuOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xcHgpO2JveC1zaGFkb3c6MCA2cHggMTRweCAtOHB4IHJnYmEoMTUsMjMsNDIsLjMpO30iCiAgLy8gZG90cwogICsiLmNscHctc2lte21hcmdpbi10b3A6MThweDt9IgogICsiLmNscHctZG90c3tkaXNwbGF5OmZsZXg7Z2FwOjZweDttYXJnaW46MCAwIDEwcHggMnB4O30iCiAgKyIuY2xwdy1kb3R7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1zdWJ0bGUpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXItcmFkaXVzOjMycHg7cGFkZGluZzo1cHggMTRweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjI1cyBlYXNlLGNvbG9yIC4yNXMgZWFzZTt9IgogICsiLmNscHctZG90Lm9ue2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Ym9yZGVyLWNvbG9yOnZhcigtLWI1MDApO2NvbG9yOiNmZmY7fSIKICArIi5jbHB3LWRvdC5maWxsZWR7YmFja2dyb3VuZDp2YXIoLS1iMTAwKTtib3JkZXItY29sb3I6dmFyKC0tYjIwMCk7Y29sb3I6dmFyKC0tYjkwMCk7fSIKICAvLyBjYXQgY2FyZAogICsiLmNscHctY2F0e3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI0QzRDlFMDtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MCAxMHB4IDMwcHggLTE4cHggcmdiYSgxNSwyMyw0MiwuMjIpLDAgMnB4IDhweCAtNXB4IHJnYmEoMTUsMjMsNDIsLjEpO30iCiAgKyIuY2xwdy10YXNre2Rpc3BsYXk6bm9uZTt9IgogICsiLmNscHctdGFzay5vbntkaXNwbGF5OmJsb2NrO30iCiAgKyIuY2xwdy1iYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTJweDtiYWNrZ3JvdW5kOiNFOEVCRUY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0QzRDlFMDtib3JkZXItcmFkaXVzOjEwcHggMTBweCAwIDA7cGFkZGluZzo5cHggMTRweDttaW4taGVpZ2h0OjQ0cHg7fSIKICArIi5jbHB3LWJhci10e2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMUYyOTM3O2ZsZXg6MTttaW4td2lkdGg6MDt9IgogICsiLmNscHctYmFyLXRpbWV7Zm9udC1zaXplOjEycHg7Y29sb3I6IzFGMjkzNzt3aGl0ZS1zcGFjZTpub3dyYXA7fSIKICArIi5jbHB3LWJhci10aW1lIGJ7Zm9udC13ZWlnaHQ6ODAwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczt9IgogICsiLmNscHctYmFyLXRpbWUubG93IGJ7Y29sb3I6dmFyKC0tcm9zZSk7fSIKICAvLyBzcGxpdAogICsiLmNscHctc3BsaXR7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMjIwcHgsMjkwcHgpIDFmcjt9IgogICsiLmNscHctcmVhZHtiYWNrZ3JvdW5kOiNGNEY2Rjg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjRTNFNkVBO3BhZGRpbmc6MTZweCAxNnB4IDE4cHg7fSIKICArIi5jbHB3LXdyaXRle2JhY2tncm91bmQ6I0VBRjRGNztwYWRkaW5nOjE2cHggMThweCAxOHB4O30iCiAgKyIuY2xwdy1yaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6OHB4O21hcmdpbi1ib3R0b206OHB4O30iCiAgKyIuY2xwdy1pbmZve2ZsZXg6bm9uZTt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbi10b3A6MXB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6dmFyKC0tYjUwMCk7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjExcHg7Zm9udC1zdHlsZTppdGFsaWM7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LWZhbWlseTpHZW9yZ2lhLHNlcmlmO30iCiAgKyIuY2xwdy1yaGVhZCBwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctc2NlbmFyaW8taHtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo4MDA7Y29sb3I6IzMzNDE1NTttYXJnaW4tYm90dG9tOjRweDt9IgogICsiLmNscHctc2NlbmFyaW97Zm9udC1zaXplOjEzLjVweDtjb2xvcjojMzM0MTU1O2xpbmUtaGVpZ2h0OjEuNjt9IgogICsiLmNscHctc2FtdG9nZ2xle21hcmdpbi10b3A6MTRweDt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MS41cHggc29saWQgdmFyKC0tY3JpbXNvbik7Y29sb3I6dmFyKC0tY3JpbXNvbik7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMy41cHg7Ym9yZGVyLXJhZGl1czo5cHg7cGFkZGluZzoxMXB4IDEycHg7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlLGNvbG9yIC4ycyBlYXNlO30iCiAgKyIuY2xwdy1zYW10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jcmltc29uKTtjb2xvcjojZmZmO30iCiAgKyIuY2xwdy1wcm9tcHRyb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDttYXJnaW4tYm90dG9tOjhweDt9IgogICsiLmNscHctcHJvbXB0cm93IHB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWI5MDApO30iCiAgKyIuY2xwdy1idWxsZXRze21hcmdpbjowIDAgMTJweCAwO3BhZGRpbmctbGVmdDoyMHB4O2NvbG9yOiMzMzQxNTU7Zm9udC1zaXplOjEzLjVweDt9IgogICsiLmNscHctYnVsbGV0cyBsaXttYXJnaW46M3B4IDA7fSIKICArIi5jbHB3LW9wdHN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4O21hcmdpbjowIDAgMTJweDt9IgogICsiLmNscHctb3B0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDo5cHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI0Q2RThFRDtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjEwcHggMTJweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTMuNXB4O2NvbG9yOiMzMzQxNTU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UsYmFja2dyb3VuZCAuMnMgZWFzZTt9IgogICsiLmNscHctb3B0OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1iNDAwKTt9IgogICsiLmNscHctb3B0LnNlbHtib3JkZXItY29sb3I6dmFyKC0tYjUwMCk7YmFja2dyb3VuZDp2YXIoLS1iNTApO30iCiAgKyIuY2xwdy1vcHQgaW5wdXR7bWFyZ2luLXRvcDozcHg7YWNjZW50LWNvbG9yOnZhcigtLWI1MDApO2ZsZXg6bm9uZTt9IgogICsiLmNscHctdGF7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjI2MHB4O3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6MXB4IHNvbGlkICNDOUQ2RGM7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzoxM3B4IDE0cHg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjojMEYxNzJBO2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDNweCByZ2JhKDE1LDIzLDQyLC4wNSk7fSIKICArIi5jbHB3LXRhOmZvY3Vze291dGxpbmU6bm9uZTtib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7Ym94LXNoYWRvdzowIDAgMCAzcHggcmdiYSg1OSwxMzAsMjQ2LC4xNSk7fSIKICArIi5jbHB3LXdtZXRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi10b3A6OXB4O30iCiAgKyIuY2xwdy13cGlsbHtmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEzcHg7Ym9yZGVyLXJhZGl1czozMnB4O3BhZGRpbmc6NnB4IDE0cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1tdXRlZCk7fSIKICArIi5jbHB3LXdwaWxsLmxvd3tjb2xvcjp2YXIoLS1tdXRlZCk7fSIKICArIi5jbHB3LXdwaWxsLmdvb2R7Y29sb3I6IzA0Nzg1NztiYWNrZ3JvdW5kOnZhcigtLWdyZWVuNTApO2JvcmRlci1jb2xvcjojQTdGM0QwO30iCiAgKyIuY2xwdy13cGlsbC5vdmVye2NvbG9yOiNCNDUzMDk7YmFja2dyb3VuZDp2YXIoLS1hbWJlcjUwKTtib3JkZXItY29sb3I6I0ZERTY4QTt9IgogICsiLmNscHctd3BpbGwubWF4e2NvbG9yOiNCRTEyM0M7YmFja2dyb3VuZDp2YXIoLS1yb3NlNTApO2JvcmRlci1jb2xvcjojRkVDREQzO30iCiAgKyIuY2xwdy10bXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O21hcmdpbi1sZWZ0OmF1dG87fSIKICArIi5jbHB3LXRtci1idG57Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMi41cHg7Ym9yZGVyLXJhZGl1czo4cHg7cGFkZGluZzo3cHggMTJweDt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjJzIGVhc2UsY29sb3IgLjJzIGVhc2UsYm9yZGVyLWNvbG9yIC4ycyBlYXNlO30iCiAgKyIuY2xwdy10bXItYnRuOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1iNDAwKTtjb2xvcjp2YXIoLS1iNzAwKTt9IgogICsiLmNscHctdG1yLWJ0bi5ydW57YmFja2dyb3VuZDp2YXIoLS1iNTAwKTtib3JkZXItY29sb3I6dmFyKC0tYjUwMCk7Y29sb3I6I2ZmZjt9IgogIC8vIHNhbXBsZSBwYW5lbAogICsiLmNscHctc2FtcGxlc3ttYXJnaW4tdG9wOjE0cHg7Ym9yZGVyLXRvcDoxcHggZGFzaGVkICNEM0Q5RTA7cGFkZGluZzoxNnB4IDE4cHggMjBweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czowIDAgMTBweCAxMHB4O30iCiAgKyIuY2xwdy1zYW1wbGVzW2hpZGRlbl17ZGlzcGxheTpub25lO30iCiAgKyIuY2xwdy1zYW1ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbi1ib3R0b206MTJweDt9IgogICsiLmNscHctdGFic3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tYm90dG9tOjEycHg7fSIKICArIi5jbHB3LXRhYntib3JkZXI6MXB4IHNvbGlkICNEOURFRTU7YmFja2dyb3VuZDojRjFGM0Y2O2NvbG9yOiM0NzU1Njk7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxM3B4O2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OXB4IDE2cHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyBlYXNlLGNvbG9yIC4ycyBlYXNlO30iCiAgKyIuY2xwdy10YWIub257YmFja2dyb3VuZDp2YXIoLS1jcmltc29uKTtib3JkZXItY29sb3I6dmFyKC0tY3JpbXNvbik7Y29sb3I6I2ZmZjt9IgogICsiLmNscHctc2FtYm9keXtiYWNrZ3JvdW5kOiNGN0Y4RkE7Ym9yZGVyOjFweCBzb2xpZCAjRTdFQUVFO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjE2cHggMThweDt9IgogICsiLmNscHctc2FtbHZse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjgwMDtsZXR0ZXItc3BhY2luZzouMDZlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6dmFyKC0tY3JpbXNvbik7bWFyZ2luLWJvdHRvbTo4cHg7fSIKICArIi5jbHB3LXNhbXRleHR7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzFGMjkzNztsaW5lLWhlaWdodDoxLjc7d2hpdGUtc3BhY2U6cHJlLXdyYXA7fSIKICArIi5jbHB3LXNhbWhpbnR7bWFyZ2luLXRvcDoxMnB4O2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6IzQ3NTU2OTtiYWNrZ3JvdW5kOiNFRUYyRkY7Ym9yZGVyOjFweCBzb2xpZCAjREJFM0ZGO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmc6OXB4IDEycHg7fSIKICArIi5jbHB3LXNhbWhpbnQgYntjb2xvcjp2YXIoLS1iOTAwKTt9IgogIC8vIHJ1YnJpYyAvIHNjb3JpbmcKICArIi5jbHB3LXBhbmVse21hcmdpbi10b3A6MThweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTZweDtwYWRkaW5nOjIwcHggMjJweDtib3gtc2hhZG93OjAgMTBweCAzMHB4IC0yMHB4IHJnYmEoMTUsMjMsNDIsLjIpO30iCiAgKyIuY2xwdy1wYW5lbCBoMntmb250LXNpemU6MTlweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tYjkwMCk7bWFyZ2luLWJvdHRvbTo0cHg7fSIKICArIi5jbHB3LXBhbmVsIC5jbHB3LWxlYWR7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1tdXRlZCk7bWFyZ2luLWJvdHRvbToxNHB4O30iCiAgKyIuY2xwdy1ydWJncmlke2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTBweDt9IgogICsiLmNscHctcnVie2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxMHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYm9yZGVyKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMnB4IDE0cHg7YmFja2dyb3VuZDojRkNGREZGO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBlYXNlLGJhY2tncm91bmQgLjJzIGVhc2U7fSIKICArIi5jbHB3LXJ1Yjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYjQwMCk7fSIKICArIi5jbHB3LXJ1Yi5kb25le2JvcmRlci1jb2xvcjojQTdGM0QwO2JhY2tncm91bmQ6dmFyKC0tZ3JlZW41MCk7fSIKICArIi5jbHB3LXJ1YiBpbnB1dHttYXJnaW4tdG9wOjNweDthY2NlbnQtY29sb3I6dmFyKC0tZ3JlZW4pO2ZsZXg6bm9uZTt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O30iCiAgKyIuY2xwdy1ydWIta3tmb250LXdlaWdodDo4MDA7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1iOTAwKTt9IgogICsiLmNscHctcnViLWR7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1tdXRlZCk7bGluZS1oZWlnaHQ6MS41O21hcmdpbi10b3A6MnB4O30iCiAgKyIuY2xwdy1zY29yZWJveHttYXJnaW4tdG9wOjE0cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzMzNDE1NTtsaW5lLWhlaWdodDoxLjY7YmFja2dyb3VuZDp2YXIoLS1iNTApO2JvcmRlcjoxcHggc29saWQgdmFyKC0tYjEwMCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTRweCAxNnB4O30iCiAgKyIuY2xwdy1zY29yZWJveCBie2NvbG9yOnZhcigtLWI5MDApO30iCiAgKyIuY2xwdy1jbGJyb3d7ZGlzcGxheTpmbGV4O2dhcDo4cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDoxMnB4O30iCiAgKyIuY2xwdy1jbGJ0YWd7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWI3MDApO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWIxMDApO2JvcmRlci1yYWRpdXM6MzJweDtwYWRkaW5nOjZweCAxM3B4O30iCiAgKyIuY2xwdy1mb290e21hcmdpbi10b3A6MTZweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1zdWJ0bGUpO3RleHQtYWxpZ246Y2VudGVyO30iCiAgKyJAbWVkaWEobWF4LXdpZHRoOjgyMHB4KXsuY2xwdy1zcGxpdHtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyO30uY2xwdy1yZWFke2JvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFM0U2RUE7fS5jbHB3LXJ1YmdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt9LmNscHctaGVyb3twYWRkaW5nOjI2cHggMjJweDt9fSIKICA7CgogIGZ1bmN0aW9uIGluamVjdENTUygpeyBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1N0eWxlIikpIHJldHVybjsKICAgIHZhciBzdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOyBzdC5pZD0iY2xwd1N0eWxlIjsgc3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQ1NTKSk7CiAgICAoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdCk7IH0KCiAgLy8gLS0tLS0tLS0tLSBidWlsZCAtLS0tLS0tLS0tCiAgZnVuY3Rpb24gdGFza0hUTUwodCl7CiAgICB2YXIgZD1XREFUQS50YXNrc1t0LTFdOyB2YXIgaD0iIjsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXRhc2snKyh0PT09c3RhdGUuYWN0aXZlPycgb24nOicnKSsnIiBkYXRhLXRhc2s9IicrdCsnIiBpZD0iY2xwd1Rhc2snK3QrJyI+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1iYXIiPjxzcGFuIGNsYXNzPSJjbHB3LWJhci10Ij4nK2VzYyhkLmJhclRpdGxlKSsnPC9zcGFuPicKICAgICAgICsnPHNwYW4gY2xhc3M9ImNscHctYmFyLXRpbWUiIGlkPSJjbHB3QmFyVGltZScrdCsnIj5UaW1lIHJlbWFpbmluZzogPGI+JytmbXQoc3RhdGUudGltZXJbdF0ucmVtKSsnPC9iPjwvc3Bhbj4nCiAgICAgICArJzxidXR0b24gY2xhc3M9ImNscHctdG1yLWJ0biIgZGF0YS10bmV4dD0iJyt0KyciPicrKHQ8V0RBVEEudGFza3MubGVuZ3RoPydORVhUJzonRE9ORScpKyc8L2J1dHRvbj48L2Rpdj4nOwogICAgaCs9ICc8ZGl2IGNsYXNzPSJjbHB3LXNwbGl0Ij4nOwogICAgLy8gbGVmdAogICAgaCs9ICAnPGRpdiBjbGFzcz0iY2xwdy1yZWFkIj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctcmhlYWQiPjxzcGFuIGNsYXNzPSJjbHB3LWluZm8iPmk8L3NwYW4+PHA+Jytlc2MoZC5yZWFkSGVhZCkrJzwvcD48L2Rpdj4nOwogICAgaWYoZC5zY2VuYXJpb0hlYWQpeyBoKz0nPGRpdiBjbGFzcz0iY2xwdy1zY2VuYXJpby1oIj4nK2VzYyhkLnNjZW5hcmlvSGVhZCkrJzwvZGl2Pic7IH0KICAgIGgrPSAgICc8ZGl2IGNsYXNzPSJjbHB3LXNjZW5hcmlvIj4nK2VzYyhkLnNjZW5hcmlvKSsnPC9kaXY+JzsKICAgIGgrPSAgICc8YnV0dG9uIGNsYXNzPSJjbHB3LXNhbXRvZ2dsZSIgZGF0YS1zYW10b2dnbGU9IicrdCsnIj5DbGljayBoZXJlIHRvIHZpZXcgc2FtcGxlIHJlc3BvbnNlczwvYnV0dG9uPic7CiAgICBoKz0gICc8L2Rpdj4nOwogICAgLy8gcmlnaHQKICAgIGgrPSAgJzxkaXYgY2xhc3M9ImNscHctd3JpdGUiPic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy1wcm9tcHRyb3ciPjxzcGFuIGNsYXNzPSJjbHB3LWluZm8iPmk8L3NwYW4+PHA+Jytlc2MoZC5wcm9tcHRIZWFkKSsnPC9wPjwvZGl2Pic7CiAgICBpZihkLmJ1bGxldHMgJiYgZC5idWxsZXRzLmxlbmd0aCl7IGgrPSc8dWwgY2xhc3M9ImNscHctYnVsbGV0cyI+JzsgZC5idWxsZXRzLmZvckVhY2goZnVuY3Rpb24oYil7IGgrPSc8bGk+Jytlc2MoYikrJzwvbGk+JzsgfSk7IGgrPSc8L3VsPic7IH0KICAgIGlmKGQub3B0aW9ucyl7IGgrPSc8ZGl2IGNsYXNzPSJjbHB3LW9wdHMiPic7IGQub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKG8pewogICAgICAgIGgrPSc8bGFiZWwgY2xhc3M9ImNscHctb3B0Jysoc3RhdGUub3B0PT09by5rZXk\/JyBzZWwnOicnKSsnIiBkYXRhLW9wdHdyYXA9Iicrby5rZXkrJyI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJjbHB3T3B0IiB2YWx1ZT0iJytvLmtleSsnIicrKHN0YXRlLm9wdD09PW8ua2V5PycgY2hlY2tlZCc6JycpKyc+PHNwYW4+Jytlc2Moby5sYWJlbCkrJzwvc3Bhbj48L2xhYmVsPic7IH0pOwogICAgICAgIGgrPSc8L2Rpdj4nOyB9CiAgICBoKz0gICAnPHRleHRhcmVhIGNsYXNzPSJjbHB3LXRhIiBpZD0iY2xwd1RhJyt0KyciIGRhdGEtdGE9IicrdCsnIiBwbGFjZWhvbGRlcj0iVHlwZSB5b3VyIHJlc3BvbnNlIGhlcmUuLi4iPicrZXNjKHN0YXRlLnRleHRbdF0pKyc8L3RleHRhcmVhPic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy13bWV0ZXIiPic7CiAgICBoKz0gICAgICc8c3BhbiBjbGFzcz0iY2xwdy13cGlsbCIgaWQ9ImNscHdXcGlsbCcrdCsnIj4wIHdvcmRzPC9zcGFuPic7CiAgICBoKz0gICAgICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjVweDtjb2xvcjojNjQ3NDhCOyI+YWltICcrZXNjKGQud29yZEFpbSkrJzwvc3Bhbj4nOwogICAgaCs9ICAgICAnPHNwYW4gY2xhc3M9ImNscHctdG1yIj4nCiAgICAgICAgICAgICArJzxidXR0b24gY2xhc3M9ImNscHctdG1yLWJ0biIgZGF0YS10c3RhcnQ9IicrdCsnIj5TdGFydCB0aW1lcjwvYnV0dG9uPicKICAgICAgICAgICAgICsnPGJ1dHRvbiBjbGFzcz0iY2xwdy10bXItYnRuIiBkYXRhLXRyZXNldD0iJyt0KyciPlJlc2V0PC9idXR0b24+PC9zcGFuPic7CiAgICBoKz0gICAnPC9kaXY+JzsKICAgIGgrPSAgJzwvZGl2Pic7CiAgICBoKz0gJzwvZGl2Pic7IC8vIHNwbGl0CiAgICAvLyBzYW1wbGVzCiAgICBoKz0gJzxkaXYgY2xhc3M9ImNscHctc2FtcGxlcyIgaWQ9ImNscHdTYW0nK3QrJyIgaGlkZGVuPic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy1zYW1ub3RlIj4nKyhkLnNhbU5vdGU\/ZC5zYW1Ob3RlOidUaGVzZSBhcmUgdGhlIG9mZmljaWFsIHByYWN0aWNlIHNhbXBsZSByZXNwb25zZXMgYXQgdGhyZWUgc2NvcmUgbGV2ZWxzLiBMb3dlci1sZXZlbCBzYW1wbGVzIGtlZXAgdGhlaXIgb3JpZ2luYWwgbWlzdGFrZXMgb24gcHVycG9zZSAmbWRhc2g7IHN0dWR5IHdoYXQgY2hhbmdlcyBhcyB0aGUgc2NvcmUgcmlzZXMuJykrJzwvZGl2Pic7CiAgICBoKz0gICAnPGRpdiBjbGFzcz0iY2xwdy10YWJzIiBpZD0iY2xwd1RhYnMnK3QrJyI+JzsKICAgIGQuc2FtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHMsaSl7IGgrPSc8YnV0dG9uIGNsYXNzPSJjbHB3LXRhYicrKGk9PT0wPycgb24nOicnKSsnIiBkYXRhLXRhYj0iJyt0KyciIGRhdGEtaT0iJytpKyciPicrZXNjKHMubGV2ZWwpKyc8L2J1dHRvbj4nOyB9KTsKICAgIGgrPSAgICc8L2Rpdj4nOwogICAgaCs9ICAgJzxkaXYgY2xhc3M9ImNscHctc2FtYm9keSIgaWQ9ImNscHdTYW1Cb2R5Jyt0KyciPjwvZGl2Pic7CiAgICBoKz0gJzwvZGl2Pic7CiAgICBoKz0nPC9kaXY+JzsKICAgIHJldHVybiBoOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyKCl7CiAgICB2YXIgcm9vdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0FwcCIpOyBpZighcm9vdCkgcmV0dXJuOwogICAgdmFyIG09V0RBVEEubWV0YSwgaD0iIjsKICAgIC8vIGhlcm8KICAgIGgrPSc8c2VjdGlvbiBjbGFzcz0iY2xwdy1oZXJvIj48ZGl2IGNsYXNzPSJjbHB3LWF1cm9yYSI+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PC9kaXY+JzsKICAgIGgrPSAnPGRpdiBjbGFzcz0iY2xwdy1oYmFkZ2VzIj48c3BhbiBjbGFzcz0iY2xwdy1iYnJhbmQiPicrZXNjKG0uYnJhbmQpKyc8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctYnNldCI+Jytlc2MobS5zZXQpKyc8L3NwYW4+PC9kaXY+JzsKICAgIGgrPSAnPGgxPicrZXNjKG0udGl0bGUpKyc8L2gxPic7CiAgICBoKz0gJzxwIGNsYXNzPSJjbHB3LWhlcm8tc3ViIj5Xcml0ZSB5b3VyIHJlc3BvbnNlLCB0aW1lIHlvdXJzZWxmLCB0aGVuIGNvbXBhcmUgaXQgd2l0aCBvZmZpY2lhbCBzYW1wbGUgYW5zd2VycyBhdCB0aHJlZSBzY29yZSBsZXZlbHMgJm1kYXNoOyBDRUxQSVAgNCZuZGFzaDs1LCA3Jm5kYXNoOzggYW5kIDEwJm5kYXNoOzEyLjwvcD4nOwogICAgaCs9ICc8ZGl2IGNsYXNzPSJjbHB3LWhjaGlwcyI+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+MiB0YXNrczwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jaGlwIj5+JyttLnRvdGFsTWluKycgbWludXRlczwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jaGlwIj4xNTAmbmRhc2g7MjAwIHdvcmRzIGVhY2g8L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2hpcCI+U2FtcGxlIGFuc3dlcnMgaW5jbHVkZWQ8L3NwYW4+PC9kaXY+JzsKICAgIGgrPSAnPGJ1dHRvbiBjbGFzcz0iY2xwdy1jdGEiIGlkPSJjbHB3U3RhcnQiPlN0YXJ0IHdyaXRpbmc8L2J1dHRvbj4nOwogICAgaCs9Jzwvc2VjdGlvbj4nOwogICAgLy8gdG9vbGJhcgogICAgaCs9JzxkaXYgY2xhc3M9ImNscHctdG9vbHMiPjxzcGFuIGNsYXNzPSJjbHB3LXdjb3VudCIgaWQ9ImNscHdUb3RXb3JkcyI+V29yZHMgJm1kYXNoOyBUYXNrIDE6IDAgJm1pZGRvdDsgVGFzayAyOiAwPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LXNhdmVkIiBpZD0iY2xwd1NhdmVkIj5EcmFmdCBzYXZlZCAmIzEwMDAzOzwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1zcGFjZXIiPjwvc3Bhbj48YnV0dG9uIGNsYXNzPSJjbHB3LXRidG4iIGlkPSJjbHB3UmVzZXRBbGwiPlJlc2V0IGFsbDwvYnV0dG9uPjwvZGl2Pic7CiAgICAvLyBzaW0KICAgIGgrPSc8c2VjdGlvbiBjbGFzcz0iY2xwdy1zaW0iPjxkaXYgY2xhc3M9ImNscHctZG90cyIgaWQ9ImNscHdEb3RzIj4nOwogICAgV0RBVEEudGFza3MuZm9yRWFjaChmdW5jdGlvbihkKXsgaCs9JzxidXR0b24gY2xhc3M9ImNscHctZG90IiBkYXRhLWRvdD0iJytkLmlkKyciPlRhc2sgJytkLmlkKycgJm1pZGRvdDsgJytlc2MoZC5uYW1lKSsnPC9idXR0b24+JzsgfSk7CiAgICBoKz0nPC9kaXY+PGRpdiBjbGFzcz0iY2xwdy1jYXQiIGlkPSJjbHB3Q2F0Ij4nOwogICAgV0RBVEEudGFza3MuZm9yRWFjaChmdW5jdGlvbihkKXsgaCs9dGFza0hUTUwoZC5pZCk7IH0pOwogICAgaCs9JzwvZGl2Pjwvc2VjdGlvbj4nOwogICAgLy8gcnVicmljIHBhbmVsCiAgICBoKz0nPHNlY3Rpb24gY2xhc3M9ImNscHctcGFuZWwiPjxoMj5TY29yZSB5b3VyIG93biB3cml0aW5nPC9oMj48cCBjbGFzcz0iY2xwdy1sZWFkIj5UaGVyZSBpcyBubyBhbnN3ZXIga2V5IGZvciBXcml0aW5nLiBSYXRlIGVhY2ggcmVzcG9uc2UgYWdhaW5zdCB0aGUgZm91ciBvZmZpY2lhbCBDRUxQSVAgZGltZW5zaW9ucy48L3A+JzsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXJ1YmdyaWQiIGlkPSJjbHB3UnViR3JpZCI+PC9kaXY+JzsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LXNjb3JlYm94Ij4nK2VzYyhXREFUQS5zY29yaW5nTm90ZSkrJzxkaXYgY2xhc3M9ImNscHctY2xicm93Ij48c3BhbiBjbGFzcz0iY2xwdy1jbGJ0YWciPk08L3NwYW4+PHNwYW4gY2xhc3M9ImNscHctY2xidGFnIj5DTEIgNCZuZGFzaDs1ICZyYXJyOyBkZXZlbG9waW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJjbHB3LWNsYnRhZyI+Q0xCIDcmbmRhc2g7OCAmcmFycjsgYWRlcXVhdGUmbmRhc2g7Z29vZDwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1jbGJ0YWciPkNMQiA5Jm5kYXNoOzEyICZyYXJyOyBzdHJvbmc8L3NwYW4+PC9kaXY+PC9kaXY+JzsKICAgIGgrPSc8L3NlY3Rpb24+JzsKICAgIGgrPSc8ZGl2IGNsYXNzPSJjbHB3LWZvb3QiPkFsbEVuZ2xpc2g0VSAmbWlkZG90OyBDRUxQSVAgV3JpdGluZyBQcmFjdGljZSAmbWlkZG90OyAnK2VzYyhXREFUQS5tZXRhLnNldCkrJzwvZGl2Pic7CiAgICByb290LmlubmVySFRNTD1oOwogICAgYnVpbGRSdWJyaWMoKTsKICAgIFdEQVRBLnRhc2tzLmZvckVhY2goZnVuY3Rpb24oZCl7IHJlbmRlclNhbXBsZShkLmlkKTsgdXBkYXRlV0MoZC5pZCk7IH0pOwogICAgd2lyZUV2ZW50cygpOwogICAgcmVmcmVzaERvdHMoKTsKICAgIHVwZGF0ZVRvdGFscygpOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRSdWJyaWMoKXsKICAgIHZhciBnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3UnViR3JpZCIpOyBpZighZykgcmV0dXJuOyB2YXIgaD0iIjsKICAgIFdEQVRBLnJ1YnJpYy5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7CiAgICAgIHZhciBvbiA9IHN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdICYmIHN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdW2ldOwogICAgICBoKz0nPGxhYmVsIGNsYXNzPSJjbHB3LXJ1YicrKG9uPycgZG9uZSc6JycpKyciIGRhdGEtcnVid3JhcD0iJytpKyciPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGF0YS1ydWI9IicraSsnIicrKG9uPycgY2hlY2tlZCc6JycpKyc+PHNwYW4+PHNwYW4gY2xhc3M9ImNscHctcnViLWsiPicrZXNjKHIuaykrJzwvc3Bhbj48c3BhbiBjbGFzcz0iY2xwdy1ydWItZCI+Jytlc2Moci5kKSsnPC9zcGFuPjwvc3Bhbj48L2xhYmVsPic7CiAgICB9KTsKICAgIGcuaW5uZXJIVE1MPWg7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTYW1wbGUodCl7CiAgICB2YXIgZD1XREFUQS50YXNrc1t0LTFdLCBpPXN0YXRlLnRhYlt0XSwgcz1kLnNhbXBsZXNbaV07CiAgICB2YXIgYm9keT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1NhbUJvZHkiK3QpOyBpZighYm9keSkgcmV0dXJuOwogICAgYm9keS5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImNscHctc2FtbHZsIj4nK2VzYyhzLmxldmVsKSsnPC9kaXY+PGRpdiBjbGFzcz0iY2xwdy1zYW10ZXh0Ij4nK2VzYyhzLnRleHQpKyc8L2Rpdj4nCiAgICAgICsnPGRpdiBjbGFzcz0iY2xwdy1zYW1oaW50Ij48Yj5XaGF0IHNldHMgdGhpcyBsZXZlbCBhcGFydDo8L2I+ICcrZXNjKHMubm90ZSkrJzwvZGl2Pic7CiAgICB2YXIgdGFicz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1RhYnMiK3QpOyBpZih0YWJzKXsgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0YWJzLmNoaWxkcmVuLGZ1bmN0aW9uKGIsYmkpeyBiLmNsYXNzTGlzdC50b2dnbGUoIm9uIixiaT09PWkpOyB9KTsgfQogIH0KCiAgZnVuY3Rpb24gdXBkYXRlV0ModCl7CiAgICB2YXIgbj13YyhzdGF0ZS50ZXh0W3RdKTsgdmFyIHBpbGw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdXcGlsbCIrdCk7IGlmKCFwaWxsKSByZXR1cm47CiAgICBwaWxsLnRleHRDb250ZW50PW4rKG49PT0xPyIgd29yZCI6IiB3b3JkcyIpOwogICAgcGlsbC5jbGFzc05hbWU9ImNscHctd3BpbGwgIisobjwxNTA\/ImxvdyI6KG48PTIwMD8iZ29vZCI6KG48PTI1MD8ib3ZlciI6Im1heCIpKSk7CiAgICB1cGRhdGVUb3RhbHMoKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlVG90YWxzKCl7CiAgICB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdUb3RXb3JkcyIpOyBpZihlbCkgZWwuaW5uZXJIVE1MPSJXb3JkcyAmbWRhc2g7IFRhc2sgMTogIit3YyhzdGF0ZS50ZXh0WzFdKSsiICZtaWRkb3Q7IFRhc2sgMjogIit3YyhzdGF0ZS50ZXh0WzJdKTsKICB9CgogIGZ1bmN0aW9uIHJlZnJlc2hEb3RzKCl7CiAgICB2YXIgZG90cz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd0RvdHMiKTsgaWYoIWRvdHMpIHJldHVybjsKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG90cy5jaGlsZHJlbixmdW5jdGlvbihiKXsgdmFyIGlkPStiLmdldEF0dHJpYnV0ZSgiZGF0YS1kb3QiKTsKICAgICAgYi5jbGFzc0xpc3QudG9nZ2xlKCJvbiIsaWQ9PT1zdGF0ZS5hY3RpdmUpOwogICAgICBiLmNsYXNzTGlzdC50b2dnbGUoImZpbGxlZCIsIGlkIT09c3RhdGUuYWN0aXZlICYmIHdjKHN0YXRlLnRleHRbaWRdKT4wKTsgfSk7CiAgICBXREFUQS50YXNrcy5mb3JFYWNoKGZ1bmN0aW9uKGQpeyB2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdUYXNrIitkLmlkKTsgaWYoZWwpIGVsLmNsYXNzTGlzdC50b2dnbGUoIm9uIixkLmlkPT09c3RhdGUuYWN0aXZlKTsgfSk7CiAgfQoKICBmdW5jdGlvbiBzd2l0Y2hUYXNrKHQpeyBzdGF0ZS5hY3RpdmU9dDsgcmVmcmVzaERvdHMoKTsgYnVpbGRSdWJyaWMoKTsKICAgIHZhciBjYXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdDYXQiKTsgaWYoY2F0JiZjYXQuc2Nyb2xsSW50b1ZpZXcpIGNhdC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNtb290aCIsYmxvY2s6InN0YXJ0In0pOyB9CgogIC8vIHRpbWVycwogIGZ1bmN0aW9uIHRpY2sodCl7IHZhciBUPXN0YXRlLnRpbWVyW3RdOyBpZihULnJlbTw9MCl7IHN0b3BUaW1lcih0KTsgcmV0dXJuOyB9IFQucmVtLS07IHBhaW50VGltZSh0KTsgaWYoVC5yZW08PTApIHN0b3BUaW1lcih0KTsgfQogIGZ1bmN0aW9uIHBhaW50VGltZSh0KXsgdmFyIGVsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3QmFyVGltZSIrdCk7IHZhciBUPXN0YXRlLnRpbWVyW3RdOwogICAgaWYoZWwpeyBlbC5pbm5lckhUTUw9IlRpbWUgcmVtYWluaW5nOiA8Yj4iK2ZtdChULnJlbSkrIjwvYj4iOyBlbC5jbGFzc0xpc3QudG9nZ2xlKCJsb3ciLFQucmVtPD0xMjApOyB9CiAgICB2YXIgYnRuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRzdGFydD0iJyt0KyciXScpOyBpZihidG4peyBidG4udGV4dENvbnRlbnQ9VC5ydW4\/IlBhdXNlIHRpbWVyIjooVC5yZW08PTA\/IlRpbWUgdXAiOiJTdGFydCB0aW1lciIpOyBidG4uY2xhc3NMaXN0LnRvZ2dsZSgicnVuIixULnJ1bik7IH0gfQogIGZ1bmN0aW9uIHN0YXJ0VGltZXIodCl7IHZhciBUPXN0YXRlLnRpbWVyW3RdOyBpZihULnJlbTw9MCkgcmV0dXJuOyBULnJ1bj10cnVlOyBpZihULml2KSBjbGVhckludGVydmFsKFQuaXYpOyBULml2PXNldEludGVydmFsKGZ1bmN0aW9uKCl7dGljayh0KTt9LDEwMDApOyBwYWludFRpbWUodCk7IH0KICBmdW5jdGlvbiBzdG9wVGltZXIodCl7IHZhciBUPXN0YXRlLnRpbWVyW3RdOyBULnJ1bj1mYWxzZTsgaWYoVC5pdil7IGNsZWFySW50ZXJ2YWwoVC5pdik7IFQuaXY9bnVsbDsgfSBwYWludFRpbWUodCk7IH0KICBmdW5jdGlvbiB0b2dnbGVUaW1lcih0KXsgc3RhdGUudGltZXJbdF0ucnVuP3N0b3BUaW1lcih0KTpzdGFydFRpbWVyKHQpOyB9CiAgZnVuY3Rpb24gcmVzZXRUaW1lcih0KXsgc3RvcFRpbWVyKHQpOyBzdGF0ZS50aW1lclt0XS5yZW09V0RBVEEudGFza3NbdC0xXS5taW51dGVzKjYwOyBwYWludFRpbWUodCk7IH0KCiAgLy8gLS0tLS0tLS0tLSBldmVudHMgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIHdpcmVFdmVudHMoKXsKICAgIHZhciByb290PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjbHB3QXBwIik7CiAgICB2YXIgc3RhcnQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNscHdTdGFydCIpOwogICAgaWYoc3RhcnQpIHN0YXJ0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpeyBzd2l0Y2hUYXNrKDEpOyBzdGFydFRpbWVyKDEpOyB9KTsKICAgIHZhciByZXNldEFsbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1Jlc2V0QWxsIik7CiAgICBpZihyZXNldEFsbCkgcmVzZXRBbGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7CiAgICAgIGlmKCFjb25maXJtKCJDbGVhciBib3RoIGRyYWZ0cywgc2VsZWN0ZWQgb3B0aW9uIGFuZCB0aW1lcnMgb24gdGhpcyBkZXZpY2U\/IikpIHJldHVybjsKICAgICAgc3RhdGUudGV4dFsxXT0iIjtzdGF0ZS50ZXh0WzJdPSIiO3N0YXRlLm9wdD1udWxsO3N0YXRlLnJ1YnJpYz17MTp7fSwyOnt9fTsKICAgICAgcmVzZXRUaW1lcigxKTtyZXNldFRpbWVyKDIpOyBzYXZlKCk7IHJlbmRlcigpOyB9KTsKCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbihlKXsKICAgICAgdmFyIGVsPWUudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWRvdF0sW2RhdGEtc2FtdG9nZ2xlXSxbZGF0YS10YWJdLFtkYXRhLXRzdGFydF0sW2RhdGEtdHJlc2V0XSxbZGF0YS10bmV4dF0iKTsgaWYoIWVsKSByZXR1cm47CiAgICAgIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS1kb3QiKSl7IHN3aXRjaFRhc2soK2VsLmdldEF0dHJpYnV0ZSgiZGF0YS1kb3QiKSk7IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtc2FtdG9nZ2xlIikpeyB2YXIgdD0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXNhbXRvZ2dsZSIpOyB2YXIgcD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xwd1NhbSIrdCk7CiAgICAgICAgaWYocCl7IHAuaGlkZGVuPSFwLmhpZGRlbjsgZWwudGV4dENvbnRlbnQ9cC5oaWRkZW4\/IkNsaWNrIGhlcmUgdG8gdmlldyBzYW1wbGUgcmVzcG9uc2VzIjoiSGlkZSBzYW1wbGUgcmVzcG9uc2VzIjsgaWYoIXAuaGlkZGVuKSByZW5kZXJTYW1wbGUodCk7IH0gfQogICAgICBlbHNlIGlmKGVsLmhhc0F0dHJpYnV0ZSgiZGF0YS10YWIiKSl7IHZhciB0dD0rZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXRhYiIpOyBzdGF0ZS50YWJbdHRdPStlbC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpOyByZW5kZXJTYW1wbGUodHQpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXRzdGFydCIpKXsgdG9nZ2xlVGltZXIoK2VsLmdldEF0dHJpYnV0ZSgiZGF0YS10c3RhcnQiKSk7IH0KICAgICAgZWxzZSBpZihlbC5oYXNBdHRyaWJ1dGUoImRhdGEtdHJlc2V0IikpeyByZXNldFRpbWVyKCtlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdHJlc2V0IikpOyB9CiAgICAgIGVsc2UgaWYoZWwuaGFzQXR0cmlidXRlKCJkYXRhLXRuZXh0IikpeyB2YXIgY3VyPStlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdG5leHQiKTsgaWYoY3VyPFdEQVRBLnRhc2tzLmxlbmd0aCl7IHN3aXRjaFRhc2soY3VyKzEpOyB9IH0KICAgIH0pOwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGZ1bmN0aW9uKGUpeyB2YXIgdGE9ZS50YXJnZXQuY2xvc2VzdCgiW2RhdGEtdGFdIik7IGlmKCF0YSkgcmV0dXJuOwogICAgICB2YXIgdD0rdGEuZ2V0QXR0cmlidXRlKCJkYXRhLXRhIik7IHN0YXRlLnRleHRbdF09dGEudmFsdWU7IHVwZGF0ZVdDKHQpOyByZWZyZXNoRG90cygpOyBzYXZlKCk7IH0pOwoKICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixmdW5jdGlvbihlKXsKICAgICAgdmFyIG9wdD1lLnRhcmdldC5jbG9zZXN0KCdpbnB1dFtuYW1lPSJjbHB3T3B0Il0nKTsKICAgICAgaWYob3B0KXsgc3RhdGUub3B0PW9wdC52YWx1ZTsgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1vcHR3cmFwXSIpLGZ1bmN0aW9uKGwpeyBsLmNsYXNzTGlzdC50b2dnbGUoInNlbCIsbC5nZXRBdHRyaWJ1dGUoImRhdGEtb3B0d3JhcCIpPT09c3RhdGUub3B0KTsgfSk7IHNhdmUoKTsgcmV0dXJuOyB9CiAgICAgIHZhciBydWI9ZS50YXJnZXQuY2xvc2VzdCgiW2RhdGEtcnViXSIpOwogICAgICBpZihydWIpeyB2YXIgaT0rcnViLmdldEF0dHJpYnV0ZSgiZGF0YS1ydWIiKTsgaWYoIXN0YXRlLnJ1YnJpY1tzdGF0ZS5hY3RpdmVdKSBzdGF0ZS5ydWJyaWNbc3RhdGUuYWN0aXZlXT17fTsgc3RhdGUucnVicmljW3N0YXRlLmFjdGl2ZV1baV09cnViLmNoZWNrZWQ7CiAgICAgICAgdmFyIHdyYXA9cnViLmNsb3Nlc3QoIltkYXRhLXJ1YndyYXBdIik7IGlmKHdyYXApIHdyYXAuY2xhc3NMaXN0LnRvZ2dsZSgiZG9uZSIscnViLmNoZWNrZWQpOyBzYXZlKCk7IH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYm9vdCgpeyBsb2FkKCk7IGluamVjdENTUygpOyByZW5kZXIoKTsgfQogIGlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGJvb3QpOyBlbHNlIGJvb3QoKTsKfSkoKTsKCg==\"));<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>CELPIP Writing Set 12 Practice Test 2: Task 1 (email) and Task 2 (survey response) with timers and word counter, plus a self-assessment guide. 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-6473","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6473","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=6473"}],"version-history":[{"count":1,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6473\/revisions"}],"predecessor-version":[{"id":6543,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/6473\/revisions\/6543"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=6473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}