# Name: smd_tags v0.51 # Type: Admin/Public/AJAX plugin # Unlimited tag taxonomy for articles, images, files and links # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjg6InNtZF90YWdzIjtzOjY6ImF1dGhvciI7czoxMToiU3Rl ZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjUxIjtzOjExOiJkZXNjcmlwdGlvbiI7czo2MDoi VW5saW1pdGVkIHRhZyB0YXhvbm9teSBmb3IgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMgYW5k IGxpbmtzIjtzOjQ6ImNvZGUiO3M6MTQ3NTE0OiIvLzw/cGhwCi8qKgogKiBzbWRfdGFnczog QSBUZXh0cGF0dGVybiBDTVMgcGx1Z2luIGZvciB1bmxpbWl0ZWQsIHN0cnVjdHVyZWQgdGF4 b25vbXkgYWNyb3NzIGNvbnRlbnQgdHlwZXMuCiAqCiAqIEZlYXR1cmVzOgogKiAgIEFydGlj bGUsIGltYWdlLCBmaWxlIGFuZCBsaW5rIHRhZ3MKICogICBSYXBpZCB0YWcgY3JlYXRpb24g LyBlZGl0aW5nIC8gbXVsdGktZWRpdGluZwogKiAgIE9wdGlvbmFsbHkgaW1wb3J0IHRhZ3Mg ZnJvbSByc3NfdWMsIHRydV90YWdzLCBjYXRlZ29yeTEvMiBvciBjdXN0b20gZmllbGRzCiAq ICAgQ3JlYXRlIHRhZyBsaXN0cywgdHJlZXMgYW5kIGNsb3VkcwogKiAgIEZpbmQgcmVsYXRl ZCBjb250ZW50IGJhc2VkIG9uIHRhZwogKiAgIFRhZyBjb21iaW5hdG9ycyBmcm9tIHRoZSBV UkwKICoKICogQGF1dGhvciBTdGVmIERhd3NvbgogKiBAbGluayAgIGh0dHA6Ly9zdGVmZGF3 c29uLmNvbS8KICoKICogQHRvZG8KICogVXBkYXRlIGZvciA0LjYueDoKICogICBJbnB1dHMg c3Vycm91bmRlZCB3aXRoIGdyYWYoKQogKiAgIFRhYmxlIGNsYXNzIGFsdGVyYXRpb24gYW5k IGxpc3R0YWJsZSB3cmFwcGVyCiAqICAgUHJlZnMgc2NyZWVuIHRvIHVzZSBpbnB1dExhYmVs KCkgYW5kIG5ldyB3cmFwcGVyIGRpdgogKiAgIEFsdGVyIHRhZyBwb29sIGxheW91dCB0byBh bGxvdyBjb2xsYXBzaW5nIGdyb3VwcyBvZiBwYXJlbnQtPmNoaWxkcmVuCiAqIFVzZSBhcnRp Y2xlX3Jvd19pbmZvKCksIGxpbmtfZm9ybWF0X2luZm8oKQogKiBJbnZlc3RpZ2F0ZSBzdG9y aW5nIHRhZyBkYXRhIGFzIGpRdWVyeSAuZGF0YSgpIGluc3RlYWQgb2YgaW4gPHNwYW4+cyAo ZnJvbSBUeHAgNC42KyBpdCBjYW4gYmUgZG9uZSBpbiBIVE1MIGRhdGEtKiBhdHRyaWJ1dGVz KQogKiBQYWdpbmF0aW9uIG9mIHRhZyBsaXN0cyAvIHJlbGF0ZWQgY29udGVudAogKiBGZWVk IGhhbmRsZXIgcHJlZnMgdG8gaW5qZWN0IHRhZ3MgaW50byBSU1MrQXRvbSAobGlrZSB0cnVf dGFnczogY29kZSBhdCBib3R0b20gb2YgdGhpcyBwbHVnaW4pCiAqIEFkZCBvcHRpb24gdG8g ZGlzcGxheSB0YWcgbGlzdHMgQU5EIFRleHRBcmVhKCspIG9uIGxpc3QgcGFnZXMKICogU2Vl IGlmIHJhcGlkIHRhZ2dpbmcgY2FuIGJlIG1hZGUgbW9yZSBpbnR1aXRpdmUgd3J0IENyZWF0 ZS9TYXZlIHRvIGF2b2lkIGNsb2JiZXJpbmcgYWxyZWFkeSBjcmVhdGVkIHRhZ3MgKGZyb20g cGllbWFuIGh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9 MjQwMDk5I3AyNDAwOTkpCiAqIFdoZW4gcmVmcmVzaGluZyB0aGUgTWFuYWdlIHRhYiwgRkYg cmVtZW1iZXJzIHRoZSBUaXRsZSBhbmQgdHJpZXMgdG8gYWRkIGl0IG9uIHBhZ2UgbG9hZCwg dGhyb3dpbmcgYSBtc2dhcmVhIHdhcm5pbmcgYWJvdXQgdGhlIHRhZyBhbHJlYWR5IGV4aXN0 cyAob3IgdGhhdCBuYW1lIGlzIGVtcHR5KQogKiBQb3NzaWJpbGl0eSBvZiBzZWN0aW9uIHRh Z3M/IChmcm9tIGpha29iKQogKiBQZXItc2VjdGlvbiAvIHBlci1jYXRlZ29yeSB0YWcgY291 bnRzCiAqIFF1ZXJ5IHRhZ3Mgd2l0aG91dCBzZWN0aW9uL2FydGljbGUgY29udGV4dCAoRHdh eW5lOiBodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTI0 Njc1MCNwMjQ2NzUwKQogKiBPbiBsaXN0IHBhZ2VzOgogKiAgIEFKQVggZmV0Y2ggb2YgdGhl IHRhZyBzZXQgZm9yIFRleHRBcmVhIGFuZCBUZXh0QXJlYSsgbW9kZXMgdG8gaW1wcm92ZSBw YWdlIGxvYWQgdGltZSAocGx1cyB3ZSB0aGVuIG9ubHkgZ3JhYiB0aGUgb25lcyBpbiB0aGUg Y3VycmVudCBjYXRlZ29yeSBoaWVyYXJjaHkpCiAqICAgT3B0aW9uIGZvciBiaS1kaXJlY3Rp b25hbCBsb29rdXAgb2YgdGFncyBmcm9tIHRoZSBjdXJyZW50IGNhdGVnb3J5LCBpLmUuIGdy YW5kcGFyZW50cyBhbmQgY2hpbGRyZW4gKGZyb20gYXN3aWhhcnQgaHR0cDovL2ZvcnVtLnRl eHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0yMzI0NDUjcDIzMjQ0NSkKICogICBB ZGQgYXV0b2NvbXBsZXRlIG9wdGlvbnMgdG8gc21kX3RhZ3MgcHJlZnMgc28gYXV0b2ZpbGwg ZXRjIGNhbiBiZSBjb25maWd1cmVkIChmcm9tIGFzd2loYXJ0KQogKiAgIENoZWNrIHdoYXQg aGFwcGVucyB3aGVuIGRlbGV0aW5nIGNvbnRlbnQgKGUuZy4gaW1hZ2VzKTogaXQgc29tZXRp bWVzIHRyaWdnZXJzICIgJycgaXMgbm90IGFuIEludGVnZXIgIiBhc3NlcnRpb24gKGZyb20g Y3VyaW91eiBodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlk PTIzNjAyMyNwMjM2MDIzKQogKiAgIFBlcmhhcHMgb2ZmZXIgc29ydCBvcHRpb24gZm9yIExp c3QgbW9kZSB0byBhKSByZXRhaW4gaGllcmFyY2h5LCBiKSBzdHJpY3QgYWxwaGFiZXRpY2Fs LCBjKSBncm91cCB0aGVtIHNvbWVob3cgdG8gc2hvdyBob3cgc2V0cyBvZiB0YWdzIGFyZSBy ZWxhdGVkIChmcm9tIHBpZW1hbikKICogVXNlIGhlYWRfZW5kIHN0ZXAgZm9yIHN0eWxlIGJs b2NrCiAqIFVwZ3JhZGUgcHJlZnMgdG8gdXNlIGEgc21kX3RhZ3NfZ2V0X3ByZWZzKCkgZnVu Y3Rpb24KICogQHRvZml4CiAqIFNhbml0aXplIHRhZ3MgZnJvbSBjdXN0b20gZmllbGRzIC8g Y2F0cyBkdXJpbmcgaW1wb3J0CiAqIEJsb2Igb2Ygb3V0cHV0IGZyb20gQUpBWCAoY2YuICJJ ZiB5b3Ugc3BvdCBzdWNoIEphdmFTY3JpcHQgcmVzcG9uc2VzIHlvdXIgcGx1Z2luIGJyZWFr cyBBSkFYIGF0IHRoZSB3cml0ZSB0YWIsIGZvciBpbnN0YW5jZSBieSBlY2hvKClpbmcgc29t ZXRoaW5nIGFzIHRleHQvaHRtbCB3aGVuIHNlbmRfc2NyaXB0X3Jlc3BvbnNlKCkgd2l0aCB0 ZXh0L2phdmFzY3JpcHQgd291bGQgYmUgdGhlIHByb3BlciByZXBseSB3aXRoIHRoZSBleHBl Y3RlZCBtaW1lIHR5cGUuIikKICogUXVlcnkgY291bnQgLS0gY2FjaGUgdGFnIHNldHMgYW5k IHZlcmlmeSBVUkwgdGFnIGxpc3RzIGFyZSBhcyBvcHRpbXVtIGFzIHBvc3NpYmxlIChzZWUg c21kX2JpbykKICogTGl2ZSBzZWFyY2ggc29tZXRpbWVzIGdpdmVzIHdyb25nIHJlc3VsdHMg d2hlbiBncm91cCB0YWdzIGNvbnRhaW4gbm8gKG9yIHZlcnkgZmV3KSBjaGlsZHJlbgogKiBW ZXJpZnkgbGltaXQvb2Zmc2V0IGJlaGF2aW91ciAoZ2l6OiBodHRwOi8vZm9ydW0udGV4dHBh dHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTI0NDAyMCNwMjQ0MDIwKQogKiBzbWRfdGFn c19jb250ZXh0KCkgOiBJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIGZvciBmb3JlYWNoKCkg KGZyaWNraW5tdWNrOiBodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5w aHA/cGlkPTI0OTI1MCNwMjQ5MjUwKQogKiBEZWFsIHdpdGggcGFyZW50IGF0dHJpYnV0ZSBp biBzbWRfdGFnX25hbWUgYmV0dGVyIChzdG9wIGl0IHNob3dpbmcgJ3Jvb3QnPykKICogRGV0 ZWN0IHNjZW5hcmlvIHdoZW4gYXJ0aWNsZSBzYXZlcyBmYWlsIGFuZCBkb24ndCB1cGRhdGUg dGFncyB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzIChlLmcuIHdoZW4gY29uY3VycmVudCB1 c2VycyBhcmUgZWRpdGluZyB0aGUgc2FtZSBkb2N1bWVudCkKICovCgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLy8gQURNSU4gU0lERSBDT0RFCmlmIChAdHhwaW50ZXJmYWNlID09 PSAnYWRtaW4nKSB7CglhZGRfcHJpdnMoJ3NtZF90YWdzJywnMSwyJyk7CglhZGRfcHJpdnMo J3NtZF90YWdzX3VzZXJzJywnMSwyLDMsNCw1LDYnKTsKCWFkZF9wcml2cygncGx1Z2luX3By ZWZzLnNtZF90YWdzJywnMSwyJyk7CgoJLy8gRXh0ZW5zaW9ucyB0YWIKCXJlZ2lzdGVyX3Rh YignZXh0ZW5zaW9ucycsICdzbWRfdGFncycsIGdUeHQoJ3NtZF90YWdzJykpOwoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF90YWdzJywgJ3NtZF90YWdzJyk7CglyZWdpc3Rlcl9jYWxsYmFj aygnc21kX3RhZ3NfdXNlcnMnLCAnc21kX3RhZ3NfdXNlcnMnKTsKCgkvLyBOb3RlIHRoZSBj YWxsYmFja3MgYXJlIG9yZGVyZWQgd2l0aCAnc2F2ZScgZmlyc3QKCXJlZ2lzdGVyX2NhbGxi YWNrKCdzbWRfdGFnc19tdWx0aV9lZGl0JywgJ2xpc3QnLCAnbGlzdF9tdWx0aV9lZGl0Jyk7 CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAnYXJ0aWNsZScsICdj cmVhdGUnKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19zYXZlbGlzdCcsICdhcnRp Y2xlJywgJ2VkaXQnKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19sb2FkbGlzdCcs ICdhcnRpY2xlJyk7CgoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90YWdzX211bHRpX2VkaXQn LCAnaW1hZ2UnLCAnaW1hZ2VfZGVsZXRlJyk7CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3Rh Z3Nfc2F2ZWxpc3QnLCAnaW1hZ2UnLCAnaW1hZ2Vfc2F2ZScpOwoJcmVnaXN0ZXJfY2FsbGJh Y2soJ3NtZF90YWdzX2xvYWRsaXN0JywgJ2ltYWdlJyk7CgoJcmVnaXN0ZXJfY2FsbGJhY2so J3NtZF90YWdzX211bHRpX2VkaXQnLCAnZmlsZScsICdmaWxlX2RlbGV0ZScpOwoJcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF90YWdzX3NhdmVsaXN0JywgJ2ZpbGUnLCAnZmlsZV9zYXZlJyk7 CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3NfbG9hZGxpc3QnLCAnZmlsZScpOwoKCXJl Z2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19tdWx0aV9lZGl0JywgJ2xpbmsnLCAnbGlua19t dWx0aV9lZGl0Jyk7CglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nfc2F2ZWxpc3QnLCAn bGluaycsICdsaW5rX3Bvc3QnKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdGFnc19zYXZl bGlzdCcsICdsaW5rJywgJ2xpbmtfc2F2ZScpOwoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF90 YWdzX2xvYWRsaXN0JywgJ2xpbmsnKTsKCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3RhZ3Nf c2V0dXAnLCAncGx1Z2luX3ByZWZzLnNtZF90YWdzJyk7CglyZWdpc3Rlcl9jYWxsYmFjaygn c21kX3RhZ3Nfd2VsY29tZScsICdwbHVnaW5fbGlmZWN5Y2xlLnNtZF90YWdzJyk7CgoJZ2xv YmFsICRzbWRfdGFnX3ByZWZzLCAkc21kX3RhZ3Nfc3R5bGVzOwoKCS8vIFRyaXBsZSBhcnJh eSwgb3V0cHV0IGluIGFscGhhYmV0aWNhbCBvcmRlciwgc2VxdWVudGlhbGx5IG51bWJlcmVk CgkvLyAgMDogbGlzdCBvZiBjdXJyZW50IHByZWZzICsgZGVmYXVsdAoJLy8gIDE6IGxpc3Qg b2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3ZpbmcgKGRlZmF1bHQgc2hvdWxk IGFsbCBiZSBlbXB0eSkKCS8vICAyOiBwb3NpdGlvbiB0aGF0IGEgaGVhZGluZyBzaG91bGQg YmUgaW5zZXJ0ZWQgKyBoZWFkaW5nIGl0c2VsZgoJJHNtZF90YWdfcHJlZnMgPSBhcnJheSgK CQlhcnJheSgKCQkJJ3NtZF90YWdfcF9lbmFibGUnID0+ICcxMTExJywgLy8gb25lIGRpZ2l0 IGZvciBhcnRpY2xlL2ltYWdlL2ZpbGUvbGluay4gMT1lbmFibGVkOyAwPWRpc2FibGVkCgkJ CSdzbWRfdGFnX3BfaW5wdXQnID0+ICcwJywgLy8gMD1zZWxlY3QsIDE9bGlua3MsIDI9dGV4 dGFyZWEsIDM9dGV4dGFyZWErCgkJCSdzbWRfdGFnX3BfbGJpJyA9PiAnMCcsCgkJCSdzbWRf dGFnX3BfbGlua2NhdCcgPT4gJzAnLAoJCQknc21kX3RhZ19wX2xpc3RwYXInID0+ICcxJywg Ly8gcGVybWl0IHBhcmVudCBpbiB0YWcgdHJlZSBvbiBjb250ZW50IHBhZ2VzCgkJCSdzbWRf dGFnX3BfbWFzdGVyJyA9PiAnJywgLy8gc3BlY2lhbCAnZ2xvYmFsJyBjYXRlZ29yeSAocGVy IHR5cGU6IHNhbWUgbmFtZSBmb3IgZWFjaCkKCQkJJ3NtZF90YWdfcF9xdGFnJyA9PiAnMCcs IC8vIDA9bm8gYXV0b2NvbXBsZXRlLCAxPXN0ZCBhL2MsIDI9c3RyaWN0IGEvYwoJCQknc21k X3RhZ19wX3F0cGF0aCcgPT4gJycsIC8vIERpciB0byBqcyBmaWxlKHMpIHJlbGF0aXZlIHRv IHRleHRwYXR0ZXJuIGRpcgoJCQknc21kX3RhZ19wX3F0c3R5bCcgPT4gJycsIC8vIERpciB0 byBjc3MgZmlsZShzKQoJCQknc21kX3RhZ19wX3NpemUnID0+ICc2JywKCQkJJ3NtZF90YWdf dF9hc3RhcnQnID0+ICcwJywKCQkJJ3NtZF90YWdfdF9hdXRvJyA9PiAnMScsCgkJCSdzbWRf dGFnX3RfY29scycgPT4gJzEnLAoJCQknc21kX3RhZ190X2NvbHNvcmQnID0+ICcwJywKCQkJ J3NtZF90YWdfdF9jb3VudCcgPT4gJzEnLAoJCQknc21kX3RhZ190X2RlbHRyZWUnID0+ICcw JywKCQkJJ3NtZF90YWdfdF9kZWx1c2VkJyA9PiAnMCcsCgkJCSdzbWRfdGFnX3RfZGVzY190 ZXh0aWxlJyA9PiAnMScsCgkJCSdzbWRfdGFnX3RfZGVzY190b29sdGlwJyA9PiAnMScsCgkJ CSdzbWRfdGFnX3RfZW5yZXAnID0+ICcxJywKCQkJJ3NtZF90YWdfdF9oaWxpdGUnID0+ICc5 MTkxOWEnLAoJCQknc21kX3RhZ190X2hvdmVyJyA9PiAnYWFhJywKCQkJJ3NtZF90YWdfdF9p bmRlbnQnID0+ICcmIzgyMTI7JywKCQkJJ3NtZF90YWdfdF9tZGVsaW0nID0+ICcsJywKCQkJ J3NtZF90YWdfdF9zaXplX2Rlc2MnID0+ICcyNDAsIDgwJywKCQkJJ3NtZF90YWdfdV9jb21i aScgPT4gJzEnLAoJCQknc21kX3RhZ191X2NvbWJpX2FuZCcgPT4gJysnLAoJCQknc21kX3Rh Z191X2NvbWJpX29yJyA9PiAnfCcsCgkJCSdzbWRfdGFnX3VfcG5hbScgPT4gJ3NtZF90YWcn LAoJCQknc21kX3RhZ191X3B0eXAnID0+ICdzbWRfdGFndHlwZScsCgkJCSdzbWRfdGFnX3Vf c2VjJyA9PiAnc21kX3RhZ3MnLAoJCSksCgkJYXJyYXkoCgkJCSdzbWRfdGFnX3BfZmlyc3Qn ID0+ICcxJywKCQkpLAoJCWFycmF5KAoJCQkxID0+IGdUeHQoJ3NtZF90YWdfcHJlZnNfcCcp LAoJCQkxMCA9PiBnVHh0KCdzbWRfdGFnX3ByZWZzX3QnKSwKCQkJMjYgPT4gZ1R4dCgnc21k X3RhZ19wcmVmc191JyksCgkJKQoJKTsKCgkvLyBDU1MgZGVmaW5pdGlvbnM6IGhvcGVmdWxs eSBraW5kIHRvIHRoZW1lcnMKCSRzbWRfdGFnc19zdHlsZXMgPSBhcnJheSgKCQknY29tbW9u JyA9PgogICAgICAgICAnLnNtZF9oaWRkZW4geyBkaXNwbGF5Om5vbmU7IH0nLAoJCSd0YWdf bWFuYWdlcicgPT4KICAgICAgICAgJy5zbWRfaG92ZXIgeyBjdXJzb3I6cG9pbnRlcjsgYmFj a2dyb3VuZDoje2hvdn07IH0KICAgICAgICAgLnNtZF9jdXJyZW50IHsgcGFkZGluZzozcHg7 IGZvbnQtd2VpZ2h0OmJvbGQ7IGJhY2tncm91bmQ6I3tjdXJ9OyB9CiAgICAgICAgIC5zbWRf dGFnc19zaG93cGFycywgLnNtZF90YWdzX2xpbmtjYXQgeyBtYXgtd2lkdGg6MTJlbTsgfQog ICAgICAgICAjc21kX3RhZ19maWx0IHsgYm9yZGVyOjFweCBzb2xpZCBncmV5OyBmb250LXNp emU6OTAlOyBmbG9hdDpyaWdodDsgbWFyZ2luOi0zLjVlbSAxZW0gMDsgd2lkdGg6MjQwcHg7 IHBhZGRpbmc6MWVtIDJlbTsgYm94LXNoYWRvdzogNHB4IDRweCA1cHggIzk5OTsgfQogICAg ICAgICAjc21kX3RhZ19tdWx0aXNlbCB7IG1hcmdpbjoxMHB4IDAgMDsgfQogICAgICAgICAu c21kX2ZyZWVmb3JtX2J5cm93IHsgZmxvYXQ6bGVmdDsgcGFkZGluZzo1cHggMnB4OyB9CiAg ICAgICAgIC5zbWRfZnJlZWZvcm1fYnljb2wgeyBmbG9hdDpsZWZ0OyBwYWRkaW5nOjFweCA1 cHg7IH0KICAgICAgICAgLnNtZF9mcmVlZm9ybV9ieWNvbCBsaSwgLnNtZF9mcmVlZm9ybV9i eWNvbCBsaSB7IHBhZGRpbmc6MnB4OyB9CiAgICAgICAgIC5zbWRfY2xlYXIgeyBjbGVhcjpi b3RoOyB9CiAgICAgICAgIC5zbWRfdGFnc19uZXcgbGFiZWwge2Rpc3BsYXk6YmxvY2s7IG1h cmdpbjoycHggMXB4OyB9CiAgICAgICAgIC5zbWRfdGFnc19uZXcgaW5wdXRbdHlwZT0ic3Vi bWl0Il0geyBtYXJnaW46MS41ZW0gMCAwOyB9CiAgICAgICAgIC5zbWRfdGFnc19pbnB1dF9n cm91cCB7IGZsb2F0OmxlZnQ7IG1hcmdpbjowIDFlbTsgfQogICAgICAgICAuc21kX3RhZ3Nf cG9vbCB7IGNsZWFyOmJvdGg7IHBhZGRpbmc6MWVtIDA7fScsCgkJJ2xpc3RfcGFnZXMnID0+ CiAgICAgICAgICcuc21kX2hpZGRlbiB7IGRpc3BsYXk6bm9uZTsgfQogICAgICAgICAuc21k X2Zha2VidG4sICNzbWRfdGFnc19ieWxpbmsgc3BhbiB7IGN1cnNvcjpwb2ludGVyOyB9CiAg ICAgICAgIC5zbWRfdGFnaXAgeyBtYXJnaW46LjRlbSAwIC44ZW07IG1heC13aWR0aDo0MDBw eDsgfQogICAgICAgICAuc21kX3NlbCB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KICAgICAgICAg LnNtZF90b29sdGlwIHsgcG9zaXRpb246YWJzb2x1dGU7IGJhY2tncm91bmQ6I2VlZTsgbWF4 LXdpZHRoOjMwMHB4OyBtaW4td2lkdGg6MTUwcHg7IGJvcmRlcjoxcHggc29saWQgYmxhY2s7 IHBhZGRpbmc6MWVtOyBib3gtc2hhZG93OjVweCA1cHggNHB4ICM5OTk7IH0nLAoJCSdyZXBv cnQnID0+CiAgICAgICAgICcjc21kX3RhZ19yZXBvcnRfcGFuZSB7IGRpc3BsYXk6bm9uZTsg cG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MjAwcHg7IG1heC13aWR0aDo1MDBweDsgYm9yZGVy OjNweCByaWRnZSAjOTk5OyBvcGFjaXR5Oi45MjsgZmlsdGVyOmFscGhhKG9wYWNpdHk6OTIp OyBwYWRkaW5nOjE1cHggMjBweDsgYmFja2dyb3VuZC1jb2xvcjojZTJkZmNlOyBjb2xvcjoj ODA1NTFlOyB9CiAgICAgICAgICNzbWRfdGFnX3JlcG9ydF9wYW5lIC5wdWJsaXNoIHsgZmxv YXQ6cmlnaHQ7IH0nLAoJKTsKfSBlbHNlaWYgKHR4cGludGVyZmFjZSA9PT0gJ3B1YmxpYycp IHsKICAgIGlmIChjbGFzc19leGlzdHMoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnknKSkg ewogICAgICAgIFR4cDo6Z2V0KCdcVGV4dHBhdHRlcm5cVGFnXFJlZ2lzdHJ5JykKICAgICAg ICAgICAgLT5yZWdpc3Rlcignc21kX3RhZ19saXN0JykKICAgICAgICAgICAgLT5yZWdpc3Rl cignc21kX3RhZ19uYW1lJykKICAgICAgICAgICAgLT5yZWdpc3Rlcignc21kX3RhZ19jb3Vu dCcpCiAgICAgICAgICAgIC0+cmVnaXN0ZXIoJ3NtZF90YWdfaW5mbycpCiAgICAgICAgICAg IC0+cmVnaXN0ZXIoJ3NtZF9pZl90YWcnKQogICAgICAgICAgICAtPnJlZ2lzdGVyKCdzbWRf aWZfdGFnX2xpc3QnKQogICAgICAgICAgICAtPnJlZ2lzdGVyKCdzbWRfcmVsYXRlZF90YWdz Jyk7CiAgICB9Cgp9CgppZiAoIWRlZmluZWQoJ1NNRF9UQUcnKSkgewoJZGVmaW5lKCJTTURf VEFHIiwgJ3NtZF90YWdzJyk7Cn0KaWYgKCFkZWZpbmVkKCdTTURfVEFHQycpKSB7CglkZWZp bmUoIlNNRF9UQUdDIiwgJ3NtZF90YWdzX2NhdCcpOwp9CmlmICghZGVmaW5lZCgnU01EX1RB R1UnKSkgewoJZGVmaW5lKCJTTURfVEFHVSIsICdzbWRfdGFnc191c2VkJyk7Cn0KcmVnaXN0 ZXJfY2FsbGJhY2soJ3NtZF90YWdzX3VybF9oYW5kbGVyJywgJ3ByZXRleHQnKTsKCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gc21kX3RhZ3Nfd2VsY29tZSgkZXZ0LCAkc3RwKSB7CgkkbXNnID0g Jyc7Cglzd2l0Y2ggKCRzdHApIHsKCQljYXNlICdpbnN0YWxsZWQnOgoJCQlzbWRfdGFnc190 YWJsZV9pbnN0YWxsKDApOwoJCQkkbXNnID0gJ0hhcHB5IHRhZ2dpbmchJzsKCQkJYnJlYWs7 CgkJY2FzZSAnZGVsZXRlZCc6CgkJCXNtZF90YWdzX3ByZWZzX3JlbW92ZSgnJywgMCk7CgkJ CWJyZWFrOwoJfQoJcmV0dXJuICRtc2c7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpmdW5jdGlvbiBzbWRfdGFncygkZXZ0LCAkc3RwKSB7CgkkYXZhaWxhYmxlX3N0ZXBzID0g YXJyYXkoCgkJJ3NtZF90YWdfY2F0bGlzdCcgICAgICAgICAgID0+IHRydWUsCgkJJ3NtZF90 YWdfY3JlYXRlJyAgICAgICAgICAgID0+IHRydWUsCgkJJ3NtZF90YWdfcGFyZW50bGlzdCcg ICAgICAgID0+IHRydWUsCgkJJ3NtZF90YWdfc2F2ZScgICAgICAgICAgICAgID0+IHRydWUs CgkJJ3NtZF90YWdzX2RlbGV0ZScgICAgICAgICAgID0+IHRydWUsCgkJJ3NtZF90YWdzX2lt cG9ydCcgICAgICAgICAgID0+IHRydWUsCgkJJ3NtZF90YWdzX2ltcG9ydF9vbmUnICAgICAg ID0+IHRydWUsCgkJJ3NtZF90YWdzX21hbmFnZScgICAgICAgICAgID0+IGZhbHNlLAoJCSdz bWRfdGFnc19tdWx0aV9zZXRfcGFyZW50JyA9PiB0cnVlLAoJCSdzbWRfdGFnc19tdWx0aV9j YXRsaW5rJyAgICA9PiB0cnVlLAoJCSdzbWRfdGFnc19wcmVmc19zaG93JyAgICAgICA9PiBm YWxzZSwKCQknc21kX3RhZ3NfcHJlZnNfaW5zdGFsbCcgICAgPT4gdHJ1ZSwKCQknc21kX3Rh Z3NfcHJlZnNfcmVtb3ZlJyAgICAgPT4gdHJ1ZSwKCQknc21kX3RhZ3NfcHJlZnNfdXBkYXRl JyAgICAgPT4gdHJ1ZSwKCQknc21kX3RhZ3Nfc3luYycgICAgICAgICAgICAgPT4gZmFsc2Us CgkJJ3NtZF90YWdzX3RhYmxlX2luc3RhbGwnICAgID0+IGZhbHNlLAoJCSdzbWRfdGFnc190 YWJsZV9yZW1vdmUnICAgICA9PiB0cnVlLAoJCSdzbWRfdGFnc190YWJsZV9yZWJ1aWxkJyAg ICA9PiB0cnVlLAoJKTsKCglpZiAoJHN0cCA9PSAnc2F2ZV9wYW5lX3N0YXRlJykgewoJCXNt ZF90YWdzX3NhdmVfcGFuZV9zdGF0ZSgpOwoJfSBlbHNlIGlmICghJHN0cCBvciAhYm91bmNl cigkc3RwLCAkYXZhaWxhYmxlX3N0ZXBzKSkgewoJCSRwcmVmID0gc21kX3RhZ3NfcHJlZl9n ZXQoJ3NtZF90YWdfdF9hc3RhcnQnKTsKCQkkc3RwID0gJ3NtZF90YWdzX3ByZWZzX3Nob3cn OwoKCQlpZiAoJHByZWYpIHsKCQkJc3dpdGNoICgkcHJlZlsnc21kX3RhZ190X2FzdGFydCdd Wyd2YWwnXSkgewoJCQkJY2FzZSAxOgoJCQkJCSRzdHAgPSAnc21kX3RhZ3NfbWFuYWdlJzsK CQkJCQlicmVhazsKCQkJCWNhc2UgMDoKCQkJCWRlZmF1bHQ6CgkJCQkJJHN0cCA9ICdzbWRf dGFnc19wcmVmc19zaG93JzsKCQkJfQoJCX0KCX0KCSRzdHAoKTsKfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF90YWdzX3VzZXJzKCRldnQsICRzdHApIHsK CSRhdmFpbGFibGVfc3RlcHMgPSBhcnJheSgKCQknc21kX3RhZ19jYXRsaXN0JyAgICA9PiB0 cnVlLAoJCSdzbWRfdGFnX3BhcmVudGxpc3QnID0+IHRydWUsCgkJJ3NtZF90YWdfZ2V0X2Rl c2MnICAgPT4gdHJ1ZSwKCSk7CgoJaWYgKCEkc3RwIG9yICFib3VuY2VyKCRzdHAsICRhdmFp bGFibGVfc3RlcHMpKSB7CgkJLy8gRG8gbm90aGluZwoJfSBlbHNlIHsKCQkkc3RwKCk7Cgl9 Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDcmVhdGUgZHJvcGRvd24gYW5k IHBvcHVsYXRlIGl0IHdpdGggdGFncyBvZiB0aGUgcmVsZXZhbnQgdHlwZSwgaGlnaGxpZ2h0 aW5nIGFueSAkc2VsIHRhZ3MKZnVuY3Rpb24gc21kX211bHRpVHJlZVNlbGVjdElucHV0KCRz ZWxlY3RfbmFtZSA9ICcnLCAkdHJlZSA9ICcnLCAkc2VsID0gJycpIHsKCSRwcmVmID0gc21k X3RhZ3NfcHJlZl9nZXQoYXJyYXkoJ3NtZF90YWdfcF9zaXplJywgJ3NtZF90YWdfcF9saXN0 cGFyJyksIDEpOwoJJHJvd3MgPSAkcHJlZlsnc21kX3RhZ19wX3NpemUnXVsndmFsJ107Cgkk aW5jbCA9ICRwcmVmWydzbWRfdGFnX3BfbGlzdHBhciddWyd2YWwnXTsKCgkkb3V0W10gPSAn PHNlbGVjdCBpZD0iJy4kc2VsZWN0X25hbWUuJyIgbmFtZT0iJy4kc2VsZWN0X25hbWUuJ1td IiBjbGFzcz0ibGlzdCIgc2l6ZT0iJy4gJHJvd3MgLiciJyAuKCgkcm93cz09MSkgPyAnJyA6 ICcgbXVsdGlwbGU9Im11bHRpcGxlIicpLiAnPic7Cglmb3JlYWNoICgkdHJlZSBhcyAkbGVh ZikgewoJCWlmICgkbGVhZlsnbmFtZSddID09ICdyb290JykgY29udGludWU7CgoJCSRzZWxl Y3RlZD0nJzsKCQlmb3JlYWNoICgkc2VsIGFzICRnaWQgPT4gJGl0ZW0pIHsKCQkJaWYgKCRs ZWFmWydpZCddID09ICRpdGVtWyd0YWdfaWQnXSkgewoJCQkJJHNlbGVjdGVkID0gJyBzZWxl Y3RlZD0ic2VsZWN0ZWQiJzsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJfQoKCQkkbGVhZlsnbmFt ZSddID0gaHRtbHNwZWNpYWxjaGFycygkbGVhZlsnbmFtZSddKTsKCQkkaW5kZW50ID0gKCRs ZWFmWydsZXZlbCddID4gMCkgPyBzdHJfcmVwZWF0KHNwLnNwLCRsZWFmWydsZXZlbCddKSA6 ICcnOwoJCSRzZWxlY3RhYmxlID0gKCEkaW5jbCAmJiAkbGVhZlsnY2hpbGRyZW4nXSA+IDAp ID8gJyBkaXNhYmxlZD0iZGlzYWJsZWQiJyA6ICcnOwoJCSRvdXRbXSA9IHQuJzxvcHRpb24g dmFsdWU9IicuJGxlYWZbJ2lkJ10uJyInLiRzZWxlY3RlZC4kc2VsZWN0YWJsZS4nPicuJGlu ZGVudC5odG1sc3BlY2lhbGNoYXJzKCRsZWFmWyd0aXRsZSddKS4nPC9vcHRpb24+JzsKCX0K CSRvdXRbXSA9ICc8L3NlbGVjdD4nOwoJcmV0dXJuIGpvaW4oJycsJG91dCk7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDYWxsZWQgd2hlbmV2ZXIgb25lIG9mIHRoZSA0 IG1haW4gdGFicyBhcmUgdXNlZCBvbiB0aGUgYWRtaW4gc2lkZS4gSW5zZXJ0cyB0aGUgaW5w dXQgbWV0aG9kIGlmIHJlcXVpcmVkCmZ1bmN0aW9uIHNtZF90YWdzX2xvYWRsaXN0KCRldnQs ICRzdHApIHsKCWdsb2JhbCAkc21kX3RhZ3Nfc3R5bGVzLCAkYXBwX21vZGUsICRzdGVwOwoK CWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgpKSB7CgkJJGN0cmxzID0gc21kX3RhZ3NfcHJl Zl9nZXQoYXJyYXkoJ3NtZF90YWdfcF9lbmFibGUnLCAnc21kX3RhZ19wX2lucHV0JywgJ3Nt ZF90YWdfcF9zaXplJywgJ3NtZF90YWdfcF9xdGFnJywgJ3NtZF90YWdfcF9xdHBhdGgnLCAn c21kX3RhZ19wX3F0c3R5bCcsICdzbWRfdGFnX3BfbGlua2NhdCcsICdzbWRfdGFnX3RfZGVz Y190b29sdGlwJyksIDEpOwoJCSRvbm9mZiA9IHNtZF90YWdzX3ByZWZfZXhwbG9kZSgkY3Ry bHNbJ3NtZF90YWdfcF9lbmFibGUnXVsndmFsJ10pOwoJCSRpcHR5cCA9ICRjdHJsc1snc21k X3RhZ19wX2lucHV0J11bJ3ZhbCddOwoJCSRzZWxzeiA9ICRjdHJsc1snc21kX3RhZ19wX3Np emUnXVsndmFsJ107CgkJJHF1aWNrID0gJGN0cmxzWydzbWRfdGFnX3BfcXRhZyddWyd2YWwn XTsKCQkkanNkaXIgPSAkY3RybHNbJ3NtZF90YWdfcF9xdHBhdGgnXVsndmFsJ107CgkJJGNz ZGlyID0gJGN0cmxzWydzbWRfdGFnX3BfcXRzdHlsJ11bJ3ZhbCddOwoJCSRjbGluayA9ICRj dHJsc1snc21kX3RhZ19wX2xpbmtjYXQnXVsndmFsJ107CgkJJHRvb2x0ID0gJGN0cmxzWydz bWRfdGFnX3RfZGVzY190b29sdGlwJ11bJ3ZhbCddOwoJCSRqc3RhaWwgPSAoJGpzZGlyKSA/ ICcvJyA6ICcnOwoJCSRjc3RhaWwgPSAoJGNzZGlyKSA/ICcvJyA6ICcnOwoJCSRhZGRJdCA9 IGZhbHNlOwoKCQkkaXRlbUlEID0gc21kX2dldElEKCk7CgkJJGVkdEJ0biA9IGhhc19wcml2 cygnc21kX3RhZ3MnKSA/ICcgWycuZUxpbmsoJ3NtZF90YWdzJywgJ3NtZF90YWdzX21hbmFn ZScsICdzbWRfdGFnX3R5cGUnLCAkZXZ0LCBnVHh0KCdlZGl0JykpLiddICcgOiAnJzsKCQkk dGFndG9wID0gZ1R4dCgnc21kX3RhZ190aXRsZScpLiRlZHRCdG47CgkJJHNlbGlzdCA9ICc8 c3BhbiBpZD0ic21kX3RhZ3MiIG5hbWU9InNtZF90YWdzX2J5bGlzdCIgY2xhc3M9InNtZF90 YWdpcCI+PC9zcGFuPic7CgkJJHNlbGhpZCA9ICc8c3BhbiBpZD0ic21kX3RhZ3MiIG5hbWU9 InNtZF90YWdzX2J5bGlzdCIgY2xhc3M9InNtZF9oaWRkZW4iPjwvc3Bhbj4nOwoJCSR0b29s dGlwID0gKCR0b29sdCkgPyAnPHNwYW4gaWQ9InNtZF90YWdfdHQiIGNsYXNzPSJzbWRfdG9v bHRpcCBzbWRfaGlkZGVuIj48L3NwYW4+JyA6ICcnOwoJCSR3aWRnZXQgPSAnJzsKCgkJc3dp dGNoICgkaXB0eXApIHsKCQkJY2FzZSAwOgoJCQkJJGlwbWV0aCA9ICRzZWxpc3Q7CgkJCQli cmVhazsKCQkJY2FzZSAxOgoJCQkJJGlwbWV0aCA9ICc8c3BhbiBuYW1lPSJzbWRfdGFnc19i eWxpbmsiIGlkPSJzbWRfdGFnc19ieWxpbmsiIGNsYXNzPSJzbWRfdGFnaXAiPjwvc3Bhbj4n LiRzZWxoaWQ7CgkJCQlicmVhazsKCQkJY2FzZSAyOgoJCQljYXNlIDM6CgkJCQkkaXBtZXRo ID0gJzx0ZXh0YXJlYSBuYW1lPSJzbWRfdGFnc19ieXRleHQiIHJvd3M9IicuJHNlbHN6Lici IGNsYXNzPSJzbWRfdGFnaXAiPjwvdGV4dGFyZWE+Jy4kc2VsaGlkOwoJCQkJYnJlYWs7CgkJ fQoKCQlzd2l0Y2ggKCRldnQpIHsKCQkJY2FzZSAiYXJ0aWNsZSI6CgkJCQkkYWRkSXQgPSAo JG9ub2ZmW2dUeHQoJ3RhYl9saXN0JyldID09IDEpID8gdHJ1ZSA6IGZhbHNlOwoJCQkJaWYg KCRhZGRJdCkgewoJCQkJCWV4dHJhY3QoZ3BzYShhcnJheSgndmlldycsJ2Zyb21fdmlldycp KSk7CgkJCQkJJHZpZXcgPSAoJHZpZXcpID8gJHZpZXcgOiAidGV4dCI7CgkJCQkJJGdyYWJj YXRzID0gJ2pRdWVyeSgiI2NhdGVnb3J5LTEgb3B0aW9uOnNlbGVjdGVkLCAjY2F0ZWdvcnkt MiBvcHRpb246c2VsZWN0ZWQiKSc7CgkJCQkJJGpzRWxlbSA9ICdqUXVlcnkoIi5jYXRlZ29y eS0yIikucGFyZW50KCknOwoJCQkJCSR0cmlnZ2VyID0gJ2pRdWVyeSgiI2NhdGVnb3J5LTEs ICNjYXRlZ29yeS0yIiknOwoJCQkJCWlmICgkdmlldyAhPSAndGV4dCcpIHsKCQkJCQkJJHdp ZGdldCA9ICcnOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR3aWRnZXQgPSBlc2NhcGVfanMoJzxk aXY+Jy4kdGFndG9wLic8L2Rpdj4nIC4gJGlwbWV0aCk7CgkJCQkJfQoJCQkJfQoJCQkJYnJl YWs7CgkJCWNhc2UgImltYWdlIjoKCQkJCWlmICgkc3RlcCA9PSAiaW1hZ2VfZWRpdCIpIHsK CQkJCQkkYWRkSXQgPSAoJG9ub2ZmW2dUeHQoJ3RhYl9pbWFnZScpXSA9PSAxKSA/IHRydWUg OiBmYWxzZTsKCQkJCQlpZiAoJGFkZEl0KSB7CgkJCQkJCSRncmFiY2F0cyA9ICdqUXVlcnko IiNpbWFnZV9jYXRlZ29yeSBvcHRpb246c2VsZWN0ZWQiKSc7CgkJCQkJCSRqc0VsZW0gPSAn alF1ZXJ5KCIuZWRpdC1pbWFnZS1jYXRlZ29yeSIpJzsKCQkJCQkJJHRyaWdnZXIgPSAnalF1 ZXJ5KCIjaW1hZ2VfY2F0ZWdvcnkiKSc7CgkJCQkJCSR3aWRnZXQgPSBlc2NhcGVfanMoaW5w dXRMYWJlbCgnc21kX3RhZ3MnLCAkaXBtZXRoLCAkdGFndG9wKSk7CgkJCQkJfQoJCQkJfQoJ CQkJYnJlYWs7CgkJCWNhc2UgImZpbGUiOgoJCQkJaWYgKCRzdGVwID09ICJmaWxlX2VkaXQi KSB7CgkJCQkJJGFkZEl0ID0gKCRvbm9mZltnVHh0KCd0YWJfZmlsZScpXSA9PSAxKSA/IHRy dWUgOiBmYWxzZTsKCQkJCQlpZiAoJGFkZEl0KSB7CgkJCQkJCSRncmFiY2F0cyA9ICdqUXVl cnkoIiNmaWxlX2NhdGVnb3J5IG9wdGlvbjpzZWxlY3RlZCIpJzsKCQkJCQkJJGpzRWxlbSA9 ICdqUXVlcnkoIi5lZGl0LWZpbGUtY2F0ZWdvcnkiKSc7CgkJCQkJCSR0cmlnZ2VyID0gJ2pR dWVyeSgiI2ZpbGVfY2F0ZWdvcnkiKSc7CgkJCQkJCSR3aWRnZXQgPSBlc2NhcGVfanMoaW5w dXRMYWJlbCgnc21kX3RhZ3MnLCAkaXBtZXRoLCAkdGFndG9wKSk7CgkJCQkJfQoJCQkJfQoJ CQkJYnJlYWs7CgkJCWNhc2UgImxpbmsiOgoJCQkJaWYgKCRzdGVwID09ICJsaW5rX2VkaXQi KSB7CgkJCQkJJGFkZEl0ID0gKCRvbm9mZltnVHh0KCd0YWJfbGluaycpXSA9PSAxKSA/IHRy dWUgOiBmYWxzZTsKCQkJCQlpZiAoJGFkZEl0KSB7CgkJCQkJCSRncmFiY2F0cyA9ICdqUXVl cnkoIiNsaW5rX2NhdGVnb3J5IG9wdGlvbjpzZWxlY3RlZCIpJzsKCQkJCQkJJGpzRWxlbSA9 ICdqUXVlcnkoIi5lZGl0LWxpbmstY2F0ZWdvcnkiKSc7CgkJCQkJCSR0cmlnZ2VyID0gJ2pR dWVyeSgiI2xpbmtfY2F0ZWdvcnkiKSc7CgkJCQkJCSR3aWRnZXQgPSBlc2NhcGVfanMoaW5w dXRMYWJlbCgnc21kX3RhZ3MnLCAkaXBtZXRoLCAkdGFndG9wKSk7CgkJCQkJfQoJCQkJfQoJ CQkJYnJlYWs7CgkJfQoKCQkvLyBEb24ndCByZS1zZXJ2ZSB0aGUgY3NzK2phdmFzY3JpcHQg aWYgdGhpcyBpcyBhbiBBSkFYIHNhdmUKCQlpZiAoJGFwcF9tb2RlID09ICdhc3luYycpIHsK CQkJJGFkZEl0ID0gZmFsc2U7CgkJfQoKCQkvLyBBZGQgdGhlIGRyb3Bkb3duIGFuZCBqcyB0 b2dnbGUvY2xlYXIgb3B0aW9ucyBpZiByZXF1aXJlZAoJCWlmICgkYWRkSXQpIHsKCQkJJHFz ID0gYXJyYXkoCgkJCQkiZXZlbnQiID0+ICJzbWRfdGFnc191c2VycyIsCgkJCSk7CgoJCQkk cXNWYXJzID0gImluZGV4LnBocCIuam9pbl9xcygkcXMpOwoKCQkJaWYgKCRxdWljayA+IDAp IHsKCQkJCWVjaG8gPDw8RU9KUwo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj PSJ7JGpzZGlyfXskanN0YWlsfWpxdWVyeS5hdXRvY29tcGxldGUucGFjay5qcyI+PC9zY3Jp cHQ+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InskY3Nk aXJ9eyRjc3RhaWx9anF1ZXJ5LmF1dG9jb21wbGV0ZS5jc3MiPjwvc2NyaXB0PgpFT0pTOwoJ CQl9CgoJCQkvLyBJbmplY3Qgc3R5bGVzCgkJCWVjaG8gJzxzdHlsZSB0eXBlPSJ0ZXh0L2Nz cyI+Jy4gJHNtZF90YWdzX3N0eWxlc1snbGlzdF9wYWdlcyddLiAnPC9zdHlsZT4nOwoKCQkJ ZWNobyBzY3JpcHRfanMoPDw8RU9KUwpqUXVlcnkoZnVuY3Rpb24oKSB7Cgl7JGpzRWxlbX0u YWZ0ZXIoJ3skd2lkZ2V0fXskdG9vbHRpcH0nKTsKCglmdW5jdGlvbiBzbWRfdGFnTGlzdCh0 eXApIHsKCQl2YXIgZ3JhYmNhdHMgPSBbXTsKCQl7JGdyYWJjYXRzfS5lYWNoKGZ1bmN0aW9u KCkgewoJCQlpZiAoalF1ZXJ5KHRoaXMpLnZhbCgpICE9ICcnKSB7CgkJCSAgIGdyYWJjYXRz LnB1c2goalF1ZXJ5KHRoaXMpLnZhbCgpKTsKCQkJfQoJCX0pOwoJCWdyYWJjYXRzID0gZ3Jh YmNhdHMuam9pbigiLCIpOwoJCXZhciBzbWRfbGlua19tb2RlID0gKCgneyRjbGlua30nPT0n MCcpID8gJzInIDogKChncmFiY2F0cz09JycpID8gMSA6ICcnKSk7CgoJCWpRdWVyeS5wb3N0 KCd7JHFzVmFyc30nLCB7IHN0ZXA6ICJzbWRfdGFnX3BhcmVudGxpc3QiLCBuYW1lOiAnc21k X3RhZ19wYXJlbnQnLCB0eXBlOiB0eXAsIGNhdDogZ3JhYmNhdHMsIGxpbmtfbW9kZTogc21k X2xpbmtfbW9kZSwgaXRlbWlkOiAieyRpdGVtSUR9IiwgX3R4cF90b2tlbjogdGV4dHBhdHRl cm4uX3R4cF90b2tlbiB9LAoJCQlmdW5jdGlvbihkYXRhKSB7CgkJCQlqUXVlcnkoIiNzbWRf dGFncyIpLmh0bWwoZGF0YSk7CgkJCQlqUXVlcnkoIiNzbWRfdGFnc19ieWxpbmsiKS5lbXB0 eSgpOwoJCQkJdmFyIHNtZF90YWdwb29sID0gW107CgkJCQl2YXIgc21kX3RhZ3NlbCA9IFtd OwoJCQkJdmFyIHNtZF90YWdsaW5rcyA9IFtdOwoJCQkJalF1ZXJ5KCcjc21kX3RhZ3Mgc2Vs ZWN0IG9wdGlvbicpLmVhY2goZnVuY3Rpb24oKSB7CgkJCQkJdmFyIGN1cnIgPSBqUXVlcnko dGhpcyk7CgkJCQkJdmFyIHR4dCA9IGpRdWVyeS50cmltKGN1cnIudGV4dCgpKTsKCQkJCQlz bWRfdGFncG9vbC5wdXNoKHR4dCk7CgoJCQkJCWlmIChqUXVlcnkoIiNzbWRfdGFnc19ieWxp bmsiKS50ZXh0KCkgIT0gIiIpIHsKCQkJCQkJalF1ZXJ5KCIjc21kX3RhZ3NfYnlsaW5rIiku YXBwZW5kKCIgJm1pZGRvdDsgIik7CgkJCQkJfQoKCQkJCQlpZiAoY3Vyci5wcm9wKCJzZWxl Y3RlZCIpID09IHRydWUpIHsKCQkJCQkJc21kX3RhZ3NlbC5wdXNoKHR4dCk7CgkJCQkJCWpR dWVyeSgiI3NtZF90YWdzX2J5bGluayIpLmFwcGVuZCgnPHNwYW4gY2xhc3M9InNtZF9zZWwi PicrdHh0Kyc8L3NwYW4+Jyk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJalF1ZXJ5KCIjc21kX3Rh Z3NfYnlsaW5rIikuYXBwZW5kKCc8c3Bhbj4nK3R4dCsnPC9zcGFuPicpOwoJCQkJCX0KCQkJ CX0pOwoKCQkJCWpRdWVyeSgiI3NtZF90YWdzX2J5bGluayBzcGFuIikuY2xpY2soZnVuY3Rp b24oKSB7CgkJCQkJalF1ZXJ5KHRoaXMpLnRvZ2dsZUNsYXNzKCJzbWRfc2VsIik7CgkJCQkJ dmFyIGx0eHQgPSBqUXVlcnkodGhpcykudGV4dCgpOwoJCQkJCWpRdWVyeSgiI3NtZF90YWdz IHNlbGVjdCBvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJCQl2YXIgY3VyciA9IGpR dWVyeSh0aGlzKTsKCQkJCQkJaWYgKGpRdWVyeS50cmltKGN1cnIudGV4dCgpKSA9PSBsdHh0 KSB7CgkJCQkJCQl0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7CgkJCQkJCX0KCQkJ CQl9KTsKCQkJCX0pOwoKCQkJCWpRdWVyeSgidGV4dGFyZWFbbmFtZT0nc21kX3RhZ3NfYnl0 ZXh0J10iKS52YWwoc21kX3RhZ3NlbC5qb2luKCIsICIpKTsKCgkJCQlpZiAoeyRxdWlja30g PiAwKSB7CgkJCQkJalF1ZXJ5KCJ0ZXh0YXJlYVtuYW1lPSdzbWRfdGFnc19ieXRleHQnXSIp LmF1dG9jb21wbGV0ZShzbWRfdGFncG9vbCwgewoJCQkJCQltdWx0aXBsZTogdHJ1ZSwKCQkJ CQkJbXVzdE1hdGNoOiAoKCRxdWljaz09Mik/dHJ1ZTpmYWxzZSksCgkJCQkJCWF1dG9GaWxs OiB0cnVlCgkJCQkJfSk7CgkJCQl9CgkJCQlqUXVlcnkoInRleHRhcmVhW25hbWU9J3NtZF90 YWdzX2J5dGV4dCddIikua2V5dXAoZnVuY3Rpb24oKSB7CgkJCQkJc21kX3RhZ3NSZXN5bmNT ZWxlY3QoeyRxdWlja30pOwoJCQkJfSk7CgkJCQlqUXVlcnkoJyNzbWRfY2xyJykuY2xpY2so ZnVuY3Rpb24oKSB7CgkJCQkJalF1ZXJ5KCcjc21kX3RhZ3Mgc2VsZWN0IG9wdGlvbicpLnBy b3AoInNlbGVjdGVkIiwgIiIpOwoJCQkJfSk7CgkJCQlqUXVlcnkoJyNzbWRfdG9nJykuY2xp Y2soZnVuY3Rpb24oKSB7CgkJCQkJalF1ZXJ5KCcjc21kX3RhZ3Mgc2VsZWN0IG9wdGlvbicp LmVhY2goZnVuY3Rpb24oKSB7CgkJCQkJCXRoaXMuc2VsZWN0ZWQgPSAhdGhpcy5zZWxlY3Rl ZDsKCQkJCQl9KTsKCQkJCX0pOwoKCQkJCS8vIFRvb2x0aXBzCgkJCQlpZiAoJ3skdG9vbHR9 JyA9PSAnMScpIHsKCQkJCQlqUXVlcnkoJyNzbWRfdGFncyBzZWxlY3QsICNzbWRfdGFnc19i eWxpbmsnKS5ob3ZlciggZnVuY3Rpb24oZXYpIHsKCQkJCQkJLy8gRG8gbm90aGluZwoJICAg ICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CgkJCQkJCS8vIEhpZGUgdG9vbHRpcCB3aGVuIGV4 aXRpbmcgdGhlIGVudGlyZSB0YWcgYXJlYQoJCQkJCQlqUXVlcnkoJy5zbWRfdG9vbHRpcCcp LmhpZGUoJ2Zhc3QnKTsKCQkJCQl9KTsKCQkJCQlqUXVlcnkoJyNzbWRfdGFncyBzZWxlY3Qg b3B0aW9uLCAjc21kX3RhZ3NfYnlsaW5rIHNwYW4nKS5ob3ZlciggZnVuY3Rpb24oZXYpIHsK CQkJCQkJdmFyIHRoaXNUYWcgPSBqUXVlcnkodGhpcykudmFsKCk7CgkJCQkJCWlmICghdGhp c1RhZykgewoJCQkJCQkJdGhpc1RhZyA9IGpRdWVyeSh0aGlzKS5odG1sKCk7CgkJCQkJCX0K CQkJCQkJaWYgKGpRdWVyeSgnI3NtZF90YWdfdHQnKS5kYXRhKHRoaXNUYWcpKSB7CgkJCQkJ CQlzbWRfdGFnc19zaG93X2Rlc2MoZXYsIGpRdWVyeSgnI3NtZF90YWdfdHQnKS5kYXRhKHRo aXNUYWcpKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWpRdWVyeS5wb3N0KCd7JHFzVmFyc30n LAoJCQkJCQkJewoJCQkJCQkJCXN0ZXA6ICJzbWRfdGFnX2dldF9kZXNjIiwKCQkJCQkJCQl0 YWdfcmVmOiB0aGlzVGFnLAoJCQkJCQkJCV90eHBfdG9rZW46IHRleHRwYXR0ZXJuLl90eHBf dG9rZW4KCQkJCQkJCX0sCgkJCQkJCQlmdW5jdGlvbihkYXRhKSB7CgkJCQkJCQkJalF1ZXJ5 KCcjc21kX3RhZ190dCcpLmRhdGEodGhpc1RhZywgZGF0YSk7CgkJCQkJCQkJc21kX3RhZ3Nf c2hvd19kZXNjKGV2LCBqUXVlcnkoJyNzbWRfdGFnX3R0JykuZGF0YSh0aGlzVGFnKSk7CgkJ CQkJCQl9KTsKCQkJCQkJfQoJCQkJCX0pOwoJCQkJfQoJCQl9CgkJKTsKCX0KCglmdW5jdGlv biBzbWRfdGFnc19zaG93X2Rlc2MoZXYsIGNvbnRlbnQpIHsKCQlqUXVlcnkoJyNzbWRfdGFn X3R0JykuaGlkZSgpLmVtcHR5KCkuYXBwZW5kKGNvbnRlbnQpLnNob3coKTsKCQlqUXVlcnko Jy5zbWRfdG9vbHRpcCcpLmNzcygnbGVmdCcsIGV2LnBhZ2VYIC0gNjApLmNzcygndG9wJywg ZXYucGFnZVkgKyAxNSkuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7Cgl9CgoJc21kX3RhZ0xp c3QoJ3skZXZ0fScpOwoJaWYgKCd7JGNsaW5rfSc9PScxJykgewoJCXskdHJpZ2dlcn0uY2hh bmdlKGZ1bmN0aW9uKCkgewoJCQlzbWRfdGFnTGlzdCgneyRldnR9Jyk7CgkJfSk7Cgl9CgoJ ZnVuY3Rpb24gc21kX3RhZ3NSZXN5bmNTZWxlY3QobHZsKSB7CgkJdmFyIHRiVGFncyA9IGpR dWVyeSgidGV4dGFyZWFbbmFtZT0nc21kX3RhZ3NfYnl0ZXh0J10iKS52YWwoKS5zcGxpdCgv LFxzKz8vKTsKCQlqUXVlcnkoIiNzbWRfdGFncyBzZWxlY3Qgb3B0aW9uIikuZWFjaChmdW5j dGlvbigpIHsKCQkJdmFyIGN1cnIgPSBqUXVlcnkodGhpcyk7CgkJCWlmKGpRdWVyeS5pbkFy cmF5KGpRdWVyeS50cmltKGN1cnIudGV4dCgpKSwgdGJUYWdzKSA9PSAtMSkgewoJCQkJY3Vy ci5wcm9wKCJzZWxlY3RlZCIsICIiKTsKCQkJfSBlbHNlIHsKCQkJCWN1cnIucHJvcCgic2Vs ZWN0ZWQiLCB0cnVlKTsKCQkJfQoJCX0pOwoJfQp9KTsKRU9KUwoJCQkpOwoJCX0KCX0KfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFVwZGF0ZSB0aGUgdGFncyB1c2VkIHRh YmxlIGlmIHNvbWUgdGFncyBoYXZlIGJlZW4gYWRkZWQvc2F2ZWQKZnVuY3Rpb24gc21kX3Rh Z3Nfc2F2ZWxpc3QoJGV2dCwgJHN0cCkgewoJaWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KCkp IHsKCQkkY3RybHMgPSBzbWRfdGFnc19wcmVmX2dldChhcnJheSgnc21kX3RhZ19wX3F0YWcn LCAnc21kX3RhZ19wX2lucHV0JywgJ3NtZF90YWdfcF9saW5rY2F0JywgJ3NtZF90YWdfcF9t YXN0ZXInKSwgMSk7CgkJJHF1aWNrID0gJGN0cmxzWydzbWRfdGFnX3BfcXRhZyddWyd2YWwn XTsKCQkkaXB0eXAgPSAkY3RybHNbJ3NtZF90YWdfcF9pbnB1dCddWyd2YWwnXTsKCQkkY2xp bmsgPSAkY3RybHNbJ3NtZF90YWdfcF9saW5rY2F0J11bJ3ZhbCddOwoJCSRnb2QgPSAkY3Ry bHNbJ3NtZF90YWdfcF9tYXN0ZXInXVsndmFsJ107CgkJJGdvZF9jbGF1c2UgPSAoJGdvZCA9 PSAnJykgPyAnJyA6ICIgQU5EIHBhcmVudCA9ICciIC4gZG9TbGFzaCgkZ29kKSAuICInIjsK CgkJJGl0ZW1JRCA9IHNtZF9nZXRJRCgpOwoKCQlpZiAoJGl0ZW1JRCkgewoJCQkvLyBDYW4n dCB1c2UgdGhlICdlZGl0JyBzdGVwIGJlY2F1c2Ugb3RoZXJ3aXNlIHNhdmUgdHJpZ2dlcnMg b24gYXJ0aWNsZSBwYWdlIGxvYWQ7CgkJCS8vIGhlbmNlLCB0aGUgJ3NhdmUnIGJ1dHRvbiBz dGF0ZSBpcyB1c2VkIGluc3RlYWQuIEFsc28sIG9uIGFydGljbGUgY3JlYXRpb24sIHRoZSBn bG9iYWwKCQkJLy8gc3RlcCBpcyBzZXQgdG8gJ2VkaXQnIGJ5IHRoZSB0aW1lIHRoZSBwbHVn aW4gaXMgaGl0LCBzbyB3ZSBoYWNrIHRoZSBzdGVwIGlmIHRoZSAncHVibGlzaCcKCQkJLy8g YnV0dG9uIHdhcyBoaXQKCQkJJHN0cCA9IChwcygncHVibGlzaCcpKSA/ICdwdWJsaXNoJyA6 ICRzdHA7CgkJCSRzYXZlU3RlcHMgPSBhcnJheSgnY3JlYXRlJywgJ3B1Ymxpc2gnLCAnaW1h Z2Vfc2F2ZScsICdmaWxlX3NhdmUnLCAnbGlua19zYXZlJywgJ2xpbmtfcG9zdCcpOwoJCQlp ZiAocHMoJ3NhdmUnKSB8fCBpbl9hcnJheSgkc3RwLCAkc2F2ZVN0ZXBzKSkgewoJCQkJc2Fm ZV9kZWxldGUoU01EX1RBR1UsICdpdGVtX2lkPSInLiRpdGVtSUQuJyIgQU5EIHR5cGU9Iicu JGV2dC4nIicpOwoKCQkJCSR0YWdzID0gcHMoJ3NtZF90YWdfcGFyZW50JykgPyBwcygnc21k X3RhZ19wYXJlbnQnKSA6IGFycmF5KCk7CgoJCQkJJGFsbG93ZWRUYWdzID0gYXJyYXkoKTsK CQkJCWlmICgkZ29kX2NsYXVzZSkgewoJCQkJCSRhbGxvd2VkVGFncyA9IHNhZmVfY29sdW1u KCdpZCcsIFNNRF9UQUcsICJ0eXBlPSckZXZ0JyIgLiAkZ29kX2NsYXVzZSk7CgkJCQl9CgoJ CQkJLy8gVmFsaWRhdGUgdGhlIGluY29taW5nIHRhZ3MgdG8gdGhvc2UgaW4gdGhlIGN1cnJl bnRseSBzZWxlY3RlZCBjYXRlZ29yeXxpZXMKCQkJCWlmICgkY2xpbmspIHsKCQkJCQkkdXNl ZENhdHMgPSAoJGV2dD09ImFydGljbGUiKSA/IGFycmF5KGdwcygnQ2F0ZWdvcnkxJyksIGdw cygnQ2F0ZWdvcnkyJykpIDogYXJyYXkoZ3BzKCdjYXRlZ29yeScpKTsKCQkJCQkkY2F0aWRz ID0gc2FmZV9jb2x1bW4oJ2lkJywgJ3R4cF9jYXRlZ29yeScsICJuYW1lIElOICgiIC5qb2lu KCcsJywgcXVvdGVfbGlzdCgkdXNlZENhdHMpKS4gIikgQU5EIHR5cGU9JyRldnQnIik7CgkJ CQkJJHZhbGlkVGFncyA9ICgkY2F0aWRzKSA/IHNhZmVfY29sdW1uKCd0YWdfaWQnLCBTTURf VEFHQywgImNhdF9pZCBJTiAoIiAuam9pbignLCcsIHF1b3RlX2xpc3QoJGNhdGlkcykpLiAi KSIpIDogYXJyYXkoKTsKCQkJCQlmb3JlYWNoICgkdmFsaWRUYWdzIGFzICR2YWxpZFRhZykg ewoJCQkJCQkkcm93cyA9IHNtZF90YWdfdHJlZShzYWZlX2ZpZWxkKCduYW1lJyxTTURfVEFH LCJpZD0nIi5kb1NsYXNoKCR2YWxpZFRhZykuIiciKSwgJGV2dCwgJzE9MScsIFNNRF9UQUcp OwoJCQkJCQlmb3JlYWNoICgkcm93cyBhcyAkcm93KSB7CgkJCQkJCQkkYWxsb3dlZFRhZ3Nb XSA9ICRyb3dbJ2lkJ107CgkJCQkJCX0KCQkJCQl9CgkJCQkJJHRhZ3MgPSBhcnJheV9pbnRl cnNlY3QoYXJyYXlfdW5pcXVlKCRhbGxvd2VkVGFncyksICR0YWdzKTsKCQkJCX0KCgkJCQkk dmFscyA9IGFycmF5KCk7CgkJCQlmb3JlYWNoKCR0YWdzIGFzICR2YWwpewoJCQkJCXNhZmVf aW5zZXJ0KFNNRF9UQUdVLCAndGFnX2lkID0gIicuJHZhbC4nIiwgaXRlbV9pZD0iJy4kaXRl bUlELiciLCB0eXBlPSInLiRldnQuJyInKTsKCQkJCQkkdmFsc1tdID0gJHZhbDsKCQkJCX0K CQkJCSR0YWdzVGV4dCA9IHByZWdfc3BsaXQoIi8sXHMrPy8iLCBwcygnc21kX3RhZ3NfYnl0 ZXh0JykpOwoKCQkJCS8vIElmIHdlJ3JlIGluIG5vbi1TVFJJQ1QgbW9kZSBhbmQgdGhlcmUg YXJlIGFueSB0eXBlZCB0YWdzIHRoYXQgYXJlIG5vdCBpbiB0aGUgc2VsZWN0IGxpc3QsIGNo ZWNrIHRoZXkgZXhpc3QgYW5kIG1ha2UgbGlua3MgdG8gdGhlbQoJCQkJaWYgKCRxdWljayA8 IDIpIHsKCQkJCQkkYWRkZWQgPSAoJHZhbHMpID8gc2FmZV9jb2x1bW4oInRpdGxlIiwgU01E X1RBRywgImlkIElOICgnIi5qb2luKCInLCciLCR2YWxzKS4iJykgQU5EIHR5cGU9JyRldnQn IikgOiBhcnJheSgpOwoJCQkJCSR0YWdzVGV4dCA9IGFycmF5X2RpZmYoJHRhZ3NUZXh0LCAk YWRkZWQpOwoKCQkJCQkvLyBPbmx5IGxvb3Agb3ZlciB0YWdzIHRoYXQgZG9uJ3QgYXBwZWFy IHRvIGJlIGFscmVhZHkgZGVmaW5lZAoJCQkJCWZvcmVhY2goJHRhZ3NUZXh0IGFzICR0YWcp IHsKCQkJCQkJaWYgKCR0YWcgPT0gIiIpIGNvbnRpbnVlOwoJCQkJCQkkZXhpc3RzID0gc2Fm ZV9maWVsZCgnaWQnLCBTTURfVEFHLCAibmFtZSA9ICckdGFnJyBBTkQgdHlwZSA9ICckZXZ0 JyIpOyAvLyAxc3QgY2hlY2sKCgkJCQkJCS8vIFRleHRhcmVhKyBpbnB1dCBzeXN0ZW0gY2Fu IGFkZCAobGlua2VkKSB0YWdzIHdpdGggaW1wdW5pdHkKCQkJCQkJaWYgKCRpcHR5cCA9PSAz ICYmICEkZXhpc3RzKSB7CgkJCQkJCQkkdGFnQml0cyA9IGV4cGxvZGUoJy0tPicsICR0YWcp OwoJCQkJCQkJaWYgKGNvdW50KCR0YWdCaXRzKSA9PSAyKSB7CgkJCQkJCQkJJHRhZ3BhcmVu dCA9IHN0cnRvbG93ZXIoc2FuaXRpemVGb3JVcmwoJHRhZ0JpdHNbMF0pKTsKCQkJCQkJCQkk dGFncGFyZW50ID0gc2FmZV9maWVsZCgnbmFtZScsIFNNRF9UQUcsICJuYW1lID0gJyR0YWdw YXJlbnQnIEFORCB0eXBlID0gJyRldnQnIik7IC8vIENoZWNrIHBhcmVudCBleGlzdHMgZm9y IHRoaXMgdHlwZQoJCQkJCQkJCSR0YWdwYXJlbnQgPSAoJHRhZ3BhcmVudCA9PT0gZmFsc2Up ID8gJ3Jvb3QnIDogJHRhZ3BhcmVudDsKCQkJCQkJCQkkdGFnY2hpbGQgPSAkdGFnQml0c1sx XTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJHRhZ3BhcmVudCA9ICdyb290JzsKCQkJCQkJ CQkkdGFnY2hpbGQgPSAkdGFnQml0c1swXTsKCQkJCQkJCX0KCQkJCQkJCSRzYW5pdGFnID0g c3RydG9sb3dlcihzYW5pdGl6ZUZvclVybCgkdGFnY2hpbGQpKTsKCQkJCQkJCSRhbHJlYWR5 ID0gc2FmZV9maWVsZCgnaWQnLCBTTURfVEFHLCAibmFtZSA9ICckc2FuaXRhZycgQU5EIHR5 cGUgPSAnJGV2dCciKTsgLy8gQ2hlY2sgYWdhaW4gYmVjYXVzZSBwYXJlbnQtLT5jaGlsZCB3 aWxsIGZhaWwgMXN0IGNoZWNrCgkJCQkJCQlpZiAoJGFscmVhZHkgPT09IGZhbHNlKSB7CgkJ CQkJCQkJJGV4aXN0cyA9IHNhZmVfaW5zZXJ0KFNNRF9UQUcsICJuYW1lPSciLiRzYW5pdGFn LiInLCB0aXRsZT0nJHRhZ2NoaWxkJywgcGFyZW50PSckdGFncGFyZW50JywgdHlwZT0nJGV2 dCciKTsKCQkJCQkJCX0KCQkJCQkJCSRjYXRmaWVsZCA9ICgkZXZ0PT0iYXJ0aWNsZSIpID8g Z3BzKCdDYXRlZ29yeTEnKSA6IGdwcygnY2F0ZWdvcnknKTsKCQkJCQkJCWlmICgkY2xpbmsg JiYgJGNhdGZpZWxkICYmICRleGlzdHMpIHsKCQkJCQkJCQkvLyBBc3NpZ24gbmV3IHRhZyB0 byBjdXJyZW50IGNhdGVnb3J5IChjYXQxIGZvciBhcnRpY2xlcykKCQkJCQkJCQkkY2F0aWQg PSBzYWZlX2luc2VydChTTURfVEFHQywidGFnX2lkPSckZXhpc3RzJywgY2F0X2lkPShTRUxF Q1QgaWQgRlJPTSAiLlBGWC4idHhwX2NhdGVnb3J5IFdIRVJFIG5hbWU9JyRjYXRmaWVsZCcg QU5EIHR5cGU9JyRldnQnKSIpOwoJCQkJCQkJfQoJCQkJCQkJcmVidWlsZF90cmVlX2Z1bGwo JGV2dCwgU01EX1RBRyk7CgkJCQkJCX0KCQkJCQkJaWYgKCRleGlzdHMpIHsKCQkJCQkJCXNh ZmVfaW5zZXJ0KFNNRF9UQUdVLCAndGFnX2lkID0gIicuJGV4aXN0cy4nIiwgaXRlbV9pZD0i Jy4kaXRlbUlELiciLCB0eXBlPSInLiRldnQuJyInKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0K CQkJfQoJCX0KCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEhhbmRsZSBj aGFuZ2VzIHRvIHRoZSB0YWdzIHRhYmxlIGR1cmluZyBtdWx0aS1pdGVtIGVkaXRzCmZ1bmN0 aW9uIHNtZF90YWdzX211bHRpX2VkaXQoJGV2dCwgJHN0cCkgewoJLy8gSW4gVHhwIDQuMC42 IHRoZSBvbmx5IHRhYnMgdG8gYWxsb3cgbXVsdGktZWRpdHMgYXJlIHRoZSBBcnRpY2xlIChs aXN0KSBhbmQgTGluayB0YWJzLiBDaGVhdCBmb3Igbm93CglpZiAoc21kX3RhZ3NfdGFibGVf ZXhpc3QoKSkgewoJCXN3aXRjaCAoJGV2dCkgewoJCQljYXNlICJsaXN0IjoKCQkJY2FzZSAi bGluayI6CgkJCQkkbWV0aG9kID0gcHMoJ2VkaXRfbWV0aG9kJyk7CgkJCQkkc2VsZWN0ZWQg PSBwcygnc2VsZWN0ZWQnKTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJJG1ldGhvZCA9 ICJkZWxldGUiOwoJCQkJJHNlbGVjdGVkID0gYXJyYXkocHMoJ2lkJykpOwoJCQkJYnJlYWs7 CgkJfQoKCQkvLyAnbGlzdCcgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBlcXVhdGVzIHRvIGFy dGljbGVzCgkJJHR5cGUgPSAoJGV2dCA9PSAibGlzdCIpID8gImFydGljbGUiIDogJGV2dDsK CgkJaWYgKCRzZWxlY3RlZCkgewoJCQlzd2l0Y2ggKCRtZXRob2QpIHsKCQkJCWNhc2UgImRl bGV0ZSI6CgkJCQkJJGlkcyA9IGFycmF5KCk7CgkJCQkJZm9yZWFjaCAoJHNlbGVjdGVkIGFz ICRpZCkgewoJCQkJCQkkaWQgPSBhc3NlcnRfaW50KCRpZCk7CgkJCQkJCWlmIChzYWZlX2Rl bGV0ZShTTURfVEFHVSwgJ2l0ZW1faWQgPSAnLiRpZC4nIEFORCB0eXBlPSInLiR0eXBlLici JykpIHsKCQkJCQkJCSRpZHNbXSA9ICRpZDsKCQkJCQkJfQoJCQkJCX0KCQkJCQlyZXR1cm4g am9pbignLCAnLCAkaWRzKTsKCQkJCQlicmVhazsKCQkJfQoJCX0KCQlyZXR1cm4gJyc7Cgl9 Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBHcmFiIHRoZSBjdXJyZW50IGFy dGljbGUvaW1hZ2UvZmlsZS9saW5rIElECmZ1bmN0aW9uIHNtZF9nZXRJRCgpIHsKCWlmKCFl bXB0eSgkR0xPQkFMU1snSUQnXSkpIHsgLy8gbmV3bHktc2F2ZWQgaXRlbQoJCSRpdGVtSUQg PSBpbnR2YWwoJEdMT0JBTFNbJ0lEJ10pOwoJfSBlbHNlIHsKCQkkaXRlbUlEID0gKGdwcygn SUQnKSkgPyBncHMoJ0lEJykgOiBncHMoJ2lkJyk7Cgl9CglyZXR1cm4gJGl0ZW1JRDsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF90YWdzX3RhYmxlX2V4 aXN0KCRhbGw9JzAnKSB7CglzdGF0aWMgJHNtZF90YWdzX3RhYmxlX29rID0gYXJyYXkoKTsK CglpZiAoaXNzZXQoJHNtZF90YWdzX3RhYmxlX29rWyRhbGxdKSkgewoJCXJldHVybiAkc21k X3RhZ3NfdGFibGVfb2tbJGFsbF07Cgl9CgoJaWYgKCRhbGwpIHsKCQkkdGJscyA9IGFycmF5 KFNNRF9UQUcgPT4gOSwgU01EX1RBR0MgPT4gMiwgU01EX1RBR1UgPT4gMyk7CgkJJG91dCA9 IGNvdW50KCR0YmxzKTsKCQlmb3JlYWNoICgkdGJscyBhcyAkdGJsID0+ICRjb2xzKSB7CgkJ CWlmIChncHMoJ2RlYnVnJykpIHsKCQkJCWVjaG8gIisrIFRBQkxFICIgLiAkdGJsIC4gIiBI QVMgIiAuIGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkgLiAiIENPTFVNTlM7 IFJFUVVJUkVTICIgLiAkY29scyAuICIgKysiIC4gYnI7CgkJCX0KCQkJaWYgKGNvdW50KEBz YWZlX3Nob3coJ2NvbHVtbnMnLCAkdGJsKSkgPT0gJGNvbHMpIHsKCQkJCSRvdXQtLTsKCQkJ fQoJCX0KCQkkcmV0ID0gKCRvdXQ9PT0wKSA/IDEgOiAwOwoJCSRzbWRfdGFnc190YWJsZV9v a1sxXSA9ICRyZXQ7CgkJcmV0dXJuICRyZXQ7Cgl9IGVsc2UgewoJCWlmIChncHMoJ2RlYnVn JykpIHsKCQkJZWNobyAiKysgVEFCTEUgIiAuIFNNRF9UQUcgLiAiIEhBUyAiIC4gY291bnQo QHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9UQUcpKSAuICIgQ09MVU1OUzsiOwoJCX0KCQkk cmV0ID0gQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9UQUcpOwoJCSRzbWRfdGFnc190YWJs ZV9va1swXSA9ICRyZXQ7CgkJcmV0dXJuICRyZXQ7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQovLyBBZGQgdGFnIHRhYmxlcyBpZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQK ZnVuY3Rpb24gc21kX3RhZ3NfdGFibGVfaW5zdGFsbCgkc2hvd3BhbmU9JzEnKSB7CglnbG9i YWwgJERCOwoKCSRkZWJ1ZyA9IGdwcygnZGVidWcnKTsKCSRHTE9CQUxTWyd0eHBfZXJyX2Nv dW50J10gPSAwOwoKCSRyZXQgPSAnJzsKCSRzcWwgPSBhcnJheSgpOwoJJHNxbFtdID0gIkNS RUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAiLlBGWC5TTURfVEFHLiJgICgKCQlgaWRgIGlu dCg2KSBOT1QgTlVMTCBhdXRvX2luY3JlbWVudCwKCQlgbmFtZWAgdmFyY2hhcig2NCkgTk9U IE5VTEwgZGVmYXVsdCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwKCQlgdHlwZWAgdmFy Y2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwK CQlgcGFyZW50YCB2YXJjaGFyKDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnIENPTExBVEUgdXRm OF9nZW5lcmFsX2NpLAoJCWBsZnRgIGludCg2KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywKCQlg cmd0YCBpbnQoNikgTk9UIE5VTEwgZGVmYXVsdCAnMCcsCgkJYHRpdGxlYCB2YXJjaGFyKDI1 NSkgTk9UIE5VTEwgZGVmYXVsdCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwKCQlgZGVz Y3JpcHRpb25gIHRleHQgTlVMTCBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwKCQlgZGVzY19o dG1sYCB0ZXh0IE5VTEwgQ09MTEFURSB1dGY4X2dlbmVyYWxfY2ksCgkJUFJJTUFSWSBLRVkg KGBpZGApCgkpIEVOR0lORT1NeUlTQU0gUEFDS19LRVlTPTEgQVVUT19JTkNSRU1FTlQ9NSBD SEFSQUNURVIgU0VUPXV0ZjgiOwoKCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgewoJ CSRzcWxbXSA9ICJJTlNFUlQgSU5UTyBgIi5QRlguU01EX1RBRy4iYCBWQUxVRVMgKDEsICdy b290JywgJ2FydGljbGUnLCAnJywgMSwgMiwgJ3Jvb3QnLCAnRE8gTk9UIERFTEVURScsIE5V TEwpIjsKCQkkc3FsW10gPSAiSU5TRVJUIElOVE8gYCIuUEZYLlNNRF9UQUcuImAgVkFMVUVT ICgyLCAncm9vdCcsICdsaW5rJywgJycsIDEsIDIsICdyb290JywgJ0RPIE5PVCBERUxFVEUn LCBOVUxMKSI7CgkJJHNxbFtdID0gIklOU0VSVCBJTlRPIGAiLlBGWC5TTURfVEFHLiJgIFZB TFVFUyAoMywgJ3Jvb3QnLCAnaW1hZ2UnLCAnJywgMSwgMiwgJ3Jvb3QnLCAnRE8gTk9UIERF TEVURScsIE5VTEwpIjsKCQkkc3FsW10gPSAiSU5TRVJUIElOVE8gYCIuUEZYLlNNRF9UQUcu ImAgVkFMVUVTICg0LCAncm9vdCcsICdmaWxlJywgJycsIDEsIDIsICdyb290JywgJ0RPIE5P VCBERUxFVEUnLCBOVUxMKSI7Cgl9CgoJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIGAiLlBGWC5TTURfVEFHQy4iYCAoCgkJYHRhZ19pZGAgaW50KDYpIE5PVCBOVUxM IGRlZmF1bHQgJzAnLAoJCWBjYXRfaWRgIGludCg2KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywK CQlQUklNQVJZIEtFWSAoYHRhZ19pZGAsYGNhdF9pZGApCgkpIEVOR0lORT1NeUlTQU0iOwoK CSRzcWxbXSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX1RBR1Uu ImAgKAoJCWBpdGVtX2lkYCBpbnQoMTEpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAoJCWB0YWdf aWRgIGludCg2KSBOT1QgTlVMTCBkZWZhdWx0ICcwJywKCQlgdHlwZWAgdmFyY2hhcig2NCkg Tk9UIE5VTEwgZGVmYXVsdCAnJyBDT0xMQVRFIHV0ZjhfZ2VuZXJhbF9jaSwKCQlQUklNQVJZ IEtFWSAoYGl0ZW1faWRgLGB0YWdfaWRgKQoJKSBFTkdJTkU9TXlJU0FNIENIQVJBQ1RFUiBT RVQ9dXRmOCI7CgoJaWYoJGRlYnVnKSB7CgkJZG1wKCRzcWwpOwoJfQoJZm9yZWFjaCAoJHNx bCBhcyAkcXJ5KSB7CgkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7CgkJaWYgKCRyZXQ9PT1m YWxzZSkgewoJCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7CgkJCWVjaG8gIjxiPiIg LiAkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddIC4gIi48L2I+ICIgLiBteXNxbGlfZXJyb3Io JERCLT5saW5rKSAuICI8YnIgLz5cbiI7CgkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+XG4i OwoJCX0KCX0KCgkvLyBVcGdyYWRlIHRhYmxlIGNvbGxhdGlvbiBpZiBuZWNlc3NhcnkKCSRy ZXQgPSBnZXRSb3dzKCJTSE9XIFRBQkxFIFNUQVRVUyBXSEVSRSBuYW1lIElOICgnIi5QRlgu U01EX1RBRy4iJywgJyIuUEZYLlNNRF9UQUdVLiInKSIpOwoJaWYgKCRyZXRbMF1bJ0NvbGxh dGlvbiddICE9ICd1dGY4X2dlbmVyYWxfY2knKSB7CgkJJHJldCA9IHNhZmVfYWx0ZXIoU01E X1RBRywgJ0NPTlZFUlQgVE8gQ0hBUkFDVEVSIFNFVCB1dGY4IENPTExBVEUgdXRmOF9nZW5l cmFsX2NpJywgJGRlYnVnKTsKCX0KCWlmICgkcmV0WzFdWydDb2xsYXRpb24nXSAhPSAndXRm OF9nZW5lcmFsX2NpJykgewoJCSRyZXQgPSBzYWZlX2FsdGVyKFNNRF9UQUdVLCAnQ09OVkVS VCBUTyBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knLCAkZGVi dWcpOwoJfQoKCS8vIEFkZCB0aGUgZGVzY3JpcHRpb24gY29sdW1uIG9uIHVwZ3JhZGUKCSRm bGRzID0gZ2V0VGhpbmdzKCdTSE9XIENPTFVNTlMgRlJPTSBgJy5QRlguU01EX1RBRy4nYCcp OwoJaWYgKCFpbl9hcnJheSgnZGVzY3JpcHRpb24nLCRmbGRzKSkgewoJCXNhZmVfYWx0ZXIo U01EX1RBRywgIkFERCBgZGVzY3JpcHRpb25gIFRFWFQgTlVMTCBBRlRFUiBgdGl0bGVgIiwg JGRlYnVnKTsKCX0KCWlmICghaW5fYXJyYXkoJ2Rlc2NfaHRtbCcsJGZsZHMpKSB7CgkJc2Fm ZV9hbHRlcihTTURfVEFHLCAiQUREIGBkZXNjX2h0bWxgIFRFWFQgTlVMTCBBRlRFUiBgZGVz Y3JpcHRpb25gIiwgJGRlYnVnKTsKCX0KCglpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQn XSA9PSAwKSB7CgkJJG1lc3NhZ2UgPSBnVHh0KCdzbWRfdGFnX3RibF9pbnN0YWxsZWQnKTsK CQlzbWRfdGFnc19wcmVmc19pbnN0YWxsKCRtZXNzYWdlLCAkc2hvd3BhbmUpOwoJfSBlbHNl IHsKCQlpZiAoJHNob3dwYW5lKSB7CgkJCSRtZXNzYWdlID0gZ1R4dCgnc21kX3RhZ190Ymxf bm90X2luc3RhbGxlZCcpOwoJCQlzbWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlKTsKCQl9 Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEcm9wIHRhZyB0YWJsZXMg aWYgaW4gZGF0YWJhc2UKZnVuY3Rpb24gc21kX3RhZ3NfdGFibGVfcmVtb3ZlKCkgewoJZ2xv YmFsICREQjsKCgkkcmV0ID0gJyc7Cgkkc3FsID0gYXJyYXkoKTsKCSRHTE9CQUxTWyd0eHBf ZXJyX2NvdW50J10gPSAwOwoJaWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KCkpIHsKCQkkc3Fs W10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9UQUcuICI7ICI7CgkJJHNx bFtdID0gIkRST1AgVEFCTEUgSUYgRVhJU1RTICIgLlBGWC5TTURfVEFHVS4gIjsgIjsKCQkk c3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9UQUdDLiAiOyAiOwoJ CWlmKGdwcygnZGVidWcnKSkgewoJCQlkbXAoJHNxbCk7CgkJfQoJCWZvcmVhY2ggKCRzcWwg YXMgJHFyeSkgewoJCQkkcmV0ID0gc2FmZV9xdWVyeSgkcXJ5KTsKCQkJaWYgKCRyZXQ9PT1m YWxzZSkgewoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOwoJCQkJZWNobyAiPGI+ IiAuICRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gLiAiLjwvYj4gIiAuIG15c3FsaV9lcnJv cigkREItPmxpbmspIC4gIjxiciAvPlxuIjsKCQkJCWVjaG8gIjwhLS1cbiAkcXJ5IFxuLS0+ XG4iOwoJCQl9CgkJfQoJfQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkg ewoJCSRtZXNzYWdlID0gZ1R4dCgnc21kX3RhZ190YmxfcmVtb3ZlZCcpOwoJCXNtZF90YWdz X3ByZWZzX3JlbW92ZSgkbWVzc2FnZSk7Cgl9IGVsc2UgewoJCSRtZXNzYWdlID0gZ1R4dCgn c21kX3RhZ190Ymxfbm90X3JlbW92ZWQnKTsKCQlzbWRfdGFnc19wcmVmc19zaG93KCRtZXNz YWdlKTsKCX0KfQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUmVidWlsZCBtb2Rp ZmllZCBwcmVvcmRlciB0YWcgbGlua3MKZnVuY3Rpb24gc21kX3RhZ3NfdGFibGVfcmVidWls ZCgpIHsKCSR0eXBlcyA9IGFycmF5KCdhcnRpY2xlJywgJ2ltYWdlJywgJ2ZpbGUnLCAnbGlu aycpOwoJZm9yZWFjaCAoJHR5cGVzIGFzICR0YWdfdHlwZSkgewoJCXJlYnVpbGRfdHJlZV9m dWxsKCR0YWdfdHlwZSwgU01EX1RBRyk7Cgl9CgkkbWVzc2FnZSA9IGdUeHQoJ3NtZF90YWdf dGJsX3JlYnVpbHQnKTsKCXNtZF90YWdzX3ByZWZzX3Nob3coJG1lc3NhZ2UpOwp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQWRkIHBsdWdpbiBwcmVmZXJlbmNlcyB0byBw cmVmcwpmdW5jdGlvbiBzbWRfdGFnc19wcmVmc19pbnN0YWxsKCRtZXNzYWdlPScnLCAkc2hv d3BhbmU9JzEnKSB7CglnbG9iYWwgJHNtZF90YWdfcHJlZnM7CgoJJGN0ciA9IHNhZmVfY291 bnQoJ3R4cF9wcmVmcycsICdldmVudD0ic21kX3RhZ3MiJykgKyAxOwoJZm9yZWFjaCAoJHNt ZF90YWdfcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoIWZldGNoKCduYW1l JywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7CgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0 eHBfcHJlZnMnLCdwcmVmc19pZD0xLCBuYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSku JywgdmFsPScuZG9RdW90ZShkb1NsYXNoKCRkZmx0KSkuJywgZXZlbnQ9InNtZF90YWdzIiwg cG9zaXRpb249IicuJGN0ci4nIicpOwoJCQkkY3RyKys7CgkJfQoJfQoJLy8gVGlkeSB1cCBh bnkgbGVnYWN5IHByZWZzCglmb3JlYWNoICgkc21kX3RhZ19wcmVmc1sxXSBhcyAkcHJlZiA9 PiAkZGZsdCkgewoJCWlmIChmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVm KSkgewoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywnbmFtZT0nLmRvUXVvdGUo ZG9TbGFzaCgkcHJlZikpKTsKCQl9Cgl9CglpZiAoJHNob3dwYW5lKSB7CgkJJG1lc3NhZ2Ug Lj0gZ1R4dCgnc21kX3RhZ19wcmVmc19pbnN0YWxsZWQnKTsKCQlzbWRfdGFnc19wcmVmc19z aG93KCRtZXNzYWdlKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJl bW92ZSBwbHVnaW4gcHJlZmVyZW5jZXMgZnJvbSBwcmVmcyB0YWJsZS4KLy8gTm90ZTogYm90 aCBwYXJ0cyBvZiBzbWRfdGFnc19wcmVmcyBhcnJheSBhcmUgaXRlcmF0ZWQgb3ZlciB0byB0 aWR5IHVwIGFueSBsZWdhY3kgc2V0dGluZ3MKZnVuY3Rpb24gc21kX3RhZ3NfcHJlZnNfcmVt b3ZlKCRtZXNzYWdlPScnLCAkc2hvd3BhbmU9JzEnKSB7CglnbG9iYWwgJHNtZF90YWdfcHJl ZnM7CgoJZm9yZWFjaCAoYXJyYXlfbWVyZ2UoJHNtZF90YWdfcHJlZnNbMF0sJHNtZF90YWdf cHJlZnNbMV0pIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGZldGNoKCduYW1lJywndHhw X3ByZWZzJywnbmFtZScsJHByZWYpKSB7CgkJCSRpZCA9IHNhZmVfZGVsZXRlKCd0eHBfcHJl ZnMnLCduYW1lPScuZG9RdW90ZShkb1NsYXNoKCRwcmVmKSkpOwoJCX0KCX0KCWlmICgkc2hv d3BhbmUpIHsKCQkkbWVzc2FnZSAuPSBnVHh0KCdzbWRfdGFnX3ByZWZzX3JlbW92ZWQnKTsK CQlzbWRfdGFnc19wcmVmc19zaG93KCRtZXNzYWdlKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi8vIFNhdmVzIHBsdWdpbiBwcmVmZXJlbmNlcwpmdW5jdGlvbiBzbWRf dGFnc19wcmVmc191cGRhdGUoJG1lc3NhZ2UgPSAnJykgewoJZ2xvYmFsICRzbWRfdGFnX3By ZWZzOwoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9zdCgpKTsKCWZvcmVhY2ggKCRzbWRfdGFn X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGlzc2V0KCRwb3N0WyRwcmVm XSkpIHsKCQkJc2FmZV91cGRhdGUoInR4cF9wcmVmcyIsICJ2YWwgPSAnIi4kcG9zdFskcHJl Zl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2goJHByZWYpLiInIGFuZCBwcmVmc19pZCA9IDEi KTsKCQl9Cgl9CgkkbWVzc2FnZSAuPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZlZCcpOwoJc21k X3RhZ3NfcHJlZnNfc2hvdygkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQovLyBTcGxpdCBhIG11bHRpLWNoYXIgcHJlZmVyZW5jZSB2YWx1ZSBpbnRvIGFuIGFy cmF5IG9mIGtleXMvdmFsdWVzLgovLyBOb3RlOiB2YWx1ZSBpcyBwYXNzZWQgaW4gYW5kIG5v dCByZWFkIGRpcmVjdGx5IGZyb20gdGhlIHByZWZzIGFycmF5IGluIHRoaXMgZnVuY3Rpb24g LSBpbnRlbnRpb25hbGx5CmZ1bmN0aW9uIHNtZF90YWdzX3ByZWZfZXhwbG9kZSgkdmFsKSB7 Cgkkb3JkZXIgPSBhcnJheV92YWx1ZXMoYXJyYXkoZ1R4dCgndGFiX2xpc3QnKSxnVHh0KCd0 YWJfaW1hZ2UnKSxnVHh0KCd0YWJfZmlsZScpLGdUeHQoJ3RhYl9saW5rJykpKTsKCSRvbm9m ZiA9IGFycmF5X3ZhbHVlcyhwcmVnX3NwbGl0KCcvLycsICR2YWwsIC0xLCBQUkVHX1NQTElU X05PX0VNUFRZKSk7Cgkkb3V0ID0gYXJyYXkoKTsKCWZvcmVhY2goJG9yZGVyIGFzICRrZXkx ID0+ICR2YWx1ZTEpIHsKCQkkb3V0WyhzdHJpbmcpJHZhbHVlMV0gPSAkb25vZmZbJGtleTFd OwoJfQoJcmV0dXJuICRvdXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBH ZXQgdmFsdWVzIGZyb20gcHJlZnMgLSBwYXNzIGVpdGhlciBhIHNpbmdsZSBrZXkgb3IgYW4g YXJyYXkuCi8vIElmIDJuZCBhcmcgaXMgc2V0IGFuZCB0aGUgcHJlZiBkb2Vzbid0IGV4aXN0 LCByZWFkIGl0IGZyb20gdGhlIHBsdWdpbiBkZWZhdWx0CmZ1bmN0aW9uIHNtZF90YWdzX3By ZWZfZ2V0KCRrZXlzLCAkZGZsdD0wKSB7CglnbG9iYWwgJHNtZF90YWdfcHJlZnM7CglzdGF0 aWMgJHNtZF90YWdfcHJlZnN0b3JlOwoKCSRwcmVmb3V0ID0gYXJyYXkoKTsKCglpZiAoIWlz X2FycmF5KCRrZXlzKSkgewoJCSRrZXlzID0gYXJyYXkoJGtleXMpOwoJfQoKCS8vIEZvciBs YXRlciBsb29waW5nIHJvdW5kIGRlZmF1bHRzCgkkYWxsa2V5cyA9ICRrZXlzOwoKCS8vIENo ZWNrIHRoZSBjYWNoZSBhbmQgcmVtb3ZlIGFueSBrZXlzIHdlJ3ZlIGFscmVhZHkgZmV0Y2hl ZAoJZm9yZWFjaCAoJGtleXMgYXMgJGlkeCA9PiAka2V5KSB7CgkJaWYgKGlzc2V0KCRzbWRf dGFnX3ByZWZzdG9yZVska2V5XSkpIHsKCQkJJHByZWZvdXRbJGtleV0gPSAkc21kX3RhZ19w cmVmc3RvcmVbJGtleV07CgkJCXVuc2V0KCRrZXlzWyRpZHhdKTsKCQl9Cgl9CgoJaWYgKCRr ZXlzKSB7CgkJJHByZWZrZXlzID0gZG9RdW90ZShqb2luKCInLCciLGRvU2xhc2goJGtleXMp KSk7CgkJJHJzID0gc2FmZV9yb3dzKCduYW1lLHZhbCxodG1sJywndHhwX3ByZWZzJywnbmFt ZSBJTiAoJy4kcHJlZmtleXMuJykgT1JERVIgQlkgbmFtZScpOwoJCWZvcmVhY2goJHJzIGFz ICRwcmVmKSB7CgkJCSRzbWRfdGFnX3ByZWZzdG9yZVskcHJlZlsnbmFtZSddXSA9ICRwcmVm b3V0WyRwcmVmWyduYW1lJ11dID0gYXJyYXlfc2xpY2UoJHByZWYsMSk7CgkJfQoJfQoKCWlm ICgkZGZsdCkgewoJCWZvcmVhY2ggKCRhbGxrZXlzIGFzICRwcmVmKSB7CgkJCWlmICghaXNz ZXQoJHByZWZvdXRbJHByZWZdKSkgewoJCQkJJHByZWZvdXRbJHByZWZdID0gJHNtZF90YWdf cHJlZnNbMF1bJHByZWZdOwoJCQl9CgkJfQoJfQoKCXJldHVybiAkcHJlZm91dDsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvbW1vbiBidXR0b25zIG9uIHRoZSBhZG1p biBwYW5lbApmdW5jdGlvbiBzbWRfdGFnc19wcmVmc19idXR0b25zKCkgewoJJHJldCA9IGFy cmF5ICgKCQknYnRuUHJlZnNTYXZlJyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBn VHh0KCdzYXZlJyksICdwdWJsaXNoJyksCgkJJ2J0bkluc3RhbGxUYmwnID0+IHNMaW5rKCdz bWRfdGFncycsICdzbWRfdGFnc190YWJsZV9pbnN0YWxsJywgZ1R4dCgnc21kX3RhZ190Ymxf aW5zdGFsbF9sYmwnKSksCgkJJ2J0blJlbW92ZVRibCcgPT4gc0xpbmsoJ3NtZF90YWdzJywg J3NtZF90YWdzX3RhYmxlX3JlbW92ZScsIGdUeHQoJ3NtZF90YWdfdGJsX3JlbW92ZV9sYmwn KSksCgkJJ2J0blJlYnVpbGRUYmwnID0+IHNMaW5rKCdzbWRfdGFncycsICdzbWRfdGFnc190 YWJsZV9yZWJ1aWxkJywgZ1R4dCgnc21kX3RhZ190YmxfcmVidWlsZF9sYmwnKSksCgkJJ2J0 bkluc3RhbGwnID0+IHNMaW5rKCdzbWRfdGFncycsICdzbWRfdGFnc19wcmVmc19pbnN0YWxs JywgZ1R4dCgnc21kX3RhZ19wcmVmX2luc3RhbGxfbGJsJykpLAoJCSdidG5SZW1vdmUnID0+ IHNMaW5rKCdzbWRfdGFncycsICdzbWRfdGFnc19wcmVmc19yZW1vdmUnLCBnVHh0KCdzbWRf dGFnX3ByZWZfcmVtb3ZlX2xibCcpKSwKCQknYnRuUHJlZnMnID0+IHNMaW5rKCdzbWRfdGFn cycsICdzbWRfdGFnc19wcmVmc19zaG93JywgZ1R4dCgnc21kX3RhZ19wcmVmX3Nob3dfbGJs JykpLAoJCSdidG5NYW5hZ2UnID0+IHNMaW5rKCdzbWRfdGFncycsICdzbWRfdGFnc19tYW5h Z2UnLCBnVHh0KCdzbWRfdGFnX21hbmFnZV9sYmwnKSksCgkJJ2J0blN5bmMnID0+IHNMaW5r KCdzbWRfdGFncycsICdzbWRfdGFnc19zeW5jJywgZ1R4dCgnc21kX3RhZ19zeW5jX2xibCcp KSwKCQknYnRuU3luY0dvJyA9PiBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdGFnc19kb19pbXBv cnQnLCBnVHh0KCdnbycpLCAncHVibGlzaCcpLAoJCSdidG5IZWxwJyA9PiAnPGEgY2xhc3M9 InBvcGhlbHAiIHJlbD0iaGVscCIgaHJlZj0iP2V2ZW50PXBsdWdpbicuYS4nc3RlcD1wbHVn aW5faGVscCcuYS4nbmFtZT1zbWRfdGFncyI+PzwvYT4nLAoJCSdidG5DcmVhdGUnID0+IGZJ bnB1dCgnc3VibWl0JywgJ3NtZF90YWdfY3JlYXRlJywgZ1R4dCgnY3JlYXRlJyksICdwdWJs aXNoJywgJycsICdzbWRfdGFnc19zdGVwPXRoaXMubmFtZTtzbWRfcHJlc3ViKCknKSwKCQkn YnRuU2F2ZScgPT4gZklucHV0KCdzdWJtaXQnLCAnc21kX3RhZ19zYXZlJywgZ1R4dCgndXBk YXRlJyksICcnLCAnJywgJ3NtZF90YWdzX3N0ZXA9dGhpcy5uYW1lO3NtZF9wcmVzdWIoKScp LAoJCSdidG5EZWxldGUnID0+IGZJbnB1dCgnc3VibWl0JywgJ3NtZF90YWdzX2RlbGV0ZScs ICfDlycsICcnLCAnJywgJ3NtZF90YWdzX3N0ZXA9dGhpcy5uYW1lO3NtZF9wcmVzdWIoKScp LAoJCSdidG5TdHlsZScgPT4gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJywKCSk7 CglyZXR1cm4gJHJldDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEEgc3R1 YiB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBhIFR4cCBldmVudApmdW5jdGlvbiBzbWRfdGFn c19zZXR1cCgkZXZ0PScnLCAkc3RwPScnLCAkbWVzc2FnZT0nJykgewoJc21kX3RhZ3NfcHJl ZnNfc2hvdygpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gRGlzcGxheSB0 aGUgcHJlZnMgcGFuZWwKZnVuY3Rpb24gc21kX3RhZ3NfcHJlZnNfc2hvdygkbWVzc2FnZT0n JykgewoJZ2xvYmFsICRzbWRfdGFnX3ByZWZzLCAkc21kX3RhZ3Nfc3R5bGVzOwoKCXBhZ2V0 b3AoZ1R4dCgnc21kX3RhZ19wcmVmc190aXRsZScpLCRtZXNzYWdlKTsKCWV4dHJhY3Qoc21k X3RhZ3NfcHJlZnNfYnV0dG9ucygpKTsKCS8vIEluamVjdCBzdHlsZXMKCWVjaG8gJzxzdHls ZSB0eXBlPSJ0ZXh0L2NzcyI+JwoJCS4kc21kX3RhZ3Nfc3R5bGVzWydjb21tb24nXQoJCS4n PC9zdHlsZT4nOwoKCS8vIFByZWZzIGNoZWNrCgkkcHJlZnNldCA9IHNtZF90YWdzX3ByZWZf Z2V0KGFycmF5X2tleXMoJHNtZF90YWdfcHJlZnNbMF0pKTsKCSRudW1SZXFQcmVmcyA9IGNv dW50KCRzbWRfdGFnX3ByZWZzWzBdKTsKCSRudW1QcmVmcyA9IGNvdW50KCRwcmVmc2V0KTsK CSRhZHZfdGV4dCA9IGdUeHQoJ3NtZF90YWdfZXh0cmFzJyk7CgoJZWNobyBzY3JpcHRfanMo PDw8RU9KUwoKLy8gQ29uY2F0ZW5hdGUgY2hlY2tib3ggb3B0aW9ucyBmb3Igc3RvcmFnZQpm dW5jdGlvbiBzbWRfcHJlc3ViKCkgewoJdmFyIHNtZF9vdXQgPSAiIjsKCWpRdWVyeSgiI3Nt ZF90YWdzX2VuYWJsZV9ob2xkZXIgOmNoZWNrYm94IikuZWFjaChmdW5jdGlvbigpIHsKCQlz bWRfb3V0ICs9ICh0aGlzLmNoZWNrZWQpID8gMSA6IDA7Cgl9KTsKCWpRdWVyeSgiI3NtZF90 YWdfcF9lbmFibGUiKS52YWwoc21kX291dCk7CglyZXR1cm4gdHJ1ZTsKfQpqUXVlcnkoZnVu Y3Rpb24oKSB7CglqUXVlcnkoJy5zbWRfdGFnX2J0bl9hZHZhbmNlZF90b2dnbGUnKS5jbGlj ayhmdW5jdGlvbihlKSB7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJCWpRdWVyeSgnLnNtZF90 YWdfYnRuX2FkdmFuY2VkJykudG9nZ2xlKCdmYXN0Jyk7Cgl9KTsKfSk7CkVPSlMKCSk7CgoJ aWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KDEpKSB7CgkJLy8gVGFibGVzIGluc3RhbGxlZAoJ CWlmICgkbnVtUHJlZnMgPT0gJG51bVJlcVByZWZzKSB7CgkJCS8vIFByZWZzIGFsbCBpbnN0 YWxsZWQKCQkJZWNobyBoZWQoZ1R4dCgnc21kX3RhZ19wcmVmc190aXRsZScpLnNwLiRidG5I ZWxwLCAxKTsKCQkJZWNobyAnPGRpdiBjbGFzcz0idHhwLWNvbnRyb2wtcGFuZWwiPicKCQkJ CS5ncmFmKAoJCQkJCQkkYnRuU3luYwoJCQkJCQkubi4kYnRuTWFuYWdlCgkJCQkJCS5uLnRh ZygkYnRuUmVtb3ZlLicgJy4kYnRuUmVtb3ZlVGJsLicgJy4kYnRuUmVidWlsZFRibCwgJ3Nw YW4nLCAnIGNsYXNzPSJzbWRfdGFnX2J0bl9hZHZhbmNlZCBzbWRfaGlkZGVuIicpCgkJCQkJ LCAnIGNsYXNzPSJ0eHAtYnV0dG9ucyInKQoJCQkJCS5uLmhyZWYoJGFkdl90ZXh0LCAnIycs ICcgY2xhc3M9InNtZF90YWdfYnRuX2FkdmFuY2VkX3RvZ2dsZSInKQoJCQkJLic8L2Rpdj4n OwoKCQkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1zbWRfdGFn cycgLiBhIC4gJ3N0ZXA9c21kX3RhZ3NfcHJlZnNfdXBkYXRlIiBvbnN1Ym1pdD0icmV0dXJu IHNtZF9wcmVzdWIoKTsiPic7CgkJCSRjdHIgPSAxOwoKCQkJZWNobyBzdGFydFRhYmxlKCcn LCAnJywgJ3R4cC1saXN0Jyk7CgkJCWZvcmVhY2ggKCRwcmVmc2V0IGFzICRwbmFtID0+ICRw YXJyKSB7CgkJCQkkcHZhbCA9ICRwYXJyWyd2YWwnXTsKCQkJCWVjaG8gKGlzc2V0KCRzbWRf dGFnX3ByZWZzWzJdWyRjdHJdKSkgPyB0cih0ZGNzKGhlZCgkc21kX3RhZ19wcmVmc1syXVsk Y3RyXSwgMywgJyBjbGFzcz0icHJlZi1oZWFkaW5nIicpLCA0KSkgOiAnJzsKCQkJCSRsYWJl bCA9ICc8bGFiZWwgZm9yPSInLiRwbmFtLiciPicuZ1R4dCgkcG5hbSkuJzwvbGFiZWw+JzsK CQkJCSRvdXQgPSB0ZGEoJGxhYmVsLCAnIGNsYXNzPSJwcmVmLWxhYmVsIicpOwoKCQkJCXN3 aXRjaCgkcG5hbSkgewoJCQkJCWNhc2UgInNtZF90YWdfcF9lbmFibGUiOgoJCQkJCQkkb3B0 aW9ucyA9IHNtZF90YWdzX3ByZWZfZXhwbG9kZSgkcHZhbCk7CgkJCQkJCSRvdXQgLj0gJzx0 ZCBpZD0ic21kX3RhZ3NfZW5hYmxlX2hvbGRlciIgY2xhc3M9InByZWYtdmFsdWUiPic7CgkJ CQkJCWZvcmVhY2ggKCRvcHRpb25zIGFzICRvcHQgPT4gJG9ub2ZmKSB7CgkJCQkJCQkkb3V0 IC49ICc8bGFiZWw+Jy4kb3B0Lic8L2xhYmVsPicgLiBjaGVja2JveCgiZW5hYmxlIi4kb3B0 LCAxLCAkb25vZmYpIC4gJyYjMTYwOyYjMTYwOyc7CgkJCQkJCX0KCQkJCQkJJG91dCAuPSAn PC90ZD4nOwoJCQkJCQkkb3V0IC49IGZJbnB1dCgnaGlkZGVuJywgJ3NtZF90YWdfcF9lbmFi bGUnLCBqb2luKCRvcHRpb25zKSwnJywnJywnJywnJywnJywnc21kX3RhZ19wX2VuYWJsZScp OwoJCQkJCQlicmVhazsKCQkJCQljYXNlICJzbWRfdGFnX3Bfc2l6ZSI6CgkJCQkJY2FzZSAi c21kX3RhZ190X3NpemVfZGVzYyI6CgkJCQkJY2FzZSAic21kX3RhZ190X2NvbHMiOgoJCQkJ CWNhc2UgInNtZF90YWdfdF9oaWxpdGUiOgoJCQkJCWNhc2UgInNtZF90YWdfdF9ob3ZlciI6 CgkJCQkJY2FzZSAic21kX3RhZ190X2luZGVudCI6CgkJCQkJY2FzZSAic21kX3RhZ191X3Bu YW0iOgoJCQkJCWNhc2UgInNtZF90YWdfdV9wdHlwIjoKCQkJCQljYXNlICJzbWRfdGFnX3Vf c2VjIjoKCQkJCQljYXNlICJzbWRfdGFnX3BfbWFzdGVyIjoKCQkJCQljYXNlICJzbWRfdGFn X3VfY29tYmlfYW5kIjoKCQkJCQljYXNlICJzbWRfdGFnX3VfY29tYmlfb3IiOgoJCQkJCQkk b3V0IC49IHRhZyhmSW5wdXQoJ3RleHQnLCAkcG5hbSwgJHB2YWwsICdlZGl0JywgJycsICcn LCAyMCwgJycsICRwbmFtKSwgJ3RkJywgJyBjbGFzcz0icHJlZi12YWx1ZSInKTsKCQkJCQkJ YnJlYWs7CgkJCQkJY2FzZSAic21kX3RhZ190X21kZWxpbSI6CgkJCQkJCSRvdXQgLj0gdGFn KGZJbnB1dCgndGV4dCcsICRwbmFtLCAkcHZhbCwgJ2VkaXQnLCAnJywgJycsIDEsICcnLCAk cG5hbSksICd0ZCcsICcgIGNsYXNzPSJwcmVmLXZhbHVlIicpOwoJCQkJCQlicmVhazsKCQkJ CQljYXNlICJzbWRfdGFnX3BfcXRwYXRoIjoKCQkJCQljYXNlICJzbWRfdGFnX3BfcXRzdHls IjoKCQkJCQkJJG91dCAuPSB0YWcoZklucHV0KCd0ZXh0JywgJHBuYW0sICRwdmFsLCAnZWRp dCcsICcnLCAnJywgMzAsICcnLCAkcG5hbSksICd0ZCcsICcgIGNsYXNzPSJwcmVmLXZhbHVl IicpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICJzbWRfdGFnX3RfYXV0byI6CgkJCQkJCSRv dXQgLj0gdGRhKG9ub2ZmUmFkaW8oJHBuYW0sICRwdmFsKSwgJyBjbGFzcz0icHJlZi12YWx1 ZSInKTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAic21kX3RhZ190X2NvbHNvcmQiOgoJCQkJ CQkkb3V0IC49IHRkYShyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLmdUeHQoJ3Nt ZF90YWdfYnlfY29sdW1uJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0xKT8xOjAp KS5nVHh0KCdzbWRfdGFnX2J5X3JvdycpLiIgIiwgJyBjbGFzcz0icHJlZi12YWx1ZSInKTsK CQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAic21kX3RhZ190X2RlbHRyZWUiOgoJCQkJCQkkb3V0 IC49IHRkYShyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLmdUeHQoJ3NtZF90YWdf Y2hpbGRyZW5fcHJvJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0xKT8xOjApKS5n VHh0KCdzbWRfdGFnX2NoaWxkcmVuX2RlbCcpLiIgIiwgJyBjbGFzcz0icHJlZi12YWx1ZSIn KTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAic21kX3RhZ190X2NvdW50IjoKCQkJCQljYXNl ICJzbWRfdGFnX3RfZGVsdXNlZCI6CgkJCQkJY2FzZSAic21kX3RhZ190X2Rlc2NfdGV4dGls ZSI6CgkJCQkJY2FzZSAic21kX3RhZ190X2Rlc2NfdG9vbHRpcCI6CgkJCQkJY2FzZSAic21k X3RhZ190X2VucmVwIjoKCQkJCQljYXNlICJzbWRfdGFnX3BfbGlua2NhdCI6CgkJCQkJY2Fz ZSAic21kX3RhZ19wX2xpc3RwYXIiOgoJCQkJCWNhc2UgInNtZF90YWdfdV9jb21iaSI6CgkJ CQkJCSRvdXQgLj0gdGRhKHllc25vUmFkaW8oJHBuYW0sICRwdmFsKSwgJyBjbGFzcz0icHJl Zi12YWx1ZSInKTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAic21kX3RhZ190X2FzdGFydCI6 CgkJCQkJCSRvdXQgLj0gdGRhKHJhZGlvKCRwbmFtLDAsKCgkcHZhbD09MCk/MTowKSkuZ1R4 dCgnc21kX3RhZ19wcmVmc19wYW5lJykuIiAiIC4gcmFkaW8oJHBuYW0sMSwoKCRwdmFsPT0x KT8xOjApKS5nVHh0KCdzbWRfdGFnX3RhZ3NfcGFuZScpLiIgIiwgJyBjbGFzcz0icHJlZi12 YWx1ZSInKTsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAic21kX3RhZ19wX3F0YWciOgoJCQkJ CQkkb3V0IC49IHRkYShyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLmdUeHQoJ29m ZicpLiIgIiAuIHJhZGlvKCRwbmFtLDEsKCgkcHZhbD09MSk/MTowKSkuZ1R4dCgnc21kX3Rh Z19hY19zdGQnKS4iICIuIiAiIC4gcmFkaW8oJHBuYW0sMiwoKCRwdmFsPT0yKT8xOjApKS5n VHh0KCdzbWRfdGFnX2FjX3N0cicpLiIgIiwgJyBjbGFzcz0icHJlZi12YWx1ZSInKTsKCQkJ CQkJYnJlYWs7CgkJCQkJY2FzZSAic21kX3RhZ19wX2lucHV0IjoKCQkJCQkJJG91dCAuPSB0 ZGEocmFkaW8oJHBuYW0sMCwoKCRwdmFsPT0wKT8xOjApKS5nVHh0KCdzbWRfdGFnX3NlbF9s aXN0JykuIiAiLiByYWRpbygkcG5hbSwxLCgoJHB2YWw9PTEpPzE6MCkpLmdUeHQoJ3NtZF90 YWdfdGV4dGxpc3QnKS4iICIuIHJhZGlvKCRwbmFtLDIsKCgkcHZhbD09Mik/MTowKSkuZ1R4 dCgnc21kX3RhZ190ZXh0Ym94JykuIiAiLiByYWRpbygkcG5hbSwzLCgoJHB2YWw9PTMpPzE6 MCkpLmdUeHQoJ3NtZF90YWdfdGV4dGJveHBsdXMnKS4iICIsICcgY2xhc3M9InByZWYtdmFs dWUiJyk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgInNtZF90YWdfcF9sYmkiOgoJCQkJCQkk b3V0IC49IHRkYShyYWRpbygkcG5hbSwwLCgoJHB2YWw9PTApPzE6MCkpLmdUeHQoJ25vJyku IiAiLiByYWRpbygkcG5hbSwxLCgoJHB2YWw9PTEpPzE6MCkpLmdUeHQoJ3NtZF90YWdfYmlf dXAnKS4iICIuIHJhZGlvKCRwbmFtLDIsKCgkcHZhbD09Mik/MTowKSkuZ1R4dCgnc21kX3Rh Z19iaV9kb3duJykuIiAiLiByYWRpbygkcG5hbSwzLCgoJHB2YWw9PTMpPzE6MCkpLmdUeHQo J3NtZF90YWdfYmlfYm90aCcpLiIgIiwgJyBjbGFzcz0icHJlZi12YWx1ZSInKTsKCQkJCQkJ YnJlYWs7CgkJCQl9CgkJCQllY2hvIHRyKCRvdXQpOwoJCQkJJGN0cisrOwoJCQl9CgkJCWVj aG8gdHIodGRhKCRidG5QcmVmc1NhdmUsICRidG5TdHlsZSkpOwoJCQllY2hvIGVuZFRhYmxl KCkKCQkJCS50SW5wdXQoKQoJCQkJLic8L2Zvcm0+JzsKCQl9IGVsc2UgaWYgKCRudW1QcmVm cyA+IDAgJiYgJG51bVByZWZzIDwgJG51bVJlcVByZWZzKSB7CgkJCS8vIFByZWZzIHBvc3Np Ymx5IGNvcnJ1cHQsIG9yIHBsdWdpbiB1cGRhdGVkCgkJCWVjaG8gc3RhcnRUYWJsZSgpCgkJ CQkudHIodGRhKHN0cm9uZyhnVHh0KCdzbWRfdGFnX3ByZWZzX3NvbWUnKSkuYnIuYnIKCQkJ CQkuZ1R4dCgnc21kX3RhZ19wcmVmc19zb21lX2V4cGxhaW4nKS5ici5icgoJCQkJCS5nVHh0 KCdzbWRfdGFnX3ByZWZzX3NvbWVfb3B0czEnKSwgJyBjb2xzcGFuPSIyIicpCgkJCQkpCgkJ CQkudHIoCgkJCQkJdGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKQoJCQkJCS4gdGRhKCRidG5J bnN0YWxsLCAkYnRuU3R5bGUpCgkJCQkpCgkJCQkuZW5kVGFibGUoKTsKCQl9IGVsc2UgewoJ CQkvLyBQcmVmcyBub3QgaW5zdGFsbGVkCgkJCWVjaG8gc3RhcnRUYWJsZSgpCgkJCQkudHIo dGRhKGdUeHQoJ3NtZF90YWdfcHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNwYW49IjIi JykpCgkJCQkudHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKQoJCQkJLmVuZFRhYmxl KCk7CgkJfQoJfSBlbHNlIHsKCQkvLyBUYWJsZXMgbm90IGluc3RhbGxlZAoJCWVjaG8gc3Rh cnRUYWJsZSgpCgkJCS50cih0ZGEoc3Ryb25nKGdUeHQoJ3NtZF90YWdfcHJlZnNfc29tZV90 YmwnKSkuYnIuYnIKCQkJCS5nVHh0KCdzbWRfdGFnX3ByZWZzX3NvbWVfZXhwbGFpbicpLmJy LmJyCgkJCQkuZ1R4dCgnc21kX3RhZ19wcmVmc19zb21lX29wdHMyJyksICcgY29sc3Bhbj0i MiInKQoJCQkpCgkJCS50cih0ZGEoJGJ0bkluc3RhbGxUYmwsICRidG5TdHlsZSkpCgkJCS5l bmRUYWJsZSgpOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gTWFuYWdl IHRhZ3MgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgY2F0ZWdvcmllcyB0YWIKZnVuY3Rpb24g c21kX3RhZ3NfbWFuYWdlKCRtZXNzYWdlPScnLCAkcmVwb3J0PScnKSB7CglnbG9iYWwgJHNt ZF90YWdfcHJlZnMsICRzbWRfdGFnc19zdHlsZXM7CgoJZXh0cmFjdChkb1NsYXNoKGdwc2Eo YXJyYXkoJ3NtZF90YWdfbmFtZScsICdzbWRfdGFnX3RpdGxlJywgJ3NtZF90YWdfZGVzY3Jp cHRpb24nLCAnc21kX3RhZ19wYXJlbnQnLCAnc21kX3RhZ19jYXQnLCAnc21kX3RhZ190eXBl JywgJ3NtZF90YWdfaWQnKSkpKTsKCXBhZ2V0b3AoZ1R4dCgnc21kX3RhZ19tYW5hZ2VfbGJs JyksJG1lc3NhZ2UpOwoJZXh0cmFjdChzbWRfdGFnc19wcmVmc19idXR0b25zKCkpOwoKCS8v IFByZWZzIGNoZWNrCgkkcHJlZnNldCA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5X2tleXMo JHNtZF90YWdfcHJlZnNbMF0pKTsKCSRudW1SZXFQcmVmcyA9IGNvdW50KCRzbWRfdGFnX3By ZWZzWzBdKTsKCSRudW1QcmVmcyA9IGNvdW50KCRwcmVmc2V0KTsKCgkkc3R5bGVyZXBzID0g YXJyYXkoCgkJJ3tob3Z9JyA9PiAkcHJlZnNldFsnc21kX3RhZ190X2hvdmVyJ11bJ3ZhbCdd LAoJCSd7Y3VyfScgPT4gJHByZWZzZXRbJ3NtZF90YWdfdF9oaWxpdGUnXVsndmFsJ10sCgkp OwoKCSR0eXBlcyA9IGFycmF5KAoJCSdhcnRpY2xlJyA9PiB1Y2ZpcnN0KGd0eHQoJ2FydGlj bGUnKSksCgkJJ2ltYWdlJyA9PiBndHh0KCd0YWdfaW1hZ2UnKSwKCQknZmlsZScgPT4gZ3R4 dCgnZmlsZScpLAoJCSdsaW5rJyA9PiBndHh0KCd0YWdfbGluaycpLAoJKTsKCgkvLyBNYWtl IHVwIHRoZSByYWRpbyBidXR0b25zCgkkc21kX3RhZ190eXBlID0gKCFlbXB0eSgkc21kX3Rh Z190eXBlKSkgPyAkc21kX3RhZ190eXBlIDogJ2FydGljbGUnOwoKCSRyYWRpb3MgPSBhcnJh eSgpOwoJZm9yZWFjaCAoJHR5cGVzIGFzICRrZXkgPT4gJHZhbCkgewoJCSRpZCA9ICdzbWRf dGFnc190eXBlLScuJGtleTsKCQkkcmFkaW9zW10gPSBuLnQucmFkaW8oJ3NtZF90YWdzX3R5 cGUnLCAka2V5LCAoJHNtZF90YWdfdHlwZSA9PSAka2V5KSA/IDEgOiAwLCAkaWQpLgoJCQkJ JzxsYWJlbCBmb3I9IicuJGlkLiciPicuJHZhbC4nPC9sYWJlbD4nOwoJfQoJJHJhZGlvcyA9 IGpvaW4oc3Auc3AsICRyYWRpb3MpLm47CgoJLy8gQ3JlYXRlIGFsbCB0aGUgbGlzdHMgYnV0 IGhpZGUgdGhlbSB3aXRoIENTUy4galF1ZXJ5IHRha2VzIG92ZXIgYW5kIHN3aXRjaGVzIGJl dHdlZW4gdGhlbSBvbiBkZW1hbmQKCWlmIChzbWRfdGFnc190YWJsZV9leGlzdCgxKSAmJiAk bnVtUHJlZnMgPT0gJG51bVJlcVByZWZzKSB7CgkJLy8gSW5qZWN0IHN0eWxlcwoJCWVjaG8g JzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JwoJCQkuc3RydHIoJHNtZF90YWdzX3N0eWxlc1sn dGFnX21hbmFnZXInXSwgJHN0eWxlcmVwcykKCQkJLiRzbWRfdGFnc19zdHlsZXNbJ3JlcG9y dCddLiRzbWRfdGFnc19zdHlsZXNbJ2NvbW1vbiddCgkJCS4nPC9zdHlsZT4nOwoKCQkvLyBT YW5pdGl6ZSB0aGUgbXVsdGktdGFnIGRlbGltaXRlcgoJCSRtZGVsaW0gPSBzdWJzdHIoJHBy ZWZzZXRbJ3NtZF90YWdfdF9tZGVsaW0nXVsndmFsJ10sIDAsIDEpOwoJCSRtZGVsaW0gPSAo JG1kZWxpbSA9PSAnJykgPyAnJyA6ICdcXCcuJG1kZWxpbTsKCgkJJGNvbE9wdHMgPSBkb19s aXN0KCRwcmVmc2V0WydzbWRfdGFnX3RfY29scyddWyd2YWwnXSwgJzonKTsKCQkkbGF5b3V0 ID0gKCRjb2xPcHRzWzBdID09ICcwJyB8fCAkY29sT3B0c1swXSA9PSAnbGlzdCcpID8gJ2xp c3QnIDogKCgkY29sT3B0c1swXSA9PSAnZ3JvdXAnKSA/ICdsaXN0Z3JwJyA6ICd0YWJsZScp OwoJCSRjb2xPcmRlciA9ICgkcHJlZnNldFsnc21kX3RhZ190X2NvbHNvcmQnXVsndmFsJ10g PT0gMCkgPyAnYnljb2wnIDogJ2J5cm93JzsKCQkkd3JhcHRhZyA9ICRsYXlvdXQuJzonOwoJ CWlmICgkbGF5b3V0ID09ICd0YWJsZScpIHsKCQkJJHRhZ0NvbHMgPSAoaXNfbnVtZXJpYygk Y29sT3B0c1swXSkgJiYgJGNvbE9wdHNbMF0gPiAwKSA/ICRjb2xPcHRzWzBdIDogMTsKCQkJ JHdyYXB0YWcgLj0gJHRhZ0NvbHM7CgkJCSRzZWwgPSAndGQnOwoJCX0gZWxzZSB7CgkJCSR3 cmFwdGFnIC49IChpc3NldCgkY29sT3B0c1sxXSkpID8gJGNvbE9wdHNbMV0gOiAnMCc7CgkJ CSRzZWwgPSAnbGknOwoJCX0KCQkkd3JhcHRhZyAuPSAnOmNvbHM6Jy4kY29sT3JkZXI7CgkJ JGNvdW50cyA9ICRwcmVmc2V0WydzbWRfdGFnX3RfY291bnQnXVsndmFsJ107CgkJJGNsaW5r ID0gJHByZWZzZXRbJ3NtZF90YWdfcF9saW5rY2F0J11bJ3ZhbCddOwoJCSRzaG93cmVwID0g JHJlcG9ydCAmJiAkcHJlZnNldFsnc21kX3RhZ190X2VucmVwJ11bJ3ZhbCddOwoKIAkJZm9y ZWFjaCAoYXJyYXlfa2V5cygkdHlwZXMpIGFzICR0eXBlKSB7CgkJCSRkaXZ0YWdpZCA9ICJz bWRfdGFnc19ncnBfIi4kdHlwZTsKCQkJJHRhZ2xpc3QgPSAidGFnc18iLiR0eXBlOwoJCQkk JHRhZ2xpc3QgPSBzbWRfdGFnX2xpc3RfYWRtKAoJCQkJYXJyYXkoCgkJCQkJInR5cGUiID0+ ICR0eXBlLAoJCQkJCSJ3cmFwdGFnIiA9PiAkd3JhcHRhZywKCQkJCQkiY291bnQiID0+ICRj b3VudHMsCgkJCQkJImluZGVudCIgPT4gJHByZWZzZXRbJ3NtZF90YWdfdF9pbmRlbnQnXVsn dmFsJ10KCQkJCSkKCQkJKTsKCgkJCS8vVE9GSVg6IEZpbmQgYSB3YXkgdG8gYWRkIHRoZSBk aXZ0YWdpZCBvbmx5IHdoZW4gbmVlZGVkLiBBdCB0aGUgbW9tZW50IGl0IGFwcGVhcnMgdHdp Y2Ugb24gdGhlIHBhZ2UgKGlsbGVnYWwgRE9NKQoJCQkkdGFnb3V0WyR0eXBlXSA9ICc8ZGl2 IGlkPSInLiRkaXZ0YWdpZC4nIj4nLigkJHRhZ2xpc3QgPyAkJHRhZ2xpc3QgOiBnVHh0KCdz bWRfdGFnX25vX3RhZ3MnLCBhcnJheSgne3R5cGV9JyA9PiAkdHlwZSkpKS4nPC9kaXY+JzsK CQkJZWNobyAnPGRpdiBjbGFzcz0ic21kX2hpZGRlbiI+JyAuICR0YWdvdXRbJHR5cGVdIC4g JzwvZGl2Pic7CgkJfQoKCQkkcXMgPSBhcnJheSgKCQkJImV2ZW50IiA9PiAic21kX3RhZ3Mi LAoJCSk7CgoKCQkkcXNWYXJzID0gImluZGV4LnBocCIuam9pbl9xcygkcXMpOwoJCSRjb3Vu dF9sYmwgPSBnVHh0KCdzbWRfdGFnX2NvdW50X2xibCcpOwoKCQllY2hvIHNjcmlwdF9qcyg8 PDxFT0pTCnZhciBzbWRfdGFnc19zdGVwID0gJyc7CgovLyBQYWdlIGluaXRpYWxpc2F0aW9u CmpRdWVyeShmdW5jdGlvbigpIHsKCS8vIEluZGljYXRlIHBhcmVudCBsaXN0IGlzIGxvYWRp bmcKCWpRdWVyeSgiLnNtZF90YWdzX3Nob3dwYXJzIikuYWpheFN0YXJ0KGZ1bmN0aW9uKCkg ewoJCWpRdWVyeSh0aGlzKS5mYWRlVG8oIm5vcm1hbCIsIDAuMzMpOwoJfSkuYWpheFN0b3Ao ZnVuY3Rpb24oKSB7CgkJalF1ZXJ5KHRoaXMpLmZhZGVUbygibm9ybWFsIiwgMSk7Cgl9KTsK CgkvLyBTd2l0Y2ggYmV0d2VlbiB0eXBlcwoJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFn c190eXBlJ10iKS5jaGFuZ2UoZnVuY3Rpb24gKCkgewoJCXZhciBzbWRfbmV3Y29udGVudCA9 IGpRdWVyeSgiI3NtZF90YWdzX2dycF8iK2pRdWVyeSh0aGlzKS52YWwoKSkuaHRtbCgpOwoJ CWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ19pZCddIikudmFsKCcnKTsgLy8gQ2hhbmdp bmcgdHlwZSBmb3JjZXMgYW55ICdzYXZlJyB0byB0cmlnZ2VyIHRoZSAnY3JlYXRlJyBiZWhh dmlvdXIKCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlzdCIpLmh0bWwoc21kX25ld2NvbnRl bnQpOwoJCXZhciBuYW0gPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfb25hbWUnXSIp LnZhbCgpOwoJCXZhciBkc2MgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfZGVzY3Jp cHRpb24nXSIpLnZhbCgpOwoJCXZhciB0aWQgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF90 YWdfaWQnXSIpLnZhbCgpOwoJCXZhciB0eXAgPSBqUXVlcnkoImlucHV0W25hbWU9J3NtZF90 YWdzX3R5cGUnXTpjaGVja2VkIikudmFsKCk7CgkJdmFyIHBhciA9ICdyb290JzsKCQl2YXIg Y2F0ID0gJyc7CgoJCWpRdWVyeSgiLnNtZF90YWdzX3Nob3dsaXN0IHskc2VsfSBzcGFuW25h bWU9J3NtZF90YWduYW0nXSIpLmVhY2goZnVuY3Rpb24oKSB7CgkJCWlmIChqUXVlcnkodGhp cykudGV4dCgpID09IG5hbSkgewoJCQkJalF1ZXJ5KHRoaXMpLnBhcmVudCgpLmFkZENsYXNz KCdzbWRfY3VycmVudCcpOwoJCQkJcGFyID0galF1ZXJ5KHRoaXMpLnNpYmxpbmdzKCI6ZXEo MikiKS50ZXh0KCk7CgkJCQljYXQgPSBqUXVlcnkodGhpcykuc2libGluZ3MoIjplcSgzKSIp LnRleHQoKTsKCQkJCWRzYyA9IGpRdWVyeSh0aGlzKS5zaWJsaW5ncygiOmVxKDQpIikudGV4 dCgpOwoJCQkJdGlkID0gKHRpZCA9PSAnJykgPyBqUXVlcnkodGhpcykuc2libGluZ3MoIjpl cSgwKSIpLnRleHQoKSA6IHRpZDsKCQkJfSBlbHNlIHsKCQkJCWpRdWVyeSh0aGlzKS5wYXJl bnQoKS5yZW1vdmVDbGFzcygnc21kX2N1cnJlbnQnKTsKCQkJfQoJCX0pOwoKCQkvLyBSZS1p bnNlcnQgdGhlIElEIGlmIHRoaXMgbmFtZWQgaXRlbSBleGlzdHMgaW4gdGhlIG5ldyBsaXN0 CgkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX2lkJ10iKS52YWwodGlkKTsKCgkJLy8g VXBkYXRlIHRoZSBVSQoJCXNtZF9wYXJlbnRIYW5kbGVyKG5hbSwgdHlwLCB0aWQsIHBhcik7 CgkJc21kX2NhdEhhbmRsZXIoY2F0LCB0eXApOwoJCWpRdWVyeSgiLnNtZF90YWdzX2xpbmtj YXQgc2VsZWN0IG9wdGlvblt2YWx1ZT0nIitjYXQrIiddIikucHJvcCgic2VsZWN0ZWQiLCB0 cnVlKTsKCQlzbWRfYXV0b2ZvY3VzKCk7CgkJc21kX2NlbGxIYW5kbGVyKCk7CgkJalF1ZXJ5 KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ10iKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJ aWYgKGpRdWVyeSh0aGlzKS52YWwoKSA9PSB0eXApIHsKCQkJCWpRdWVyeSh0aGlzKS5uZXh0 KCkuYWRkQ2xhc3MoJ3NtZF9jdXJyZW50Jyk7CgkJCX0gZWxzZSB7CgkJCQlqUXVlcnkodGhp cykubmV4dCgpLnJlbW92ZUNsYXNzKCdzbWRfY3VycmVudCcpOwoJCQl9CgkJfSk7Cgl9KTsK CgkvLyBDYWxsIHRoZSBvbmNoYW5nZSBoYW5kbGVyIGZvciB0aGUgY3VycmVudCB0eXBlCglq UXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX3R5cGUnXTpjaGVja2VkIikuY2hhbmdlKCk7 CgoJLy8gQXV0b3RhZyAtIFRPRE86IGZvcmVpZ24gY2hhcmFjdGVyIGR1bWJkb3duIGZvciBV UkkKCWlmICh7JHByZWZzZXRbJ3NtZF90YWdfdF9hdXRvJ11bJ3ZhbCddfSkgewoJCXNwY1JF ID0gL1xzL2c7CgkJYmFkUkUgPSAvW15hLXpBLVowLTlfXC17JG1kZWxpbX1dL2c7CgkJalF1 ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc19uZXd0aXRsZSddIikua2V5dXAoZnVuY3Rpb24o KSB7CgkJCXRhZ25hbWUgPSBqUXVlcnkodGhpcykudmFsKCkucmVwbGFjZShzcGNSRSwgJy0n KS5yZXBsYWNlKGJhZFJFLCAnJykudG9Mb3dlckNhc2UoKTsKCQkJalF1ZXJ5KCJpbnB1dFtu YW1lPSdzbWRfdGFnc19uZXduYW1lJ10iKS52YWwodGFnbmFtZSk7CgkJfSk7Cgl9CgkvLyBC aW5kIEVudGVyIGtleSB0byBjcmVhdGUKCWpRdWVyeSgiaW5wdXRbbmFtZV49J3NtZF90YWcn XSIpLmtleXVwKGZ1bmN0aW9uKGV2KSB7CgkJaWYgKGV2LmtleUNvZGUgPT0gMTMpIHsKCQkJ alF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnX2NyZWF0ZSddIikuY2xpY2soKTsKCQl9Cgl9 KTsKCgkvLyBQcmVwYXJlIHRoZSBsaXZlIGZpbHRlcgoJalF1ZXJ5KCcjc21kX3RhZ19maWx0 IGxlZ2VuZCBhJykuY2xpY2soZnVuY3Rpb24oKSB7CgkJaWYgKGpRdWVyeSh0aGlzKS5wYXJl bnQoKS5oYXNDbGFzcygnZXhwYW5kZWQnKSkgewoJCQlqUXVlcnkoJyNzbWRfdGFnZmlsdGVy JykuZm9jdXMoKTsKCQl9Cgl9KTsKCglqUXVlcnkoJy5zbWRfdGFnX2xpc3RfYWRtIHskc2Vs fScpLmFkZENsYXNzKCd2aXNpYmxlJyk7CgoJalF1ZXJ5KCcjc21kX3RhZ2ZpbHRlcicpLmtl eXVwKGZ1bmN0aW9uKGV2ZW50KSB7CgkJLy8gaWYgZXNjIGlzIHByZXNzZWQgb3Igbm90aGlu ZyBpcyBlbnRlcmVkCgkJaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcgfHwgalF1ZXJ5KHRoaXMp LnZhbCgpID09ICcnKSB7CgkJCWpRdWVyeSh0aGlzKS52YWwoJycpOwoJCQlqUXVlcnkoJy5z bWRfdGFnX2xpc3RfYWRtIHskc2VsfScpLnJlbW92ZUNsYXNzKCd2aXNpYmxlJykuc2hvdygp LmFkZENsYXNzKCd2aXNpYmxlJyk7CgkJCWpRdWVyeSgiI3NtZF90YWdfZmlsdGVyX2NvdW50 IikuZW1wdHkoKTsKCQl9IGVsc2UgewoJCQljdXJyT3B0ID0galF1ZXJ5KCcjc21kX3RhZ19m aWx0X3JhZGlvcyA6cmFkaW86Y2hlY2tlZCcpLnZhbCgpOwoJCQlzdWJmaWx0ID0gKGN1cnJP cHQgPT0gJ3NtZF9hbGwnKSA/ICcnIDogY3Vyck9wdDsKCQkJc21kX3RhZ19maWx0ZXIoJy5z bWRfdGFnX2xpc3RfYWRtIHskc2VsfScsIGpRdWVyeSh0aGlzKS52YWwoKSwgc3ViZmlsdCk7 CgkJfQoJfSk7CgkvLyBUcmlnZ2VyIHRoZSBmaWx0ZXIgaWYgdGhlIHJhZGlvIGJ1dHRvbnMg YXJlIGNsaWNrZWQKCWpRdWVyeSgnI3NtZF90YWdfZmlsdF9yYWRpb3MgOnJhZGlvJykuY2hh bmdlKGZ1bmN0aW9uKCkgewoJCWpRdWVyeSgnI3NtZF90YWdmaWx0ZXInKS5rZXl1cCgpLmZv Y3VzKCk7Cgl9KTsKCWlmICgneyRzaG93cmVwfScpIHsKCQlzbWRfdGFnc190b2dnbGVfcmVw b3J0KCk7Cgl9Cn0pOwoKLy8gS2VlcCB0cmFjayBvZiB3aGljaCB0YWcgaGFzIGJlZW4gY2xp Y2tlZCBzbyBpdCBjYW4gYmUgZWRpdGVkL3VwZGF0ZWQKZnVuY3Rpb24gc21kX2NlbGxIYW5k bGVyKCkgewoJLy8gQ2VsbCBoaWdobGlnaHRzCglqUXVlcnkoIi5zbWRfdGFnc19zaG93bGlz dCB7JHNlbH0iKS5lYWNoKGZ1bmN0aW9uKCkgewoJCWlmIChqUXVlcnkudHJpbShqUXVlcnko dGhpcykudGV4dCgpKSAhPSAiIikgewoJCQlqUXVlcnkodGhpcykuaG92ZXIoCgkJCQlmdW5j dGlvbiAoKSB7CgkJCQkJalF1ZXJ5KHRoaXMpLmFkZENsYXNzKCdzbWRfaG92ZXInKTsKCQkJ CX0sCgkJCQlmdW5jdGlvbiAoKSB7CgkJCQkJalF1ZXJ5KHRoaXMpLnJlbW92ZUNsYXNzKCdz bWRfaG92ZXInKTsKCQkJCX0KCQkJKQoJCQkuY2xpY2soZnVuY3Rpb24oKSB7CgkJCQl2YXIg bmFtID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMCkiKS50ZXh0KCk7CgkJCQl2YXIg dGlkID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMSkiKS50ZXh0KCk7CgkJCQl2YXIg dHRsID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMikiKS50ZXh0KCk7CgkJCQl2YXIg cGFyID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoMykiKS50ZXh0KCk7CgkJCQl2YXIg Y2F0ID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoNCkiKS50ZXh0KCk7CgkJCQl2YXIg ZHNjID0galF1ZXJ5KHRoaXMpLmNoaWxkcmVuKCI6ZXEoNSkiKS50ZXh0KCk7CgkJCQl2YXIg dHlwID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hlY2tlZCIpLnZh bCgpCgkJCQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdfb25hbWUnXSIpLnZhbChuYW0p OwoJCQkJalF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc19uZXduYW1lJ10iKS52YWwobmFt KTsKCQkJCWpRdWVyeSgiaW5wdXRbbmFtZT0nc21kX3RhZ19pZCddIikudmFsKHRpZCk7CgkJ CQlqUXVlcnkoImlucHV0W25hbWU9J3NtZF90YWdzX25ld3RpdGxlJ10iKS52YWwodHRsKTsK CQkJCWpRdWVyeSgidGV4dGFyZWFbbmFtZT0nc21kX3RhZ3NfZGVzY3JpcHRpb24nXSIpLnZh bChkc2MpOwoJCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBzZWxlY3Qgb3B0aW9uW3Zh bHVlPSciK2NhdCsiJ10iKS5wcm9wKCJzZWxlY3RlZCIsIHRydWUpOwoJCQkJc21kX3BhcmVu dEhhbmRsZXIobmFtLCB0eXAsIHRpZCwgcGFyKTsKCQkJCWpRdWVyeSgiLnNtZF90YWdzX3No b3dsaXN0ICR7c2VsfSIpLnJlbW92ZUNsYXNzKCdzbWRfY3VycmVudCcpOwoJCQkJalF1ZXJ5 KHRoaXMpLmFkZENsYXNzKCdzbWRfY3VycmVudCcpOwoJCQkJc21kX2F1dG9mb2N1cygpOwoJ CQl9KTsKCQl9Cgl9KTsKfQoKLy8gQXNrIFR4cCBmb3IgdGhlIHBhcmVudCBkcm9wZG93biB3 aXRob3V0IGNoaWxkIGVudHJpZXMKZnVuY3Rpb24gc21kX3BhcmVudEhhbmRsZXIobmFtLCB0 eXAsIHRpZCwgcGFyKSB7CglqUXVlcnkucG9zdCgneyRxc1ZhcnN9JywgeyBzdGVwOiAic21k X3RhZ19wYXJlbnRsaXN0IiwgbmFtZTogbmFtLCB0eXBlOiB0eXAsIGlkOiB0aWQsIGxpbmtf bW9kZTogJzInLCBfdHhwX3Rva2VuOiB0ZXh0cGF0dGVybi5fdHhwX3Rva2VuIH0sCgkJZnVu Y3Rpb24oZGF0YSkgewoJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93cGFycyIpLmh0bWwoZGF0 YSk7CgkJCWlmIChwYXIgPT0gInJvb3QiIHx8IHBhciA9PSAiIikgewoJCQkJalF1ZXJ5KCIu c21kX3RhZ3Nfc2hvd3BhcnMgc2VsZWN0IG9wdGlvbjpmaXJzdCIpLnByb3AoInNlbGVjdGVk IiwgdHJ1ZSk7CgkJCX0gZWxzZSB7CgkJCQlqUXVlcnkoIi5zbWRfdGFnc19zaG93cGFycyBz ZWxlY3Qgb3B0aW9uW3ZhbHVlPSciK3BhcisiJ10iKS5wcm9wKCJzZWxlY3RlZCIsIHRydWUp OwoJCQl9CgkJfQoJKTsKfQoKLy8gQXNrIFR4cCBmb3IgdGhlIGNhdGVnb3J5IGRyb3Bkb3du CmZ1bmN0aW9uIHNtZF9jYXRIYW5kbGVyKGNhdCwgdHlwKSB7CglqUXVlcnkoIi5zbWRfdGFn c19saW5rY2F0IikuZmFkZVRvKCJub3JtYWwiLCAwLjMzKTsKCWpRdWVyeS5wb3N0KCd7JHFz VmFyc30nLCB7IHN0ZXA6ICJzbWRfdGFnX2NhdGxpc3QiLCBuYW1lOiBjYXQsIHR5cGU6IHR5 cCwgX3R4cF90b2tlbjogdGV4dHBhdHRlcm4uX3R4cF90b2tlbiB9LAoJCWZ1bmN0aW9uKGRh dGEpIHsKCQkJalF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCIpLmh0bWwoZGF0YSk7CgkJCWlm IChjYXQgPT0gInJvb3QiIHx8IGNhdCA9PSAiIikgewoJCQkJalF1ZXJ5KCIuc21kX3RhZ3Nf bGlua2NhdCBzZWxlY3Qgb3B0aW9uOmZpcnN0IikucHJvcCgic2VsZWN0ZWQiLCB0cnVlKTsK CQkJfSBlbHNlIHsKCQkJCWpRdWVyeSgiLnNtZF90YWdzX2xpbmtjYXQgc2VsZWN0IG9wdGlv blt2YWx1ZT0nIitjYXQrIiddIikucHJvcCgic2VsZWN0ZWQiLCB0cnVlKTsKCQkJfQoJCQlq UXVlcnkoIi5zbWRfdGFnc19saW5rY2F0IikuZmFkZVRvKCJub3JtYWwiLCAxKTsKCQl9Cgkp Owp9CgpmdW5jdGlvbiBzbWRfYXV0b2ZvY3VzKCkgewoJalF1ZXJ5KCJpbnB1dFtuYW1lPSdz bWRfdGFnc19uZXd0aXRsZSddIikuZm9jdXMoKS5zZWxlY3QoKTsKfQoKLy8gTWFrZSBzdXJl IHdoYXQgaXMgaW4gdGhlIHZpc2libGUgYm94ZXMgaXMgUE9TVGVkIHZpYSB0aGUgaGlkZGVu IGZvcm0KZnVuY3Rpb24gc21kX3ByZXN1YigpIHsKCWpRdWVyeSgiI3NtZF90YWdfcG9zdGl0 IGlucHV0W25hbWU9J3N0ZXAnXSIpLnZhbChzbWRfdGFnc19zdGVwKTsKCWpRdWVyeSgiI3Nt ZF90YWdfcG9zdGl0IGlucHV0W25hbWU9J3NtZF90YWdfbmFtZSddIikudmFsKGpRdWVyeSgi aW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3bmFtZSddIikudmFsKCkpOwoJalF1ZXJ5KCIjc21k X3RhZ19wb3N0aXQgaW5wdXRbbmFtZT0nc21kX3RhZ190aXRsZSddIikudmFsKGpRdWVyeSgi aW5wdXRbbmFtZT0nc21kX3RhZ3NfbmV3dGl0bGUnXSIpLnZhbCgpKTsKCWpRdWVyeSgiI3Nt ZF90YWdfcG9zdGl0IGlucHV0W25hbWU9J3NtZF90YWdfdHlwZSddIikudmFsKGpRdWVyeSgi aW5wdXRbbmFtZT0nc21kX3RhZ3NfdHlwZSddOmNoZWNrZWQiKS52YWwoKSk7CglqUXVlcnko IiNzbWRfdGFnX3Bvc3RpdCBpbnB1dFtuYW1lPSdzbWRfdGFnX3BhcmVudCddIikudmFsKGpR dWVyeSgiLnNtZF90YWdzX3Nob3dwYXJzIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgpKTsKCWpR dWVyeSgiI3NtZF90YWdfcG9zdGl0IGlucHV0W25hbWU9J3NtZF90YWdfY2F0J10iKS52YWwo alF1ZXJ5KCIuc21kX3RhZ3NfbGlua2NhdCBvcHRpb246c2VsZWN0ZWQiKS52YWwoKSk7Cglq UXVlcnkoIiNzbWRfdGFnX3Bvc3RpdCBpbnB1dFtuYW1lPSdzbWRfdGFnX2Rlc2NyaXB0aW9u J10iKS52YWwoalF1ZXJ5KCJ0ZXh0YXJlYVtuYW1lPSdzbWRfdGFnc19kZXNjcmlwdGlvbidd IikudmFsKCkpOwoJalF1ZXJ5KCIjc21kX3RhZ19wb3N0aXQiKS5zdWJtaXQoKTsKfQoKZnVu Y3Rpb24gc21kX211bHRpc3ViKCkgewoJdGhlVHlwZSA9IGpRdWVyeSgiaW5wdXRbbmFtZT0n c21kX3RhZ3NfdHlwZSddOmNoZWNrZWQiKS52YWwoKTsKCWpRdWVyeSgiI3NtZF90YWdfbXVs dGlmb3JtIGlucHV0W25hbWU9J3N0ZXAnXSIpLnZhbChzbWRfdGFnc19zdGVwKTsKCWpRdWVy eSgiI3NtZF90YWdfbXVsdGlmb3JtIGlucHV0W25hbWU9J3NtZF90YWdfdHlwZSddIikudmFs KHRoZVR5cGUpOwoJalF1ZXJ5KCIjc21kX3RhZ19tdWx0aWZvcm0gaW5wdXRbbmFtZT0nc21k X3RhZ19pZCddIikudmFsKGpRdWVyeS5tYXAoIGpRdWVyeSgiI3NtZF90YWdzX2dycF8iK3Ro ZVR5cGUrIiAudmlzaWJsZSIpLmZpbmQoInNwYW5bbmFtZT0nc21kX3RhZ2lkJ10iKSwgZnVu Y3Rpb24obixpKSB7cmV0dXJuIGpRdWVyeShuKS50ZXh0KCl9ICkpOwoJalF1ZXJ5KCIjc21k X3RhZ19tdWx0aWZvcm0gaW5wdXRbbmFtZT0nc21kX3RhZ19uYW1lJ10iKS52YWwoalF1ZXJ5 Lm1hcCggalF1ZXJ5KCIjc21kX3RhZ3NfZ3JwXyIrdGhlVHlwZSsiIC52aXNpYmxlIikuZmlu ZCgic3BhbltuYW1lPSdzbWRfdGFnbmFtJ10iKSwgZnVuY3Rpb24obixpKSB7cmV0dXJuIGpR dWVyeShuKS50ZXh0KCl9ICkpOwoJalF1ZXJ5KCIjc21kX3RhZ19tdWx0aWZvcm0gaW5wdXRb bmFtZT0nc21kX3RhZ19kZXNjcmlwdGlvbiddIikudmFsKGpRdWVyeS5tYXAoIGpRdWVyeSgi I3NtZF90YWdzX2dycF8iK3RoZVR5cGUrIiAudmlzaWJsZSIpLmZpbmQoInNwYW5bbmFtZT0n c21kX3RhZ2RzYyddIiksIGZ1bmN0aW9uKG4saSkge3JldHVybiBqUXVlcnkobikudGV4dCgp fSApKTsKCWpRdWVyeSgiI3NtZF90YWdfbXVsdGlmb3JtIGlucHV0W25hbWU9J3NtZF90YWdf ZXh0cmEnXSIpLnZhbChqUXVlcnkoIiNzbWRfdGFnX3NlbF9zZWNvbmRhcnkgb3B0aW9uOnNl bGVjdGVkIikudmFsKCkpOwp9CgovLyBMaXZlIHRhZyBmaWx0ZXIKZnVuY3Rpb24gc21kX3Rh Z19maWx0ZXIoc2VsZWN0b3IsIHF1ZXJ5LCBuYW0pIHsKCXZhciBjb3VudF9sYmwgPSAneyRj b3VudF9sYmx9JzsKCXZhciBxdWVyeSA9IGpRdWVyeS50cmltKHF1ZXJ5KTsKCXF1ZXJ5ID0g cXVlcnkucmVwbGFjZSgvIC9naSwgJ3wnKTsgLy8gYWRkIE9SIGZvciByZWdleCBxdWVyeQoJ dmFyIHJlID0gbmV3IFJlZ0V4cChxdWVyeSwgImkiKTsKCWpRdWVyeShzZWxlY3RvcikuZWFj aChmdW5jdGlvbigpIHsKCQlzZWwgPSAodHlwZW9mIG5hbT09InVuZGVmaW5lZCIgfHwgbmFt PT0nJykgPyBqUXVlcnkodGhpcykgOiBqUXVlcnkodGhpcykuZmluZCgic3BhbltuYW1lPSci K25hbSsiJ10iKTsKCQkoc2VsLnRleHQoKS5zZWFyY2gocmUpIDwgMCkgPyBqUXVlcnkodGhp cykuaGlkZSgpLnJlbW92ZUNsYXNzKCd2aXNpYmxlJykgOiBqUXVlcnkodGhpcykuc2hvdygp LmFkZENsYXNzKCd2aXNpYmxlJyk7Cgl9KTsKCgkvLyBEaXNwbGF5IHRoZSBtYXRjaGVkIGNv dW50Cgl0aGVUeXBlID0galF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hl Y2tlZCIpLnZhbCgpOwoJbnVtX21hdGNoZXMgPSBjb3VudF9sYmwgKyBqUXVlcnkoIiNzbWRf dGFnc19ncnBfIit0aGVUeXBlKyIgLnZpc2libGUiKS5sZW5ndGg7CglqUXVlcnkoIiNzbWRf dGFnX2ZpbHRlcl9jb3VudCIpLnRleHQobnVtX21hdGNoZXMpOwp9CgovLyBIYW5kbGUgc2Vj b25kYXJ5IG11bHRpLXNlbGVjdCBvcHRpb25zCmZ1bmN0aW9uIHNtZF90YWdzX3NlbGVkaXQo b2JqKSB7CglzbWRfdGFnc19zdGVwID0galF1ZXJ5KG9iaikudmFsKCk7Cgl0aGVUeXBlID0g alF1ZXJ5KCJpbnB1dFtuYW1lPSdzbWRfdGFnc190eXBlJ106Y2hlY2tlZCIpLnZhbCgpOwoJ c3dpdGNoKHNtZF90YWdzX3N0ZXApIHsKCQljYXNlICJzbWRfdGFnc19tdWx0aV9zZXRfcGFy ZW50IjoKCQkJLy8gR3JhYiBhbGwgZWxlbWVudHMgb2YgdGhlIGN1cnJlbnQgdHlwZSB0aGF0 IGhhdmUgZGF0YSBpbiB0aGVtCgkJCWxpc3RpdGVtcyA9IGpRdWVyeSgiI3NtZF90YWdzX2dy cF8iK3RoZVR5cGUrIiB7JHNlbH0iKS5maWx0ZXIoZnVuY3Rpb24oKSB7cmV0dXJuIGpRdWVy eSh0aGlzKS5maW5kKCdzcGFuJykuc2l6ZSgpID4gMH0pLmdldCgpOwoJCQlsaXN0aXRlbXMu c29ydChmdW5jdGlvbihhLCBiKSB7CgkJCQl2YXIgY29tcEEgPSBqUXVlcnkoYSkudGV4dCgp LnRvVXBwZXJDYXNlKCk7CgkJCQl2YXIgY29tcEIgPSBqUXVlcnkoYikudGV4dCgpLnRvVXBw ZXJDYXNlKCk7CgkJCQlyZXR1cm4gKGNvbXBBIDwgY29tcEIpID8gLTEgOiAoY29tcEEgPiBj b21wQikgPyAxIDogMDsKCQkJfSk7CgoJCQlvdXQgPSAnPHNlbGVjdCBpZD0ic21kX3RhZ19z ZWxfc2Vjb25kYXJ5Ij4nOwoJCQlvdXQgKz0gJzxvcHRpb24gdmFsdWU9IjAiPjwvb3B0aW9u Pic7CgkJCWpRdWVyeS5lYWNoKGxpc3RpdGVtcywgZnVuY3Rpb24oKSB7CgkJCQlpdGVtID0g alF1ZXJ5KHRoaXMpOwoJCQkJdGFnaWQgPSBqUXVlcnkodGhpcykuZmluZCgic3BhbltuYW1l PSdzbWRfdGFnaWQnXSIpLnRleHQoKTsKCQkJCXRhZ25hbSA9IGpRdWVyeSh0aGlzKS5maW5k KCJzcGFuW25hbWU9J3NtZF90YWduYW0nXSIpLnRleHQoKTsKCQkJCW91dCArPSAnPG9wdGlv biB2YWx1ZT0iJyt0YWdpZCsnIj4nK3RhZ25hbSsnPC9vcHRpb24+JzsKCQkJfSk7CgkJCW91 dCArPSAnPC9zZWxlY3Q+JzsKCQkJalF1ZXJ5KCIjc21kX3RhZ19tdWx0aV9wbGFjZWhvbGRl ciIpLmh0bWwob3V0KTsKCQkJYnJlYWsKCQljYXNlICJzbWRfdGFnc19tdWx0aV9jYXRsaW5r IjoKCQkJalF1ZXJ5LnBvc3QoJ3skcXNWYXJzfScsIHsgc3RlcDogInNtZF90YWdfY2F0bGlz dCIsIHR5cGU6IHRoZVR5cGUsIGh0bWxfaWQ6ICdzbWRfdGFnX3NlbF9zZWNvbmRhcnknLCBf dHhwX3Rva2VuOiB0ZXh0cGF0dGVybi5fdHhwX3Rva2VuICB9LAoJCQkJZnVuY3Rpb24oZGF0 YSkgewoJCQkJCWpRdWVyeSgiI3NtZF90YWdfbXVsdGlfcGxhY2Vob2xkZXIiKS5odG1sKGRh dGEpOwoJCQkJfQoJCQkpOwoJCQlicmVhawoJCWNhc2UgInNtZF90YWdzX2RlbGV0ZSI6CgkJ Y2FzZSAnJzoKCQkJalF1ZXJ5KCIjc21kX3RhZ19tdWx0aV9wbGFjZWhvbGRlciIpLmVtcHR5 KCk7CgkJCWJyZWFrOwoJfQp9CgpmdW5jdGlvbiBzbWRfdGFnc190b2dnbGVfcmVwb3J0KCkg ewoJalF1ZXJ5KCIjc21kX3RhZ19yZXBvcnRfcGFuZSIpLnRvZ2dsZSgnbm9ybWFsJyk7Cn0K RU9KUwoJCSk7Cgl9CgoJLy8gVGhlIHRhZyBtYW5hZ2VtZW50IHBhbmVsCglpZiAoc21kX3Rh Z3NfdGFibGVfZXhpc3QoKSkgewoJCS8vIFRhYmxlcyBpbnN0YWxsZWQKCQlpZiAoJG51bVBy ZWZzID09ICRudW1SZXFQcmVmcykgewoJCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkCgkJCWVj aG8gaGVkKGdUeHQoJ3NtZF90YWdfbWFuYWdlX2xibCcpLnNwLiRidG5IZWxwLCAxKTsKCQkJ ZWNobyAnPGRpdiBjbGFzcz0idHhwLWNvbnRyb2wtcGFuZWwiPicKCQkJCS5ncmFmKAoJCQkJ CQkkYnRuUHJlZnMKCQkJCQkJLm4uJGJ0blN5bmMKCQkJCQksICcgY2xhc3M9InR4cC1idXR0 b25zIicpCgkJCQkuJzwvZGl2Pic7CgoJCQkvLyBMaXZlIHNlYXJjaCAvIG11bHRpLWVkaXQK CQkJJGZpbHRvcHRzID0gYXJyYXkoCgkJCQknc21kX2FsbCcgPT4gZ1R4dCgnc21kX3RhZ19h bGxfbGJsJyksCgkJCQknc21kX3RhZ3R0bCcgPT4gZ1R4dCgndGl0bGUnKSwKCQkJCSdzbWRf dGFnZHNjJyA9PiBnVHh0KCdkZXNjcmlwdGlvbicpLAoJCQkJJ3NtZF90YWduYW0nID0+IGdU eHQoJ25hbWUnKSwKCQkJCSdzbWRfdGFncGFyJyA9PiBnVHh0KCdzbWRfdGFnX3BhcmVudF9s YmwnKSwKCQkJKTsKCQkJJHdpdGhzZWxvcHRzID0gYXJyYXkoCgkJCQknc21kX3RhZ3NfZGVs ZXRlJyA9PiBnVHh0KCdkZWxldGUnKSwKCQkJCSdzbWRfdGFnc19tdWx0aV9zZXRfcGFyZW50 JyA9PiBnVHh0KCdzbWRfdGFnX2Fzc2lnbl9wYXJlbnRfbGJsJyksCgkJCSk7CgkJCS8vIFRh Y2sgb24gdGhlIGNhdGVnb3J5IGxpbmsgaXRlbXMgaWYgcmVxdWlyZWQKCQkJaWYgKCRjbGlu aykgewoJCQkJJGZpbHRvcHRzWydzbWRfdGFnY2F0J10gPSBnVHh0KCdzbWRfdGFnX2NsaW5r X2xibCcpOwoJCQkJJHdpdGhzZWxvcHRzWydzbWRfdGFnc19tdWx0aV9jYXRsaW5rJ10gPSBn VHh0KCdzbWRfdGFnX2xpbmtfdG9fY2F0X2xibCcpOwoJCQl9CgoJCQkkZGVzY3NpemVzID0g ZG9fbGlzdCgkcHJlZnNldFsnc21kX3RhZ190X3NpemVfZGVzYyddWyd2YWwnXSk7CgkJCSRk ZXNjdyA9IChpbnQpJGRlc2NzaXplc1swXTsKCQkJJGRlc2NoID0gKGlzc2V0KCRkZXNjc2l6 ZXNbMV0pKSA/IChpbnQpJGRlc2NzaXplc1sxXSA6ICRkZXNjdzsKCQkJZWNobyAnPGRpdiBj bGFzcz0idHhwLWNvbnRhaW5lciI+JzsKCQkJZWNobyBuLiAnPGZvcm0gaWQ9InNtZF90YWdf bXVsdGlmb3JtIiBhY3Rpb249Ij9ldmVudD1zbWRfdGFncyIgbWV0aG9kPSJwb3N0IiBvbnN1 Ym1pdD0ic21kX211bHRpc3ViKCk7IHJldHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95b3Vf c3VyZScpLidcJykiPicKCQkJCS5uLiAnPGZpZWxkc2V0IGlkPSJzbWRfdGFnX2ZpbHQiPjxs ZWdlbmQgY2xhc3M9InR4cC1zdW1tYXJ5IGxldmVyJy4oZ2V0X3ByZWYoJ3BhbmVfc21kX3Rh Z19maWx0ZXJzX3Zpc2libGUnKSA/ICcgZXhwYW5kZWQnIDogJycpLiciPjxhIGhyZWY9IiNz bWRfdGFnX2ZpbHRlcnMiPicuZ1R4dCgnc21kX3RhZ190YWdfc2VhcmNoJykuJzwvYT48L2xl Z2VuZD48ZGl2IGlkPSJzbWRfdGFnX2ZpbHRlcnMiIGNsYXNzPSJ0b2dnbGUiIHN0eWxlPSJk aXNwbGF5OicuKGdldF9wcmVmKCdwYW5lX3NtZF90YWdfZmlsdGVyc192aXNpYmxlJykgPyAn YmxvY2snIDogJ25vbmUnKS4nIj4nCgkJCQkubi4gaElucHV0KCdzdGVwJywgJycpCgkJCQku bi4gaElucHV0KCdzbWRfdGFnX3R5cGUnLCAnJykKCQkJCS5uLiBoSW5wdXQoJ3NtZF90YWdf aWQnLCAnJykKCQkJCS5uLiBoSW5wdXQoJ3NtZF90YWdfbmFtZScsICcnKQoJCQkJLm4uIGhJ bnB1dCgnc21kX3RhZ19kZXNjcmlwdGlvbicsICcnKQoJCQkJLm4uIGhJbnB1dCgnc21kX3Rh Z19leHRyYScsICcnKQoJCQkJLm4uIHRJbnB1dCgpCgkJCQkubi4gJzxpbnB1dCB0eXBlPSJ0 ZXh0IiBuYW1lPSJzbWRfdGFnZmlsdGVyIiB2YWx1ZT0iIiBpZD0ic21kX3RhZ2ZpbHRlciIg c2l6ZT0iMzAiIC8+JwoJCQkJLm4uICc8c3BhbiBpZD0ic21kX3RhZ19maWx0ZXJfY291bnQi Pjwvc3Bhbj4nCgkJCQkubi4gJzxkaXYgaWQ9InNtZF90YWdfZmlsdF9yYWRpb3MiPicucmFk aW9TZXQoJGZpbHRvcHRzLCAnc21kX3RhZ19maWx0b3B0JywgJ3NtZF9hbGwnLCAnJywgJ3Nt ZF90YWdfZmlsdG9wdCcpLic8L2Rpdj4nCgkJCQkubi4gJzxkaXYgaWQ9InNtZF90YWdfbXVs dGlzZWwiPicuZ1R4dCgnc21kX3RhZ193aXRoX2ZpbHRlcmVkJykuc2VsZWN0SW5wdXQoJ3Nt ZF90YWdfbXVsdGlzZWwnLCR3aXRoc2Vsb3B0cywgJycsIHRydWUsICcgb25jaGFuZ2U9InNt ZF90YWdzX3NlbGVkaXQodGhpcyk7IHJldHVybiBmYWxzZTsiJykubi5mSW5wdXQoJ3N1Ym1p dCcsICcnLCBnVHh0KCdnbycpLCAncHVibGlzaCcpLic8L2Rpdj4nCgkJCQkubi4gJzxkaXYg aWQ9InNtZF90YWdfbXVsdGlfcGxhY2Vob2xkZXIiPjwvZGl2PjxhIG5hbWU9InNtZF90YWdz X3JlcG9ydF90b2dnbGVyIiBvbmNsaWNrPSJzbWRfdGFnc190b2dnbGVfcmVwb3J0KCk7Ij4n LmdUeHQoJ3NtZF90YWdfcmVjZW50X3JlcG9ydCcpLic8L2E+JwoJCQkJLm4uICc8L2Rpdj4n CgkJCQkubi4gJzwvZmllbGRzZXQ+JwoJCQkJLm4uICc8L2Zvcm0+JzsKCgkJCS8vIFJlcG9y dCBwb3B1cAoJCQkvLyBUT0RPOiBqUXVlcnkgVUkgaW4gNC42CgkJCWVjaG8gbi4gJzxkaXYg aWQ9InNtZF90YWdfcmVwb3J0X3BhbmUiPjxkaXY+PGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xh c3M9InB1Ymxpc2ggc21kX3RhZ3NfYnRuX29rIiB2YWx1ZT0iJy5nVHh0KCdvaycpLiciIG9u Y2xpY2s9InNtZF90YWdzX3RvZ2dsZV9yZXBvcnQoKTsiIC8+PGgyPicuZ1R4dCgnc21kX3Rh Z19yZXBvcnRfbGJsJykuJzwvaDI+Jy4kcmVwb3J0Lic8L2Rpdj48L2Rpdj4nCgkJCQkubi4g Jzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9InNtZF90YWdfcG9zdGl0IiBhY3Rpb249Ij9ldmVu dD1zbWRfdGFncyI+JwoJCQkJLm4uIGhJbnB1dCgnc3RlcCcsICcnKQoJCQkJLm4uIGhJbnB1 dCgnc21kX3RhZ19pZCcsICRzbWRfdGFnX2lkKQoJCQkJLm4uIGhJbnB1dCgnc21kX3RhZ19u YW1lJywgJycpCgkJCQkubi4gaElucHV0KCdzbWRfdGFnX29uYW1lJywgJHNtZF90YWdfbmFt ZSkKCQkJCS5uLiBoSW5wdXQoJ3NtZF90YWdfcGFyZW50JywgJycpCgkJCQkubi4gaElucHV0 KCdzbWRfdGFnX2NhdCcsICcnKQoJCQkJLm4uIGhJbnB1dCgnc21kX3RhZ190aXRsZScsICcn KQoJCQkJLm4uIGhJbnB1dCgnc21kX3RhZ190eXBlJywgJycpCgkJCQkubi4gaElucHV0KCdz bWRfdGFnX2Rlc2NyaXB0aW9uJywgJycpCgkJCQkubi4gdElucHV0KCkKCQkJCS5uLiAnPC9m b3JtPic7CgoJCQkvLyBUYWcgY3JlYXRlL2VkaXQgcm93CgkJCWVjaG8gbi5oZWQoZ1R4dCgn c21kX3RhZ19jcmVhdGVfbGJsJyksIDIpCgkJCQkubi4nPGRpdiBjbGFzcz0ic21kX3RhZ3Nf bmV3Ij4nCgkJCQkJLm4uJzxkaXYgY2xhc3M9InNtZF90YWdzX2lucHV0X2dyb3VwIj4nCgkJ CQkJCS4gJzxsYWJlbCBmb3I9InNtZF90YWdzX25ld3RpdGxlIj4nLmdUeHQoJ3RpdGxlJyku JzwvbGFiZWw+JwoJCQkJCQkuIGZJbnB1dCgndGV4dCcsICdzbWRfdGFnc19uZXd0aXRsZScs ICRzbWRfdGFnX3RpdGxlLCAnJywgJycsICcnLCAnJywgJycsICdzbWRfdGFnc19uZXd0aXRs ZScpCgkJCQkJCS4gJzxsYWJlbCBmb3I9InNtZF90YWdzX25ld25hbWUiPicuZ1R4dCgnbmFt ZScpLic8L2xhYmVsPicKCQkJCQkJLiBmSW5wdXQoJ3RleHQnLCAnc21kX3RhZ3NfbmV3bmFt ZScsICRzbWRfdGFnX25hbWUsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF90YWdzX25ld25h bWUnKQoJCQkJCS5uLic8L2Rpdj4nCgkJCQkJLm4uJzxkaXYgY2xhc3M9InNtZF90YWdzX2lu cHV0X2dyb3VwIj4nCgkJCQkJCS4gJzxsYWJlbCBmb3I9InNtZF90YWdzX2Rlc2NyaXB0aW9u Ij4nLmdUeHQoJ2Rlc2NyaXB0aW9uJykuJzwvbGFiZWw+JwoJCQkJCQkuIHRleHRfYXJlYSgn c21kX3RhZ3NfZGVzY3JpcHRpb24nLCAkZGVzY2gsICRkZXNjdywgJHNtZF90YWdfZGVzY3Jp cHRpb24sICdzbWRfdGFnc19kZXNjcmlwdGlvbicpCgkJCQkJLm4uJzwvZGl2PicKCQkJCQku bi4nPGRpdiBjbGFzcz0ic21kX3RhZ3NfaW5wdXRfZ3JvdXAiPicKCQkJCQkJLiAnPGxhYmVs PicuZ1R4dCgncGFyZW50JykuJzwvbGFiZWw+JwoJCQkJCQkuICc8c3BhbiBjbGFzcz0ic21k X3RhZ3Nfc2hvd3BhcnMiPjwvc3Bhbj4nCgkJCQkJCS4gKCgkY2xpbmspCgkJCQkJCQk/IG4u ICc8bGFiZWw+Jy5nVHh0KCdzbWRfdGFnX2NsaW5rX2xibCcpLic8L2xhYmVsPicKCQkJCQkJ CQkubi4gJzxzcGFuIGNsYXNzPSJzbWRfdGFnc19saW5rY2F0Ij48L3NwYW4+JwoJCQkJCQkJ OiAnJwoJCQkJCQkpCgkJCQkJLm4uJzwvZGl2PicKCQkJCQkubi4nPGRpdiBjbGFzcz0ic21k X3RhZ3NfaW5wdXRfZ3JvdXAiPicKCQkJCQkJLm4uICRidG5DcmVhdGUKCQkJCQkJLm4uICRi dG5TYXZlCgkJCQkJCS5uLiAkYnRuRGVsZXRlCgkJCQkJLm4uJzwvZGl2PicKCQkJCS5uLic8 L2Rpdj4nOwoKCQkJLy8gVGhlIHRhZ3MgdGhlbXNlbHZlcwoJCQllY2hvICc8ZGl2IGNsYXNz PSJzbWRfdGFnc19wb29sIj4nCgkJCQkJLm4uIGhlZChnVHh0KCdzbWRfdGFnX3Bvb2xfbGJs JyksIDIpCgkJCQkJLm4uICc8ZGl2IGNsYXNzPSJzbWRfdGFnc190eXBlX3NlbGVjdGlvbiI+ JyAuICRyYWRpb3MgLm4uICc8L2Rpdj4nCgkJCQkJLm4uICc8ZGl2IGNsYXNzPSJzbWRfdGFn c19zaG93bGlzdCI+JyAuICR0YWdvdXRbJHNtZF90YWdfdHlwZV0gLm4uICc8L2Rpdj4nCgkJ CQkubi4nPC9kaXY+JwoJCQkJLm4uJzwvZGl2Pic7CgkJfSBlbHNlIGlmICgkbnVtUHJlZnMg PiAwICYmICRudW1QcmVmcyA8ICRudW1SZXFQcmVmcykgewoJCQkvLyBQcmVmcyBwb3NzaWJs eSBjb3JydXB0LCBvciBwbHVnaW4gdXBkYXRlZAoJCQllY2hvIG4uIHN0YXJ0VGFibGUoKQoJ CQkJLm4uIHRyKAoJCQkJCXRkYShzdHJvbmcoZ1R4dCgnc21kX3RhZ19wcmVmc19zb21lJykp LmJyLmJyCgkJCQkJCS5nVHh0KCdzbWRfdGFnX3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJy CgkJCQkJCS5nVHh0KCdzbWRfdGFnX3ByZWZzX3NvbWVfb3B0czEnKSwgJyBjb2xzcGFuPSIy IicpCgkJCQkpCgkJCQkubi4gdHIoCgkJCQkJdGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKQoJ CQkJCS4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpCgkJCQkpCgkJCQkubi4gZW5kVGFi bGUoKTsKCgkJfSBlbHNlIHsKCQkJLy8gUHJlZnMgbm90IGluc3RhbGxlZAoJCQllY2hvIG4u IHN0YXJ0VGFibGUoKQoJCQkJLm4uIHRyKHRkYShnVHh0KCdzbWRfdGFnX3ByZWZzX25vdF9p bnN0YWxsZWQnKSwgJyBjb2xzcGFuPSIyIicpKQoJCQkJLm4uIHRyKHRkYSgkYnRuSW5zdGFs bCwgJGJ0blN0eWxlKSkKCQkJCS5uLiBlbmRUYWJsZSgpOwoJCX0KCX0gZWxzZSB7CgkJLy8g VGFibGVzIG5vdCBpbnN0YWxsZWQKCQllY2hvIG4uIHN0YXJ0VGFibGUoKQoJCQkubi4gdHIo dGRhKHN0cm9uZyhnVHh0KCdzbWRfdGFnX3ByZWZzX3NvbWVfdGJsJykpLmJyLmJyCgkJCQku Z1R4dCgnc21kX3RhZ19wcmVmc19zb21lX2V4cGxhaW4nKS5ici5icgoJCQkJLmdUeHQoJ3Nt ZF90YWdfcHJlZnNfc29tZV9vcHRzMicpLCAnIGNvbHNwYW49IjIiJykKCQkJKQoJCQkubi4g dHIodGRhKCRidG5JbnN0YWxsVGJsLCAkYnRuU3R5bGUpKQoJCQkubi4gZW5kVGFibGUoKTsK CX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFN0b3JlIHRoZSB0YWcgdGhh dCBpcyBjdXJyZW50bHkgYmVpbmcgZWRpdGVkL2NyZWF0ZWQKZnVuY3Rpb24gc21kX3RhZ19z YXZlKCkgewoJLy8gRGVmZXIgZG9TbGFzaCBvZiBkZXNjcmlwdGlvbiB1bnRpbCBhZnRlciBU ZXh0aWxlJ3MgaGFkIGEgZ28KCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFn X29uYW1lJywgJ3NtZF90YWdfbmFtZScsICdzbWRfdGFnX3RpdGxlJywgJ3NtZF90YWdfcGFy ZW50JywgJ3NtZF90YWdfY2F0JywgJ3NtZF90YWdfdHlwZScsICdzbWRfdGFnX2lkJykpKSk7 CglAaW5jbHVkZV9vbmNlIHR4cGF0aC4nL3B1Ymxpc2gucGhwJzsgLy8gZm9yIHBhcnNlKCkK CUBpbmNsdWRlX29uY2UgdHhwYXRoLicvbGliL2NsYXNzVGV4dGlsZS5waHAnOwoKCSRzbWRf dGFnX2Rlc2NyaXB0aW9uID0gJHNtZF90YWdzX2Rlc2N0aWxlID0gcHMoJ3NtZF90YWdfZGVz Y3JpcHRpb24nKTsKCgkkY3RybHMgPSBzbWRfdGFnc19wcmVmX2dldChhcnJheSgnc21kX3Rh Z190X21kZWxpbScsICdzbWRfdGFnX3RfZGVzY190ZXh0aWxlJyksIDEpOwoJJG1kZWxpbSA9 ICRjdHJsc1snc21kX3RhZ190X21kZWxpbSddWyd2YWwnXTsKCSR0eHRfZGVzYyA9ICRjdHJs c1snc21kX3RhZ190X2Rlc2NfdGV4dGlsZSddWyd2YWwnXTsKCgkkbWVzc2FnZSA9ICRyZXBv cnQgPSAnJzsKCSRtaXNzaW5nID0gMDsKCSRvayA9ICRub3RvayA9IGFycmF5KCk7Cgkkc21k X3RhZ19wYXJlbnQgPSAoIWVtcHR5KCRzbWRfdGFnX3BhcmVudCkpID8gJHNtZF90YWdfcGFy ZW50IDogJ3Jvb3QnOwoJJHNtZF90YWdfbmFtZSA9IHRyaW0oJHNtZF90YWdfbmFtZSk7CgoJ aWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7CgkJJHRleHRpbGUgPSBuZXcgVGV4dGls ZSgpOwoJCSRzbWRfdGFnc19kZXNjdGlsZSA9IGRvU2xhc2goKCgkdHh0X2Rlc2MpID8gJHRl eHRpbGUtPlRleHRpbGVUaGlzKHBhcnNlKCRzbWRfdGFnX2Rlc2NyaXB0aW9uKSkgOiBwYXJz ZSgkc21kX3RhZ19kZXNjcmlwdGlvbikpKTsKCX0KCgkkc21kX3RhZ19kZXNjcmlwdGlvbiA9 IGRvU2xhc2goJHNtZF90YWdfZGVzY3JpcHRpb24pOwoKCS8vIENhbid0IHVzZSBzYWZlX3Vw c2VydCgpIGJlY2F1c2UgdGhlIFdIRVJFIGlzIGZvciBJRCBBTkQgdHlwZQoJaWYgKGVtcHR5 KCRzbWRfdGFnX2lkKSkgewoJCS8vIENyZWF0ZQoJCWlmICgkc21kX3RhZ19uYW1lPT0nJyAm JiAkc21kX3RhZ190aXRsZT09JycpIHsKCQkJJG1lc3NhZ2UgPSBhcnJheShnVHh0KCdzbWRf dGFnX25vX25hbWUnLCBhcnJheSgne3R5cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUp KSksIEVfV0FSTklORyk7CgkJfSBlbHNlIHsKCQkJJGFsbHRhZ25hbSA9IGRvX2xpc3QoJHNt ZF90YWdfbmFtZSwgJG1kZWxpbSk7CgkJCSRhbGx0YWd0dGwgPSBkb19saXN0KCRzbWRfdGFn X3RpdGxlLCAkbWRlbGltKTsKCQkJJG51bXRhZ3MgPSBjb3VudCgkYWxsdGFnbmFtKTsKCgkJ CWZvcmVhY2ggKCRhbGx0YWduYW0gYXMgJGlkeCA9PiAkdGhlVGFnKSB7CgkJCQlpZiAoJHRo ZVRhZyA9PSAnJykgewoJCQkJCSRtaXNzaW5nKys7CgkJCQl9CgoJCQkJJHRoZVR0bCA9IChp c3NldCgkYWxsdGFndHRsWyRpZHhdKSAmJiAkYWxsdGFndHRsWyRpZHhdICE9ICcnKSA/ICRh bGx0YWd0dGxbJGlkeF0gOiAkdGhlVGFnOwoJCQkJJHRoZU5hbSA9ICgkdGhlVGFnID09ICcn KSA/IHNhbml0aXplRm9yVXJsKCR0aGVUdGwpIDogc2FuaXRpemVGb3JVcmwoJHRoZVRhZyk7 CgoJCQkJJGV4aXN0cyA9IHNhZmVfZmllbGQoJ25hbWUnLCBTTURfVEFHLCAibmFtZSA9ICck dGhlTmFtJyBBTkQgdHlwZSA9ICckc21kX3RhZ190eXBlJyIpOwoJCQkJJHBhcmV4ID0gc2Fm ZV9maWVsZCgnbmFtZScsIFNNRF9UQUcsICJuYW1lID0gJyRzbWRfdGFnX3BhcmVudCcgQU5E IHR5cGUgPSAnJHNtZF90YWdfdHlwZSciKTsKCgkJCQlpZiAoJGV4aXN0cykgewoJCQkJCWlm ICgkbnVtdGFncyA+IDEpIHsKCQkJCQkJJG5vdG9rWyRpZHhdID0gJ3NtZF90YWdfYWxyZWFk eV9leGlzdHMnOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRtZXNzYWdlID0gYXJyYXkoZ1R4dCgn c21kX3RhZ19leGlzdHMnLCBhcnJheSgne25hbWV9JyA9PiAkdGhlTmFtLCAne3R5cGV9JyA9 PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSksIEVfV0FSTklORyk7CgkJCQkJfQoJCQkJfSBl bHNlIHsKCQkJCQkkc21kX3RhZ19pZCA9IHNhZmVfaW5zZXJ0KAoJCQkJCQlTTURfVEFHLAoJ CQkJCQkibmFtZT0nJHRoZU5hbScsIHRpdGxlPSckdGhlVHRsJywgZGVzY3JpcHRpb249JyRz bWRfdGFnX2Rlc2NyaXB0aW9uJywgZGVzY19odG1sPSckc21kX3RhZ3NfZGVzY3RpbGUnLCBw YXJlbnQ9JyIuKCgkcGFyZXgpID8gJHNtZF90YWdfcGFyZW50IDogJ3Jvb3QnKS4iJywgdHlw ZT0nJHNtZF90YWdfdHlwZSciCgkJCQkJKTsKCQkJCQlpZiAoJHNtZF90YWdfaWQgPiAwKSB7 CgkJCQkJCWlmICgkc21kX3RhZ19jYXQpIHsKCQkJCQkJCXNhZmVfaW5zZXJ0KFNNRF9UQUdD LCJ0YWdfaWQ9JyRzbWRfdGFnX2lkJywgY2F0X2lkPShTRUxFQ1QgaWQgRlJPTSAiLlBGWC4i dHhwX2NhdGVnb3J5IFdIRVJFIG5hbWU9JyRzbWRfdGFnX2NhdCcgQU5EIHR5cGU9JyRzbWRf dGFnX3R5cGUnKSIpOwoJCQkJCQl9CgkJCQkJCWlmICgkbnVtdGFncyA+IDEpIHsKCQkJCQkJ CSRva1tdID0gJHRoZU5hbTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRtZXNzYWdlID0gZ1R4 dCgnc21kX3RhZ19jcmVhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHRoZU5hbSwgJ3t0eXBl fScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsK CQkJCQkJaWYgKCRudW10YWdzID4gMSkgewoJCQkJCQkJJG5vdG9rWyRpZHhdID0gJ3NtZF90 YWdfdW5hYmxlX3RvX2NyZWF0ZSc7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkbWVzc2FnZSA9 IGFycmF5KGdUeHQoJ3NtZF90YWdfbm90X2NyZWF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAk c21kX3RhZ19uYW1lLCAne3R5cGV9JyA9PiB1Y2ZpcnN0KCRzbWRfdGFnX3R5cGUpKSksIEVf V0FSTklORyk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIEdlbmVyYXRlIHRo ZSByZXBvcnQKCQkJaWYgKCRvaykgewoJCQkJJHJlcG9ydCA9IGdUeHQoJ3NtZF90YWdfY3Jl YXRlZF9yZXBfbGJsJykuam9pbignLCAnLCAkb2spLicuJzsKCQkJfQoJCQlpZiAoJG5vdG9r KSB7CgkJCQkkbXNncyA9IGFycmF5KCk7CgkJCQlmb3JlYWNoICgkbm90b2sgYXMgJGlkeCA9 PiAkcmVhc29uKSB7CgkJCQkJJG1zZ3NbXSA9ICRhbGx0YWduYW1bJGlkeF0uc3AuJygnLmdU eHQoJHJlYXNvbikuJyknOwoJCQkJfQoJCQkJJHJlcG9ydCAuPSBici5ici5nVHh0KCdzbWRf dGFnX25vdF9jcmVhdGVkX3JlcF9sYmwnKS5qb2luKCcsICcsICRtc2dzKTsKCQkJCSRyZXBv cnQgLj0gKCRtaXNzaW5nKSA/IGJyLmJyLmdUeHQoJ3NtZF90YWdfbWlzc2luZ19yZXBfbGJs JykuJG1pc3NpbmcgOiAnJzsKCQkJfQoJCX0KCX0gZWxzZSB7CgkJLy8gVXBkYXRlIC0gbm8g bmVlZCB0byBtYWludGFpbiByZWZlcmVudGlhbCBpbnRlZ3JpdHkgdW5saWtlIHR4cF9jYXRz CgkJLy8gc2luY2UgdGFncyBhcmUgc3RvcmVkIGFnYWluc3QgaXRlbSBJRHMKCQkkc21kX3Rh Z190aXRsZSA9IChlbXB0eSgkc21kX3RhZ190aXRsZSkpID8gJHNtZF90YWdfbmFtZSA6ICRz bWRfdGFnX3RpdGxlOwoJCSRzbWRfdGFnX25hbWUgPSAoZW1wdHkoJHNtZF90YWdfbmFtZSkp ID8gc2FuaXRpemVGb3JVcmwoJHNtZF90YWdfdGl0bGUpIDogc2FuaXRpemVGb3JVcmwoJHNt ZF90YWdfbmFtZSk7CgkJJGV4aXN0aW5nX2lkID0gc2FmZV9maWVsZCgnaWQnLCBTTURfVEFH LCAibmFtZSA9ICckc21kX3RhZ19uYW1lJyBhbmQgdHlwZSA9ICckc21kX3RhZ190eXBlJyIp OwoKCQlpZiAoJGV4aXN0aW5nX2lkIGFuZCAkZXhpc3RpbmdfaWQgIT0gJHNtZF90YWdfaWQp IHsKCQkJJG1lc3NhZ2UgPSBhcnJheShnVHh0KCdzbWRfdGFnX2V4aXN0cycsIGFycmF5KCd7 bmFtZX0nID0+ICRzbWRfdGFnX25hbWUsICd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdf dHlwZSkpKSwgRV9XQVJOSU5HKTsKCQl9IGVsc2UgewoJCQlpZiAoc2FmZV91cGRhdGUoCgkJ CQkJU01EX1RBRywKCQkJCQkibmFtZT0nJHNtZF90YWdfbmFtZScsIHRpdGxlPSckc21kX3Rh Z190aXRsZScsIHBhcmVudD0nJHNtZF90YWdfcGFyZW50JywgZGVzY3JpcHRpb249JyRzbWRf dGFnX2Rlc2NyaXB0aW9uJywgZGVzY19odG1sPSckc21kX3RhZ3NfZGVzY3RpbGUnIiwKCQkJ CQkidHlwZT0nJHNtZF90YWdfdHlwZScgQU5EIGlkPSRzbWRfdGFnX2lkIgoJCQkJKSkgewoJ CQkJc2FmZV91cGRhdGUoU01EX1RBRywgInBhcmVudD0nJHNtZF90YWdfbmFtZSciLCAicGFy ZW50PSckc21kX3RhZ19vbmFtZScgQU5EIHR5cGU9JyRzbWRfdGFnX3R5cGUnIik7CgkJCQlp ZiAoJHNtZF90YWdfY2F0KSB7CgkJCQkJc2FmZV91cHNlcnQoU01EX1RBR0MsICJjYXRfaWQ9 KFNFTEVDVCBpZCBGUk9NICIuUEZYLiJ0eHBfY2F0ZWdvcnkgV0hFUkUgbmFtZT0nJHNtZF90 YWdfY2F0JyBBTkQgdHlwZT0nJHNtZF90YWdfdHlwZScpIiwgInRhZ19pZCA9ICckc21kX3Rh Z19pZCciKTsKCQkJCX0gZWxzZSB7CgkJCQkJc2FmZV9kZWxldGUoU01EX1RBR0MsICJ0YWdf aWQ9JHNtZF90YWdfaWQiKTsKCQkJCX0KCQkJCSRtZXNzYWdlID0gZ1R4dCgnc21kX3RhZ191 cGRhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNtZF90YWdfbmFtZSwgJ3t0eXBlfScgPT4g dWNmaXJzdCgkc21kX3RhZ190eXBlKSkpOwoJCQl9IGVsc2UgewoJCQkJJG1lc3NhZ2UgPSBh cnJheShnVHh0KCdzbWRfdGFnX25vdF91cGRhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJHNt ZF90YWdfbmFtZSwgJ3t0eXBlfScgPT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSkpLCBFX1dB Uk5JTkcpOwoJCQl9CgkJfQoJfQoKCXJlYnVpbGRfdHJlZV9mdWxsKCRzbWRfdGFnX3R5cGUs IFNNRF9UQUcpOwoKCS8vIEZvcmNlIHNtZF90YWdfaWQgdG8gdGhlIG5ldyBJRCBzbyBpdCBj YW4gYmUgaW1tZWRpYXRlbHkgZWRpdGVkCgkkX1BPU1RbJ3NtZF90YWdfaWQnXSA9ICRzbWRf dGFnX2lkOwoKCXNtZF90YWdzX21hbmFnZSgkbWVzc2FnZSwgJHJlcG9ydCk7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBTdG9yZSBuZXcgdGFnIC0gdXNlcyBzbWRfdGFn X3NhdmUgd2l0aG91dCB0aGUgSUQvb2xkX25hbWUKZnVuY3Rpb24gc21kX3RhZ19jcmVhdGUo KSB7Ci8vCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFnX25hbWUnLCAnc21k X3RhZ190aXRsZScsICdzbWRfdGFnX2Rlc2NyaXB0aW9uJywgJ3NtZF90YWdfcGFyZW50Jywg J3NtZF90YWdfdHlwZScpKSkpOwoJdW5zZXQoJF9QT1NUWydzbWRfdGFnX2lkJ10pOwoJc21k X3RhZ19zYXZlKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDaGVjayBp ZiB0aGUgcGFzc2VkIHRhZyBleGlzdHMuCi8vIFJldHVybiBpdHMgSUQgaWYgaXQgZG9lcyBv ciBpbnNlcnQgaXQgaWYgaXQgZG9lc24ndC4gT3B0aW9uYWxseSBhc3NpZ24gaXQgdG8gYSBw YXJlbnQgdGFnIC8gVHhwIGNhdGVnb3J5CmZ1bmN0aW9uIHNtZF90YWdfZ2V0c2VydCgkdGFn X25hbWUsICR0YWdfdHlwZSwgJHRhZ190aXRsZT0nJywgJHRhZ19wYXJlbnQ9JycsICR0YWdf Y2F0PScnLCAkdGFnX2Rlc2M9JycsICRmb3JjZV9wYXJlbnQ9ZmFsc2UsICRmb3JjZV9jYXQ9 ZmFsc2UpIHsKCSRjdHJscyA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3Bf bGlua2NhdCcpLCAxKTsKCSRjbGluayA9ICRjdHJsc1snc21kX3RhZ19wX2xpbmtjYXQnXVsn dmFsJ107CgkkdGFnX3RpdGxlID0gKCR0YWdfdGl0bGUgPT0gJycpID8gJHRhZ19uYW1lIDog JHRhZ190aXRsZTsKCSR0YWdfdGl0bGUgPSBkb1NsYXNoKCR0YWdfdGl0bGUpOwoJJHRhZ19u YW1lID0gZG9TbGFzaChzYW5pdGl6ZUZvclVybCgkdGFnX25hbWUpKTsKCSR0YWdfdHlwZSA9 IGRvU2xhc2goJHRhZ190eXBlKTsKCSR0YWdfZGVzYyA9IGRvU2xhc2goJHRhZ19kZXNjKTsK CSR0YWdfcGFyZW50ID0gKCR0YWdfcGFyZW50KSA/IGRvU2xhc2goc2FuaXRpemVGb3JVcmwo JHRhZ19wYXJlbnQpKSA6ICdyb290JzsKCSR0YWdfY2F0ID0gZG9TbGFzaCgkdGFnX2NhdCk7 CgoJJHJldCA9IHNhZmVfZmllbGQoJ2lkJywgU01EX1RBRywgIm5hbWUgPSAnJHRhZ19uYW1l JyBBTkQgdHlwZSA9ICckdGFnX3R5cGUnIik7CglpZiAoISRyZXQpIHsKCQkkcmV0ID0gc2Fm ZV9pbnNlcnQoU01EX1RBRywgIm5hbWU9JyIuJHRhZ19uYW1lLiInLCB0aXRsZT0nJHRhZ190 aXRsZScsIHBhcmVudD0nJHRhZ19wYXJlbnQnLCB0eXBlPSckdGFnX3R5cGUnLCBkZXNjcmlw dGlvbj0nJHRhZ19kZXNjJywgZGVzY19odG1sPSckdGFnX2Rlc2MnIik7CgkJcmVidWlsZF90 cmVlX2Z1bGwoJHRhZ190eXBlLCBTTURfVEFHKTsKCX0gZWxzZWlmKCRmb3JjZV9wYXJlbnQp IHsKCQkkdXBkID0gc2FmZV91cGRhdGUoU01EX1RBRywgInBhcmVudD0nJHRhZ19wYXJlbnQn IiwgImlkPSciLmRvU2xhc2goJHJldCkuIiciKTsKCQlyZWJ1aWxkX3RyZWVfZnVsbCgkdGFn X3R5cGUsIFNNRF9UQUcpOwoJfQoKCS8vIEFzc2lnbiB0YWcgdG8gY2F0ZWdvcnkgaWYgcmVx dWlyZWQKCSRyZXQgPSBkb1NsYXNoKCRyZXQpOwoJaWYgKCRjbGluayAmJiAkdGFnX2NhdCkg ewoJCSRjYXRpZCA9IHNhZmVfZmllbGQoJ2NhdF9pZCcsIFNNRF9UQUdDLCAidGFnX2lkPSck cmV0JyIpOwoKCQlpZiAoJGNhdGlkICYmICRmb3JjZV9jYXQpIHsKCQkJc2FmZV9kZWxldGUo U01EX1RBR0MsICJjYXRfaWQ9JyIuJGNhdGlkLiInIEFORCB0YWdfaWQ9JyIuJHJldC4iJyIp OwoJCQkkY2F0aWQgPSBmYWxzZTsKCQl9CgoJCWlmKCEkY2F0aWQpIHsKCQkJc2FmZV9pbnNl cnQoU01EX1RBR0MsICJ0YWdfaWQ9JyRyZXQnLCBjYXRfaWQ9KFNFTEVDVCBpZCBGUk9NICIu UEZYLiJ0eHBfY2F0ZWdvcnkgV0hFUkUgbmFtZT0nJHRhZ19jYXQnIEFORCB0eXBlPSckdGFn X3R5cGUnKSIpOwoJCX0KCX0KCglyZXR1cm4gJHJldDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi8vIExpbmsgdGhlIHBhc3NlZCB0YWdzIGFycmF5IHdpdGggdGhlIGdpdmVu IGl0ZW0gSUQKZnVuY3Rpb24gc21kX3RhZ19saW5rKCRpdGVtaWQsICR0YWdhcnIsICR0YWdf dHlwZSkgewoJYXNzZXJ0X2ludCgkaXRlbWlkKTsKCgkvLyBUT0RPOiBSZW1vdmUgYW55IGV4 aXN0aW5nIHRhZ3M/PyBQZXJoYXBzIG1ha2UgdGhpcyBhbiBvcHRpb24/Ci8vCXNhZmVfZGVs ZXRlKFNNRF9UQUdVLCAnaXRlbV9pZD0iJy4kaXRlbWlkLiciIEFORCB0eXBlPSInLmRvU2xh c2goJHRhZ190eXBlKS4nIicpOwoJJHRhZ190eXBlID0gZG9TbGFzaCgkdGFnX3R5cGUpOwoK CSRjdHIgPSAkcmV0ID0gMDsKCWZvcmVhY2ggKCR0YWdhcnIgYXMgJHRoZVRhZykgewoJCWlm ICgkdGhlVGFnID09ICcnKSBjb250aW51ZTsKCQkkdGhlVGFnID0gZG9TbGFzaCgkdGhlVGFn KTsgLy8gUHJvYmFibHkgbm90IG5lY2Vzc2FyeQoKCQkkZXhpc3RzID0gc2FmZV9maWVsZCgn aXRlbV9pZCcsIFNNRF9UQUdVLCAidGFnX2lkID0gJyR0aGVUYWcnIEFORCBpdGVtX2lkID0g JyRpdGVtaWQnIEFORCB0eXBlID0gJyR0YWdfdHlwZSciKTsKCgkJaWYgKCEkZXhpc3RzKSB7 CgkJCSRyZXQgPSBzYWZlX2luc2VydChTTURfVEFHVSwgJ3RhZ19pZCA9ICInLiR0aGVUYWcu JyIsIGl0ZW1faWQ9IicuJGl0ZW1pZC4nIiwgdHlwZT0iJy4kdGFnX3R5cGUuJyInKTsKCQkJ aWYgKCRyZXQpIHsKCQkJCSRjdHIrKzsKCQkJfQoJCX0KCX0KCglyZXR1cm4gJGN0cjsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIERlbGV0ZSB0aGUgZ2l2ZW4gdGFnKHMp LiBSZXNwZWN0cyBub2Nsb2JiZXIvdHJlZS9vcnBoYW5zIGRlcGVuZGluZyBvbiBwcmVmcwpm dW5jdGlvbiBzbWRfdGFnc19kZWxldGUoKSB7CglnbG9iYWwgJHNtZF90YWdfcHJlZnM7CgoJ ZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF90YWdfaWQnLCAnc21kX3RhZ19uYW1l JywgJ3NtZF90YWdfdHlwZScpKSkpOwoKCSRtZXNzYWdlID0gJG1zZ0V4dHJhID0gJHJlcG9y dCA9ICcnOwoJJG9rID0gJG5vdG9rID0gYXJyYXkoKTsKCgkkcHJlZiA9IHNtZF90YWdzX3By ZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3RfZGVsdXNlZCcsICdzbWRfdGFnX3RfZGVsdHJlZScp KTsKCSRkZWx1ID0gJHByZWZbJ3NtZF90YWdfdF9kZWx1c2VkJ11bJ3ZhbCddOwoJJGRlbHQg PSAkcHJlZlsnc21kX3RhZ190X2RlbHRyZWUnXVsndmFsJ107CgoJJHNtZF90YWdfaWQgPSBk b19saXN0KCRzbWRfdGFnX2lkKTsKCSRzbWRfdGFnX25hbWUgPSBkb19saXN0KCRzbWRfdGFn X25hbWUpOwoKCSR3aXRoX2NoaWxkID0gc2FmZV9jb2x1bW4oJ2lkJywgU01EX1RBRywgImlk IElOICgnIi5qb2luKCInLCciLCAkc21kX3RhZ19pZCkuIicpIEFORCAoKChyZ3QtbGZ0LTEp LzIpID4gMCkgQU5EIHR5cGU9JyRzbWRfdGFnX3R5cGUnIik7CgkkdXNlZF90YWdzID0gc2Fm ZV9jb2x1bW4oJ3RhZ19pZCcsIFNNRF9UQUdVLCAidGFnX2lkIElOICgnIi5qb2luKCInLCci LCAkc21kX3RhZ19pZCkuIicpIEFORCB0eXBlPSckc21kX3RhZ190eXBlJyIpOwoKCSR0b19k ZWwgPSAkc21kX3RhZ19pZDsKCS8vIFByb3RlY3QgdXNlZCBhbmQgY2hpbGQgdGFncyBpZiBy ZXF1aXJlZAoJaWYgKCRkZWx1ID09IDApIHsKCQkkdG9fZGVsID0gYXJyYXlfZGlmZigkc21k X3RhZ19pZCwgJHdpdGhfY2hpbGQsICR1c2VkX3RhZ3MpOwoJCWZvcmVhY2ggKGFycmF5X21l cmdlKCR3aXRoX2NoaWxkLCAkdXNlZF90YWdzKSBhcyAkZGVsaWQpIHsKCQkJJG5vdG9rW10g PSAkc21kX3RhZ19uYW1lW2FycmF5X3NlYXJjaCgkZGVsaWQsICRzbWRfdGFnX2lkKV07CgkJ fQoJfQoKCSRvcnBoYW5zID0gYXJyYXkoKTsKCWlmICgkZGVsdCkgewoJCS8vIEFkZCBjaGls ZCB0YWdzIGlmIHRoZXkgYXJlIHRvIGJlIGRlbGV0ZWQKCQkkaWRzID0gJHRvX2RlbDsKCQlm b3JlYWNoICgkdG9fZGVsIGFzICRkZWxpZCkgewoJCQkkcm93ID0gc2FmZV9yb3coJyonLCBT TURfVEFHLCAiaWQgPSAnJGRlbGlkJyBBTkQgdHlwZT0nJHNtZF90YWdfdHlwZSciKTsKCQkJ JGlkcyA9IGFycmF5X21lcmdlKCRpZHMsIHNhZmVfY29sdW1uKCdpZCcsIFNNRF9UQUcsICJ0 eXBlID0gJyRzbWRfdGFnX3R5cGUnIEFORCAobGZ0IEJFVFdFRU4gIi4kcm93WydsZnQnXS4i IEFORCAiLiRyb3dbJ3JndCddLiIpIikpOwoJCX0KCQkkdG9fZGVsID0gYXJyYXlfdW5pcXVl KCRpZHMpOwoJCSRtc2dFeHRyYSA9IGdUeHQoJ3NtZF90YWdfY2hpbGRyZW5fYW5kJyk7Cgl9 IGVsc2UgewoJCS8vIENvbGxlY3QgdGhlIHBvdGVudGlhbCBvcnBoYW5zIGFuZCBwcmVwYXJl IHRvIHByb21vdGUgdGhlbQoJCWZvcmVhY2ggKCR0b19kZWwgYXMgJGRlbGlkKSB7CgkJCSRj aGlsZHJlbiA9IHNhZmVfY29sdW1uKCdpZCcsIFNNRF9UQUcsICJwYXJlbnQgPSAnIi4kc21k X3RhZ19uYW1lW2FycmF5X3NlYXJjaCgkZGVsaWQsICRzbWRfdGFnX2lkKV0uIicgQU5EIHR5 cGU9JyRzbWRfdGFnX3R5cGUnIik7CgkJCSRjaGlsZHJlbiA9IGFycmF5X2RpZmYoJGNoaWxk cmVuLCAkdG9fZGVsKTsKCQkJaWYgKCRjaGlsZHJlbikgewoJCQkJJG9ycGhhbnMgKz0gJGNo aWxkcmVuOwoJCQl9CgkJfQoJfQoKCS8vIEV2ZXJ5dGhpbmcncyBwcmVwcGVkOiBiZWdpbiB0 aGUgZGVsZXRpb24KCSRudW1kZWwgPSBjb3VudCgkdG9fZGVsKTsKCgkvLyBNYWtlIGEgbm90 ZSBvZiB3aGF0IHdlJ3JlIGFib3V0IHRvIGRvIGZvciB0aGUgcmVwb3J0CgkkYWxsX2RlbHMg PSBzYWZlX3Jvd3MoJ2lkLCBuYW1lJywgU01EX1RBRywgImlkIElOICgiIC4gam9pbignLCcs IHF1b3RlX2xpc3QoJHRvX2RlbCkpIC4gIikiKTsKCSRhbGxfbmFtZXMgPSBhcnJheSgpOwoJ Zm9yZWFjaCAoJGFsbF9kZWxzIGFzICRhbmFtZSkgewoJCSRhbGxfbmFtZXNbJGFuYW1lWydp ZCddXSA9ICRhbmFtZVsnbmFtZSddOwoJfQoJZm9yZWFjaCAoJHRvX2RlbCBhcyAkZGVsaWQp IHsKCQlpZiAoaXNzZXQoJGFsbF9uYW1lc1skZGVsaWRdKSkgewoJCQkkb2tbXSA9ICRhbGxf bmFtZXNbJGRlbGlkXTsKCQl9Cgl9CgoJLy8gRmlyc3QgZ2V0IHJpZCBvZiB0aGUgZGlyZWN0 IHRhZ3MKCSR3aGVyZSA9ICIgSU4gKCciLmpvaW4oIicsJyIsICR0b19kZWwpLiInKSI7Cgkk cmV0ID0gc2FmZV9kZWxldGUoU01EX1RBRywgJ2lkJy4kd2hlcmUuIiBBTkQgdHlwZT0nJHNt ZF90YWdfdHlwZSciKTsKCWlmICgkcmV0KSB7CgkJaWYgKCEkZGVsdCkgewoJCQkvLyBQcm9t b3RlIHRoZSBvcnBoYW5zIGlmIHJlcXVpcmVkCgkJCSRvcnBobGlzdCA9IHNhZmVfY29sdW1u KCduYW1lJywgU01EX1RBRywgInR5cGU9JyRzbWRfdGFnX3R5cGUnIEFORCBpZCBJTiAoJyIu am9pbigiJywnIiwgJG9ycGhhbnMpLiInKSIpOwoJCQlzYWZlX3VwZGF0ZShTTURfVEFHLCAi cGFyZW50PSdyb290JyIsICJ0eXBlPSckc21kX3RhZ190eXBlJyBBTkQgaWQgSU4gKCciLmpv aW4oIicsJyIsICRvcnBoYW5zKS4iJykiKTsKCQl9CgkJLy8gUmVtb3ZlIHJlZmVyZW5jZXMg dG8gYW55IGRlbGV0ZWQgdGFncyBpbiBhcnRpY2xlcyBhbmQgbGlua2VkIGNhdGVnb3JpZXMK CQlzYWZlX2RlbGV0ZShTTURfVEFHVSwgJ3RhZ19pZCcuJHdoZXJlLiIgQU5EIHR5cGU9JyRz bWRfdGFnX3R5cGUnIik7CgkJc2FmZV9kZWxldGUoU01EX1RBR0MsICd0YWdfaWQnLiR3aGVy ZSk7CgoJCS8vIEZvcmNlIGFsbCBzbWRfdGFnXyBib3hlcyBjbGVhciBpbiB0aGUgZm9ybQoJ CSRfUE9TVFsnc21kX3RhZ19pZCddID0gJF9QT1NUWydzbWRfdGFnX29uYW1lJ10gPSAkX1BP U1RbJ3NtZF90YWdfbmFtZSddID0gJF9QT1NUWydzbWRfdGFnX3RpdGxlJ10gPSAkX1BPU1Rb J3NtZF90YWdfcGFyZW50J10gPSAnJzsKCX0KCgkvLyBCdWlsZCBhbmQgZ2VuZXJhdGUgdGhl IGZpbmFsIHJlcG9ydAoJaWYgKCRudW1kZWwgPiAxKSB7CgkJJG1lc3NhZ2UgPSBnVHh0KCdz bWRfdGFnX211bHRpX2RlbGV0ZScsIGFycmF5KCd7bnVtYmVyfScgPT4gJG51bWRlbCkpOwoJ CWlmICgkb2spIHsKCQkJJHJlcG9ydCA9IGdUeHQoJ3NtZF90YWdfZGVsZXRlZF9sYmwnKS5q b2luKCcsICcsICRvaykuJy4nOwoJCX0KCQlpZiAoJG5vdG9rKSB7CgkJCSRyZXBvcnQgLj0g YnIuYnIuZ1R4dCgnc21kX3RhZ19lcnJfaW5fdXNlX2xibCcpLmpvaW4oJywgJywgJG5vdG9r KTsKCQl9CgkJaWYgKCRvcnBoYW5zKSB7CgkJCSRyZXBvcnQgLj0gYnIuYnIuZ1R4dCgnc21k X3RhZ19lcnJfb3JwaGFuZWRfbGJsJykuam9pbignLCAnLCAkb3JwaGxpc3QpOwoJCX0KCX0g ZWxzZSB7CgkJaWYgKCRvaykgewoJCQkkbWVzc2FnZSA9IGdUeHQoJ3NtZF90YWdfZGVsZXRl ZCcsIGFycmF5KCd7dHlwZX0nID0+IHVjZmlyc3QoJHNtZF90YWdfdHlwZSksICd7bmFtZX0n ID0+IGpvaW4oJywgJywgJG9rKSkpLiRtc2dFeHRyYTsKCQl9IGVsc2UgaWYgKCRub3Rvaykg ewoJCQkkbWVzc2FnZSA9IGdUeHQoJ3NtZF90YWdfaW5fdXNlJywgYXJyYXkoJ3t0eXBlfScg PT4gdWNmaXJzdCgkc21kX3RhZ190eXBlKSwgJ3tuYW1lfScgPT4gam9pbignLCAnLCAkbm90 b2spKSk7CgkJfQoJfQoKCXJlYnVpbGRfdHJlZV9mdWxsKCRzbWRfdGFnX3R5cGUsIFNNRF9U QUcpOwoKCXNtZF90YWdzX21hbmFnZSgkbWVzc2FnZSwgJHJlcG9ydCk7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQovLyBNYWtlIHRoZSBwYXNzZWQgdGFnIGEgY2hpbGQgb2Yg dGhlIGdpdmVuIHBhcmVudCAoaWYgcG9zc2libGUpCmZ1bmN0aW9uIHNtZF90YWdfYXNzaWdu X3BhcmVudCgkcGFyaWQsICRjaGlsZGlkLCAkdGFnX3R5cGUsICRjaGlsZG5hbSwgJHJlYnVp bGQgPSB0cnVlKSB7Cglhc3NlcnRfaW50KCRjaGlsZGlkKTsKCWFzc2VydF9pbnQoJHBhcmlk KTsKCSRzdGF0dXMgPSBhcnJheSgpOwoJaWYgKCRjaGlsZGlkID09ICRwYXJpZCkgewoJCSRz dGF0dXNbXSA9ICdlcnJfc2VsZl9wYXJlbnQnOwoJfSBlbHNlIHsKCQkkZXhpc3RzID0gc2Fm ZV9maWVsZCgnbmFtZScsIFNNRF9UQUcsICJpZCA9ICciLmRvU2xhc2goJHBhcmlkKS4iJyBB TkQgdHlwZSA9ICciLmRvU2xhc2goJHRhZ190eXBlKS4iJyIpOwoJCSRleGlzdHMgPSAoJGV4 aXN0cyA9PSAnJykgPyAncm9vdCcgOiAkZXhpc3RzOwoJCSRyZXQgPSBzYWZlX3VwZGF0ZShT TURfVEFHLCAicGFyZW50PSciLmRvU2xhc2goJGV4aXN0cykuIiciLCAiaWQ9JyIuJGNoaWxk aWQuIiciKTsKCQlpZiAoJHJlYnVpbGQpIHsKCQkJLy8gRG9lc24ndCBodXJ0IHRvIHJlYnVp bGQgaXQgYW55d2F5LCBldmVuIGlmIHRoZSBhc3NpZ25tZW50IGZhaWxzCgkJCXJlYnVpbGRf dHJlZV9mdWxsKCR0YWdfdHlwZSwgU01EX1RBRyk7CgkJfQoJCWlmICgkcmV0KSB7CgkJCSRz dGF0dXNbXSA9ICdwYXJlbnRfbGlua2VkJzsKCQl9IGVsc2UgewoJCQkkc3RhdHVzW10gPSAn cGFyZW50X25vdF9saW5rZWQnOwoJCX0KCX0KCglyZXR1cm4gJHN0YXR1czsKfQoKCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBBc3NpZ24gYSBwYXJlbnQgdG8gYSBidW5jaCBv ZiB0YWdzIGF0IG9uY2UKLy8gQ2hlYXRpbmcgY29kZSByZWFsbHk7IGp1c3QgY2FsbHMgdGhl IHNtZF90YWdfYXNzaWduX3BhcmVudCBmb3IgZWFjaCB0YWcgYnV0IGRlbGF5cyB0aGUKLy8g dHJlZSByZWJ1aWxkIHVudGlsIHRoZSBlbmQgZm9yIHNwZWVkCmZ1bmN0aW9uIHNtZF90YWdz X211bHRpX3NldF9wYXJlbnQoKSB7CglnbG9iYWwgJHNtZF90YWdfcHJlZnM7CglleHRyYWN0 KGRvU2xhc2goZ3BzYShhcnJheSgnc21kX3RhZ190eXBlJywgJ3NtZF90YWdfaWQnLCAnc21k X3RhZ19uYW1lJywgJ3NtZF90YWdfZXh0cmEnKSkpKTsKCgkkbWVzc2FnZSA9ICRyZXBvcnQg PSAnJzsKCSRvayA9ICRub3RvayA9IGFycmF5KCk7CgkkdGhlTGlzdCA9IGFycmF5X2NvbWJp bmUoZG9fbGlzdCgkc21kX3RhZ19pZCksIGRvX2xpc3QoJHNtZF90YWdfbmFtZSkpOwoKCWZv cmVhY2ggKCR0aGVMaXN0IGFzICRpZHggPT4gJG5hbWUpIHsKCQkkc3RhdHVzID0gc21kX3Rh Z19hc3NpZ25fcGFyZW50KCRzbWRfdGFnX2V4dHJhLCAkaWR4LCAkc21kX3RhZ190eXBlLCAk bmFtZSwgZmFsc2UpOwoJCWlmIChpbl9hcnJheSgncGFyZW50X2xpbmtlZCcsICRzdGF0dXMp KSB7CgkJCSRva1tdID0gJG5hbWU7CgkJfSBlbHNlIHsKCQkJaWYgKCgkcG9zID0gYXJyYXlf c2VhcmNoKCdwYXJlbnRfbm90X2xpbmtlZCcsICRzdGF0dXMpKSAhPT0gZmFsc2UpIHsKCQkJ CXVuc2V0KCRzdGF0dXNbJHBvc10pOwoJCQl9CgkJCSRub3Rva1skaWR4XSA9ICRzdGF0dXM7 CgkJfQoJfQoKCWlmICgkb2spIHsKCQkkcGFybmFtID0gc2FmZV9maWVsZCgnbmFtZScsIFNN RF9UQUcsICJpZD0nIi5kb1NsYXNoKCRzbWRfdGFnX2V4dHJhKS4iJyIpOwoJCSRwYXJuYW0g PSAoJHBhcm5hbSA9PSAnJykgPyAncm9vdCcgOiAkcGFybmFtIDsKCQkkcmVwb3J0ID0gZ1R4 dCgnc21kX3RhZ19wYXJlbnRfbGlua2VkX2xibCcsIGFycmF5KCd7cGFyZW50fScgPT4gJHBh cm5hbSkpLmpvaW4oJywgJywgJG9rKS4nLic7Cgl9CglpZiAoJG5vdG9rKSB7CgkJJG1zZ3Mg PSBhcnJheSgpOwoJCWZvcmVhY2ggKCRub3RvayBhcyAkaWR4ID0+ICRyZWFzb25zKSB7CgkJ CSRyc24gPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkcmVhc29ucyBhcyAkcmVhc29uKSB7CgkJ CQkkcnNuW10gPSBnVHh0KCRyZWFzb24pOwoJCQl9CgkJCSRtc2dzW10gPSAkdGhlTGlzdFsk aWR4XS5zcC4nKCcuam9pbignLycsICRyc24pLicpJzsKCQl9CgkJJHJlcG9ydCAuPSBici5i ci5nVHh0KCdzbWRfdGFnX25vdF9wYXJlbnRfbGlua2VkX2xibCcpLmpvaW4oJywgJywgJG1z Z3MpOwoJfQoKCS8vIFJlYnVpbGQgdGhlIHRyZWUgbm93IGFsbCB0aGUgbWFuaXB1bGF0aW9u IGhhcyBiZWVuIGRvbmUKCXJlYnVpbGRfdHJlZV9mdWxsKCRzbWRfdGFnX3R5cGUsIFNNRF9U QUcpOwoKCXNtZF90YWdzX21hbmFnZSgkbWVzc2FnZSwgJHJlcG9ydCk7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQovLyBMaW5rcyB0aGUgcGFzc2VkIHRhZyB3aXRoIHRoZSBn aXZlbiBjYXRlZ29yeQpmdW5jdGlvbiBzbWRfdGFnX2Fzc2lnbl9jYXRlZ29yeSgkcGFybmFt LCAkY2hpbGRpZCwgJGNhdF90eXBlLCAkY2hpbGRuYW0pIHsKCWFzc2VydF9pbnQoJGNoaWxk aWQpOwoJJHN0YXR1cyA9IGFycmF5KCk7CgoJLy8gVW5saW5rIGlmIHBhcmVudCBjYXRlZ29y eSBuYW1lIGlzIGVtcHR5CglpZiAoJHBhcm5hbSA9PSAnJykgewoJCXNhZmVfZGVsZXRlKFNN RF9UQUdDLCAidGFnX2lkPSciLmRvU2xhc2goJGNoaWxkaWQpLiInIik7CgkJJHN0YXR1c1td ID0gJ2NhdGVnb3J5X3VubGlua2VkJzsKCX0gZWxzZSB7CgkJJGV4aXN0cyA9IHNhZmVfZmll bGQoJ2lkJywgJ3R4cF9jYXRlZ29yeScsICJuYW1lID0gJyIuZG9TbGFzaCgkcGFybmFtKS4i JyBBTkQgdHlwZSA9ICciLmRvU2xhc2goJGNhdF90eXBlKS4iJyIpOwoJCWlmICgkZXhpc3Rz KSB7CgkJCXNhZmVfZGVsZXRlKFNNRF9UQUdDLCAidGFnX2lkPSciLmRvU2xhc2goJGNoaWxk aWQpLiInIik7CgkJCSRyZXQgPSBzYWZlX2luc2VydChTTURfVEFHQywgImNhdF9pZD0nIi5k b1NsYXNoKCRleGlzdHMpLiInLCB0YWdfaWQgPSAnIi5kb1NsYXNoKCRjaGlsZGlkKS4iJyIp OwoJCQlpZiAoJHJldCkgewoJCQkJJHN0YXR1c1tdID0gJ2NhdGVnb3J5X2xpbmtlZCc7CgkJ CX0gZWxzZSB7CgkJCQkkc3RhdHVzW10gPSAnY2F0ZWdvcnlfdW5saW5rZWQnOwoJCQl9CgkJ fQoJfQoJcmV0dXJuICRzdGF0dXM7Cn0KCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Ly8gQXNzaWduIGEgYnVuY2ggb2YgdGFncyB0byBhIGNhdGVnb3J5Ci8vIENoZWF0aW5nbHkg Y2FsbHMgc21kX3RhZ19hc3NpZ25fY2F0ZWdvcnkgbXVsdGlwbGUgdGltZXMKZnVuY3Rpb24g c21kX3RhZ3NfbXVsdGlfY2F0bGluaygpIHsKCWdsb2JhbCAkc21kX3RhZ19wcmVmczsKCWV4 dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdzbWRfdGFnX3R5cGUnLCAnc21kX3RhZ19pZCcs ICdzbWRfdGFnX25hbWUnLCAnc21kX3RhZ19leHRyYScpKSkpOwoKCSRtZXNzYWdlID0gJHJl cG9ydCA9ICcnOwoJJG9rID0gJG5vdG9rID0gYXJyYXkoKTsKCgkkdGhlTGlzdCA9IGFycmF5 X2NvbWJpbmUoZG9fbGlzdCgkc21kX3RhZ19pZCksIGRvX2xpc3QoJHNtZF90YWdfbmFtZSkp OwoKCS8vIEFkZCBpbiBhbnkgY2hpbGQgZWxlbWVudHMgc2luY2UgdGhleSBhbGwgbmVlZCB0 byB0YWtlIHRoZSBjYXRlZ29yeSB0b28KCWZvcmVhY2ggKCR0aGVMaXN0IGFzICRpZHggPT4g JG5hbWUpIHsKCQkkcm93ID0gc2FmZV9yb3coJyonLCBTTURfVEFHLCAiaWQ9JyIuZG9TbGFz aCgkaWR4KS4iJyIpOwoJCSRycyA9IHNhZmVfcm93cygnaWQsIG5hbWUnLCBTTURfVEFHLCAi dHlwZSA9ICciLmRvU2xhc2goJHNtZF90YWdfdHlwZSkuIicgQU5EIChsZnQgQkVUV0VFTiAi IC4kcm93WydsZnQnXS4gIiBBTkQgIiAuJHJvd1sncmd0J10uICIpIik7CgkJaWYgKCRycykg ewoJCQlmb3JlYWNoICgkcnMgYXMgJHJlYykgewoJCQkJJHRoZUxpc3RbJHJlY1snaWQnXV0g PSAkcmVjWyduYW1lJ107CgkJCX0KCQl9Cgl9CgoJZm9yZWFjaCAoJHRoZUxpc3QgYXMgJGlk eCA9PiAkbmFtZSkgewoJCSRzdGF0dXMgPSBzbWRfdGFnX2Fzc2lnbl9jYXRlZ29yeSgkc21k X3RhZ19leHRyYSwgJGlkeCwgJHNtZF90YWdfdHlwZSwgJG5hbWUpOwoJCWlmIChpbl9hcnJh eSgnY2F0ZWdvcnlfbGlua2VkJywgJHN0YXR1cykpIHsKCQkJJG9rW10gPSAkbmFtZTsKCQl9 IGVsc2VpZiAoaW5fYXJyYXkoJ2NhdGVnb3J5X3VubGlua2VkJywgJHN0YXR1cykpIHsKCQkJ JG5vdG9rWyRpZHhdID0gJHN0YXR1czsKCQl9Cgl9CgoJaWYgKCRvaykgewoJCSRyZXBvcnQg PSBnVHh0KCdzbWRfdGFnX2NhdGVnb3J5X2xpbmtlZF9sYmwnLCBhcnJheSgne2NhdGVnb3J5 fScgPT4gJHNtZF90YWdfZXh0cmEpKS5qb2luKCcsICcsICRvaykuJy4nOwoJfQoJaWYgKCRu b3RvaykgewoJCSRtc2dzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkbm90b2sgYXMgJGlkeCA9 PiAkcmVhc29ucykgewoJCQkkbXNnc1tdID0gJHRoZUxpc3RbJGlkeF07CgkJfQoJCSRyZXBv cnQgLj0gYnIuYnIuZ1R4dCgnc21kX3RhZ19jYXRlZ29yeV91bmxpbmtlZF9sYmwnKS5qb2lu KCcsICcsICRtc2dzKTsKCX0KCglzbWRfdGFnc19tYW5hZ2UoJG1lc3NhZ2UsICRyZXBvcnQp Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF90YWdzX3NhdmVfcGFuZV9zdGF0ZSgpIHsK CSRwYW5lcyA9IGFycmF5KCdzbWRfdGFnX2ZpbHRlcnMnKTsKCSRwYW5lID0gZ3BzKCdwYW5l Jyk7CglpZiAoaW5fYXJyYXkoJHBhbmUsICRwYW5lcykpCgl7CgkJc2V0X3ByZWYoInBhbmVf eyRwYW5lfV92aXNpYmxlIiwgKGdwcygndmlzaWJsZScpID09ICd0cnVlJyA/ICcxJyA6ICcw JyksICdzbWRfdGFncycsIFBSRUZfSElEREVOLCAneWVzbm9yYWRpbycsIDAsIFBSRUZfUFJJ VkFURSk7CgkJc2VuZF94bWxfcmVzcG9uc2UoKTsKCX0gZWxzZSB7CgkJc2VuZF94bWxfcmVz cG9uc2UoYXJyYXkoJ2h0dHAtc3RhdHVzJyA9PiAnNDAwIEJhZCBSZXF1ZXN0JykpOwoJfQp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQWxsb3cgdGFncyB0byBiZSBpbXBv cnRlZCBmcm9tIG90aGVyIHRhZ2dpbmcgLyB1bmxpbWl0ZWQgY2F0cyBwbHVnaW5zLCBvciB0 eHAgZmllbGRzCmZ1bmN0aW9uIHNtZF90YWdzX3N5bmMoJG1lc3NhZ2U9JycsICRyZXBvcnQ9 JycpIHsKCWdsb2JhbCAkc21kX3RhZ19wcmVmcywgJHBsdWdpbnMsICRzbWRfdGFnc19zdHls ZXM7CgoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ3NtZF90YWdzX3N5bmNfdHlwZScs ICdzbWRfdGFnc19zeW5jX2NmcycsICdzbWRfdGFnc19zeW5jX2Nmc19kZWxpbScsICdzbWRf dGFnc19zeW5jX3NlY3Rpb24nLCAnc21kX3RhZ3Nfc3luY19wYXJlbnQnLCAnc21kX3RhZ3Nf ZGVsZXRlX29yaWcnLCAnc21kX3RhZ3NfaW1wb3J0X3RhZ19wYXJlbnQnLCAnc21kX3RhZ3Nf aW1wb3J0X2NhdF9wYXJlbnQnLCAnc21kX3RhZ3NfaW1wb3J0X2ZvcmNlX3BhcmVudCcsICdz bWRfdGFnc19pbXBvcnRfZm9yY2VfY2F0JywgJ3NtZF90YWdzX2RvX2ltcG9ydCcpKSkpOwoK CSRjdHJscyA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3BfbGlua2NhdCcs ICdzbWRfdGFnX3RfZW5yZXAnKSwgMSk7CgkkY2xpbmsgPSAkY3RybHNbJ3NtZF90YWdfcF9s aW5rY2F0J11bJ3ZhbCddOwoJJHNob3dyZXAgPSAkcmVwb3J0ICYmICRjdHJsc1snc21kX3Rh Z190X2VucmVwJ11bJ3ZhbCddOwoKCXBhZ2V0b3AoZ1R4dCgnc21kX3RhZ19zeW5jX2xibCcp LCRtZXNzYWdlKTsKCWV4dHJhY3Qoc21kX3RhZ3NfcHJlZnNfYnV0dG9ucygpKTsKCgkkcGx1 Z190dCA9IChpc19hcnJheSgkcGx1Z2lucykgJiYgaW5fYXJyYXkoJ3RydV90YWdzJywkcGx1 Z2lucykpOwoJJHBsdWdfdWMgPSAoaXNfYXJyYXkoJHBsdWdpbnMpICYmIGluX2FycmF5KCdy c3NfdW5saW1pdGVkX2NhdGVnb3JpZXMnLCRwbHVnaW5zKSk7CgoJLy8gUHJlZnMgY2hlY2sK CSRwcmVmc2V0ID0gc21kX3RhZ3NfcHJlZl9nZXQoYXJyYXlfa2V5cygkc21kX3RhZ19wcmVm c1swXSkpOwoJJG51bVJlcVByZWZzID0gY291bnQoJHNtZF90YWdfcHJlZnNbMF0pOwoJJG51 bVByZWZzID0gY291bnQoJHByZWZzZXQpOwoKCS8vIFBlcmZvcm0gdGhlIGltcG9ydCB2aWEg QUpBWCBkdWUgdG8gdGhlIHF1YW50aXR5IG9mIHRhZ3MgdGhhdCBtYXkgYmUgaW52b2x2ZWQK CWlmICgkc21kX3RhZ3NfZG9faW1wb3J0KSB7CgkJJGltcG9wdHMgPSBhcnJheSgKCQkJJ3Nt ZF90YWdzX3N5bmNfdHlwZScgPT4gJHNtZF90YWdzX3N5bmNfdHlwZSwKCQkJJ3NtZF90YWdz X3N5bmNfY2ZzJyA9PiAkc21kX3RhZ3Nfc3luY19jZnMsCgkJCSdzbWRfdGFnc19zeW5jX2Nm c19kZWxpbScgPT4gJHNtZF90YWdzX3N5bmNfY2ZzX2RlbGltLAoJCQknc21kX3RhZ3Nfc3lu Y19zZWN0aW9uJyA9PiAkc21kX3RhZ3Nfc3luY19zZWN0aW9uLAoJCQknc21kX3RhZ3Nfc3lu Y19wYXJlbnQnID0+ICRzbWRfdGFnc19zeW5jX3BhcmVudCwKCQkJJ3NtZF90YWdzX2RlbGV0 ZV9vcmlnJyA9PiAkc21kX3RhZ3NfZGVsZXRlX29yaWcsCgkJCSdzbWRfdGFnc19pbXBvcnRf dGFnX3BhcmVudCcgPT4gJHNtZF90YWdzX2ltcG9ydF90YWdfcGFyZW50LAoJCQknc21kX3Rh Z3NfaW1wb3J0X2NhdF9wYXJlbnQnID0+ICRzbWRfdGFnc19pbXBvcnRfY2F0X3BhcmVudCwK CQkJJ3NtZF90YWdzX2ltcG9ydF9mb3JjZV9wYXJlbnQnID0+ICRzbWRfdGFnc19pbXBvcnRf Zm9yY2VfcGFyZW50LAoJCQknc21kX3RhZ3NfaW1wb3J0X2ZvcmNlX2NhdCcgPT4gJHNtZF90 YWdzX2ltcG9ydF9mb3JjZV9jYXQsCgkJKTsKCQlzbWRfdGFnc19pbXBvcnQoJGltcG9wdHMp OwoJfQoKCSRxcyA9IGFycmF5KAoJCSJldmVudCIgPT4gInNtZF90YWdzIiwKCSk7CgoJJHFz VmFycyA9ICJpbmRleC5waHAiLmpvaW5fcXMoJHFzKTsKCgkvLyBJbmplY3Qgc3R5bGVzCgll Y2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicgLiAkc21kX3RhZ3Nfc3R5bGVzWydyZXBv cnQnXSAuICc8L3N0eWxlPic7CgllY2hvIHNjcmlwdF9qcyg8PDxFT1MKalF1ZXJ5KGZ1bmN0 aW9uKCkgewoJZnVuY3Rpb24gc21kX3RhZ1Jlc3RyaWN0KHR5cCkgewoJCWdyYWJjYXQgPSBq UXVlcnkoIiNzbWRfdGFnc19pbXBvcnRfY2F0X3BhcmVudCBvcHRpb246c2VsZWN0ZWQiKS52 YWwoKTsKCQl2YXIgc21kX2xpbmtfbW9kZSA9ICgoJ3skY2xpbmt9Jz09JzAnKSA/ICcyJyA6 ICgoZ3JhYmNhdD09JycpID8gJzInIDogJycpKTsKCgkJaWYgKGdyYWJjYXQgIT0gInVuZGVm aW5lZCIgfHwgZ3JhYmNhdCAhPSAnJykgewoJCQlqUXVlcnkucG9zdCgneyRxc1ZhcnN9Jywg eyBzdGVwOiAic21kX3RhZ19wYXJlbnRsaXN0IiwgbmFtZTogJ3NtZF90YWdfcGFyZW50Jywg dHlwZTogdHlwLCBjYXQ6IGdyYWJjYXQsIGxpc3Rvbmx5OiB0cnVlLCBodG1sX2lkOiAnc21k X3RhZ3NfaW1wb3J0X3RhZ19wYXJlbnQnLCBsaW5rX21vZGU6IHNtZF9saW5rX21vZGUsIF90 eHBfdG9rZW46IHRleHRwYXR0ZXJuLl90eHBfdG9rZW4gfSwKCQkJCWZ1bmN0aW9uKGRhdGEp IHsKCQkJCQlqUXVlcnkoIiNzbWRfdGFnc19pbXBvcnRfdGFnX3BhcmVudF9ob2xkZXIiKS5o dG1sKGRhdGEpOwoJCQkJCWpRdWVyeSgiI3NtZF90YWdzX2ltcG9ydF90YWdfcGFyZW50X2hv bGRlciBzZWxlY3Qgb3B0aW9uW3ZhbHVlPSd7JHNtZF90YWdzX2ltcG9ydF90YWdfcGFyZW50 fSddIikucHJvcCgic2VsZWN0ZWQiLCB0cnVlKTsKCQkJCX0KCQkJKTsKCQl9Cgl9CgoJc21k X3RhZ1Jlc3RyaWN0KCdhcnRpY2xlJyk7CgoJaWYgKCd7JGNsaW5rfScgPT0gJzEnKSB7CgkJ alF1ZXJ5KCIjc21kX3RhZ3NfaW1wb3J0X2NhdF9wYXJlbnQiKS5jaGFuZ2UoZnVuY3Rpb24o KSB7CgkJCXNtZF90YWdSZXN0cmljdCgnYXJ0aWNsZScpOwoJCX0pOwoJfQoJaWYgKCd7JHNo b3dyZXB9JyA9PSAnMScpIHsKCQlzbWRfdGFnc190b2dnbGVfcmVwb3J0KCk7Cgl9CgoJalF1 ZXJ5KCdpbnB1dFtuYW1lPSJzbWRfdGFnc19zeW5jX3R5cGUiXScpLmNoYW5nZShmdW5jdGlv bigpIHsKCQlpZiAoalF1ZXJ5KHRoaXMgKyAnOmNoZWNrZWQnKS52YWwoKSA9PSAnMycpIHsK CQkJalF1ZXJ5KCcuc21kX3RhZ3Nfc3luY190eHAnKS5zaG93KCk7CgkJfSBlbHNlIHsKCQkJ alF1ZXJ5KCcuc21kX3RhZ3Nfc3luY190eHAnKS5oaWRlKCk7CgkJfQoJfSkuY2hhbmdlKCk7 Cn0pOwpmdW5jdGlvbiBzbWRfdGFnc190b2dnbGVfcmVwb3J0KCkgewoJalF1ZXJ5KCIjc21k X3RhZ19yZXBvcnRfcGFuZSIpLnRvZ2dsZSgnbm9ybWFsJyk7Cn0KRU9TCgkpOwoKCS8vIFRo ZSB0YWcgc3luYyBwcmVmZXJlbmNlcwoJaWYgKHNtZF90YWdzX3RhYmxlX2V4aXN0KCkpIHsK CQkvLyBUYWJsZXMgaW5zdGFsbGVkCgkJaWYgKCRudW1QcmVmcyA9PSAkbnVtUmVxUHJlZnMp IHsKCQkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZAoJCQllY2hvIGhlZChnVHh0KCdzbWRfdGFn X3N5bmNfbGJsJykuc3AuJGJ0bkhlbHAsIDEpOwoJCQllY2hvIG4uICc8ZGl2IGNsYXNzPSJ0 eHAtY29udHJvbC1wYW5lbCI+JwoJCQkJLm4uIGdyYWYoCgkJCQkJCSRidG5QcmVmcwoJCQkJ CQkubi4kYnRuTWFuYWdlCgkJCQkJLCAnIGNsYXNzPSJ0eHAtYnV0dG9ucyInKQoJCQkJLm4u ICc8L2Rpdj4nOwoKCQkJZWNobyBuLiAnPGRpdiBpZD0ic21kX3RhZ19yZXBvcnRfcGFuZSI+ JwoJCQkJLm4uICc8ZGl2PicKCQkJCS5uLiAnPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9 InB1Ymxpc2ggc21kX3RhZ3NfYnRuX29rIiB2YWx1ZT0iJywgZ1R4dCgnb2snKSwgJyIgb25j bGljaz0ic21kX3RhZ3NfdG9nZ2xlX3JlcG9ydCgpOyIgLz4nCgkJCQkubi4gJzxoMj4nLCBn VHh0KCdzbWRfdGFnX3JlcG9ydF9sYmwnKSwgJzwvaDI+JwoJCQkJLiRyZXBvcnQKCQkJCS5u LiAnPC9kaXY+JwoJCQkJLm4uICc8L2Rpdj4nCgkJCQkubi4gJzxmb3JtIG1ldGhvZD0icG9z dCIgaWQ9InNtZF9zeW5jaXQiIGFjdGlvbj0iP2V2ZW50PXNtZF90YWdzJnN0ZXA9c21kX3Rh Z3Nfc3luYyI+JwoJCQkJLm4uIHN0YXJ0VGFibGUoJycsICcnLCAndHhwLWxpc3QnKTsKCgkJ CSRsYmxTdHlsZSA9ICcgY2xhc3M9InByZWYtbGFiZWwiJzsKCgkJCWVjaG8gdHIodGRjcyho ZWQoZ1R4dCgnc21kX3RhZ19zeW5jX3BsdWdpbl9vcHRzJyksIDMsICcgY2xhc3M9InByZWYt aGVhZGluZyInKSwgNCkpOwoKCQkJZWNobyB0cigKCQkJCQl0ZGEoJzxsYWJlbD4nLmdUeHQo J3NtZF90YWdfc3luY190eXBlX2xibCcpLic8L2xhYmVsPicsICRsYmxTdHlsZSkKCQkJCQku dGRhKAoJCQkJCQkoKCRwbHVnX3R0KQoJCQkJCQkJPyByYWRpbygnc21kX3RhZ3Nfc3luY190 eXBlJywgMCwgKChlbXB0eSgkc21kX3RhZ3Nfc3luY190eXBlKSkgPyAxIDogKCRwbHVnX3R0 ID8gMSA6IDApICkpLmdUeHQoJ3NtZF90YWdfc3luY190eXBlMScpLicgJwoJCQkJCQkJOiAn JwoJCQkJCQkpCgkJCQkJCS4oKCRwbHVnX3VjKQoJCQkJCQkJPyByYWRpbygnc21kX3RhZ3Nf c3luY190eXBlJywgMSwgKCgkc21kX3RhZ3Nfc3luY190eXBlID09ICcxJykgPyAxIDogKCgk cGx1Z191YyAmJiAhJHBsdWdfdHQpID8gMSA6IDApICkpLmdUeHQoJ3NtZF90YWdfc3luY190 eXBlMicpLicgJwoJCQkJCQkJOiAnJwoJCQkJCQkpCgkJCQkJCS4gcmFkaW8oJ3NtZF90YWdz X3N5bmNfdHlwZScsIDIsICgoJHNtZF90YWdzX3N5bmNfdHlwZSA9PSAnMicpID8gMSA6ICgo ISRwbHVnX3VjICYmICEkcGx1Z190dCkgPyAxIDogMCkgKSkuZ1R4dCgnc21kX3RhZ19zeW5j X3R5cGUzJykKCQkJCQkJLiByYWRpbygnc21kX3RhZ3Nfc3luY190eXBlJywgMywgKCgkc21k X3RhZ3Nfc3luY190eXBlID09ICczJykgPyAxIDogKCghJHBsdWdfdWMgJiYgISRwbHVnX3R0 ICYmICEkc21kX3RhZ3Nfc3luY190eXBlID09ICcyJykgPyAxIDogMCkgKSkuZ1R4dCgnc21k X3RhZ19zeW5jX3R5cGU0JykKCQkJCQksICcgY2xhc3M9InByZWYtdmFsdWUiJykKCQkJCSk7 CgoJCQkvLyBUeHAgY2F0ZWdvcnkgLyBjdXN0b21fZmllbGQgaW1wb3J0IG9wdGlvbnMKCQkJ JGNmcyA9IGdldEN1c3RvbUZpZWxkcygpOwoKCQkJZWNobyAoJGNmcykgPyB0cigKCQkJCXRk YSgKCQkJCQknPGxhYmVsPicuZ1R4dCgnc21kX3RhZ19zeW5jX2Nmc19sYmwnKS4nPC9sYWJl bD4nLCAkbGJsU3R5bGUKCQkJCQkpCgkJCQkuIHRhZyhzZWxlY3RJbnB1dCgnc21kX3RhZ3Nf c3luY19jZnMnLCAkY2ZzLCAkc21kX3RhZ3Nfc3luY19jZnMsIHRydWUpLCAndGQnLCAnIGNs YXNzPSJwcmVmLXZhbHVlIicpCgkJCSwgJyBjbGFzcz0ic21kX3RhZ3Nfc3luY190eHAiJykg OiAnJzsKCgkJCWVjaG8gKCRjZnMpID8gdHIoCgkJCQl0ZGEoCgkJCQkJJzxsYWJlbD4nLmdU eHQoJ3NtZF90YWdfc3luY19jZnNfZGVsaW1fbGJsJykuJzwvbGFiZWw+JywgJGxibFN0eWxl CgkJCQkJKQoJCQkJLiB0YWcoZklucHV0KCd0ZXh0JywgJ3NtZF90YWdzX3N5bmNfY2ZzX2Rl bGltJywgKCRzbWRfdGFnc19zeW5jX2Nmc19kZWxpbSA/ICRzbWRfdGFnc19zeW5jX2Nmc19k ZWxpbSA6ICcsJyksICdpbnB1dC14c21hbGwnLCAnJywgJycsIDQpLCAndGQnLCAnIGNsYXNz PSJwcmVmLXZhbHVlIicpCgkJCSwgJyBjbGFzcz0ic21kX3RhZ3Nfc3luY190eHAiJykgOiAn JzsKCgoJCQkvLyBTZWN0aW9uIGltcG9ydAoJCQkkcnMgPSBzYWZlX2NvbHVtbignbmFtZScs ICd0eHBfc2VjdGlvbicsICJuYW1lICE9ICdkZWZhdWx0JyIpOwoJCQlpZiAoJHJzKSB7CgkJ CQkkb3V0ID0gdGFnKHNlbGVjdElucHV0KCdzbWRfdGFnc19zeW5jX3NlY3Rpb24nLCAkcnMs ICRzbWRfdGFnc19zeW5jX3NlY3Rpb24sIHRydWUpLCAndGQnLCAnIGNsYXNzPSJwcmVmLXZh bHVlIicpOwoJCQl9IGVsc2UgewoJCQkJJG91dCA9IHRhZyhnVHh0KCdzbWRfdGFnX25vX3Nl Y3Rpb25zJyksICd0ZCcsICcgY2xhc3M9InByZWYtdmFsdWUiJyk7CgkJCX0KCgkJCWVjaG8g dHIodGRhKCc8bGFiZWwgZm9yPSJzbWRfdGFnc19zeW5jX3NlY3Rpb24iPicuZ1R4dCgnc21k X3RhZ19zeW5jX3NlY3Rpb25fbGJsJykuJzwvbGFiZWw+JywgJGxibFN0eWxlKSAuICRvdXQp OwoKCQkJLy8gU3RhcnQgYXQgcGFyZW50IGNhdGVnb3J5IChyc3NfdWMgb25seSkKCQkJLy8g VGhlIGxpc3QgaXMgcG9wdWxhdGVkIGFueXdheSBldmVuIGlmIHRoZSBwbHVnaW4gaXNuJ3Qg YWN0aXZlIGJlY2F1c2UgJHJzQ2F0cyBpcyB1c2VkIGxhdGVyCgkJCWlmICgkY2xpbmspIHsK CQkJCSRyc0NhdHMgPSBnZXRUcmVlKCdyb290JywgJ2FydGljbGUnKTsKCQkJCWlmICgkcnND YXRzKSB7CgkJCQkJJGNhdGxpc3QgPSB0YWcodHJlZVNlbGVjdElucHV0KCdzbWRfdGFnc19z eW5jX3BhcmVudCcsICRyc0NhdHMsICRzbWRfdGFnc19zeW5jX3BhcmVudCwgJ3NtZF90YWdz X3N5bmNfcGFyZW50JywgMzUpLigoJHBsdWdfdHQpID8gZ1R4dCgnc21kX3RhZ19yc3NfdWNf b25seScpIDogJycpLCAndGQnLCAnIGNsYXNzPSJwcmVmLXZhbHVlIicpOwoJCQkJfSBlbHNl IHsKCQkJCQkkY2F0bGlzdCA9IHRhZyhnVHh0KCdzbWRfdGFnX25vX3BhcmVudCcpLCAndGQn LCAnIGNsYXNzPSJwcmVmLXZhbHVlIicpOwoJCQkJfQoJCQkJZWNobyB0cih0ZGEoJzxsYWJl bCBmb3I9InNtZF90YWdzX3N5bmNfcGFyZW50Ij4nLmdUeHQoJ3NtZF90YWdfc3luY19wYXJl bnRfbGJsJykuJzwvbGFiZWw+JywgJGxibFN0eWxlKSAuICRjYXRsaXN0KTsKCQkJfQoKCQkJ Ly8gRGVsZXRlIG9yaWdpbmFsCgkJCWVjaG8gdHIoCgkJCQkJdGRhKCc8bGFiZWwgZm9yPSJz bWRfdGFnc19kZWxldGVfb3JpZyI+Jy5nVHh0KCdzbWRfdGFnX3N5bmNfZGVsZXRlX29yaWdf bGJsJykuJzwvbGFiZWw+JywgJGxibFN0eWxlKQoJCQkJCS50ZGEoeWVzbm9SYWRpbygnc21k X3RhZ3NfZGVsZXRlX29yaWcnLCAkc21kX3RhZ3NfZGVsZXRlX29yaWcpLmdUeHQoJ3NtZF90 YWdfcnNzX3VjX3RydV90YWdzX29ubHknKSwgJyBjbGFzcz0icHJlZi12YWx1ZSInKQoJCQkJ KTsKCgkJCWVjaG8gdHIodGRjcyhoZWQoZ1R4dCgnc21kX3RhZ19zeW5jX2ltcG9ydF9vcHRz JyksIDMsICcgY2xhc3M9InByZWYtaGVhZGluZyInKSwgNCkpOwoJCQkvLyBBc3NpZ24gdG8g Y2F0ZWdvcnkKCQkJaWYgKCRjbGluaykgewoJCQkJaWYgKCRyc0NhdHMpIHsKCQkJCQkkY2F0 bGlzdCA9IHRhZyh0cmVlU2VsZWN0SW5wdXQoJ3NtZF90YWdzX2ltcG9ydF9jYXRfcGFyZW50 JywgJHJzQ2F0cywgJHNtZF90YWdzX2ltcG9ydF9jYXRfcGFyZW50LCAnc21kX3RhZ3NfaW1w b3J0X2NhdF9wYXJlbnQnLCAzNSksICd0ZCcsICcgY2xhc3M9InByZWYtdmFsdWUiJyk7CgkJ CQl9IGVsc2UgewoJCQkJCSRjYXRsaXN0ID0gdGFnKGdUeHQoJ3NtZF90YWdfbm9fcGFyZW50 JyksICd0ZCcsICcgY2xhc3M9InByZWYtdmFsdWUiJyk7CgkJCQl9CgoJCQkJZWNobyB0cih0 ZGEoJzxsYWJlbCBmb3I9InNtZF90YWdzX2ltcG9ydF9jYXRfcGFyZW50Ij4nLmdUeHQoJ3Nt ZF90YWdfc3luY19wYXJlbnRfY2F0X2xibCcpLic8L2xhYmVsPicsICRsYmxTdHlsZSkgLiAk Y2F0bGlzdCk7CgkJCQllY2hvIHRyKHRkYSgnPGxhYmVsIGZvcj0ic21kX3RhZ3NfaW1wb3J0 X2ZvcmNlX2NhdCI+Jy5nVHh0KCdzbWRfdGFnX3N5bmNfZm9yY2VfY2F0X2xibCcpLic8L2xh YmVsPicsICRsYmxTdHlsZSkgLiB0ZChjaGVja2JveCgnc21kX3RhZ3NfaW1wb3J0X2ZvcmNl X2NhdCcsIDEsICRzbWRfdGFnc19pbXBvcnRfZm9yY2VfY2F0KSkpOwoJCQl9CgoJCQkvLyBB c3NpZ24gdG8gcGFyZW50IHRhZwoJCQllY2hvIHRyKHRkYSgnPGxhYmVsIGZvcj0ic21kX3Rh Z3NfaW1wb3J0X3RhZ19wYXJlbnQiPicuZ1R4dCgnc21kX3RhZ19zeW5jX3BhcmVudF90YWdf bGJsJykuJzwvbGFiZWw+JywgJGxibFN0eWxlKS4gdGQoJzxkaXYgaWQ9InNtZF90YWdzX2lt cG9ydF90YWdfcGFyZW50X2hvbGRlciI+PC9kaXY+JykpOwoJCQllY2hvIHRyKHRkYSgnPGxh YmVsIGZvcj0ic21kX3RhZ3NfaW1wb3J0X2ZvcmNlX3BhcmVudCI+Jy5nVHh0KCdzbWRfdGFn X3N5bmNfZm9yY2VfcGFyZW50X2xibCcpLic8L2xhYmVsPicsICRsYmxTdHlsZSkgLiB0ZChj aGVja2JveCgnc21kX3RhZ3NfaW1wb3J0X2ZvcmNlX3BhcmVudCcsIDEsICRzbWRfdGFnc19p bXBvcnRfZm9yY2VfcGFyZW50KSkpOwoKCQkJLy8gUmVwb3J0IHZpZXdlcgoJCQllY2hvIHRy KHRkYSgnPGEgbmFtZT0ic21kX3RhZ3NfcmVwb3J0X3RvZ2dsZXIiIG9uY2xpY2s9InNtZF90 YWdzX3RvZ2dsZV9yZXBvcnQoKTsiPicuZ1R4dCgnc21kX3RhZ19yZWNlbnRfcmVwb3J0Jyku JzwvYT4nKS50ZGEoZ1R4dCgnc21kX3RhZ19pbXBvcnRfcmVzdWx0c19wdDEnKSAuICc8c3Bh biBpZD0ic21kX3RhZ3NfaW1wb3J0X2ljdXJyIj48L3NwYW4+PHNwYW4gaWQ9InNtZF90YWdz X2ltcG9ydF9pdG90Ij48L3NwYW4+ICcgLiBnVHh0KCdzbWRfdGFnX2ltcG9ydF9yZXN1bHRz X3B0MicpIC4gJzxzcGFuIGlkPSJzbWRfdGFnc19pbXBvcnRfbG5rX2N1cnIiPjwvc3Bhbj4n KSk7CgoJCQllY2hvIHRyKHRkYSgkYnRuU3luY0dvLCAkYnRuU3R5bGUpKTsKCQkJZWNobyBl bmRUYWJsZSgpCgkJCQkuIHRJbnB1dCgpCgkJCQkuICc8L2Zvcm0+JzsKCQl9IGVsc2UgaWYg KCRudW1QcmVmcyA+IDAgJiYgJG51bVByZWZzIDwgJG51bVJlcVByZWZzKSB7CgkJCS8vIFBy ZWZzIHBvc3NpYmx5IGNvcnJ1cHQsIG9yIHBsdWdpbiB1cGRhdGVkCgkJCWVjaG8gc3RhcnRU YWJsZSgpCgkJCQkubi4gdHIodGRhKHN0cm9uZyhnVHh0KCdzbWRfdGFnX3ByZWZzX3NvbWUn KSkuYnIuYnIKCQkJCQkuZ1R4dCgnc21kX3RhZ19wcmVmc19zb21lX2V4cGxhaW4nKS5ici5i cgoJCQkJCS5nVHh0KCdzbWRfdGFnX3ByZWZzX3NvbWVfb3B0czEnKSwgJyBjb2xzcGFuPSIy IicpCgkJCQkpCgkJCQkubi4gdHIoCgkJCQkJdGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKQoJ CQkJCS4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpCgkJCQkpCgkJCQkubi4gZW5kVGFi bGUoKTsKCQl9IGVsc2UgewoJCQkvLyBQcmVmcyBub3QgaW5zdGFsbGVkCgkJCWVjaG8gc3Rh cnRUYWJsZSgpCgkJCQkubi4gdHIodGRhKGdUeHQoJ3NtZF90YWdfcHJlZnNfbm90X2luc3Rh bGxlZCcpLCAnIGNvbHNwYW49IjIiJykpCgkJCQkubi4gdHIodGRhKCRidG5JbnN0YWxsLCAk YnRuU3R5bGUpKQoJCQkJLm4uIGVuZFRhYmxlKCk7CgkJfQoJfSBlbHNlIHsKCQkvLyBUYWJs ZXMgbm90IGluc3RhbGxlZAoJCWVjaG8gc3RhcnRUYWJsZSgpCgkJCS5uLiB0cih0ZGEoc3Ry b25nKGdUeHQoJ3NtZF90YWdfcHJlZnNfc29tZV90YmwnKSkuYnIuYnIKCQkJCS5nVHh0KCdw c21kX3RhZ19yZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyCgkJCQkuZ1R4dCgnc21kX3RhZ19w cmVmc19zb21lX29wdHMyJyksICcgY29sc3Bhbj0iMiInKQoJCQkpCgkJCS5uLiB0cih0ZGEo JGJ0bkluc3RhbGxUYmwsICRidG5TdHlsZSkpCgkJCS5uLiBlbmRUYWJsZSgpOwoJfQp9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gSW1wb3J0IHRhZ3MgZnJvbSBvdGhlciBw bGFjZXMKZnVuY3Rpb24gc21kX3RhZ3NfaW1wb3J0KCRzbWRfdGFnX29wdGlvbnMpIHsKCWV4 dHJhY3QoJHNtZF90YWdfb3B0aW9ucyk7CgoJJG1lc3NhZ2UgPSAnJzsKCSRpcGFyZW50ID0g KCRzbWRfdGFnc19zeW5jX3BhcmVudCkgPyAiIEFORCBwYXJlbnQgPSBcJyIuZG9TbGFzaCgk c21kX3RhZ3Nfc3luY19wYXJlbnQpLiJcJyAiIDogJyc7CgoJJHJzID0gc2FmZV9yb3dzKCcq JywgJ3RleHRwYXR0ZXJuJywgKCgkc21kX3RhZ3Nfc3luY19zZWN0aW9uKSA/ICJTZWN0aW9u PSciLmRvU2xhc2goJHNtZF90YWdzX3N5bmNfc2VjdGlvbikuIiciIDogJzE9MScpKTsKCSRy b3dfY3RyID0gJHRhZ19jdHIgPSAwOwoJJHRvdGFsID0gY291bnQoJHJzKTsKCSRjdHJscyA9 IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3RfZW5yZXAnKSwgMSk7Cgkkc2hv d3JlcCA9ICRjdHJsc1snc21kX3RhZ190X2VucmVwJ11bJ3ZhbCddOwoKCWVjaG8gJzxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4nOwoJZWNobyAidmFyIGljdHIgPSAwOyB2YXIg aXRvdCA9IHskdG90YWx9OyB2YXIgbG5rX2N0ciA9IDA7IjsKCWVjaG8gJ2pRdWVyeShmdW5j dGlvbigpIHsnOwoJZWNobyAnalF1ZXJ5KCIjc21kX3RhZ3NfaW1wb3J0X2l0b3QiKS50ZXh0 KCIvJy4kdG90YWwuJyIpOyc7CglpZiAoJHJzKSB7CgkJZm9yZWFjaCAoJHJzIGFzICRyb3cp IHsKCQkJc3dpdGNoICgkc21kX3RhZ3Nfc3luY190eXBlKSB7CgkJCQljYXNlICcwJzoKCQkJ CQkvLyB0cnVfdGFncwoJCQkJCSRpZGF0YSA9IGRvU2xhc2goJHJvd1snS2V5d29yZHMnXSk7 CgkJCQkJYnJlYWs7CgkJCQljYXNlICcxJzoKCQkJCWNhc2UgJzInOgoJCQkJCS8vIHJzc191 YyAvIFR4cCBjYXRzCgkJCQkJJGlkYXRhID0gZG9TbGFzaCgkcm93WydJRCddKTsKCQkJCQli cmVhazsKCQkJCWNhc2UgJzMnOgoJCQkJCS8vIENGcwoJCQkJCSRpZGF0YSA9ICgoJHNtZF90 YWdzX3N5bmNfY2ZzICYmIGlzc2V0KCRyb3dbJ2N1c3RvbV8nLiRzbWRfdGFnc19zeW5jX2Nm c10pKSA/IGRvU2xhc2goJHJvd1snY3VzdG9tXycuJHNtZF90YWdzX3N5bmNfY2ZzXSkgOiAn Jyk7CgkJCQkJYnJlYWs7CgkJCX0KCQkJJGl0aXRsZSA9IGRvU2xhc2goJHJvd1snVGl0bGUn XSk7CgkJCSRhcnRpZCA9IGRvU2xhc2goJHJvd1snSUQnXSk7CgkJCWVjaG8gPDw8RU9KUwoJ CQlzZW5kQXN5bmNFdmVudCgKCQkJewoJCQkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LAoJ CQkJc3RlcDogJ3NtZF90YWdzX2ltcG9ydF9vbmUnLAoJCQkJc21kX3RhZ3Nfc3luY190eXBl OiAneyRzbWRfdGFnc19zeW5jX3R5cGV9JywKCQkJCXNtZF90YWdzX3N5bmNfaWQ6ICd7JGFy dGlkfScsCgkJCQlzbWRfdGFnc19zeW5jX2RhdGE6ICd7JGlkYXRhfScsCgkJCQlzbWRfdGFn c19zeW5jX3RpdGxlOiAneyRpdGl0bGV9JywKCQkJCXNtZF90YWdzX3N5bmNfcGFyZW50OiAn eyRpcGFyZW50fScsCgkJCQlzbWRfdGFnc19zeW5jX2NmczogJ3skc21kX3RhZ3Nfc3luY19j ZnN9JywKCQkJCXNtZF90YWdzX3N5bmNfY2ZzX2RlbGltOiAneyRzbWRfdGFnc19zeW5jX2Nm c19kZWxpbX0nLAoJCQkJc21kX3RhZ3NfaW1wb3J0X3RhZ19wYXJlbnQ6ICd7JHNtZF90YWdz X2ltcG9ydF90YWdfcGFyZW50fScsCgkJCQlzbWRfdGFnc19pbXBvcnRfY2F0X3BhcmVudDog J3skc21kX3RhZ3NfaW1wb3J0X2NhdF9wYXJlbnR9JywKCQkJCXNtZF90YWdzX2ltcG9ydF9m b3JjZV9wYXJlbnQ6ICd7JHNtZF90YWdzX2ltcG9ydF9mb3JjZV9wYXJlbnR9JywKCQkJCXNt ZF90YWdzX2ltcG9ydF9mb3JjZV9jYXQ6ICd7JHNtZF90YWdzX2ltcG9ydF9mb3JjZV9jYXR9 JywKCQkJCXNtZF90YWdzX2RlbGV0ZV9vcmlnOiAneyRzbWRfdGFnc19kZWxldGVfb3JpZ30n CgkJCX0sIHNtZF90YWdzX2dyb3VwX2ZlZWRiYWNrKTsKRU9KUzsKCQl9CgkJZWNobyAnfSk7 JzsKCQllY2hvIDw8PEVPSlMKCQlmdW5jdGlvbiBzbWRfdGFnc19ncm91cF9mZWVkYmFjayhk YXRhKSB7CgkJCWljdHIrKzsKCQkJalF1ZXJ5KCcjc21kX3RhZ3NfaW1wb3J0X2ljdXJyJyku dGV4dChpY3RyKTsKCQkJalF1ZXJ5KCcjc21kX3RhZ19yZXBvcnRfcGFuZScpLmFwcGVuZChq UXVlcnkoZGF0YSkuZmluZCgnc21kX3RhZ3NfcmVwb3J0JykuYXR0cigndmFsdWUnKSk7CgkJ CWxua19jdHIgKz0gKGpRdWVyeShkYXRhKS5maW5kKCdzbWRfdGFnc19saW5rX2N0cicpLmF0 dHIoJ3ZhbHVlJykpICogMTsgLy8gbXVsdGlwbHkgYnkgMSB0byBjb252ZXJ0IHRvIG51bWJl cgoJCQlqUXVlcnkoJyNzbWRfdGFnc19pbXBvcnRfbG5rX2N1cnInKS50ZXh0KGxua19jdHIp OwoJCQlpZiAoJ3skc2hvd3JlcH0nID09ICcxJyAmJiBpY3RyID49IGl0b3QpIHsKCQkJCXNt ZF90YWdzX3RvZ2dsZV9yZXBvcnQoKTsKCQkJfQoJCX0KRU9KUzsKCQllY2hvICc8L3Njcmlw dD4nOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX3Rh Z3NfaW1wb3J0X29uZSgpIHsKCSRzbWRfdGFnc19zeW5jX3R5cGUgPSBncHMoJ3NtZF90YWdz X3N5bmNfdHlwZScpOwoJJHNtZF90YWdzX3N5bmNfZGF0YSA9IGdwcygnc21kX3RhZ3Nfc3lu Y19kYXRhJyk7Cgkkc21kX3RhZ3Nfc3luY19pZCA9IGdwcygnc21kX3RhZ3Nfc3luY19pZCcp OwoJJHNtZF90YWdzX3N5bmNfdGl0bGUgPSBncHMoJ3NtZF90YWdzX3N5bmNfdGl0bGUnKTsK CSRzbWRfdGFnc19zeW5jX3BhcmVudCA9IGdwcygnc21kX3RhZ3Nfc3luY19wYXJlbnQnKTsK CSRzbWRfdGFnc19zeW5jX2NmcyA9IGdwcygnc21kX3RhZ3Nfc3luY19jZnMnKTsKCSRzbWRf dGFnc19zeW5jX2Nmc19kZWxpbSA9IGdwcygnc21kX3RhZ3Nfc3luY19jZnNfZGVsaW0nKTsK CSRzbWRfdGFnc19pbXBvcnRfdGFnX3BhcmVudCA9IGdwcygnc21kX3RhZ3NfaW1wb3J0X3Rh Z19wYXJlbnQnKTsKCSRzbWRfdGFnc19pbXBvcnRfY2F0X3BhcmVudCA9IGdwcygnc21kX3Rh Z3NfaW1wb3J0X2NhdF9wYXJlbnQnKTsKCSRzbWRfdGFnc19pbXBvcnRfZm9yY2VfcGFyZW50 ID0gZ3BzKCdzbWRfdGFnc19pbXBvcnRfZm9yY2VfcGFyZW50Jyk7Cgkkc21kX3RhZ3NfaW1v cnRfZm9yY2VfY2F0ID0gZ3BzKCdzbWRfdGFnc19pbXBvcnRfZm9yY2VfY2F0Jyk7Cgkkc21k X3RhZ3NfZGVsZXRlX29yaWcgPSBncHMoJ3NtZF90YWdzX2RlbGV0ZV9vcmlnJyk7CgoJJHRh Z19pZHMgPSAkdGFnX25hbWVzID0gJGtleWxpc3QgPSBhcnJheSgpOwoKCWlmIChpbl9hcnJh eSgkc21kX3RhZ3Nfc3luY190eXBlLCBhcnJheSAoJzAnLCAnMycpKSkgewoJCS8vIHRydV90 YWdzIC8gVHhwIENGCgkJJGRsbSA9ICgkc21kX3RhZ3Nfc3luY190eXBlID09ICczJyAmJiAk c21kX3RhZ3Nfc3luY19jZnNfZGVsaW0pID8gJHNtZF90YWdzX3N5bmNfY2ZzX2RlbGltIDog JywnOwoJCSRrZXlzID0gZG9fbGlzdCgkc21kX3RhZ3Nfc3luY19kYXRhLCAkZGxtKTsKCQlm b3JlYWNoICgka2V5cyBhcyAka2V5KSB7CgkJCWlmICgka2V5PT0nJykgY29udGludWU7CgkJ CSRrZXlsaXN0W10gPSBhcnJheSgnbmFtZScgPT4gJGtleSwgJ3RpdGxlJyA9PiAka2V5KTsK CQl9Cgl9IGVsc2UgaWYgKCRzbWRfdGFnc19zeW5jX3R5cGUgPT0gJzEnKSB7CgkJLy8gcnNz X3VjCgkJJGNsYXVzZSA9ICd0Yy5hcnRpY2xlX2lkID0gJy5kb1NsYXNoKCRzbWRfdGFnc19z eW5jX2RhdGEpOwoJCSRrZXlsaXN0ID0gZ2V0Um93cygiU0VMRUNUIGMubmFtZSwgYy50aXRs ZSBGUk9NICIuUEZYLiJ0ZXh0cGF0dGVybl9jYXRlZ29yeSBhcyB0YyBMRUZUIEpPSU4gIi5Q RlguInR4cF9jYXRlZ29yeSBhcyBjIE9OIHRjLmNhdGVnb3J5X2lkID0gYy5pZCBXSEVSRSAi LiRjbGF1c2UuJHNtZF90YWdzX3N5bmNfcGFyZW50KTsKCQkka2V5bGlzdCA9ICgka2V5bGlz dCkgPyAka2V5bGlzdCA6IGFycmF5KCk7Cgl9IGVsc2UgaWYgKCRzbWRfdGFnc19zeW5jX3R5 cGUgPT0gJzInKSB7CgkJLy8gdHhwIGNhdHMKCQkkY2xhdXNlID0gJ3R4dC5JRCA9ICcuZG9T bGFzaCgkc21kX3RhZ3Nfc3luY19kYXRhKTsKCQkka2V5bGlzdCA9IGdldFJvd3MoIlNFTEVD VCBjLm5hbWUsIGMudGl0bGUgRlJPTSAiLlBGWC4idGV4dHBhdHRlcm4gYXMgdHh0IExFRlQg Sk9JTiAiLlBGWC4idHhwX2NhdGVnb3J5IGFzIGMgT04gKHR4dC5DYXRlZ29yeTEgPSBjLm5h bWUgT1IgdHh0LkNhdGVnb3J5MiA9IGMubmFtZSkgV0hFUkUgIi4kY2xhdXNlLiRzbWRfdGFn c19zeW5jX3BhcmVudCk7CgkJJGtleWxpc3QgPSAoJGtleWxpc3QpID8gJGtleWxpc3QgOiBh cnJheSgpOwoJfQoKCS8vIEluc2VydCAvdXBkYXRlIGVhY2ggdGFnIGluIHRoZSBnaXZlbiBw bGFjZQoJZm9yZWFjaCAoJGtleWxpc3QgYXMgJGl0ZW0pIHsKCQkkaXRuID0gdHJpbSgkaXRl bVsnbmFtZSddKTsKCQkkaXR0ID0gdHJpbSgkaXRlbVsndGl0bGUnXSk7CgoJCS8vIFNraXAg aW52YWxpZCBlbnRyaWVzCgkJaWYgKCRpdG4gPT0gJycgfHwgJGl0biA9PSBOVUxMIHx8ICRp dHQgPT0gJycgfHwgJGl0dCA9PSBOVUxMKSBjb250aW51ZTsKCgkJJGlkID0gc21kX3RhZ19n ZXRzZXJ0KCRpdG4sICdhcnRpY2xlJywgJGl0dCwgJHNtZF90YWdzX2ltcG9ydF90YWdfcGFy ZW50LCAkc21kX3RhZ3NfaW1wb3J0X2NhdF9wYXJlbnQsICcnLCAkc21kX3RhZ3NfaW1wb3J0 X2ZvcmNlX3BhcmVudCwgJHNtZF90YWdzX2ltcG9ydF9mb3JjZV9jYXQpOwoJCWlmICgkaWQp IHsKCQkJJHRhZ19pZHNbXSA9ICRpZDsKCQkJJHRhZ19uYW1lc1tdID0gJGl0bjsKCQl9Cgl9 CgoJaWYgKCR0YWdfaWRzKSB7CgkJJHJlcG9ydCA9IHN0cm9uZygkc21kX3RhZ3Nfc3luY190 aXRsZSkuJzogJy5qb2luKCcsICcsICR0YWdfbmFtZXMpLmJyOwoJCWlmICgkc21kX3RhZ3Nf ZGVsZXRlX29yaWcpIHsKCQkJaWYgKCRzbWRfdGFnc19zeW5jX3R5cGUgPT0gJzAnKSB7CgkJ CQlzYWZlX3VwZGF0ZSgndGV4dHBhdHRlcm4nLCAiS2V5d29yZHM9JyciLCAiaWQ9JyIuZG9T bGFzaCgkc21kX3RhZ3Nfc3luY19pZCkuIiciKTsKCQkJfSBlbHNlIGlmICgkc21kX3RhZ3Nf c3luY190eXBlID09ICcxJykgewoJCQkJc2FmZV9kZWxldGUoJ3RleHRwYXR0ZXJuX2NhdGVn b3J5JywgImFydGljbGVfaWQ9JyIuZG9TbGFzaCgkc21kX3RhZ3Nfc3luY19pZCkuIiciKTsK CQkJfSBlbHNlIGlmICgkc21kX3RhZ3Nfc3luY190eXBlID09ICcyJykgewoJCQkJLy8gQ29u c3BpY3VvdXNseSBtaXNzaW5nIHVudGlsIHN1Y2ggdGltZSBhcyBhIHN1aXRhYmxlIG1ldGhv ZCBjYW4gYmUgZm91bmQgdG8gZGVhbCB3aXRoIGl0CgkJCX0gZWxzZSBpZiAoJHNtZF90YWdz X3N5bmNfdHlwZSA9PSAnMycpIHsKCQkJCXNhZmVfdXBkYXRlKCd0ZXh0cGF0dGVybicsICJj dXN0b21fJHNtZF90YWdzX3N5bmNfY2ZzPScnIiwgImlkPSciLmRvU2xhc2goJHNtZF90YWdz X3N5bmNfaWQpLiInIik7CgkJCX0KCQl9Cgl9CgkkdGFnX2N0ciA9IHNtZF90YWdfbGluaygk c21kX3RhZ3Nfc3luY19pZCwgJHRhZ19pZHMsICdhcnRpY2xlJyk7CglzZW5kX3htbF9yZXNw b25zZShhcnJheSgnc21kX3RhZ3NfcmVwb3J0JyA9PiAkcmVwb3J0LCAnc21kX3RhZ3NfbGlu a19jdHInID0+ICR0YWdfY3RyKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQov LyBNSURETEVXQVJFIC0gQURNSU4vUFVCTElDIEdMVUUKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi8vIEdyYWIgYSB2YWxpZCB0YWcgcGFyZW50IGxpc3QgYXMgSFRNTC4gQ2Fubm90 IGJlIGRvbmUgZWFzaWx5IGZyb20gZml4ZWQgZGF0YTogQUpBWCBpcyB0aGUgb25seSByZWxp YWJsZSB3YXkuCi8vIE5lZWRzIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSB2YXJpb3VzIHVz ZSBjYXNlczoKLy8gICogZnVsbCBsaXN0IChsaW5rX21vZGU9MikKLy8gICogZnJvbSBnaXZl biBwYXJlbnQgbm9kZXMgKGxpbmtfbW9kZT0xKQovLyAgKiBleGNsdWRpbmcgZm9yYmlkZGVu IGl0ZW1zIChlLmcuIHdoZW4gYXNzaWduaW5nIHBhcmVudCB0byB0YWcgdGhhdCBpcyBhbHJl YWR5IGluIHRoZSBzdWJ0cmVlKQovLyAgKiBhZGRpbmcgaW50ZXJmYWNlIGVsZW1lbnRzIGxp a2UgW2Nscl0gYW5kIFt0b2ddIGJ1dHRvbnMKLy8gVE9ETzogdGFrZSB0aGUgYmktZGlyZWN0 aW9uYWwgc2V0dGluZyBpbnRvIGFjY291bnQKZnVuY3Rpb24gc21kX3RhZ19wYXJlbnRsaXN0 KCkgewoJJHRyeWNhdCA9IGlzc2V0KCRfUE9TVFsnY2F0J10pOwoJZXh0cmFjdChkb1NsYXNo KGdwc2EoYXJyYXkoJ25hbWUnLCAndHlwZScsICdpZCcsICdjYXQnLCAnaXRlbWlkJywgJ2xp c3Rvbmx5JywgJ2h0bWxfaWQnLCAnbGlua19tb2RlJykpKSk7CgoJd2hpbGUoQG9iX2VuZF9j bGVhbigpKTsgLy8gR2V0IHJpZCBvZiBhbnkgcGFnZSBzbyBmYXIKCgkkbGlzdG9ubHkgPSAo JGxpc3Rvbmx5ID09ICcnIHx8ICRsaXN0b25seSA9PSAndW5kZWZpbmVkJykgPyAnJyA6ICRs aXN0b25seTsKCSRodG1sX2lkID0gKCRodG1sX2lkID09ICcnIHx8ICRodG1sX2lkID09ICd1 bmRlZmluZWQnKSA/ICdzbWRfdGFnX3BhcmVudCcgOiAkaHRtbF9pZDsKCSR0eXBlID0gKCR0 eXBlID09ICcnIHx8ICR0eXBlID09ICd1bmRlZmluZWQnKSA/ICdhcnRpY2xlJyA6ICR0eXBl OwoJJGNhdCA9ICgkY2F0ID09ICcnIHx8ICRjYXQgPT0gJ3VuZGVmaW5lZCcpID8gJycgOiAk Y2F0OwoJJGxpbmtfbW9kZSA9ICgkbGlua19tb2RlID09ICcnIHx8ICRsaW5rX21vZGUgPT0g J3VuZGVmaW5lZCcpID8gJzEnIDogJGxpbmtfbW9kZTsKCSR0YWdzID0gKCRpdGVtaWQgPT0g JycgfHwgJGl0ZW1pZCA9PSAndW5kZWZpbmVkJykgPyBhcnJheSgpIDogc2FmZV9yb3dzKCd0 YWdfaWQnLCBTTURfVEFHVSwgInR5cGU9JyR0eXBlJyBBTkQgaXRlbV9pZD0nJGl0ZW1pZCci KTsKCSRjbHJCdG4gPSAnWzxzcGFuIGlkPSJzbWRfY2xyIiBjbGFzcz0ic21kX2Zha2VidG4i PicuZ1R4dCgnc21kX3RhZ19jbGVhcicpLic8L3NwYW4+XSc7CgkkdG9nQnRuID0gJ1s8c3Bh biBpZD0ic21kX3RvZyIgY2xhc3M9InNtZF9mYWtlYnRuIj4nLmdUeHQoJ3NtZF90YWdfdG9n Z2xlJykuJzwvc3Bhbj5dJzsKCgkkcHJlZiA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5KCdz bWRfdGFnX3BfbGlzdHBhcicsICdzbWRfdGFnX3BfbWFzdGVyJywgJ3NtZF90YWdfcF9saW5r Y2F0JyksIDEpOwoJJGluY2wgPSAkcHJlZlsnc21kX3RhZ19wX2xpc3RwYXInXVsndmFsJ107 CgkkZ29kID0gJHByZWZbJ3NtZF90YWdfcF9tYXN0ZXInXVsndmFsJ107CgkkY2xpbmsgPSAk cHJlZlsnc21kX3RhZ19wX2xpbmtjYXQnXVsndmFsJ107CiAgICRnb2RfY2xhdXNlID0gKCRn b2QgPT0gJycpID8gJycgOiAidHh0LnBhcmVudCA9ICciIC4gZG9TbGFzaCgkZ29kKSAuICIn IjsKCglpZiAoJGNhdCAmJiAkY2xpbmspIHsKCSAgICRjYXQgPSBkb19saXN0KCRjYXQpOwoJ ICAgJHJzaWQgPSBhcnJheSgpOwoJICAgJHJzYyA9IGdldFJvd3MoIlNFTEVDVCBESVNUSU5D VCB0eHQuaWQsIHR4dC5wYXJlbnQsIHR4dC5sZnQsIHR4dC5yZ3QKCQkJRlJPTSAiLlBGWC5T TURfVEFHLiIgQVMgdHh0LCAiLlBGWC4idHhwX2NhdGVnb3J5IEFTIHR4YywgIi5QRlguU01E X1RBR0MuIiBBUyB0eGwKCQkJV0hFUkUgKCAoIHR4dC5pZCA9IHR4bC50YWdfaWQKCQkJQU5E ICB0eGwuY2F0X2lkID0gdHhjLmlkCgkJCUFORCB0eGMubmFtZSBJTiAoJyIgLmpvaW4oIics JyIsICRjYXQpLiAiJykgKSIgLiAoJGdvZF9jbGF1c2UgPyAnIE9SICcuJGdvZF9jbGF1c2Ug OiAnJykgLiAiKQoJCQlBTkQgdHh0LnR5cGUgPSAnJHR5cGUnIik7CgkJaWYgKCRyc2MpIHsK CQkJZm9yZWFjaCAoJHJzYyBhcyAkcm93KSB7CgkJCQkkaW5jbHVkZV9wYXJlbnQgPSAoJGlu Y2wgfHwgJHJvd1sncGFyZW50J10gPT0gJGdvZCkgPyAnJyA6ICcgQU5EIGxmdCAhPSAnLiRy b3dbJ2xmdCddOwoJCQkJJGlkcyA9IHNhZmVfY29sdW1uKCdpZCcsIFNNRF9UQUcsICJ0eXBl ID0gJyR0eXBlJyBBTkQgKGxmdCBCRVRXRUVOICIgLiRyb3dbJ2xmdCddLiAiIEFORCAiIC4k cm93WydyZ3QnXS4gIikiIC4gJGluY2x1ZGVfcGFyZW50KTsKCQkJCSRyc2lkID0gYXJyYXlf bWVyZ2UoJHJzaWQsICRpZHMpOwoJCQl9CgkJfQoJCSRjYXQgPSAoJHJzYykgPyAnIEFORCBp ZCBJTiAoJy5kb1F1b3RlKGpvaW4oIicsJyIsJHJzaWQpKS4nKScgOiAnJzsKCX0gZWxzZSBp ZiAoJGdvZCAhPSAnJyAmJiAkbGlua19tb2RlID09ICcxJykgewoJCSRpZHMgPSBzYWZlX2Nv bHVtbignaWQnLCBTTURfVEFHLCAidHlwZSA9ICckdHlwZScgQU5EIHBhcmVudCA9ICciIC4g ZG9TbGFzaCgkZ29kKSAuICInIik7CgkJJGNhdCA9ICgkaWRzKSA/ICcgQU5EIGlkIElOICgn LmRvUXVvdGUoam9pbigiJywnIiwkaWRzKSkuJyknIDogJyc7Cgl9IGVsc2UgewoJCSRjYXQg PSAnJzsKCX0KCgkkbGlua19tb2RlID0gKCgkY2F0ICYmICRsaW5rX21vZGUgPT0gJzEnKSB8 fCAkbGlua19tb2RlID09ICcyJykgPyAnMT0xJyA6ICcxPTAnOwoKCWlmICgkaWQpIHsKCQkk aWQgPSBhc3NlcnRfaW50KCRpZCk7CgkJbGlzdCgkbGZ0LCAkcmd0KSA9IGFycmF5X3ZhbHVl cyhzYWZlX3JvdygnbGZ0LCByZ3QnLCBTTURfVEFHLCAnaWQgPSAnLiRpZCkpOwoJCSRycyA9 IHNtZF90YWdfdHJlZSgncm9vdCcsICR0eXBlLCAibGZ0IG5vdCBiZXR3ZWVuICRsZnQgYW5k ICRyZ3QiLiRjYXQsIFNNRF9UQUcpOwoJfSBlbHNlIHsKCQkkcnMgPSBzbWRfdGFnX3RyZWUo J3Jvb3QnLCAkdHlwZSwgJGxpbmtfbW9kZS4kY2F0LCBTTURfVEFHKTsKCX0KCglpZiAoJHJz KSB7CgkgICBpZiAoJHRyeWNhdCAmJiAhJGxpc3Rvbmx5KSB7CgkJCWVjaG8gc21kX211bHRp VHJlZVNlbGVjdElucHV0KCRodG1sX2lkLCAkcnMsICR0YWdzKS4kY2xyQnRuLiR0b2dCdG47 CgkJfSBlbHNlIHsKCQkJZWNobyB0cmVlU2VsZWN0SW5wdXQoJGh0bWxfaWQsICRycywgJG5h bWUpOwoJCX0KCX0gZWxzZSB7CgkJZWNobyBnVHh0KCdzbWRfdGFnX25vX3BhcmVudCcpOwoJ fQoJZXhpdCgpOyAvLyBEb24ndCBjYWxsIHBhZ2VfZW5kKCkKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi8vIEdyYWIgYSB2YWxpZCBjYXRlZ29yeSBsaXN0CmZ1bmN0aW9uIHNt ZF90YWdfY2F0bGlzdCgkY2F0PScnKSB7CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn bmFtZScsJ3R5cGUnLCdodG1sX2lkJykpKSk7Cgl3aGlsZShAb2JfZW5kX2NsZWFuKCkpOyAv LyBHZXQgcmlkIG9mIGFueSBwYWdlIHNvIGZhcgoKCSR0eXBlID0gKCR0eXBlID09ICIiIHx8 ICR0eXBlID09ICJ1bmRlZmluZWQiKSA/ICdhcnRpY2xlJyA6ICR0eXBlOwoJJGh0bWxfaWQg PSAoJGh0bWxfaWQgPT0gIiIgfHwgJGh0bWxfaWQgPT0gInVuZGVmaW5lZCIpID8gJ3NtZF90 YWdzX2NhdGxpc3QnIDogJGh0bWxfaWQ7CgkkcnMgPSBnZXRUcmVlKCdyb290JywgJHR5cGUs ICIxPTEiKTsKCglpZiAoJHJzKSB7CgkJZWNobyB0cmVlU2VsZWN0SW5wdXQoJGh0bWxfaWQs ICRycywgJG5hbWUsICRodG1sX2lkKTsKCX0gZWxzZSB7CgkJZWNobyBnVHh0KCdub19jYXRl Z29yaWVzX2F2YWlsYWJsZScpOwoJfQoJZXhpdCgpOyAvLyBEb24ndCBjYWxsIHBhZ2VfZW5k KCkKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEZldGNoIGEgZGVzY3JpcHRp b24gZm9yIHVzZSBhcyBhIHRvb2x0aXAKZnVuY3Rpb24gc21kX3RhZ19nZXRfZGVzYygpIHsK CWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCd0YWdfcmVmJykpKSk7Cgl3aGlsZShAb2Jf ZW5kX2NsZWFuKCkpOyAvLyBHZXQgcmlkIG9mIGFueSBwYWdlIHNvIGZhcgoKCSR0YWdfcmVm ID0gKCR0YWdfcmVmID09ICIiIHx8ICR0YWdfcmVmID09ICJ1bmRlZmluZWQiKSA/ICcnIDog JHRhZ19yZWY7CgoJaWYgKCR0YWdfcmVmKSB7CgkJJGZpZWxkID0gaXNfbnVtZXJpYygkdGFn X3JlZikgPyAnaWQnIDogJ3RpdGxlJzsKCQkkZGVzYyA9IHNhZmVfZmllbGQoJ2Rlc2NfaHRt bCcsIFNNRF9UQUcsICIkZmllbGQ9JyIgLiBkb1NsYXNoKCR0YWdfcmVmKSAuICInIik7CgkJ ZWNobyAoJGRlc2MpID8gJGRlc2MgOiBnVHh0KCdzbWRfdGFnX25vX2Rlc2MnKTsKCX0gZWxz ZSB7CgkJc2VuZF94bWxfcmVzcG9uc2UoYXJyYXkoJ2h0dHAtc3RhdHVzJyA9PiAnNDAwIEJh ZCBSZXF1ZXN0JykpOwoJfQoKCWV4aXQoKTsgLy8gRG9uJ3QgY2FsbCBwYWdlX2VuZCgpCn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBSZW1vdmUgZW1wdHkgVVJMIGVsZW1l bnRzICh1c2VkIGFzIGNhbGxiYWNrIHRvIGFycmF5X2ZpbHRlcigpKQpmdW5jdGlvbiBzbWRf dGFnc19yZW1vdmVfZW1wdHkoJHZhcikgewoJcmV0dXJuKCR2YXIgIT0gJycpOwp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gSGFuZGxlIGZha2UgdGFnIHNlY3Rpb24gVVJM CmZ1bmN0aW9uIHNtZF90YWdzX3VybF9oYW5kbGVyKCRldnQsICRzdHApIHsKCWdsb2JhbCAk c21kX3RhZ190eXBlLCAkcHJldGV4dCwgJHBlcm1saW5rX21vZGU7CgoJaWYgKCFzbWRfdGFn c190YWJsZV9leGlzdCgpKSB7CgkJcmV0dXJuOwoJfQoKCSRwcmVmcyA9IHNtZF90YWdzX3By ZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3Vfc2VjJywgJ3NtZF90YWdfdV9wbmFtJywgJ3NtZF90 YWdfdV9wdHlwJyksIDEpOwoJJHVybHNlYyA9IGRvX2xpc3QoJHByZWZzWydzbWRfdGFnX3Vf c2VjJ11bJ3ZhbCddKTsKCSR1cmxuYW0gPSAkcHJlZnNbJ3NtZF90YWdfdV9wbmFtJ11bJ3Zh bCddOwoJJHVybHR5cCA9ICRwcmVmc1snc21kX3RhZ191X3B0eXAnXVsndmFsJ107CgoJJHN1 YnBhdGggPSBwcmVnX3JlcGxhY2UoIi9odHRwcz86XC9cLy4qKFwvLiopL1VpIiwgIiQxIiwg aHUpOwoJJHJlZ3NhZmVzdWJwYXRoID0gcHJlZ19xdW90ZSgkc3VicGF0aCwgJy8nKTsKCSRy ZXEgPSBwcmVnX3JlcGxhY2UoIi9eJHJlZ3NhZmVzdWJwYXRoL2kiLCAnLycsIHNlcnZlclNl dCgnUkVRVUVTVF9VUkknKSk7CgoJJHFzID0gc3RycG9zKCRyZXEsICc/Jyk7CgkkcWF0dHMg PSAoJHFzID8gYS5zdWJzdHIoJHJlcSwgJHFzICsgMSkgOiAnJyk7CgoJaWYgKCRxcykgJHJl cSA9IHN1YnN0cigkcmVxLCAwLCAkcXMpOwoJJHBhcnRzID0gYXJyYXlfdmFsdWVzKGFycmF5 X2ZpbHRlcihleHBsb2RlKCcvJywgJHJlcSksICdzbWRfdGFnc19yZW1vdmVfZW1wdHknKSk7 CgkkdmFsaWRUeXBlcyA9IGFycmF5KCdhcnRpY2xlJywnaW1hZ2UnLCdmaWxlJywnbGluaycp OwoKCS8vIERlYWwgd2l0aCBjbGVhbiBVUkwgc3ludGF4IGZpcnN0LCB0cnlpbmcgdG8gYXZv aWQgY2xhc2hlcyB3aXRoIGJ1aWx0LWluIHBlcm1saW5rIHNjaGVtZXMuCglpZiAoY291bnQo JHBhcnRzKSA+IDEpIHsKCQkvLyBEZXRlcm1pbmUgaWYgdGhpcyBVUkwgaXMgb25lIHdlIGNh cmUgYWJvdXQuCgkJLy8gSWYgc28sIGZpbmQgd2hlcmUgdGhlIHRhZyBwb3J0aW9uIGJlZ2lu cyAoaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRyaWdnZXIpLgoJCSRwb3MgPSBmYWxzZTsKCQlm b3JlYWNoKCR1cmxzZWMgYXMgJHRyaWdnZXIpIHsKCQkJaWYgKCgkcG9zID0gYXJyYXlfc2Vh cmNoKCR0cmlnZ2VyLCAkcGFydHMpKSAhPT0gZmFsc2UpIHsKCQkJCSRwb3MrKzsgLy8gU3Rh cnQgb2YgdGhlIHRhZyBpbmZvCgkJCQlicmVhazsKCQkJfQoJCX0KCgkJaWYgKCRwb3MgIT09 IGZhbHNlKSB7CgkJCS8vIFRyeSB0byBkZXRlY3Qgc2VjdGlvbi9pZC90aXRsZSBwZXJtbGlu ayBzY2hlbWUKCQkJJHNpdCA9IGZhbHNlOwoJCQlpZiAoY291bnQoJHBhcnRzKSA9PSAzKSB7 CgkJCQkvLyBOb3RlIHRoYXQgJzAnIGlzIG5vdCBhIHZhbGlkIGFydGljbGUgSUQgYnV0IGlz IG51bWVyaWMgYW5kIGNvdWxkIGJlIHRoZSBuYW1lIG9mIGEgdGFnLCBzbyBpdCBuZWVkcyBz cGVjaWFsIHRyZWF0bWVudAoJCQkJaWYgKGlzX251bWVyaWMoJHBhcnRzWzFdKSAmJiAkcGFy dHNbMV0gIT0gJzAnKSB7CgkJCQkJJHNpdCA9IHRydWU7CgkJCQl9CgkJCX0KCgkJCS8vIEFz IGxvbmcgYXMgdGhpcyBpcyBhIHJlZ3VsYXIgcGVybWxpbmsgc2NoZW1lLCBzZXQgdGhlIHRh ZyB0byBiZSB0aGUgcmVtYWluaW5nIFVSTCBwb3J0aW9uCgkJCWlmICghJHNpdCkgewoJCQkJ aWYgKGluX2FycmF5KCRwYXJ0c1skcG9zXSwgJHZhbGlkVHlwZXMpKSB7CgkJCQkJJHNtZF90 YWdfdHlwZSA9ICRwYXJ0c1skcG9zXTsKCQkJCQkkcG9zKys7CgkJCQl9IGVsc2UgewoJCQkJ CSRzbWRfdGFnX3R5cGUgPSAkdmFsaWRUeXBlc1swXTsKCQkJCX0KCgkJCQkkc21kX3RhZyA9 IGpvaW4oJy8nLCBhcnJheV9zbGljZSgkcGFydHMsICRwb3MpKTsKCQkJCXNtZF90YWdzX3Nl dCgkc21kX3RhZ190eXBlLCAkc21kX3RhZyk7CgkJCQkkX1NFUlZFUlsnUVVFUllfU1RSSU5H J10gPSAkcWF0dHM7CgkJCQkkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA9ICRzdWJwYXRoIC4g JHBhcnRzWzBdOyAvLyBEcm9wIGJhY2sgdG8gc2VjdGlvbiBsaXN0IG1vZGUKLy8JCQkJJF9T RVJWRVJbJ1FVRVJZX1NUUklORyddID0gJHVybG5hbS4nPScuJHNtZF90YWcgLmEuICR1cmx0 eXAuJz0nLiRzbWRfdGFnX3R5cGUgLiAkcWF0dHM7Ci8vCQkJCSRfU0VSVkVSWydSRVFVRVNU X1VSSSddID0gJHN1YnBhdGggLiAkcGFydHNbMF0gLiAnLz8nIC4gc2VydmVyU2V0KCdRVUVS WV9TVFJJTkcnKTsKCQkJfQoJCX0KCX0gZWxzZSBpZiAoKGNvdW50KCRwYXJ0cykgPT0gMSkg JiYgKGluX2FycmF5KCRwYXJ0c1swXSwgJHVybHNlYykgfHwgaW5fYXJyYXkoZ3BzKCdzJyks ICR1cmxzZWMpKSkgewoJCS8vIERlZmF1bHQgb3IgbmFtZWQgc2VjdGlvbiAob3IgL3RpdGxl IHBlcm1saW5rIG1vZGUpICsgcG9zc2libGUgbWVzc3kgdGFnIHN5bnRheAoJCSR0aGVUeXBl ID0gZ3BzKCR1cmx0eXApOwoJCSRzbWRfdGFnID0gZ3BzKCR1cmxuYW0pOwoJCSRzbWRfdGFn X3R5cGUgPSAoZW1wdHkoJHRoZVR5cGUpICYmIGVtcHR5KCRzbWRfdGFnKSkgPyAnJyA6ICgo aW5fYXJyYXkoJHRoZVR5cGUsICR2YWxpZFR5cGVzKSkgPyAkdGhlVHlwZSA6ICR2YWxpZFR5 cGVzWzBdKTsKCQlzbWRfdGFnc19zZXQoJHNtZF90YWdfdHlwZSwgJHNtZF90YWcpOwoJCSRf U0VSVkVSWydRVUVSWV9TVFJJTkcnXSA9ICgoJHBlcm1saW5rX21vZGUgPT0gJ21lc3N5Jykg PyAkdXJsbmFtLic9Jy4kc21kX3RhZyAuYS4gJHVybHR5cC4nPScuJHNtZF90YWdfdHlwZSA6 ICcnKSAuICRxYXR0czsKCQkkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSA9ICRzdWJwYXRoIC4g JHBhcnRzWzBdIC4gKCgkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knKSA/ICcvPycgLiBzZXJ2 ZXJTZXQoJ1FVRVJZX1NUUklORycpIDogJycpOwoJfQp9CgovLyBUT0RPOiBjYWNoZT8KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF90YWdzX3NldCgkdHlwLCAk dGFnPScnLCAkaXRlbT0nJykgewoJZ2xvYmFsICRzbWRfdGFnczsKLy8Jc3RhdGljICRzbWRf dGFnc3RvcmU7CgoJJHNtZF90YWdzID0gYXJyYXkoKTsKCgkkcHJlZnMgPSBzbWRfdGFnc19w cmVmX2dldChhcnJheSgnc21kX3RhZ191X2NvbWJpJywgJ3NtZF90YWdfdV9jb21iaV9hbmQn LCAnc21kX3RhZ191X2NvbWJpX29yJyksIDEpOwoJJGNvbWJpID0gJHByZWZzWydzbWRfdGFn X3VfY29tYmknXVsndmFsJ107CgkkY2FuZCA9ICRwcmVmc1snc21kX3RhZ191X2NvbWJpX2Fu ZCddWyd2YWwnXTsKCSRjb3IgPSAkcHJlZnNbJ3NtZF90YWdfdV9jb21iaV9vciddWyd2YWwn XTsKCgkvLyBNdWx0aS10YWcgZmlsdGVyaW5nCglpZiAoJHRhZykgewoJCSR0YWdsaXN0ID0g ZXhwbG9kZSgkY29yLCAkdGFnKTsKCQkkbnVtX29yID0gY291bnQoJHRhZ2xpc3QpOwoJCWlm ICgkbnVtX29yID09IDEpIHsKCQkJLy8gT25seSBvbmUgaXRlbSBpbiB0aGUgZXhwbG9kZWQg bGlzdCBjb3VsZCBtZWFuIG9uZSBvZiB0d28gdGhpbmdzOgoJCQkvLyAgYSkgb25seSBvbmUg aXRlbSghKQoJCQkvLyAgYikgdGhlICdhbmQnIGRlbGltaXRlciBpcyBpbiB1c2UKCQkJJGFu ZGxpc3QgPSBleHBsb2RlKCRjYW5kLCAkdGFnKTsKCQkJJG51bV9hbmQgPSBjb3VudCgkYW5k bGlzdCk7CgkJCWlmICgkbnVtX2FuZCA+IDEpIHsKCQkJCSRzbWRfdGFnc1snbWV0YSddWydz ZWFyY2hfbW9kZSddID0gJ2FuZCc7CgkJCQkkc21kX3RhZ3NbJ21ldGEnXVsndGFnX2hlYWQn XSA9ICRhbmRsaXN0WzBdOwoJCQkJJHNtZF90YWdzWydtZXRhJ11bJ3RhZ190YWlsJ10gPSAk YW5kbGlzdFtjb3VudCgkYW5kbGlzdCktMV07CgkJCQkkdGFnbGlzdCA9ICRhbmRsaXN0OwoJ CQl9IGVsc2UgewoJCQkJJHNtZF90YWdzWydtZXRhJ11bJ3NlYXJjaF9tb2RlJ10gPSAnc2lu Z2xlJzsKCQkJCSRzbWRfdGFnc1snbWV0YSddWyd0YWdfaGVhZCddID0gJHNtZF90YWdzWydt ZXRhJ11bJ3RhZ190YWlsJ10gPSAkYW5kbGlzdFswXTsKCQkJfQoJCX0gZWxzZSBpZiAoJG51 bV9vciA+IDEpIHsKCQkJJHNtZF90YWdzWydtZXRhJ11bJ3NlYXJjaF9tb2RlJ10gPSAnb3In OwoJCQkkc21kX3RhZ3NbJ21ldGEnXVsndGFnX2hlYWQnXSA9ICR0YWdsaXN0WzBdOwoJCQkk c21kX3RhZ3NbJ21ldGEnXVsndGFnX3RhaWwnXSA9ICR0YWdsaXN0W2NvdW50KCR0YWdsaXN0 KS0xXTsKCQl9CgkJJHNtZF90YWdzWydtZXRhJ11bJ3RhZ19saXN0J10gPSAkdGFnbGlzdDsK CQkkdGFnID0gam9pbignLCcsIHF1b3RlX2xpc3QoJHRhZ2xpc3QpKTsKCX0KCgkvLyBPdmVy cmlkZSB0aGUgc2VhcmNoIG1vZGUgaWYgaXQncyBzd2l0Y2hlZCBvZmYgaW4gcHJlZnMKCWlm ICghJGNvbWJpKSB7CgkJJHNtZF90YWdzWydtZXRhJ11bJ3NlYXJjaF9tb2RlJ10gPSAnc2lu Z2xlJzsKCX0KCgkvLyBNT05TVEVSIQoJJHJzID0gc3RhcnRSb3dzKAoJCSJTRUxFQ1QgaWQs IG5hbWUsIHR4dC50eXBlLCBwYXJlbnQsIHRpdGxlLCBkZXNjX2h0bWwgQVMgZGVzY3JpcHRp b24sIGNvdW50KGl0ZW1faWQpIEFTIGNvdW50IgoJCS4iLChTRUxFQ1QgQ0FTVCgocmd0IC0g bGZ0IC0gMSkgLyAyIEFTIFVOU0lHTkVEKSkgQVMgY2hpbGRyZW4iCgkJLiIsKFNFTEVDVCBD T1VOVCgqKSBGUk9NICIuUEZYLlNNRF9UQUcuIiBXSEVSRSBuYW1lPW5hbWUiIC4gKCgkdHlw KSA/ICIgQU5EIHR5cGU9JyR0eXAnIiA6ICIiKSAuICIgQU5EIGxmdCA8IHR4dC5sZnQgQU5E IHJndCA+IHR4dC5yZ3QpLTEgQVMgbGV2ZWwiCgkJLiIgRlJPTSAiLlBGWC5TTURfVEFHLiIg QVMgdHh0LCAiLlBGWC5TTURfVEFHVS4iIEFTIHR4dSIKCQkuIiBXSEVSRSB0YWdfaWQgPSBp ZCIKCQkuKCgkdHlwKSA/ICIgQU5EIHR4dC50eXBlPSckdHlwJyIgOiAiIikKCQkuKCgkdGFn KSA/ICIgQU5EIG5hbWUgSU4gKCR0YWcpIiA6ICIiKQoJCS4oKCRpdGVtKSA/ICIgQU5EIGl0 ZW1faWQ9JyRpdGVtJyIgOiAiIikKCQkuIiBHUk9VUCBCWSBpZCIpOwoJc21kX3RhZ3NfcG9w dWxhdGUoJHJzLCAkdHlwKTsKCgkvLyBJbiBjYXNlIG9uZSBvZiB0aGUgVVJMIHRhZ3MgaXNu J3QgaW4gdXNlLCBwb3B1bGF0ZSAkc21kX3RhZ3Mgd2l0aCB0aGUgdGFnIGRldGFpbHMuCgkv LyBOb3RlIHRoaXMgb25lIHJlcXVpcmVzIHR5cGUuCglpZiAoISRpdGVtKSB7CgkJJHJzID0g c3RhcnRSb3dzKAoJCQkiU0VMRUNUIGlkLCBuYW1lLCB0eHQudHlwZSwgcGFyZW50LCB0aXRs ZSwgZGVzY19odG1sIEFTIGRlc2NyaXB0aW9uIgoJCQkuIiwoU0VMRUNUIENBU1QoKHJndCAt IGxmdCAtIDEpIC8gMiBBUyBVTlNJR05FRCkpIEFTIGNoaWxkcmVuIgoJCQkuIiwoU0VMRUNU IENPVU5UKCopIEZST00gIi5QRlguU01EX1RBRy4iIFdIRVJFIHR5cGU9JyR0eXAnIEFORCBu YW1lPW5hbWUgQU5EIGxmdCA8IHR4dC5sZnQgQU5EIHJndCA+IHR4dC5yZ3QpLTEgQVMgbGV2 ZWwiCgkJCS4iIEZST00gIi5QRlguU01EX1RBRy4iIEFTIHR4dCIKCQkJLiIgV0hFUkUgdHh0 LnR5cGU9JyR0eXAnIgoJCQkuKCgkdGFnKSA/ICIgQU5EIG5hbWUgSU4gKCR0YWcpIiA6ICIi KQoJCQkuIiBHUk9VUCBCWSBpZCIpOwoJCXNtZF90YWdzX3BvcHVsYXRlKCRycywgJHR5cCk7 Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfdGFnc19w b3B1bGF0ZSgkcnMsICR0eXApIHsKCWdsb2JhbCAkc21kX3RhZ3M7CgoJd2hpbGUgKCRyb3cg PSBuZXh0Um93KCRycykpIHsKCQkkY250ID0gKGlzc2V0KCRyb3dbJ2NvdW50J10pKSA/ICRy b3dbJ2NvdW50J10gOiAnMCc7CgkJJHNtZF90YWdzWyR0eXBdWyRyb3dbJ2lkJ11dID0gYXJy YXkoJ3RhZ19uYW1lJyA9PiAkcm93WyduYW1lJ10sICd0YWdfdGl0bGUnID0+ICRyb3dbJ3Rp dGxlJ10sICd0YWdfZGVzY3JpcHRpb24nID0+ICRyb3dbJ2Rlc2NyaXB0aW9uJ10sICd0YWdf cGFyZW50JyA9PiAkcm93WydwYXJlbnQnXSwgJ3RhZ19jb3VudCcgPT4gJGNudCwgJ3RhZ19j aGlsZHJlbicgPT4gJHJvd1snY2hpbGRyZW4nXSwgJ3RhZ19sZXZlbCcgPT4gJHJvd1snbGV2 ZWwnXSk7CgkJJHNtZF90YWdzWyR0eXBdWyd0YWdfbmFtZSddWyRyb3dbJ2lkJ11dID0gJHJv d1snbmFtZSddOwoJCSRzbWRfdGFnc1skdHlwXVsndGFnX3RpdGxlJ11bJHJvd1snaWQnXV0g PSAkcm93Wyd0aXRsZSddOwoJCSRzbWRfdGFnc1skdHlwXVsndGFnX2Rlc2NyaXB0aW9uJ11b JHJvd1snaWQnXV0gPSAkcm93WydkZXNjcmlwdGlvbiddOwoJCSRzbWRfdGFnc1skdHlwXVsn dGFnX3BhcmVudCddWyRyb3dbJ2lkJ11dID0gJHJvd1sncGFyZW50J107CgkJJHNtZF90YWdz WyR0eXBdWyd0YWdfY291bnQnXVskcm93WydpZCddXSA9ICRjbnQ7CgkJJHNtZF90YWdzWyR0 eXBdWyd0YWdfY2hpbGRyZW4nXVskcm93WydpZCddXSA9ICRyb3dbJ2NoaWxkcmVuJ107CgkJ JHNtZF90YWdzWyR0eXBdWyd0YWdfbGV2ZWwnXVskcm93WydpZCddXSA9ICRyb3dbJ2xldmVs J107Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBBZGQgdGFncyB0byB0 aGUgZ2xvYmFsIHNjb3BlLCBkZXBlbmRpbmcgb24gY29udGV4dC4KLy8gUmV0dXJucyB0aGUg Y3VycmVudCBjb250ZXh0CmZ1bmN0aW9uIHNtZF90YWdzX2NvbnRleHQoKSB7CglnbG9iYWwg JHRoaXNhcnRpY2xlLCAkdGhpc2ZpbGUsICR0aGlzbGluaywgJHRoaXNpbWFnZSwgJHNtZF90 YWdfdHlwZSwgJHNtZF90YWdfaXRlbXMsICRzbWRfdGFncywgJHNtZF90aGlzdGFnOwoKCSRj dHh0ID0gJHNtZF90YWdfdHlwZTsKCSRpZHMgPSBhcnJheSgpOwoJJHNjcCA9IGlzc2V0KCRz bWRfdGFnc1skY3R4dF0pID8gJHNtZF90YWdzWyRjdHh0XSA6IGFycmF5KCk7CgoJLy8gSW5k aXZpZHVhbCBhcnRpY2xlIG9yIGxpc3QKCSRpZCA9ICcnOwoJaWYgKCFlbXB0eSgkdGhpc2lt YWdlKSkgewoJCSRpZCA9ICR0aGlzaW1hZ2VbJ2lkJ107CgkJJGN0eHQgPSAnaW1hZ2UnOwoJ CSRzY3AgPSAkdGhpc2ltYWdlOwoJfSBlbHNlIGlmKCFlbXB0eSgkdGhpc2ZpbGUpKSB7CgkJ JGlkID0gJHRoaXNmaWxlWydpZCddOwoJCSRjdHh0ID0gJ2ZpbGUnOwoJCSRzY3AgPSAkdGhp c2ZpbGU7Cgl9IGVsc2UgaWYoIWVtcHR5KCR0aGlzbGluaykpIHsKCQkkaWQgPSAkdGhpc2xp bmtbJ2lkJ107CgkJJGN0eHQgPSAnbGluayc7CgkJJHNjcCA9ICR0aGlzbGluazsKCX0gZWxz ZSBpZighZW1wdHkoJHRoaXNhcnRpY2xlKSkgewoJCSRpZCA9ICR0aGlzYXJ0aWNsZVsndGhp c2lkJ107CgkJJGN0eHQgPSAnYXJ0aWNsZSc7CgkJJHNjcCA9ICR0aGlzYXJ0aWNsZTsKCX0K CWlmICgkaWQpIHsKCQlzbWRfdGFnc19zZXQoJGN0eHQsICcnLCAkaWQpOwoJfQoKCWlmKGlz c2V0KCRzbWRfdGFnc1skY3R4dF0pKSB7CgkJZm9yZWFjaCgkc21kX3RhZ3NbJGN0eHRdIGFz ICRyaWQgPT4gJHJvdykgewoJCQlpZiAoaXNfaW50KCRyaWQpKSB7CgkJCQkkaWRzW10gPSAk cmlkOwoJCQl9CgkJfQoJfQoJLy8gVE9ETzogaXMgdGhpcyBuZWVkZWQgdG8gb3ZlcndyaXRl IGlmIHRhZyBhbHJlYWR5IHNldD8KCWlmICghZW1wdHkoJHNtZF90aGlzdGFnKSkgewoJCSRp ZHMgPSBhcnJheSgkc21kX3RoaXN0YWdbJ3RhZ19pZCddKTsKCX0KCglyZXR1cm4gYXJyYXko J2NvbnRleHQnID0+ICRjdHh0LCAnc2NvcGUnID0+ICRzY3AsICdpZCcgPT4gJGlkcyk7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBMb2FkIGN1cnJlbnQgdGFnIGludG8g Z2xvYmFsIHNjb3BlCmZ1bmN0aW9uIHNtZF90YWdfcG9wdWxhdGUoJHJvdykgewoJZ2xvYmFs ICRzbWRfdGhpc3RhZzsKCSRzbWRfdGhpc3RhZ1sndGFnX2lkJ10gPSAkcm93WydpZCddOwoJ JHNtZF90aGlzdGFnWyd0YWdfbmFtZSddID0gJHJvd1snbmFtZSddOwoJJHNtZF90aGlzdGFn Wyd0YWdfbGV0dGVybmFtZSddID0gc21kX3RhZ3NfdXRmOF9zdWJzdHIoJHJvd1snbmFtZSdd LCAwLCAxKTsKCSRzbWRfdGhpc3RhZ1sndGFnX2xldHRlcnRpdGxlJ10gPSBzbWRfdGFnc191 dGY4X3N1YnN0cigkcm93Wyd0aXRsZSddLCAwLCAxKTsKCSRzbWRfdGhpc3RhZ1sndGFnX3R5 cGUnXSA9ICRyb3dbJ3R5cGUnXTsKCSRzbWRfdGhpc3RhZ1sndGFnX3BhcmVudCddID0gJHJv d1sncGFyZW50J107Cgkkc21kX3RoaXN0YWdbJ3RhZ190aXRsZSddID0gJHJvd1sndGl0bGUn XTsKCSRzbWRfdGhpc3RhZ1sndGFnX2Rlc2NyaXB0aW9uJ10gPSAkcm93WydkZXNjcmlwdGlv biddOwoJJHNtZF90aGlzdGFnWyd0YWdfY2hpbGRyZW4nXSA9ICRyb3dbJ2NoaWxkcmVuJ107 Cgkkc21kX3RoaXN0YWdbJ3RhZ19sZXZlbCddID0gJHJvd1snbGV2ZWwnXTsKCSRzbWRfdGhp c3RhZ1sndGFnX2NvdW50J10gPSAkcm93Wydjb3VudCddOwoJJHNtZF90aGlzdGFnWyd0YWdf aW5kZW50J10gPSAkcm93WydpbmRlbnQnXTsKCSRzbWRfdGhpc3RhZ1sndGFnX3dlaWdodCdd ID0gJHJvd1snd2VpZ2h0J107Cgkkc21kX3RoaXN0YWdbJ3RhZ19maXJzdCddID0gJHJvd1sn Zmlyc3QnXTsKCSRzbWRfdGhpc3RhZ1sndGFnX2xhc3QnXSA9ICRyb3dbJ2xhc3QnXTsKfQoK Ly8gVGhhbmtzIGh0dHA6Ly91czIucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3Vic3Ry LnBocApmdW5jdGlvbiBzbWRfdGFnc191dGY4X3N1YnN0cigkc3RyLCAkc3RhcnQpIHsKCXBy ZWdfbWF0Y2hfYWxsKCIvLi91IiwgJHN0ciwgJGFyKTsKCWlmKGZ1bmNfbnVtX2FyZ3MoKSA+ PSAzKSB7CgkJJGVuZCA9IGZ1bmNfZ2V0X2FyZygyKTsKCQlyZXR1cm4gam9pbignJyxhcnJh eV9zbGljZSgkYXJbMF0sJHN0YXJ0LCRlbmQpKTsKCX0gZWxzZSB7CgkJcmV0dXJuIGpvaW4o JycsYXJyYXlfc2xpY2UoJGFyWzBdLCRzdGFydCkpOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLy8gQWxsIHRhZ3MvY291bnRzCmZ1bmN0aW9uIHNtZF90YWdfbGlzdF9h ZG0oJGF0dHMpIHsKCWluY2x1ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoL3RhZ2hhbmRsZXJz LnBocCc7CglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSd0eXBlJyAgICAgICA9PiAnYXJ0aWNs ZScsCgkJJ2luZGVudCcgICAgID0+ICcmIzE2MDsmIzE2MDsnLAoJCSdjb3VudCcgICAgICA9 PiAxLAoJCSdsYWJlbCcgICAgICA9PiAnJywKCQknbGFiZWx0YWcnICAgPT4gJycsCgkJJ3dy YXB0YWcnICAgID0+ICcnLAoJCSdicmVhaycgICAgICA9PiAnJywKCQknY2xhc3MnICAgICAg PT4gX19GVU5DVElPTl9fLAoJCSdicmVha2NsYXNzJyA9PiAnJywKCSksJGF0dHMpKTsKCgkk dmFsaWRUeXBlcyA9IGFycmF5KCdsaXN0JyA9PiAnYXJ0aWNsZScsICdpbWFnZScgPT4gJ2lt YWdlJywgJ2ZpbGUnID0+ICdmaWxlJywgJ2xpbmsnID0+ICdsaW5rJyk7CgkkcnMgPSBzbWRf dGFnX3RyZWUoJ3Jvb3QnLCAkdHlwZSwgJzE9MScsIFNNRF9UQUcpOwoJJHJzYyA9IGdldFJv d3MoIlNFTEVDVCB0eGwudGFnX2lkLCB0eGMubmFtZQoJCQlGUk9NICIuUEZYLlNNRF9UQUcu IiBBUyB0eHQsICIuUEZYLlNNRF9UQUdDLiIgQVMgdHhsLCAiLlBGWC4idHhwX2NhdGVnb3J5 IEFTIHR4YwoJCQlXSEVSRSB0eHQudHlwZSA9ICckdHlwZScgQU5EIHR4dC5pZCA9IHR4bC50 YWdfaWQgQU5EIHR4bC5jYXRfaWQgPSB0eGMuaWQiKTsKCSRyc2NvdXQgPSBhcnJheSgpOwoJ aWYgKCRyc2MpIHsKCQlmb3JlYWNoICgkcnNjIGFzICRpZHggPT4gJHJvdykgewoJCQkkcnNj b3V0WyRyb3dbJ3RhZ19pZCddXSA9ICRyb3dbJ25hbWUnXTsKCQl9Cgl9CgoJaWYgKCRycykg ewoJCSRvdXQgPSBhcnJheSgpOwoJCSR0b3RhbHMgPSBhcnJheSgpOwoJCSRwcmVmID0gc21k X3RhZ3NfcHJlZl9nZXQoJ3NtZF90YWdfcF9tYXN0ZXInLCAxKTsKCQkkZ29kID0gJHByZWZb J3NtZF90YWdfcF9tYXN0ZXInXVsndmFsJ107CgoJCS8vIFRhbGx5IGVhY2ggdGFnJ3MgdXNh Z2UKCQlpZiAoJGNvdW50KSB7CgkJCSRyc3UgPSBzYWZlX3Jvd3Nfc3RhcnQoJ3RhZ19pZCwg Y291bnQoKikgYXMgbnVtJywgU01EX1RBR1UsICJ0eXBlPSckdHlwZScgR1JPVVAgQlkgdGFn X2lkIik7CgkJCXdoaWxlICgkcm93ID0gbmV4dFJvdygkcnN1KSkgewoJCQkJJHRhZ2lkID0g JHJvd1sndGFnX2lkJ107CgkJCQkkbnVtID0gJHJvd1snbnVtJ107CgkJCQkkaWRzID0gc2Fm ZV9jb2x1bW4oJ2l0ZW1faWQnLCBTTURfVEFHVSwgInR5cGU9JyR0eXBlJyBBTkQgdGFnX2lk PSckdGFnaWQnIik7CgkJCQkkdG90YWxzWyR0YWdpZF0gPSBhcnJheSgkbnVtLCBqb2luKCIs IiwkaWRzKSk7CgkJCX0KCQl9CgoJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7CgkJCWV4dHJh Y3QoJHJvdyk7CgkJCSRwYXJlbnQgPSAoaXNzZXQoJHBhcmVudCkpID8gJHBhcmVudCA6ICcn OyAvLyBQYXJlbnQgbWlnaHQgbm90IGJlIGRlZmluZWQKCQkJJHJvd1sndHlwZSddID0gJHR5 cGU7CgkJCWlmIChpc3NldCgkdG90YWxzWyRpZF0pKSB7CgkJCQkkcm93Wydjb3VudCddID0g JHRvdGFsc1skaWRdWzBdOwoJCQkJJGV2ID0gYXJyYXlfa2V5cygkdmFsaWRUeXBlcywkdHlw ZSk7CgkJCQkkdXJsID0gJ2luZGV4LnBocD9ldmVudD0nLiRldlswXS5hLidzZWFyY2hfbWV0 aG9kPWlkJy5hLidjcml0PScuJHRvdGFsc1skaWRdWzFdOwoJCQkJJGNudG9wID0gc3AuaHJl ZignKCcuJHRvdGFsc1skaWRdWzBdLicpJywgJHVybCk7CgkJCX0gZWxzZSB7CgkJCQkkcm93 Wydjb3VudCddID0gMDsKCQkJCSRjbnRvcCA9IHNwLicoMCknOwoJCQl9CgoJCQkkcm93ZGF0 YSA9ICc8c3BhbiBuYW1lPSJzbWRfdGFnbmFtIiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kbmFt ZQoJCQkJCS4nPC9zcGFuPjxzcGFuIG5hbWU9InNtZF90YWdpZCIgY2xhc3M9InNtZF9oaWRk ZW4iPicuJGlkCgkJCQkJLic8L3NwYW4+PHNwYW4gbmFtZT0ic21kX3RhZ3R0bCIgY2xhc3M9 InNtZF9oaWRkZW4iPicuJHRpdGxlCgkJCQkJLic8L3NwYW4+PHNwYW4gbmFtZT0ic21kX3Rh Z3BhciIgY2xhc3M9InNtZF9oaWRkZW4iPicuJHBhcmVudAoJCQkJCS4nPC9zcGFuPjxzcGFu IG5hbWU9InNtZF90YWdjYXQiIGNsYXNzPSJzbWRfaGlkZGVuIj4nLigoaXNzZXQoJHJzY291 dFskaWRdKSkgPyAkcnNjb3V0WyRpZF0gOiAnJykKCQkJCQkuJzwvc3Bhbj48c3BhbiBuYW1l PSJzbWRfdGFnZHNjIiBjbGFzcz0ic21kX2hpZGRlbiI+Jy4kZGVzY3JpcHRpb24KCQkJCQku Jzwvc3Bhbj4nOwoJCQkkb3V0W10gPSBhcnJheSgKCQkJCSdkYXRhJyA9PiAkcm93ZGF0YS5z dHJfcmVwZWF0KCRpbmRlbnQsICRsZXZlbCAqIDEpIC4gJHRpdGxlIC4gKCgkY291bnQpID8g JGNudG9wIDogJycpLm4sCgkJCQknbGV2ZWwnID0+ICRsZXZlbCwKCQkJCSdjbGFzcycgPT4g KCRnb2Q9PSRuYW1lID8gYXJyYXkoJ3NtZF90YWdfbWFzdGVyJywgJ3NtZF90YWdfcGFyZW50 JykgOiAoJGdvZD09JHBhcmVudCA/IGFycmF5KCdzbWRfdGFnX21hc3RlcicsJ3NtZF90YWdf Y2hpbGQnKSA6IGFycmF5KCkpKSwKCQkJCSk7Ci8vCQkJJHNtZF90aGlzdGFnID0gYXJyYXko KTsKCQl9CgoJCWlmICgkb3V0KSB7CgkJCSR3cmFwaXQgPSBkb19saXN0KCR3cmFwdGFnLCAi OiIpOwoKCQkJaWYgKCR3cmFwaXRbMF0gPT0gJ3RhYmxlJykgewoJCQkJLy8gVGFibGVzIGFy ZSBhIHNwZWNpYWwgY2FzZQoJCQkJJHRvdGFsSXRlbXMgPSAkcm93cyA9IGNvdW50KCRycyk7 CgkJCQkkc3RlcCA9IDE7CgkJCQkkY29scyA9IDE7CgkJCQkkbnVtb3B0cyA9IGNvdW50KCR3 cmFwaXQpOwoJCQkJLy8gRWFjaCBzdWNjZXNzaXZlIGxldmVsIG92ZXJyaWRlcyB0aGUgcHJl dmlvdXMgc3RlcCBzbyBieSB0aGUgZW5kIG9mIHRoZSBpZnMsCgkJCQkvLyAzIHZhbHVlcyBh cmUgc2V0IHVwOiBzdGVwLCByb3dzIGFuZCBjb2xzCgkJCQlpZiAoJG51bW9wdHMgPiAxKSB7 CgkJCQkJJGNvbHMgPSAkd3JhcGl0WzFdOwoJCQkJCSRyb3dzID0gY2VpbCgkdG90YWxJdGVt cy8kY29scyk7CgkJCQl9CgkJCQlpZiAoJG51bW9wdHMgPiAyKSB7CgkJCQkJaWYgKCR3cmFw aXRbMl0gPT0gJ3Jvd3MnKSB7CgkJCQkJCSRyb3dzID0gJHdyYXBpdFsxXTsKCQkJCQkJJGNv bHMgPSBjZWlsKCR0b3RhbEl0ZW1zLyRyb3dzKTsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoJG51 bW9wdHMgPiAzKSB7CgkJCQkJaWYgKCR3cmFwaXRbM10gPT0gJ2J5Y29sJykgewoJCQkJCQkk c3RlcCA9ICgkd3JhcGl0WzJdPT0nY29scycpID8gY2VpbCgkdG90YWxJdGVtcy8kY29scykg OiAkcm93czsKCQkJCQkJaWYgKCR3cmFwaXRbMl09PSdjb2xzJykgewoJCQkJCQkJJHJvd3Mg PSAkc3RlcDsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRjb2xzID0gY2VpbCgkdG90YWxJdGVt cy8kcm93cyk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJLy8gR2VuZXJhdGUgdGFibGUg YmFzZWQgb24gYWJvdmUgcnVsZXMKCQkJCSR0YmxvdXQgPSBhcnJheSgpOwoJCQkJJGNlbGxD dHIgPSAwOwoJCQkJJGNsYXNzID0gKCFlbXB0eSgkY2xhc3MpKSA/ICcgY2xhc3M9IicuJGNs YXNzLiciJyA6ICcnOwoJCQkJJGJyZWFrY2xhc3MgPSAoIWVtcHR5KCRicmVha2NsYXNzKSkg PyAnIGNsYXNzPSInLiRicmVha2NsYXNzLiciJyA6ICcnOwoKCQkJCWZvciAoJGlkeCA9IDA7 ICRpZHggPCAkcm93czsgJGlkeCsrKSB7CgkJCQkJJGJsZCA9IGFycmF5KCk7CgkJCQkJZm9y ICgkamR4ID0gMDsgJGpkeCA8ICRjb2xzOyAkamR4KyspIHsKCQkJCQkJJG9mZnNldCA9ICgk d3JhcGl0WzNdPT0nYnljb2wnKSA/ICgkamR4ICogJHN0ZXApICsgJGlkeCA6ICRjZWxsQ3Ry OwoJCQkJCQkkYmNsYXNzID0gKGlzc2V0KCRvdXRbJG9mZnNldF1bJ2NsYXNzJ10pKSA/IGpv aW4oJyAnLCAkb3V0WyRvZmZzZXRdWydjbGFzcyddKSA6ICcnOwoJCQkJCQkkYmxkW10gPSAo aXNzZXQoJG91dFskb2Zmc2V0XVsnZGF0YSddKSkgPyB0ZGEoJG91dFskb2Zmc2V0XVsnZGF0 YSddLCAoJGJjbGFzcyA/ICcgY2xhc3MgPSAiJy4kYmNsYXNzLiciJzogJycpKSA6IHRkKCcn KTsKCQkJCQkJJGNlbGxDdHIrKzsKCQkJCQl9CgkJCQkJJHRibG91dFtdID0gdHIoam9pbign JywgJGJsZCksICRicmVha2NsYXNzKTsKICAgICAgICAgICAgfQoKCQkJCXJldHVybiBkb0xh YmVsKCRsYWJlbCwgJGxhYmVsdGFnKS50YWcoam9pbihuLCAkdGJsb3V0KSwgJHdyYXBpdFsw XSwgJGNsYXNzKTsKCQkJfSBlbHNlIGlmICgkd3JhcGl0WzBdID09ICdsaXN0JykgewoJCQkJ Ly8gVGFncyBieSBsaXN0LCBvcHRpb25hbGx5IHNwbGl0IGludG8gbmV3IHJvdy9jb2wgZXZl cnkgTiBpdGVtcwoJCQkJJHRvdGFsSXRlbXMgPSBjb3VudCgkcnMpOwoJCQkJJGxpbSA9IDA7 CgkJCQkkc3R5bGUgPSAkYnJlYWtzdHlsZSA9ICcnOwoKCQkJCSRudW1vcHRzID0gY291bnQo JHdyYXBpdCk7CgoJCQkJaWYgKCRudW1vcHRzID4gMSkgewoJCQkJCSRsaW0gPSAkd3JhcGl0 WzFdOwoJCQkJfQoJCQkJaWYgKCRudW1vcHRzID4gMykgewoJCQkJCWlmICgkd3JhcGl0WzNd ID09ICdieXJvdycpIHsKCQkJCQkJJHN0eWxlID0gJyBzdHlsZT0iY2xlYXI6Ym90aDsiJzsK CQkJCQkJJGJyZWFrc3R5bGUgPSAnIHN0eWxlPSJmbG9hdDpsZWZ0OyInOwoJCQkJCX0gZWxz ZSB7CgkJCQkJCSRzdHlsZSA9ICcgc3R5bGU9ImZsb2F0OmxlZnQ7Iic7CgkJCQkJfQoJCQkJ fQoKCQkJCS8vIEdlbmVyYXRlIHRoZSBsaXN0CgkJCQkkbGlzdG91dCA9IGFycmF5KCk7CgkJ CQkkaXRlbUN0ciA9IDA7CgkJCQkkY2xhc3MgPSAoIWVtcHR5KCRjbGFzcykpID8gJyBjbGFz cz0iJy4kY2xhc3MuJyInIDogJyc7CgoJCQkJZm9yZWFjaCAoJG91dCBhcyAkaXRlbSkgewoJ CQkJCSRiY2xhc3MgPSBqb2luKCcgJywgYXJyYXlfbWVyZ2UoJGl0ZW1bJ2NsYXNzJ10sIGFy cmF5KCRicmVha2NsYXNzKSkpOwoJCQkJCSRiY2xhc3MgPSAoIWVtcHR5KCRiY2xhc3MpKSA/ ICcgY2xhc3M9IicuJGJjbGFzcy4nIicgOiAnJzsKCQkJCQlpZiAoJGl0ZW1DdHIgPT0gMCkg ewoJCQkJCQkkbGlzdG91dFtdID0gIjx1bCRzdHlsZT4iOwoJCQkJCX0KCQkJCQkkbGlzdG91 dFtdID0gJzxsaScuJGJjbGFzcy4kYnJlYWtzdHlsZS4nPicuJGl0ZW1bJ2RhdGEnXS4nPC9s aT4nOwoJCQkJCSRpdGVtQ3RyKys7CgkJCQkJaWYgKCgkbGltID4gMCAmJiAkaXRlbUN0ciA+ PSAkbGltKSB8fCAkaXRlbUN0ciA+PSAkdG90YWxJdGVtcy0xKSB7CgkJCQkJCSRsaXN0b3V0 W10gPSAnPC91bD4nOwoJCQkJCQkkaXRlbUN0ciA9IDA7CgkJCQkJfQoJCQkJfQoKCQkJCXJl dHVybiBkb0xhYmVsKCRsYWJlbCwgJGxhYmVsdGFnKS50YWcoam9pbihuLCAkbGlzdG91dCks ICdkaXYnLCAkY2xhc3MpOwoJCQl9IGVsc2UgaWYgKCR3cmFwaXRbMF0gPT0gJ2xpc3RncnAn KSB7CgkJCQkvLyBUYWdzIGJ5IGxpc3QsIHNwbGl0IGludG8gbmV3IHJvdy9jb2wgZXZlcnkg dGltZSBhIG5ldyBsZXZlbCAnTicgaXMgcmVhY2hlZAoJCQkJJHRvdGFsSXRlbXMgPSBjb3Vu dCgkcnMpOwoJCQkJJGxldmVsID0gMDsKCQkJCSRzdHlsZSA9ICRicmVha3N0eWxlID0gJyc7 CgoJCQkJJG51bW9wdHMgPSBjb3VudCgkd3JhcGl0KTsKCgkJCQlpZiAoJG51bW9wdHMgPiAx KSB7CgkJCQkJJGxldmVsID0gJHdyYXBpdFsxXTsKCQkJCX0KCQkJCWlmICgkbnVtb3B0cyA+ IDMpIHsKCQkJCQlpZiAoJHdyYXBpdFszXSA9PSAnYnlyb3cnKSB7CgkJCQkJCSRzdHlsZSA9 ICcgY2xhc3M9InNtZF9jbGVhciInOwoJCQkJCQkkYnJlYWtzdHlsZSA9ICcgY2xhc3M9InNt ZF9mcmVlZm9ybV9ieXJvdyInOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRzdHlsZSA9ICcgY2xh c3M9InNtZF9mcmVlZm9ybV9ieWNvbCInOwoJCQkJCX0KCQkJCX0KCgkJCQkvLyBHZW5lcmF0 ZSB0aGUgbGlzdAoJCQkJJGxpc3RvdXQgPSBhcnJheSgpOwoJCQkJJGl0ZW1DdHIgPSAwOwoJ CQkJJGNsYXNzID0gKCFlbXB0eSgkY2xhc3MpKSA/ICcgY2xhc3M9IicuJGNsYXNzLiciJyA6 ICcnOwoKCQkJCSRwcmV2ZWwgPSAwOwoJCQkJZm9yZWFjaCAoJG91dCBhcyAkaXRlbSkgewoJ CQkJCSRiY2xhc3MgPSBqb2luKCcgJywgYXJyYXlfbWVyZ2UoJGl0ZW1bJ2NsYXNzJ10sIGFy cmF5KCRicmVha2NsYXNzKSkpOwoJCQkJCSRiY2xhc3MgPSAoIWVtcHR5KCRiY2xhc3MpKSA/ ICcgY2xhc3M9IicuJGJjbGFzcy4nIicgOiAnJzsKCQkJCQlpZiAoJHByZXZlbCA+PSAkaXRl bVsnbGV2ZWwnXSAmJiAkaXRlbVsnbGV2ZWwnXSA8PSAkbGV2ZWwpIHsKCQkJCQkJaWYgKCRp dGVtQ3RyID4gMCkgewoJCQkJCQkJJGxpc3RvdXRbXSA9ICc8L3VsPic7CgkJCQkJCX0KCQkJ CQkJJGxpc3RvdXRbXSA9ICI8dWwkc3R5bGU+IjsKCQkJCQl9CgkJCQkJJGxpc3RvdXRbXSA9 ICc8bGknLiRiY2xhc3MuJGJyZWFrc3R5bGUuJz4nLiRpdGVtWydkYXRhJ10uJzwvbGk+JzsK CQkJCQkkcHJldmVsID0gJGl0ZW1bJ2xldmVsJ107CgkJCQkJaWYgKCRpdGVtQ3RyID49ICR0 b3RhbEl0ZW1zLTEpIHsKCQkJCQkJJGxpc3RvdXRbXSA9ICc8L3VsPic7CgkJCQkJfQoJCQkJ CSRpdGVtQ3RyKys7CgkJCQl9CgoJCQkJcmV0dXJuIGRvTGFiZWwoJGxhYmVsLCAkbGFiZWx0 YWcpLnRhZyhqb2luKG4sICRsaXN0b3V0KSwgJ2RpdicsICRjbGFzcyk7CgoJCQl9IGVsc2Ug ewoJCQkJLy9UT0RPOiBvbmx5IHVzZSB0aGUgZGF0YSBjb2x1bW4gZnJvbSAkb3V0CgkJCQly ZXR1cm4gZG9MYWJlbCgkbGFiZWwsICRsYWJlbHRhZykuZG9XcmFwKCRvdXQsICR3cmFwaXRb MF0sICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7CgkJCX0KCQl9CgkJcmV0dXJuICcn OwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi8vIENsb25lZCBnZXRUcmVlKCkgZnJvbSB0eHBsaWJfZGIu cGhwIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBkb2Vzbid0IGV4dHJhY3QgZGVzY3JpcHRpb24K ZnVuY3Rpb24gc21kX3RhZ190cmVlKCRyb290LCAkdHlwZSwgJHdoZXJlPScxPTEnLCAkdGJs PSd0eHBfY2F0ZWdvcnknKSB7Cgkkcm9vdCA9IGRvU2xhc2goJHJvb3QpOwoJJHR5cGUgPSBk b1NsYXNoKCR0eXBlKTsKCgkkcnMgPSBzYWZlX3JvdygKCQkibGZ0IGFzIGwsIHJndCBhcyBy IiwKCQkkdGJsLAoJCSJuYW1lPSckcm9vdCcgYW5kIHR5cGUgPSAnJHR5cGUnIgoJKTsKCglp ZiAoISRycykgcmV0dXJuIGFycmF5KCk7CglleHRyYWN0KCRycyk7CgoJJG91dCA9IGFycmF5 KCk7CgkkcmlnaHQgPSBhcnJheSgpOwoKCSRycyA9IHNhZmVfcm93c19zdGFydCgKCQkiaWQs IG5hbWUsIGxmdCwgcmd0LCBwYXJlbnQsIHRpdGxlLCBkZXNjcmlwdGlvbiwgZGVzY19odG1s IiwKCQkkdGJsLAoJCSJsZnQgYmV0d2VlbiAkbCBhbmQgJHIgYW5kIHR5cGUgPSAnJHR5cGUn IGFuZCBuYW1lICE9ICdyb290JyBhbmQgJHdoZXJlIG9yZGVyIGJ5IGxmdCBhc2MiCgkpOwoK CXdoaWxlICgkcnMgYW5kICRyb3cgPSBuZXh0Um93KCRycykpIHsKCQlleHRyYWN0KCRyb3cp OwoJCXdoaWxlIChjb3VudCgkcmlnaHQpID4gMCAmJiAkcmlnaHRbY291bnQoJHJpZ2h0KS0x XSA8ICRyZ3QpIHsKCQkJYXJyYXlfcG9wKCRyaWdodCk7CgkJfQoKCQkkb3V0W10gPQoJCQlh cnJheSgKCQkJCSdpZCcgPT4gJGlkLAoJCQkJJ25hbWUnID0+ICRuYW1lLAoJCQkJJ3RpdGxl JyA9PiAkdGl0bGUsCgkJCQknbGV2ZWwnID0+IGNvdW50KCRyaWdodCksCgkJCQknY2hpbGRy ZW4nID0+ICgkcmd0IC0gJGxmdCAtIDEpIC8gMiwKCQkJCSdkZXNjcmlwdGlvbicgPT4gJGRl c2NyaXB0aW9uLAoJCQkJJ2Rlc2NfaHRtbCcgPT4gJGRlc2NfaHRtbCwKCQkJCSdwYXJlbnQn ID0+ICRwYXJlbnQsCgkJCSk7CgoJCSRyaWdodFtdID0gJHJndDsKCX0KCXJldHVybigkb3V0 KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEZpbmQgc29tZSB2YWx1ZSBp biBhIHRyZWUgYW5kIHJldHVybiB0aGUgbWF0Y2hpbmcgZW50cmllcwpmdW5jdGlvbiBzbWRf dGFnX3RyZWVfc2VhcmNoKCR2YWwsICR0cmVlLCAkbGltaXQ9MCwgJGZpZWxkPSduYW1lJykg ewoJJGN0ciA9IDA7Cgkkb3V0ID0gYXJyYXkoKTsKCWZvcmVhY2ggKCR0cmVlIGFzICRpZHgg PT4gJGVudHJ5KSB7CgkJaWYgKCRlbnRyeVskZmllbGRdID09ICR2YWwpIHsKCQkJJG91dFtd ID0gJHRyZWVbJGlkeF07CgkJCSRjdHIrKzsKCQl9CgkJaWYgKCRsaW1pdCA+IDAgJiYgJGN0 ciA9PSAkbGltaXQpIHsKCQkJYnJlYWs7CgkJfQoJfQoJcmV0dXJuICRvdXQ7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQSFA0IGVxdWl2YWxlbnQgb2YgYXJyYXlfY29t YmluZSAoZnJvbSBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFycmF5 LWNvbWJpbmUucGhwKQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnYXJyYXlfY29tYmluZScpKSB7 CmZ1bmN0aW9uIGFycmF5X2NvbWJpbmUoJGFycjEsICRhcnIyKSB7Cgkkb3V0ID0gYXJyYXko KTsKCgkkYXJyMSA9IGFycmF5X3ZhbHVlcygkYXJyMSk7CgkkYXJyMiA9IGFycmF5X3ZhbHVl cygkYXJyMik7CgoJZm9yZWFjaCgkYXJyMSBhcyAka2V5MSA9PiAkdmFsdWUxKSB7Cgkkb3V0 WyhzdHJpbmcpJHZhbHVlMV0gPSAkYXJyMlska2V5MV07Cgl9CgoJcmV0dXJuICRvdXQ7Cn0K fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFBVQkxJQyBUQUdTCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDaGVjayB0YWdzIG9mIGEgcGFydGljdWxhciB0eXBl LCBvciB0aG9zZSB0aGF0IGhhdmUgYSBzcGVjaWZpYyBwcm9wZXJ0eSBpbiBjb250ZXh0Lgov L1RPRE86IFRoaW5rIGFib3V0IGNoZWNraW5nIGxvZ2ljLCBlZywgbmFtZT0iYnVzaW5lc3N8 cGxlYXN1cmUiIChPUikgbmFtZT0iYnVzaW5lc3MrcGxlYXN1cmUiIChBTkQpCmZ1bmN0aW9u IHNtZF9pZl90YWcgKCRhdHRzLCAkdGhpbmcpIHsKCWdsb2JhbCAkc21kX3RhZ3MsICRzbWRf dGFnX3R5cGUsICRzbWRfdGhpc3RhZzsKCglpZiAoIXNtZF90YWdzX3RhYmxlX2V4aXN0KCkp IHsKCQl0cmlnZ2VyX2Vycm9yKGdUeHQoJ3NtZF90YWdfbm90X2F2YWlsYWJsZScpKTsKCQly ZXR1cm47Cgl9CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkndHlwZScgICAgICAgID0+IE5V TEwsCgkJJ2lkJyAgICAgICAgICA9PiBOVUxMLAoJCSduYW1lJyAgICAgICAgPT4gTlVMTCwK CQkndGl0bGUnICAgICAgID0+IE5VTEwsCgkJJ2Rlc2NyaXB0aW9uJyA9PiBOVUxMLAoJCSdw YXJlbnQnICAgICAgPT4gTlVMTCwKCQknY291bnQnICAgICAgID0+IE5VTEwsCgkJJ2NoaWxk cmVuJyAgICA9PiBOVUxMLAoJCSdsZXZlbCcgICAgICAgPT4gTlVMTCwKCQknaXMnICAgICAg ICAgID0+IE5VTEwsCgkpLCRhdHRzKSk7CgoJLy8gVmFsaWRhdGUgYXR0cwoJJHZhbGlkVHlw ZXMgPSBhcnJheSgnYXJ0aWNsZScsJ2ltYWdlJywnZmlsZScsJ2xpbmsnKTsKCSRjdHh0ID0g c21kX3RhZ3NfY29udGV4dCgpOwoJJGN0eXBlID0gJGN0eHRbJ2NvbnRleHQnXTsKCSR0eXBl ID0gKGluX2FycmF5KCR0eXBlLCAkdmFsaWRUeXBlcykpID8gJHR5cGUgOiAoICgkY3R4dFsn Y29udGV4dCddKSA/ICRjdHh0Wydjb250ZXh0J10gOiAoICgkc21kX3RhZ190eXBlKSA/ICRz bWRfdGFnX3R5cGUgOiAgJHZhbGlkVHlwZXNbMF0gKSApOwoKCSRlcXRlc3QgPSBhcnJheSgp OwoJJG51dGVzdCA9IGFycmF5KCk7Cgkkb3BSRSA9ICcvKFw+fFw+XD18XDx8XDxcPXxcISko WzAtOWEtekEtWi0gXSspLyc7CgoJLy8gTWFzdGVyIHRhZz8KCSRwcmVmID0gc21kX3RhZ3Nf cHJlZl9nZXQoJ3NtZF90YWdfcF9tYXN0ZXInLCAxKTsKCSRnb2QgPSAkcHJlZlsnc21kX3Rh Z19wX21hc3RlciddWyd2YWwnXTsKCSRlcXRlc3RbJ21hc3RlciddID0gKCgkaXMgPT0gJ21h c3RlcicpICYmICgkZ29kICE9ICcnKSkgPyAkZ29kIDogTlVMTDsKCgkvLyBTdGFydCAvIGVu ZCBvZiBsaXN0PwoJJGVxdGVzdFsnZmlyc3QnXSA9ICgkaXMgPT0gJ2ZpcnN0JykgPyAxIDog TlVMTDsKCSRlcXRlc3RbJ2xhc3QnXSA9ICgkaXMgPT0gJ2xhc3QnKSA/IDEgOiBOVUxMOwoK CS8vIFRPRE86IENvbnNvbGlkYXRlIHRoaXMgaW50byBhIGxvb3AgZm9yIGVhY2ggJ2lkJywg J25hbWUnLCB0eXBlJywgJ3RpdGxlJywgLi4uCgkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJG9w UkUsICRpZCwgJHBhcnRzKTsKCSRlcXRlc3RbJ2lkJ10gPSAoJG51bTw9MCkgPyAkaWQgOiBO VUxMOwoJaWYgKCRudW0+MCkgJG51dGVzdFsnaWQnXSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9 PiAkcGFydHNbMl1bMF0pOwoKCSRudW0gPSBwcmVnX21hdGNoX2FsbCgkb3BSRSwgJG5hbWUs ICRwYXJ0cyk7CgkkZXF0ZXN0WyduYW1lJ10gPSAoJG51bTw9MCkgPyAkbmFtZSA6IE5VTEw7 CglpZiAoJG51bT4wKSAkbnV0ZXN0WyduYW1lJ10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4g JHBhcnRzWzJdWzBdKTsKCgkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICR0eXBlLCAk cGFydHMpOwoJJGVxdGVzdFsndHlwZSddID0gKCRudW08PTApID8gJHR5cGUgOiBOVUxMOwoJ aWYgKCRudW0+MCkgJG51dGVzdFsndHlwZSddID0gYXJyYXkoJHBhcnRzWzFdWzBdID0+ICRw YXJ0c1syXVswXSk7CgoJJG51bSA9IHByZWdfbWF0Y2hfYWxsKCRvcFJFLCAkdGl0bGUsICRw YXJ0cyk7CgkkZXF0ZXN0Wyd0aXRsZSddID0gKCRudW08PTApID8gJHRpdGxlIDogTlVMTDsK CWlmICgkbnVtPjApICRudXRlc3RbJ3RpdGxlJ10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4g JHBhcnRzWzJdWzBdKTsKCgkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICRkZXNjcmlw dGlvbiwgJHBhcnRzKTsKCSRlcXRlc3RbJ2Rlc2NyaXB0aW9uJ10gPSAoJG51bTw9MCkgPyAk ZGVzY3JpcHRpb24gOiBOVUxMOwoJaWYgKCRudW0+MCkgJG51dGVzdFsnZGVzY3JpcHRpb24n XSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0pOwoKCSRudW0gPSBwcmVn X21hdGNoX2FsbCgkb3BSRSwgJHBhcmVudCwgJHBhcnRzKTsKCSRlcXRlc3RbJ3BhcmVudCdd ID0gKCRudW08PTApID8gJHBhcmVudCA6IE5VTEw7CglpZiAoJG51bT4wKSAkbnV0ZXN0Wydw YXJlbnQnXSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFydHNbMl1bMF0pOwoKCSRudW0g PSBwcmVnX21hdGNoX2FsbCgkb3BSRSwgJGNvdW50LCAkcGFydHMpOwoJJGVxdGVzdFsnY291 bnQnXSA9ICgkbnVtPD0wKSA/ICRjb3VudCA6IE5VTEw7CglpZiAoJG51bT4wKSAkbnV0ZXN0 Wydjb3VudCddID0gYXJyYXkoJHBhcnRzWzFdWzBdID0+ICRwYXJ0c1syXVswXSk7CgoJJG51 bSA9IHByZWdfbWF0Y2hfYWxsKCRvcFJFLCAkY2hpbGRyZW4sICRwYXJ0cyk7CgkkZXF0ZXN0 WydjaGlsZHJlbiddID0gKCRudW08PTApID8gJGNoaWxkcmVuIDogTlVMTDsKCWlmICgkbnVt PjApICRudXRlc3RbJ2NoaWxkcmVuJ10gPSBhcnJheSgkcGFydHNbMV1bMF0gPT4gJHBhcnRz WzJdWzBdKTsKCgkkbnVtID0gcHJlZ19tYXRjaF9hbGwoJG9wUkUsICRsZXZlbCwgJHBhcnRz KTsKCSRlcXRlc3RbJ2xldmVsJ10gPSAoJG51bTw9MCkgPyAkbGV2ZWwgOiBOVUxMOwoJaWYg KCRudW0+MCkgJG51dGVzdFsnbGV2ZWwnXSA9IGFycmF5KCRwYXJ0c1sxXVswXSA9PiAkcGFy dHNbMl1bMF0pOwoKCXRyYWNlX2FkZCgnW3NtZF9pZl90YWcgZXF1YWxpdHkgdGVzdHM6ICcu IGpvaW4gKCcsICcsICRlcXRlc3QpIC4gJ10nKTsKCXRyYWNlX2FkZCgnW3NtZF9pZl90YWcg bnVtZXJpYyB0ZXN0czogJy4gIHByaW50X3IoJG51dGVzdCwgdHJ1ZSkgLiAnXScpOwoKCS8v IEluaXQKCSRvdXQgPSAkcmVzdWx0ID0gJG51bVRlc3RzID0gMDsKCWlmICghaXNzZXQoJHNt ZF90YWdzWyR0eXBlXSkgJiYgZW1wdHkoJHNtZF90aGlzdGFnKSkgewoJCS8vIG5vdCBpbiBz Y29wZQoJfSBlbHNlIHsKCQkvLyBFcXVhbGl0eSBjb21wYXJpc29ucwoJCWZvcmVhY2ggKCRl cXRlc3QgYXMgJHRuYW1lID0+ICR0dmFsKSB7CgkJCWlmICghaXNfbnVsbCgkdHZhbCkpIHsK CQkJCSRudW1UZXN0cysrOwoKCQkJCS8vIE1hc3RlciBpcyBhIHNwZWNpYWwgY2FzZSB3aGlj aCBjaGVja3MgaWYgdGhlIHBhcmVudCBpcyB0aGUgbWFzdGVyIHRhZwoJCQkJJHRuYW1lID0g KCR0bmFtZSA9PSAnbWFzdGVyJykgPyAncGFyZW50JyA6ICR0bmFtZTsKCgkJCQlpZiAoJHNt ZF90aGlzdGFnKSB7CgkJCQkJLy8gTG9jYWwgc2NvcGUKCQkJCQlpZiAoJHNtZF90aGlzdGFn Wyd0YWdfJy4kdG5hbWVdID09ICR0dmFsKSB7CgkJCQkJCSRvdXQrKzsKCQkJCQl9CgkJCQl9 IGVsc2UgewoJCQkJCS8vIEdsb2JhbCBzY29wZQoJCQkJCWlmICgkdG5hbWUgPT0gInR5cGUi KSB7CgkJCQkJCWlmICgkc21kX3RhZ190eXBlID09ICR0eXBlIHx8ICRjdHlwZSA9PSAkdHlw ZSkgewoJCQkJCQkJJG91dCsrOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkc21k X3RhZ3NbJHR5cGVdWyd0YWdfJy4kdG5hbWVdKSAmJiBpbl9hcnJheSgkdHZhbCwgJHNtZF90 YWdzWyR0eXBlXVsndGFnXycuJHRuYW1lXSwgZW1wdHkoJHR2YWwpICYmICR0dmFsICE9PSAn MCcpKSB7CgkJCQkJCSRvdXQrKzsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJLy8gTnVtZXJp YyBjb21wYXJpc29ucwoJCWZvcmVhY2ggKCRudXRlc3QgYXMgJHRuYW1lID0+ICR0dmFsKSB7 CgkJCSRudW1UZXN0cysrOwoJCQkkb3AgPSBjdXJyZW50KGFycmF5X2tleXMoJHR2YWwpKTsK CQkJJHZhbCA9IGN1cnJlbnQoJHR2YWwpOwoJCQlpZiAoJHNtZF90aGlzdGFnKSB7CgkJCQkk Y29tcGFyaXNvbiA9ICRzbWRfdGhpc3RhZ1sndGFnXycuJHRuYW1lXTsKCQkJfSBlbHNlIHsK CQkJCSRjb21wYXJpc29uID0gJHNtZF90YWdzWyR0eXBlXVsndGFnXycuJHRuYW1lXTsKCQkJ fQoJCQlzd2l0Y2ggKCRvcCkgewoJCQkJY2FzZSAnPic6CgkJCQkJaWYgKGlzc2V0KCRjb21w YXJpc29uKSAmJiAkY29tcGFyaXNvbiA+ICR2YWwpIHsKCQkJCQkJJG91dCsrOwoJCQkJCX0K CQkJCQlicmVhazsKCQkJCWNhc2UgJz49JzoKCQkJCQlpZiAoaXNzZXQoJGNvbXBhcmlzb24p ICYmICRjb21wYXJpc29uID49ICR2YWwpIHsKCQkJCQkJJG91dCsrOwoJCQkJCX0KCQkJCQli cmVhazsKCQkJCWNhc2UgJzwnOgoJCQkJCWlmIChpc3NldCgkY29tcGFyaXNvbikgJiYgJGNv bXBhcmlzb24gPCAkdmFsKSB7CgkJCQkJCSRvdXQrKzsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJ CQljYXNlICc8PSc6CgkJCQkJaWYgKGlzc2V0KCRjb21wYXJpc29uKSAmJiAkY29tcGFyaXNv biA8PSAkdmFsKSB7CgkJCQkJCSRvdXQrKzsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQljYXNl ICchJzoKCQkJCQlpZiAoaXNzZXQoJGNvbXBhcmlzb24pICYmICRjb21wYXJpc29uICE9ICR2 YWwpIHsKCQkJCQkJJG91dCsrOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJfQoJCX0KCgkJdHJh Y2VfYWRkKCdbc21kX2lmX3RhZyBudW0gdGVzdHMgfCByZXN1bHRzOiAnIC4gJG51bVRlc3Rz IC4gJ3wnIC4gJG91dCAuICddJyk7CgoJCS8vIENvdW50IGhvdyBtYW55IHN1Y2Nlc3NlcyB0 aGVyZSB3ZXJlCgkJaWYgKCRudW1UZXN0cyA9PSAkb3V0KSB7CgkJCSRyZXN1bHQgPSAxOwoJ CX0KCX0KCglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkcmVzdWx0KSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfaWZfdGFnX2xpc3QgKCRh dHRzLCAkdGhpbmcpIHsKCWdsb2JhbCAkc21kX3RhZ190eXBlOwoJcmV0dXJuIHBhcnNlKEV2 YWxFbHNlKCR0aGluZywgKCFlbXB0eSgkc21kX3RhZ190eXBlKSkpKTsKfQoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJldHVybiBuYW1lL3RpdGxlIG9mIGN1cnJlbnQgdGFn CmZ1bmN0aW9uIHNtZF90YWdfbmFtZSgkYXR0cywgJHRoaW5nPScnKSB7CglnbG9iYWwgJHNt ZF90aGlzdGFnLCAkcGVybWxpbmtfbW9kZSwgJHBsdWdpbnM7CgoJaWYgKCFzbWRfdGFnc190 YWJsZV9leGlzdCgpKSB7CgkJdHJpZ2dlcl9lcnJvcihnVHh0KCdzbWRfdGFnX25vdF9hdmFp bGFibGUnKSk7CgkJcmV0dXJuOwoJfQoKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ3RpdGxl JyAgICAgICA9PiAxLAoJCSdsaW5rJyAgICAgICAgPT4gJycsCgkJJ3NlY3Rpb24nICAgICA9 PiAnJywKCQknY2xlYW51cmxzJyAgID0+IDEsCgkJJ3BhcmVudCcgICAgICA9PiAwLCAvLyBu b3QgdXNlZnVsIHRvIHByaW50IGJ1dCBnb29kIGZvciBVUkxzIHRvIG5hdiBiYWNrIHVwIHRo ZSB0cmVlCgkJJ3BhcmVudGxhYmVsJyA9PiAnVXAgYSBsZXZlbCcsCgkJJ3dyYXB0YWcnICAg ICA9PiAnJywKCQknY2xhc3MnICAgICAgID0+IF9fRlVOQ1RJT05fXywKCQknc3R5bGUnICAg ICAgID0+ICcnLAoJCSdwYWRfc3RyJyAgICAgPT4gJycsCgkJJ3BhZF9wb3MnICAgICA9PiAn bGVmdCcsIC8vIGxlZnQvcmlnaHQvYm90aCB3aXRoIG9wdGlvbmFsIDppbiBzdWZmaXggdG8g aW5kaWNhdGUgaWYgaXQncyB0byBnbyBpbnNpZGUgdGhlIGxpbmsKCSksJGF0dHMpKTsKCgkk c21kcHJlZiA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5KCdzbWRfdGFnX3Vfc2VjJywgJ3Nt ZF90YWdfdV9wbmFtJywgJ3NtZF90YWdfdV9wdHlwJyksIDEpOwoJJHVybHNlYyA9IGRvX2xp c3QoJHNtZHByZWZbJ3NtZF90YWdfdV9zZWMnXVsndmFsJ10pOwoJJHNlY3Rpb24gPSAoJHNl Y3Rpb24pID8gJHNlY3Rpb24gOiAkdXJsc2VjWzBdOwoJJGluX2RlZmF1bHQgPSAoaW5fYXJy YXkoJHNlY3Rpb24sICR1cmxzZWMpKTsKCSR1cmxuYW0gPSAkc21kcHJlZlsnc21kX3RhZ191 X3BuYW0nXVsndmFsJ107CgkkdXJsdHlwID0gJHNtZHByZWZbJ3NtZF90YWdfdV9wdHlwJ11b J3ZhbCddOwoKCS8vIGdicF9wZXJtYW5lbnRfbGlua3Mgc2V0cyBtZXNzeSBtb2RlIGJlaGlu ZCB0aGUgc2NlbmVzIGJ1dCBzdGlsbCB1c2VzIG5vbi1tZXNzeSBVUkxzCgkvLyBzbyBpdCBy ZXF1aXJlcyBhbiBleGNlcHRpb24KCSRnYnBfcGwgPSAoaXNfYXJyYXkoJHBsdWdpbnMpICYm IGluX2FycmF5KCdnYnBfcGVybWFuZW50X2xpbmtzJywgJHBsdWdpbnMpKTsKCSRtZXNzeSA9 ICgkcGVybWxpbmtfbW9kZSA9PSAnbWVzc3knKSAmJiAoISRnYnBfcGwpOwoKCSRwYXJlbnRs YWJlbCA9ICgkcGFyZW50bGFiZWwpID8gJHBhcmVudGxhYmVsIDogKCgkcGFyZW50KSA/ICRz bWRfdGhpc3RhZ1sndGFnX3BhcmVudCddIDogJHNtZF90aGlzdGFnWyd0YWdfbmFtZSddKTsK CSRsYWJlbCA9ICgkcGFyZW50KSA/ICRwYXJlbnRsYWJlbCA6ICgoJHRpdGxlKSA/ICRzbWRf dGhpc3RhZ1sndGFnX3RpdGxlJ10gOiAkc21kX3RoaXN0YWdbJ3RhZ19uYW1lJ10pOwoJJHRu YW1lID0gKCRwYXJlbnQpID8gJHNtZF90aGlzdGFnWyd0YWdfcGFyZW50J10gOiAkc21kX3Ro aXN0YWdbJ3RhZ19uYW1lJ107CgkkbGV2ZWwgPSAkc21kX3RoaXN0YWdbJ3RhZ19sZXZlbCdd OwoJJHN0eWxlID0gKCRzdHlsZSkgPyAnIHN0eWxlPSInLiRzdHlsZS4nIicgOiAnJzsKCSRw YWRkaW5nID0gKCRwYWRfc3RyKSA/IHN0cl9yZXBlYXQoJHBhZF9zdHIsICRsZXZlbCkgOiAn JzsKCSRwYWRfcG9zID0gZG9fbGlzdCgkcGFkX3BvcywgJzonKTsKCSRwYWRbJ2xpbiddID0g KCRwYWRkaW5nICYmIChpbl9hcnJheSgnbGVmdCcsICRwYWRfcG9zKSAhPT0gZmFsc2UgfHwg aW5fYXJyYXkoJ2JvdGgnLCAkcGFkX3BvcykgIT09IGZhbHNlKSAmJiBpbl9hcnJheSgnaW4n LCAkcGFkX3BvcykgIT09IGZhbHNlKSA/ICRwYWRkaW5nIDogJyc7CgkkcGFkWydyaW4nXSA9 ICgkcGFkZGluZyAmJiAoaW5fYXJyYXkoJ3JpZ2h0JywgJHBhZF9wb3MpICE9PSBmYWxzZSB8 fCBpbl9hcnJheSgnYm90aCcsICRwYWRfcG9zKSAhPT0gZmFsc2UpICYmIGluX2FycmF5KCdp bicsICRwYWRfcG9zKSAhPT0gZmFsc2UpID8gJHBhZGRpbmcgOiAnJzsKCSRwYWRbJ2wnXSA9 ICgkcGFkZGluZyAmJiAoaW5fYXJyYXkoJ2xlZnQnLCAkcGFkX3BvcykgIT09IGZhbHNlIHx8 IGluX2FycmF5KCdib3RoJywgJHBhZF9wb3MpICE9PSBmYWxzZSkgJiYgKGVtcHR5KCRwYWRb J2xpbiddKSB8fCAhJGxpbmspKSA/ICRwYWRkaW5nIDogJyc7CgkkcGFkWydyJ10gPSAoJHBh ZGRpbmcgJiYgKGluX2FycmF5KCdyaWdodCcsICRwYWRfcG9zKSAhPT0gZmFsc2UgfHwgaW5f YXJyYXkoJ2JvdGgnLCAkcGFkX3BvcykgIT09IGZhbHNlKSAmJiAoZW1wdHkoJHBhZFsncmlu J10pIHx8ICEkbGluaykpID8gJHBhZGRpbmcgOiAnJzsKCSRkZXN0ID0gKCRtZXNzeSB8fCAh JGNsZWFudXJscykKCQkJCT8gcGFnZWxpbmt1cmwoYXJyYXkoJ3MnID0+ICRzZWN0aW9uLCAk dXJsbmFtID0+ICR0bmFtZSwgJHVybHR5cCA9PiAkc21kX3RoaXN0YWdbJ3RhZ190eXBlJ10p KQoJCQkJOiBodS4kc2VjdGlvbi4nLycuKCgkaW5fZGVmYXVsdCkgPyAnJyA6ICR1cmxzZWNb MF0uJy8nKS4kc21kX3RoaXN0YWdbJ3RhZ190eXBlJ10uJy8nLiR0bmFtZTsKCWlmICgkdGhp bmcpIHsKCQkkb3V0ID0gJzxhJy4KCQkJKCRtZXNzeSA/ICcnIDogJyByZWw9InRhZyInKS4K CQkJKCAoJGNsYXNzIGFuZCAhJHdyYXB0YWcpID8gJyBjbGFzcz0iJy4kY2xhc3MuJyInIDog JycgKS4KCQkJJyBocmVmPSInLiRkZXN0LiciJy4KCQkJKCR0aXRsZSA/ICcgdGl0bGU9Iicu JGxhYmVsLiciJyA6ICcnKS4KCQkJJz4nLnBhcnNlKCR0aGluZykuJzwvYT4nOwoJfSBlbHNl aWYgKCRsaW5rKSB7CgkJJG91dCA9ICRwYWRbJ2wnXS4nPGEnLgoJCQkoJG1lc3N5ID8gJycg OiAnIHJlbD0idGFnIicpLgoJCQknIGhyZWY9IicuJGRlc3QuJyI+Jy4kcGFkWydsaW4nXS4k bGFiZWwuJHBhZFsncmluJ10uJzwvYT4nLiRwYWRbJ3InXTsKCX0gZWxzZSB7CgkJJG91dCA9 ICRwYWRbJ2wnXS4kbGFiZWwuJHBhZFsnciddOwoJfQoKCXJldHVybiBkb1RhZygkb3V0LCAk d3JhcHRhZywgJGNsYXNzLCAkc3R5bGUpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLy8gUmV0dXJuICMgb2YgaXRlbXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFnCi8vVE9E TzogdGhpbmsgYWJvdXQgcGVyLXNlY3Rpb24gLyBwZXItY2F0ZWdvcnkgY291bnRzCmZ1bmN0 aW9uIHNtZF90YWdfY291bnQoJGF0dHMsICR0aGluZz0nJykgewoJZ2xvYmFsICRzbWRfdGhp c3RhZywgJHNtZF90YWdzOwoKCWlmICghc21kX3RhZ3NfdGFibGVfZXhpc3QoKSkgewoJCXRy aWdnZXJfZXJyb3IoZ1R4dCgnc21kX3RhZ19ub3RfYXZhaWxhYmxlJykpOwoJCXJldHVybjsK CX0KCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdjbGFzcycgICAgICA9PiBfX0ZVTkNUSU9O X18sCgkJJ3N0eWxlJyAgICAgID0+ICcnLAoJCSd3cmFwdGFnJyAgICA9PiAnJywKCQknd3Jh cGNvdW50JyAgPT4gJyAoOiknLAoJCSdzaG93ZW1wdHknICA9PiAnMScsCgkJJ3BhcmFtZGVs aW0nID0+ICc6JywKCSksJGF0dHMpKTsKCgkkd3JhcGNvdW50ID0gZXhwbG9kZSgkcGFyYW1k ZWxpbSwgJHdyYXBjb3VudCk7IC8vIGRvX2xpc3QgZG9lcyBhIHRyaW06IGRvbid0IHdhbnQg dGhhdAoJJHN0eWxlID0gKCRzdHlsZSkgPyAnIHN0eWxlPSInLiRzdHlsZS4nIicgOiAnJzsK CWlmIChjb3VudCgkd3JhcGNvdW50KSA9PSAxKSB7CgkJJHdyYXBjb3VudFsxXSA9ICR3cmFw Y291bnRbMF07Cgl9CgoJaWYgKCRzbWRfdGhpc3RhZykgewoJCSRvdXQgPSAkc21kX3RoaXN0 YWdbJ3RhZ19jb3VudCddOwoJfSBlbHNlIHsKCQkkb3V0ID0gaXNzZXQoJHNtZF90YWdzWydt ZXRhJ11bJ2NvbnRlbnRfY291bnQnXSkgPyAkc21kX3RhZ3NbJ21ldGEnXVsnY29udGVudF9j b3VudCddIDogJyc7Cgl9CgoJJG91dCA9ICgkb3V0ID09IDAgJiYgISRzaG93ZW1wdHkpID8g JycgOiAkd3JhcGNvdW50WzBdLiRvdXQuJHdyYXBjb3VudFsxXTsKCglyZXR1cm4gZG9UYWco JG91dCwgJHdyYXB0YWcsICRjbGFzcywgJHN0eWxlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi8vIFJldHVybiBvdGhlciBpbmZvIGFib3V0IHRoZSBjdXJyZW50IHRhZwpm dW5jdGlvbiBzbWRfdGFnX2luZm8oJGF0dHMsICR0aGluZz0nJykgewoJZ2xvYmFsICRzbWRf dGhpc3RhZzsKCglpZiAoIXNtZF90YWdzX3RhYmxlX2V4aXN0KCkpIHsKCQl0cmlnZ2VyX2Vy cm9yKGdUeHQoJ3NtZF90YWdfbm90X2F2YWlsYWJsZScpKTsKCQlyZXR1cm47Cgl9CgoJZXh0 cmFjdChsQXR0cyhhcnJheSgKCQknaXRlbScgICAgICAgPT4gJ25hbWUnLAoJCSd3cmFwdGFn JyAgICA9PiAnJywKCQknYnJlYWsnICAgICAgPT4gJ2JyJywKCQknY2xhc3MnICAgICAgPT4g X19GVU5DVElPTl9fLAoJCSdicmVha2NsYXNzJyA9PiAnJywKCSksJGF0dHMpKTsKCgkkb3V0 ID0gYXJyYXkoKTsKCSRhdmFpbGFibGVJdGVtcyA9IGFycmF5KCdpZCcsJ25hbWUnLCd0aXRs ZScsJ2Rlc2NyaXB0aW9uJywnbGV0dGVybmFtZScsJ2xldHRlcnRpdGxlJywndHlwZScsJ3Bh cmVudCcsJ2NoaWxkcmVuJywnbGV2ZWwnLCdjb3VudCcsJ2luZGVudCcsICd3ZWlnaHQnKTsK CSRpdGVtcyA9IGRvX2xpc3QoJGl0ZW0pOwoJZm9yZWFjaCAoJGl0ZW1zIGFzICR3aGF0bm90 KSB7CgkJaWYgKGluX2FycmF5KCR3aGF0bm90LCAkYXZhaWxhYmxlSXRlbXMpKSB7CgkJCSRv dXRbXSA9ICRzbWRfdGhpc3RhZ1sndGFnXycuJHdoYXRub3RdOwoJCX0KCX0KCXJldHVybiBk b1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBSZWxhdGVkIGFydGljbGVzL2ltYWdl cy9maWxlcy9saW5rcyBieSB0YWcKZnVuY3Rpb24gc21kX3JlbGF0ZWRfdGFncygkYXR0cywg JHRoaW5nPScnKSB7CglnbG9iYWwgJHRoaXNhcnRpY2xlLCAkdGhpc2ZpbGUsICR0aGlzbGlu aywgJHRoaXNpbWFnZSwgJHByZXRleHQsICRwcmVmcywgJHNtZF90YWdzLCAkc21kX3RoaXN0 YWc7CgoJc3RhdGljICRzbWRfdGFnc19wYzsKCglpZiAoIXNtZF90YWdzX3RhYmxlX2V4aXN0 KCkpIHsKCQl0cmlnZ2VyX2Vycm9yKGdUeHQoJ3NtZF90YWdfbm90X2F2YWlsYWJsZScpKTsK CQlyZXR1cm47Cgl9CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkndHlwZScgICAgICAgPT4g JycsCgkJJ3NlY3Rpb24nICAgID0+ICRwcmV0ZXh0WydzJ10sCgkJJ3N0YXR1cycgICAgID0+ ICc0JywKCQknbGltaXQnICAgICAgPT4gOTk5OTksCgkJJ29mZnNldCcgICAgID0+IDAsCgkJ J2Zvcm0nICAgICAgID0+ICcnLAoJCSdtYXRjaCcgICAgICA9PiAndGFnX25hbWUnLAoJCSdt YXRjaF9zZWxmJyA9PiAwLAoJCSdub193aWRvdycgICA9PiBAJHByZWZzWyd0aXRsZV9ub193 aWRvdyddLAoJCSdzb3J0JyAgICAgICA9PiAnJywKCQknbGFiZWwnICAgICAgPT4gJycsCgkJ J2xhYmVsdGFnJyAgID0+ICcnLAoJCSd3cmFwdGFnJyAgICA9PiAnJywKCQknYnJlYWsnICAg ICAgPT4gJ2JyJywKCQknY2xhc3MnICAgICAgPT4gX19GVU5DVElPTl9fLAoJCSdkZWxpbScg ICAgICA9PiAnLCcsCgkJJ3BhcmFtZGVsaW0nID0+ICc6JywKCQknZGVidWcnICAgICAgPT4g JzAnLAoJKSwkYXR0cykpOwoKCS8vIFZhbGlkYXRlIGF0dHMKCSR2YWxpZFR5cGVzID0gYXJy YXkoJ2FydGljbGUnLCdpbWFnZScsJ2ZpbGUnLCdsaW5rJyk7CgkkY3R4dCA9IHNtZF90YWdz X2NvbnRleHQoKTsKCgkkc2NvcGUgPSAkY3R4dFsnc2NvcGUnXTsKCSRpZGxpc3QgPSAkY3R4 dFsnaWQnXTsKCSRjdHlwZSA9ICRjdHh0Wydjb250ZXh0J107CgkkdHlwZSA9IChpbl9hcnJh eSgkdHlwZSwgJHZhbGlkVHlwZXMpKSA/ICR0eXBlIDogKCgkY3R4dFsnY29udGV4dCddKSA/ ICRjdHh0Wydjb250ZXh0J10gOiAkdmFsaWRUeXBlc1swXSk7CgoJaWYgKCFpc3NldCgkc21k X3RhZ3NfcGNbJHR5cGVdKSkgewoJCSRzbWRfdGFnc19wY1skdHlwZV0gPSBhcnJheSgKCQkJ J2FsbCcgPT4gYXJyYXkoKSwKCQkJJ3Bhcmxpc3QnID0+IGFycmF5KCksCgkJCSdjaGlsaXN0 JyA9PiBhcnJheSgpLAoJCSk7Cgl9CgoJJHNlY3Rpb25DbGF1c2UgPSAoJHNlY3Rpb24pID8g IiBBTkQgdHhwLlNlY3Rpb24gSU4gKCciLmpvaW4oIicsJyIsIGRvU2xhc2goZG9fbGlzdCgk c2VjdGlvbikpKS4iJykiIDogJyc7Cgkkc3RhdHVzID0gZG9fbGlzdCgkc3RhdHVzKTsKCSRz dGF0aSA9IGFycmF5KCk7Cglmb3JlYWNoICgkc3RhdHVzIGFzICRzdGF0KSB7CgkJaWYgKGVt cHR5KCRzdGF0KSkgewoJCQljb250aW51ZTsKCQl9IGVsc2UgaWYgKGlzX251bWVyaWMoJHN0 YXQpKSB7CgkJCSRzdGF0aVtdID0gJHN0YXQ7CgkJfSBlbHNlIHsKCQkJJHN0YXRpW10gPSBn ZXRTdGF0dXNOdW0oJHN0YXQpOwoJCX0KCX0KCSRzdGF0U1FMID0gJyBBTkQgdHhwLlN0YXR1 cyBJTiAoJy5qb2luKCcsJywgJHN0YXRpKS4nKSc7CgoJJG91dCA9IGFycmF5KCk7CgoJaWYg KCEkc29ydCkgewoJCXN3aXRjaCAoJHR5cGUpIHsKCQkJY2FzZSAiYXJ0aWNsZSI6CgkJCQkk c29ydCA9ICJQb3N0ZWQgZGVzYyI7CgkJCQlicmVhazsKCQkJY2FzZSAiaW1hZ2UiOgoKCQkJ Y2FzZSAibGluayI6CgkJCQkkc29ydCA9ICJkYXRlIGRlc2MiOwoJCQkJYnJlYWs7CgkJCWNh c2UgImZpbGUiOgoJCQkJJHNvcnQgPSAiY3JlYXRlZCBkZXNjIjsKCQkJCWJyZWFrOwoJCX0K CX0KCgkkY2ZzID0gZ2V0Q3VzdG9tZmllbGRzKCk7CgkkY2ZLZXlzID0gaW1wbG9kZSgnLCcs IGFycmF5X21hcCgKCQlmdW5jdGlvbigkaykgeyByZXR1cm4gJ2N1c3RvbV8nIC4gJGs7IH0s IGFycmF5X2tleXMoJGNmcykKCSkpOwoKCS8vIExvb2t1cCB0YWJsZSBmb3IgbWFraW5nIFNR TCBxdWVyaWVzCgkkc3FsU3R1YnMgPSBhcnJheSgKCQkiYXJ0aWNsZSIgPT4gYXJyYXkoCgkJ CSJzZWxlY3QiID0+ICJ0eHAuSUQsIFBvc3RlZCwgRXhwaXJlcywgQXV0aG9ySUQsIExhc3RN b2QsIExhc3RNb2RJRCwgdHhwLlRpdGxlLCBUaXRsZV9odG1sLCBCb2R5LCBCb2R5X2h0bWws IEV4Y2VycHQsIEV4Y2VycHRfaHRtbCwgSW1hZ2UsIENhdGVnb3J5MSwgQ2F0ZWdvcnkyLCBB bm5vdGF0ZSwgQW5ub3RhdGVJbnZpdGUsIGNvbW1lbnRzX2NvdW50LCBTdGF0dXMsIHRleHRp bGVfYm9keSwgdGV4dGlsZV9leGNlcnB0LCBTZWN0aW9uLCBvdmVycmlkZV9mb3JtLCBLZXl3 b3JkcywgdHhwLmRlc2NyaXB0aW9uLCB1cmxfdGl0bGUiIC4gKCRjZktleXMgPyAnLCcuICRj ZktleXMgOiAnJykgLiAiLCB1aWQsIGZlZWRfdGltZSwgcG9zaXRpb24sIHVuaXhfdGltZXN0 YW1wKFBvc3RlZCkgYXMgdVBvc3RlZCwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxh c3RNb2QsIHVuaXhfdGltZXN0YW1wKEV4cGlyZXMpIGFzIHVFeHBpcmVzLCBDT1VOVChzbXQu bmFtZSkgYXMgdGFnX3N1bSIsCgkJCSJ0YWJsZSIgPT4gInRleHRwYXR0ZXJuIiwKCQkJImd0 YWdzIiA9PiAkdGhpc2FydGljbGUsCgkJCSJnaWQiID0+ICJ0aGlzaWQiLAoJCSksCgkJImlt YWdlIiA9PiBhcnJheSgKCQkJInNlbGVjdCIgPT4gInR4cC5pZCwgdHhwLm5hbWUsIHR4cC5j YXRlZ29yeSwgdHhwLmV4dCwgdHhwLncsIHR4cC5oLCB0eHAuYWx0LCB0eHAuY2FwdGlvbiwg dHhwLmRhdGUsIHR4cC5hdXRob3IsIHR4cC50aHVtYl93LCB0eHAudGh1bWJfaCwgdHhwLnRo dW1ibmFpbCwgdHUuaXRlbV9pZCwgdHUudGFnX2lkLCBzbXQuaWQgQVMgc210aWQsIHNtdC5u YW1lIEFTIHNtdG5hbWUsIHNtdC5kZXNjX2h0bWwgQVMgc210ZGVzY3JpcHRpb24sIHNtdC50 eXBlLCBzbXQucGFyZW50LCBzbXQubGZ0LCBzbXQucmd0LCBzbXQudGl0bGUsIENPVU5UKHNt dC5uYW1lKSBhcyB0YWdfc3VtIiwKCQkJInRhYmxlIiA9PiAidHhwX2ltYWdlIiwKCQkJImd0 YWdzIiA9PiAkdGhpc2ltYWdlLAoJCQkiZ2lkIiA9PiAiaWQiLAoJCSksCgkJImZpbGUiID0+ IGFycmF5KAoJCQkic2VsZWN0IiA9PiAidHhwLmlkLCB0eHAuZmlsZW5hbWUsIHR4cC50aXRs ZSwgdHhwLmNhdGVnb3J5LCB0eHAucGVybWlzc2lvbnMsIHR4cC5kZXNjcmlwdGlvbiwgdHhw LmRvd25sb2FkcywgdHhwLnN0YXR1cywgdHhwLm1vZGlmaWVkLCB0eHAuY3JlYXRlZCwgdHhw LnNpemUsIHR1Lml0ZW1faWQsIHR1LnRhZ19pZCwgc210LmlkIEFTIHNtdGlkLCBzbXQubmFt ZSBBUyBzbXRuYW1lLCBzbXQuZGVzY19odG1sIEFTIHNtdGRlc2NyaXB0aW9uLCBzbXQudHlw ZSwgc210LnBhcmVudCwgc210LmxmdCwgc210LnJndCwgc210LnRpdGxlLCBDT1VOVChzbXQu bmFtZSkgYXMgdGFnX3N1bSIsCgkJCSJ0YWJsZSIgPT4gInR4cF9maWxlIiwKCQkJImd0YWdz IiA9PiAkdGhpc2ZpbGUsCgkJCSJnaWQiID0+ICJpZCIsCgkJKSwKCQkibGluayIgPT4gYXJy YXkoCgkJCSJzZWxlY3QiID0+ICJ0eHAuaWQsIHR4cC5kYXRlLCB0eHAuY2F0ZWdvcnksIHR4 cC51cmwsIHR4cC5saW5rbmFtZSwgdHhwLmxpbmtzb3J0LCB0eHAuZGVzY3JpcHRpb24sIHR1 Lml0ZW1faWQsIHR1LnRhZ19pZCwgc210LmlkIEFTIHNtdGlkLCBzbXQubmFtZSBBUyBzbXRu YW1lLCBzbXQuZGVzY19odG1sIEFTIHNtdGRlc2NyaXB0aW9uLCBzbXQudHlwZSwgc210LnBh cmVudCwgc210LmxmdCwgc210LnJndCwgc210LnRpdGxlLCBDT1VOVChzbXQubmFtZSkgYXMg dGFnX3N1bSIsCgkJCSJ0YWJsZSIgPT4gInR4cF9saW5rIiwKCQkJImd0YWdzIiA9PiAkdGhp c2xpbmssCgkJCSJnaWQiID0+ICJpZCIsCgkJKSwKCSk7CgoJLy8gRXh0cmFjdCBzdHVmZiB0 byBtYXRjaCAmIG1ha2UgdXAgcXVlcnkgcmVwbGFjZW1lbnQgdmFyaWFibGVzCgkkbWF0Y2gg PSBkb19saXN0KCRtYXRjaCwgJHBhcmFtZGVsaW0pOwoJJG1hdGNoVHlwZSA9IGFycmF5X3No aWZ0KCRtYXRjaCk7CglpZiAoY291bnQoJG1hdGNoKSA9PSAwKSB7CgkJLy8gQXNzdW1lIGN1 cnJlbnQgdHlwZSB1bmxlc3MgYSB0YWcgaXMgYmVpbmcgbWF0Y2hlZCAoaW4gd2hpY2ggY2Fz ZSwgdXNlICRjdHlwZSkKCQkkbWF0Y2hXaXRoID0gYXJyYXkoJG1hdGNoVHlwZSk7CgkJJG1h dGNoVHlwZSA9IChzdHJwb3MoJG1hdGNoV2l0aFswXSwgJ3RhZ18nKSAhPT0gZmFsc2UpID8g JGN0eXBlIDogJHR5cGU7Cgl9IGVsc2UgewoJCSRtYXRjaFdpdGggPSAkbWF0Y2g7Cgl9CgoJ JG1hdGNoZXMgPSBhcnJheSgpOwoJZm9yZWFjaCAoJG1hdGNoV2l0aCBhcyAkbWF0Y2hJdGVt KSB7CgkJaWYgKHN0cnBvcygkbWF0Y2hJdGVtLCAndGFnXycpICE9PSBmYWxzZSkgewoJCQkk bG9va2luID0gKGlzc2V0KCRzbWRfdGFnc1skbWF0Y2hUeXBlXSkpID8gJHNtZF90YWdzWyRt YXRjaFR5cGVdIDogKCAoaXNzZXQoJHNtZF90aGlzdGFnKSkgPyAkc21kX3RoaXN0YWcgOiBh cnJheSgpICk7CgkJfSBlbHNlIHsKCQkJJGxvb2tpbiA9ICRzcWxTdHVic1skbWF0Y2hUeXBl XVsiZ3RhZ3MiXTsKCQl9CgkJaWYgKGlzc2V0KCRsb29raW5bJG1hdGNoSXRlbV0pKSB7CgkJ CSR0aGlzbWF0Y2ggPSAkbG9va2luWyRtYXRjaEl0ZW1dOwoJCQlpZiAoaXNfYXJyYXkoJHRo aXNtYXRjaCkpIHsKCQkJCWZvcmVhY2ggKCR0aGlzbWF0Y2ggYXMgJHN1YklEID0+ICRzdWJJ dGVtKSB7CgkJCQkJaWYgKGluX2FycmF5KCRzdWJJRCwgJGlkbGlzdCkpIHsKCQkJCQkJJG1h dGNoZXNbXSA9ICRzdWJJdGVtOwoJCQkJCX0KCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRtYXRj aGVzW10gPSAkdGhpc21hdGNoOwoJCQl9CgkJfQoJfQoJJG1hdGNoZXMgPSBhcnJheV91bmlx dWUoJG1hdGNoZXMpOwoKCS8vIFNob3VsZCB0aGUgdGFnIGhpZXJhcmNoeSBiZSB0YWtlbiBp bnRvIGFjY291bnQ/Cgkkb3B0cyA9IHNtZF90YWdzX3ByZWZfZ2V0KGFycmF5KCdzbWRfdGFn X3BfbGJpJywgJ3NtZF90YWdfdV9jb21iaScpKTsKCSRiaWRpciA9ICRvcHRzWydzbWRfdGFn X3BfbGJpJ11bJ3ZhbCddOwoJJGNvbWJpID0gJG9wdHNbJ3NtZF90YWdfdV9jb21iaSddWyd2 YWwnXTsKCglpZiAoJG1hdGNoZXMpIHsKCQkkcGFyZW50cyA9ICRjaGlsZHJlbiA9IGFycmF5 KCk7CgkJaWYgKCRzbWRfdGFnc19wY1skdHlwZV1bJ2FsbCddKSB7CgkJCSRmdWxsX3RhZ190 cmVlID0gJHNtZF90YWdzX3BjWyR0eXBlXVsnYWxsJ107CgkJfSBlbHNlIHsKCQkJJGZ1bGxf dGFnX3RyZWUgPSAkc21kX3RhZ3NfcGNbJHR5cGVdWydhbGwnXSA9IHNtZF90YWdfdHJlZSgn cm9vdCcsICR0eXBlLCAnMT0xJywgU01EX1RBRyk7CgkJfQoKCQkvLyBCdWlsZCB0d28gbGlz dHMgZnJvbSB0aGUgZnVsbCB0YWcgdHJlZToKCQkvLyAgMSkgcGFybGlzdDogZWFjaCBub2Rl J3MgcGFyZW50CgkJLy8gIDIpIGNoaWxpc3Q6IGxpc3Qgb2Ygbm9kZXMgYmVsb3cgdGhlIGN1 cnJlbnQKCQlpZiAoISRzbWRfdGFnc19wY1skdHlwZV1bJ3Bhcmxpc3QnXSB8fCAhJHNtZF90 YWdzX3BjWyR0eXBlXVsnY2hpbGlzdCddKSB7CgkJCWZvcmVhY2ggKCRmdWxsX3RhZ190cmVl IGFzICRub2RlKSB7CgkJCQkkc21kX3RhZ3NfcGNbJHR5cGVdWydwYXJsaXN0J11bJG5vZGVb J25hbWUnXV0gPSAkbm9kZVsncGFyZW50J107CgkJCQlpZiAoJG5vZGVbJ3BhcmVudCddID09 ICdyb290JykgewoJCQkJCSRzbWRfdGFnc19wY1skdHlwZV1bJ2NoaWxpc3QnXVskbm9kZVsn bmFtZSddXSA9IGFycmF5KCk7CgkJCQl9IGVsc2UgewoJCQkJCSRzbWRfdGFnc19wY1skdHlw ZV1bJ2NoaWxpc3QnXVskbm9kZVsncGFyZW50J11dW10gPSAkbm9kZVsnbmFtZSddOwoJCQkJ CWZvcmVhY2ggKCRzbWRfdGFnc19wY1skdHlwZV1bJ2NoaWxpc3QnXSBhcyAka2V5ID0+ICRu b2RlcykgewoJCQkJCQlpZiAoaW5fYXJyYXkoJG5vZGVbJ3BhcmVudCddLCAkbm9kZXMpKSB7 CgkJCQkJCQkkc21kX3RhZ3NfcGNbJHR5cGVdWydjaGlsaXN0J11bJGtleV1bXSA9ICRub2Rl WyduYW1lJ107CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCS8vIFJldmVyc2Ug bG9va3VwIHRvIGZpbmQgcGFyZW50cyBvZiBjaGlsZAoJCWlmICgkYmlkaXI9PTEgfHwgJGJp ZGlyPT0zKSB7CgkJCWZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaGl0KSB7CgkJCQkkdGhl cGFyZW50ID0gJG1hdGNoaXQ7CgkJCQl3aGlsZSAoYXJyYXlfa2V5X2V4aXN0cygkdGhlcGFy ZW50LCAkc21kX3RhZ3NfcGNbJHR5cGVdWydwYXJsaXN0J10pKSB7CgkJCQkJaWYgKCRzbWRf dGFnc19wY1skdHlwZV1bJ3Bhcmxpc3QnXVskdGhlcGFyZW50XSA9PSAncm9vdCcpIHsKCQkJ CQkJYnJlYWs7CgkJCQkJfQoJCQkJCSRwYXJlbnRzW10gPSAkdGhlcGFyZW50ID0gJHNtZF90 YWdzX3BjWyR0eXBlXVsncGFybGlzdCddWyR0aGVwYXJlbnRdOwoJCQkJfQoJCQl9CgkJfQoK CQkvLyBGb3J3YXJkIGxvb2t1cCB0byBmaW5kIGNoaWxkcmVuIG9mIHBhcmVudAoJCWlmICgk YmlkaXI9PTIgfHwgJGJpZGlyPT0zKSB7CgkJCWZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRj aGl0KSB7CgkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbWF0Y2hpdCwgJHNtZF90YWdzX3Bj WyR0eXBlXVsnY2hpbGlzdCddKSkgewoJCQkJCSRjaGlsZHJlbiA9IGFycmF5X21lcmdlKCRj aGlsZHJlbiwgJHNtZF90YWdzX3BjWyR0eXBlXVsnY2hpbGlzdCddWyRtYXRjaGl0XSk7CgkJ CQl9CgkJCX0KCQl9CgkJJG1hdGNoZXMgPSBhcnJheV91bmlxdWUoYXJyYXlfbWVyZ2UoICRt YXRjaGVzLCAkcGFyZW50cywgJGNoaWxkcmVuICkpOwoJfQoKCXRyYWNlX2FkZCgnW3NtZF9y ZWxhdGVkX3RhZ3MgbWF0Y2hlczogJyAuIGpvaW4oJywgJywgJG1hdGNoZXMpIC4gJ10nKTsK CgkvLyBDb252ZXJ0IGFib3ZlIG9wdHMgdG8gU1FMIHF1ZXJ5IGNsYXVzZXMKCSRleGNsdWRl Q2xhdXNlID0gKCRtYXRjaF9zZWxmKSA/ICcnIDogJyBBTkQgdHhwLmlkICE9ICInLiRzcWxT dHVic1skdHlwZV1bImd0YWdzIl1bJHNxbFN0dWJzWyR0eXBlXVsiZ2lkIl1dLiciJzsKCgkk YW5kX21vZGUgPSAoaXNzZXQoJHNtZF90YWdzWydtZXRhJ11bJ3NlYXJjaF9tb2RlJ10pICYm ICgkc21kX3RhZ3NbJ21ldGEnXVsnc2VhcmNoX21vZGUnXSA9PSAnYW5kJykpID8gdHJ1ZSA6 IGZhbHNlOwoJJGFuZF9tb2RlQ2xhdXNlID0gKCRhbmRfbW9kZSAmJiAkbWF0Y2hlcykgPyAn IEhBVklORyBDT1VOVCgqKSA9ICcgLiBjb3VudCgkbWF0Y2hlcykgOiAnJzsKCgkkbGFzdF90 YWcgPSAoaXNzZXQoJHNtZF90YWdzWydtZXRhJ11bJ3RhZ190YWlsJ10pKSA/ICRzbWRfdGFn c1snbWV0YSddWyd0YWdfdGFpbCddIDogJyc7CgkkbWF0Y2hDbGF1c2UgPSAiIEFORCAiIC4o KCRtYXRjaGVzKSA/ICgkY29tYmkgPyAic210Lm5hbWUgSU4gKCIgLmpvaW4oIiwiLCBxdW90 ZV9saXN0KCRtYXRjaGVzKSkuICIpIiA6ICJzbXQubmFtZSA9ICciLiRsYXN0X3RhZy4iJyIp IDogInNtdC5uYW1lID0gJyciKTsKCSRvcmRlckJ5ID0gIiBPUkRFUiBCWSAiIC4kc29ydC4g IiBMSU1JVCAiIC4kb2Zmc2V0LiAiLCIgLiRsaW1pdDsKCSRjb250ZW50Q291bnQgPSAwOwoK CXN3aXRjaCAoJHR5cGUpIHsKCQljYXNlICJhcnRpY2xlIjoKCQkJJHJzID0gZ2V0Um93cygi U0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1MgIiAuICRzcWxTdHVic1skdHlwZV1bInNlbGVj dCJdIC4gIiBGUk9NICIgLiBzYWZlX3BmeCgkc3FsU3R1YnNbJHR5cGVdWyJ0YWJsZSJdKSAu ICIgQVMgdHhwCgkJCQlMRUZUIEpPSU4gIi5QRlguU01EX1RBR1UuICIgQVMgdHUgT04gdHhw LmlkID0gdHUuaXRlbV9pZAoJCQkJTEVGVCBKT0lOICIuUEZYLlNNRF9UQUcuICIgQVMgc210 IE9OIHR1LnRhZ19pZCA9IHNtdC5pZAoJCQkJV0hFUkUgdHUudHlwZSA9ICdhcnRpY2xlJyIg LiAkc3RhdFNRTCAuICRleGNsdWRlQ2xhdXNlIC4gJHNlY3Rpb25DbGF1c2UgLiAkbWF0Y2hD bGF1c2UgLiAnIEdST1VQIEJZIHR4cC5pZCcgLiAkYW5kX21vZGVDbGF1c2UgLiAkb3JkZXJC eSwgJGRlYnVnKTsKCQkJJGNvbnRlbnRSZXN1bHQgPSBteXNxbGlfZmV0Y2hfYXNzb2Moc2Fm ZV9xdWVyeSgnU0VMRUNUIEZPVU5EX1JPV1MoKSBBUyBmb3VuZCcsICRkZWJ1ZykpOwoJCQkk Y29udGVudENvdW50ID0gJGNvbnRlbnRSZXN1bHRbJ2ZvdW5kJ107CgoJCQlpZiAoJHJzKSB7 CgkJCQl0cmFjZV9hZGQoJ1tzbWRfcmVsYXRlZF90YWdzIGFydGljbGUgcmVjb3JkczogJyAu IHByaW50X3IoJHJzLCB0cnVlKSAuICddJyk7CgkJCQkkdW5pcXJzID0gYXJyYXkoKTsKCQkJ CWZvcmVhY2ggKCRycyBhcyAkcm93KSB7CgkJCQkJaWYgKCFpbl9hcnJheSgkcm93WydJRCdd LCAkdW5pcXJzKSkgewoJCQkJCQkkc2FmZSA9ICgkdGhpc2FydGljbGUpID8gJHRoaXNhcnRp Y2xlIDogTlVMTDsKCQkJCQkJcG9wdWxhdGVBcnRpY2xlRGF0YSgkcm93KTsKCQkJCQkJJHJv d1snVGl0bGUnXSA9ICgkbm9fd2lkb3cpID8gbm9XaWRvdyhlc2NhcGVfdGl0bGUoJHJvd1sn VGl0bGUnXSkpIDogZXNjYXBlX3RpdGxlKCRyb3dbJ1RpdGxlJ10pOwoJCQkJCQkkb3V0W10g PSAoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhp bmcpIDogaHJlZigkcm93WydUaXRsZSddLCBwZXJtbGlua3VybCgkcm93KSkpOwoJCQkJCQkk dW5pcXJzW10gPSAkcm93WydJRCddOwoJCQkJCQkkdGhpc2FydGljbGUgPSAkc2FmZTsKCQkJ CQl9CgkJCQl9CgkJCX0KCQkJYnJlYWs7CgkJY2FzZSAiaW1hZ2UiOgoJCQkkcnMgPSBnZXRS b3dzKCJTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAiIC4gJHNxbFN0dWJzWyR0eXBlXVsi c2VsZWN0Il0gLiAiIEZST00gIiAuIHNhZmVfcGZ4KCRzcWxTdHVic1skdHlwZV1bInRhYmxl Il0pIC4gIiBBUyB0eHAKCQkJCUxFRlQgSk9JTiAiLlBGWC5TTURfVEFHVS4gIiBBUyB0dSBP TiB0eHAuaWQgPSB0dS5pdGVtX2lkCgkJCQlMRUZUIEpPSU4gIi5QRlguU01EX1RBRy4gIiBB UyBzbXQgT04gdHUudGFnX2lkID0gc210LmlkCgkJCQlXSEVSRSB0dS50eXBlID0gJ2ltYWdl JyIgLiAkZXhjbHVkZUNsYXVzZSAuICRtYXRjaENsYXVzZSAuICcgR1JPVVAgQlkgdHhwLmlk JyAuICRhbmRfbW9kZUNsYXVzZSAuICRvcmRlckJ5LCAkZGVidWcpOwoJCQkkY29udGVudFJl c3VsdCA9IG15c3FsaV9mZXRjaF9hc3NvYyhzYWZlX3F1ZXJ5KCdTRUxFQ1QgRk9VTkRfUk9X UygpIEFTIGZvdW5kJywgJGRlYnVnKSk7CgkJCSRjb250ZW50Q291bnQgPSAkY29udGVudFJl c3VsdFsnZm91bmQnXTsKCgkJCWlmICgkcnMpIHsKCQkJCXRyYWNlX2FkZCgnW3NtZF9yZWxh dGVkX3RhZ3MgaW1hZ2UgcmVjb3JkczogJyAuIHByaW50X3IoJHJzLCB0cnVlKSAuICddJyk7 CgkJCQkkdW5pcXJzID0gYXJyYXkoKTsKCQkJCWZvcmVhY2ggKCRycyBhcyAkcm93KSB7CgkJ CQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkdW5pcXJzKSkgewoJCQkJCQkkc2FmZSA9 ICgkdGhpc2ltYWdlKSA/ICR0aGlzaW1hZ2UgOiBOVUxMOwoJCQkJCQkkdGhpc2ltYWdlID0g aW1hZ2VfZm9ybWF0X2luZm8oJHJvdyk7CgkJCQkJCSRvdXRbXSA9ICgkZm9ybSkgPyBwYXJz ZV9mb3JtKCRmb3JtKSA6ICgoJHRoaW5nKSA/IHBhcnNlKCR0aGluZykgOiBpbWFnZShhcnJh eSgnaWQnID0+ICRyb3dbJ2lkJ10pKSk7CgkJCQkJCSR1bmlxcnNbXSA9ICRyb3dbJ2lkJ107 CgkJCQkJCSR0aGlzaW1hZ2UgPSAkc2FmZTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJYnJlYWs7 CgkJY2FzZSAiZmlsZSI6CgkJCSRycyA9IGdldFJvd3MoIlNFTEVDVCBTUUxfQ0FMQ19GT1VO RF9ST1dTICIgLiAkc3FsU3R1YnNbJHR5cGVdWyJzZWxlY3QiXSAuICIgRlJPTSAiIC4gc2Fm ZV9wZngoJHNxbFN0dWJzWyR0eXBlXVsidGFibGUiXSkgLiAiIEFTIHR4cAoJCQkJTEVGVCBK T0lOICIuUEZYLlNNRF9UQUdVLiAiIEFTIHR1IE9OIHR4cC5pZCA9IHR1Lml0ZW1faWQKCQkJ CUxFRlQgSk9JTiAiLlBGWC5TTURfVEFHLiAiIEFTIHNtdCBPTiB0dS50YWdfaWQgPSBzbXQu aWQKCQkJCVdIRVJFIHR1LnR5cGUgPSAnZmlsZSciIC4gJHN0YXRTUUwgLiAkZXhjbHVkZUNs YXVzZSAuICRtYXRjaENsYXVzZSAuICcgR1JPVVAgQlkgdHhwLmlkJyAuICRhbmRfbW9kZUNs YXVzZSAuICRvcmRlckJ5LCAkZGVidWcpOwoJCQkkY29udGVudFJlc3VsdCA9IG15c3FsaV9m ZXRjaF9hc3NvYyhzYWZlX3F1ZXJ5KCdTRUxFQ1QgRk9VTkRfUk9XUygpIEFTIGZvdW5kJywg JGRlYnVnKSk7CgkJCSRjb250ZW50Q291bnQgPSAkY29udGVudFJlc3VsdFsnZm91bmQnXTsK CgkJCWlmICgkcnMpIHsKCQkJCXRyYWNlX2FkZCgnW3NtZF9yZWxhdGVkX3RhZ3MgZmlsZSBy ZWNvcmRzOiAnIC4gcHJpbnRfcigkcnMsIHRydWUpIC4gJ10nKTsKCQkJCSR1bmlxcnMgPSBh cnJheSgpOwoJCQkJZm9yZWFjaCAoJHJzIGFzICRyb3cpIHsKCQkJCQlpZiAoIWluX2FycmF5 KCRyb3dbJ2lkJ10sICR1bmlxcnMpKSB7CgkJCQkJCSRzYWZlID0gKCR0aGlzZmlsZSkgPyAk dGhpc2ZpbGUgOiBOVUxMOwoJCQkJCQkkdGhpc2ZpbGUgPSBmaWxlX2Rvd25sb2FkX2Zvcm1h dF9pbmZvKCRyb3cpOwoJCQkJCQkkb3V0W10gPSAoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9y bSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhpbmcpIDogZmlsZV9kb3dubG9hZF9saW5rKGFy cmF5KCdmaWxlbmFtZScgPT4gJHJvd1snZmlsZW5hbWUnXSksICRyb3dbJ2ZpbGVuYW1lJ10p KTsKCQkJCQkJJHVuaXFyc1tdID0gJHJvd1snaWQnXTsKCQkJCQkJJHRoaXNmaWxlID0gJHNh ZmU7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgImxpbmsiOgoJCQkkcnMg PSBnZXRSb3dzKCJTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyAiIC4gJHNxbFN0dWJzWyR0 eXBlXVsic2VsZWN0Il0gLiAiIEZST00gIiAuIHNhZmVfcGZ4KCRzcWxTdHVic1skdHlwZV1b InRhYmxlIl0pIC4gIiBBUyB0eHAKCQkJCUxFRlQgSk9JTiAiLlBGWC5TTURfVEFHVS4gIiBB UyB0dSBPTiB0eHAuaWQgPSB0dS5pdGVtX2lkCgkJCQlMRUZUIEpPSU4gIi5QRlguU01EX1RB Ry4gIiBBUyBzbXQgT04gdHUudGFnX2lkID0gc210LmlkCgkJCQlXSEVSRSB0dS50eXBlID0g J2xpbmsnIiAuICRleGNsdWRlQ2xhdXNlIC4gJG1hdGNoQ2xhdXNlIC4gJyBHUk9VUCBCWSB0 eHAuaWQnIC4gJGFuZF9tb2RlQ2xhdXNlIC4gJG9yZGVyQnksICRkZWJ1Zyk7CgkJCSRjb250 ZW50UmVzdWx0ID0gbXlzcWxpX2ZldGNoX2Fzc29jKHNhZmVfcXVlcnkoJ1NFTEVDVCBGT1VO RF9ST1dTKCkgQVMgZm91bmQnLCAkZGVidWcpKTsKCQkJJGNvbnRlbnRDb3VudCA9ICRjb250 ZW50UmVzdWx0Wydmb3VuZCddOwoKCQkJaWYgKCRycykgewoJCQkJdHJhY2VfYWRkKCdbc21k X3JlbGF0ZWRfdGFncyBsaW5rIHJlY29yZHM6ICcgLiBwcmludF9yKCRycywgdHJ1ZSkgLiAn XScpOwoJCQkJJHVuaXFycyA9IGFycmF5KCk7CgkJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykg ewoJCQkJCWlmICghaW5fYXJyYXkoJHJvd1snaWQnXSwgJHVuaXFycykpIHsKCQkJCQkJJHNh ZmUgPSAoJHRoaXNsaW5rKSA/ICR0aGlzbGluayA6IE5VTEw7CgkJCQkJCSR0aGlzbGluayA9 IGFycmF5KAoJCQkJCQkJJ2lkJyAgICAgICAgICA9PiAkcm93WydpZCddLAoJCQkJCQkJJ2xp bmtuYW1lJyAgICA9PiAkcm93WydsaW5rbmFtZSddLAoJCQkJCQkJJ3VybCcgICAgICAgICA9 PiAkcm93Wyd1cmwnXSwKCQkJCQkJCSdkZXNjcmlwdGlvbicgPT4gJHJvd1snZGVzY3JpcHRp b24nXSwKCQkJCQkJCSdkYXRlJyAgICAgICAgPT4gJHJvd1snZGF0ZSddLAoJCQkJCQkJJ2Nh dGVnb3J5JyAgICA9PiAkcm93WydjYXRlZ29yeSddLAoJCQkJCQkpOwoJCQkJCQkkb3V0W10g PSAoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOiAoKCR0aGluZykgPyBwYXJzZSgkdGhp bmcpIDogaHJlZigkcm93WydsaW5rbmFtZSddLCAkcm93Wyd1cmwnXSkpOwoJCQkJCQkkdW5p cXJzW10gPSAkcm93WydpZCddOwoJCQkJCQkkdGhpc2xpbmsgPSAkc2FmZTsKCQkJCQl9CgkJ CQl9CgkJCX0KCQkJYnJlYWs7Cgl9CgoJJHNtZF90YWdzWydtZXRhJ11bJ2NvbnRlbnRfY291 bnQnXSA9ICRjb250ZW50Q291bnQ7CgoJaWYgKCRvdXQpIHsKCQlyZXR1cm4gZG9MYWJlbCgk bGFiZWwsICRsYWJlbHRhZykuZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRjbGFz cyk7Cgl9CglyZXR1cm4gJyc7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBM aXN0IHRhZ3MgZnJvbSBjdXJyZW50IGNvbnRleHQsIG9yIGdpdmVuIHR5cGUKZnVuY3Rpb24g c21kX3RhZ19saXN0KCRhdHRzLCAkdGhpbmc9JycpIHsKCWdsb2JhbCAkc21kX3RhZ3MsICRz bWRfdGhpc3RhZzsKCXN0YXRpYyAkc21kX3RhZ3NfdHJlZSA9IGFycmF5KCk7CglzdGF0aWMg JHNtZF90YWdzX2NvdW50ID0gYXJyYXkoKTsKCglpZiAoIXNtZF90YWdzX3RhYmxlX2V4aXN0 KCkpIHsKCQl0cmlnZ2VyX2Vycm9yKGdUeHQoJ3NtZF90YWdfbm90X2F2YWlsYWJsZScpKTsK CQlyZXR1cm47Cgl9CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknZmxhdm91cicgICAgICA9 PiAnbGlzdCcsIC8vIDEpIGxpc3Q6IG9ubHkgdGFncyB3aXRoIGFzc2lnbm1lbnRzLCAyKSBj bG91ZCAoYWRkcyB3ZWlnaHRpbmcgdG8gc21kX3RoaXN0YWcpLCAzKSBoZWFkIChmaXJzdCB0 YWcgaW4gbGlzdCksIDQpIHRhaWwgKGxhc3QgdGFnIGluIGxpc3QpCgkJJ3Nob3dhbGwnICAg ICAgPT4gJzAnLCAvLyAwOiBqdXN0IHVzZWQsIDE6IGluY2x1ZGUgZW1wdGllcwoJCSd0eXBl JyAgICAgICAgID0+ICcnLAoJCSdpZCcgICAgICAgICAgID0+ICcnLAoJCSduYW1lJyAgICAg ICAgID0+ICcnLAoJCSdleGNsdWRlJyAgICAgID0+ICcnLAoJCSdwYXJlbnQnICAgICAgID0+ ICcnLCAvLyBTdGFydCBsaXN0IGZyb20gaGVyZQoJCSdzdWJsZXZlbCcgICAgID0+ICcnLCAv LyBHZXQgdGFncyBmcm9tIHRoaXMgc3ViLWxldmVsIG9ubHkgKDA9dG9wIGxldmVsLCAxLWxl dmVsIDEsIC4uLiwgYWxsPWV2ZXJ5dGhpbmcpCgkJJ2F1dG9fZGV0ZWN0JyAgPT4gJzEnLAoJ CSdvZmZzZXQnICAgICAgID0+IDAsCgkJJ2xpbWl0JyAgICAgICAgPT4gOTk5OTk5LAoJCSdm b3JtJyAgICAgICAgID0+ICcnLAoJCSdpbmRlbnQnICAgICAgID0+ICcmIzE2MDsmIzE2MDsn LAoJCSdzZWN0aW9uX2xpbmsnID0+ICcnLAoJCSdzb3J0JyAgICAgICAgID0+ICcnLAoJCSdz aHVmZmxlJyAgICAgID0+IDAsCgkJJ2xhYmVsJyAgICAgICAgPT4gJycsCgkJJ2xhYmVsdGFn JyAgICAgPT4gJycsCgkJJ3dyYXB0YWcnICAgICAgPT4gJ3VsJywKCQknYnJlYWsnICAgICAg ICA9PiAnbGknLAoJCSdjbGFzcycgICAgICAgID0+IF9fRlVOQ1RJT05fXywKCQknYWN0aXZl X2NsYXNzJyA9PiAnJywgLy8gVE9ETwoJCSdicmVha2NsYXNzJyAgID0+ICcnLAoJKSwkYXR0 cykpOwoKCS8vIFZhbGlkYXRlIGNsaWVudCBzaWRlIGF0dHMKCSR2YWxpZFR5cGVzID0gYXJy YXkoJ2FydGljbGUnLCdpbWFnZScsJ2ZpbGUnLCdsaW5rJyk7CgkkaWRzID0gJyc7Cgkkd2hl cmUgPSBhcnJheSgpOwoJJGN0eHQgPSBzbWRfdGFnc19jb250ZXh0KCk7CgoJJGF0dGVtcHRN YXRjaCA9IChlbXB0eSgkbmFtZSkgJiYgZW1wdHkoJGlkKSAmJiBlbXB0eSgkZXhjbHVkZSkg JiYgIWVtcHR5KCRjdHh0WydpZCddKSkgPyBmYWxzZSA6IHRydWU7CgkkdHlwZSA9IChpbl9h cnJheSgkdHlwZSwgJHZhbGlkVHlwZXMpKSA/ICR0eXBlIDogKCgkY3R4dFsnY29udGV4dCdd KSA/ICRjdHh0Wydjb250ZXh0J10gOiAkdmFsaWRUeXBlc1swXSk7CgkkaWRzID0gKCRpZCkg PyBkb19saXN0KCRpZCkgOiAoKCRhdXRvX2RldGVjdCAmJiAkY3R4dFsnaWQnXSkgPyAkY3R4 dFsnaWQnXSA6ICcnKTsKCgkvLyBVbmlxdWUgaWRlbnRpZmllcnMgZm9yIGNhY2hlaW5nIHRo ZSBsaXN0cwoJJGdvcHRzID0gJG5hbWUuJGlkLiRleGNsdWRlLiRwYXJlbnQuJHN1YmxldmVs OwoJJGd1aWQgPSBtZDUoJGdvcHRzKTsKCglpZiAoJG5hbWUpIHsKCQkkbmFtZSA9ICJuYW1l IElOICgiIC5qb2luKCcsJywgcXVvdGVfbGlzdChkb19saXN0KCRuYW1lKSkpLiAiKSI7CgkJ JHdoZXJlW10gPSAkbmFtZTsKCQkkaWRzID0gJyc7IC8vIG5hbWUgdHJ1bXBzIGlkOyBUT0RP OiBtYXliZSBvZmZlciBhIHdheSBvZiBjb21iaW5pbmcgdGhlbT8KCX0KCWlmICgkaWRzKSB7 CgkJJGlkcyA9ICJpZCBJTiAoIiAuam9pbignLCcsIHF1b3RlX2xpc3QoJGlkcykpLiAiKSI7 CgkJJHdoZXJlW10gPSAkaWRzOwoJfQoJaWYgKCRleGNsdWRlKSB7CgkJJGV4Y2x1ZGUgPSAi bmFtZSBOT1QgSU4gKCIgLmpvaW4oJywnLCBxdW90ZV9saXN0KGRvX2xpc3QoJGV4Y2x1ZGUp KSkuICIpIjsKCQkkd2hlcmVbXSA9ICRleGNsdWRlOwoJfQoKCWlmIChzdHJ0b2xvd2VyKCRw YXJlbnQpID09ICdzbWRfYXV0bycpIHsKCQkkcGFyZW50ID0gJyc7CgkJJHBsaXN0ID0gKGlz c2V0KCRzbWRfdGFnc1skdHlwZV0pKSA/ICRzbWRfdGFnc1skdHlwZV1bJ3RhZ19uYW1lJ10g OiAnJzsKCQlpZiAoaXNfYXJyYXkoJHBsaXN0KSkgewoJCQlmb3JlYWNoICgkcGxpc3QgYXMg JGlkeCA9PiAkcG5hbWUpIHsKCQkJCSRwYXJlbnQgPSAkcG5hbWU7CgkJCQlicmVhazsKCQkJ fQoJCX0KCX0KCgkkd2hlcmUgPSBqb2luKCcgQU5EICcsICR3aGVyZSk7Cgkkb3BlciA9ICcn OwoJaWYgKCEkd2hlcmUgJiYgaXNzZXQoJHNtZF90YWdzWyR0eXBlXSkpIHsKCQkvLyBVc2Ug VVJMIHRhZ3MKCQlpZiAoJHNob3dhbGwpIHsKCQkJaWYgKGlzc2V0KCRzbWRfdGFnc190cmVl WyR0eXBlXVskZ3VpZF1bJ2FsbCddKSkgewoJCQkJJHJzID0gJHNtZF90YWdzX3RyZWVbJHR5 cGVdWyRndWlkXVsnYWxsJ107CgkJCX0gZWxzZSB7CgkJCQkkcnMgPSAkc21kX3RhZ3NfdHJl ZVskdHlwZV1bJGd1aWRdWydhbGwnXSA9IHNtZF90YWdfdHJlZSgoKCRwYXJlbnQpID8gJHBh cmVudCA6ICdyb290JyksICR0eXBlLCAnMT0xJywgU01EX1RBRyk7CgkJCX0KCQl9IGVsc2Ug ewoJCQkvLyBXYXMganVzdCB0aGUgcGFyZW50IGF0dHJpYnV0ZSBzdXBwbGllZD8KCQkJaWYg KCRwYXJlbnQpIHsKCQkJCSRycyA9ICRzbWRfdGFnc190cmVlWyR0eXBlXVskZ3VpZF1bJ2Fs bCddID0gc21kX3RhZ190cmVlKCRwYXJlbnQsICR0eXBlLCAnMT0xJywgU01EX1RBRyk7CgkJ CX0gZWxzZSB7CgkJCQkkcnMgPSAkc21kX3RhZ3NbJHR5cGVdOwoJCQl9CgkJfQoJfSBlbHNl IHsKCQlpZiAoISR3aGVyZSAmJiAkYXR0ZW1wdE1hdGNoICYmICEkc2hvd2FsbCkgewoJICAJ CSR3aGVyZSA9ICcnOwoJICAJCSRycyA9IGFycmF5KCk7CgkJfSBlbHNlIHsKCQkJJHdoZXJl ID0gKCR3aGVyZSkgPyAkd2hlcmUgOiAnMT0xJzsKCQl9CgkJaWYgKCR3aGVyZSkgewoJCQl0 cmFjZV9hZGQoJ1tzbWRfdGFnX2xpc3QgcXVlcnk6ICcgLiAkd2hlcmUgLiAnXScpOwoJCX0K CgkJaWYgKCR3aGVyZSkgewoJCQlpZiAoICgkc2hvd2FsbCB8fCAkd2hlcmUgPT0gJzE9MScp ICYmIGlzc2V0KCRzbWRfdGFnc190cmVlWyR0eXBlXVskZ3VpZF1bJ2FsbCddKSApIHsKCQkJ CSRycyA9ICRzbWRfdGFnc190cmVlWyR0eXBlXVskZ3VpZF1bJ2FsbCddOwoJCQl9IGVsc2Ug ewoJCQkJJHdpbmRleCA9IG1kNSgkZ29wdHMuJHdoZXJlKTsKCQkJCWlmIChpc3NldCgkc21k X3RhZ3NfdHJlZVskdHlwZV1bJHdpbmRleF0pKSB7CgkJCQkJJHJzID0gJHNtZF90YWdzX3Ry ZWVbJHR5cGVdWyR3aW5kZXhdOwoJCQkJfSBlbHNlIHsKCQkJCQkkcnMgPSAkc21kX3RhZ3Nf dHJlZVskdHlwZV1bJHdpbmRleF0gPSBzbWRfdGFnX3RyZWUoKCgkcGFyZW50KSA/ICRwYXJl bnQgOiAncm9vdCcpLCAkdHlwZSwgKCgkc2hvd2FsbCkgPyAnMT0xJyA6ICR3aGVyZSksIFNN RF9UQUcpOwoJCQkJfQoJCQl9CgkJfQoKCQkkc3VibGV2ZWwgPSAoJHBhcmVudCAmJiAkc3Vi bGV2ZWw9PScnKSA/ICgoc21kX3RhZ190cmVlX3NlYXJjaCgkcGFyZW50LCAkcnMsIDEpKSA/ ICc+PTEnIDogJz49MCcpIDogJHN1YmxldmVsOwoJCXByZWdfbWF0Y2goJy8oWz08Pl0rKT8o W1xkXSt8YWxsKS8nLCAkc3VibGV2ZWwsICRtYXRjaGVzKTsKCQlpZigkbWF0Y2hlcykgewoJ CQkkb3BlciA9ICgkbWF0Y2hlc1sxXSAmJiBpbl9saXN0KCRtYXRjaGVzWzFdLCAnPiwgPCwg Pj0sIDw9JykpID8gJG1hdGNoZXNbMV0gOiAnPT0nOwoJCQkkc3VibGV2ZWw9JG1hdGNoZXNb Ml07CgkJfSBlbHNlIHsKCQkJJG9wZXIgPSAnPT0nOwoJCX0KCQl0cmFjZV9hZGQoJ1tzbWRf dGFnX2xpc3Qgc3VibGV2ZWwgfCBvcGVyYXRvciB8IG1hdGNoZXM6ICcgLiAkc3VibGV2ZWwg LiAnfCcgLiAkb3BlciAuICd8JyAuIGpvaW4oJywgJywgJG1hdGNoZXMpIC4gJ10nKTsKCX0K Cgl0cmFjZV9hZGQoJ1tzbWRfdGFnX2xpc3QgdHJlZTogJyAuIHByaW50X3IoJHJzLCB0cnVl KSAuICddJyk7CgoJaWYgKCRycykgewoJCSRvdXQgPSBhcnJheSgpOwoJCSR0b3RhbHMgPSBh cnJheSgpOwoKCQkkb3V0c3ViID0gYXJyYXkoKTsKCQl3aGlsZSAobGlzdCgka2V5LCAkcm93 KSA9IGVhY2goJHJzKSkgewoJCQkvLyBPbmx5IGFkZCB0aGUgcm93IGlmIG9uZSBvZjoKCQkJ Ly8gMSkgc2hvd2FsbCBpcyBvbgoJCQkvLyAyKSBzdWJsZXZlbCA9ICdhbGwnCgkJCS8vIDMp IG5vIHBhcmVudCBzcGVjaWZpZWQKCQkJLy8gNCkgc3VibGV2ZWwgaXMgZXF1YWwvZ3JlYXRl ci9sZXNzIHRoYW4gdGhlIHJvdydzIGxldmVsCgkJCWlmICgkc2hvd2FsbCA9PSAxIHx8IHN0 cnRvbG93ZXIoJHN1YmxldmVsKSA9PSAiYWxsIiB8fCAhJHBhcmVudCB8fCAoJG9wZXI9PSc9 PSc/ICRyb3dbJ2xldmVsJ10gPT0gJHN1YmxldmVsIDogKCgkb3Blcj09Jz49JykgPyAkcm93 WydsZXZlbCddID49ICRzdWJsZXZlbCA6ICgoJG9wZXI9PSc8PScpID8gJHJvd1snbGV2ZWwn XSA8PSAkc3VibGV2ZWwgOiAoKCRvcGVyPT0nPicpID8gJHJvd1snbGV2ZWwnXSA+ICRzdWJs ZXZlbCA6ICRyb3dbJ2xldmVsJ10gPCAkc3VibGV2ZWwpICkgKSApICkgewoJCQkJJG91dHN1 YltdID0gJHJvdzsKCQkJfQoJCX0KCQkkcnMgPSAkb3V0c3ViOwoJCXRyYWNlX2FkZCgnW3Nt ZF90YWdfbGlzdCBzdWJsZXZlbCByZWNvcmRzOiAnIC4gcHJpbnRfcigkcnMsIHRydWUpIC4g J10nKTsKCgkJaWYgKCRzaHVmZmxlKSB7CgkJCXNodWZmbGUoJHJzKTsKCQl9IGVsc2UgaWYg KCRzb3J0KSB7CgkJCSRzb3J0UHJlZml4ID0gIlNPUlRfIjsKCQkJJHNvcnRPcmRlciA9IGFy cmF5KCk7CgkJCSRzb3J0ID0gZG9fbGlzdCgkc29ydCk7CgkJCSRuc3J0ID0gY291bnQoJHNv cnQpOwoJCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgJG5zcnQ7ICRpZHgrKykgewoJCQkJJHNv cnRfZGlyID0gZXhwbG9kZSgnICcsICRzb3J0WyRpZHhdKTsKCQkJCWlmIChjb3VudCgkc29y dF9kaXIpIDw9IDEpIHsKCQkJCQkkc29ydF9kaXJbMV0gPSAiYXNjIjsKCQkJCX0KCQkJCSRk aXJlY3Rpb24gPSAoJHNvcnRfZGlyWzFdID09ICJkZXNjIikgPyAkc29ydFByZWZpeC4nREVT QycgOiAkc29ydFByZWZpeC4nQVNDJzsKCQkJCSRzb3J0T3JkZXJbXSA9IGFycmF5KCJjb2wi ID0+ICRzb3J0X2RpclswXSwgInNvcnQiID0+ICRkaXJlY3Rpb24pOwoJCQl9CgoJCQkvLyBU cmFuc2xhdGUgdGhlIHJvd3MgaW50byBjb2x1bW5zIHRoYXQgY2FuIGJlIHNvcnRlZAoJCQlm b3JlYWNoKCRycyBhcyAka2V5ID0+ICRyb3cpIHsKCQkJCWZvcmVhY2ggKCRyb3cgYXMgJGlk ZW50aWZpZXIgPT4gJGl0ZW0pIHsKCQkJCQkkdmFybmFtZSA9ICJjb2xfIi4kaWRlbnRpZmll cjsKCQkJCQkkeyR2YXJuYW1lfVska2V5XSA9ICRpdGVtOwoJCQkJfQoJCQl9CgoJCQkvLyBN YWtlIHVwIGFuIGFycmF5X211bHRpc29ydCBhcmcgbGlzdCBhbmQgZXhlY3V0ZSBpdC4KCQkJ Ly8gVGhlIG5lY2Vzc2FyeSBldmlsKCkgaXMgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGhvdyBt YW55IGNvbHMgdGhlcmUgd2lsbCBiZSBpbiB0aGUgYXJyYXkKCQkJZm9yICgkaWR4ID0gMDsg JGlkeCA8IGNvdW50KCRzb3J0T3JkZXIpOyAkaWR4KyspIHsKCQkJCSRzb3J0YXJnc1tdID0g JyRjb2xfJy4kc29ydE9yZGVyWyRpZHhdWydjb2wnXTsKCQkJCSRzb3J0YXJnc1tdID0gJHNv cnRPcmRlclskaWR4XVsnc29ydCddOwoJCQl9CgkJCSRzb3J0aXQgPSAnYXJyYXlfbXVsdGlz b3J0KCcuam9pbigiLCAiLCRzb3J0YXJncykuJywgJHJzKTsnOwoJCQlldmFsKCRzb3J0aXQp OwoJCX0KCgkJJHJzID0gYXJyYXlfc2xpY2UoJHJzLCAkb2Zmc2V0LCAkbGltaXQpOwoJCXRy YWNlX2FkZCgnW3NtZF90YWdfbGlzdCBwb3N0LWZpbHRlciByZWNvcmRzOiAnIC4gcHJpbnRf cigkcnMsIHRydWUpIC4gJ10nKTsKCQkkbnVtcmVjcyA9IGNvdW50KCRycyk7CgoJCS8vIENh Y2hlIHRoZSByZWxldmFudCBpbmZvIGZyb20gdGhlIHRhZyB1c2FnZSB0YWJsZQoJCWlmICgh aXNzZXQoJHNtZF90YWdzX2NvdW50WyR0eXBlXSkpIHsKCQkJJHRhZ3VzZSA9IHNhZmVfcm93 cygndGFnX2lkLCBjb3VudCgqKSBBUyB0YWxseScsIFNNRF9UQUdVLCAidHlwZT0nIiAuIGRv U2xhc2goJHR5cGUpIC4gIicgR1JPVVAgQlkgdGFnX2lkIik7CgkJCWZvcmVhY2ggKCR0YWd1 c2UgYXMgJHRhZ2Jsb2IpIHsKCQkJCSRzbWRfdGFnc19jb3VudFskdHlwZV1bJHRhZ2Jsb2Jb J3RhZ19pZCddXSA9ICR0YWdibG9iWyd0YWxseSddOwoJICAgICAgfQoJCX0KCgkJLy8gU2V0 IHVwIHRoZSBjbG91ZCB3ZWlnaHRpbmcgaWYgZGVzaXJlZAoJCSRmbGF2b3VyID0gZG9fbGlz dCgkZmxhdm91ciwgJzonKTsKCQlpZiAoJGZsYXZvdXJbMF0gPT0gJ2Nsb3VkJykgewoJCQkk bWluUGVyY2VudCA9IChpc3NldCgkZmxhdm91clsxXSkgJiYgIWVtcHR5KCRmbGF2b3VyWzFd KSkgPyAkZmxhdm91clsxXSA6IDEwMDsKCQkJJG1heFBlcmNlbnQgPSAoaXNzZXQoJGZsYXZv dXJbMl0pICYmICFlbXB0eSgkZmxhdm91clsyXSkpID8gJGZsYXZvdXJbMl0gOiAyMDA7CgkJ CSRtYXggPSAxOyAkbWluID0gOTk5OTk7ICRjb3VudCA9IDA7CgkJCWZvcmVhY2ggKCRycyBh cyAkcm93KSB7CgkJCQkkY291bnQgPSAoaXNzZXQoJHNtZF90YWdzX2NvdW50WyR0eXBlXVsk cm93WydpZCddXSkpID8gJHNtZF90YWdzX2NvdW50WyR0eXBlXVskcm93WydpZCddXSA6IDA7 CgkJCQkkbWF4ID0gKCRjb3VudCA+ICRtYXggPyAkY291bnQgOiAkbWF4KTsKCQkJCSRtaW4g PSAoJG1pbiA+ICRjb3VudCA/ICRjb3VudCA6ICRtaW4pOwoJCQl9CgkJCSRtdWx0aXBsaWVy ID0gKCRtYXggPiAkbWluKSA/ICgkbWF4UGVyY2VudCAtICRtaW5QZXJjZW50KSAvICgkbWF4 IC0gJG1pbikgOiAxOwoJCX0KCgkJJHRhZ19oZWFkID0gKGlzc2V0KCRzbWRfdGFnc1snbWV0 YSddWyd0YWdfaGVhZCddKSkgPyAkc21kX3RhZ3NbJ21ldGEnXVsndGFnX2hlYWQnXSA6ICcn OwoJCSR0YWdfdGFpbCA9IChpc3NldCgkc21kX3RhZ3NbJ21ldGEnXVsndGFnX3RhaWwnXSkp ID8gJHNtZF90YWdzWydtZXRhJ11bJ3RhZ190YWlsJ10gOiAnJzsKCQkkdGFnX2xpc3QgPSAo aXNzZXQoJHNtZF90YWdzWydtZXRhJ11bJ3RhZ19saXN0J10pKSA/ICRzbWRfdGFnc1snbWV0 YSddWyd0YWdfbGlzdCddIDogYXJyYXkoKTsKCgkJLy8gUHJlc2VydmUgdGhlIGN1cnJlbnQg dGFnIHNvIGxpc3RzIGluIGxpc3RzIGNhbiBiZSBjcmVhdGVkCgkJJG9sZF90YWcgPSAkc21k X3RoaXN0YWc7CgoJCS8vIEl0ZXJhdGUgb3ZlciB0aGUgdGFncywgcG9wdWxhdGUgdGhlIGxv Y2FsIGNvbnRleHQgKGdsb2JhbCEpIHZhcmlhYmxlIGFuZCBwYXJzZSB0aHJvdWdoIHRoZSBm b3JtL2NvbnRhaW5lcgoJCWZvcmVhY2ggKCRycyBhcyAkaWR4ID0+ICRyb3cpIHsKCQkJJGlu ZGV4ID0gJGlkeDsgLy8gQmVjYXVzZSB3ZSBjYW4gbXVjayBhYm91dCB3aXRoIHRoaXMgdmFs dWUgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGxvb3AgY291bnRlcgoKCQkJaWYgKCgkZmxhdm91 clswXSA9PSAnaGVhZCcpICYmICgkcm93WyduYW1lJ10gIT0gJHRhZ19oZWFkKSkgY29udGlu dWU7CgkJCWlmICgoJGZsYXZvdXJbMF0gPT0gJ3RhaWwnKSAmJiAoJHJvd1snbmFtZSddICE9 ICR0YWdfdGFpbCkpIGNvbnRpbnVlOwoJCQkkcm93Wyd0eXBlJ10gPSAkdHlwZTsKCQkJJHJv d1snY291bnQnXSA9IChpc3NldCgkc21kX3RhZ3NfY291bnRbJHR5cGVdWyRyb3dbJ2lkJ11d KSkgPyAkc21kX3RhZ3NfY291bnRbJHR5cGVdWyRyb3dbJ2lkJ11dIDogMDsKCQkJJHJvd1sn aW5kZW50J10gPSBzdHJfcmVwZWF0KCRpbmRlbnQsICRyb3dbJ2xldmVsJ10gKiAxKTsKCQkJ JHJvd1snd2VpZ2h0J10gPSAoJGZsYXZvdXJbMF0gPT0gJ2Nsb3VkJykgPyBmbG9vcigkbWlu UGVyY2VudCArICgoJG1heCAtICggJG1heCAtICgkcm93Wydjb3VudCddIC0gJG1pbikpKSAq ICRtdWx0aXBsaWVyKSkgOiAxOwoKCQkJaWYgKCAoJGZsYXZvdXJbMF0gPT0gJ2NydW1iJykg JiYgKCgkcG9zID0gYXJyYXlfc2VhcmNoKCRyb3dbJ25hbWUnXSwgJHRhZ19saXN0KSkgIT09 IGZhbHNlKSApIHsKCQkJCS8vIE92ZXJyaWRlIHRoZSBwb3NpdGlvbiBvZiB0aGlzIGVudHJ5 IGluIHRoZSBsaXN0IHRvIGZha2UgYSBjcnVtYnRyYWlsCgkJCQkkaW5kZXggPSAkcG9zOwoJ CQl9CgoJCQkkcm93WydmaXJzdCddID0gKCRpbmRleCA9PSAwKSA/IDEgOiAwOwoJCQkkcm93 WydsYXN0J10gPSAoJGluZGV4ID09ICgkbnVtcmVjcy0xKSkgPyAxIDogMDsKCgkJCXNtZF90 YWdfcG9wdWxhdGUoJHJvdyk7CgkJCSRvdXRbJGluZGV4XSA9ICgkdGhpbmcpID8gcGFyc2Uo JHRoaW5nKSA6ICgoJGZvcm0pID8gcGFyc2VfZm9ybSgkZm9ybSkgOgoJCQkJCXN0cl9yZXBl YXQoJGluZGVudCwgJHJvd1snbGV2ZWwnXSAqIDEpCgkJCQkJLnNtZF90YWdfbmFtZShhcnJh eSgndGl0bGUnID0+IDEsICdzZWN0aW9uJyA9PiAkc2VjdGlvbl9saW5rKSkKCQkJCQkuc21k X3RhZ19jb3VudChhcnJheSgpKSk7CgkJCSRzbWRfdGhpc3RhZyA9IGFycmF5KCk7CgkJfQoK CQkvLyBJbiBjYXNlIHRoZSBvcmRlciBoYXMgYmVlbiBmdWRnZWQgZm9yIGNydW1idHJhaWwK CQlrc29ydCgkb3V0KTsKCgkJLy8gUmVzdG9yZSBwcmV2aW91cyB0YWcsIGlmIGFueQoJCSRz bWRfdGhpc3RhZyA9ICRvbGRfdGFnOwoKCQlpZiAoJG91dCkgewoJCQlyZXR1cm4gZG9MYWJl bCgkbGFiZWwsICRsYWJlbHRhZykuZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRj bGFzcywgJGJyZWFrY2xhc3MpOwoJCX0KCX0KCXJldHVybiAnJzsKfQoKLyoKCnJlZ2lzdGVy X2NhbGxiYWNrKCd0cnVfdGFnc19hdG9tX2hhbmRsZXInLCAnYXRvbV9lbnRyeScpOwpmdW5j dGlvbiB0cnVfdGFnc19hdG9tX2hhbmRsZXIoJGV2ZW50LCAkc3RlcCkgeyByZXR1cm4gdHJ1 X3RhZ3NfZmVlZF9oYW5kbGVyKHRydWUpOyB9CnJlZ2lzdGVyX2NhbGxiYWNrKCd0cnVfdGFn c19yc3NfaGFuZGxlcicsICdyc3NfZW50cnknKTsKZnVuY3Rpb24gdHJ1X3RhZ3NfcnNzX2hh bmRsZXIoJGV2ZW50LCAkc3RlcCkgeyByZXR1cm4gdHJ1X3RhZ3NfZmVlZF9oYW5kbGVyKGZh bHNlKTsgfQoKZnVuY3Rpb24gdHJ1X3RhZ3NfZmVlZF9oYW5kbGVyKCRhdG9tKSB7CglnbG9i YWwgJHRoaXNhcnRpY2xlLCAkdHJ1X3RhZ3NfcHJlZnM7CglleHRyYWN0KCR0aGlzYXJ0aWNs ZSk7CgoJJHRhZ3MgPSB0cnVfdGFnc19nZXRfdGFnc19mb3JfYXJ0aWNsZSgkdGhpc2lkKTsK CglpZiAoJHRydV90YWdzX3ByZWZzW1RBR1NfSU5fRkVFRF9CT0RZXS0+dmFsdWUpIHsKCQkk ZXh0cmFib2R5ID0gJyc7CgkJJEZPUk1fTkFNRSA9ICd0cnVfdGFnc19mZWVkX3RhZ3MnOwoJ CWlmIChmZXRjaCgnZm9ybScsICd0eHBfZm9ybScsICduYW1lJywgJEZPUk1fTkFNRSkpIHsK CQkJJGZvcm0gPSBmZXRjaF9mb3JtKCRGT1JNX05BTUUpOwoJCQkkZXh0cmFib2R5ID0gdHJp bShwYXJzZSgkZm9ybSkpOwoJCX0gZWxzZSB7CgkJCSRhdHRzID0gdHJ1X3RhZ3NfZ2V0X3N0 YW5kYXJkX2Nsb3VkX2F0dHMoYXJyYXkoKSwgZmFsc2UsIHRydWUpOwoJCQkkZXh0cmFib2R5 ID0gJzxwPnRhZ3M6ICcgLiB0cnVfdGFnc19yZW5kZXJfY2xvdWQoJGF0dHMsICR0YWdzLCAk dGFncykgLiAnPC9wPic7CgkJfQoJCWdsb2JhbCAkdGhpc2FydGljbGU7CgkJaWYgKHRyaW0o JHRoaXNhcnRpY2xlWydleGNlcnB0J10pKSB7CgkJCSR0aGlzYXJ0aWNsZVsnZXhjZXJwdCdd ID0gdHJpbSgkdGhpc2FydGljbGVbJ2V4Y2VycHQnXSkubi4kZXh0cmFib2R5Lm47CgkJfQoJ CSR0aGlzYXJ0aWNsZVsnYm9keSddID0gdHJpbSgkdGhpc2FydGljbGVbJ2JvZHknXSkubi4k ZXh0cmFib2R5Lm47Cgl9CgoJaWYgKCR0cnVfdGFnc19wcmVmc1tUQUdTX0lOX0ZFRURfQ0FU RUdPUklFU10tPnZhbHVlKSB7CgkJJG91dHB1dCA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHRh Z3MgYXMgJHRhZykgewoJCQlpZiAoJGF0b20pIHsKCQkJCSRvdXRwdXRbXSA9ICc8Y2F0ZWdv cnkgdGVybT0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoJHRhZykgLiAnIiAvPic7CgkJCX0gZWxz ZSB7CgkJCQkkb3V0cHV0W10gPSAnPGNhdGVnb3J5PicgLiBodG1sc3BlY2lhbGNoYXJzKCR0 YWcpIC4gJzwvY2F0ZWdvcnk+JzsKCQkJfQoJCX0KCQlyZXR1cm4gbi5qb2luKG4sICRvdXRw dXQpLm47Cgl9Cn0KCiovIjtzOjQ6InR5cGUiO3M6MToiNSI7czo1OiJvcmRlciI7czoxOiI1 IjtzOjU6ImZsYWdzIjtzOjE6IjMiO3M6NDoiaGVscCI7czo1Nzk5ODoiPGgxPnNtZF90YWdz PC9oMT4KCjxwPlRhZyBhcnRpY2xlcywgaW1hZ2VzLCBmaWxlcyBhbmQgbGlua3Mgd2l0aCBz dHVmZiwgdGhlbiB1c2UgdGhlIHB1YmxpYy1zaWRlIHRhZ3MgdG8gZGlzcGxheSB0aGUgbGlz dHMsIGZpbHRlciBvciBmaW5kIHJlbGF0ZWQgY29udGVudC48L3A+Cgo8aDIgY2xhc3M9ImZl YXR1cmVzIj5GZWF0dXJlczwvaDI+Cgo8cD5BZG1pbi1zaWRlOjwvcD4KCjx1bD4KCTxsaT5V bmxpbWl0ZWQgdGFncyBmb3IgYXJ0aWNsZXMsIGltYWdlcywgZmlsZXMgYW5kIGxpbmtzPC9s aT4KCTxsaT5GYXN0IHRhZ2dpbmcgc3lzdGVtIGZvciBjb3B5aW5nLCBhdXRvLW5hbWluZywg YW5kIG9wdGlvbmFsIGF1dG8tY29tcGxldGlvbjwvbGk+Cgk8bGk+TmVzdGluZyBvZiB0YWdz PC9saT4KCTxsaT5MaXZlIHNlYXJjaCAvIGZpbHRlciwgd2l0aCBtdWx0aS10YWcgb3BlcmF0 aW9uczwvbGk+Cgk8bGk+T3B0aW9uYWxseSBsaW5rIHRhZ3MgdG8gVHhwIGNhdGVnb3JpZXMg c28gY2xpZW50cyBjYW4gb25seSBjaG9vc2UgZnJvbSBhIGxpbWl0ZWQgc2V0IG9mIHRhZ3M8 L2xpPgoJPGxpPkFzc2lnbiB0YWdzIHZpYSBhIGRyb3Bkb3duIHNlbGVjdCBsaXN0LCBhIHRl eHQgYXJlYSBvciBhIGxpc3Qgb2YgY2xpY2thYmxlIHRhZ3M8L2xpPgoJPGxpPlNldCB1cCAo b3B0aW9uYWwpIGRlZGljYXRlZCBzZWN0aW9ucyB0byBhbGxvdyBwdWJsaWMgc2lkZSB0YWcg ZmlsdGVyaW5nPC9saT4KCTxsaT5JbXBvcnQgKGFydGljbGUpIHRhZ3MgZnJvbSBvdGhlciB0 YWdnaW5nIHBsdWdpbnMgb3IgVHhwJiM4MjE3O3MgY2F0ZWdvcmllcyAvIGN1c3RvbSBmaWVs ZHM8L2xpPgo8L3VsPgoKPHA+UHVibGljLXNpZGU6PC9wPgoKPHVsPgoJPGxpPkxpc3QgLyBm aWx0ZXIgdGFncyBieSB0eXBlIGFuZCBuYW1lLiBXZWlnaHRlZCAoY2xvdWQpIG9yIGFscGhh YmV0aWNhbCBsaXN0cyBwb3NzaWJsZTwvbGk+Cgk8bGk+U2hvdyByZWxhdGVkIGNvbnRlbnQ6 Cgk8dWw+CgkJPGxpPmJ5IHRhZyA8ZW0+YmV0d2VlbiB0eXBlczwvZW0+LiBGb3IgZXhhbXBs ZSBpZiB5b3UgaGF2ZSBzZXQgdXAgY29tbW9uIHRhZ3MgZm9yIGJvdGggYXJ0aWNsZXMgYW5k IGZpbGVzLCB3aGVuIHZpZXdpbmcgYW4gYXJ0aWNsZSB5b3UgY2FuIGFzayB0aGUgcGx1Z2lu IHdoYXQgZmlsZXMgYXJlIHJlbGF0ZWQgKG9yIHZpY2UgdmVyc2E6IHdoYXQgYXJ0aWNsZXMg YXJlIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgZmlsZSEpPC9saT4KCQk8bGk+YmV0d2VlbiBv dGhlciBjb250ZW50LCBlLmcuIGFzayBpdCB0byBtYXRjaCB0aGUgdGFncyBmcm9tIHRoZSBj dXJyZW50IGZpbGUgd2l0aCB0aGUgYXJ0aWNsZSBjYXRlZ29yeSBvciBhIGN1c3RvbSBmaWVs ZDwvbGk+Cgk8L3VsPjwvbGk+Cgk8bGk+TXVsdGktdGFnIGZpbHRlcmluZzwvbGk+Cgk8bGk+ VGFnIGNvbmRpdGlvbmFscyBhbmQgY291bnRzPC9saT4KPC91bD4KCjxwPlRvIGRvIChwb3Nz aWJseSk6PC9wPgoKPHVsPgoJPGxpPkZpeCBmb3IgZm9yZWlnbiBjaGFyYWN0ZXIgYXV0b3Rh ZyBkdW1iZG93bjwvbGk+Cgk8bGk+VGFnIGFuZCBhcnRpY2xlIHBhZ2luZyBzdXBwb3J0OiBu ZXh0L3ByZXYvb2xkZXIvbmV3ZXI8L2xpPgo8L3VsPgoKPGgyIGNsYXNzPSJpbnN0YWxsIj5J bnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+Cgo8cCBjbGFzcz0iaW1wb3J0YW50 Ij5SZXF1aXJlcyBUZXh0cGF0dGVybiA0LjUuMCsuPC9wPgoKPHAgY2xhc3M9ImltcG9ydGFu dCI+SWYgdXBncmFkaW5nIGZyb20gdjAuMjAgb3IgZWFybGllcjogZGVsZXRlIHNtZF90YWdz X2NsaWVudCBhbmQgc21kX3RhZ3NfYWRtaW4gcGx1Z2lucyBmaXJzdCwgdGhlbiBpbnN0YWxs IGFuZCBhY3RpdmF0ZSB0aGlzIHBsdWdpbi4gWW91ciBwcmVmcyBhbmQgdGFncyB3aWxsIGJl IHJldGFpbmVkLjwvcD4KCjxwPkRvd25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEg aHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zLzEwMjYvc21kX3RhZ3MiPnRl eHRwYXR0ZXJuLm9yZzwvYT4gb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS9zdyI+c29mdHdhcmUgcGFnZTwvYT4uIFBhc3RlIGludG8gdGhlIFR4cCA8aT5BZG1pbi0m Z3Q7UGx1Z2luczwvaT4gcGFuZWwsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwv cD4KCjxwPlZpc2l0IHRoZSBfX0V4dGVuc2lvbnMtJmd0O3NtZF90YWdzXyBwYW5lbC4gSWYg aXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gZG9uZSBhdXRvbWF0aWNhbGx5IGZvciB5b3UsIGNs aWNrIHRoZSBJbnN0YWxsIHRhYmxlcyBidXR0b24uIFRoZSBuZWNlc3NhcnkgdGFibGVzIGFu ZCBwcmVmZXJlbmNlcyB3aWxsIGJlIGluc3RhbGxlZC4gRnJvbSB0aGlzIHBhZ2UgeW91IGNh biBJbnN0YWxsLCBEZWxldGUgYW5kIFNhdmUgdGhlIHBsdWdpbiBwcmVmZXJlbmNlcyBvciBy ZW1vdmUgdGhlIHBsdWdpbiYjODIxNztzIHRhYmxlcyB0byBlbXB0eSB5b3VyIHRhZ3MgZW50 aXJlbHkgYW5kIHN0YXJ0IGFnYWluLjwvcD4KCjxwPlRvIGNvbXBsZXRlbHkgcmVtb3ZlIHNt ZF90YWdzLCB2aXNpdCB0aGUgPGVtPnNtZF90YWdzIFByZWZlcmVuY2VzPC9lbT4gcGFnZSwg aGl0ICYjODIxNjtSZW1vdmUgdGFibGVzJiM4MjE3OyB0byByZW1vdmUgdGhlIHByZWZlcmVu Y2VzIGFuZCB0YWcgdGFibGVzIGZyb20gdGhlIGRhdGFiYXNlLCB0aGVuIHNpbXBseSBkZWxl dGUgdGhlIHBsdWdpbiBhcyBub3JtYWwgZnJvbSB0aGUgPGVtPkFkbWluLSZndDtQbHVnaW5z PC9lbT4gcGFnZS48L3A+Cgo8cD5WaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRl eHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTI4NjIxIj5mb3J1bSB0aHJlYWQ8L2E+ IGZvciBtb3JlIGluZm8gYW5kIHRvIHJlcG9ydCB0aGUgc3VjY2VzcyAob3Igb3RoZXJ3aXNl KSBvZiB0aGlzIHBsdWdpbi48L3A+Cgo8aDI+QWRtaW4tc2lkZSBidXR0b25zPC9oMj4KCjx1 bD4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TWFuYWdlIHRhZ3M8L3NwYW4+IDogU3dpdGNo IHRvIHRoZSA8YSBocmVmPSIjbWFuYWdlIj50YWcgbWFuYWdlbWVudCBwYWdlPC9hPi48L2xp PgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5QcmVmZXJlbmNlczwvc3Bhbj4gOiBTd2l0Y2gg dG8gdGhlIDxhIGhyZWY9IiNwcmVmcyI+cHJlZmVyZW5jZXMgcGFnZTwvYT4uPC9saT4KCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+SW1wb3J0IHRhZ3M8L3NwYW4+IDogPGEgaHJlZj0iI2lt cG9ydCI+SW1wb3J0IHRhZ3M8L2E+IGZyb20gdHJ1X3RhZ3MsIHJzc191bmxpbWl0ZWRfY2F0 ZWdvcmllcyBvciBUeHAgY2F0ZWdvcmllcy9jdXN0b20gZmllbGRzLjwvbGk+Cgk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPlJlbW92ZSBwcmVmcyAmIzgyMjQ7PC9zcGFuPiA6IERlbGV0ZSB0 aGUgcHJlZmVyZW5jZXMgb25seTsgdXNlZnVsIGlmIHlvdXIgcHJlZnMgaGF2ZSBiZWNvbWUg Y29ycnVwdGVkIG9yIHlvdSBzaW1wbHkgd2FudCB0byByZXR1cm4gdG8gJiM4MjIwO2RlZmF1 bHQmIzgyMjE7IG9wZXJhdGlvbi48L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5SZW1v dmUgdGFibGVzICYjODIyNDs8L3NwYW4+IDogRGVsZXRlIHRoZSB0YWdzIHRhYmxlcy4gVGhp cyB3aWxsIHBlcm1hbmVudGx5IGVyYXNlIGFsbCB0YWdzIGFnYWluc3QgYWxsIGFydGljbGVz LCBpbWFnZXMsIGZpbGVzIGFuZCBsaW5rcy4gQmUgdmVyeSBzdXJlIHlvdSBtZWFuIGl0IGJl Zm9yZSBjbGlja2luZyB0aGlzITwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlJlYnVp bGQgdGFncyAmIzgyMjQ7PC9zcGFuPiA6IElmIHlvdXIgdGFnIHRhYmxlIGlzIGNvcnJ1cHQg eW91IDxzdHJvbmc+bWF5PC9zdHJvbmc+IGJlIGFibGUgdG8gZml4IGl0IHdpdGggdGhpcyBv cHRpb24uIEhvd2V2ZXIsIGlmIGl0IGlzIGJhZGx5IGRhbWFnZWQgeW91IG1heSBqdXN0IGdl dCBhIHdoaXRlIHNjcmVlbiBvZiBkZWF0aC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgeW91ciBv cHRpb25zIGFyZSB0aGVuIHRvIGVpdGhlciBmaXggaXQgYnkgaGFuZCBvciBkZWxldGUgdGhl IGJhZCBlbnRyaWVzLCByZWJ1aWxkIHRoZSB0YWJsZSB3aXRoIHRoZSByZW1haW5pbmcgaXRl bXMgYW5kIHRoZW4gcmVwb3B1bGF0ZSB0aGUgdGFncy48L2xpPgo8L3VsPgoKPHA+JiM4MjI0 OyBob2xkIGRvd24gPGVtPlNoaWZ0PC9lbT4gd2hlbiByZWZyZXNoaW5nIHRoZSBQcmVmcyBw YW5lbCB1bnRpbCBpdCBoYXMgZnVsbHkgbG9hZGVkIHRvIGVuYWJsZSB0aGVzZSBvcHRpb25z OiB5b3UgaGF2ZSB0byBiZSBxdWljayE8L3A+Cgo8aDIgaWQ9InByZWZzIj5UaGUgcHJlZmVy ZW5jZXM8L2gyPgoKPGgzPkludGVyZmFjZSBzZXR0aW5nIHByZWZzPC9oMz4KCjx1bD4KCTxs aT48c3BhbiBjbGFzcz0iYXRubSI+RW5hYmxlIHRhZ3MgaW48L3NwYW4+IDogYSB0YWcgZW50 cnkgbWVjaGFuaXNtIGlzIGFkZGVkIHRvIHRoZSBhZG1pbiBzaWRlIG9mIGVhY2ggb2YgdGhl IGNoZWNrZWQgcGFnZXM8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5FbnRlciB0YWdz IHVzaW5nPC9zcGFuPiA6IHRoZSBtZWNoYW5pc20geW91IHdpc2ggdG8gdXNlIHRvIGFzc2ln biB0YWdzLiA8Y29kZT5UZXh0IGFyZWErPC9jb2RlPiBhbGxvd3MgbmV3IHRhZ3MgdG8gYmUg YWRkZWQgb24gdGhlIGZseSB2aWEgY29udHJpYnV0b3JzIChhIGJpdCBsaWtlIHRydV90YWdz KTwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkJpLWRpcmVjdGlvbmFsIHRhZyB0cmVl czwvc3Bhbj4gOiB3aGVuIHlvdSBhc3NpZ24gYSB0YWcgdG8gYW4gaXRlbSwgYW55IHRpbWUg eW91IGRpc3BsYXkgcmVsYXRlZCBpdGVtcyBieSB0YWcsIG9ubHkgZXhhY3QgbWF0Y2hpbmcg aXRlbXMgYXJlIHJldHVybmVkLiBJZiB5b3Ugb3JnYW5pc2UgeW91ciB0YWdzIGluIGhpZXJh cmNoaWNhbCB0cmVlcywgeW91IG1heSB3aXNoIHRvIGhhdmUgcGFyZW50IG9yIGNoaWxkIHRh Z3MgYXV0b21hdGljYWxseSBjb25zaWRlcmVkLiBDaG9vc2UgZnJvbToKCTx1bD4KCQk8bGk+ PHN0cm9uZz5Obzwvc3Ryb25nPjogT25seSBleGFjdCB0YWcgbWF0Y2hlcyBhcmUgY29uc2lk ZXJlZCB3aGVuIHJldHVybmluZyByZWxhdGVkIGNvbnRlbnQ8L2xpPgoJCTxsaT48c3Ryb25n PlVwPC9zdHJvbmc+OiBmb3IgYW55IGdpdmVuIHRhZyBhc3NpZ25lZCB0byBhbiBpdGVtLCBj b25zaWRlciBhbGwgaXRzIHBhcmVudCB0YWdzIGFsc28gaW1wbGljaXRseSBhc3NpZ25lZDwv bGk+CgkJPGxpPjxzdHJvbmc+RG93bjwvc3Ryb25nPjogZm9yIGFueSBnaXZlbiB0YWcgYXNz aWduZWQgdG8gYW4gaXRlbSwgY29uc2lkZXIgYWxsIGl0cyBjaGlsZCB0YWdzIGFsc28gaW1w bGljaXRseSBhc3NpZ25lZDwvbGk+CgkJPGxpPjxzdHJvbmc+Qm90aDwvc3Ryb25nPjogZm9y IGFueSBnaXZlbiB0YWcgYXNzaWduZWQgdG8gYW4gaXRlbSwgY29uc2lkZXIgYWxsIGl0cyBw YXJlbnQgYW5kIGNoaWxkIHRhZ3MgYWxzbyBpbXBsaWNpdGx5IGFzc2lnbmVkPC9saT4KCTwv dWw+PC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TGluayB0YWdzIHRvIGNhdGVnb3Jp ZXM8L3NwYW4+IDogYWxsb3cgdGFncyB0byBiZSBhc3NvY2lhdGVkIHdpdGggVHhwIGNhdGVn b3JpZXMuIElmIHRoaXMgaXMgb24gYW5kIDxjb2RlPlRleHQgYXJlYSs8L2NvZGU+IGlzIGJl aW5nIHVzZWQsIGFueSBuZXcgdGFncyBhZGRlZCB2aWEgdGhlIGFydGljbGUsIGltYWdlLCBm aWxlIG9yIGxpbmsgc2NyZWVucyB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVu dGx5IHNlbGVjdGVkIGNhdGVnb3J5IChvciBjYXRlZ29yeTEgaW4gdGhlIGNhc2Ugb2YgYXJ0 aWNsZXMpPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UGVybWl0IHBhcmVudCB0YWcg c2VsZWN0aW9uPC9zcGFuPiA6IGlmIHNldCB0byAmIzgyMTY7eWVzJiM4MjE3OywgdGhlIHBh cmVudCB0YWdzIGFzc2lnbmVkIHRvIHRoZSBjaG9zZW4gY2F0ZWdvcmllcyBhcmUgc2VsZWN0 ZWFibGUgYXMgdGFncy4gU2V0IHRvICYjODIxNjtubyYjODIxNzsgaWYgeW91ciB0YWcgaGll cmFyY2h5IGlzIHN1Y2ggdGhhdCB0aGUgcGFyZW50IHRhZyBpcyBqdXN0IGEgcGxhY2Vob2xk ZXIgb3IgJiM4MjIwO2dyb3VwIGxlYWRlciYjODIyMTsgd2l0aCBubyBpbnRyaW5zaWMgdmFs dWUgb3RoZXIgdGhhbiBhcyBhIHBhcmVudCBmb3IgYSBidW5jaCBvZiBjaGlsZCB0YWdzPC9s aT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TWFzdGVyIHBhcmVudCB0YWc8L3NwYW4+IDog dGhlIG5hbWUgb2YgYSB0YWcgdGhhdCB5b3UgZGVzaWduYXRlIGFzIHRoZSAmIzgyMTY7bWFz dGVyJiM4MjE3OyB0YWcuIEFzc2lnbmluZyBhbnkgdGFncyBiZW5lYXRoIHRoaXMgb25lIHdp bGwgYmUgYWRkZWQgdG8gYW55IHBlci1jYXRlZ29yeSB0YWdzIHRvIG1ha2UgdXAgdGhlIGZp bmFsIGF2YWlsYWJsZSB0YWcgcG9vbDwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPlF1 aWNrIHRhZzwvc3Bhbj4gOiBpZiB1c2luZyBhIHRleHRhcmVhIGFuZCB5b3UgaW5zdGFsbCB0 aGUgalF1ZXJ5IGF1dG9jb21wbGV0ZSBwbHVnaW4sIHRoaXMgZGV0ZXJtaW5lcyB3aGljaCBt ZXRob2Qgb2YgYXV0by1jb21wbGV0ZSB0byB1c2U6IDxjb2RlPnN0cmljdDwvY29kZT4gcHJl dmVudHMgdGFncyBiZWluZyBzdWJtaXR0ZWQgdGhhdCBhcmUgZGlzYWxsb3dlZCBieSB0aGUg Y3VycmVudCBUeHAgY2F0ZWdvcnk7IDxjb2RlPnN0YW5kYXJkPC9jb2RlPiBhbGxvd3MgbmV3 IHRhZ3MgdG8gYmUgZW50ZXJlZC4gTm90ZSB0aGF0IHlvdSA8c3Ryb25nPm1heSBub3QgZW50 ZXIgbmV3IHRhZ3MgYXQgYWxsPC9zdHJvbmc+IGlmIFF1aWNrIHRhZ3MgaXMgaW4gPGNvZGU+ c3RyaWN0PC9jb2RlPiBtb2RlOiBpdCBvdmVycmlkZXMgPGNvZGU+VGV4dCBhcmVhKzwvY29k ZT48L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5qcyBwbHVnaW4gZGlyPC9zcGFuPiA6 IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91ciBhdXRvLWNvbXBsZXRlIHBsdWdpbiByZXNp ZGVzICh0aGUgZmlsZW5hbWUgaXQgZXhwZWN0cyBpcyA8Y29kZT5qcXVlcnkuYXV0b2NvbXBs ZXRlLnBhY2suanM8L2NvZGU+KS4gSWYgeW91IGJlZ2luIHRoZSBkaXJlY3RvcnkgbmFtZSB3 aXRoIGEgPGNvZGU+LzwvY29kZT4gdGhlIHBhdGggd2lsbCBiZSByZWxhdGl2ZSB0byB5b3Vy IHNpdGUgcm9vdC4gV2l0aG91dCBhIHByZWNlZGluZyAmIzgyMTY7LyYjODIxNzsgaXQgaXMg cmVsYXRpdmUgdG8gdGhlICYjODIxNjt0ZXh0cGF0dGVybiYjODIxNzsgZGlyZWN0b3J5LiBU aGUgdHJhaWxpbmcgc2xhc2ggaXMgb3B0aW9uYWwgYW5kIHdpbGwgYmUgYWRkZWQgaW50ZXJu YWxseSBpZiB5b3Ugb21pdCBpdC4gVGhpcyBnaXZlcyB5b3UgdGhlIGZyZWVkb20gdG8gcHV0 IHRoZSBmaWxlcyB3aGVyZXZlciBpdCBzdWl0cyB5b3UgYW5kIHJlZmVyZW5jZSB0aGVtIGxp a2UgdGhpczoKCTx1bD4KCQk8bGk+dXNlIDxjb2RlPm15X2pzPC9jb2RlPiBmb3IgJiM4MjE2 O3RleHRwYXR0ZXJuL215X2pzL2pxdWVyeS5hdXRvY29tcGxldGUucGFjay5qcyYjODIxNzs8 L2xpPgoJCTxsaT51c2UgZWl0aGVyIDxjb2RlPi4uL215X3NjcmlwdHM8L2NvZGU+ICBvciA8 Y29kZT4vbXlfc2NyaXB0czwvY29kZT4gZm9yICYjODIxNjtzaXRlX3Jvb3QvbXlfc2NyaXB0 cy9qcXVlcnkuYXV0b2NvbXBsZXRlLnBhY2suanMmIzgyMTc7PC9saT4KCTwvdWw+PC9saT4K CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+anMgc3R5bGUgZGlyPC9zcGFuPiA6IHRoZSBkaXJl Y3RvcnkgaW4gd2hpY2ggeW91ciBhdXRvLWNvbXBsZXRlIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGZpbGVzIHJlc2lkZSAodGhlIGZpbGUgbmFtZSBpdCBleHBlY3RzIGlzIDxj b2RlPmpxdWVyeS5hdXRvY29tcGxldGUuY3NzPC9jb2RlPikuIFRoZSBzYW1lIGNvbW1lbnRz IGhvbGQgdHJ1ZSBhYm91dCB0aGUgcGF0aCBhcyBhYm92ZTwvbGk+Cgk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPlNlbGVjdC90ZXh0YXJlYSByb3dzPC9zcGFuPiA6IG51bWJlciBvZiByb3dz IGluIHRoZSBzZWxlY3QgbGlzdCBvciB0ZXh0YXJlYS4gSWYgc2V0IHRvIDxjb2RlPjE8L2Nv ZGU+IGEgc2VsZWN0IGxpc3Qgd2lsbCBiZWNvbWUgbm9uLW11bHRpcGxlIGFuZCB5b3UgY2Fu IHRoZW4gb25seSBjaG9vc2UgMSB0YWcuIFNldCB0byA8Y29kZT4wPC9jb2RlPiB0byBzaG93 IGEgbXVsdGlwbGUgc2VsZWN0IGxpc3QgY29udGFpbmluZyBhbGwgdGFncy4gT3RoZXIgdmFs dWVzIHNob3cgYSBtdWx0aXBsZSBzZWxlY3QgbGlzdCB3aXRoIHRoZSBnaXZlbiBudW1iZXIg b2Ygcm93cyBidXQgYmUgYXdhcmUgdGhpcyBtYXkgdHVybiBvdXQgdG8gYmUgYSBndWlkZSBh cyBjZXJ0YWluIGJyb3dzZXIgZmFjdG9ycyBtYXkgb3ZlcnJpZGUgdGhlIHZhbHVlLiBGb3Ig ZXhhbXBsZSwgaW4gRmlyZWZveCBpZiB5b3UgY2hvb3NlIGEgc2VsZWN0IGxpc3QgdmFsdWUg b2YgPGNvZGU+MjwvY29kZT4geW91IGNhbm5vdCBzZWUgdGhlIHdob2xlIGxpc3QgYmVjYXVz ZSB0aGUgaW5wdXQgaXMgbm90IGJpZyBlbm91Z2ggdG8gc2hvdyB0aGUgc2Nyb2xsYmFyICh5 b3UgZ2V0IGEgc2Nyb2xsYmFyIGZyb20gYSB2YWx1ZSBvZiA8Y29kZT4zPC9jb2RlPiBvciBt b3JlKS4gQWxzbywgaWYgeW91IGFyZSB1c2luZyBhdXRvY29tcGxldGUgZm9yIHRoZSB0ZXh0 IGFyZWEgeW91IG1heSBub3QgZ2V0IHRoZSBudW1iZXIgb2Ygcm93cyB5b3UgZXhwZWN0IGR1 ZSB0byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gdGhhdCBjb21lcyB3aXRo IHRoZSBhdXRvY29tcGxldGUgcGx1Z2luPC9saT4KPC91bD4KCjxoMz5UYWcgbWFuYWdlbWVu dCBwcmVmczwvaDM+Cgo8dWw+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkluaXRpYWwgcGFu ZTwvc3Bhbj4gOiB3aGVuIHlvdSBjbGljayA8ZW0+RXh0ZW5zaW9ucyAtJmd0OyBzbWRfdGFn czwvZW0+LCBzaG93IGVpdGhlciB0aGUgcHJlZmVyZW5jZXMgcGFnZSBvciB0aGUgdGFnIG1h bmFnZW1lbnQgcGFnZTwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkF1dG8gbmFtZTwv c3Bhbj4gOiBoZWxwcyBzcGVlZCB0YWcgY3JlYXRpb24gYnkgYXV0b21hdGljYWxseSBuYW1p bmcgdGhlbSBiYXNlZCBvbiB0aGUgdGl0bGUgeW91IHVzZTwvbGk+Cgk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPlRhZyBsYXlvdXQ8L3NwYW4+IDogY2FuIGJlIGVpdGhlcjoKCTx1bD4KCQk8 bGk+dGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIHRhZ3MgdG8gZGlzcGxheSBpbiB0aGUgbWFu YWdlbWVudCBwYWdlLiBUaGlzIGNyZWF0ZXMgYSB0YWJsZTwvbGk+CgkJPGxpPnRoZSB3b3Jk IDxjb2RlPmxpc3Q8L2NvZGU+IHRvIHNob3cgdGhlbSBhcyBhbiB1bm9yZGVyZWQgbGlzdC4g SWYgeW91IHNwZWNpZnkgPGNvZGU+bGlzdDpOPC9jb2RlPiB0aGVuIHRoZSBsaXN0IHdpbGwg YmUgc3BsaXQgZXZlcnkgJiM4MjE2O04mIzgyMTc7IHRhZ3MgYW5kIHN0YXJ0IGEgbmV3IHJv dy9jb2x1bW4gKGRlcGVuZGluZyBvbiB5b3VyIHNldHRpbmcgb2YgPGVtPk9yZGVyIHRhZ3Mg Ynk8L2VtPik8L2xpPgoJCTxsaT50aGUgd29yZCA8Y29kZT5ncm91cDwvY29kZT4gdG8gc3Rh cnQgYSBuZXcgcm93IG9yIGNvbHVtbiBlYWNoIHRpbWUgYSBuZXcgdG9wLWxldmVsIHRhZyBp cyBlbmNvdW50ZXJlZC4gVXNlZnVsIGZvciBoZWF2aWx5IG5lc3RlZCBvciBoaWVyYXJjaGlj YWwgdGFnczwvbGk+Cgk8L3VsPjwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk9yZGVy IHRhZ3MgYnk8L3NwYW4+IDogJiM4MjE2O2NvbHVtbiYjODIxNzsgdG8gaGF2ZSB0aGUgdGFn cyB3b3JrIGRvd24gdGhlIHBhZ2UgZmlyc3Q7ICYjODIxNjtyb3cmIzgyMTc7IHRvIHdvcmsg YWNyb3NzIHRoZSBwYWdlPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+U2hvdyB0YWcg dXNhZ2UgY291bnRzPC9zcGFuPiA6IHdoZXRoZXIgdG8gaW5kaWNhdGUgdGhlIG51bWJlciBv ZiBpdGVtcyBmb3Igd2hpY2ggYSB0YWcgaXMgdXNlZDwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9 ImF0bm0iPldoZW4gZGVsZXRpbmcgYSBwYXJlbnQ8L3NwYW4+IDogY2hvb3NlIHdoZXRoZXIg YW55IGNoaWxkIHRhZ3Mgd2lsbCBiZSBwcm9tb3RlZCB0byB0aGUgc2FtZSBsZXZlbCBhcyB0 aGUgdGFnIHlvdSBqdXN0IGRlbGV0ZWQsIG9yIHRoZSBlbnRpcmUgdHJlZSBiZWxvdyB0aGUg ZGVsZXRlZCB0YWcgd2lsbCBiZSByZW1vdmVkIGFzIHdlbGw8L2xpPgoJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5BbGxvdyBkZWxldGlvbiBvZiB1c2VkIHRhZ3M8L3NwYW4+IDogd2hlbiBz ZXQgdG8gJiM4MjE2O25vJiM4MjE3OywgaWYgYSB0YWcgaGFzIGJlZW4gdXNlZCBieSBhbiBh cnRpY2xlL2ltYWdlL2ZpbGUvbGluayBpdCBjYW5ub3QgYmUgZGVsZXRlZDwvbGk+Cgk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPlRleHRpbGUgZGVzY3JpcHRpb248L3NwYW4+IDogYWxsb3cg VGV4dGlsZSB0byBiZSB1c2VkIGluIHRhZyBkZXNjcmlwdGlvbnM8L2xpPgoJPGxpPjxzcGFu IGNsYXNzPSJhdG5tIj5TaG93IGRlc2NyaXB0aW9uIGFzIHRvb2x0aXA8L3NwYW4+IDogd2hl biBvbiBhIGNvbnRlbnQgcGFuZWwgYW5kIHlvdSBoYXZlIGVsZWN0ZWQgdG8gdXNlIFNlbGVj dCBMaXN0IG9yIFRleHQgTGlzdCBpbnB1dCBtb2RlcywgdGhpcyBzZXR0aW5nIHRlbGxzIHRo ZSBwbHVnaW4gdG8gcG9wdXAgYSB0b29sdGlwIG9mIHRoZSBkZXNjcmlwdGlvbiBhcyB5b3Ug aG92ZXIgb3ZlciBhIHRhZzwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkF1dG9tYXRp Y2FsbHkgZGlzcGxheSByZXBvcnRzPC9zcGFuPiA6IGFmdGVyIG9wZXJhdGlvbnMgdGhhdCBh ZmZlY3QgbXVsdGlwbGUgdGFncywgYSByZXBvcnQgbGlzdGluZyB0aGUgYWx0ZXJhdGlvbnMg aXMgYXZhaWxhYmxlLiBJZiBzZXQgdG8gJiM4MjE2O3llcyYjODIxNzsgdGhpcyByZXBvcnQg aXMgcG9wcGVkIHVwIGZvciB5b3UgdG8gcmVhZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3Bl cmF0aW9uLiBJZiBzZXQgdG8gJiM4MjE2O25vJiM4MjE3OyB5b3UgY2FuIHZpZXcgdGhlIHJl cG9ydCBieSBjbGlja2luZyB0aGUgPGVtPkRpc3BsYXkgcmVjZW50IHJlcG9ydDwvZW0+IGxp bmsgaW4gdGhlIFRhZyBTZWFyY2ggYm94PC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ Q2xpY2tlZCA8c3BhbiBjbGFzcz0iY2FwcyI+UkdCPC9zcGFuPiBjb2xvdXI8L3NwYW4+IDog dGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGJhY2tncm91bmQgY29sb3VyIGZv ciB0aGUgY3VycmVudGx5IGVkaXRlZCB0YWc8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5Nb3VzZS1vdmVyIDxzcGFuIGNsYXNzPSJjYXBzIj5SR0I8L3NwYW4+IGNvbG91cjwvc3Bh bj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gYmFja2dyb3VuZCBjb2xv dXIgYXMgeW91IG1vdmUgb3ZlciBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Q8L2xpPgoJPGxpPjxz cGFuIGNsYXNzPSJhdG5tIj5TdWItdGFnIGxldmVsIGluZGljYXRvcjwvc3Bhbj4gOiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGVudGl0eSBvciB0ZXh0IHlvdSB3aXNo IHRvIHByZWNlZGUgZWFjaCBzdWItdGFnIHdpdGguIExldmVsIDEgdGFncyBoYXZlIG9uZSBv ZiB0aGVzZSBzeW1ib2xzIGFkZGVkLCBsZXZlbCAyIHRhZ3MgaGF2ZSB0d28gYWRkZWQsIGFu ZCBzbyBvbjwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk11bHRpLXRhZyBkZWxpbWl0 ZXI8L3NwYW4+IDogYWxsb3dzIHlvdSB0byBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgdGFnIGF0 IGEgdGltZSBkdXJpbmcgY3JlYXRpb24uIElmIHlvdSBlbnRlciBtb3JlIHRoYW4gb25lIGNo YXJhY3RlciBoZXJlLCBvbmx5IHRoZSBmaXJzdCB3aWxsIGJlIHVzZWQuIFRvIGRpc2FibGUg dGhpcyBmZWF0dXJlLCBlbXB0eSB0aGUgYm94IGNvbnRlbnRzPC9saT4KCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+RGVzY3JpcHRpb24gd2lkdGgsIGhlaWdodDwvc3Bhbj4gOiB3aWR0aCBh bmQgaGVpZ2h0IChjb21tYS1zZXBhcmF0ZWQsIGluIHBpeGVscykgb2YgdGhlIGRlc2NyaXB0 aW9uIHRleHRhcmVhIGlucHV0IGZpZWxkPC9saT4KPC91bD4KCjxoMz48c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPiBtYW5hZ2VtZW50IHByZWZzPC9oMz4KCjx1bD4KCTxsaT48c3Bh biBjbGFzcz0iYXRubSI+VXNlIHRhZyBjb21iaW5hdGlvbnM8L3NwYW4+IDogSWYgc2V0IHRv IHllcywgeW91IG1heSBwZXJmb3JtIG11bHRpLXRhZyBzZWFyY2hlcyBmcm9tIHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPi4gSWYgc2V0IHRvIG5vLCBvbmx5IHRoZSBsYXN0 IHRhZyBpcyB0YWtlbiBpbnRvIGFjY291bnQ8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij48c3BhbiBjbGFzcz0iY2FwcyI+QU5EPC9zcGFuPiBjb21iaW5hdG9yIGNoYXI8L3NwYW4+ IDogVGhlIGNoYXJhY3RlciB0byB1c2UgYmV0d2VlbiB0YWdzIHdoZW4geW91IHdhbnQgdG8g ZmluZCBzbWRfcmVsYXRlZF90YWdzIHRoYXQgbWF0Y2ggPHNwYW4gY2xhc3M9ImNhcHMiPkFM TDwvc3Bhbj4gdGhlIHRhZ3MgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+ LiBEZWZhdWx0OiA8Y29kZT4rPC9jb2RlPjwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i Pk9SIGNvbWJpbmF0b3IgY2hhcjwvc3Bhbj4gOiBUaGUgY2hhcmFjdGVyIHRvIHVzZSBiZXR3 ZWVuIHRhZ3Mgd2hlbiB5b3Ugd2FudCB0byBmaW5kIHNtZF9yZWxhdGVkX3RhZ3MgdGhhdCBt YXRjaCA8c3BhbiBjbGFzcz0iY2FwcyI+QU5ZPC9zcGFuPiBvZiB0aGUgdGFncyBpbiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4uIERlZmF1bHQ6IDxjb2RlPnw8L2NvZGU+ PC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gbmFtZSBwYXJhbWV0ZXI8L3NwYW4+IDogV2hlbiBmaWx0ZXJpbmcgYnkgdGFnIG5h bWUsIHRoaXMgaXMgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHN0cmluZyB1 c2VkIHRvIGluZGljYXRlIGEgdGFnPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+PHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gdHlwZSBwYXJhbWV0ZXI8L3NwYW4+IDogV2hl biBmaWx0ZXJpbmcgYnkgdGFnIHR5cGUsIHRoaXMgaXMgdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHN0cmluZyB1c2VkIHRvIGluZGljYXRlIGEgdGFnIHR5cGU8L2xpPgoJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5UcmlnZ2VyKHMpIGZvciB0YWcgbGlzdHM8L3NwYW4+ IDogQSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0cmlnZ2VyIHdvcmRzLCBvciBUeHAgU2Vj dGlvbnMgd2hpY2ggYXJlIHZhbGlkIHRhZyBsYW5kaW5nIHBhZ2VzPHN1cCBjbGFzcz0iZm9v dG5vdGUiIGlkPSJmbnJldjg3NDEzNjY4NjU4OWMyYzczNjVkYjQtMSI+PGEgaHJlZj0iI2Zu ODc0MTM2Njg2NTg5YzJjNzM2NWRiNC0xIj4xPC9hPjwvc3VwPi4gQW55IGF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGVkIGxpbmtzIGZyb20gdGhlIHB1YmxpYy1zaWRlIHRhZ3Mgd2lsbCBiZSBz ZW50IHRvIHRoZSA8ZW0+Zmlyc3Q8L2VtPiBzZWN0aW9uIGluIHRoZSBsaXN0IGZvciBkaXNw bGF5LiBDYW4gYmUgb3ZlcnJpZGRlbiBvbiBhIHRhZy1ieS10YWcgYmFzaXMgd2l0aCB0aGUg PGNvZGU+c2VjdGlvbl9saW5rPC9jb2RlPiBhdHRyaWJ1dGU8L2xpPgo8L3VsPgoKPHAgY2xh c3M9ImZvb3Rub3RlIiBpZD0iZm44NzQxMzY2ODY1ODljMmM3MzY1ZGI0LTEiPjxzdXA+MTwv c3VwPiBJZiB1c2luZyB0aGlzIGZlYXR1cmUgZm9yIFNlY3Rpb25zLCB0aGV5IG11c3QgZXhp c3QgaW4geW91ciBUeHAgU2VjdGlvbnMgdGFiLCB1bmxlc3MgeW91IGFyZSB1c2luZyBzb21l IGdicF9wZXJtYW5lbnRfbGlua3MgbWFnaWMuIE5vdGUgdGhhdCA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPnMgY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6PC9w PgoKPHVsPgoJPGxpPkZ1bGwgY2xlYW4gOiA8Y29kZT5zaXRlLmNvbS90cmlnZ2VyL3RhZy10 eXBlL3RhZy1uYW1lPC9jb2RlPjwvbGk+Cgk8bGk+U2hvcnQtY2lyY3VpdGVkIGNsZWFuIDog PGNvZGU+c2l0ZS5jb20vdHJpZ2dlci90YWctbmFtZTwvY29kZT4gKGRlZmF1bHRzIHRvIDxj b2RlPmFydGljbGU8L2NvZGU+IHRhZyB0eXBlKTwvbGk+Cgk8bGk+TWVzc3kgZGVmYXVsdCA6 IDxjb2RlPnNpdGUuY29tL3RyaWdnZXI/c21kX3RhZ3R5cGU9dGFnLXR5cGUmYW1wO3NtZF90 YWc9dGFnLW5hbWU8L2NvZGU+IChzbWRfdGFndHlwZSBjYW4gYmUgb21pdHRlZCB0byBtZWFu ICYjODIxNjthcnRpY2xlJiM4MjE3Oyk8L2xpPgoJPGxpPk1lc3N5IHBlci1zZWN0aW9uOiA8 Y29kZT5zaXRlLmNvbS9zZWN0aW9uP3NtZF90YWd0eXBlPXRhZy10eXBlJmFtcDtzbWRfdGFn PXRhZy1uYW1lPC9jb2RlPjwvbGk+Cgk8bGk+Q2xlYW4gcGVyLXNlY3Rpb246IDxjb2RlPnNp dGUuY29tL3NlY3Rpb24vdHJpZ2dlci90YWctdHlwZS90YWctbmFtZTwvY29kZT48L2xpPgoJ PGxpPlNob3J0LWNpcmN1aXRlZCBwZXItc2VjdGlvbiBjbGVhbiA6IDxjb2RlPnNpdGUuY29t L3NlY3Rpb24vdHJpZ2dlci90YWctbmFtZTwvY29kZT48L2xpPgoJPGxpPlNob3J0LWNpcmN1 aXRlZCBwZXItc2VjdGlvbiBtZXNzeSA6IDxjb2RlPnNpdGUuY29tL3NlY3Rpb24/c21kX3Rh Zz10YWctbmFtZTwvY29kZT48L2xpPgo8L3VsPgoKPHA+KHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPiBwYXJhbXMgPGNvZGU+c21kX3RhZzwvY29kZT4gYW5kIDxjb2RlPnNt ZF90YWd0eXBlPC9jb2RlPiBjYW4gYmUgYWx0ZXJlZCBmcm9tIHRoZSBwcmVmcykuPC9wPgoK PHA+V2F0Y2ggb3V0IGlmIHlvdSBhcmUgdXNpbmcgY2xlYW4gdXJscyBiZWNhdXNlIHRoZXkg bWF5IGNsYXNoIHdpdGggeW91ciBpbmRpdmlkdWFsIGFydGljbGUgdmlld3MuIEZvciBleGFt cGxlLCBpZiB5b3UgY2hvc2UgdG8gZGV0ZWN0IHRhZyBsaXN0cyBvbiB5b3VyIDxjb2RlPndp ZGdldHM8L2NvZGU+IHNlY3Rpb24gYW5kIHlvdSYjODIxNztyZSB1c2luZyB0aGUgc2VjdGlv bi90aXRsZSBwZXJtbGluayBzY2hlbWUsIHRoZSBwbHVnaW4gd29uJiM4MjE3O3Qga25vdyB0 aGUgZGlmZmVyZW5jZSBiZXR3ZWVuOjwvcD4KCjx1bD4KCTxsaT4vd2lkZ2V0cy9ob3ctdG8t b3JkZXIgKGFuIGluZGl2aWR1YWwgYXJ0aWNsZSB1bmRlciB0aGUgL3NlY3Rpb24vdGl0bGUg cGVybWxpbmsgc2NoZW1lKTwvbGk+Cgk8bGk+L3dpZGdldHMvd2lkZ2V0LWMgKGEgdGFnIGZv ciB3aWRnZXQtYyk8L2xpPgo8L3VsPgoKPHA+U28geW91IHNob3VsZCBtYWtlIHN1cmUgaW4g dGhpcyBjYXNlIHRoYXQgeW91IGVpdGhlciBhKSB1c2UgYSBkZWRpY2F0ZWQgKG5vbi1hcnRp Y2xlLWJlYXJpbmcpIHNlY3Rpb24gZm9yIHlvdXIgdGFnIGxpc3RzLCBiKSBhbHdheXMgdXNl IHRoZSBmdWxsIHRhZyBzeW50YXggaW5jbHVkaW5nIHR5cGU6IDxjb2RlPndpZGdldHMvYXJ0 aWNsZS93aWRnZXQtYzwvY29kZT4sIGMpIHVzZSBtZXNzeSB0YWcgc3ludGF4LCBkKSBjaGFu Z2UgcGVybWxpbmsgc2NoZW1lLiBUaGUgcGx1Z2luIHRyaWVzIHRvIGF2b2lkIGNsb2JiZXJp bmcgPGNvZGU+L3NlY3Rpb24vaWQvdGl0bGU8L2NvZGU+IGZvcm1hdCBieSBkZXRlY3Rpbmcg dGhlIHByZXNlbmNlIG9mIHRoZSBudW1lcmljIGlkLCBzbyB0aGF0IG1heSBiZSB0aGUgc2Fm ZXN0IG9wdGlvbiBpZiB5b3UgYXJlIG1peGluZyB0YWcgbGFuZGluZyBwYWdlcyB3aXRoIGFy dGljbGUgc2VjdGlvbnMuPC9wPgoKPGgyIGlkPSJtYW5hZ2UiPlRhZyBtYW5hZ2VtZW50IHBh bmU8L2gyPgoKPHA+RGlzcGxheXMgYSBsaXN0IG9mIGFsbCBkZWZpbmVkIHRhZ3MuIEluIGNv bnRyYXN0IHRvIHRoZSBidWlsdC1pbiBjYXRlZ29yaWVzLCBvbmx5IG9uZSB0eXBlIGlzIHNo b3duIGF0IGEgdGltZTsgc3dpdGNoIGJldHdlZW4gdGhlbSB3aXRoIHRoZSByYWRpbyBidXR0 b25zIGluIHRoZSAmIzgyMTY7RmlsdGVyJiM4MjE3OyByb3cuPC9wPgoKPHA+VGhlIGlucHV0 IHJvdyBhdCB0aGUgdG9wIGhhcyBmb3VyIG9yIGZpdmUgZmllbGRzIGluIGl0LCBkZXBlbmRp bmcgaWYgeW91IGhhdmUgY2hvc2VuIHRvIGxpbmsgdGFncyB0byBjYXRlZ29yaWVzOjwvcD4K Cjx1bD4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+VGl0bGU8L3NwYW4+IDogVGhlIGRpc3Bs YXkgbmFtZSBvZiB0aGUgdGFnIG9uIHRoZSBwdWJsaWMgc2l0ZTwvbGk+Cgk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPkRlc2NyaXB0aW9uPC9zcGFuPiA6IEEgZGVzY3JpcHRpb24gdG8gZXhw bGFpbiB0aGUgdGFnJiM4MjE3O3MgcHVycG9zZTwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0 bm0iPlBhcmVudDwvc3Bhbj4gOiBXaGV0aGVyIHRoZSB0YWcgaXMgaW4gYSBzdWItY2F0ZWdv cnkuIFRoZSBlbXB0eSBpdGVtIGlzIGNvbnNpZGVyZWQgJiM4MjE2O3Jvb3QmIzgyMTc7ICh0 b3AgbGV2ZWwpPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TGlua2VkIGNhdDwvc3Bh bj4gOiAob3B0aW9uYWwpIFdoZXRoZXIgdGhlIHRhZyBpcyBhc3NvY2lhdGVkIHdpdGggYSBU eHAgY2F0ZWdvcnkuIEFueSBzdWItdGFncyBhcmUgYXV0b21hdGljYWxseSBhc3NpZ25lZCB0 byB0aGUgY2hvc2VuIGNhdGVnb3J5IGFzIHdlbGw8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5OYW1lPC9zcGFuPiA6IFRoZSAmIzgyMTY7aW50ZXJuYWwmIzgyMTc7IFR4cCB0YWcg bmFtZS4gUHJvYmFibHkgc2hvdWxkbiYjODIxNzt0IGNvbnRhaW4gc3BhY2VzIG9yIHdlaXJk IGNoYXJhY3RlcnMsIGFsdGhvdWdoIHlvdSBjYW4gcHV0IHRoZW0gaW4gaWYgeW91IGtub3cg d2hhdCB5b3UmIzgyMTc7cmUgZG9pbmc8L2xpPgo8L3VsPgoKPHA+V2l0aCB0aGUgYXV0by1u YW1lIGZlYXR1cmUgZW5hYmxlZCwgd2hhdGV2ZXIgeW91IHR5cGUgaW4gdGhlIFRpdGxlIGZp ZWxkIHdpbGwgYmUgbWltaWNrZWQgaW4gdGhlIE5hbWUgZmllbGQsIGJ1dCB3aXRoIG9ubHkg bG93ZXIgY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy4gU3BhY2VzIHdpbGwgYmUgY29u dmVydGVkIHRvIGRhc2hlcy4gTm90ZSB0aGF0IGF0IHByZXNlbnQsIGZvcmVpZ24gY2hhcmFj dGVycyBhcmUgbm90ICYjODIxNjtkdW1iZWQgZG93biYjODIxNzsgdG8gPHNwYW4gY2xhc3M9 ImNhcHMiPkFTQ0lJPC9zcGFuPi4gVGhpcyBmZWF0dXJlIGlzIHBsYW5uZWQgYnV0IGZvciB0 aGUgdGltZSBiZWluZyBpdCBpcyBwcm9iYWJseSBiZXN0IHRvIHN3aXRjaCBvZmYgdGhlIGF1 dG8tbmFtZSBmZWF0dXJlIGlmIHlvdSBhcmUgZGVhbGluZyBoZWF2aWx5IHdpdGggdW5pY29k ZSBjaGFyYWN0ZXJzLiBZb3VyIHRhZ3Mgd2lsbCBzdGlsbCBiZSBkdW1iZWQgZG93biBhY2Nv cmRpbmcgdG8gVHhwJiM4MjE3O3MgaW50ZXJuYWwgcnVsZXMgZXhhY3RseSBsaWtlIHRoZXkg YXJlIG9uIHRoZSBDYXRlZ29yaWVzIHBhbmVsOyB5b3UganVzdCB3b24mIzgyMTc7dCBiZSBh YmxlIHRvIHNlZSBpdHMgbmFtZSB1bnRpbCB5b3UgY2xpY2sgdG8gaGlnaGxpZ2h0IGl0Ljwv cD4KCjxwPklmIHlvdSBoYXZlIGVsZWN0ZWQgdG8gdXNlIG11bHRpLXRhZyBlbnRyeSwgeW91 IG1heSBwdXQgYXMgbWFueSB0YWdzIGFzIHlvdSBsaWtlIGluIHRoZSBUYWcgVGl0bGUvVGFn IE5hbWUgYm94ZXMsIGVhY2ggc2VwYXJhdGVkIGJ5IHlvdXIgY2hvc2VuIGRlbGltaXRlciBj aGFyYWN0ZXIgKHNlZSB0aGUgPGVtPk11bHRpLXRhZyBkZWxpbWl0ZXI8L2VtPiBwcmVmZXJl bmNlKS48L3A+Cgo8cD5IaXQgU2F2ZSAob3IgQ3JlYXRlKSB0byBkZWZpbmUgdGhlIHRhZyhz KSwgb3IgdXNlIHRoZSBFbnRlciBrZXkgd2hlbiBpbiBhbnkgaW5wdXQgZmllbGQgYXMgYSBz aG9ydGN1dCBmb3IgQ3JlYXRlLiBUaGUgdGFnKHMpIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUg Y3VycmVudGx5IHNlbGVjdGVkIHR5cGUgKGFydGljbGUsIGltYWdlLCBmaWxlIG9yIGxpbmsp IGFuZCBhc3NpZ25lZCB0byB0aGUgY3VycmVudGx5IGNob3NlbiBQYXJlbnQvQ2F0ZWdvcnku IElmIHlvdSBoYXZlIGFkZGVkIG9ubHkgb25lIHRhZywgaXQgd2lsbCByZW1haW4gJiM4MjE2 O3NlbGVjdGVkJiM4MjE3OyBhZnRlciBjcmVhdGlvbiBhbmQgd2lsbCBhbHNvIHN0YXkgc2Vs ZWN0ZWQgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiB0eXBlcy4gVGhpcyBhbGxvd3MgZm9yIHJh cGlkIGNyZWF0aW9uIG9mIHNpbWlsYXItbmFtZWQgdGFncyBvciBmb3IgdmVyeSBxdWlja2x5 ICYjODIxNjtjb3B5aW5nJiM4MjE3OyB0YWdzIGZyb20gb25lIHR5cGUgdG8gYW5vdGhlci48 L3A+Cgo8cD5Zb3UgY2FuIGVkaXQgYW55IHRhZyBieSBjbGlja2luZyBvbiBpdCBpbiB0aGUg bGlzdCB0byBwdWxsIGl0IGludG8gdGhlIGVkaXQgbGluZSBhdCB0aGUgdG9wLiBNYWtlIGFu eSBjaGFuZ2VzIGFuZCBoaXQgU2F2ZSB0byBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIHRhZywg b3IgaGl0IENyZWF0ZSB0byBtYWtlIGEgbmV3IG9uZS4gVXNlIHRoZSAmIzgyMTY7eCYjODIx NzsgYnV0dG9uIHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgdGFnOyBub3RlIHRoZXJlIGlzIG5v IGNvbmZpcm1hdGlvbiBzdGVwLCBzaW5jZSB0aGUgYWN0IG9mIGNsaWNraW5nIHRoZSB0YWcg aXMgdGhlIGNvbmZpcm1hdGlvbiBpdHNlbGYhIFdoZW4geW91IHN3aXRjaCBiZXR3ZWVuIHR5 cGVzLCBpZiB0aGUgY3VycmVudGx5IGVkaXRlZCB0YWcgZXhpc3RzIGluIGFub3RoZXIgdHlw ZSwgaXQgd2lsbCBiZSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5IHVwb24gc3dpdGNoaW5nLjwv cD4KCjxwPklmIHRoZSBvcHRpb24gdG8gZGlzcGxheSBjb3VudHMgaXMgc2VsZWN0ZWQgdGhl IG51bWJlciBvZiBhcnRpY2xlcyAvIGltYWdlcyAvIGZpbGVzIC8gbGlua3Mgd2lsbCBiZSBz aG93biBpbiBicmFja2V0cyBhbG9uZ3NpZGUgZWFjaCB0YWcuIElmIHRoZSB2YWx1ZSBpcyBn cmVhdGVyIHRoYW4gMCB0aGUgbnVtYmVyIGNhbiBiZSBjbGlja2VkIHRvIHZpZXcgdGhlIGxp c3Qgb2YgaXRlbXMgY29udGFpbmluZyB0aGF0IHRhZy48L3A+Cgo8cD5Ob3Rlczo8L3A+Cgo8 dWw+Cgk8bGk+SWYgeW91IEVkaXQgYSB0YWcgYW5kIHRyeSB0byBTYXZlIGl0IHdoZW4gaXQg aGFzIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgdGFnLCB5b3Ugd2lsbCByZWNlaXZl IGEgd2FybmluZyBtZXNzYWdlPC9saT4KCTxsaT5JZiB5b3UgdHJ5IHRvIGRlbGV0ZSBhIHRh ZyB0aGF0IGlzIGluIHVzZSBhbmQgdGhlIHByZWZlcmVuY2UgJiM4MjE2O0FsbG93IGRlbGV0 aW9uIG9mIHVzZWQgdGFncyYjODIxNzsgaXMgc2V0IHRvICYjODIxNjtubyYjODIxNzssIGl0 IHdpbGwgYmUgZm9yYmlkZGVuPC9saT4KCTxsaT5UaGUgcGFyZW50IGxpc3QgaXMgcG9wdWxh dGVkIHZpYSA8c3BhbiBjbGFzcz0iY2FwcyI+QUpBWDwvc3Bhbj4gZnJvbSB0aGUgZGF0YWJh c2UgZWFjaCB0aW1lIHlvdSBjbGljayBhIHRhZywgYW5kIHRoZSBMaW5rZWQgY2F0IGxpc3Qg aXMgcG9wdWxhdGVkIGVhY2ggdGltZSB5b3UgY2hhbmdlIHR5cGUuIFRoaXMgaXMgdW5mb3J0 dW5hdGVseSB1bmF2b2lkYWJsZS4gVGhlIGxpc3RzIHdpbGwgZmFkZSBvdXQgd2hpbGUgdGhl IHJlcXVlc3QgaXMgdGFraW5nIHBsYWNlLiBPY2Nhc2lvbmFsbHkgaXQgbWF5IGdldCAmIzgy MjA7c3R1Y2smIzgyMjE7IGlmIHlvdSBjbGljayB0b28gcXVpY2tseSBiZXR3ZWVuIHRhZ3Mg b3IgdGhlIHNlcnZlciBpcyBzbG93IHRvIHJlc3BvbmQuIEluIHRoZXNlIGNpcmN1bXN0YW5j ZXMsIHJlZnJlc2hpbmcgdGhlIHBhZ2UgYnkgY2xpY2tpbmcgdGhlIDxlbT5zbWRfdGFnczwv ZW0+IHRhYiB3aWxsIHJlc3RvcmUgdGhpbmdzPC9saT4KCTxsaT5XaGVuIHVzaW5nIHRoZSBh dXRvLXRhZyBmZWF0dXJlLCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIE5hbWUgZmllbGQs IGRvIGl0IDxlbT5hZnRlcjwvZW0+IHlvdSBoYXZlIGZpbmlzaGVkIHR5cGluZyBpbiB0aGUg VGl0bGUgZmllbGQ7IGFueSBzdWJzZXF1ZW50IGNoYW5nZXMgdG8gdGhlIFRpdGxlIGZpZWxk IHdpbGwgb3ZlcndyaXRlIGFueXRoaW5nIGluIHRoZSBOYW1lIGZpZWxkPC9saT4KCTxsaT5E ZWxldGluZyBhIHRhZyB3aWxsIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBpdCwgc28gYmUg Y2FyZWZ1bDwvbGk+CjwvdWw+Cgo8aDM+TGl2ZSB0YWcgc2VhcmNoPC9oMz4KCjxwPllvdSBj YW4gdXNlIHRoZSA8ZW0+VGFnIHNlYXJjaDwvZW0+IGJveCB0byBmaWx0ZXIgeW91ciB0YWcg bGlzdCBpbiByZWFsLXRpbWUuIFRoaXMgZmFjaWxpdGF0ZXMgZWFzeSBzZWFyY2hpbmcgd2hl biB5b3VyIHRhZyBsaXN0IGJlY29tZXMgbGFyZ2UuIFNpbXBseSBzdGFydCB0eXBpbmcgaW4g dGhlIHRleHQgYm94IGFuZCB5b3VyIHRhZ3Mgd2lsbCBiZSBmaWx0ZXJlZCBhcyB5b3UgdHlw ZS4gQW4gaW5kaWNhdG9yIHRvIHRoZSByaWdodCBzaG93cyBob3cgbWFueSB0YWdzIG1hdGNo IHlvdXIgY3VycmVudCBzZWFyY2ggY3JpdGVyaWEuIFlvdSBjYW4gY2hvb3NlIHRoYXQgeW91 ciB0ZXh0IGJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgdGFnJiM4MjE3O3MgbmFtZSwgaXRzIHRp dGxlLCBpdHMgcGFyZW50IHRhZywgbGlua2VkIGNhdGVnb3J5IChpZiB5b3UgaGF2ZSBhbGxv d2VkIHRhZ3MgdG8gYmUgbGlua2VkKSwgb3IgYWxsIG9mIHRoZSBhYm92ZS48L3A+Cgo8cD5X aGVuIHlvdSBmbGljayBiZXR3ZWVuIHRhZyB0eXBlcyB5b3VyIHNlYXJjaCBjcml0ZXJpYSBy ZW1haW4gaW4gZm9yY2UuIEhpdCB0aGUgPGVtPjxzcGFuIGNsYXNzPSJjYXBzIj5FU0M8L3Nw YW4+YXBlPC9lbT4ga2V5IHRvIGNsZWFyIHRoZSB0ZXh0IGJveCBhbmQgcmV0dXJuIHlvdXIg dGFnIGxpc3QgdG8gaXRzIHVuZmlsdGVyZWQgc3RhdGUuIFlvdSBtYXkgaGlkZS9kaXNwbGF5 IHRoZSBmaWx0ZXIgYm94IGJ5IGNsaWNraW5nIGl0cyBoZWFkaW5nIHRvIHRvZ2dsZSBpdHMg dmlzaWJpbGl0eSAodGhlIGN1cnJlbnQgc3RhdGUgaXMgcmVtZW1iZXJlZCBmb3IgeW91KS48 L3A+Cgo8cD5Ob3Rlczo8L3A+Cgo8dWw+Cgk8bGk+c2VhcmNoZXMgYXJlIGNhc2UgaW5zZW5z aXRpdmU8L2xpPgoJPGxpPm11bHRpLXdvcmQgc2VhcmNoZXMgZmluZCB0YWdzIHdpdGggPGVt PmFueTwvZW0+IG9mIHRoZSBtYXRjaGluZyB3b3Jkcy4gVGhpcyBhbGxvd3MgeW91IHRvIGJ1 aWxkIHVwIGNvbXBsZXggc2VhcmNoZXMgdXNpbmcgbWFueSB3b3JkcyBhbmQgYXBwbHkgYWN0 aW9ucyB0byB0aGVtIGFsbDwvbGk+Cgk8bGk+bGlua2VkIGNhdGVnb3JpZXMgYW5kIHRhZyBu YW1lcy9wYXJlbnRzIGFyZSBlc2NhcGVkIHNvIHRoZXkgd2lsbCBub3QgY29udGFpbiBhbnkg bm9uLTxzcGFuIGNsYXNzPSJjYXBzIj5BU0NJSTwvc3Bhbj4gb3Igc3BlY2lhbCBjaGFyYWN0 ZXJzLiBGb3IgZXhhbXBsZSwgaWYgeW91ciB0YWcgdGl0bGUgaXMgPGVtPlBhdWwgTyYjODIx NztHcmFkeTwvZW0+IHlvdSBjYW4gc2VhcmNoIGl0cyB0aXRsZSBmb3IgPGVtPk8mIzgyMTc7 R3I8L2VtPiBhbmQgaXQgd2lsbCBsb2NhdGUgdGhlIHRhZy4gSWYsIGhvd2V2ZXIsIHlvdSB3 YW50ZWQgdG8gZmluZCBhbGwgdGFncyB0aGF0IGhhdmUgPGVtPlBhdWwgTyYjODIxNztHcmFk eTwvZW0+IGFzIHRoZWlyIHBhcmVudCB0YWcgeW91JiM4MjE3O2QgaGF2ZSB0byB0eXBlIDxl bT5vZ3JhPC9lbT4gdG8gaGF2ZSBpdCBmaWx0ZXIgYnkgdGhpcyBwYXJhbWV0ZXI8L2xpPgo8 L3VsPgoKPGgzPlBlcmZvcm1pbmcgYWN0aW9ucyBvbiBmaWx0ZXJlZCB0YWdzPC9oMz4KCjxw PldoaWxlIHlvdSBhcmUgZmlsdGVyaW5nIHRoZSB0YWdzLCB5b3UgY2FuIHBlcmZvcm0gYSBz ZXQgb2YgYWN0aW9ucyBvbiBhbGwgdGhlIHZpc2libGUgdGFncy4gU2ltcGx5IGVudGVyIHNv bWUgc2VhcmNoIGNyaXRlcmlhIGFuZCwgd2hlbiB5b3UgYXJlIGhhcHB5IHdpdGggdGhlIHBy ZXNlbnRlZCBsaXN0IG9mIHRhZ3MsIHNlbGVjdCBvbmUgb2YgdGhlIGFjdGlvbnMgZnJvbSB0 aGUgPGVtPldpdGggZmlsdGVyZWQ8L2VtPiBkcm9wZG93bi4gIFlvdSBjYW4gbXVsdGktZGVs ZXRlLCBhc3NpZ24gYSBwYXJlbnQgdGFnLCBvciAoaWYgcGVybWl0dGVkKSBhc3NpZ24gYSBs aW5rZWQgY2F0ZWdvcnkuPC9wPgoKPHA+Q2hvb3NpbmcgdG8gPGVtPkFzc2lnbiBwYXJlbnQ8 L2VtPiBvciA8ZW0+TGluayB0byBjYXRlZ29yeTwvZW0+IHByZXNlbnRzIGEgZnVydGhlciBk cm9wZG93bi4gU2VsZWN0IHRoZSBwYXJlbnQgdGFnL2NhdGVnb3J5IHRvIHdoaWNoIHlvdSB3 aXNoIHRvIGFzc2lnbiB0aGUgZmlsdGVyZWQgdGFncy4gV2hlbiB5b3Ugc2VsZWN0IDxlbT5H bzwvZW0+IGFuZCBjb25maXJtIHlvdSBhcmUgc3VyZSwgdGhlIGFjdGlvbiB3aWxsIGJlIGFw cGxpZWQgdG8gYWxsIHNlbGVjdGVkIHRhZ3MuPC9wPgoKPHA+VGhpbmdzIHRvIG5vdGU6PC9w PgoKPHVsPgoJPGxpPmlmIHlvdSB0cnkgdG8gYXNzaWduIGEgcGFyZW50IHRvIGEgdGFnIHRo YXQgaXMgaXRzZWxmLCBpdCB3aWxsIGJlIHNhZmVseSBpZ25vcmVkPC9saT4KCTxsaT5pZiB0 aGUgPGVtPkF1dG9tYXRpY2FsbHkgc2hvdyByZXBvcnRzPC9lbT4gcHJlZmVyZW5jZSBpcyBv biwgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uIHdpbGwgYmUgcG9wcGVkIHVwIGltbWVkaWF0 ZWx5IHVwb24gY29tcGxldGlvbjwvbGk+Cgk8bGk+aWYgeW91IGxlYXZlIHRoZSBzZWFyY2gg Ym94IGVtcHR5LCBhbnkgbXVsdGktYWN0aW9uIHlvdSBjaG9vc2Ugd2lsbCBiZSBhcHBsaWVk IHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5BTEw8L3NwYW4+IHRhZ3M8L2xpPgoJPGxpPnlvdSBj YW4gdmlldyB0aGUgbW9zdCByZWNlbnQgcmVwb3J0IGF0IGFueSB0aW1lIGJ5IGNsaWNraW5n IHRoZSA8ZW0+RGlzcGxheSByZWNlbnQgcmVwb3J0PC9lbT4gbGluayBpbiB0aGUgPGVtPlRh ZyBzZWFyY2g8L2VtPiBib3gsIGJ1dCBvbmNlIHlvdSBoYXZlIG5hdmlnYXRlZCBhd2F5IGZy b20gdGhlIE1hbmFnZSBUYWdzIHBhbmVsLCBvciBwZXJmb3JtZWQgYW5vdGhlciBhY3Rpb24g c3VjaCBhcyBjcmVhdGluZyBhIHRhZywgdGhlIHJlcG9ydCBpcyByZWZyZXNoZWQvbG9zdDwv bGk+CjwvdWw+Cgo8aDIgaWQ9ImltcG9ydCI+SW1wb3J0aW5nIHRhZ3MgZW4tbWFzc2U8L2gy PgoKPHAgY2xhc3M9ImltcG9ydGFudCI+QmFjayB1cCB5b3VyIGRhdGFiYXNlIGZpcnN0ITwv cD4KCjxwPklmIHlvdSBoYXZlIHVzZWQgdHJ1X3RhZ3MgYW5kL29yIHJzc191bmxpbWl0ZWRf Y2F0ZWdvcmllcyB5b3UgY2FuIGltcG9ydCB0aGUgaW5mb3JtYXRpb24gZnJvbSBlaXRoZXIg c3lzdGVtIGFuZCBjcmVhdGUgc21kX3RhZ3MuIFlvdSBtYXkgYWxzbyBpbXBvcnQgdGFncyBm cm9tIFRleHRwYXR0ZXJuJiM4MjE3O3Mgb3duIGNhdGVnb3J5IHRyZWUgb3IgZnJvbSAoZGVs aW1pdGVkKSBjdXN0b20gZmllbGRzLiBWaWV3IHRoZSBJbXBvcnQgcGFuZWwgYW5kIHNldCB0 aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29uZmlndXJlIGhvdyB0aGUgdGFncyBhcmUgaW1w b3J0ZWQ6PC9wPgoKPGgzPlNvdXJjZSBvcHRpb25zPC9oMz4KCjx1bD4KCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+SW1wb3J0IGZyb208L3NwYW4+IDogQ2hvb3NlIGZyb20gd2hlcmUgeW91 IHdpc2ggdG8gaW1wb3J0LiBUbyBzZWUgdGhlIHBsdWdpbiBvcHRpb25zLCB0aGF0IHBhcnRp Y3VsYXIgcGx1Z2luIG5lZWRzIHRvIGJlIGluc3RhbGxlZCBhbmQgYWN0aXZhdGVkIGZvciBp dCB0byBhcHBlYXIuPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Q3VzdG9tIGZpZWxk PC9zcGFuPiA6IElmIHlvdSBoYXZlIGVsZWN0ZWQgdG8gaW1wb3J0IGZyb20gY3VzdG9tIGZp ZWxkLCBjaG9vc2Ugd2hpY2ggb25lIGNvbnRhaW5zIHlvdXIgdGFnIGxpc3QuIElmIHlvdSB3 YW50IHRvIGltcG9ydCBmcm9tIG1vcmUgdGhhbiBvbmUsIGltcG9ydCB0aGVtIG9uZSBhZnRl ciBhbm90aGVyLjwvbGk+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkN1c3RvbSBmaWVsZCBk ZWxpbWl0ZXI8L3NwYW4+IDogVGhlIGNoYXJhY3RlciBzZXF1ZW5jZSB0aGF0IGRlbGltaXRz IGVhY2ggdGFnIGluIHlvdXIgY3VzdG9tIGZpZWxkLiBEZWZhdWx0OiBjb21tYS48L2xpPgoJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BcnRpY2xlcyBmcm9tIHNlY3Rpb248L3NwYW4+IDog T25seSBpbXBvcnQgdGFncyBmcm9tIHRoZSBhcnRpY2xlcyBpbiB0aGUgc2VsZWN0ZWQgc2Vj dGlvbi4gSWYgbm90IGNob3NlbiwgaXQgdXNlcyBhbGwgYXJ0aWNsZXMgaW4geW91ciBzaXRl PC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+U3RhcnQgZnJvbSBwYXJlbnQgY2F0ZWdv cnk8L3NwYW4+IDogSWYgeW91IGFyZSBpbXBvcnRpbmcgY2F0ZWdvcnkgbmFtZXMgZnJvbSBy c3NfdW5saW1pdGVkX2NhdGVnb3JpZXMsIHlvdSBjYW4gY2hvb3NlIHRvIG9ubHkgaW1wb3J0 IHRoZW0gZnJvbSB0aGlzIHBhcmVudCBhbmQgYmVsb3c8L2xpPgoJPGxpPjxzcGFuIGNsYXNz PSJhdG5tIj5EZWxldGUgb3JpZ2luYWw8L3NwYW4+IDogRW1wdHkgdGhlIEtleXdvcmRzIGZp ZWxkICh0cnVfdGFncyksIGN1c3RvbSBmaWVsZCwgb3IgcmVtb3ZlIGFueSByc3NfdW5saW1p dGVkX2NhdGVnb3JpZXMgbGlua2VkIHRvIHRoZSBhcnRpY2xlcyB5b3UgYXJlIGltcG9ydGlu ZyBmcm9tLiBGb3Igc2FmZXR5LCB5b3Ugc2hvdWxkIGRvIHRoaXMgaW4gdHdvIHN0ZXBzOyBp bXBvcnQgdGhlIHRhZ3MgYW5kIGxlYXZlIHRoZSBvcmlnaW5hbHMgaW50YWN0LCB0aGVuIGlt cG9ydCBhZ2FpbiB3aXRoIDxlbT5EZWxldGUgb3JpZ2luYWxzPC9lbT4gc2V0IHRvICYjODIx Njt5ZXMmIzgyMTc7IG9uY2UgeW91IGFyZSBoYXBweSB3aXRoIHRoZSByZXN1bHRzLiBOb3Rl IHRoYXQgVGV4dHBhdHRlcm4gY2F0ZWdvcnkxIGFuZCBjYXRlZ29yeTIgYXNzaWdubWVudHMg YXJlIDxlbT5ub3Q8L2VtPiBkZWxldGVkLjwvbGk+CjwvdWw+Cgo8aDM+SW1wb3J0IG9wdGlv bnM8L2gzPgoKPHVsPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5MaW5rIHRvIGNhdGVnb3J5 PC9zcGFuPiA6IGlmIHlvdSBwZXJtaXQgdGFncyB0byBiZSBsaW5rZWQgdG8gY2F0ZWdvcnks IHRoaXMgZHJvcGRvd24gaXMgYXZhaWxhYmxlLiBBbGwgaW1wb3J0ZWQga2V5d29yZHMvY2F0 ZWdvcmllcyB3aWxsIGJlIGxpbmtlZCB0byB0aGlzIFR4cCBjYXRlZ29yeTwvbGk+Cgk8bGk+ PHNwYW4gY2xhc3M9ImF0bm0iPkZvcmNlIGNhdGVnb3J5IGxpbmsgaWYgdGFnIGFscmVhZHkg ZXhpc3RzPC9zcGFuPiA6IGlmIGNoZWNrZWQsIGFueSB0YWdzIHRoYXQgaGF2ZSBhbHJlYWR5 IGJlZW4gaW1wb3J0ZWQgd2lsbCBoYXZlIHRoZWlyIGNhdGVnb3J5IHJlLWFzc2lnbmVkIHRv IHRoZSBjaG9zZW4gY2F0ZWdvcnkuIElmIG5vdCBjaGVja2VkLCBhbnkgdGFnIHRoYXQgYWxy ZWFkeSBleGlzdHMgd2lsbCBoYXZlIGl0cyBjYXRlZ29yeSBsZWZ0IGludGFjdDwvbGk+Cgk8 bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkFzc2lnbiB0byBwYXJlbnQgdGFnPC9zcGFuPiA6IExp bmsgYWxsIGltcG9ydGVkIGtleXdvcmRzL2NhdGVnb3JpZXMgYmVuZWF0aCB0aGlzIHNtZF90 YWcuIElmIHlvdSBhcmUgbGlua2luZyB0YWdzIHRvIGNhdGVnb3JpZXMgdGhlbiB0aGUgYXZh aWxhYmxlIHBhcmVudCB0YWdzIHdpbGwgYmUgaW5mbHVlbmNlZCBieSB0aGUgc2V0dGluZyBv ZiB0aGUgY2F0ZWdvcnkgY2hvc2VuIGFib3ZlPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRu bSI+Rm9yY2UgcGFyZW50IGlmIHRhZyBhbHJlYWR5IGV4aXN0czwvc3Bhbj4gOiBpZiBjaGVj a2VkLCBhbnkgdGFncyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGltcG9ydGVkIHdpbGwgaGF2 ZSB0aGVpciBwYXJlbnQgcmUtYXNzaWduZWQgdG8gdGhlIGNob3NlbiBzbWRfdGFnLiBJZiBu b3QgY2hlY2tlZCwgYW55IHRhZyB0aGF0IGFscmVhZHkgZXhpc3RzIHdpbGwgaGF2ZSBpdHMg dGFnIGhpZXJhcmNoeSBsZWZ0IGludGFjdDwvbGk+CjwvdWw+Cgo8cD5PbmNlIHlvdSBoYXZl IGNob3NlbiB0aGUgcmVsZXZhbnQgb3B0aW9ucywgaGl0IDxlbT5HbzwvZW0+LiBUaGUgcGx1 Z2luIHdpbGwgZG8geW91ciBiaWRkaW5nIGFuZDo8L3A+Cgo8b2w+Cgk8bGk+Q29weSB0aGUg aW5mb3JtYXRpb24gZnJvbSB0aGUgS2V5d29yZHMgKHRydV90YWdzKSAvIENhdGVnb3JpZXMg KHJzc191YyksIFRleHRwYXR0ZXJuIGFydGljbGUgY2F0ZWdvcnksIG9yIGN1c3RvbSBmaWVs ZCBhbmQgY3JlYXRlIHNtZF90YWdzIGZvciBlYWNoIGl0ZW0uIElmIHRoZSB0YWcgYWxyZWFk eSBleGlzdHMgaXQgd2lsbCBiZSBpZ25vcmVkIHVubGVzcyB5b3Ugb3ZlcnJpZGUgaXQgd2l0 aCBvbmUgb2YgdGhlICYjODIxNjtmb3JjZSYjODIxNzsgb3B0aW9ucy48L2xpPgoJPGxpPkFz c2lnbiB0aGUgY3JlYXRlZCB0YWdzIHRvIHRoZSByZWxldmFudCBwYXJlbnQsIGVpdGhlciBm b3IgdGFncyB0aGF0IGRvIG5vdCBleGlzdCBvciBmb3IgYWxsIHRhZ3MgaWYgdGhlICYjODIx Njtmb3JjZSYjODIxNzsgb3B0aW9uIGlzIGNob3Nlbi48L2xpPgoJPGxpPkxpbmsgdGhlIGNy ZWF0ZWQgdGFncyB0byB0aGUgcmVsZXZhbnQgY2F0ZWdvcnksIGVpdGhlciBmb3IgdGFncyB0 aGF0IGRvIG5vdCBleGlzdCBvciBmb3IgYWxsIHRhZ3MgaWYgdGhlICYjODIxNjtmb3JjZSYj ODIxNzsgb3B0aW9uIGlzIGNob3Nlbi48L2xpPgoJPGxpPkNvcHkgdGhlIGFzc2lnbmVkIHRh Z3MgaW4gZWFjaCBhcnRpY2xlIGZyb20gdGhlIEtleXdvcmRzL0NhdGVnb3JpZXMgc28gdGhl IHNhbWUgdGFncyBhcmUgYXNzaWduZWQuPC9saT4KCTxsaT4ob3B0aW9uYWxseSkgRGVsZXRl IHRoZSBvcmlnaW5hbCBjdXN0b20gZmllbGQvS2V5d29yZHMvVW5saW1pdGVkIGNhdGVnb3Jp ZXMgKG5vdCBmcm9tIFRleHRwYXR0ZXJuIGNhdGVnb3J5MS8yKS48L2xpPgoJPGxpPlJlbWVt YmVyIHlvdXIgb3B0aW9ucyBzbyB5b3UgY2FuIHF1aWNrbHkgbWFrZSBhbHRlcmF0aW9ucyBh bmQgaW1wb3J0IHRhZ3MgaW4gYmF0Y2hlcyBpZiB5b3Ugd2lzaC48L2xpPgo8L29sPgoKPHA+ QXMgdGhlIHBsdWdpbiBnb2VzIHRocm91Z2ggeW91ciBhcnRpY2xlcyBpdCB3aWxsIHVwZGF0 ZSB0aGUgY291bnRzIGJlbG93IHRoZSBpbXBvcnQgb3B0aW9uczogdGhlIG51bWJlciBvZiBh cnRpY2xlcyBkb25lL291dCBvZiB0b3RhbCwgYW5kIHRoZSBudW1iZXIgb2YgdGFncyB0aGF0 IGhhdmUgYmVlbiBpbXBvcnRlZCBhbmQgbGlua2VkIHRvIHlvdXIgYXJ0aWNsZXMuIE9uY2Ug aXQgaGFzIGNvbXBsZXRlZCB0aGUgdGFzaywgYSByZXBvcnQgaXMgYXZhaWxhYmxlIGRldGFp bGluZyB0aGUgYWN0aW9ucyB0aGUgcGx1Z2luIHRvb2suIEl0IHdpbGwgZWl0aGVyIGJlIGRp c3BsYXllZCBhdXRvbWF0aWNhbGx5IChkZXBlbmRpbmcgb24geW91ciBwcmVmIHNldHRpbmcp IG9yIHlvdSBjYW4gdmlldyBpdCBieSBjbGlja2luZyB0aGUgPGVtPkRpc3BsYXkgcmVjZW50 IHJlcG9ydDwvZW0+IGxpbmsuPC9wPgoKPGgyPkVkaXRpbmcgYXJ0aWNsZXMgLyBpbWFnZXMg LyBmaWxlcyAvIGxpbmtzPC9oMj4KCjxwPk9uIGVhY2ggb2YgdGhlIGZvdXIgcGFnZXMgdGhh dCBoYXZlIGNoZWNrYm94ZXMgc2V0IGluIHRoZSBzbWRfdGFncyBwcmVmZXJlbmNlcywgeW91 ciBjaG9zZW4gaW5wdXQgbWVjaGFuaXNtIHdpbGwgYXBwZWFyIGJlbmVhdGggdGhlIGNhdGVn b3J5IGFzc2lnbm1lbnQuIFRoaXMgYWxsb3dzIHlvdSB0byB0YWcgYSBwYXJ0aWN1bGFyIGFy dGljbGUsIGltYWdlLCBmaWxlIG9yIGxpbmsgd2l0aCBhbnkgbnVtYmVyIG9mIGl0ZW1zLiBP bmNlIHlvdSBoYXZlIHNlbGVjdGVkIHlvdXIgdGFncywgdGhlIHVzdWFsIFNhdmUgYnV0dG9u IG9uIHRoZSBzY3JlZW4gd2lsbCBjb21taXQgdGhlIGNoYW5nZXMuIE5vdGUgdGhhdCBpZiB5 b3UgaGF2ZSBjaG9zZW4gdG8gbGluayB0YWdzIHdpdGggY2F0ZWdvcmllcyBhbmQgeW91IGhh dmUgbm90IGNob3NlbiBhbnkgY2F0ZWdvcnkoaWVzKSAmIzgyMTI7IG9yIGhhdmUgY2hvc2Vu IGNhdGVnb3JpZXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0YWdzICYjODIxMjsgIHlvdSB3 aWxsIHNlZSBubyB0YWdzIGluIHRoZSBsaXN0IG1vZGVzISBGdXJ0aGVyLCBpbiB0aGUgVGV4 dGFyZWEgbW9kZSB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBzYXZlIGFueSB0YWdzIHVubGVz cyB5b3UgY2hvb3NlIGEgdmFsaWQgY2F0ZWdvcnkgZmlyc3QuIFNlZSBiZWxvdyBmb3IgbW9y ZS48L3A+Cgo8cD5UaGUgPGNvZGU+W0VkaXRdPC9jb2RlPiBsaW5rIHRha2VzIHlvdSB0byB0 aGUgVGFnIE1hbmFnZW1lbnQgcGFnZSB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRlIG5ldyB0 YWdzLiBJZiB1c2luZyBhIHNlbGVjdCBsaXN0LCB0d28gb3RoZXIgYnV0dG9ucyBhcmUgYXZh aWxhYmxlOiA8Y29kZT5bQ2xyXTwvY29kZT4gZGVzZWxlY3RzIGFsbCB0YWdzIGFuZCA8Y29k ZT5bVG9nXTwvY29kZT4gdG9nZ2xlcyBhbGwgdGFncyBzbyBpZiB0aGV5IHdlcmUgJiM4MjE2 O29uJiM4MjE3OyB0aGV5IGJlY29tZSAmIzgyMTY7b2ZmJiM4MjE3OywgYW5kIHZpY2UgdmVy c2EuPC9wPgoKPHA+Tm90ZXMgb24gdGhlIFRleHQgYXJlYSBlbnRyeSBtZWNoYW5pc21zOjwv cD4KCjx1bD4KCTxsaT5UYWdzIGFyZSBjYXNlIHNlbnNpdGl2ZS4gQXV0by1jb21wbGV0ZSBp cyBzdHJvbmdseSByZWNvbW1lbmRlZDwvbGk+Cgk8bGk+TmV3IHRhZ3MgY2FuIDxlbT5vbmx5 PC9lbT4gYmUgYWRkZWQgaWYgdGhlIDxjb2RlPlRleHQgYXJlYSs8L2NvZGU+IGlucHV0IG1l dGhvZCBpcyBjaG9zZW4gYW5kIFF1aWNrIHRhZyBpcyA8c3Ryb25nPm5vdDwvc3Ryb25nPiBz dHJpY3Q8L2xpPgoJPGxpPk5ldyB0YWdzIGFyZSBub3JtYWxseSBhc3NpZ25lZCBhdCB0aGUg cm9vdCBsZXZlbDsgaWYgeW91IHdpc2ggdG8gc3ViLXRhZyB0aGVtIGF0IHRoaXMgcG9pbnQs IHdyaXRlIHRoZSB0YWcgbGlrZSB0aGlzOiA8Y29kZT5wYXJlbnRfdGFnLS0mZ3Q7bmV3X3Rh ZzwvY29kZT4uIEFueXRoaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBoeXBoZW4taHlwaGVuLWFy cm93IGlzIGZpcnN0IGNoZWNrZWQgdG8gc2VlIGlmIGl0IGV4aXN0cyBhcyBhIHRhZyBhbmQs IGlmIGl0IGRvZXMsIHRoZSBuZXdfdGFnIGlzIG1hZGUgYSBzdWItdGFnIG9mIGl0LiBJZiB0 aGUgcGFyZW50X3RhZyBkb2VzbiYjODIxNzt0IGV4aXN0LCBuZXdfdGFnIGlzIGFzc2lnbmVk IHRvIHJvb3Q8L2xpPgoJPGxpPk5ldyB0YWdzIGJlY29tZSBUYWcgVGl0bGVzLiBDb3JyZXNw b25kaW5nIHRhZyBuYW1lcyBhcmUgc3ViamVjdCB0byB0aGUgdXN1YWwgbG93ZXIgY2FzZS9k dW1iaW5nIGRvd248L2xpPgoJPGxpPklmIDxjb2RlPkxpbmsgdGFncyB0byBjYXRlZ29yaWVz PC9jb2RlPiBpcyBzZXQsIG9ubHkgdmFsaWQgdGFncyBhc3NpZ25lZCB0byB0aGUgY2hvc2Vu IGNhdGVnb3JpZXMgd2lsbCBiZSBzYXZlZDwvbGk+Cgk8bGk+SWYgeW91IGFsdGVyIGNhdGVn b3J5IHlvdXIgdGFnIGxpc3QgaXMgcmVidWlsdCB0byBvbmx5IHNob3cgLyBhbGxvdyB0aGUg b25lcyBpbiB0aGUgc2VsZWN0ZWQgY2F0ZWdvcnkoaWVzKS4gSWYgeW91IGhhdmUgYWxyZWFk eSBzZWxlY3RlZCBzb21lIHRhZ3MsIHRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIG9uZXMgeW91 IGhhdmUgc2VsZWN0ZWQgc2luY2UgbGFzdCBzYXZlIGJlaW5nIHJlbW92ZWQvdW5oaWdobGln aHRlZC4gU28gY2hvb3NlIHlvdXIgY2F0ZWdvcmllcyBmaXJzdCBhbmQgdGhlbiB0YWcgYXdh eS48L2xpPgo8L3VsPgoKPGgyIGNsYXNzPSJ0YWciPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRf dGFnX2xpc3QmZ3Q7PC9jb2RlPjwvaDI+Cgo8cD5EaXNwbGF5IGEgbGlzdCBvZiB0YWdzIG1h dGNoaW5nIGNlcnRhaW4gY3JpdGVyaWEsIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCAoPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4sIGFydGljbGUsIGZpbGUsIGxpbmssIG9yIGlt YWdlKSBvciBhIGZpeGVkIGNvbnRleHQgc3VwcGxpZWQgYXMgYXR0cmlidXRlcy4gVXNlIHRo ZSBmb2xsb3dpbmcgYXR0cmlidXRlcyB0byBjb25maWd1cmUgdGhlIHRhZzo8L3A+Cgo8ZGw+ Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnR5cGU8L3NwYW4+PC9kdD4KCTxkZD5XaGVyZSB0 byBsb29rIGZvciB0aGUgbGlzdCBvZiB0YWdzLiBJZiBvbWl0dGVkIHRoZSBiZXN0IG1hdGNo IGlzIHVzZWQgYmFzZWQgb24gd2hlcmUgdGhlIHRhZyBpcyB1c2VkLiBGb3IgZXhhbXBsZSwg aWYgaXQgaXMgaW5zaWRlIHRoZSA8Y29kZT5wbGFpbmxpbmtzPC9jb2RlPiBmb3JtLCB0aGUg dHlwZSB3b3VsZCBkZWZhdWx0IHRvIDxjb2RlPmxpbms8L2NvZGU+LiBJZiBhIGJlc3QgbWF0 Y2ggY2Fubm90IGJlIGZvdW5kLCBpdCB1c2VzIDxjb2RlPmFydGljbGU8L2NvZGU+LiBPcHRp b25zIGFyZToKCTxkbD4KCQk8ZGQ+PGNvZGU+YXJ0aWNsZTwvY29kZT48L2RkPgoJCTxkZD48 Y29kZT5pbWFnZTwvY29kZT48L2RkPgoJCTxkZD48Y29kZT5maWxlPC9jb2RlPjwvZGQ+CgkJ PGRkPjxjb2RlPmxpbms8L2NvZGU+PC9kZD4KCTwvZGw+PC9kZD4KCTxkZD5EZWZhdWx0OiBi ZXN0IG1hdGNoLjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmZsYXZvdXI8L3NwYW4+ PC9kdD4KCTxkZD5UaGUgdHlwZSBvZiB0YWcgbGlzdCB0byBkaXNwbGF5LiBDaG9vc2UgZnJv bToKCTxkbD4KCQk8ZGQ+PGNvZGU+bGlzdDwvY29kZT4gOiBhIHN0YW5kYXJkIGxpc3QgaW4g cGFyZW50LSZndDtjaGlsZCAodHJlZSkgb3JkZXI8L2RkPgoJCTxkZD48Y29kZT5jbG91ZDwv Y29kZT4gOiBhIHdlaWdodGVkIHRhZyBjbG91ZDwvZGQ+CgkJPGRkPjxjb2RlPmNydW1iPC9j b2RlPiA6IGEgbGlzdCBvZiB0YWdzIGluIHRoZSBvcmRlciB0aGV5IGFyZSBwcmVzZW50ZWQg aW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9kZD4KCQk8ZGQ+PGNvZGU+ aGVhZDwvY29kZT4gOiB0aGUgZmlyc3QgdGFnIGxpc3RlZCBpbiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj48L2RkPgoJCTxkZD48Y29kZT50YWlsPC9jb2RlPiA6IHRoZSBs YXN0IHRhZyBsaXN0ZWQgaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9k ZD4KCTwvZGw+PC9kZD4KCTxkZD5XaGVuIHVzaW5nIDxjb2RlPmNsb3VkPC9jb2RlPiwgc29t ZSB3ZWlnaHRpbmcgaW5mb3JtYXRpb24gaXMgY2FsY3VsYXRlZCBmb3IgZWFjaCB0YWcgYXQg dGhlIGV4cGVuc2Ugb2YgYSBsaXR0bGUgZXh0cmEgcHJvY2Vzc2luZyBvdmVyaGVhZC4gWW91 IGNhbiBhbHNvLCBvcHRpb25hbGx5LCBzcGVjaWZ5IHRoZSBzY2FsZSBieSBhZGRpbmcgPGNv ZGU+Om1pbjptYXg8L2NvZGU+LiBGb3IgZXhhbXBsZTogPGNvZGU+Zmxhdm91cj0mcXVvdDtj bG91ZDo3NTozMDAmcXVvdDs8L2NvZGU+IHdvdWxkIG1ha2UgdGhlIG1pbmltdW0gd2VpZ2h0 IDc1IGFuZCB0aGUgbWF4aW11bSAzMDAuIERlZmF1bHQgaXMgPGNvZGU+OjEwMDoxNTA8L2Nv ZGU+LjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNvZGU+bGlzdDwvY29kZT48L2RkPgoJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj48L2R0PgoJPGRkPkxpc3Qgb2YgdGFnIElEcyB0 byBzaG93LiBJZiBvbWl0dGVkIGFuZCB5b3Ugd2VyZSB2aWV3aW5nIGFuIGFydGljbGUgaXQg d2lsbCBkZWZhdWx0IHRvIHRoZSB0YWdzIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZS48L2Rk PgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1lPC9zcGFuPjwvZHQ+Cgk8ZGQ+Rml4ZWQg bGlzdCBvZiB0YWcgbmFtZXMgdG8gc2hvdy4gSWYgdXNlZCwgdGhleSB0cnVtcCB0aGUgPGNv ZGU+aWQ8L2NvZGU+LjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmV4Y2x1ZGU8L3Nw YW4+PC9kdD4KCTxkZD5MaXN0IG9mIHRhZyBuYW1lcyB5b3Ugd2lzaCB0byBvbWl0IGZyb20g dGhlIGxpc3Q8L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5wYXJlbnQ8L3NwYW4+PC9k dD4KCTxkZD5TdGFydCB0aGUgbGlzdCBmcm9tIHRoaXMgcGFyZW50IHRhZy48L2RkPgoJPGRk PkRlZmF1bHQ6IHVuc2V0IChpLmUuIHRoZSAmIzgyMTY7cm9vdCYjODIxNzsgbm9kZSBvZiB0 aGlzIHBhcnRpY3VsYXIgdHlwZSk8L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zdWJs ZXZlbDwvc3Bhbj48L2R0PgoJPGRkPk9ubHkgc2hvdyB0YWdzIG1hdGNoaW5nIHRoaXMgbnVt YmVyIGxldmVsLiBZb3UgY2FuIGVpdGhlciBzcGVjaWZ5OgoJPGRsPgoJCTxkZD48Y29kZT5h bGw8L2NvZGU+IHdoaWNoIHNob3dzIGFsbCB0YWdzIGZyb20gYWxsIGxldmVsczwvZGQ+CgkJ PGRkPjxlbT5hbnkgbnVtYmVyPC9lbT4gdG8gbWF0Y2ggb25seSB0YWdzIGZyb20gdGhhdCBs ZXZlbC48L2RkPgoJPC9kbD48L2RkPgoJPGRkPllvdSBtYXkgYWxzbyBwcmVmaXggdGhlIG51 bWJlciB3aXRoIGEgY29tcGFyaXNvbiBvcGVyYXRvciAoZS5nLiA8Y29kZT5zdWJsZXZlbD0m cXVvdDsmZ3Q7PTEmcXVvdDs8L2NvZGU+KSB3aGljaCB3b3VsZCBvbmx5IHNob3cgdGFncyBm cm9tIGxldmVsIDEgYW5kIGl0cyBkZXNjZW5kZW50cy4gVmFsaWQgb3BlcmF0b3JzIGFyZToK CTxkbD4KCQk8ZGQ+PGNvZGU+Jmd0OzwvY29kZT48L2RkPgoJCTxkZD48Y29kZT4mbHQ7PC9j b2RlPjwvZGQ+CgkJPGRkPjxjb2RlPiZndDs9PC9jb2RlPjwvZGQ+CgkJPGRkPjxjb2RlPiZs dDs9PC9jb2RlPjwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8ZGQ+SWYgYW55dGhpbmcgZWxzZSBpcyB1 c2VkLCBlcXVhbGl0eSBpcyBhc3N1bWVkLjwvZGQ+Cgk8ZGQ+Tm90ZSB0aGF0IGlmIHlvdSBz cGVjaWZ5IGEgcGFyZW50LCBhbmQgdGhhdCBwYXJlbnQgaXMgaW4gdGhlIGN1cnJlbnQgdGFn IGxpc3QsIGl0cyBsZXZlbCBpcyAwIGFuZCB0aGUgY2hpbGRyZW4gYmVuZWF0aCBpdCBzdGFy dCBhdCBsZXZlbCAxLiBJZiwgaG93ZXZlciwgeW91ciBjaG9zZW4gcGFyZW50IGlzIG5vdCBp biB0aGUgY3VycmVudCB0YWcgbGlzdCwgPGVtPnRoZSBjaGlsZHJlbiB3aWxsIGJlIGF0IGxl dmVsIDAgYW5kIGFueSBzdWItY2hpbGRyZW4gd2lsbCBzdGFydCBmcm9tIGxldmVsIDE8L2Vt Pi4gVG8gaGVscCBtYW5hZ2UgdGhpcywgaWYgeW91IGxlYXZlIDxjb2RlPnN1YmxldmVsPC9j b2RlPiBlbXB0eSB0aGUgcGx1Z2luIGZpZ3VyZXMgb3V0IHRoZSBhcHByb3ByaWF0ZSBsZXZl bCBhdXRvbWF0aWNhbGx5IGFuZCBvbmx5IHNob3dzIHRhZ3MgYmVsb3cgdGhlIGdpdmVuIHBh cmVudC48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zaG93YWxsPC9zcGFuPjwvZHQ+ Cgk8ZGQ+V2hldGhlciB0byBzaG93IGVtcHR5IHRhZ3Mgb3Igbm90LiBDaG9vc2UgZnJvbToK CTxkbD4KCQk8ZGQ+MDogb25seSBzaG93IHRhZ3MgdGhhdCBhcmUgaW4gdXNlPC9kZD4KCQk8 ZGQ+MTogc2hvdyBhbGwgdGFncywgZXZlbiBlbXB0eSBvbmVzLiBVc2VmdWwgZm9yIGdlbmVy YXRpbmcgaGllcmFyY2hpY2FsIHRhZyB0cmVlczwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8ZGQ+RGVm YXVsdDogMDwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm9mZnNldDwvc3Bhbj48L2R0 PgoJPGRkPlNraXAgb3ZlciB0aGlzIG51bWJlciBvZiB0YWdzIGJlZm9yZSBzdGFydGluZyB0 byBkaXNwbGF5IHRoZW08L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5saW1pdDwvc3Bh bj48L2R0PgoJPGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiB0YWdzIHRvIHNob3cuPC9kZD4K CTxkZD5EZWZhdWx0OiA5OTk5OSAoaS5lLiBlZmZlY3RpdmVseSB1bmxpbWl0ZWQpPC9kZD4K CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Zm9ybTwvc3Bhbj48L2R0PgoJPGRkPlBhc3MgY29u dHJvbCB0byB0aGlzIGZvcm0gdG8gZGlzcGxheSB0aGUgdGFnIGxpc3QuIFlvdSBtYXkgYWxz byB1c2UgdGhlIHRhZyBhcyBhIGNvbnRhaW5lci4gV2l0aG91dCBmb3JtIG9yIGNvbnRhaW5l ciwgdGhlIHRhZyBuYW1lIGFuZCBpdHMgY291bnQgd2lsbCBiZSBvdXRwdXQuPC9kZD4KCTxk dD48c3BhbiBjbGFzcz0iYXRubSI+aW5kZW50PC9zcGFuPjwvZHQ+Cgk8ZGQ+Q2hhcmFjdGVy IHNlcXVlbmNlIHRvIHVzZSB0byBpbmRpY2F0ZSB0aGF0IGEgdGFnIGlzIGEgc3ViLXRhZyBv ZiBhIHBhcmVudC48L2RkPgoJPGRkPkRlZmF1bHQ6IHR3byBub24tYnJlYWtpbmcgc3BhY2Vz PC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+c2VjdGlvbl9saW5rPC9zcGFuPjwvZHQ+ Cgk8ZGQ+SWYgeW91IHdhbnQgdGhlIHRhZ3MgdG8gYmUgY2xpY2thYmxlIHNvIHRoZXkgbGVh ZCB0byBhbm90aGVyIHBhZ2Ugb2YgdGFnIGRldGFpbHMsIHRoaXMgY2FuIGJlIHVzZWQgdG8g b3ZlcnJpZGUgdGhlICYjODIxNjtsYW5kaW5nIHBhZ2UmIzgyMTc7IHRoZXkgd2lsbCBhcHBl YXIgb24uPC9kZD4KCTxkZD5EZWZhdWx0OiB1bnNldCAoaXQgdXNlcyB0aGUgdmFsdWUgb2Yg dGhlIDxjb2RlPkRlZmF1bHQgc2VjdGlvbiBmb3IgdGFnczwvY29kZT4gcHJlZmVyZW5jZSk8 L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zb3J0PC9zcGFuPjwvZHQ+Cgk8ZGQ+T3Jk ZXIgdGhlIHJlc3VsdHMgYnkgdGhpcyBmaWVsZCwgZS5nLiA8Y29kZT5zb3J0PSZxdW90O25h bWUgYXNjJnF1b3Q7PC9jb2RlPi48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zaHVm ZmxlPC9zcGFuPjwvZHQ+Cgk8ZGQ+UmFuZG9tbHkgc29ydCB0aGUgdGFncy48L2RkPgoJPGR0 PjxzcGFuIGNsYXNzPSJhdG5tIj5sYWJlbDwvc3Bhbj48L2R0PgoJPGRkPkxhYmVsIHRoZSB0 b3Agb2YgdGhlIGxpc3Qgd2l0aCB0aGlzIGhlYWRpbmcuPC9kZD4KCTxkdD48c3BhbiBjbGFz cz0iYXRubSI+bGFiZWx0YWc8L3NwYW4+PC9kdD4KCTxkZD5XcmFwIHRoZSBsYWJlbCB3aXRo IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyAoZS5nLiA8Y29kZT5s YWJlbHRhZz0mcXVvdDtkaXYmcXVvdDs8L2NvZGU+KS48L2RkPgoJPGR0PjxzcGFuIGNsYXNz PSJhdG5tIj53cmFwdGFnPC9zcGFuPjwvZHQ+Cgk8ZGQ+V3JhcCB0aGUgdGFnIGxpc3Qgd2l0 aCB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcuPC9kZD4KCTxkZD5E ZWZhdWx0OiA8Y29kZT51bDwvY29kZT48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5j bGFzczwvc3Bhbj48L2R0PgoJPGRkPkFwcGx5IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNT Uzwvc3Bhbj4gY2xhc3MgdG8gdGhlIHRhZyBsaXN0LjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNv ZGU+c21kX3RhZ19saXN0PC9jb2RlPjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmJy ZWFrPC9zcGFuPjwvZHQ+Cgk8ZGQ+V3JhcCBlYWNoIHRhZyB3aXRoIHRoaXMgPHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZy48L2RkPgoJPGRkPkRlZmF1bHQ6IDxjb2RlPmxp PC9jb2RlPjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFrY2xhc3M8L3NwYW4+ PC9kdD4KCTxkZD5BcHBseSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNs YXNzIHRvIGVhY2ggdGFnLjwvZGQ+CjwvZGw+Cgo8aDIgY2xhc3M9InRhZyI+VGFnOiA8Y29k ZT4mbHQ7dHhwOnNtZF90YWdfbmFtZSZndDs8L2NvZGU+PC9oMj4KCjxwPkRpc3BsYXkgdGhl IG5hbWUgb2YgdGhlIGN1cnJlbnQgdGFnLiBVc3VzYWxseSB1c2VkIGluc2lkZSBhbiBzbWRf dGFnX2xpc3QgY29udGFpbmVyLiBDYW4gYmUgYSBjb250YWluZXIgdG8gYWRkIGV4dHJhIGZv cm1hdHRpbmcgYXJvdW5kIHRoZSBuYW1lIGlmIHlvdSB3aXNoLiBVc2UgdGhlIGZvbGxvd2lu ZyBhdHRyaWJ1dGVzIHRvIGN1c3RvbWlzZSB0aGUgdGFnOjwvcD4KCjxkbD4KCTxkdD48c3Bh biBjbGFzcz0iYXRubSI+dGl0bGU8L3NwYW4+PC9kdD4KCTxkZD5XaGV0aGVyIHRvIHNob3cg dGhlIHRhZyBuYW1lIG9yIGl0cyB0aXRsZS4gQ2hvb3NlIGZyb206Cgk8ZGw+CgkJPGRkPjA6 IG5hbWU8L2RkPgoJCTxkZD4xOiB0aXRsZTwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8ZGQ+RGVmYXVs dDogMTwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmxpbms8L3NwYW4+PC9kdD4KCTxk ZD5XaGV0aGVyIHRvIG1ha2UgdGhlIHRhZyBjbGlja2FibGUgdG8gdGFrZSB2aXNpdG9ycyB0 byBhIHRhZyBwYWdlIGFib3V0IHRoYXQgcGFydGljdWxhciB0YWcuIENob29zZSBmcm9tOgoJ PGRsPgoJCTxkZD4wOiBub3QgY2xpY2thYmxlPC9kZD4KCQk8ZGQ+MTogY2xpY2thYmxlPC9k ZD4KCTwvZGw+PC9kZD4KCTxkZD5EZWZhdWx0OiAwPC9kZD4KCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+c2VjdGlvbjwvc3Bhbj48L2R0PgoJPGRkPlRoZSBzZWN0aW9uIG5hbWUgdG8gbGlu ayB0by48L2RkPgoJPGRkPkRlZmF1bHQ6IHRoZSBmaXJzdCBpdGVtIGluIHRoZSA8Y29kZT5U cmlnZ2VyKHMpIGZvciB0YWcgbGlzdHM8L2NvZGU+IHByZWZlcmVuY2U8L2RkPgoJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5jbGVhbnVybHM8L3NwYW4+PC9kdD4KCTxkZD5XaGV0aGVyIHRv IGdlbmVyYXRlIGNsZWFuIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHN5bnRheCBm b3IgdHJpZ2dlci90YWd0eXBlL3RhZyBsaW5rcy4gQ2hvb3NlIGZyb206Cgk8ZGw+CgkJPGRk PjA6IG1lc3N5IHRhZyBtb2RlICh1c2UgdGhpcyBpZiB5b3UmIzgyMTc7cmUgaGF2aW5nIHRy b3VibGUgd2l0aCBjbGVhbiBtb2RlKTwvZGQ+CgkJPGRkPjE6IGNsZWFuIG1vZGU8L2RkPgoJ PC9kbD48L2RkPgoJPGRkPkRlZmF1bHQ6IDE8L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5t Ij5wYXJlbnQ8L3NwYW4+PC9kdD4KCTxkZD5Ob3QgdmVyeSB1c2VmdWwgdG8gZGlzcGxheSwg YnV0IGNhbiBiZSB1c2VmdWwgdG8gb2ZmZXIgdHJlZS1icm93c2luZyBvZiB0YWdzLiBDaG9v c2UgZnJvbToKCTxkbD4KCQk8ZGQ+MDogZG9uJiM4MjE3O3QgdXNlIHBhcmVudCB0YWcgbmFt ZTwvZGQ+CgkJPGRkPjE6IHVzZSBwYXJlbnQgdGFnIG5hbWU8L2RkPgoJPC9kbD48L2RkPgoJ PGRkPkRlZmF1bHQ6IDA8L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5wYXJlbnRsYWJl bDwvc3Bhbj48L2R0PgoJPGRkPlRoZSBsYWJlbCB0byB1c2UgZm9yIGFueSBwYXJlbnQgbGlu a3MuPC9kZD4KCTxkZD5EZWZhdWx0OiAmIzgyMTY7VXAgYSBsZXZlbCYjODIxNzs8L2RkPgoJ PGR0PjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFuPjwvZHQ+Cgk8ZGQ+V3JhcCB0 aGUgdGFnIHdpdGggdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnLjwv ZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPjwvZHQ+Cgk8ZGQ+QXBw bHkgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byB0aGUgd3Jh cHRhZy48L2RkPgoJPGRkPkRlZmF1bHQ6IDxjb2RlPnNtZF90YWdfbmFtZTwvY29kZT48L2Rk PgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5zdHlsZTwvc3Bhbj48L2R0PgoJPGRkPkFwcGx5 IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gaW5saW5lIHN0eWxlIGRlZmlu aXRpb24gdG8gdGhlIHRhZy48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5wYWRfc3Ry PC9zcGFuPjwvZHQ+Cgk8ZGQ+UHV0IHRoaXMgc3RyaW5nIGFkamFjZW50IHRvIHRoZSBsYWJl bCB0byBpbmRpY2F0ZSBpdHMgbGV2ZWwgaW4gdGhlIGhpZXJhcmNoeS48L2RkPgoJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5wYWRfcG9zPC9zcGFuPjwvZHQ+Cgk8ZGQ+V2hlcmUgdG8gcHV0 IHRoZSBwYWRkaW5nLiBDaG9vc2UgZnJvbToKCTxkbD4KCQk8ZGQ+PGNvZGU+bGVmdDwvY29k ZT48L2RkPgoJCTxkZD48Y29kZT5yaWdodDwvY29kZT48L2RkPgoJCTxkZD48Y29kZT5ib3Ro PC9jb2RlPjwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8ZGQ+SWYgdXNpbmcgPGNvZGU+bGluazwvY29k ZT4geW91IG1heSBhZGQgPGNvZGU+OmluPC9jb2RlPiB0byB0aGUgcGFkX3BvcyB2YWx1ZSB0 byBpbmRpY2F0ZSBpZiB5b3Ugd2FudCB0aGUgc3RyaW5nIHRvIGJlIGluY2x1ZGVkIGluc2lk ZSB0aGUgYW5jaG9yIChieSBkZWZhdWx0IGl0IHdpbGwgYmUgb3V0c2lkZSkuPC9kZD4KCTxk ZD5EZWZhdWx0OiA8Y29kZT5sZWZ0PC9jb2RlPjwvZGQ+CjwvZGw+Cgo8aDIgY2xhc3M9InRh ZyI+VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF90YWdfY291bnQmZ3Q7PC9jb2RlPjwvaDI+Cgo8 cD5EaXNwbGF5IHRoZSBudW1iZXIgb2YgYXJ0aWNsZXMsIGZpbGVzLCBpbWFnZXMgb3IgbGlu a3MgdGhhdCB1c2UgdGhlIGN1cnJlbnQgdGFnLiBVc2UgdGhlIGZvbGxvd2luZyBhdHRyaWJ1 dGVzIHRvIGN1c3RvbWlzZSB0aGUgdGFnOjwvcD4KCjxkbD4KCTxkdD48c3BhbiBjbGFzcz0i YXRubSI+c2hvd2VtcHR5PC9zcGFuPjwvZHQ+Cgk8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIHRv IGRpc3BsYXkgY291bnRzIHRoYXQgaGF2ZSB6ZXJvIGl0ZW1zLgoJPGRsPgoJCTxkZD4wOiBz a2lwIHplcm8gdmFsdWVzPC9kZD4KCQk8ZGQ+MTogc2hvdyBhbGwgdmFsdWVzLCBldmVuIGlm IHplcm88L2RkPgoJPC9kbD48L2RkPgoJPGRkPkRlZmF1bHQ6IDE8L2RkPgoJPGR0PjxzcGFu IGNsYXNzPSJhdG5tIj53cmFwdGFnPC9zcGFuPjwvZHQ+Cgk8ZGQ+V3JhcCB0aGUgY291bnQg d2l0aCB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcuPC9kZD4KCTxk dD48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8L3NwYW4+PC9kdD4KCTxkZD5BcHBseSB0aGlz IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNsYXNzIHRvIHRoZSBjb3VudC48L2Rk PgoJPGRkPkRlZmF1bHQ6IDxjb2RlPnNtZF90YWdfY291bnQ8L2NvZGU+PC9kZD4KCTxkdD48 c3BhbiBjbGFzcz0iYXRubSI+c3R5bGU8L3NwYW4+PC9kdD4KCTxkZD5BcHBseSB0aGlzIDxz cGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGlubGluZSBzdHlsZSBkZWZpbml0aW9uIHRv IHRoZSBjb3VudC48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj53cmFwY291bnQ8L3Nw YW4+PC9kdD4KCTxkZD5DaGFyYWN0ZXJzIHRvIHdyYXAgYXJvdW5kIHRoZSBjb3VudCBpdHNl bGYuIFNwZWNpZnkgdXAgdG8gdHdvIGl0ZW1zLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi4gSWYg eW91IHVzZSBqdXN0IG9uZSBpdGVtIGl0IHdpbGwgYXBwZWFyIG9uIGJvdGggc2lkZXMgb2Yg dGhlIGNvdW50LjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNvZGU+ICg6KTwvY29kZT4gKHdpdGgg YSBzcGFjZSBhdCB0aGUgc3RhcnQpPC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+cGFy YW1kZWxpbTwvc3Bhbj48L2R0PgoJPGRkPklmIHlvdSBkb24mIzgyMTc7dCBsaWtlIHRoZSBk ZWZhdWx0IHNlcGFyYXRvciBmb3IgdGhlIDxjb2RlPndyYXBjb3VudDwvY29kZT4gYXR0cmli dXRlLCBjaGFuZ2UgaXQuPC9kZD4KCTxkZD5EZWZhdWx0OiA8Y29kZT46PC9jb2RlPiAoY29s b24pPC9kZD4KPC9kbD4KCjxwPllvdSBtYXkgYWxzbyB1c2VzIHRoaXMgdGFnIHRvIHJldHVy biB0aGUgPGVtPnRvdGFsPC9lbT4gbnVtYmVyIG9mIHBpZWNlcyBvZiBjb250ZW50IHRoYXQg bWF0Y2ggYWZ0ZXIgdXNpbmcgc21kX3JlbGF0ZWRfdGFncy4gQW55IHRpbWUgaW1tZWRpYXRl bHkgYWZ0ZXIgZW5jb3VudGVyaW5nIDxjb2RlPiZsdDt0eHA6c21kX3JlbGF0ZWRfdGFncyZn dDs8L2NvZGU+LCB5b3UgY2FuIHVzZSB0aGlzIHRhZyB0byBmZXRjaCB0aGUgdG90YWwgbnVt YmVyIG9mIGFydGljbGVzLCBpbWFnZXMsIGZpbGVzIG9yIGxpbmtzIHRoYXQgbWF0Y2hlZCB0 aGUgZ2l2ZW4gdGFnKHMpLiBSZXNwZWN0cyBhbmQvb3IgbWF0Y2hlcy48L3A+Cgo8aDM+RXhh bXBsZTogZGlzcGxheSB0YWdzL2NvdW50cyBmcm9tIHRoZSBjdXJyZW50IGFydGljbGU8L2gz PgoKPHA+SGVyZSYjODIxNztzIGFuIGV4YW1wbGUsIHVzaW5nIHRoZSBsYXN0IHRocmVlIHRh Z3MuIEluIHlvdXIgZGVmYXVsdCBhcnRpY2xlIGZvcm0sIGFkZCB0aGlzIHRvIHNob3cgYSBs aXN0IG9mIGNsaWNrYWJsZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBhcnRp Y2xlOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZT5GaWxlZCBpbjogJmx0O3R4cDpz bWRfdGFnX2xpc3Qgd3JhcHRhZz0mcXVvdDsmcXVvdDsgYnJlYWs9JnF1b3Q7IHwgJnF1b3Q7 CiAgICAgc2h1ZmZsZT0mcXVvdDsxJnF1b3Q7IGluZGVudD0mcXVvdDsmcXVvdDsmZ3Q7CiAg Jmx0O3R4cDpzbWRfdGFnX25hbWUgbGluaz0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CiAgJmx0O3R4 cDpzbWRfdGFnX2NvdW50IHdyYXBjb3VudD0mcXVvdDsvJnF1b3Q7IC8mZ3Q7CiZsdDsvdHhw OnNtZF90YWdfbGlzdCZndDs8L2NvZGU+PC9wcmU+Cgo8cD5UaGF0IG1pZ2h0IGRpc3BsYXk6 PC9wPgoKPHByZT48Y29kZT5GaWxlZCBpbjogVUsgLzgvIHwgcG9saXRpY3MgLzEvIHwgbWVk aWEgLzE0LyB8IG1vbmV5IC85LyB8IGJhbmtzIC8zLzwvY29kZT48L3ByZT4KCjxoMiBjbGFz cz0idGFnIj5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX3RhZ19pbmZvJmd0OzwvY29kZT48L2gy PgoKPHA+RGlzcGxheSBhbnkgb3RoZXIgcGllY2VzIG9mIGluZm9ybWF0aW9uIGFib3V0IGEg dGFnLiBVc2UgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIGN1c3RvbWlzZSB0aGUgdGFn OjwvcD4KCjxkbD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+aXRlbTwvc3Bhbj48L2R0PgoJ PGRkPkxpc3Qgb2Ygb25lIG9yIG1vcmUgdGhpbmdzIHRvIGRpc3BsYXkuIENhbiBiZSBhbnkg b2Y6Cgk8ZGw+CgkJPGRkPjxjb2RlPmlkPC9jb2RlPjwvZGQ+CgkJPGRkPjxjb2RlPm5hbWU8 L2NvZGU+PC9kZD4KCQk8ZGQ+PGNvZGU+ZGVzY3JpcHRpb248L2NvZGU+PC9kZD4KCQk8ZGQ+ PGNvZGU+dGl0bGU8L2NvZGU+PC9kZD4KCQk8ZGQ+PGNvZGU+bGV0dGVybmFtZTwvY29kZT4g KGZpcnN0IHVuaWNvZGUgbGV0dGVyIG9mIHRoZSB0YWcmIzgyMTc7cyBuYW1lKTwvZGQ+CgkJ PGRkPjxjb2RlPmxldHRlcnRpdGxlPC9jb2RlPiAoZmlyc3QgdW5pY29kZSBsZXR0ZXIgb2Yg dGhlIHRhZyYjODIxNztzIHRpdGxlKTwvZGQ+CgkJPGRkPjxjb2RlPnR5cGU8L2NvZGU+IChh cnRpY2xlLCBpbWFnZSwgZmlsZSwgbGluayk8L2RkPgoJCTxkZD48Y29kZT5wYXJlbnQ8L2Nv ZGU+ICh0aGUgcGFyZW50IHRhZyk8L2RkPgoJCTxkZD48Y29kZT5jaGlsZHJlbjwvY29kZT4g KG51bWJlciBvZiBjaGlsZCB0YWdzIHRoaXMgdGFnIGhhcyk8L2RkPgoJCTxkZD48Y29kZT5s ZXZlbDwvY29kZT4gKGxldmVsIDAgPSAmIzgyMTY7cm9vdCYjODIxNzspPC9kZD4KCQk8ZGQ+ PGNvZGU+Y291bnQ8L2NvZGU+IChudW1iZXIgb2YgYXJ0aWNsZXMvaW1hZ2VzL2ZpbGVzL2xp bmtzIGFzc2lnbmVkIHRvIHRoaXMgdGFnKTwvZGQ+CgkJPGRkPjxjb2RlPndlaWdodDwvY29k ZT4gKCYjODIxNjtzaXplJiM4MjE3OyBvZiB0aGlzIHRhZywgd2VpZ2h0ZWQgYXMgYSBwZXJj ZW50YWdlIG9mIGFsbCB0YWdzIGJhc2VkIG9uIHRoZSBjb3VudDogdXNlZnVsIGluc2lkZSA8 Y29kZT5zdHlsZTwvY29kZT4gYXR0cmlidXRlIG9mIHNtZF90YWdfbmFtZSBmb3IgY3JlYXRp bmcgd2VpZ2h0ZWQgdGFnIGNsb3Vkcyk8L2RkPgoJPC9kbD48L2RkPgoJPGRkPkRlZmF1bHQ6 IDxjb2RlPm5hbWU8L2NvZGU+PC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRh Zzwvc3Bhbj48L2R0PgoJPGRkPldyYXAgdGhlIHRhZyBpdGVtcyB3aXRoIHRoaXMgPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZy48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5jbGFzczwvc3Bhbj48L2R0PgoJPGRkPkFwcGx5IHRoaXMgPHNwYW4gY2xhc3M9ImNh cHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gdGhlIHRhZyBpdGVtcy48L2RkPgoJPGRkPkRlZmF1 bHQ6IDxjb2RlPnNtZF90YWdfaW5mbzwvY29kZT48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJh dG5tIj5icmVhazwvc3Bhbj48L2R0PgoJPGRkPldyYXAgZWFjaCB0YWcgaXRlbSB3aXRoIHRo aXMgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZy48L2RkPgoJPGRkPkRlZmF1 bHQ6IDxjb2RlPmJyPC9jb2RlPjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmJyZWFr Y2xhc3M8L3NwYW4+PC9kdD4KCTxkZD5BcHBseSB0aGlzIDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IGNsYXNzIHRvIGVhY2ggdGFnIGl0ZW0uPC9kZD4KPC9kbD4KCjxoMz5FeGFt cGxlOiBleHRlbmRlZCB0YWcgaW5mb3JtYXRpb248L2gzPgoKPHA+SW5zaWRlIGFuIHNtZF90 YWdfbGlzdCwgcHV0IHRoaXMgdG8gZGlzcGxheSBzb21lIGluZm9ybWF0aW9uIGFib3V0IGVh Y2ggdGFnOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZT4mbHQ7dHhwOnNtZF90YWdf aW5mbyBpdGVtPSZxdW90O2lkJnF1b3Q7IC8mZ3Q7OgogJmx0O3AmZ3Q7cGFyZW50IHwgI2No aWxkcmVuIHwgbGV2ZWwmbHQ7YnIgLyZndDsKICZsdDt0eHA6c21kX3RhZ19pbmZvIGl0ZW09 JnF1b3Q7cGFyZW50LCBjaGlsZHJlbiwgbGV2ZWwmcXVvdDsKICAgICAgYnJlYWs9JnF1b3Q7 IHwgJnF1b3Q7IC8mZ3Q7Jmx0Oy9wJmd0OzwvY29kZT48L3ByZT4KCjxoMiBjbGFzcz0idGFn Ij5UYWc6IDxjb2RlPiZsdDt0eHA6c21kX2lmX3RhZ19saXN0Jmd0OzwvY29kZT48L2gyPgoK PHA+Q29uZGl0aW9uYWwgdGFnIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHNj b3BlIGlzIGEgdGFnIGxpc3QuIFVzZWZ1bCBmb3IgZGV0ZWN0aW5nIGlmIGEgdGFnIGhhcyBi ZWVuIGNsaWNrZWQgYW5kIHJlZGlyZWN0ZWQgdG8gYSBsYW5kaW5nIHBhZ2Ugc28geW91IGNh biB0YWtlIHNvbWUgYWN0aW9uIG9uIHRoYXQgcGFnZS48L3A+Cgo8aDIgY2xhc3M9InRhZyI+ VGFnOiA8Y29kZT4mbHQ7dHhwOnNtZF9pZl90YWcmZ3Q7PC9jb2RlPjwvaDI+Cgo8cD5SdWRp bWVudGFyeSBjb25kaXRpb25hbCB0byBjaGVjayBhIHRhZyBmb3IgY2VydGFpbiBwYXJhbWV0 ZXJzIGFuZCBleGVjdXRlIHRoZSBjb250YWluZWQgY29udGVudCBpZiBpdCBtYXRjaGVzLiBF dmVyeSBhdHRyaWJ1dGUgeW91IHNwZWNpZnkgbXVzdCBtYXRjaCBmb3IgdGhlIGNvbmRpdGlv bmFsIGNvbnRlbnQgdG8gYmUgZXhlY3V0ZWQsIG90aGVyd2lzZSBhbnkgPGNvZGU+Jmx0O3R4 cDplbHNlIC8mZ3Q7PC9jb2RlPiBicmFuY2ggd2lsbCBiZSBmb2xsb3dlZC4gVXNlIHRoZSBm b2xsb3dpbmcgYXR0cmlidXRlcyB0byBjdXN0b21pc2UgaXQ6PC9wPgoKPGRsPgoJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj50eXBlPC9zcGFuPjwvZHQ+Cgk8ZGQ+RXhlY3V0ZXMgdGhlIGNv bnRhaW5lZCBzdGF0ZW1lbnRzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIG9uZSBnaXZlbi4g VGFrZXMgb25lIG9mOgoJPGRsPgoJCTxkZD48Y29kZT5hcnRpY2xlPC9jb2RlPjwvZGQ+CgkJ PGRkPjxjb2RlPmltYWdlPC9jb2RlPjwvZGQ+CgkJPGRkPjxjb2RlPmZpbGU8L2NvZGU+PC9k ZD4KCQk8ZGQ+PGNvZGU+bGluazwvY29kZT48L2RkPgoJPC9kbD48L2RkPgoJPGR0PjxzcGFu IGNsYXNzPSJhdG5tIj5pZDwvc3Bhbj48L2R0PgoJPGRkPkNoZWNrcyBpZiB0aGUgdGFnIElE IG1hdGNoZXMgdGhlIG9uZSBnaXZlbjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm5h bWU8L3NwYW4+PC9kdD4KCTxkZD5DaGVja3MgaWYgdGhlIHRhZyBuYW1lIG1hdGNoZXMgdGhl IG9uZSBnaXZlbjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnRpdGxlPC9zcGFuPjwv ZHQ+Cgk8ZGQ+Q2hlY2tzIGlmIHRoZSB0YWcgdGl0bGUgbWF0Y2hlcyB0aGUgb25lIGdpdmVu PC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ZGVzY3JpcHRpb248L3NwYW4+PC9kdD4K CTxkZD5DaGVja3MgaWYgdGhlIHRhZyBkZXNjcmlwdGlvbiBtYXRjaGVzIHRoZSBvbmUgZ2l2 ZW48L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5wYXJlbnQ8L3NwYW4+PC9kdD4KCTxk ZD5DaGVja3MgaWYgdGhlIHRhZyBwYXJlbnQgbWF0Y2hlcyB0aGUgb25lIGdpdmVuPC9kZD4K CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+Y291bnQ8L3NwYW4+PC9kdD4KCTxkZD5DaGVja3Mg aWYgdGhlIHRhZyBjb3VudCBtYXRjaGVzIHRoZSBudW1iZXIgZ2l2ZW48L2RkPgoJPGR0Pjxz cGFuIGNsYXNzPSJhdG5tIj5jaGlsZHJlbjwvc3Bhbj48L2R0PgoJPGRkPkNoZWNrcyBpZiB0 aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoZSB0YWcgaGFzIG1hdGNoZXMgdGhlIG51bWJlciBn aXZlbjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmxldmVsPC9zcGFuPjwvZHQ+Cgk8 ZGQ+Q2hlY2tzIGlmIHRoZSB0YWcgaXMgYXQgYSBzcGVjaWZpYyBsZXZlbCBpbiB0aGUgaGll cmFyY2h5PC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+aXM8L3NwYW4+PC9kdD4KCTxk ZD5DaGVja3MgaWYgdGhlIHRhZyBpcyBvZiBhIHBhcnRpY3VsYXIgdmFyaWV0eS4gQ2hvb3Nl IGZyb206Cgk8ZGw+CgkJPGRkPjxjb2RlPm1hc3RlcjwvY29kZT4gOiBvbmUgb2YgdGhlIG1h c3RlciB0YWdzPC9kZD4KCQk8ZGQ+PGNvZGU+Zmlyc3Q8L2NvZGU+IDogdGhlIGZpcnN0IHRh ZyBpbiB0aGUgbGlzdDwvZGQ+CgkJPGRkPjxjb2RlPmxhc3Q8L2NvZGU+IDogdGhlIGxhc3Qg dGFnIGluIHRoZSBsaXN0PC9kZD4KCTwvZGw+PC9kZD4KCTwvZGw+Cgo8cD5FYWNoIG9mIHRo ZSBpdGVtcyAoZXhjZXB0IDxjb2RlPmlzPC9jb2RlPikgbWF5IHRha2UgYW4gZXhhY3QgdmFs dWUvc3RyaW5nIHRvIG1hdGNoIG9yIGEgbW9kaWZpZWQgc3ludGF4OiB5b3UgbWF5IHByZWNl ZGUgdGhlIHZhbHVlIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9scyB0byBwZXJm b3JtIGEgbWF0aGVtYXRpY2FsL2Jvb2xlYW4gY29tcGFyaXNvbjo8L3A+Cgo8dWw+Cgk8bGk+ PGNvZGU+Jmx0OzwvY29kZT4gOiBsZXNzIHRoYW48L2xpPgoJPGxpPjxjb2RlPiZsdDs9PC9j b2RlPiA6IGxlc3MgdGhhbiBvciBlcXVhbCB0bzwvbGk+Cgk8bGk+PGNvZGU+Jmd0OzwvY29k ZT4gOiBncmVhdGVyIHRoYW48L2xpPgoJPGxpPjxjb2RlPiZndDs9PC9jb2RlPiA6IGdyZWF0 ZXIgdGhhbiBvciBlcXVhbCB0bzwvbGk+Cgk8bGk+PGNvZGU+ITwvY29kZT4gOiBub3QgZXF1 YWwgdG88L2xpPgo8L3VsPgoKPHA+Rm9yIGV4YW1wbGU6PC9wPgoKPHByZSBjbGFzcz0iYmxv Y2siPjxjb2RlPiZsdDt0eHA6c21kX2lmX3RhZyBwYXJlbnQ9JnF1b3Q7IXJvb3QmcXVvdDsg Y291bnQ9JnF1b3Q7Jmd0OzgmcXVvdDsmZ3Q7Ci8vIEN1cnJlbnQgdGFnIGlzIG5vdCBhIHRv cC1sZXZlbCB0YWcgYW5kIGhhcwovLyBtb3JlIHRoYW4gOCBpdGVtcyBhc3NvY2lhdGVkIHdp dGggaXQKJmx0Oy90eHA6c21kX2lmX3RhZyZndDs8L2NvZGU+PC9wcmU+Cgo8cD5Gb3IgbW9y ZSBmaW5lLWdyYWluZWQgY29udHJvbCBvciBtb3JlIGRldGFpbGVkIGNvbmRpdGlvbmFsIGJy YW5jaGluZywgY29uc2lkZXIgdGhlIHNtZF9pZiBwbHVnaW4uPC9wPgoKPGgyIGNsYXNzPSJ0 YWciPlRhZzogPGNvZGU+Jmx0O3R4cDpzbWRfcmVsYXRlZF90YWdzJmd0OzwvY29kZT48L2gy PgoKPHA+VGhlIGJpZyBvbmUhIFRoaXMgdGFnIGFsbG93cyB5b3UgdG8gZmluZCBhbmQgZGlz cGxheSBhbnkgY29udGVudCB0aGF0IG1hdGNoZXMgc29tZSBmYWNldCBvZiB0aGUgY3VycmVu dCBjb250ZW50LiBJdCBkZWZhdWx0cyB0byBtYXRjaGluZyB0YWcgbmFtZXMuIEZvciBleGFt cGxlLCBpZiB0aGUgdGFnIGFwcGVhcmVkIG9uIGl0cyBvd24gb24gYW4gYXJ0aWNsZSBwYWdl LCBpdCB3b3VsZCBmaW5kIGFsbCAmIzgyMTY7cmVsYXRlZCYjODIxNzsgYXJ0aWNsZXMgdGhh dCBjb250YWluZWQgdGhlIHNhbWUgdGFncyBhcyB0aGUgb25lcyBpbiB0aGUgY3VycmVudCBh cnRpY2xlLjwvcD4KCjxwPkJ1dCBpdCBpcyBub3QgcmVzdHJpY3RlZCB0byBzZWFyY2hpbmcg d2l0aGluIGl0cyBvd24gdHlwZS4gWW91IGNvdWxkIGZpbmQgYWxsIHRoZSBtYXRjaGluZyBp bWFnZXMgb3IgbGlua3MgdGhhdCBzaGFyZWQgYSB0YWcgd2l0aCB0aGUgY3VycmVudCBhcnRp Y2xlLiBPciBpZiBzaG93aW5nIGEgbGlzdCBvZiBsaW5rcywgZGlzcGxheSBhbGwgYXJ0aWNs ZXMgdGhhdCBzaGFyZSB0YWdzIHdpdGggdGhlIGN1cnJlbnQgbGluay48L3A+Cgo8cD5GaW5h bGx5LCB5b3UgY2FuIGFsc28gbWF0Y2ggb3RoZXIgc3R1ZmYgc3VjaCBhcyBpbWFnZSwgZmls ZSwgbGluayBvciBhcnRpY2xlIGNhdGVnb3JpZXMsIGN1c3RvbSBmaWVsZHMsIGFuZCBzbyBv bi48L3A+Cgo8cD5Vc2UgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIGN1c3RvbWlzZSB0 aGUgdGFnOjwvcD4KCjxkbD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+dHlwZTwvc3Bhbj48 L2R0PgoJPGRkPlRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIHlvdSB3YW50IHRvIDxlbT5maW5k PC9lbT4uIENhbiBiZSBvbmUgb2Y6Cgk8ZGw+CgkJPGRkPjxjb2RlPmFydGljbGU8L2NvZGU+ PC9kZD4KCQk8ZGQ+PGNvZGU+aW1hZ2U8L2NvZGU+PC9kZD4KCQk8ZGQ+PGNvZGU+ZmlsZTwv Y29kZT48L2RkPgoJCTxkZD48Y29kZT5saW5rPC9jb2RlPjwvZGQ+Cgk8L2RsPjwvZGQ+Cgk8 ZGQ+RGVmYXVsdDogdGhlIHNhbWUgdHlwZSBhcyB0aGUgY3VycmVudCBjb250ZXh0IChpLmUu IGlmIGluIGFuIGFydGljbGUsIHdpbGwgbG9vayBmb3Igb3RoZXIgYXJ0aWNsZXMpPC9kZD4K CTxkdD48c3BhbiBjbGFzcz0iYXRubSI+bWF0Y2g8L3NwYW4+PC9kdD4KCTxkZD5UaGUgaW5m b3JtYXRpb24geW91IHdhbnQgdG8gPGVtPmNvbXBhcmU8L2VtPi4gQ2FuIGJlIG9uZSBvZjoK CTxkbD4KCQk8ZGQ+PGNvZGU+dGFnX25hbWU8L2NvZGU+PC9kZD4KCQk8ZGQ+PGNvZGU+dGFn X2lkPC9jb2RlPjwvZGQ+CgkJPGRkPjxjb2RlPnRhZ190aXRsZTwvY29kZT48L2RkPgoJCTxk ZD48Y29kZT50YWdfZGVzY3JpcHRpb248L2NvZGU+PC9kZD4KCQk8ZGQ+PGNvZGU+dGFnX3Bh cmVudDwvY29kZT48L2RkPgoJCTxkZD48Y29kZT50YWdfY291bnQ8L2NvZGU+PC9kZD4KCQk8 ZGQ+PGNvZGU+dGFnX2NoaWxkcmVuPC9jb2RlPjwvZGQ+CgkJPGRkPjxjb2RlPnRhZ19sZXZl bDwvY29kZT48L2RkPgoJCTxkZD5zb21lIGZpZWxkIG5hbWUgc3VjaCBhcyA8Y29kZT5jYXRl Z29yeTwvY29kZT4gb3IgPGNvZGU+Y3VzdG9tMTwvY29kZT48L2RkPgoJPC9kbD48L2RkPgoJ PGRkPkRlZmF1bHQ6IDxjb2RlPnRhZ19uYW1lPC9jb2RlPjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xh c3M9ImF0bm0iPm1hdGNoX3NlbGY8L3NwYW4+PC9kdD4KCTxkZD5XaGV0aGVyIHRvIGluY2x1 ZGUgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgaXRlbS4gVXN1YWxseSB5b3Ugd29uJiM4 MjE3O3Qgd2FudCB0aGlzIHNvIGl0IGlzIG9mZiBhbmQgaW4gZmFjdCwgc2V0dGluZyBpdCBv biBjYW4gc29tZXRpbWVzIGNhdXNlIGVycm9ycy4gT3B0aW9uczoKCTxkbD4KCQk8ZGQ+MDog b2ZmPC9kZD4KCQk8ZGQ+MTogb248L2RkPgoJPC9kbD48L2RkPgoJPGRkPkRlZmF1bHQ6IDA8 L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtPC9zcGFuPjwvZHQ+Cgk8ZGQ+UGFz cyBjb250cm9sIHRvIHRoZSBnaXZlbiBmb3JtIGZvciByZW5kZXJpbmcgdGhlIHRhZyBvdXRw dXQuIENhbiBhbHNvIGJlIHVzZWQgYXMgYSBjb250YWluZXIuIElmIHlvdSBkb24mIzgyMTc7 dCBzcGVjaWZ5IGVpdGhlciBhIDxjb2RlPmZvcm08L2NvZGU+IG9yIGEgY29udGFpbmVyLCBp dCBvdXRwdXRzIHNvbWUgc2Vuc2libGUgZGVmYXVsdCBiYXNlZCBvbiB0aGUgY3VycmVudCBj b250ZXh0IChpLmUuIHRoZSBwZXJtbGlua2VkIGFydGljbGUgdGl0bGUgaW4gdGhlIDxjb2Rl PmFydGljbGU8L2NvZGU+IGNvbnRleHQsIHRoZSBmaWxlIGRvd25sb2FkIGxpbmsgaW4gdGhl IDxjb2RlPmZpbGU8L2NvZGU+IGNvbnRleHQsIGV0Yyk8L2RkPgoJPGR0PjxzcGFuIGNsYXNz PSJhdG5tIj5zZWN0aW9uPC9zcGFuPjwvZHQ+Cgk8ZGQ+PHNwYW4gY2xhc3M9ImltcG9ydGFu dCI+T25seSBvZiB1c2UgZm9yIGFydGljbGVzPC9zcGFuPi4gTGltaXRzIHRoZSBzZWFyY2gg dG8gYXJ0aWNsZXMgaW4gYSBwYXJ0aWN1bGFyIHNlY3Rpb24uPC9kZD4KCTxkZD5EZWZhdWx0 OiBjdXJyZW50IHNlY3Rpb24sIGJ1dCBjaGVjayB0aGUgY2F2ZWF0cyBiZWxvdyBmb3IgYSBz aWRlLWVmZmVjdCBvZiB0aGlzIGF0dHJpYnV0ZTwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0 bm0iPm9mZnNldDwvc3Bhbj48L2R0PgoJPGRkPlNraXAgdGhpcyBudW1iZXIgb2YgbWF0Y2hl ZCBpdGVtcyBiZWZvcmUgc3RhcnRpbmcgdG8gZGlzcGxheSB0aGVtLjwvZGQ+Cgk8ZHQ+PHNw YW4gY2xhc3M9ImF0bm0iPmxpbWl0PC9zcGFuPjwvZHQ+Cgk8ZGQ+VGhlIG1heGltdW0gbnVt YmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkuPC9kZD4KCTxkZD5EZWZhdWx0OiA5OTk5OSAoaS5l LiB2aXJ0dWFsbHkgdW5saW1pdGVkKTwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPm5v X3dpZG93PC9zcGFuPjwvZHQ+Cgk8ZGQ+V2hlbiBkaXNwbGF5aW5nIGFydGljbGUgdGl0bGVz LCBwcmV2ZW50IGxvbmUgd29yZHMgb24gdGhlIDJuZCBsaW5lLjwvZGQ+Cgk8ZGQ+RGVmYXVs dDogVHhwIEFkbWluIHByZWZlcmVuY2Ugb2YgdGhlIHNhbWUgbmFtZTwvZGQ+Cgk8ZHQ+PHNw YW4gY2xhc3M9ImF0bm0iPnNvcnQ8L3NwYW4+PC9kdD4KCTxkZD5SZW9yZGVyIHRoZSBpdGVt cyBieSBzb21lIGZpZWxkLjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNvZGU+UG9zdGVkIGRlc2M8 L2NvZGU+IGZvciBhcnRpY2xlcyAvIDxjb2RlPmRhdGUgZGVzYzwvY29kZT4gZm9yIGV2ZXJ5 dGhpbmcgZWxzZTwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmxhYmVsPC9zcGFuPjwv ZHQ+Cgk8ZGQ+RGlzcGxheSB0aGlzIGxhYmVsIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3Qgb2Yg aXRlbXM8L2RkPgoJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5sYWJlbHRhZzwvc3Bhbj48L2R0 PgoJPGRkPldyYXAgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnIGFy b3VuZCB0aGUgbGFiZWwuPC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+d3JhcHRhZzwv c3Bhbj48L2R0PgoJPGRkPldyYXAgdGhpcyA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gdGFnIGFyb3VuZCB0aGUgaXRlbXMuPC9kZD4KCTxkdD48c3BhbiBjbGFzcz0iYXRubSI+ YnJlYWs8L3NwYW4+PC9kdD4KCTxkZD5XcmFwIGVhY2ggaXRlbSB3aXRoIHRoaXMgPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZy48L2RkPgoJPGRkPkRlZmF1bHQ6IDxjb2Rl PmJyPC9jb2RlPjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmNsYXNzPC9zcGFuPjwv ZHQ+Cgk8ZGQ+QXBwbHkgdGhlIGdpdmVuIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+ IGNsYXNzIHRvIHRoZSBpdGVtIGxpc3QuPC9kZD4KCTxkZD5EZWZhdWx0OiA8Y29kZT5zbWRf cmVsYXRlZF90YWdzPC9jb2RlPjwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPmRlbGlt PC9zcGFuPjwvZHQ+Cgk8ZGQ+SWYgeW91IHByZWZlciBzb21ldGhpbmcgb3RoZXIgdGhhbiB0 aGUgZGVmYXVsdCB0byBzcGVjaWZ5IGxpc3RzIG9mIGl0ZW1zIGluIHRoZSB0YWcgYXR0cmli dXRlcywgY2hhbmdlIGl0LjwvZGQ+Cgk8ZGQ+RGVmYXVsdDogPGNvZGU+LDwvY29kZT4gKGNv bW1hKTwvZGQ+Cgk8ZHQ+PHNwYW4gY2xhc3M9ImF0bm0iPnBhcmFtZGVsaW08L3NwYW4+PC9k dD4KCTxkZD5JZiB5b3UgcHJlZmVyIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0 IHRvIHNlcGFyYXRlIHBhcmFtZXRlcnMgaW5zaWRlIGF0dHJpYnV0ZXMsIGNoYW5nZSBpdC48 L2RkPgoJPGRkPkRlZmF1bHQ6IDxjb2RlPjo8L2NvZGU+IChjb2xvbik8L2RkPgo8L2RsPgoK PHA+V2hlbiBzcGVjaWZ5aW5nIGl0ZW1zIHRvIDxjb2RlPm1hdGNoPC9jb2RlPiB5b3UgYXJl IG5vdCByZXN0cmljdGVkIHRvIHNlYXJjaGluZyB0aGUgY3VycmVudCBjb250ZXh0LiBGb3Ig ZXhhbXBsZSwgc2F5IHlvdSBoYWQgYSBsaXN0IG9mIGZpbGUgZG93bmxvYWRzIGFuZCBuZXh0 IHRvIGVhY2ggZmlsZSB5b3Ugd2FudGVkIHRvIHNob3cgdGhlIGFydGljbGVzIHRoYXQgbWF0 Y2hlZCB0aGUgZmlsZSYjODIxNztzIGNhdGVnb3J5LiBZb3UgbWlnaHQgZG8gdGhpcyBpbiB5 b3VyIDxjb2RlPmZpbGVzPC9jb2RlPiBmb3JtOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZT4mbHQ7dHhwOmZpbGVfZG93bmxvYWRfbGluayZndDsKICAmbHQ7dHhwOmZpbGVfZG93 bmxvYWRfbmFtZSAvJmd0OwombHQ7L3R4cDpmaWxlX2Rvd25sb2FkX2xpbmsmZ3Q7CiZsdDt0 eHA6c21kX3JlbGF0ZWRfdGFncyB0eXBlPSZxdW90O2FydGljbGUmcXVvdDsKICAgICBsYWJl bD0mcXVvdDtZb3UgbWlnaHQgYWxzbyBsaWtlJnF1b3Q7IGxhYmVsdGFnPSZxdW90O3AmcXVv dDsKICAgICBtYXRjaD0mcXVvdDtmaWxlOmNhdGVnb3J5JnF1b3Q7IHdyYXB0YWc9JnF1b3Q7 dWwmcXVvdDsKICAgICBicmVhaz0mcXVvdDtsaSZxdW90OyAvJmd0OzwvY29kZT48L3ByZT4K CjxoMz5DYXZlYXQ8L2gzPgoKPHA+QmUgY2FyZWZ1bCB3aXRoIHRoZSA8Y29kZT5zZWN0aW9u PC9jb2RlPiBhdHRyaWJ1dGU6IG9uIGEgdGFnIGxpc3QsIDxlbT5hbGw8L2VtPiBpdGVtcyBv ZiBhIGdpdmVuIHR5cGUgYXJlIGNvbnNpZGVyZWQsIGlycmVzcGVjdGl2ZSBvZiBzZWN0aW9u LiBUaHVzIGlmIHlvdSBkaWQ6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlPiZsdDt0 eHA6c21kX2lmX3RhZ19saXN0Jmd0OwogICZsdDtoMiZndDtUYWdzIGxpc3QmbHQ7L2gyJmd0 OwogICZsdDt0eHA6c21kX3RhZ19saXN0Jmd0OwogICAgJmx0O3R4cDpzbWRfdGFnX25hbWUg dGl0bGU9JnF1b3Q7MSZxdW90OyBsaW5rPSZxdW90OzEmcXVvdDsgLyZndDsKICAgICZsdDt0 eHA6c21kX3RhZ19jb3VudCAvJmd0OwogICAgJmx0O3R4cDpzbWRfcmVsYXRlZF90YWdzIHNl Y3Rpb249JnF1b3Q7YXJjaGl2ZSZxdW90OyB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7IGJyZWFr PSZxdW90O2xpJnF1b3Q7IC8mZ3Q7CiAgJmx0Oy90eHA6c21kX3RhZ19saXN0Jmd0OwombHQ7 L3R4cDpzbWRfaWZfdGFnX2xpc3QmZ3Q7PC9jb2RlPjwvcHJlPgoKPHA+WW91IG1pZ2h0IHNl ZSBhIHRhZyBuYW1lIHdpdGggYSBjb3VudCBvZiAxMiBidXQgb25seSA3IGFydGljbGVzIGxp c3RlZCB1bmRlciBpdCwgaWYgZml2ZSBvZiB5b3VyIGFydGljbGVzIHRoYXQgdXNlZCB0aGF0 IHBhcnRpY3VsYXIgdGFnIHdlcmUgZnJvbSBhbm90aGVyIHNlY3Rpb24uIFRvIGJlIHN1cmUs IG9ubHkgdXNlIHRoZSA8Y29kZT5zZWN0aW9uPC9jb2RlPiBhdHRyaWJ1dGUgb24gaW5kaXZp ZHVhbCBhcnRpY2xlIHBhZ2VzLjwvcD4KCjxoMiBpZD0iZWcxIj5FeGFtcGxlIDE6IGxpbmtl ZCB0YWcgdHJlZTwvaDI+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGU+Jmx0O3R4cDpzbWRf dGFnX2xpc3Qgc2hvd2FsbD0mcXVvdDsxJnF1b3Q7IHBhcmVudD0mcXVvdDt0cmFuc2xhdGlv bnMmcXVvdDsmZ3Q7CiAgICZsdDt0eHA6c21kX3RhZ19pbmZvIGl0ZW09JnF1b3Q7aW5kZW50 JnF1b3Q7IC8mZ3Q7CiAgICZsdDt0eHA6c21kX2lmX3RhZyBjaGlsZHJlbj0mcXVvdDsmZ3Q7 MCZxdW90OyZndDsKICAgICAgJmx0O3R4cDpoaWRlJmd0OyBBIHBhcmVudCB0YWc6IGRvIG5v dCBsaW5rICZsdDsvdHhwOmhpZGUmZ3Q7CiAgICAgICZsdDt0eHA6c21kX3RhZ19uYW1lIHRp dGxlPSZxdW90OzEmcXVvdDsgLyZndDsKICAgJmx0O3R4cDplbHNlIC8mZ3Q7CiAgICAgICZs dDt0eHA6aGlkZSZndDsgQSBjaGlsZCB0YWc6IGxpbmsgaXQgdG8gdGhlIGRlZmF1bHQgdHJp Z2dlciBzZWN0aW9uICZsdDsvdHhwOmhpZGUmZ3Q7CiAgICAgICZsdDt0eHA6c21kX3RhZ19u YW1lIGxpbms9JnF1b3Q7MSZxdW90OyB0aXRsZT0mcXVvdDsxJnF1b3Q7IC8mZ3Q7CiAgICZs dDsvdHhwOnNtZF9pZl90YWcmZ3Q7CiAgIFsmbHQ7dHhwOnNtZF90YWdfaW5mbyBpdGVtPSZx dW90O2NvdW50JnF1b3Q7IC8mZ3Q7XQombHQ7L3R4cDpzbWRfdGFnX2xpc3QmZ3Q7PC9jb2Rl PjwvcHJlPgoKPGgyIGlkPSJlZzIiPkV4YW1wbGUgMjogZm9udC13ZWlnaHRlZCB0YWcgY2xv dWQ8L2gyPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlPiZsdDt0eHA6c21kX3RhZ19saXN0 IHBhcmVudD0mcXVvdDthbmltYWxzJnF1b3Q7IGZsYXZvdXI9JnF1b3Q7Y2xvdWQ6NzU6MzAw JnF1b3Q7CiAgICAgIHdyYXB0YWc9JnF1b3Q7ZGl2JnF1b3Q7IGJyZWFrPSZxdW90OyZxdW90 OyZndDsKICAgJmx0O3R4cDp2YXJpYWJsZSBuYW1lPSZxdW90O2ZvbnR3ZWlnaHQmcXVvdDsm Z3Q7CiAgICAgIGZvbnQtc2l6ZTombHQ7dHhwOnNtZF90YWdfaW5mbyBpdGVtPSZxdW90O3dl aWdodCZxdW90OyAvJmd0OyU7CiAgICZsdDsvdHhwOnZhcmlhYmxlJmd0OwogICAmbHQ7dHhw OnNtZF90YWdfaW5mbyBpdGVtPSZxdW90O2luZGVudCZxdW90OyAvJmd0OwogICAmbHQ7dHhw OnNtZF90YWdfbmFtZSBsaW5rPSZxdW90OzEmcXVvdDsgdGl0bGU9JnF1b3Q7MSZxdW90OyB3 cmFwdGFnPSZxdW90O3NwYW4mcXVvdDsKICAgICAgICAgICBzdHlsZT0mIzM5OyZsdDt0eHA6 dmFyaWFibGUgbmFtZT0mcXVvdDtmb250d2VpZ2h0JnF1b3Q7IC8mZ3Q7JiMzOTsgLyZndDsK ICAgKCZsdDt0eHA6c21kX3RhZ19pbmZvIGl0ZW09JnF1b3Q7Y291bnQmcXVvdDsgLyZndDsp CiZsdDsvdHhwOnNtZF90YWdfbGlzdCZndDs8L2NvZGU+PC9wcmU+Cgo8aDIgaWQ9ImVnMyI+ RXhhbXBsZSAzOiB3ZWlnaHRlZCBhbHBoYWJldGljIHRhZyBsaXN0aW5nPC9oMj4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZT4mbHQ7dHhwOnNtZF90YWdfbGlzdCBzaG93YWxsPSZxdW90 OzEmcXVvdDsgc29ydD0mcXVvdDtuYW1lIGFzYyZxdW90OwogICAgIGJyZWFrPSZxdW90OyZx dW90OyB3cmFwdGFnPSZxdW90O2RpdiZxdW90OyBmbGF2b3VyPSZxdW90O2Nsb3VkJnF1b3Q7 Jmd0OwogICAmbHQ7dHhwOmlmX2RpZmZlcmVudCZndDsKICAgICAgJmx0O2gyIGNsYXNzPSZx dW90O2FscGhhY2hhciZxdW90OyZndDsmbHQ7dHhwOnNtZF90YWdfaW5mbyBpdGVtPSZxdW90 O2xldHRlcm5hbWUmcXVvdDsgLyZndDsmbHQ7L2gyJmd0OwogICAmbHQ7L3R4cDppZl9kaWZm ZXJlbnQmZ3Q7CiAgICZsdDtzcGFuIGNsYXNzPSZxdW90O2F0YWcmcXVvdDsmZ3Q7CiAgICAg ICZsdDt0eHA6c21kX3RhZ19uYW1lIGxpbms9JnF1b3Q7MSZxdW90OyB3cmFwdGFnPSZxdW90 O3NwYW4mcXVvdDsKICAgICAgICAgICBzdHlsZT0mIzM5O2ZvbnQtc2l6ZTombHQ7dHhwOnNt ZF90YWdfaW5mbyBpdGVtPSZxdW90O3dlaWdodCZxdW90OyAvJmd0OyU7JiMzOTsgLyZndDsK ICAgICAgJmx0O3R4cDpzbWRfdGFnX2NvdW50IC8mZ3Q7CiAgICZsdDsvc3BhbiZndDsKJmx0 Oy90eHA6c21kX3RhZ19saXN0Jmd0OzwvY29kZT48L3ByZT4KCjxwPkp1c3QgdGFrZSBvdXQg dGhlIDxjb2RlPmZsYXZvdXI8L2NvZGU+IGFuZCA8Y29kZT5zdHlsZTwvY29kZT4gYXR0cmli dXRlcyB0byByZW5kZXIgYSByZWd1bGFyIGFscGhhYmV0aWMgdGFnIGxpc3RpbmcuIE5vdGUg dGhhdCB5b3UgY291bGQgdXNlIDxjb2RlPmxldHRlcnRpdGxlPC9jb2RlPiBidXQgeW91IHdv dWxkIGdldCBib3RoIGxvd2VyLSBhbmQgdXBwZXItY2FzZSAmIzgyMTY7ZCYjODIxNzsgc2Vj dGlvbnMgaWYgeW91IGhhZCB0YWdzICYjODIxNjtEYXN0YXJkbHkmIzgyMTc7IGFuZCAmIzgy MTY7ZGV2aWFudCYjODIxNzsuPC9wPgoKPGgyIGNsYXNzPSJhdXRob3IiPkF1dGhvcjwvaDI+ Cgo8cD48YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29udGFjdCI+U3RlZiBEYXdz b248L2E+PC9wPgoKPGgyIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+Cgo8cD5CZXRh OjwvcD4KCjx1bD4KCTxsaT4xMyBBcHIgMjAxMCB8IDAuMzEgfCBGaXhlZCBhZG1pbiBzaWRl IGJ1Z3Mgd2hlbiBwcml2cyBsZXNzIHRoYW4gTWFuYWdpbmcgRWRpdG9yOyBmaXhlZCBzbG93 IHJlc3BvbnNlIHdoZW4gc2F2aW5nIHRhZ3M7IGZpeGVkIHRhZyBjYXRlZ29yeSBsaXN0IHdo ZW4gbm8gY2F0KHMpIHNlbGVjdGVkOyB3YXJuaW5nIG1lc3NhZ2VzIG5vdyBibGluazsgdGlk aWVkIFRhZyBNYW5hZ2VyIGxheW91dDsgZml4ZWQgcGFyZW50IC8gc3VibGV2ZWwgaGFuZGxp bmcgaW4gc21kX3RhZ19saXN0IGFuZCBhbGxvd2VkIGdyZWF0ZXIgY29udHJvbCBvdmVyIGxl dmVsIG91dHB1dCAodGhhbmtzIHdvb2YpOyBhZGRlZCA8Y29kZT5wYWRfc3RyPC9jb2RlPiBh bmQgPGNvZGU+cGFkX3BvczwvY29kZT4gdG8gc21kX3RhZ19uYW1lOyBmaXhlZCBzbWRfaWZf dGFnIHNvIGl0IGNvbXBhcmVzIGVtcHR5IHN0cmluZ3MgY29ycmVjdGx5ICh0aGFua3Mgam9o bnN0ZXBoZW5zKTwvbGk+Cgk8bGk+MjMgTWFyIDIwMTAgfCAwLjMwIHwgUmVxdWlyZXMgNC4y LjArOyBjb25zb2xpZGF0ZWQgYWRtaW4gYW5kIGNsaWVudCBwbHVnaW5zOyBhZGRlZCBwbHVn aW4gbGlmZWN5Y2xlIGFuZCBwcmVmcyBldmVudHM7IGZpeGVkIHRleHRhcmVhL3RleHRhcmVh KyBqUXVlcnkgJiM4MjE2O0AmIzgyMTc7IGJ1ZyBhbmQgbm9uLXNhdmVzICh0aGFua3MgWmFu emEpOyBmaXhlZCBtaWRkb3QgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGVudGl0 eTsgYWRkZWQgdGFibGUgcHJlZml4IHRvIHNtZF9yZWxhdGVkX3RhZ3MgKHRoYW5rcyBNYXR0 RCk8L2xpPgoJPGxpPjE2IEFwciAyMDA5IHwgMC4yMCB8IGFkZGVkIFRleHQgYXJlYSs7IHNl bGVjdCBsaXN0IHNpemUgb2YgMSBjb252ZXJ0cyB0YWcgaW5wdXQgdG8gYSBzaW5nbGUtZW50 cnkgZHJvcGRvd24gKHRoYW5rcyB0aGVib21ic2l0ZSk7IGZpeGVkIHdpZHRoIG9mIHRhZyBs aXN0IGluIGxpbmsgcGFuZTsgZml4ZWQgcG90ZW50aWFsIGNvbnRleHQgYXJyYXkgd2Fybmlu Zzsgbm9uLW1lc3N5IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHJld3JpdGluZyBm aXhlZDsgYmVnYW4gd29yayBvbiBtdWx0aS1maWx0ZXJpbmc7IFR4cCA0LjAuNysgZGF0YWJh c2Ugd2FybmluZ3MgZml4ZWQ7IG5vbi1tZXNzeSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiByZXdyaXRpbmcgZml4ZWQ7IGFkZGVkIHNtZF9yZWxhdGVkX3RhZ3MgPGNvZGU+c3Rh dHVzPC9jb2RlPiBhdHRyaWJ1dGUgKHRoYW5rcyBqb2huc3RlcGhlbnMpOyBzbWRfaWZfdGFn OiBub3cgY29ycmVjdGx5IHdvcmtzIG91dHNpZGUgc21kX3RhZ19saXN0IGNvbnRleHQgKHRo YW5rcyBkYW53b29kd2FyZCk8L2xpPgoJPGxpPjE2IE9jdCAyMDA4IHwgMC4xMSB8IEltcHJv dmVkIGhlbHAgZXhhbXBsZXMgc3Vycm91bmRpbmcgdGhlIGF1dG9jb21wbGV0ZSBwbHVnaW4g KHRoYW5rcyB0aGVib21ic2l0ZSk7IGZpeGVkIHJlbW92ZV90YWJsZXMsIHVzZSBvZiA8c3Bh biBjbGFzcz0iY2FwcyI+UEZYPC9zcGFuPiBhbmQgYWRkZWQgZGVidWcgdG8gaW5zdGFsbGF0 aW9uIHByb2NlZHVyZSAodGhhbmtzIGpwZHVwb250KTwvbGk+Cgk8bGk+MTUgT2N0IDIwMDgg fCAwLjEwIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KPC91bD4KCjxwPk9mZmljaWFsOjwvcD4K Cjx1bD4KCTxsaT4yOSBKdW4gMjAxNSB8IDAuNTEgfCBSZW1vdmVkIGhvbGQtc2hpZnQtZm9y LWFkdmFuY2VkLW9wdGlvbnM7IGFkZGVkIFRleHRwYWNrOyBmaXhlZCBwcmVmcyBwYWdlIHN0 eWxpbmc7IGFkZGVkIHRvdGFsIHRhZyBjb3VudHMgYW5kIHN1bXMgKHRoYW5rcyBqYWtvYi9i b2pheSk8L2xpPgoJPGxpPjI1IEFwciAyMDEzIHwgMC41MCB8IEZvciBUeHAgNC41Lng7IGlt cHJvdmVkIHBlcmZvcm1hbmNlIChhZ2FpbikgdmlhIGNhY2hlaW5nOyByZXdyb3RlIDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGhhbmRsZXI7IGFkZGVkIHRhZyBkZXNjcmlwdGlv bnM7IGVuYWJsZWQgPHNwYW4gY2xhc3M9ImNhcHMiPkFORDwvc3Bhbj4vT1IgbXVsdGktdGFn IHNlYXJjaGVzOyBhZGRlZCBtYXN0ZXIgdGFnIHN1cHBvcnQ7IGFkZGVkIGltcG9ydCBmcm9t IFR4cCBjYXQgLyBjdXN0b20gZmllbGQgKHRoYW5rcyBqb3NoKTsgcGVybWl0dGVkIGJpLWRp cmVjdGlvbmFsIHRhZyB0cmVlIHNlYXJjaGluZzsgcGVybWl0dGVkIG5lc3RlZCBzbWRfdGFn X2xpc3QgdGFncyAodGhhbmtzIHNhY3JpcGFudCk7IHBlcm1pdHRlZCB0YWcgcGFyZW50cyBh c3NpZ25lZCB0byBjYXRlZ29yaWVzIHRvIGJlIHJlbW92ZWQgZnJvbSBsaXN0cyAodGhhbmtz IHBpZW1hbik7IGFkZGVkIHNtZF90YWdfbGlzdCBmbGF2b3VycyA8Y29kZT5jcnVtYjwvY29k ZT4sIDxjb2RlPmhlYWQ8L2NvZGU+IGFuZCA8Y29kZT50YWlsPC9jb2RlPjsgYWRkZWQgPGNv ZGU+aXM8L2NvZGU+IHRlc3QgdG8gc21kX2lmX3RhZzsgc21kX3JlbGF0ZWRfdGFnczogYWRk ZWQgREIgY29sdW1ucyBmcm9tIHJlY2VudCBUeHAgcmVsZWFzZXM7IGZpeGVkIGluZm9ybWF0 aW9uX3NjaGVtYSB3YXJuaW5nIG9uIG5ldyBpbnN0YWxscyAodGhhbmtzIGpheXJvcGUpOyBm aXhlZCBtaXNzaW5nIHRhZyBsaXN0cyBpZiBubyBjYXRlZ29yaWVzIGRlZmluZWQ7IGZpeGVk IGJvZ3VzIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyBpbiBzdWJkaXIgaW5zdGFs bHMgaW4gc21kX3RhZ19uYW1lICh0aGFua3Mgc2FjcmlwYW50IC8ganBkdXBvbnQpOyBmaXhl ZCA8c3BhbiBjbGFzcz0iY2FwcyI+U1FMPC9zcGFuPiBlcnJvciB3aGVuIGRlbGV0aW5nIG5v bi1vcnBoYW4gdGFncyAodGhhbmtzIHR5ZSk7IGZpeGVkIGlmX3RhZ19saXN0IGNvbnRleHQg dHJpZ2dlciB3aXRoIGVtcHR5IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHBhcmFt czsgZml4ZWQgc21kX3RhZ19saXN0IG9uIGVtcHR5IGxpc3QgYW5kIG5vbi1saXN0IHBhZ2Vz OyBtYWRlIHNtZF90YWdfbmFtZSBwbGF5IHdpdGggZ2JwX3Blcm1hbmVudF9saW5rczsgZml4 ZWQgc21kX3JlbGF0ZWRfdGFncyBpbiBzaG93YWxsIGNvbnRleHQ7IHN3YXBwZWQgPGNvZGU+ JmFtcDtuYnNwOzwvY29kZT4gZm9yIDxjb2RlPiZhbXA7IzE2MDs8L2NvZGU+PC9saT4KCTxs aT4wNSBGZWIgMjAxMSB8IDAuNDAgfCBBZGRlZCBsaXZlIHNlYXJjaCBhbmQgbXVsdGktZWRp dCBmdW5jdGlvbnM7IGltcHJvdmVkIHBlcmZvcm1hbmNlOyBhZGRlZCB0YWcgaW1wb3J0IGZy b20gdHJ1X3RhZ3MgYW5kIHJzc191bmxpbWl0ZWRfY2F0ZWdvcmllczsgZW5hYmxlZCBkZWxp bWl0ZWQgdGFnIGVudHJ5OyBmaXhlZCByb2d1ZSBzbGFzaGVzIGluIGNhdCBsaXN0czsgZml4 ZWQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gaGFuZGxlciBhbmQgc21kX3RhZ19u YW1lIHRvIHN1cHBvcnQgcGVyLXNlY3Rpb24gdGFnIGxpc3RzLCBjbGVhbiA8c3BhbiBjbGFz cz0iY2FwcyI+VVJMPC9zcGFuPiBzeW50YXgsIGFuZCBlbmFibGVkIG11bHRpcGxlIHRyaWdn ZXIgd29yZHMgKGFsbCB0aGFua3MgamFrb2IpOyA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9z cGFuPiA1LjMgY29tcGF0aWJpbGl0eSBmaXggKHRoYW5rcyBiaXJkaG91c2UpOyBmaXhlZCB3 YXJuaW5ncyBpbiBzbWRfcmVsYXRlZF90YWdzOyBmaXhlZCB0YWcgbGlzdCB3aGVuIG5vIGxp bmtlZCBjYXRzIHNlbGVjdGVkIGFuZCB3aGVuIGNhdGVnb3J5IGNoYW5nZWQ7IGFkZGVkICYj ODIxNjtsaXN0JiM4MjE3OyBhbmQgJiM4MjE2O2dyb3VwJiM4MjE3OyB0YWcgZGlzcGxheSBv cHRpb25zOyBhZGRlZCA8Y29kZT5zb3J0PC9jb2RlPiwgPGNvZGU+c2hvd2FsbDwvY29kZT4g YW5kIDxjb2RlPmZsYXZvdXI8L2NvZGU+IHRvIHNtZF90YWdfbGlzdCBmb3IgdHJlZSBhbmQg dGFnIGNsb3VkIHN1cHBvcnQ7IGFkZGVkIDxjb2RlPmxldHRlcm5hbWU8L2NvZGU+LCA8Y29k ZT5sZXR0ZXJ0aXRsZTwvY29kZT4gYW5kIDxjb2RlPndlaWdodDwvY29kZT4gaXRlbXMgdG8g c21kX3RhZ19pbmZvIGZvciBidWlsZGluZyBhbHBoYWJldGljIHRhZyBncm91cHMgYW5kIGNs b3VkczsgY2hhbmdlZCB0YWJsZSBjb2xsYXRpb24gdG8gdXRmOF9nZW5lcmFsX2NpIGFuZCBp bXByb3ZlZCB1bmljb2RlIHN1cHBvcnQ7IGZpeGVkIGJ1ZyBpbiBzbWRfaWZfdGFnIChhZ2Fp biEpIHdoZW4gdXNpbmcgbm9uLWVxIHRlc3RzOyBhZGRlZCA8Y29kZT5zdHlsZTwvY29kZT4g dG8gc21kX3RhZ19uYW1lIGFuZCBzbWRfdGFnX2NvdW50PC9saT4KPC91bD4iO3M6MzoibWQ1 IjtzOjMyOiI3YWU5ZjRjODEzMmY2MTE1N2FkOWU5NTE5NWQyYzIxMiI7czo4OiJ0ZXh0cGFj ayI7czo2MTUyOiIjQHNtZF90YWcKc21kX3RhZ3MgPT4gc21kX3RhZ3MKc21kX3RhZ19hY19z dGQgPT4gU3RhbmRhcmQKc21kX3RhZ19hY19zdHIgPT4gU3RyaWN0CnNtZF90YWdfYWxsX2xi bCA9PiBBbGwKc21kX3RhZ19hbHJlYWR5X2V4aXN0cyA9PiBhbHJlYWR5IGV4aXN0cwpzbWRf dGFnX2Fzc2lnbl9wYXJlbnRfbGJsID0+IEFzc2lnbiBwYXJlbnQKc21kX3RhZ19iaV9ib3Ro ID0+IEJvdGgKc21kX3RhZ19iaV9kb3duID0+IERvd24Kc21kX3RhZ19iaV91cCA9PiBVcApz bWRfdGFnX2J5X2NvbHVtbiA9PiBDb2x1bW4Kc21kX3RhZ19ieV9yb3cgPT4gUm93CnNtZF90 YWdfY2F0ZWdvcnlfbGlua2VkX2xibCA9PiBMaW5rZWQgdG8gY2F0ZWdvcnkgIntjYXRlZ29y eX0iOgpzbWRfdGFnX2NhdGVnb3J5X3VubGlua2VkX2xibCA9PiBVbmxpbmtlZDoKc21kX3Rh Z19jaGlsZHJlbl9hbmQgPT4gYW5kIGl0cyBjaGlsZHJlbgpzbWRfdGFnX2NoaWxkcmVuX2Rl bCA9PiBEZWxldGUgY2hpbGRyZW4Kc21kX3RhZ19jaGlsZHJlbl9wcm8gPT4gUHJvbW90ZSBj aGlsZHJlbgpzbWRfdGFnX2NsZWFyID0+IGNscgpzbWRfdGFnX2NsaW5rX2xibCA9PiBMaW5r ZWQgY2F0CnNtZF90YWdfY291bnRfbGJsID0+IE1hdGNoZWQgdGFnczoKc21kX3RhZ19jcmVh dGVkID0+IHt0eXBlfSB0YWcgIntuYW1lfSIgY3JlYXRlZApzbWRfdGFnX2NyZWF0ZWRfcmVw X2xibCA9PiBDcmVhdGVkIHRhZ3M6CnNtZF90YWdfY3JlYXRlX2xibCA9PiBDcmVhdGUvRWRp dCB0YWcKc21kX3RhZ19kZWxldGVkID0+IHt0eXBlfSB0YWcgIntuYW1lfSIgZGVsZXRlZApz bWRfdGFnX2RlbGV0ZWRfbGJsID0+IERlbGV0ZWQgdGFnczoKc21kX3RhZ19lcnJfaW5fdXNl X2xibCA9PiBUYWdzIGluIHVzZToKc21kX3RhZ19lcnJfb3JwaGFuZWRfbGJsID0+IE9ycGhh bmVkIHRhZ3M6CnNtZF90YWdfZXhpc3RzID0+IHt0eXBlfSB0YWcgIntuYW1lfSIgYWxyZWFk eSBleGlzdHMKc21kX3RhZ19leHRyYXMgPT4gVG9nZ2xlIHRhYmxlIG1hbmFnZW1lbnQKc21k X3RhZ19pbXBvcnRfcmVzdWx0c19wdDEgPT4gQXJ0aWNsZXM6CnNtZF90YWdfaW1wb3J0X3Jl c3VsdHNfcHQyID0+IFRhZ3MgbGlua2VkOgpzbWRfdGFnX2luX3VzZSA9PiB7dHlwZX0gdGFn ICJ7bmFtZX0iIGlzIGluIHVzZQpzbWRfdGFnX2xpbmtfdG9fY2F0X2xibCA9PiBMaW5rIHRv IGNhdGVnb3J5CnNtZF90YWdfbWFuYWdlX2xibCA9PiBNYW5hZ2UgdGFncwpzbWRfdGFnX21p c3NpbmdfcmVwX2xibCA9PiBNaXNzaW5nIHRhZ3M6CnNtZF90YWdfbXVsdGlfZGVsZXRlID0+ IFRhZ3MgZGVsZXRlZDoge251bWJlcn0gKHNlZSByZXBvcnQgZm9yIGRldGFpbHMpCnNtZF90 YWdfbm90X2F2YWlsYWJsZSA9PiBzbWRfdGFncyB0YWJsZXMgYXJlIG5vdCBpbnN0YWxsZWQK c21kX3RhZ19ub3RfY3JlYXRlZCA9PiB7dHlwZX0gdGFnICJ7bmFtZX0iIE5PVCBjcmVhdGVk CnNtZF90YWdfbm90X2NyZWF0ZWRfcmVwX2xibCA9PiBUYWdzIE5PVCBjcmVhdGVkOgpzbWRf dGFnX25vdF9wYXJlbnRfbGlua2VkX2xibCA9PiBOb3QgbGlua2VkOgpzbWRfdGFnX25vdF91 cGRhdGVkID0+IHt0eXBlfSB0YWcgIntuYW1lfSIgTk9UIHVwZGF0ZWQKc21kX3RhZ19ub19k ZXNjID0+IE5vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZQpzbWRfdGFnX25vX25hbWUgPT4ge3R5 cGV9IHRhZyBOT1QgY3JlYXRlZDogbmVlZHMgYSBuYW1lCnNtZF90YWdfbm9fcGFyZW50ID0+ IE5vIHBhcmVudCB0YWdzLgpzbWRfdGFnX25vX3NlY3Rpb25zID0+IE5vIHNlY3Rpb25zCnNt ZF90YWdfbm9fdGFncyA9PiBObyB7dHlwZX0gdGFncyBkZWZpbmVkCnNtZF90YWdfcGFyZW50 X2xibCA9PiBQYXJlbnQKc21kX3RhZ19wYXJlbnRfbGlua2VkX2xibCA9PiBBc3NpZ25lZCB0 aGVzZSB0YWcocykgdG8gIntwYXJlbnR9IjoKc21kX3RhZ19wb29sX2xibCA9PiBUYWcgcG9v bApzbWRfdGFnX3ByZWZzX2luc3RhbGxlZCA9PiBQcmVmZXJlbmNlcyBpbnN0YWxsZWQKc21k X3RhZ19wcmVmc19ub3RfaW5zdGFsbGVkID0+IFByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQu CnNtZF90YWdfcHJlZnNfcCA9PiBJbnRlcmZhY2Ugc2V0dGluZ3MKc21kX3RhZ19wcmVmc19w YW5lID0+IFByZWZzCnNtZF90YWdfcHJlZnNfcmVtb3ZlZCA9PiBQcmVmZXJlbmNlcyByZW1v dmVkCnNtZF90YWdfcHJlZnNfc29tZSA9PiBOb3QgYWxsIHByZWZlcmVuY2VzIGF2YWlsYWJs ZS4Kc21kX3RhZ19wcmVmc19zb21lX2V4cGxhaW4gPT4gVGhpcyBpcyBlaXRoZXIgYSBuZXcg aW5zdGFsbGF0aW9uIG9yIGEgZGlmZmVyZW50IHZlcnNpb248YnIgLz5vZiB0aGUgcGx1Z2lu IHRvIG9uZSB5b3UgaGFkIGJlZm9yZS4Kc21kX3RhZ19wcmVmc19zb21lX29wdHMxID0+IENo b29zZSAiUmVtb3ZlIHByZWZzIiB0byByZW1vdmUgdGhlbSBhbGwgb3IgIkluc3RhbGwgcHJl ZnMiIHRvIGFkZDxiciAvPmFueSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3RpbmcgcHJl ZnMgdW50b3VjaGVkLgpzbWRfdGFnX3ByZWZzX3NvbWVfb3B0czIgPT4gQ2xpY2sgIkluc3Rh bGwgdGFibGVzIiB0byBhZGQgb3IgdXBkYXRlIHRoZSB0YWJsZXM8YnIgLz5sZWF2aW5nIGFs bCBleGlzdGluZyBkYXRhIHVudG91Y2hlZC4Kc21kX3RhZ19wcmVmc19zb21lX3RibCA9PiBO b3QgYWxsIHRhYmxlIGluZm8gYXZhaWxhYmxlLgpzbWRfdGFnX3ByZWZzX3QgPT4gVGFnIG1h bmFnZW1lbnQKc21kX3RhZ19wcmVmc190aXRsZSA9PiBzbWRfdGFncyBQcmVmZXJlbmNlcwpz bWRfdGFnX3ByZWZzX3UgPT4gVVJMIG1hbmFnZW1lbnQKc21kX3RhZ19wcmVmX2luc3RhbGxf bGJsID0+IEluc3RhbGwgcHJlZnMKc21kX3RhZ19wcmVmX3JlbW92ZV9sYmwgPT4gUmVtb3Zl IHByZWZzCnNtZF90YWdfcHJlZl9zaG93X2xibCA9PiBQcmVmZXJlbmNlcwpzbWRfdGFnX3Bf ZW5hYmxlID0+IEVuYWJsZSB0YWdzIGluCnNtZF90YWdfcF9pbnB1dCA9PiBFbnRlciB0YWdz IHVzaW5nCnNtZF90YWdfcF9sYmkgPT4gQmktZGlyZWN0aW9uYWwgdGFnIHRyZWVzCnNtZF90 YWdfcF9saW5rY2F0ID0+IExpbmsgdGFncyB0byBjYXRlZ29yaWVzCnNtZF90YWdfcF9saXN0 cGFyID0+IFBlcm1pdCBwYXJlbnQgdGFnIHNlbGVjdGlvbgpzbWRfdGFnX3BfbWFzdGVyID0+ IE1hc3RlciBwYXJlbnQgdGFnCnNtZF90YWdfcF9xdGFnID0+IFF1aWNrIHRhZyAoPGEgaHJl Zj0iaHR0cDovL3BsdWdpbnMuanF1ZXJ5LmNvbS9wcm9qZWN0L2F1dG9jb21wbGV0ZXgiPnJl cXVpcmVzIHBsdWdpbjwvYT4pCnNtZF90YWdfcF9xdHBhdGggPT4gSlMgcGx1Z2luIGRpcgpz bWRfdGFnX3BfcXRzdHlsID0+IEpTIHN0eWxlIGRpcgpzbWRfdGFnX3Bfc2l6ZSA9PiBTZWxl Y3QvdGV4dGFyZWEgcm93cwpzbWRfdGFnX3JlY2VudF9yZXBvcnQgPT4gRGlzcGxheSByZWNl bnQgcmVwb3J0CnNtZF90YWdfcmVwb3J0X2xibCA9PiBSZXBvcnQ6IHNtZF90YWdzCnNtZF90 YWdfcnNzX3VjX29ubHkgPT4gKGlnbm9yZWQgZm9yIHRydV90YWdzKQpzbWRfdGFnX3Jzc191 Y190cnVfdGFnc19vbmx5ID0+IChpZ25vcmVkIGZvciBUZXh0cGF0dGVybiBjYXRzKQpzbWRf dGFnX3NlbF9saXN0ID0+IFNlbGVjdCBsaXN0CnNtZF90YWdfc3luY19jZnNfZGVsaW1fbGJs ID0+IEN1c3RvbSBmaWVsZCBkZWxpbWl0ZXIKc21kX3RhZ19zeW5jX2Nmc19sYmwgPT4gQ3Vz dG9tIGZpZWxkCnNtZF90YWdfc3luY19kZWxldGVfb3JpZ19sYmwgPT4gRGVsZXRlIG9yaWdp bmFsCnNtZF90YWdfc3luY19mb3JjZV9jYXRfbGJsID0+IEZvcmNlIGNhdGVnb3J5IGxpbmsg aWYgdGFnIGFscmVhZHkgZXhpc3RzCnNtZF90YWdfc3luY19mb3JjZV9wYXJlbnRfbGJsID0+ IEZvcmNlIHBhcmVudCBpZiB0YWcgYWxyZWFkeSBleGlzdHMKc21kX3RhZ19zeW5jX2ltcG9y dF9vcHRzID0+IEltcG9ydCBvcHRpb25zCnNtZF90YWdfc3luY19sYmwgPT4gSW1wb3J0IHRh Z3MKc21kX3RhZ19zeW5jX2xpbmtfY2F0X2xibCA9PiBMaW5rIHRhZ3MgdG8gY2F0ZWdvcnkK c21kX3RhZ19zeW5jX3BhcmVudF9jYXRfbGJsID0+IExpbmsgdG8gY2F0ZWdvcnkKc21kX3Rh Z19zeW5jX3BhcmVudF9sYmwgPT4gU3RhcnQgZnJvbSBwYXJlbnQgY2F0ZWdvcnkKc21kX3Rh Z19zeW5jX3BhcmVudF90YWdfbGJsID0+IEFzc2lnbiB0byBwYXJlbnQgdGFnCnNtZF90YWdf c3luY19wbHVnaW5fb3B0cyA9PiBTb3VyY2Ugb3B0aW9ucwpzbWRfdGFnX3N5bmNfcGx1Z3Nf bm90X2luc3RhbGxlZCA9PiB0cnVfdGFncyBvciByc3NfdW5saW1pdGVkX2NhdGVnb3JpZXMg bXVzdCBiZSBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZCB0byBpbXBvcnQKc21kX3RhZ19zeW5j X3NlY3Rpb25fbGJsID0+IEFydGljbGVzIGZyb20gc2VjdGlvbgpzbWRfdGFnX3N5bmNfdHhw Y2F0c19sYmwgPT4gVGV4dHBhdHRlcm4gY2F0ZWdvcnkKc21kX3RhZ19zeW5jX3R5cGUxID0+ IHRydV90YWdzCnNtZF90YWdfc3luY190eXBlMiA9PiByc3NfdW5saW1pdGVkX2NhdGVnb3Jp ZXMKc21kX3RhZ19zeW5jX3R5cGUzID0+IFRleHRwYXR0ZXJuIGNhdGVnb3JpZXMKc21kX3Rh Z19zeW5jX3R5cGU0ID0+IEN1c3RvbSBmaWVsZApzbWRfdGFnX3N5bmNfdHlwZV9sYmwgPT4g SW1wb3J0IGZyb20Kc21kX3RhZ190YWdzX3BhbmUgPT4gTWFuYWdlIHRhZ3MKc21kX3RhZ190 YWdfc2VhcmNoID0+IFRhZyBzZWFyY2gKc21kX3RhZ190YmxfaW5zdGFsbGVkID0+IFRhZyB0 YWJsZXMgaW5zdGFsbGVkLgpzbWRfdGFnX3RibF9pbnN0YWxsX2xibCA9PiBJbnN0YWxsIHRh YmxlcwpzbWRfdGFnX3RibF9ub3RfaW5zdGFsbGVkID0+IFRhZyB0YWJsZXMgTk9UIGluc3Rh bGxlZC4Kc21kX3RhZ190Ymxfbm90X3JlbW92ZWQgPT4gVGFnIHRhYmxlcyBOT1QgcmVtb3Zl ZC4Kc21kX3RhZ190YmxfcmVidWlsZF9sYmwgPT4gUmVidWlsZCB0YWdzCnNtZF90YWdfdGJs X3JlYnVpbHQgPT4gVGFnIHRhYmxlcyByZWJ1aWx0CnNtZF90YWdfdGJsX3JlbW92ZWQgPT4g VGFnIHRhYmxlcyByZW1vdmVkLgpzbWRfdGFnX3RibF9yZW1vdmVfbGJsID0+IFJlbW92ZSB0 YWJsZXMKc21kX3RhZ190ZXh0Ym94ID0+IFRleHQgYXJlYQpzbWRfdGFnX3RleHRib3hwbHVz ID0+IFRleHQgYXJlYSsKc21kX3RhZ190ZXh0bGlzdCA9PiBUZXh0IGxpc3QKc21kX3RhZ190 aXRsZSA9PiBUYWdzCnNtZF90YWdfdG9nZ2xlID0+IHRvZwpzbWRfdGFnX3RfYXN0YXJ0ID0+ IEluaXRpYWwgcGFuZQpzbWRfdGFnX3RfYXV0byA9PiBBdXRvIG5hbWUKc21kX3RhZ190X2Nv bHMgPT4gVGFnIGxheW91dApzbWRfdGFnX3RfY29sc29yZCA9PiBPcmRlciB0YWdzIGJ5CnNt ZF90YWdfdF9jb3VudCA9PiBTaG93IHRhZyB1c2FnZSBjb3VudHMKc21kX3RhZ190X2RlbHRy ZWUgPT4gV2hlbiBkZWxldGluZyBhIHBhcmVudApzbWRfdGFnX3RfZGVsdXNlZCA9PiBBbGxv dyBkZWxldGlvbiBvZiB1c2VkIHRhZ3MKc21kX3RhZ190X2Rlc2NfdGV4dGlsZSA9PiBUZXh0 aWxlIGRlc2NyaXB0aW9uCnNtZF90YWdfdF9kZXNjX3Rvb2x0aXAgPT4gU2hvdyBkZXNjcmlw dGlvbiBhcyB0b29sdGlwCnNtZF90YWdfdF9lbnJlcCA9PiBBdXRvbWF0aWNhbGx5IGRpc3Bs YXkgcmVwb3J0cwpzbWRfdGFnX3RfaGlsaXRlID0+IENsaWNrZWQgUkdCIGNvbG91cgpzbWRf dGFnX3RfaG92ZXIgPT4gTW91c2Utb3ZlciBSR0IgY29sb3VyCnNtZF90YWdfdF9pbmRlbnQg PT4gU3ViLXRhZyBsZXZlbCBpbmRpY2F0b3IKc21kX3RhZ190X21kZWxpbSA9PiBNdWx0aS10 YWcgZGVsaW1pdGVyICgxIGNoYXIpCnNtZF90YWdfdF9zaXplX2Rlc2MgPT4gRGVzY3JpcHRp b24gd2lkdGgsIGhlaWdodApzbWRfdGFnX3VuYWJsZV90b19jcmVhdGUgPT4gY2Fubm90IGNy ZWF0ZQpzbWRfdGFnX3VwZGF0ZWQgPT4ge3R5cGV9IHRhZyAie25hbWV9IiB1cGRhdGVkCnNt ZF90YWdfdV9jb21iaSA9PiBVc2UgdGFnIGNvbWJpbmF0aW9ucwpzbWRfdGFnX3VfY29tYmlf YW5kID0+IEFORCBjb21iaW5hdG9yIGNoYXIKc21kX3RhZ191X2NvbWJpX29yID0+IE9SIGNv bWJpbmF0b3IgY2hhcgpzbWRfdGFnX3VfcG5hbSA9PiBVUkwgbmFtZSBwYXJhbWV0ZXIKc21k X3RhZ191X3B0eXAgPT4gVVJMIHR5cGUgcGFyYW1ldGVyCnNtZF90YWdfdV9zZWMgPT4gVHJp Z2dlcihzKSBmb3IgdGFnIGxpc3RzCnNtZF90YWdfd2l0aF9maWx0ZXJlZCA9PiBXaXRoIGZp bHRlcmVkOiI7fQ==