# jmc_event_manager.0.3.1 v0.3.1beta # Event Manager for Textpattern # Joel Courtney # http://euphemize.net/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6OToiMC4zLjFiZXRhIjtzOjY6ImF1dGhvciI7czoxMzoi Sm9lbCBDb3VydG5leSI7czoxMDoiYXV0aG9yX3VyaSI7czoyMToiaHR0cDovL2V1cGhlbWl6 ZS5uZXQvIjtzOjExOiJkZXNjcmlwdGlvbiI7czoyOToiRXZlbnQgTWFuYWdlciBmb3IgVGV4 dHBhdHRlcm4iO3M6NDoidHlwZSI7aToxO3M6NDoibmFtZSI7czoyMzoiam1jX2V2ZW50X21h bmFnZXIuMC4zLjEiO3M6NDoiaGVscCI7czoxMzAxNDoiPGgyIGNsYXNzPSJlbnRyeS10aXRs ZSI+am1jX2V2ZW50X21hbmFnZXI8L2gyPgo8aDM+PGEgaHJlZj0iaHR0cDovL2ZpbGVzLmV1 cGhlbWl6ZS5uZXQvdGV4dHBhdHRlcm4vam1jX2V2ZW50X21hbmFnZXIudHh0Ij5Eb3dubG9h ZCBqbWNfZXZlbnRfbWFuYWdlciB2MC4yYmV0YTwvYT48L2gzPgo8aDI+UHJlYW1ibGU8L2gy Pgo8cD5UaGUgam1jX2V2ZW50X21hbmFnZXIgaXMgYSBwbHVnaW4vaGFjayBmb3IgdGV4dHBh dHRlcm4gY3JlYXRlZCB0byBhbGxvdyB1c2VycyB0byBjcmVhdGUgZXZlbnRzIGF0IHZhcmlv dXMgdmVudWVzLiBJdCBoYXMgYmVlbiBkb25lIHNvIGNvbXBsZXRlbHkgYnkgJiM4MjE2O2p1 OmZlbWFpeiBAIDxhIGhyZWY9Imh0dHA6Ly9ldXBoZW1pemUubmV0Ij5ldXBoZW1pemUubmV0 PC9hPi4gQW55IGNvbW1lbnRzIG9yIHN1Z2dlc3Rpb25zIHdvdWxkIGJlIGFwcHJlY2lhdGVk IGFuZCB0aGUgc3VwcG9ydCB0aHJlYWQgYXQgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRw YXR0ZXJuLmNvbSI+Zm9ydW0udGV4dHBhdHRlcm4uY29tPC9hPiBpcyA8YSBocmVmPSJodHRw Oi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MTExMzciPmF2YWls YWJsZSBoZXJlPC9hPi4gV2hpbGUgdGhpcyBoZWxwIGZpbGUgaGFzIGF0dGVtcHRlZCB0byBi ZSBhcyB0aG9yb3VnaCBhcyBwb3NzaWJsZSwgdGhpbmdzIGRvIGZhbGwgdGhyb3VnaCB0aGUg Y3JhY2tzLiBTaW5jZSBqbWNfZXZlbnRfbWFuYWdlciBpcyAoc3RpbGwpIGluIGEgYmV0YSBz dGFnZSwgdGhlcmUgbWF5IGV4aXN0IHNvbWUgYnVncyBpbiB0aGUgb3BlcmF0aW9uLiBBZGRp dGlvbmFsbHksIHRoZSBwbHVnaW4vaGFjayBpcyBhbiBvbmdvaW5nIHByb2plY3QgYW5kIG1h eSBiZSB1cGRhdGVkIGZyb20gdGltZSB0byB0aW1lLiBUbyBlbnN1cmUgdGhhdCB5b3UgaGF2 ZSB0aGUgbW9zdCB1cCB0byBkYXRlIHZlcnNpb24sIHBsZWFzZSBlbnN1cmUgeW91IHZpc2l0 IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5w aHA/aWQ9MTExMzciPnN1cHBvcnQgZm9ydW0gdGhyZWFkPC9hPiByZWd1bGFybHkuPC9wPgo8 cD5qbWNfZXZlbnRfbWFuYWdlciBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSB2aXNpdCA8 YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwiPkdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlPC9hPi48L3A+CjxoMj5JbnN0YWxsYXRpb248L2gyPgo8cD5U aGUgaW5zdGFsbGF0aW9uIHBhY2thZ2UgaXMgYSBzaW1wbGUgcHJvY2Vzcy4gRm9yIHRob3Nl IG9mIHlvdSB1cGdyYWRpbmcsIHRoZXJlIGFyZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBv biB5b3VyIGJlaGFsZiBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIGNhdGVnb3JpZXMgdG8gam1j X2V2ZW50X21hbmFnZXIuPC9wPgo8aDM+RnJlc2ggSW5zdGFsbDwvaDM+CjxwPkZvciB0aG9z ZSB1bmRlcmdvaW5nIGEgZnJlc2ggaW5zdGFsbCwgcGxlYXNlIGdvIHRocm91Z2ggdGhlIGZv bGxvd2luZyBzdGVwczo8L3A+CjxvbD4KPGxpPlR1cm4gdGhlIHBsdWdpbiB0byBhY3RpdmU8 L2xpPgo8bGk+R28gdG8gQ29udGVudCBhbmQgRXZlbnQgTWFuYWdlciB0YWJzPC9saT4KPGxp PkRvIGEgbGl0dGxlIGRhbmNlIGFuZCB5b3UmIzgyMTc7bGwgZmluZCB0aGF0IHlvdSYjODIx NztyZSByZWFkeSB0byBnbyE8L2xpPgo8L29sPgo8aDM+VXBncmFkZSBvbiBQYXN0IFZlcnNp b248L2gzPgo8cD5BcyB3aXRoIGFsbCB1cGRhdGVzLCBwbGVhc2UgYmFja3VwIHlvdXIgZGF0 YWJhc2UsIHRoZW4gZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0ZXBzOjwvcD4KPG9sPgo8 bGk+VGhyb3VnaCB5b3VyIGRhdGFiYXNlIGFkbWluLCBhZGQgdGhlIGZvbGxvd2luZyBjb2x1 bW5zIHRvIHRoZQo8cHJlPnR4cF9qbWNfZXZlbnQ8L3ByZT4KPHA+YW5kPC9wPgo8cHJlPnR4 cF9qbWNfZXZlbnRfdmVudWU8L3ByZT4KPHA+c2V0IGFzIE5VTEwgKG9yIGVxdWl2YWxlbnQg b24geW91ciBUZXh0cGF0dGVybiBpbnN0YWxsYXRpb24pPC9saT4KPGxpPkFjdGl2YXRlIHBs dWdpbjwvbGk+CjxsaT5HbyB0byBDb250ZW50IGFuZCB0aGVuIEV2ZW50IE1hbmFnZXIgdGFi PC9saT4KPGxpPkRvIGEgbGl0dGxlIGppZyBhbmQgeW91IHNob3VsZCBiZSByaWdodCArIHJl YWR5IHRvIGdvITwvbGk+Cjwvb2w+CjxoMj5JbnRyb2R1Y3Rpb24gdG8gdGhlIEV2ZW50IE1h bmFnZXI8L2gyPgo8cD5UaGUgZXZlbnQgbWFuYWdlciBoYXMgdHdvIGNvbXBvbmVudHMgLSB0 aGUgYWRtaW4gc2lkZSBjb250cm9scyBhbmQgdGhlIHB1YmxpYyBzaWRlIG91dHB1dC4gT24g aW5zdGFsbGF0aW9uIGl0IHdpbGwgZW5zdXJlIHRoYXQgYSBkYXRhYmFzZSBleGlzdHMsIHRo ZSB0YWJsZXMgZXhpc3QsIGluc3RhbGxpbmcgaWYgdGhleSYjODIxNztyZSBtaXNzaW5nLCBh bmQgdGhhdCBhbiBlbnRyeSBleGlzdHMgaW4gdGhlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGgg dGhlIGV2ZW50IG1hbmFnZXIgKGluIHRoaXMgd2F5IEkgY29uc2lkZXIgaXQgYSBoYWNrKS48 L3A+CjxoMj5FdmVudCBNYW5hZ2VyIFRhYjwvaDI+CjxwPldoZW4geW91IGdvIHRvIHRoZSBl dmVudCBtYW5hZ2VyIHRhYiB5b3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhIGxpc3Qgb2Yg ZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIGVudGVyZWQuIEN1cnJlbnRseSwgdGhlICYjODIyMDtl dmVudHMgcGVyIHBhZ2UmIzgyMjE7IGlzIGEgbWlycm9yIG9mIHRoYXQgdXNlZCBvbiB0aGUg YXJ0aWNsZSBwYWdlLCBhbmQgYW55IGFsdGVyYXRpb24gdG8gdGhlICYjODIyMDtldmVudHMg cGVyIHBhZ2UmIzgyMjE7IHdpbGwgYWxzbyBhbHRlciB0aGUgJiM4MjIwO2FydGljbGVzIHBl ciBwYWdlJiM4MjIxOyB1bmRlciB0aGUgJiM4MjIwO2FydGljbGVzIHRhYiYjODIyMTsuPC9w Pgo8cD5UaGVyZSBhcmUgY3VycmVudGx5IGZvdXIgdG9wIGxldmVsIGJ1dHRvbnMgZm9yIHRo ZSBFdmVudCBNYW5hZ2VyOjwvcD4KPHVsPgo8bGk+RXZlbnQgTWFuYWdlciAtIE1hbmFnZXMg dGhlIGFjdHVhbCBldmVudHM8L2xpPgo8bGk+VmVudWUgTWFuYWdlciAtIE1hbmFnZXMgdGhl IHZlbnVlcyBmb3IgdGhlIGV2ZW50cy4gRWFjaCBldmVudCBtdXN0IGJlICYjODIyMDthdCYj ODIyMTsgYSB2ZW51ZTwvbGk+CjxsaT5DYXRlZ29yeSBNYW5hZ2VyIC0gTWFuYWdlcyB0aGUg bmV3IGNhdGVnb3JpZXMgYXZhaWxhYmxlIGZvciB0aGUgcGx1Z2luPC9saT4KPGxpPlJTUyBG ZWVkIC0gRm9yIGZ1dHVyZSB2ZXJzaW9ucyB3aWxsIGFsbG93IGFjY2VzcyB0byBhbHRlcmF0 aW9ucyB0byB0aGUgUlNTIGZvcm1hdDwvbGk+CjwvdWw+CjxoMz5FdmVudCBNYW5hZ2VyPC9o Mz4KPHA+VGhlIGRlZmF1bHQgcGFnZSBvZiB0aGUgcGx1Z2luJiM4MjE3O3MgdGFiLiBHaXZl cyB0d28gb3B0aW9uczo8L3A+Cjx1bD4KPGxpPkFkZCBFdmVudDwvbGk+CjxsaT5FdmVudCBM aXN0aW5nIChkZWZhdWx0KTwvbGk+CjwvdWw+CjxoND5BZGQgRXZlbnQ8L2g0Pgo8cD5BbGxv d3MgdGhlIGFkbWluaXN0cmF0b3IgdG8gYWRkIGFuIGV2ZW50LiBVdGlsaXNlcyA8YSBocmVm PSJodHRwOi8vbWljcm9mb3JtYXRzLm9yZy8iPm1pY3JvZm9ybWF0czwvYT4gc3R5bGUgPGEg aHJlZj0iaHR0cDovL21pY3JvZm9ybWF0cy5vcmcvd2lraS9oY2FsZW5kYXIiPmhDYWxlbmRh cjwvYT4uPGEgaHJlZj0iaHR0cDovL21pY3JvZm9ybWF0cy5vcmcvd2lraS9oY2FsZW5kYXIi PjwvYT48L3A+CjxwPk9wdGlvbmFsOjwvcD4KPHVsPgo8bGk+Q2F0ZWdvcnk8L2xpPgo8bGk+ RXZlbnQgTmFtZTwvbGk+CjxsaT5QcmljZTwvbGk+CjxsaT5PdGhlciBCYW5kczwvbGk+Cjxs aT5PdGhlciBJbmZvPC9saT4KPC91bD4KPHA+UmVxdWlyZWQ6PC9wPgo8dWw+CjxsaT5TdGFy dCBEYXRlICsgVGltZTwvbGk+CjxsaT5GaW5pc2ggRGF0ZSArIFRpbWU8L2xpPgo8bGk+VmVu dWU8L2xpPgo8L3VsPgo8cD48c3Ryb25nPk5vdGU8L3N0cm9uZz46IEV2ZW50IG11c3QgRmlu aXNoIDxlbT5hZnRlcjwvZW0+IGl0IGJlZ2lucy48L3A+CjxoND5FdmVudCBMaXN0aW5nPC9o ND4KPHA+QmFzaWMgbGlzdGluZyBvZiBhbGwgZXZlbnRzIHBhc3QsIHByZXNlbnQgYW5kIGZ1 dHVyZS48L3A+CjxoMz5WZW51ZSBMaXN0aW5nPC9oMz4KPHA+R2l2ZXMgdHdvIG9wdGlvbnM6 PC9wPgo8dWw+CjxsaT5BZGQgVmVudWU8L2xpPgo8bGk+VmVudWUgTGlzdGluZyAoZGVmYXVs dCk8L2xpPgo8L3VsPgo8aDQ+QWRkIFZlbnVlPC9oND4KPHA+QWxsb3dzIHRoZSBhZG1pbmlz dHJhdG9yIHRvIGFkZCBhIHZlbnVlLiBPbmx5IHRoZSB2ZW51ZSBuYW1lIGlzIHJlcXVpcmVk LiBVdGlsaXNlcyA8YSBocmVmPSJodHRwOi8vbWljcm9mb3JtYXRzLm9yZy8iPm1pY3JvZm9y bWF0PC9hPiBzdHlsZSA8YSBocmVmPSJodHRwOi8vbWljcm9mb3JtYXRzLm9yZy93aWtpL2hj YXJkIj5oQ2FyZDwvYT4uPC9wPgo8aDQ+VmVudWUgTGlzdGluZzwvaDQ+CjxwPkJhc2ljIGxp c3Rpbmcgb2YgYWxsIHZlbnVlcy48L3A+CjxoMz5DYXRlZ29yeSBNYW5hZ2VyPC9oMz4KPHA+ R2l2ZXMgdHdvIG9wdGlvbnM6PC9wPgo8dWw+CjxsaT5BZGQgQ2F0ZWdvcnk8L2xpPgo8bGk+ Q2F0ZWdvcnkgTGlzdGluZyAoZGVmYXVsdCk8L2xpPgo8L3VsPgo8aDQ+QWRkIENhdGVnb3J5 PC9oND4KPHA+QWxsb3dzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIGFkZCBhbiBjYXRlZ29yeS4g T25seSB0aGUgY2F0ZWdvcnkgbmFtZSBpcyByZXF1aXJlZC48L3A+CjxoND5DYXRlZ29yeSBM aXN0aW5nPC9oND4KPHA+QmFzaWMgbGlzdGluZyBvZiBhbGwgY2F0ZWdvcmllcy48L3A+Cjxo Mz5SU1MgRmVlZDwvaDM+CjxwPlN0aWxsIHRvIGNvbWUgaW4gZnV0dXJlIHVwZGF0ZXMuIFVu c3VyZSBhcyBvZiB5ZXQgYXMgdG8gdGhlIGRlc2lnbiwgbGF5b3V0IGFuZCBvcHRpb25zLiBJ ZiB5b3UgaGF2ZSBpZGVhcywgcGxlYXNlIGNvbnRhY3QgbWUgdGhyb3VnaCB0aGUgPGEgaHJl Zj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTExMTM3 Ij5qbWNfZXZlbnRfbWFuYWdlciBwbHVnaW4gZm9ydW0gdGhyZWFkPC9hPi48L3A+CjxoMj5D cmVhdGluZyBFdmVudCBNYW5hZ2VyIE91dHB1dDwvaDI+CjxwPlRoZSBqbWNfZXZlbnRfbWFu YWdlciB1c2VzIHRoZSBmb3JtcyBpbiB0ZXh0cGF0dGVybiB0byBjcmVhdGUgdGhlIHRlbXBs YXRlIGZvciB0aGUgb3V0cHV0LiBZb3UgbWF5IHVzZSBhbnkgZm9ybSB5b3UgbGlrZSwgcHJv dmlkaW5nIHRoYXQgaXQgaGFzIHRoZSByZWxldmFudCBkZXRhaWxzLCBpLmUuIHlvdSBjYW4g Y2FsbCBpdCBmcm9tIHdpdGhpbiBhbiBhcnRpY2xlLCBmcm9tIGEgcGFnZSBvciBldmVuIGZy b20gYSBmb3JtIGl0c2VsZiAoPGVtPnlldCB0byBiZSB0ZXN0ZWQ8L2VtPikuPC9wPgo8aDM+ Q2FsbGluZyB0aGUgRXZlbnQgTWFuYWdlcjwvaDM+CjxwPkluIG9yZGVyIHRvIGNhbGwgdGhl IGV2ZW50IG1hbmFnZXIsIGEgc2ltcGxlIFRleHRwYXR0ZXJuIHN0eWxlIHRhZyBpcyB1c2Vk OjwvcD4KPHA+PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiAvPjwv Y29kZT48L3A+CjxwPlRoZSBmb3JtX25hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGZvcm0geW91 IHdvdWxkIGxpa2UgdG8gY2FsbCBhcyB0aGUgdGVtcGxhdGUuIGptY19ldmVudHMgY3ljbGVz IHRocm91Z2ggPGVtPmFsbDwvZW0+IGV2ZW50cyBhbnN3ZXJpbmcgaXRzIHJlc3RyaWN0aW9u cywgdGhhdCBpcyBpdCBjeWNsZXMgdGhyb3VnaCBlYWNoIHJlbGV2YW50IGVudHJ5LjwvcD4K PHA+VGhlcmUgYXJlIG1hbnkgb3B0aW9ucyBhcyB0byBob3cgdG8gbGltaXQgdGhlIG51bWJl ciBhbmQgdHlwZSBvZiBldmVudHMgYmVpbmcgY2FsbGVkLiBUaGUgZm9sbG93aW5nIGFyZSB0 aGUgb3B0aW9ucywgZ2l2ZW4gd2l0aCBkZXRhaWxzIGFsc28gb2YgdGhlIGRlZmF1bHQgKGlm IGFueSkuPC9wPgo8cD5Gb3JtYXR0aW5nIGZvciB2ZW51ZXMgaXMgZG9uZSBpbmRlcGVuZGVu dGx5IG9mLCBvciB3aXRoaW4sIHRoZSBldmVudCBmb3JtLjwvcD4KPGg0PmxpbWl0PC9oND4K PHA+VXNlZCB0byByZXN0cmljdCB0aGUgbnVtYmVyIG9mIGV2ZW50cy48L3A+CjxwPkV4YW1w bGUgdXNhZ2U6PC9wPgo8ZGw+CjxkdD5MaW1pdCB0byB0ZW4gZXZlbnRzOjwvZHQ+CjxkZD48 Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGxpbWl0PSIxMCIgLz48 L2NvZGU+PC9kZD4KPGR0PlZhbHVlczo8L2R0Pgo8ZGQ+CjxwcmU+MHwxPC9wcmU+CjwvZGQ+ CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHByZT4xPC9wcmU+CjwvZGQ+CjwvZGw+CjxoND5m dXR1cmU8L2g0Pgo8cD5Vc2VkIHRvIHJlc3RyaWN0IHRoZSBldmVudHMgdG8gdGhvc2UgdGhh dCB3aWxsIHN0YXJ0IGluIHRoZSBmdXR1cmUuPC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwvcD4K PGRsPgo8ZHQ+TGltaXQgdG8gZnV0dXJlOjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2 ZW50cyBmb3JtPSJmb3JtX25hbWUiIGZ1dHVyZT0iMSIgLz48L2NvZGU+PC9kZD4KPGR0PlZh bHVlczo8L2R0Pgo8ZGQ+CjxwcmU+MHwxPC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+ CjxkZD4KPHByZT4xPC9wcmU+CjwvZGQ+CjwvZGw+CjxoND5wYXN0PC9oND4KPHA+VXNlZCB0 byByZXN0cmljdCB0aGUgZXZlbnRzIHRvIHRob3NlIHRoYXQgd2lsbCBzdGFydCBpbiB0aGUg cGFzdC48L3A+CjxwPkV4YW1wbGUgdXNhZ2U6PC9wPgo8ZGw+CjxkdD5QYXN0IG9ubHk6PC9k dD4KPGRkPjxjb2RlPjwgdHhwIDpqbWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgcGFzdD0i MSIgZnV0dXJlPSIwIiAvPjwvY29kZT48L2RkPgo8ZHQ+UGFzdCBhbmQgZnV0dXJlOjwvZHQ+ CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIHBhc3Q9IjEi IGZ1dHVyZT0iMCIgLz48L2NvZGU+PC9kZD4KPGR0PlZhbHVlczo8L2R0Pgo8ZGQ+CjxwcmU+ MHwxPC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHByZT4xPC9wcmU+Cjwv ZGQ+CjwvZGw+CjxoND5jdXJyZW50PC9oND4KPHA+VXNlZCB0byByZXN0cmljdCB0aGUgZXZl bnRzIHRvIHRob3NlIHRoYXQgd2lsbCBoYXZlIHN0YXJ0ZWQsIGJ1dCBoYXZlIG5vdCB5ZXQg ZmluaXNoZWQuPC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwvcD4KPGRsPgo8ZHQ+Q3VycmVudCBv bmx5OjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUi IGN1cnJlbnQ9IjEiIGZ1dHVyZT0iMCIgLz48L2NvZGU+PC9kZD4KPGR0PkN1cnJlbnQgYW5k IEZ1dHVyZTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9u YW1lIiBjdXJyZW50PSIxIiBmdXR1cmU9IjEiIC8+PC9jb2RlPjwvZGQ+CjxkdD5DdXJyZW50 IGFuZCBQYXN0OjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3Jt X25hbWUiIGN1cnJlbnQ9IjEiIHBhc3Q9IjEiIGZ1dHVyZT0iMCIgLz48L2NvZGU+PC9kZD4K PGR0PkN1cnJlbnQsIFBhc3QgYW5kIGZ1dHVyZTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmpt Y19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiBjdXJyZW50PSIxIiBwYXN0PSIxIiBmdXR1cmU9 IjEiIC8+PC9jb2RlPjwvZGQ+CjxkdD5WYWx1ZXM6PC9kdD4KPGRkPgo8cHJlPjB8MTwvcHJl Pgo8L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8ZGQ+CjxwcmU+MTwvcHJlPgo8L2RkPgo8L2Rs Pgo8aDQ+Y2F0ZWdvcnlfaWQ8L2g0Pgo8cD5Vc2VkIHRvIHJlc3RyaWN0IHRoZSBldmVudHMg dG8gdGhvc2Ugb2YgYSBwYXJ0aWN1bGFyIGNhdGVnb3J5IG9yIGNhdGVnb3JpZXMuPC9wPgo8 cD5FeGFtcGxlIHVzYWdlOjwvcD4KPGRsPgo8ZHQ+U2luZ2xlIGNhdGVnb3J5ICh3aGVyZSBj YXRlZ29yeSYjODIxNztzIElEPTIpOjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50 cyBmb3JtPSJmb3JtX25hbWUiIGNhdGVnb3J5X2lkPSIyIiAvPjwvY29kZT48L2RkPgo8ZHQ+ TXVsdGlwbGUgY2F0ZWdvcmllcyAod2hlcmUgY2F0ZWdvcnkmIzgyMTc7cyBJRCBpcyBpbiBh cnJheSgyLDQpKTo8L2R0Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9y bV9uYW1lIiBjYXRlZ29yeV9pZD0iMiw0IiAvPjwvY29kZT48L2RkPgo8ZHQ+VmFsdWVzOjwv ZHQ+CjxkZD4KPHByZT5WYWxpZCBJRCBmcm9tIHR4cF9qbWNfZXZlbnRfY2F0ZWdvcnk8L3By ZT4KPC9kZD4KPGR0PkRlZmF1bHQ6PC9kdD4KPGRkPgo8cHJlPk5VTEw8L3ByZT4KPC9kZD4K PC9kbD4KPGg0PnZlbnVlX2lkPC9oND4KPHA+VXNlZCB0byByZXN0cmljdCB0aGUgZXZlbnRz IHRvIHRob3NlIHRoYXQgd2lsbCBvY2N1ciBhdCBhIHNwZWNpZmllZCB2ZW51ZSBvciB2ZW51 ZXMuPC9wPgo8cD5FeGFtcGxlIHVzYWdlOjwvcD4KPGRsPgo8ZHQ+U2luZ2xlIHZlbnVlICh3 aGVyZSB2ZW51ZeKAmXMgSUQ9Mik6PC9kdD4KPGRkPjxjb2RlPjwgdHhwIDpqbWNfZXZlbnRz IGZvcm09ImZvcm1fbmFtZSIgdmVudWVfaWQ9IjIiIC8+PC9jb2RlPjwvZGQ+CjxkdD5NdWx0 aXBsZSB2ZW51ZXMgKHdoZXJlIHZlbnVl4oCZcyBJRCBpcyBpbiBhcnJheSgyLDQpKTo8L2R0 Pgo8ZGQ+PGNvZGU+PCB0eHAgOmptY19ldmVudHMgZm9ybT0iZm9ybV9uYW1lIiB2ZW51ZV9p ZD0iMiw0IiAvPjwvY29kZT48L2RkPgo8ZHQ+VmFsdWVzOjwvZHQ+CjxkZD4KPHByZT5WYWxp ZCBJRCBmcm9tIHR4cF9qbWNfZXZlbnRfdmVudWU8L3ByZT4KPC9kZD4KPGR0PkRlZmF1bHQ6 PC9kdD4KPGRkPgo8cHJlPk5VTEw8L3ByZT4KPC9kZD4KPC9kbD4KPGg0PmV2ZW50X2lkPC9o ND4KPHA+VXNlZCB0byByZXN0cmljdCB0aGUgZXZlbnRzIHRvIGEgcGFydGljdWxhciBldmVu dCBvciBncm91cCBvZiBldmVudHMuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBvdmVycmlkZXMg PHN0cm9uZz5hbGw8L3N0cm9uZz4gb3RoZXIgdmFyaWFibGVzITwvcD4KPHA+RXhhbXBsZSB1 c2FnZTo8L3A+CjxkbD4KPGR0PlNpbmdsZSBldmVudCAod2hlcmUgZXZlbnTigJlzIElEPTIp OjwvZHQ+CjxkZD48Y29kZT48IHR4cCA6am1jX2V2ZW50cyBmb3JtPSJmb3JtX25hbWUiIGV2 ZW50X2lkPSIyIiAvPjwvY29kZT48L2RkPgo8ZHQ+TXVsdGlwbGUgZXZlbnRzICh3aGVyZSBl dmVudOKAmXMgSUQgaXMgaW4gYXJyYXkoMiw0KSk6PC9kdD4KPGRkPjxjb2RlPjwgdHhwIDpq bWNfZXZlbnRzIGZvcm09ImZvcm1fbmFtZSIgZXZlbnRfaWQ9IjIsNCIgLz48L2NvZGU+PC9k ZD4KPGR0PlZhbHVlczo8L2R0Pgo8ZGQ+CjxwcmU+VmFsaWQgSUQgZnJvbSB0eHBfam1jX2V2 ZW50PC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHByZT5OVUxMPC9wcmU+ CjwvZGQ+CjwvZGw+CjxoND5zb3J0X2J5PC9oND4KPHA+UHV0cyBpbiBwbGFjZSB0aGUgTXlT UUwgc29ydCBieSBhIHZhcmlhYmxlIG5hbWUuIFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBz b3J0X29yZGVyLjwvcD4KPGRsPgo8ZHQ+VmFsdWVzOjwvZHQ+CjxkZD4KPHByZT5JRCB8IG5h bWUgfCBzdGFydF9EYXRlVGltZSB8IGZpbmlzaF9EYXRlVGltZSB8IEF1dGhvcklEIHwgTGFz dE1vZElEIHwgVmVudWVJRCB8IFByaWNlIHwgT3RoZXJCYW5kcyB8IE90aGVyQmFuZHNfaHRt bCB8IE90aGVySW5mbyB8T3RoZXJJbmZvX2h0bWwgfCBDYXRlZ29yeUlEPC9wcmU+CjwvZGQ+ CjxkdD5EZWZhdWx0OjwvZHQ+CjxkZD4KPHByZT5zdGFydF9EYXRlVGltZTwvcHJlPgo8L2Rk Pgo8L2RsPgo8aDQ+c29ydF9vcmRlcjwvaDQ+CjxwPkRldGVybWluZ3MgdGhlIG9yZGVyIGlu IHdoaWNoIHRoZSBldmVudHMgd2lsbCBiZSBkaXNwbGF5ZWQuPC9wPgo8ZGw+CjxkdD5WYWx1 ZXM6PC9kdD4KPGRkPgo8cHJlPmFzY3xkZXNjPC9wcmU+CjwvZGQ+CjxkdD5EZWZhdWx0Ojwv ZHQ+CjxkZD4KPHByZT5hc2M8L3ByZT4KPC9kZD4KPC9kbD4KPGgyPkZvcm1zPC9oMj4KPHA+ RXZlbnRzIGFuZCB2ZW51ZXMgZWFjaCBoYXZlIHRoZWlyIG93biBmb3JtcyB3aXRoIHRoZWly IG93biB2YXJpYWJsZXMuPC9wPgo8aDM+RXZlbnQgRm9ybXM8L2gzPgo8aDQ+RXZlbnQgTmFt ZTwvaDQ+CjxoND5FdmVudCBJRDwvaDQ+CjxoND5FdmVudCBQcmljZTwvaDQ+CjxoND5PdGhl ciBCYW5kczwvaDQ+CjxwPkluc2VydHMgdGhlIGh0bWwgZm9yIG90aGVyIGJhbmQgaW5mb3Jt YXRpb24uPC9wPgo8aDQ+T3RoZXIgSW5mb3JtYXRpb248L2g0Pgo8aDM+VmVudWUgRm9ybXM8 L2gzPgo8cD5WZW51ZSBmb3JtIG9wdGlvbnMgY2FuIGJlIGNhbGxlZCBlaXRoZXIgZnJvbSB0 aGUgZXZlbnQgZm9ybSBkaXJlY3RseSwgb3IgZnJvbSBhIHNlcGFyYXRlIGZvcm0gdXNpbmcg dGhlIHRhZzo8L3A+CjxoND5WZW51ZSBOYW1lPC9oND4KPGg0PlZlbnVlIElEPC9oND4KPGg0 PlZlbnVlIEFkZHJlc3MgMTwvaDQ+CjxoND5WZW51ZSBBZGRyZXNzIDI8L2g0Pgo8aDQ+VmVu dWUgU3VidXJiPC9oND4KPGg0PlZlbnVlIFN0YXRlPC9oND4KPGg0PlZlbnVlIENvdW50cnk8 L2g0Pgo8aDQ+VmVudWUgUG9zdGNvZGU8L2g0Pgo8aDQ+VmVudWUgUGhvbmU8L2g0Pgo8aDQ+ VmVudWUgVVJMPC9oND4KPGg0PlZlbnVlIEVtYWlsPC9oND4KPGg0PlZlbnVlIE90aGVyIElu Zm9ybWF0aW9uPC9oND4KPGgzPlVzZWZ1bCBGdW5jdGlvbjwvaDM+CjxwPkluIG9yZGVyIHRv IGV4ZWN1dGUgYSBmZXcgbW9yZSBvcHRpb25zLCB0aGVyZSBpcyBhIHJlcXVpcmVtZW50IHRv IG1hbmlwdWxhdGUgdGhpbmdzIHN1Y2ggYXMgZGF0ZXMuPC9wPgo8aDQ+RXZlbnQgVGltZXM8 L2g0Pgo8cD5FdmVudCB0aW1lcyBnaXZlIG91dHB1dCBvZiBlaXRoZXIgdGhlIHN0YXJ0IG9y IGZpbmlzaCBkYXRlIGFuZCB0aW1lIG9mIGFuIGV2ZW50IGFuZCB1c2VzIHRoZSA8YSBocmVm PSJodHRwOi8vd3d3LnBocC5uZXQvZGF0ZXRpbWUiPlBIUCBEYXRlVGltZSBmdW5jdGlvbmFs aXR5PC9hPiBmb3IgZm9ybWF0dGluZy4gPGNvZGU+PCB0eHAgOmptY19ldmVudF90aW1lIHBo cF9kYXRlPSJwaHBEYXRlRnVuY3Rpb24iIC8+PC9jb2RlPjwvcD4KPHA+T3B0aW9uczo8L3A+ CjxwPjxzdHJvbmc+c3RhcnQ8L3N0cm9uZz4gKGlmIHN0YXJ0PTAgdGhlbiBnaXZlcyBmaW5p c2ggdGltZSk8L3A+CjxkbD4KPGR0PlZhbHVlczwvZHQ+CjxkZD4KPHByZT4wfDE8L3ByZT4K PC9kZD4KPGR0PkRlZmF1bHQ8L2R0Pgo8ZGQ+CjxwcmU+MTwvcHJlPgo8L2RkPgo8L2RsPgo8 aDQ+SWYgVmFyaWFibGU8L2g0Pgo8cD5DaGVja3MgdG8gc2VlIGlmIGEgdmFyaWFibGUgZXhp c3RzLiBJZiBpdCBkb2VzIG5vdCwgdGhlbiBkZWxldGVzIHdoYXQgdGhlIHRhZ3MgZW5jbG9z ZS48L3A+CjxwIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCByZWQ7IG1hcmdpbjogMTBweCA1 MHB4OyBwYWRkaW5nOiAxMHB4OyBiYWNrZ3JvdW5kOiAjZmZlZWVlIG5vbmUgcmVwZWF0IHNj cm9sbCAwJSA1MCU7IGNvbG9yOiBkYXJrcmVkOyAtbW96LWJhY2tncm91bmQtY2xpcDogLW1v ei1pbml0aWFsOyAtbW96LWJhY2tncm91bmQtb3JpZ2luOiAtbW96LWluaXRpYWw7IC1tb3ot YmFja2dyb3VuZC1pbmxpbmUtcG9saWN5OiAtbW96LWluaXRpYWwiPjxzdHJvbmc+V2Fybmlu Zzwvc3Ryb25nPjogRXhwZXJpbWVudGFsIChzdGlsbCwgc29ycnkgZ3V5cyBvPSkgKTwvcD4K PHA+PGNvZGU+PCB0eHAgOmptY19pZl92YXJpYWJsZSB2YXJpYWJsZT0idmFyaWFibGVOYW1l Ij48IC8gdHhwIDpqbWNfaWZfdmFyaWFibGU+PC9jb2RlPk9wdGlvbnM6PC9wPgo8cD48c3Ry b25nPnZhcmlhYmxlPC9zdHJvbmc+PC9wPgo8ZGw+CjxkdD5WYWx1ZXM6PC9kdD4KPGRkPgo8 cHJlPmFueSBpbiB0aGUgZGF0YWJhc2UgZm9yIGEgcGFydGljdWxhciBldmVudCBvciB2ZW51 ZTwvcHJlPgo8L2RkPgo8ZHQ+RGVmYXVsdDo8L2R0Pgo8ZGQ+CjxwcmU+TlVMTDwvcHJlPgo8 L2RkPgo8L2RsPgo8aDI+RnV0dXJlIFVwZGF0ZXM8L2gyPgo8cD5UaGUgZm9sbG93aW5nIGZ1 dHVyZSB1cGRhdGVzIGFyZSBiZWluZyBjb25zaWRlcmVkIG9yIHdvcmtlZCBvbjo8L3A+Cjx1 bD4KPGxpPlJTUyBmZWVkIGZvciB0aGUgRXZlbnQgTWFuYWdlciAobWFueSBvZiB5b3Ugd2ls bCBmaW5kIHRoaXMgYSBiaWcgYm9udXMhKTwvbGk+CjxsaT5Qcm9wZXIgQWRtaW4gUGFuZWwg KHRoaXMgd2lsbCBkZWFsIHdpdGggc29tZSB0aW1lIGlzc3Vlcywgd2hlcmUgY3VycmVudGx5 IGhhdmUgYWxsb3dlZCBvbmx5IDAwLCAxNSwgMzAgYW5kIDQ1IG1pbnV0ZXMgZm9yIHRoZSB0 aW1lLCBmdXR1cmUgb3B0aW9ucyB3aWxsIGFsbG93IHRoZSBhZG1pbmlzdHJhdG9ycyB0byBk ZWNpZGVkIGhvdyB0aGV5IHdhbnQgdGhlIG1pbnV0ZXMgdG8gYmUgbGltaXRlZCkuPC9saT4K PGxpPlZlbnVlIGRyb3Bkb3duIGFuZCBsaXN0cyBieSA8ZW0+Y291bnRyeTwvZW0+IHRoZW4g PGVtPnN0YXRlPC9lbT4gKHdoZXJlIGFwcGxpY2FibGUpLjwvbGk+CjxsaT5Ecm9wZG93biBp biBBZGQgVmVudWUgdG8gdXNlIDxlbT5jb3VudHJ5IGNvZGVzPC9lbT48L2xpPgo8bGk+SW5z dGFsbCBwYWNrKHMpIHdpdGggTmV3IFNvdXRoIFdhbGVzIGFuZCBWaWN0b3JpYW4gbGl2ZSBt dXNpYyB2ZW51ZXMgKEkmIzgyMTc7bSBhbiBhdXNzaWUgYWZ0ZXIgYWxsISkuPC9saT4KPC91 bD4KPGgyPkFkZGl0aW9uYWwgRmVhdHVyZXMgYW5kIEJ1ZyBGaXhlczwvaDI+CjxwPlRoZSBm b2xsb3dpbmcgYnVncyBoYXZlIGJlZW4gZml4ZWQgYW5kIGZlYXR1cmVzIGFkZGVkOjwvcD4K PGgzPnYwLjMgYmV0YTwvaDM+Cjx1bD4KPGxpPlNwbGl0IGludG8gdHdvIHBsdWdpbnM7PC9s aT4KPGxpPldyYXB0YWdzLCBJRCBhbmQgQ2xhc3NOYW1lcyBhdmFpbGFibGU7PC9saT4KPGxp PmR0c3RhcnQgYW5kIGR0ZW5kIGZvciBtaWNyb2Zvcm1hdHM8L2xpPgo8L3VsPgo8aDM+djAu MiBiZXRhPC9oMz4KPHVsPgo8bGk+Q2F0ZWdvcmllczwvbGk+CjxsaT5DdXJyZW50IGV2ZW50 IG9wdGlvbiBmb3IgY2FsbGluZyBvZjwvbGk+CjwvdWw+IjtzOjQ6ImNvZGUiO3M6NTI5OTk6 Ii8vIFBsdWdpbiBjb2RlIGdvZXMgaGVyZS4gIE5vIG5lZWQgdG8gZXNjYXBlIHF1b3Rlcy4K CgkvLyBBZGQgYSBuZXcgdGFiIHRvIHRoZSBDb250ZW50IGFyZWEuCgkvLyAidGVzdCIgaXMg dGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgZXZlbnQ7ICJ0ZXN0aW5nIiBpcyB0aGUgZGlz cGxheWVkIHRpdGxlCglpZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7CgkJLy8gQWRk IG5ldyB0YWJzIHVuZGVyICJHaWcgR3VpZGUiIGZvciAiR2lncyIsICJBZGQgYSBHaWciLCAi VmVudWUiIGFuZCAiQWRkIGEgVmVudWUiCgoJCWFkZF9wcml2cygnam1jX2V2ZW50X21hbmFn ZXInLCcxLDIsMyw0LDUsNicpOwoJCXJlZ2lzdGVyX3RhYigiY29udGVudCIsICJqbWNfZXZl bnRfbWFuYWdlciIsICJFdmVudCBNYW5hZ2VyIik7CgoJCXJlZ2lzdGVyX2NhbGxiYWNrKCJq bWNfZXZlbnRfbWFuYWdlciIsICJqbWNfZXZlbnRfbWFuYWdlciIpOwoJCXJlZ2lzdGVyX2Nh bGxiYWNrKCJqbWNfZXZlbnRfbWFuYWdlciIsICJqbWNfZXZlbnRfY2F0ZWdvcmllcyIpOwoJ CXJlZ2lzdGVyX2NhbGxiYWNrKCJqbWNfZXZlbnRfbWFuYWdlciIsICJqbWNfZXZlbnRfbWFu YWdlcl92ZW51ZSIpOwoKCQlhZGRfcHJpdnMoJ3RhYi5qbWNfZXZlbnRfbWFuYWdlcl9wcmVm cycsJzEsMicpOwoJCXJlZ2lzdGVyX3RhYigiZXh0ZW5zaW9ucyIsICJqbWNfZXZlbnRfbWFu YWdlcl9wcmVmcyIsICJqbWNfZV9tIHByZWZzIik7CgkJcmVnaXN0ZXJfY2FsbGJhY2soImpt Y19ldmVudF9tYW5hZ2VyX3ByZWZzIiwgImptY19ldmVudF9tYW5hZ2VyX3ByZWZzIik7CgoJ CS8vIENyZWF0ZSBoYW5kbGVycyBmb3IgdGhlIEdpZyBndWlkZSB0YWJzCgl9CgoJLy8gTWFp biBmdW5jdGlvbiBtYW5hZ2VyIC0gYWN0cyBlc3NlbnRpYWxseSBhcyBhIGdpYW50IHN3aXRj aAoJZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXIoJGV2ZW50LCAkc3RlcCkgewoJCS8vIERl Y2xhcmUgZ2xvYmFsIHZhcmlhYmxlIGFycmF5cwoJCWdsb2JhbCAkdmFyc19ldmVudHMsICR2 YXJzX3ZlbnVlcywgJHZhcnNfY2F0ZWdvcmllczsKCQkkdmFyc19ldmVudHMgPSBhcnJheSgi SUQiLCAiQ2F0ZWdvcnlJRCIsICJzRGF0ZVRpbWUiLCAiZkRhdGVUaW1lIiwgIm5hbWUiLCAi QXV0aG9ySUQiLCAiTGFzdE1vZCIsICJMYXN0TW9kSUQiLCAiVmVudWVJRCIsICJQcmljZSIs ICJPdGhlckJhbmRzIiwgIk90aGVyQmFuZHNfaHRtbCIsICJPdGhlckluZm8iLCAiT3RoZXJJ bmZvX2h0bWwiLCAiY29tbWVudHNfY291bnQiKTsKCQkkdmFyc192ZW51ZXMgPSBhcnJheSgi SUQiLCAiQ2F0ZWdvcnlJRCIsICJpbWFnZUlEIiwgIm5hbWUiLCAiYWRkcmVzczEiLCAiYWRk cmVzczIiLCAic3VidXJiIiwgInN0YXRlIiwgImNvdW50cnkiLCAicG9zdGNvZGUiLCAicGhv bmUiLCAidXJsIiwgImVtYWlsIiwgIk90aGVySW5mbyIsICJPdGhlckluZm9faHRtbCIsICJj b21tZW50c19jb3VudCIpOwoJCSR2YXJzX2NhdGVnb3JpZXMgPSBhcnJheSgiSUQiLCAibmFt ZSIsICJPdGhlckluZm8iLCAiT3RoZXJJbmZvX2h0bWwiKTsKCgkJLy8gQ3JlYXRlIHRoZSB0 b3AgbWVudSBhcnJheXMKCQkkdG9wX21lbnUgPSBhcnJheSgpOwoJCSR0b3BfbWVudVsnbWFp biddID0gdHIodGRjcygiIiw0KSkudHIodGQoIjxhIGhyZWY9XCI/ZXZlbnQ9am1jX2V2ZW50 X21hbmFnZXJcIiBjbGFzcz1cIm5hdmxpbmtcIj5FdmVudCBNYW5hZ2VyPC9hPiIpLnRkKCI8 YSBocmVmPVwiP2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJiMzODtzdGVwPXZlbnVlX21hbmFn ZXJcIiBjbGFzcz1cIm5hdmxpbmtcIj5WZW51ZSBNYW5hZ2VyPC9hPiIpLnRkKCI8YSBocmVm PVwiP2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJiMzODtzdGVwPWNhdGVnb3J5X21hbmFnZXJc IiBjbGFzcz1cIm5hdmxpbmtcIj5DYXRlZ29yeSBNYW5hZ2VyPC9hPiIpLnRkKCI8YSBocmVm PVwiP2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJiMzODtzdGVwPWZlZWRfbWFuYWdlclwiIGNs YXNzPVwibmF2bGlua1wiPlJTUyBGZWVkPC9hPiIpKTsKCQkkdG9wX21lbnVbJ2V2ZW50cydd ID0gdHIodGQoIjxhIGhyZWY9XCI/ZXZlbnQ9am1jX2V2ZW50X21hbmFnZXImIzM4O3N0ZXA9 ZXZlbnRfYWRkXCIgY2xhc3M9XCJuYXZsaW5rXCI+QWRkIEV2ZW50PC9hPiIpLnRkKCI8YSBo cmVmPVwiP2V2ZW50PWptY19ldmVudF9tYW5hZ2VyXCIgY2xhc3M9XCJuYXZsaW5rXCI+VXBj b21pbmcgRXZlbnRzPC9hPiIpLnRkKCI8YSBocmVmPVwiP2V2ZW50PWptY19ldmVudF9tYW5h Z2VyJiMzODtzdGVwPWV2ZW50c19wYXN0XCIgY2xhc3M9XCJuYXZsaW5rXCI+UGFzdCBFdmVu dHM8L2E+IikudGQoIiIpKTsKCQkkdG9wX21lbnVbJ3ZlbnVlcyddID0gdHIodGQoIiIpLnRk KCI8YSBocmVmPVwiP2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJiMzODtzdGVwPXZlbnVlX2Fk ZFwiIGNsYXNzPVwibmF2bGlua1wiPkFkZCBWZW51ZTwvYT4iKS50ZCgiPGEgaHJlZj1cIj9l dmVudD1qbWNfZXZlbnRfbWFuYWdlciYjMzg7c3RlcD12ZW51ZV9tYW5hZ2VyXCIgY2xhc3M9 XCJuYXZsaW5rXCI+VmVudWUgTGlzdGluZzwvYT4iKS50ZCgiIikpOwoJCSR0b3BfbWVudVsn Y2F0ZWdvcmllcyddID0gdHIodGQoIiIpLnRkKCI8YSBocmVmPVwiP2V2ZW50PWptY19ldmVu dF9tYW5hZ2VyJiMzODtzdGVwPWNhdGVnb3J5X2FkZFwiIGNsYXNzPVwibmF2bGlua1wiPkFk ZCBDYXRlZ29yeTwvYT4iKS50ZCgiPGEgaHJlZj1cIj9ldmVudD1qbWNfZXZlbnRfbWFuYWdl ciYjMzg7c3RlcD1jYXRlZ29yeV9tYW5hZ2VyXCIgY2xhc3M9XCJuYXZsaW5rXCI+Q2F0ZWdv cnkgTGlzdGluZzwvYT4iKS50ZCgiIikpOwoJCSR0b3BfbWVudVsncnNzX2ZlZWRzJ10gPSB0 cih0ZGNzKCJUaGlzIGZlYXR1cmUgaXMgeWV0IHRvIGJlIGltcGxlbWVudGVkLiBTb3JyeSBn dXlzIDooIiw0KSk7CgoJCS8vIE91dHB1dCB0aGUgdG9wIGZvciBkZWJ1Z2dpbmcgLSB3aWxs IHN0YXkgVU5USUwgZnVsbCByZWxlYXNlCgkJcGFnZXRvcCgiVGV4dHBhdHRlcm4iLCAiRXZl bnQ6ICRldmVudDsgU3RlcDogJHN0ZXAuIik7CgoJCS8vIEh1ZyBldmVyeXRoaW5nIGluIGEg bmljZSBsaXR0bGUgRElWIQoJCWVjaG8gIjxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOjNlbTsg bWFyZ2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXJcIj5cclxuIjsKCgkJLy8gUnVuIHRo ZSBpbnN0YWxsZXIgdG8gZW5zdXJlIHRoYXQgdGFibGVzIGV4aXN0IQoJCS8vIFJldHVybnMg ZXJyb3JzIChpZiBhbnkpCgkJZWNobyBqbWNfZXZlbnRfbWFuYWdlcl9pbnN0YWxsKCk7CgoJ CS8qIENhc2UgR3VpZGUKCQkJVmVudWVzCgkJCQl2ZW51ZV9tYW5hZ2VyCgkJCQkJTGlzdGlu ZyBvZiB2ZW51ZXMgYW5kIHN1YmxpbmsgdG8gYWRkIHNlY3Rpb25zCgkJCQl2ZW51ZV9hZGQK CQkJCQlBZGQgYSBuZXcgdmVudWUgdG8gdGhlIGV4aXN0aW5nIGxpc3QKCQkJCXZlbnVlX3Bv c3QKCQkJCQlOZXcgdmVudWUgaXMgZW50ZXJlZCBpbnRvIHRoZSBkYXRhYmFzZQoJCQkJdmVu dWVfZWRpdAoJCQkJCUVkaXQgYW4gZXhpc3RpbmcgZW50cnkKCQkJCXZlbnVlX3NhdmUKCQkJ CQlVcG9uIGNvbXBsZXRpb24gb2YgZWRpdGluZyB3aWxsIHNhdmUgY29udGVudHMKCQkJCXZl bnVlX211bHRpX2VkaXQKCQkJCQlEZWxldGluZyBvZiB2ZW51ZXMKCQkJRXZlbnRzCgkJCQlk ZWZhdWx0CgkJCQkJTGlzdGluZyBvZiBldmVudHMgKGRlZmF1bHQgcGFnZSBmb3IgdGhlIHBs dWdpbikuCgoJCSovCgkJc3dpdGNoKCRzdGVwKQoJCXsKCQkJLyogXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8gKi8KCQkJLyogCQlWRU5VRSAgICAgICBNQU5BR0VSCQkgKi8KCQkJ LyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCQkJY2FzZSAidmVudWVfbWFu YWdlciI6CgkJCQllY2hvIHRhZygiVmVudWUgTWFuYWdlciIsICJoMiIpOwoJCQkJZWNobyBz dGFydFRhYmxlKCdsaXN0Jyk7CgkJCQllY2hvICR0b3BfbWVudVsnbWFpbiddOwoJCQkJZWNo byAkdG9wX21lbnVbJ3ZlbnVlcyddOwoJCQkJZWNobyBlbmRUYWJsZSgpOwoJCQkJZWNobyB0 YWcoIlZlbnVlcyIsICJoMyIpOwoJCQkJam1jX2V2ZW50X21hbmFnZXJfdmVudWVzKCk7CgkJ CQlicmVhazsKCQkJY2FzZSAidmVudWVfYWRkIjoKCQkJCWVjaG8gdGFnKCJWZW51ZSBNYW5h Z2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRv cF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsndmVudWVzJ107CgkJCQllY2hv IGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiVmVudWVzIiwgImgzIik7CgkJCQlqbWNfZXZl bnRfbWFuYWdlcl92ZW51ZV9mb3JtKCRzdGVwKTsKCQkJCWJyZWFrOwoJCQljYXNlICJ2ZW51 ZV9wb3N0IjoKCQkJCWVjaG8gdGFnKCJWZW51ZSBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hv IHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQll Y2hvICR0b3BfbWVudVsndmVudWVzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQlpZigh am1jX2V2ZW50X21hbmFnZXJfdmVudWVfcG9zdCgpKQoJCQkJewoJCQkJCWVjaG8gdGFnKCJF cnJvciBTYXZpbmcgVHJ5IEFnYWluIiwgImgzIik7CgkJCQkJam1jX2V2ZW50X21hbmFnZXJf dmVudWVfZm9ybSgkc3RlcCwgdHJ1ZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJZWNo byB0YWcoIlZlbnVlIExpc3RpbmciLCAiaDMiKTsKCQkJCQlqbWNfZXZlbnRfbWFuYWdlcl92 ZW51ZXMoKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICJ2ZW51ZV9lZGl0IjoKCQkJCWVj aG8gdGFnKCJWZW51ZSBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xp c3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsn dmVudWVzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiRWRpdCBWZW51 ZSIsICJoMyIpOwoJCQkJam1jX2V2ZW50X21hbmFnZXJfdmVudWVfZm9ybSgkc3RlcCwgdHJ1 ZSk7CgkJCQlicmVhazsKCQkJY2FzZSAidmVudWVfc2F2ZSI6CgkJCQllY2hvIHRhZygiVmVu dWUgTWFuYWdlciIsICJoMiIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CgkJCQll Y2hvICR0b3BfbWVudVsnbWFpbiddOwoKCQkJCWVjaG8gJHRvcF9tZW51Wyd2ZW51ZXMnXTsK CQkJCWVjaG8gZW5kVGFibGUoKTsKCQkJCWlmKCFqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZV9z YXZlKCkpCgkJCQl7CgkJCQkJZWNobyB0YWcoIkVycm9yIFNhdmluZyBUcnkgQWdhaW4iLCAi aDMiKTsKCQkJCQlqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZV9mb3JtKCRzdGVwLCB0cnVlKTsK CQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQllY2hvIHRhZygiVmVudWUgTGlzdGluZyIsICJo MyIpOwoJCQkJCWptY19ldmVudF9tYW5hZ2VyX3ZlbnVlcygpOwoJCQkJfQoJCQkJYnJlYWs7 CgkJCWNhc2UgInZlbnVlX211bHRpX2VkaXQiOgoJCQkJam1jX2V2ZW50X21hbmFnZXJfbXVs dGlfZWRpdCgidHhwX2ptY19ldmVudF92ZW51ZSIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCds aXN0Jyk7CgkJCQllY2hvICR0b3BfbWVudVsnbWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVb J3ZlbnVlcyddOwoJCQkJZWNobyBlbmRUYWJsZSgpOwoJCQkJZWNobyB0YWcoIkNhdGVnb3J5 IExpc3RpbmciLCAiaDMiKTsKCQkJCWptY19ldmVudF9tYW5hZ2VyX3ZlbnVlcygpOwoJCQkJ YnJlYWs7CgkJCWNhc2UgImV2ZW50X3ZlbnVlX2NvbW1lbnRzIjoKCQkJCWVjaG8gdHIodGQo IlRvIGNvbWUiKSk7CgkJCQlicmVhazsKCQkJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8gKi8KCQkJLyogCQlDQVRFR09SWSAgIE1BTkFHRVIJCSAqLwoJCQkvKiAtXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJCQljYXNlICJjYXRlZ29yeV9tYW5hZ2VyIjoK CQkJCWVjaG8gdGFnKCJDYXRlZ29yeSBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0 VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0 b3BfbWVudVsnY2F0ZWdvcmllcyddOwoJCQkJZWNobyBlbmRUYWJsZSgpOwoJCQkJZWNobyB0 YWcoIkNhdGVnb3JpZXMiLCAiaDMiKTsKCQkJCWptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3Jp ZXMoKTsKCQkJCWJyZWFrOwoJCQljYXNlICJjYXRlZ29yeV9hZGQiOgoJCQkJZWNobyB0YWco IkNhdGVnb3J5IE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcp OwoJCQkJZWNobyAkdG9wX21lbnVbJ21haW4nXTsKCQkJCWVjaG8gJHRvcF9tZW51WydjYXRl Z29yaWVzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiQ2F0ZWdvcnki LCAiaDMiKTsKCQkJCWptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3J5X2Zvcm0oJHN0ZXApOwoJ CQkJYnJlYWs7CgkJCWNhc2UgImNhdGVnb3J5X3Bvc3QiOgoJCQkJZWNobyB0YWcoIkNhdGVn b3J5IE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOwoJCQkJ ZWNobyAkdG9wX21lbnVbJ21haW4nXTsKCQkJCWVjaG8gJHRvcF9tZW51WydjYXRlZ29yaWVz J107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQlpZigham1jX2V2ZW50X21hbmFnZXJfY2F0 ZWdvcnlfcG9zdCgpKQoJCQkJewoJCQkJCWVjaG8gdGFnKCJFcnJvciBTYXZpbmcgVHJ5IEFn YWluIiwgImgzIik7CgkJCQkJam1jX2V2ZW50X21hbmFnZXJfY2F0ZWdvcnlfZm9ybSgkc3Rl cCwgdHJ1ZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJZWNobyB0YWcoIkNhdGVnb3J5 IExpc3RpbmciLCAiaDMiKTsKCQkJCQlqbWNfZXZlbnRfbWFuYWdlcl9jYXRlZ29yaWVzKCk7 CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAiY2F0ZWdvcnlfZWRpdCI6CgkJCQllY2hvIHRh ZygiVmVudWUgTWFuYWdlciIsICJoMiIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7 CgkJCQllY2hvICR0b3BfbWVudVsnbWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVbJ2NhdGVn b3JpZXMnXTsKCQkJCWVjaG8gZW5kVGFibGUoKTsKCQkJCWVjaG8gdGFnKCJFZGl0IENhdGVn b3J5IiwgImgzIik7CgkJCQlqbWNfZXZlbnRfbWFuYWdlcl9jYXRlZ29yeV9mb3JtKCRzdGVw LCB0cnVlKTsKCQkJCWJyZWFrOwoJCQljYXNlICJjYXRlZ29yeV9zYXZlIjoKCQkJCWVjaG8g dGFnKCJWZW51ZSBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3Qn KTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsnY2F0 ZWdvcmllcyddOwoJCQkJZWNobyBlbmRUYWJsZSgpOwoJCQkJaWYoIWptY19ldmVudF9tYW5h Z2VyX2NhdGVnb3J5X3NhdmUoKSkKCQkJCXsKCQkJCQllY2hvIHRhZygiRXJyb3IgU2F2aW5n IFRyeSBBZ2FpbiIsICJoMyIpOwoJCQkJCWptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3J5X2Zv cm0oJHN0ZXAsIHRydWUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWVjaG8gdGFnKCJD YXRlZ29yeSBMaXN0aW5nIiwgImgzIik7CgkJCQkJam1jX2V2ZW50X21hbmFnZXJfY2F0ZWdv cmllcygpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgImNhdGVnb3J5X211bHRpX2VkaXQi OgoJCQkJam1jX2V2ZW50X21hbmFnZXJfbXVsdGlfZWRpdCgidHhwX2ptY19ldmVudF9jYXRl Z29yeSIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CgkJCQllY2hvICR0b3BfbWVu dVsnbWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVbJ2NhdGVnb3JpZXMnXTsKCQkJCWVjaG8g ZW5kVGFibGUoKTsKCQkJCWVjaG8gdGFnKCJDYXRlZ29yeSBMaXN0aW5nIiwgImgzIik7CgkJ CQlqbWNfZXZlbnRfbWFuYWdlcl9jYXRlZ29yaWVzKCk7CgkJCQlicmVhazsKCQkJLyogXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCQkJLyogCQlGRUVEICAgICAgICAgICBN QU5BR0VSCQkgKi8KCQkJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCQkJ Y2FzZSAiZmVlZF9tYW5hZ2VyIjoKCQkJCWVjaG8gdGFnKCJSU1MgTWFuZ2VtZW50IiwgImgy Iik7CgkJCQllY2hvIHRhZygiU29ycnkgZ3V5cywgc3RpbGwgZGV2ZWxvcGluZyB0aGlzIG9u ZSBhbmQgaXMgc3RpbGwgdG8gY29tZS4gSWYgeW91J3ZlIGdvdCBhbnkgaWRlYXMgcGxlYXNl IGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgZXVwaGVtaXplW2F0XWdtYWlsLmNvbSIsInAi KTsKCQkJCWVjaG8gdGFnKCJSZWdhcmRzLCBKb2VsICg8YSBocmVmPVwiaHR0cDovL2V1cGhl bWl6ZS5uZXQvXCI+ZXVwaGVtaXplLm5ldDwvYT4pLiIsInAiKTsKCQkJCWJyZWFrOwoJCQkv KiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJCQkvKiAJCUVWRU5UICAgICAg IE1BTkFHRVIJCSAqLwoJCQkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJ CQljYXNlICJldmVudF9hZGQiOgoJCQkJZWNobyB0YWcoIkV2ZW50IE1hbmFnZXIiLCAiaDIi KTsKCQkJCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOwoJCQkJZWNobyAkdG9wX21lbnVbJ21h aW4nXTsKCQkJCWVjaG8gJHRvcF9tZW51WydldmVudHMnXTsKCQkJCWVjaG8gZW5kVGFibGUo KTsKCQkJCWVjaG8gdGFnKCJBZGQgRXZlbnQiLCAiaDMiKTsKCQkJCWptY19ldmVudF9tYW5h Z2VyX2V2ZW50X2Zvcm0oJHN0ZXApOwoJCQkJYnJlYWs7CgkJCWNhc2UgImV2ZW50X3Bvc3Qi OgoJCQkJZWNobyB0YWcoIkV2ZW50IE1hbmFnZXIiLCAiaDIiKTsKCQkJCWVjaG8gc3RhcnRU YWJsZSgnbGlzdCcpOwoJCQkJZWNobyAkdG9wX21lbnVbJ21haW4nXTsKCQkJCWVjaG8gJHRv cF9tZW51WydldmVudHMnXTsKCQkJCWVjaG8gZW5kVGFibGUoKTsKCQkJCWlmKCFqbWNfZXZl bnRfbWFuYWdlcl9ldmVudF9wb3N0KCkpCgkJCQl7CgkJCQkJZWNobyB0YWcoIkVycm9yIENy ZWF0aW5nIFRyeSBBZ2FpbiIsICJoMyIsICJlcnJvcl93YXJuaW5nIik7CgkJCQkJam1jX2V2 ZW50X21hbmFnZXJfZXZlbnRfZm9ybSgkc3RlcCk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJ CQkJZWNobyB0YWcoIkV2ZW50IExpc3RpbmciLCAiaDMiKTsKCQkJCQlqbWNfZXZlbnRfbWFu YWdlcl9ldmVudHMoKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICJldmVudF9lZGl0IjoK CQkJCWVjaG8gdGFnKCJFdmVudCBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFi bGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3Bf bWVudVsnZXZlbnRzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiRWRp dCBFdmVudCIsICJoMyIpOwoJCQkJam1jX2V2ZW50X21hbmFnZXJfZXZlbnRfZm9ybSgkc3Rl cCwgdHJ1ZSk7CgkJCQlicmVhazsKCQkJY2FzZSAiZXZlbnRfc2F2ZSI6CgkJCQllY2hvIHRh ZygiRXZlbnQgTWFuYWdlciIsICJoMiIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7 CgkJCQllY2hvICR0b3BfbWVudVsnbWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVbJ2V2ZW50 cyddOwoJCQkJZWNobyBlbmRUYWJsZSgpOwoJCQkJaWYoIWptY19ldmVudF9tYW5hZ2VyX2V2 ZW50X3NhdmUoKSkKCQkJCXsKCQkJCQllY2hvIHRhZygiRXJyb3IgU2F2aW5nIFRyeSBBZ2Fp biIsICJoMyIpOwoJCQkJCWptY19ldmVudF9tYW5hZ2VyX2V2ZW50X2Zvcm0oJHN0ZXAsIHRy dWUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWVjaG8gdGFnKCJFdmVudCBMaXN0aW5n IiwgImgzIik7CgkJCQkJam1jX2V2ZW50X21hbmFnZXJfZXZlbnRzKCk7CgkJCQl9CgkJCQli cmVhazsKCQkJY2FzZSAiZXZlbnRfbXVsdGlfZWRpdCI6CgkJCQllY2hvIHRhZygiRXZlbnQg TWFuYWdlciIsICJoMiIpOwoJCQkJam1jX2V2ZW50X21hbmFnZXJfbXVsdGlfZWRpdCgidHhw X2ptY19ldmVudCIpOwoJCQkJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CgkJCQllY2hvICR0 b3BfbWVudVsnbWFpbiddOwoJCQkJZWNobyAkdG9wX21lbnVbJ2V2ZW50cyddOwoJCQkJZWNo byBlbmRUYWJsZSgpOwoJCQkJZWNobyB0YWcoIkV2ZW50IExpc3RpbmciLCAiaDMiKTsKCQkJ CWptY19ldmVudF9tYW5hZ2VyX2V2ZW50cygpOwoJCQkJYnJlYWs7CgkJCWNhc2UgImV2ZW50 c19wYXN0IjoKCQkJCWVjaG8gdGFnKCJFdmVudCBNYW5hZ2VyIiwgImgyIik7CgkJCQllY2hv IHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8gJHRvcF9tZW51WydtYWluJ107CgkJCQll Y2hvICR0b3BfbWVudVsnZXZlbnRzJ107CgkJCQllY2hvIGVuZFRhYmxlKCk7CgkJCQllY2hv IHRhZygiUGFzdCBFdmVudHMiLCAiaDMiKTsKCQkJCWptY19ldmVudF9tYW5hZ2VyX2V2ZW50 cyhmYWxzZSk7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWVjaG8gdGFnKCJFdmVudCBN YW5hZ2VyIiwgImgyIik7CgkJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsKCQkJCWVjaG8g JHRvcF9tZW51WydtYWluJ107CgkJCQllY2hvICR0b3BfbWVudVsnZXZlbnRzJ107CgkJCQll Y2hvIGVuZFRhYmxlKCk7CgkJCQllY2hvIHRhZygiVXBjb21pbmcgRXZlbnRzIiwgImgzIik7 CgkJCQlqbWNfZXZlbnRfbWFuYWdlcl9ldmVudHMoKTsKCQkJCWJyZWFrOwoJCX0KCgkJZWNo byAiPC9kaXY+XHJcbiI7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdl cl9ldmVudHMoKQoJLy8gVXNlOgkJCQlFY2hvZXMgb3V0IHRoZSBiYXNpYyBsaXN0IG9mCgkv LwkJCQlldmVudHMgc2VlbiB3aGVuIGZvciBkZWZhdWx0IHNjcmVlbgoJLy8JCQkJb2Ygam1j X2V2ZW50X21hbmFnZXIuCgkvLyBJbnB1dHM6CQkJJGlzX2Z1dHVyZQoJLy8gT3V0cHV0czoJ CQlOVUxMIChlY2hvcyByZXNwb25zZXMpCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNfZXZlbnRfbWFuYWdl cl9ldmVudHMoJGlzX2Z1dHVyZSA9IHRydWUpCgl7CgkJLy8gVGFrZW4gZnJvbSBleGlzdGlu ZyBUWFAgQ29kZQoJCWV4dHJhY3QoZ2V0X3ByZWZzKCkpOwoJCSRsdmFycyA9IGFycmF5KCJw YWdlIiwic29ydCIsImRpciIsImNyaXQiLCdlZGl0X21ldGhvZCcpOwoJCWV4dHJhY3QoZ3Bz YSgkbHZhcnMpKTsKCQlnbG9iYWwgJHN0ZXA7CgoJCS8vIERlZmF1bHQgZ3JvdXBpbmcgb2Yg ZXZlbnRzCgkJJHRpbWUgPSAidW5peF90aW1lc3RhbXAoc3RhcnRfRGF0ZVRpbWUpIi4oJGlz X2Z1dHVyZT8iPiI6IjwiKS50aW1lKCkuIiAiOwoJCS8vIERlZmF1bHQgc29ydCBzdGFydF9E YXRlVGltZSAodGltZSBvZiBldmVudCBzdGFydGluZykKCQlpZiAoISRzb3J0KSAkc29ydCA9 ICJzdGFydF9EYXRlVGltZSI7CgkJLy8gRGVmYXVsdCBkaXJlY3Rpb24gb2Ygc29ydDogZGVz Y2VuZGluZwoJCWlmICghJGRpcikgJGRpciA9ICJkZXNjIjsKCQkvLyBTZXQgdGhlIGxpbmsg Zm8gaGVhZGVycyB0byB0aGUgb3Bwb3NpdGUgb2YgdGhlIGRpcmVjdGlvbiAoY291bGQgYmUg b3B0aW1pc2VkKQoJCWlmICgkZGlyID09ICJkZXNjIikgeyAkbGlua2RpciA9ICJhc2MiOyB9 IGVsc2UgeyAkbGlua2RpciA9ICJkZXNjIjsgfQoKCQkvLyBHZXQgbnVtYmVyIG9mIGV2ZW50 cwoJCSR0b3RhbCA9IGdldENvdW50KCd0eHBfam1jX2V2ZW50JywiJHRpbWUiKTsKCQkvLyBM aW1pdCBjdXJyZW50bHkgc2V0IHVzaW5nIHBhZ2UncyBsaW1pdAoJCSRsaW1pdCA9ICgkYXJ0 aWNsZV9saXN0X3BhZ2VieSkgPyAkYXJ0aWNsZV9saXN0X3BhZ2VieSA6IDI1OwoJCS8vIE51 bWVyIG9mIHBhZ2VzIGlzIHRoZSByb3VuZGVkIHVwIHZhbHVlIG9mIHRoZSB0b3RhbCBlbnRy aWVzIGRpdmlkZWQgYnkgcGFnZSBsaW1pdAoJCSRudW1QYWdlcyA9IGNlaWwoJHRvdGFsLyRs aW1pdCk7CgkJLy8gU2V0IGRlZmF1bHQgcGFnZQoJCSRwYWdlID0gKCEkcGFnZSkgPyAxIDog JHBhZ2U7CgoJCS8vIE9mZnNldCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgdG8gdGhlIHBhZ2Ug KHNpbmNlIHdlIHN0YXJ0IHdpdGggdGhlIHplcm90aCByZWNvcmQgb24gcGFnZSBvbmUpCgkJ JG9mZnNldCA9ICgkcGFnZSAtIDEpICogJGxpbWl0OwoKCQllY2hvIGptY19uYXZfZm9ybSgn am1jX2V2ZW50X21hbmFnZXInLCAoJGlzX2Z1dHVyZT8nJzonZXZlbnRzX3Bhc3QnKSwgJHBh Z2UsICRudW1QYWdlcywgJHNvcnQsICRkaXIpOwoKCQkvLyBTdGFydCBnZXR0aW5nIHJvd3MK CQkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoCgkJCSIqLCB1bml4X3RpbWVzdGFtcChzdGFydF9E YXRlVGltZSkgYXMgdVN0YXJ0LCB1bml4X3RpbWVzdGFtcChmaW5pc2hfRGF0ZVRpbWUpIGFz IHVGaW5pc2giLAoJCQkidHhwX2ptY19ldmVudCIsCgkJCSIkdGltZSBvcmRlciBieSAkc29y dCAkZGlyIGxpbWl0ICRvZmZzZXQsJGxpbWl0IgoJCSk7CgoJCS8vIElmIHRoZXJlIGFyZSBy b3dzIHdlJ2xsIG1ha2Ugb3VyIHRhYmxlLiBJdCdkIGJlIG5pY2UgZm9yIGV2ZXJ5IHNlY29u ZCBvbmUgdG8gYmUgYSBsaXR0bGUgYmV0dGVyIHB1dCB0b2dldGhlcgoJCWlmICgkcnMpIHsK CQkJLy8gU3RhcnQgdGhlIGZvcm0gZm9yIG11bHRpIGVkaXRpbmcKCQkJLy8gU3RhcnQgYSB0 YWJsZSB3aXRoIHRoZSBjbGFzcyAnbGlzdCcKCQkJLy8gU2V0IHVwIHRoZSBoZWFkZXJzIGZv ciB0aGUgY29sdW1ucwoJCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9k PSJwb3N0IiBuYW1lPSJsb25nZm9ybSIgb25zdWJtaXQ9InJldHVybiB2ZXJpZnkoXCcnLmdU eHQoJ2FyZV95b3Vfc3VyZScpLidcJykiPicsCgkJCXN0YXJ0VGFibGUoJ2xpc3QnKSwKCQkJ Jzx0cj4nLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdDYXRlZ29yeScsICdDYXRlZ29y eUlEJywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMSwgJGxpbmtkaXIpLAoJCQkJam1jX2V2ZW50 X2NvbHVtbl9oZWFkKCdFdmVudCcsICduYW1lJywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMSwg JGxpbmtkaXIpLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdTdGFydCcsICdzdGFydF9E YXRlVGltZScsICdqbWNfZXZlbnRfbWFuYWdlcicsIDEsICRsaW5rZGlyKSwKCQkJCWptY19l dmVudF9jb2x1bW5faGVhZCgnRmluaXNoJywgJ3N0YXJ0X0RhdGVUaW1lJywgJ2ptY19ldmVu dF9tYW5hZ2VyJywgMSwgJGxpbmtkaXIpLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdW ZW51ZScsICdWZW51ZUlEJywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMSwgJGxpbmtkaXIpLAoJ CQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdQcmljZScsICdQcmljZScsICdqbWNfZXZlbnRf bWFuYWdlcicsIDEsICRsaW5rZGlyKSwKCQkJCWptY19ldmVudF9jb2x1bW5faGVhZCgnUG9z dGVkIEJ5JywgJ0F1dGhvcklEJywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMSwgJGxpbmtkaXIp LAoJCQkJdGQoKSwKCQkJJzwvdHI+JzsKCQkJLy8gRm9yZWFjaCBvZiB0aGUgZW50cmllcyBj cmVhdGUgaXQncyBpbmZvcm1hdGlvbiBpbiB0aGUgcmVsZXZhbnQgY29sdW1ucwoJCQl3aGls ZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQkJCWV4dHJhY3QoJGEpOwoKCQkJCS8vIEdldCB0 aGUgdmVudWUgJ25hbWUnIGZyb20gaXQncyBJRAoJCQkJaWYoJHZlbnVlID0gc2FmZV9yb3dz KCJuYW1lIiwgInR4cF9qbWNfZXZlbnRfdmVudWUiLCAiSUQgPSAkVmVudWVJRCIpKQoJCQkJ CSR2ZW51ZV9uYW1lID0gJHZlbnVlWzBdWyduYW1lJ107CgkJCQllbHNlCgkJCQkJJHZlbnVl X25hbWUgPSAnJzsKCgkJCQkkYXV0aG9yX25hbWUgPSAkQXV0aG9ySUQ7CgoJCQkJaWYoJENh dGVnb3J5ID0gc2FmZV9yb3coIm5hbWUiLCJ0eHBfam1jX2V2ZW50X2NhdGVnb3J5IiwgIklE ID0gJENhdGVnb3J5SUQiKSkKCQkJCQkkQ2F0ZWdvcnkgPSAkQ2F0ZWdvcnlbJ25hbWUnXTsK CQkJCWVsc2UKCQkJCQkkQ2F0ZWdveSA9ICIiOwoKCQkJCS8vIEV2ZW50IHN0YXJ0aW5nIHRp bWVzIGFuZCBkYXRlcyB3aXRoIG9mZnNldAoJCQkJJHN0YXJ0X2V2ZW50ZGF0ZSA9IGRhdGUo ImQgTSB5IiwkdVN0YXJ0ICsgdHpfb2Zmc2V0KCkpOwoJCQkJJHN0YXJ0X2V2ZW50dGltZSA9 IGRhdGUoImc6aSBhIiwkdVN0YXJ0ICsgdHpfb2Zmc2V0KCkpOwoJCQkJLy8gRXZlbnQgZmlu aXNoIHRpbWVzIGFuZCBkYXRlcyB3aXRoIG9mZnNldAoJCQkJJGZpbmlzaF9ldmVudGRhdGUg PSBkYXRlKCJkIE0geSIsJHVGaW5pc2ggKyB0el9vZmZzZXQoKSk7CgkJCQkkZmluaXNoX2V2 ZW50dGltZSA9IGRhdGUoImc6aSBhIiwkdUZpbmlzaCArIHR6X29mZnNldCgpKTsKCgkJCQkv LyBTZXR1cCB0aGUgbGlua3MgdG8gZWRpdGluZy4uLgoJCQkJJGV2ZW50bGluayA9IGVMaW5r KCdqbWNfZXZlbnRfbWFuYWdlcicsJ2V2ZW50X2VkaXQnLCdJRCcsJElELCRuYW1lKTsKCQkJ CSRzdGFydF9ldmVudERhdGVUaW1lID0gZUxpbmsoJ2ptY19ldmVudF9tYW5hZ2VyJywnZXZl bnRfZWRpdCcsJ0lEJywkSUQsJHN0YXJ0X2V2ZW50ZGF0ZSkuIiBhdCAiLiRzdGFydF9ldmVu dHRpbWU7CgkJCQkkZmluaXNoX2V2ZW50RGF0ZVRpbWUgPSBlTGluaygnam1jX2V2ZW50X21h bmFnZXInLCdldmVudF9lZGl0JywnSUQnLCRJRCwkZmluaXNoX2V2ZW50ZGF0ZSkuIiBhdCAi LiRmaW5pc2hfZXZlbnR0aW1lOwoJCQkJJHZsaW5rID0gZUxpbmsoJ2ptY19ldmVudF9tYW5h Z2VyJywnZXZlbnRfZWRpdCcsJ0lEJywkSUQsJHZlbnVlX25hbWUpOwoJCQkJJG1vZGJveCA9 IGZJbnB1dCgnY2hlY2tib3gnLCdzZWxlY3RlZFtdJywkSUQsJycsJycsJycsJycsJycsJElE KTsKCgkJCQkvLyBPdXRwdXQgdGhlIHJvdwoJCQkJZWNobyAiPHRyPiIubiwKCQkJCQl0ZCgk Q2F0ZWdvcnkpLAoJCQkJCXRkKCRldmVudGxpbmspLAoJCQkJCXRkKCRzdGFydF9ldmVudERh dGVUaW1lKSwKCQkJCQl0ZCgkZmluaXNoX2V2ZW50RGF0ZVRpbWUpLAoJCQkJCXRkKCR2bGlu aywxMDApLAoJCQkJCXRkKCRQcmljZSw3NSksCgkJCQkJdGQoJGF1dGhvcl9uYW1lKSwKCQkJ CQl0ZCgkbW9kYm94KSwKCQkJCSc8L3RyPicubjsKCQkJfQoJCQkvLyBNb2RpZmllZCBtdWx0 aWVkaXQgZm9ybSBiYXNlZCBvbiBleGlzdGluZyBvbmUgYnV0IHdpdGggbW9yZSBvcHRpb25z CgkJCWVjaG8gdHIodGRhKHNlbGVjdF9idXR0b25zKCkuam1jX2V2ZW50X21hbmFnZXJfbXVs dGllZGl0X2Zvcm0oJ2ptY19ldmVudF9tYW5hZ2VyJywgJ2V2ZW50X211bHRpX2VkaXQnKSwn IGNvbHNwYW49IjciIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlcjowcHgiJykpOwoJ CQllY2hvICI8L3RhYmxlPjwvZm9ybT4iOwoJCQkvLyBQYWdlYnkgZm9ybQoJCQllY2hvIHBh Z2VieV9mb3JtKCdsaXN0JywkYXJ0aWNsZV9saXN0X3BhZ2VieSk7CgkJCS8vIFVuc3VyZSB3 aHkgLSB3YXMgaW4gdGhlIGFydGljbGUgbGlzdCB2ZXJzaW9uLi4uCgkJCXVuc2V0KCRzb3J0 KTsKCQl9CgkJLy8gSWYgdGhlcmUgZXhpc3RzIG5vIGVudHJpZXMsIGRvbid0IGJvdGggd2l0 aCBhbnl0aGluZwoJCWVsc2UKCQkJZWNobyAnQWRkaW5nIEZha2UgRW50cnkuJzsKCX0KCgkv KiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICov CgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2V2ZW50X2Zvcm0KCS8vIFVzZToJ CQkJQ3JlYXRlcywgYW5kIHdoZXJlIGFwcGxpY2FibGUKCS8vCQkJCWZpbGxzIHRoZSBmb3Jt IGZvciBuZXcvdXBkYXRpbmcKCS8vCQkJCWV4aXN0aW5nIGV2ZW50LgoJLy8gSW5wdXRzOgkJ CSRzdGVwCQkJVFhQCgkvLwkJCQkJJGV4aXN0aW5nX2luZm8JdHJ1ZXxmYWxzZQoJLy8gT3V0 cHV0czoJCQlOVUxMIChlY2hvcyByZXNwb25zZXMpCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNfZXZlbnRf bWFuYWdlcl9ldmVudF9mb3JtKCRzdGVwLCAkZXhpc3RpbmdfaW5mbyA9IGZhbHNlKQoJewoJ CS8vIEdldCBJRCBpbmZvcm1hdGlvbiAoaWYgYW55KQoJCWdsb2JhbCAkdmFyc19ldmVudHM7 CgkJJGlkID0gKGdwcygnSUQnKT9ncHMoJ0lEJyk6JycpOwoJCS8vIElmIHRoZXJlIGlzIGFu IGlkIGFuZCBlZGl0aW5nIG9yIHNhdmluZyBvciBwb3N0aW5nCgkJaWYoJGlkICYmICgkc3Rl cCA9PSAnZXZlbnRfZWRpdCcgfHwgJHN0ZXAgPT0gJ2V2ZW50X3NhdmUnIHx8ICRzdGVwID09 ICdldmVudF9wb3N0JykpIHsKCQkJJHJvdyA9IHNhZmVfcm93KCIqLCB1bml4X3RpbWVzdGFt cChzdGFydF9EYXRlVGltZSkgYXMgc0RhdGVUaW1lLCB1bml4X3RpbWVzdGFtcChmaW5pc2hf RGF0ZVRpbWUpIGFzIGZEYXRlVGltZSwgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgc0xh c3RNb2QiLCAidHhwX2ptY19ldmVudCIsICJJRCA9ICRpZCIpOwoJCQlmb3JlYWNoKCRyb3cg YXMgJG49PiR2KQoJCQkJJCRuID0gc3RyaXBzbGFzaGVzKCR2KTsKCQl9CgkJLy8gSWYgbm8g ZXhpc3RpbmcgaW5mb3JtYXRpb24gcmVzZXQgdGhlIHZhcmlhYmxlcwoJCWlmICghJGV4aXN0 aW5nX2luZm8gJiYoJHN0ZXAgPT0gJ2V2ZW50X2FkZCcgb3IgJHN0ZXA9PSdldmVudF9wb3N0 JyBvciAkc3RlcCA9PSAnZXZlbnRfc2F2ZScpKXsKCQkJZm9yZWFjaCgkdmFyc19ldmVudHMg YXMgJHZhcikgewoJCQkJJCR2YXIgPSAnJzsKCQkJfQoJCQkvLyBSZXN0YXJ0IHRoZSB0aW1l CgkJCSRzRGF0ZVRpbWUgPSB0aW1lKCkgKyB0el9vZmZzZXQoKTsKCQkJJGZEYXRlVGltZSA9 IHRpbWUoKSArIHR6X29mZnNldCgpOwoJCX0KCQllbHNlewoJCQkkc0RhdGVUaW1lICs9IHR6 X29mZnNldCgpOwoJCQkkZkRhdGVUaW1lICs9IHR6X29mZnNldCgpOwoJCX0KCgkJLy8gQ3Jl YXRlIFRleHRib3hlcyBmb3IgdGhlIG90aGVyIGluZm9ybWF0aW9uCgkJJG90aGVyX2JhbmRz ID0gJzx0ZXh0YXJlYSBuYW1lPSJPdGhlckJhbmRzIiBjb2xzPSI0MCIgcm93cz0iNyIgdGFi aW5kZXg9IjQiPicuJE90aGVyQmFuZHMuJzwvdGV4dGFyZWE+JzsKCQkkb3RoZXJfaW5mbyA9 ICc8dGV4dGFyZWEgbmFtZT0iT3RoZXJJbmZvIiBjb2xzPSI0MCIgcm93cz0iNyIgdGFiaW5k ZXg9IjQiPicuJE90aGVySW5mby4nPC90ZXh0YXJlYT4nOwoKCQkvLyBFY2hvIHN0YXJ0IG9m IGZvcm0gKFJFVklTRSkKCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9k PSJwb3N0Ij4nOwoJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImV2ZW50IiB2 YWx1ZT0iam1jX2V2ZW50X21hbmFnZXIiIC8+JzsKCQllY2hvICc8aW5wdXQgdHlwZT0iaGlk ZGVuIiBuYW1lPSJzdGVwIiB2YWx1ZT0iJy4oJGlkPydldmVudF9zYXZlJzonZXZlbnRfcG9z dCcpLiciIC8+JzsKCQllY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFs dWU9IicuKCRJRD8kSUQ6JycpLiciIC8+JzsKCgkJLy8gSW5wdXQgSW5mb3JtYXRpb24KCQll Y2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsKCQllY2hvICI8dHI+PHRkPkNhdGVnb3J5PC90ZD48 dGQ+Ii5jYXRlZ29yeWRyb3Bkb3duKCRDYXRlZ29yeUlELCAnNCcpLiI8L3RkPjx0ZD48L3Rk PjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPkV2ZW50IE5hbWU8L3RkPjx0ZD4iLmZJbnB1dCgn dGV4dCcsICduYW1lJywgJG5hbWUsICcnLCAnJywgJycsICc1MCUnLCAnNCcpLiI8L3RkPjwv dHI+IjsKCQllY2hvICI8dHI+PHRkPlN0YXJ0IERhdGU8L3RkPjx0ZD4iLmRhdGV0aW1lZHJv cGRvd24oImRheSIsICJldmVudF9zdGFydF9kYXkiLCBkYXRlKCdkJywkc0RhdGVUaW1lKSwg JzQnKS5kYXRldGltZWRyb3Bkb3duKCJtb250aCIsICJldmVudF9zdGFydF9tb250aCIsIGRh dGUoJ20nLCRzRGF0ZVRpbWUpLCAnNCcpLmRhdGV0aW1lZHJvcGRvd24oInllYXIiLCAiZXZl bnRfc3RhcnRfeWVhciIsIGRhdGUoJ1knLCRzRGF0ZVRpbWUpLCAnNCcpLiI8L3RkPjwvdHI+ IjsKCQllY2hvICI8dHI+PHRkPlN0YXJ0IFRpbWU8L3RkPjx0ZD4iLmRhdGV0aW1lZHJvcGRv d24oImhvdXIiLCAiZXZlbnRfc3RhcnRfaG91ciIsIGRhdGUoJ0gnLCRzRGF0ZVRpbWUpLCAn NCcpLmRhdGV0aW1lZHJvcGRvd24oIm1pbnV0ZSIsICJldmVudF9zdGFydF9taW51dGUiLCBk YXRlKCdpJywkc0RhdGVUaW1lKSwgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAiPHRyPjx0 ZD5GaW5pc2ggRGF0ZTwvdGQ+PHRkPiIuZGF0ZXRpbWVkcm9wZG93bigiZGF5IiwgImV2ZW50 X2ZpbmlzaF9kYXkiLCBkYXRlKCdkJywkZkRhdGVUaW1lKSwgJzQnKS5kYXRldGltZWRyb3Bk b3duKCJtb250aCIsICJldmVudF9maW5pc2hfbW9udGgiLCBkYXRlKCdtJywkZkRhdGVUaW1l KSwgJzQnKS5kYXRldGltZWRyb3Bkb3duKCJ5ZWFyIiwgImV2ZW50X2ZpbmlzaF95ZWFyIiwg ZGF0ZSgnWScsJGZEYXRlVGltZSksICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0cj48 dGQ+RmluaXNoIFRpbWU8L3RkPjx0ZD4iLmRhdGV0aW1lZHJvcGRvd24oImhvdXIiLCAiZXZl bnRfZmluaXNoX2hvdXIiLCBkYXRlKCdIJywkZkRhdGVUaW1lKSwgJzQnKS5kYXRldGltZWRy b3Bkb3duKCJtaW51dGUiLCAiZXZlbnRfZmluaXNoX21pbnV0ZSIsIGRhdGUoJ2knLCRmRGF0 ZVRpbWUpLCAnNCcpLiI8L3RkPjwvdHI+IjsKCQllY2hvICI8dHI+PHRkPlZlbnVlPC90ZD48 dGQ+Ii52ZW51ZWRyb3Bkb3duKCRWZW51ZUlELCAnNCcpLiI8L3RkPjx0ZD48L3RkPjwvdHI+ IjsKCQllY2hvICI8dHI+PHRkPlByaWNlPC90ZD48dGQ+Ii5mSW5wdXQoJ3RleHQnLCAnUHJp Y2UnLCAkUHJpY2UsICcnLCAnJywgJycsICc1MCUnLCAnNCcpLiI8L3RkPjwvdHI+IjsKCQll Y2hvICI8dHI+PHRkPk90aGVyIEJhbmRzPC90ZD48dGQ+Ii4kb3RoZXJfYmFuZHMuIjwvdGQ+ PC90cj4iOwoJCWVjaG8gIjx0cj48dGQ+T3RoZXIgSW5mbzwvdGQ+PHRkPiIuJG90aGVyX2lu Zm8uIjwvdGQ+PC90cj4iOwoJCWVjaG8gIjx0cj48dGQgY29sc3Bhbj1cIjJcIiBzdHlsZT1c InRleHQtYWxpZ246IGNlbnRlcjtcIj4iLmZJbnB1dCgnc3VibWl0JywgJycsICgkSUQ/J1Nh dmUgRXZlbnQnOidBZGQgRXZlbnQnKSwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+ PC90cj4iOwoKICAgIAllY2hvICc8L3RhYmxlPjwvZm9ybT4nOwoJfQoKCS8qIC1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8vIEZ1bmN0 aW9uOgkJam1jX2V2ZW50X21hbmFnZXJfZXZlbnRfc2F2ZQoJLy8gVXNlOgkJCQlVcGRhdGVz IGFuIGV4aXN0aW5nIGV2ZW50J3MKCS8vCQkJCWluZm9ybWF0aW9uLgoJLy8gSW5wdXRzOgkJ CU5VTEwKCS8vIE91dHB1dHM6CQkJdHJ1ZXxmYWxzZQoJLyogXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50 X21hbmFnZXJfZXZlbnRfc2F2ZSgpCgl7CgkJZ2xvYmFsICR0eHBfdXNlciwkdmFycywkdHhw Y2ZnOwoJCWdsb2JhbCAkdmFyc19ldmVudHM7CgkJJGNhbGVuZGFyX3N0YXJ0ID0gYXJyYXko J2V2ZW50X3N0YXJ0X3llYXInLCAnZXZlbnRfc3RhcnRfbW9udGgnLCAnZXZlbnRfc3RhcnRf ZGF5JywgJ2V2ZW50X3N0YXJ0X2hvdXInLCAnZXZlbnRfc3RhcnRfbWludXRlJyk7CgkJJGNh bGVuZGFyX2ZpbmlzaCA9IGFycmF5KCdldmVudF9maW5pc2hfeWVhcicsICdldmVudF9maW5p c2hfbW9udGgnLCAnZXZlbnRfZmluaXNoX2RheScsICdldmVudF9maW5pc2hfaG91cicsICdl dmVudF9maW5pc2hfbWludXRlJyk7CgoJCWluY2x1ZGVfb25jZSAkdHhwY2ZnWyd0eHBhdGgn XS4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsKCQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7 CgoJCWV4dHJhY3QoZ3BzYShhcnJheV9tZXJnZSgkdmFyc19ldmVudHMsJGNhbGVuZGFyX3N0 YXJ0LCRjYWxlbmRhcl9maW5pc2gpKSk7CgoJCSRDYXRlZ29yeUlEID0gJENhdGVnb3J5SUQ/ JENhdGVnb3J5SUQ6MDsKCQkkT3RoZXJCYW5kc19odG1sID0gJE90aGVyQmFuZHM/JHRleHRp bGUtPlRleHRpbGVUaGlzKCRPdGhlckJhbmRzKToiIjsKCQkkT3RoZXJJbmZvX2h0bWwgPSAk T3RoZXJJbmZvPyR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkT3RoZXJJbmZvKToiIjsKCgkJaWYo IWNoZWNrZGF0ZSgkZXZlbnRfc3RhcnRfbW9udGgsICRldmVudF9zdGFydF9kYXksICRldmVu dF9zdGFydF95ZWFyKSAmJiAhY2hlY2tkYXRlKCRldmVudF9maW5pc2hfbW9udGgsICRldmVu dF9maW5pc2hfZGF5LCAkZXZlbnRfZmluaXNoX3llYXIpKQoJCXsKCQkJZWNobyAiPHNwYW4g Y2xhc3M9XCJlcnJvcl93YXJuaW5nXCI+PHN0cm9uZz5EYXRlIEVycm9yOjwvc3Ryb25nPiBU aGVyZSBpcyBub3QgJGV2ZW50X2RheSBkYXlzIGluICRldmVudF9tb250aCAuIFRoZSBkYXkg aGFzIGJlZW4gcm91bmRlZCB0byB0aGUgbGFzdCBkYXkgb2YgJGV2ZW50X21vbnRoLjwvc3Bh bj4iOwoJCQkvLyBUbyBkbyB0aGUgZnVuY3Rpb24gaGVyZS4uLgoJCX0KCQkkc0RhdGVUaW1l VSA9IHN0cnRvdGltZSgkZXZlbnRfc3RhcnRfeWVhci4nLScuJGV2ZW50X3N0YXJ0X21vbnRo LictJy4kZXZlbnRfc3RhcnRfZGF5LicgJy4kZXZlbnRfc3RhcnRfaG91ci4nOicuJGV2ZW50 X3N0YXJ0X21pbnV0ZS4iOjAwIiktdHpfb2Zmc2V0KCk7CgkJJHNEYXRlVGltZSA9ICJmcm9t X3VuaXh0aW1lKCRzRGF0ZVRpbWVVKSI7CgkJJHNEYXRlVGltZSA9ICJzdGFydF9EYXRlVGlt ZT0kc0RhdGVUaW1lIjsKCgkJJGZEYXRlVGltZVUgPSBzdHJ0b3RpbWUoJGV2ZW50X2Zpbmlz aF95ZWFyLictJy4kZXZlbnRfZmluaXNoX21vbnRoLictJy4kZXZlbnRfZmluaXNoX2RheS4n ICcuJGV2ZW50X2ZpbmlzaF9ob3VyLic6Jy4kZXZlbnRfZmluaXNoX21pbnV0ZS4iOjAwIikt dHpfb2Zmc2V0KCk7CgkJJGZEYXRlVGltZSA9ICJmcm9tX3VuaXh0aW1lKCRmRGF0ZVRpbWVV KSI7CgkJJGZEYXRlVGltZSA9ICJmaW5pc2hfRGF0ZVRpbWU9JGZEYXRlVGltZSI7CgoJCWlm KCRmRGF0ZVRpbWVVID49ICRzRGF0ZVRpbWVVKQoJCXsKCQkJc2FmZV91cGRhdGUoInR4cF9q bWNfZXZlbnQiLAoJCQkJIiRzRGF0ZVRpbWUsCgkJCQkkZkRhdGVUaW1lLAoJCQkJQ2F0ZWdv cnlJRCA9ICRDYXRlZ29yeUlELAoJCQkJbmFtZSA9ICciLmFkZHNsYXNoZXMoJG5hbWUpLiIn LAoJCQkJTGFzdE1vZCA9IG5vdygpLAoJCQkJTGFzdE1vZElEID0gJyIuYWRkc2xhc2hlcygk dHhwX3VzZXIpLiInLAoJCQkJVmVudWVJRCA9ICRWZW51ZUlELAoJCQkJUHJpY2UgPSAnIi5h ZGRzbGFzaGVzKCRQcmljZSkuIicsCgkJCQlPdGhlckJhbmRzID0gJyIuYWRkc2xhc2hlcygk T3RoZXJCYW5kcykuIicsCgkJCQlPdGhlckJhbmRzX2h0bWwgPSAnJE90aGVyQmFuZHNfaHRt bCcsCgkJCQlPdGhlckluZm8gPSAnIi5hZGRzbGFzaGVzKCRPdGhlckluZm8pLiInLAoJCQkJ T3RoZXJJbmZvX2h0bWwgPSAnJE90aGVySW5mb19odG1sJyIsCgkJCQkiSUQgPSAnJElEJyIp OwoJCX0KCQllbHNlewoJCQllY2hvICI8c3BhbiBjbGFzcz1cImVycm9yX3dhcm5pbmdcIj48 c3Ryb25nPkRhdGUgRXJyb3I6PC9zdHJvbmc+IEZpbmlzaCB0aW1lIGJlZm9yZSBzdGFydCB0 aW1lLjwvc3Bhbj4iOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0K CgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t ICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2V2ZW50X3Bvc3QKCS8vIFVz ZToJCQkJQ3JlYXRlcyBhIG5ldyBldmVudCB3aXRoIHVzZXIKCS8vCQkJCWluZm9ybWF0aW9u LgoJLy8gSW5wdXRzOgkJCU5VTEwKCS8vIE91dHB1dHM6CQkJdHJ1ZXxmYWxzZQoJLyogXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVu Y3Rpb24gam1jX2V2ZW50X21hbmFnZXJfZXZlbnRfcG9zdCgpCgl7CgkJZ2xvYmFsICR0eHBf dXNlciwkdmFycywkdHhwY2ZnOwoJCWdsb2JhbCAkdmFyc19ldmVudHM7CgkJJGNhbGVuZGFy X3N0YXJ0ID0gYXJyYXkoJ2V2ZW50X3N0YXJ0X3llYXInLCAnZXZlbnRfc3RhcnRfbW9udGgn LCAnZXZlbnRfc3RhcnRfZGF5JywgJ2V2ZW50X3N0YXJ0X2hvdXInLCAnZXZlbnRfc3RhcnRf bWludXRlJyk7CgkJJGNhbGVuZGFyX2ZpbmlzaCA9IGFycmF5KCdldmVudF9maW5pc2hfeWVh cicsICdldmVudF9maW5pc2hfbW9udGgnLCAnZXZlbnRfZmluaXNoX2RheScsICdldmVudF9m aW5pc2hfaG91cicsICdldmVudF9maW5pc2hfbWludXRlJyk7CgoJCWluY2x1ZGVfb25jZSAk dHhwY2ZnWyd0eHBhdGgnXS4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsKCQkkdGV4dGlsZSA9 IG5ldyBUZXh0aWxlKCk7CgoJCWV4dHJhY3QoZ3BzYShhcnJheV9tZXJnZSgkdmFyc19ldmVu dHMsJGNhbGVuZGFyX3N0YXJ0LCRjYWxlbmRhcl9maW5pc2gpKSk7CgoJCSRDYXRlZ29yeUlE ID0gJENhdGVnb3J5SUQ/JENhdGVnb3J5SUQ6MDsKCQkkT3RoZXJCYW5kc19odG1sID0gJE90 aGVyQmFuZHM/JHRleHRpbGUtPlRleHRpbGVUaGlzKCRPdGhlckJhbmRzKToiIjsKCQkkT3Ro ZXJJbmZvX2h0bWwgPSAkT3RoZXJJbmZvPyR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkT3RoZXJJ bmZvKToiIjsKCgkJaWYoIWNoZWNrZGF0ZSgkZXZlbnRfc3RhcnRfbW9udGgsICRldmVudF9z dGFydF9kYXksICRldmVudF9zdGFydF95ZWFyKSAmJiAhY2hlY2tkYXRlKCRldmVudF9maW5p c2hfbW9udGgsICRldmVudF9maW5pc2hfZGF5LCAkZXZlbnRfZmluaXNoX3llYXIpKQoJCXsK CQkJZWNobyAiPHNwYW4gY2xhc3M9XCJlcnJvcl93YXJuaW5nXCI+PHN0cm9uZz5EYXRlIEVy cm9yOjwvc3Ryb25nPiBUaGVyZSBpcyBub3QgJGV2ZW50X2RheSBkYXlzIGluICRldmVudF9t b250aCAuIFRoZSBkYXkgaGFzIGJlZW4gcm91bmRlZCB0byB0aGUgbGFzdCBkYXkgb2YgJGV2 ZW50X21vbnRoLjwvc3Bhbj4iOwoJCQkvLyBUbyBkbyB0aGUgZnVuY3Rpb24gaGVyZS4uLgoJ CX0KCQkkc0RhdGVUaW1lID0gc3RydG90aW1lKCRldmVudF9zdGFydF95ZWFyLictJy4kZXZl bnRfc3RhcnRfbW9udGguJy0nLiRldmVudF9zdGFydF9kYXkuJyAnLiRldmVudF9zdGFydF9o b3VyLic6Jy4kZXZlbnRfc3RhcnRfbWludXRlLiI6MDAiKS10el9vZmZzZXQoKTsKCQkkc0Rh dGVUaW1lID0gImZyb21fdW5peHRpbWUoJHNEYXRlVGltZSkiOwoJCSRzRGF0ZVRpbWUgPSAi c3RhcnRfRGF0ZVRpbWU9JHNEYXRlVGltZSI7CgoJCSRmRGF0ZVRpbWUgPSBzdHJ0b3RpbWUo JGV2ZW50X2ZpbmlzaF95ZWFyLictJy4kZXZlbnRfZmluaXNoX21vbnRoLictJy4kZXZlbnRf ZmluaXNoX2RheS4nICcuJGV2ZW50X2ZpbmlzaF9ob3VyLic6Jy4kZXZlbnRfZmluaXNoX21p bnV0ZS4iOjAwIiktdHpfb2Zmc2V0KCk7CgkJJGZEYXRlVGltZSA9ICJmcm9tX3VuaXh0aW1l KCRmRGF0ZVRpbWUpIjsKCQkkZkRhdGVUaW1lID0gImZpbmlzaF9EYXRlVGltZT0kZkRhdGVU aW1lIjsKCgkJc2FmZV9pbnNlcnQoInR4cF9qbWNfZXZlbnQiLAoJCSIkc0RhdGVUaW1lLAoJ CSRmRGF0ZVRpbWUsCgkJQ2F0ZWdvcnlJRCA9ICRDYXRlZ29yeUlELAoJCW5hbWUgPSAnIi5h ZGRzbGFzaGVzKCRuYW1lKS4iJywKCQlBdXRob3JJRCA9ICciLmFkZHNsYXNoZXMoJHR4cF91 c2VyKS4iJywKCQlWZW51ZUlEID0gJFZlbnVlSUQsCgkJUHJpY2UgPSAnIi5hZGRzbGFzaGVz KCRQcmljZSkuIicsCgkJT3RoZXJCYW5kcyA9ICciLmFkZHNsYXNoZXMoJE90aGVyQmFuZHMp LiInLAoJCU90aGVyQmFuZHNfaHRtbCA9ICckT3RoZXJCYW5kc19odG1sJywKCQlPdGhlcklu Zm8gPSAnIi5hZGRzbGFzaGVzKCRPdGhlckluZm8pLiInLAoJCU90aGVySW5mb19odG1sID0g JyRPdGhlckluZm9faHRtbCciKTsKCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyogLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rp b246CQlqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZXMoKQoJLy8gVXNlOgkJCQlFY2hvZXMgb3V0 IHRoZSBiYXNpYyBsaXN0IG9mCgkvLwkJCQl2ZW51ZXMuCgkvLyBJbnB1dHM6CQkJTlVMTAoJ Ly8gT3V0cHV0czoJCQlOVUxMIChlY2hvcyByZXNwb25zZXMpCgkvKiBfLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBqbWNf ZXZlbnRfbWFuYWdlcl92ZW51ZXMoKQoJewoJCWV4dHJhY3QoZ2V0X3ByZWZzKCkpOwoJCSRs dmFycyA9IGFycmF5KCJwYWdlIiwic29ydCIsImRpciIsImNyaXQiLCdlZGl0X21ldGhvZCcp OwoJCWV4dHJhY3QoZ3BzYSgkbHZhcnMpKTsKCQlnbG9iYWwgJHN0ZXA7CgoJCWlmICghJHNv cnQpICRzb3J0ID0gIm5hbWUiOwoJCWlmICghJGRpcikgJGRpciA9ICJhc2MiOwoJCWlmICgk ZGlyID09ICJhc2MiKSB7ICRsaW5rZGlyID0gImRlc2MiOyB9IGVsc2UgeyAkbGlua2RpciA9 ICJhc2MiOyB9CgoJCSR0b3RhbCA9IGdldENvdW50KCd0eHBfam1jX2V2ZW50X3ZlbnVlJywi MSIpOwoJCSRsaW1pdCA9ICgkYXJ0aWNsZV9saXN0X3BhZ2VieSkgPyAkYXJ0aWNsZV9saXN0 X3BhZ2VieSA6IDI1OwoJCSRudW1QYWdlcyA9IGNlaWwoJHRvdGFsLyRsaW1pdCk7CgkJJHBh Z2UgPSAoISRwYWdlKSA/IDEgOiAkcGFnZTsKCgkJJG9mZnNldCA9ICgkcGFnZSAtIDEpICog JGxpbWl0OwoKCQllY2hvIGptY19uYXZfZm9ybSgnam1jX2V2ZW50X21hbmFnZXInLCAndmVu dWVfbWFuYWdlcicsICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0LCAkZGlyKTsKCgkJJHJzID0g c2FmZV9yb3dzX3N0YXJ0KAoJCQkiKiIsCgkJCSJ0eHBfam1jX2V2ZW50X3ZlbnVlIiwKCQkJ IklEIG9yZGVyIGJ5ICRzb3J0ICRkaXIgbGltaXQgJG9mZnNldCwkbGltaXQiCgkJKTsKCgkJ aWYgKCRycykgewoJCQllY2hvICc8Zm9ybSBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJw b3N0IiBuYW1lPSJsb25nZm9ybSIgb25zdWJtaXQ9InJldHVybiB2ZXJpZnkoXCcnLmdUeHQo J2FyZV95b3Vfc3VyZScpLidcJykiPicsCgkJCXN0YXJ0VGFibGUoJ2xpc3QnKSwKCQkJJzx0 cj4nLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdDYXRlZ29yeScsICdDYXRlZ29yeUlE JywgJ2ptY19ldmVudF9tYW5hZ2VyJywgMCwgJGxpbmtkaXIsICd2ZW51ZV9tYW5hZ2VyJyks CgkJCQlqbWNfZXZlbnRfY29sdW1uX2hlYWQoJ0ltYWdlJywgJ2ltYWdlVGh1bWInLCAnam1j X2V2ZW50X21hbmFnZXInLCAwLCAkbGlua2RpciwgJ3ZlbnVlX21hbmFnZXInKSwKCQkJCWpt Y19ldmVudF9jb2x1bW5faGVhZCgnVmVudWUnLCAnbmFtZScsICdqbWNfZXZlbnRfbWFuYWdl cicsIDEsICRsaW5rZGlyLCAndmVudWVfbWFuYWdlcicpLAoJCQkJam1jX2V2ZW50X2NvbHVt bl9oZWFkKCdTdGF0ZScsICdzdGF0ZScsICdqbWNfZXZlbnRfbWFuYWdlcicsIDEsICRsaW5r ZGlyLCAndmVudWVfbWFuYWdlcicpLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdQaG9u ZScsICdwaG9uZScsICdqbWNfZXZlbnRfbWFuYWdlcicsIDEsICRsaW5rZGlyLCAndmVudWVf bWFuYWdlcicpLAoJCQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdlbWFpbCcsICdlbWFpbCcs ICdqbWNfZXZlbnRfbWFuYWdlcicsIDEsICRsaW5rZGlyLCAndmVudWVfbWFuYWdlcicpLAoJ CQkJam1jX2V2ZW50X2NvbHVtbl9oZWFkKCdXZWIgUGFnZScsICd1cmwnLCAnam1jX2V2ZW50 X21hbmFnZXInLCAxLCAkbGlua2RpciwgJ3ZlbnVlX21hbmFnZXInKSwKCQkJCXRkKCksCgkJ CSc8L3RyPic7CgkJCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkgewoJCQkJZXh0cmFjdCgk YSk7CgoJCQkJaWYoJENhdGVnb3J5ID0gc2FmZV9yb3coIm5hbWUiLCJ0eHBfam1jX2V2ZW50 X2NhdGVnb3J5IiwgIklEID0gJENhdGVnb3J5SUQiKSkKCQkJCQkkQ2F0ZWdvcnkgPSAkQ2F0 ZWdvcnlbJ25hbWUnXTsKCQkJCWVsc2UKCQkJCQkkQ2F0ZWdveSA9ICIiOwoKCQkJCSRpbWFn ZSA9IGltYWdldGFnKCRpbWFnZUlEKTsKCgkJCQkkaW1hZ2VsaW5rID0gZUxpbmsoJ2ptY19l dmVudF9tYW5hZ2VyJywndmVudWVfZWRpdCcsJ0lEJywkSUQsJGltYWdlKTs7CgkJCQkkbmFt ZWxpbmsgPSBlTGluaygnam1jX2V2ZW50X21hbmFnZXInLCd2ZW51ZV9lZGl0JywnSUQnLCRJ RCwkbmFtZSk7CgkJCQkkbW9kYm94ID0gZklucHV0KCdjaGVja2JveCcsJ3NlbGVjdGVkW10n LCRJRCwnJywnJywnJywnJywnJywkSUQpOwoKCQkJCWVjaG8gIjx0cj4iLm4sCgkJCQkJdGQo JENhdGVnb3J5KSwKCQkJCQl0ZCgkaW1hZ2VsaW5rKSwKCQkJCQl0ZCgkbmFtZWxpbmspLAoJ CQkJCXRkKCRzdGF0ZSksCgkJCQkJdGQoJHBob25lKSwKCQkJCQl0ZCgoJGVtYWlsPyI8YSBo cmVmPVwibWFpbHRvOiRlbWFpbFwiPmVtYWlsIGxpbms8L2E+IjoiIikpLAoJCQkJCXRkKCgk dXJsPyI8YSBocmVmPVwiJHVybFwiIHRhcmdldD1cIl9ibGFua1wiPmV4dGVybmFsIGxpbms8 L2E+IjoiIikpLAoJCQkJCXRkKCRtb2Rib3gpLAoJCQkJJzwvdHI+Jy5uOwoJCQl9CgkJCWVj aG8gdHIodGRhKHNlbGVjdF9idXR0b25zKCkuam1jX2V2ZW50X21hbmFnZXJfbXVsdGllZGl0 X2Zvcm0oJ2ptY19ldmVudF9tYW5hZ2VyJywgJ3ZlbnVlX211bHRpX2VkaXQnKSwnIGNvbHNw YW49IjciIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlcjowcHgiJykpOwoJCQllY2hv ICI8L3RhYmxlPjwvZm9ybT4iOwoJCQllY2hvIHBhZ2VieV9mb3JtKCdsaXN0JywkYXJ0aWNs ZV9saXN0X3BhZ2VieSk7CgkJCXVuc2V0KCRzb3J0KTsKCQl9CgkJZWxzZQoJCQllY2hvICdO byBlbnRyaWVzIGF2YWlsYWJsZS4nOwoJfQoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJam1jX2V2ZW50 X21hbmFnZXJfdmVudWVfZm9ybQoJLy8gVXNlOgkJCQlDcmVhdGVzLCBhbmQgd2hlcmUgYXBw bGljYWJsZQoJLy8JCQkJZmlsbHMgdGhlIGZvcm0gZm9yIG5ldy91cGRhdGluZwoJLy8JCQkJ ZXhpc3RpbmcgdmVudWUuCgkvLyBJbnB1dHM6CQkJJHN0ZXAJCQlUWFAKCS8vCQkJCQkkZXhp c3RpbmdfaW5mbwl0cnVlfGZhbHNlCgkvLyBPdXRwdXRzOgkJCU5VTEwgKGVjaG9zIHJlc3Bv bnNlcykKCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8gKi8KCWZ1bmN0aW9uIGptY19ldmVudF9tYW5hZ2VyX3ZlbnVlX2Zvcm0oJHN0ZXAs ICRleGlzdGluZ19pbmZvID0gZmFsc2UpCgl7CgkJZ2xvYmFsICR2YXJzX3ZlbnVlczsKCQkk aWQgPSAoZ3BzKCdJRCcpP2dwcygnSUQnKTonJyk7CgkJaWYoJGlkICYmICgkc3RlcD09J3Zl bnVlX2VkaXQnIHx8ICRzdGVwPT0ndmVudWVfc2F2ZScgfHwgJHN0ZXA9PSd2ZW51ZV9wb3N0 JykpIHsKCQkJJHJvdyA9IChzYWZlX3JvdygiKiIsICJ0eHBfam1jX2V2ZW50X3ZlbnVlIiwg IklEID0gJyRpZCciKSk7CgkJCWZvcmVhY2goJHJvdyBhcyAkbj0+JHYpCgkJCQkkJG4gPSBz dHJpcHNsYXNoZXMoJHYpOwoJCX0KCgkJaWYgKCEkZXhpc3RpbmdfaW5mbyl7CgkJCWZvcmVh Y2goJHZhcnNfdmVudWVzIGFzICR2YXIpIHsKCQkJCSQkdmFyID0gJyc7CgkJCX0KCQkJJHNE YXRlVGltZSA9IHRpbWUoKTsKCQl9CgoJCSRvdGhlcl9pbmZvID0gJzx0ZXh0YXJlYSBuYW1l PSJPdGhlckluZm8iIGNvbHM9IjQwIiByb3dzPSI3IiB0YWJpbmRleD0iNCI+Jy4kT3RoZXJJ bmZvLic8L3RleHRhcmVhPic7CgoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iaW5kZXgucGhwIiBt ZXRob2Q9InBvc3QiPic7CgkJZWNobyAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZXZl bnQiIHZhbHVlPSJqbWNfZXZlbnRfbWFuYWdlciIgLz4nOwoJCWVjaG8gJzxpbnB1dCB0eXBl PSJoaWRkZW4iIG5hbWU9InN0ZXAiIHZhbHVlPSInLigkZXhpc3RpbmdfaW5mbz8ndmVudWVf c2F2ZSc6J3ZlbnVlX3Bvc3QnKS4nIiAvPic7CgkJZWNobyAnPGlucHV0IHR5cGU9ImhpZGRl biIgbmFtZT0iSUQiIHZhbHVlPSInLigkSUQ/JElEOicnKS4nIiAvPic7CgoJCWVjaG8gc3Rh cnRUYWJsZSgnZWRpdCcpOwoJCWVjaG8gIjx0cj48dGQ+Q2F0ZWdvcnk8L3RkPjx0ZD4iLmNh dGVnb3J5ZHJvcGRvd24oJENhdGVnb3J5SUQsICc0JykuIjwvdGQ+PHRkPjwvdGQ+PC90cj4i OwoJCWVjaG8gIjx0cj48dGQ+TmFtZTwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ25hbWUn LCAkbmFtZSwgJycsICcnLCAnJywgJzUwJScsICc0JykuIjwvdGQ+PC90cj4iOwoJCWVjaG8g Ijx0cj48dGQ+QWRkcmVzcyAxPC90ZD48dGQ+Ii5mSW5wdXQoJ3RleHQnLCAnYWRkcmVzczEn LCAkYWRkcmVzczEsICcnLCAnJywgJycsICc1MCUnLCAnNCcpLiI8L3RkPjwvdHI+IjsKCQll Y2hvICI8dHI+PHRkPkFkZHJlc3MgMjwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ2FkZHJl c3MyJywgJGFkZHJlc3MyLCAnJywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7 CgkJZWNobyAiPHRyPjx0ZD5TdWJ1cmI8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICdzdWJ1 cmInLCAkc3VidXJiLCAnJywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJ ZWNobyAiPHRyPjx0ZD5TdGF0ZTwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ3N0YXRlJywg JHN0YXRlLCAnJywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAi PHRyPjx0ZD5Db3VudHJ5PC90ZD48dGQ+Ii5mSW5wdXQoJ3RleHQnLCAnY291bnRyeScsICRj b3VudHJ5LCAnJywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAi PHRyPjx0ZD5Qb3N0Y29kZTwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ3Bvc3Rjb2RlJywg JHBvc3Rjb2RlLCAnJywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNo byAiPHRyPjx0ZD5QaG9uZTwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ3Bob25lJywgJHBo b25lLCAnJywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAiPHRy Pjx0ZD5lbWFpbDwvdGQ+PHRkPiIuZklucHV0KCd0ZXh0JywgJ2VtYWlsJywgJGVtYWlsLCAn JywgJycsICcnLCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAiPHRyPjx0ZD51 cmw8L3RkPjx0ZD4iLmZJbnB1dCgndGV4dCcsICd1cmwnLCAkdXJsLCAnJywgJycsICcnLCAn NTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAiPHRyPjx0ZD5PdGhlciBJbmZvPC90 ZD48dGQ+Ii4kb3RoZXJfaW5mby4iPC90ZD48L3RyPiI7CgkJZWNobyAiPHRyPjx0ZCBjb2xz cGFuPVwiMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPiIuZklucHV0KCdzdWJt aXQnLCAnJywgKCRJRD8nU2F2ZSBWZW51ZSc6J0FkZCBWZW51ZScpLCAnJywgJycsICcnLCAn NTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgogICAgCWVjaG8gJzwvdGFibGU+PC9mb3JtPic7 Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZV9zYXZlCgkv LyBVc2U6CQkJCVVwZGF0ZXMgYW4gZXhpc3RpbmcgdmVudWUncwoJLy8JCQkJaW5mb3JtYXRp b24uCgkvLyBJbnB1dHM6CQkJTlVMTAoJLy8gT3V0cHV0czoJCQl0cnVlfGZhbHNlCgkvKiBf LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglm dW5jdGlvbiBqbWNfZXZlbnRfbWFuYWdlcl92ZW51ZV9zYXZlKCkKCXsKCQlnbG9iYWwgJHR4 cF91c2VyLCR2YXJzLCR0eHBjZmc7CgkJZ2xvYmFsICR2YXJzX3ZlbnVlczsKCgkJaW5jbHVk ZV9vbmNlICR0eHBjZmdbJ3R4cGF0aCddLicvbGliL2NsYXNzVGV4dGlsZS5waHAnOwoJCSR0 ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKCgkJZXh0cmFjdChncHNhKGFycmF5X21lcmdlKCR2 YXJzX3ZlbnVlcykpKTsKCgkJJENhdGVnb3J5SUQgPSAkQ2F0ZWdvcnlJRD8kQ2F0ZWdvcnlJ RDowOwoJCSRPdGhlckluZm9faHRtbCA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkT3RoZXJJ bmZvKTsKCgkJc2FmZV91cGRhdGUoInR4cF9qbWNfZXZlbnRfdmVudWUiLAoJCSJuYW1lID0g JyIuYWRkc2xhc2hlcygkbmFtZSkuIicsCgkJQ2F0ZWdvcnlJRCA9ICRDYXRlZ29yeUlELAoJ CWFkZHJlc3MxID0gJyIuYWRkc2xhc2hlcygkYWRkcmVzczEpLiInLAoJCWFkZHJlc3MyID0g JyIuYWRkc2xhc2hlcygkYWRkcmVzczIpLiInLAoJCXN1YnVyYiA9ICciLmFkZHNsYXNoZXMo JHN1YnVyYikuIicsCgkJc3RhdGUgPSAnIi5hZGRzbGFzaGVzKCRzdGF0ZSkuIicsCgkJY291 bnRyeSA9ICciLmFkZHNsYXNoZXMoJGNvdW50cnkpLiInLAoJCXBvc3Rjb2RlID0gJyIuYWRk c2xhc2hlcygkcG9zdGNvZGUpLiInLAoJCXBob25lID0gJyIuYWRkc2xhc2hlcygkcGhvbmUp LiInLAoJCWVtYWlsID0gJyIuYWRkc2xhc2hlcygkZW1haWwpLiInLAoJCXVybCA9ICciLmFk ZHNsYXNoZXMoJHVybCkuIicsCgkJT3RoZXJJbmZvID0gJyIuYWRkc2xhc2hlcygkT3RoZXJJ bmZvKS4iJywKCQlPdGhlckluZm9faHRtbCA9ICckT3RoZXJJbmZvX2h0bWwnIiwKCQkiSUQg PSAnJElEJyIpOwoKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCWptY19l dmVudF9tYW5hZ2VyX3ZlbnVlX3Bvc3QKCS8vIFVzZToJCQkJQ3JlYXRlcyBhIG5ldyB2ZW51 ZSB3aXRoIHVzZXIKCS8vCQkJCWluZm9ybWF0aW9uLgoJLy8gSW5wdXRzOgkJCU5VTEwKCS8v IE91dHB1dHM6CQkJdHJ1ZXxmYWxzZQoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXJf dmVudWVfcG9zdCgpCgl7CgkJZ2xvYmFsICR0eHBfdXNlciwkdmFycywkdHhwY2ZnOwoJCWds b2JhbCAkdmFyc192ZW51ZXM7CgoJCWluY2x1ZGVfb25jZSAkdHhwY2ZnWyd0eHBhdGgnXS4n L2xpYi9jbGFzc1RleHRpbGUucGhwJzsKCQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgoJ CWV4dHJhY3QoZ3BzYShhcnJheV9tZXJnZSgkdmFyc192ZW51ZXMpKSk7CgoJCSRDYXRlZ29y eUlEID0gJENhdGVnb3J5SUQ/JENhdGVnb3J5SUQ6MDsKCQkkT3RoZXJJbmZvX2h0bWwgPSAk dGV4dGlsZS0+VGV4dGlsZVRoaXMoJE90aGVySW5mbyk7CgoJCXNhZmVfaW5zZXJ0KCJ0eHBf am1jX2V2ZW50X3ZlbnVlIiwKCQkibmFtZSA9ICciLmFkZHNsYXNoZXMoJG5hbWUpLiInLAoJ CUNhdGVnb3J5SUQgPSAkQ2F0ZWdvcnlJRCwKCQlhZGRyZXNzMSA9ICciLmFkZHNsYXNoZXMo JGFkZHJlc3MxKS4iJywKCQlhZGRyZXNzMiA9ICciLmFkZHNsYXNoZXMoJGFkZHJlc3MyKS4i JywKCQlzdWJ1cmIgPSAnIi5hZGRzbGFzaGVzKCRzdWJ1cmIpLiInLAoJCXN0YXRlID0gJyIu YWRkc2xhc2hlcygkc3RhdGUpLiInLAoJCWNvdW50cnkgPSAnIi5hZGRzbGFzaGVzKCRjb3Vu dHJ5KS4iJywKCQlwb3N0Y29kZSA9ICciLmFkZHNsYXNoZXMoJHBvc3Rjb2RlKS4iJywKCQlw aG9uZSA9ICciLmFkZHNsYXNoZXMoJHBob25lKS4iJywKCQllbWFpbCA9ICciLmFkZHNsYXNo ZXMoJGVtYWlsKS4iJywKCQl1cmwgPSAnIi5hZGRzbGFzaGVzKCR1cmwpLiInLAoJCU90aGVy SW5mbyA9ICciLmFkZHNsYXNoZXMoJE90aGVySW5mbykuIicsCgkJT3RoZXJJbmZvX2h0bWwg PSAnJE90aGVySW5mb19odG1sJyIpOwoKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKiAtXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5j dGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3JpZXMoKQoJLy8gVXNlOgkJCQlFY2hv ZXMgb3V0IHRoZSBiYXNpYyBsaXN0IG9mCgkvLwkJCQljYXRlZ29yaWVzLgoJLy8gSW5wdXRz OgkJCU5VTEwKCS8vIE91dHB1dHM6CQkJTlVMTCAoZWNob3MgcmVzcG9uc2VzKQoJLyogXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVu Y3Rpb24gam1jX2V2ZW50X21hbmFnZXJfY2F0ZWdvcmllcygpCgl7CgkJLy8gR2V0IHRoZSBn bG9iYWxzIGZyb20gdGV4dHBhdHRlcm4KCQlleHRyYWN0KGdldF9wcmVmcygpKTsKCQkkbHZh cnMgPSBhcnJheSgicGFnZSIsInNvcnQiLCJkaXIiLCJjcml0IiwnZWRpdF9tZXRob2QnKTsK CQlleHRyYWN0KGdwc2EoJGx2YXJzKSk7CgkJZ2xvYmFsICRzdGVwOwoKCQkvLyBTZXQgdGhl IHNvcnQgYnkgYW5kIGRpcmVjdGlvbiB2YXJpYWJsZXMKCQlpZiAoISRzb3J0KSAkc29ydCA9 ICJuYW1lIjsKCQlpZiAoISRkaXIpICRkaXIgPSAiYXNjIjsKCQlpZiAoJGRpciA9PSAiYXNj IikgeyAkbGlua2RpciA9ICJkZXNjIjsgfSBlbHNlIHsgJGxpbmtkaXIgPSAiYXNjIjsgfQoK CQkvLyBXb3JrIG91dCBudW1iZXIgb2YgcGFnZXMKCQkkdG90YWwgPSBnZXRDb3VudCgidHhw X2ptY19ldmVudF9jYXRlZ29yeSIsIjEiKTsKCQkkbGltaXQgPSAoJGFydGljbGVfbGlzdF9w YWdlYnkpID8gJGFydGljbGVfbGlzdF9wYWdlYnkgOiAyNTsKCQkkbnVtUGFnZXMgPSBjZWls KCR0b3RhbC8kbGltaXQpOwoJCSRwYWdlID0gKCEkcGFnZSkgPyAxIDogJHBhZ2U7CgoJCS8v IERlZmluZSBvZmZzZXQgZm9yIGN1cnJlbnQgcGFnZQoJCSRvZmZzZXQgPSAoJHBhZ2UgLSAx KSAqICRsaW1pdDsKCgkJLy8gQ3JlYXRlIHRvcCBsZXZlbCBwYWdlIGJhc2VkIG5hdiBmb3Jt CgkJZWNobyBqbWNfbmF2X2Zvcm0oJ2ptY19ldmVudF9tYW5hZ2VyJywgJ2NhdGVnb3J5X21h bmFnZXInLCAkcGFnZSwgJG51bVBhZ2VzLCAkc29ydCwgJGRpcik7CgoJCSRycyA9IHNhZmVf cm93c19zdGFydCgKCQkJIioiLAoJCQkidHhwX2ptY19ldmVudF9jYXRlZ29yeSIsCgkJCSJJ RCBvcmRlciBieSAkc29ydCAkZGlyIGxpbWl0ICRvZmZzZXQsJGxpbWl0IgoJCSk7CgoJCWlm ICgkcnMpIHsKCQkJZWNobyAnPGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9z dCIgbmFtZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0KCdh cmVfeW91X3N1cmUnKS4nXCcpIj4nLAoJCQlzdGFydFRhYmxlKCdsaXN0JyksCgkJCSc8dHI+ JywKCQkJCWptY19ldmVudF9jb2x1bW5faGVhZCgnQ2F0ZWdvcnknLCAnbmFtZScsICdqbWNf ZXZlbnRfbWFuYWdlcicsIDAsICRsaW5rZGlyLCAnY2F0ZWdvcnlfbWFuYWdlcicpLAoJCQkJ dGQoKSwKCQkJJzwvdHI+JzsKCQkJd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKSB7CgkJCQll eHRyYWN0KCRhKTsKCgkJCQkkbmFtZWxpbmsgPSBlTGluaygnam1jX2V2ZW50X21hbmFnZXIn LCdjYXRlZ29yeV9lZGl0JywnSUQnLCRJRCwkbmFtZSk7CgkJCQkkbW9kYm94ID0gZklucHV0 KCdjaGVja2JveCcsJ3NlbGVjdGVkW10nLCRJRCwnJywnJywnJywnJywnJywkSUQpOwoKCQkJ CWVjaG8gIjx0cj4iLm4sCgkJCQkJdGQoJG5hbWVsaW5rKSwKCQkJCQl0ZCgkbW9kYm94KSwK CQkJCSc8L3RyPicubjsKCQkJfQoJCQllY2hvIHRyKHRkYShzZWxlY3RfYnV0dG9ucygpLmpt Y19ldmVudF9tYW5hZ2VyX211bHRpZWRpdF9mb3JtKCdqbWNfZXZlbnRfbWFuYWdlcicsICdj YXRlZ29yeV9tdWx0aV9lZGl0JyksJyBjb2xzcGFuPSI3IiBzdHlsZT0idGV4dC1hbGlnbjpy aWdodDtib3JkZXI6MHB4IicpKTsKCQkJZWNobyAiPC90YWJsZT48L2Zvcm0+IjsKCQkJZWNo byBwYWdlYnlfZm9ybSgnbGlzdCcsJGFydGljbGVfbGlzdF9wYWdlYnkpOwoJCQl1bnNldCgk c29ydCk7CgkJfQoJCWVsc2UKCQkJZWNobyAnTm8gZW50cmllcyBhdmFpbGFibGUuJzsKCX0K CgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t ICovCgkvLyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3J5X2Zvcm0KCS8v IFVzZToJCQkJQ3JlYXRlcywgYW5kIHdoZXJlIGFwcGxpY2FibGUKCS8vCQkJCWZpbGxzIHRo ZSBmb3JtIGZvciBuZXcvdXBkYXRpbmcKCS8vCQkJCWV4aXN0aW5nIGNhdGVnb3J5LgoJLy8g SW5wdXRzOgkJCSRzdGVwCQkJVFhQCgkvLwkJCQkJJGV4aXN0aW5nX2luZm8JdHJ1ZXxmYWxz ZQoJLy8gT3V0cHV0czoJCQlOVUxMIChlY2hvcyByZXNwb25zZXMpCgkvKiBfLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBq bWNfZXZlbnRfbWFuYWdlcl9jYXRlZ29yeV9mb3JtKCRzdGVwLCAkZXhpc3RpbmdfaW5mbyA9 IGZhbHNlKQoJewoJCS8vIE9idGFpbiBnbG9iYWwgdmFyaWFibGVzCgkJZ2xvYmFsICR2YXJz X2NhdGVnb3JpZXM7CgkJJGlkID0gKGdwcygnSUQnKT9ncHMoJ0lEJyk6JycpOwoJCWlmKCRp ZCAmJiAoJHN0ZXA9PSdjYXRlZ29yeV9lZGl0JyB8fCAkc3RlcD09J2NhdGVnb3J5X3NhdmUn IHx8ICRzdGVwPT0nY2F0ZWdvcnlfcG9zdCcpKSB7CgkJCSRyb3cgPSAoc2FmZV9yb3coIioi LCAidHhwX2ptY19ldmVudF9jYXRlZ29yeSIsICJJRCA9ICckaWQnIikpOwoJCQlmb3JlYWNo KCRyb3cgYXMgJG49PiR2KQoJCQkJJCRuID0gc3RyaXBzbGFzaGVzKCR2KTsKCQl9CgoJCWlm ICghJGV4aXN0aW5nX2luZm8pewoJCQlmb3JlYWNoKCR2YXJzX2NhdGVnb3JpZXMgYXMgJHZh cikgewoJCQkJJCR2YXIgPSAnJzsKCQkJfQoJCX0KCgkJJG90aGVyX2luZm8gPSAnPHRleHRh cmVhIG5hbWU9Ik90aGVySW5mbyIgY29scz0iNDAiIHJvd3M9IjciIHRhYmluZGV4PSI0Ij4n LiRPdGhlckluZm8uJzwvdGV4dGFyZWE+JzsKCgkJZWNobyAnPGZvcm0gYWN0aW9uPSJpbmRl eC5waHAiIG1ldGhvZD0icG9zdCI+JzsKCQllY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBu YW1lPSJldmVudCIgdmFsdWU9ImptY19ldmVudF9tYW5hZ2VyIiAvPic7CgkJZWNobyAnPGlu cHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3RlcCIgdmFsdWU9IicuKCRleGlzdGluZ19pbmZv PydjYXRlZ29yeV9zYXZlJzonY2F0ZWdvcnlfcG9zdCcpLiciIC8+JzsKCQllY2hvICc8aW5w dXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IicuKCRJRD8kSUQ6JycpLiciIC8+ JzsKCgkJZWNobyBzdGFydFRhYmxlKCdlZGl0Jyk7CgkJZWNobyAiPHRyPjx0ZD5OYW1lPC90 ZD48dGQ+Ii5mSW5wdXQoJ3RleHQnLCAnbmFtZScsICRuYW1lLCAnJywgJycsICcnLCAnNTAl JywgJzQnKS4iPC90ZD48L3RyPiI7CgkJZWNobyAiPHRyPjx0ZD5PdGhlciBJbmZvPC90ZD48 dGQ+Ii4kb3RoZXJfaW5mby4iPC90ZD48L3RyPiI7CgkJZWNobyAiPHRyPjx0ZCBjb2xzcGFu PVwiMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPiIuZklucHV0KCdzdWJtaXQn LCAnJywgKCRJRD8nU2F2ZSBDYXRlZ29yeSc6J0FkZCBDYXRlZ29yeScpLCAnJywgJycsICcn LCAnNTAlJywgJzQnKS4iPC90ZD48L3RyPiI7CgogICAgCWVjaG8gJzwvdGFibGU+PC9mb3Jt Pic7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl9jYXRlZ29yeV9z YXZlCgkvLyBVc2U6CQkJCVVwZGF0ZXMgYW4gZXhpc3RpbmcgY2F0ZWdvcnkncwoJLy8JCQkJ aW5mb3JtYXRpb24uCgkvLyBJbnB1dHM6CQkJTlVMTAoJLy8gT3V0cHV0czoJCQl0cnVlfGZh bHNlCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fICovCglmdW5jdGlvbiBqbWNfZXZlbnRfbWFuYWdlcl9jYXRlZ29yeV9zYXZlKCkKCXsK CQlnbG9iYWwgJHR4cF91c2VyLCR2YXJzLCR0eHBjZmc7CgkJZ2xvYmFsICR2YXJzX2NhdGVn b3JpZXM7CgoJCWluY2x1ZGVfb25jZSAkdHhwY2ZnWyd0eHBhdGgnXS4nL2xpYi9jbGFzc1Rl eHRpbGUucGhwJzsKCQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgoJCWV4dHJhY3QoZ3Bz YShhcnJheV9tZXJnZSgkdmFyc19jYXRlZ29yaWVzKSkpOwoKCQkkT3RoZXJJbmZvX2h0bWwg PSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMoJE90aGVySW5mbyk7CgoJCXNhZmVfdXBkYXRlKCJ0 eHBfam1jX2V2ZW50X2NhdGVnb3J5IiwKCQkibmFtZSA9ICciLmFkZHNsYXNoZXMoJG5hbWUp LiInLAoJCU90aGVySW5mbyA9ICciLmFkZHNsYXNoZXMoJE90aGVySW5mbykuIicsCgkJT3Ro ZXJJbmZvX2h0bWwgPSAnJE90aGVySW5mb19odG1sJyIsCgkJIklEID0gJyRJRCciKTsKCgkJ cmV0dXJuIHRydWU7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl9j YXRlZ29yeV9wb3N0CgkvLyBVc2U6CQkJCUNyZWF0ZXMgYSBuZXcgY2F0ZWdvcnkgd2l0aCB1 c2VyCgkvLwkJCQlpbmZvcm1hdGlvbi4KCS8vIElucHV0czoJCQlOVUxMCgkvLyBPdXRwdXRz OgkJCXRydWV8ZmFsc2UKCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGptY19ldmVudF9tYW5hZ2VyX2NhdGVnb3J5 X3Bvc3QoKQoJewoJCWdsb2JhbCAkdHhwX3VzZXIsJHZhcnMsJHR4cGNmZzsKCQlnbG9iYWwg JHZhcnNfY2F0ZWdvcmllczsKCgkJaW5jbHVkZV9vbmNlICR0eHBjZmdbJ3R4cGF0aCddLicv bGliL2NsYXNzVGV4dGlsZS5waHAnOwoJCSR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKCgkJ ZXh0cmFjdChncHNhKGFycmF5X21lcmdlKCR2YXJzX2NhdGVnb3JpZXMpKSk7CgoJCSRPdGhl ckluZm9faHRtbCA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkT3RoZXJJbmZvKTsKCgkJc2Fm ZV9pbnNlcnQoInR4cF9qbWNfZXZlbnRfY2F0ZWdvcnkiLAoJCSJuYW1lID0gJyIuYWRkc2xh c2hlcygkbmFtZSkuIicsCgkJT3RoZXJJbmZvID0gJyIuYWRkc2xhc2hlcygkT3RoZXJJbmZv KS4iJywKCQlPdGhlckluZm9faHRtbCA9ICckT3RoZXJJbmZvX2h0bWwnIik7CgoJCXJldHVy biB0cnVlOwoJfQoKCgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJLyoJ CVVTRUZVTCBGVU5DVElPTlMJCSovCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCgoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJam1jX2V2ZW50X21hbmFnZXJfcHJlZnMKCS8vIFVz ZToKCS8vIElucHV0czoJCQkkZXZlbnQJVFhQCgkvLwkJCQkJJHN0ZXAJVFhQCgkvLyBPdXRw dXRzOgkJCU5VTEwgKGVjaG9zKQoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50X21hbmFnZXJfcHJl ZnMoJGV2ZW50LCAkc3RlcCkgewoJCWdsb2JhbCAkam1jX2V2ZW50X21hbmFnZXJfcHJlZnM7 CgkJJGptY19ldmVudF9tYW5hZ2VyX3ByZWZzID0gYXJyYXkoKTsKCgkJLy8gV2hhdCBkbyBp IG5lZWQgZm9yIHByZWZlcmVuY2VzPwoKCQkvLyBwcygpIHJldHVybnMgdGhlIGNvbnRlbnRz IG9mIFBPU1QgdmFycywgaWYgYW55CgkJcGFnZXRvcCgiRXZlbnQgTWFuYWdlciBQcmVmZXJl bmNlcyIsICJQcmVmZXJlbmNlcyIpOwoKCQkvLyBJbnN0YWxsIHRoZSBldmVudCBtYW5hZ2Vy CgkJZWNobyBqbWNfZXZlbnRfbWFuYWdlcl9pbnN0YWxsKCk7CgoJCWVjaG8gdGFnKCJqbWNf ZXZlbnRfbWFuYWdlciBQcmVmZXJlbmNlcyIsICJoMyIpOwoKCQkvLyBUaGUgZUlucHV0L3NJ bnB1dCBwYXJ0IG9mIHRoZSBmb3JtIGlzIGltcG9ydGFudCwgc2V0dGluZyB0aGUgZXZlbnQg YW5kIHN0ZXAgcmVzcGVjdGl2ZWx5Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfbmF2X2Zv cm0KCS8vIFVzZToJCQkJQ3JlYXRlIHRoZSByb2xsaW5nIHBhZ2VzLgoJLy8gSW5wdXRzOgkJ CSRldmVudAkJVFhQCgkvLwkJCQkJJHN0ZXAJCVRYUAoJLy8JCQkJCSRwYWdlCQlwYWdlIGJl aW5nIHZpZXdlZAoJLy8JCQkJCSRudW1QYWdlcwl0b3RhbCBudW1iZXIgb2YgcGFnZXMKCS8v CQkJCQkkc29ydAkJc29ydCBieSB3aGF0CgkvLwkJCQkJJGRpcgkJc29ydCBkaXJlY3Rpb24K CS8vIE91dHB1dHM6CQkJVGhlIG5hdmlnYXRpb24gYnV0dG9uIHNldCBmb3IKCS8vCQkJCW11 bHRpcGFnZSBzb3J0aW5nLgoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX25hdl9mb3JtKCRldmVudCwgJHN0 ZXAsICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0LCAkZGlyKQoJewoJCSRuYXZbXSA9ICgkcGFn ZSA+IDEpCgkJCT8Jam1jX1ByZXZOZXh0TGluaygkZXZlbnQsICRzdGVwLCAkcGFnZS0xLGdU eHQoJ3ByZXYnKSwncHJldicsJHNvcnQsICRkaXIpCgkJCToJJyc7CgoJCSRuYXZbXSA9IHNw LnNtYWxsKCRwYWdlLiAnLycuJG51bVBhZ2VzKS5zcDsKCgkJJG5hdltdID0gKCRwYWdlICE9 ICRudW1QYWdlcykKCQkJPwlqbWNfUHJldk5leHRMaW5rKCRldmVudCwgJHN0ZXAsICRwYWdl KzEsZ1R4dCgnbmV4dCcpLCduZXh0Jywkc29ydCwgJGRpcikKCQkJOgknJzsKCgkJaWYgKCRu YXYpIHJldHVybiBncmFmKGpvaW4oJycsJG5hdiksJyBhbGlnbj0iY2VudGVyIicpOwoJfQoK CS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0g Ki8KCS8vIEZ1bmN0aW9uOgkJam1jX1ByZXZOZXh0TGluawoJLy8gVXNlOgkJCQlDcmVhdGUg dGhlIGJ1dHRvbnMgZm9yIHRoZQoJLy8JCQkJcm9sbGluZyBwYWdlcy4KCS8vIElucHV0czoJ CQkkZXZlbnQJCVRYUAoJLy8JCQkJCSRzdGVwCQlUWFAKCS8vCQkJCQkkdG9wYWdlCQlsaW5r ZWQgcGFnZQoJLy8JCQkJCSRsYWJlbAkJbGFiZWwgdXNlZCAoZWcgJ25leHQnKQoJLy8JCQkJ CSR0eXBlCQlwcmV2L25leHQgYnV0dG9uCgkvLwkJCQkJJHNvcnQJCXNvcnQgYnkgd2hhdAoJ Ly8JCQkJCSRkaXIJCXNvcnQgZGlyZWN0aW9uCgkvLyBPdXRwdXRzOgkJCVRoZSBuYXZpZ2F0 aW9uIGJ1dHRvbiBmb3IgbmV4dCBvcgoJLy8JCQkJcHJldmlvdXMgcGFnZXMuCgkvKiBfLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5j dGlvbiBqbWNfUHJldk5leHRMaW5rKCRldmVudCwkc3RlcCwkdG9wYWdlLCRsYWJlbCwkdHlw ZSwkc29ydD0nJywkZGlyPScnKQoJewoJCXJldHVybiBqb2luKCcnLGFycmF5KAoJCQknPGEg aHJlZj0iP2V2ZW50PScuJGV2ZW50LmEuJ3N0ZXA9Jy4kc3RlcC5hLidwYWdlPScuJHRvcGFn ZSwKCQkJKCRzb3J0KSA/IGEuJ3NvcnQ9Jy4kc29ydCA6ICcnLAoJCQkoJGRpcikgPyBhLidk aXI9Jy4kZGlyIDogJycsCgkJCSciIGNsYXNzPSJuYXZsaW5rIj4nLAoJCQkoJHR5cGU9PSJw cmV2IikgPyAnJiM4MjQ5Oycuc3AuJGxhYmVsIDogJGxhYmVsLnNwLicmIzgyNTA7JywKCQkJ JzwvYT4nCgkJKSk7Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdlcl9p bnN0YWxsCgkvLyBVc2U6CQkJCUluc3RhbGwgdGhlIGV2ZW50IG1hbmFnZXIgYW5kCgkvLwkJ CQljcmVhdGUgZHVtbXkgZW50cmllcy4KCS8vIElucHV0czoJCQlOVUxMCgkvLyBPdXRwdXRz OgkJCU5VTEwgIChlY2hvcykKCS8qIF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGptY19ldmVudF9tYW5hZ2VyX2luc3Rh bGwoKQoJewoJCS8vIFNRTCBEQiBJbmZvcm1hdGlvbgoJCWdsb2JhbCAkREIsJHR4cGNmZywg JHFjb3VudCwgJHByb2R1Y3Rpb25fc3RhdHVzOwoKCQkvLyBDaGVjayB0byBzZWUgaWYgdGhl IGV2ZW50IGxpc3RpbmcgdGFibGUgcmVxdWlyZXMgaW5zdGFsbGF0aW9uCgkJaWYoIXNhZmVf Y291bnQoInR4cF9qbWNfZXZlbnQiLCAnSUQnKSkKCQkJJGluc3RhbGxbJ2V2ZW50J10gPSB0 cnVlOwoJCWVsc2UKCQkJJGluc3RhbGxbJ2V2ZW50J10gPSBmYWxzZTsKCgkJLy8gQ2hlY2sg dG8gc2VlIGlmIHRoZSB2ZW51ZSBsaXN0aW5nIHRhYmxlIHJlcXVpcmVzIGluc3RhbGxhdGlv bgoJCWlmKCFzYWZlX2NvdW50KCJ0eHBfam1jX2V2ZW50X3ZlbnVlIiwgJ0lEJykpCgkJCSRp bnN0YWxsWyd2ZW51ZSddID0gdHJ1ZTsKCQllbHNlCgkJCSRpbnN0YWxsWyd2ZW51ZSddID0g ZmFsc2U7CgoJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgY2F0ZWdvcnkgdGFibGUgcmVxdWly ZXMgaW5zdGFsbGF0aW9uCgkJaWYoIXNhZmVfY291bnQoInR4cF9qbWNfZXZlbnRfY2F0ZWdv cnkiLCAnSUQnKSkKCQkJJGluc3RhbGxbJ2NhdGVnb3J5J10gPSB0cnVlOwoJCWVsc2UKCQkJ JGluc3RhbGxbJ2NhdGVnb3J5J10gPSBmYWxzZTsKCgkJLy8gSWYgdGFibGVzIGV4aXN0IChj aGVjayBpcyB2aWEgZW50cnkgYW5kIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gcHJvcGVybHkg cmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXJlIG1heSBiZSBhbiBlbXB0eSB0YWJsZSkKCQlp ZighJGluc3RhbGxbJ2V2ZW50J10gJiYgISRpbnN0YWxsWyd2ZW51ZSddICYmICEkaW5zdGFs bFsnY2F0ZWdvcnknXSkKCQkJcmV0dXJuOwoKCQkvLyAoYykgQ2hyaXMgRGVhbiBUZXh0cGF0 dGVybiBkYXRhYmFzZSBjaGVja2VyCgkJLy8gU1RBUlQKCQkkdmVyc2lvbiA9IG15c3FsX2dl dF9zZXJ2ZXJfaW5mbygpOwoJCS8vVXNlICJFTkdJTkUiIGlmIHZlcnNpb24gb2YgTXlTUUwg PiAoNC4wLjE4IG9yIDQuMS4yKQoJCSR0YWJsZXR5cGUgPSAoIGludHZhbCgkdmVyc2lvblsw XSkgPj0gNSB8fCBwcmVnX21hdGNoKCcjXjRcLigwXC5bMi05XXwoMVs4OV0pKXwoMVwuWzIt OV0pIycsJHZlcnNpb24pKQoJCQkJCQk/ICIgRU5HSU5FPU15SVNBTSAiCgkJCQkJCTogIiBU WVBFPU15SVNBTSAiOwoKCQkvLyBPbiA0LjEgb3IgZ3JlYXRlciB1c2UgdXRmOC10YWJsZXMK CQlpZiAoIGlzc2V0KCRkYmNoYXJzZXQpICYmIChpbnR2YWwoJHZlcnNpb25bMF0pID49IDUg fHwgcHJlZ19tYXRjaCgnI140XC5bMS05XSMnLCR2ZXJzaW9uKSkpCgkJewoJCQkkdGFibGV0 eXBlIC49ICIgQ0hBUkFDVEVSIFNFVCA9ICRkYmNoYXJzZXQgIjsKCQkJaWYgKGlzc2V0KCRk YmNvbGxhdGUpKQoJCQkJJHRhYmxldHlwZSAuPSAiIENPTExBVEUgJGRiY29sbGF0ZSAiOwoJ CQlteXNxbF9xdWVyeSgiU0VUIE5BTUVTICIuJGRiY2hhcnNldCk7CgkJfQoKCQkvLyBEZWZh dWx0IHRvIG1lc3N5IFVSTHMgaWYgd2Uga25vdyB0aGV5IHdvbid0IHdvcmsKCQkkcGVybWxp bmtfbW9kZSA9ICdzZWN0aW9uX2lkX3RpdGxlJzsKCQlpZiAoaXNfY2FsbGFibGUoJ2FwYWNo ZV9nZXRfbW9kdWxlcycpKSB7CgkJCSRtb2R1bGVzID0gYXBhY2hlX2dldF9tb2R1bGVzKCk7 CgkJCWlmICghaW5fYXJyYXkoJ21vZF9yZXdyaXRlJywgJG1vZHVsZXMpKQoJCQkJJHBlcm1s aW5rX21vZGUgPSAnbWVzc3knOwoJCX0KCQllbHNlIHsKCQkJJHNlcnZlcl9zb2Z0d2FyZSA9 IChAJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddIHx8IEAkX1NFUlZFUlsnSFRUUF9IT1NU J10pCgkJCQk/ICggKEAkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10pID8gIEAkX1NFUlZF UlsnU0VSVkVSX1NPRlRXQVJFJ10gOiAgJF9TRVJWRVJbJ0hUVFBfSE9TVCddICkKCQkJCTog Jyc7CgkJICAgaWYgKCFzdHJpc3RyKCRzZXJ2ZXJfc29mdHdhcmUsICdBcGFjaGUnKSkKCQkJ CSRwZXJtbGlua19tb2RlID0gJ21lc3N5JzsKCQl9CgoJCS8vIEVORAoKCQkvLyBDcmVhdGUg dGhlIFNRTCBDb21tYW5kIGFycmF5CgkJJGNyZWF0ZV9zcWwgPSBhcnJheSgpOwoKCQkvLyBJ ZiB0aGUgZXZlbnQgdGFibGUgbmVlZHMgaW5zdGFsbGluZywgYWRkIFNRTCBjb21tYW5kcyB0 byAkY3JlYXRlX3NxbAoJCWlmKCRpbnN0YWxsWydldmVudCddKQoJCXsKCQkJJGNyZWF0ZV9z cWxbXSA9IkNSRUFURSBUQUJMRSBgIi5QRlguInR4cF9qbWNfZXZlbnRgICgKICBgSURgIGlu dCgxMSkgTk9UIE5VTEwgYXV0b19pbmNyZW1lbnQsCiAgYENhdGVnb3J5SURgIHZhcmNoYXIo NjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYG5hbWVgIHZhcmNoYXIoMjU1KSBOVUxMIGRl ZmF1bHQgJycsCiAgYHN0YXJ0X0RhdGVUaW1lYCBkYXRldGltZSBOT1QgTlVMTCBkZWZhdWx0 ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywKICBgZmluaXNoX0RhdGVUaW1lYCBkYXRldGltZSBO T1QgTlVMTCBkZWZhdWx0ICcwMDAwLTAwLTAwIDAwOjAwOjAwJywKICBgQXV0aG9ySURgIHZh cmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYExhc3RNb2RgIGRhdGV0aW1lIE5P VCBOVUxMIGRlZmF1bHQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAogIGBMYXN0TW9kSURgIHZh cmNoYXIoNjQpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYFZlbnVlSURgIHZhcmNoYXIoNjQp IE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYFByaWNlYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwg ZGVmYXVsdCAnJywKICBgT3RoZXJCYW5kc2AgbWVkaXVtdGV4dCBOT1QgTlVMTCwKICBgT3Ro ZXJCYW5kc19odG1sYCBtZWRpdW10ZXh0IE5PVCBOVUxMLAogIGBPdGhlckluZm9gIHRleHQg Tk9UIE5VTEwsCiAgYE90aGVySW5mb19odG1sYCBtZWRpdW10ZXh0IE5PVCBOVUxMLAogIGBj b21tZW50c19jb3VudGAgaW50KDgpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogIFBSSU1BUlkg S0VZICAoYElEYCksCiAgS0VZIGBzdGFydF9EYXRlVGltZWAgKGBzdGFydF9EYXRlVGltZWAp LAogIEtFWSBgZmluaXNoX0RhdGVUaW1lYCAoYGZpbmlzaF9EYXRlVGltZWApLAogIEZVTExU RVhUIEtFWSBgc2VhcmNoaW5nYCAoYE90aGVyQmFuZHNgLGBPdGhlckluZm9gKQopICR0YWJs ZXR5cGUgUEFDS19LRVlTPTEgQVVUT19JTkNSRU1FTlQ9MiAiOwoJCX0KCgkJLy8gSWYgdGhl IHZlbnVlIHRhYmxlIG5lZWRzIGluc3RhbGxpbmcsIGFkZCBTUUwgY29tbWFuZHMgdG8gJGNy ZWF0ZV9zcWwKCQlpZigkaW5zdGFsbFsndmVudWUnXSkKCQl7CgkJCSRjcmVhdGVfc3FsW10g PSJDUkVBVEUgVEFCTEUgYCIuUEZYLiJ0eHBfam1jX2V2ZW50X3ZlbnVlYCAoCiAgYElEYCBp bnQoMTEpIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAogIGBDYXRlZ29yeUlEYCB2YXJjaGFy KDY0KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBuYW1lYCB2YXJjaGFyKDI1NSkgTk9UIE5V TEwgZGVmYXVsdCAnJywKICBgaW1hZ2VJRGAgdmFyY2hhcig2NCkgTlVMTCBkZWZhdWx0ICcn LAogIGBhZGRyZXNzMWAgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgYGFk ZHJlc3MyYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgc3VidXJiYCB2 YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgc3RhdGVgIHZhcmNoYXIoMjU1 KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBjb3VudHJ5YCB2YXJjaGFyKDI1NSkgTk9UIE5V TEwgZGVmYXVsdCAnJywKICBgcG9zdGNvZGVgIHZhcmNoYXIoMTApIE5PVCBOVUxMIGRlZmF1 bHQgJycsCiAgYHBob25lYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBg dXJsYCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICBgZW1haWxgIHZhcmNo YXIoMjU1KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBPdGhlckluZm9gIHRleHQgTk9UIE5V TEwsCiAgYE90aGVySW5mb19odG1sYCBtZWRpdW10ZXh0IE5PVCBOVUxMLAogIGBjb21tZW50 c19jb3VudGAgaW50KDgpIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAogIFBSSU1BUlkgS0VZICAo YElEYCksCiAgS0VZIGBuYW1lYCAoYG5hbWVgKSwKICBGVUxMVEVYVCBLRVkgYHNlYXJjaGlu Z2AgKGBPdGhlckluZm9gKQopICR0YWJsZXR5cGUgUEFDS19LRVlTPTEgQVVUT19JTkNSRU1F TlQ9MiAiOwoJCX0KCQkvLyBJZiB0aGUgdmVudWUgdGFibGUgbmVlZHMgaW5zdGFsbGluZywg YWRkIFNRTCBjb21tYW5kcyB0byAkY3JlYXRlX3NxbAoJCWlmKCRpbnN0YWxsWydjYXRlZ29y eSddKQoJCXsKCQkJJGNyZWF0ZV9zcWxbXSA9IkNSRUFURSBUQUJMRSBgIi5QRlguInR4cF9q bWNfZXZlbnRfY2F0ZWdvcnlgICgKICBgSURgIGludCgxMSkgTk9UIE5VTEwgYXV0b19pbmNy ZW1lbnQsCiAgYG5hbWVgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCBkZWZhdWx0ICcnLAogIGBP dGhlckluZm9gIHRleHQgTk9UIE5VTEwsCiAgYE90aGVySW5mb19odG1sYCBtZWRpdW10ZXh0 IE5PVCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYElEYCksCiAgS0VZIGBuYW1lYCAoYG5hbWVg KSwKICBGVUxMVEVYVCBLRVkgYHNlYXJjaGluZ2AgKGBPdGhlckluZm9gKQopICR0YWJsZXR5 cGUgUEFDS19LRVlTPTEgQVVUT19JTkNSRU1FTlQ9MiAiOwoJCX0KCQkvLyBFcnJvciBSZXR1 cm4gdmFyaWFibGUKCQkkZXJyb3JzID0gIiI7CgoJCS8vIEZvcmVhY2ggU1FMIGNvbW1hbmQg ZG8gcXVlcnkgYW5kIGFkZCBlcnJvcnMgKGlmIGFueSkgZm9yIHJldHVybgoJCWZvcmVhY2gg KCRjcmVhdGVfc3FsIGFzICRxdWVyeSkKCQl7CgkJCSRyZXN1bHQgPSBteXNxbF9xdWVyeSgk cXVlcnkpOwoJCQlpZiAoISRyZXN1bHQpCgkJCXsKCQkJCSRlcnJvcnMgLj0gKCEkZXJyb3Jz P3RhZygiRXZlbnQgQ3JlYXRlIFRhYmxlcyBNeVNRTCBFcnJvcnMiLCJoMyIpLiI8b2w+XHJc biI6IiIpOwoJCQkJJGVycm9ycyAuPSB0YWcobXlzcWxfZXJyb3IoKSwibGkiKTsKCQkJCSRl cnJvcnMgLj0gIjwhLS1cclxuICRxdWVyeSBcclxuLS0+XHJcbiI7CgkJCX0KCQl9CgoJCWlm ICgkaW5zdGFsbFsnZXZlbnQnXSkKCQkJc2FmZV9pbnNlcnQoInR4cF9qbWNfZXZlbnQiLAoJ CQkiQ2F0ZWdvcnlJRCA9ICcxJywKCQkJbmFtZSA9ICdBbiBldmVudCcsCgkJCXN0YXJ0X0Rh dGVUaW1lID0gbm93KCksCgkJCWZpbmlzaF9EYXRlVGltZSA9IG5vdygpLAoJCQlBdXRob3JJ RCA9ICdqbWNfZXZlbnRfbWFuYWdlcicsCgkJCVZlbnVlSUQgPSAnMScsCgkJCVByaWNlID0g J0hvdyBtdWNoPycsCgkJCU90aGVyQmFuZHMgPSAnJywKCQkJT3RoZXJCYW5kc19odG1sID0g JycsCgkJCU90aGVySW5mbyA9ICcnLAoJCQlPdGhlckluZm9faHRtbCA9ICcnIik7CgkJaWYg KCRpbnN0YWxsWyd2ZW51ZSddKQoJCQlzYWZlX2luc2VydCgidHhwX2ptY19ldmVudF92ZW51 ZSIsCgkJCSJJRCA9IDEsCgkJCUNhdGVnb3J5SUQgPSAnMScsCgkJCW5hbWUgPSAnQSB2ZW51 ZScsCgkJCWltYWdlSUQgPSAnJywKCQkJYWRkcmVzczEgPSAnJywKCQkJYWRkcmVzczIgPSAn JywKCQkJc3VidXJiID0gJycsCgkJCXN0YXRlID0gJycsCgkJCWNvdW50cnkgPSAnJywKCQkJ cG9zdGNvZGUgPSAnJywKCQkJcGhvbmUgPSAnMTgwMCAwMDAgMDAwJywKCQkJdXJsID0gJ2h0 dHA6Ly93d3cudGhldXJsLmNvbScsCgkJCWVtYWlsID0gJ2luZm9AdGhldXJsLmNvbScsCgkJ CU90aGVySW5mbyA9ICcnLAoJCQlPdGhlckluZm9faHRtbCA9ICcnLAoJCQljb21tZW50c19j b3VudCA9ICcnIgoJCQkpOwoJCWlmICgkaW5zdGFsbFsnY2F0ZWdvcnknXSkKCQkJc2FmZV9p bnNlcnQoInR4cF9qbWNfZXZlbnRfY2F0ZWdvcnkiLAoJCQkiSUQgPSAxLAoJCQluYW1lID0g J0EgQ2F0ZWdvcnknLAoJCQlPdGhlckluZm8gPSAnU29tZXRoaW5nIGdvcnkhJywKCQkJT3Ro ZXJJbmZvX2h0bWwgPSAnPHA+U29tZXRoaW5nIEdvcnkhPC9wPiciCgkJCSk7CgoKCQkvLyBJ ZiBubyBlcnJvcnMsIHNldCBlcnJvcnMgdG8gZmFsc2UKCQkkZXJyb3JzID0gKCEkZXJyb3Jz P2ZhbHNlOiRlcnJvcnMuIjwvb2w+Iik7CgkJLy8gUmV0dXJuIGVycm9ycyB0byBjYWxsZXIg KGVpdGhlciBmYWxzZSBpZiBub25lIG9yIGVycm9yIGluZm9ybWF0aW9uIGlmIG5vdAoJCXJl dHVybiB0YWcodGFnKCRlcnJvcnMsInRkIiksInRyIik7CgoJCS8vIEV2ZW50CgkJLy8gVGFi bGU6CQl0eHBfam1jX2V2ZW50CgkJLy8gVGltZToKCQkvLyBEYXRlOgoJCS8vIExvY2F0aW9u Ogl2Q2FyZCBvZiBTUUwgRXZlbnQgTG9jYXRpb24KCQkvLyBQcmljZToKCQkvLyBPdGhlciBC YW5kczoKCQkvLyBPdGhlciBJbmZvcm1hdGlvbjoKCgkJLy8gVmVudWUKCQkvLyBUYWJsZToJ CXR4cF9qbWNfZXZlbnRfdmVudWUKCQkvLyBOYW1lOgoJCS8vIEFkZHJlc3M6CgkJLy8gUGhv bmU6CgkJLy8gdXJsOgoJCS8vIGVtYWlsOgoJCS8vIE90aGVyIEluZm9ybWF0aW9uOgoKCQkv LyBDYXRlZ29yaWVzCgkJLy8gVGFibGU6CQl0eHBfam1jX2V2ZW50X2NhdGVnb3J5CgkJLy8g TmFtZToKCQkvLyBLZXk6CgkJLy8gVHlwZToKCQkvLyBJbmZvcm1hdGlvbjoKCX0KCgkvKiAt Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkv LyBGdW5jdGlvbjoJCWptY19ldmVudF9tYW5hZ2VyX2luc3RhbGwKCS8vIFVzZToJCQkJQ29s dW1uIGhlYWRlciBjcmVhdG9yLgoJLy8gSW5wdXRzOgkJCSR2YWx1ZQkJCU5hbWUgb2YgVEgK CS8vCQkJCQkkc29ydAkJCXNvcnQgYnkgPwoJLy8JCQkJCSRjdXJyZW50X2V2ZW50CVRYUAoJ Ly8JCQkJCSRpc2xpbmsJCQlpZiBpdCBpcyBhIGxpbmsKCS8vCQkJCQkkZGlyCQkJZGlyZWN0 aW9uIG9mIHNvcnQKCS8vCQkJCQkkY3VycmVudF9zdGVwCVRYUCAoYWthICRzdGVwKQoJLy8g T3V0cHV0czoJCQkkb3V0cHV0X2h0bWwJaHRtbCB0byBiZSBvdXRwdXQKCS8vIE5vdGVzOgkJ CUhhY2tlZCB2ZXJzaW9ucyBmcm9tIFRYUAoJLyogXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVuY3Rpb24gam1jX2V2ZW50X2NvbHVt bl9oZWFkKCR2YWx1ZSwgJHNvcnQ9JycsICRjdXJyZW50X2V2ZW50PScnLCAkaXNsaW5rPScn LCAkZGlyPScnLCAkY3VycmVudF9zdGVwPScnKQoJewoJCSRvdXRwdXRfaHRtbCA9ICc8dGgg Y2xhc3M9InNtYWxsIj48c3Ryb25nPic7CgkJCWlmICgkaXNsaW5rKSB7CgkJCQkkb3V0cHV0 X2h0bWwgLj0gJzxhIGhyZWY9ImluZGV4LnBocCc7CgkJCQkkb3V0cHV0X2h0bWwgLj0gKCRz b3J0KSA/ICI/c29ydD0kc29ydCI6Jyc7CgkJCQkkb3V0cHV0X2h0bWwgLj0gKCRkaXIpID8g YS4iZGlyPSRkaXIiOicnOwoJCQkJJG91dHB1dF9odG1sIC49ICgkY3VycmVudF9ldmVudCkg PyBhLiJldmVudD0kY3VycmVudF9ldmVudCI6Jyc7CgkJCQkkb3V0cHV0X2h0bWwgLj0gYS4i c3RlcD0kY3VycmVudF9zdGVwXCI+IjsKCQkJfQoJCSRvdXRwdXRfaHRtbCAuPSBnVHh0KCR2 YWx1ZSk7CgkJCWlmICgkaXNsaW5rKSB7ICRvdXRwdXRfaHRtbCAuPSAiPC9hPiI7IH0KCQkk b3V0cHV0X2h0bWwgLj0gJzwvc3Ryb25nPjwvdGg+JzsKCQlyZXR1cm4gJG91dHB1dF9odG1s OwoJfQoKCS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy0gKi8KCS8vIEZ1bmN0aW9uOgkJaW1hZ2V0YWcKCS8vIFVzZToJCQkJQ3JlYXRlIGlt YWdlIHRhZwoJLy8gSW5wdXRzOgkJCSRpbWFnZV9pZAkJSUQgb2YgaW1hZ2UgdG8gZ2V0Cgkv LyBPdXRwdXRzOgkJCSRyZXR1cm4gY29kZQlodG1sIHRvIGJlIG91dHB1dAoJLy8gTm90ZXM6 CQkJWUVUIFRPIEJFIElNUExFTUVOVEVEISEhCgkvKiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBpbWFnZXRhZygkaW1h Z2VfaWQpCgl7CgkJZ2xvYmFsICRzaXRldXJsLCAkaW1nX2RpcjsKCgkJJGltYWdlID0gc2Fm ZV9yb3dzKCIqIiwgInR4cF9pbWFnZSIsICJpZCA9ICRpbWFnZV9pZCIpOwoJCWlmKCRpbWFn ZSkKCQl7CgkJCWV4dHJhY3QoJGltYWdlWzBdKTsKCgkJCSRyZXR1cm5fY29kZSA9ICI8aW1n IHNyYz1cImh0dHA6Ly8iLiRzaXRldXJsLicvJy4kaW1nX2Rpci4nLycuJGlkLiJ0LmpwZ1wi IGFsdD1cIiRhbHRcIiAvPiI7CgoJCQlyZXR1cm4gJHJldHVybl9jb2RlOwoJCX0KCQllbHNl CgkJCXJldHVybiAiIjsKCX0KCgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJCXZlbnVlZHJvcGRvd24KCS8v IFVzZToJCQkJQ3JlYXRlIFNFTEVDVCBvZiB2ZW51ZXMKCS8vIElucHV0czoJCQkkVmVudWVJ RAkJRGVmYXVsdCBWZW51ZUlECgkvLwkJCQkJJHRhYgkJCXRhYmluZGV4ICh1c2FiaWxpdHkp CgkvLyBPdXRwdXRzOgkJCSRyZXR1cm4gY29kZQlodG1sIHRvIGJlIG91dHB1dAoJLyogXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXyAqLwoJZnVu Y3Rpb24gdmVudWVkcm9wZG93bigkVmVudWVJRCA9ICcnLCAkdGFiPScnKQoJewoJCSRycyA9 IHNhZmVfcm93c19zdGFydCgKCQkJIklELCBuYW1lIiwKCQkJInR4cF9qbWNfZXZlbnRfdmVu dWUiLAoJCQkiSUQgb3JkZXIgYnkgbmFtZSBhc2MiCgkJKTsKCgkJaWYoJHJzKQoJCXsKCQkJ JG91dCA9ICI8c2VsZWN0IG5hbWU9XCJWZW51ZUlEXCIgdGFiaW5kZXg9XCIkdGFiXCI+XHJc biI7CgkJCXdoaWxlKCRhID0gbmV4dFJvdygkcnMpKQoJCQl7CgkJCQlleHRyYWN0KCRhKTsK CQkJCSRvdXQgLj0iPG9wdGlvbiB2YWx1ZT1cIiRJRFwiICIuKCRJRD09JFZlbnVlSUQ/InNl bGVjdGVkPVwic2VsZWN0ZWRcIiI6IiIpLiI+JG5hbWU8L29wdGlvbj5cclxuIjsKCQkJfQoJ CQkkb3V0IC49ICI8L3NlbGVjdD5cclxuIjsKCgkJCXJldHVybiAkb3V0OwoJCX0KCQllbHNl CgkJCXJldHVybiAiPHNwYW4gY2xhc3M9XCJ3YXJuaW5nX2Vycm9yXCI+PHN0cm9uZz5FcnJv cjwvc3Ryb25nPjogPGEgaHJlZj1cIj9ldmVudD1qbWNfZXZlbnRfbWFuYWdlciZzdGVwPXZl bnVlX21hbmFnZXJcIj5Zb3UgbXVzdCBmaXJzdCBhZGQgYSB2ZW51ZTwvYT4uIjsKCX0KCgkv KiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICov CgkvLyBGdW5jdGlvbjoJCWNhdGVnb3J5ZHJvcGRvd24KCS8vIFVzZToJCQkJQ3JlYXRlIFNF TEVDVCBvZiBjYXRlZ29yaWVzCgkvLyBJbnB1dHM6CQkJJENhdGVnb3J5SUQJCURlZmF1bHQg Q2F0ZWdvcnlJRAoJLy8JCQkJCSR0YWIJCQl0YWJpbmRleCAodXNhYmlsaXR5KQoJLy8gT3V0 cHV0czoJCQkkcmV0dXJuIGNvZGUJaHRtbCB0byBiZSBvdXRwdXQKCS8qIF8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8KCWZ1bmN0aW9uIGNh dGVnb3J5ZHJvcGRvd24oJENhdGVnb3J5SUQgPSAnJywgJHRhYj0nJykKCXsKCQkkcnMgPSBz YWZlX3Jvd3Nfc3RhcnQoCgkJCSJJRCwgbmFtZSIsCgkJCSJ0eHBfam1jX2V2ZW50X2NhdGVn b3J5IiwKCQkJIklEIG9yZGVyIGJ5IG5hbWUgYXNjIgoJCSk7CgoJCWlmKCRycykKCQl7CgkJ CSRvdXQgPSAiPHNlbGVjdCBuYW1lPVwiQ2F0ZWdvcnlJRFwiIHRhYmluZGV4PVwiJHRhYlwi PlxyXG4iOwoJCQkkb3V0IC49IjxvcHRpb24gdmFsdWU9XCJcIiAiLighJENhdGVnb3J5SUQ/ InNlbGVjdGVkPVwic2VsZWN0ZWRcIiI6IiIpLiI+Tm9uZTwvb3B0aW9uPlxyXG4iOwoJCQl3 aGlsZSgkYSA9IG5leHRSb3coJHJzKSkKCQkJewoJCQkJZXh0cmFjdCgkYSk7CgkJCQkkb3V0 IC49IjxvcHRpb24gdmFsdWU9XCIkSURcIiAiLigkSUQ9PSRDYXRlZ29yeUlEPyJzZWxlY3Rl ZD1cInNlbGVjdGVkXCIiOiIiKS4iPiRuYW1lPC9vcHRpb24+XHJcbiI7CgkJCX0KCgkJCSRv dXQgLj0gIjwvc2VsZWN0PlxyXG4iOwoKCQkJcmV0dXJuICRvdXQ7CgkJfQoJCWVsc2UKCQkJ cmV0dXJuICI8c3BhbiBjbGFzcz1cIndhcm5pbmdfZXJyb3JcIj48c3Ryb25nPkVycm9yPC9z dHJvbmc+OiA8YSBocmVmPVwiP2V2ZW50PWptY19ldmVudF9tYW5hZ2VyJnN0ZXA9Y2F0ZWdv cnlfbWFuYWdlclwiPllvdSBtdXN0IGZpcnN0IGFkZCBhIGNhdGVnb3J5PC9hPi4iOwoJfQoK CS8qIC1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy0g Ki8KCS8vIEZ1bmN0aW9uOgkJZGF0ZXRpbWVkcm9wZG93bgoJLy8gVXNlOgkJCQlDcmVhdGUg U0VMRUNUIG9mIGNhdGVnb3JpZXMKCS8vIElucHV0czoJCQkkdHlwZQkJCXllYXJ8bW9udGh8 ZGF5fGhvdXJ8bWludXRlCgkvLwkJCQkJJG5hbWUJCQluYW1lIG9mIFNFTEVDVAoJLy8JCQkJ CSRkZWZhdWx0CQlkZWZhdWx0IHZhbHVlCgkvLwkJCQkJJHRhYgkJCXRhYmluZGV4ICh1c2Fi aWxpdHkpCgkvLyBPdXRwdXRzOgkJCWh0bWwgdG8gYmUgb3V0cHV0CgkvKiBfLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICovCglmdW5jdGlvbiBk YXRldGltZWRyb3Bkb3duKCR0eXBlLCAkbmFtZSwgJGRlZmF1bHQgPSAnJywgJHRhYj0nJykK CXsKCQkkdmFsdWVzID0gYXJyYXkoKTsKCQlzd2l0Y2goJHR5cGUpCgkJewoJCQljYXNlICJ5 ZWFyIjoKCQkJCWZvcigkeSA9IDE5NzA7ICR5IDwgMjEwMDsgJHkrKykKCQkJCQkkdmFsdWVz WyIkeSJdID0gJHk7CgkJCQlicmVhazsKCQkJY2FzZSAibW9udGgiOgoJCQkJJHZhbHVlc1si SmFudWFyeSJdID0gMTsKCQkJCSR2YWx1ZXNbIkZlYnJ1YXJ5Il0gPSAyOwoJCQkJJHZhbHVl c1siTWFyY2giXSA9IDM7CgkJCQkkdmFsdWVzWyJBcHJpbCJdID0gNDsKCQkJCSR2YWx1ZXNb Ik1heSJdID0gNTsKCQkJCSR2YWx1ZXNbIkp1bmUiXSA9IDY7CgkJCQkkdmFsdWVzWyJKdWx5 Il0gPSA3OwoJCQkJJHZhbHVlc1siQXVndXN0Il0gPSA4OwoJCQkJJHZhbHVlc1siU2VwdGVt YmVyIl0gPSA5OwoJCQkJJHZhbHVlc1siT2N0b2JlciJdID0gMTA7CgkJCQkkdmFsdWVzWyJO b3ZlbWJlciJdID0gMTE7CgkJCQkkdmFsdWVzWyJEZWNlbWJlciJdID0gMTI7CgkJCQlicmVh azsKCQkJY2FzZSAiZGF5IjoKCQkJCWZvcigkZCA9IDE7ICRkIDwgMzI7ICRkKyspCgkJCQkJ JHZhbHVlc1siJGQiXSA9ICRkOwoJCQkJYnJlYWs7CgkJCWNhc2UgImhvdXIiOgoJCQkJZm9y KCRoID0gMDsgJGggPCAyNDsgJGgrKykKCQkJCQkkdmFsdWVzWyIkaCJdID0gJGg7CgkJCQli cmVhazsKCQkJY2FzZSAibWludXRlIjoKCQkJCWZvcigkbSA9IDE1OyAkbSA8IDYwOykKCQkJ CXsKCQkJCQkkdmFsdWVzWyIkbSJdID0gJG07CgkJCQkJJG0gPSAkbSArIDE1OwoJCQkJfQoJ CQkJJHZhbHVlc1siMDAiXSA9ICIwIjsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJcmV0 dXJuICI8c3BhbiBjbGFzcz1cIndhcm5pbmdfZXJyb3JcIj48c3Ryb25nPkVycm9yPC9zdHJv bmc+OiBEYXRlVGltZSAkdHlwZSBub24tZXhpc3RhbnQiOwoJCX0KCgkJaWYoISRkZWZhdWx0 KQoJCXsKCQkJc3dpdGNoKCR0eXBlKQoJCQl7CgkJCQljYXNlICJ5ZWFyIjoKCQkJCQkkZGVm YXVsdCA9IGRhdGUoJ1knLCB0aW1lKCkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAibW9udGgi OgoJCQkJCSRkZWZhdWx0ID0gZGF0ZSgnbScsIHRpbWUoKSk7CgkJCQkJYnJlYWs7CgkJCQlj YXNlICJkYXkiOgoJCQkJCSRkZWZhdWx0ID0gZGF0ZSgnZCcsIHRpbWUoKSk7CgkJCQkJYnJl YWs7CgkJCQljYXNlICJob3VyIjoKCQkJCQkkZGVmYXVsdCA9IGRhdGUoJ0gnLCB0aW1lKCkp OwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAibWludXRlIjoKCQkJCQkkZGVmYXVsdCA9IGRhdGUo J2cnLCB0aW1lKCkpICsgKDE1LShkYXRlKCdnJywgdGltZSgpKSklMTUpOwoJCQkJCWJyZWFr OwoJCQl9CgkJfQoKCQkkb3V0ID0gIjxzZWxlY3QgbmFtZT1cIiRuYW1lXCIgdGFiaW5kZXg9 XCIkdGFiXCI+IjsKCQlmb3JlYWNoKCR2YWx1ZXMgYXMgJG49PiR2KQoJCXsKCQkJJG91dCAu PSI8b3B0aW9uIHZhbHVlPVwiJHZcIiAiLigkdj09JGRlZmF1bHQ/InNlbGVjdGVkPVwic2Vs ZWN0ZWRcIiI6IiIpLiI+JG48L29wdGlvbj5cclxuIjsKCQl9CgkJJG91dCAuPSAiPC9zZWxl Y3Q+IjsKCgkJcmV0dXJuICRvdXQ7Cgl9CgkvKiAtXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8t Xy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tICovCgkvLyBGdW5jdGlvbjoJam1jX2V2ZW50X21h bmFnZXJfbXVsdGlfZWRpdAoJLy8gVXNlOgkJCQlNdWx0aWVkaXQKCS8vIElucHV0czoJCSR0 eXBlCQkJVFhQCgkvLwkJCQkJCSRldmVudAkJCVRYUAoJLy8gT3V0cHV0czoJCWh0bWwgdG8g YmUgb3V0cHV0CgkvLyBOb3RlczoJCQlZRVQgVE8gQkUgRlVMTFkgSU1QTEVNRU5URUQKCS8q IF8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8gKi8K CWZ1bmN0aW9uIGptY19ldmVudF9tYW5hZ2VyX211bHRpX2VkaXQoJHRhYmxlKSB7CgkJZ2xv YmFsICR0eHBfdXNlcjsKCgkJJG1ldGhvZCA9IHBzKCdlZGl0X21ldGhvZCcpOwoJCSRzZWxl Y3RlZCA9IHBzKCdzZWxlY3RlZCcpOwoKCQlpZiAoISRzZWxlY3RlZCkKCQl7CgkJCXJldHVy biBmYWxzZTsKCQl9CgoJCSRjaGFuZ2VkID0gZmFsc2U7CgkJJGlkcyA9IGFycmF5KCk7CgoJ CWlmICgkbWV0aG9kID09ICdkZWxldGUnKQoJCXsKCQkJZWNobyAid2UgY2FuIGRlbGV0ZSI7 CgkJCWZvcmVhY2ggKCRzZWxlY3RlZCBhcyAkaWQpCgkJCXsKCQkJCSRpZCA9IGFzc2VydF9p bnQoJGlkKTsKCgkJCQlpZiAoc2FmZV9kZWxldGUoJHRhYmxlLCAiSUQgPSAkaWQiKSkKCQkJ CXsKCQkJCQkkaWRzW10gPSAkaWQ7CgkJCQl9CgkJCX0KCgkJCSRjaGFuZ2VkID0gam9pbign LCAnLCAkaWRzKTsKCQl9Cgl9CgoJLyogLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1f LV8tXy1fLV8tXy1fLV8tXy1fLSAqLwoJLy8gRnVuY3Rpb246CQlqbWNfZXZlbnRfbWFuYWdl cl9tdWx0aWVkaXRfZm9ybQoJLy8gVXNlOgkJCQlNdWx0aWVkaXQKCS8vIElucHV0czoJCQkk dHlwZQkJCVRYUAoJLy8JCQkJCSRldmVudAkJCVRYUAoJLy8gT3V0cHV0czoJCQlodG1sIHRv IGJlIG91dHB1dAoJLy8gTm90ZXM6CQkJWUVUIFRPIEJFIEZVTExZIElNUExFTUVOVEVECgkv KiBfLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fLV8tXy1fICov CglmdW5jdGlvbiBqbWNfZXZlbnRfbWFuYWdlcl9tdWx0aWVkaXRfZm9ybSgkZXZlbnQsJHN0 ZXApCgl7CgkJJG1ldGhvZCA9IHBzKCdtZXRob2QnKTsKCQkkbWV0aG9kcyA9IGFycmF5KCdk ZWxldGUnPT5nVHh0KCdkZWxldGUnKSk7CgkJcmV0dXJuCgkJCWdUeHQoJ3dpdGhfc2VsZWN0 ZWQnKS5zcC5zZWxlY3RJbnB1dCgnZWRpdF9tZXRob2QnLCRtZXRob2RzLCRtZXRob2QsMSku CgkJCWVJbnB1dCgkZXZlbnQpLnNJbnB1dCgkc3RlcCkuZklucHV0KCdzdWJtaXQnLCcnLGdU eHQoJ2dvJyksJ3NtYWxsZXJib3gnKTsKCX0iO3M6MzoibWQ1IjtzOjMyOiIxMzI0NjY3MTc1 ZTY0NjMwM2ZhNDFmNjlkMmUwODFiZiI7fQ==