# Name: ied_plugin_composer v0.81 # Type: Admin side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMzp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjc6InZlcnNp b24iO3M6NDoiMC44MSI7czo4OiJyZXZpc2lvbiI7czowOiIiO3M6NjoiYXV0aG9yIjtzOjQz OiJZdXJhIExpbm55ayAvIFN0ZWYgRGF3c29uIC8gU3RldmUgRGlja2luc29uIjtzOjEwOiJh dXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5jb20vIjtzOjExOiJkZXNjcmlw dGlvbiI7czozMjoiV3JpdGUgYW5kIHB1Ymxpc2ggcGx1Z2lucyBlYXNpbHkiO3M6NToib3Jk ZXIiO3M6MToiNSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6MTA6ImxvYWRfb3JkZXIiO3M6MToi NSI7czo0OiJoZWxwIjtzOjI1MTU3OiIJPHA+PGRpdiBpZD0iaWVkX2hlbHAiPjwvcD4KCgk8 aDEgaWQ9InRvcCI+SW5zcGlyZWQgcGx1Z2luIGNvbXBvc2VyPC9oMT4KCgk8cD5UaGlzIHBs dWdpbiBjcmVhdGVzIGEgbmV3IHBhZ2UgdW5kZXIgdGhlICYjODIxNjtFeHRlbnNpb25zJiM4 MjE3OyB0YWIgd2hlcmUgeW91IGNhbiBlZGl0IHBsdWdpbnMgdGhhdCBhcmUgYWxyZWFkeSBp bnN0YWxsZWQgaW4gVGV4dHBhdHRlcm4gYW5kIHJlZ2lzdGVyIG5ldyBwbHVnaW5zLjwvcD4K Cgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJCTxsaT5DcmVhdGUs IGVkaXQgb3IgdXBsb2FkIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCB0aGVuIHB1 Ymxpc2ggeW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gcGx1Z2luIGZvcm1hdCAoc2VlIGFuIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9kb3dubG9hZHMvZXhhbXBsZV9wbHVnaW5fdGVtcGxhdGUudHh0Ij5leGFtcGxl PC9hPik8L2xpPgoJCTxsaT5GdWxsIHN1cHBvcnQgZm9yIHRoZSBvZmZpY2lhbCA8YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0 ZS50eHQiPnplbV90cGwucGhwIHBsdWdpbiB0ZW1wbGF0ZTwvYT4uIFRoZSA8YSBocmVmPSJo dHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZV9j b2RlX2ZpcnN0LnR4dCI+bW9kaWZpZWQgdmVyc2lvbjwvYT4gYnkgPGEgaHJlZj0iaHR0cDov L3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1Z2luLWNv bXBpbGVyIj5uZXQtY2FydmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIxNjtzdHls ZSYjODIxNzsgc2VjdGlvbiBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0ZXh0LiBU aGUgUGx1Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9z cGFuPiBzZWN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0gYWNjb3Jk aW5nbHkuIEl0IHdpbGwgYWxzbyByZWFkIDxzcGFuIGNsYXNzPSJjYXBzIj5TVk48L3NwYW4+ ICRMYXN0Q2hhbmdlZFJldmlzaW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVyKTwvbGk+ CgkJPGxpPkV4cG9ydCBwbHVnaW5zIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLCBhbGxvd2lu ZyB5b3UgdG8gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNvbXBvc2Vy IG9yIHlvdXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmlsZSBpbiB0 aGUgcGx1Z2luX2NhY2hlX2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIENvbXBvc2VyIGFu ZCBwdWJsaXNoIHlvdXIgcGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUgYm90dG9t IG9mIHRoZSBQbHVnaW4gQ29tcG9zZXImIzgyMTc7cyA8YSBocmVmPSIjZWRpdHBhZ2UiPkVk aXQgcGFnZTwvYT4gZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVtYmVyIHRvIHNhdmUgeW91 ciBjaGFuZ2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9wYXN0aW5nIHRoZSBjb2Rl ISBZb3UgY2FuIGV4cG9ydCBhczoKCTx1bD4KCQk8bGk+YSBzdGFuZGFyZCBCQVNFNjQtZW5j b2RlZCB0ZXh0IGZpbGU8L2xpPgoJCTxsaT5hIGd6aXBwZWQgdmVyc2lvbiAodXNlZnVsIGZv ciBsYXJnZSBwbHVnaW5zKTwvbGk+CgkJPGxpPmEgcGhwIGZpbGUgaW4gdGhlIHN0YW5kYXJk IHRlbXBsYXRlIGZvcm1hdDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPldoZW4gZXhwb3J0aW5n LCBmaWxlcyBjYW4gYmUgc2F2ZWQgd2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sgZmlyc3Qg b3IgdGhlIGhlbHAgYmxvY2sgZmlyc3QsIGFuZCB5b3UgY2FuIGNoYW5nZSB0aGUgb3V0cHV0 IGZpbGVuYW1lIGZvcm1hdCB0byB0YXN0ZS4gVXNlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdl Ij5TZXR1cCBidXR0b248L2E+IHRvIGNvbmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9y IGFsbCBwbHVnaW4gdHlwZXM6Cgk8dWw+CgkJPGxpPkNsaWVudCArIEFkbWluPC9saT4KCQk8 bGk+Q2xpZW50LXNpZGUgb25seTwvbGk+CgkJPGxpPkFkbWluLXNpZGUgb25seTwvbGk+CgkJ PGxpPkxpYnJhcnkgcGx1Z2luczwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPlN1cHBvcnQgZm9y IHNwZWNpZnlpbmcgYSByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciBpZiB5b3VyIHBs dWdpbiBuZWVkcyBzcGVjaWFsIHBvd2Vycy4gJiM4MjE2OzUmIzgyMTc7IGlzIHRoZSBkZWZh dWx0LiBOb3RlIHRoYXQgaWYgdXNpbmcgdGhlIHBsdWdpbiBjYWNoZSBkaXJlY3RvcnkgdGhp cyBmZWF0dXJlIGlzIDxlbT5vbmx5IGF2YWlsYWJsZSBpZiB0aGUgPGNvZGU+JHBsdWdpblsm IzM5O29yZGVyJiMzOTtdPC9jb2RlPiBzdHJpbmcgaXMgaW4gdGhlIHRlbXBsYXRlIHRvIGJl Z2luIHdpdGguPC9lbT4gU28gaWYgeW91ciBsb2FkIG9yZGVyIGtlZXBzIHJldHVybmluZyB0 byAmIzgyMTY7NSYjODIxNzssIGVkaXQgeW91ciB0ZW1wbGF0ZSBkaXJlY3RseSB0byBhZGQg dGhhdCBzdHJpbmcgb3IgcGFzdGUgeW91ciBwbHVnaW4gaW50byB0aGUgcmVsZXZhbnQgcGFy dHMgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZW1w dHlfcGx1Z2luX3RlbXBsYXRlLnR4dCI+ZW1wdHkgcGx1Z2luIHRlbXBsYXRlPC9hPiBhbmQg dXBsb2FkIGl0PC9saT4KCQk8bGk+SGVscCB0ZXh0IGNhbiBiZSB3cml0dGVuIGluIFRleHRp bGUgb3IgKFgpSFRNTC4gU3R5bGVzIGNhbiBiZSBhZGRlZCB0byB0aGUgaGVscCBzZWN0aW9u PC9saT4KCQk8bGk+VGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1 bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMzA4OSI+VGlueU1DRSA8c3Bh biBjbGFzcz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj4gZWRpdG9yPC9hPiBmb3IgdGhlIGhlbHAg c2VjdGlvbiBvciA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hv d2ZpbGVzLnBocD9ncm91cF9pZD0xNjQwMDgiPkVkaXQgQXJlYTwvYT4gZm9yIGNvZGUgbWFy a3VwICh0aGFua3MgdmFyaWFhcykuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0 dXA8L2E+IGFuZCA8YSBocmVmPSIjbm90ZXMiPm5vdGVzPC9hPiBzZWN0aW9ucyBmb3IgbW9y ZSBvbiB0aGVzZSBlZGl0b3JzPC9saT4KCQk8bGk+QnVpbHQtaW4gVGV4dGlsZSBoZWxwIHZp ZXdlciAodGhhbmtzIHRvIG5ldC1jYXJ2ZXImIzgyMTc7cyA8YSBocmVmPSJodHRwOi8vdHhw LXBsdWdpbnMubmV0Y2FydmluZy5jb20vcGx1Z2lucy9wbHVnaW4taGVscC12aWV3ZXIiPlBs dWdpbiBIZWxwIFZpZXdlcjwvYT4pIHRvIGFsbG93IHlvdSB0byBwcmV2aWV3IHlvdXIgSGVs cCB0ZXh0IGR1cmluZyBkZXZlbG9wbWVudCAodGhlIHR3byB2aWV3ZXJzIHdpbGwgaGFwcGls eSBjby1leGlzdCBpZiB5b3Ugd2lzaCk8L2xpPgoJCTxsaT5SZXNpemFibGUgdGV4dGFyZWEs IHBsdXMgY2hhcmFjdGVyIGxpbWl0L2NvdW50ZXJzIHNvIHRoZXJlJiM4MjE3O3MgbGVzcyBj aGFuY2Ugb2YgeW91IG1ha2luZyB0aGUgcGx1Z2luIG9yIGRvY3MgdG9vIGJpZyB0byBmaXQg aW4gdGhlIGRhdGFiYXNlPC9saT4KCQk8bGk+U3VwcG9ydCBmb3Igc2V0dGluZyBhIGNvZGUg JiM4MjIwO3Jlc3RvcmUgcG9pbnQmIzgyMjE7IGFuZCByb2xsaW5nIGJhY2sgdG8gdGhhdCBw b2ludCBpZiB0aGluZ3MgZ28gc2lkZXdheXMuIEFsc28gdXNlZnVsIGZvciByZXR1cm5pbmcg cGx1Z2luIHNvdXJjZSBjb2RlIHRvIGl0cyBhcy1pbnN0YWxsZWQgc3RhdGU8L2xpPgoJPC91 bD4KCgk8aDIgaWQ9ImF1dGhvcnMiPkF1dGhvcnM8L2gyPgoKCTxwPk9yaWdpbmFsIHBsdWdp bjogPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvZmVlZGJhY2svIj5ZdXJhIExp bm55azwvYT48YnIgLz4KTW9kaWZpY2F0aW9ucyAodjAuNSspOiA8YSBocmVmPSJodHRwOi8v c3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPjxiciAvPgpBIHRv dWNoIG9mIGNsYXNzOiA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0Y2FydmluZy5j b20vY29udGFjdCI+U3RldmUgRGlja2luc29uPC9hPjxiciAvPgpQbHVzIGhlbHAgZnJvbSBh IGhvc3Qgb2YgZm9ydW0gY29udHJpYnV0b3JzIHRvbyBudW1lcm91cyB0byBtZW50aW9uLiBZ b3Uga25vdyB3aG8geW91IGFyZSA7LSk8L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxs YXRpb24gLyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiAo djAuNSBhbmQgYWJvdmUpIGZyb20gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3 Ij5zdGVmZGF3c29uLmNvbTwvYT4gKHByZXZpb3VzIHZlcnNpb25zIGFyZSBzdGlsbCBhdmFp bGFibGUgb24gdGhlIDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJlZC5raWV2LnVhL3R4cC9pZWRf cGx1Z2luX2NvbXBvc2VyIj5JbnNwaXJlZCBob21lcGFnZTwvYT4pLCBwYXN0ZSB0aGUgY29k ZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQ bHVnaW5zIHBhZ2UsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5W aXNpdCB0aGUgRXh0ZW5zaW9ucyAtJmd0OyBQbHVnaW4gQ29tcG9zZXIgdGFiIGFuZCBjbGlj ayB0aGUgU2V0dXAgYnV0dG9uIGluIHRoZSB0b3AtcmlnaHQgb2YgdGhlIHNjcmVlbi4gRnJv bSBoZXJlIHlvdSBjYW4gSW5zdGFsbCwgRGVsZXRlIGFuZCBTYXZlIHRoZSBwbHVnaW4gcHJl ZmVyZW5jZXMuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXAgc2VjdGlvbjwv YT4gZm9yIGRldGFpbHMuPC9wPgoKCTxwPlRvIHJlbW92ZSB0aGUgUGx1Z2luIENvbXBvc2Vy IChub29vbyEpIHZpc2l0IHRoZSBTZXR1cCBwYWdlIGFnYWluIGZyb20gdGhlIFBsdWdpbiBD b21wb3NlciB0YWIsIGhpdCBEZWxldGUgdG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlcywgdGhl biBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW4gYXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0m Z3Q7IFBsdWdpbnMgcGFnZS48L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxo MyBpZD0ibGlzdHBhZ2UiPkxpc3QgcGFnZTwvaDM+CgoJPHA+VGhlcmUgaXMgYSA8YSBocmVm PSIjc2V0dXBwYWdlIj5zZXR1cDwvYT4gYnV0dG9uIHRvIGFsbG93IHlvdSB0byBjb25maWd1 cmUgdmFyaW91cyBvcHRpb25zIGluIHRoZSBDb21wb3Nlciwgd2hpbGUgdGhlIHJlc3Qgb2Yg dGhlIHBhZ2UgbGlzdHMgYWxsIGluc3RhbGxlZCBwbHVnaW5zLiBUaGUgY29sdW1ucyBhcmU6 PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5QbHVnaW48L3N0cm9uZz4gOiBjbGljayB0aGUg cGx1Z2luIG5hbWUgdG8gPGEgaHJlZj0iI2VkaXRwYWdlIj5lZGl0PC9hPiBpdDwvbGk+CgkJ PGxpPjxzdHJvbmc+QXV0aG9yPC9zdHJvbmc+IDogaWYgYXZhaWxhYmxlLCBjbGljayB0aGUg YXV0aG9yIHRvIGdvIHRvIHRoZWlyIHNpdGU8L2xpPgoJCTxsaT48c3Ryb25nPlZlcnNpb24g KE1vZGlmaWVkKTwvc3Ryb25nPiA6IHNob3dzIHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVy IGFuZCB3aGV0aGVyIHRoZSBwbHVnaW4gaGFzIGJlZW4gbW9kaWZpZWQgZnJvbSB3aGVuIGl0 IHdhcyBlaXRoZXIgY3JlYXRlZCBvciBpbnN0YWxsZWQuIElmIGl0IGhhcywgeW91IGNhbiBj bGljayB0aGUgdmVyc2lvbiBudW1iZXIgdG8gcmVzdG9yZSB0aGUgcGx1Z2luIGNvZGUgdG8g aXRzIGluc3RhbGxlZCBzdGF0ZSBvciBsYXN0IDxhIGhyZWY9IiNyZXN0b3JlIj5yZXN0b3Jl IHBvaW50PC9hPjwvbGk+CgkJPGxpPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz4gOiBi cmllZmx5LCB3aGF0IHRoZSBwbHVnaW4gZG9lczwvbGk+CgkJPGxpPjxzdHJvbmc+UHVibGlz aDwvc3Ryb25nPiA6IHRocmVlIGxpbmtzCgk8dWw+CgkJPGxpPjxlbT5QdWJsaXNoPC9lbT4g OiBleHBvcnRzIHRoZSBwbHVnaW4gYXMgYSAudHh0IGZpbGUgZm9yIGRpc3RyaWJ1dGlvbiB0 byBvdGhlciBUZXh0cGF0dGVybiB1c2VyczwvbGk+CgkJPGxpPjxlbT5aaXA8L2VtPiA6IGV4 cG9ydHMgdGhlIHBsdWdpbiBhcyBhIGNvbXByZXNzZWQgKGd6aXBwZWQpIC50eHQgZmlsZSBm b3IgZGlzdHJpYnV0aW9uPC9saT4KCQk8bGk+PGVtPkhlbHA8L2VtPiA6IGRpc3BsYXlzIHRo ZSAodGV4dGlsZSBwcm9jZXNzZWQpIHBsdWdpbiBkb2N1bWVudGF0aW9uIChpZiB0aGVyZSBp cyBhbnkpLiBDYW4gYWxzbyBiZSB2aWV3ZWQgZnJvbSB0aGUgRWRpdCBwYWdlPC9saT4KCTwv dWw+PC9saT4KCQk8bGk+PHN0cm9uZz5PcmRlcjwvc3Ryb25nPiA6IHRoZSByZWNvbW1lbmRl ZCBwbHVnaW4gbG9hZCBvcmRlciBmcm9tIDEgKGxvYWRlZCBmaXJzdCkgdG8gOSAobG9hZGVk IGxhc3QpLiA1IGlzIGRlZmF1bHQ8L2xpPgoJCTxsaT48c3Ryb25nPkFjdGl2ZTwvc3Ryb25n PiA6IGVuYWJsZSBvciBkaXNhYmxlIGEgcGx1Z2luIGJ5IGNsaWNraW5nIGVudHJpZXMgaW4g dGhpcyBjb2x1bW48L2xpPgoJCTxsaT48c3Ryb25nPng8L3N0cm9uZz4gOiBkZWxldGUgdGhl IHBsdWdpbjwvbGk+Cgk8L3VsPgoKCTxwPklmIHlvdSBhcmUgdXNpbmcgdGhlIHBsdWdpbl9j YWNoZV9kaXIgKEFkbWluIC0mZ3Q7IEFkdmFuY2VkIFByZWZzKSwgYW55IHBsdWdpbnMgaW4g dGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZvcm1hdCB1cGxvYWRlZCB0byB0aGlzIGRpcmVjdG9y eSB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBhbmQgdGVzdGlu Zy4gWW91IGNhbiBlZGl0IGFuZCBwdWJsaXNoIHRoZSBwbHVnaW5zIGluIHRoZSBzYW1lIG1h bm5lciBhcyB0aGUgcmVndWxhciwgaW5zdGFsbGVkIHBsdWdpbnMgYWJvdmUsIHdpdGggdGhl IGZvbGxvd2luZyBleGNlcHRpb25zOjwvcD4KCgk8b2w+CgkJPGxpPlRoZXJlIGlzIG5vIGNv bmNlcHQgb2YgJiM4MjE2O21vZGlmaWVkJiM4MjE3OyBvciBvZiByZXN0b3JlIHBvaW50cyBh cyB0aGUgZmlsZXMgYWx3YXlzIHJlcHJlc2VudCB0aGUgbW9zdCB1cC10by1kYXRlIHZlcnNp b248L2xpPgoJCTxsaT5DYWNoZWQgcGx1Z2lucyBhcmUgJiM4MjIwO2Fsd2F5cyBvbiYjODIy MTsgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGluc3RhbGxlZC4gVG8gZGVhY3RpdmF0ZSB0aGUg cGx1Z2luIHRoZSBmaWxlIG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwbHVnaW4gY2FjaGUg ZGlyZWN0b3J5PC9saT4KCQk8bGk+VGhlIHJlY29tbWVuZGVkIGxvYWQgb3JkZXIgY2Fubm90 IGJlIGNoYW5nZWQgZnJvbSB0aGUgbGlzdCBwYWdlOyBpdCBjYW4gb25seSBiZSBhbHRlcmVk IHZpYSB0aGUgPGEgaHJlZj0iI2VkaXRwYWdlIj5FZGl0PC9hPiBwYWdlPC9saT4KCTwvb2w+ CgoJPGg0PkNyZWF0aW5nIGFuZCBuYW1pbmcgcGx1Z2luczwvaDQ+CgoJPHA+VGhlcmUgYXJl IHR3byB3YXlzIG9mIGNyZWF0aW5nIHBsdWdpbnMgZnJvbSB0aGUgUGx1Z2luIENvbXBvc2Vy IGxpc3QgcGFnZS48L3A+CgoJPHA+VGhlIGZpcnN0IGlzIHRvIGNyZWF0ZSBhIGJsYW5rLCBl bXB0eSBwbHVnaW47IHVzZSB0aGUgdGV4dCBib3ggYXQgdGhlIHRvcCBmb3IgdGhpcy48L3A+ CgoJPHA+VGhlIHNlY29uZCBpcyB0byB1cGxvYWQgb25lIHVzaW5nIHRoZSBCcm93c2UvdXBs b2FkIGJveCBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBZb3UgY2FuIHVwbG9hZCBjb2Rl IGluIGVpdGhlciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUgZm9ybWF0IChlaXRoZXIgY29k ZS1maXJzdCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRoIDxzcGFuIGNsYXNzPSJjYXBz Ij5DU1M8L3NwYW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2FkIGEgPHNwYW4gY2xhc3M9ImNh cHMiPlBIUDwvc3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUgb25seS4gPGVtPk5vdGUgdGhp cyBpcyB0aGUgb25seSBwbGFjZSB5b3UgY2FuIHVwbG9hZCByYXcgPHNwYW4gY2xhc3M9ImNh cHMiPlBIUDwvc3Bhbj4gd2l0aCB0aGUgPGNvZGU+Jmx0Oz9waHAgPyZndDs8L2NvZGU+IG1h cmtlcnMuIEV2ZXJ5d2hlcmUgZWxzZSB5b3Ugc2hvdWxkIHVzZSBhIGZ1bGwgdGVtcGxhdGUu PC9lbT48L3A+CgoJPHA+RXZlcnkgcGx1Z2luIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggYSB0 aHJlZS1sZXR0ZXIgcHJlZml4LCBhbiB1bmRlcnNjb3JlLCB0aGVuIHRoZSBuYW1lIG9mIHRo ZSBwbHVnaW4uIFlvdSBhcmUgZnJlZSB0byBjaG9vc2UgeW91ciBvd24gdGhyZWUtbGV0dGVy IHByZWZpeCAodXN1YWxseSB5b3VyIGluaXRpYWxzKSBzdWJqZWN0IHRvIDxhIGhyZWY9Imh0 dHA6Ly93d3cudGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPVJlc2VydmVk X1BsdWdpbl9QcmVmaXhlcyI+YXZvaWRpbmcgb25lcyBhbHJlYWR5IHRha2VuIGJ5IG90aGVy IHBsdWdpbiBhdXRob3JzPC9hPiBzbyBwZW9wbGUgY2FuIGdldCB0byBrbm93IHlvdXIgd29y ay4gUGx1cywgaXQgZ3JvdXBzIHlvdXIgcGx1Z2lucyB0b2dldGhlciBpbiB0aGUgcGx1Z2lu IGFyY2hpdmUuPC9wPgoKCTxwPkFsbCBmdW5jdGlvbnMsIHZhcmlhYmxlcyAoaW5jbHVkaW5n IDxzcGFuIGNsYXNzPSJjYXBzIj5ET008L3NwYW4+IG5vZGVzKSwgPHNwYW4gY2xhc3M9ImNh cHMiPkNTUzwvc3Bhbj4gY2xhc3NlcywgYW5kIGFueXRoaW5nIGVsc2UgeW91IGluamVjdCBp bnRvIHRoZSBnbG9iYWwgc2NvcGUgc2hvdWxkIGJlIHByZWZpeGVkIGJ5IDxzdHJvbmc+YXQg bGVhc3Q8L3N0cm9uZz4geW91ciB0aHJlZSBsZXR0ZXIgY29kZTsgcHJlZmVyYWJseSB0aGUg d2hvbGUgcGx1Z2luIG5hbWUgKG9yIGFicmlkZ2VkIHZlcnNpb24gdGhlcmVvZikgdG8gYXZv aWQgbmFtZXNwYWNlIGNsYXNoZXMgd2l0aCB5b3VyIG93biBhbmQgb3RoZXIgcGx1Z2lucy48 L3A+CgoJPGgzIGlkPSJlZGl0cGFnZSI+RWRpdCBwYWdlPC9oMz4KCgk8cD5UaGUgRWRpdCBw YWdlIGlzIHdoZXJlIHlvdSBjcmVhdGUgeW91ciBtYXN0ZXJwaWVjZS4gSXQgaXMgZGl2aWRl ZCBpbnRvIHZhcmlvdXMgc2VjdGlvbnMgYW5kIGJveGVzLCBhcyBkZXRhaWxlZCBoZXJlOjwv cD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luPC9zdHJvbmc+IDogdGhlIG5hbWUgb2Yg eW91ciBwbHVnaW4sIHdoaWNoIHlvdSBjYW4gY2hhbmdlIGF0IGFueSB0aW1lLiBOb3RlIHRo YXQgaWYgeW91IGFyZSBlZGl0aW5nIGEgZmlsZSBmcm9tIHRoZSBwbHVnaW4gY2FjaGUgZGly ZWN0b3J5IGFuZCB0aGUgPGNvZGU+JHBsdWdpblsmIzM5O25hbWUmIzM5O108L2NvZGU+IHJv dyBpcyBjb21tZW50ZWQgb3V0IGluIHRoZSBmaWxlLCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0 byBjaGFuZ2UgdGhlIHBsdWdpbiBuYW1lOyBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgbmFtZSBv ZiB0aGUgZmlsZS48YnIgLz4KVG8gdGhlIHJpZ2h0IG9mIHRoaXMgYm94IHdpbGwgYmUgb25l IG9mIHR3byBpdGVtczoKCTx1bD4KCQk8bGk+PHN0cm9uZz5FbmFibGU8L3N0cm9uZz4gOiBp ZiB0aGUgcGx1Z2luIGlzIGEgcmVndWxhciAoaW5zdGFsbGVkKSBwbHVnaW4sIHRoaXMgY2hl Y2tib3ggYWxsb3dzIHlvdSB0byBzd2l0Y2ggdGhlIHBsdWdpbiBvbiBhbmQgb2ZmPC9saT4K CQk8bGk+PHN0cm9uZz4oZmlsZSBuYW1lKTwvc3Ryb25nPiA6IGlmIHlvdSBhcmUgZWRpdGlu ZyBhIHBsdWdpbiBpbiB0aGUgY2FjaGUgZGlyZWN0b3J5LCB0aGUgY3VycmVudCBmaWxlbmFt ZSB5b3UgYXJlIHdyaXRpbmcgdG8gd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZDwvbGk+Cgk8 L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+U291cmNlIGNvZGU8L3N0cm9uZz4gOiB5b3VyIHBs dWdpbiBjb2RlIGdvZXMgaGVyZS4gVGhlIGJveCBpcyByZXNpemFibGUgYnkgZ3JhYmJpbmcg dGhlIDxjb2RlPi0tLSArIC0tLTwvY29kZT4gYmVsb3cgdGhlIGJveCBhbmQgZHJhZ2dpbmcu IFRoZSBib3ggc2l6ZSB3aWxsIGJlIHJlbWVtYmVyZWQgdmlhIGEgY29va2llIGZvciAzMCBk YXlzIGZyb20geW91ciBsYXN0IGFkanVzdG1lbnQuPGJyIC8+ClBsdWdpbnMgYXJlIGxpbWl0 ZWQgdG8gNjRrQiBvZiBjb2RlIHNvIHRoZXJlIGlzIGFsc28gYSBjaGFyYWN0ZXIgY291bnRk b3duIGp1c3QgYmVsb3cgdGhlIGVkaXQgYm94LiBJZiB5b3Ugc3RhcnQgYXBwcm9hY2hpbmcg dGhlIGxpbWl0LCBpdCBtaWdodCBiZSB3b3J0aCBjb25zaWRlcmluZyBzcGxpdHRpbmcgeW91 ciBwbHVnaW4gaW50byBhIGZldyBwYXJ0czwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIHR5 cGU8L3N0cm9uZz4gOiBjaG9vc2Ugb25lIG9mIHRoZSB0eXBlcyB0aGF0IGJlc3QgZml0cyB0 aGUgaW50ZW5kZWQgdXNlIG9mIHlvdXIgcGx1Z2luLiBJZiB5b3UgY2hvb3NlICYjODIxNjtD bGllbnQmIzgyMTc7IGFuZCB0cnkgdG8gYWNjZXNzIHRoZSBhZG1pbiBzaWRlIGluIHlvdXIg Y29kZSwgYSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkIHdoZW4gdGhlIHBsdWdpbiBpcyBzYXZl ZCBzbyB5b3UgY2FuIGNob29zZSBhIG1vcmUgYXBwcm9wcmlhdGUgdHlwZTwvbGk+CgkJPGxp PjxzdHJvbmc+TG9hZCBvcmRlcjwvc3Ryb25nPiA6IGNob29zZSB0aGUgcmVjb21tZW5kZWQg b3JkZXIgaW4gd2hpY2ggeW91IHRoaW5rIHlvdXIgcGx1Z2luIHNob3VsZCBiZSBsb2FkZWQg YnkgdXNlcnMuIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBkZWZhdWx0IG9mICYjODIxNjs1JiM4 MjE3OyBpcyBmaW5lIGJ1dCBmb3Igc3BlY2lhbCBjYXNlcyB3aGVyZSB5b3VyIHBsdWdpbiBo YXMgdG8gc2V0IHVwIGFuIGVudmlyb25tZW50IG9yIGhhcyB0byB3YWl0IGZvciBvdGhlciBw bHVnaW5zIHRvIGxvYWQgZmlyc3QsIHlvdSBtaWdodCByZXF1aXJlIG9uZSBvZiB0aGUgbnVt YmVycyBlaXRoZXIgc2lkZS4gQmUgYXdhcmUgdGhhdCB0aGlzIGlzIGEgPGVtPnJlY29tbWVu ZGF0aW9uPC9lbT4gYW5kIGlzIG92ZXJyaWRhYmxlIGJ5IHRoZSBzaXRlIGFkbWluLiBJZiB0 aGUgcGx1Z2luIGlzIGFscmVhZHkgZGVwbG95ZWQgb24gYSBzaXRlLCB0aGUgbG9hZCBvcmRl ciBhbHJlYWR5IHNldCB3aWxsIGJlIHVzZWQgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBv ZiB0aGlzIHZhbHVlLiBPbmx5IG5ldyBpbnN0YWxsYXRpb25zIHdpbGwgYmUgc2V0IHRvIHRo aXMgdmFsdWUgYnkgZGVmYXVsdDwvbGk+CgkJPGxpPjxzdHJvbmc+VmVyc2lvbjwvc3Ryb25n PiA6IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgeW91ciBwbHVnaW4uIFRvIHRoZSByaWdodCBv ZiB0aGlzIGJveCB3aWxsIGJlIG9uZSBvZiB0d28gaXRlbXM6Cgk8dWw+CgkJPGxpPjxzdHJv bmc+UmVzdG9yZSBwb2ludDwvc3Ryb25nPiA6IHNlbGVjdGluZyB0aGlzIGNoZWNrYm94IHdp bGwgKHVwb24gc2F2ZSkgc3RvcmUgdGhlIGN1cnJlbnQgY29kZSBhcyBhIGJhc2VsaW5lIHRv IHdoaWNoIHlvdSBtYXkgJiM4MjIwO3JvbGwgYmFjayYjODIyMTsgdG8gYXQgYSBsYXRlciBk YXRlLiBTZWUgPGEgaHJlZj0iI3Jlc3RvcmUiPnJlc3RvcmUgcG9pbnRzPC9hPiBmb3IgbW9y ZTwvbGk+CgkJPGxpPjxzdHJvbmc+UmVuYW1lIGZpbGU8L3N0cm9uZz4gOiBieSBkZWZhdWx0 LCB3aGVuIHlvdSBzYXZlIGEgZmlsZSB0aGF0IGlzIGJlaW5nIGVkaXRlZCBpbiB0aGUgcGx1 Z2luIGNhY2hlIGRpcmVjdG9yeSwgaXQgaXMgb3ZlcndyaXR0ZW4gd2l0aCB5b3VyIGNoYW5n ZXMuIE9uY2UgYSBwbHVnaW4gaXMgcmVsZWFzZWQgeW91IHdvdWxkIG5vcm1hbGx5IGRvd25s b2FkIGEgY29weSB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj4gZnJvbSB0aGUg cGx1Z2luX2NhY2hlX2RpciBmb3Igc2FmZWtlZXBpbmcuIElmIHlvdSB0aGVuIHN1YnNlcXVl bnRseSBtb2RpZnkgdGhlIHBsdWdpbiBhbmQgaW5jcmVhc2UgdGhlIHZlcnNpb24gbnVtYmVy LCBpdCBtYXkgbm90IGJlIGRlc2lyYWJsZSB0byB3cml0ZSBpdCBvdmVyIHRoZSBzYW1lIGZp bGUuIENoZWNraW5nIHRoaXMgYm94IHdpbGwgKHVwb24gc2F2ZSkgcmVuYW1lIHRoZSBmaWxl IGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQg dmVyc2lvbiBudW1iZXIuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXAgcGFn ZTwvYT4gZm9yIGRldGFpbHMgb24gY3VzdG9taXNpbmcgdGhlIGZpbGVuYW1lIGZvcm1hdDwv bGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+QXV0aG9yPC9zdHJvbmc+IDogeW91ITwv bGk+CgkJPGxpPjxzdHJvbmc+V2Vic2l0ZTwvc3Ryb25nPiA6IHlvdXIgaG9tZSBwYWdlIG9y IHBsdWdpbiBwYWdlLiBXaWxsIGJlIGxpbmtlZCB0byB5b3VyIG5hbWUgaW4gdGhlIGxpc3Qg cGFnZTwvbGk+CgkJPGxpPjxzdHJvbmc+RGVzY3JpcHRpb248L3N0cm9uZz4gOiB2ZXJ5IGJy aWVmIG9uZS1saW5lciBkZXNjcmliaW5nIHlvdXIgcGx1Z2luJiM4MjE3O3MgY29yZSBmdW5j dGlvbiAvIHJlYXNvbiBmb3IgZXhpc3RlbmNlPC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4g SGVscDwvc3Ryb25nPiA6IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbGluZyB0aGUgcGx1Z2lu IHVzYWdlLiBDYW4gKHByb2JhYmx5IHNob3VsZCEpIGJlIHdyaXR0ZW4gdXNpbmcgPGEgaHJl Zj0iaHR0cDovL3RleHRpbGUudGhyZXNob2xkc3RhdGUuY29tLyI+VGV4dGlsZTwvYT4uIFRo ZXJlIHdlcmUgc29tZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3Zp ZXd0b3BpYy5waHA/aWQ9MjUzMjciPmxvb3NlIGRvY3VtZW50YXRpb24gZ3VpZGVsaW5lczwv YT4gcHJvcG9zZWQgdGhhdCBzZXJ2ZSBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQ8L2xpPgoJ CTxsaT48c3Ryb25nPlN0eWxlPC9zdHJvbmc+IDogQW55IDxzcGFuIGNsYXNzPSJjYXBzIj5D U1M8L3NwYW4+IHN0eWxlIHJ1bGVzIHlvdSB3aXNoIHRvIGFwcGx5IHRvIHlvdXIgZG9jdW1l bnRhdGlvbiB0byBtYWtlIGl0IG1vcmUgcHJldHR5LiBJdCYjODIxNztzIGJlc3QgdG8gdGFy Z2V0IHlvdXIgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgYnkgc3Vycm91bmRpbmcgdGhl IGVudGlyZSBQbHVnaW4gSGVscCBzZWN0aW9uIHdpdGggc29tZXRoaW5nIGxpa2U6IDxjb2Rl PiZsdDtkaXYgaWQ9JnF1b3Q7YWJjX2hlbHAmcXVvdDsmZ3Q7aDEuIERvY3MgZ28gaGVyZS4u LiZsdDsvZGl2Jmd0OzwvY29kZT4uPGJyIC8+Ck5vdGUgdGhhdCBib3RoIHRoZSBQbHVnaW4g SGVscCBhbmQgU3R5bGUgYXJlIGdvdmVybmVkIGJ5IGEgc2l6ZSBsaW1pdC4gU2luY2UgdGhl eSBhcmUgYm90aCBzdG9yZWQgaW4gdGhlIHNhbWUgNjRrQiBmaWVsZCwgdGhlIHNpemUgaXMg c2hhcmVkIGJldHdlZW4gdGhlbS4gU3R5bGVzIGFyZSA8ZW0+bm90PC9lbT4gcGFzc2VkIHRo cm91Z2ggdGhlIFRleHRpbGUgcHJvY2Vzc29yIGFuZCB5b3UgZG9uJiM4MjE3O3QgbmVlZCB0 byBhZGQgdGhlIDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IHRhZ3M7IHRoZSBDb21wb3Nl ciB3aWxsIGRvIHRoYXQgZm9yIHlvdTwvbGk+CgkJPGxpPjxzdHJvbmc+U2F2ZTwvc3Ryb25n PiA6IGNvbW1pdHMgdGhlIGNoYW5nZXM8L2xpPgoJCTxsaT48c3Ryb25nPlsgVmlldyBIZWxw IF08L3N0cm9uZz4gOiBzaG93cyB0aGUgZG9jdW1lbnRhdGlvbiBhcyB1c2VycyB3aWxsIHNl ZSBpdCAoaS5lLiBUZXh0aWxlIHByb2Nlc3NlZCBpbnRvIDxzcGFuIGNsYXNzPSJjYXBzIj5I VE1MPC9zcGFuPik8L2xpPgoJPC91bD4KCgk8cD5PbmNlIHlvdSBoYXZlIHNhdmVkIHlvdXIg cGx1Z2luLCB0aGVyZSBpcyBhIHNlY3Rpb24gcmlnaHQgYXQgdGhlIGJvdHRvbSB0aGF0IGFs bG93cyB5b3UgdG8gZXhwb3J0IHlvdXIgcGx1Z2luIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRz OjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIGNvZGUgZm9yIGRpc3RyaWJ1dGlv bjwvc3Ryb25nPiA6IGlzIGEgZGlyZWN0IGNvcHkgJiM4MjE2O24mIzgyMTc7IHBhc3RlIGFy ZWEgdGhhdCBjb250YWlucyB5b3VyIGVudGlyZSBwbHVnaW4gKyBkb2NzLiBZb3UgY2FuIHRh a2UgdGhpcyBlbnRpcmUgYXJlYSBhbmQgcGFzdGUgaXQgaW50byB0aGUgJiM4MjE2O0luc3Rh bGwgcGx1Z2luJiM4MjE3OyBib3ggb24gdGhlIEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFnZTwv bGk+CgkJPGxpPjxzdHJvbmc+RXhwb3J0IGFzIGFiY19teXBsdWdpbi50eHQ8L3N0cm9uZz4g OiBjb252ZXJ0cyB0aGUgcGx1Z2luIGhlbHAgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8 L3NwYW4+IGFuZCBzYXZlcyB0aGUgcGx1Z2luIHRvIHlvdXIgY29tcHV0ZXIgYXMgYSByZWRp c3RyaWJ1dGFibGUgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0dGVybiB1c2VycyB0byBp bnN0YWxsPC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJjX215cGx1Z2luLnR4dCAo Y29tcHJlc3NlZCk8L3N0cm9uZz4gOiBjb252ZXJ0cyB0aGUgcGx1Z2luIGhlbHAgdG8gPHNw YW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGFuZCBzYXZlcyB0aGUgcGx1Z2luIGFzIGEg cmVkaXN0cmlidXRhYmxlLCBnemlwcGVkIHRleHQgZmlsZSBmb3Igb3RoZXIgVGV4dHBhdHRl cm4gdXNlcnMgdG8gaW5zdGFsbC4gVXNlZnVsIGZvciBsYXJnZSBwbHVnaW5zIG9yIHRvIG9m ZmVyIGFuIGFsdGVybmF0aXZlIGZvciBwZW9wbGUgd2hvIGhhdmUgc3RyaW5nZW50IHNpemUg bGltaXRzIGltcG9zZWQgYnkgdGhlaXIgaG9zdDwvbGk+CgkJPGxpPjxzdHJvbmc+RXhwb3J0 IGFzIGFiY19teXBsdWdpbi5waHA8L3N0cm9uZz4gOiBzYXZlcyB0aGUgcGx1Z2luIGluIGEg VGV4dHBhdHRlcm4gc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LiBVc2VmdWwgZm9yIGtlZXBp bmcgdGhlIHBsdWdpbiBmb3IgeW91cnNlbGYgJiM4MjEyOyBjb21wbGV0ZSB3aXRoIFRleHRp bGUgbWFya3VwICYjODIxMjsgc28gaXQgY2FuIGJlIGxhdGVyIGVkaXRlZCBhbmQgcmUtaXNz dWVkIC8gdXBkYXRlZCBvciBzaGFyZWQgd2l0aCBvdGhlciBkZXZlbG9wZXJzIHdobyBoYXZl IHRoZSBQbHVnaW4gQ29tcG9zZXIgb3IgemVtX3RwbC5waHAgY29tcGlsZXI8L2xpPgoJPC91 bD4KCgk8cD5Ob3RlIHRoYXQgd2hlbiBleHBvcnRpbmcgYXMgYSBzdGFuZGFyZCBwbHVnaW4s IHRoZSBUZXh0aWxlIHByb2Nlc3NvciBhdHRlbXB0cyB0byBkZWNpZGUgaWYgeW91IGhhdmUg dXNlZCBUZXh0aWxlIG9yIG5vdDsgaXQgc2ltcGx5IGxvb2tzIGZvciBhIHRleHRpbGVkIGhl YWRlciAoPGNvZGU+aDEuPC9jb2RlPiB0aHJvdWdoIDxjb2RlPmg2LjwvY29kZT4pLiBSdW5u aW5nIHB1cmUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRocm91Z2ggVGV4dGls ZSBtYXkgb2NjYXNpb25hbGx5IGNhdXNlIGVuY29kaW5nIGlzc3VlcyBkZXBlbmRpbmcgb24g dGhlIG9yaWdpbmFsIGNoYXJhY3RlciBzZXQgdXNlZCBzbyBpdCBpcyBhbHdheXMgYmVzdCB0 byB0cnkgYW5kIHN0aWNrIHRvIFRleHRpbGUgYXMgdGhlIGRvY3VtZW50YXRpb24gc3lzdGVt LjwvcD4KCgk8aDMgaWQ9InJlc3RvcmUiPlJlc3RvcmUgcG9pbnRzPC9oMz4KCgk8cD5XaGVu IGEgcGx1Z2luIGlzIGluc3RhbGxlZCwgYSBjb3B5IGlzIGtlcHQgaW4gdGhlIGRhdGFiYXNl LiBJZiB0aGUgcGx1Z2luIGNvZGUgKG5vdCBoZWxwIHRleHQpIGlzIHN1YnNlcXVlbnRseSBl ZGl0ZWQsIHRoZSBwbHVnaW4gaXMgY29uc2lkZXJlZCAmIzgyMjA7bW9kaWZpZWQmIzgyMjE7 OyBpbmRpY2F0ZWQgaW4gdGhlIFBsdWdpbiBDb21wb3NlciBsaXN0IHBhZ2UgYW5kIEFkbWlu IC0mZ3Q7IFBsdWdpbnMgcGFnZS4gU29tZXRpbWVzIHlvdSBtYXkgd2lzaCB0byByZXZlcnQg YW55IGNoYW5nZXMgYmFjayB0byB0aGUgYXMtaW5zdGFsbGVkIHN0YXRlIGFuZCB0aGUgQ29t cG9zZXIgYWxsb3dzIHRoaXMuPC9wPgoKCTxwPkFueSB0aW1lIGEgcGx1Z2luIGlzIG1hcmtl ZCBhcyAmIzgyMTY7bW9kaWZpZWQmIzgyMTc7LCB0aGUgdmVyc2lvbiBudW1iZXIgYmVjb21l cyBjbGlja2FibGUgaW4gdGhlIDxhIGhyZWY9IiNsaXN0cGFnZSI+bGlzdDwvYT4gcGFnZS4g Q2xpY2tpbmcgaXQgKGFuZCBjb25maXJtaW5nIHlvdSBhcmUgc3VyZSkgd2lsbCB3aXBlIG91 dCBhbnkgY2hhbmdlcyB5b3UgbWFkZSBhbmQgcmV0dXJuIHRoZSBwbHVnaW4gdG8gaXRzIGlu c3RhbGxlZCBzdGF0ZS48L3A+CgoJPHA+RHVyaW5nIHRoZSBlZGl0aW5nIHByb2Nlc3Mgb2Yg eW91ciBvd24gcGx1Z2lucywgaXQgbWF5IGJlIHRoYXQgYXQgY2VydGFpbiB0aW1lcyB5b3Ug d2lzaCB0byBwdXQgYSBzdGFrZSBpbiB0aGUgZ3JvdW5kIGFuZCBzYXkgJiM4MjIwO3RoaXMg aXMgbXkgY3VycmVudCBiYXNlbGluZSB0aGF0IEkgbWlnaHQgd2FudCB0byByZXR1cm4gdG8g bGF0ZXImIzgyMjE7LiBQZXJoYXBzIHlvdSBhcmUgYWJvdXQgdG8gbWFrZSBzb21lIG1vbnN0 ZXIgZWRpdHMgb3IgdHJ5IHNvbWV0aGluZyBleHBlcmltZW50YWwgYW5kIHdhbnQgYW4gZWFz eSBmYWxsYmFjayBtZWNoYW5pc20uIFRoYXQmIzgyMTc7cyB3aGVyZSB0aGUgJiM4MjIwO1Jl c3RvcmUgcG9pbnQmIzgyMjE7IGNoZWNrYm94IGNvbWVzIGluLjwvcD4KCgk8cD5CeSBjaGVj a2luZyB0aGUgYm94IHdoZW4geW91IHNhdmUgeW91ciBwbHVnaW4sIHRoZSBjdXJyZW50IGNv ZGUgd2lsbCBiZWNvbWUgeW91ciBuZXcgcm9sbGJhY2sgcG9pbnQgYW5kIHRoZSBwbHVnaW4g d2lsbCBubyBsb25nZXIgYmUgbWFya2VkICYjODIyMDttb2RpZmllZCYjODIyMTsuIEFueSBj aGFuZ2VzIG1hZGUgYmVmb3JlaGFuZCB3aWxsIG5vdCBiZSByZWNvdmVyYWJsZSBzbyB5b3Ug d2lsbCBoYXZlIHRvIHJlbHkgb24geW91ciBvd24gYmFja3VwcyBpZiB5b3Ugd2lzaCB0byBn byBiYWNrIGZ1cnRoZXIuIEFueSBlZGl0cyB5b3UgbWFrZSBhZnRlciBjcmVhdGluZyBhIHJl c3RvcmUgcG9pbnQgY2FuIGJlIHVuZG9uZSBieSB2aXNpdGluZyB0aGUgbGlzdCBwYWdlIGFu ZCBjbGlja2luZyB0aGUgdmVyc2lvbiBudW1iZXIgbmV4dCB0byB5b3VyIHBsdWdpbi4gQ3Vy cmVudGx5LCBvbmx5IG9uZSByb2xsYmFjayBwb2ludCBjYW4gYmUgc3RvcmVkIGluIHRoZSBk YXRhYmFzZS48L3A+CgoJPGgzIGlkPSJzZXR1cHBhZ2UiPlNldHVwIHBhZ2U8L2gzPgoKCTxw PkNsaWNraW5nIFNldHVwIGZyb20gdGhlIG1haW4gPGEgaHJlZj0iI2xpc3RwYWdlIj5saXN0 PC9hPiBwYWdlIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHBsdWdpbiBwcmVmZXJlbmNlcy48L3A+ CgoJPHA+WW91IGNhbiBJbnN0YWxsIHRoZW0gJiM4MjEyOyB3aGljaCByZXRhaW5zIGFueSBw cmV2aW91cyBzZXR0aW5ncyBhbmQgYWRkcyBuZXcgb25lcyB3aGVuIHVwZGF0aW5nIHRoZSBw bHVnaW4gJiM4MjEyOyBvciBEZWxldGUgdGhlbS4gVGhlIHBsdWdpbiBjaGVja3MgaWYgYWxs IHJlcXVpcmVkIHByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUgYW5kIG9mZmVycyB5b3UgdGhl IGNob2ljZSBvZiBkZWxldGluZy9yZWluc3RhbGxpbmcgaW4gY2FzZSB0aGUgcHJlZnMgYmVj b21lIGNvcnJ1cHRlZCBvciBuZWVkIHVwZGF0aW5nLjwvcD4KCgk8cD5PbmNlIHRoZSBwcmVm cyBhcmUgaW5zdGFsbGVkIHlvdSB3aWxsIHNlZSB0aGUgYXZhaWxhYmxlIG9wdGlvbnM6PC9w PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gZWRpdG9yPC9zdHJvbmc+IDogeW91IG1h eSBjaG9vc2UgdG8gZWRpdCB0aGUgY29kZSB1c2luZyBhIDNyZCBwYXJ0eSBzeW50YXggaGln aGxpZ2h0ZXIuIEN1cnJlbnQgc3VwcG9ydCBpcyBmb3IgRWRpdCBBcmVhIGFuZCAoc29ydCBv ZikgQ29kZVByZXNzIChzZWUgdGhlIDxhIGhyZWY9IiNub3RlcyI+bm90ZXM8L2E+KS4gQ2hv b3NlIHRoZSBzeXN0ZW0gaGVyZSwgd2hlcmVieSB0aGUgYm94IGJlbmVhdGggYmVjb21lcyBh dmFpbGFibGUgc28geW91IGNhbiBzcGVjaWZ5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJM PC9zcGFuPiBwYXRoIG9mIHRoZSBFZGl0QXJlYSBpbnN0YWxsYXRpb24gb24geW91ciBzZXJ2 ZXI7IHRoaXMgaXMgbm9ybWFsbHkgZXZlcnl0aGluZyB1cCB0byBhbmQgaW5jbHVkaW5nIC9l ZGl0X2FyZWEuIE5vIHRyYWlsaW5nIHNsYXNoIGlzIHJlcXVpcmVkPC9saT4KCQk8bGk+PHN0 cm9uZz5QbHVnaW4gZWRpdG9yIHdpZHRoPC9zdHJvbmc+IDogdGhlIG51bWJlciBvZiBjaGFy YWN0ZXJzIHdpZGUgdG8gbWFrZSB0aGUgYm94ZXMgb24gdGhlIDxhIGhyZWY9IiNlZGl0cGFn ZSI+RWRpdDwvYT4gcGFnZSB0byBzdWl0IHlvdXIgc2NyZWVuIHJlc29sdXRpb248L2xpPgoJ CTxsaT48c3Ryb25nPkhlbHAgZWRpdG9yPC9zdHJvbmc+IDogeW91IG1heSBjaG9vc2UgdG8g ZWRpdCB0aGUgaGVscCBtYW51YWxseSB2aWEgVGV4dGlsZSBvciB1c2UgVGlueU1DRSBmb3Ig YSBtb3JlIDxzcGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBleHBlcmllbmNlLiBU aGlzIGlzIGV4cGVyaW1lbnRhbCBhbmQgcHJvYmFibHkgd29uJiM4MjE3O3Qgd29yayByaWdo dCBub3c8L2xpPgoJCTxsaT48c3Ryb25nPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+ IGV4cG9ydCBvcmRlcjwvc3Ryb25nPiA6IHdoZW4gc2F2aW5nIHlvdXIgcGx1Z2luIGluIHRo ZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQsIHRoaXMgZ292ZXJucyB3aGV0aGVyIHlvdSBw cmVmZXIgdGhlIGNvZGUgYmxvY2sgdG8gYmUgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSBhbmQg dGhlIGhlbHAgYmxvY2sgYmVsb3csIG9yIHZpY2UgdmVyc2E8L2xpPgoJPC91bD4KCgk8cD5U aGUgbmV4dCB0aHJlZSB0ZXh0Ym94ZXMgYXJlIGFsbCB2ZXJ5IHNpbWlsYXI7IHRoZXkgZGVm aW5lIHRoZSBmb3JtYXQgb2YgdGhlIGZpbGVuYW1lcyB3aGVuIHlvdSBleHBvcnQgcGx1Z2lu cy4gVGhlIGZpcnN0IGlzIGZvciB3aGVuIHlvdSBleHBvcnQgc3RhbmRhcmQgPHNwYW4gY2xh c3M9ImNhcHMiPkJBU0U8L3NwYW4+LTY0IHBsdWdpbnM7IHRoZSBzZWNvbmQgaXMgZm9yIGNv bXByZXNzZWQgcGx1Z2luczsgdGhlIHRoaXJkIGlzIGZvciBleHBvcnRpbmcgYSBzdGFuZGFy ZCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiB0ZW1wbGF0ZS48L3A+CgoJPHA+V2hl cmV2ZXIgeW91IHR5cGUgPGNvZGU+e25hbWV9PC9jb2RlPiwgdGhlIHBsdWdpbiBuYW1lIHdp bGwgYXBwZWFyLiBTaW1pbGFybHksIDxjb2RlPnt2ZXJzaW9ufTwvY29kZT4gd2lsbCBiZSBy ZXBsYWNlZCB3aXRoIHRoZSBjdXJyZW50IHBsdWdpbiB2ZXJzaW9uIG51bWJlci4gWW91IGNh biB0eXBlIGFueXRoaW5nIHlvdSBsaWtlIGluIHRoZXNlIGJveGVzLCBidXQgaXQmIzgyMTc7 cyBtb3JlIHVzZWZ1bCB0byBpbmNsdWRlIGJvdGggb2YgdGhlIHJlcGxhY2VtZW50IHN0cmlu Z3Mgc29tZXdoZXJlIGluIGVhY2ggYm94IHNvIHlvdSBkb24mIzgyMTc7dCBnZXQgbmFtZSAv IHZlcnNpb24gY2xhc2hlcy48L3A+CgoJPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBkb24mIzgy MTc7dCBsaWtlIHRoZSBmYWN0IHRoYXQgemlwcGVkIHBsdWdpbnMgYXJlIGV4cG9ydGVkIGFz IDxjb2RlPnBmeF9teV9wbHVnaW5fdjAuMV96aXAudHh0PC9jb2RlPiwgeW91IGNhbiBjaGFu Z2UgaXQuIFBlcmhhcHMgeW91IG1heSBwcmVmZXIgPGNvZGU+cGZ4X215X3BsdWdpbi1jb21w cmVzc2VkLTAuMS50eHQ8L2NvZGU+LiBJbiB3aGljaCBjYXNlLCBzZXQgdGhlIDJuZCBib3gg dG8gPGNvZGU+e25hbWV9LWNvbXByZXNzZWQte3ZlcnNpb259LnR4dDwvY29kZT4uPC9wPgoK CTxwPlRoZSBleHRlbnNpb24gc2hvdWxkIHVzdWFsbHkgYmUgc3BlY2lmaWVkIHNvIHlvdXIg c3lzdGVtL2Jyb3dzZXIga25vd3MgdGhlIGZpbGUmIzgyMTc7cyB0eXBlIHdoZW4gaXQgaXMg ZXhwb3J0ZWQsIGJ1dCBpdCYjODIxNztzIG5vdCBtYW5kYXRvcnkgYXMgdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5NSU1FPC9zcGFuPiB0eXBlIGlzIGdpdmVuIHNvIChnb29kKSBicm93c2Vy cyBzaG91bGQgcmVhZCB0aGF0LjwvcD4KCgk8cD5GaW5hbGx5LCBpZiB5b3Ugd2lzaCB0byB0 YWtlIGFkdmFudGFnZSBvZiBoZWxwIGNhY2hlaW5nLCBwdXQgdGhlIHBhdGggdG8gYSB0ZW1w b3JhcnkgZGlyZWN0b3J5IGluIHRoZSA8c3Ryb25nPkNhY2hlIGRpcjwvc3Ryb25nPiBib3gu IEVtcHR5IHRoZSBib3ggaWYgeW91IHByZWZlciBzYXZlcyBhbmQgZXhwb3J0cyB0byBiZSBz bG93ZXIhIERlZmF1bHRzIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+JiM4MjE3 O3MgdGVtcG9yYXJ5IGRpcmVjdG9yeS48L3A+CgoJPGgzIGlkPSJub3RlcyI+Tm90ZXM8L2gz PgoKCTxwPk1vcmUgZWRpdG9ycyBjYW4gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBDb21wb3Nl ciBmYWlybHkgZWFzaWx5LiBJZiB5b3UgZmluZCBhIGdvb2Qgb25lLCBnZXQgaW4gY29udGFj dC4gQmUgd2FybmVkIHRoYXQgdGhlIGVkaXRvcnMgZG8gdGVuZCB0byBzbG93IHRoZSBwbHVn aW4gZG93biwgZXNwZWNpYWxseSBhcyBjb2RlIHNpemUgaW5jcmVhc2VzLjwvcD4KCgk8cD5U ZW50YXRpdmUgc3VwcG9ydCBmb3IgQ29kZVByZXNzIGlzIGFscmVhZHkgaW4gdGhlcmUgYnV0 IEkgZm91bmQgaXQgaW5leHBsaWNhYmx5IGJsYW5rZWQgb3V0IHRoZSBwbHVnaW4gY29kZSB3 aGVuIGl0IHdhcyBzYXZlZCBzbyBJJiM4MjE3O3ZlIGNvbW1lbnRlZCBvdXQgc3VwcG9ydCBm b3Igbm93LiBJZiBhbnlvbmUgY2FuIHNoZWQgYW55IGxpZ2h0IG9uIHdoeSBpdCBkb2VzIHRo aXMsIHBsZWFzZSBzcGVhayB1cCEgVW5jb21tZW50IHRoZSBjb2RlIG9uIGxpbmUgOTU5IGFu ZCBjb21tZW50IG91dCBsaW5lIDk2MCB0byBlbmFibGUgc3VwcG9ydCwgdGhlbiB2aXNpdCB0 aGUgU2V0dXAgcGFnZSBhbmQgc2VsZWN0IENvZGVQcmVzcyBmcm9tIHRoZSBsaXN0LiBEb24m IzgyMTc7dCBleHBlcmltZW50IHdpdGggdGhpcyBzZXR0aW5nIG9uIGFuIGltcG9ydGFudCBw bHVnaW4gOi0pPC9wPgoKCTxoMyBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gzPgoKCTx1 bD4KCQk8bGk+MjUgRmViIDA2IHwgMC4xIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+ MjUgRmViIDA2IHwgMC4yIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMmIzgyMTc7IG9wdGlvbjwv bGk+CgkJPGxpPjE3IE1hciAwNiB8IDAuMyB8IEFkZGVkICYjODIxNjtzYXZlIGFzIHBocCYj ODIxNzs8L2xpPgoJCTxsaT4xMCBBcHIgMDYgfCAwLjQgfCBBZGRlZCBzdXBwb3J0IGZvciBw bHVnaW5fY2FjaGVfZGlyPC9saT4KCQk8bGk+MDQgSmFuIDA4IHwgMC41IHwgRnVsbCBzdXBw b3J0IGZvciBzdGQgdGVtcGxhdGU7IGNvbXByZXNzZWQgcGx1Z2luczsgTGlicmFyeSBwbHVn aW5zOyBUZXh0aWxlIGhlbHAgYW5kIHN0eWxpbmc7IGludGVncmF0aW9uIHdpdGggbmV0LWNh cnZlciYjODIxNztzIFBsdWdpbiBIZWxwIFZpZXdlcjwvbGk+CgkJPGxpPjA3IEphbiAwOCB8 IDAuNiB8IEJ1aWx0LWluIGhlbHAgdmlld2VyICh0aGFua3MgbmV0LWNhcnZlcik7IHN1cHBv cnQgZm9yIEVkaXQgQXJlYSAmYW1wOyBDb2RlUHJlc3MoaXNoKSAodGhhbmtzIHZhcmlhYXMp OyBIZWxwIGJsb2NrL0NvZGUgYmxvY2sgcG9zaXRpb24gc3dpdGNoYWJsZSBvbiBleHBvcnQ7 IGFkZGVkIFNldHVwIHByZWZzIHBhZ2U7IGxpbmUgYnJlYWsvc3R5bGUgYnVnZml4ZXM8L2xp PgoJCTxsaT4wOCBKYW4gMDggfCAwLjcgfCBSZS1pbXBvcnRpbmcgcGx1Z2lucyBub3cgcmV0 YWlucyBzdHlsZSBibG9jazsgYWRkZWQgJiM4MjE2O2FkbWluIHNpZGUgcGx1Z2luIHdpdGgg Y2xpZW50LXNpZGUgdHlwZSYjODIxNzsgd2FybmluZzsgY2hhbmdlZCBidXR0b24gc3R5bGlu ZyBhbmQgcG9zaXRpb25zIChhbGwgdGhhbmtzIG5ldC1jYXJ2ZXIpOyBnVHh0KCkgcHJlZiBs YWJlbHMgYW5kICYjODIxNjtpbnRlbGxpZ2VudCYjODIxNzsgcHJlZnMgKGdvIGpRdWVyeSBn byEpOyBjYWNoZWQgcGx1Z2lucyBub3cgYWxzbyBoYXZlIGRpcmVjdCBleHBvcnQgZnJvbSBF ZGl0IHBhZ2U7ICYjODIxNjtkb24mIzgyMTc7dCB0ZXh0aWxlIDxzcGFuIGNsYXNzPSJjYXBz Ij5IVE1MPC9zcGFuPiYjODIxNzsgY2hlY2s7IG1pbm9yIGJ1Z2ZpeGVzPC9saT4KCQk8bGk+ MDkgSmFuIDA4IHwgMC43MSB8IFRleHRhcmVhIHdpZHRoIGNhbiBub3cgYmUgY29udHJvbGxl ZCBmcm9tIHByZWZzLCBhbmQgaGVpZ2h0IGZyb20gYSBkcmFnIGJhcjsgZGVmYXVsdCB3aWR0 aCBpbmNyZWFzZWQgdG8gMTEwIGNoYXJzOyBwdWJsaXNoIHBsdWdpbnMgZnJvbSB0aGUgbGlz dCBwYWdlOyBJbnN0YWxsIGJ1dHRvbiByZW1vdmVkIHdoZW4gcHJlZnMgYWxsIGNvcnJlY3Rs eSBpbnN0YWxsZWQgKGFsbCB0aGFua3MgdmFyaWFhcyAvIGlibGFzdG9mZik8L2xpPgoJCTxs aT4xMCBKYW4gMDggfCAwLjcyIHwgRml4ZWQgYnVnIGlmIHBsdWdpbiBoYXMgbm8gaGVscDsg c3R5bGUgc2VjdGlvbiBubyBsb25nZXIgc3RvcmVkL2V4cG9ydGVkIGlmIGl0JiM4MjE3O3Mg bm90IGluIHVzZSAodGhhbmtzIHRoZV9naG9zdCAvIGlibGFzdG9mZik8L2xpPgoJCTxsaT4x MSBKYW4gMDggfCAwLjczIHwgQWRkZWQgc3VwcG9ydCBmb3IgPGVtPnJlYWRpbmc8L2VtPiBh biBvcHRpb25hbCByZXZpc2lvbiBmcm9tIHRoZSB0ZW1wbGF0ZSBwYXJzZXIgYW5kIGFwcGVu ZGluZyBpdCB0byB0aGUgdmVyc2lvbiAodGhhbmtzIG5ldC1jYXJ2ZXIpOyBtb3JlIGdUeHQo KSBzdHJpbmdzIGNvbnZlcnRlZDwvbGk+CgkJPGxpPjI4IE1hciAwOCB8IDAuNzQgfCBGaXhl ZCBlbXB0eSBwbHVnaW4gY29kZSBpZiBTdHlsZSBibG9jayBsZWZ0IGJsYW5rIDsgZml4ZWQg c3RyaXAvc2xhc2gvZW5jb2RpbmcgZXJyb3JzICh0aGFua3MgdGhlX2dob3N0L3J1dWQpIDsg Zml4ZWQgY3JsZiBuZXdsaW5lcyBpbiBjb2RlIGJsb2NrICh0aGFua3MgaGFram9vbi9ydXVk KTwvbGk+CgkJPGxpPjI4IE1heSAwOCB8IDAuNzUgfCBBZGRlZCAmIzgyMTY7bW9kaWZpZWQm IzgyMTc7IHRvIHRoZSBWZXJzaW9uIGNvbHVtbiAodGhhbmtzIHVsaSkgOyBhZGRlZCBhYmls aXR5IHRvIHJlbmFtZSBmaWxlcyBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpciB3aGVuIHRoZSB2 ZXJzaW9uIGNoYW5nZXM8L2xpPgoJCTxsaT4wMyBOb3YgMDggfCAwLjggfCBBZGRlZCBzdXBw b3J0IGZvciByZWNvbW1lbmRlZCBwbHVnaW4gbG9hZCBvcmRlciA7IGFkZGVkIEFkbWluLW9u bHkgcGx1Z2luIHR5cGU7IGFkZGVkIGFiaWxpdHkgdG8gb3ZlcnJpZGUgZmlsZW5hbWUgZm9y bWF0IG9uIGV4cG9ydCA7IGFkZGVkIHJlc3RvcmUgcG9pbnQvcm9sbGJhY2sgKHRoYW5rcyBt YXZlcmljaykgOyBhZGRlZCBjaGFyYWN0ZXIgY291bnQgKHRoYW5rcyBwZXBlYmUpIDsgcmF0 aW9uYWxpc2VkIHRoZSBsaXN0IGFuZCBlZGl0IHBhZ2VzIDsgc3BlZCB1cCBleHBvcnQvc2F2 ZSByb3V0aW5lcyA7IGZpeGVkIGEgZmV3IGNvcm5lciBjYXNlIGJ1Z3MgKGUuZy4gZW1wdHkg cGx1Z2luIG5hbWUsIG1pc3NpbmcgcXVvdGVzIGluIHRlbXBsYXRlIG9wdGlvbnMpPC9saT4K CQk8bGk+MDMgSmFuIDA5IHwgMC44MSB8IEFkZGVkIHRleHRpbGUgY2FjaGVpbmcgdG8gaW1w cm92ZSBwZXJmb3JtYW5jZSB3aXRoIGxhcmdlIGhlbHAgZmlsZXMgOyBwcm9maWxlZCBjb2Rl IGFuZCBpbXByb3ZlZCBzcGVlZCBpbiB2YXJpb3VzIGZ1bmN0aW9uczwvbGk+Cgk8L3VsPgoK CTxoMiBpZD0id3JpdGluZyI+V3JpdGluZyBhIHBsdWdpbjwvaDI+CgoJPHA+WW91IHNob3Vs ZCBiZSBhd2FyZSBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNv bS92aWV3dG9waWMucGhwP2lkPTk4ODEiPlBsdWdpbiBBdXRob3IgUmVzb3VyY2VzPC9hPiB0 b3BpYyBvbiB0aGUgVGV4dHBhdHRlcm4gU3VwcG9ydCBGb3J1bSwgYW5kIHlvdSBtaWdodCBh bHNvIHdhbnQgdG8gaGF2ZSBhIGxvb2sgYXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJl ZC5raWV2LnVhL3R4cC1wbHVnaW4tY2hlYXRzaGVldCI+VGV4dFBhdHRlcm4gcGx1Z2luIGNo ZWF0IHNoZWV0PC9hPiBhbmQgdGhlIHR1dG9yaWFscyBhbmQgZ3VpZGVzIGZvciA8YSBocmVm PSJodHRwOi8vdGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPUV4dGVuZGlu Z19UZXh0cGF0dGVybiI+RXh0ZW5kaW5nIFRleHRwYXR0ZXJuPC9hPiBvbiBUZXh0Qm9vay48 L3A+CgoJPHA+SGFwcHkgcGx1Z2luIGF1dGhvcmluZyA6LSk8L3A+CgogIDwvZGl2Pgo8IS0t IC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4K I2llZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNpZWRfaGVscCBjb2RlIHsgZm9udC13 ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1v bm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNpZWRfaGVscCBjb2RlLnNl ZF9jb2RlX3RhZyB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEw cHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI2llZF9oZWxwIGE6bGluaywgI2llZF9o ZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJv cmRlci1ib3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojaWVk X2hlbHAgYTpob3ZlciwgI2llZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQt ZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRp bmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4 IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9 CiNpZWRfaGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGlu ZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJp ZjsgfQojaWVkX2hlbHAgaDMgeyBjb2xvcjogIzEwODAzMDsgZm9udDogYm9sZCAxMnB4IEFy aWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAw O3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExV R0lOIENTUyAtLS0gLS0+CiI7czozOiJjc3MiO3M6OTI1OiI8c3R5bGUgdHlwZT0idGV4dC9j c3MiPgojaWVkX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI2llZF9oZWxwIGNvZGUgeyBm b250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmll ciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGNv ZGUuc2VkX2NvZGVfdGFnIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRl ZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJn aW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojaWVkX2hlbHAgYTpsaW5rLCAj aWVkX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9u ZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9 CiNpZWRfaGVscCBhOmhvdmVyLCAjaWVkX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsg dGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsg cGFkZGluZy1ib3R0b206MXB4O30KI2llZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6 IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50 ZXI7IH0KI2llZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBw YWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5z LXNlcmlmOyB9CiNpZWRfaGVscCBoMyB7IGNvbG9yOiAjMTA4MDMwOyBmb250OiBib2xkIDEy cHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTVw eCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9Cjwvc3R5bGU+IjtzOjQ6ImNvZGUi O3M6NDY3OTI6ImlmKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgewoJYWRkX3ByaXZzKCdp ZWRfcGx1Z2luX2NvbXBvc2VyJywnMSwyJyk7CglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMn LCAnaWVkX3BsdWdpbl9jb21wb3NlcicsIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9j b21wb3NlcicpKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdpZWRfcGx1Z2luX2NvbXBvc2VyJywg J2llZF9wbHVnaW5fY29tcG9zZXInKTsKCWdsb2JhbCAkaWVkX3BsdWdpbl9jb21wb3Nlciwg JGllZF9wbHVnaW5fcHJlZnMsICRpZWRfcGx1Z2luX2dsb2JhbHMsICRwcmVmczsKCSRpZWRf cGx1Z2luX2dsb2JhbHMgPSBhcnJheSgKCQknY3NzX3N0YXJ0JyA9PiAnPCEtLScsCgkJJ2Nz c19lbmQnID0+ICctLT4nLAoJCSdkbG1fc3RhcnQnID0+ICcjJywKCQknZGxtX2VuZCcgPT4g JycsCgkJJ3N0YXJ0JyA9PiAnIC0tLSBCRUdJTiBQTFVHSU4gU0VDVElPTiAtLS0nLAoJCSdl bmQnID0+ICcgLS0tIEVORCBQTFVHSU4gU0VDVElPTiAtLS0nLAoJKTsKCS8vIERvdWJsZSBh cnJheTogMXN0IGlzIGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0 cywKCS8vIDJuZCBpcyBhIGxpc3Qgb2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVt b3ZpbmcgaW4gZnV0dXJlIChkZWZhdWx0cyBhbGwgc2V0IGVtcHR5KQoJJGllZF9wbHVnaW5f cHJlZnMgPSBhcnJheSgKCQlhcnJheSgKCQkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnbm9u ZScsCgkJCSdpZWRfcGx1Z2luX2VkaXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLAoJCQknaWVk X3BsdWdpbl9lZGl0b3Jfd2lkdGgnID0+ICcxMTAnLAoJCQknaWVkX3BsdWdpbl9oZWxwX2Vk aXRvcicgPT4gJ3RleHRpbGUnLAoJCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRoJyA9 PiBodS4nanMnLkRTLAoJCQknaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInID0+ICcwJywKCQkJ J2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlJyA9PiAne25hbWV9X3Z7dmVyc2lvbn0udHh0JywK CQkJJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlYycgPT4gJ3tuYW1lfV92e3ZlcnNpb259X3pp cC50eHQnLAoJCQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJyA9PiAne25hbWV9X3Z7dmVy c2lvbn0ucGhwJywKCQkJJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJyA9PiAkcHJlZnNb J3RlbXBkaXInXSwKCQkpLAoJCWFycmF5KAoJCQknaWVkX3BsdWdpbl9ub3RfdXNlZF9hbnlf bW9yZV9wbGFjZWhvbGRlcicgPT4gJycsCgkJKQoJKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biBpZWRfcGx1Z2luX2NvbXBvc2VyICgkZXZlbnQsICRzdGVwKSB7CglpZighJHN0ZXAgb3Ig IWluX2FycmF5KCRzdGVwLCBhcnJheSgnaWVkX3BsdWdpbl9kZWxldGUnLAoJCQknaWVkX3Bs dWdpbl9lZGl0JywKCQkJJ2llZF9wbHVnaW5faGVscCcsCgkJCSdpZWRfcGx1Z2luX2xpc3Qn LAoJCQknaWVkX3BsdWdpbl9pbnN0YWxsJywKCQkJJ2llZF9wbHVnaW5fc2F2ZScsCgkJCSdp ZWRfcGx1Z2luX3Jlc3RvcmUnLAoJCQknaWVkX3N3aXRjaF9zdGF0dXMnLAoJCQknaWVkX3Nl dF9vcmRlcicsCgkJCSdpZWRfcGx1Z2luX3NldHVwJywKCQkJJ2llZF9wbHVnaW5fcHJlZnNf aW5zdGFsbCcsCgkJCSdpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZScsCgkJCSdpZWRfcGx1Z2lu X3ByZWZzX3VwZGF0ZScsCgkJCSdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnLAoJCQknaWVkX3Bs dWdpbl9zYXZlX2FzX2ZpbGUnLAoJCQknaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlJywK CQkJJ2llZF9wbHVnaW5fdXBsb2FkJywKCQkJJ2llZF9wbHVnaW5faGVscF92aWV3ZXInLAoJ CSkpKSB7CgkJaWVkX3BsdWdpbl9saXN0KCk7Cgl9IGVsc2UgJHN0ZXAoKTsKfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQovLyBSZXVybnMgYW4gYXJyYXkgb2YgZmlsZW5hbWVzOyAxc3QgaXMgdGhlIHN0YW5k YXJkIHBsdWdpbiwgMm5kIGlzIHRoZSBjb21wcmVzc2VkIHBsdWdpbiwgM3JkIGlzIHRoZSBQ SFAgdGVtcGxhdGUKZnVuY3Rpb24gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmFtZSwgJHZlcnNp b24pIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmcywgJHByZWZzOwoKCSRvdXQgPSBhcnJh eSgKCQkoKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnXSkgJiYgIWVt cHR5KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnXSkpID8gJHByZWZzWydpZWRf cGx1Z2luX291dHB1dF9zZmlsZSddIDogJGllZF9wbHVnaW5fcHJlZnNbMF1bJ2llZF9wbHVn aW5fb3V0cHV0X3NmaWxlJ10pLAoJCSgoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291dHB1 dF9zZmlsZWMnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVj J10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJ10gOiAkaWVkX3BsdWdp bl9wcmVmc1swXVsnaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJ10pLAoJCSgoaXNzZXQoJHBy ZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnXSkgJiYgIWVtcHR5KCRwcmVmc1snaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGVwJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRf c2ZpbGVwJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9vdXRwdXRfc2Zp bGVwJ10pLAoJKTsKCgkkcmVwID0gYXJyYXkoCgkJIntuYW1lfSIgPT4gJG5hbWUsCgkJInt2 ZXJzaW9ufSIgPT4gJHZlcnNpb24sCgkpOwoKCWZvcmVhY2ggKCRvdXQgYXMgJGZpZHggPT4g JGZuYW1lKSB7CgkJJGZuYW1lID0gc3RydHIoJGZuYW1lLCAkcmVwKTsKCQkkb3V0WyRmaWR4 XSA9IHNtZF9zYW5pdGl6ZUZvckZpbGUoJGZuYW1lKTsKCX0KCglyZXR1cm4gJG91dDsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2xpc3QoJG1lc3NhZ2U9JycpIHsKCXBh Z2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJZWNobyBzdGFydFRhYmxl KCdsaXN0JykuCnRyKHRkYSgKZm9ybSgKZklucHV0KCd0ZXh0JywnbmFtZScsJycsJycsJycs JycsJzMwJywnMCcpCi4gZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGllZF9wbHVnaW5fZ1R4 dCgnY3JlYXRlX25ldycpLCdzbWFsbGVyYm94JykKLiBzSW5wdXQoJ2llZF9wbHVnaW5fY3Jl YXRlX25ldycpCi4gZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykKKQosJyBjb2xzcGFu PSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykKLnRkYShmb3JtKGZJbnB1dCgn c3VibWl0JywgJ3N1Ym1pdCcsIGllZF9wbHVnaW5fZ1R4dCgnc2V0dXAnKSwgJ3B1Ymxpc2gn KS5zSW5wdXQoJ2llZF9wbHVnaW5fc2V0dXAnKS5lSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9z ZXInKSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHgiJykpLgph c3NIZWFkKCdwbHVnaW4nLCdhdXRob3InLGdUeHQoJ3ZlcnNpb24nKS4nICgnLmdUeHQoJ3Bs dWdpbl9tb2RpZmllZCcpLicpJywnZGVzY3JpcHRpb24nLCdwdWJsaXNoJywnb3JkZXInLCdh Y3RpdmUnLCcnKTsKCgkkcnMgPSBzYWZlX3Jvd3Nfc3RhcnQoIioiLCJ0eHBfcGx1Z2luIiwg IjE9MSBvcmRlciBieSBuYW1lIik7CgoJd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKSB7CgkJ ZXh0cmFjdCgkYSk7CgkJJGVuYW1lID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2Nv bXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7bmFtZT0nLiRuYW1lLiciPicu JG5hbWUuJzwvYT4nOwoJCSRobGluayA9ICgkaGVscCkgPyAnPGEgaHJlZj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7 bmFtZT0nLiRuYW1lLiciPicuZ1R4dCgnaGVscCcpLic8L2E+JyA6ICdOb25lJzsKCQkkb0xp bmsgPSBpZWRfcGx1Z2luX29yZGVyX2Zvcm0oJG5hbWUsICRsb2FkX29yZGVyKTsKCQkkZm5h bWVzID0gaWVkX3BsdWdpbl9nZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pOwoJCSRwdWJ0YWcg PSB0YWcoZ1R4dCgncHVibGlzaCcpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2Nv bXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtuYW1lPScuJG5h bWUuJyIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZuYW1l c1swXS4gJyInKTsKCQkkcHVienRhZyA9IHRhZyhpZWRfcGx1Z2luX2dUeHQoJ2NvbXByZXNz JyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVk X3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25hbWU9Jy4kbmFtZS4nJiMzODt6aXA9dHJ1ZSIg dGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuJGZuYW1lc1sxXS4g JyInKTsKCQkkbW9kaWZpZWQgPSAoc3RydG9sb3dlcigkY29kZSkgIT0gKHN0cnRvbG93ZXIo JGNvZGVfcmVzdG9yZSkpKTsKCgkJZWNobyB0cih0ZCgkZW5hbWUpCi50ZCgoICgkYXV0aG9y X3VyaSkgPyAnPGEgaHJlZj0iJy4kYXV0aG9yX3VyaS4nIj4nLiRhdXRob3IuJzwvYT4nIDog JGF1dGhvciksMTYwKQoudGQoKCgkbW9kaWZpZWQpID8gJzxhIGhyZWY9ImluZGV4LnBocD9l dmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcmVzdG9yZSYj Mzg7bmFtZT0nLiRuYW1lLiciIHRpdGxlPSInLmllZF9wbHVnaW5fZ1R4dCgncmVzdG9yZV9o ZWxwJykuJyIgb25jbGljaz0icmV0dXJuIHZlcmlmeShcJycuaWVkX3BsdWdpbl9nVHh0KCdy ZXN0b3JlX3ZlcmlmeScsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSkuJ1wnKTsiPicuJHZl cnNpb24uJzwvYT4nIDogJHZlcnNpb24pIC4gKCgkbW9kaWZpZWQpID8gJyZuYnNwOygnLmdU eHQoJ3llcycpLicpJyA6ICcnKSwxMCkKLnRkKCRkZXNjcmlwdGlvbiwyNjApCi50ZCgkcHVi dGFnIC4nIHwgJy4gJHB1Ynp0YWcgLicgfCAnLiAkaGxpbmspCi50ZCgkb0xpbmssIDQwKQou dGQoaWVkX3N0YXR1c19saW5rKCRzdGF0dXMsJG5hbWUseWVzX25vKCRzdGF0dXMpKSwzMCkK Ci50ZChkTGluaygnaWVkX3BsdWdpbl9jb21wb3NlcicsJ2llZF9wbHVnaW5fZGVsZXRlJywn bmFtZScsJG5hbWUpLDMwKQopOwoJCXVuc2V0KCRuYW1lLCRwYWdlLCRkZWxldGVsaW5rKTsK CX0KCglpZiAoIWVtcHR5KCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10p KSB7CgkJJGZpbGVuYW1lcyA9IGFycmF5KCk7CgkJJGRpciA9IGRpcigkR0xPQkFMU1sncHJl ZnMnXVsncGx1Z2luX2NhY2hlX2RpciddKTsKCQl3aGlsZSAoJGZpbGUgPSAkZGlyLT5yZWFk KCkpIHsKCQkJaWYoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpIHsKCQkJCSRmaWxl YWRkciA9ICRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGU7 CgkJCQlpZiAoIWlzX2RpcigkZmlsZWFkZHIpKSB7CgkJCQkJJGZpbGVuYW1lc1tdPSRmaWxl OwoJCQkJfQoJCQl9CgkJfQoJCSRkaXItPmNsb3NlKCk7CgkJKCRmaWxlbmFtZXMpP25hdGNh c2Vzb3J0KCRmaWxlbmFtZXMpOicnOwoJCWVjaG8gdHIoCgkJdGRhKAoJCXRhZyhpZWRfcGx1 Z2luX2dUeHQoJ3J1bl9mcm9tJykuJyAnLnRhZygncGx1Z2luX2NhY2hlX2RpcicsJ2Fjcm9u eW0nLCcgdGl0bGU9IicuJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS4n IiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggZGFzaGVkIGJsYWNrIicpLic6JywnaDEnKQoJ CSwnIGNvbHNwYW49IjgiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWdu OmxlZnQiJykKCgkJKTsKCgkJZWNobyBhc3NIZWFkKCdwbHVnaW4nLCdhdXRob3InLCd2ZXJz aW9uJywnZGVzY3JpcHRpb24nLCdwdWJsaXNoJywnJywnJyk7CgkJZm9yZWFjaCgkZmlsZW5h bWVzIGFzICRmaWxlbmFtZSkgewoJCQkkZmlsZWV4dD0gYXJyYXlfcG9wKGV4cGxvZGUgKCcu JywkZmlsZW5hbWUpKTsKCQkJaWYgKCRmaWxlZXh0PT0ncGhwJykgewoJCQkJJGJhc2VuYW1l PWJhc2VuYW1lKCRmaWxlbmFtZSk7CgkJCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2Zp bGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZW5hbWUp OwoJCQkJJGhsaW5rID0gKCRwbHVnaW5bJ2hlbHAnXSkgPyAnPGEgaHJlZj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7 ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy5nVHh0KCdoZWxwJykuJzwvYT4nIDogJ05vbmUn OwoJCQkJJGVmaWxlID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMz ODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy4k cGx1Z2luWyduYW1lJ10uJzwvYT4nOwoJCQkJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25h bWUoJHBsdWdpblsnbmFtZSddLCAkcGx1Z2luWyd2ZXJzaW9uJ10pOwoKCQkJCWVjaG8gdHIo CgkJCQl0ZCgKCQkJCXRhZygkZmlsZW5hbWUsJ2RpdicsJyBzdHlsZT0iY29sb3I6Z3JheTti b3JkZXI6MDtwYWRkaW5nOjFweCAycHggMnB4IDFweDsiJykKCQkJCS4oaXNzZXQoJHBsdWdp blsnbmFtZSddKT8kZWZpbGUuJzxiciAvPic6JycpLicgJwoJCQkJKQoJCQkJLnRkKAoJCQkJ KCBpc3NldCgkcGx1Z2luWydhdXRob3JfdXJpJ10pPyc8YSBocmVmPSInLiRwbHVnaW5bJ2F1 dGhvcl91cmknXS4nIj4nOicnICkgLgoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3InXSk/ JHBsdWdpblsnYXV0aG9yJ106JyZuYnNwOycgKS4KCQkJCSggaXNzZXQoJHBsdWdpblsnYXV0 aG9yX3VyaSddKT8nPC9hPic6JycgKSwgMTYwCgkJCQkpCgkJCQkudGQoKGlzc2V0KCRwbHVn aW5bJ3ZlcnNpb24nXSk/JHBsdWdpblsndmVyc2lvbiddOicmbmJzcDsnKSwxMCkKCQkJCS50 ZCgoaXNzZXQoJHBsdWdpblsnZGVzY3JpcHRpb24nXSk/JHBsdWdpblsnZGVzY3JpcHRpb24n XTonJm5ic3A7JyksMjYwKQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWyduYW1lJ10pPwoJCQkJ dGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21w b3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4k ZmlsZW5hbWUuJyIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcu JGZuYW1lc1swXS4gJyInKQoJCQkJCQkuJyB8ICcudGFnKGllZF9wbHVnaW5fZ1R4dCgnY29t cHJlc3MnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3Rl cD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyYj Mzg7emlwPXRydWUiIHRpdGxlPSInIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAn LiRmbmFtZXNbMV0uICciJyk6CgkJCQl0YWcoJyZuYnNwOycsJ3NwYW4nLCcgc3R5bGU9ImNv bG9yOmdyYXkiJykKCQkJCSkuJyB8ICcuJGhsaW5rKQoJCQkJLnRkKCcnKQoJCQkJLnRkKCcn KQoJCQkJKTsKCQkJfQoJCX0KCX0KCgllY2hvIHRyKAp0ZGEoCic8Zm9ybSBlbmN0eXBlPSJt dWx0aXBhcnQvZm9ybS1kYXRhIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4n LgpzdGFydFRhYmxlKCdlZGl0JywnbGVmdCcpLgp0cih0ZGEoIGhJbnB1dCgnTUFYX0ZJTEVf U0laRScsMTAwMDAwMCkuCmdyYWYoaWVkX3BsdWdpbl9nVHh0KCd1cGxvYWRfcGhwJykuJzog Jy4KZklucHV0KCdmaWxlJywndGhlZmlsZScsJycsJ2VkaXQnKS4KZklucHV0KCdzdWJtaXQn LCdzdWJtaXQnLGdUeHQoJ3VwbG9hZCcpLCdzbWFsbGVyYm94JykpLgplSW5wdXQoJ2llZF9w bHVnaW5fY29tcG9zZXInKS4Kc0lucHV0KCdpZWRfcGx1Z2luX3VwbG9hZCcpICwgJyBzdHls ZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5IicgKS4KdGRhKCB0YWcoaWVkX3BsdWdpbl9nVHh0 KCduYW1lJyksICdhY3JvbnltJywnIHRpdGxlPSInLmllZF9wbHVnaW5fZ1R4dCgnbmFtZV90 b29sdGlwJykuJyIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCBibGFjayInKS4n OiAnLiBmSW5wdXQoJ3RleHQnLCduYW1lJywneHh4X3h4eHh4eCcsJycsJycsJycsJzMwJywn MCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5O3ZlcnRpY2FsLWFsaWduOm1p ZGRsZTsiJyApKS4KZW5kVGFibGUoKS4KJzwvZm9ybT4nCiwnIGNvbHNwYW49IjgiIHN0eWxl PSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykKKTsKCWVjaG8gZW5k VGFibGUoKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfc3RhdHVzX2xpbmsoJHN0YXR1 cywkbmFtZSwkbGlua3RleHQpIHsKCSRvdXQgPSAnPGEgaHJlZj0iaW5kZXgucGhwPyc7Cgkk b3V0IC49ICdldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9zd2l0Y2hf c3RhdHVzJiMzODtzdGF0dXM9Jy4KCSRzdGF0dXMuJyYjMzg7bmFtZT0nLnVybGVuY29kZSgk bmFtZSkuJyInOwoJJG91dCAuPSAnPicuJGxpbmt0ZXh0Lic8L2E+JzsKCXJldHVybiAkb3V0 Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9zd2l0Y2hfc3RhdHVzKCkgewoJZXh0cmFj dChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCdzdGF0dXMnKSkpKTsKCSRjaGFuZ2UgPSAo JHN0YXR1cykgPyAwIDogMTsKCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwgInN0YXR1cz0k Y2hhbmdlIiwgIm5hbWU9JyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KGdUeHQoJ3BsdWdp bl9zYXZlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSkpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1 bmN0aW9uIGllZF9zZXRfb3JkZXIoKSB7CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn bmFtZScsICdsb2FkX29yZGVyJykpKSk7Cgkkb3JkZXIgPSBtaW4obWF4KCBpbnR2YWwoJGxv YWRfb3JkZXIpLCAxKSwgOSk7CglzYWZlX3VwZGF0ZSgndHhwX3BsdWdpbicsICJsb2FkX29y ZGVyID0gJGxvYWRfb3JkZXIiLCAibmFtZSA9ICckbmFtZSciKTsKCWllZF9wbHVnaW5fbGlz dChnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX29yZGVyX2Zvcm0oJG5hbWUsICRsb2Fk X29yZGVyKSB7Cglmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkrKykgJG9yZGVyc1skaV0gPSAk aTsKCXJldHVybiBmb3JtKAoJCWVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpLm4uCgkJ c0lucHV0KCdpZWRfc2V0X29yZGVyJykubi4KCQloSW5wdXQoJ25hbWUnLCAkbmFtZSkubi4K CQlzZWxlY3RJbnB1dCgnbG9hZF9vcmRlcicsICRvcmRlcnMsICRsb2FkX29yZGVyLCAwLCAx KQoJCSwnZGlzcGxheTppbmxpbmUnCgkpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9w bHVnaW5fZGVsZXRlKCkgewoJJG5hbWUgPSBkb1NsYXNoKHBzKCduYW1lJykpOwoJc2FmZV9k ZWxldGUoInR4cF9wbHVnaW4iLCJuYW1lPSckbmFtZSciKTsKCWllZF9wbHVnaW5fbGlzdChn VHh0KCdwbHVnaW5fZGVsZXRlZCcsIGFycmF5KCd7bmFtZX0nID0+ICRuYW1lKSkpOwp9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVzdG9yZSgpIHsKCSRuYW1lID0gZG9T bGFzaChncHMoJ25hbWUnKSk7CglzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImNvZGUgPSBj b2RlX3Jlc3RvcmUiLCJuYW1lPSckbmFtZSciKTsKCWllZF9wbHVnaW5fbGlzdChpZWRfcGx1 Z2luX2dUeHQoJ3Jlc3RvcmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9lZGl0KCRtZXNzYWdlPScnLCRuZXdmaWxl PScnKSB7Cgkkc2l0ZV9kaXIgPSBodTsKCSRuZXduYW1lID0gdHJpbShncHMoJ25ld25hbWUn KSk7CgkkbmFtZSA9IGVtcHR5KCRuZXduYW1lKSA/IGdwcygnbmFtZScpIDogJG5ld25hbWU7 CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsKCWVjaG8gaWVkX2lu c2VydF9lZGl0b3JzKCk7CgkkdGhlRmlsZSA9ICgkbmV3ZmlsZSkgPyAkbmV3ZmlsZSA6ICgo Z3BzKCdmaWxlbmFtZScpKSA/IGdwcygnZmlsZW5hbWUnKSA6ICRuYW1lKTsKCWVjaG8gaWVk X3BsdWdpbl9lZGl0X2Zvcm0oJHRoZUZpbGUsIGdwcygnZmlsZW5hbWUnKT8gMTogMCk7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9lZGl0X2Zvcm0oJG5hbWU9JycsJGVk aXRmaWxlPTApIHsKCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX3ByZWZzLCAkaWVkX3Bs dWdpbl9nbG9iYWxzOwoJaWYgKCEkZWRpdGZpbGUpIHsKCQkkcnMgPSBzYWZlX3JvdygiYXV0 aG9yLCBhdXRob3JfdXJpLCB2ZXJzaW9uLCBkZXNjcmlwdGlvbiwgY29kZSwgaGVscCwgc3Rh dHVzLCB0eXBlLCBsb2FkX29yZGVyIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7 CgkJZXh0cmFjdCgkcnMpOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3Bs dWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFy cmF5KCcnLCRoZWxwKTsKCX0gZWxzZSB7CgkJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9m aWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJG5hbWUpOwoJ CSRmaWxlbmFtZSA9ICRuYW1lOwoJCSRmaWxlZXh0ID0gYXJyYXlfcG9wKCRuYW1lPWV4cGxv ZGUgKCcuJywkbmFtZSkpOwoJCSRuYW1lID0gaW1wbG9kZSgkbmFtZSk7CgkJZXh0cmFjdCgk cGx1Z2luKTsKCQkkc3RhdHVzID0gKCRmaWxlZXh0PT0ncGhwJyk/IDE6IDA7Cgl9CgkkZWR3 aWR0aCA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pICYmIGlz X251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSkgPyAkcHJlZnNb J2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVk X3BsdWdpbl9lZGl0b3Jfd2lkdGgnXTsKCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9 IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydj c3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCSRwbHVnaW5b J25hbWUnXSA9ICRuYW1lOwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBsdWdp blsnYXV0aG9yX3VyaSddID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAk dmVyc2lvbjsKCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247CgkkcGx1 Z2luWydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAk c3RhcnRfY3NzLCAkZW5kX2Nzcyk7CgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsKCSRwbHVn aW5bJ3R5cGUnXSA9ICR0eXBlOwoJJHBsdWdpblsnb3JkZXInXSA9ICRsb2FkX29yZGVyOwoJ JHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOwoJZm9yICgkaSA9IDE7 ICRpIDw9IDk7ICRpKyspICRvcmRlcnNbJGldID0gJGk7CgoJJGRpc3RyaWJ1dGlvbj0nPHRl eHRhcmVhIG5hbWU9ImRpc3RyaWJ1dGlvbiIgcm93cz0iMSIgY29scz0iJy4kZWR3aWR0aC4n IiBvbmNsaWNrPSJ0aGlzLnNlbGVjdCgpIj4nLmJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRw bHVnaW4pKS4nPC90ZXh0YXJlYT4nOwoKCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1l KCRwbHVnaW5bJ25hbWUnXSwgJHBsdWdpblsndmVyc2lvbiddKTsKCSRuYW1lZExpbmsgPSAo aXNzZXQoJGZpbGVuYW1lKSkgPyAnZmlsZW5hbWU9Jy4kZmlsZW5hbWUgOiAnbmFtZT0nLiRu YW1lOwoKCSRzbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYj Mzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7Jy4kbmFtZWRMaW5rLiciPicg LmllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4gJGZuYW1lc1swXS4gJzwvYT4nOwoJ JHN6aXBsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtz dGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODsnLiRuYW1lZExpbmsuJyYjMzg7emlw PXRydWUiPicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcpIC4nICcuICRmbmFtZXNbMV0u ICcgKGNvbXByZXNzZWQpPC9hPic7Cgkkc3BocGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxl JiMzODsnLiRuYW1lZExpbmsuJyI+JyAuIGllZF9wbHVnaW5fZ1R4dCgnc2F2ZV9hcycpIC4n ICcuICRmbmFtZXNbMl0uICc8L2E+JzsKCSR2aGVscGxpbmtmdWxsID0gKCRoZWxwKSA/ICc8 YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2lu X2hlbHBfdmlld2VyJiMzODsnLiRuYW1lZExpbmsuJyI+WyAnLnN0cm9uZyhnVHh0KCd2aWV3 JykuJyAnLmdUeHQoJ2hlbHAnKSkuJyBdPC9hPicgOiAnJzsKCgkkbmV3bmFtZSA9IGZJbnB1 dCgndGV4dCcsJ25ld25hbWUnLCRuYW1lLCdlZGl0JywnJywnJywkZWR3aWR0aCAtIChpbnQp KCRlZHdpZHRoKjAuMyksJzInKTsKCSRhdXRob3IgPSBmSW5wdXQoJ3RleHQnLCdhdXRob3In LCRhdXRob3IsJ2VkaXQnLCcnLCcnLCRlZHdpZHRoLCcyJyk7CgkkYXV0aG9yX3VyaSA9IGZJ bnB1dCgndGV4dCcsJ2F1dGhvcl91cmknLCRhdXRob3JfdXJpLCdlZGl0JywnJywnJywkZWR3 aWR0aCwnMicpOwoJJHZlcnNpb24gPSBmSW5wdXQoJ3RleHQnLCd2ZXJzaW9uJywkdmVyc2lv biwnZWRpdCcsJycsJycsJGVkd2lkdGggLSAoaW50KSgkZWR3aWR0aCowLjMpLCcyJykgLiAn JiMxNjA7JiMxNjA7Jy4gKCgkZWRpdGZpbGUpID8gY2hlY2tib3goJ3JlbmFtZV9maWxlJywg JzEnLCAwLCAnJywncmVuYW1lX2ZpbGUnKSAuICcgPGxhYmVsIGZvcj0icmVuYW1lX2ZpbGUi PicuaWVkX3BsdWdpbl9nVHh0KCdyZW5hbWVfZmlsZScpLic8L2xhYmVsPicgOiBjaGVja2Jv eCgncmVzdG9yZV9wb2ludCcsICcxJywgMCwgJycsJ3Jlc3RvcmVfcG9pbnQnKSAuICcgPGxh YmVsIGZvcj0icmVzdG9yZV9wb2ludCI+Jy5pZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVfcG9p bnQnKS4nPC9sYWJlbD4nKTsKCSRkZXNjcmlwdGlvbiA9ZklucHV0KCd0ZXh0JywnZGVzY3Jp cHRpb24nLCRkZXNjcmlwdGlvbiwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsKCSRjb2Rl ID0gJzx0ZXh0YXJlYSBuYW1lPSJjb2RlIiBpZD0icGx1Z2luX2VkaXRvciIgcm93cz0iMzAi IGNvbHM9IicuJGVkd2lkdGguJyIgY2xhc3M9ImNvZGVwcmVzcyBwaHAiIG1heGxlbmd0aD0i NjU1MzUiPicuaHRtbHNwZWNpYWxjaGFycygkY29kZSkuJzwvdGV4dGFyZWE+PGRpdiBjbGFz cz0iY2hhcnNSZW1haW4iPjwvZGl2Pic7CgkkaGVscCA9ICc8dGV4dGFyZWEgbmFtZT0iaGVs cCIgcm93cz0iMzAiIGNvbHM9IicuJGVkd2lkdGguJyIgY2xhc3M9Im1jZUVkaXRvciIgbWF4 bGVuZ3RoPSI2MzAwMCI+Jy5odG1sc3BlY2lhbGNoYXJzKCRoZWxwKS4nPC90ZXh0YXJlYT48 ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsKCSRjc3MgPSAnPHRleHRhcmVhIG5h bWU9ImNzcyIgcm93cz0iMTUiIGNvbHM9IicuJGVkd2lkdGguJyIgbWF4bGVuZ3RoPSIyNTM1 Ij4nLmh0bWxzcGVjaWFsY2hhcnMoJGNzcykuJzwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iY2hh cnNSZW1haW4iPjwvZGl2Pic7CgkkcGx1Z3N0YXR1cyA9ICghJGVkaXRmaWxlKSA/ICcmIzE2 MDsmIzE2MDsnLmNoZWNrYm94KCdzdGF0dXMnLDEsJHN0YXR1cywgJycsJ3N0YXR1cycpLiAn IDxsYWJlbCBmb3I9InN0YXR1cyI+Jy5pZWRfcGx1Z2luX2dUeHQoJ2VuYWJsZScpLic8L2xh YmVsPicgOiAnJzsKCSRwbHVndHlwZSA9IHJhZGlvKCd0eXBlJywwLCgoJHR5cGU9PTApPzE6 MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8wJykuIiAiCgkJLiByYWRpbygndHlwZScsMSwo KCR0eXBlPT0xKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ3R5cGVfMScpLiIgIgoJCS4gcmFk aW8oJ3R5cGUnLDIsKCgkdHlwZT09Mik/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCd0eXBlXzIn KS4iICIKCQkuIHJhZGlvKCd0eXBlJywzLCgoJHR5cGU9PTMpPzE6MCkpLmllZF9wbHVnaW5f Z1R4dCgndHlwZV8zJyk7CgkkcGx1Z29yZGVyID0gc2VsZWN0SW5wdXQoJ2xvYWRfb3JkZXIn LCAkb3JkZXJzLCAkbG9hZF9vcmRlciwgMCwgMCk7CgoJJHN1YiA9IGZJbnB1dCgnc3VibWl0 JywnJyxnVHh0KCdzYXZlJyksJ3B1Ymxpc2gnKTsKCXJldHVybiBmb3JtKHN0YXJ0VGFibGUo J2VkaXQnKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ViIC4gJHZoZWxw bGlua2Z1bGwpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3BsdWdpbicgKSAuIHRkKCRuZXduYW1l IC4gJHBsdWdzdGF0dXMgLiAoIChpc3NldCgkZmlsZW5hbWUpKSA/IHRhZygnJiMxNjA7JiMx NjA7KCcuJGZpbGVuYW1lLicpJywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3JheTsiJykuaElu cHV0KCdmaWxlbmFtZScsJGZpbGVuYW1lKSA6ICcnICkgKSkKCS4gdHIoIGZMYWJlbENlbGwo IGllZF9wbHVnaW5fZ1R4dCgncGx1Z2luX2NvZGUnKSApIC4gdGQoJGNvZGUpKQoJLiB0cigg ZkxhYmVsQ2VsbCggaWVkX3BsdWdpbl9nVHh0KCd0eXBlJykgKSAuIHRkKCRwbHVndHlwZSkp CgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2xvYWRfb3JkZXInKSApIC4g dGQoJHBsdWdvcmRlci4nJiMxNjA7JiMxNjA7Jy5pZWRfcGx1Z2luX2dUeHQoJ2xvYWRfb3Jk ZXJfaGVscCcpKSkKCS4gdHIoIGZMYWJlbENlbGwoICd2ZXJzaW9uJyApIC4gdGQoJHZlcnNp b24pKQoJLiB0ciggZkxhYmVsQ2VsbCggJ2F1dGhvcicgKSAuIHRkKCRhdXRob3IpKQoJLiB0 ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUnICkgLiB0ZCgkYXV0aG9yX3VyaSkpCgkuIHRyKCBm TGFiZWxDZWxsKCAnZGVzY3JpcHRpb24nICkgLiB0ZCgkZGVzY3JpcHRpb24pKQoJLiB0cigg dGRhKGdUeHQoJ3BsdWdpbl9oZWxwJyksICcgY2xhc3M9Im5vbGluZSIgc3R5bGU9InRleHQt YWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyInKSAuIHRkKCRoZWxwKSkK CS4gdHIoIGZMYWJlbENlbGwoICdjc3MnICkgLiB0ZCgkY3NzKSkKCS4gdHIoIGZMYWJlbENl bGwoJyZuYnNwOycpIC4gdGQoJHN1YikpCgoJLiB0ciggdGRjcygnPGhyPicsMikpCgkuIHRy KCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKGllZF9wbHVnaW5fZ1R4dCgndXRpbGl0aWVz JykuJzonKSkKCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2NvZGVfZGlz dCcpICkgLiB0ZCgkZGlzdHJpYnV0aW9uKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycp IC4gdGQoJHNsaW5rKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHN6aXBs aW5rKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHNwaHBsaW5rKSkKCS4g ZW5kVGFibGUoKQoJLiBzSW5wdXQoJ2llZF9wbHVnaW5fc2F2ZScpCgkuIGVJbnB1dCgnaWVk X3BsdWdpbl9jb21wb3NlcicpCgkuIGhJbnB1dCgnbmFtZScsJG5hbWUpKQkuIDw8PEVPRgo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmpRdWVyeS5mbi5yZXNpemVoYW5kbGUg PSBmdW5jdGlvbihjdXJoKSB7CglyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCXZh ciBtZSA9IGpRdWVyeSh0aGlzKTsKCQltZS5hbmltYXRlKHtoZWlnaHQ6IGN1cmh9KTsKCQlt ZS5hZnRlcigKCQkJalF1ZXJ5KCc8ZGl2IGNsYXNzPSJyZXNpemVoYW5kbGUiPi0tLSArIC0t LTwvZGl2PicpLmJpbmQoIm1vdXNlZG93biIsIGZ1bmN0aW9uKGUpIHsKCQkJCXZhciBoID0g bWUuaGVpZ2h0KCk7CgkJCQl2YXIgeSA9IGUuY2xpZW50WTsKCQkJCXZhciBtb3ZlSGFuZGxl ciA9IGZ1bmN0aW9uKGUpIHsKCQkJCQltZS5oZWlnaHQoTWF0aC5tYXgoMjAsIGUuY2xpZW50 WSArIGggLSB5KSk7CgkJCQl9OwoJCQkJdmFyIHVwSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsK CQkJCQlqUXVlcnkoImh0bWwiKS51bmJpbmQoIm1vdXNlbW92ZSIsbW92ZUhhbmRsZXIpLnVu YmluZCgibW91c2V1cCIsdXBIYW5kbGVyKTsKCQkJCQluZXdoID0gbWUuaGVpZ2h0KCk7CgkJ CQkJc2V0Q29va2llKCdpZWRfcGx1Z2luX2VkaGVpZ2h0JywgbmV3aCwgMzApOwoJCQkJfTsK CQkJCWpRdWVyeSgiaHRtbCIpLmJpbmQoIm1vdXNlbW92ZSIsIG1vdmVIYW5kbGVyKS5iaW5k KCJtb3VzZXVwIiwgdXBIYW5kbGVyKTsKCQkJfSkKCQkpOwoJfSk7Cn0KalF1ZXJ5KGZ1bmN0 aW9uKCkgewoJY3VyaCA9IGdldENvb2tpZSgnaWVkX3BsdWdpbl9lZGhlaWdodCcpOwoJY3Vy aCA9IChjdXJoID09IG51bGwpID8gJzQ4MCcgOiBjdXJoOwoJalF1ZXJ5KCIjcGx1Z2luX2Vk aXRvciIpLnJlc2l6ZWhhbmRsZShwYXJzZUludChjdXJoKSk7CglqUXVlcnkoJ3RleHRhcmVh W21heGxlbmd0aF0nKS5rZXl1cChmdW5jdGlvbigpewoJCXZhciBtYXggPSBwYXJzZUludChq UXVlcnkodGhpcykuYXR0cignbWF4bGVuZ3RoJykpOwoJCWlmKGpRdWVyeSh0aGlzKS52YWwo KS5sZW5ndGggPiBtYXgpewoJCQlqUXVlcnkodGhpcykudmFsKGpRdWVyeSh0aGlzKS52YWwo KS5zdWJzdHIoMCwgalF1ZXJ5KHRoaXMpLmF0dHIoJ21heGxlbmd0aCcpKSk7CgkJfQoJCWpR dWVyeSh0aGlzKS5wYXJlbnQoKS5maW5kKCcuY2hhcnNSZW1haW4nKS5odG1sKCdDaGFycyBy ZW1haW5pbmc6ICcrIChtYXggLSBqUXVlcnkodGhpcykudmFsKCkubGVuZ3RoKSk7Cgl9KTsK CWpRdWVyeSgndGV4dGFyZWFbbWF4bGVuZ3RoXScpLmtleXVwKCk7Cn0pOwo8L3NjcmlwdD4K PHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLnJlc2l6ZWhhbmRsZSB7CgljdXJzb3I6cy1yZXNp emU7CglmbG9hdDpsZWZ0OwoJdGV4dC1hbGlnbjpjZW50ZXI7Cglmb250LXNpemU6MWVtOwoJ d2lkdGg6ODIlOwoJcGFkZGluZzoycHggMCA2cHg7Cn0KLmNoYXJzUmVtYWluIHsKCXRleHQt YWxpZ246cmlnaHQ7Cgljb2xvcjpncmF5Owp9Cjwvc3R5bGU+CkVPRjsKfQoKLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xv YmFsczsKCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJywnbmV3bmFtZScsJ2Zp bGVuYW1lJywnY29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmknLCd2ZXJzaW9uJywnZGVzY3Jp cHRpb24nLCdoZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScsJ2xvYWRfb3JkZXInLCdyZW5h bWVfZmlsZScsJ3Jlc3RvcmVfcG9pbnQnKSkpKTsKCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5k X2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xv YmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7Cgkk ZXh0cmFNc2cgPSAkbmV3ZmlsZW5hbWUgPSAnJzsKCSRuZXduYW1lID0gdHJpbSgkbmV3bmFt ZSk7CgoJaWYgKGVtcHR5KCRuZXduYW1lKSkgewoJCSRtc2cxID0gaWVkX3BsdWdpbl9nVHh0 KCduYW1lX2ZpcnN0Jyk7Cgl9IGVsc2UgewoJCWlmIChlbXB0eSgkZmlsZW5hbWUpKSB7CgkJ CSRob3V0ID0gYXJyYXkoKTsKCQkJJGhvdXRbMF0gPSAkaGVscDsKCQkJaWYgKCRjc3MpIHsg JGhvdXRbMV0gPSBuLiRzdGFydF9jc3Mubi4kY3NzLm4uJGVuZF9jc3M7IH0KCQkJc2FmZV91 cGRhdGUoCgkJCQkndHhwX3BsdWdpbicsCgkJCQkibmFtZT0nIi4kbmV3bmFtZS4iJywKCQkJ CXN0YXR1cyA9ICciLiRzdGF0dXMuIicsCgkJCQl0eXBlID0gJyIuJHR5cGUuIicsCgkJCQlh dXRob3IgPSAnIi4kYXV0aG9yLiInLAoJCQkJYXV0aG9yX3VyaSA9ICciLiRhdXRob3JfdXJp LiInLAoJCQkJdmVyc2lvbiA9ICciLiR2ZXJzaW9uLiInLAoJCQkJZGVzY3JpcHRpb24gPSAn Ii4kZGVzY3JpcHRpb24uIicsCgkJCQloZWxwID0gJyIuam9pbignJywkaG91dCkuIicsCgkJ CQljb2RlID0gJyIuJGNvZGUuIicsCgkJCQkiLigoJHJlc3RvcmVfcG9pbnQgPT0gMSk/ICJj b2RlX3Jlc3RvcmUgPSAnIi4kY29kZS4iJywiIDogJycpLiIKCQkJCWxvYWRfb3JkZXIgPSAn Ii4kbG9hZF9vcmRlci4iJyIsCgkJCQkibmFtZSA9ICciLiRuYW1lLiInIik7CgkJCSRtc2cx ID0gZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5ld25hbWUpKTsK CQl9IGVsc2UgewoJCQkkZGlyID0gJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9k aXInXS5EUzsKCQkJJGZpbGVjb250ZW50ID0gZmlsZSgkZGlyLiRmaWxlbmFtZSk7CgkJCSRm aWxlY29udGVudCA9IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkZmlsZWNvbnRlbnQpOwoJCQkk bWV0YXZhcnMgPSBhcnJheSgibmFtZSIgPT4gIiRuZXduYW1lIiwKCQkJCQkJCQkJInZlcnNp b24iID0+ICIkdmVyc2lvbiIsCgkJCQkJCQkJCSJhdXRob3IiID0+ICIkYXV0aG9yIiwKCQkJ CQkJCQkJImF1dGhvcl91cmkiID0+ICIkYXV0aG9yX3VyaSIsCgkJCQkJCQkJCSJkZXNjcmlw dGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsCgkJCQkJCQkJCSJ0eXBlIiA9PiAiJHR5cGUiLAoJ CQkJCQkJCQkib3JkZXIiID0+ICIkbG9hZF9vcmRlciIsCgkJCQkJCQkpOwoJCQkkaHVua3Zh cnMgPSBhcnJheSgiQ09ERSIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRj b2RlKSksIC8vIG5ld2xpbmUgd29ya2Fyb3VuZAoJCQkJCQkiSEVMUCIgPT4gZG9TdHJpcChz dHJfcmVwbGFjZSgnXHJcbicsJwonLCRoZWxwKSksCgkJCQkJCSJDU1MiID0+IGRvU3RyaXAo c3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkY3NzKSksCgkJCQkJCQkpOwoJCQlmb3JlYWNoICgk bWV0YXZhcnMgYXMgJHZhcm5hbWUgPT4gJHZhbHVlKSB7CgkJCQlmb3IoJGlkeCA9IDA7ICRp ZHggPCBjb3VudCgkZmlsZWNvbnRlbnQpOyAkaWR4KyspIHsKCQkJCQlpZiAoc3RycG9zKCRm aWxlY29udGVudFskaWR4XSwgJyRwbHVnaW5bXCcnLiR2YXJuYW1lLidcJ10nKSA9PT0gMCkg ewoJCQkJCQkkZmlsZWNvbnRlbnRbJGlkeF0gPSAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wn XSA9ICcuZG9RdW90ZSgkdmFsdWUpLic7JzsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJ CQl9CgkJCWZvcmVhY2ggKCRodW5rdmFycyBhcyAkdmFybmFtZSA9PiAkaHVuaykgewoJCQkJ bGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJr ZXJzKCR2YXJuYW1lLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydkbG1fc3RhcnQnXSwgJGllZF9w bHVnaW5fZ2xvYmFsc1snZGxtX2VuZCddKTsKCQkJCSRzdGFydCA9IGFycmF5X3NlYXJjaCgk c3RhcnRfZGVsaW0sICRmaWxlY29udGVudCkgKyAxOwoJCQkJJGVuZCA9IGFycmF5X3NlYXJj aCgkZW5kX2RlbGltLCAkZmlsZWNvbnRlbnQpOwoJCQkJaWYgKGlzX251bWVyaWMoJHN0YXJ0 KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPj0gJHN0YXJ0KSB7CgkJCQkJYXJyYXlf c3BsaWNlKCRmaWxlY29udGVudCwgJHN0YXJ0LCAkZW5kLSRzdGFydCwgJGh1bmspOwoJCQkJ fQoJCQl9CgkJCSRmaWxlY29udGVudCA9IGltcGxvZGUoIlxuIiwgJGZpbGVjb250ZW50KTsK CgkJCSRmaCA9IGZvcGVuKCRkaXIuJGZpbGVuYW1lLCAndysnKTsKCQkJZndyaXRlKCRmaCwg JGZpbGVjb250ZW50KTsKCQkJZmNsb3NlKCRmaCk7CgoJCQkvLyBNYWtlIG5ldyBmaWxlIGlm IHJlcXVpcmVkCgkJCWlmICgkcmVuYW1lX2ZpbGUgPT0gMSkgewoJCQkJJGZuYW1lcyA9IGll ZF9wbHVnaW5fZ2V0X25hbWUoJG5ld25hbWUsICR2ZXJzaW9uKTsKCQkJCSRuZXdmaWxlbmFt ZSA9ICRmbmFtZXNbMl07CgkJCQkkcmVzID0gcmVuYW1lKCRkaXIuJGZpbGVuYW1lLCAkZGly LiRuZXdmaWxlbmFtZSk7CgkJCQkkZXh0cmFNc2cgPSAoJHJlcykgPyBpZWRfcGx1Z2luX2dU eHQoJ3JlbmFtZWQnKSA6IGllZF9wbHVnaW5fZ1R4dCgncmVuYW1lX2ZhaWxlZCcpOwoJCQl9 CgkJCSRtc2cxID0gZ1R4dCgncGx1Z2luX3NhdmVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5l d25hbWUpKTsKCQl9Cgl9CgkvLyBDaGVjayB0aGUgcGx1Z2luIHR5cGUgbWF0Y2hlcyB0aGUg Y29kZSB1c2VkCgkkZXh0cmFNc2cgLj0gKGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGUs ICR0eXBlKSkgPyAnJyA6IHN0cm9uZyhpZWRfcGx1Z2luX2dUeHQoJ2NoZWNrX3R5cGUnKSk7 CgkkbWVzc2FnZSA9ICRtc2cxLmJyLiRleHRyYU1zZzsKCWllZF9wbHVnaW5fZWRpdCgkbWVz c2FnZSwgJG5ld2ZpbGVuYW1lKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2lu X2NyZWF0ZV9uZXcoKSB7CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScpKSkp OwoJaWYgKCRuYW1lPT0nJykgewoJCWllZF9wbHVnaW5fbGlzdChpZWRfcGx1Z2luX2dUeHQo J25hbWVfZmlyc3QnKSk7CgkJcmV0dXJuOwoJfQoJJGV4aXN0cyA9IGZldGNoKCduYW1lJywn dHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsKCWlmICghJGV4aXN0cykgewoJCXNhZmVfaW5z ZXJ0KCJ0eHBfcGx1Z2luIiwgIgoJCQluYW1lPSckbmFtZScsCgkJCXN0YXR1cz0nMCcsCgkJ CXR5cGU9JzAnLAoJCQl2ZXJzaW9uPScwLjEnLAoJCQlsb2FkX29yZGVyPSc1JwoJCSIpOwoJ CXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksICdlZGl0IHlvdXIgbmV3IHBsdWdpbicp OwoJCWVjaG8gaWVkX3BsdWdpbl9lZGl0X2Zvcm0oJG5hbWUpOwoJfSBlbHNlIHsKCQlpZWRf cGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luJykuJyA8c3Ryb25nPicuJG5hbWUuJzwvc3Ryb25n PiAnLmdUeHQoJ2FscmVhZHlfZXhpc3RzJykpOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IGllZF9wbHVnaW5fc2F2ZV9hc19maWxlKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2Jh bHM7CglpZiAoZ3BzKCduYW1lJykpIHsKCQkkbmFtZSA9IGdwcygnbmFtZScpOwoJCSRycyA9 IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJpLCB2ZXJzaW9uLCBj b2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVyIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5h bWUnIik7CgkJZXh0cmFjdCgkcnMpOwoKCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/ IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1 ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJ JHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2lu X2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsK CX0KCgkkemlwID0gZ3BzKCd6aXAnKTsKCWlmIChncHMoJ3RyaW0nKT09MSkgewoJCSRjb2Rl PWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsKCQkkY29kZT1hcnJheV9tYXAoJ3RyaW0nLCRjb2Rl KTsKCQkkY29kZT1pbXBsb2RlKCJcclxuIiwkY29kZSk7Cgl9CgoJbGlzdCAoJHN0YXJ0X2Nz cywgJGVuZF9jc3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1 Z2luX2dsb2JhbHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5k J10pOwoJJGZuYW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsK CgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbiIpOwoJaGVhZGVyKCdDb250ZW50 LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nIC4gKCgkemlwKSA/ICRmbmFt ZXNbMV0gOiAkZm5hbWVzWzBdKSk7CgoJJHR5cGVzID0gYXJyYXkoICdDbGllbnQgc2lkZScg LCAnQWRtaW4vQ2xpZW50IHNpZGUnICwgJ0xpYnJhcnknICwgJ0FkbWluIHNpZGUnKTsKCSRw bHVnaW5bJ25hbWUnXSA9ICRuYW1lOwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJ JHBsdWdpblsnYXV0aG9yX3VyaSddID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9u J10gPSAkdmVyc2lvbjsKCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247 CgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsKCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOwoJ JHBsdWdpblsnb3JkZXInXSA9ICRsb2FkX29yZGVyOwovLwkkcGx1Z2luWydhbGxvd19odG1s X2hlbHAnXSA9IHRydWU7Ci8vCSRwbHVnaW5bJ2hlbHBfcmF3J10gPSAkaGVscC4kc3RhcnRf Y3NzLiRjc3MuJGVuZF9jc3M7CgkkcGx1Z2luWydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRp bGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3RhcnRfY3NzLCAkZW5kX2Nzcyk7CgkkcGx1Z2lu WydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7CgoJZWNobyAnIyBOYW1lOiAnLiRu YW1lLicgdicuJHZlcnNpb24uJyAnLigoJHppcCkgPyAiKGNvbXByZXNzZWQpIiA6ICIiKS4n CiMgVHlwZTogJy4kdHlwZXNbJHR5cGVdLicgcGx1Z2luCiMgJy4kZGVzY3JpcHRpb24uJwoj IEF1dGhvcjogJy4kYXV0aG9yLicKIyBVUkw6ICcuJGF1dGhvcl91cmkuJwojIFJlY29tbWVu ZGVkIGxvYWQgb3JkZXI6ICcuJGxvYWRfb3JkZXIuJwoKIyAuLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIyBU aGlzIGlzIGEgcGx1Z2luIGZvciBUZXh0cGF0dGVybiAtIGh0dHA6Ly90ZXh0cGF0dGVybi5j b20vCiMgVG8gaW5zdGFsbDogdGV4dHBhdHRlcm4gPiBhZG1pbiA+IHBsdWdpbnMKIyBQYXN0 ZSB0aGUgZm9sbG93aW5nIHRleHQgaW50byB0aGUgXCdJbnN0YWxsIHBsdWdpblwnIGJveDoK IyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4KCicuKCgkemlwKSA/IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNv ZGUoZ3plbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSksIDcyKSA6IGNodW5rX3NwbGl0KGJh c2U2NF9lbmNvZGUoc2VyaWFsaXplKCRwbHVnaW4pKSwgNzIpKTsKCglkaWUoKTsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUoKSB7CglnbG9i YWwgJHByZWZzOwoJaWYgKGdwcygnbmFtZScpKSB7CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsK CQkkcnMgPSBzYWZlX3JvdygiZGVzY3JpcHRpb24sIGF1dGhvciwgYXV0aG9yX3VyaSwgdmVy c2lvbiwgY29kZSwgaGVscCwgdHlwZSwgbG9hZF9vcmRlciIsICJ0eHBfcGx1Z2luIiwgIm5h bWU9JyRuYW1lJyIpOwoJCWV4dHJhY3QoJHJzKTsKCgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgk aGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0t PiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOwoJfSBlbHNlaWYgKGdwcygnZmlsZW5hbWUn KSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11b J3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3QoJHBs dWdpbik7Cgl9CgoJJG9wb3JkZXIgPSAoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291dHB1 dF9vcmRlciddKSAmJiBpc19udW1lcmljKCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3Jk ZXInXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddIDogMDsKCSRmbmFt ZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRuYW1lLCAkdmVyc2lvbik7CgoJaGVhZGVyKCJD b250ZW50LXR5cGU6IHRleHQvcGhwIik7CgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246 IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiRmbmFtZXNbMl0pOwoKCSRoZWxwY2h1bmsgPSAn aWYgKDApIHsnLm4KLic/PicubgouICgoJGNzcykgPyAnPCEtLScubgouJyMgLS0tIEJFR0lO IFBMVUdJTiBDU1MgLS0tJy5uCi4kY3NzLm4KLicjIC0tLSBFTkQgUExVR0lOIENTUyAtLS0n Lm4KLictLT4nLm4gOiAnJykKLic8IS0tJy5uCi4nIyAtLS0gQkVHSU4gUExVR0lOIEhFTFAg LS0tJy5uCi4kaGVscC5uCi4nIyAtLS0gRU5EIFBMVUdJTiBIRUxQIC0tLScubgouJy0tPicu bgouJzw/cGhwJy5uCi4nfScubjsKCgkkY29kZWNodW5rID0gJyMgLS0tIEJFR0lOIFBMVUdJ TiBDT0RFIC0tLScubgouc3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJGNvZGUpLm4KLicjIC0t LSBFTkQgUExVR0lOIENPREUgLS0tJy5uOwoKCWVjaG8gJzw/cGhwJy5uCi4nLy8gVGhpcyBp cyBhIFBMVUdJTiBURU1QTEFURS4nLm4KLicvLyBDb3B5IHRoaXMgZmlsZSB0byBhIG5ldyBu YW1lIGxpa2UgYWJjX215cGx1Z2luLnBocC4gIEVkaXQgdGhlIGNvZGUsIHRoZW4nLm4KLicv LyBydW4gdGhpcyBmaWxlIGF0IHRoZSBjb21tYW5kIGxpbmUgdG8gcHJvZHVjZSBhIHBsdWdp biBmb3IgZGlzdHJpYnV0aW9uOicubgouJy8vICQgcGhwIGFiY19teXBsdWdpbi5waHAgPiBh YmNfbXlwbHVnaW4tMC4xLnR4dCcubgoubgouJy8vIFBsdWdpbiBuYW1lIGlzIG9wdGlvbmFs LiAgSWYgdW5zZXQsIGl0IHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQnLm4K LicvLyBmaWxlIG5hbWUuIFVuY29tbWVudCBhbmQgZWRpdCB0aGlzIGxpbmUgdG8gb3ZlcnJp ZGU6Jy5uCi4nJHBsdWdpbltcJ25hbWVcJ10gPSAnLmRvUXVvdGUoJG5hbWUpLic7Jy5uCi5u Ci4nLy8gMCA9IFBsdWdpbiBoZWxwIGlzIGluIFRleHRpbGUgZm9ybWF0LCBubyByYXcgSFRN TCBhbGxvd2VkIChkZWZhdWx0KS4nLm4KLicvLyAxID0gUGx1Z2luIGhlbHAgaXMgaW4gcmF3 IEhUTUwuICBOb3QgcmVjb21tZW5kZWQuJy5uCi4nIyAkcGx1Z2luW1wnYWxsb3dfaHRtbF9o ZWxwXCddID0gMTsnLm4KLm4KLickcGx1Z2luW1wndmVyc2lvblwnXSA9ICcuZG9RdW90ZSgk dmVyc2lvbikuJzsnLm4KLickcGx1Z2luW1wnYXV0aG9yXCddID0gJy5kb1F1b3RlKCRhdXRo b3IpLic7Jy5uCi4nJHBsdWdpbltcJ2F1dGhvcl91cmlcJ10gPSAnLmRvUXVvdGUoJGF1dGhv cl91cmkpLic7Jy5uCi4nJHBsdWdpbltcJ2Rlc2NyaXB0aW9uXCddID0gJy5kb1F1b3RlKCRk ZXNjcmlwdGlvbikuJzsnLm4KLm4KLicvLyBQbHVnaW4gbG9hZCBvcmRlcjonLm4KLicvLyBU aGUgZGVmYXVsdCB2YWx1ZSBvZiA1IHdvdWxkIGZpdCBtb3N0IHBsdWdpbnMsIHdoaWxlIGZv ciBpbnN0YW5jZSBjb21tZW50IHNwYW0gZXZhbHVhdG9ycyBvciBVUkwgcmVkaXJlY3RvcnMn Lm4KLicvLyB3b3VsZCBwcm9iYWJseSB3YW50IHRvIHJ1biBlYXJsaWVyICgxLi4uNCkgdG8g cHJlcGFyZSB0aGUgZW52aXJvbm1lbnQgZm9yIGV2ZXJ5dGhpbmcgZWxzZSB0aGF0IGZvbGxv d3MuJy5uCi4nLy8gT3JkZXJzIDYuLi45IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBwbHVn aW5zIHdoaWNoIHdvdWxkIHdvcmsgbGF0ZS4gVGhpcyBvcmRlciBpcyB1c2VyLW92ZXJyaWRl YWJsZS4nLm4KLickcGx1Z2luW1wnb3JkZXJcJ10gPSAnLmRvUXVvdGUoJGxvYWRfb3JkZXIp Lic7Jy5uCi5uCi4nLy8gUGx1Z2luIFwndHlwZVwnIGRlZmluZXMgd2hlcmUgdGhlIHBsdWdp biBpcyBsb2FkZWQnLm4KLicvLyAwID0gcHVibGljICAgICAgIDogb25seSBvbiB0aGUgcHVi bGljIHNpZGUgb2YgdGhlIHdlYnNpdGUgKGRlZmF1bHQpJy5uCi4nLy8gMSA9IHB1YmxpYyth ZG1pbiA6IG9uIGJvdGggdGhlIHB1YmxpYyBhbmQgYWRtaW4gc2lkZScubgouJy8vIDIgPSBs aWJyYXJ5ICAgICAgOiBvbmx5IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBvciByZXF1aXJlX3Bs dWdpbigpIGlzIGNhbGxlZCcubgouJy8vIDMgPSBhZG1pbiAgICAgICAgOiBvbmx5IG9uIHRo ZSBhZG1pbiBzaWRlJy5uCi4nJHBsdWdpbltcJ3R5cGVcJ10gPSAnLmRvUXVvdGUoJHR5cGUp Lic7Jy5uCi5uCi4naWYgKCFkZWZpbmVkKFwndHhwaW50ZXJmYWNlXCcpKScubgouJyAgICAg ICAgQGluY2x1ZGVfb25jZShcJ3plbV90cGwucGhwXCcpOycubgoubgouKCgkb3BvcmRlciA9 PSAwKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQouKCgkb3BvcmRlciA9PSAxKSA/ICRj b2RlY2h1bmsgOiAkaGVscGNodW5rKQouJz8+JzsKCWRpZSgpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1 bmN0aW9uIGllZF9wbHVnaW5fdXBsb2FkKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2Jh bHM7CglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFy a2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1 Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgoJaWYgKCEkX0ZJTEVTWyd0aGVmaWxlJ11bJ3Rt cF9uYW1lJ10pIHsKCQlpZWRfcGx1Z2luX2xpc3QoaWVkX3BsdWdpbl9nVHh0KCdjaG9vc2Vf ZmlsZScpKTtyZXR1cm47Cgl9CgkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJF9G SUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKTsKLy8JJG5ld25hbWUgPSAoZW1wdHkoJHBs dWdpblsnbmFtZSddKSkgPyBiYXNlbmFtZSgkX0ZJTEVTWyd0aGVmaWxlJ11bJ25hbWUnXSwg Jy5waHAnKSA6ICRwbHVnaW5bJ25hbWUnXTsKCSRuZXduYW1lID0gJHBsdWdpblsnbmFtZSdd OwoJaWYgKGdwcygnbmFtZScpIGFuZCBncHMoJ25hbWUnKSE9J3h4eF94eHh4eHgnKSB7CgkJ JG5ld25hbWU9Z3BzKCduYW1lJyk7Cgl9CglpZiAoZW1wdHkoJHBsdWdpblsnY29kZSddKSkg ewoJCSRwbHVnaW5bJ2NvZGUnXSA9IGltcGxvZGUgKCIiLCBmaWxlKCRfRklMRVNbJ3RoZWZp bGUnXVsndG1wX25hbWUnXSkpOwoJfQoKCWlmIChNQUdJQ19RVU9URVNfR1BDKSB7CgkJJHBs dWdpbiA9IGRvU3RyaXAoJHBsdWdpbik7Cgl9CglleHRyYWN0KGRvU2xhc2goJHBsdWdpbikp OwoJJG1kNT1tZDUoJGNvZGUpOwoJJHZlcnNpb24gPSAoZW1wdHkoJHZlcnNpb24pKSA/ICIw LjEiIDogJHZlcnNpb247CgkkaGVscCA9ICRoZWxwLigoJGNzcykgPyBuLiRzdGFydF9jc3Mu bi4kY3NzLm4uJGVuZF9jc3MgOiAnJyk7CgkkZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBf cGx1Z2luJywnbmFtZScsJG5ld25hbWUpOwoJaWYgKCRleGlzdHMpIHsKCQkkc3RhdHVzID0g ZmV0Y2goJ3N0YXR1cycsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmV3bmFtZSk7CgkJJHJzID0g c2FmZV91cGRhdGUoCgkJCSJ0eHBfcGx1Z2luIiwKCQkJInN0YXR1cyA9ICckc3RhdHVzJywK CQkJdHlwZSA9ICckdHlwZScsCgkJCWF1dGhvciA9ICckYXV0aG9yJywKCQkJYXV0aG9yX3Vy aSA9ICckYXV0aG9yX3VyaScsCgkJCXZlcnNpb24gPSAnJHZlcnNpb24nLAoJCQlkZXNjcmlw dGlvbiA9ICckZGVzY3JpcHRpb24nLAoJCQloZWxwID0gJyRoZWxwJywKCQkJY29kZSA9ICck Y29kZScsCgkJCWNvZGVfcmVzdG9yZSA9ICckY29kZScsCgkJCWNvZGVfbWQ1ID0gJyRtZDUn LAoJCQlsb2FkX29yZGVyID0gJyRsb2FkX29yZGVyJyIsCgkJCSJuYW1lID0gJyRuZXduYW1l JyIKCQkpOwoJfSBlbHNlIHsKCQkkcnMgPSBzYWZlX2luc2VydCgKCQkJInR4cF9wbHVnaW4i LAoJCQkibmFtZSA9ICckbmV3bmFtZScsCgkJCXN0YXR1cyA9IDAsCgkJCXR5cGUgPSAnJHR5 cGUnLAoJCQlhdXRob3IgPSAnJGF1dGhvcicsCgkJCWF1dGhvcl91cmkgPSAnJGF1dGhvcl91 cmknLAoJCQl2ZXJzaW9uID0gJyR2ZXJzaW9uJywKCQkJZGVzY3JpcHRpb24gPSAnJGRlc2Ny aXB0aW9uJywKCQkJaGVscCA9ICckaGVscCcsCgkJCWNvZGUgPSAnJGNvZGUnLAoJCQljb2Rl X3Jlc3RvcmUgPSAnJGNvZGUnLAoJCQljb2RlX21kNSA9ICckbWQ1JywKCQkJbG9hZF9vcmRl ciA9ICckbG9hZF9vcmRlciciCgkJKTsKCX0KCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lu cycpLCBtZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsKCRleGlzdHMpPyd1cGRhdGVkJzon dXBsb2FkZWQnKSk7CgllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKCRuZXduYW1lKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkZmlsZXBhdGgpIHsK CSRjb250ZW50ID0gZmlsZSgkZmlsZXBhdGgpOwoJJGp1c3RmaWxlID0gYmFzZW5hbWUoJGZp bGVwYXRoKTsKCSRleHQgPSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRqdXN0ZmlsZSkpOwoJ JGV4dCA9ICgkZXh0PT0kanVzdGZpbGUpID8gJycgOiAnLicuJGV4dDsgLy8gT25seSBhc3Np Z24gYW4gZXh0ZW5zaW9uIGlmIG9uZSBleGlzdHMKCSRzb3VyY2VfbGluZXMgPSBjb3VudCgk Y29udGVudCk7CgkkbWV0YWRhdGEgPSBhcnJheSgKCQkJCQkJJ25hbWUnID0+ICcnLAoJCQkJ CQkndmVyc2lvbicgPT4gJycsCgkJCQkJCSdyZXZpc2lvbicgPT4gJycsCgkJCQkJCSdhdXRo b3InID0+ICcnLAoJCQkJCQknYXV0aG9yX3VyaScgPT4gJycsCgkJCQkJCSdkZXNjcmlwdGlv bicgPT4gJycsCgkJCQkJCSdvcmRlcicgPT4gJzUnLAoJCQkJCQkndHlwZScgPT4gJycsCgkJ CQkJKTsKCWZvciAoJGlkeD0wOyAkaWR4IDwgJHNvdXJjZV9saW5lczsgJGlkeCsrKSB7CgkJ JGNvbnRlbnRbJGlkeF0gPSBydHJpbSgkY29udGVudFskaWR4XSk7CgkJLy8gQm9tYiBvdXQg aWYgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBhcmVhCgkJaWYgKHN0cnBv cyggJGNvbnRlbnRbJGlkeF0sICdpZiAoIWRlZmluZWQnICkgPT09IDApIHsKCQkJYnJlYWs7 CgkJfQoJCWlmIChzdHJwb3MoJGNvbnRlbnRbJGlkeF0sICckcGx1Z2luWycpID09PSAwKSB7 CgkJCS8vIEZvdW5kIGEgcGx1Z2luIHZhcmlhYmxlIHNvIGV4dHJhY3QgaXQKCQkJJHBhcnRz ID0gZXhwbG9kZSgiID0gIiwgJGNvbnRlbnRbJGlkeF0pOwoJCQkkcGFydHNbMF0gPSBzdHJf cmVwbGFjZSgiJyIsICIiLCAkcGFydHNbMF0pOyAvLyBNYWtlIHRoZSBtYXRjaCBlYXNpZXIh CgkJCSRwYXJ0c1sxXSA9IHN0cl9yZXBsYWNlKCI7IiwgIiIsICRwYXJ0c1sxXSk7IC8vIERp dHRvCgkJCXByZWdfbWF0Y2goIi9wbHVnaW5cWyguKilcXS8iLCAkcGFydHNbMF0sICR2YXIp OyAvLyBFeHRyYWN0IGp1c3QgdGhlIHZhcmlhYmxlIG5hbWUKCQkJaWYgKGlzX251bWVyaWMo JHBhcnRzWzFdKSkgewoJCQkJJHBhcnRzWzFdID0gIiciLiRwYXJ0c1sxXS4iJyI7CgkJCX0K CQkJcHJlZ19tYXRjaCgiLy4qJyguKiknLiovIiwgJHBhcnRzWzFdLCAkdmFsKTsgLy8gUmVt b3ZlIGFueXRoaW5nIG91dHNpZGUgdGhlIHF1b3RlcyAoZS5nLiAkcmV2aXNpb24pCgkJCWlm ICgkdmFyWzFdID09ICdyZXZpc2lvbicgJiYgIWVtcHR5KCR2YWxbMV0pKSB7CgkJCQkkcmV2 cGFydHMgPSBleHBsb2RlKCcgJywgdHJpbSgkdmFsWzFdLCAnJCAnKSk7CgkJCQkkdmFsWzFd ID0gJHJldnBhcnRzW2NvdW50KCRyZXZwYXJ0cyktMV07CgkJCQkkdmFsWzFdID0gKGVtcHR5 KCR2YWxbMV0pKSA/ICcnIDogJy4nIC4kdmFsWzFdOwoJCQl9CgkJCSRtZXRhZGF0YVskdmFy WzFdXSA9ICR2YWxbMV07CgkJfQoJfQoKCSRtZXRhZGF0YVsnbmFtZSddID0gKGVtcHR5KCRt ZXRhZGF0YVsnbmFtZSddKSkgPyBiYXNlbmFtZSgkanVzdGZpbGUsICRleHQpIDogJG1ldGFk YXRhWyduYW1lJ107CgkkbWV0YWRhdGFbJ2xvYWRfb3JkZXInXSA9ICRtZXRhZGF0YVsnb3Jk ZXInXTsKCSRtZXRhZGF0YVsndmVyc2lvbiddIC49ICRtZXRhZGF0YVsncmV2aXNpb24nXTsK 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 ZWJsb2NrLCAkdHlwZSkgewoJLy8gU2hvcnQgY2lyY3VpdCBzaW5jZSB3ZSdyZSBvbmx5IGlu dGVyZXN0ZWQgaW4gY2xpZW50IHBsdWdpbnMKCWlmICgkdHlwZSAhPSAnMCcgfHwgc3RycG9z KCRjb2RlYmxvY2ssICd0eHBpbnRlcmZhY2UnKT09PWZhbHNlKSB7CgkJcmV0dXJuIHRydWU7 Cgl9CgoJLy8gQmVsaWV2ZSBpdCBvciBub3QgdGhpcyBpcyBzZXZlcmFsIG9yZGVycyBvZiBt YWduaXR1ZGUgcXVpY2tlciB0aGFuIGEgc2luZ2xlIHByZWdfbWF0Y2gKCSRjYiA9IHN0cl9y ZXBsYWNlKGFycmF5KCdcdCcsICcgJyksICcnLCAkY29kZWJsb2NrKTsKCSRjYiA9IHN0cl9y ZXBsYWNlKCc9PT0nLCAnPT0nLCAkY2IpOwoJaWYgKHN0cnBvcygkY2IsICd0eHBpbnRlcmZh Y2U9PVwiYWRtaW4nKSkgcmV0dXJuIGZhbHNlOwoJaWYgKHN0cnBvcygkY2IsICJ0eHBpbnRl cmZhY2U9PVwnYWRtaW4iKSkgcmV0dXJuIGZhbHNlOwoJaWYgKHN0cnBvcygkY2IsICdhZG1p blwiPT10eHBpbnRlcmZhY2UnKSkgcmV0dXJuIGZhbHNlOwoJaWYgKHN0cnBvcygkY2IsICJh ZG1pblwnPT10eHBpbnRlcmZhY2UiKSkgcmV0dXJuIGZhbHNlOwoJaWYgKHN0cnBvcygkY2Is ICdhZG1pblwiPT1AdHhwaW50ZXJmYWNlJykpIHJldHVybiBmYWxzZTsKCWlmIChzdHJwb3Mo JGNiLCAiYWRtaW5cJz09QHR4cGludGVyZmFjZSIpKSByZXR1cm4gZmFsc2U7CglyZXR1cm4g dHJ1ZTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUs ICRoZWxwLCAkY3NzLCAkc3RhcnRfZGxtLCAkZW5kX2RsbSkgewoJZ2xvYmFsICRwcmVmczsK CgkkdG1wZGlyID0gJGhscGZpbGUgPSAnJzsKCSRjaGFuZ2VkID0gdHJ1ZTsKCSRvdXQgPSBh cnJheSgpOwoJaWYgKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUn XSkgJiYgIWVtcHR5KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnXSkgJiYg aXNfd3JpdGFibGUoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZSddKSkgewoJ CSR0bXBkaXIgPSAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlJ107CgkJJGNh Y2hlID0gYnVpbGRfZmlsZV9wYXRoKCR0bXBkaXIsICdpZWRfcGx1Z2luX2NvbXBvc2VyLmNh Y2hlJyk7CgkJaWYgKCFmaWxlX2V4aXN0cygkY2FjaGUpKSB7CgkJCXRvdWNoKCRjYWNoZSk7 IC8vIENyZWF0ZSBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgfQoJCSRwbHVncyA9 IHBhcnNlX2luaV9maWxlKCRjYWNoZSk7CgoJCSRvbGRfbWQ1ID0gKGFycmF5X2tleV9leGlz dHMoJG5hbWUsICRwbHVncykpID8gJHBsdWdzWyRuYW1lXSA6ICcnOwoJCSRjdXJyX21kNSA9 IG1kNSgkaGVscCk7CgkJJGhscGZpbGUgPSBidWlsZF9maWxlX3BhdGgoJHRtcGRpciwgJG5h bWUuJ19oZWxwLnR4dGwnKTsKCQlpZiAoJG9sZF9tZDUgPT0gJGN1cnJfbWQ1KSB7CgkJCSRv dXRbMF0gPSBmaWxlX2dldF9jb250ZW50cygkaGxwZmlsZSk7CgkJCSRjaGFuZ2VkID0gZmFs c2U7CgkJfSBlbHNlIHsKCQkJJHBsdWdzWyRuYW1lXSA9ICRjdXJyX21kNTsKCQkJJGZkID0g Zm9wZW4oJGNhY2hlLCAidyIpOwoJCQlmb3JlYWNoICgkcGx1Z3MgYXMgJGlkeCA9PiAkdmFs KSB7CgkJCQlmd3JpdGUoJGZkLCAkaWR4LicgPSAnLiR2YWwubik7CgkJCX0KCQkJZmNsb3Nl KCRmZCk7CgkJfQogICB9CgoJaWYgKCEkb3V0KSB7CgkJQGluY2x1ZGVfb25jZSB0eHBhdGgu Jy9saWIvY2xhc3NUZXh0aWxlLnBocCc7CgkJJG91dFswXSA9ICRoZWxwOwoJCWlmIChjbGFz c19leGlzdHMoJ1RleHRpbGUnKSkgewoJCQkvLyBUcnkgYW5kIGJlIGEgbGl0dGxlIG1vcmUg aW50ZWxsaWdlbnQgYWJvdXQgYXBwbHlpbmcgdGV4dGlsZSBvciBub3QKCQkJJHJlID0gJy9o WzAtNl0oXCguKlwpKT9cLi8nOwoJCQlpZiAocHJlZ19tYXRjaCgkcmUsICRoZWxwKSkgewoJ CQkJJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOwoJCQkJJG91dFswXSA9ICR0ZXh0aWxlLT5U ZXh0aWxlVGhpcygkaGVscCk7CgkJCX0KCQl9Cgl9CgoJaWYgKCR0bXBkaXIgJiYgJGNoYW5n ZWQpIHsKCQlpZiAoIWZpbGVfZXhpc3RzKCRobHBmaWxlKSkgewoJCQl0b3VjaCgkaGxwZmls ZSk7CiAgICAgCX0KCQkkZmQgPSBmb3BlbigkaGxwZmlsZSwgInciKTsKCQlmd3JpdGUoJGZk LCAkb3V0WzBdKTsKCQlmY2xvc2UoJGZkKTsKCX0KCSRvdXRbMV0gPSAoJGNzcykgPyAiXG4k c3RhcnRfZGxtXG4kY3NzXG4kZW5kX2RsbVxuIiA6ICcnOwoJcmV0dXJuIGpvaW4oJycsICRv dXQpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9pbnNlcnRfZWRpdG9ycygpIHsKCWds b2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG91dCA9IGFycmF5KCk7CgoJJHBy ZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5f cHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJl ZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOwoJaWYgKGNvdW50KCRycykgPT0gY291 bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSB7CgkJJGVkID0gYXJyYXkoKTsKCQkkZWRbJHBy ZWZzWydpZWRfcGx1Z2luX2VkaXRvciddXSA9ICRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3Jf cGF0aCddOwoJCSRlZFskcHJlZnNbJ2llZF9wbHVnaW5faGVscF9lZGl0b3InXV0gPSAkcHJl ZnNbJ2llZF9wbHVnaW5faGVscF9lZGl0b3JfcGF0aCddOwoKCQlmb3JlYWNoICgkZWQgYXMg JGVkaXRvciA9PiAkZWRpdG9yX2RpcikgewoJCQlzd2l0Y2ggKCRlZGl0b3IpIHsKCQkJCWNh c2UgInRpbnlfbWNlIjoKCQkJCQkkb3V0W10gPSA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiIHNyYz0iJy4kZWRpdG9yX2Rpci4nL3RpbnlfbWNlLmpzIj48L3Njcmlw dD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJdGlueU1DRS5pbml0KHsKCQlt b2RlIDogInNwZWNpZmljX3RleHRhcmVhcyIsCgkJZWRpdG9yX3NlbGVjdG9yIDogIm1jZUVk aXRvciIsCgkJdGhlbWVfYWR2YW5jZWRfdG9vbGJhcl9sb2NhdGlvbiA6ICJ0b3AiLAoJCXRo ZW1lX2FkdmFuY2VkX2J1dHRvbnMxIDogImJvbGQsaXRhbGljLHVuZGVybGluZSxzdHJpa2V0 aHJvdWdoLGZvcmVjb2xvcixiYWNrY29sb3IscmVtb3ZlZm9ybWF0LG51bWxpc3QsYnVsbGlz dCxvdXRkZW50LGluZGVudCxqdXN0aWZ5bGVmdCxqdXN0aWZ5Y2VudGVyLGp1c3RpZnlyaWdo dCxqdXN0aWZ5ZnVsbCIsCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczIgOiAibGluayx1bmxp bmssc2VwYXJhdG9yLGlicm93c2VyLHNlcGFyYXRvcixzZWFyY2gscmVwbGFjZSxzZXBhcmF0 b3IsY3V0LGNvcHkscGFzdGUsc2VwYXJhdG9yLGNvZGUsc2VwYXJhdG9yLGZvcm1hdHNlbGVj dCIsCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczMgOiAiIgoJfSk7Cjwvc2NyaXB0PjsKRU9G OwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiZWRpdF9hcmVhIjoKCQkJCQkkb3V0W10gPSA8PDxF T0YKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGVkaXRvcl9kaXIvZWRp dF9hcmVhX2Z1bGwuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw dCI+CgkvLyBpbml0aWFsaXNhdGlvbgoJZWRpdEFyZWFMb2FkZXIuaW5pdCh7CgkJaWQ6ICJw bHVnaW5fZWRpdG9yIgkvLyBpZCBvZiB0aGUgdGV4dGFyZWEgdG8gdHJhbnNmb3JtCgkJLHN0 YXJ0X2hpZ2hsaWdodDogdHJ1ZQkvLyBpZiBzdGFydCB3aXRoIGhpZ2hsaWdodAoJCSxhbGxv d19yZXNpemU6ICJib3RoIgoJCSxhbGxvd190b2dnbGU6IHRydWUKCQksbGFuZ3VhZ2U6ICJl biIKCQksc3ludGF4OiAicGhwIgoJfSk7Cjwvc2NyaXB0PgpFT0Y7CgkJCQkJYnJlYWs7CgkJ CQljYXNlICJjb2RlcHJlc3MiOgoJCQkJCSRvdXRbXSA9ICc8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCIgc3JjPSInLiRlZGl0b3JfZGlyLicvY29kZXByZXNzLmpzIj48L3Njcmlw dD4nOwoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoKCXJldHVybiBpbXBsb2RlKCJcbiIsICRv dXQpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5faGVscF92aWV3ZXIoJG1l c3NhZ2U9JycpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJcGFnZXRvcChnVHh0 KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgoJaWYgKGdwcygnbmFtZScpKSB7CgkJJG5h bWUgPSBncHMoJ25hbWUnKTsKCQkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4 cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQlsaXN0KCRjc3MsJGhlbHApID0gKCRo ZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+ IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVsc2UgaWYgKGdwcygnZmlsZW5hbWUn KSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11b J3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3QoJHBs dWdpbik7Cgl9CgllY2hvIHN0YXJ0VGFibGUoJ2VkaXQnKTsKCWlmIChlbXB0eSgkaGVscCkp IHsKCQllY2hvIHRyKHRkYSgnPHA+SGVscCBub3QgYWNjZXNzaWJsZSBmcm9tIHRoaXMgZmls ZS48L3A+JykpOwoJfSBlbHNlIHsKCQlsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBp ZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3Nz X3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgkJJHBsdWdpblsn aGVscCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwgJGNzcywgJHN0YXJ0 X2NzcywgJGVuZF9jc3MpOwoJCWVjaG8gdHIodGRhKCAnPHA+RXh0cmFjdGVkICcuKCFlbXB0 eSgkcGx1Z2luWydoZWxwJ10pID8gJ2FuZCBUZXh0aWxlIHByb2Nlc3NlZCcgOiAnJykuJyBo ZWxwIHNlY3Rpb24gZm9sbG93cyYjODIzMDs8L3A+PGhyPicsICcgd2lkdGg9IjYwMCInKSk7 CgkJZWNobyB0cih0ZGEoJHBsdWdpblsnaGVscCddLCAnIHdpZHRoPSI2MDAiJykpOwoJfQoJ ZWNobyBlbmRUYWJsZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2V0 dXAoJG1lc3NhZ2U9JycpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRudW1SZXFQ cmVmcyA9IGNvdW50KCRpZWRfcGx1Z2luX3ByZWZzWzBdKTsKCglwYWdldG9wKGdUeHQoJ2Vk aXRfcGx1Z2lucycpLCRtZXNzYWdlKTsKCSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9kZSgi JywnIixhcnJheV9rZXlzKCRpZWRfcGx1Z2luX3ByZWZzWzBdKSkpOwoJJHJzID0gc2FmZV9y b3dzKCduYW1lLHZhbCxodG1sJywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4kcHJlZmtleXMu JyknKTsKCSRudW1Sb3dzID0gY291bnQoJHJzKTsKCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3Vi bWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsKCSRidG5JbnN0YWxs ID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21w b3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwiIHN0eWxlPSJkaXNwbGF5 OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdpbnN0YWxsJyks ICdwdWJsaXNoJykuJzwvZm9ybT4nOwoJJGJ0blJlbW92ZSA9ICc8Zm9ybSBtZXRob2Q9InBv c3QiIGFjdGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3Bs dWdpbl9wcmVmc19yZW1vdmUiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1 Ym1pdCcsICdzdWJtaXQnLCBnVHh0KCdkZWxldGUnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7 CgkkYnRuU3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOwoKCWVjaG8g c3RhcnRUYWJsZSgnbGlzdCcpOwoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykgewoJ CS8vIFByZWZzIGFsbCBpbnN0YWxsZWQKCQllY2hvIHRyKHRkYShzdHJvbmcoaWVkX3BsdWdp bl9nVHh0KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpIC4gdGRhKCRidG5SZW1v dmUsICRidG5TdHlsZSkgKTsKCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0i P2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9wcmVmc191 cGRhdGUiPic7CgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8ICRudW1Sb3dzOyAkaWR4KyspIHsK CQkJJGEgPSAkcnNbJGlkeF07CgkJCSRsYWJlbCA9ICc8bGFiZWwgZm9yPSInLiRhWyduYW1l J10uJyI+Jy5pZWRfcGx1Z2luX2dUeHQoJGFbJ25hbWUnXSkuJzo8L2xhYmVsPic7CgkJCSRv dXQgPSB0ZGEoJGxhYmVsLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwt YWxpZ246IG1pZGRsZTsiJyk7CgkJCXN3aXRjaCgkYVsnbmFtZSddKSB7CgkJCQljYXNlICJp ZWRfcGx1Z2luX2VkaXRvcl9wYXRoIjoKCQkJCWNhc2UgImllZF9wbHVnaW5faGVscF9lZGl0 b3JfcGF0aCI6CgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9zZmlsZSI6CgkJCQljYXNl ICJpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMiOgoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRw dXRfc2ZpbGVwIjoKCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3RtcGNhY2hlIjoKCQkJ CQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1lJ10sICRhWyd2YWwnXSwgJ2Vk aXQnLCAnJywgJycsIDUwLCAnJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQkJY2Fz ZSAiaWVkX3BsdWdpbl9lZGl0b3IiOgovLwkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgk YVsnbmFtZSddLCBhcnJheSgnbm9uZScgPT4gJ05vbmUnLCAnZWRpdF9hcmVhJyA9PiAnRWRp dCBBcmVhJywgJ2NvZGVwcmVzcycgPT4gJ0NvZGVQcmVzcycpLCAkYVsndmFsJ10sICcnLCAn IG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMudmFsdWUpOyIn LCAkYVsnbmFtZSddKSk7CgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSdd LCBhcnJheSgnbm9uZScgPT4gJ05vbmUnLCAnZWRpdF9hcmVhJyA9PiAnRWRpdCBBcmVhJyks ICRhWyd2YWwnXSwgJycsICcgb25jaGFuZ2U9ImllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5p ZCwgdGhpcy52YWx1ZSk7IicsICRhWyduYW1lJ10pKTsKCQkJCQlicmVhazsKCQkJCWNhc2Ug ImllZF9wbHVnaW5faGVscF9lZGl0b3IiOgoJCQkJCSRvdXQgLj0gdGQoc2VsZWN0SW5wdXQo JGFbJ25hbWUnXSwgYXJyYXkoJ3RleHRpbGUnID0+ICdOb25lIChUZXh0aWxlKScsICd0aW55 X21jZScgPT4gJ1RpbnkgTUNFJyksICRhWyd2YWwnXSwgJycsICcgb25jaGFuZ2U9ImllZF9w bHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7IicsICRhWyduYW1lJ10pKTsK CQkJCQlicmVhazsKCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X29yZGVyIjoKCQkJCQkk b3V0IC49IHRkKHJhZGlvKCRhWyduYW1lJ10sMCwoKCRhWyd2YWwnXT09MCk/MTowKSkuaWVk X3BsdWdpbl9nVHh0KCdvdXRwdXRfY29kZV9maXJzdCcpLiIgIiAuIHJhZGlvKCRhWyduYW1l J10sMSwoKCRhWyd2YWwnXT09MSk/MTowKSkuaWVkX3BsdWdpbl9nVHh0KCdvdXRwdXRfaGVs cF9maXJzdCcpLiIgIik7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRv cl93aWR0aCI6CgkJCQkJJG91dCAuPSB0ZChmSW5wdXQoJ3RleHQnLCAkYVsnbmFtZSddLCAk YVsndmFsJ10sICdlZGl0JywgJycsICcnLCA1LCAnJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJy ZWFrOwoJCQl9CgkJCWVjaG8gdHIoJG91dCk7CgkJfQoJCWVjaG8gdHIodGRhKCRidG5TYXZl LCAkYnRuU3R5bGUpKTsKCQllY2hvICc8L2Zvcm0+JzsKCX0gZWxzZSBpZiAoJG51bVJvd3Mg PiAwICYmICRudW1Sb3dzIDwgJG51bVJlcVByZWZzKSB7CgkJZWNobyB0cih0ZGEoc3Ryb25n KGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfc29tZScpKS5ici5icgoJCQkJCQkuaWVkX3BsdWdp bl9nVHh0KCdwcmVmc19zb21lX2V4cGxhaW4nKS5ici5icgoJCQkJCQkuaWVkX3BsdWdpbl9n VHh0KCdwcmVmc19zb21lX29wdGlvbnMnKSwgJyBjb2xzcGFuPSIyIicpKTsKCQllY2hvIHRy KHRkYSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHls ZSkpOwoJfSBlbHNlIHsKCQllY2hvIHRyKHRkYShpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX25v dF9pbnN0YWxsZWQnKSwgJyBjb2xzcGFuPSIyIicpKTsKCQllY2hvIHRyKHRkYSgkYnRuSW5z dGFsbCwgJGJ0blN0eWxlKSk7Cgl9CgllY2hvIGVuZFRhYmxlKCk7CgoJZWNobyA8PDxFT0YK PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp2YXIgaWVkX3BsdWdpbl9wYXRoX3Jl ID0gbmV3IFJlZ0V4cCgiXi4qWy9cXF0iLCAiZyIpCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJl ZnN3YXAoc2VsSUQsIHNlbFZhbHVlKSB7Cgl2YXIgaWQgPSBzZWxJRCsnX3BhdGgnOwoJdmFy IG51dmFsID0gKChiYXNlbmFtZSgkKCIjIitpZCkudmFsKCkpID09IHNlbFZhbHVlKSA/ICQo IiMiK2lkKS52YWwoKSA6IGRpcm5hbWUoJCgiIyIraWQpLnZhbCgpKStzZWxWYWx1ZSk7Cglp ZiAoJCgiIyIrc2VsSUQpWzBdLnNlbGVjdGVkSW5kZXggPT0gMCkgewoJCSQoIiMiK2lkKS5h dHRyKCJkaXNhYmxlZCIsIHRydWUpOyA7Cgl9IGVsc2UgewoJCSQoIiMiK2lkKS5hdHRyKCJk aXNhYmxlZCIsIGZhbHNlKTsgOwoJCSQoIiMiK2lkKS52YWwobnV2YWwpOwoJfQp9CmZ1bmN0 aW9uIGJhc2VuYW1lKHBhdGgsIHN1ZmZpeCkgewoJcmV0dXJuIHBhdGgucmVwbGFjZShpZWRf cGx1Z2luX3BhdGhfcmUsICcnKTsKfQpmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHsKCXJldHVy biBwYXRoLm1hdGNoKGllZF9wbHVnaW5fcGF0aF9yZSk7Cn0KJChmdW5jdGlvbigpIHsKCSQo InNlbGVjdC5saXN0IikuZWFjaChmdW5jdGlvbigpIHsKCQlpZWRfcGx1Z2luX3ByZWZzd2Fw KHRoaXMuaWQsIHRoaXMudmFsdWUpOwoJfSk7Cn0pOwo8L3NjcmlwdD4KRU9GOwp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCgpIHsKCWdsb2JhbCAk aWVkX3BsdWdpbl9wcmVmczsKCSRtZXNzYWdlID0gJyc7Cglmb3JlYWNoICgkaWVkX3BsdWdp bl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgewoJCWlmICghZmV0Y2goJ25hbWUnLCd0 eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsKCQkJJGlkID0gc2FmZV9pbnNlcnQoJ3R4cF9w cmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9Jy5kb1F1b3RlKGRvU2xhc2goJHByZWYpKS4nLCB2 YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2ZW50PSJpZWRfcGx1Z2luIicpOwoJ CX0KCX0KCSRtZXNzYWdlID0gaWVkX3BsdWdpbl9nVHh0KCdwcmVmc19pbnN0YWxsZWQnKTsK CWllZF9wbHVnaW5fc2V0dXAoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGll ZF9wbHVnaW5fcHJlZnNfcmVtb3ZlKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJ JG1lc3NhZ2UgPSAnJzsKCWZvcmVhY2ggKGFycmF5X21lcmdlKCRpZWRfcGx1Z2luX3ByZWZz WzBdLCRpZWRfcGx1Z2luX3ByZWZzWzFdKSBhcyAkcHJlZiA9PiAkZGZsdCkgewoJCWlmIChm ZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgewoJCQkkaWQgPSBzYWZl X2RlbGV0ZSgndHhwX3ByZWZzJywnbmFtZT0nLmRvUXVvdGUoZG9TbGFzaCgkcHJlZikpKTsK CQl9Cgl9CgkkbWVzc2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfZGVsZXRlZCcpOwoJ aWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVk X3BsdWdpbl9wcmVmc191cGRhdGUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7Cgkk bWVzc2FnZSA9ICcnOwoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9zdCgpKTsKCWZvcmVhY2gg KCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGlzc2V0 KCRwb3N0WyRwcmVmXSkpIHsKCQkJc2FmZV91cGRhdGUoInR4cF9wcmVmcyIsICJ2YWwgPSAn Ii4kcG9zdFskcHJlZl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2goJHByZWYpLiInIGFuZCBw cmVmc19pZCA9IDEiKTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3Nh dmVkJyk7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gQm9vbyEgc2FuaXRp emVGb3JGaWxlKCkgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb3JlIHNvIGR1cGxpY2F0 ZSBpdHMgZnVuY3Rpb25hbGl0eQppZiAoIWZ1bmN0aW9uX2V4aXN0cygic21kX3Nhbml0aXpl Rm9yRmlsZSIpKSB7CmZ1bmN0aW9uIHNtZF9zYW5pdGl6ZUZvckZpbGUoJG5hbWUpIHsKCSRu ZXduYW1lID0gcHJlZ19yZXBsYWNlKCcvW1x4MDAtXHgxZlx4MjJceDJhXHgyZlx4M2FceDNj XHgzZVx4M2ZceDVjXHg3Y1x4N2ZdKy8nLCAnJywgJG5hbWUpOwoJJG5ld25hbWUgPSBwcmVn X3JlcGxhY2UoJy9bLl17Mix9LycsICcuJywgdHJpbSgkbmV3bmFtZSwgJy4gJykpOwoJcmV0 dXJuICRuZXduYW1lOwp9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9nVHh0 KCR3aGF0LCAkYXR0cyA9IGFycmF5KCkpIHsKCSRsYW5nID0gYXJyYXkoCgkJJ2NoZWNrX3R5 cGUnID0+ICdDaGVjayB5b3VyIHBsdWdpbiB0eXBlIScsCgkJJ2Nob29zZV9maWxlJyA9PiAn WW91IGFyZSBzdXBwb3NlZCB0byBjaG9vc2UgdGhlIGZpbGUgOyknLAoJCSdjb2RlX2Rpc3Qn ID0+ICdQbHVnaW4gY29kZTxicj5mb3IgZGlzdHJpYnV0aW9uJywKCQknaWVkX3BsdWdpbl9j b21wb3NlcicgPT4gJ1BsdWdpbiBDb21wb3NlcicsCgkJJ2NvbXByZXNzJyA9PiAnWmlwJywK CQknY3JlYXRlX25ldycgPT4gJ0NyZWF0ZSBuZXcgcGx1Z2luJywKCQknZW5hYmxlJyA9PiAn RW5hYmxlZCcsCgkJJ2V4cG9ydCcgPT4gJ0V4cG9ydCBhcycsCgkJJ2llZF9wbHVnaW5fZWRp dG9yJyA9PiAnUGx1Z2luIGVkaXRvcicsCgkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+ ICdQbHVnaW4gZWRpdG9yIHBhdGggVVJMJywKCQknaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgn ID0+ICdQbHVnaW4gZWRpdG9yIHdpZHRoIChjaGFycyknLAoJCSdpZWRfcGx1Z2luX2hlbHBf ZWRpdG9yJyA9PiAnSGVscCBlZGl0b3InLAoJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3Bh dGgnID0+ICdIZWxwIGVkaXRvciBwYXRoIFVSTCcsCgkJJ2llZF9wbHVnaW5fb3V0cHV0X29y ZGVyJyA9PiAnUEhQIGV4cG9ydCBvcmRlcicsCgkJJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxl JyA9PiAnRXhwb3J0IHBsdWdpbiBmaWxlbmFtZSBmb3JtYXQnLAoJCSdpZWRfcGx1Z2luX291 dHB1dF9zZmlsZWMnID0+ICdFeHBvcnQgY29tcHJlc3NlZCBmaWxlbmFtZSBmb3JtYXQnLAoJ CSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICdQbHVnaW4gdGVtcGxhdGUgZmlsZW5h bWUgZm9ybWF0JywKCQknaWVkX3BsdWdpbl9vdXRwdXRfdG1wY2FjaGUnID0+ICdDYWNoZSBk aXInLAoJCSduYW1lJyA9PiAnUGx1Z2luIG5hbWUnLAoJCSduYW1lX2ZpcnN0JyA9PiAnWW91 IGFyZSBzdXBwb3NlZCB0byBuYW1lIHRoZSBwbHVnaW4gOyknLAoJCSduYW1lX3Rvb2x0aXAn ID0+ICdPbmx5IG5lZWRlZCBpZiB0aGUgUEhQIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgaXMg Tk9UIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQnLAoJCSdsb2FkX29yZGVyJyA9 PiAnTG9hZCBvcmRlcicsCgkJJ2xvYWRfb3JkZXJfaGVscCcgPT4gJygxPWZpcnN0LCA1PW5v cm1hbCwgOT1sYXN0KScsCgkJJ291dHB1dF9jb2RlX2ZpcnN0JyA9PiAnQ29kZSBmaXJzdCcs CgkJJ291dHB1dF9oZWxwX2ZpcnN0JyA9PiAnSGVscCBmaXJzdCcsCgkJJ3BsdWdpbl9jb2Rl JyA9PiAnU291cmNlIGNvZGUnLAoJCSdwcmVmc19kZWxldGVkJyA9PiAnUHJlZmVyZW5jZXMg ZGVsZXRlZCcsCgkJJ3ByZWZzX2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxl ZCcsCgkJJ3ByZWZzX25vdF9pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBub3QgaW5zdGFs bGVkLicsCgkJJ3ByZWZzX3NvbWUnID0+ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2YWlsYWJs ZS4nLAoJCSdwcmVmc19zb21lX2V4cGxhaW4nID0+ICdJdCBpcyBlaXRoZXIgYmVjYXVzZSB0 aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5ici4ncGx1Z2luIHRvIG9uZSB5 b3UgaGFkIGJlZm9yZSBvciB0aGUgcHJlZmVyZW5jZXMnLmJyLidoYXZlIGJlY29tZSBjb3Jy dXB0IHNvbWVob3cuJywKCQkncHJlZnNfc29tZV9vcHRpb25zJyA9PiAnQ2hvb3NlICcuZ1R4 dCgnZGVsZXRlJykuJyB0byByZW1vdmUgdGhlbSBhbGwgb3IgJy5nVHh0KCdpbnN0YWxsJyku JyB0byBhZGQnLmJyLidhbnkgbmV3IG9uZXMsIGxlYXZpbmcgYWxsIGV4aXN0aW5nIHByZWZl cmVuY2VzIHVudG91Y2hlZC4nLAoJCSdwcmVmc190aXRsZScgPT4gJ1BsdWdpbiBDb21wb3Nl ciBwcmVmZXJlbmNlcycsCgkJJ3JlbmFtZV9mYWlsZWQnID0+ICcgKHJlbmFtZSBmYWlsZWQp LiAnLAoJCSdyZW5hbWVfZmlsZScgPT4gJ1JlbmFtZSBmaWxlJywKCQkncmVuYW1lZCcgPT4g JyBhbmQgcmVuYW1lZC4gJywKCQkncmVzdG9yZV9oZWxwJyA9PiAnUm9sbCBiYWNrIHRoZSBw bHVnaW4gY29kZSB0byB0aGUgbW9zdCByZWNlbnQgcmVzdG9yZSBwb2ludCcsCgkJJ3Jlc3Rv cmVfcG9pbnQnID0+ICdSZXN0b3JlIHBvaW50JywKCQkncmVzdG9yZV92ZXJpZnknID0+ICdB cmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcm9sbGJhY2sgdGhlIHtuYW1lfSBzb3VyY2UgY29k ZSB0byBpdHMgbGFzdCByZXN0b3JlIHBvaW50PycsCgkJJ3Jlc3RvcmVkJyA9PiAnUGx1Z2lu IHtuYW1lfSByZXN0b3JlZC4nLAoJCSdydW5fZnJvbScgPT4gJ1BsdWdpbnMgdGhhdCBydW4g ZnJvbScsCgkJJ3NhdmVfYXMnID0+ICdTYXZlIGFzJywKCQknc2V0dXAnID0+ICdTZXR1cCcs CgkJJ3R5cGUnID0+ICdQbHVnaW4gdHlwZScsCgkJJ3R5cGVfMCcgPT4gJ0NsaWVudCcsCgkJ J3R5cGVfMScgPT4gJ0FkbWluICsgQ2xpZW50JywKCQkndHlwZV8yJyA9PiAnTGlicmFyeScs CgkJJ3R5cGVfMycgPT4gJ0FkbWluJywKCQkndXBsb2FkX3BocCcgPT4gJ1VwbG9hZCBwbHVn aW4gZnJvbSBQSFAgZmlsZScsCgkJJ3V0aWxpdGllcycgPT4gJ1V0aWxpdGllcyAoPHN0cm9u Zz51c2Ugb25seSBhZnRlciBzYXZpbmcgdGhlIGRhdGEgYWJvdmU8L3N0cm9uZz4pJywKCSk7 CglyZXR1cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7Cn0iO3M6MzoibWQ1IjtzOjMy OiIwOTdmOGRmYjYyZjY3ODEyMDAzNjQ2OTcxZGIxMWU0NCI7fQ==