# Name: ied_plugin_composer v0.72 # Type: Admin/Client side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://inspired.kiev.ua # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjc6InZlcnNp b24iO3M6NDoiMC43MiI7czo2OiJhdXRob3IiO3M6NDM6Ill1cmEgTGlubnlrIC8gU3RlZiBE YXdzb24gLyBTdGV2ZSBEaWNraW5zb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjM6Imh0dHA6 Ly9pbnNwaXJlZC5raWV2LnVhIjtzOjExOiJkZXNjcmlwdGlvbiI7czozMjoiV3JpdGUgYW5k IHB1Ymxpc2ggcGx1Z2lucyBlYXNpbHkiO3M6NDoidHlwZSI7czoxOiIxIjtzOjQ6ImhlbHAi O3M6MTIxMzY6Igk8cD48ZGl2IGlkPSJpZWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5J bnNwaXJlZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxwPlRoaXMgcGx1Z2luIGNyZWF0ZXMg YSBuZXcgcGFnZSB1bmRlciB0aGUgJiM4MjE2O0V4dGVuc2lvbnMmIzgyMTc7IHRhYiB3aGVy ZSB5b3UgY2FuIGVkaXQgcGx1Z2lucyB0aGF0IGFyZSBhbHJlYWR5IGluc3RhbGxlZCBpbiBU ZXh0UGF0dGVybiBhbmQgcmVnaXN0ZXIgbmV3IHBsdWdpbnMuPC9wPgoKCTxoMiBpZD0iZmVh dHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkNyZWF0ZSwgZWRpdCBvciB1cGxv YWQgcGx1Z2luIGNvZGUgYW5kIGhlbHAsIHRoZW4gcHVibGlzaCB0aGUgcmVzdWx0IGluIHRo ZSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBwbHVnaW4gZm9ybWF0 PC9saT4KCQk8bGk+RnVsbCBzdXBwb3J0IGZvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVtcGxhdGUudHh0Ij56ZW1fdHBs LnBocCBwbHVnaW4gdGVtcGxhdGU8L2E+LiBUaGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdz b24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVtcGxhdGVfY29kZV9maXJzdC50eHQi PmxhdGVzdCByZXZpc2lvbjwvYT4gYnkgPGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5l dGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1Z2luLWNvbXBpbGVyIj5uZXQtY2Fy dmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIxNjtzdHlsZSYjODIxNzsgc2VjdGlv biBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0ZXh0LiBUaGUgUGx1Z2luIENvbXBv c2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBzZWN0aW9ucyBp biB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0gYWNjb3JkaW5nbHk8L2xpPgoJCTxs aT5FeHBvcnQgYSBwbHVnaW4gYXMgZWl0aGVyIGEgc3RhbmRhcmQgQkFTRTY0LWVuY29kZWQg cGx1Z2luIChub3cgaW4gc3RhbmRhcmQgNzItY2hhciBjaHVuayBtb2RlKSBvciBhcyBhIGd6 aXBwZWQgdmVyc2lvbiBvZiB0aGUgYWJvdmUgKHVzZWZ1bCBmb3IgbGFyZ2UgcGx1Z2lucykg b3IgYXMgYSBwaHAgZmlsZSBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LiBUaGlz IG1lYW5zIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNv bXBvc2VyIG9yIHlvdXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmls ZSBpbiB0aGUgcGx1Z2luX2NhY2hlX2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIENvbXBv c2VyIGFuZCBwdWJsaXNoIHlvdXIgcGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUg Ym90dG9tIG9mIHRoZSBQbHVnaW4gQ29tcG9zZXImIzgyMTc7cyA8YSBocmVmPSIjZWRpdHBh Z2UiPkVkaXQgcGFnZTwvYT4gZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVtYmVyIHRvIHNh dmUgeW91ciBjaGFuZ2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9wYXN0aW5nIHRo ZSBjb2RlITwvbGk+CgkJPGxpPldoZW4gZXhwb3J0aW5nLCBmaWxlcyBjYW4gYmUgc2F2ZWQg d2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sgZmlyc3Qgb3IgdGhlIGhlbHAgYmxvY2sgZmly c3QuIFVzZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+U2V0dXAgYnV0dG9uPC9hPiB0byBj b25maWd1cmU8L2xpPgoJCTxsaT5TdXBwb3J0IGZvciBDbGllbnQsIEFkbWluLCBhbmQgTGli cmFyeSB0eXBlIHBsdWdpbnM8L2xpPgoJCTxsaT5IZWxwIHRleHQgY2FuIGJlIHdyaXR0ZW4g aW4gVGV4dGlsZSBvciAoWClIVE1MLiBTdHlsZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBoZWxw IHNlY3Rpb248L2xpPgoJCTxsaT5UYWtlIGFkdmFudGFnZSBvZiB0aGUgPGEgaHJlZj0iaHR0 cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTEzMDg5Ij5UaW55 TUNFIDxzcGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBlZGl0b3I8L2E+IGZvciB0 aGUgaGVscCBzZWN0aW9uIG9yIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJv amVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTE2NDAwOCI+RWRpdCBBcmVhPC9hPiBmb3Ig Y29kZSBtYXJrdXAgKHRoYW5rcyB2YXJpYWFzKS4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBw YWdlIj5zZXR1cDwvYT4gYW5kIDxhIGhyZWY9IiNub3RlcyI+bm90ZXM8L2E+IHNlY3Rpb25z IGZvciBtb3JlIG9uIHRoZXNlIGVkaXRvcnM8L2xpPgoJCTxsaT5CdWlsdC1pbiBUZXh0aWxl IGhlbHAgdmlld2VyICh0aGFua3MgdG8gbmV0LWNhcnZlciYjODIxNztzIDxhIGhyZWY9Imh0 dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9wbHVnaW5zL3BsdWdpbi1oZWxwLXZp ZXdlciI+UGx1Z2luIEhlbHAgVmlld2VyPC9hPikgdG8gYWxsb3cgeW91IHRvIHByZXZpZXcg eW91ciBIZWxwIHRleHQgZHVyaW5nIGRldmVsb3BtZW50ICh0aGUgdHdvIHZpZXdlcnMgd2ls bCBoYXBwaWx5IGNvLWV4aXN0IGlmIHlvdSB3aXNoKTwvbGk+CgkJPGxpPlJlc2l6YWJsZSB0 ZXh0YXJlYTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9ycyI+QXV0aG9yczwvaDI+CgoJ PHA+T3JpZ2luYWwgcGx1Z2luOiA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS9m ZWVkYmFjay8iPll1cmEgTGlubnlrPC9hPjxiciAvPgpNb2RpZmljYXRpb25zICh2MC41Kyk6 IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdz b248L2E+PGJyIC8+CkEgdG91Y2ggb2YgY2xhc3M6IDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1 Z2lucy5uZXRjYXJ2aW5nLmNvbS9jb250YWN0Ij5TdGV2ZSBEaWNraW5zb248L2E+PC9wPgoK CTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoK CTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gKHYwLjUgYW5kIGFib3ZlKSBmcm9tIDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c3RlZmRhd3Nvbi5jb208L2E+IChwcmV2aW91 cyB2ZXJzaW9ucyBhcmUgc3RpbGwgYXZhaWxhYmxlIG9uIHRoZSA8YSBocmVmPSJodHRwOi8v aW5zcGlyZWQua2lldi51YS90eHAvaWVkX3BsdWdpbl9jb21wb3NlciI+SW5zcGlyZWQgaG9t ZXBhZ2U8L2E+KSwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gQWRtaW4gLSYjNjI7IFBsdWdpbnMgcGFnZSwgaW5zdGFsbCBhbmQgZW5h YmxlIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlZpc2l0IHRoZSBFeHRlbnNpb25zIC0mIzYyOyBQ bHVnaW4gQ29tcG9zZXIgdGFiIGFuZCBjbGljayB0aGUgU2V0dXAgYnV0dG9uIGluIHRoZSB0 b3AtcmlnaHQgb2YgdGhlIHNjcmVlbi4gRnJvbSBoZXJlIHlvdSBjYW4gSW5zdGFsbCwgRGVs ZXRlIGFuZCBTYXZlIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuIFNlZSB0aGUgPGEgaHJlZj0i I3NldHVwcGFnZSI+c2V0dXAgc2VjdGlvbjwvYT4gZm9yIGRldGFpbHMuPC9wPgoKCTxwPlRv IHJlbW92ZSB0aGUgUGx1Z2luIENvbXBvc2VyIChub29vbyEpIHZpc2l0IHRoZSBTZXR1cCBw YWdlIGFnYWluIGZyb20gdGhlIFBsdWdpbiBDb21wb3NlciB0YWIsIGhpdCBEZWxldGUgdG8g cmVtb3ZlIHRoZSBwcmVmZXJlbmNlcywgdGhlbiBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW4g YXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0mIzYyOyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxo MiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8aDMgaWQ9Imxpc3RwYWdlIj5MaXN0IHBhZ2U8 L2gzPgoKCTxwPkFsbCBpbnN0YWxsZWQgcGx1Z2lucyBhcmUgbGlzdGVkIG9uIHRoZSBQbHVn aW4gQ29tcG9zZXIgcGFnZS4gVGhleSBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCwgZGVsZXRl ZCwgcHVibGlzaGVkIG9yIGVkaXRlZCBmcm9tIGhlcmUuIFRoZSBoZWxwIGNhbiBhbHNvIGJl IHZpZXdlZCBmcm9tIHRoaXMgcGFnZSwgb3Igd2hpbGUgZWRpdGluZyBhIHBsdWdpbiBieSB1 c2luZyB0aGUgbGluayBuZXh0IHRvIHRoZSB0b3Btb3N0IFNhdmUgYnV0dG9uIG9uIHRoZSA8 YSBocmVmPSIjZWRpdHBhZ2UiPmVkaXQgcGFnZTwvYT4uPC9wPgoKCTxwPklmIHlvdSBhcmUg dXNpbmcgdGhlIHBsdWdpbl9jYWNoZV9kaXIgKEFkbWluIC0mIzYyOyBBZHZhbmNlZCBQcmVm cyksIGFueSBwbHVnaW5zIGluIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v ZG93bmxvYWRzL2V4YW1wbGVfcGx1Z2luX3RlbXBsYXRlLnR4dCI+c3RhbmRhcmQgdGVtcGxh dGUgZm9ybWF0PC9hPiB1cGxvYWRlZCB0byB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIGF2YWls YWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBhbmQgdGVzdGluZy4gSW4gYWRkaXRpb24s IHRoZXNlIHBsdWdpbnMgYmVuZWZpdCBmcm9tIGJlaW5nICYjODIyMDthbHdheXMgb24mIzgy MjE7OyBubyBuZWVkIHRvIGluc3RhbGwgdGhlbS48L3A+CgoJPHA+VGhlcmUgYXJlIHR3byB3 YXlzIG9mIGNyZWF0aW5nIHBsdWdpbnMgZnJvbSB0aGUgUGx1Z2luIENvbXBvc2VyIGxpc3Qg cGFnZS4gVGhlIGZpcnN0IGlzIHRvIGNyZWF0ZSBhIGJsYW5rLCBlbXB0eSBwbHVnaW4uIFVz ZSB0aGUgdGV4dCBib3ggYXQgdGhlIHRvcCBmb3IgdGhpcy4gVGhlIHNlY29uZCBpcyB0byB1 cGxvYWQgb25lIHVzaW5nIHRoZSBCcm93c2UvdXBsb2FkIGJveCBhdCB0aGUgYm90dG9tLiBZ b3UgY2FuIHVwbG9hZCBjb2RlIGluIGVpdGhlciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUg Zm9ybWF0IChlaXRoZXIgY29kZS1maXJzdCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRo IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2Fk IGEgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUg b25seS48L3A+CgoJPGgzIGlkPSJlZGl0cGFnZSI+RWRpdCBwYWdlPC9oMz4KCgk8cD5PbiB0 aGUgRWRpdCBwYWdlLCBjb2RlIGdvZXMgaW4gdGhlICYjODIxNjtQbHVnaW4mIzgyMTc7IGJv eCwgaGVscCBnb2VzIGluIHRoZSAmIzgyMTY7UGx1Z2luIGhlbHAmIzgyMTc7IGJveCwgc3R5 bGluZyBnb2VzIGluIHRoZSAmIzgyMTY7U3R5bGUmIzgyMTc7IGJveCEgU3R5bGVzIGFyZSA8 ZW0+bm90PC9lbT4gcGFzc2VkIHRocm91Z2ggdGhlIFRleHRpbGUgbWFuZ2xlIGFuZCBpZiB5 b3UgZm9yZ2V0IChvciBkb24mIzgyMTc7dCBhZGQpIHRoZSA8Y29kZT4mIzYwO3N0eWxlJiM2 Mjs8L2NvZGU+IHRhZ3MsIHRoZSBDb21wb3NlciB3aWxsIGFkZCB0aGVtIGZvciB5b3UuIFRo ZSBwbHVnaW4gY29kZSBib3ggaXMgdmVydGljYWxseSByZXNpemFibGU7IGdyYWIgdGhlIG1h cmtlciBiZW5lYXRoIHRoZSBib3ggYW5kIGRyYWcgdG8gc2V0LiBUaGUgY3VycmVudCBwb3Np dGlvbiBpcyByZXRhaW5lZCBhcyBhIGNvb2tpZSBzbyB0aGUgYm94IHdpbGwgYWx3YXlzIHJl c2l6ZSB3aGVuIHRoZSBlZGl0IHBhZ2UgaXMgZGlzcGxheWVkLjwvcD4KCgk8cD5GaWxsIGlu IHRoZSBvdGhlciBmaWVsZHMgd2l0aCByZWxldmFudCBkZXRhaWxzIGFib3V0IHlvdXJzZWxm IGFuZCB5b3VyIHBsdWdpbiBhbmQgeW91JiM4MjE3O3JlIGdvb2QgdG8gZ28uIENob29zZSBm cm9tIGVpdGhlciBDbGllbnQtc2lkZSBvbmx5LCBBZG1pbi1zaWRlICh3aGljaCBpbmNsdWRl cyBjbGllbnQgc2lkZSBieSBkZWZhdWx0KSBvciBMaWJyYXJ5IHBsdWdpbiB0eXBlcy4gQSB3 YXJuaW5nIGlzIGlzc3VlZCBpZiB5b3Ugc2F2ZSBhIENsaWVudCBwbHVnaW4gdGhhdCB1c2Vz IEFkbWluLXNpZGUgY29kZSAodGhhbmtzIG5ldC1jYXJ2ZXIpLjwvcD4KCgk8cD5IaXQgU2F2 ZSB0byBzdG9yZSB5b3VyIHBsdWdpbi4gT25jZSB5b3UmIzgyMTc7cmUgaGFwcHkgd2l0aCBp dCwgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGVkaXQgcGFnZSBhbmQgY2hvb3NlIGhv dyB0byBleHBvcnQgaXQuIFRoZSBmaXJzdCBsaW5rIGlzIGZvciBzdGFuZGFyZCBwbHVnaW5z IHdoaWNoIGFyZSBkaXN0cmlidXRlZCB0byBhbGwgdXNlcnM7IHRoZSBzZWNvbmQgaXMgZm9y IGNvbXByZXNzZWQgcGx1Z2lucyAmIzgyMTI7IHVzZSB0aGlzIGlmIHlvdXIgcGx1Z2lucyBh cmUgbGFyZ2UsIG9yIHNpbXBseSBhcyBhbiBhbHRlcm5hdGl2ZSBmb3JtYXQuIEJvdGggdGhl c2Ugb3B0aW9ucyBjb252ZXJ0IHRoZSBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPi4gVGhlIHRoaXJkIGxpbmssIGhvd2V2ZXIsIGRvZXMgbm90IGFuZCBpcyB1c2Vk IHRvIGV4cG9ydCB0aGUgcGx1Z2luIGJhY2sgb3V0IGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0 ZSBmb3JtYXQgdG8gcGVyaGFwcyBnaXZlIHRvIGFub3RoZXIgZGV2ZWxvcGVyIGRpcmVjdGx5 LCBvciB0byByZXRhaW4gdGhlIFRleHRpbGUgbWFya3VwIGZvciBmdXR1cmUgdXBkYXRlcy48 L3A+CgoJPHA+WyBOb3RlIHRoYXQgd2hlbiBleHBvcnRpbmcgYXMgYSBzdGFuZGFyZCBwbHVn aW4sIHRoZSBUZXh0aWxlIHByb2Nlc3NvciBhdHRlbXB0cyB0byBkZWNpZGUgaWYgeW91IGhh dmUgdXNlZCBUZXh0aWxlIG9yIG5vdCAoaXQgc2ltcGx5IGxvb2tzIGZvciBhIHRleHRpbGVk ICYjODIxNjtoMSYjODIxNzspLiBSdW5uaW5nIHB1cmUgPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IHRocm91Z2ggdGV4dGlsZSBtYXkgb2NjYXNpb25hbGx5IGNhdXNlIGVuY29k aW5nIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIGNoYXJhY3RlciBzZXQgdXNl ZCAmIzgyMTI7IGhhdmVuJiM4MjE3O3QgdHJhY2tlZCBkb3duIHRoZSBjaXJjdW1zdGFuY2Vz IHVuZGVyIHdoaWNoIGl0IGhhcHBlbnMgeWV0IF08L3A+CgoJPHA+WW91IGNhbiBhbHNvIGV4 cG9ydCBwbHVnaW5zIGZyb20gdGhlIG1haW4gUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZS4g VGhlIFB1Ymxpc2ggY29sdW1uIGhhcyB0d28gZW50cmllcyBpbiBpdDogJiM4MjE2O3B1Ymxp c2gmIzgyMTc7IHRvIHByb2R1Y2UgYSBzdGFuZGFyZCBwbHVnaW47IG9yICYjODIxNjt6aXAm IzgyMTc7IHRvIGdlbmVyYXRlIGEgY29tcHJlc3NlZCB2ZXJzaW9uLjwvcD4KCgk8aDMgaWQ9 InNldHVwcGFnZSI+U2V0dXAgcGFnZTwvaDM+CgoJPHA+Q2xpY2tpbmcgU2V0dXAgZnJvbSB0 aGUgbWFpbiBsaXN0IHNjcmVlbiBhbGxvd3MgYWNjZXNzIHRvIHRoZSBwbHVnaW4gcHJlZmVy ZW5jZXMuPC9wPgoKCTxwPllvdSBjYW4gSW5zdGFsbCB0aGVtICYjODIxMjsgd2hpY2ggcmV0 YWlucyBhbnkgcHJldmlvdXMgc2V0dGluZ3MgYW5kIGFkZHMgbmV3IG9uZXMgd2hlbiB1cGRh dGluZyB0aGUgcGx1Z2luICYjODIxMjsgb3IgRGVsZXRlIHRoZW0uIFRoZSBwbHVnaW4gY2hl Y2tzIGlmIGFsbCByZXF1aXJlZCBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxlIGFuZCBvZmZl cnMgeW91IHRoZSBjaG9pY2Ugb2YgZGVsZXRpbmcvcmVpbnN0YWxsaW5nIGluIGNhc2UgdGhl IHByZWZzIGJlY29tZSBjb3JydXB0ZWQgb3IgbmVlZCB1cGRhdGluZy48L3A+CgoJPHA+T25j ZSB0aGUgcHJlZnMgYXJlIGluc3RhbGxlZCB5b3Ugd2lsbCBzZWUgdGhlIGF2YWlsYWJsZSBv cHRpb25zLiBUaGUgd2lkdGggb2YgdGhlIHRleHRhcmVhcyBvbiB0aGUgPGEgaHJlZj0iI2Vk aXRwYWdlIj5lZGl0IHBhZ2U8L2E+IGFyZSBjdXN0b21pc2FibGUgdG8gYWNjb21tb2RhdGUg eW91ciBzY3JlZW4gcmVzb2x1dGlvbi4gRW50ZXIgYSBudW1iZXIgdG8gc2V0IHRoZSB3aWR0 aCBpbiBjaGFyYWN0ZXJzIG9mIHRoZSBlZGl0IGJveGVzLjwvcD4KCgk8cD5Zb3UgbWF5IGNo b29zZSB0byBlZGl0IHRoZSBjb2RlIHVzaW5nIGEgM3JkIHBhcnR5IGNvZGUgc3ludGF4IGhp Z2hsaWdodGVyLiBDdXJyZW50IHN1cHBvcnQgaXMgZm9yIEVkaXQgQXJlYSBhbmQgKHNvcnQg b2YpIENvZGVQcmVzcyAmIzgyMTI7IHNlZSB0aGUgPGEgaHJlZj0iI25vdGVzIj5ub3Rlczwv YT4uPC9wPgoKCTxwPklmIHlvdSB3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9mIEVkaXQgQXJl YSwgZ3JhYiBpdCBmcm9tIHNvdXJjZWZvcmdlLCBpbnN0YWxsIGl0LCBzZWxlY3QgJiM4MjE2 O0VkaXQgQXJlYSYjODIxNzsgZnJvbSB0aGUgZHJvcGRvd24gb24gdGhlIFBsdWdpbiBDb21w b3NlciYjODIxNztzIFNldHVwIHBhZ2UgYW5kIGdpdmUgdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHBhdGggdG8gdGhlIGluc3RhbGxhdGlvbiBvbiB5b3VyIHNlcnZlcjsg dGhpcyBpcyBub3JtYWxseSBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgL2VkaXRf YXJlYS4gTm8gdHJhaWxpbmcgc2xhc2ggaXMgcmVxdWlyZWQuIFNpbWlsYXJseSBmb3IgQ29k ZVByZXNzLjwvcD4KCgk8cD5Gb3IgdGhlIGhlbHAgc3lzdGVtIHlvdSBjYW4gdXNlIFRleHRp bGUgdGFncyAocmVjb21tZW5kZWQpIG9yIGNob29zZSBUaW55TUNFLiA8ZW0+Tm90ZSB0aGF0 IFRpbnlNQ0UgaXMgbm90IGZ1bGx5IGludGVncmF0ZWQgeWV0IHNvIDxzcGFuIGNsYXNzPSJj YXBzIj5ZTU1WPC9zcGFuPjwvZW0+LjwvcD4KCgk8aDMgaWQ9Im5vdGVzIj5Ob3RlczwvaDM+ CgoJPHA+TW9yZSBlZGl0b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIENvbXBvc2Vy IGZhaXJseSBlYXNpbHkuIElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBpbiBjb250YWN0 LjwvcD4KCgk8cD5UZW50YXRpdmUgc3VwcG9ydCBmb3IgQ29kZVByZXNzIGlzIGFscmVhZHkg aW4gdGhlcmUgYnV0IEkgZm91bmQgaXQgaW5leHBsaWNhYmx5IGJsYW5rZWQgb3V0IHRoZSBw bHVnaW4gY29kZSB3aGVuIGl0IHdhcyBzYXZlZCBzbyBJJiM4MjE3O3ZlIGNvbW1lbnRlZCBv dXQgc3VwcG9ydCBmb3Igbm93LiBJZiBhbnlvbmUgY2FuIHNoZWQgYW55IGxpZ2h0IG9uIHdo eSBpdCBkb2VzIHRoaXMsIHBsZWFzZSBzcGVhayB1cCEgVW5jb21tZW50IHRoZSBjb2RlIG9u IGxpbmUgODQxIGFuZCBjb21tZW50IG91dCBsaW5lIDg0MiB0byBlbmFibGUgc3VwcG9ydCwg dGhlbiB2aXNpdCB0aGUgU2V0dXAgcGFnZSBhbmQgc2VsZWN0IENvZGVQcmVzcyBmcm9tIHRo ZSBsaXN0LiBEb24mIzgyMTc7dCBleHBlcmltZW50IHdpdGggdGhpcyBzZXR0aW5nIG9uIGFu IGltcG9ydGFudCBwbHVnaW4gOi0pPC9wPgoKCTxoMyBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vs b2c8L2gzPgoKCTx1bD4KCQk8bGk+MjUgRmViIDA2IHwgMC4xIHwgSW5pdGlhbCByZWxlYXNl PC9saT4KCQk8bGk+MjUgRmViIDA2IHwgMC4yIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMmIzgy MTc7IG9wdGlvbjwvbGk+CgkJPGxpPjE3IE1hciAwNiB8IDAuMyB8IEFkZGVkICYjODIxNjtz YXZlIGFzIHBocCYjODIxNzs8L2xpPgoJCTxsaT4xMCBBcHIgMDYgfCAwLjQgfCBBZGRlZCBz dXBwb3J0IGZvciBwbHVnaW5fY2FjaGVfZGlyPC9saT4KCQk8bGk+MDQgSmFuIDA4IHwgMC41 IHwgRnVsbCBzdXBwb3J0IGZvciBzdGQgdGVtcGxhdGU7IGNvbXByZXNzZWQgcGx1Z2luczsg TGlicmFyeSBwbHVnaW5zOyBUZXh0aWxlIGhlbHAgYW5kIHN0eWxpbmc7IGludGVncmF0aW9u IHdpdGggbmV0LWNhcnZlciYjODIxNztzIFBsdWdpbiBIZWxwIFZpZXdlcjwvbGk+CgkJPGxp PjA3IEphbiAwOCB8IDAuNiB8IEJ1aWx0LWluIGhlbHAgdmlld2VyICh0aGFua3MgbmV0LWNh cnZlcik7IHN1cHBvcnQgZm9yIEVkaXQgQXJlYSAmIzM4OyBDb2RlUHJlc3MoaXNoKSAodGhh bmtzIHZhcmlhYXMpOyBIZWxwIGJsb2NrL0NvZGUgYmxvY2sgcG9zaXRpb24gc3dpdGNoYWJs ZSBvbiBleHBvcnQ7IGFkZGVkIFNldHVwIHByZWZzIHBhZ2U7IGxpbmUgYnJlYWsvc3R5bGUg YnVnZml4ZXM8L2xpPgoJCTxsaT4wOCBKYW4gMDggfCAwLjcgfCBSZS1pbXBvcnRpbmcgcGx1 Z2lucyBub3cgcmV0YWlucyBzdHlsZSBibG9jazsgYWRkZWQgJiM4MjE2O2FkbWluIHNpZGUg cGx1Z2luIHdpdGggY2xpZW50LXNpZGUgdHlwZSYjODIxNzsgd2FybmluZzsgY2hhbmdlZCBi dXR0b24gc3R5bGluZyBhbmQgcG9zaXRpb25zIChhbGwgdGhhbmtzIG5ldC1jYXJ2ZXIpOyBn VHh0KCkgcHJlZiBsYWJlbHMgYW5kICYjODIxNjtpbnRlbGxpZ2VudCYjODIxNzsgcHJlZnMg KGdvIGpRdWVyeSBnbyEpOyBjYWNoZWQgcGx1Z2lucyBub3cgYWxzbyBoYXZlIGRpcmVjdCBl eHBvcnQgZnJvbSBFZGl0IHBhZ2U7ICYjODIxNjtkb24mIzgyMTc7dCB0ZXh0aWxlIDxzcGFu IGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiYjODIxNzsgY2hlY2s7IG1pbm9yIGJ1Z2ZpeGVz PC9saT4KCQk8bGk+MDkgSmFuIDA4IHwgMC43MSB8IFRleHRhcmVhIHdpZHRoIGNhbiBub3cg YmUgY29udHJvbGxlZCBmcm9tIHByZWZzLCBhbmQgaGVpZ2h0IGZyb20gYSBkcmFnIGJhcjsg ZGVmYXVsdCB3aWR0aCBpbmNyZWFzZWQgdG8gMTEwIGNoYXJzOyBwdWJsaXNoIHBsdWdpbnMg ZnJvbSB0aGUgbGlzdCBwYWdlOyBJbnN0YWxsIGJ1dHRvbiByZW1vdmVkIHdoZW4gcHJlZnMg YWxsIGNvcnJlY3RseSBpbnN0YWxsZWQgKGFsbCB0aGFua3MgdmFyaWFhcyAvIGlibGFzdG9m Zik8L2xpPgoJCTxsaT4xMCBKYW4gMDggfCAwLjcyIHwgRml4ZWQgYnVnIGlmIHBsdWdpbiBo YXMgbm8gaGVscDsgc3R5bGUgc2VjdGlvbiBubyBsb25nZXIgc3RvcmVkL2V4cG9ydGVkIGlm IGl0JiM4MjE3O3Mgbm90IGluIHVzZSAodGhhbmtzIHRoZV9naG9zdCAvIGlibGFzdG9mZik8 L2xpPgoJPC91bD4KCgk8aDIgaWQ9IndyaXRpbmciPldyaXRpbmcgYSBwbHVnaW48L2gyPgoK CTxwPllvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD05ODgxIj5QbHVnaW4gQXV0aG9yIFJl c291cmNlczwvYT4gdG9waWMgb24gdGhlIFRleHRwYXR0ZXJuIFN1cHBvcnQgRm9ydW0sIGFu ZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rIGF0IHRoZSA8YSBocmVmPSJo dHRwOi8vaW5zcGlyZWQua2lldi51YS90eHAtcGx1Z2luLWNoZWF0c2hlZXQiPlRleHRQYXR0 ZXJuIHBsdWdpbiBjaGVhdCBzaGVldDwvYT4uPC9wPgoKCTxwPkhhcHB5IHBsdWdpbiBhdXRo b3JpbmcgOi0pPC9wPgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lOIENT UyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNpZWRfaGVscCB7IGxpbmUtaGVp Z2h0OjEuNSA7fQojaWVkX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEw NSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQt Y29sb3I6ICNGRkZGQ0M7fQojaWVkX2hlbHAgY29kZS5zZWRfY29kZV90YWcgeyBmb250LXdl aWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29sb3I6 ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGlu ZzoxMHB4OyB9CiNpZWRfaGVscCBhOmxpbmssICNpZWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xv cjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAxcHggc29s aWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI2llZF9oZWxwIGE6aG92ZXIsICNpZWRf aGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJv cmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojaWVk X2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlm OyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojaWVkX2hlbHAgaDIgeyBib3Jk ZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAj MzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI2llZF9oZWxwIGgzIHsg Y29sb3I6ICMxMDgwMzA7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0 dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxNXB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBw ZXJjYXNlO30KPC9zdHlsZT4KPCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoiO3M6 MzoiY3NzIjtzOjkyNToiPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI2llZF9oZWxwIHsgbGlu ZS1oZWlnaHQ6MS41IDt9CiNpZWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9u dDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dy b3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNpZWRfaGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZv bnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1j b2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBw YWRkaW5nOjEwcHg7IH0KI2llZF9oZWxwIGE6bGluaywgI2llZF9oZWxwIGE6dmlzaXRlZCB7 IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgYTpob3Zlciwg I2llZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9u ZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9 CiNpZWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNpZWRfaGVscCBoMiB7 IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29s b3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojaWVkX2hlbHAg aDMgeyBjb2xvcjogIzEwODAzMDsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlm OyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAwO3RleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7fQo8L3N0eWxlPiI7czo0OiJjb2RlIjtzOjM3NTQxOiJpZihAdHhwaW50 ZXJmYWNlID09ICdhZG1pbicpIHsKCWFkZF9wcml2cygnaWVkX3BsdWdpbl9jb21wb3Nlcics JzEsMicpOwoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ2llZF9wbHVnaW5fY29tcG9z ZXInLCAiUGx1Z2luIENvbXBvc2VyIik7CglyZWdpc3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdp bl9jb21wb3NlcicsICdpZWRfcGx1Z2luX2NvbXBvc2VyJyk7CglnbG9iYWwgJGllZF9wbHVn aW5fY29tcG9zZXIsICRpZWRfcGx1Z2luX3ByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJ JGllZF9wbHVnaW5fZ2xvYmFscyA9IGFycmF5KAoJCSdjc3Nfc3RhcnQnID0+ICc8IS0tJywK CQknY3NzX2VuZCcgPT4gJy0tPicsCgkJJ2RsbV9zdGFydCcgPT4gJyMnLAoJCSdkbG1fZW5k JyA9PiAnJywKCQknc3RhcnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0tLScs CgkJJ2VuZCcgPT4gJyAtLS0gRU5EIFBMVUdJTiBTRUNUSU9OIC0tLScsCgkpOwoJLy8gRG91 YmxlIGFycmF5OiAxc3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWlyIGRl ZmF1bHRzLAoJLy8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMgdGhhdCBtYXkgbmVl ZCByZW1vdmluZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1wdHkpCgkkaWVkX3Bs dWdpbl9wcmVmcyA9IGFycmF5KAoJCWFycmF5KAoJCQknaWVkX3BsdWdpbl9lZGl0b3InID0+ ICdub25lJywKCQkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+IGh1LidqcycuRFMsCgkJ CSdpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJzExMCcsCgkJCSdpZWRfcGx1Z2luX2hl bHBfZWRpdG9yJyA9PiAndGV4dGlsZScsCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3Bh dGgnID0+IGh1LidqcycuRFMsCgkJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJzAn LAoJCSksCgkJYXJyYXkoCgkJCSdpZWRfcGx1Z2luX25vdF91c2VkX2FueV9tb3JlX3Rlc3Rl cicgPT4gJycsCgkJKQoJKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2Nv bXBvc2VyICgkZXZlbnQsICRzdGVwKSB7CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRzdGVw LCBhcnJheSgnaWVkX3BsdWdpbl9kZWxldGUnLAoJCQknaWVkX3BsdWdpbl9lZGl0JywKCQkJ J2llZF9wbHVnaW5faGVscCcsCgkJCSdpZWRfcGx1Z2luX2xpc3QnLAoJCQknaWVkX3BsdWdp bl9pbnN0YWxsJywKCQkJJ2llZF9wbHVnaW5fc2F2ZScsCgkJCSdpZWRfcGx1Z2luX3NhdmVf ZmlsZScsCgkJCSdpZWRfcGx1Z2luX3ZlcmlmeScsCgkJCSdpZWRfc3dpdGNoX3N0YXR1cycs CgkJCSdpZWRfcGx1Z2luX3NldHVwJywKCQkJJ2llZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCcs CgkJCSdpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZScsCgkJCSdpZWRfcGx1Z2luX3ByZWZzX3Vw ZGF0ZScsCgkJCSdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnLAoJCQknaWVkX3BsdWdpbl9zYXZl X2FzX2ZpbGUnLAoJCQknaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlJywKCQkJJ2llZF9w bHVnaW5fdXBsb2FkJywKCQkJJ2llZF9wbHVnaW5faGVscF92aWV3ZXInLAoJCSkpKSB7CgkJ aWVkX3BsdWdpbl9saXN0KCk7Cgl9IGVsc2UgJHN0ZXAoKTsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5j dGlvbiBpZWRfcGx1Z2luX2xpc3QoJG1lc3NhZ2U9JycpIHsKCXBhZ2V0b3AoZ1R4dCgnZWRp dF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJZWNobyBzdGFydFRhYmxlKCdsaXN0JykuCnRyKHRk YSgKZm9ybSgKZklucHV0KCd0ZXh0JywnbmFtZScsJycsJycsJycsJycsJzMwJywnMCcpCi4g ZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLCdjcmVhdGUgbmV3IHBsdWdpbicsJ3NtYWxsZXJi b3gnKQouIHNJbnB1dCgnaWVkX3BsdWdpbl9jcmVhdGVfbmV3JykKLiBlSW5wdXQoJ2llZF9w bHVnaW5fY29tcG9zZXInKQopCiwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDtoZWln aHQ6NTBweCInKQoudGRhKGZvcm0oZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgJ1NldHVw JywgJ3B1Ymxpc2gnKS5zSW5wdXQoJ2llZF9wbHVnaW5fc2V0dXAnKS5lSW5wdXQoJ2llZF9w bHVnaW5fY29tcG9zZXInKSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0 OjUwcHgiJykpLgphc3NIZWFkKCdwbHVnaW4nLCdhdXRob3InLCd2ZXJzaW9uJywnZGVzY3Jp cHRpb24nLCdtYW5hZ2UnLCdwdWJsaXNoJywgJ2FjdGl2ZScsJycpOwoKCSRycyA9IHNhZmVf cm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAiMT0xIG9yZGVyIGJ5IG5hbWUiKTsKCgl3 aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQlleHRyYWN0KCRhKTsKCQkkZWxpbmsgPSAn PGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdp bl9lZGl0JiMzODtuYW1lPScuJG5hbWUuJyI+Jy5nVHh0KCdlZGl0JykuJzwvYT4nOwoJCSRo bGluayA9ICgkaGVscCkgPyAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7bmFtZT0nLiRuYW1lLiciPicu Z1R4dCgnaGVscCcpLic8L2E+JyA6ICdOb25lJzsKCQkkcHVidGFnID0gdGFnKGdUeHQoJ3B1 Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3Rl cD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLiciIHRpdGxlPSJl eHBvcnQgYXMgJyAuICRuYW1lLidfdicuJHZlcnNpb24uICcudHh0IicpOwoJCSRwdWJ6dGFn ID0gdGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21wcmVzcycpLCdhJywnIGhy ZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2 ZV9hc19maWxlJiMzODtuYW1lPScuJG5hbWUuJyYjMzg7emlwPXRydWUiIHRpdGxlPSJleHBv cnQgYXMgJyAuICRuYW1lLidfdicuJHZlcnNpb24uICdfemlwLnR4dCInKTsKCgkJZWNobyB0 cih0ZCgkbmFtZSkKLnRkKCc8YSBocmVmPSInLiRhdXRob3JfdXJpLiciPicuJGF1dGhvci4n PC9hPicsMTYwKQoudGQoJHZlcnNpb24sMTApCi50ZCgkZGVzY3JpcHRpb24sMjYwKQoudGQo JGVsaW5rIC4nIHwgJy4gJGhsaW5rKQoudGQoJHB1YnRhZyAuJyB8ICcuICRwdWJ6dGFnKQou dGQoaWVkX3N0YXR1c19saW5rKCRzdGF0dXMsJG5hbWUseWVzX25vKCRzdGF0dXMpKSwzMCkK LnRkKGRMaW5rKCdpZWRfcGx1Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9kZWxldGUnLCdu YW1lJywkbmFtZSksMzApCik7CgkJdW5zZXQoJG5hbWUsJHBhZ2UsJGRlbGV0ZWxpbmspOwoJ fQoKCWlmICghZW1wdHkoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXSkp IHsKCQkkZmlsZW5hbWVzID0gYXJyYXkoKTsKCQkkZGlyID0gZGlyKCRHTE9CQUxTWydwcmVm cyddWydwbHVnaW5fY2FjaGVfZGlyJ10pOwoJCXdoaWxlICgkZmlsZSA9ICRkaXItPnJlYWQo KSkgewoJCQlpZigkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewoJCQkJJGZpbGVh ZGRyID0gJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZTsK CQkJCWlmICghaXNfZGlyKCRmaWxlYWRkcikpIHsKCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7 CgkJCQl9CgkJCX0KCQl9CgkJJGRpci0+Y2xvc2UoKTsKCQkoJGZpbGVuYW1lcyk/bmF0Y2Fz ZXNvcnQoJGZpbGVuYW1lcyk6Jyc7CgkJZWNobyB0cigKCQl0ZGEoCgkJdGFnKCdQbHVnaW5z IHRoYXQgcnVuIGZyb20gJy50YWcoJ3BsdWdpbl9jYWNoZV9kaXInLCdhY3JvbnltJywnIHRp dGxlPSInLiRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uJyIgc3R5bGU9 ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCBibGFjayInKS4nOicsJ2gxJykKCQksJyBjb2xz cGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjpsZWZ0Iicp CgoJCSk7CgoJCWVjaG8gYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rl c2NyaXB0aW9uJywnbWFuYWdlJywncHVibGlzaCcsJycsJycpOwoJCWZvcmVhY2goJGZpbGVu YW1lcyBhcyAkZmlsZW5hbWUpIHsKCQkJJGVsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRf cGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7ZmlsZW5hbWU9 Jy4kZmlsZW5hbWUuJyI+Jy5nVHh0KCdlZGl0JykuJzwvYT4nOwoKCQkJJGZpbGVleHQ9IGFy cmF5X3BvcChleHBsb2RlICgnLicsJGZpbGVuYW1lKSk7CgkJCWlmICgkZmlsZWV4dD09J3Bo cCcpIHsKCQkJCSRiYXNlbmFtZT1iYXNlbmFtZSgkZmlsZW5hbWUpOwoJCQkJJHBsdWdpbiA9 IGllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVf ZGlyJ10uRFMuJGZpbGVuYW1lKTsKCQkJCSRobGluayA9ICgkcGx1Z2luWydoZWxwJ10pID8g JzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVn aW5faGVscF92aWV3ZXImIzM4O2ZpbGVuYW1lPScuJGZpbGVuYW1lLiciPicuZ1R4dCgnaGVs cCcpLic8L2E+JyA6ICdOb25lJzsKCgkJCQllY2hvIHRyKAoJCQkJdGQoCgkJCQl0YWcoJGZp bGVuYW1lLCdkaXYnLCcgc3R5bGU9ImNvbG9yOmdyYXk7Ym9yZGVyOjBweCBzb2xpZCBncmF5 O3BhZGRpbmc6MXB4IDJweCAycHggMXB4OyInKQoJCQkJLihpc3NldCgkcGx1Z2luWyduYW1l J10pPyRwbHVnaW5bJ25hbWUnXS4nPGJyIC8+JzonJykuJyAnCgkJCQkpCgkJCQkudGQoCgkJ CQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzxhIGhyZWY9IicuJHBsdWdpblsn YXV0aG9yX3VyaSddLiciPic6JycgKSAuCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcidd KT8kcGx1Z2luWydhdXRob3InXTonJm5ic3A7JyApLgoJCQkJKCBpc3NldCgkcGx1Z2luWydh dXRob3JfdXJpJ10pPyc8L2E+JzonJyApLCAxNjAKCQkJCSkKCQkJCS50ZCgoaXNzZXQoJHBs dWdpblsndmVyc2lvbiddKT8kcGx1Z2luWyd2ZXJzaW9uJ106JyZuYnNwOycpLDEwKQoJCQkJ LnRkKChpc3NldCgkcGx1Z2luWydkZXNjcmlwdGlvbiddKT8kcGx1Z2luWydkZXNjcmlwdGlv biddOicmbmJzcDsnKSwyNjApCgkJCQkudGQoJGVsaW5rIC4nIHwgJy4gJGhsaW5rKQoJCQkJ LnRkKChpc3NldCgkcGx1Z2luWyduYW1lJ10pPwoJCQkJdGFnKGdUeHQoJ3B1Ymxpc2gnKSwn YScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyIgdGl0bGU9ImV4 cG9ydCBhcyAnIC4gJHBsdWdpblsnbmFtZSddLidfdicuJHBsdWdpblsndmVyc2lvbiddLiAn LnR4dCInKQoJCQkJCQkuJyB8ICcudGFnKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9j b21wcmVzcycpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtz dGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4n JiMzODt6aXA9dHJ1ZSIgdGl0bGU9ImV4cG9ydCBhcyAnIC4gJHBsdWdpblsnbmFtZSddLidf dicuJHBsdWdpblsndmVyc2lvbiddLiAnX3ppcC50eHQiJyk6CgkJCQl0YWcoJyZuYnNwOycs J3NwYW4nLCcgc3R5bGU9ImNvbG9yOmdyYXkiJykKCQkJCSkpCgkJCQkudGQoJycpCgkJCQku dGQoJycpCgkJCQkpOwoJCQl9CgkJfQoJfQoKCWVjaG8gdHIoCnRkYSgKJzxmb3JtIGVuY3R5 cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRob2Q9InBv c3QiPicuCnN0YXJ0VGFibGUoJ2VkaXQnLCdsZWZ0JykuCnRyKHRkYSggaElucHV0KCdNQVhf RklMRV9TSVpFJywxMDAwMDAwKS4KZ3JhZignVXBsb2FkIHBsdWdpbiBmcm9tIHBocCBmaWxl Jy4nOiAnLgpmSW5wdXQoJ2ZpbGUnLCd0aGVmaWxlJywnJywnZWRpdCcpLgpmSW5wdXQoJ3N1 Ym1pdCcsJ3N1Ym1pdCcsZ1R4dCgndXBsb2FkJyksJ3NtYWxsZXJib3gnKSkuCmVJbnB1dCgn aWVkX3BsdWdpbl9jb21wb3NlcicpLgpzSW5wdXQoJ2llZF9wbHVnaW5fdXBsb2FkJykgLCAn IHN0eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXkiJyApLgp0ZGEoIHRhZygnbmFtZScsJ2Fj cm9ueW0nLCcgdGl0bGU9Im5lZWRlZCBvbmx5IGlmIHRoZSBwaHAgZmlsZSB5b3UgYXJlIHVw bG9hZGluZyBkb2VzIG5vdCBjb250YWluIG1ldGFkYXRhIiBzdHlsZT0iYm9yZGVyLWJvdHRv bToxcHggZGFzaGVkIGJsYWNrIicpLic6ICcuIGZJbnB1dCgndGV4dCcsJ25hbWUnLCd4eHhf eHh4eHh4JywnJywnJywnJywnMzAnLCcwJykgLCAnIHN0eWxlPSJib3JkZXI6MHB4IHNvbGlk IGdyYXk7dmVydGljYWwtYWxpZ246bWlkZGxlOyInICkpLgplbmRUYWJsZSgpLgonPC9mb3Jt PicKLCcgY29sc3Bhbj0iOCIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxp Z246bGVmdCInKQopOwoJZWNobyBlbmRUYWJsZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IGllZF9zdGF0dXNfbGluaygkc3RhdHVzLCRuYW1lLCRsaW5rdGV4dCkgewoJJG91dCA9ICc8 YSBocmVmPSJpbmRleC5waHA/JzsKCSRvdXQgLj0gJ2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3N3aXRjaF9zdGF0dXMmIzM4O3N0YXR1cz0nLgoJJHN0YXR1cy4n JiMzODtuYW1lPScudXJsZW5jb2RlKCRuYW1lKS4nIic7Cgkkb3V0IC49ICc+Jy4kbGlua3Rl eHQuJzwvYT4nOwoJcmV0dXJuICRvdXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3N3 aXRjaF9zdGF0dXMoKSB7CglleHRyYWN0KGdwc2EoYXJyYXkoJ25hbWUnLCdzdGF0dXMnKSkp OwoJJGNoYW5nZSA9ICgkc3RhdHVzKSA/IDAgOiAxOwoJc2FmZV91cGRhdGUoInR4cF9wbHVn aW4iLCAic3RhdHVzPSRjaGFuZ2UiLCAibmFtZT0nJG5hbWUnIik7CglpZWRfcGx1Z2luX2xp c3QobWVzc2VuZ2VyKCdwbHVnaW4nLCRuYW1lLCd1cGRhdGVkJykpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9wbHVnaW5fZGVsZXRlKCkgewoJJG5hbWUgPSBkb1NsYXNoKHBzKCdu YW1lJykpOwoJc2FmZV9kZWxldGUoInR4cF9wbHVnaW4iLCJuYW1lPSckbmFtZSciKTsKCWll ZF9wbHVnaW5fbGlzdChtZXNzZW5nZXIoJ3BsdWdpbicsJG5hbWUsJ2RlbGV0ZWQnKSk7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlPScnKSB7Cgkk c2l0ZV9kaXIgPSBodTsKCSRuYW1lID0gZ3BzKCduZXduYW1lJyk/Z3BzKCduZXduYW1lJyk6 Z3BzKCduYW1lJyk7CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsK CWVjaG8gaWVkX2luc2VydF9lZGl0b3JzKCk7CgllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3Jt KChncHMoJ2ZpbGVuYW1lJykpP2dwcygnZmlsZW5hbWUnKTokbmFtZSwgZ3BzKCdmaWxlbmFt ZScpPyAxOiAwKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXRfZm9y bSgkbmFtZT0nJywkZWRpdGZpbGU9MCkgewoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5f cHJlZnM7CglpZiAoISRlZGl0ZmlsZSkgewoJCSRhdXRob3IgPSAoJG5hbWUpID8gZmV0Y2go J2F1dGhvcicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0aG9yX3Vy aSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9yX3VyaScsJ3R4cF9wbHVnaW4nLCduYW1lJywk bmFtZSkgOiAnJzsKCQkkdmVyc2lvbiA9ICgkbmFtZSkgPyBmZXRjaCgndmVyc2lvbicsJ3R4 cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkZGVzY3JpcHRpb24gPSAoJG5hbWUp ID8gZmV0Y2goJ2Rlc2NyaXB0aW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcn OwoJCSRjb2RlID0gKCRuYW1lKSA/IGZldGNoKCdjb2RlJywndHhwX3BsdWdpbicsJ25hbWUn LCRuYW1lKSA6ICcnOwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3Bs dWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRzdGF0dXMgPSAoJG5hbWUpID8gZmV0Y2go J3N0YXR1cycsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkdHlwZSA9ICgk bmFtZSkgPyBmZXRjaCgndHlwZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsK CQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5r KCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9 IGVsc2UgewoJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJl ZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRuYW1lKTsKCQkkZmlsZW5hbWU9JG5hbWU7 CgkJJGZpbGVleHQ9IGFycmF5X3BvcCgkbmFtZT1leHBsb2RlICgnLicsJG5hbWUpKTsKCQkk bmFtZT1pbXBsb2RlKCRuYW1lKTsKCQlleHRyYWN0ICgkcGx1Z2luKTsgLy8gY29kZSwgaGVs cCwgY3NzLCBuYW1lLCB2ZXJzaW9uLCB0eXBlLCBkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRo b3JfdXJpCgkJJHN0YXR1cz0gKCRmaWxlZXh0PT0ncGhwJyk/IDE6IDA7Cgl9CgkkZWR3aWR0 aCA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pICYmIGlzX251 bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSkgPyAkcHJlZnNbJ2ll ZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3Bs dWdpbl9lZGl0b3Jfd2lkdGgnXTsKCSRwbHVnaW5bJ25hbWUnXSA9ICRuYW1lOwoJJHBsdWdp blsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBsdWdpblsnYXV0aG9yX3VyaSddID0gJGF1dGhv cl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lvbjsKCSRwbHVnaW5bJ2Rlc2Ny aXB0aW9uJ10gPSAkZGVzY3JpcHRpb247CgkkcGx1Z2luWydoZWxwJ10gPSAkaGVscDsKCSRw bHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBsdWdpblsndHlwZSddID0gJHR5cGU7CgkkcGx1 Z2luWydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7CgoJJGRpc3RyaWJ1dGlvbj0n PHRleHRhcmVhIG5hbWU9ImRpc3RyaWJ1dGlvbiIgcm93cz0iMSIgY29scz0iJy4kZWR3aWR0 aC4nIiBvbmNsaWNrPSJ0aGlzLnNlbGVjdCgpIj4nLmJhc2U2NF9lbmNvZGUoc2VyaWFsaXpl KCRwbHVnaW4pKS4nPC90ZXh0YXJlYT4nOwoKCSRuYW1lZExpbmsgPSAoaXNzZXQoJGZpbGVu YW1lKSkgPyAnZmlsZW5hbWU9Jy4kZmlsZW5hbWUgOiAnbmFtZT0nLiRuYW1lOwoJJG5hbWVk RmlsZSA9IChpc3NldCgkZmlsZW5hbWUpKSA/ICRmaWxlbmFtZSA6ICRuYW1lLidfdicuJHZl cnNpb24uJy5waHAnOwoJJG5hbWVkRmlsZU5vRXh0ID0gcHJlZ19yZXBsYWNlKCcvKC4rKVwu LiokLycsICckMScsICRuYW1lZEZpbGUpOwoKCSRzbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9 aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYj Mzg7Jy4kbmFtZWRMaW5rLiciPmV4cG9ydCBhcyAnIC4kbmFtZWRGaWxlTm9FeHQuICcudHh0 PC9hPic7Cgkkc3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4n JiMzODt6aXA9dHJ1ZSI+ZXhwb3J0IGFzICcgLiRuYW1lZEZpbGVOb0V4dC4gJy50eHQgKGNv bXByZXNzZWQpPC9hPic7Cgkkc3BocGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVn aW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlJiMzODsn LiRuYW1lZExpbmsuJyI+c2F2ZSBhcyAnIC4gJG5hbWVkRmlsZS4gJzwvYT4nOwoJJHZoZWxw bGlua2Z1bGwgPSAoJGhlbHApID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4OycuJG5hbWVkTGluay4n Ij5bICcuc3Ryb25nKGdUeHQoJ3ZpZXcnKS4nICcuZ1R4dCgnaGVscCcpKS4nIF08L2E+JyA6 ICcnOwoKCSRuZXduYW1lID1mSW5wdXQoJ3RleHQnLCduZXduYW1lJywkbmFtZSwnZWRpdCcs Jzc4JywnJywkZWR3aWR0aCwnMicpOwoJJGF1dGhvciA9ZklucHV0KCd0ZXh0JywnYXV0aG9y JywkYXV0aG9yLCdlZGl0JywnNzgnLCcnLCRlZHdpZHRoLCcyJyk7CgkkYXV0aG9yX3VyaSA9 ZklucHV0KCd0ZXh0JywnYXV0aG9yX3VyaScsJGF1dGhvcl91cmksJ2VkaXQnLCc3OCcsJycs JGVkd2lkdGgsJzInKTsKCSR2ZXJzaW9uID1mSW5wdXQoJ3RleHQnLCd2ZXJzaW9uJywkdmVy c2lvbiwnZWRpdCcsJzc4JywnJywkZWR3aWR0aCwnMicpOwoJJGRlc2NyaXB0aW9uID1mSW5w dXQoJ3RleHQnLCdkZXNjcmlwdGlvbicsJGRlc2NyaXB0aW9uLCdlZGl0JywnNzgnLCcnLCRl ZHdpZHRoLCcyJyk7CgkkY29kZSA9ICc8dGV4dGFyZWEgbmFtZT0iY29kZSIgaWQ9InBsdWdp bl9lZGl0b3IiIHJvd3M9IjMwIiBjb2xzPSInLiRlZHdpZHRoLiciIGNsYXNzPSJjb2RlcHJl c3MgcGhwIj4nLmh0bWxlbnRpdGllcyh1dGY4X2RlY29kZSgkY29kZSkpLic8L3RleHRhcmVh Pic7CgkkaGVscCA9ICc8dGV4dGFyZWEgbmFtZT0iaGVscCIgcm93cz0iMzAiIGNvbHM9Iicu JGVkd2lkdGguJyIgY2xhc3M9Im1jZUVkaXRvciI+Jy5odG1sZW50aXRpZXModXRmOF9kZWNv ZGUoJGhlbHApKS4nPC90ZXh0YXJlYT4nOwoJJGNzcyA9ICc8dGV4dGFyZWEgbmFtZT0iY3Nz IiByb3dzPSIxNSIgY29scz0iJy4kZWR3aWR0aC4nIj4nLnV0ZjhfZGVjb2RlKCRjc3MpLic8 L3RleHRhcmVhPic7CgkkcHJlZnMgPSAoKCEkZWRpdGZpbGUpP2NoZWNrYm94KCdzdGF0dXMn LDEsJHN0YXR1cykuICcgPGxhYmVsIGZvcj0ic3RhdHVzIj5lbmFibGUgcGx1Z2luPC9sYWJl bD4nOicnKSAuICcgPGxhYmVsIGZvcj0idHlwZSI+JiMxNjA7JiMxNjA7JiMxNjA7UGx1Z2lu IHR5cGU6PC9sYWJlbD4nLiByYWRpbygndHlwZScsMCwoKCR0eXBlPT0wKT8xOjApKS4iQ2xp ZW50ICIgLiByYWRpbygndHlwZScsMSwoKCR0eXBlPT0xKT8xOjApKS4iQWRtaW4gIiAuIHJh ZGlvKCd0eXBlJywyLCgoJHR5cGU9PTIpPzE6MCkpLiJMaWJyYXJ5IjsKCgkkc3ViID0gZklu cHV0KCdzdWJtaXQnLCcnLGdUeHQoJ3NhdmUnKSwncHVibGlzaCcpOwoJcmV0dXJuIGZvcm0o c3RhcnRUYWJsZSgnZWRpdCcpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRz dWIgLiAkdmhlbHBsaW5rZnVsbCkpCgkuICggKGlzc2V0KCRmaWxlbmFtZSkpPyB0ciggZkxh YmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkZmlsZW5hbWUuaElucHV0KCdmaWxlbmFtZScsJGZp bGVuYW1lKSkpIDogJycgKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3BsdWdpbicgKSAuIHRkKCRu ZXduYW1lKSkKCS4gdHIoIGZMYWJlbENlbGwoICdwbHVnaW4nICkgLiB0ZCgkY29kZSkpCgku IHRyKCBmTGFiZWxDZWxsKCAncHJlZnMnICkgLiB0ZCgkcHJlZnMpKQoKCS4gdHIoIGZMYWJl bENlbGwoICd2ZXJzaW9uJyApIC4gdGQoJHZlcnNpb24pKQoJLiB0ciggZkxhYmVsQ2VsbCgg J2F1dGhvcicgKSAuIHRkKCRhdXRob3IpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUn ICkgLiB0ZCgkYXV0aG9yX3VyaSkpCgkuIHRyKCBmTGFiZWxDZWxsKCAnZGVzY3JpcHRpb24n ICkgLiB0ZCgkZGVzY3JpcHRpb24pKQoJLiB0ciggdGRhKGdUeHQoJ3BsdWdpbl9oZWxwJyks ICcgY2xhc3M9Im5vbGluZSIgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1h bGlnbjogbWlkZGxlOyInKSAuIHRkKCRoZWxwKSkKCS4gdHIoIGZMYWJlbENlbGwoICdjc3Mn ICkgLiB0ZCgkY3NzKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHN1Yikp CgoJLiB0ciggdGRjcygnPGhyPicsMikpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAu IHRkKCdVdGlsaXRpZXMgKDxzdHJvbmc+dXNlIG9ubHkgYWZ0ZXIgc2F2aW5nIHRoZSBkYXRh IGFib3ZlPC9zdHJvbmc+KTonKSkKCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luIGNvZGU8 YnI+Zm9yIGRpc3RyaWJ1dGlvbicgKSAuIHRkKCRkaXN0cmlidXRpb24pKQoJLiB0ciggZkxh YmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc2xpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5i c3A7JykgLiB0ZCgkc3ppcGxpbmspKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0 ZCgkc3BocGxpbmspKQoJLiBlbmRUYWJsZSgpCgkuIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZl JykKCS4gZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykKCS4gaElucHV0KCduYW1lJywk bmFtZSkpCS4gPDw8RU9GCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5 LmZuLnJlc2l6ZWhhbmRsZSA9IGZ1bmN0aW9uKGN1cmgpIHsKCXJldHVybiB0aGlzLmVhY2go ZnVuY3Rpb24oKSB7CgkJdmFyIG1lID0galF1ZXJ5KHRoaXMpOwoJCW1lLmFuaW1hdGUoe2hl aWdodDogY3VyaH0pOwoJCW1lLmFmdGVyKAoJCQlqUXVlcnkoJzxkaXYgY2xhc3M9InJlc2l6 ZWhhbmRsZSI+LS0tICsgLS0tPC9kaXY+JykuYmluZCgibW91c2Vkb3duIiwgZnVuY3Rpb24o ZSkgewoJCQkJdmFyIGggPSBtZS5oZWlnaHQoKTsKCQkJCXZhciB5ID0gZS5jbGllbnRZOwoJ CQkJdmFyIG1vdmVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewoJCQkJCW1lLmhlaWdodChNYXRo Lm1heCgyMCwgZS5jbGllbnRZICsgaCAtIHkpKTsKCQkJCX07CgkJCQl2YXIgdXBIYW5kbGVy ID0gZnVuY3Rpb24oZSkgewoJCQkJCWpRdWVyeSgiaHRtbCIpLnVuYmluZCgibW91c2Vtb3Zl Iixtb3ZlSGFuZGxlcikudW5iaW5kKCJtb3VzZXVwIix1cEhhbmRsZXIpOwoJCQkJCW5ld2gg PSBtZS5oZWlnaHQoKTsKCQkJCQlzZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnLCBu ZXdoLCA3KTsKCQkJCX07CgkJCQlqUXVlcnkoImh0bWwiKS5iaW5kKCJtb3VzZW1vdmUiLCBt b3ZlSGFuZGxlcikuYmluZCgibW91c2V1cCIsIHVwSGFuZGxlcik7CgkJCX0pCgkJKTsKCX0p Owp9CmZ1bmN0aW9uIHNldENvb2tpZShuYW1lLHZhbHVlLGRheXMpIHsKCWlmIChkYXlzKSB7 CgkJdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwoJCWRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUo KSsoZGF5cyoyNCo2MCo2MCoxMDAwKSk7CgkJdmFyIGV4cGlyZXMgPSAiOyBleHBpcmVzPSIr ZGF0ZS50b0dNVFN0cmluZygpOwoJfSBlbHNlIHZhciBleHBpcmVzID0gIiI7Cglkb2N1bWVu dC5jb29raWUgPSBuYW1lKyI9Iit2YWx1ZStleHBpcmVzKyI7IHBhdGg9LyI7Cn0KZnVuY3Rp b24gZ2V0Q29va2llKG5hbWUpIHsKCXZhciBuYW1lRVEgPSBuYW1lICsgIj0iOwoJdmFyIGNh ID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7Cglmb3IodmFyIGk9MDtpIDwgY2EubGVu Z3RoO2krKykgewoJCXZhciBjID0gY2FbaV07CgkJd2hpbGUgKGMuY2hhckF0KDApPT0nICcp IGMgPSBjLnN1YnN0cmluZygxLGMubGVuZ3RoKTsKCQlpZiAoYy5pbmRleE9mKG5hbWVFUSkg PT0gMCkgcmV0dXJuIGMuc3Vic3RyaW5nKG5hbWVFUS5sZW5ndGgsYy5sZW5ndGgpOwoJfQoJ cmV0dXJuIG51bGw7Cn0KXCQoZnVuY3Rpb24oKSB7CgljdXJoID0gZ2V0Q29va2llKCdpZWRf cGx1Z2luX2VkaGVpZ2h0Jyk7CgljdXJoID0gKGN1cmggPT0gbnVsbCkgPyAnNDgwJyA6IGN1 cmg7CglcJCgiI3BsdWdpbl9lZGl0b3IiKS5yZXNpemVoYW5kbGUocGFyc2VJbnQoY3VyaCkp Owp9KTsKPC9zY3JpcHQ+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci5yZXNpemVoYW5kbGUg ewoJY3Vyc29yOnMtcmVzaXplOwoJdGV4dC1hbGlnbjpjZW50ZXI7Cglmb250LXNpemU6MWVt OwoJd2lkdGg6MTAwJTsKCXBhZGRpbmc6MnB4IDAgNnB4Owp9Cjwvc3R5bGU+CkVPRjsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmUoKSB7CglnbG9iYWwgJGllZF9w bHVnaW5fZ2xvYmFsczsKCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywnbmV3 bmFtZScsJ2ZpbGVuYW1lJywnY29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmknLCd2ZXJzaW9u JywnZGVzY3JpcHRpb24nLCdoZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScpKSkpOwoJbGlz dCAoJHN0YXJ0X2NzcywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNT UyIsICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9i YWxzWydjc3NfZW5kJ10pOwoKCWlmIChlbXB0eSgkZmlsZW5hbWUpKSB7CgkJc2FmZV91cGRh dGUoInR4cF9wbHVnaW4iLCJuYW1lPSckbmV3bmFtZSciLCAibmFtZT0nJG5hbWUnIik7CgkJ c2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJjb2RlPSckY29kZSciLCAibmFtZT0nJG5ld25h bWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJhdXRob3I9JyRhdXRob3InIiwg Im5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiYXV0aG9y X3VyaT0nJGF1dGhvcl91cmknIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRl KCJ0eHBfcGx1Z2luIiwidmVyc2lvbj0nJHZlcnNpb24nIiwgIm5hbWU9JyRuZXduYW1lJyIp OwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiZGVzY3JpcHRpb249JyRkZXNjcmlwdGlv biciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJo ZWxwPSciLiRoZWxwLigoJGNzcykgPyBuLiRzdGFydF9jc3Mubi4kY3NzLm4uJGVuZF9jc3M6 JycpLiInIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2lu Iiwic3RhdHVzPSckc3RhdHVzJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0 ZSgidHhwX3BsdWdpbiIsInR5cGU9JyR0eXBlJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCX0g ZWxzZSB7CgkJJGZpbGVjb250ZW50ID0gZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2lu X2NhY2hlX2RpciddLkRTLiRmaWxlbmFtZSk7CgkJJGZpbGVjb250ZW50ID0gaWVkX3BsdWdp bl9tYWtlX2FycmF5KCRmaWxlY29udGVudCk7CgkJJG1ldGF2YXJzID0gYXJyYXkoIm5hbWUi ID0+ICIkbmV3bmFtZSIsCgkJCQkJCQkJInZlcnNpb24iID0+ICIkdmVyc2lvbiIsCgkJCQkJ CQkJImF1dGhvciIgPT4gIiRhdXRob3IiLAoJCQkJCQkJCSJhdXRob3JfdXJpIiA9PiAiJGF1 dGhvcl91cmkiLAoJCQkJCQkJCSJkZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsCgkJ CQkJCQkJInR5cGUiID0+ICIkdHlwZSIKCQkJCQkJKTsKCQkkaHVua3ZhcnMgPSBhcnJheSgi Q1NTIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnCicsJGNzcykpLAoJCQkJCQkJ CSJIRUxQIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnCicsJGhlbHApKSwKCQkJ CQkJCQkiQ09ERSIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRjb2RlKSks IC8vIHdvcmthcm91bmQKCQkJCQkJKTsKCQlmb3JlYWNoICgkbWV0YXZhcnMgYXMgJHZhcm5h bWUgPT4gJHZhbHVlKSB7CgkJCWZvcigkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRmaWxlY29u dGVudCk7ICRpZHgrKykgewoJCQkJaWYgKHN0cnBvcygkZmlsZWNvbnRlbnRbJGlkeF0sICck cGx1Z2luW1wnJy4kdmFybmFtZS4nXCddJykgPT09IDApIHsKCQkJCQkkZmlsZWNvbnRlbnRb JGlkeF0gPSAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXSA9ICcuZG9RdW90ZSgkdmFsdWUp Lic7JzsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQlmb3JlYWNoICgkaHVua3ZhcnMg YXMgJHZhcm5hbWUgPT4gJGh1bmspIHsKCQkJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2Rl bGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCR2YXJuYW1lLCAkaWVkX3BsdWdpbl9n bG9iYWxzWydkbG1fc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snZGxtX2VuZCddKTsK CQkJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwgJGZpbGVjb250ZW50KSAr IDE7CgkJCSRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGZpbGVjb250ZW50KTsK CQkJYXJyYXlfc3BsaWNlKCRmaWxlY29udGVudCwgJHN0YXJ0LCAkZW5kLSRzdGFydCwgJGh1 bmspOwoJCX0KCQkkZmlsZWNvbnRlbnQgPSBpbXBsb2RlKCJcbiIsICRmaWxlY29udGVudCk7 CgkJJGZoID0gZm9wZW4oJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5E Uy4kZmlsZW5hbWUsICd3KycpOwoJCWZ3cml0ZSgkZmgsICRmaWxlY29udGVudCk7CgkJZmNs b3NlKCRmaCk7Cgl9CgkvLyBDaGVjayB0aGUgcGx1Z2luIHR5cGUgbWF0Y2hlcyB0aGUgY29k ZSB1c2VkCgkkZXh0cmFNc2cgPSAoaWVkX3BsdWdpbl9hZG1pbl9jaGVjaygkY29kZSwgJHR5 cGUpKSA/ICcnIDogc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jaGVja190 eXBlJykpOwoJJG1lc3NhZ2UgPSBtZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsJ3NhdmVk JykuYnIuJGV4dHJhTXNnOwoJaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlKTsKfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2NyZWF0ZV9uZXcoKSB7CglleHRyYWN0KGRvU2xh c2goZ3BzYShhcnJheSgnbmFtZScpKSkpOwoJaWYgKCRuYW1lPT0nJykgewoJCWllZF9wbHVn aW5fbGlzdCgnWW91IGFyZSBzdXBwb3NlZCB0byBuYW1lIHRoZSBuZXcgcGx1Z2luIDspJyk7 CgkJcmV0dXJuOwoJfQoJJGV4aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25h bWUnLCRuYW1lKTsKCWlmICghJGV4aXN0cykgewoJCXNhZmVfaW5zZXJ0KCJ0eHBfcGx1Z2lu IiwgIgoJCQluYW1lPSckbmFtZScsCgkJCXN0YXR1cz0nMCcsCgkJCXR5cGU9JzAnLAoJCQl2 ZXJzaW9uPScwLjEnCgkJIik7CgkJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwgJ2Vk aXQgeW91ciBuZXcgcGx1Z2luJyk7CgkJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFt ZSk7Cgl9IGVsc2UgewoJCWllZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVnaW4nKS4nIDxzdHJv bmc+Jy4kbmFtZS4nPC9zdHJvbmc+ICcuZ1R4dCgnYWxyZWFkeV9leGlzdHMnKSk7Cgl9Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUoKSB7CglnbG9i YWwgJGllZF9wbHVnaW5fZ2xvYmFsczsKCWlmIChncHMoJ25hbWUnKSkgewoJCSRuYW1lID0g Z3BzKCduYW1lJyk7CgkJJGRlc2NyaXB0aW9uID0gKCRuYW1lKSA/IGZldGNoKCdkZXNjcmlw dGlvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0aG9yID0gKCRu YW1lKSA/IGZldGNoKCdhdXRob3InLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7 CgkJJGF1dGhvcl91cmkgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcl91cmknLCd0eHBfcGx1 Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2go J3ZlcnNpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGNvZGUgPSAo JG5hbWUpID8gZmV0Y2goJ2NvZGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7 CgkJJGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hlbHAnLCd0eHBfcGx1Z2luJywnbmFtZScs JG5hbWUpIDogJyc7CgkJJHR5cGUgPSAoJG5hbWUpID8gZmV0Y2goJ3R5cGUnLCd0eHBfcGx1 Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkg PyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRy dWUpIDogYXJyYXkoJycsJGhlbHApOwoJfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJ CSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdp bl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7 Cgl9CgkkemlwID0gZ3BzKCd6aXAnKTsKCWlmIChncHMoJ3RyaW0nKT09MSkgewoJCSRjb2Rl PWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsKCQkkY29kZT1hcnJheV9tYXAoJ3RyaW0nLCRjb2Rl KTsKCQkkY29kZT1pbXBsb2RlKCJcclxuIiwkY29kZSk7Cgl9CgoJbGlzdCAoJHN0YXJ0X2Nz cywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1 Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5k J10pOwoKCWhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluIik7CgloZWFkZXIoJ0Nv bnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJG5hbWUuJ192 Jy4kdmVyc2lvbi4gKCgkemlwKT8nX3ppcCc6JycpIC4gJy50eHQnKTsKCgkkdHlwZXMgPSBh cnJheSggJ0NsaWVudCBzaWRlJyAsICdBZG1pbi9DbGllbnQgc2lkZScgLCAnTGlicmFyeScg KTsKCSRwbHVnaW5bJ25hbWUnXSA9ICRuYW1lOwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0 aG9yOwoJJHBsdWdpblsnYXV0aG9yX3VyaSddID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2 ZXJzaW9uJ10gPSAkdmVyc2lvbjsKCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3Jp cHRpb247CgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsKCSRwbHVnaW5bJ3R5cGUnXSA9ICR0 eXBlOwovLwkkcGx1Z2luWydhbGxvd19odG1sX2hlbHAnXSA9IHRydWU7Ci8vCSRwbHVnaW5b J2hlbHBfcmF3J10gPSAkaGVscC4kc3RhcnRfY3NzLiRjc3MuJGVuZF9jc3M7CgkkcGx1Z2lu WydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAsICRjc3MsICRzdGFydF9jc3Ms ICRlbmRfY3NzKTsKCSRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsK CgllY2hvICcjIE5hbWU6ICcuJG5hbWUuJyB2Jy4kdmVyc2lvbi4nICcuKCgkemlwKSA/ICIo Y29tcHJlc3NlZCkiIDogIiIpLicKIyBUeXBlOiAnLiR0eXBlc1skdHlwZV0uJyBwbHVnaW4K IyAnLiRkZXNjcmlwdGlvbi4nCiMgQXV0aG9yOiAnLiRhdXRob3IuJwojIFVSTDogJy4kYXV0 aG9yX3VyaS4nCgojIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgojIFRoaXMgaXMgYSBwbHVnaW4gZm9yIFRl eHRwYXR0ZXJuIC0gaHR0cDovL3RleHRwYXR0ZXJuLmNvbS8KIyBUbyBpbnN0YWxsOiB0ZXh0 cGF0dGVybiA+IGFkbWluID4gcGx1Z2lucwojIFBhc3RlIHRoZSBmb2xsb3dpbmcgdGV4dCBp bnRvIHRoZSBcJ0luc3RhbGwgcGx1Z2luXCcgYm94OgojIC4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKJy4o KCR6aXApID8gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShnemVuY29kZShzZXJpYWxpemUo JHBsdWdpbikpKSwgNzIpIDogY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShzZXJpYWxpemUo JHBsdWdpbikpLCA3MikpOwoKCWRpZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9w bHVnaW5fc2F2ZV9hc19waHBfZmlsZSgpIHsKCWdsb2JhbCAkcHJlZnM7CglpZiAoZ3BzKCdu YW1lJykpIHsKCQkkbmFtZSA9IGdwcygnbmFtZScpOwoJCSRkZXNjcmlwdGlvbiA9ICgkbmFt ZSkgPyBmZXRjaCgnZGVzY3JpcHRpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDog Jyc7CgkJJGF1dGhvciA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9yJywndHhwX3BsdWdpbics J25hbWUnLCRuYW1lKSA6ICcnOwoJCSRhdXRob3JfdXJpID0gKCRuYW1lKSA/IGZldGNoKCdh dXRob3JfdXJpJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSR2ZXJzaW9u ID0gKCRuYW1lKSA/IGZldGNoKCd2ZXJzaW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1l KSA6ICcnOwoJCSRjb2RlID0gKCRuYW1lKSA/IGZldGNoKCdjb2RlJywndHhwX3BsdWdpbics J25hbWUnLCRuYW1lKSA6ICcnOwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywn dHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSR0eXBlID0gKCRuYW1lKSA/IGZl dGNoKCd0eXBlJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNz cywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJD U1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxzZWlmIChn cHMoJ2ZpbGVuYW1lJykpIHsKCQkkcGx1Z2luPWllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9C QUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsK CQlleHRyYWN0KCRwbHVnaW4pOwoJfQoKCSRvcmRlciA9IChpc3NldCgkcHJlZnNbJ2llZF9w bHVnaW5fb3V0cHV0X29yZGVyJ10pICYmIGlzX251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2lu X291dHB1dF9vcmRlciddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10g OiAwOwoKCWhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3BocCIpOwoJaGVhZGVyKCdDb250 ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iJyAuICRuYW1lLidfdicu JHZlcnNpb24uICcucGhwJyk7CgoJJGhlbHBjaHVuayA9ICdpZiAoMCkgeycubgouJz8+Jy5u Ci4gKCgkY3NzKSA/ICc8IS0tJy5uCi4nIyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0nLm4K LiRjc3MubgouJyMgLS0tIEVORCBQTFVHSU4gQ1NTIC0tLScubgouJy0tPicubiA6ICcnKQou JzwhLS0nLm4KLicjIC0tLSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0nLm4KLiRoZWxwLm4KLicj IC0tLSBFTkQgUExVR0lOIEhFTFAgLS0tJy5uCi4nLS0+Jy5uCi4nPD9waHAnLm4KLid9Jy5u OwoKCSRjb2RlY2h1bmsgPSAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uCi4kY29k ZS5uCi4nIyAtLS0gRU5EIFBMVUdJTiBDT0RFIC0tLScubjsKCgllY2hvICc8P3BocCcubgou Jy8vIFRoaXMgaXMgYSBQTFVHSU4gVEVNUExBVEUuJy5uCi4nLy8gQ29weSB0aGlzIGZpbGUg dG8gYSBuZXcgbmFtZSBsaWtlIGFiY19teXBsdWdpbi5waHAuICBFZGl0IHRoZSBjb2RlLCB0 aGVuJy5uCi4nLy8gcnVuIHRoaXMgZmlsZSBhdCB0aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1 Y2UgYSBwbHVnaW4gZm9yIGRpc3RyaWJ1dGlvbjonLm4KLicvLyAkIHBocCBhYmNfbXlwbHVn aW4ucGhwID4gYWJjX215cGx1Z2luLTAuMS50eHQnLm4KLm4KLicvLyBQbHVnaW4gbmFtZSBp cyBvcHRpb25hbC4gIElmIHVuc2V0LCBpdCB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBj dXJyZW50Jy5uCi4nLy8gZmlsZSBuYW1lLiBVbmNvbW1lbnQgYW5kIGVkaXQgdGhpcyBsaW5l IHRvIG92ZXJyaWRlOicubgouJyRwbHVnaW5bXCduYW1lXCddID0gJy5kb1F1b3RlKCRuYW1l KS4nOycubgouJyRwbHVnaW5bXCd2ZXJzaW9uXCddID0gJy5kb1F1b3RlKCR2ZXJzaW9uKS4n OycubgouJyRwbHVnaW5bXCdhdXRob3JcJ10gPSAnLmRvUXVvdGUoJGF1dGhvcikuJzsnLm4K LickcGx1Z2luW1wnYXV0aG9yX3VyaVwnXSA9ICcuZG9RdW90ZSgkYXV0aG9yX3VyaSkuJzsn Lm4KLickcGx1Z2luW1wnZGVzY3JpcHRpb25cJ10gPSAnLmRvUXVvdGUoJGRlc2NyaXB0aW9u KS4nOycubgoubgouJy8vIFBsdWdpbiB0eXBlczonLm4KLicvLyAwID0gcmVndWxhciBwbHVn aW47IGxvYWRlZCBvbiB0aGUgcHVibGljIHdlYiBzaWRlIG9ubHknLm4KLicvLyAxID0gYWRt aW4gcGx1Z2luOyBsb2FkZWQgb24gYm90aCB0aGUgcHVibGljIGFuZCBhZG1pbiBzaWRlJy5u Ci4nLy8gMiA9IGxpYnJhcnk7IGxvYWRlZCBvbmx5IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBv ciByZXF1aXJlX3BsdWdpbigpIGlzIGNhbGxlZCcubgouJyRwbHVnaW5bXCd0eXBlXCddID0g Jy5kb1F1b3RlKCR0eXBlKS4nOycubgoubgouJ0BpbmNsdWRlX29uY2UoXCd6ZW1fdHBsLnBo cFwnKTsnLm4KLm4KLigoJG9yZGVyID09IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmsp Ci4oKCRvcmRlciA9PSAxKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQouJz8+JzsKCWRp ZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fdXBsb2FkKCkgewoJZ2xv YmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2Nzcykg PSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1sn Y3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgoJaWYgKCEk X0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pIHsKCQlpZWRfcGx1Z2luX2xpc3QoJ1lv dSBhcmUgc3VwcG9zZWQgdG8gY2hvb3NlIHRoZSBmaWxlIDspJyk7cmV0dXJuOwoJfQoJJHBs dWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25h bWUnXSk7CgkkbmV3bmFtZSA9IChlbXB0eSgkcGx1Z2luWyduYW1lJ10pKSA/IGJhc2VuYW1l KCRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddLCAnLnBocCcpIDogJHBsdWdpblsnbmFtZSdd OwoJaWYgKGdwcygnbmFtZScpIGFuZCBncHMoJ25hbWUnKSE9J3h4eF94eHh4eHgnKSB7CgkJ JG5ld25hbWU9Z3BzKCduYW1lJyk7Cgl9CglpZiAoZW1wdHkoJHBsdWdpblsnY29kZSddKSkg ewoJCSRwbHVnaW5bJ2NvZGUnXSA9IGltcGxvZGUgKCIiLCBmaWxlKCRfRklMRVNbJ3RoZWZp bGUnXVsndG1wX25hbWUnXSkpOwoJfQoKCWlmIChNQUdJQ19RVU9URVNfR1BDKSB7CgkJZm9y ZWFjaCAoJHBsdWdpbiBhcyAkaXRlbSA9PiAkdmFsdWUpIHsKCQkJJHBsdWdpblskaXRlbV0g PSBhZGRzbGFzaGVzKCR2YWx1ZSk7CgkJfQoJfQoJZXh0cmFjdCgkcGx1Z2luKTsKCSRtZDU9 bWQ1KCRjb2RlKTsKCSR2ZXJzaW9uID0gKGVtcHR5KCR2ZXJzaW9uKSkgPyAiMC4xIiA6ICR2 ZXJzaW9uOwoJJGhlbHAgPSAkaGVscC4oKCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5u LiRlbmRfY3NzIDogJycpOwoJJGV4aXN0cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbics J25hbWUnLCRuZXduYW1lKTsKCWlmICgkZXhpc3RzKSB7CgkJJHN0YXR1cyA9IGZldGNoKCdz dGF0dXMnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25hbWUpOwoJCSRycyA9IHNhZmVfdXBk YXRlKAoJCQkidHhwX3BsdWdpbiIsCgkJCSJzdGF0dXMgICAgICA9ICckc3RhdHVzJywKCQkJ dHlwZSAgICAgICAgID0gJyR0eXBlJywKCQkJYXV0aG9yICAgICAgID0gJyRhdXRob3InLAoJ CQlhdXRob3JfdXJpICAgPSAnJGF1dGhvcl91cmknLAoJCQl2ZXJzaW9uICAgICAgPSAnJHZl cnNpb24nLAoJCQlkZXNjcmlwdGlvbiAgPSAnJGRlc2NyaXB0aW9uJywKCQkJaGVscCAgICAg ICAgID0gJyRoZWxwJywKCQkJY29kZSAgICAgICAgID0gJyRjb2RlJywKCQkJY29kZV9yZXN0 b3JlID0gJyRjb2RlJywKCQkJY29kZV9tZDUgICAgID0gJyRtZDUnIiwKCQkJIm5hbWUgICAg ICAgID0gJyRuZXduYW1lJyIKCQkpOwoJfSBlbHNlIHsKCQkkcnMgPSBzYWZlX2luc2VydCgK CQkJInR4cF9wbHVnaW4iLAoJCQkibmFtZSAgICAgICAgID0gJyRuZXduYW1lJywKCQkJc3Rh dHVzICAgICAgID0gMCwKCQkJdHlwZSAgICAgICAgID0gJyR0eXBlJywKCQkJYXV0aG9yICAg ICAgID0gJyRhdXRob3InLAoJCQlhdXRob3JfdXJpICAgPSAnJGF1dGhvcl91cmknLAoJCQl2 ZXJzaW9uICAgICAgPSAnJHZlcnNpb24nLAoJCQlkZXNjcmlwdGlvbiAgPSAnJGRlc2NyaXB0 aW9uJywKCQkJaGVscCAgICAgICAgID0gJyRoZWxwJywKCQkJY29kZSAgICAgICAgID0gJyRj b2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJY29kZV9tZDUgICAgID0gJyRt ZDUnIgoJCSk7Cgl9CgoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwgbWVzc2VuZ2Vy KCdwbHVnaW4nLCRuZXduYW1lLCgkZXhpc3RzKT8ndXBkYXRlZCc6J3VwbG9hZGVkJykpOwoJ ZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFtZSk7Cn0KCi8vIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVu Y3Rpb24gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJGZpbGVwYXRoKSB7CgkkY29udGVudCA9IGZp bGUoJGZpbGVwYXRoKTsKCSRzb3VyY2VfbGluZXMgPSBjb3VudCgkY29udGVudCk7CgkkbWV0 YWRhdGEgPSBhcnJheSgKCQkJCQkJJ25hbWUnID0+ICcnLAoJCQkJCQkndmVyc2lvbicgPT4g JycsCgkJCQkJCSdhdXRob3InID0+ICcnLAoJCQkJCQknYXV0aG9yX3VyaScgPT4gJycsCgkJ CQkJCSdkZXNjcmlwdGlvbicgPT4gJycsCgkJCQkJCSd0eXBlJyA9PiAnJywKCQkJCQkpOwoJ Zm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsKCQkkY29udGVu dFskaWR4XSA9IHJ0cmltKCRjb250ZW50WyRpZHhdKTsKCQlpZiAoc3RycG9zKCRjb250ZW50 WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0gMCkgewoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJp YWJsZSBzbyBleHRyYWN0IGl0CgkJCSRwYXJ0cyA9IGV4cGxvZGUoIiA9ICIsICRjb250ZW50 WyRpZHhdKTsKCQkJJHBhcnRzWzBdID0gc3RyX3JlcGxhY2UoIiciLCAiIiwgJHBhcnRzWzBd KTsKCQkJcHJlZ19tYXRjaCgiL3BsdWdpblxbKC4qKVxdLyIsICRwYXJ0c1swXSwgJHZhcik7 CgkJCSR2YWwgPSB0cmltKCRwYXJ0c1sxXSwgIic7Iik7CgkJCSRtZXRhZGF0YVskdmFyWzFd XSA9ICR2YWw7CgkJfQoJfQoJJG1ldGFkYXRhWydoZWxwJ10gPSBpZWRfcGx1Z2luX2V4dHJh Y3RfaHVuaygkY29udGVudCwgJ0hFTFAnKTsKCSRtZXRhZGF0YVsnY3NzJ10gID0gaWVkX3Bs dWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICdDU1MnICk7CgkkbWV0YWRhdGFbJ2NvZGUn XSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAnQ09ERScpOwoKCXJldHVy biAkbWV0YWRhdGE7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gcmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBu ZXQtY2FydmVyJ3MgemVtX3RwbCB0ZW1wbGF0ZQpmdW5jdGlvbiBpZWRfcGx1Z2luX2V4dHJh Y3RfaHVuaygkY29udGVudCwgJGh1bmssICRjbW50PSIjIiwgJGRlbGV0ZT1mYWxzZSkgewoJ JGRsbSA9IGV4cGxvZGUoInwiLCAkY21udCk7CgkkZGxtU3RhcnQgPSAkZGxtWzBdOwoJJGRs bUVuZCA9IChjb3VudCgkZGxtKSA+IDEpID8gJGRsbVsxXSA6ICcnOwoJJGxpbmVzID0gaWVk X3BsdWdpbl9tYWtlX2FycmF5KCRjb250ZW50KTsKCglsaXN0ICgkc3RhcnRfZGVsaW0sICRl bmRfZGVsaW0pID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJGh1bmssICRkbG1TdGFydCwg JGRsbUVuZCk7Cgkkc3RhcnQgPSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkbGluZXMp ICsgMTsKCSRlbmQgPSBhcnJheV9zZWFyY2goJGVuZF9kZWxpbSwgJGxpbmVzKTsKCSRleHRy YWN0ZWQgPSBhcnJheSgpOwoJaWYgKGNvdW50KCRsaW5lcykgPiAwICYmIGlzX251bWVyaWMo JHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPiAkc3RhcnQpIHsKCQkkZXh0 cmFjdGVkID0gYXJyYXlfc2xpY2UoJGxpbmVzLCAkc3RhcnQsICRlbmQtJHN0YXJ0KTsKCQkk bGluZU51bSA9IGNvdW50KCRleHRyYWN0ZWQpLTE7CgkJd2hpbGUgKCRsaW5lTnVtID4gMCAm JiB0cmltKCRleHRyYWN0ZWRbJGxpbmVOdW0tLV0pID09ICIiKSB7CgkJCWFycmF5X3BvcCgk ZXh0cmFjdGVkKTsKCQl9CgkJd2hpbGUgKGNvdW50KCRleHRyYWN0ZWQpID4gMCAmJiB0cmlt KCRleHRyYWN0ZWRbMF0pID09ICIiKSB7CgkJCWFycmF5X3NoaWZ0KCRleHRyYWN0ZWQpOwoJ CX0KCQlpZiAoJGRlbGV0ZSkgewoJCQkkY2hvcHBlZCA9IGFycmF5X3NwbGljZSgkbGluZXMs ICRzdGFydC0xLCAkZW5kLSRzdGFydCsyLCAiIik7CgkJfQoJfQoJJHJlbWFpbnMgPSAkbGlu ZXM7CgkvLyBDaGVjayBpZiB0aGUgQ1NTIHNlY3Rpb24gaGFzIDxzdHlsZT4gdGFncyBhcm91 bmQgaXQ7IGFkZCB0aGVtIGlmIG5vdAoJaWYgKCRodW5rID09ICJDU1MiKSB7CgkJJG51bXJv d3MgPSBjb3VudCgkZXh0cmFjdGVkKTsKCQlpZiAoJG51bXJvd3MgPiAxKSB7CgkJCWlmIChz dHJwb3MoJGV4dHJhY3RlZFskbnVtcm93cy0xXSwgJzwvc3R5bGU+JykgPT09IGZhbHNlKSB7 CgkJCQkkZXh0cmFjdGVkW10gPSAnPC9zdHlsZT4nOwoJCQl9CgkJCWlmIChzdHJwb3MoJGV4 dHJhY3RlZFswXSwgJzxzdHlsZSAnKSA9PT0gZmFsc2UpIHsKCQkJCWFycmF5X3Vuc2hpZnQo JGV4dHJhY3RlZCwgJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Jyk7CgkJCX0KCQl9Cgl9Cglp ZiAoJGRlbGV0ZSkgewoJCXJldHVybiBhcnJheSh0cmltKGpvaW4oIlxuIiwgJGV4dHJhY3Rl ZCkpLCB0cmltKGpvaW4oIlxuIiwgJHJlbWFpbnMpKSk7Cgl9IGVsc2UgewoJCXJldHVybiB0 cmltKGpvaW4oIlxuIiwgJGV4dHJhY3RlZCkpOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkYXJyKSB7CglpZiAoIWlzX2FycmF5KCRhcnIpKSB7 CgkJJGFyciA9IGV4cGxvZGUoIlxuIiwgJGFycik7Cgl9Cgkkc291cmNlX2xpbmVzID0gY291 bnQoJGFycik7Cglmb3IgKCRpZHg9MDsgJGlkeCA8ICRzb3VyY2VfbGluZXM7ICRpZHgrKykg ewoJCSRhcnJbJGlkeF0gPSBydHJpbSgkYXJyWyRpZHhdKTsKCX0KCXJldHVybiAkYXJyOwp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAk c3RhcnQsICRlbmQpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJJHNtYXJrZXIg PSAkc3RhcnQgLiBzdHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9n bG9iYWxzWydzdGFydCddKSAuICgoJGVuZCk/JyAnLiRlbmQ6JycpOwoJJGVtYXJrZXIgPSAk c3RhcnQgLiBzdHJfcmVwbGFjZSgiU0VDVElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9nbG9i YWxzWydlbmQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsKCXJldHVybiAoYXJyYXkoJHNt YXJrZXIsICRlbWFya2VyKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gcmlwcGVkIGFuZCBtb2RkZWQg ZnJvbSBuZXQtY2FydmVyJ3MgemVtX3RwbCB0ZW1wbGF0ZQpmdW5jdGlvbiBpZWRfcGx1Z2lu X2FkbWluX2NoZWNrKCRjb2RlYmxvY2ssICR0eXBlKSB7CgkkcmUgPSAnL0B0eHBpbnRlcmZh Y2UuKj09LiphZG1pbi8nOwoJJHJldCA9IHRydWU7CglpZiAocHJlZ19tYXRjaCgkcmUsICRj b2RlYmxvY2spICYmICR0eXBlID09IDApIHsKCQkkcmV0ID0gZmFsc2U7Cgl9CglyZXR1cm4g JHJldDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAs ICRjc3MsICRzdGFydF9kbG0sICRlbmRfZGxtKSB7CglAaW5jbHVkZV9vbmNlIHR4cGF0aC4n L2xpYi9jbGFzc1RleHRpbGUucGhwJzsKCSRvdXQgPSAkaGVscDsKCWlmIChjbGFzc19leGlz dHMoJ1RleHRpbGUnKSkgewoJCS8vIFRyeSBhbmQgYmUgYSBsaXR0bGUgbW9yZSBpbnRlbGxp Z2VudCBhYm91dCBhcHBseWluZyB0ZXh0aWxlIG9yIG5vdAoJCSRyZSA9ICcvaDEoXCguKlwp KT9cLi8nOwoJCWlmIChwcmVnX21hdGNoKCRyZSwgJGhlbHApKSB7CgkJCSR0ZXh0aWxlID0g bmV3IFRleHRpbGUoKTsKCQkJJG91dCA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkaGVscCk7 CgkJfQoJfQoJJG91dCAuPSAoJGNzcykgPyAiXG4kc3RhcnRfZGxtXG4kY3NzXG4kZW5kX2Rs bVxuIiA6ICcnOwoJcmV0dXJuICRvdXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX2lu c2VydF9lZGl0b3JzKCkgewoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fcHJlZnM7Cgkk b3V0ID0gYXJyYXkoKTsKCgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIsYXJy YXlfa2V5cygkaWVkX3BsdWdpbl9wcmVmc1swXSkpKTsKCSRycyA9IHNhZmVfcm93cygnbmFt ZSx2YWwsaHRtbCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7Cglp ZiAoY291bnQoJHJzKSA9PSBjb3VudCgkaWVkX3BsdWdpbl9wcmVmc1swXSkpIHsKCQkkZWQg PSBhcnJheSgpOwoJCSRlZFskcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yJ11dID0gJHByZWZz WydpZWRfcGx1Z2luX2VkaXRvcl9wYXRoJ107CgkJJGVkWyRwcmVmc1snaWVkX3BsdWdpbl9o ZWxwX2VkaXRvciddXSA9ICRwcmVmc1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJ107 CgoJCWZvcmVhY2ggKCRlZCBhcyAkZWRpdG9yID0+ICRlZGl0b3JfZGlyKSB7CgkJCXN3aXRj aCAoJGVkaXRvcikgewoJCQkJY2FzZSAidGlueV9tY2UiOgoJCQkJCSRvdXRbXSA9IDw8PEVP Rgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRlZGl0b3JfZGlyLicv dGlueV9tY2UuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ Cgl0aW55TUNFLmluaXQoewoJCW1vZGUgOiAic3BlY2lmaWNfdGV4dGFyZWFzIiwKCQllZGl0 b3Jfc2VsZWN0b3IgOiAibWNlRWRpdG9yIiwKCQl0aGVtZV9hZHZhbmNlZF90b29sYmFyX2xv Y2F0aW9uIDogInRvcCIsCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczEgOiAiYm9sZCxpdGFs aWMsdW5kZXJsaW5lLHN0cmlrZXRocm91Z2gsZm9yZWNvbG9yLGJhY2tjb2xvcixyZW1vdmVm b3JtYXQsbnVtbGlzdCxidWxsaXN0LG91dGRlbnQsaW5kZW50LGp1c3RpZnlsZWZ0LGp1c3Rp ZnljZW50ZXIsanVzdGlmeXJpZ2h0LGp1c3RpZnlmdWxsIiwKCQl0aGVtZV9hZHZhbmNlZF9i dXR0b25zMiA6ICJsaW5rLHVubGluayxzZXBhcmF0b3IsaWJyb3dzZXIsc2VwYXJhdG9yLHNl YXJjaCxyZXBsYWNlLHNlcGFyYXRvcixjdXQsY29weSxwYXN0ZSxzZXBhcmF0b3IsY29kZSxz ZXBhcmF0b3IsZm9ybWF0c2VsZWN0IiwKCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMyA6ICIi Cgl9KTsKPC9zY3JpcHQ+OwpFT0Y7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJlZGl0X2FyZWEi OgoJCQkJCSRvdXRbXSA9IDw8PEVPRgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg c3JjPSIkZWRpdG9yX2Rpci9lZGl0X2FyZWFfZnVsbC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQg dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIGluaXRpYWxpc2F0aW9uCgllZGl0QXJlYUxv YWRlci5pbml0KHsKCQlpZDogInBsdWdpbl9lZGl0b3IiCS8vIGlkIG9mIHRoZSB0ZXh0YXJl YSB0byB0cmFuc2Zvcm0KCQksc3RhcnRfaGlnaGxpZ2h0OiB0cnVlCS8vIGlmIHN0YXJ0IHdp dGggaGlnaGxpZ2h0CgkJLGFsbG93X3Jlc2l6ZTogImJvdGgiCgkJLGFsbG93X3RvZ2dsZTog dHJ1ZQoJCSxsYW5ndWFnZTogImVuIgoJCSxzeW50YXg6ICJwaHAiCgl9KTsKPC9zY3JpcHQ+ CkVPRjsKCQkJCQlicmVhazsKCQkJCWNhc2UgImNvZGVwcmVzcyI6CgkJCQkJJG91dFtdID0g JzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJGVkaXRvcl9kaXIuJy9j b2RlcHJlc3MuanMiPjwvc2NyaXB0Pic7CgkJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgoJcmV0 dXJuIGltcGxvZGUoIlxuIiwgJG91dCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3Bs dWdpbl9oZWxwX3ZpZXdlcigkbWVzc2FnZT0nJykgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2ds b2JhbHM7CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsKCglpZiAo Z3BzKCduYW1lJykpIHsKCQkkbmFtZSA9IGdwcygnbmFtZScpOwoJCSRoZWxwID0gKCRuYW1l KSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCWxp c3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhl bHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxz ZSBpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmls ZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5h bWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsKCX0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcp OwoJaWYgKGVtcHR5KCRoZWxwKSkgewoJCWVjaG8gdHIodGRhKCc8cD5IZWxwIG5vdCBhY2Nl c3NpYmxlIGZyb20gdGhpcyBmaWxlLjwvcD4nKSk7Cgl9IGVsc2UgewoJCWxpc3QgKCRzdGFy dF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVk X3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3Nz X2VuZCddKTsKCQkkcGx1Z2luWydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAs ICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsKCQllY2hvIHRyKHRkYSggJzxwPkV4dHJh Y3RlZCAnLighZW1wdHkoJHBsdWdpblsnaGVscCddKSA/ICdhbmQgVGV4dGlsZSBwcm9jZXNz ZWQnIDogJycpLicgaGVscCBzZWN0aW9uIGZvbGxvd3MmIzgyMzA7PC9wPjxocj4nLCAnIHdp ZHRoPSI2MDAiJykpOwoJCWVjaG8gdHIodGRhKCRwbHVnaW5bJ2hlbHAnXSwgJyB3aWR0aD0i NjAwIicpKTsKCX0KCWVjaG8gZW5kVGFibGUoKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBp ZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlPScnKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fcHJl ZnM7CgkkbnVtUmVxUHJlZnMgPSBjb3VudCgkaWVkX3BsdWdpbl9wcmVmc1swXSk7CgoJcGFn ZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgkkcHJlZmtleXMgPSBkb1F1 b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygkaWVkX3BsdWdpbl9wcmVmc1swXSkpKTsK CSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRtbCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4g KCcuJHByZWZrZXlzLicpJyk7CgkkbnVtUm93cyA9IGNvdW50KCRycyk7CgoJJGJ0blNhdmUg PSBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNoJyk7 CgkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsIiBz dHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4 dCgnaW5zdGFsbCcpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsKCSRidG5SZW1vdmUgPSAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMz ODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfcmVtb3ZlIiBzdHlsZT0iZGlzcGxheTppbmxpbmUi PicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnZGVsZXRlJyksICdwdWJsaXNo JykuJzwvZm9ybT4nOwoJJGJ0blN0eWxlID0gJyBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjI1 cHgiJzsKCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsKCWlmICgkbnVtUm93cyA9PSAkbnVt UmVxUHJlZnMpIHsKCQkvLyBQcmVmcyBhbGwgaW5zdGFsbGVkCgkJZWNobyB0cih0ZGEoc3Ry b25nKCdQbHVnaW4gQ29tcG9zZXIgcHJlZmVyZW5jZXMnKSwgJyBjb2xzcGFuPSIyIicpIC4g dGRhKCRidG5SZW1vdmUsICRidG5TdHlsZSkgKTsKCQllY2hvICc8Zm9ybSBtZXRob2Q9InBv c3QiIGFjdGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3Bs dWdpbl9wcmVmc191cGRhdGUiPic7CgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8ICRudW1Sb3dz OyAkaWR4KyspIHsKCQkJJGEgPSAkcnNbJGlkeF07CgkJCSRsYWJlbCA9ICc8bGFiZWwgZm9y PSInLiRhWyduYW1lJ10uJyI+Jy5pZWRfcGx1Z2luX2dUeHQoJGFbJ25hbWUnXSkuJzo8L2xh YmVsPic7CgkJCSRvdXQgPSB0ZGEoJGxhYmVsLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdo dDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsiJyk7CgkJCXN3aXRjaCgkYVsnbmFtZSddKSB7 CgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvcl9wYXRoIjoKCQkJCWNhc2UgImllZF9wbHVn aW5faGVscF9lZGl0b3JfcGF0aCI6CgkJCQkJJG91dCAuPSB0ZChmSW5wdXQoJ3RleHQnLCAk YVsnbmFtZSddLCAkYVsndmFsJ10sICdlZGl0JywgJycsICcnLCA1MCwgJycsICRhWyduYW1l J10pKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgImllZF9wbHVnaW5fZWRpdG9yIjoKLy8JCQkJ CSRvdXQgLj0gdGQoc2VsZWN0SW5wdXQoJGFbJ25hbWUnXSwgYXJyYXkoJ25vbmUnID0+ICdO b25lJywgJ2VkaXRfYXJlYScgPT4gJ0VkaXQgQXJlYScsICdjb2RlcHJlc3MnID0+ICdDb2Rl UHJlc3MnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dh cCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCSRvdXQgLj0g dGQoc2VsZWN0SW5wdXQoJGFbJ25hbWUnXSwgYXJyYXkoJ25vbmUnID0+ICdOb25lJywgJ2Vk aXRfYXJlYScgPT4gJ0VkaXQgQXJlYScpLCAkYVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJp ZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSdd KSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yIjoKCQkJ CQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCd0ZXh0aWxlJyA9 PiAnTm9uZSAoVGV4dGlsZSknLCAndGlueV9tY2UnID0+ICdUaW55IE1DRScpLCAkYVsndmFs J10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMu dmFsdWUpOyInLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1 Z2luX291dHB1dF9vcmRlciI6CgkJCQkJJG91dCAuPSB0ZChyYWRpbygkYVsnbmFtZSddLDAs KCgkYVsndmFsJ109PTApPzE6MCkpLiJDb2RlIGZpcnN0ICIgLiByYWRpbygkYVsnbmFtZSdd LDEsKCgkYVsndmFsJ109PTEpPzE6MCkpLiJIZWxwIGZpcnN0ICIpOwoJCQkJCWJyZWFrOwoJ CQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgiOgoJCQkJCSRvdXQgLj0gdGQoZklu cHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAnJywgNSwg JycsICRhWyduYW1lJ10pKTsKCQkJCQlicmVhazsKCQkJfQoJCQllY2hvIHRyKCRvdXQpOwoJ CX0KCQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7CgkJZWNobyAnPC9mb3Jt Pic7Cgl9IGVsc2UgaWYgKCRudW1Sb3dzID4gMCAmJiAkbnVtUm93cyA8ICRudW1SZXFQcmVm cykgewoJCWVjaG8gdHIodGRhKHN0cm9uZygnU29tZSBwcmVmcyBhbHJlYWR5IGluc3RhbGxl ZC4nKS5ici5icgoJCQkJCQkuJ0l0IGlzIGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgYSBkaWZm ZXJlbnQgdmVyc2lvbiBvZiB0aGUnLmJyCgkJCQkJCS4ncGx1Z2luIHRvIG9uZSB5b3UgaGFk IGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyCgkJCQkJCS4naGF2ZSBiZWNvbWUgY29y cnVwdCBzb21laG93LicuYnIuYnIKCQkJCQkJLidDaG9vc2UgJy5nVHh0KCdkZWxldGUnKS4n IHRvIHJlbW92ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcKCQkJ CQkJLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcgYWxsIGV4aXN0aW5nIHByZWZzIHVudG91 Y2hlZC4nLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIodGRhKCRidG5SZW1vdmUsJGJ0 blN0eWxlKSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7Cgl9IGVsc2UgewoJCWVj aG8gdHIodGRhKCdQcmVmcyBub3QgaW5zdGFsbGVkLicsICcgY29sc3Bhbj0iMiInKSk7CgkJ ZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOwoJfQoJZWNobyBlbmRUYWJs ZSgpOwoKCWVjaG8gPDw8RU9GCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KdmFy IGllZF9wbHVnaW5fcGF0aF9yZSA9IG5ldyBSZWdFeHAoIl4uKlsvXFxdIiwgImciKQpmdW5j dGlvbiBpZWRfcGx1Z2luX3ByZWZzd2FwKHNlbElELCBzZWxWYWx1ZSkgewoJdmFyIGlkID0g c2VsSUQrJ19wYXRoJzsKCXZhciBudXZhbCA9ICgoYmFzZW5hbWUoJCgiIyIraWQpLnZhbCgp KSA9PSBzZWxWYWx1ZSkgPyAkKCIjIitpZCkudmFsKCkgOiBkaXJuYW1lKCQoIiMiK2lkKS52 YWwoKSkrc2VsVmFsdWUpOwoJaWYgKCQoIiMiK3NlbElEKVswXS5zZWxlY3RlZEluZGV4ID09 IDApIHsKCQkkKCIjIitpZCkuYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsgOwoJfSBlbHNlIHsK CQkkKCIjIitpZCkuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7IDsKCQkkKCIjIitpZCkudmFs KG51dmFsKTsKCX0KfQpmdW5jdGlvbiBiYXNlbmFtZShwYXRoLCBzdWZmaXgpIHsKCXJldHVy biBwYXRoLnJlcGxhY2UoaWVkX3BsdWdpbl9wYXRoX3JlLCAnJyk7Cn0KZnVuY3Rpb24gZGly bmFtZShwYXRoKSB7CiAgICByZXR1cm4gcGF0aC5tYXRjaChpZWRfcGx1Z2luX3BhdGhfcmUp Owp9CiQoZnVuY3Rpb24oKSB7CgkkKCJzZWxlY3QubGlzdCIpLmVhY2goZnVuY3Rpb24oKSB7 CgkJaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsKCX0pOwp9KTsK PC9zY3JpcHQ+CkVPRjsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZz X2luc3RhbGwoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7CgkkbWVzc2FnZSA9ICcn OwoJZm9yZWFjaCAoJGllZF9wbHVnaW5fcHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsK CQlpZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7CgkJCSRp ZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCdwcmVmc19pZD0xLCBuYW1lPScuZG9RdW90 ZSgkcHJlZikuJywgdmFsPScuZG9RdW90ZShkb1NsYXNoKCRkZmx0KSkuJyxldmVudD0iaWVk X3BsdWdpbiInKTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgnaWVkX3Bs dWdpbl9wcmVmc19pbnN0YWxsZWQnKTsKCWllZF9wbHVnaW5fc2V0dXAoJG1lc3NhZ2UpOwp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJlZnNfcmVtb3ZlKCkgewoJZ2xv YmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG1lc3NhZ2UgPSAnJzsKCWZvcmVhY2ggKGFycmF5 X21lcmdlKCRpZWRfcGx1Z2luX3ByZWZzWzBdLCRpZWRfcGx1Z2luX3ByZWZzWzFdKSBhcyAk cHJlZiA9PiAkZGZsdCkgewoJCWlmIChmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUn LCRwcmVmKSkgewoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3ByZWZzJywnbmFtZT0nLmRv UXVvdGUoJHByZWYpKTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgnaWVk X3BsdWdpbl9wcmVmc19kZWxldGVkJyk7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsK fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3VwZGF0ZSgpIHsKCWds b2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRtZXNzYWdlID0gJyc7CgkkcG9zdCA9IGRvU2xh c2goc3RyaXBQb3N0KCkpOwoJZm9yZWFjaCAoJGllZF9wbHVnaW5fcHJlZnNbMF0gYXMgJHBy ZWYgPT4gJGRmbHQpIHsKCQlpZiAoaXNzZXQoJHBvc3RbJHByZWZdKSkgewoJCQlzYWZlX3Vw ZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICciLiRwb3N0WyRwcmVmXS4iJyIsICJuYW1lID0g JyIuZG9TbGFzaCgkcHJlZikuIicgYW5kIHByZWZzX2lkID0gMSIpOwoJCX0KCX0KCSRtZXNz YWdlID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsKCWllZF9wbHVnaW5fc2V0dXAoJG1l c3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fZ1R4dCgkd2hhdCwg JGF0dHMgPSBhcnJheSgpKSB7CgkkbGFuZyA9IGFycmF5KAoJCSdpZWRfcGx1Z2luX3ByZWZz X2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcsCgkJJ2llZF9wbHVnaW5f cHJlZnNfZGVsZXRlZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQnLAoJCSdpZWRfcGx1Z2lu X2NoZWNrX3R5cGUnID0+ICdDaGVjayB5b3VyIHBsdWdpbiB0eXBlIScsCgkJJ2llZF9wbHVn aW5fY29tcHJlc3MnID0+ICdaaXAnLAoJCSdpZWRfcGx1Z2luX2VkaXRvcicgPT4gJ1BsdWdp biBlZGl0b3InLAoJCSdpZWRfcGx1Z2luX2VkaXRvcl9wYXRoJyA9PiAnUGx1Z2luIGVkaXRv ciBwYXRoIFVSTCcsCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJyA9PiAnUGx1Z2luIGVk aXRvciB3aWR0aCAoY2hhcnMpJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcicgPT4gJ0hl bHAgZWRpdG9yJywKCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9PiAnSGVscCBl ZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4gJ1BIUCBl eHBvcnQgb3JkZXInLAoJKTsKCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsK fSI7czozOiJtZDUiO3M6MzI6ImRkN2ZhNWM2ZTQ4Mjk5M2RmMDhjYTk0YTI5OWUwYmY3Ijt9