# Name: smd_where_used v0.2 # Type: Admin only plugin # Find which forms/pages/articles/plugins/text have been used where in your design # Author: Stef Dawson # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE0OiJzbWRfd2hlcmVfdXNlZCI7czo2OiJhdXRob3IiO3M6 MTE6IlN0ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRh d3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMC4yIjtzOjExOiJkZXNjcmlwdGlvbiI7 czo4MDoiRmluZCB3aGljaCBmb3Jtcy9wYWdlcy9hcnRpY2xlcy9wbHVnaW5zL3RleHQgaGF2 ZSBiZWVuIHVzZWQgd2hlcmUgaW4geW91ciBkZXNpZ24iO3M6NDoiaGVscCI7czo2ODYyOiIJ PHA+PGRpdiBpZD0ic21kX2hlbHAiPjwvcD4KCgk8aDE+c21kX3doZXJlX3VzZWQ8L2gxPgoK CTxwPlJlYWxseSBzaW1wbGUgYWRtaW4tc2lkZSBwbHVnaW4gdG8gaGVscCBmaW5kIHdoYXQg eW91IG5lZWQgdG8gZWRpdC9kZWxldGUuIElmIHlvdSBoYXZlIGEgdG9ubmUgb2YgZm9ybXMg b3IgcGFnZXMgYW5kIHdhbnQgdG8gdGlkeSBzdHVmZiB1cCBpdCBjYW4gYmUgYSBiaXQgb2Yg YSBwYWluIHRvIGZpbmQgd2hhdCYjODIxNztzIGFjdHVhbGx5IGluIHVzZS48L3A+CgoJPHA+ U28gdXNlIHRoaXMgcGx1Z2luIHRvIHNlYXJjaCB5b3VyIHNlY3Rpb25zLCBwYWdlcywgZm9y bXMgb3IgYXJ0aWNsZXMgZm9yIHJlZmVyZW5jZXMgdG8gcGx1Z2lucywgb3Igb3RoZXIgcGFn ZXMvZm9ybXMgb3IgZXZlbiBqdXN0IHBsYWluIHRleHQgaW4gYXJ0aWNsZXMuPC9wPgoKCTxo MiBjbGFzcz0iYXV0aG9yIj5BdXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdzb248L2E+PC9wPgoKCTxoMiBjbGFz cz0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwPkRv d25sb2FkIHRoZSBwbHVnaW4gZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0 ZXJuLm9yZy9wbHVnaW5zLzk4NC9zbWRfd2hlcmVfdXNlZCI+dGV4dHBhdHRlcm4ub3JnPC9h Piwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUg cGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IEFkbWluIC0mZ3Q7IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxl IHRoZSBwbHVnaW4uIFZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRl cm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9Mjc0OTMiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1v cmUgaW5mbyBhbmQgdG8gcmVwb3J0IHRoZSBzdWNjZXNzIChvciBvdGhlcndpc2UpIG9mIHRo aXMgcGx1Z2luLjwvcD4KCgk8cD5Vbmluc3RhbGwgYnkgc2ltcGx5IGRlbGV0aW5nIHRoZSBw bHVnaW4gZnJvbSB0aGUgQWRtaW4tJmd0O1BsdWdpbnMgcGFuZS48L3A+CgoJPGgyIGNsYXNz PSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPlZpc2l0IHRoZSBFeHRlbnNpb25zIHRhYiBhbmQg Q2xpY2sgJiM4MjE2O1doZXJlIHVzZWQmIzgyMTc7IHRvIGFjY2VzcyB0aGUgc2VhcmNoIGZv cm0uIFR5cGUgc29tZSBzdHVmZiB0byBmaW5kLCBzZWxlY3Qgd2hlcmUgeW91IHdhbnQgdG8g bG9vayBhbmQgaGl0ICYjODIxNjtTZWFyY2gmIzgyMTc7IG9yIHByZXNzIEVudGVyLiBZb3Vy IHJlcXVlc3RlZCBsb2NhdGlvbnMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgdGhhdCB0ZXJtIGFu ZCB0aGUgcmVzdWx0cyB0YWJ1bGF0ZWQsIHdpdGggaHlwZXJsaW5rcyB0byB0aGUgb2ZmZW5k aW5nIGl0ZW1zIHNvIHlvdSBjYW4gcXVpY2tseSBlZGl0IHRoZW0uPC9wPgoKCTxwPllvdSBj YW4gZGVjaWRlIHdoZXRoZXIgdG8gc2VhcmNoIGZvciB0aGUgdGVybSAoJiM4MjIwO0luY2x1 ZGUmIzgyMjE7KSBvciB0byBzZWFyY2ggZm9yIHN0dWZmIDxzcGFuIGNsYXNzPSJjYXBzIj5O T1Q8L3NwYW4+IGNvbnRhaW5pbmcgdGhhdCB0ZXJtICgmIzgyMjA7RXhjbHVkZSYjODIyMTsp LiBZb3UgbWF5IGFsc28gY2hvb3NlIHdoZXRoZXIgeW91ciBzZWFyY2ggdGVybSBtYXRjaGVz L2RvZXMgbm90IG1hdGNoIGEgd2hvbGUgd29yZCBvciBpcyBjYXNlIHNlbnNpdGl2ZS48L3A+ CgoJPHA+VGhpcyBpcyB3aGF0IHRoZSBwbHVnaW4gbG9va3MgYXQgd2hlbiB5b3Ugc2VsZWN0 IGEgcGFydGljdWxhciBjaGVja2JveCBmcm9tIHRoZSAmIzgyMjA7TG9vayBpbiYjODIyMTsg cm93OjwvcD4KCgk8dWw+CgkJPGxpPiYjODIxNjtTZWN0aW9ucyYjODIxNzsgc2VhcmNoZXMg ZXZlcnkgU2VjdGlvbiBmb3IgcGFnZXMgb3Igc3R5bGVzaGVldHMgd2l0aCB0aGUgbWF0Y2hp bmcgbmFtZTwvbGk+CgkJPGxpPiYjODIxNjtQYWdlcyYjODIxNzsgc2VhcmNoZXMgZXZlcnkg UGFnZSBmb3IgZm9ybXMgLyBwbHVnaW5zIC8gdGV4dCB3aXRoIHRoZSBtYXRjaGluZyBuYW1l PC9saT4KCQk8bGk+JiM4MjE2O0Zvcm1zJiM4MjE3OyBzZWFyY2hlcyBldmVyeSBGb3JtIGZv ciBwbHVnaW5zIC8gb3RoZXIgZm9ybXMgLyB0ZXh0IHdpdGggdGhlIG1hdGNoaW5nIG5hbWU8 L2xpPgoJCTxsaT4mIzgyMTY7QXJ0aWNsZXMmIzgyMTc7IHNlYXJjaGVzIChieSBkZWZhdWx0 KSBldmVyeSBBcnRpY2xlIHNlY3Rpb24sIGJvZHksIGV4Y2VycHQsIG92ZXJyaWRlX2Zvcm0s IHRpdGxlIGFuZCBrZXl3b3JkIGZvciBtZW50aW9uIG9mIHRoZSB0ZXh0IHlvdSBzcGVjaWZ5 LiBDbGljayB0aGUgPGVtPkFydGljbGUgc2VhcmNoIGZpZWxkczwvZW0+IGJ1dHRvbiB0byBz ZWUgYSBsaXN0IG9mIGRhdGFiYXNlIGNvbHVtbnMgdGhhdCB5b3UgbWF5IHNlYXJjaC4gQ2hl Y2sgdGhlIG9uZXMgeW91IHdpc2ggdG8gY29uc2lkZXIgYW5kIGNsaWNrIDxlbT5TYXZlPC9l bT48L2xpPgoJPC91bD4KCgk8cD5JZiwgaG93ZXZlciwgeW91IGxlYXZlIHRoZSAmIzgyMTY7 RmluZCYjODIxNzsgYm94IGVtcHR5IGFuZCBjbGljayAmIzgyMTY7U2VhcmNoJiM4MjE3OyB0 aGUgcGx1Z2luIHdpbGwgc2VhcmNoIGZvciBvcnBoYW5zLiBPcnBoYW5zIGFyZSBkZWZpbmVk IGFzIGZvbGxvd3M6PC9wPgoKCTx1bD4KCQk8bGk+QW55IFBhZ2UgdGhhdCBpcyBub3QgYXNz aWduZWQgdG8gYSBTZWN0aW9uPC9saT4KCQk8bGk+QW55IFN0eWxlc2hlZXQgdGhhdCBpcyBu b3QgYXNzaWduZWQgdG8gYSBTZWN0aW9uPC9saT4KCQk8bGk+QW55IFNlY3Rpb24gdGhhdCBo YXMgbm8gQXJ0aWNsZXMgaW4gaXQgKGV4Y2x1ZGluZyDigJhkZWZhdWx04oCZIHdoaWNoIGNh bm5vdCBoYXZlIGFuIGFydGljbGUgYW55d2F5KTwvbGk+CgkJPGxpPkFueSBQbHVnaW4gdGhh dCBpcyBub3QgcmVmZXJlbmNlZCBmcm9tIGFuIEFydGljbGUgKGJvZHkvZXhjZXJwdCkgb3Ig YW5vdGhlciBGb3JtIG9yIFBhZ2U8L2xpPgoJCTxsaT5BbnkgRm9ybSB0aGF0IGhhcyBubyBy ZWZlcmVuY2UgdG8gaXQgaW4gYW55IEFydGljbGUgKGJvZHkvZXhjZXJwdC9vdmVycmlkZV9m b3JtKSBvciBhbm90aGVyIEZvcm0gb3IgUGFnZTwvbGk+Cgk8L3VsPgoKCTxwPk5vdGVzOjwv cD4KCgk8dWw+CgkJPGxpPk9ycGhhbmVkIGFydGljbGVzIGRvbiYjODIxNzt0IG1ha2Ugc2Vu c2Ugc28gdGhleSBhcmUgb21pdHRlZC4gVGhlIGNoZWNrYm94IGlzIGlnbm9yZWQ8L2xpPgoJ CTxsaT5Fc3NlbnRpYWwgc2VjdGlvbnMgLyBwYWdlcyAvIGZvcm1zIHRoYXQgY2Fubm90IGJl IGRlbGV0ZWQgYXJlIG5vdCBsaXN0ZWQ8L2xpPgoJCTxsaT5TdHlsZXNoZWV0cyBhbmQgUGx1 Z2lucyBhcmUgYWx3YXlzIGRpc3BsYXllZCBiZWNhdXNlIHRoZXJlIGFyZSBubyBjaGVjayBi b3hlcyBmb3IgdGhlbS4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSBwbHVnaW4gZG9lcyBub3Qg YWxsb3cgc2VhcmNoaW5nIHdpdGhpbiBhIHBsdWdpbiBvciBhIHN0eWxlc2hlZXQgZm9yIGEg cmVmZXJlbmNlIHRvIGEgd29yZCwgYnV0IGl0IGRvZXMgY2hlY2sgb3RoZXIgcGxhY2VzIGZv ciByZWZlcmVuY2VzIDxlbT50bzwvZW0+IHBsdWdpbnMgYW5kIHN0eWxlc2hlZXRzPC9saT4K CQk8bGk+UGx1Z2luIGxpc3QgY2FuIGJlIHRvZ2dsZWQgYmV0d2VlbiB0aGUgZGVmYXVsdCBj bGllbnQtb25seSBwbHVnaW5zIG9yIGJvdGggY2xpZW50IGFuZCBhZG1pbiBwbHVnaW5zLiBD bGljayAmIzgyMTY7U2VhcmNoJiM4MjE3OyBhZ2FpbiB0byB0b2dnbGU8L2xpPgoJCTxsaT5K dXN0IGJlY2F1c2UgYW4gaXRlbSBpcyBsaXN0ZWQgYXMgb3JwaGFuZWQgZG9lcyA8ZW0+bm90 IG5lY2Vzc2FyaWx5IG1lYW4gaXQgaXMgbm90IHVzZWQ8L2VtPiEgRm9yIGV4YW1wbGUsIHJ2 bV9tYWludGVuYW5jZSBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gPGNvZGU+ZXJy b3JfNTAzPC9jb2RlPiBQYWdlLiBTaW5jZSBpdCBpcyBuZXZlciBhc3NpZ25lZCB0byBhIFNl Y3Rpb24gaXQgd2lsbCBiZSBsaXN0ZWQgYXMgb3JwaGFuZWQuIElmIHlvdSBoYXZlIGEgZGVk aWNhdGVkIHN0eWxlc2hlZXQgZm9yIG1haW50ZW5hbmNlIG1vZGUgdGhhdCwgdG9vLCB3aWxs IGJlIHNob3duIGFzIG9ycGhhbmVkLiBJbiBzaG9ydCwgYmUgY2FyZWZ1bCBhbmQgbWFrZSBh IGJhY2t1cCA6LSk8L2xpPgoJCTxsaT5QbHVnaW5zIHN1Y2ggYXMgcGFwX2NvbnRhY3RfY2xl YW5lciBhbmQgcnZtX21haW50ZW5hbmNlIGFyZSBsaXN0ZWQgYXMgb3JwaGFucyBldmVuIHRo b3VnaCB0aGV5IGFyZSB1c2VkIGJ5IG90aGVyIHBsdWdpbnMgLyB1c3VhbGx5IGRpc2FibGVk LiBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCBhIHBsdWdpbiwgY2hlY2sgaXQgYnkgdHlwaW5n IGEgcGFydGlhbCB0YWcgbmFtZSBpbnRvIHRoZSBzZWFyY2ggYm94PC9saT4KCTwvdWw+CgoJ PGgyIGNsYXNzPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJCTxsaT4xNiBK dW4gMDggfCB2MC4xIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MTYgSnVuIDA4IHwg djAuMTEgfCBBZGRlZCBzZWN0aW9uIHNlYXJjaCBhbmQgb3ZlcnJpZGVfZm9ybTwvbGk+CgkJ PGxpPjE2IEp1biAwOCB8IHYwLjEyIHwgQWRkZWQgaW5jbHVkZS9leGNsdWRlICh0aGFua3Mg bXJkYWxlKTwvbGk+CgkJPGxpPjE2IEp1biAwOCB8IHYwLjEzIHwgQWRkZWQgYWJpbGl0eSB0 byBtYXRjaCB3aG9sZSB3b3JkcyAodGhhbmtzIHphbnphKTwvbGk+CgkJPGxpPjE3IEp1biAw OCB8IHYwLjE0IHwgQWRkZWQgb3JwaGFuIHNlYXJjaCAodGhhbmtzIHVsaS9uZXQtY2FydmVy KTwvbGk+CgkJPGxpPjE4IEp1biAwOCB8IHYwLjE1IHwgRml4ZWQgcGx1Z2luIGxpc3Qgc28g aXQgZG9lcyBhIGRlZXAgc2VhcmNoIGluc2lkZSB0aGUgc291cmNlIGNvZGUgZm9yIHRhZyBu YW1lczwvbGk+CgkJPGxpPjE4IEp1biAwOCB8IHYwLjE2IHwgQWRkZWQgYWRtaW4vY2xpZW50 IHNpZGUgcGx1Z2luIHRvZ2dsZSA7IHNlYXJjaGVzIG5vdyBleHRlbmRlZCB0byB0aXRsZSBh bmQga2V5d29yZHMgKGJvdGggdGhhbmtzIHVsaSk8L2xpPgoJCTxsaT4xOCBKdW4gMDggfCB2 MC4xNyB8IEFydGljbGVzIGFyZSBsaW5rZWQgd2l0aCBJRCBhbmQgdGl0bGUgKHRoYW5rcyB1 bGkpPC9saT4KCQk8bGk+MTggSnVuIDA4IHwgdjAuMTggfCBBZGRlZCBjYXNlIHNlbnNpdGl2 ZSBzZWFyY2hlcyAodGhhbmtzIGdlb2ZmNzc3KTwvbGk+CgkJPGxpPjExIE1hciAwOSB8IHYw LjE5IHwgQWRkZWQgYXV0by1mb2N1cyB0byBzZWFyY2ggYm94PC9saT4KCQk8bGk+MTIgQXVn IDA5IHwgdjAuMiB8IFJlcXVpcmVzIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IDQu Mi4wIDsgYWRkZWQgYXV0by1wcmVmcyBmb3IgJiM4MjE2O2xvb2sgaW4mIzgyMTc7IGFuZCBh cnRpY2xlIHNlYXJjaCBmaWVsZHMgcHJlZiAodGhhbmtzIHVsaSk8L2xpPgoJPC91bD4KCgk8 cD48L2Rpdj48L3A+CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPgo8c3R5bGUg dHlwZT0idGV4dC9jc3MiPgojc21kX2hlbHAgeyBsaW5lLWhlaWdodDoxLjMgO30KI3NtZF9o ZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIg TmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30K I3NtZF9oZWxwIGNvZGUuYmxvY2sgeyBmb250LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHgg ZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7 IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNzbWRfaGVscCBhOmxp bmssICNzbWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9u OiBub25lOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206 MXB4O30KI3NtZF9oZWxwIGE6aG92ZXIsICNzbWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBi bHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBi bHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsg Zm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246 IGNlbnRlcjsgfQojc21kX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxh Y2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEs IHNhbnMtc2VyaWY7IH0KI3NtZF9oZWxwIGgzIHsgY29sb3I6ICM2OTM7IGZvbnQ6IGJvbGQg MTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAx MHB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO30KI3NtZF9oZWxwIGg0IHsgZm9u dDogYm9sZCAxMXB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBt YXJnaW46IDEwcHggMCAwIDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9CiNzbWRfaGVs cCAuYXR0LW5hbWUgeyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJh Y2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFi bGUge3dpZHRoOjEwMCU7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nLWJvdHRvbToxZW07 fQojc21kX2hlbHAgdGQsICNzbWRfaGVscCB0aCB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBw YWRkaW5nOi41ZW0gMDt9Cjwvc3R5bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAt LT4KIjtzOjQ6ImNvZGUiO3M6MTMyMjI6Ii8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmlmIChAdHhwaW50ZXJmYWNl ID09ICdhZG1pbicpIHsNCglhZGRfcHJpdnMoJ3NtZF93dScsJzEsMicpOw0KDQoJLy8gRXh0 ZW5zaW9ucyB0YWINCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnc21kX3d1Jywgc21k X3d1X2dUeHQoJ3NtZF93dScpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnc21kX3d1JywgJ3Nt ZF93dScpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfd3UoJGV2ZW50LCAkc3Rl cCkgew0KCWlmKCEkc3RlcCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KA0KCQkJJ3NtZF93 dV9zZWFyY2gnLA0KCQkJJ3NtZF93dV9wcmVmc2F2ZScsDQoJCSkpKSB7DQoJCXNtZF93dV9z aG93Zm9ybSgnJyk7DQoJfSBlbHNlICRzdGVwKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0 aW9uIHNtZF93dV9zaG93Zm9ybSgkbWVzc2FnZSwgJHRlcm09JycsICRzZWw9YXJyYXkoKSwg JGluY2w9MCwgJHdob2xlPTAsICRtb2RlPTAsICRwbHVndHlwZT0wLCAkY2FzZT0wKSB7DQoJ cGFnZXRvcChzbWRfd3VfZ1R4dCgnc21kX3d1JyksJG1lc3NhZ2UpOw0KCSRidG5TZWFyY2gg PSBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfd3Vfc2VhcmNoJywgZ1R4dCgnc2VhcmNoJyksICdz bWFsbGVyYm94Jykuc0lucHV0KCdzbWRfd3Vfc2VhcmNoJykuaElucHV0KCdwbHVndHlwZScs ICgoJHBsdWd0eXBlPT0xKSA/IDAgOiAxKSk7DQoJJGJ0blN0eWxlID0gJyBzdHlsZT0iYm9y ZGVyOjA7aGVpZ2h0OjI1cHgiJzsNCgkkcGxhY2UgPSBhcnJheSgnc2VjdGlvbnMnLCdwYWdl cycsJ2Zvcm1zJywnYXJ0aWNsZXMnKTsNCgkkc2VsID0gZW1wdHkoJHNlbCkgPyB1bnNlcmlh bGl6ZShnZXRfcHJlZignc21kX3d1X2xvb2tfaW4nKSkgOiAkc2VsOw0KCSRzZWwgPSBlbXB0 eSgkc2VsKSA/ICRwbGFjZSA6ICRzZWw7DQoNCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3Qi IG5hbWU9InNtZF93dV9mb3JtIj4nOw0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCWVj aG8gdHIoZkxhYmVsQ2VsbChzbWRfd3VfZ1R4dCgnc2VhcmNoX2xibCcpKSAuIHRkY3MoZklu cHV0KCd0ZXh0JywgJ3NlYXJjaF9mb3InLCBzdHJpcHNsYXNoZXMoJHRlcm0pLCAnJywgJycs ICcnLCAzMCwgJycsICdzbWRfc2VhcmNoX2ZvcicpLCA0KSAuIHRkYSgkYnRuU2VhcmNoLCAk YnRuU3R5bGUpKTsNCgllY2hvIHRyKGZMYWJlbENlbGwoc21kX3d1X2dUeHQoJ2ZpbHRlcicp KS50ZGNzKHJhZGlvKCdtZXRoJywwLCgoJGluY2w9PTApPzE6MCkpLnNtZF93dV9nVHh0KCdp bmNsdXNpb24nKS4iICIgLiByYWRpbygnbWV0aCcsMSwoKCRpbmNsPT0xKT8xOjApKS5zbWRf d3VfZ1R4dCgnZXhjbHVzaW9uJykuICIgfCAiIC4gc21kX3d1X2dUeHQoJ3dob2xlX3dvcmQn KS5jaGVja2JveCgnd2hvbGUnLCAxLCAoKCR3aG9sZT09MSk/MTowKSkuICIgfCAiIC4gc21k X3d1X2dUeHQoJ21hdGNoX2Nhc2UnKS5jaGVja2JveCgnY2FzZScsIDEsICgoJGNhc2U9PTEp PzE6MCkpLCA0KSk7DQoJJG91dCA9ICcnOw0KCWZvcmVhY2ggKCRwbGFjZSBhcyAkaGVyZSkg ew0KCQkkb3V0IC49IGZMYWJlbENlbGwoZ1R4dCgkaGVyZSkgLiBjaGVja2JveCgncGxhY2Vz W10nLCAkaGVyZSwgaW5fYXJyYXkoJGhlcmUsJHNlbCkpKTsNCgl9DQoJZWNobyB0cihmTGFi ZWxDZWxsKHNtZF93dV9nVHh0KCdzZWFyY2hfd2hlcmVfbGJsJykpIC4gJG91dCk7DQoJZWNo byBlbmRUYWJsZSgpOw0KCWVjaG8gJzwvZm9ybT4nOw0KDQoJLy8gUmVuZGVyIHRoZSBwcmVm cyBjaGVja2JveGVzDQoJJGNvbHMgPSBnZXRUaGluZ3MoJ2Rlc2NyaWJlIGAnLlBGWC4ndGV4 dHBhdHRlcm5gJyk7DQoJJGZsZHMgPSBkb19saXN0KGdldF9wcmVmKCdzbWRfd3VfYXJ0aWNs ZV9maWVsZHMnKSk7DQoJJGZsZHMgPSBlbXB0eSgkZmxkc1swXSkgPyBkb19saXN0KCdCb2R5 LEV4Y2VycHQsb3ZlcnJpZGVfZm9ybSxTZWN0aW9uLFRpdGxlLEtleXdvcmRzJykgOiAkZmxk czsNCg0KCWVjaG8gJzxkaXYgaWQ9InNtZF93dV9wcmVmd3JhcCI+PGEgaWQ9InNtZF93dV9w cmVmdG9nIiBocmVmPSIjIj4nLnNtZF93dV9nVHh0KCdwcmVmc19saW5rJykuJzwvYT4nOw0K CWVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9InNtZF93dV9wcmVmcyIgc3R5bGU9ImRp c3BsYXk6bm9uZTsiPic7DQoJZm9yZWFjaCAoJGNvbHMgYXMgJGNvbCkgew0KCQllY2hvIGJy LmNoZWNrYm94KCdzbWRfd3VfYXJ0aWNsZV9maWVsZHNbXScsICRjb2wsIChpbl9hcnJheSgk Y29sLCAkZmxkcykgPyAxIDogMCkpLnNwLiRjb2w7DQoJfQ0KCWVjaG8gZklucHV0KCdzdWJt aXQnLCAnc21kX3d1X3ByZWZzYXZlJywgZ1R4dCgnc2F2ZScpLCAnc21hbGxlcmJveCcsICcn LCAnJywgJycsICcnLCAnc21kX3d1X3ByZWZzYXZlJyk7DQoJZWNobyAnPC9mb3JtPjwvZGl2 Pic7DQoJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpq UXVlcnkoZnVuY3Rpb24oKSB7DQoJalF1ZXJ5KCIjc21kX3NlYXJjaF9mb3IiKS5mb2N1cygp Ow0KCWpRdWVyeSgiI3NtZF93dV9wcmVmcyIpLmhpZGUoKTsNCglqUXVlcnkoIiNzbWRfd3Vf cHJlZnRvZyIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQlqUXVlcnkoIiNzbWRfd3VfcHJlZnMi KS50b2dnbGUoJ2Zhc3QnKTsNCgkJcmV0dXJuIGZhbHNlOw0KCX0pOw0KCWpRdWVyeSgiI3Nt ZF93dV9wcmVmc2F2ZSIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQl2YXIgb3V0ID0gW107DQoJ CWpRdWVyeSgiI3NtZF93dV9wcmVmcyBpbnB1dDpjaGVja2VkIikuZWFjaChmdW5jdGlvbigp IHsNCgkJCW91dC5wdXNoKGpRdWVyeSh0aGlzKS52YWwoKSk7DQoJCX0pOw0KDQoJCXNlbmRB c3luY0V2ZW50KA0KCQkJew0KCQkJCWV2ZW50OiB0ZXh0cGF0dGVybi5ldmVudCwNCgkJCQlz dGVwOiAnc21kX3d1X3ByZWZzYXZlJywNCgkJCQlzbWRfd3VfYXJ0aWNsZV9maWVsZHM6IG91 dC5qb2luKCcsJykNCgkJCX0NCgkJKTsNCgkJalF1ZXJ5KCIjc21kX3d1X3ByZWZzIikudG9n Z2xlKCdmYXN0Jyk7DQoJCXJldHVybiBmYWxzZTsNCgl9KTsNCn0pOw0KPC9zY3JpcHQ+DQo8 c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KI3NtZF93dV9wcmVmd3JhcCB7DQoJd2lkdGg6MTQw cHg7DQoJbWFyZ2luOjEwcHggYXV0byAwOw0KfQ0KPC9zdHlsZT4NCkVPSlM7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF93dV9wcmVmc2F2ZSgpIHsNCgkkY29scyA9IGdldFRo aW5ncygnZGVzY3JpYmUgYCcuUEZYLid0ZXh0cGF0dGVybmAnKTsNCgkkZmllbGRzID0gZG9f bGlzdChncHMoJ3NtZF93dV9hcnRpY2xlX2ZpZWxkcycpKTsNCgkkb2ZsZHMgPSBhcnJheSgp Ow0KCWZvcmVhY2goJGZpZWxkcyBhcyAkZmxkKSB7DQoJCWlmIChpbl9hcnJheSgkZmxkLCAk Y29scykpIHsNCgkJCSRvZmxkc1tdID0gJGZsZDsNCgkJfQ0KCX0NCglzZXRfcHJlZignc21k X3d1X2FydGljbGVfZmllbGRzJywgam9pbignLCcsJG9mbGRzKSwgJ3NtZF93dScsIFBSRUZf SElEREVOLCAndGV4dF9pbnB1dCcpOw0KCXNlbmRfeG1sX3Jlc3BvbnNlKCk7DQp9DQoNCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCmZ1bmN0aW9uIHNtZF93dV9zZWFyY2goKSB7DQoJZXh0cmFjdChkb1NsYXNo KGdwc2EoYXJyYXkoJ3NlYXJjaF9mb3InKSkpKTsNCgkkd2hvbGUgPSBncHMoJ3dob2xlJyk7 DQoJJGNhc2UgPSBncHMoJ2Nhc2UnKTsgLy8gMCA9IGNhc2UgaW5zZW5zaXRpdmUsIDEgPSBj YXNlIHNlbnNpdGl2ZQ0KCSRjYXNlU2Vuc2UgPSAoJGNhc2U9PTEpID8gJyBCSU5BUlkgJyA6 ICcnOw0KCSRtZXRoID0gZ3BzKCdtZXRoJyk7IC8vIDAgPSBpbmNsdWRlLCAxID0gZXhjbHVk ZQ0KCSRwbHVndHlwZSA9IGdwcygncGx1Z3R5cGUnKTsgLy8gMCA9IGNsaWVudCwgMSA9IDAr YWRtaW4sIDIgPSAxK2xpYnJhcnkNCgkkcGx1Z3R5cGUgPSAoaXNfbnVtZXJpYygkcGx1Z3R5 cGUpICYmICRwbHVndHlwZSA8IDMpID8gJHBsdWd0eXBlIDogMDsNCgkkam9pbm1lID0gKCRt ZXRoID09IDApID8gIiBPUiAiIDogIiBBTkQgIjsNCgkkcGxhY2VzID0gZ3BzKCdwbGFjZXMn KTsNCgkkcGxhY2VzID0gaXNfYXJyYXkoJHBsYWNlcykgPyAkcGxhY2VzIDogYXJyYXkoKTsN CglzZXRfcHJlZignc21kX3d1X2xvb2tfaW4nLCBzZXJpYWxpemUoJHBsYWNlcyksICdzbWRf d3UnLCBQUkVGX0hJRERFTiwgJ3RleHRfaW5wdXQnKTsNCgkkbW9kZSA9ICgkc2VhcmNoX2Zv cikgPyAwIDogMTsNCglzbWRfd3Vfc2hvd2Zvcm0oJycsICRzZWFyY2hfZm9yLCAkcGxhY2Vz LCAkbWV0aCwgJHdob2xlLCAkbW9kZSwgJHBsdWd0eXBlLCAkY2FzZSk7DQoNCgkkYXJ0Zmxk cyA9IGdldF9wcmVmKCdzbWRfd3VfYXJ0aWNsZV9maWVsZHMnKTsNCgkkYXJ0ZmxkcyA9IGVt cHR5KCRhcnRmbGRzKSA/ICdCb2R5LEV4Y2VycHQsb3ZlcnJpZGVfZm9ybSxTZWN0aW9uLFRp dGxlLEtleXdvcmRzJyA6ICRhcnRmbGRzOw0KDQoJLy8gRW50cmllcyBpbiB0aGUgcGxhY2VU YWJsZSBhcnJheSBhcmU6DQoJLy8gIDA6IFRhYmxlIHRvIHNlYXJjaA0KCS8vICAxOiBDb2x1 bW4gdG8gc2VhcmNoDQoJLy8gIDI6IENvbHVtbiB0byByZXR1cm4NCgkvLyAgMzogSGVhZGlu ZyB0byBkaXNwbGF5IGlmIHJlc3VsdHMgZm91bmQNCgkvLyAgNDogRXZlbnQgb2YgZGVzdGlu YXRpb24gVVJMDQoJLy8gIDU6IFN0ZXAgb2YgZGVzdGluYXRpb24gVVJMDQoJLy8gIDY6IEFk ZGl0aW9uYWwgVVJMIHZhcg0KCS8vICA3OiBBZGRpdGlvbmFsIFVSTCB2YXIgcmVwbGFjZW1l bnQgKHVzZWQgaW4gc3RydHIpDQoJJHBsYWNlVGFibGUgPSBhcnJheSgNCgkJJ3BhZ2VzJyA9 PiBhcnJheSgndHhwX3BhZ2UnLCAndXNlcl9odG1sJywgJ25hbWUnLCBnVHh0KCdwYWdlcycp LCAncGFnZScsICcnLCAnbmFtZScsICd7bmFtZX0nLCAnJyksDQoJCSdmb3JtcycgPT4gYXJy YXkoJ3R4cF9mb3JtJywgJ2Zvcm0nLCAnbmFtZScsIGdUeHQoJ2Zvcm1zJyksICdmb3JtJywg J2Zvcm1fZWRpdCcsICduYW1lJywgJ3tuYW1lfScsICcnKSwNCgkJJ2FydGljbGVzJyA9PiBh cnJheSgndGV4dHBhdHRlcm4nLCAkYXJ0ZmxkcywgJ0lELHRpdGxlJywgZ1R4dCgnYXJ0aWNs ZXMnKSwgJ2FydGljbGUnLCAnZWRpdCcsICdJRCcsICd7SUR9JywgJycpLA0KCQknc2VjdGlv bnMnID0+IGFycmF5KCd0eHBfc2VjdGlvbicsICdwYWdlLGNzcycsICduYW1lJywgZ1R4dCgn c2VjdGlvbnMnKSwgJ3NlY3Rpb24nLCAnJywgJyMnLCAnc2VjdGlvbi17bmFtZX0nLCAnJyks DQoJKTsNCg0KCSRycyA9IGFycmF5KCk7DQoJZWNobyBuLic8aHIgd2lkdGg9IjUwJSIgLz4n Ow0KCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCSRjb2xIZWFkID0gYXJyYXkoKTsNCgkk Y29sQm9keSA9IGFycmF5KCk7DQoNCglpZiAoJHNlYXJjaF9mb3IpIHsNCgkJZWNobyB0cih0 ZGNzKHRhZyhnVHh0KCdzZWFyY2hfcmVzdWx0cycpLCAnaDInKSwgNCkpOw0KCQlmb3JlYWNo ICgkcGxhY2VzIGFzICRwbGFjZSkgew0KCQkJJGNyb3cgPSAkcGxhY2VUYWJsZVskcGxhY2Vd Ow0KCQkJJHdoZXJlID0gYXJyYXkoKTsNCgkJCSR3aXRlbXMgPSBkb19saXN0KCRjcm93WzFd KTsNCgkJCSRsaXN0ID0gZG9fbGlzdCgkY3Jvd1syXSk7DQoNCgkJCWZvcmVhY2ggKCR3aXRl bXMgYXMgJGl0ZW0pIHsNCgkJCQkkd2hlcmVbXSA9ICRjYXNlU2Vuc2UgLiAkaXRlbSAuICgo JG1ldGg9PTEpID8gJyBOT1QnIDogJycpIC4gKCgkd2hvbGU9PTEpID8gJyBSRUdFWFAgXCdb Wzo8Ol1dJy4kc2VhcmNoX2Zvci4nW1s6PjpdXVwnJyA6ICIgTElLRSAnJSRzZWFyY2hfZm9y JSciKTsNCgkJCX0NCgkJCSRycyA9IHNhZmVfcm93cygkY3Jvd1syXSwgJGNyb3dbMF0sICco Jy5qb2luKCRqb2lubWUsICR3aGVyZSkuJykgT1JERVIgQlkgJy4kbGlzdFswXSk7DQoJCQkk Y29sSGVhZFtdID0gdGQoc3Ryb25nKCRjcm93WzNdKSk7DQoJCQlpZiAoJHJzKSB7DQoJCQkJ JG91dCA9ICc8dWw+JzsNCgkJCQlmb3JlYWNoICgkcnMgYXMgJHJvdykgew0KCQkJCQkkaGxp bmsgPSAnJzsNCgkJCQkJJHZhcnMgPSAnJzsNCgkJCQkJZm9yZWFjaCAoJGxpc3QgYXMgJGNv bCkgew0KCQkJCQkJJGZyb20gPSAneycuJGNvbC4nfSc7DQoJCQkJCQlpZiAoc3RycG9zKCRj cm93WzddLCAkZnJvbSkgIT09IGZhbHNlKSB7DQoJCQkJCQkJaWYgKCRjcm93WzZdID09ICIj Iikgew0KCQkJCQkJCQkkdmFycyA9IGpvaW5fcXMoYXJyYXkoImV2ZW50IiA9PiAkY3Jvd1s0 XSwgInN0ZXAiID0+ICRjcm93WzVdKSkuJGNyb3dbNl0uc3RydHIoJGNyb3dbN10sIGFycmF5 KCRmcm9tID0+ICRyb3dbJGNvbF0pKTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkdmFy cyA9IGpvaW5fcXMoYXJyYXkoImV2ZW50IiA9PiAkY3Jvd1s0XSwgInN0ZXAiID0+ICRjcm93 WzVdLCAkY3Jvd1s2XSA9PiBzdHJ0cigkY3Jvd1s3XSwgYXJyYXkoJGZyb20gPT4gJHJvd1sk Y29sXSkpKSk7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KCQkJCQkJJGhsaW5rIC49ICRyb3dbJGNv bF0uIiAiOw0KCQkJCQl9DQoJCQkJCSRvdXQgLj0gKCRobGluaykgPyAnPGxpPicgLiAoKCR2 YXJzKSA/ICc8YSBocmVmPSJpbmRleC5waHAnLiR2YXJzLiciPicuJGhsaW5rLic8L2E+ICcg OiAkaGxpbmspIC4gJzwvbGk+JzogJyc7DQoJCQkJfQ0KCQkJCSRvdXQgLj0gJzwvdWw+JzsN CgkJCQkkY29sQm9keVtdID0gdGQoJG91dCk7DQoJCQl9IGVsc2Ugew0KCQkJCSRjb2xCb2R5 W10gPSB0ZChnVHh0KCdub19yZXN1bHRzX2ZvdW5kJykpOw0KCQkJfQ0KCQl9DQoJCWVjaG8g dHIoam9pbigiICIsICRjb2xIZWFkKSk7DQoJCWVjaG8gdHIoam9pbigiICIsICRjb2xCb2R5 KSk7DQoJfSBlbHNlIHsNCgkJLy8gTm8gc2VhcmNoIGNyaXRlcmlhLCBzbyBzaG93IG9ycGhh bnMNCgkJZWNobyB0cih0ZGNzKHRhZyhzbWRfd3VfZ1R4dCgnb3JwaGFuX3Jlc3VsdHMnKSwg J2gyJyksIDUpKTsNCg0KCQkvLyBSZXByb2dyYW0gdGhlIHBsYWNlcy9wbGFjZVRhYmxlDQoJ CSRhcnRrZXkgPSBhcnJheV9zZWFyY2goJ2FydGljbGVzJywgJHBsYWNlcyk7DQoJCWlmICgk YXJ0a2V5ICE9PSBmYWxzZSkgew0KCQkJdW5zZXQoJHBsYWNlc1skYXJ0a2V5XSk7DQoJCX0N Cg0KCQkvLyBwYWdlcy9mb3Jtcy9zZWN0aW9ucyB0byBpZ25vcmUgYmVjYXVzZSB0aGV5IGFy ZSBzdGF0aWMgYW5kIGNhbm5vdCBiZSBkZWxldGVkDQoJCSRlc3NlbnRpYWxzID0gYXJyYXko DQoJCQknc2VjdGlvbnMnID0+IGFycmF5KCdkZWZhdWx0JyksDQoJCQkncGFnZXMnID0+IGFy cmF5KCdlcnJvcl9kZWZhdWx0JyksDQoJCQknZm9ybXMnID0+IGFycmF5KCdjb21tZW50cycs J2NvbW1lbnRzX2Rpc3BsYXknLCdjb21tZW50X2Zvcm0nLCdkZWZhdWx0JywnTGlua3MnLCdm aWxlcycpLCAvLyBjb3BpZWQgZnJvbSB0eHBfZm9ybXMNCgkJKTsNCg0KCQkkcGxhY2VzW10g PSAncGx1Z2lucyc7DQoJCSRwbGFjZXNbXSA9ICdzdHlsZXNoZWV0cyc7DQoNCgkJJHBsYWNl VGFibGVbJ3BsdWdpbnMnXSA9IGFycmF5KCd0eHBfcGx1Z2luJywgJ25hbWUnLCAnbmFtZScs IGdUeHQoJ3BsdWdpbnMnKSwgJ3BsdWdpbicsICcnLCAnIycsICd7bmFtZX0nKTsNCgkJJHBs YWNlVGFibGVbJ3N0eWxlc2hlZXRzJ10gPSBhcnJheSgndHhwX2NzcycsICduYW1lJywgJ25h bWUnLCBzbWRfd3VfZ1R4dCgnc3R5bGVzaGVldHMnKSwgJ2NzcycsICcnLCAnbmFtZScsICd7 bmFtZX0nKTsNCg0KCQkkcGxhY2VUYWJsZVsnZm9ybXMnXVswXSA9ICJTRUxFQ1QgdGYubmFt ZSBGUk9NICIgLnNhZmVfcGZ4KCd0eHBfZm9ybScpLiAiIEFTIHRmIFdIRVJFIHRmLm5hbWUg Tk9UIElOICgiIC5kb1F1b3RlKGltcGxvZGUoIicsJyIsJGVzc2VudGlhbHNbJ2Zvcm1zJ10p KS4gIikgT1JERVIgQlkgdGYubmFtZSI7IC8vIFdvdWxkIGJlIG5pY2UgdG8gZXhjbHVkZSBm b3JtcyB0aGF0IHJlZmVyZW5jZSBmb3JtcyBoZXJlIGluc3RlYWQgb2YgaXRlcmF0aW5nIHRo cm91Z2ggdGhlbSBsYXRlcg0KCQkkcGxhY2VUYWJsZVsncGFnZXMnXVswXSA9ICJTRUxFQ1Qg dHAubmFtZSBGUk9NICIgLnNhZmVfcGZ4KCd0eHBfc2VjdGlvbicpLiAiIEFTIHRzIFJJR0hU IEpPSU4gIiAuc2FmZV9wZngoJ3R4cF9wYWdlJykuICIgQVMgdHAgT04gdHMucGFnZSA9IHRw Lm5hbWUgV0hFUkUgdHMucGFnZSBJUyBOVUxMIEFORCB0cC5uYW1lIE5PVCBJTiAoIiAuZG9R dW90ZShpbXBsb2RlKCInLCciLCRlc3NlbnRpYWxzWydwYWdlcyddKSkuICIpIE9SREVSIEJZ IHRwLm5hbWUiOw0KCQkkcGxhY2VUYWJsZVsncGx1Z2lucyddWzBdID0gIlNFTEVDVCB0Zy5u YW1lLCB0Zy5jb2RlIEZST00gIiAuc2FmZV9wZngoJ3R4cF9wbHVnaW4nKS4gIiBBUyB0ZyBX SEVSRSB0eXBlIDwgIiAuKCRwbHVndHlwZSsxKS4gIiBBTkQgdGcubmFtZSAhPSAnc21kX3do ZXJlX3VzZWQnIE9SREVSIEJZIHRnLm5hbWUiOw0KCQkkcGxhY2VUYWJsZVsnc2VjdGlvbnMn XVswXSA9ICJTRUxFQ1QgdHMubmFtZSBGUk9NICIgLnNhZmVfcGZ4KCd0eHBfc2VjdGlvbicp LiAiIEFTIHRzIExFRlQgSk9JTiAiIC5zYWZlX3BmeCgndGV4dHBhdHRlcm4nKS4gIiBBUyB0 eHAgT04gdHMubmFtZSA9IHR4cC5zZWN0aW9uIFdIRVJFIElEIElTIE5VTEwgQU5EIHRzLm5h bWUgTk9UIElOICgiIC5kb1F1b3RlKGltcGxvZGUoIicsJyIsJGVzc2VudGlhbHNbJ3NlY3Rp b25zJ10pKS4gIikgT1JERVIgQlkgdHMubmFtZSI7DQoJCSRwbGFjZVRhYmxlWydzdHlsZXNo ZWV0cyddWzBdID0gIlNFTEVDVCB0Yy5uYW1lIEZST00gIiAuc2FmZV9wZngoJ3R4cF9zZWN0 aW9uJykuICIgQVMgdHMgUklHSFQgSk9JTiAiIC5zYWZlX3BmeCgndHhwX2NzcycpLiAiIEFT IHRjIE9OIHRzLmNzcyA9IHRjLm5hbWUgV0hFUkUgdHMucGFnZSBJUyBOVUxMIE9SREVSIEJZ IHRjLm5hbWUiOw0KDQoJCS8vIEZvciAiYXdrd2FyZCIgcXVlcmllcyB0aGF0IGNhbid0IGJl IGRvbmUgaW4gb25lIHNob3QsIHRoZXJlIGFyZSB0aHJlZSB0aGluZ3MgcmVxdWlyZWQgcGVy ICRwbGFjZToNCgkJLy8gIDE6IHR4cCB0YWJsZSBuYW1lDQoJCS8vICAyOiBsaXN0IG9mIGNv bHVtbnMgdG8gY29tcGFyZQ0KCQkvLyAgMzogbWV0aG9kIG9mIGNvbXBhcmlzb24gcGVyIGNv bHVtbiAoMCA9ICJkaXJlY3QgbWF0Y2giLCAxID0gImxpa2UiKQ0KCQkkY1RhYmxlID0gYXJy YXkoDQoJCQkncGx1Z2lucycgPT4gYXJyYXkoDQoJCQkJJ3R4cF9mb3JtJyA9PiBhcnJheSgn Zm9ybScgPT4gMSksDQoJCQkJJ3R4cF9wYWdlJyA9PiBhcnJheSgndXNlcl9odG1sJyA9PiAx KSwNCgkJCQkndGV4dHBhdHRlcm4nID0+IGFycmF5KCdCb2R5JyA9PiAxLCAnRXhjZXJwdCcg PT4gMSksDQoJCQkpLA0KCQkJJ2Zvcm1zJyA9PiBhcnJheSgNCgkJCQkndHhwX2Zvcm0nID0+ IGFycmF5KCdmb3JtJyA9PiAxKSwNCgkJCQkndHhwX3BhZ2UnID0+IGFycmF5KCd1c2VyX2h0 bWwnID0+IDEpLA0KCQkJCSd0ZXh0cGF0dGVybicgPT4gYXJyYXkoJ0JvZHknID0+IDEsICdF eGNlcnB0JyA9PiAxLCAnb3ZlcnJpZGVfZm9ybScgPT4gMCksDQoJCQkpLA0KCQkpOw0KDQoJ CS8vIFdvcmsgb24gYSBjb2x1bW4gYXQgYSB0aW1lDQoJCWZvcmVhY2ggKCRwbGFjZXMgYXMg JHBsYWNlKSB7DQoJCQkkY3JvdyA9ICRwbGFjZVRhYmxlWyRwbGFjZV07DQoJCQkkY29sUmVm cyA9IGRvX2xpc3QoJGNyb3dbMl0pOw0KCQkJJGNvbEhlYWRbXSA9IHRkKHN0cm9uZygkY3Jv d1szXSAuICgoJHBsYWNlID09ICdwbHVnaW5zJykgPyAoKCRwbHVndHlwZT09MCkgPyBzbWRf d3VfZ1R4dCgnY2xpZW50X3BsdWdpbnMnKSA6IHNtZF93dV9nVHh0KCdhZG1pbl9wbHVnaW5z JykgKSA6ICcnKSApKTsNCgkJCSRycyA9IHN0YXJ0Um93cygkY3Jvd1swXSk7DQoJCQlpZiAo JHJzKSB7DQoJCQkJJG91dCA9ICc8dWw+JzsNCgkJCQl3aGlsZSAoJHJvdyA9IG5leHRSb3co JHJzKSkgew0KCQkJCQkvLyBDb3VudCB0aGUgbm8gb2YgcmVjb3JkcyBtYXRjaGluZyB0aGlz IG5hbWUgaW4gZWFjaCB0YWJsZS4NCgkJCQkJLy8gQW55IHRpbWUgdGhpcyBnb2VzIGFib3Zl IHplcm8sIHRoZSBpdGVtIGlzIHVzZWQgYW5kIGl0IGNhbiBiZSBpZ25vcmVkDQoJCQkJCSRm bmFsaWFzZXMgPSBhcnJheSgpOw0KCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkcGxhY2Us ICRjVGFibGUpKSB7DQoJCQkJCQkvLyBQbHVnaW4gZnVuY3Rpb25zIGFyZSBub3QgbmVjZXNz YXJpbHkgdGhlIG5hbWUgb2YgdGhlIHBsdWdpbiBpdHNlbGYuDQoJCQkJCQkvLyBGaW5kIGFs bCBmdW5jdGlvbiBkZWZpbml0aW9ucyBhbmQgYnVpbGQgYSBsaXN0IG9mIGFsaWFzZXMNCgkJ CQkJCWlmICgkcGxhY2UgPT0gJ3BsdWdpbnMnKSB7DQoJCQkJCQkJJHJlID0gJy9mdW5jdGlv blxzKyhbQS1aYS16MC05X10rKVxzKlwoLyc7DQoJCQkJCQkJJG51bSA9IHByZWdfbWF0Y2hf YWxsKCRyZSwgJHJvd1snY29kZSddLCAkZm5hbGlhc2VzKTsNCgkJCQkJCX0NCg0KCQkJCQkJ JHJlY3MgPSAwOw0KCQkJCQkJZm9yZWFjaCAoJGNUYWJsZVskcGxhY2VdIGFzICR0YmwgPT4g JGNvbEluZm8pIHsNCgkJCQkJCQlpZiAoJHJlY3MgPT0gMCkgew0KCQkJCQkJCQkkd2hlcmUg PSBhcnJheSgpOw0KCQkJCQkJCQlmb3JlYWNoICgkY29sSW5mbyBhcyAkY29sTmFtZSA9PiAk cXJ5VHlwZSkgew0KCQkJCQkJCQkJJHdoZXJlW10gPSAkY29sTmFtZSAuICgoJHFyeVR5cGU9 PTApID8gIiA9ICciIC4kcm93WyRjb2xSZWZzWzBdXS4gIiciIDogIiBMSUtFICclIiAuJHJv d1skY29sUmVmc1swXV0uICIlJyIpOw0KCQkJCQkJCQkJaWYgKGNvdW50KCRmbmFsaWFzZXMp ID4gMSkgew0KCQkJCQkJCQkJCWZvcmVhY2ggKCRmbmFsaWFzZXNbMV0gYXMgJGZuYWxpYXMp IHsNCgkJCQkJCQkJCQkJJHdoZXJlW10gPSAkY29sTmFtZSAuICgoJHFyeVR5cGU9PTApID8g IiA9ICciIC4kZm5hbGlhcy4gIiciIDogIiBMSUtFICclIiAuJGZuYWxpYXMuICIlJyIpOw0K CQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCQkkd2hlcmUgPSBq b2luKCIgT1IgIiwgJHdoZXJlKTsNCgkJCQkJCQkJJHJlY3MgKz0gc2FmZV9jb3VudCgkdGJs LCAkd2hlcmUpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCg0KCQkJCQkJLy8gSWYgdGhlIGl0ZW0g aGFzIG5vdCBiZWVuIGZvdW5kLCBmbGFnIGl0DQoJCQkJCQlpZiAoJHJlY3MgPT0gMCkgew0K CQkJCQkJCSRjb2xOYW1lcyA9ICRjb2xSZWZzOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkk Y29sTmFtZXMgPSBhcnJheSgpOw0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJGNv bE5hbWVzID0gJGNvbFJlZnM7DQoJCQkJCX0NCg0KCQkJCQkvLyBNYWtlIHVwIHRoZSBzdHJp bmcgdG8gZGlzcGxheSwgYW5kIGh5cGVybGluayBpdCBpZiBkaXJlY3RlZA0KCQkJCQkkaGxp bmsgPSAnJzsNCgkJCQkJJHZhcnMgPSAnJzsNCgkJCQkJZm9yZWFjaCAoJGNvbE5hbWVzIGFz ICRjb2wpIHsNCgkJCQkJCSRmcm9tID0gJ3snLiRjb2wuJ30nOw0KCQkJCQkJaWYgKHN0cnBv cygkY3Jvd1s3XSwgJGZyb20pICE9PSBmYWxzZSkgew0KCQkJCQkJCWlmICgkY3Jvd1s2XSA9 PSAiIyIpIHsNCgkJCQkJCQkJJHZhcnMgPSBqb2luX3FzKGFycmF5KCJldmVudCIgPT4gJGNy b3dbNF0sICJzdGVwIiA9PiAkY3Jvd1s1XSkpLiRjcm93WzZdLnN0cnRyKCRjcm93WzddLCBh cnJheSgkZnJvbSA9PiAkcm93WyRjb2xdKSk7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJ JHZhcnMgPSBqb2luX3FzKGFycmF5KCJldmVudCIgPT4gJGNyb3dbNF0sICJzdGVwIiA9PiAk Y3Jvd1s1XSwgJGNyb3dbNl0gPT4gc3RydHIoJGNyb3dbN10sIGFycmF5KCRmcm9tID0+ICRy b3dbJGNvbF0pKSkpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCSRobGluayAuPSAkcm93 WyRjb2xdLiIgIjsNCgkJCQkJfQ0KCQkJCQkkb3V0IC49ICgkaGxpbmspID8gJzxsaT4nIC4g KCgkdmFycykgPyAnPGEgaHJlZj0iaW5kZXgucGhwJy4kdmFycy4nIj4nLiRobGluay4nPC9h PiAnIDogJGhsaW5rKSAuICc8L2xpPic6ICcnOw0KCQkJCX0NCgkJCQkkb3V0IC49ICc8L3Vs Pic7DQoJCQkJJGNvbEJvZHlbXSA9IHRkKCRvdXQpOw0KCQkJfSBlbHNlIHsNCgkJCQkkY29s Qm9keVtdID0gdGQoc21kX3d1X2dUeHQoJ25vX29ycGhhbnNfZm91bmQnKSk7DQoJCQl9DQoJ CX0NCgkJZWNobyB0cihqb2luKCIgIiwgJGNvbEhlYWQpKTsNCgkJZWNobyB0cihqb2luKCIg IiwgJGNvbEJvZHkpKTsNCgl9DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFjZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFz IHJlcXVpcmVkDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfd3VfZ1R4dCgkd2hhdCwgJGF0 dHMgPSBhcnJheSgpKSB7DQoJJGxhbmcgPSBhcnJheSgNCgkJJ2FkbWluX3BsdWdpbnMnID0+ ICcgWyBBK0MgXScsDQoJCSdjbGllbnRfcGx1Z2lucycgPT4gJyBbIEMgXScsDQoJCSdleGNs dXNpb24nID0+ICdFeGNsdWRlJywNCgkJJ2luY2x1c2lvbicgPT4gJ0luY2x1ZGUnLA0KCQkn ZmlsdGVyJyA9PiAnRmlsdGVyOicsDQoJCSdtYXRjaF9jYXNlJyA9PiAnTWF0Y2ggY2FzZScs DQoJCSdub19vcnBoYW5zX2ZvdW5kJyA9PiAnTm8gb3JwaGFucyBmb3VuZC4nLA0KCQknb3Jw aGFuX3Jlc3VsdHMnID0+ICdQb3NzaWJsZSBvcnBoYW5zJywNCgkJJ3ByZWZzX2xpbmsnID0+ ICdBcnRpY2xlIHNlYXJjaCBmaWVsZHMnLA0KCQknc2VhcmNoX2xibCcgPT4gJ0ZpbmQ6JywN CgkJJ3NlYXJjaF93aGVyZV9sYmwnID0+ICdMb29rIGluOicsDQoJCSdzdHlsZXNoZWV0cycg PT4gJ1N0eWxlc2hlZXRzJywNCgkJJ3NtZF93dScgPT4gJ1doZXJlIHVzZWQnLA0KCQknd2hv bGVfd29yZCcgPT4gJ1dob2xlIHdvcmRzJywNCgkpOw0KCXJldHVybiBzdHJ0cigkbGFuZ1sk d2hhdF0sICRhdHRzKTsNCn0iO3M6NDoidHlwZSI7czoxOiIzIjtzOjU6ImZsYWdzIjtzOjE6 IjAiO3M6NToib3JkZXIiO3M6MToiNSI7czozOiJtZDUiO3M6MzI6IjczY2UzOGMwMmY1OGM2 NTYxZGM4YmNjYTRhMDA4MTVjIjt9