# mem_twitter v0.3.3 # This plugin will post to twitter whenever an article is published. # Michael Manfre # http://manfre.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMDp7czo0OiJuYW1lIjtzOjExOiJtZW1fdHdpdHRlciI7czo3OiJ2ZXJzaW9uIjtzOjU6 IjAuMy4zIjtzOjY6ImF1dGhvciI7czoxNDoiTWljaGFlbCBNYW5mcmUiO3M6MTA6ImF1dGhv cl91cmkiO3M6MTg6Imh0dHA6Ly9tYW5mcmUubmV0LyI7czoxMToiZGVzY3JpcHRpb24iO3M6 NjY6IlRoaXMgcGx1Z2luIHdpbGwgcG9zdCB0byB0d2l0dGVyIHdoZW5ldmVyIGFuIGFydGlj bGUgaXMgcHVibGlzaGVkLiI7czo0OiJ0eXBlIjtpOjE7czo0OiJoZWxwIjtzOjEzMTU6Igk8 aDEgY2xhc3M9InRpdGxlIj5tZW1fdHdpdHRlciBwbHVnaW48L2gxPgoKCTxoMiBjbGFzcz0i c2VjdGlvbiBzdW1tYXJ5Ij5TdW1tYXJ5PC9oMj4KCgk8cD5UaGlzIHBsdWdpbiB3aWxsIHBp bmcgdHdpdHRlciB3aGVuZXZlciB5b3UgcG9zdCBhbiBhcnRpY2xlLiBUaGlzIHdpbGwgb25s eSBub3RpZnkgdHdpdHRlciB3aGVuIGluIHNpdGUgaXMgaW4gbGl2ZSBtb2RlLjwvcD4KCgk8 aDIgY2xhc3M9InNlY3Rpb24gY29udGFjdCI+QXV0aG9yIENvbnRhY3Q8L2gyPgoKCTxwPjxh IGhyZWY9Im1haWx0bzptbWFuZnJlQGdtYWlsLmNvbT9zdWJqZWN0PVRleHRwYXR0ZXJuJTIw bWVtX3R3aXR0ZXIlMjBwbHVnaW4iPk1pY2hhZWwgTWFuZnJlPC9hPjxiciAvPgo8YSBocmVm PSJodHRwOi8vbWFuZnJlLm5ldCI+aHR0cDovL21hbmZyZS5uZXQ8L2E+PC9wPgoKCTxoMiBj bGFzcz0ic2VjdGlvbiBsaWNlbnNlIj5MaWNlbnNlPC9oMj4KCgk8cD5UaGlzIHBsdWdpbiBp cyBsaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5mc2Yub3JnL2xpY2Vu c2luZy9saWNlbnNlcy9pbmZvL0dQTHYyLmh0bWwiPkdQTHYyPC9hPi48L3A+CgoJPGgyIGNs YXNzPSJzZWN0aW9uIGluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5HbyB0 byBhZHZhbmNlZCBwcmVmZXJlbmNlcyBhbmQgZW50ZXIgeW91ciB0d2l0dGVyIHVzZXJuYW1l LCBwYXNzd29yZCBhbmQgcG9zdCBtZXNzYWdlLjwvcD4KCgk8aDIgY2xhc3M9InNlY3Rpb24i PlByZWZlcmVuY2VzPC9oMj4KCgk8aDM+bWVtX3R3aXR0ZXJfdXNlcjwvaDM+CgoJPHA+VGhp cyBpcyB5b3VyIHR3aXR0ZXIgdXNlcm5hbWUuPC9wPgoKCTxoMz5tZW1fdHdpdHRlcl9wYXNz PC9oMz4KCgk8cD5UaGlzIGlzIHlvdXIgdHdpdHRlciBwYXNzd29yZC48L3A+CgoJPGgzPm1l bV90d2l0dGVyX21zZzwvaDM+CgoJPHA+VGhpcyBpcyB0aGUgbWVzc2FnZSBmb3JtYXQgdGhh dCB3aWxsIGJlIHBvc3RlZCB0byB0d2l0dGVyLiBUaGUgc3RyaW5nIHdpbGwgYmUgcGFyc2Vk IGFuZCBhbGwgaW5zdGFuY2VzIG9mICYjODIyMDt7dXJsfSYjODIyMTsgd2lsbCBiZSByZXBs YWNlZCB3aXRoIHRoZSB1cmwgdG8gdGhlIGFydGljbGUuIEFsbCBpbnN0YW5jZXMgb2YgJiM4 MjIwO3t0aXRsZX0mIzgyMjE7IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgYXJ0aWNsZSB0 aXRsZS48L3A+CgoJPGgzPm1lbV90d2l0dGVyX2V4Y2x1ZGVfc2VjdGlvbnM8L2gzPgoKCTxw PkEgY29tbWEgc2VwYXJhdGUgbGlzdCBvZiBzZWN0aW9ucyB0aGF0IHNob3VsZCBub3QgcG9z dCB0byB0d2l0dGVyLjwvcD4iO3M6NDoiY29kZSI7czoxNDMzNDoiCmdsb2JhbCAkcHJlZnM7 CgppZiAoIWlzc2V0KCRwcmVmc1snbWVtX3R3aXR0ZXJfdXNlciddKSkKCXNldF9wcmVmKCdt ZW1fdHdpdHRlcl91c2VyJywgJycsICdtZW1fdHdpdHRlcicsIDEsICd0ZXh0X2lucHV0Jyk7 CmlmICghaXNzZXQoJHByZWZzWydtZW1fdHdpdHRlcl9wYXNzJ10pKQoJc2V0X3ByZWYoJ21l bV90d2l0dGVyX3Bhc3MnLCcnLCAnbWVtX3R3aXR0ZXInLCAxLCAnbWVtX3R3aXR0ZXJfcGFz c3dvcmRfaW5wdXQnKTsKaWYgKCFpc3NldCgkcHJlZnNbJ21lbV90d2l0dGVyX21zZyddKSkK CXNldF9wcmVmKCdtZW1fdHdpdHRlcl9tc2cnLCAnQmxvZyBQb3N0OiB7dGl0bGV9IC0ge3Vy bH0nLCAnbWVtX3R3aXR0ZXInLCAxLCAndGV4dF9pbnB1dCcpOwppZiAoIWlzc2V0KCRwcmVm c1snbWVtX3R3aXR0ZXJfZXhjbHVkZV9zZWN0aW9ucyddKSkKCXNldF9wcmVmKCdtZW1fdHdp dHRlcl9leGNsdWRlX3NlY3Rpb25zJywgJycsICdtZW1fdHdpdHRlcicsIDEsICd0ZXh0X2lu cHV0Jyk7CgppZiAodHhwaW50ZXJmYWNlID09ICdhZG1pbicpCnsKCWZ1bmN0aW9uIG1lbV90 d2l0dGVyX3Bhc3N3b3JkX2lucHV0KCRuYW1lLCAkdmFsKQoJewoJCXJldHVybiBmSW5wdXQo J3Bhc3N3b3JkJywgJG5hbWUsICR2YWwsICdlZGl0JywgJycsICcnLCAnJywgJycsICRuYW1l KTsKCX0KCglyZWdpc3Rlcl9jYWxsYmFjaygnbWVtX3R3aXR0ZXJfcGluZycsJ3BpbmcnKTsK CglmdW5jdGlvbiBtZW1fdHdpdHRlcl9waW5nKCkKCXsKCQlnbG9iYWwgJG1lbV90d2l0dGVy X3VzZXIsICRtZW1fdHdpdHRlcl9wYXNzLCAkbWVtX3R3aXR0ZXJfbXNnLCAkbWVtX3R3aXR0 ZXJfZXhjbHVkZV9zZWN0aW9ucywgJHByb2R1Y3Rpb25fc3RhdHVzOwoKCQkvLyBkbyBub3Ro aW5nIHdpdGhvdXQgYSBwcm92aWRlZCB1c2VyL3Bhc3MKCQlpZiAoZW1wdHkoJG1lbV90d2l0 dGVyX3VzZXIpIHx8IGVtcHR5KCRtZW1fdHdpdHRlcl9wYXNzKSkKCQl7CgkJCXRyaWdnZXJf ZXJyb3IoJ21lbV90d2l0dGVyIG1pc3NpbmcgYWNjb3VudCBjcmVkZW50aWFscy4nLCBFX1VT RVJfV0FSTklORyk7CgkJCXJldHVybjsKCQl9CgoJCSRhcnRpY2xlX2lkID0gZW1wdHkoJEdM T0JBTFNbJ0lEJ10pID8gcHMoJ0lEJykgOiAkR0xPQkFMU1snSUQnXTsKCgkJaWYgKCFlbXB0 eSgkYXJ0aWNsZV9pZCkpCgkJewoJCQkkZXhjbHVkZSA9IHNwbGl0KCcsJywgJG1lbV90d2l0 dGVyX2V4Y2x1ZGVfc2VjdGlvbnMpOwoKCQkJaWYgKGNvdW50KCRleGNsdWRlKSA+IDApCgkJ CXsKCQkJCSRleGNsdWRlID0gIiBBTkQgU2VjdGlvbiBOT1QgSU4gKCciIC4gam9pbigiJywn IiwgYXJyYXlfbWFwKCd0cmltJywgJGV4Y2x1ZGUpKSAuICInKSI7CgkJCX0KCQkJZWxzZQoJ CQkJJGV4Y2x1ZGUgPSAnJzsKCgkJCSRhcnRpY2xlID0gc2FmZV9yb3coJ0lELCB0aXRsZSwg dXJsX3RpdGxlLCBTZWN0aW9uLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIFBvc3RlZCcs CgkJCQkndGV4dHBhdHRlcm4nLAoJCQkJIklEPXskYXJ0aWNsZV9pZH0gQU5EIFBvc3RlZCA8 PSBOT1coKSIgLiAkZXhjbHVkZSk7CgoJCQlpZiAoJGFydGljbGUpCgkJCXsKCQkJCWlmICgh ZnVuY3Rpb25fZXhpc3RzKCdwZXJtbGlua3VybCcpKQoJCQkJewoJCQkJCXJlcXVpcmVfb25j ZSh0eHBhdGguJy9wdWJsaXNoL3RhZ2hhbmRsZXJzLnBocCcpOwoJCQkJfQoKCQkJCSR0ID0g bmV3IFR3aXR0ZXIoJG1lbV90d2l0dGVyX3VzZXIsICRtZW1fdHdpdHRlcl9wYXNzLCAnbWVt dHdpdHRlcicpOwoJCQkJJG1zZyA9IGVtcHR5KCRtZW1fdHdpdHRlcl9tc2cpID8gJ3t0aXRs ZX0gLSB7dXJsfScgOiAkbWVtX3R3aXR0ZXJfbXNnOwoJCQkJJG1zZyA9IHN0cl9yZXBsYWNl KCd7dGl0bGV9JywgJGFydGljbGVbJ3RpdGxlJ10sICRtc2cpOwoKCgkJCQlpZiAoc3RycG9z KCRtc2csICd7dXJsfScpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQkkdXJsID0gcGVybWxpbmt1 cmwoJGFydGljbGUpOwoJCQkJCS8vIGdldCB0aW55dXJsIGZvciB0eHAgYXJ0aWNsZQoJCQkJ CWlmICgkdXJsKQoJCQkJCQkkdXJsID0gbWVtX3Rpbnl1cmwoICR1cmwgKTsKCgkJCQkJaWYg KGVtcHR5KCR1cmwpKQoJCQkJCQkkdXJsID0gaHU7CgoJCQkJCSRtc2cgPSBzdHJfcmVwbGFj ZSgne3VybH0nLCAkdXJsLCAkbXNnKTsKCQkJCX0KCgkJCQkkcmVzID0gJHQtPnVwZGF0ZVN0 YXR1cygkbXNnKTsKCgkJCQlpZiAoISRyZXMpCgkJCQl7CgkJCQkJJGVyciA9ICR0LT5sYXN0 Q3VybEVycm9yKCk7CgoJCQkJCWlmICghZW1wdHkoJGVycikpCgkJCQkJewoJCQkJCQl0cmln Z2VyX2Vycm9yKCdtZW1fdHdpdHRlciBmYWlsZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbnRhY3Qg dHdpdHRlci4gY3VybCBlcnJvcj0iJyAuICRlcnIgLiciJywgRV9VU0VSX1dBUk5JTkcpOwoJ CQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQl0cmlnZ2VyX2Vycm9yKCdtZW1fdHdpdHRl ciBmYWlsZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbnRhY3QgdHdpdHRlci4nLCBFX1VTRVJfV0FS TklORyk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSBpZiAoJHByb2R1Y3Rpb25fc3RhdHVzICE9 ICdsaXZlJykKCQkJCXsKCQkJCQl0cmlnZ2VyX2Vycm9yKCdtZW1fdHdpdHRlciB1cGRhdGVk IHN0YXR1cyBzdWNjZXNzZnVsbHkuJywgRV9VU0VSX05PVElDRSk7CgkJCQl9CgoJCQl9CgkJ fQoJCWVsc2UKCQl7CgkJCWlmICgkcHJvZHVjdGlvbl9zdGF0dXMgIT0gJ2xpdmUnKQoJCQl7 CgkJCQl0cmlnZ2VyX2Vycm9yKCdtZW1fdHdpdHRlciBjb3VsZCBub3QgZmluZCBhcnRpY2xl IElEJywgRV9VU0VSX1dBUk5JTkcpOwoJCQl9CgkJfQoJfQoKCgkvKiogUmV0dXJuIGEgdGlu eXVybCBvZiB0aGUgcGFzc2VkIHVybCAqLwoJZnVuY3Rpb24gbWVtX3Rpbnl1cmwoJHVybCkK CXsKCQkkdSA9ICdodHRwOi8vdGlueXVybC5jb20vYXBpLWNyZWF0ZS5waHA/dXJsPScgLiB1 cmxlbmNvZGUoJHVybCk7CgkJJHRpbnl1cmwgPSBmaWxlX2dldF9jb250ZW50cygkdSk7CgoJ CWlmICgkdGlueXVybCAhPSAnRXJyb3InKQoJCQlyZXR1cm4gJHRpbnl1cmw7CgoJCWlmICgk cHJvZHVjdGlvbl9zdGF0dXMgIT0gJ2xpdmUnKQoJCXsKCQkJdHJpZ2dlcl9lcnJvcignbWVt X3R3aXR0ZXIgZmFpbGVkIHRvIGdldCBhIFRpbnlVUkwgZm9yICInIC4gJHVybCAuICciLiBV c2luZyAnICsgaHUsIEVfVVNFUl9XQVJOSU5HKTsKCQl9CgoJCXJldHVybiBmYWxzZTsKCX0K CgkvKgoJKiBDb3B5cmlnaHQgKGMpIDwyMDA4PiBKdXN0aW4gUG9saWV5IDxqZHAzNEBuaml0 LmVkdT4KCSoKCSogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24KCSogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KCSogZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAoJKiByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKCSogY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y IHNlbGwKCSogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlCgkqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nCgkqIGNvbmRpdGlvbnM6CgkqCgkqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCgkqIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv ZnR3YXJlLgoJKgoJKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKCSogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCgkqIE9GIE1FUkNIQU5UQUJJ TElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECgkqIE5PTklORlJJ TkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCgkq IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElB QklMSVRZLAoJKiBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKCSogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgoJKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCgkqLwoKCWNsYXNzIFR3aXR0ZXIgewoJICAvKiBVc2VybmFtZTpwYXNzd29y ZCBmb3JtYXQgc3RyaW5nICovCgkgIHByaXZhdGUgJGNyZWRlbnRpYWxzOwoKCSAgLyogQ29u dGFpbnMgdGhlIGxhc3QgSFRUUCBzdGF0dXMgY29kZSByZXR1cm5lZCAqLwoJICBwcml2YXRl ICRodHRwX3N0YXR1czsKCgkgIC8qIENvbnRhaW5zIHRoZSBsYXN0IEFQSSBjYWxsICovCgkg IHByaXZhdGUgJGxhc3RfYXBpX2NhbGw7CgoJICAvKiBDb250YWlucyB0aGUgYXBwbGljYXRp b24gY2FsbGluZyB0aGUgQVBJICovCgkgIHByaXZhdGUgJGFwcGxpY2F0aW9uX3NvdXJjZTsK CgkgIC8qIFR3aXR0ZXIgY2xhc3MgY29uc3RydWN0b3IgKi8KCSAgZnVuY3Rpb24gVHdpdHRl cigkdXNlcm5hbWUsICRwYXNzd29yZCwgJHNvdXJjZT1mYWxzZSkgewoJICAgICR0aGlzLT5j cmVkZW50aWFscyA9IHNwcmludGYoIiVzOiVzIiwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwoJ ICAgICR0aGlzLT5hcHBsaWNhdGlvbl9zb3VyY2UgPSAkc291cmNlOwoJICB9CgoJICBmdW5j dGlvbiBnZXRQdWJsaWNUaW1lbGluZSgkZm9ybWF0LCAkc2luY2VfaWQgPSAwKSB7CgkgICAg JGFwaV9jYWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0ZXIuY29tL3N0YXR1c2VzL3B1Ymxp Y190aW1lbGluZS4lcyIsICRmb3JtYXQpOwoJICAgIGlmICgkc2luY2VfaWQgPiAwKSB7Cgkg ICAgICAkYXBpX2NhbGwgLj0gc3ByaW50ZigiP3NpbmNlX2lkPSVkIiwgJHNpbmNlX2lkKTsK CSAgICB9CgkgICAgcmV0dXJuICR0aGlzLT5BUElDYWxsKCRhcGlfY2FsbCk7CgkgIH0KCgkg IGZ1bmN0aW9uIGdldEZyaWVuZHNUaW1lbGluZSgkZm9ybWF0LCAkaWQgPSBOVUxMLCAkc2lu Y2UgPSBOVUxMKSB7CgkgICAgaWYgKCRpZCAhPSBOVUxMKSB7CgkgICAgICAkYXBpX2NhbGwg PSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvZnJpZW5kc190aW1lbGlu ZS8lcy4lcyIsICRpZCwgJGZvcm1hdCk7CgkgICAgfQoJICAgIGVsc2UgewoJICAgICAgJGFw aV9jYWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0ZXIuY29tL3N0YXR1c2VzL2ZyaWVuZHNf dGltZWxpbmUuJXMiLCAkZm9ybWF0KTsKCSAgICB9CgkgICAgaWYgKCRzaW5jZSAhPSBOVUxM KSB7CgkgICAgICAkYXBpX2NhbGwgLj0gc3ByaW50ZigiP3NpbmNlPSVzIiwgdXJsZW5jb2Rl KCRzaW5jZSkpOwoJICAgIH0KCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxs LCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZ2V0VXNlclRpbWVsaW5lKCRmb3JtYXQsICRp ZCA9IE5VTEwsICRjb3VudCA9IDIwLCAkc2luY2UgPSBOVUxMKSB7CgkgICAgaWYgKCRpZCAh PSBOVUxMKSB7CgkgICAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5j b20vc3RhdHVzZXMvdXNlcl90aW1lbGluZS8lcy4lcyIsICRpZCwgJGZvcm1hdCk7CgkgICAg fQoJICAgIGVsc2UgewoJICAgICAgJGFwaV9jYWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0 ZXIuY29tL3N0YXR1c2VzL3VzZXJfdGltZWxpbmUuJXMiLCAkZm9ybWF0KTsKCSAgICB9Cgkg ICAgaWYgKCRjb3VudCAhPSAyMCkgewoJICAgICAgJGFwaV9jYWxsIC49IHNwcmludGYoIj9j b3VudD0lZCIsICRjb3VudCk7CgkgICAgfQoJICAgIGlmICgkc2luY2UgIT0gTlVMTCkgewoJ ICAgICAgJGFwaV9jYWxsIC49IHNwcmludGYoIiVzc2luY2U9JXMiLCAoc3RycG9zKCRhcGlf Y2FsbCwgIj9jb3VudD0iKSA9PT0gZmFsc2UpID8gIj8iIDogIiYiLCB1cmxlbmNvZGUoJHNp bmNlKSk7CgkgICAgfQoJICAgIHJldHVybiAkdGhpcy0+QVBJQ2FsbCgkYXBpX2NhbGwsIHRy dWUpOwoJICB9CgoJICBmdW5jdGlvbiBzaG93U3RhdHVzKCRmb3JtYXQsICRpZCkgewoJICAg ICRhcGlfY2FsbCA9IHNwcmludGYoImh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy9zaG93 LyVkLiVzIiwgJGlkLCAkZm9ybWF0KTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFw aV9jYWxsKTsKCSAgfQoKCSAgZnVuY3Rpb24gdXBkYXRlU3RhdHVzKCRzdGF0dXMpIHsKCSAg ICAkc3RhdHVzID0gdXJsZW5jb2RlKHN0cmlwc2xhc2hlcyh1cmxkZWNvZGUoJHN0YXR1cykp KTsKCSAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVz ZXMvdXBkYXRlLnhtbD9zdGF0dXM9JXMiLCAkc3RhdHVzKTsKCSAgICByZXR1cm4gJHRoaXMt PkFQSUNhbGwoJGFwaV9jYWxsLCB0cnVlLCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZ2V0 UmVwbGllcygkZm9ybWF0LCAkcGFnZSA9IDApIHsKCSAgICAkYXBpX2NhbGwgPSBzcHJpbnRm KCJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvcmVwbGllcy4lcyIsICRmb3JtYXQpOwoJ ICAgIGlmICgkcGFnZSkgewoJICAgICAgJGFwaV9jYWxsIC49IHNwcmludGYoIj9wYWdlPSVk IiwgJHBhZ2UpOwoJICAgIH0KCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxs LCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZGVzdHJveVN0YXR1cygkZm9ybWF0LCAkaWQp IHsKCSAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVz ZXMvZGVzdHJveS8lZC4lcyIsICRpZCwgJGZvcm1hdCk7CgkgICAgcmV0dXJuICR0aGlzLT5B UElDYWxsKCRhcGlfY2FsbCwgdHJ1ZSwgdHJ1ZSk7CgkgIH0KCgkgIGZ1bmN0aW9uIGdldEZy aWVuZHMoJGZvcm1hdCwgJGlkID0gTlVMTCkgewoJICAgIC8vIHRha2UgY2FyZSBvZiB0aGUg aWQgcGFyYW1ldGVyCgkgICAgaWYgKCRpZCAhPSBOVUxMKSB7CgkgICAgICAkYXBpX2NhbGwg PSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvZnJpZW5kcy8lcy4lcyIs ICRpZCwgJGZvcm1hdCk7CgkgICAgfQoJICAgIGVsc2UgewoJICAgICAgJGFwaV9jYWxsID0g c3ByaW50ZigiaHR0cDovL3R3aXR0ZXIuY29tL3N0YXR1c2VzL2ZyaWVuZHMuJXMiLCAkZm9y bWF0KTsKCSAgICB9CgkgICAgcmV0dXJuICR0aGlzLT5BUElDYWxsKCRhcGlfY2FsbCwgdHJ1 ZSk7CgkgIH0KCgkgIGZ1bmN0aW9uIGdldEZvbGxvd2VycygkZm9ybWF0LCAkbGl0ZSA9IE5V TEwpIHsKCSAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vc3Rh dHVzZXMvZm9sbG93ZXJzLiVzJXMiLCAkZm9ybWF0LCAoJGxpdGUpID8gIj9saXRlPXRydWUi IDogTlVMTCk7CgkgICAgcmV0dXJuICR0aGlzLT5BUElDYWxsKCRhcGlfY2FsbCwgdHJ1ZSk7 CgkgIH0KCgkgIGZ1bmN0aW9uIGdldEZlYXR1cmVkKCRmb3JtYXQpIHsKCSAgICAkYXBpX2Nh bGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvZmVhdHVyZWQuJXMi LCAkZm9ybWF0KTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsKTsKCSAg fQoKCSAgZnVuY3Rpb24gc2hvd1VzZXIoJGZvcm1hdCwgJGlkLCAkZW1haWwgPSBOVUxMKSB7 CgkgICAgaWYgKCRlbWFpbCA9PSBOVUxMKSB7CgkgICAgICAkYXBpX2NhbGwgPSBzcHJpbnRm KCJodHRwOi8vdHdpdHRlci5jb20vdXNlcnMvc2hvdy8lcy4lcyIsICRpZCwgJGZvcm1hdCk7 CgkgICAgfQoJICAgIGVsc2UgewoJICAgICAgJGFwaV9jYWxsID0gc3ByaW50ZigiaHR0cDov L3R3aXR0ZXIuY29tL3VzZXJzL3Nob3cueG1sP2VtYWlsPSVzIiwgJGVtYWlsKTsKCSAgICB9 CgkgICAgcmV0dXJuICR0aGlzLT5BUElDYWxsKCRhcGlfY2FsbCwgdHJ1ZSk7CgkgIH0KCgkg IGZ1bmN0aW9uIGdldE1lc3NhZ2VzKCRmb3JtYXQsICRzaW5jZSA9IE5VTEwsICRzaW5jZV9p ZCA9IDAsICRwYWdlID0gMSkgewoJICAgICRhcGlfY2FsbCA9IHNwcmludGYoImh0dHA6Ly90 d2l0dGVyLmNvbS9kaXJlY3RfbWVzc2FnZXMuJXMiLCAkZm9ybWF0KTsKCSAgICBpZiAoJHNp bmNlICE9IE5VTEwpIHsKCSAgICAgICRhcGlfY2FsbCAuPSBzcHJpbnRmKCI/c2luY2U9JXMi LCB1cmxlbmNvZGUoJHNpbmNlKSk7CgkgICAgfQoJICAgIGlmICgkc2luY2VfaWQgPiAwKSB7 CgkgICAgICAkYXBpX2NhbGwgLj0gc3ByaW50ZigiJXNzaW5jZV9pZD0lZCIsIChzdHJwb3Mo JGFwaV9jYWxsLCAiP3NpbmNlIikgPT09IGZhbHNlKSA/ICI/IiA6ICImIiwgJHNpbmNlX2lk KTsKCSAgICB9CgkgICAgaWYgKCRwYWdlID4gMSkgewoJICAgICAgJGFwaV9jYWxsIC49IHNw cmludGYoIiVzcGFnZT0lZCIsIChzdHJwb3MoJGFwaV9jYWxsLCAiP3NpbmNlIikgPT09IGZh bHNlKSA/ICI/IiA6ICImIiwgJHBhZ2UpOwoJICAgIH0KCSAgICByZXR1cm4gJHRoaXMtPkFQ SUNhbGwoJGFwaV9jYWxsLCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZ2V0U2VudE1lc3Nh Z2VzKCRmb3JtYXQsICRzaW5jZSA9IE5VTEwsICRzaW5jZV9pZCA9IDAsICRwYWdlID0gMSkg ewoJICAgICRhcGlfY2FsbCA9IHNwcmludGYoImh0dHA6Ly90d2l0dGVyLmNvbS9kaXJlY3Rf bWVzc2FnZXMvc2VudC4lcyIsICRmb3JtYXQpOwoJICAgIGlmICgkc2luY2UgIT0gTlVMTCkg ewoJICAgICAgJGFwaV9jYWxsIC49IHNwcmludGYoIj9zaW5jZT0lcyIsIHVybGVuY29kZSgk c2luY2UpKTsKCSAgICB9CgkgICAgaWYgKCRzaW5jZV9pZCA+IDApIHsKCSAgICAgICRhcGlf Y2FsbCAuPSBzcHJpbnRmKCIlc3NpbmNlX2lkPSVkIiwgKHN0cnBvcygkYXBpX2NhbGwsICI/ c2luY2UiKSA9PT0gZmFsc2UpID8gIj8iIDogIiYiLCAkc2luY2VfaWQpOwoJICAgIH0KCSAg ICBpZiAoJHBhZ2UgPiAxKSB7CgkgICAgICAkYXBpX2NhbGwgLj0gc3ByaW50ZigiJXNwYWdl PSVkIiwgKHN0cnBvcygkYXBpX2NhbGwsICI/c2luY2UiKSA9PT0gZmFsc2UpID8gIj8iIDog IiYiLCAkcGFnZSk7CgkgICAgfQoJICAgIHJldHVybiAkdGhpcy0+QVBJQ2FsbCgkYXBpX2Nh bGwsIHRydWUpOwoJICB9CgoJICBmdW5jdGlvbiBuZXdNZXNzYWdlKCRmb3JtYXQsICR1c2Vy LCAkdGV4dCkgewoJICAgICR0ZXh0ID0gdXJsZW5jb2RlKHN0cmlwc2xhc2hlcyh1cmxkZWNv ZGUoJHRleHQpKSk7CgkgICAgJGFwaV9jYWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0ZXIu Y29tL2RpcmVjdF9tZXNzYWdlcy9uZXcuJXM/dXNlcj0lcyZ0ZXh0PSVzIiwgJGZvcm1hdCwg JHVzZXIsICR0ZXh0KTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsLCB0 cnVlLCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZGVzdHJveU1lc3NhZ2UoJGZvcm1hdCwg JGlkKSB7CgkgICAgJGFwaV9jYWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0ZXIuY29tL2Rp cmVjdF9tZXNzYWdlcy9kZXN0cm95LyVzLiVzIiwgJGlkLCAkZm9ybWF0KTsKCSAgICByZXR1 cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsLCB0cnVlLCB0cnVlKTsKCSAgfQoKCSAgZnVu Y3Rpb24gY3JlYXRlRnJpZW5kc2hpcCgkZm9ybWF0LCAkaWQpIHsKCSAgICAkYXBpX2NhbGwg PSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vZnJpZW5kc2hpcHMvY3JlYXRlLyVzLiVz IiwgJGlkLCAkZm9ybWF0KTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxs LCB0cnVlLCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZGVzdHJveUZyaWVuZHNoaXAoJGZv cm1hdCwgJGlkKSB7CgkgICAgJGFwaV9jYWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0ZXIu Y29tL2ZyaWVuZHNoaXBzL2Rlc3Ryb3kvJXMuJXMiLCAkaWQsICRmb3JtYXQpOwoJICAgIHJl dHVybiAkdGhpcy0+QVBJQ2FsbCgkYXBpX2NhbGwsIHRydWUsIHRydWUpOwoJICB9CgoJICBm dW5jdGlvbiBmcmllbmRzaGlwRXhpc3RzKCRmb3JtYXQsICR1c2VyX2EsICR1c2VyX2IpIHsK CSAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vZnJpZW5kc2hp cHMvZXhpc3RzLiVzP3VzZXJfYT0lcyZ1c2VyX2I9JXMiLCAkZm9ybWF0LCAkdXNlcl9hLCAk dXNlcl9iKTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsLCB0cnVlKTsK CSAgfQoKCSAgZnVuY3Rpb24gdmVyaWZ5Q3JlZGVudGlhbHMoJGZvcm1hdCA9IE5VTEwpIHsK CSAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vYWNjb3VudC92 ZXJpZnlfY3JlZGVudGlhbHMlcyIsICgkZm9ybWF0ICE9IE5VTEwpID8gc3ByaW50ZigiLiVz IiwgJGZvcm1hdCkgOiBOVUxMKTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9j YWxsLCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZW5kU2Vzc2lvbigpIHsKCSAgICAkYXBp X2NhbGwgPSAiaHR0cDovL3R3aXR0ZXIuY29tL2FjY291bnQvZW5kX3Nlc3Npb24iOwoJICAg IHJldHVybiAkdGhpcy0+QVBJQ2FsbCgkYXBpX2NhbGwsIHRydWUpOwoJICB9CgoJICBmdW5j dGlvbiB1cGRhdGVMb2NhdGlvbigkZm9ybWF0LCAkbG9jYXRpb24pIHsKCSAgICAkYXBpX2Nh bGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vYWNjb3VudC91cGRhdGVfbG9jYXRp b24uJXM/bG9jYXRpb249JXMiLCAkZm9ybWF0LCAkbG9jYXRpb24pOwoJICAgIHJldHVybiAk dGhpcy0+QVBJQ2FsbCgkYXBpX2NhbGwsIHRydWUsIHRydWUpOwoJICB9CgoJICBmdW5jdGlv biB1cGRhdGVEZWxpdmVyeURldmljZSgkZm9ybWF0LCAkZGV2aWNlKSB7CgkgICAgJGFwaV9j YWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0ZXIuY29tL2FjY291bnQvdXBkYXRlX2RlbGl2 ZXJ5X2RldmljZS4lcz9kZXZpY2U9JXMiLCAkZm9ybWF0LCAkZGV2aWNlKTsKCSAgICByZXR1 cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsLCB0cnVlLCB0cnVlKTsKCSAgfQoKCSAgZnVu Y3Rpb24gcmF0ZUxpbWl0U3RhdHVzKCRmb3JtYXQpIHsKCSAgICAkYXBpX2NhbGwgPSBzcHJp bnRmKCJodHRwOi8vdHdpdHRlci5jb20vYWNjb3VudC9yYXRlX2xpbWl0X3N0YXR1cy4lcyIs ICRmb3JtYXQpOwoJICAgIHJldHVybiAkdGhpcy0+QVBJQ2FsbCgkYXBpX2NhbGwsIHRydWUp OwoJICB9CgoJICBmdW5jdGlvbiBnZXRBcmNoaXZlKCRmb3JtYXQsICRwYWdlID0gMSkgewoJ ICAgICRhcGlfY2FsbCA9IHNwcmludGYoImh0dHA6Ly90d2l0dGVyLmNvbS9hY2NvdW50L2Fy Y2hpdmUuJXMiLCAkZm9ybWF0KTsKCSAgICBpZiAoJHBhZ2UgPiAxKSB7CgkgICAgICAkYXBp X2NhbGwgLj0gc3ByaW50ZigiP3BhZ2U9JWQiLCAkcGFnZSk7CgkgICAgfQoJICAgIHJldHVy biAkdGhpcy0+QVBJQ2FsbCgkYXBpX2NhbGwsIHRydWUpOwoJICB9CgoJICBmdW5jdGlvbiBn ZXRGYXZvcml0ZXMoJGZvcm1hdCwgJGlkID0gTlVMTCwgJHBhZ2UgPSAxKSB7CgkgICAgaWYg KCRpZCA9PSBOVUxMKSB7CgkgICAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdp dHRlci5jb20vZmF2b3JpdGVzLiVzIiwgJGZvcm1hdCk7CgkgICAgfQoJICAgIGVsc2UgewoJ ICAgICAgJGFwaV9jYWxsID0gc3ByaW50ZigiaHR0cDovL3R3aXR0ZXIuY29tL2Zhdm9yaXRl cy8lcy4lcyIsICRpZCwgJGZvcm1hdCk7CgkgICAgfQoJICAgIGlmICgkcGFnZSA+IDEpIHsK CSAgICAgICRhcGlfY2FsbCAuPSBzcHJpbnRmKCI/cGFnZT0lZCIsICRwYWdlKTsKCSAgICB9 CgkgICAgcmV0dXJuICR0aGlzLT5BUElDYWxsKCRhcGlfY2FsbCwgdHJ1ZSk7CgkgIH0KCgkg IGZ1bmN0aW9uIGNyZWF0ZUZhdm9yaXRlKCRmb3JtYXQsICRpZCkgewoJICAgICRhcGlfY2Fs bCA9IHNwcmludGYoImh0dHA6Ly90d2l0dGVyLmNvbS9mYXZvcml0ZXMvY3JlYXRlLyVkLiVz IiwgJGlkLCAkZm9ybWF0KTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxs LCB0cnVlLCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rpb24gZGVzdHJveUZhdm9yaXRlKCRmb3Jt YXQsICRpZCkgewoJICAgICRhcGlfY2FsbCA9IHNwcmludGYoImh0dHA6Ly90d2l0dGVyLmNv bS9mYXZvcml0ZXMvZGVzdHJveS8lZC4lcyIsICRpZCwgJGZvcm1hdCk7CgkgICAgcmV0dXJu ICR0aGlzLT5BUElDYWxsKCRhcGlfY2FsbCwgdHJ1ZSwgdHJ1ZSk7CgkgIH0KCgkgIGZ1bmN0 aW9uIGZvbGxvdygkZm9ybWF0LCAkaWQpIHsKCSAgICAkYXBpX2NhbGwgPSBzcHJpbnRmKCJo dHRwOi8vdHdpdHRlci5jb20vbm90aWZpY2F0aW9ucy9mb2xsb3cvJWQuJXMiLCAkaWQsICRm b3JtYXQpOwoJICAgIHJldHVybiAkdGhpcy0+QVBJQ2FsbCgkYXBpX2NhbGwsIHRydWUsIHRy dWUpOwoJICB9CgoJICBmdW5jdGlvbiBsZWF2ZSgkZm9ybWF0LCAkaWQpIHsKCSAgICAkYXBp X2NhbGwgPSBzcHJpbnRmKCJodHRwOi8vdHdpdHRlci5jb20vbm90aWZpY2F0aW9ucy9sZWF2 ZS8lZC4lcyIsICRpZCwgJGZvcm1hdCk7CgkgICAgcmV0dXJuICR0aGlzLT5BUElDYWxsKCRh cGlfY2FsbCwgdHJ1ZSwgdHJ1ZSk7CgkgIH0KCgkgIGZ1bmN0aW9uIGNyZWF0ZUJsb2NrKCRm b3JtYXQsICRpZCkgewoJICAgICRhcGlfY2FsbCA9IHNwcmludGYoImh0dHA6Ly90d2l0dGVy LmNvbS9ibG9ja3MvY3JlYXRlLyVkLiVzIiwgJGlkLCAkZm9ybWF0KTsKCSAgICByZXR1cm4g JHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsLCB0cnVlLCB0cnVlKTsKCSAgfQoKCSAgZnVuY3Rp b24gZGVzdHJveUJsb2NrKCRmb3JtYXQsICRpZCkgewoJICAgICRhcGlfY2FsbCA9IHNwcmlu dGYoImh0dHA6Ly90d2l0dGVyLmNvbS9ibG9ja3MvZGVzdHJveS8lZC4lcyIsICRpZCwgJGZv cm1hdCk7CgkgICAgcmV0dXJuICR0aGlzLT5BUElDYWxsKCRhcGlfY2FsbCwgdHJ1ZSwgdHJ1 ZSk7CgkgIH0KCgkgIGZ1bmN0aW9uIHRlc3QoJGZvcm1hdCkgewoJICAgICRhcGlfY2FsbCA9 IHNwcmludGYoImh0dHA6Ly90d2l0dGVyLmNvbS9oZWxwL3Rlc3QuJXMiLCAkZm9ybWF0KTsK CSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsLCB0cnVlKTsKCSAgfQoKCSAg ZnVuY3Rpb24gZG93bnRpbWVTY2hlZHVsZSgkZm9ybWF0KSB7CgkgICAgJGFwaV9jYWxsID0g c3ByaW50ZigiaHR0cDovL3R3aXR0ZXIuY29tL2hlbHAvZG93bnRpbWVfc2NoZWR1bGUuJXMi LCAkZm9ybWF0KTsKCSAgICByZXR1cm4gJHRoaXMtPkFQSUNhbGwoJGFwaV9jYWxsLCB0cnVl KTsKCSAgfQoKCSAgcHJpdmF0ZSBmdW5jdGlvbiBBUElDYWxsKCRhcGlfdXJsLCAkcmVxdWly ZV9jcmVkZW50aWFscyA9IGZhbHNlLCAkaHR0cF9wb3N0ID0gZmFsc2UpIHsKCSAgICAkY3Vy bF9oYW5kbGUgPSBjdXJsX2luaXQoKTsKCSAgICBpZigkdGhpcy0+YXBwbGljYXRpb25fc291 cmNlKXsKCSAgICAgICRhcGlfdXJsIC49ICImc291cmNlPSIgLiAkdGhpcy0+YXBwbGljYXRp b25fc291cmNlOwoJICAgIH0KCSAgICBjdXJsX3NldG9wdCgkY3VybF9oYW5kbGUsIENVUkxP UFRfVVJMLCAkYXBpX3VybCk7CgkgICAgaWYgKCRyZXF1aXJlX2NyZWRlbnRpYWxzKSB7Cgkg ICAgICBjdXJsX3NldG9wdCgkY3VybF9oYW5kbGUsIENVUkxPUFRfVVNFUlBXRCwgJHRoaXMt PmNyZWRlbnRpYWxzKTsKCSAgICB9CgkgICAgaWYgKCRodHRwX3Bvc3QpIHsKCSAgICAgIGN1 cmxfc2V0b3B0KCRjdXJsX2hhbmRsZSwgQ1VSTE9QVF9QT1NULCB0cnVlKTsKCSAgICB9Cgkg ICAgY3VybF9zZXRvcHQoJGN1cmxfaGFuZGxlLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCBU UlVFKTsKCSAgICAkdHdpdHRlcl9kYXRhID0gY3VybF9leGVjKCRjdXJsX2hhbmRsZSk7Cgkg ICAgJHRoaXMtPmh0dHBfc3RhdHVzID0gY3VybF9nZXRpbmZvKCRjdXJsX2hhbmRsZSwgQ1VS TElORk9fSFRUUF9DT0RFKTsKCSAgICAkdGhpcy0+bGFzdF9hcGlfY2FsbCA9ICRhcGlfdXJs OwoJICAgICR0aGlzLT5sYXN0X2N1cmxfZXJyb3IgPSBjdXJsX2Vycm9yKCRjdXJsX2hhbmRs ZSk7CgkgICAgY3VybF9jbG9zZSgkY3VybF9oYW5kbGUpOwoJICAgIHJldHVybiAkdHdpdHRl cl9kYXRhOwoJICB9CgoJICBmdW5jdGlvbiBsYXN0U3RhdHVzQ29kZSgpIHsKCSAgICByZXR1 cm4gJHRoaXMtPmh0dHBfc3RhdHVzOwoJICB9CgoJICBmdW5jdGlvbiBsYXN0QVBJQ2FsbCgp IHsKCSAgICByZXR1cm4gJHRoaXMtPmxhc3RfYXBpX2NhbGw7CgkgIH0KCgkgIGZ1bmN0aW9u IGxhc3RDdXJsRXJyb3IoKSB7CgkgIAlyZXR1cm4gJHRoaXMtPmxhc3RfY3VybF9lcnJvcjsK CSAgfQoJfQp9IjtzOjg6ImhlbHBfcmF3IjtzOjExMDQ6ImgxKHRpdGxlKS4gbWVtX3R3aXR0 ZXIgcGx1Z2luCgpoMihzZWN0aW9uIHN1bW1hcnkpLiBTdW1tYXJ5CgpwLiBUaGlzIHBsdWdp biB3aWxsIHBpbmcgdHdpdHRlciB3aGVuZXZlciB5b3UgcG9zdCBhbiBhcnRpY2xlLiBUaGlz IHdpbGwgb25seSBub3RpZnkgdHdpdHRlciB3aGVuIGluIHNpdGUgaXMgaW4gbGl2ZSBtb2Rl LgoKaDIoc2VjdGlvbiBjb250YWN0KS4gQXV0aG9yIENvbnRhY3QKCiJNaWNoYWVsIE1hbmZy ZSI6bWFpbHRvOm1tYW5mcmVAZ21haWwuY29tP3N1YmplY3Q9VGV4dHBhdHRlcm4lMjBtZW1f dHdpdHRlciUyMHBsdWdpbgoiaHR0cDovL21hbmZyZS5uZXQiOmh0dHA6Ly9tYW5mcmUubmV0 CgpoMihzZWN0aW9uIGxpY2Vuc2UpLiBMaWNlbnNlCgpwLiBUaGlzIHBsdWdpbiBpcyBsaWNl bnNlZCB1bmRlciB0aGUgIkdQTHYyIjpodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zaW5nL2xp Y2Vuc2VzL2luZm8vR1BMdjIuaHRtbC4KCmgyKHNlY3Rpb24gaW5zdGFsbGF0aW9uKS4gSW5z dGFsbGF0aW9uCgpwLiBHbyB0byBhZHZhbmNlZCBwcmVmZXJlbmNlcyBhbmQgZW50ZXIgeW91 ciB0d2l0dGVyIHVzZXJuYW1lLCBwYXNzd29yZCBhbmQgcG9zdCBtZXNzYWdlLgoKaDIoc2Vj dGlvbikuIFByZWZlcmVuY2VzCgpoMy4gbWVtX3R3aXR0ZXJfdXNlcgoKcC4gVGhpcyBpcyB5 b3VyIHR3aXR0ZXIgdXNlcm5hbWUuCgpoMy4gbWVtX3R3aXR0ZXJfcGFzcwoKcC4gVGhpcyBp cyB5b3VyIHR3aXR0ZXIgcGFzc3dvcmQuCgpoMy4gbWVtX3R3aXR0ZXJfbXNnCgpwLiBUaGlz IGlzIHRoZSBtZXNzYWdlIGZvcm1hdCB0aGF0IHdpbGwgYmUgcG9zdGVkIHRvIHR3aXR0ZXIu IFRoZSBzdHJpbmcgd2lsbCBiZSBwYXJzZWQgYW5kIGFsbCBpbnN0YW5jZXMgb2YgInt1cmx9 IiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIHVybCB0byB0aGUgYXJ0aWNsZS4gQWxsIGlu c3RhbmNlcyBvZiAie3RpdGxlfSIgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBhcnRpY2xl IHRpdGxlLgoKaDMuIG1lbV90d2l0dGVyX2V4Y2x1ZGVfc2VjdGlvbnMKCnAuIEEgY29tbWEg c2VwYXJhdGUgbGlzdCBvZiBzZWN0aW9ucyB0aGF0IHNob3VsZCBub3QgcG9zdCB0byB0d2l0 dGVyLiI7czozOiJtZDUiO3M6MzI6ImZjYjdkOWRlOGQ5MTRiYTU2MWM3ZTljMmE3ZTM3ZDUx Ijt9