# Name: ied_plugin_composer v0.74 # Type: Admin/Client side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjc6InZlcnNp b24iO3M6NDoiMC43NCI7czo4OiJyZXZpc2lvbiI7czowOiIiO3M6NjoiYXV0aG9yIjtzOjQz OiJZdXJhIExpbm55ayAvIFN0ZWYgRGF3c29uIC8gU3RldmUgRGlja2luc29uIjtzOjEwOiJh dXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5jb20vIjtzOjExOiJkZXNjcmlw dGlvbiI7czozMjoiV3JpdGUgYW5kIHB1Ymxpc2ggcGx1Z2lucyBlYXNpbHkiO3M6NDoidHlw ZSI7czoxOiIxIjtzOjQ6ImhlbHAiO3M6MTMwNDM6Igk8cD48ZGl2IGlkPSJpZWRfaGVscCI+ PC9wPgoKCTxoMSBpZD0idG9wIj5JbnNwaXJlZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxw PlRoaXMgcGx1Z2luIGNyZWF0ZXMgYSBuZXcgcGFnZSB1bmRlciB0aGUgJiM4MjE2O0V4dGVu c2lvbnMmIzgyMTc7IHRhYiB3aGVyZSB5b3UgY2FuIGVkaXQgcGx1Z2lucyB0aGF0IGFyZSBh bHJlYWR5IGluc3RhbGxlZCBpbiBUZXh0UGF0dGVybiBhbmQgcmVnaXN0ZXIgbmV3IHBsdWdp bnMuPC9wPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxp PkNyZWF0ZSwgZWRpdCBvciB1cGxvYWQgcGx1Z2luIGNvZGUgYW5kIGhlbHAsIHRoZW4gcHVi bGlzaCB0aGUgcmVzdWx0IGluIHRoZSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBwbHVnaW4gZm9ybWF0PC9saT4KCQk8bGk+RnVsbCBzdXBwb3J0IGZvciB0aGUg PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5f dGVtcGxhdGUudHh0Ij56ZW1fdHBsLnBocCBwbHVnaW4gdGVtcGxhdGU8L2E+LiBUaGUgPGEg aHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVt cGxhdGVfY29kZV9maXJzdC50eHQiPmxhdGVzdCByZXZpc2lvbjwvYT4gYnkgPGEgaHJlZj0i aHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1 Z2luLWNvbXBpbGVyIj5uZXQtY2FydmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIx NjtzdHlsZSYjODIxNzsgc2VjdGlvbiBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0 ZXh0LiBUaGUgUGx1Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+ Q1NTPC9zcGFuPiBzZWN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0g YWNjb3JkaW5nbHkuIEl0IHdpbGwgYWxzbyByZWFkIDxzcGFuIGNsYXNzPSJjYXBzIj5TVk48 L3NwYW4+ICRMYXN0Q2hhbmdlZFJldmlzaW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVy KTwvbGk+CgkJPGxpPkV4cG9ydCBhIHBsdWdpbiBhcyBlaXRoZXIgYSBzdGFuZGFyZCBCQVNF NjQtZW5jb2RlZCBwbHVnaW4gKG5vdyBpbiBzdGFuZGFyZCA3Mi1jaGFyIGNodW5rIG1vZGUp IG9yIGFzIGEgZ3ppcHBlZCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSAodXNlZnVsIGZvciBsYXJn ZSBwbHVnaW5zKSBvciBhcyBhIHBocCBmaWxlIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBm b3JtYXQuIFRoaXMgbWVhbnMgeW91IGNhbiBzd2l0Y2ggYmV0d2VlbiBlZGl0aW5nIGluIHRo ZSBwbHVnaW4gY29tcG9zZXIgb3IgeW91ciBmYXZvdXJpdGUgZWRpdGluZyBwcm9ncmFtLCB0 ZXN0IHRoZSBmaWxlIGluIHRoZSBwbHVnaW5fY2FjaGVfZGlyLCB0aGVuIGltcG9ydCBpdCBi YWNrIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCB0aGUgaGVscCBv ZiB0aGUgQ29tcG9zZXIgYW5kIHB1Ymxpc2ggeW91ciBwbHVnaW4gZm9yIGV2ZXJ5b25lLiBM b29rIGF0IHRoZSBib3R0b20gb2YgdGhlIFBsdWdpbiBDb21wb3NlciYjODIxNztzIDxhIGhy ZWY9IiNlZGl0cGFnZSI+RWRpdCBwYWdlPC9hPiBmb3IgdGhlIG9wdGlvbnM7IGp1c3QgcmVt ZW1iZXIgdG8gc2F2ZSB5b3VyIGNoYW5nZXMgYmVmb3JlIGV4cG9ydGluZyBvciBjb3B5aW5n L3Bhc3RpbmcgdGhlIGNvZGUhPC9saT4KCQk8bGk+V2hlbiBleHBvcnRpbmcsIGZpbGVzIGNh biBiZSBzYXZlZCB3aXRoIGVpdGhlciB0aGUgY29kZSBibG9jayBmaXJzdCBvciB0aGUgaGVs cCBibG9jayBmaXJzdC4gVXNlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5TZXR1cCBidXR0 b248L2E+IHRvIGNvbmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIENsaWVudCwgQWRt aW4sIGFuZCBMaWJyYXJ5IHR5cGUgcGx1Z2luczwvbGk+CgkJPGxpPkhlbHAgdGV4dCBjYW4g YmUgd3JpdHRlbiBpbiBUZXh0aWxlIG9yIChYKUhUTUwuIFN0eWxlcyBjYW4gYmUgYWRkZWQg dG8gdGhlIGhlbHAgc2VjdGlvbjwvbGk+CgkJPGxpPlRha2UgYWR2YW50YWdlIG9mIHRoZSA8 YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9 MTMwODkiPlRpbnlNQ0UgPHNwYW4gY2xhc3M9ImNhcHMiPldZU0lXWUc8L3NwYW4+IGVkaXRv cjwvYT4gZm9yIHRoZSBoZWxwIHNlY3Rpb24gb3IgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZv cmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MTY0MDA4Ij5FZGl0IEFy ZWE8L2E+IGZvciBjb2RlIG1hcmt1cCAodGhhbmtzIHZhcmlhYXMpLiBTZWUgdGhlIDxhIGhy ZWY9IiNzZXR1cHBhZ2UiPnNldHVwPC9hPiBhbmQgPGEgaHJlZj0iI25vdGVzIj5ub3Rlczwv YT4gc2VjdGlvbnMgZm9yIG1vcmUgb24gdGhlc2UgZWRpdG9yczwvbGk+CgkJPGxpPkJ1aWx0 LWluIFRleHRpbGUgaGVscCB2aWV3ZXIgKHRoYW5rcyB0byBuZXQtY2FydmVyJiM4MjE3O3Mg PGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvcGx1 Z2luLWhlbHAtdmlld2VyIj5QbHVnaW4gSGVscCBWaWV3ZXI8L2E+KSB0byBhbGxvdyB5b3Ug dG8gcHJldmlldyB5b3VyIEhlbHAgdGV4dCBkdXJpbmcgZGV2ZWxvcG1lbnQgKHRoZSB0d28g dmlld2VycyB3aWxsIGhhcHBpbHkgY28tZXhpc3QgaWYgeW91IHdpc2gpPC9saT4KCQk8bGk+ UmVzaXphYmxlIHRleHRhcmVhPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3JzIj5BdXRo b3JzPC9oMj4KCgk8cD5PcmlnaW5hbCBwbHVnaW46IDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJl ZC5raWV2LnVhL2ZlZWRiYWNrLyI+WXVyYSBMaW5ueWs8L2E+PGJyIC8+Ck1vZGlmaWNhdGlv bnMgKHYwLjUrKTogPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRGb3Jt Ij5TdGVmIERhd3NvbjwvYT48YnIgLz4KQSB0b3VjaCBvZiBjbGFzczogPGEgaHJlZj0iaHR0 cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL2NvbnRhY3QiPlN0ZXZlIERpY2tpbnNv bjwvYT48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxh dGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiAodjAuNSBhbmQgYWJvdmUpIGZy b20gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zdGVmZGF3c29uLmNvbTwv YT4gKHByZXZpb3VzIHZlcnNpb25zIGFyZSBzdGlsbCBhdmFpbGFibGUgb24gdGhlIDxhIGhy ZWY9Imh0dHA6Ly9pbnNwaXJlZC5raWV2LnVhL3R4cC9pZWRfcGx1Z2luX2NvbXBvc2VyIj5J bnNwaXJlZCBob21lcGFnZTwvYT4pLCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UsIGluc3Rh bGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5WaXNpdCB0aGUgRXh0ZW5zaW9u cyAtJmd0OyBQbHVnaW4gQ29tcG9zZXIgdGFiIGFuZCBjbGljayB0aGUgU2V0dXAgYnV0dG9u IGluIHRoZSB0b3AtcmlnaHQgb2YgdGhlIHNjcmVlbi4gRnJvbSBoZXJlIHlvdSBjYW4gSW5z dGFsbCwgRGVsZXRlIGFuZCBTYXZlIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuIFNlZSB0aGUg PGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXAgc2VjdGlvbjwvYT4gZm9yIGRldGFpbHMuPC9w PgoKCTxwPlRvIHJlbW92ZSB0aGUgUGx1Z2luIENvbXBvc2VyIChub29vbyEpIHZpc2l0IHRo ZSBTZXR1cCBwYWdlIGFnYWluIGZyb20gdGhlIFBsdWdpbiBDb21wb3NlciB0YWIsIGhpdCBE ZWxldGUgdG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlcywgdGhlbiBzaW1wbHkgZGVsZXRlIHRo ZSBwbHVnaW4gYXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZS48 L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxoMyBpZD0ibGlzdHBhZ2UiPkxp c3QgcGFnZTwvaDM+CgoJPHA+QWxsIGluc3RhbGxlZCBwbHVnaW5zIGFyZSBsaXN0ZWQgb24g dGhlIFBsdWdpbiBDb21wb3NlciBwYWdlLiBUaGV5IGNhbiBiZSBlbmFibGVkL2Rpc2FibGVk LCBkZWxldGVkLCBwdWJsaXNoZWQgb3IgZWRpdGVkIGZyb20gaGVyZS4gVGhlIGhlbHAgY2Fu IGFsc28gYmUgdmlld2VkIGZyb20gdGhpcyBwYWdlLCBvciB3aGlsZSBlZGl0aW5nIGEgcGx1 Z2luIGJ5IHVzaW5nIHRoZSBsaW5rIG5leHQgdG8gdGhlIHRvcG1vc3QgU2F2ZSBidXR0b24g b24gdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+ZWRpdCBwYWdlPC9hPi48L3A+CgoJPHA+SWYg eW91IGFyZSB1c2luZyB0aGUgcGx1Z2luX2NhY2hlX2RpciAoQWRtaW4gLSZndDsgQWR2YW5j ZWQgUHJlZnMpLCBhbnkgcGx1Z2lucyBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdz b24uY29tL2Rvd25sb2Fkcy9leGFtcGxlX3BsdWdpbl90ZW1wbGF0ZS50eHQiPnN0YW5kYXJk IHRlbXBsYXRlIGZvcm1hdDwvYT4gdXBsb2FkZWQgdG8gdGhpcyBkaXJlY3Rvcnkgd2lsbCBi ZSBhdmFpbGFibGUgaW1tZWRpYXRlbHkgZm9yIGVkaXRpbmcgYW5kIHRlc3RpbmcuIEluIGFk ZGl0aW9uLCB0aGVzZSBwbHVnaW5zIGJlbmVmaXQgZnJvbSBiZWluZyAmIzgyMjA7YWx3YXlz IG9uJiM4MjIxOzsgbm8gbmVlZCB0byBpbnN0YWxsIHRoZW0uPC9wPgoKCTxwPlRoZXJlIGFy ZSB0d28gd2F5cyBvZiBjcmVhdGluZyBwbHVnaW5zIGZyb20gdGhlIFBsdWdpbiBDb21wb3Nl ciBsaXN0IHBhZ2UuIFRoZSBmaXJzdCBpcyB0byBjcmVhdGUgYSBibGFuaywgZW1wdHkgcGx1 Z2luLiBVc2UgdGhlIHRleHQgYm94IGF0IHRoZSB0b3AgZm9yIHRoaXMuIFRoZSBzZWNvbmQg aXMgdG8gdXBsb2FkIG9uZSB1c2luZyB0aGUgQnJvd3NlL3VwbG9hZCBib3ggYXQgdGhlIGJv dHRvbS4gWW91IGNhbiB1cGxvYWQgY29kZSBpbiBlaXRoZXIgc3RhbmRhcmQgcGx1Z2luIHRl bXBsYXRlIGZvcm1hdCAoZWl0aGVyIGNvZGUtZmlyc3Qgb3IgaGVscC1maXJzdCwgY29tcGxl dGUgd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBhcmVhcykgb3Igc2ltcGx5 IHVwbG9hZCBhIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZpbGUgY29udGFpbmlu ZyBjb2RlIG9ubHkuIDxlbT5Ob3RlIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgeW91IGNhbiB1 cGxvYWQgcmF3IDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGNvbXBsZXRlIHdpdGgg dGhlIDxjb2RlPiZsdDs/cGhwID8mZ3Q7PC9jb2RlPiBtYXJrZXJzLiBFdmVyeXdoZXJlIGVs c2UgeW91IHNob3VsZCB1c2UgYSBmdWxsIHRlbXBsYXRlLjwvZW0+PC9wPgoKCTxoMyBpZD0i ZWRpdHBhZ2UiPkVkaXQgcGFnZTwvaDM+CgoJPHA+T24gdGhlIEVkaXQgcGFnZSwgY29kZSBn b2VzIGluIHRoZSAmIzgyMTY7UGx1Z2luJiM4MjE3OyBib3gsIGhlbHAgZ29lcyBpbiB0aGUg JiM4MjE2O1BsdWdpbiBoZWxwJiM4MjE3OyBib3gsIHN0eWxpbmcgZ29lcyBpbiB0aGUgJiM4 MjE2O1N0eWxlJiM4MjE3OyBib3ghIFN0eWxlcyBhcmUgPGVtPm5vdDwvZW0+IHBhc3NlZCB0 aHJvdWdoIHRoZSBUZXh0aWxlIG1hbmdsZSBhbmQgaWYgeW91IGZvcmdldCAob3IgZG9uJiM4 MjE3O3QgYWRkKSB0aGUgPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gdGFncywgdGhlIENv bXBvc2VyIHdpbGwgYWRkIHRoZW0gZm9yIHlvdS4gVGhlIHBsdWdpbiBjb2RlIGJveCBpcyB2 ZXJ0aWNhbGx5IHJlc2l6YWJsZTsgZ3JhYiB0aGUgbWFya2VyIGJlbmVhdGggdGhlIGJveCBh bmQgZHJhZyB0byBzZXQuIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHJldGFpbmVkIGFzIGEg Y29va2llIChleHBpcmVzIDMwIGRheXMgYWZ0ZXIgbGFzdCByZXNpemUpIHNvIHRoZSBib3gg d2lsbCBhbHdheXMgcmVzaXplIHdoZW4gdGhlIGVkaXQgcGFnZSBpcyBkaXNwbGF5ZWQuIE5v dGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hlbiB1c2luZyBFZGl0IEFyZWEg KHNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXAgcGFnZTwvYT4pLjwvcD4KCgk8 cD5GaWxsIGluIHRoZSBvdGhlciBmaWVsZHMgd2l0aCByZWxldmFudCBkZXRhaWxzIGFib3V0 IHlvdXJzZWxmIGFuZCB5b3VyIHBsdWdpbiBhbmQgeW91JiM4MjE3O3JlIGdvb2QgdG8gZ28u IENob29zZSBmcm9tIGVpdGhlciBDbGllbnQtc2lkZSBvbmx5LCBBZG1pbi1zaWRlICh3aGlj aCBpbmNsdWRlcyBjbGllbnQgc2lkZSBieSBkZWZhdWx0KSBvciBMaWJyYXJ5IHBsdWdpbiB0 eXBlcy4gQSB3YXJuaW5nIGlzIGlzc3VlZCBpZiB5b3Ugc2F2ZSBhIENsaWVudCBwbHVnaW4g dGhhdCB1c2VzIEFkbWluLXNpZGUgY29kZSAodGhhbmtzIG5ldC1jYXJ2ZXIpLjwvcD4KCgk8 cD5IaXQgU2F2ZSB0byBzdG9yZSB5b3VyIHBsdWdpbi4gT25jZSB5b3UmIzgyMTc7cmUgaGFw cHkgd2l0aCBpdCwgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGVkaXQgcGFnZSBhbmQg Y2hvb3NlIGhvdyB0byBleHBvcnQgaXQuIFRoZSBmaXJzdCBsaW5rIGlzIGZvciBzdGFuZGFy ZCBwbHVnaW5zIHdoaWNoIGFyZSBkaXN0cmlidXRlZCB0byBhbGwgdXNlcnM7IHRoZSBzZWNv bmQgaXMgZm9yIGNvbXByZXNzZWQgcGx1Z2lucyAmIzgyMTI7IHVzZSB0aGlzIGlmIHlvdXIg cGx1Z2lucyBhcmUgbGFyZ2UsIG9yIHNpbXBseSBhcyBhbiBhbHRlcm5hdGl2ZSBmb3JtYXQu IEJvdGggdGhlc2Ugb3B0aW9ucyBjb252ZXJ0IHRoZSBoZWxwIHRvIDxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPi4gVGhlIHRoaXJkIGxpbmssIGhvd2V2ZXIsIGRvZXMgbm90IGFu ZCBpcyB1c2VkIHRvIGV4cG9ydCB0aGUgcGx1Z2luIGJhY2sgb3V0IGluIHRoZSBzdGFuZGFy ZCB0ZW1wbGF0ZSBmb3JtYXQgdG8gcGVyaGFwcyBnaXZlIHRvIGFub3RoZXIgZGV2ZWxvcGVy IGRpcmVjdGx5LCBvciB0byByZXRhaW4gdGhlIFRleHRpbGUgbWFya3VwIGZvciBmdXR1cmUg dXBkYXRlcy48L3A+CgoJPHA+WyBOb3RlIHRoYXQgd2hlbiBleHBvcnRpbmcgYXMgYSBzdGFu ZGFyZCBwbHVnaW4sIHRoZSBUZXh0aWxlIHByb2Nlc3NvciBhdHRlbXB0cyB0byBkZWNpZGUg aWYgeW91IGhhdmUgdXNlZCBUZXh0aWxlIG9yIG5vdCAoaXQgc2ltcGx5IGxvb2tzIGZvciBh IHRleHRpbGVkICYjODIxNjtoMSYjODIxNzspLiBSdW5uaW5nIHB1cmUgPHNwYW4gY2xhc3M9 ImNhcHMiPkhUTUw8L3NwYW4+IHRocm91Z2ggdGV4dGlsZSBtYXkgb2NjYXNpb25hbGx5IGNh dXNlIGVuY29kaW5nIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIGNoYXJhY3Rl ciBzZXQgdXNlZCAmIzgyMTI7IGhhdmVuJiM4MjE3O3QgdHJhY2tlZCBkb3duIHRoZSBjaXJj dW1zdGFuY2VzIHVuZGVyIHdoaWNoIGl0IGhhcHBlbnMgeWV0IF08L3A+CgoJPHA+WW91IGNh biBhbHNvIGV4cG9ydCBwbHVnaW5zIGZyb20gdGhlIG1haW4gUGx1Z2luIENvbXBvc2VyIGxp c3QgcGFnZS4gVGhlIFB1Ymxpc2ggY29sdW1uIGhhcyB0d28gZW50cmllcyBpbiBpdDogJiM4 MjE2O3B1Ymxpc2gmIzgyMTc7IHRvIHByb2R1Y2UgYSBzdGFuZGFyZCBwbHVnaW47IG9yICYj ODIxNjt6aXAmIzgyMTc7IHRvIGdlbmVyYXRlIGEgY29tcHJlc3NlZCB2ZXJzaW9uLjwvcD4K Cgk8aDMgaWQ9InNldHVwcGFnZSI+U2V0dXAgcGFnZTwvaDM+CgoJPHA+Q2xpY2tpbmcgU2V0 dXAgZnJvbSB0aGUgbWFpbiBsaXN0IHNjcmVlbiBhbGxvd3MgYWNjZXNzIHRvIHRoZSBwbHVn aW4gcHJlZmVyZW5jZXMuPC9wPgoKCTxwPllvdSBjYW4gSW5zdGFsbCB0aGVtICYjODIxMjsg d2hpY2ggcmV0YWlucyBhbnkgcHJldmlvdXMgc2V0dGluZ3MgYW5kIGFkZHMgbmV3IG9uZXMg d2hlbiB1cGRhdGluZyB0aGUgcGx1Z2luICYjODIxMjsgb3IgRGVsZXRlIHRoZW0uIFRoZSBw bHVnaW4gY2hlY2tzIGlmIGFsbCByZXF1aXJlZCBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxl IGFuZCBvZmZlcnMgeW91IHRoZSBjaG9pY2Ugb2YgZGVsZXRpbmcvcmVpbnN0YWxsaW5nIGlu IGNhc2UgdGhlIHByZWZzIGJlY29tZSBjb3JydXB0ZWQgb3IgbmVlZCB1cGRhdGluZy48L3A+ CgoJPHA+T25jZSB0aGUgcHJlZnMgYXJlIGluc3RhbGxlZCB5b3Ugd2lsbCBzZWUgdGhlIGF2 YWlsYWJsZSBvcHRpb25zLiBUaGUgd2lkdGggb2YgdGhlIHRleHRhcmVhcyBvbiB0aGUgPGEg aHJlZj0iI2VkaXRwYWdlIj5lZGl0IHBhZ2U8L2E+IGFyZSBjdXN0b21pc2FibGUgdG8gYWNj b21tb2RhdGUgeW91ciBzY3JlZW4gcmVzb2x1dGlvbi4gRW50ZXIgYSBudW1iZXIgdG8gc2V0 IHRoZSB3aWR0aCBpbiBjaGFyYWN0ZXJzIG9mIHRoZSBlZGl0IGJveGVzLjwvcD4KCgk8cD5Z b3UgbWF5IGNob29zZSB0byBlZGl0IHRoZSBjb2RlIHVzaW5nIGEgM3JkIHBhcnR5IGNvZGUg c3ludGF4IGhpZ2hsaWdodGVyLiBDdXJyZW50IHN1cHBvcnQgaXMgZm9yIEVkaXQgQXJlYSBh bmQgKHNvcnQgb2YpIENvZGVQcmVzcyAmIzgyMTI7IHNlZSB0aGUgPGEgaHJlZj0iI25vdGVz Ij5ub3RlczwvYT4uPC9wPgoKCTxwPklmIHlvdSB3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9m IEVkaXQgQXJlYSwgZ3JhYiBpdCBmcm9tIHNvdXJjZWZvcmdlLCBpbnN0YWxsIGl0LCBzZWxl Y3QgJiM4MjE2O0VkaXQgQXJlYSYjODIxNzsgZnJvbSB0aGUgZHJvcGRvd24gb24gdGhlIFBs dWdpbiBDb21wb3NlciYjODIxNztzIFNldHVwIHBhZ2UgYW5kIGdpdmUgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+IHBhdGggdG8gdGhlIGluc3RhbGxhdGlvbiBvbiB5b3Vy IHNlcnZlcjsgdGhpcyBpcyBub3JtYWxseSBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRp bmcgL2VkaXRfYXJlYS4gTm8gdHJhaWxpbmcgc2xhc2ggaXMgcmVxdWlyZWQuIFNpbWlsYXJs eSBmb3IgQ29kZVByZXNzLjwvcD4KCgk8cD5Gb3IgdGhlIGhlbHAgc3lzdGVtIHlvdSBjYW4g dXNlIFRleHRpbGUgdGFncyAocmVjb21tZW5kZWQpIG9yIGNob29zZSBUaW55TUNFLiA8ZW0+ Tm90ZSB0aGF0IFRpbnlNQ0UgaXMgbm90IGZ1bGx5IGludGVncmF0ZWQgeWV0IHNvIDxzcGFu IGNsYXNzPSJjYXBzIj5ZTU1WPC9zcGFuPjwvZW0+LjwvcD4KCgk8aDMgaWQ9Im5vdGVzIj5O b3RlczwvaDM+CgoJPHA+TW9yZSBlZGl0b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhl IENvbXBvc2VyIGZhaXJseSBlYXNpbHkuIElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBp biBjb250YWN0LiBCZSB3YXJuZWQgdGhhdCB0aGUgZWRpdG9ycyBkbyB0ZW5kIHRvIHNsb3cg dGhlIHBsdWdpbiBkb3duLCBlc3BlY2lhbGx5IGFzIGNvZGUgc2l6ZSBpbmNyZWFzZXMuPC9w PgoKCTxwPlRlbnRhdGl2ZSBzdXBwb3J0IGZvciBDb2RlUHJlc3MgaXMgYWxyZWFkeSBpbiB0 aGVyZSBidXQgSSBmb3VuZCBpdCBpbmV4cGxpY2FibHkgYmxhbmtlZCBvdXQgdGhlIHBsdWdp biBjb2RlIHdoZW4gaXQgd2FzIHNhdmVkIHNvIEkmIzgyMTc7dmUgY29tbWVudGVkIG91dCBz dXBwb3J0IGZvciBub3cuIElmIGFueW9uZSBjYW4gc2hlZCBhbnkgbGlnaHQgb24gd2h5IGl0 IGRvZXMgdGhpcywgcGxlYXNlIHNwZWFrIHVwISBVbmNvbW1lbnQgdGhlIGNvZGUgb24gbGlu ZSA4NDggYW5kIGNvbW1lbnQgb3V0IGxpbmUgODQ5IHRvIGVuYWJsZSBzdXBwb3J0LCB0aGVu IHZpc2l0IHRoZSBTZXR1cCBwYWdlIGFuZCBzZWxlY3QgQ29kZVByZXNzIGZyb20gdGhlIGxp c3QuIERvbiYjODIxNzt0IGV4cGVyaW1lbnQgd2l0aCB0aGlzIHNldHRpbmcgb24gYW4gaW1w b3J0YW50IHBsdWdpbiA6LSk8L3A+CgoJPGgzIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwv aDM+CgoJPHVsPgoJCTxsaT4yNSBGZWIgMDYgfCAwLjEgfCBJbml0aWFsIHJlbGVhc2U8L2xp PgoJCTxsaT4yNSBGZWIgMDYgfCAwLjIgfCBBZGRlZCAmIzgyMTY7c2F2ZSBhcyYjODIxNzsg b3B0aW9uPC9saT4KCQk8bGk+MTcgTWFyIDA2IHwgMC4zIHwgQWRkZWQgJiM4MjE2O3NhdmUg YXMgcGhwJiM4MjE3OzwvbGk+CgkJPGxpPjEwIEFwciAwNiB8IDAuNCB8IEFkZGVkIHN1cHBv cnQgZm9yIHBsdWdpbl9jYWNoZV9kaXI8L2xpPgoJCTxsaT4wNCBKYW4gMDggfCAwLjUgfCBG dWxsIHN1cHBvcnQgZm9yIHN0ZCB0ZW1wbGF0ZTsgY29tcHJlc3NlZCBwbHVnaW5zOyBMaWJy YXJ5IHBsdWdpbnM7IFRleHRpbGUgaGVscCBhbmQgc3R5bGluZzsgaW50ZWdyYXRpb24gd2l0 aCBuZXQtY2FydmVyJiM4MjE3O3MgUGx1Z2luIEhlbHAgVmlld2VyPC9saT4KCQk8bGk+MDcg SmFuIDA4IHwgMC42IHwgQnVpbHQtaW4gaGVscCB2aWV3ZXIgKHRoYW5rcyBuZXQtY2FydmVy KTsgc3VwcG9ydCBmb3IgRWRpdCBBcmVhICZhbXA7IENvZGVQcmVzcyhpc2gpICh0aGFua3Mg dmFyaWFhcyk7IEhlbHAgYmxvY2svQ29kZSBibG9jayBwb3NpdGlvbiBzd2l0Y2hhYmxlIG9u IGV4cG9ydDsgYWRkZWQgU2V0dXAgcHJlZnMgcGFnZTsgbGluZSBicmVhay9zdHlsZSBidWdm aXhlczwvbGk+CgkJPGxpPjA4IEphbiAwOCB8IDAuNyB8IFJlLWltcG9ydGluZyBwbHVnaW5z IG5vdyByZXRhaW5zIHN0eWxlIGJsb2NrOyBhZGRlZCAmIzgyMTY7YWRtaW4gc2lkZSBwbHVn aW4gd2l0aCBjbGllbnQtc2lkZSB0eXBlJiM4MjE3OyB3YXJuaW5nOyBjaGFuZ2VkIGJ1dHRv biBzdHlsaW5nIGFuZCBwb3NpdGlvbnMgKGFsbCB0aGFua3MgbmV0LWNhcnZlcik7IGdUeHQo KSBwcmVmIGxhYmVscyBhbmQgJiM4MjE2O2ludGVsbGlnZW50JiM4MjE3OyBwcmVmcyAoZ28g alF1ZXJ5IGdvISk7IGNhY2hlZCBwbHVnaW5zIG5vdyBhbHNvIGhhdmUgZGlyZWN0IGV4cG9y dCBmcm9tIEVkaXQgcGFnZTsgJiM4MjE2O2RvbiYjODIxNzt0IHRleHRpbGUgPHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+JiM4MjE3OyBjaGVjazsgbWlub3IgYnVnZml4ZXM8L2xp PgoJCTxsaT4wOSBKYW4gMDggfCAwLjcxIHwgVGV4dGFyZWEgd2lkdGggY2FuIG5vdyBiZSBj b250cm9sbGVkIGZyb20gcHJlZnMsIGFuZCBoZWlnaHQgZnJvbSBhIGRyYWcgYmFyOyBkZWZh dWx0IHdpZHRoIGluY3JlYXNlZCB0byAxMTAgY2hhcnM7IHB1Ymxpc2ggcGx1Z2lucyBmcm9t IHRoZSBsaXN0IHBhZ2U7IEluc3RhbGwgYnV0dG9uIHJlbW92ZWQgd2hlbiBwcmVmcyBhbGwg Y29ycmVjdGx5IGluc3RhbGxlZCAoYWxsIHRoYW5rcyB2YXJpYWFzIC8gaWJsYXN0b2ZmKTwv bGk+CgkJPGxpPjEwIEphbiAwOCB8IDAuNzIgfCBGaXhlZCBidWcgaWYgcGx1Z2luIGhhcyBu byBoZWxwOyBzdHlsZSBzZWN0aW9uIG5vIGxvbmdlciBzdG9yZWQvZXhwb3J0ZWQgaWYgaXQm IzgyMTc7cyBub3QgaW4gdXNlICh0aGFua3MgdGhlX2dob3N0IC8gaWJsYXN0b2ZmKTwvbGk+ CgkJPGxpPjExIEphbiAwOCB8IDAuNzMgfCBBZGRlZCBzdXBwb3J0IGZvciA8ZW0+cmVhZGlu ZzwvZW0+IGFuIG9wdGlvbmFsIHJldmlzaW9uIGZyb20gdGhlIHRlbXBsYXRlIHBhcnNlciBh bmQgYXBwZW5kaW5nIGl0IHRvIHRoZSB2ZXJzaW9uICh0aGFua3MgbmV0LWNhcnZlcik7IG1v cmUgZ1R4dCgpIHN0cmluZ3MgY29udmVydGVkPC9saT4KCQk8bGk+MjggTWFyIDA4IHwgMC43 NCB8IEZpeGVkIGVtcHR5IHBsdWdpbiBjb2RlIGlmIFN0eWxlIGJsb2NrIGxlZnQgYmxhbmsg OyBmaXhlZCBzdHJpcC9zbGFzaC9lbmNvZGluZyBlcnJvcnMgKHRoYW5rcyB0aGVfZ2hvc3Qv cnV1ZCkgOyBmaXhlZCBjcmxmIG5ld2xpbmVzIGluIGNvZGUgYmxvY2sgKHRoYW5rcyBoYWtq b29uL3J1dWQpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJ3cml0aW5nIj5Xcml0aW5nIGEgcGx1 Z2luPC9oMj4KCgk8cD5Zb3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSA8YSBocmVmPSJodHRw Oi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9OTg4MSI+UGx1Z2lu IEF1dGhvciBSZXNvdXJjZXM8L2E+IHRvcGljIG9uIHRoZSBUZXh0cGF0dGVybiBTdXBwb3J0 IEZvcnVtLCBhbmQgeW91IG1pZ2h0IGFsc28gd2FudCB0byBoYXZlIGEgbG9vayBhdCB0aGUg PGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvdHhwLXBsdWdpbi1jaGVhdHNoZWV0 Ij5UZXh0UGF0dGVybiBwbHVnaW4gY2hlYXQgc2hlZXQ8L2E+LjwvcD4KCgk8cD5IYXBweSBw bHVnaW4gYXV0aG9yaW5nIDotKTwvcD4KCgk8cD48L2Rpdj48L3A+CjwhLS0gLS0tIEJFR0lO IFBMVUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojaWVkX2hlbHAg eyBsaW5lLWhlaWdodDoxLjUgO30KI2llZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xk OyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBi YWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGNvZGUuc2VkX2NvZGVfdGFn IHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3Jv dW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIw cHg7IHBhZGRpbmc6MTBweDsgfQojaWVkX2hlbHAgYTpsaW5rLCAjaWVkX2hlbHAgYTp2aXNp dGVkIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRv bTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBhOmhv dmVyLCAjaWVkX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9u OiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206 MXB4O30KI2llZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwg c2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI2llZF9oZWxw IGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAw OyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNpZWRf aGVscCBoMyB7IGNvbG9yOiAjMTA4MDMwOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTVweCAwIDA7dGV4dC10cmFu c2Zvcm06IHVwcGVyY2FzZTt9Cjwvc3R5bGU+CjwhLS0gLS0tIEVORCBQTFVHSU4gQ1NTIC0t LSAtLT4KIjtzOjM6ImNzcyI7czo5MjU6IjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNpZWRf aGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojaWVkX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0 OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3Bh Y2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojaWVkX2hlbHAgY29kZS5zZWRfY29k ZV90YWcgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJh Y2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEw cHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNpZWRfaGVscCBhOmxpbmssICNpZWRfaGVscCBh OnZpc2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXIt Ym90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI2llZF9oZWxw IGE6aG92ZXIsICNpZWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29y YXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJv dHRvbToxcHg7fQojaWVkX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9y Z2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojaWVk X2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBw eCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0K I2llZF9oZWxwIGgzIHsgY29sb3I6ICMxMDgwMzA7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwg c2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxNXB4IDAgMDt0ZXh0 LXRyYW5zZm9ybTogdXBwZXJjYXNlO30KPC9zdHlsZT4iO3M6NDoiY29kZSI7czozOTg4NToi aWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7CglhZGRfcHJpdnMoJ2llZF9wbHVnaW5f Y29tcG9zZXInLCcxLDInKTsKCXJlZ2lzdGVyX3RhYignZXh0ZW5zaW9ucycsICdpZWRfcGx1 Z2luX2NvbXBvc2VyJywgaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykp OwoJcmVnaXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fY29tcG9zZXInLCAnaWVkX3BsdWdp bl9jb21wb3NlcicpOwoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAkaWVkX3BsdWdp bl9wcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsKCSRpZWRfcGx1Z2luX2dsb2JhbHMgPSBh cnJheSgKCQknY3NzX3N0YXJ0JyA9PiAnPCEtLScsCgkJJ2Nzc19lbmQnID0+ICctLT4nLAoJ CSdkbG1fc3RhcnQnID0+ICcjJywKCQknZGxtX2VuZCcgPT4gJycsCgkJJ3N0YXJ0JyA9PiAn IC0tLSBCRUdJTiBQTFVHSU4gU0VDVElPTiAtLS0nLAoJCSdlbmQnID0+ICcgLS0tIEVORCBQ TFVHSU4gU0VDVElPTiAtLS0nLAoJKTsKCS8vIERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlz dCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0cywKCS8vIDJuZCBpcyBhIGxp c3Qgb2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3ZpbmcgaW4gZnV0dXJlIChk ZWZhdWx0cyBhbGwgc2V0IGVtcHR5KQoJJGllZF9wbHVnaW5fcHJlZnMgPSBhcnJheSgKCQlh cnJheSgKCQkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnbm9uZScsCgkJCSdpZWRfcGx1Z2lu X2VkaXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLAoJCQknaWVkX3BsdWdpbl9lZGl0b3Jfd2lk dGgnID0+ICcxMTAnLAoJCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcicgPT4gJ3RleHRpbGUn LAoJCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLAoJCQkn aWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInID0+ICcwJywKCQkpLAoJCWFycmF5KAoJCQknaWVk X3BsdWdpbl9ub3RfdXNlZF9hbnlfbW9yZV90ZXN0ZXInID0+ICcnLAoJCSkKCSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9jb21wb3NlciAoJGV2ZW50LCAkc3RlcCkg ewoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoJ2llZF9wbHVnaW5fZGVs ZXRlJywKCQkJJ2llZF9wbHVnaW5fZWRpdCcsCgkJCSdpZWRfcGx1Z2luX2hlbHAnLAoJCQkn aWVkX3BsdWdpbl9saXN0JywKCQkJJ2llZF9wbHVnaW5faW5zdGFsbCcsCgkJCSdpZWRfcGx1 Z2luX3NhdmUnLAoJCQknaWVkX3BsdWdpbl9zYXZlX2ZpbGUnLAoJCQknaWVkX3BsdWdpbl92 ZXJpZnknLAoJCQknaWVkX3N3aXRjaF9zdGF0dXMnLAoJCQknaWVkX3BsdWdpbl9zZXR1cCcs CgkJCSdpZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwnLAoJCQknaWVkX3BsdWdpbl9wcmVmc19y ZW1vdmUnLAoJCQknaWVkX3BsdWdpbl9wcmVmc191cGRhdGUnLAoJCQknaWVkX3BsdWdpbl9j cmVhdGVfbmV3JywKCQkJJ2llZF9wbHVnaW5fc2F2ZV9hc19maWxlJywKCQkJJ2llZF9wbHVn aW5fc2F2ZV9hc19waHBfZmlsZScsCgkJCSdpZWRfcGx1Z2luX3VwbG9hZCcsCgkJCSdpZWRf cGx1Z2luX2hlbHBfdmlld2VyJywKCQkpKSkgewoJCWllZF9wbHVnaW5fbGlzdCgpOwoJfSBl bHNlICRzdGVwKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9saXN0KCRt ZXNzYWdlPScnKSB7CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsK CWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpLgp0cih0ZGEoCmZvcm0oCmZJbnB1dCgndGV4dCcs J25hbWUnLCcnLCcnLCcnLCcnLCczMCcsJzAnKQouIGZJbnB1dCgnc3VibWl0Jywnc3VibWl0 JyxpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY3JlYXRlX25ldycpLCdzbWFsbGVyYm94 JykKLiBzSW5wdXQoJ2llZF9wbHVnaW5fY3JlYXRlX25ldycpCi4gZUlucHV0KCdpZWRfcGx1 Z2luX2NvbXBvc2VyJykKKQosJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0 OjUwcHgiJykKLnRkYShmb3JtKGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsICdTZXR1cCcs ICdwdWJsaXNoJykuc0lucHV0KCdpZWRfcGx1Z2luX3NldHVwJykuZUlucHV0KCdpZWRfcGx1 Z2luX2NvbXBvc2VyJykpLCcgY29sc3Bhbj0iNiIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1 MHB4IicpKS4KYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0 aW9uJywnbWFuYWdlJywncHVibGlzaCcsICdhY3RpdmUnLCcnKTsKCgkkcnMgPSBzYWZlX3Jv d3Nfc3RhcnQoIioiLCJ0eHBfcGx1Z2luIiwgIjE9MSBvcmRlciBieSBuYW1lIik7CgoJd2hp bGUgKCRhID0gbmV4dFJvdygkcnMpKSB7CgkJZXh0cmFjdCgkYSk7CgkJJGVsaW5rID0gJzxh IGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5f ZWRpdCYjMzg7bmFtZT0nLiRuYW1lLiciPicuZ1R4dCgnZWRpdCcpLic8L2E+JzsKCQkkaGxp bmsgPSAoJGhlbHApID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMz ODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4O25hbWU9Jy4kbmFtZS4nIj4nLmdU eHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7CgkJJHB1YnRhZyA9IHRhZyhnVHh0KCdwdWJs aXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9 aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFtZS4nIiB0aXRsZT0iJyAu IGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9leHBvcnQnKSAuJyAnLiAkbmFtZS4nX3Yn LiR2ZXJzaW9uLiAnLnR4dCInKTsKCQkkcHVienRhZyA9IHRhZyhpZWRfcGx1Z2luX2dUeHQo J2llZF9wbHVnaW5fY29tcHJlc3MnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9j b21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRu YW1lLicmIzM4O3ppcD10cnVlIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3Bs dWdpbl9leHBvcnQnKSAuJyAnLiAkbmFtZS4nX3YnLiR2ZXJzaW9uLiAnX3ppcC50eHQiJyk7 CgoJCWVjaG8gdHIodGQoJG5hbWUpCi50ZCgnPGEgaHJlZj0iJy4kYXV0aG9yX3VyaS4nIj4n LiRhdXRob3IuJzwvYT4nLDE2MCkKLnRkKCR2ZXJzaW9uLDEwKQoudGQoJGRlc2NyaXB0aW9u LDI2MCkKLnRkKCRlbGluayAuJyB8ICcuICRobGluaykKLnRkKCRwdWJ0YWcgLicgfCAnLiAk cHVienRhZykKLnRkKGllZF9zdGF0dXNfbGluaygkc3RhdHVzLCRuYW1lLHllc19ubygkc3Rh dHVzKSksMzApCi50ZChkTGluaygnaWVkX3BsdWdpbl9jb21wb3NlcicsJ2llZF9wbHVnaW5f ZGVsZXRlJywnbmFtZScsJG5hbWUpLDMwKQopOwoJCXVuc2V0KCRuYW1lLCRwYWdlLCRkZWxl dGVsaW5rKTsKCX0KCglpZiAoIWVtcHR5KCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2Fj aGVfZGlyJ10pKSB7CgkJJGZpbGVuYW1lcyA9IGFycmF5KCk7CgkJJGRpciA9IGRpcigkR0xP QkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddKTsKCQl3aGlsZSAoJGZpbGUgPSAk ZGlyLT5yZWFkKCkpIHsKCQkJaWYoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpIHsK CQkJCSRmaWxlYWRkciA9ICRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10u RFMuJGZpbGU7CgkJCQlpZiAoIWlzX2RpcigkZmlsZWFkZHIpKSB7CgkJCQkJJGZpbGVuYW1l c1tdPSRmaWxlOwoJCQkJfQoJCQl9CgkJfQoJCSRkaXItPmNsb3NlKCk7CgkJKCRmaWxlbmFt ZXMpP25hdGNhc2Vzb3J0KCRmaWxlbmFtZXMpOicnOwoJCWVjaG8gdHIoCgkJdGRhKAoJCXRh ZyhpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcnVuX2Zyb20nKS4nICcudGFnKCdwbHVn aW5fY2FjaGVfZGlyJywnYWNyb255bScsJyB0aXRsZT0iJy4kR0xPQkFMU1sncHJlZnMnXVsn cGx1Z2luX2NhY2hlX2RpciddLiciIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQg YmxhY2siJykuJzonLCdoMScpCgkJLCcgY29sc3Bhbj0iOCIgc3R5bGU9ImJvcmRlcjowO2hl aWdodDo1MHB4O3RleHQtYWxpZ246bGVmdCInKQoKCQkpOwoKCQllY2hvIGFzc0hlYWQoJ3Bs dWdpbicsJ2F1dGhvcicsJ3ZlcnNpb24nLCdkZXNjcmlwdGlvbicsJ21hbmFnZScsJ3B1Ymxp c2gnLCcnLCcnKTsKCQlmb3JlYWNoKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1lKSB7CgkJCSRl bGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX2VkaXQmIzM4O2ZpbGVuYW1lPScuJGZpbGVuYW1lLiciPicuZ1R4dCgnZWRp dCcpLic8L2E+JzsKCgkJCSRmaWxlZXh0PSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRmaWxl bmFtZSkpOwoJCQlpZiAoJGZpbGVleHQ9PSdwaHAnKSB7CgkJCQkkYmFzZW5hbWU9YmFzZW5h bWUoJGZpbGVuYW1lKTsKCQkJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xP QkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxlbmFtZSk7CgkJCQkk aGxpbmsgPSAoJHBsdWdpblsnaGVscCddKSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdp bl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtmaWxlbmFt ZT0nLiRmaWxlbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7CgoJCQkJ ZWNobyB0cigKCQkJCXRkKAoJCQkJdGFnKCRmaWxlbmFtZSwnZGl2JywnIHN0eWxlPSJjb2xv cjpncmF5O2JvcmRlcjowcHggc29saWQgZ3JheTtwYWRkaW5nOjFweCAycHggMnB4IDFweDsi JykKCQkJCS4oaXNzZXQoJHBsdWdpblsnbmFtZSddKT8kcGx1Z2luWyduYW1lJ10uJzxiciAv Pic6JycpLicgJwoJCQkJKQoJCQkJLnRkKAoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3Jf dXJpJ10pPyc8YSBocmVmPSInLiRwbHVnaW5bJ2F1dGhvcl91cmknXS4nIj4nOicnICkgLgoJ CQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3InXSk/JHBsdWdpblsnYXV0aG9yJ106JyZuYnNw OycgKS4KCQkJCSggaXNzZXQoJHBsdWdpblsnYXV0aG9yX3VyaSddKT8nPC9hPic6JycgKSwg MTYwCgkJCQkpCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ3ZlcnNpb24nXSk/JHBsdWdpblsn dmVyc2lvbiddOicmbmJzcDsnKSwxMCkKCQkJCS50ZCgoaXNzZXQoJHBsdWdpblsnZGVzY3Jp cHRpb24nXSk/JHBsdWdpblsnZGVzY3JpcHRpb24nXTonJm5ic3A7JyksMjYwKQoJCQkJLnRk KCRlbGluayAuJyB8ICcuICRobGluaykKCQkJCS50ZCgoaXNzZXQoJHBsdWdpblsnbmFtZSdd KT8KCQkJCXRhZyhnVHh0KCdwdWJsaXNoJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVn aW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O2ZpbGVu YW1lPScuJGZpbGVuYW1lLiciIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1 Z2luX2V4cG9ydCcpIC4nICcuICRwbHVnaW5bJ25hbWUnXS4nX3YnLiRwbHVnaW5bJ3ZlcnNp b24nXS4gJy50eHQiJykKCQkJCQkJLicgfCAnLnRhZyhpZWRfcGx1Z2luX2dUeHQoJ2llZF9w bHVnaW5fY29tcHJlc3MnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3Nl ciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmls ZW5hbWUuJyYjMzg7emlwPXRydWUiIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdpZWRf cGx1Z2luX2V4cG9ydCcpIC4nICcuICRwbHVnaW5bJ25hbWUnXS4nX3YnLiRwbHVnaW5bJ3Zl cnNpb24nXS4gJ196aXAudHh0IicpOgoJCQkJdGFnKCcmbmJzcDsnLCdzcGFuJywnIHN0eWxl PSJjb2xvcjpncmF5IicpCgkJCQkpKQoJCQkJLnRkKCcnKQoJCQkJLnRkKCcnKQoJCQkJKTsK CQkJfQoJCX0KCX0KCgllY2hvIHRyKAp0ZGEoCic8Zm9ybSBlbmN0eXBlPSJtdWx0aXBhcnQv Zm9ybS1kYXRhIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nLgpzdGFydFRh YmxlKCdlZGl0JywnbGVmdCcpLgp0cih0ZGEoIGhJbnB1dCgnTUFYX0ZJTEVfU0laRScsMTAw MDAwMCkuCmdyYWYoaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX3VwbG9hZF9waHAnKS4n OiAnLgpmSW5wdXQoJ2ZpbGUnLCd0aGVmaWxlJywnJywnZWRpdCcpLgpmSW5wdXQoJ3N1Ym1p dCcsJ3N1Ym1pdCcsZ1R4dCgndXBsb2FkJyksJ3NtYWxsZXJib3gnKSkuCmVJbnB1dCgnaWVk X3BsdWdpbl9jb21wb3NlcicpLgpzSW5wdXQoJ2llZF9wbHVnaW5fdXBsb2FkJykgLCAnIHN0 eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXkiJyApLgp0ZGEoIHRhZyhpZWRfcGx1Z2luX2dU eHQoJ2llZF9wbHVnaW5fbmFtZScpLCAnYWNyb255bScsJyB0aXRsZT0iJy5pZWRfcGx1Z2lu X2dUeHQoJ2llZF9wbHVnaW5fbmFtZV90b29sdGlwJykuJyIgc3R5bGU9ImJvcmRlci1ib3R0 b206MXB4IGRhc2hlZCBibGFjayInKS4nOiAnLiBmSW5wdXQoJ3RleHQnLCduYW1lJywneHh4 X3h4eHh4eCcsJycsJycsJycsJzMwJywnMCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xp ZCBncmF5O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiJyApKS4KZW5kVGFibGUoKS4KJzwvZm9y bT4nCiwnIGNvbHNwYW49IjgiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFs aWduOmxlZnQiJykKKTsKCWVjaG8gZW5kVGFibGUoKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biBpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSwkbGlua3RleHQpIHsKCSRvdXQgPSAn PGEgaHJlZj0iaW5kZXgucGhwPyc7Cgkkb3V0IC49ICdldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9zd2l0Y2hfc3RhdHVzJiMzODtzdGF0dXM9Jy4KCSRzdGF0dXMu JyYjMzg7bmFtZT0nLnVybGVuY29kZSgkbmFtZSkuJyInOwoJJG91dCAuPSAnPicuJGxpbmt0 ZXh0Lic8L2E+JzsKCXJldHVybiAkb3V0Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9z d2l0Y2hfc3RhdHVzKCkgewoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCdz dGF0dXMnKSkpKTsKCSRjaGFuZ2UgPSAoJHN0YXR1cykgPyAwIDogMTsKCXNhZmVfdXBkYXRl KCJ0eHBfcGx1Z2luIiwgInN0YXR1cz0kY2hhbmdlIiwgIm5hbWU9JyRuYW1lJyIpOwoJaWVk X3BsdWdpbl9saXN0KG1lc3NlbmdlcigncGx1Z2luJywkbmFtZSwndXBkYXRlZCcpKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2RlbGV0ZSgpIHsKCSRuYW1lID0gZG9T bGFzaChwcygnbmFtZScpKTsKCXNhZmVfZGVsZXRlKCJ0eHBfcGx1Z2luIiwibmFtZT0nJG5h bWUnIik7CglpZWRfcGx1Z2luX2xpc3QobWVzc2VuZ2VyKCdwbHVnaW4nLCRuYW1lLCdkZWxl dGVkJykpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fZWRpdCgkbWVzc2Fn ZT0nJykgewoJJHNpdGVfZGlyID0gaHU7CgkkbmFtZSA9IGdwcygnbmV3bmFtZScpP2dwcygn bmV3bmFtZScpOmdwcygnbmFtZScpOwoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwk bWVzc2FnZSk7CgllY2hvIGllZF9pbnNlcnRfZWRpdG9ycygpOwoJZWNobyBpZWRfcGx1Z2lu X2VkaXRfZm9ybSgoZ3BzKCdmaWxlbmFtZScpKT9ncHMoJ2ZpbGVuYW1lJyk6JG5hbWUsIGdw cygnZmlsZW5hbWUnKT8gMTogMCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdp bl9lZGl0X2Zvcm0oJG5hbWU9JycsJGVkaXRmaWxlPTApIHsKCWdsb2JhbCAkcHJlZnMsICRp ZWRfcGx1Z2luX3ByZWZzOwoJaWYgKCEkZWRpdGZpbGUpIHsKCQkkYXV0aG9yID0gKCRuYW1l KSA/IGZldGNoKCdhdXRob3InLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJ JGF1dGhvcl91cmkgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcl91cmknLCd0eHBfcGx1Z2lu JywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2goJ3Zl cnNpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGRlc2NyaXB0aW9u ID0gKCRuYW1lKSA/IGZldGNoKCdkZXNjcmlwdGlvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywk bmFtZSkgOiAnJzsKCQkkY29kZSA9ICgkbmFtZSkgPyBmZXRjaCgnY29kZScsJ3R4cF9wbHVn aW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVs cCcsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkc3RhdHVzID0gKCRuYW1l KSA/IGZldGNoKCdzdGF0dXMnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJ JHR5cGUgPSAoJG5hbWUpID8gZmV0Y2goJ3R5cGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4 dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycs JGhlbHApOwoJfSBlbHNlIHsKCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdM T0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kbmFtZSk7CgkJJGZpbGVu YW1lPSRuYW1lOwoJCSRmaWxlZXh0PSBhcnJheV9wb3AoJG5hbWU9ZXhwbG9kZSAoJy4nLCRu YW1lKSk7CgkJJG5hbWU9aW1wbG9kZSgkbmFtZSk7CgkJZXh0cmFjdCAoJHBsdWdpbik7IC8v IGNvZGUsIGhlbHAsIGNzcywgbmFtZSwgdmVyc2lvbiwgdHlwZSwgZGVzY3JpcHRpb24sIGF1 dGhvciwgYXV0aG9yX3VyaQoJCSRzdGF0dXM9ICgkZmlsZWV4dD09J3BocCcpPyAxOiAwOwoJ fQoJJGVkd2lkdGggPSAoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCdd KSAmJiBpc19udW1lcmljKCRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXSkpID8g JHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddIDogJGllZF9wbHVnaW5fcHJlZnNb MF1bJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ107CgkkcGx1Z2luWyduYW1lJ10gPSAkbmFt ZTsKCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsKCSRwbHVnaW5bJ2F1dGhvcl91cmkn XSA9ICRhdXRob3JfdXJpOwoJJHBsdWdpblsndmVyc2lvbiddID0gJHZlcnNpb247CgkkcGx1 Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOwoJJHBsdWdpblsnaGVscCddID0g JGhlbHA7CgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsKCSRwbHVnaW5bJ3R5cGUnXSA9ICR0 eXBlOwoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOwoKCSRkaXN0 cmlidXRpb249Jzx0ZXh0YXJlYSBuYW1lPSJkaXN0cmlidXRpb24iIHJvd3M9IjEiIGNvbHM9 IicuJGVkd2lkdGguJyIgb25jbGljaz0idGhpcy5zZWxlY3QoKSI+Jy5iYXNlNjRfZW5jb2Rl KHNlcmlhbGl6ZSgkcGx1Z2luKSkuJzwvdGV4dGFyZWE+JzsKCgkkbmFtZWRMaW5rID0gKGlz c2V0KCRmaWxlbmFtZSkpID8gJ2ZpbGVuYW1lPScuJGZpbGVuYW1lIDogJ25hbWU9Jy4kbmFt ZTsKCSRuYW1lZEZpbGUgPSAoaXNzZXQoJGZpbGVuYW1lKSkgPyAkZmlsZW5hbWUgOiAkbmFt ZS4nX3YnLiR2ZXJzaW9uLicucGhwJzsKCSRuYW1lZEZpbGVOb0V4dCA9IHByZWdfcmVwbGFj ZSgnLyguKylcLi4qJC8nLCAnJDEnLCAkbmFtZWRGaWxlKTsKCgkkc2xpbmsgPSAnPGEgaHJl Zj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZl X2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4nIC5pZWRfcGx1Z2luX2dUeHQoJ2llZF9w bHVnaW5fZXhwb3J0JykgLicgJy4gJG5hbWVkRmlsZU5vRXh0LiAnLnR4dDwvYT4nOwoJJHN6 aXBsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODsnLiRuYW1lZExpbmsuJyYjMzg7emlwPXRy dWUiPicgLiBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fZXhwb3J0JykgLicgJy4gJG5h bWVkRmlsZU5vRXh0LiAnLnR4dCAoY29tcHJlc3NlZCk8L2E+JzsKCSRzcGhwbGluayA9ICc8 YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2lu X3NhdmVfYXNfcGhwX2ZpbGUmIzM4OycuJG5hbWVkTGluay4nIj4nIC4gaWVkX3BsdWdpbl9n VHh0KCdpZWRfcGx1Z2luX3NhdmVfYXMnKSAuJyAnLiAkbmFtZWRGaWxlLiAnPC9hPic7Cgkk dmhlbHBsaW5rZnVsbCA9ICgkaGVscCkgPyAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5f Y29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7Jy4kbmFtZWRM aW5rLiciPlsgJy5zdHJvbmcoZ1R4dCgndmlldycpLicgJy5nVHh0KCdoZWxwJykpLicgXTwv YT4nIDogJyc7CgoJJG5ld25hbWUgPWZJbnB1dCgndGV4dCcsJ25ld25hbWUnLCRuYW1lLCdl ZGl0JywnNzgnLCcnLCRlZHdpZHRoLCcyJyk7CgkkYXV0aG9yID1mSW5wdXQoJ3RleHQnLCdh dXRob3InLCRhdXRob3IsJ2VkaXQnLCc3OCcsJycsJGVkd2lkdGgsJzInKTsKCSRhdXRob3Jf dXJpID1mSW5wdXQoJ3RleHQnLCdhdXRob3JfdXJpJywkYXV0aG9yX3VyaSwnZWRpdCcsJzc4 JywnJywkZWR3aWR0aCwnMicpOwoJJHZlcnNpb24gPWZJbnB1dCgndGV4dCcsJ3ZlcnNpb24n LCR2ZXJzaW9uLCdlZGl0JywnNzgnLCcnLCRlZHdpZHRoLCcyJyk7CgkkZGVzY3JpcHRpb24g PWZJbnB1dCgndGV4dCcsJ2Rlc2NyaXB0aW9uJywkZGVzY3JpcHRpb24sJ2VkaXQnLCc3OCcs JycsJGVkd2lkdGgsJzInKTsKCSRjb2RlID0gJzx0ZXh0YXJlYSBuYW1lPSJjb2RlIiBpZD0i cGx1Z2luX2VkaXRvciIgcm93cz0iMzAiIGNvbHM9IicuJGVkd2lkdGguJyIgY2xhc3M9ImNv ZGVwcmVzcyBwaHAiPicuaHRtbHNwZWNpYWxjaGFycygkY29kZSkuJzwvdGV4dGFyZWE+JzsK CSRoZWxwID0gJzx0ZXh0YXJlYSBuYW1lPSJoZWxwIiByb3dzPSIzMCIgY29scz0iJy4kZWR3 aWR0aC4nIiBjbGFzcz0ibWNlRWRpdG9yIj4nLmh0bWxzcGVjaWFsY2hhcnMoJGhlbHApLic8 L3RleHRhcmVhPic7CgkkY3NzID0gJzx0ZXh0YXJlYSBuYW1lPSJjc3MiIHJvd3M9IjE1IiBj b2xzPSInLiRlZHdpZHRoLiciPicuaHRtbHNwZWNpYWxjaGFycygkY3NzKS4nPC90ZXh0YXJl YT4nOwoJJHByZWZzID0gKCghJGVkaXRmaWxlKT9jaGVja2JveCgnc3RhdHVzJywxLCRzdGF0 dXMpLiAnIDxsYWJlbCBmb3I9InN0YXR1cyI+Jy5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVn aW5fZW5hYmxlJykuJzwvbGFiZWw+JzonJykgLiAnIDxsYWJlbCBmb3I9InR5cGUiPiYjMTYw OyYjMTYwOyYjMTYwOycuaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX3R5cGUnKS4nOjwv bGFiZWw+Jy4gcmFkaW8oJ3R5cGUnLDAsKCgkdHlwZT09MCk/MTowKSkuaWVkX3BsdWdpbl9n VHh0KCdpZWRfcGx1Z2luX3R5cGVfMCcpLiIgIiAuIHJhZGlvKCd0eXBlJywxLCgoJHR5cGU9 PTEpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl90eXBlXzEnKS4iICIgLiBy YWRpbygndHlwZScsMiwoKCR0eXBlPT0yKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ2llZF9w bHVnaW5fdHlwZV8yJyk7CgoJJHN1YiA9IGZJbnB1dCgnc3VibWl0JywnJyxnVHh0KCdzYXZl JyksJ3B1Ymxpc2gnKTsKCXJldHVybiBmb3JtKHN0YXJ0VGFibGUoJ2VkaXQnKQoJLiB0cigg ZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ViIC4gJHZoZWxwbGlua2Z1bGwpKQoJLiAo IChpc3NldCgkZmlsZW5hbWUpKT8gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJGZp bGVuYW1lLmhJbnB1dCgnZmlsZW5hbWUnLCRmaWxlbmFtZSkpKSA6ICcnICkKCS4gdHIoIGZM YWJlbENlbGwoICdwbHVnaW4nICkgLiB0ZCgkbmV3bmFtZSkpCgkuIHRyKCBmTGFiZWxDZWxs KCAncGx1Z2luJyApIC4gdGQoJGNvZGUpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3ByZWZzJyAp IC4gdGQoJHByZWZzKSkKCgkuIHRyKCBmTGFiZWxDZWxsKCAndmVyc2lvbicgKSAuIHRkKCR2 ZXJzaW9uKSkKCS4gdHIoIGZMYWJlbENlbGwoICdhdXRob3InICkgLiB0ZCgkYXV0aG9yKSkK CS4gdHIoIGZMYWJlbENlbGwoICd3ZWJzaXRlJyApIC4gdGQoJGF1dGhvcl91cmkpKQoJLiB0 ciggZkxhYmVsQ2VsbCggJ2Rlc2NyaXB0aW9uJyApIC4gdGQoJGRlc2NyaXB0aW9uKSkKCS4g dHIoIHRkYShnVHh0KCdwbHVnaW5faGVscCcpLCAnIGNsYXNzPSJub2xpbmUiIHN0eWxlPSJ0 ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsiJykgLiB0ZCgkaGVs cCkpCgkuIHRyKCBmTGFiZWxDZWxsKCAnY3NzJyApIC4gdGQoJGNzcykpCgkuIHRyKCBmTGFi ZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzdWIpKQoKCS4gdHIoIHRkY3MoJzxocj4nLDIpKQoJ LiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZChpZWRfcGx1Z2luX2dUeHQoJ2llZF9w bHVnaW5fdXRpbGl0aWVzJykuJzonKSkKCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2lu X2dUeHQoJ2llZF9wbHVnaW5fY29kZV9kaXN0JykgKSAuIHRkKCRkaXN0cmlidXRpb24pKQoJ LiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc2xpbmspKQoJLiB0ciggZkxhYmVs Q2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ppcGxpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5i c3A7JykgLiB0ZCgkc3BocGxpbmspKQoJLiBlbmRUYWJsZSgpCgkuIHNJbnB1dCgnaWVkX3Bs dWdpbl9zYXZlJykKCS4gZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykKCS4gaElucHV0 KCduYW1lJywkbmFtZSkpCS4gPDw8RU9GCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 Ij4KalF1ZXJ5LmZuLnJlc2l6ZWhhbmRsZSA9IGZ1bmN0aW9uKGN1cmgpIHsKCXJldHVybiB0 aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJdmFyIG1lID0galF1ZXJ5KHRoaXMpOwoJCW1lLmFu aW1hdGUoe2hlaWdodDogY3VyaH0pOwoJCW1lLmFmdGVyKAoJCQlqUXVlcnkoJzxkaXYgY2xh c3M9InJlc2l6ZWhhbmRsZSI+LS0tICsgLS0tPC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwg ZnVuY3Rpb24oZSkgewoJCQkJdmFyIGggPSBtZS5oZWlnaHQoKTsKCQkJCXZhciB5ID0gZS5j bGllbnRZOwoJCQkJdmFyIG1vdmVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewoJCQkJCW1lLmhl aWdodChNYXRoLm1heCgyMCwgZS5jbGllbnRZICsgaCAtIHkpKTsKCQkJCX07CgkJCQl2YXIg dXBIYW5kbGVyID0gZnVuY3Rpb24oZSkgewoJCQkJCWpRdWVyeSgiaHRtbCIpLnVuYmluZCgi bW91c2Vtb3ZlIixtb3ZlSGFuZGxlcikudW5iaW5kKCJtb3VzZXVwIix1cEhhbmRsZXIpOwoJ CQkJCW5ld2ggPSBtZS5oZWlnaHQoKTsKCQkJCQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRo ZWlnaHQnLCBuZXdoLCAzMCk7CgkJCQl9OwoJCQkJalF1ZXJ5KCJodG1sIikuYmluZCgibW91 c2Vtb3ZlIiwgbW92ZUhhbmRsZXIpLmJpbmQoIm1vdXNldXAiLCB1cEhhbmRsZXIpOwoJCQl9 KQoJCSk7Cgl9KTsKfQpmdW5jdGlvbiBzZXRDb29raWUobmFtZSx2YWx1ZSxkYXlzKSB7Cglp ZiAoZGF5cykgewoJCXZhciBkYXRlID0gbmV3IERhdGUoKTsKCQlkYXRlLnNldFRpbWUoZGF0 ZS5nZXRUaW1lKCkrKGRheXMqMjQqNjAqNjAqMTAwMCkpOwoJCXZhciBleHBpcmVzID0gIjsg ZXhwaXJlcz0iK2RhdGUudG9HTVRTdHJpbmcoKTsKCX0gZWxzZSB2YXIgZXhwaXJlcyA9ICIi OwoJZG9jdW1lbnQuY29va2llID0gbmFtZSsiPSIrdmFsdWUrZXhwaXJlcysiOyBwYXRoPS8i Owp9CmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7Cgl2YXIgbmFtZUVRID0gbmFtZSArICI9 IjsKCXZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOwoJZm9yKHZhciBpPTA7 aSA8IGNhLmxlbmd0aDtpKyspIHsKCQl2YXIgYyA9IGNhW2ldOwoJCXdoaWxlIChjLmNoYXJB dCgwKT09JyAnKSBjID0gYy5zdWJzdHJpbmcoMSxjLmxlbmd0aCk7CgkJaWYgKGMuaW5kZXhP ZihuYW1lRVEpID09IDApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLGMubGVu Z3RoKTsKCX0KCXJldHVybiBudWxsOwp9ClwkKGZ1bmN0aW9uKCkgewoJY3VyaCA9IGdldENv b2tpZSgnaWVkX3BsdWdpbl9lZGhlaWdodCcpOwoJY3VyaCA9IChjdXJoID09IG51bGwpID8g JzQ4MCcgOiBjdXJoOwoJXCQoIiNwbHVnaW5fZWRpdG9yIikucmVzaXplaGFuZGxlKHBhcnNl SW50KGN1cmgpKTsKfSk7Cjwvc2NyaXB0Pgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoucmVz aXplaGFuZGxlIHsKCWN1cnNvcjpzLXJlc2l6ZTsKCXRleHQtYWxpZ246Y2VudGVyOwoJZm9u dC1zaXplOjFlbTsKCXdpZHRoOjEwMCU7CglwYWRkaW5nOjJweCAwIDZweDsKfQo8L3N0eWxl PgpFT0Y7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlKCkgewoJZ2xv YmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn bmFtZScsJ25ld25hbWUnLCdmaWxlbmFtZScsJ2NvZGUnLCdhdXRob3InLCdhdXRob3JfdXJp JywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywnaGVscCcsJ2NzcycsJ3N0YXR1cycsJ3R5cGUn KSkpKTsKCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9t YXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9w bHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCglpZiAoZW1wdHkoJGZpbGVuYW1lKSkgewoJ CXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwibmFtZT0nJG5ld25hbWUnIiwgIm5hbWU9JyRu YW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiY29kZT0nJGNvZGUnIiwgIm5h bWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiYXV0aG9yPSck YXV0aG9yJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdp biIsImF1dGhvcl91cmk9JyRhdXRob3JfdXJpJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlz YWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsInZlcnNpb249JyR2ZXJzaW9uJyIsICJuYW1lPSck bmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImRlc2NyaXB0aW9uPSck ZGVzY3JpcHRpb24nIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBf cGx1Z2luIiwiaGVscD0nIi4kaGVscC4oKCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5u LiRlbmRfY3NzOicnKS4iJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgi dHhwX3BsdWdpbiIsInN0YXR1cz0nJHN0YXR1cyciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJ c2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJ0eXBlPSckdHlwZSciLCAibmFtZT0nJG5ld25h bWUnIik7Cgl9IGVsc2UgewoJCSRmaWxlY29udGVudCA9IGZpbGUoJEdMT0JBTFNbJ3ByZWZz J11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZW5hbWUpOwoJCSRmaWxlY29udGVudCA9 IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkZmlsZWNvbnRlbnQpOwoJCSRtZXRhdmFycyA9IGFy cmF5KCJuYW1lIiA9PiAiJG5ld25hbWUiLAoJCQkJCQkJCSJ2ZXJzaW9uIiA9PiAiJHZlcnNp b24iLAoJCQkJCQkJCSJhdXRob3IiID0+ICIkYXV0aG9yIiwKCQkJCQkJCQkiYXV0aG9yX3Vy aSIgPT4gIiRhdXRob3JfdXJpIiwKCQkJCQkJCQkiZGVzY3JpcHRpb24iID0+ICIkZGVzY3Jp cHRpb24iLAoJCQkJCQkJCSJ0eXBlIiA9PiAiJHR5cGUiCgkJCQkJCSk7CgkJJGh1bmt2YXJz ID0gYXJyYXkoIkNPREUiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkY29k ZSkpLCAvLyBuZXdsaW5lIHdvcmthcm91bmQKCQkJCQkiSEVMUCIgPT4gZG9TdHJpcChzdHJf cmVwbGFjZSgnXHJcbicsJwonLCRoZWxwKSksCgkJCQkJIkNTUyIgPT4gZG9TdHJpcChzdHJf cmVwbGFjZSgnXHJcbicsJwonLCRjc3MpKSwKCQkJCQkJKTsKCQlmb3JlYWNoICgkbWV0YXZh cnMgYXMgJHZhcm5hbWUgPT4gJHZhbHVlKSB7CgkJCWZvcigkaWR4ID0gMDsgJGlkeCA8IGNv dW50KCRmaWxlY29udGVudCk7ICRpZHgrKykgewoJCQkJaWYgKHN0cnBvcygkZmlsZWNvbnRl bnRbJGlkeF0sICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddJykgPT09IDApIHsKCQkJCQkk ZmlsZWNvbnRlbnRbJGlkeF0gPSAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXSA9ICcuZG9R dW90ZSgkdmFsdWUpLic7JzsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQlmb3JlYWNo ICgkaHVua3ZhcnMgYXMgJHZhcm5hbWUgPT4gJGh1bmspIHsKCQkJbGlzdCAoJHN0YXJ0X2Rl bGltLCAkZW5kX2RlbGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCR2YXJuYW1lLCAk aWVkX3BsdWdpbl9nbG9iYWxzWydkbG1fc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1sn ZGxtX2VuZCddKTsKCQkJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGZp bGVjb250ZW50KSArIDE7CgkJCSRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGZp bGVjb250ZW50KTsKCQkJaWYgKGlzX251bWVyaWMoJHN0YXJ0KSAmJiBpc19udW1lcmljKCRl bmQpICYmICRlbmQgPj0gJHN0YXJ0KSB7CgkJCQlhcnJheV9zcGxpY2UoJGZpbGVjb250ZW50 LCAkc3RhcnQsICRlbmQtJHN0YXJ0LCAkaHVuayk7CgkJCX0KCQl9CgkJJGZpbGVjb250ZW50 ID0gaW1wbG9kZSgiXG4iLCAkZmlsZWNvbnRlbnQpOwoJCSRmaCA9IGZvcGVuKCRHTE9CQUxT WydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGVuYW1lLCAndysnKTsKCQlm d3JpdGUoJGZoLCAkZmlsZWNvbnRlbnQpOwoJCWZjbG9zZSgkZmgpOwoJfQoJLy8gQ2hlY2sg dGhlIHBsdWdpbiB0eXBlIG1hdGNoZXMgdGhlIGNvZGUgdXNlZAoJJGV4dHJhTXNnID0gKGll ZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGUsICR0eXBlKSkgPyAnJyA6IHN0cm9uZyhpZWRf cGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY2hlY2tfdHlwZScpKTsKCSRtZXNzYWdlID0gbWVz c2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCdzYXZlZCcpLmJyLiRleHRyYU1zZzsKCWllZF9w bHVnaW5fZWRpdCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdp bl9jcmVhdGVfbmV3KCkgewoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnKSkp KTsKCWlmICgkbmFtZT09JycpIHsKCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3BsdWdpbl9nVHh0 KCdpZWRfcGx1Z2luX25hbWVfZmlyc3QnKSk7CgkJcmV0dXJuOwoJfQoJJGV4aXN0cyA9IGZl dGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsKCWlmICghJGV4aXN0cykg ewoJCXNhZmVfaW5zZXJ0KCJ0eHBfcGx1Z2luIiwgIgoJCQluYW1lPSckbmFtZScsCgkJCXN0 YXR1cz0nMCcsCgkJCXR5cGU9JzAnLAoJCQl2ZXJzaW9uPScwLjEnCgkJIik7CgkJcGFnZXRv cChnVHh0KCdlZGl0X3BsdWdpbnMnKSwgJ2VkaXQgeW91ciBuZXcgcGx1Z2luJyk7CgkJZWNo byBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZSk7Cgl9IGVsc2UgewoJCWllZF9wbHVnaW5f bGlzdChnVHh0KCdwbHVnaW4nKS4nIDxzdHJvbmc+Jy4kbmFtZS4nPC9zdHJvbmc+ICcuZ1R4 dCgnYWxyZWFkeV9leGlzdHMnKSk7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9zYXZlX2FzX2ZpbGUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFsczsKCWlm IChncHMoJ25hbWUnKSkgewoJCSRuYW1lID0gZ3BzKCduYW1lJyk7CgkJJGRlc2NyaXB0aW9u ID0gKCRuYW1lKSA/IGZldGNoKCdkZXNjcmlwdGlvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywk bmFtZSkgOiAnJzsKCQkkYXV0aG9yID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3InLCd0eHBf cGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGF1dGhvcl91cmkgPSAoJG5hbWUpID8g ZmV0Y2goJ2F1dGhvcl91cmknLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJ JHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2goJ3ZlcnNpb24nLCd0eHBfcGx1Z2luJywnbmFt ZScsJG5hbWUpIDogJyc7CgkJJGNvZGUgPSAoJG5hbWUpID8gZmV0Y2goJ2NvZGUnLCd0eHBf cGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGhlbHAgPSAoJG5hbWUpID8gZmV0Y2go J2hlbHAnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHR5cGUgPSAoJG5h bWUpID8gZmV0Y2goJ3R5cGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJ bGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygk aGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOwoJfSBl bHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2Zp bGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVu YW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7Cgl9CgkkemlwID0gZ3BzKCd6aXAnKTsKCWlm IChncHMoJ3RyaW0nKT09MSkgewoJCSRjb2RlPWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsKCQkk Y29kZT1hcnJheV9tYXAoJ3RyaW0nLCRjb2RlKTsKCQkkY29kZT1pbXBsb2RlKCJcclxuIiwk Y29kZSk7Cgl9CgoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9t YWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAk aWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwoKCWhlYWRlcigiQ29udGVudC10eXBl OiB0ZXh0L3BsYWluIik7CgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1l bnQ7IGZpbGVuYW1lPSInIC4gJG5hbWUuJ192Jy4kdmVyc2lvbi4gKCgkemlwKT8nX3ppcCc6 JycpIC4gJy50eHQnKTsKCgkkdHlwZXMgPSBhcnJheSggJ0NsaWVudCBzaWRlJyAsICdBZG1p bi9DbGllbnQgc2lkZScgLCAnTGlicmFyeScgKTsKCSRwbHVnaW5bJ25hbWUnXSA9ICRuYW1l OwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBsdWdpblsnYXV0aG9yX3VyaSdd ID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lvbjsKCSRwbHVn aW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247CgkkcGx1Z2luWydjb2RlJ10gPSAk Y29kZTsKCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOwovLwkkcGx1Z2luWydhbGxvd19odG1s X2hlbHAnXSA9IHRydWU7Ci8vCSRwbHVnaW5bJ2hlbHBfcmF3J10gPSAkaGVscC4kc3RhcnRf Y3NzLiRjc3MuJGVuZF9jc3M7CgkkcGx1Z2luWydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRp bGUoJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsKCSRwbHVnaW5bJ21kNSdd ID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsKCgllY2hvICcjIE5hbWU6ICcuJG5hbWUuJyB2 Jy4kdmVyc2lvbi4nICcuKCgkemlwKSA/ICIoY29tcHJlc3NlZCkiIDogIiIpLicKIyBUeXBl OiAnLiR0eXBlc1skdHlwZV0uJyBwbHVnaW4KIyAnLiRkZXNjcmlwdGlvbi4nCiMgQXV0aG9y OiAnLiRhdXRob3IuJwojIFVSTDogJy4kYXV0aG9yX3VyaS4nCgojIC4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u LgojIFRoaXMgaXMgYSBwbHVnaW4gZm9yIFRleHRwYXR0ZXJuIC0gaHR0cDovL3RleHRwYXR0 ZXJuLmNvbS8KIyBUbyBpbnN0YWxsOiB0ZXh0cGF0dGVybiA+IGFkbWluID4gcGx1Z2lucwoj IFBhc3RlIHRoZSBmb2xsb3dpbmcgdGV4dCBpbnRvIHRoZSBcJ0luc3RhbGwgcGx1Z2luXCcg Ym94OgojIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKJy4oKCR6aXApID8gY2h1bmtfc3BsaXQoYmFzZTY0 X2VuY29kZShnemVuY29kZShzZXJpYWxpemUoJHBsdWdpbikpKSwgNzIpIDogY2h1bmtfc3Bs aXQoYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJHBsdWdpbikpLCA3MikpOwoKCWRpZSgpOwp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZV9hc19waHBfZmlsZSgpIHsK CWdsb2JhbCAkcHJlZnM7CglpZiAoZ3BzKCduYW1lJykpIHsKCQkkbmFtZSA9IGdwcygnbmFt ZScpOwoJCSRkZXNjcmlwdGlvbiA9ICgkbmFtZSkgPyBmZXRjaCgnZGVzY3JpcHRpb24nLCd0 eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGF1dGhvciA9ICgkbmFtZSkgPyBm ZXRjaCgnYXV0aG9yJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRhdXRo b3JfdXJpID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3JfdXJpJywndHhwX3BsdWdpbicsJ25h bWUnLCRuYW1lKSA6ICcnOwoJCSR2ZXJzaW9uID0gKCRuYW1lKSA/IGZldGNoKCd2ZXJzaW9u JywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRjb2RlID0gKCRuYW1lKSA/ IGZldGNoKCdjb2RlJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRoZWxw ID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6 ICcnOwoJCSR0eXBlID0gKCRuYW1lKSA/IGZldGNoKCd0eXBlJywndHhwX3BsdWdpbicsJ25h bWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3Bs dWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFy cmF5KCcnLCRoZWxwKTsKCX0gZWxzZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsKCQkkcGx1Z2lu PWllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVf ZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsKCQlleHRyYWN0KCRwbHVnaW4pOwoJfQoKCSRv cmRlciA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pICYmIGlz X251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddKSkgPyAkcHJlZnNb J2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10gOiAwOwoKCWhlYWRlcigiQ29udGVudC10eXBl OiB0ZXh0L3BocCIpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50 OyBmaWxlbmFtZT0iJyAuICRuYW1lLidfdicuJHZlcnNpb24uICcucGhwJyk7CgoJJGhlbHBj aHVuayA9ICdpZiAoMCkgeycubgouJz8+Jy5uCi4gKCgkY3NzKSA/ICc8IS0tJy5uCi4nIyAt LS0gQkVHSU4gUExVR0lOIENTUyAtLS0nLm4KLiRjc3MubgouJyMgLS0tIEVORCBQTFVHSU4g Q1NTIC0tLScubgouJy0tPicubiA6ICcnKQouJzwhLS0nLm4KLicjIC0tLSBCRUdJTiBQTFVH SU4gSEVMUCAtLS0nLm4KLiRoZWxwLm4KLicjIC0tLSBFTkQgUExVR0lOIEhFTFAgLS0tJy5u Ci4nLS0+Jy5uCi4nPD9waHAnLm4KLid9Jy5uOwoKCSRjb2RlY2h1bmsgPSAnIyAtLS0gQkVH SU4gUExVR0lOIENPREUgLS0tJy5uCi5zdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkY29kZSku bgouJyMgLS0tIEVORCBQTFVHSU4gQ09ERSAtLS0nLm47CgoJZWNobyAnPD9waHAnLm4KLicv LyBUaGlzIGlzIGEgUExVR0lOIFRFTVBMQVRFLicubgouJy8vIENvcHkgdGhpcyBmaWxlIHRv IGEgbmV3IG5hbWUgbGlrZSBhYmNfbXlwbHVnaW4ucGhwLiAgRWRpdCB0aGUgY29kZSwgdGhl bicubgouJy8vIHJ1biB0aGlzIGZpbGUgYXQgdGhlIGNvbW1hbmQgbGluZSB0byBwcm9kdWNl IGEgcGx1Z2luIGZvciBkaXN0cmlidXRpb246Jy5uCi4nLy8gJCBwaHAgYWJjX215cGx1Z2lu LnBocCA+IGFiY19teXBsdWdpbi0wLjEudHh0Jy5uCi5uCi4nLy8gUGx1Z2luIG5hbWUgaXMg b3B0aW9uYWwuICBJZiB1bnNldCwgaXQgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgY3Vy cmVudCcubgouJy8vIGZpbGUgbmFtZS4gVW5jb21tZW50IGFuZCBlZGl0IHRoaXMgbGluZSB0 byBvdmVycmlkZTonLm4KLickcGx1Z2luW1wnbmFtZVwnXSA9ICcuZG9RdW90ZSgkbmFtZSku JzsnLm4KLickcGx1Z2luW1wndmVyc2lvblwnXSA9ICcuZG9RdW90ZSgkdmVyc2lvbikuJzsn Lm4KLickcGx1Z2luW1wnYXV0aG9yXCddID0gJy5kb1F1b3RlKCRhdXRob3IpLic7Jy5uCi4n JHBsdWdpbltcJ2F1dGhvcl91cmlcJ10gPSAnLmRvUXVvdGUoJGF1dGhvcl91cmkpLic7Jy5u Ci4nJHBsdWdpbltcJ2Rlc2NyaXB0aW9uXCddID0gJy5kb1F1b3RlKCRkZXNjcmlwdGlvbiku JzsnLm4KLm4KLicvLyBQbHVnaW4gdHlwZXM6Jy5uCi4nLy8gMCA9IHJlZ3VsYXIgcGx1Z2lu OyBsb2FkZWQgb24gdGhlIHB1YmxpYyB3ZWIgc2lkZSBvbmx5Jy5uCi4nLy8gMSA9IGFkbWlu IHBsdWdpbjsgbG9hZGVkIG9uIGJvdGggdGhlIHB1YmxpYyBhbmQgYWRtaW4gc2lkZScubgou Jy8vIDIgPSBsaWJyYXJ5OyBsb2FkZWQgb25seSB3aGVuIGluY2x1ZGVfcGx1Z2luKCkgb3Ig cmVxdWlyZV9wbHVnaW4oKSBpcyBjYWxsZWQnLm4KLickcGx1Z2luW1wndHlwZVwnXSA9ICcu ZG9RdW90ZSgkdHlwZSkuJzsnLm4KLm4KLidAaW5jbHVkZV9vbmNlKFwnemVtX3RwbC5waHBc Jyk7Jy5uCi5uCi4oKCRvcmRlciA9PSAwKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQou KCgkb3JkZXIgPT0gMSkgPyAkY29kZWNodW5rIDogJGhlbHBjaHVuaykKLic/Pic7CglkaWUo KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3VwbG9hZCgpIHsKCWdsb2Jh bCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0g aWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nz c19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOwoKCWlmICghJF9G SUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSB7CgkJaWVkX3BsdWdpbl9saXN0KCdZb3Ug YXJlIHN1cHBvc2VkIHRvIGNob29zZSB0aGUgZmlsZSA7KScpO3JldHVybjsKCX0KCSRwbHVn aW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1l J10pOwoJJG5ld25hbWUgPSAoZW1wdHkoJHBsdWdpblsnbmFtZSddKSkgPyBiYXNlbmFtZSgk X0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXSwgJy5waHAnKSA6ICRwbHVnaW5bJ25hbWUnXTsK CWlmIChncHMoJ25hbWUnKSBhbmQgZ3BzKCduYW1lJykhPSd4eHhfeHh4eHh4JykgewoJCSRu ZXduYW1lPWdwcygnbmFtZScpOwoJfQoJaWYgKGVtcHR5KCRwbHVnaW5bJ2NvZGUnXSkpIHsK CQkkcGx1Z2luWydjb2RlJ10gPSBpbXBsb2RlICgiIiwgZmlsZSgkX0ZJTEVTWyd0aGVmaWxl J11bJ3RtcF9uYW1lJ10pKTsKCX0KCglpZiAoTUFHSUNfUVVPVEVTX0dQQykgewoJCSRwbHVn aW4gPSBkb1N0cmlwKCRwbHVnaW4pOwoJfQoJZXh0cmFjdChkb1NsYXNoKCRwbHVnaW4pKTsK CSRtZDU9bWQ1KCRjb2RlKTsKCSR2ZXJzaW9uID0gKGVtcHR5KCR2ZXJzaW9uKSkgPyAiMC4x IiA6ICR2ZXJzaW9uOwoJJGhlbHAgPSAkaGVscC4oKCRjc3MpID8gbi4kc3RhcnRfY3NzLm4u JGNzcy5uLiRlbmRfY3NzIDogJycpOwoJJGV4aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3Bs dWdpbicsJ25hbWUnLCRuZXduYW1lKTsKCWlmICgkZXhpc3RzKSB7CgkJJHN0YXR1cyA9IGZl dGNoKCdzdGF0dXMnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25hbWUpOwoJCSRycyA9IHNh ZmVfdXBkYXRlKAoJCQkidHhwX3BsdWdpbiIsCgkJCSJzdGF0dXMgICAgICA9ICckc3RhdHVz JywKCQkJdHlwZSAgICAgICAgID0gJyR0eXBlJywKCQkJYXV0aG9yICAgICAgID0gJyRhdXRo b3InLAoJCQlhdXRob3JfdXJpICAgPSAnJGF1dGhvcl91cmknLAoJCQl2ZXJzaW9uICAgICAg PSAnJHZlcnNpb24nLAoJCQlkZXNjcmlwdGlvbiAgPSAnJGRlc2NyaXB0aW9uJywKCQkJaGVs cCAgICAgICAgID0gJyRoZWxwJywKCQkJY29kZSAgICAgICAgID0gJyRjb2RlJywKCQkJY29k ZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJY29kZV9tZDUgICAgID0gJyRtZDUnIiwKCQkJIm5h bWUgICAgICAgID0gJyRuZXduYW1lJyIKCQkpOwoJfSBlbHNlIHsKCQkkcnMgPSBzYWZlX2lu c2VydCgKCQkJInR4cF9wbHVnaW4iLAoJCQkibmFtZSAgICAgICAgID0gJyRuZXduYW1lJywK CQkJc3RhdHVzICAgICAgID0gMCwKCQkJdHlwZSAgICAgICAgID0gJyR0eXBlJywKCQkJYXV0 aG9yICAgICAgID0gJyRhdXRob3InLAoJCQlhdXRob3JfdXJpICAgPSAnJGF1dGhvcl91cmkn LAoJCQl2ZXJzaW9uICAgICAgPSAnJHZlcnNpb24nLAoJCQlkZXNjcmlwdGlvbiAgPSAnJGRl c2NyaXB0aW9uJywKCQkJaGVscCAgICAgICAgID0gJyRoZWxwJywKCQkJY29kZSAgICAgICAg ID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJY29kZV9tZDUgICAg ID0gJyRtZDUnIgoJCSk7Cgl9CgoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwgbWVz c2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCgkZXhpc3RzKT8ndXBkYXRlZCc6J3VwbG9hZGVk JykpOwoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFtZSk7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJGZpbGVwYXRoKSB7CgkkY29udGVu dCA9IGZpbGUoJGZpbGVwYXRoKTsKCSRzb3VyY2VfbGluZXMgPSBjb3VudCgkY29udGVudCk7 CgkkbWV0YWRhdGEgPSBhcnJheSgKCQkJCQkJJ25hbWUnID0+ICcnLAoJCQkJCQkndmVyc2lv bicgPT4gJycsCgkJCQkJCSdyZXZpc2lvbicgPT4gJycsCgkJCQkJCSdhdXRob3InID0+ICcn LAoJCQkJCQknYXV0aG9yX3VyaScgPT4gJycsCgkJCQkJCSdkZXNjcmlwdGlvbicgPT4gJycs CgkJCQkJCSd0eXBlJyA9PiAnJywKCQkJCQkpOwoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291 cmNlX2xpbmVzOyAkaWR4KyspIHsKCQkkY29udGVudFskaWR4XSA9IHJ0cmltKCRjb250ZW50 WyRpZHhdKTsKCQlpZiAoc3RycG9zKCRjb250ZW50WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0g MCkgewoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBleHRyYWN0IGl0CgkJCSRw YXJ0cyA9IGV4cGxvZGUoIiA9ICIsICRjb250ZW50WyRpZHhdKTsKCQkJJHBhcnRzWzBdID0g c3RyX3JlcGxhY2UoIiciLCAiIiwgJHBhcnRzWzBdKTsgLy8gTWFrZSB0aGUgbWF0Y2ggZWFz aWVyIQoJCQlwcmVnX21hdGNoKCIvcGx1Z2luXFsoLiopXF0vIiwgJHBhcnRzWzBdLCAkdmFy KTsgLy8gRXh0cmFjdCBqdXN0IHRoZSB2YXJpYWJsZSBuYW1lCgkJCXByZWdfbWF0Y2goIi8u KicoLiopJy4qLyIsICRwYXJ0c1sxXSwgJHZhbCk7IC8vIFJlbW92ZSBhbnl0aGluZyBvdXRz aWRlIHRoZSBxdW90ZXMgKGUuZy4gJHJldmlzaW9uKQoJCQlpZiAoJHZhclsxXSA9PSAncmV2 aXNpb24nICYmICFlbXB0eSgkdmFsWzFdKSkgewoJCQkJJHJldnBhcnRzID0gZXhwbG9kZSgn ICcsIHRyaW0oJHZhbFsxXSwgJyQgJykpOwoJCQkJJHZhbFsxXSA9ICRyZXZwYXJ0c1tjb3Vu dCgkcmV2cGFydHMpLTFdOwoJCQkJJHZhbFsxXSA9IChlbXB0eSgkdmFsWzFdKSkgPyAnJyA6 ICcuJyAuJHZhbFsxXTsKCQkJfQoJCQkkbWV0YWRhdGFbJHZhclsxXV0gPSAkdmFsWzFdOwoJ CX0KCX0KCSRtZXRhZGF0YVsndmVyc2lvbiddIC49ICRtZXRhZGF0YVsncmV2aXNpb24nXTsK CSRtZXRhZGF0YVsnaGVscCddID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQs ICdIRUxQJyk7CgkkbWV0YWRhdGFbJ2NzcyddICA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5r KCRjb250ZW50LCAnQ1NTJyApOwoJJG1ldGFkYXRhWydjb2RlJ10gPSBpZWRfcGx1Z2luX2V4 dHJhY3RfaHVuaygkY29udGVudCwgJ0NPREUnKTsKCglyZXR1cm4gJG1ldGFkYXRhOwp9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi8vIHJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidzIHplbV90 cGwgdGVtcGxhdGUKZnVuY3Rpb24gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQs ICRodW5rLCAkY21udD0iIyIsICRkZWxldGU9ZmFsc2UpIHsKCSRkbG0gPSBleHBsb2RlKCJ8 IiwgJGNtbnQpOwoJJGRsbVN0YXJ0ID0gJGRsbVswXTsKCSRkbG1FbmQgPSAoY291bnQoJGRs bSkgPiAxKSA/ICRkbG1bMV0gOiAnJzsKCSRsaW5lcyA9IGllZF9wbHVnaW5fbWFrZV9hcnJh eSgkY29udGVudCk7CgoJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGllZF9w bHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAkZGxtU3RhcnQsICRkbG1FbmQpOwoJJHN0YXJ0 ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGxpbmVzKSArIDE7CgkkZW5kID0gYXJy YXlfc2VhcmNoKCRlbmRfZGVsaW0sICRsaW5lcyk7CgkkZXh0cmFjdGVkID0gYXJyYXkoKTsK CWlmIChjb3VudCgkbGluZXMpID4gMCAmJiBpc19udW1lcmljKCRzdGFydCkgJiYgaXNfbnVt ZXJpYygkZW5kKSAmJiAkZW5kID4gJHN0YXJ0KSB7CgkJJGV4dHJhY3RlZCA9IGFycmF5X3Ns aWNlKCRsaW5lcywgJHN0YXJ0LCAkZW5kLSRzdGFydCk7CgkJJGxpbmVOdW0gPSBjb3VudCgk ZXh0cmFjdGVkKS0xOwoJCXdoaWxlICgkbGluZU51bSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVk WyRsaW5lTnVtLS1dKSA9PSAiIikgewoJCQlhcnJheV9wb3AoJGV4dHJhY3RlZCk7CgkJfQoJ CXdoaWxlIChjb3VudCgkZXh0cmFjdGVkKSA+IDAgJiYgdHJpbSgkZXh0cmFjdGVkWzBdKSA9 PSAiIikgewoJCQlhcnJheV9zaGlmdCgkZXh0cmFjdGVkKTsKCQl9CgkJaWYgKCRkZWxldGUp IHsKCQkJJGNob3BwZWQgPSBhcnJheV9zcGxpY2UoJGxpbmVzLCAkc3RhcnQtMSwgJGVuZC0k c3RhcnQrMiwgIiIpOwoJCX0KCX0KCSRyZW1haW5zID0gJGxpbmVzOwoJLy8gQ2hlY2sgaWYg dGhlIENTUyBzZWN0aW9uIGhhcyA8c3R5bGU+IHRhZ3MgYXJvdW5kIGl0OyBhZGQgdGhlbSBp ZiBub3QKCWlmICgkaHVuayA9PSAiQ1NTIikgewoJCSRudW1yb3dzID0gY291bnQoJGV4dHJh Y3RlZCk7CgkJaWYgKCRudW1yb3dzID4gMSkgewoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRb JG51bXJvd3MtMV0sICc8L3N0eWxlPicpID09PSBmYWxzZSkgewoJCQkJJGV4dHJhY3RlZFtd ID0gJzwvc3R5bGU+JzsKCQkJfQoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRbMF0sICc8c3R5 bGUgJykgPT09IGZhbHNlKSB7CgkJCQlhcnJheV91bnNoaWZ0KCRleHRyYWN0ZWQsICc8c3R5 bGUgdHlwZT0idGV4dC9jc3MiPicpOwoJCQl9CgkJfQoJfQoJaWYgKCRkZWxldGUpIHsKCQly ZXR1cm4gYXJyYXkodHJpbShqb2luKCJcbiIsICRleHRyYWN0ZWQpKSwgdHJpbShqb2luKCJc biIsICRyZW1haW5zKSkpOwoJfSBlbHNlIHsKCQlyZXR1cm4gdHJpbShqb2luKCJcbiIsICRl eHRyYWN0ZWQpKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX21ha2Vf YXJyYXkoJGFycikgewoJaWYgKCFpc19hcnJheSgkYXJyKSkgewoJCSRhcnIgPSBleHBsb2Rl KCJcbiIsICRhcnIpOwoJfQoJJHNvdXJjZV9saW5lcyA9IGNvdW50KCRhcnIpOwoJZm9yICgk aWR4PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsKCQkkYXJyWyRpZHhdID0g cnRyaW0oJGFyclskaWR4XSk7Cgl9CglyZXR1cm4gJGFycjsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5j dGlvbiBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkaHVuaywgJHN0YXJ0LCAkZW5kKSB7Cgln bG9iYWwgJGllZF9wbHVnaW5fZ2xvYmFsczsKCSRzbWFya2VyID0gJHN0YXJ0IC4gc3RyX3Jl cGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9wbHVnaW5fZ2xvYmFsc1snc3RhcnQnXSkg LiAoKCRlbmQpPycgJy4kZW5kOicnKTsKCSRlbWFya2VyID0gJHN0YXJ0IC4gc3RyX3JlcGxh Y2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9wbHVnaW5fZ2xvYmFsc1snZW5kJ10pIC4gKCgk ZW5kKT8nICcuJGVuZDonJyk7CglyZXR1cm4gKGFycmF5KCRzbWFya2VyLCAkZW1hcmtlcikp Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi8vIHJpcHBlZCBhbmQgbW9kZGVkIGZyb20gbmV0LWNhcnZlcidz IHplbV90cGwgdGVtcGxhdGUKZnVuY3Rpb24gaWVkX3BsdWdpbl9hZG1pbl9jaGVjaygkY29k ZWJsb2NrLCAkdHlwZSkgewoJJHJlID0gJy9AdHhwaW50ZXJmYWNlLio9PS4qYWRtaW4vJzsK CSRyZXQgPSB0cnVlOwoJaWYgKHByZWdfbWF0Y2goJHJlLCAkY29kZWJsb2NrKSAmJiAkdHlw ZSA9PSAwKSB7CgkJJHJldCA9IGZhbHNlOwoJfQoJcmV0dXJuICRyZXQ7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gaWVkX3BsdWdpbl90ZXh0aWxlKCRoZWxwLCAkY3NzLCAkc3RhcnRfZGxt LCAkZW5kX2RsbSkgewoJQGluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxl LnBocCc7Cgkkb3V0ID0gJGhlbHA7CglpZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykpIHsK CQkvLyBUcnkgYW5kIGJlIGEgbGl0dGxlIG1vcmUgaW50ZWxsaWdlbnQgYWJvdXQgYXBwbHlp bmcgdGV4dGlsZSBvciBub3QKCQkkcmUgPSAnL2gxKFwoLipcKSk/XC4vJzsKCQlpZiAocHJl Z19tYXRjaCgkcmUsICRoZWxwKSkgewoJCQkkdGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgkJ CSRvdXQgPSAkdGV4dGlsZS0+VGV4dGlsZVRoaXMoJGhlbHApOwoJCX0KCX0KCSRvdXQgLj0g KCRjc3MpID8gIlxuJHN0YXJ0X2RsbVxuJGNzc1xuJGVuZF9kbG1cbiIgOiAnJzsKCXJldHVy biAkb3V0Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9pbnNlcnRfZWRpdG9ycygpIHsK CWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG91dCA9IGFycmF5KCk7CgoJ JHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVn aW5fcHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBf cHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOwoJaWYgKGNvdW50KCRycykgPT0g Y291bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSB7CgkJJGVkID0gYXJyYXkoKTsKCQkkZWRb JHByZWZzWydpZWRfcGx1Z2luX2VkaXRvciddXSA9ICRwcmVmc1snaWVkX3BsdWdpbl9lZGl0 b3JfcGF0aCddOwoJCSRlZFskcHJlZnNbJ2llZF9wbHVnaW5faGVscF9lZGl0b3InXV0gPSAk cHJlZnNbJ2llZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCddOwoKCQlmb3JlYWNoICgkZWQg YXMgJGVkaXRvciA9PiAkZWRpdG9yX2RpcikgewoJCQlzd2l0Y2ggKCRlZGl0b3IpIHsKCQkJ CWNhc2UgInRpbnlfbWNlIjoKCQkJCQkkb3V0W10gPSA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kZWRpdG9yX2Rpci4nL3RpbnlfbWNlLmpzIj48L3Nj cmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJdGlueU1DRS5pbml0KHsK CQltb2RlIDogInNwZWNpZmljX3RleHRhcmVhcyIsCgkJZWRpdG9yX3NlbGVjdG9yIDogIm1j ZUVkaXRvciIsCgkJdGhlbWVfYWR2YW5jZWRfdG9vbGJhcl9sb2NhdGlvbiA6ICJ0b3AiLAoJ CXRoZW1lX2FkdmFuY2VkX2J1dHRvbnMxIDogImJvbGQsaXRhbGljLHVuZGVybGluZSxzdHJp a2V0aHJvdWdoLGZvcmVjb2xvcixiYWNrY29sb3IscmVtb3ZlZm9ybWF0LG51bWxpc3QsYnVs bGlzdCxvdXRkZW50LGluZGVudCxqdXN0aWZ5bGVmdCxqdXN0aWZ5Y2VudGVyLGp1c3RpZnly aWdodCxqdXN0aWZ5ZnVsbCIsCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczIgOiAibGluayx1 bmxpbmssc2VwYXJhdG9yLGlicm93c2VyLHNlcGFyYXRvcixzZWFyY2gscmVwbGFjZSxzZXBh cmF0b3IsY3V0LGNvcHkscGFzdGUsc2VwYXJhdG9yLGNvZGUsc2VwYXJhdG9yLGZvcm1hdHNl bGVjdCIsCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczMgOiAiIgoJfSk7Cjwvc2NyaXB0PjsK RU9GOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiZWRpdF9hcmVhIjoKCQkJCQkkb3V0W10gPSA8 PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGVkaXRvcl9kaXIv ZWRpdF9hcmVhX2Z1bGwuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj cmlwdCI+CgkvLyBpbml0aWFsaXNhdGlvbgoJZWRpdEFyZWFMb2FkZXIuaW5pdCh7CgkJaWQ6 ICJwbHVnaW5fZWRpdG9yIgkvLyBpZCBvZiB0aGUgdGV4dGFyZWEgdG8gdHJhbnNmb3JtCgkJ LHN0YXJ0X2hpZ2hsaWdodDogdHJ1ZQkvLyBpZiBzdGFydCB3aXRoIGhpZ2hsaWdodAoJCSxh bGxvd19yZXNpemU6ICJib3RoIgoJCSxhbGxvd190b2dnbGU6IHRydWUKCQksbGFuZ3VhZ2U6 ICJlbiIKCQksc3ludGF4OiAicGhwIgoJfSk7Cjwvc2NyaXB0PgpFT0Y7CgkJCQkJYnJlYWs7 CgkJCQljYXNlICJjb2RlcHJlc3MiOgoJCQkJCSRvdXRbXSA9ICc8c2NyaXB0IHR5cGU9InRl eHQvamF2YXNjcmlwdCIgc3JjPSInLiRlZGl0b3JfZGlyLicvY29kZXByZXNzLmpzIj48L3Nj cmlwdD4nOwoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoKCXJldHVybiBpbXBsb2RlKCJcbiIs ICRvdXQpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5faGVscF92aWV3ZXIo JG1lc3NhZ2U9JycpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJcGFnZXRvcChn VHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgoJaWYgKGdwcygnbmFtZScpKSB7CgkJ JG5hbWUgPSBncHMoJ25hbWUnKTsKCQkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcs J3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQlsaXN0KCRjc3MsJGhlbHApID0g KCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18 LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVsc2UgaWYgKGdwcygnZmlsZW5h bWUnKSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZz J11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3Qo JHBsdWdpbik7Cgl9CgllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsKCWlmIChlbXB0eSgkaGVs cCkpIHsKCQllY2hvIHRyKHRkYSgnPHA+SGVscCBub3QgYWNjZXNzaWJsZSBmcm9tIHRoaXMg ZmlsZS48L3A+JykpOwoJfSBlbHNlIHsKCQlsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2Nzcykg PSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1sn Y3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgkJJHBsdWdp blsnaGVscCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRoZWxwLCAkY3NzLCAkc3RhcnRfY3Nz LCAkZW5kX2Nzcyk7CgkJZWNobyB0cih0ZGEoICc8cD5FeHRyYWN0ZWQgJy4oIWVtcHR5KCRw bHVnaW5bJ2hlbHAnXSkgPyAnYW5kIFRleHRpbGUgcHJvY2Vzc2VkJyA6ICcnKS4nIGhlbHAg c2VjdGlvbiBmb2xsb3dzJiM4MjMwOzwvcD48aHI+JywgJyB3aWR0aD0iNjAwIicpKTsKCQll Y2hvIHRyKHRkYSgkcGx1Z2luWydoZWxwJ10sICcgd2lkdGg9IjYwMCInKSk7Cgl9CgllY2hv IGVuZFRhYmxlKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zZXR1cCgk bWVzc2FnZT0nJykgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG51bVJlcVByZWZz ID0gY291bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pOwoKCXBhZ2V0b3AoZ1R4dCgnZWRpdF9w bHVnaW5zJyksJG1lc3NhZ2UpOwoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCci LGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jvd3Mo J25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScp OwoJJG51bVJvd3MgPSBjb3VudCgkcnMpOwoKCSRidG5TYXZlID0gZklucHV0KCdzdWJtaXQn LCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpOwoJJGJ0bkluc3RhbGwgPSAn PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2Vy JiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5s aW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwgJ3B1 Ymxpc2gnKS4nPC9mb3JtPic7CgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIg YWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2lu X3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsKCSRi dG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7CgoJZWNobyBzdGFy dFRhYmxlKCdsaXN0Jyk7CglpZiAoJG51bVJvd3MgPT0gJG51bVJlcVByZWZzKSB7CgkJLy8g UHJlZnMgYWxsIGluc3RhbGxlZAoJCWVjaG8gdHIodGRhKHN0cm9uZyhpZWRfcGx1Z2luX2dU eHQoJ2llZF9wbHVnaW5fcHJlZnNfdGl0bGUnKSksICcgY29sc3Bhbj0iMiInKSAuIHRkYSgk YnRuUmVtb3ZlLCAkYnRuU3R5bGUpICk7CgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBh Y3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5f cHJlZnNfdXBkYXRlIj4nOwoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCAkbnVtUm93czsgJGlk eCsrKSB7CgkJCSRhID0gJHJzWyRpZHhdOwoJCQkkbGFiZWwgPSAnPGxhYmVsIGZvcj0iJy4k YVsnbmFtZSddLiciPicuaWVkX3BsdWdpbl9nVHh0KCRhWyduYW1lJ10pLic6PC9sYWJlbD4n OwoJCQkkb3V0ID0gdGRhKCRsYWJlbCwgJyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZl cnRpY2FsLWFsaWduOiBtaWRkbGU7IicpOwoJCQlzd2l0Y2goJGFbJ25hbWUnXSkgewoJCQkJ Y2FzZSAiaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCI6CgkJCQljYXNlICJpZWRfcGx1Z2luX2hl bHBfZWRpdG9yX3BhdGgiOgoJCQkJCSRvdXQgLj0gdGQoZklucHV0KCd0ZXh0JywgJGFbJ25h bWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAnJywgNTAsICcnLCAkYVsnbmFtZSddKSk7 CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvciI6Ci8vCQkJCQkkb3V0 IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCdub25lJyA9PiAnTm9uZScs ICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnLCAnY29kZXByZXNzJyA9PiAnQ29kZVByZXNz JyksICRhWyd2YWwnXSwgJycsICcgb25jaGFuZ2U9ImllZF9wbHVnaW5fcHJlZnN3YXAodGhp cy5pZCwgdGhpcy52YWx1ZSk7IicsICRhWyduYW1lJ10pKTsKCQkJCQkkb3V0IC49IHRkKHNl bGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2Fy ZWEnID0+ICdFZGl0IEFyZWEnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3Bs dWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJ CQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9oZWxwX2VkaXRvciI6CgkJCQkJJG91 dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBhcnJheSgndGV4dGlsZScgPT4gJ05v bmUgKFRleHRpbGUpJywgJ3RpbnlfbWNlJyA9PiAnVGlueSBNQ0UnKSwgJGFbJ3ZhbCddLCAn JywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVl KTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9v dXRwdXRfb3JkZXIiOgoJCQkJCSRvdXQgLj0gdGQocmFkaW8oJGFbJ25hbWUnXSwwLCgoJGFb J3ZhbCddPT0wKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fb3V0cHV0X2Nv ZGVfZmlyc3QnKS4iICIgLiByYWRpbygkYVsnbmFtZSddLDEsKCgkYVsndmFsJ109PTEpPzE6 MCkpLmllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9vdXRwdXRfaGVscF9maXJzdCcpLiIg Iik7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCI6CgkJ CQkJJG91dCAuPSB0ZChmSW5wdXQoJ3RleHQnLCAkYVsnbmFtZSddLCAkYVsndmFsJ10sICdl ZGl0JywgJycsICcnLCA1LCAnJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQl9CgkJ CWVjaG8gdHIoJG91dCk7CgkJfQoJCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUp KTsKCQllY2hvICc8L2Zvcm0+JzsKCX0gZWxzZSBpZiAoJG51bVJvd3MgPiAwICYmICRudW1S b3dzIDwgJG51bVJlcVByZWZzKSB7CgkJZWNobyB0cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5f Z1R4dCgnaWVkX3BsdWdpbl9wcmVmc19zb21lJykpLmJyLmJyCgkJCQkJCS5pZWRfcGx1Z2lu X2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfc29tZV9leHBsYWluJykuYnIuYnIKCQkJCQkJLmll ZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9wcmVmc19zb21lX29wdGlvbnMnKSwgJyBjb2xz cGFuPSIyIicpKTsKCQllY2hvIHRyKHRkYSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEo JGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOwoJfSBlbHNlIHsKCQllY2hvIHRyKHRkYShpZWRf cGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfbm90X2luc3RhbGxlZCcpLCAnIGNvbHNw YW49IjIiJykpOwoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsKCX0K CWVjaG8gZW5kVGFibGUoKTsKCgllY2hvIDw8PEVPRgo8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+CnZhciBpZWRfcGx1Z2luX3BhdGhfcmUgPSBuZXcgUmVnRXhwKCJeLipbL1xc XSIsICJnIikKZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc3dhcChzZWxJRCwgc2VsVmFsdWUp IHsKCXZhciBpZCA9IHNlbElEKydfcGF0aCc7Cgl2YXIgbnV2YWwgPSAoKGJhc2VuYW1lKCQo IiMiK2lkKS52YWwoKSkgPT0gc2VsVmFsdWUpID8gJCgiIyIraWQpLnZhbCgpIDogZGlybmFt ZSgkKCIjIitpZCkudmFsKCkpK3NlbFZhbHVlKTsKCWlmICgkKCIjIitzZWxJRClbMF0uc2Vs ZWN0ZWRJbmRleCA9PSAwKSB7CgkJJCgiIyIraWQpLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7 IDsKCX0gZWxzZSB7CgkJJCgiIyIraWQpLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOyA7CgkJ JCgiIyIraWQpLnZhbChudXZhbCk7Cgl9Cn0KZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgc3Vm Zml4KSB7CglyZXR1cm4gcGF0aC5yZXBsYWNlKGllZF9wbHVnaW5fcGF0aF9yZSwgJycpOwp9 CmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogICAgcmV0dXJuIHBhdGgubWF0Y2goaWVkX3Bs dWdpbl9wYXRoX3JlKTsKfQokKGZ1bmN0aW9uKCkgewoJJCgic2VsZWN0Lmxpc3QiKS5lYWNo KGZ1bmN0aW9uKCkgewoJCWllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1 ZSk7Cgl9KTsKfSk7Cjwvc2NyaXB0PgpFT0Y7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVk X3BsdWdpbl9wcmVmc19pbnN0YWxsKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJ JG1lc3NhZ2UgPSAnJzsKCWZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVm ID0+ICRkZmx0KSB7CgkJaWYgKCFmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRw cmVmKSkgewoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwg bmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFz aCgkZGZsdCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7CgkJfQoJfQoJJG1lc3NhZ2UgPSBp ZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfaW5zdGFsbGVkJyk7CglpZWRfcGx1 Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2lu X3ByZWZzX3JlbW92ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRtZXNzYWdl ID0gJyc7Cglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVkX3BsdWdpbl9wcmVmc1swXSwkaWVk X3BsdWdpbl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoZmV0Y2goJ25h bWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsKCQkJJGlkID0gc2FmZV9kZWxldGUo J3R4cF9wcmVmcycsJ25hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKSk7CgkJfQoJfQoJ JG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfZGVsZXRlZCcp OwoJaWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24g aWVkX3BsdWdpbl9wcmVmc191cGRhdGUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7 CgkkbWVzc2FnZSA9ICcnOwoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9zdCgpKTsKCWZvcmVh Y2ggKCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGlz c2V0KCRwb3N0WyRwcmVmXSkpIHsKCQkJc2FmZV91cGRhdGUoInR4cF9wcmVmcyIsICJ2YWwg PSAnIi4kcG9zdFskcHJlZl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2goJHByZWYpLiInIGFu ZCBwcmVmc19pZCA9IDEiKTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2Vz X3NhdmVkJyk7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBpZWRfcGx1Z2luX2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgewoJJGxh bmcgPSBhcnJheSgKCQknaWVkX3BsdWdpbl9jaGVja190eXBlJyA9PiAnQ2hlY2sgeW91ciBw bHVnaW4gdHlwZSEnLAoJCSdpZWRfcGx1Z2luX2NvZGVfZGlzdCcgPT4gJ1BsdWdpbiBjb2Rl PGJyPmZvciBkaXN0cmlidXRpb24nLAoJCSdpZWRfcGx1Z2luX2NvbXBvc2VyJyA9PiAnUGx1 Z2luIENvbXBvc2VyJywKCQknaWVkX3BsdWdpbl9jb21wcmVzcycgPT4gJ1ppcCcsCgkJJ2ll ZF9wbHVnaW5fY3JlYXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcgcGx1Z2luJywKCQknaWVkX3Bs dWdpbl9lZGl0b3InID0+ICdQbHVnaW4gZWRpdG9yJywKCQknaWVkX3BsdWdpbl9lZGl0b3Jf cGF0aCcgPT4gJ1BsdWdpbiBlZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRfcGx1Z2luX2VkaXRv cl93aWR0aCcgPT4gJ1BsdWdpbiBlZGl0b3Igd2lkdGggKGNoYXJzKScsCgkJJ2llZF9wbHVn aW5fZW5hYmxlJyA9PiAnRW5hYmxlIHBsdWdpbicsCgkJJ2llZF9wbHVnaW5fZXhwb3J0JyA9 PiAnRXhwb3J0IGFzJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcicgPT4gJ0hlbHAgZWRp dG9yJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiAnSGVscCBlZGl0b3Ig cGF0aCBVUkwnLAoJCSdpZWRfcGx1Z2luX25hbWUnID0+ICdQbHVnaW4gbmFtZScsCgkJJ2ll ZF9wbHVnaW5fbmFtZV9maXJzdCcgPT4gJ1lvdSBhcmUgc3VwcG9zZWQgdG8gbmFtZSB0aGUg bmV3IHBsdWdpbiA7KScsCgkJJ2llZF9wbHVnaW5fbmFtZV90b29sdGlwJyA9PiAnT25seSBu ZWVkZWQgaWYgdGhlIFBIUCBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIE5PVCBpbiB0aGUg c3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0JywKCQknaWVkX3BsdWdpbl9vdXRwdXRfY29kZV9m aXJzdCcgPT4gJ0NvZGUgZmlyc3QnLAoJCSdpZWRfcGx1Z2luX291dHB1dF9oZWxwX2ZpcnN0 JyA9PiAnSGVscCBmaXJzdCcsCgkJJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJyA9PiAnUEhQ IGV4cG9ydCBvcmRlcicsCgkJJ2llZF9wbHVnaW5fcHJlZnNfZGVsZXRlZCcgPT4gJ1ByZWZl cmVuY2VzIGRlbGV0ZWQnLAoJCSdpZWRfcGx1Z2luX3ByZWZzX2luc3RhbGxlZCcgPT4gJ1By ZWZlcmVuY2VzIGluc3RhbGxlZCcsCgkJJ2llZF9wbHVnaW5fcHJlZnNfbm90X2luc3RhbGxl ZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQuJywKCQknaWVkX3BsdWdpbl9wcmVm c19zb21lJyA9PiAnTm90IGFsbCBwcmVmZXJlbmNlcyBhdmFpbGFibGUuJywKCQknaWVkX3Bs dWdpbl9wcmVmc19zb21lX2V4cGxhaW4nID0+ICdJdCBpcyBlaXRoZXIgYmVjYXVzZSB0aGlz IGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5ici4ncGx1Z2luIHRvIG9uZSB5b3Ug aGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyLidoYXZlIGJlY29tZSBjb3JydXB0 IHNvbWVob3cuJywKCQknaWVkX3BsdWdpbl9wcmVmc19zb21lX29wdGlvbnMnID0+ICdDaG9v c2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2lu c3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcgb25lcywgbGVhdmluZyBhbGwgZXhpc3Rp bmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsCgkJJ2llZF9wbHVnaW5fcHJlZnNfdGl0bGUn ID0+ICdQbHVnaW4gQ29tcG9zZXIgcHJlZmVyZW5jZXMnLAoJCSdpZWRfcGx1Z2luX3J1bl9m cm9tJyA9PiAnUGx1Z2lucyB0aGF0IHJ1biBmcm9tJywKCQknaWVkX3BsdWdpbl9zYXZlX2Fz JyA9PiAnU2F2ZSBhcycsCgkJJ2llZF9wbHVnaW5fdHlwZScgPT4gJ1BsdWdpbiB0eXBlJywK CQknaWVkX3BsdWdpbl90eXBlXzAnID0+ICdDbGllbnQnLAoJCSdpZWRfcGx1Z2luX3R5cGVf MScgPT4gJ0FkbWluJywKCQknaWVkX3BsdWdpbl90eXBlXzInID0+ICdMaWJyYXJ5JywKCQkn aWVkX3BsdWdpbl91cGxvYWRfcGhwJyA9PiAnVXBsb2FkIHBsdWdpbiBmcm9tIFBIUCBmaWxl JywKCQknaWVkX3BsdWdpbl91dGlsaXRpZXMnID0+ICdVdGlsaXRpZXMgKDxzdHJvbmc+dXNl IG9ubHkgYWZ0ZXIgc2F2aW5nIHRoZSBkYXRhIGFib3ZlPC9zdHJvbmc+KScsCgkpOwoJcmV0 dXJuIHN0cnRyKCRsYW5nWyR3aGF0XSwgJGF0dHMpOwp9IjtzOjM6Im1kNSI7czozMjoiNDZh NWUyZTM1NWY1YWIyNmQxOTAzNzUyZGU0NjkyYzAiO30=