# Name: soo_plugin_display v0.2.0 # Type: Admin/Client side plugin # Display info about installed plugins # Author: Jeff Soo # URL: http://ipsedixit.net/txp/ # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE4OiJzb29fcGx1Z2luX2Rpc3BsYXkiO3M6NjoiYXV0aG9y IjtzOjg6IkplZmYgU29vIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI1OiJodHRwOi8vaXBzZWRp eGl0Lm5ldC90eHAvIjtzOjc6InZlcnNpb24iO3M6NToiMC4yLjAiO3M6MTE6ImRlc2NyaXB0 aW9uIjtzOjM2OiJEaXNwbGF5IGluZm8gYWJvdXQgaW5zdGFsbGVkIHBsdWdpbnMiO3M6NDoi aGVscCI7czoxNTU3MzoiPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KZGl2I3NlZF9oZWxwIHBy ZSB7cGFkZGluZzogMC41ZW0gMWVtOyBiYWNrZ3JvdW5kOiAjZWVlOyBib3JkZXI6IDFweCBk YXNoZWQgI2NjYzt9CmRpdiNzZWRfaGVscCBoMSwgZGl2I3NlZF9oZWxwIGgyLCBkaXYjc2Vk X2hlbHAgaDMsIGRpdiNzZWRfaGVscCBoMyBjb2RlIHtmb250LWZhbWlseTogc2Fucy1zZXJp ZjsgZm9udC13ZWlnaHQ6IGJvbGQ7fQpkaXYjc2VkX2hlbHAgaDEsIGRpdiNzZWRfaGVscCBo MiwgZGl2I3NlZF9oZWxwIGgzIHttYXJnaW4tbGVmdDogLTFlbTt9CmRpdiNzZWRfaGVscCBo MiwgZGl2I3NlZF9oZWxwIGgzIHttYXJnaW4tdG9wOiAyZW07fQpkaXYjc2VkX2hlbHAgaDEg e2ZvbnQtc2l6ZTogMi40ZW07fQpkaXYjc2VkX2hlbHAgaDIge2ZvbnQtc2l6ZTogMS44ZW07 fQpkaXYjc2VkX2hlbHAgaDMge2ZvbnQtc2l6ZTogMS40ZW07fQpkaXYjc2VkX2hlbHAgaDQg e2ZvbnQtc2l6ZTogMS4yZW07fQpkaXYjc2VkX2hlbHAgaDUge2ZvbnQtc2l6ZTogMWVtO21h cmdpbi1sZWZ0OjFlbTtmb250LXN0eWxlOm9ibGlxdWU7fQpkaXYjc2VkX2hlbHAgaDYge2Zv bnQtc2l6ZTogMWVtO21hcmdpbi1sZWZ0OjJlbTtmb250LXN0eWxlOm9ibGlxdWU7fQpkaXYj c2VkX2hlbHAgbGkge2xpc3Qtc3R5bGUtdHlwZTogZGlzYzt9CmRpdiNzZWRfaGVscCBsaSBs aSB7bGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7fQpkaXYjc2VkX2hlbHAgbGkgbGkgbGkge2xp c3Qtc3R5bGUtdHlwZTogc3F1YXJlO30KZGl2I3NlZF9oZWxwIGxpIGEgY29kZSB7Zm9udC13 ZWlnaHQ6IG5vcm1hbDt9CmRpdiNzZWRfaGVscCBsaSBjb2RlOmZpcnN0LWNoaWxkIHtiYWNr Z3JvdW5kOiAjZGRkO3BhZGRpbmc6MCAuM2VtO21hcmdpbi1sZWZ0Oi0uM2VtO30KZGl2I3Nl ZF9oZWxwIGxpIGxpIGNvZGU6Zmlyc3QtY2hpbGQge2JhY2tncm91bmQ6bm9uZTtwYWRkaW5n OjA7bWFyZ2luLWxlZnQ6MDt9CmRpdiNzZWRfaGVscCBkZm4ge2ZvbnQtd2VpZ2h0OmJvbGQ7 Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIC5yZXF1aXJlZCwgZGl2I3NlZF9o ZWxwIC53YXJuaW5nIHtjb2xvcjpyZWQ7fQpkaXYjc2VkX2hlbHAgLmRlZmF1bHQge2NvbG9y OmdyZWVuO30KPC9zdHlsZT4KIDxkaXYgaWQ9InNlZF9oZWxwIj4KCgk8aDE+c29vX3BsdWdp bl9kaXNwbGF5PC9oMT4KCiA8ZGl2IGlkPSJ0b2MiPgoKCTxoMj5Db250ZW50czwvaDI+CgoJ PHVsPgoJCTxsaT48YSBocmVmPSIjb3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+CgkJPGxp PjxhIGhyZWY9IiN1c2FnZSI+VXNhZ2U8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3RhZ3Mi PlRhZ3M8L2E+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9IiNzb29fcGx1Z2luX2Rpc3BsYXkiPnNv b19wbHVnaW5fZGlzcGxheTwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjc29vX3BsdWdpbl9h dXRob3JfdXJpIj5zb29fcGx1Z2luX2F1dGhvcl91cmksIHNvb19wbHVnaW5fdmVyc2lvbiwg c29vX3BsdWdpbl9kZXNjcmlwdGlvbjwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjc29vX3Bs dWdpbl9hdXRob3IiPnNvb19wbHVnaW5fYXV0aG9yLCBzb29fcGx1Z2luX25hbWU8L2E+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI3Nvb19wbHVnaW5fc2l6ZSI+c29vX3BsdWdpbl9zaXplPC9h PjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNzb29fcGx1Z2luX2hlbHAiPnNvb19wbHVnaW5faGVs cDwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjc29vX3BsdWdpbl9jb2RlIj5zb29fcGx1Z2lu X2NvZGU8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2V4YW1wbGVzIj5F eGFtcGxlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjcHJlZmVyZW5jZXMiPlByZWZlcmVu Y2VzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNoaXN0b3J5Ij5IaXN0b3J5PC9hPjwvbGk+ Cgk8L3VsPgoKIDwvZGl2PgoKCTxoMiBpZD0ib3ZlcnZpZXciPk92ZXJ2aWV3PC9oMj4KCgk8 cD5EaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGluc3RhbGxlZCBwbHVnaW5zLjwvcD4KCgk8 aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+VGhlIDxjb2RlPnNvb19wbHVnaW5fZGlz cGxheTwvY29kZT4gdGFnIHdvcmtzIGFzIGEgY29udGFpbmVyIG9yIHdpdGggYSBmb3JtIHRo YXQgcmV0cmlldmVzIG1vc3Qgb2YgdGhlIHR4cF9wbHVnaW4gZmllbGRzIGZvciB0aGUgcGx1 Z2luIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlLiBQbGFj ZSBhbnkgb2YgdGhlIG90aGVyIHRhZ3MgKDxjb2RlPnNvb19wbHVnaW5fYXV0aG9yPC9jb2Rl PiwgZXRjLikgaW5zaWRlIHRoZSBjb250YWluZXIgb3IgZm9ybSB0byBkaXNwbGF5IHlvdXIg Y2hvaWNlIG9mIGZpZWxkcy48L3A+CgoJPHA+SWYgPGNvZGU+bmFtZTwvY29kZT4gaXMgbGVm dCBibGFuayAodGhlIDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPiksIDxj b2RlPnNvb19wbHVnaW5fZGlzcGxheTwvY29kZT4gd2lsbCByZXRyaWV2ZSBhbGwgcGx1Z2lu cyAob3B0aW9uYWxseSByZXN0cmljdGVkIGJ5IHBsdWdpbiBwcmVmaXggb3Igc3RhdHVzKS4g SW4gdGhpcyBjYXNlIHRoZSBwbHVnaW4gY29kZSBhbmQgaGVscCB3aWxsIDxzdHJvbmc+bm90 PC9zdHJvbmc+IGJlIHJldHJpZXZlZCwgc28gPGNvZGU+c29vX3BsdWdpbl9jb2RlPC9jb2Rl PiBhbmQgPGNvZGU+c29vX3BsdWdpbl9oZWxwPC9jb2RlPiB3aWxsIG5vdCBwcm9kdWNlIG91 dHB1dC48L3A+CgoJPHA+VGhlIHBsdWdpbiBpcyBjb21wYXRpYmxlIHdpdGggPGEgaHJlZj0i aHR0cDovL2lwc2VkaXhpdC5uZXQvdHhwLzkyL3Nvb19wbHVnaW5fcHJlZiI+c29vX3BsdWdp bl9wcmVmPC9hPiwgYWxsb3dpbmcgeW91IHRvIGFkanVzdCBzb21lIG9mIHRoZSBkZWZhdWx0 IHRhZyBhdHRyaWJ1dGUgdmFsdWVzLjwvcD4KCgk8aDIgaWQ9InRhZ3MiPlRhZ3M8L2gyPgoK CTxwPkFsbCB0YWdzIChleGNlcHQgZm9yIDxjb2RlPnNvb19wbHVnaW5fZGlzcGxheTwvY29k ZT4pIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+bXVzdDwvc3Bhbj4gYmUgaW4gYSA8Y29kZT5z b29fcGx1Z2luX2Rpc3BsYXk8L2NvZGU+IGNvbnRhaW5lciBvciBmb3JtIHRvIHByb2R1Y2Ug b3V0cHV0LjwvcD4KCgk8aDMgaWQ9InNvb19wbHVnaW5fZGlzcGxheSI+c29vX3BsdWdpbl9k aXNwbGF5PC9oMz4KCgk8cD5SZXRyaWV2ZSBhIG5hbWVkIHBsdWdpbiBvciBhIGxpc3Qgb2Yg cGx1Z2luczsgaXRlcmF0ZSBvdmVyIGVhY2ggcGx1Z2luIHdpdGggdGhlIHRhZyBjb250ZW50 cyBvciBzcGVjaWZpZWQgZm9ybS48L3A+Cgo8cHJlPiZsdDt0eHA6c29vX3BsdWdpbl9kaXNw bGF5IGZvcm09JnF1b3Q7Zm9vJnF1b3Q7IC8mZ3Q7ICAgICZsdDshLS0gdXNlIHdpdGggYSBm b3JtIC0tJmd0OwoKJmx0O3R4cDpzb29fcGx1Z2luX2Rpc3BsYXkmZ3Q7ICAgICAgICAgICAg ICAgICAmbHQ7IS0tIG9yIGFzIGEgY29udGFpbmVyIC0tJmd0OwoJLi4uCiZsdDsvdHhwOnNv b19wbHVnaW5fZGlzcGxheSZndDsKPC9wcmU+CgoJPGg0PkF0dHJpYnV0ZXM8L2g0PgoKCTx1 bD4KCQk8bGk+PGNvZGU+bmFtZTwvY29kZT4gPGVtPihwbHVnaW4gbmFtZSk8L2VtPiBQbHVn aW4gdG8gZGlzcGxheS4gSWYgYmxhbmsgKHRoZSA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVm YXVsdDwvc3Bhbj4pLCByZXRyaWV2ZSBhIGxpc3Qgb2YgcGx1Z2lucyAoPGRmbj5saXN0IG1v ZGU8L2Rmbj4pPC9saT4KCQk8bGk+PGNvZGU+Zm9ybTwvY29kZT4gPGVtPihUeHAgZm9ybSBu YW1lKTwvZW0+IEZvcm0gdG8gZGlzcGxheSBvdXRwdXQuIElmIGVtcHR5LCBjb250YWluZXIg dGFnIHJlcXVpcmVkIGZvciBvdXRwdXQuIDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5EZWZhdWx0 PC9zcGFuPiBpcyBlbXB0eSAoY2FuIGJlIGNoYW5nZWQgaW4gcHJlZnMpLjwvbGk+Cgk8L3Vs PgoKCTxwPlRoZSByZW1haW5pbmcgYXR0cmlidXRlcyBhcmUgZWZmZWN0aXZlIG9ubHkgaW4g bGlzdCBtb2RlIChpLmUuLCB3aGVuIDxjb2RlPm5hbWU8L2NvZGU+IGlzIGxlZnQgYmxhbmsp LjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPnByZWZpeDwvY29kZT4gPGVtPihwbHVnaW4gYXV0 aG9yIHByZWZpeCk8L2VtPiBzZWxlY3Qgb25seSBwbHVnaW5zIHdpdGggdGhpcyBwcmVmaXg8 L2xpPgoJCTxsaT48Y29kZT5zaG93X2luYWN0aXZlPC9jb2RlPiA8ZW0+KGJvb2xlYW4pPC9l bT4gPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+ICYjODIyMDswJiM4MjIx Oywgd2hldGhlciB0byBpbmNsdWRlIGluYWN0aXZlIHBsdWdpbnM8L2xpPgoJCTxsaT48Y29k ZT5zb3J0PC9jb2RlPiA8ZW0+KE15U1FMIHNvcnQgdmFsdWUpPC9lbT4gPHNwYW4gY2xhc3M9 ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+ICYjODIyMDtuYW1lIGFzYyYjODIyMTsgKGluIGFk ZGl0aW9uIHRvIGNvbHVtbiBuYW1lcywgJiM4MjIwO3NpemUmIzgyMjE7IGlzIGFsc28gYXZh aWxhYmxlIGZvciBzb3J0aW5nKTwvbGk+CgkJPGxpPjxjb2RlPndyYXB0YWc8L2NvZGU+IDxl bT4oPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyBuYW1lLCB3aXRob3V0IGJy YWNrZXRzKTwvZW0+PC9saT4KCQk8bGk+PGNvZGU+YnJlYWs8L2NvZGU+IDxlbT4oPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyBuYW1lLCB3aXRob3V0IGJyYWNrZXRzKTwv ZW0+PC9saT4KCQk8bGk+PGNvZGU+Y2xhc3M8L2NvZGU+IDxlbT4oPHNwYW4gY2xhc3M9ImNh cHMiPkhUTUw8L3NwYW4+IGNsYXNzIGF0dHJpYnV0ZSk8L2VtPiBhcHBsaWVkIHRvIDxjb2Rl PndyYXB0YWc8L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+aHRtbF9pZDwvY29kZT4gPGVtPig8 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gSUQgYXR0cmlidXRlKTwvZW0+IGFwcGxp ZWQgdG8gPGNvZGU+d3JhcHRhZzwvY29kZT48L2xpPgoJPC91bD4KCgk8aDMgaWQ9InNvb19w bHVnaW5fYXV0aG9yX3VyaSI+c29vX3BsdWdpbl9hdXRob3JfdXJpLCBzb29fcGx1Z2luX3Zl cnNpb24sIHNvb19wbHVnaW5fZGVzY3JpcHRpb248L2gzPgoKCTxwPk5vIGF0dHJpYnV0ZXM6 IGVhY2ggc2ltcGx5IGRpc3BsYXlzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIHN0cmFpZ2h0 IGZyb20gPGNvZGU+dHhwX3BsdWdpbjwvY29kZT4uPC9wPgoKPHByZT4mbHQ7dHhwOnNvb19w bHVnaW5fYXV0aG9yX3VyaSAvJmd0OwombHQ7dHhwOnNvb19wbHVnaW5fdmVyc2lvbiAvJmd0 OwombHQ7dHhwOnNvb19wbHVnaW5fZGVzY3JpcHRpb24gLyZndDsKPC9wcmU+CgoJPGgzIGlk PSJzb29fcGx1Z2luX2F1dGhvciI+c29vX3BsdWdpbl9hdXRob3IsIHNvb19wbHVnaW5fbmFt ZTwvaDM+CgoJPHA+QXMgYWJvdmUsIGJ1dCB0aGVzZSBhY2NlcHQgYW4gb3B0aW9uYWwgPGNv ZGU+bGluazwvY29kZT4gYXR0cmlidXRlLjwvcD4KCjxwcmU+Jmx0O3R4cDpzb29fcGx1Z2lu X2F1dGhvciAvJmd0OwombHQ7dHhwOnNvb19wbHVnaW5fbmFtZSAvJmd0Owo8L3ByZT4KCgk8 aDQ+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT48Y29kZT5saW5rPC9jb2RlPiA8ZW0+ KGJvb2xlYW4pPC9lbT4gd2hldGhlciB0byBtYWtlIG91dHB1dCBhIGxpbmsgdG8gdGhlIHBs dWdpbiBhdXRob3ImIzgyMTc7cyB3ZWJzaXRlLCA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVm YXVsdDwvc3Bhbj4gJiM4MjIwOzEmIzgyMjE7PC9saT4KCTwvdWw+CgoJPGgzIGlkPSJzb29f cGx1Z2luX3NpemUiPnNvb19wbHVnaW5fc2l6ZTwvaDM+CgoJPHA+RGlzcGxheSB0aGUgcGx1 Z2luJiM4MjE3O3MgaW5zdGFsbGVkIGNvZGUgc2l6ZSBpbiBLQiAoY291bnRpbmcgMSBjaGFy YWN0ZXIgPSAxIGJ5dGUpPC9wPgoKPHByZT4mbHQ7dHhwOnNvb19wbHVnaW5fc2l6ZSAvJmd0 Owo8L3ByZT4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT48Y29kZT5mb3Jt YXQ8L2NvZGU+IDxlbT4odGV4dCk8L2VtPiA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVmYXVs dDwvc3Bhbj4gJiM4MjE2O3tzaXplfSZhbXA7bmJzcDtLQiYjODIxNzssIGNhbiBiZSBjaGFu Z2VkIGluIHByZWZzLjwvbGk+Cgk8L3VsPgoKCTxwPlRoZSBwbHVnaW4gb3V0cHV0cyB0aGUg dmFsdWUgb2YgPGNvZGU+Zm9ybWF0PC9jb2RlPiwgZmlyc3QgcmVwbGFjaW5nIGFueSBvY2N1 cnJlbmNlcyBvZiAmIzgyMTY7e3NpemV9JiM4MjE3OyB3aXRoIHRoZSBzaXplIGluIEtCLjwv cD4KCgk8aDMgaWQ9InNvb19wbHVnaW5faGVscCI+c29vX3BsdWdpbl9oZWxwPC9oMz4KCgk8 cD5EaXNwbGF5IHRoZSBwbHVnaW4mIzgyMTc7cyBoZWxwIHRleHQuPC9wPgoKPHByZT4mbHQ7 dHhwOnNvb19wbHVnaW5faGVscCAvJmd0Owo8L3ByZT4KCgk8cD48c3BhbiBjbGFzcz0id2Fy bmluZyI+RG9lcyBub3Qgd29yayBpbiBsaXN0IG1vZGU8L3NwYW4+IChpLmUuLCB3aGVuIDxj b2RlPnNvb19wbHVnaW5fZGlzcGxheTwvY29kZT4gaGFzIGEgYmxhbmsgPGNvZGU+bmFtZTwv Y29kZT4gYXR0cmlidXRlKS48L3A+CgoJPGg0PkF0dHJpYnV0ZXM8L2g0PgoKCTx1bD4KCQk8 bGk+PGNvZGU+c3RyaXBfc3R5bGU8L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPiB3aGV0aGVy IG9yIG5vdCB0byByZW1vdmUgYW55IGxlYWRpbmcgPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29k ZT4gZWxlbWVudCAoPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+ICYjODIy MDsxJiM4MjIxOywgY2FuIGJlIGNoYW5nZWQgaW4gcHJlZnMpPC9saT4KCQk8bGk+PGNvZGU+ c3RyaXBfdGl0bGU8L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPiB3aGV0aGVyIG9yIG5vdCB0 byByZW1vdmUgYW55IGxlYWRpbmcgPGNvZGU+Jmx0O2gxJmd0OzwvY29kZT4gZWxlbWVudCAo PHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+ICYjODIyMDsxJiM4MjIxOywg Y2FuIGJlIGNoYW5nZWQgaW4gcHJlZnMpPC9saT4KCQk8bGk+PGNvZGU+c2VjdGlvbl9pZDwv Y29kZT4gPGVtPig8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gaWQgdmFsdWUpPC9l bT4gc3RhcnQgZGlzcGxheSBmcm9tIGlkZW50aWZpZWQgaGVhZGVyIGVsZW1lbnQsIGNvbnRp bnVlIHRpbGwgbmV4dCBoZWFkZXIgb2Ygc2FtZSBvciBsb3dlciBsZXZlbDwvbGk+CgkJPGxp Pjxjb2RlPmhfcGx1czwvY29kZT4gPGVtPihpbnRlZ2VyKTwvZW0+IHRyYW5zcG9zZSA8c3Bh biBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gaGVhZGVyIGxldmVscyBieSB0aGlzIGFtb3Vu dDwvbGk+Cgk8L3VsPgoKCTxwPjxjb2RlPnN0cmlwX3N0eWxlPC9jb2RlPiBsb29rcyBmb3Ig YW4gb3BlbmluZyA8Y29kZT4mbHQ7c3R5bGUmZ3Q7PC9jb2RlPiB0YWcgYXQgdGhlIHZlcnkg c3RhcnQgb2YgdGhlIEhlbHAgc2VjdGlvbi4gPGNvZGU+c3RyaXBfdGl0bGU8L2NvZGU+IGxv b2tzIGZvciB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mIDxjb2RlPiZsdDtoMSZndDs8L2NvZGU+ LiBCb3RoIGRvIGEgbm9uLWdyZWVkeSBtYXRjaCBsb29raW5nIGZvciB0aGUgY2xvc2luZyB0 YWcuPC9wPgoKCTxwPldpdGggPGNvZGU+c2VjdGlvbl9pZDwvY29kZT4sIGRpc3BsYXkgYmVn aW5zIGZyb20gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBoZWFkZXIgZWxl bWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuIERpc3BsYXkgY29udGludWVzIHRpbGwgdGhl IG5leHQgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGhlYWRlciB3aXRoIHRoZSBz YW1lIG9yIGxvd2VyIGxldmVsICg8Y29kZT4mbHQ7aDImZ3Q7PC9jb2RlPiBjb25zaWRlcmVk IGxvd2VyIHRoYW4gPGNvZGU+Jmx0O2gzJmd0OzwvY29kZT4sIGZvciBleGFtcGxlKSBvciB1 bnRpbCB0aGUgZW5kIGlmIG5vIHN1Y2ggaGVhZGVyIGlzIGZvdW5kLjwvcD4KCgk8cD48Y29k ZT5oX3BsdXM8L2NvZGU+IGNhbiBiZSBoZWxwZnVsIHdoZW4gYnJlYWtpbmcgYSBsb25nIGhl bHAgdGV4dCBpbnRvIHNldmVyYWwgd2ViIHBhZ2VzLCBpbiBjb25qdWN0aW9uIHdpdGggPGNv ZGU+c2VjdGlvbl9pZDwvY29kZT4uIEZvciBleGFtcGxlLCA8Y29kZT5oX3BsdXM9JnF1b3Q7 LTImcXVvdDs8L2NvZGU+IHdpbGwgdHJhbnNwb3NlIGFsbCA8Y29kZT5oNjwvY29kZT4gZWxl bWVudHMgdG8gPGNvZGU+aDQ8L2NvZGU+LCBhbGwgPGNvZGU+aDU8L2NvZGU+IGVsZW1lbnRz IHRvIDxjb2RlPmgzPC9jb2RlPiwgZXRjLjwvcD4KCgk8aDMgaWQ9InNvb19wbHVnaW5fY29k ZSI+c29vX3BsdWdpbl9jb2RlPC9oMz4KCgk8cD5EaXNwbGF5IHBsdWdpbiBzb3VyY2UgY29k ZSwgYnkgPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+IHRoZSB3aG9sZSB0 aGluZywgb3Igc2VsZWN0ZWQgY29kZSBkZXRlcm1pbmVkIGJ5IHRoZSA8Y29kZT5mdW5jdGlv bjwvY29kZT4gYW5kL29yIDxjb2RlPnBocF9jbGFzczwvY29kZT4gYXR0cmlidXRlcy48L3A+ Cgo8cHJlPiZsdDt0eHA6c29vX3BsdWdpbl9jb2RlIC8mZ3Q7CjwvcHJlPgoKCTxwPjxzcGFu IGNsYXNzPSJ3YXJuaW5nIj5Eb2VzIG5vdCB3b3JrIGluIGxpc3QgbW9kZTwvc3Bhbj4gKGku ZS4sIHdoZW4gPGNvZGU+c29vX3BsdWdpbl9kaXNwbGF5PC9jb2RlPiBoYXMgYSBibGFuayA8 Y29kZT5uYW1lPC9jb2RlPiBhdHRyaWJ1dGUpLjwvcD4KCgk8aDQ+QXR0cmlidXRlczwvaDQ+ CgoJPHVsPgoJCTxsaT48Y29kZT5jbGFzczwvY29kZT4gPGVtPihodG1sIGNsYXNzIG5hbWUp PC9lbT4gZm9yIHdyYXBwaW5nICZsdDtjb2RlJmd0OyBhbmQgJmx0O3ByZSZndDsgZWxlbWVu dHM8L2xpPgoJCTxsaT48Y29kZT5odG1sX2lkPC9jb2RlPiA8ZW0+KGh0bWwgaWQgbmFtZSk8 L2VtPiBmb3Igd3JhcHBpbmcgJmx0O2NvZGUmZ3Q7IGFuZCAmbHQ7cHJlJmd0OyBlbGVtZW50 czwvbGk+CgkJPGxpPjxjb2RlPnRhYl9zdG9wPC9jb2RlPiA8ZW0+KGludGVnZXIpPC9lbT4g bGVuZ3RoIG9mIHRhYiBzdG9wPC9saT4KCQk8bGk+PGNvZGU+ZnVuY3Rpb248L2NvZGU+IDxl bT4odGV4dCk8L2VtPiBTaG93IG9ubHkgdGhpcyBmdW5jdGlvbi4gVXNlIGluIGNvbWJpbmF0 aW9uIHdpdGggPGNvZGU+cGhwX2NsYXNzPC9jb2RlPiB0byBzaG93IG9ubHkgdGhpcyBtZXRo b2QuPC9saT4KCQk8bGk+PGNvZGU+cGhwX2NsYXNzPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT4g U2hvdyBvbmx5IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gY2xhc3M8L2xp PgoJCTxsaT48Y29kZT5oaWdobGlnaHQ8L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPiB3aGV0 aGVyIG9yIG5vdCB0byBhZGQgc3ludGF4IGhpZ2hsaWdodGluZyB0byBvdXRwdXQuIDxzcGFu IGNsYXNzPSJkZWZhdWx0Ij5EZWZhdWx0PC9zcGFuPiAmIzgyMjA7MSYjODIyMTssIGFkZCBo aWdobGlnaHRpbmcgKGNhbiBiZSBjaGFuZ2VkIGluIHByZWZzKS48L2xpPgoJPC91bD4KCgk8 cD5UaGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgYXJlIGVmZmVjdGl2ZSBvbmx5IHdoZW4gaGln aGxpZ2h0aW5nIGlzIGVuYWJsZWQuPC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+c2hvd19saW5l X251bWJlcnM8L2NvZGU+IDxlbT4odGV4dCk8L2VtPiBJZiBzZXQsIHRleHQgdG8gYXBwZW5k IHRvIGVhY2ggbGluZSBudW1iZXIuIElmIGJsYW5rLCBkbyBub3Qgc2hvdyBsaW5lIG51bWJl cnMuIDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPiAmIzgyMjA7OiYjODIy MTsgKGNhbiBiZSBjaGFuZ2VkIGluIHByZWZzKS48L2xpPgoJCTxsaT48Y29kZT5yZWluZGV4 X2xpbmVzPC9jb2RlPiA8ZW0+KGludGVnZXIpPC9lbT4gV2l0aCA8Y29kZT5mdW5jdGlvbjwv Y29kZT4gYW5kL29yIDxjb2RlPnBocF9jbGFzczwvY29kZT4sIHJlbnVtYmVyIGxpbmVzIHN0 YXJ0aW5nIGZyb20gdGhlIHZhbHVlIGdpdmVuLiA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+RGVm YXVsdDwvc3Bhbj4gJiM4MjIwOzAmIzgyMjE7LCBkbyBub3QgcmVpbmRleC48L2xpPgoJPC91 bD4KCgk8cD5UaGUgZnVuY3Rpb24vY2xhc3Mgc2VhcmNoIGlzbiYjODIxNzt0IHRob3JvdWdo LCBhbmQgaXMgYmFzZWQgb24gbXkgY29kaW5nIHN0eWxlLiBJbiB0aGUgY2FzZSBvZiBhIGZ1 bmN0aW9uIChvdXRzaWRlIGEgY2xhc3MpIG9yIGNsYXNzLCBpdCBzaW1wbHkgc3RvcHMgYXQg dGhlIGZpcnN0IG5vbi1pbmRlbnRlZCBjbG9zaW5nIGJyYWNlICgmIzgyMjE7fSYjODIyMTsp IHRoYXQgb2NjdXJzIGFmdGVyIHRoZSBmdW5jdGlvbiBvciBjbGFzcyBuYW1lLiBTYW1lIGZv ciBhIG1ldGhvZCAoZnVuY3Rpb24gaW5zaWRlIGEgY2xhc3MpIGJ1dCB3aXRoIHRoZSBjbG9z aW5nIGJyYWNlIGluZGVudGVkIG9uZSB0YWIuPC9wPgoKCTxwPlRhYnMgYXJlIGNvbnZlcnRl ZCB0byBzcGFjZXMsIHRvIHN0YXkgYWxpZ25lZCB3aXRoIHRhYiBzdG9wcyBhcyBzZXQgaW4g cGx1Z2luIHByZWZlcmVuY2VzIG9yIHRoZSA8Y29kZT50YWdfc3RvcDwvY29kZT4gYXR0cmli dXRlLjwvcD4KCgk8aDU+SGlnaGxpZ2h0aW5nPC9oNT4KCgk8cD5UaGUgY29kZSBoaWdobGln aHRpbmcgaXMgYmFzZWQgb24gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IDxj b2RlPmhpZ2hsaWdodF9zdHJpbmcoKTwvY29kZT4gZnVuY3Rpb24uIFRoZSA8Y29kZT5zdHls ZTwvY29kZT4gZGVjbGFyYXRpb25zIHByb2R1Y2VkIGJ5IDxjb2RlPmhpZ2hsaWdodF9zdHJp bmcoKTwvY29kZT4gYXJlIHJlcGxhY2VkIGJ5IDxjb2RlPmNsYXNzPC9jb2RlPiBkZWNsYXJh dGlvbnMuIFRoZSBpbXBvcnRhbnQgb25lczo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5waHBf Y29tbWVudDwvY29kZT4gY29tbWVudHM8L2xpPgoJCTxsaT48Y29kZT5waHBfa2V5d29yZDwv Y29kZT4ga2V5d29yZHMsIG9wZXJhdG9ycywgYnJhY2tldHMsIHNlbWljb2xvbnMsIGV0Yy48 L2xpPgoJCTxsaT48Y29kZT5waHBfZGVmYXVsdDwvY29kZT4gZnVuY3Rpb24gbmFtZXMgKGlu Y2x1ZGluZyBjb3JlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZ1bmN0aW9ucyk8 L2xpPgoJCTxsaT48Y29kZT5waHBfc3RyaW5nPC9jb2RlPiBzdHJpbmdzPC9saT4KCTwvdWw+ CgoJPHA+RXZlcnl0aGluZyB3aWxsIGJlIGluIGEgPGNvZGU+c3BhbjwvY29kZT4gd2l0aCBv bmUgb2YgdGhvc2UgY2xhc3MgbmFtZXMuIFRoZSB3aG9sZSB0aGluZyBpcyB3cmFwcGVkIGlu IGEgPGNvZGU+Y29kZTwvY29kZT4gZWxlbWVudC48L3A+CgoJPHA+SWYgeW91IHByZWZlciB0 byB1c2UgamF2YXNjcmlwdC1iYXNlZCBoaWdobGlnaHRpbmcsIHN1Y2ggYXMgdGhlIGV4Y2Vs bGVudCA8YSBocmVmPSJodHRwOi8vYWxleGdvcmJhdGNoZXYuY29tL1N5bnRheEhpZ2hsaWdo dGVyLyI+U3ludGF4SGlnaGxpZ2h0ZXI8L2E+LCBzZXQgPGNvZGU+aGlnaGxpZ2h0PSZxdW90 OzAmcXVvdDs8L2NvZGU+IChvciBkbyB0aGlzIGluIHByZWZzKSB0byBnZXQgcmF3IChhbHRo b3VnaCBzdGlsbCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4tZXNjYXBlZCkgY29k ZSBvdXRwdXQuIEluIHRoaXMgY2FzZSBsaW5lIG51bWJlcnMgd2lsbCBub3QgYmUgYWRkZWQu PC9wPgoKCTxoMiBpZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8aDM+TGlzdCBhbGwg YWN0aXZlIHBsdWdpbnMgYXMgYSB0YWJsZTwvaDM+CgoJPHA+c2hvd2luZyBwbHVnaW4gYXV0 aG9yIChhcyBhIGxpbmsgdG8gdGhlIHBsdWdpbiBhdXRob3ImIzgyMTc7cyB3ZWJzaXRlKSBh bmQgZGVzY3JpcHRpb248L3A+Cgo8cHJlPiZsdDt0eHA6c29vX3BsdWdpbl9kaXNwbGF5IHdy YXB0YWc9JnF1b3Q7dGFibGUmcXVvdDsgYnJlYWs9JnF1b3Q7dHImcXVvdDsmZ3Q7CiZsdDt0 ZCZndDsmbHQ7dHhwOnNvb19wbHVnaW5fbmFtZSAvJmd0OyZsdDsvdGQmZ3Q7Jmx0O3RkJmd0 OyZsdDt0eHA6c29vX3BsdWdpbl9kZXNjcmlwdGlvbiAvJmd0OyZsdDsvdGQmZ3Q7CiZsdDsv dHhwOnNvb19wbHVnaW5fZGlzcGxheSZndDsKPC9wcmU+CgoJPGgzPkRpc3BsYXkgcGx1Z2lu IGhlbHA8L2gzPgoKPHByZT4mbHQ7dHhwOnNvb19wbHVnaW5fZGlzcGxheSBuYW1lPSZxdW90 O3Nvb19pbWFnZSZxdW90OyZndDsKJmx0O3R4cDpzb29fcGx1Z2luX2hlbHAgLyZndDsKJmx0 Oy90eHA6c29vX3BsdWdpbl9kaXNwbGF5Jmd0Owo8L3ByZT4KCgk8aDM+RGlzcGxheSBmdWxs IHNvdXJjZSBjb2RlPC9oMz4KCgk8cD5sZWF2aW5nIG9mZiB0aGUgbGluZSBudW1iZXJzPC9w PgoKPHByZT4mbHQ7dHhwOnNvb19wbHVnaW5fZGlzcGxheSBuYW1lPSZxdW90O3Nvb19wbHVn aW5fcHJlZiZxdW90OyZndDsKJmx0O3R4cDpzb29fcGx1Z2luX2NvZGUgc2hvd19saW5lX251 bWJlcnM9JnF1b3Q7JnF1b3Q7IC8mZ3Q7CiZsdDsvdHhwOnNvb19wbHVnaW5fZGlzcGxheSZn dDsKPC9wcmU+CgoJPGgzPkRpc3BsYXkgYSBzaW5nbGUgbWV0aG9kPC9oMz4KCgk8cD5yZW51 bWJlcmluZyB0aGUgbGluZXMsIHN0YXJ0aW5nIGZyb20gMTwvcD4KCjxwcmU+Jmx0O3R4cDpz b29fcGx1Z2luX2Rpc3BsYXkgbmFtZT0mcXVvdDtzb29fdHhwX29iaiZxdW90OyZndDsKJmx0 O3R4cDpzb29fcGx1Z2luX2NvZGUgcGhwX2NsYXNzPSZxdW90O3Nvb19odG1sJnF1b3Q7IGZ1 bmN0aW9uPSZxdW90O3RhZyZxdW90OyByZWluZGV4X2xpbmVzPSZxdW90OzEmcXVvdDsgLyZn dDsKJmx0Oy90eHA6c29vX3BsdWdpbl9kaXNwbGF5Jmd0Owo8L3ByZT4KCgk8aDIgaWQ9InBy ZWZlcmVuY2VzIj5QcmVmZXJlbmNlczwvaDI+CgoJPHA+SWYgeW91IGhhdmUgdGhlIDxhIGhy ZWY9Imh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4cC85Mi9zb29fcGx1Z2luX3ByZWYiPnNvb19w bHVnaW5fcHJlZjwvYT4gcHJlZmVyZW5jZSBtYW5hZ2VtZW50IHN5c3RlbSBpbnN0YWxsZWQs IHlvdSBjYW4gYWRqdXN0IHNvbWUgb2YgdGhlIGRlZmF1bHQgdGFnIGF0dHJpYnV0ZSB2YWx1 ZXMuIFByZWZlcmVuY2Ugc2V0dGluZ3M6PC9wPgoKCTx1bD4KCQk8bGk+RGVmYXVsdCB2YWx1 ZSBmb3IgPGNvZGU+c29vX3BsdWdpbl9kaXNwbGF5PC9jb2RlPiYjODIxNztzIDxjb2RlPmZv cm08L2NvZGU+IGF0dHJpYnV0ZTwvbGk+CgkJPGxpPkRlZmF1bHQgdmFsdWUgZm9yIDxjb2Rl PnNvb19wbHVnaW5faGVscDwvY29kZT4mIzgyMTc7cyA8Y29kZT5zdHJpcF9zdHlsZTwvY29k ZT4gYXR0cmlidXRlPC9saT4KCQk8bGk+RGVmYXVsdCB2YWx1ZSBmb3IgPGNvZGU+c29vX3Bs dWdpbl9oZWxwPC9jb2RlPiYjODIxNztzIDxjb2RlPnN0cmlwX3RpdGxlPC9jb2RlPiBhdHRy aWJ1dGU8L2xpPgoJCTxsaT5EZWZhdWx0IHZhbHVlIGZvciA8Y29kZT5zb29fcGx1Z2luX3Np emU8L2NvZGU+JiM4MjE3O3MgPGNvZGU+Zm9ybWF0PC9jb2RlPiBhdHRyaWJ1dGU8L2xpPgoJ CTxsaT5EZWZhdWx0IHZhbHVlIGZvciA8Y29kZT5zb29fcGx1Z2luX2NvZGU8L2NvZGU+JiM4 MjE3O3MgPGNvZGU+aGlnaGxpZ2h0PC9jb2RlPiBhdHRyaWJ1dGU8L2xpPgoJCTxsaT5EZWZh dWx0IHZhbHVlIGZvciA8Y29kZT5zb29fcGx1Z2luX2NvZGU8L2NvZGU+JiM4MjE3O3MgPGNv ZGU+c2hvd19saW5lX251bWJlcnM8L2NvZGU+IGF0dHJpYnV0ZTwvbGk+CgkJPGxpPkRlZmF1 bHQgdmFsdWUgZm9yIDxjb2RlPnNvb19wbHVnaW5fY29kZTwvY29kZT4mIzgyMTc7cyA8Y29k ZT50YWJfc3RvcDwvY29kZT4gYXR0cmlidXRlPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJoaXN0 b3J5Ij5WZXJzaW9uIEhpc3Rvcnk8L2gyPgoKCTxoMz4wLjIuMCAoNy8xMS8yMDEwKTwvaDM+ CgoJPHVsPgoJCTxsaT5OZXcgPGNvZGU+aGlnaGxpZ2h0PC9jb2RlPiBhdHRyaWJ1dGUgZm9y IDxjb2RlPnNvb19wbHVnaW5fY29kZTwvY29kZT4sIGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0 aGUgc3RhbmRhcmQgc3ludGF4IGhpZ2hsaWdodGluZyBhbmQgb3V0cHV0IHJhdyAoYnV0IDxz cGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPi1lc2NhcGVkKSBjb2RlLjwvbGk+CgkJPGxp PkJ1ZyBmaXg6IDxjb2RlPnNvb19wbHVnaW5fY29kZTwvY29kZT4gbm93IGhhbmRsZXMgbXVs dGktbGluZSBjb21tZW50cyBjb3JyZWN0bHkuPC9saT4KCTwvdWw+CgoJPHA+PHNwYW4gY2xh c3M9Indhcm5pbmciPk5vdGU6PC9zcGFuPiBJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGFu IGVhcmxpZXIgdmVyc2lvbiwgbm90ZSB0aGF0IDxjb2RlPnNvb19wbHVnaW5fY29kZTwvY29k ZT4gaGFzIHNvbWUgb3RoZXIgZm9ybWF0IGNoYW5nZXMgKGUuZy4sIGhpZ2hsaWdodGVkIG91 dHB1dCBpcyBub3cgd3JhcHBlZCBpbiBhIDxjb2RlPnByZTwvY29kZT4gZWxlbWVudCksIHNv IHNvbWUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2hhbmdlcyBtaWdodCBiZSBu ZWVkZWQuPC9wPgoKCTxoMz4wLjEuNCAoNy80LzIwMTApPC9oMz4KCgk8dWw+CgkJPGxpPjxj b2RlPnNvb19wbHVnaW5faGVscDwvY29kZT4gb3V0cHV0IGNhbiBoYXZlIDxzcGFuIGNsYXNz PSJjYXBzIj5IVE1MPC9zcGFuPiBoZWFkZXIgbGV2ZWxzIHRyYW5zcG9zZWQsIHVzaW5nIHRo ZSA8Y29kZT5oX3BsdXM8L2NvZGU+IGF0dHJpYnV0ZTwvbGk+Cgk8L3VsPgoKCTxoMz4wLjEu MyAoOS8yNy8yMDA5KTwvaDM+CgoJPHVsPgoJCTxsaT5Gb3IgPGNvZGU+c29vX3BsdWdpbl9j b2RlPC9jb2RlPiwgdGFiIHRvIHNwYWNlIGNvbnZlcnNpb24gbm93IG1haW50YWlucyB0YWIt c3RvcCBhbGlnbm1lbnQ8L2xpPgoJPC91bD4KCgk8aDM+MC4xLjIgKDkvMjYvMjAwOSk8L2gz PgoKCTx1bD4KCQk8bGk+TmV3IGF0dHJpYnV0ZSBmb3IgPGNvZGU+c29vX3BsdWdpbl9oZWxw PC9jb2RlPjoKCTx1bD4KCQk8bGk+PGNvZGU+c2VjdGlvbl9pZDwvY29kZT4sIHN0YXJ0IG91 dHB1dCBmcm9tIGhlYWRlciBlbGVtZW50IHdpdGggc3BlY2lmaWVkIDxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPiBpZCwgY29udGludWluZyB1bnRpbCBuZXh0IGhlYWRlciBlbGVt ZW50IHdpdGggc2FtZSBvciBsb3dlciBsZXZlbDwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoK CTxoMz4wLjEuMSAoOS8yMi8yMDA5KTwvaDM+CgoJPHVsPgoJCTxsaT5GaXhlZDogPHNwYW4g Y2xhc3M9ImNhcHMiPlNRTDwvc3Bhbj4gYnVnIGluIGxpc3QgbW9kZTwvbGk+Cgk8L3VsPgoK CTxoMz4wLjEgKDkvMTgvMjAwOSk8L2gzPgoKCTx1bD4KCQk8bGk+RGlzcGxheSBtb3N0IGZp ZWxkcyBzdHJhaWdodCBmcm9tIHRoZSA8Y29kZT50eHBfcGx1Z2luPC9jb2RlPiB0YWJsZS4g QWxzbywKCTx1bD4KCQk8bGk+cGx1Z2luIG5hbWUgb3IgYXV0aG9yIG5hbWUgY2FuIGJlIGF1 dG9tYXRpY2FsbHkgbGlua2VkIHRvIHBsdWdpbiBhdXRob3ImIzgyMTc7cyB3ZWJzaXRlPC9s aT4KCQk8bGk+PGNvZGU+c29vX3BsdWdpbl9oZWxwPC9jb2RlPiBoYXMgb3B0aW9ucyBmb3Ig c3RyaXBwaW5nIHRpdGxlIGFuZCBzdHlsZSBmaXJzdDwvbGk+CgkJPGxpPjxjb2RlPnNvb19w bHVnaW5fc2l6ZTwvY29kZT4gc2hvd3MgaW5zdGFsbGVkIGNvZGUgc2l6ZTwvbGk+CgkJPGxp Pjxjb2RlPnNvb19wbHVnaW5fY29kZTwvY29kZT4gY2FuIGRpc3BsYXkgY29tcGxldGUgY29k ZSBvciBieSBmdW5jdGlvbi9jbGFzczwvbGk+CgkJPGxpPmNvbXBhdGlibGUgd2l0aCA8c3Ry b25nPnNvb19wbHVnaW5fcHJlZjwvc3Ryb25nPiBwcmVmZXJlbmNlIG1hbmFnZW1lbnQgc3lz dGVtPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+CgogPC9kaXY+IjtzOjQ6ImNvZGUiO3M6MTEw Mjk6IgogIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KIC8vCQkJCQkJc29vX3BsdWdpbl9wcmVmIGNv bXBhdGliaWxpdHkJCQkJCS8vCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8KCgpnbG9iYWwgJHNvb19w bHVnaW5fZGlzcGxheV9wcmVmczsKCkByZXF1aXJlX3BsdWdpbignc29vX3BsdWdpbl9wcmVm Jyk7CQkJCS8vIG9wdGlvbmFsCmFkZF9wcml2cygncGx1Z2luX3ByZWZzLnNvb19wbHVnaW5f ZGlzcGxheScsJzEsMicpOwphZGRfcHJpdnMoJ3BsdWdpbl9saWZlY3ljbGUuc29vX3BsdWdp bl9kaXNwbGF5JywnMSwyJyk7CnJlZ2lzdGVyX2NhbGxiYWNrKCdzb29fcGx1Z2luX2Rpc3Bs YXlfcHJlZnMnLCAncGx1Z2luX3ByZWZzLnNvb19wbHVnaW5fZGlzcGxheScpOwpyZWdpc3Rl cl9jYWxsYmFjaygnc29vX3BsdWdpbl9kaXNwbGF5X3ByZWZzJywgJ3BsdWdpbl9saWZlY3lj bGUuc29vX3BsdWdpbl9kaXNwbGF5Jyk7CgoJLy8gbG9hZCBwcmVmcyBpZiBzb29fcGx1Z2lu X3ByZWYgZW5hYmxlZCwgZWxzZSBsb2FkIGRlZmF1bHRzCiRzb29fcGx1Z2luX2Rpc3BsYXlf cHJlZnMgPSBmdW5jdGlvbl9leGlzdHMoJ3Nvb19wbHVnaW5fcHJlZl92YWxzJykgPwoJc29v X3BsdWdpbl9wcmVmX3ZhbHMoJ3Nvb19wbHVnaW5fZGlzcGxheScpIDogYXJyYXkoKTsKZm9y ZWFjaCAoIHNvb19wbHVnaW5fZGlzcGxheV9kZWZhdWx0cygpIGFzICRuYW1lID0+ICRhcnIg KQoJCS8vIGp1c3QgaW4gY2FzZSBwcmVmcy9kZWZhdWx0cyBkbyBub3QgbWF0Y2g7CgkJLy8g bWlnaHQgaGFwcGVuIGlmIHBsdWdpbiB1cGdyYWRlZCB3aGlsZSBzb29fcGx1Z2luX3ByZWYg ZGlzYWJsZWQKCWlmICggISBhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkc29vX3BsdWdpbl9k aXNwbGF5X3ByZWZzKSApCgkJJHNvb19wbHVnaW5fZGlzcGxheV9wcmVmc1skbmFtZV0gPSAk YXJyWyd2YWwnXTsKCgkvLyBjYWxsYmFjayBmb3IgcGx1Z2luX3ByZWZzL3BsdWdpbl9saWZl Y3ljbGUgZXZlbnRzCmZ1bmN0aW9uIHNvb19wbHVnaW5fZGlzcGxheV9wcmVmcyggJGV2ZW50 LCAkc3RlcCApIHsKCWlmICggZnVuY3Rpb25fZXhpc3RzKCdzb29fcGx1Z2luX3ByZWYnKSAp CgkJcmV0dXJuIHNvb19wbHVnaW5fcHJlZigkZXZlbnQsICRzdGVwLCBzb29fcGx1Z2luX2Rp c3BsYXlfZGVmYXVsdHMoKSk7CgoJCS8vIG1lc3NhZ2UgdG8gaW5zdGFsbCBzb29fcGx1Z2lu X3ByZWYKCWlmICggc3Vic3RyKCRldmVudCwgMCwgMTIpID09ICdwbHVnaW5fcHJlZnMnICkg ewoJCSRwbHVnaW4gPSBzdWJzdHIoJGV2ZW50LCAxMyk7CgkJJG1lc3NhZ2UgPSAnPHA+PGJy IC8+PHN0cm9uZz4nIC4gZ1R4dCgnZWRpdCcpIC4gIiAkcGx1Z2luICIgLgoJCQlnVHh0KCdl ZGl0X3ByZWZlcmVuY2VzJykgLiAnOjwvc3Ryb25nPjxiciAvPicgLiBnVHh0KCdpbnN0YWxs X3BsdWdpbicpIC4KCQkJJyA8YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvOTIv c29vX3BsdWdpbl9wcmVmIj5zb29fcGx1Z2luX3ByZWY8L2E+PC9wPic7CgkJcGFnZXRvcChn VHh0KCdlZGl0X3ByZWZlcmVuY2VzJykgLiAiICYjODI1MDsgJHBsdWdpbiIsICRtZXNzYWdl KTsKCX0KfQoKZnVuY3Rpb24gc29vX3BsdWdpbl9kaXNwbGF5X2RlZmF1bHRzKCApIHsKCXJl dHVybiBhcnJheSgKCQknZGVmYXVsdF9mb3JtJwkJPT4JYXJyYXkoCgkJCSd2YWwnCT0+CScn LAoJCQknaHRtbCcJPT4JJ3RleHRfaW5wdXQnLAoJCQkndGV4dCcJPT4JJ0RlZmF1bHQgb3V0 cHV0IGZvcm0gZm9yIDxiPnNvb19wbHVnaW5fZGlzcGxheTwvYj4gdGFnJywKCQkpLAoJCSdz dHJpcF9zdHlsZScJCT0+CWFycmF5KAoJCQkndmFsJwk9PgkwLAoJCQknaHRtbCcJPT4JJ3ll c25vcmFkaW8nLAoJCQkndGV4dCcJPT4JJ1JlbW92ZSBsZWFkaW5nICZsdDtzdHlsZSZndDsg ZWxlbWVudCBmcm9tIEhlbHAgdGV4dD8nLAoJCSksCgkJJ3N0cmlwX3RpdGxlJwkJPT4JYXJy YXkoCgkJCSd2YWwnCT0+CTAsCgkJCSdodG1sJwk9PgkneWVzbm9yYWRpbycsCgkJCSd0ZXh0 Jwk9PgknUmVtb3ZlIGZpcnN0ICZsdDtoMSZndDsgZWxlbWVudCBmcm9tIEhlbHAgdGV4dD8n LAoJCSksCgkJJ3NpemVfZm9ybWF0JwkJPT4JYXJyYXkoCgkJCSd2YWwnCT0+CSd7c2l6ZX0m bmJzcDtLQicsCgkJCSdodG1sJwk9PgkndGV4dF9pbnB1dCcsCgkJCSd0ZXh0Jwk9PgknRGVm YXVsdCBmb3JtYXQgc3RyaW5nIGZvciA8Yj5zb29fcGx1Z2luX3NpemU8L2I+JywKCQkpLAoJ CSdoaWdobGlnaHQnCQkJPT4JYXJyYXkoCgkJCSd2YWwnCT0+CTEsCgkJCSdodG1sJwk9Pgkn eWVzbm9yYWRpbycsCgkJCSd0ZXh0Jwk9PgknQWRkIHN5bnRheCBoaWdobGlnaHRpbmcgdG8g PGI+c29vX3BsdWdpbl9jb2RlPC9iPj8nLAoJCSksCgkJJ3Nob3dfbGluZV9udW1iZXJzJwk9 PglhcnJheSgKCQkJJ3ZhbCcJPT4JJzonLAoJCQknaHRtbCcJPT4JJ3RleHRfaW5wdXQnLAoJ CQkndGV4dCcJPT4JJ1RleHQgdG8gYXBwZW5kIHRvIGxpbmUgbnVtYmVycyAobGVhdmUgYmxh bmsgdG8gaGlkZSBudW1iZXJzKScsCgkJKSwKCQkndGFiX3N0b3AnCQkJPT4JYXJyYXkoCgkJ CSd2YWwnCT0+CTQsCgkJCSdodG1sJwk9PgkndGV4dF9pbnB1dCcsCgkJCSd0ZXh0Jwk9Pgkn U3BhY2VzIHBlciB0YWIgaW4gcGx1Z2luIGNvZGUnLAoJCSksCgkpOwp9CgogIC8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLy8KIC8vCQkJCQkJCQkJVGFncwkJCQkJCQkJLy8KLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0vLwoKCS8vIHRhZyB0byBzZWxlY3QgcGx1Z2luKHMpIGZvciBkaXNwbGF5CgkvLyBjYW4g YmUgdXNlZCBhcyBzaW5nbGUgdy9mb3JtIG9yIGNvbnRhaW5lcgoJLy8gZm9yIHBsdWdpbiBs aXN0cyBjb2RlIGFuZCBoZWxwIGFyZSBub3QgcmV0cmlldmVkCmZ1bmN0aW9uIHNvb19wbHVn aW5fZGlzcGxheSggJGF0dHMsICR0aGluZyA9ICcnICkgewoJZ2xvYmFsICRzb29fcGx1Z2lu X2Rpc3BsYXksICRzb29fcGx1Z2luX2Rpc3BsYXlfcHJlZnM7CglleHRyYWN0KGxBdHRzKGFy cmF5KAoJCSduYW1lJwkJCT0+CScnLAoJCSdwcmVmaXgnCQk9PgknJywKCQknZm9ybScJCQk9 Pgkkc29vX3BsdWdpbl9kaXNwbGF5X3ByZWZzWydkZWZhdWx0X2Zvcm0nXSwKCQknc2hvd19p bmFjdGl2ZScJPT4JMCwKCQknc29ydCcJCQk9PgknbmFtZSBhc2MnLAoJCSd3cmFwdGFnJwkJ PT4JJycsCgkJJ2JyZWFrJwkJCT0+CScnLAoJCSdjbGFzcycJCQk9PgknJywKCQknaHRtbF9p ZCcJCT0+CScnLAoJKSwgJGF0dHMpKTsKCgkkY29sdW1ucyA9ICdhdXRob3IsIGF1dGhvcl91 cmksIHZlcnNpb24sIGRlc2NyaXB0aW9uLCBuYW1lLCAnIC4KCQkncm91bmQoY2hhcl9sZW5n dGgoY29kZSkvMTAyNCwgMSkgYXMgc2l6ZScgLiAoICRuYW1lID8gJywgaGVscCwgY29kZScg OiAnJyApOwoKCWlmICggJG5hbWUgb3IgJHByZWZpeCApCgkJJHdoZXJlID0gKCAkbmFtZSA/ ICJuYW1lID0gJyRuYW1lJyIgOiAibmFtZSBsaWtlICckcHJlZml4JSciICkKCQkJLiAoICgg JHNob3dfaW5hY3RpdmUgb3IgJG5hbWUgKSA/ICcnIDogJyBhbmQgc3RhdHVzID0gMScgKTsK CWVsc2UKCQkkd2hlcmUgPSAkc2hvd19pbmFjdGl2ZSA/IDEgOiAnc3RhdHVzID0gMSc7Cgkk d2hlcmUgLj0gIiBvcmRlciBieSAkc29ydCI7CgoJaWYgKCAhICRkYXRhID0gc2FmZV9yb3dz KCRjb2x1bW5zLCAndHhwX3BsdWdpbicsICR3aGVyZSkgKQoJCXJldHVybjsKCglmb3JlYWNo ICggJGRhdGEgYXMgJHIgKSB7CgkJJHNvb19wbHVnaW5fZGlzcGxheSA9ICRyOwoJCSRvdXRb XSA9ICR0aGluZyA/IHBhcnNlKCR0aGluZykgOiBwYXJzZV9mb3JtKCRmb3JtKTsKCX0KCglp ZiAoIGlzc2V0KCRvdXQpICkKCQlyZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJl YWssICRjbGFzcywgJycsICcnLCAnJywgJGh0bWxfaWQpOwp9CgoJLy8gYmFzaWMgb3V0cHV0 IHRhZ3M6IGRpc3BsYXkgZmllbGQgZGlyZWN0IGZyb20gZGF0YWJhc2UKZnVuY3Rpb24gc29v X3BsdWdpbl9hdXRob3JfdXJpKCApIHsgcmV0dXJuIF9zb29fcGx1Z2luX2ZpZWxkKCdhdXRo b3JfdXJpJyk7IH0KZnVuY3Rpb24gc29vX3BsdWdpbl92ZXJzaW9uKCApIHsgcmV0dXJuIF9z b29fcGx1Z2luX2ZpZWxkKCd2ZXJzaW9uJyk7IH0KZnVuY3Rpb24gc29vX3BsdWdpbl9kZXNj cmlwdGlvbiggKSB7IHJldHVybiBfc29vX3BsdWdpbl9maWVsZCgnZGVzY3JpcHRpb24nKTsg fQoKCS8vIGFzIGFib3ZlLCBidXQgd2l0aCBvcHRpb24gdG8gbWFrZSBvdXRwdXQgYSBsaW5r IHRvIGF1dGhvcidzIHdlYnNpdGUKZnVuY3Rpb24gc29vX3BsdWdpbl9hdXRob3IoICRhdHRz ICkgeyByZXR1cm4gX3Nvb19wbHVnaW5fZmllbGQoJ2F1dGhvcl91cmknLCAkYXR0cyk7IH0K ZnVuY3Rpb24gc29vX3BsdWdpbl9uYW1lKCAkYXR0cyApIHsgcmV0dXJuIF9zb29fcGx1Z2lu X2ZpZWxkKCduYW1lJywgJGF0dHMpOyB9CgoJLy8gZGlzcGxheSBwbHVnaW4gaGVscCwgd2l0 aCBvcHRpb25zIHRvIHJlbW92ZSBsZWFkaW5nIHN0eWxlIGFuZC9vciBoMSBlbGVtZW50cywK CS8vIGFuZCBvcHRpb24gdG8gcmVzdHJpY3QgZGlzcGxheSB0byBuYW1lZCBzZWN0aW9uCmZ1 bmN0aW9uIHNvb19wbHVnaW5faGVscCggJGF0dHMgKSB7CglnbG9iYWwgJHNvb19wbHVnaW5f ZGlzcGxheV9wcmVmczsKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ3N0cmlwX3N0eWxlJwk9 Pgkkc29vX3BsdWdpbl9kaXNwbGF5X3ByZWZzWydzdHJpcF9zdHlsZSddLAoJCSdzdHJpcF90 aXRsZScJPT4JJHNvb19wbHVnaW5fZGlzcGxheV9wcmVmc1snc3RyaXBfdGl0bGUnXSwKCQkn c2VjdGlvbl9pZCcJPT4JJycsCQkvLyBIVE1MIGlkIGZvciBoZWFkZXIgZWxlbWVudCB0byBk aXNwbGF5CgkJJ2hfcGx1cycJCT0+CTAsCQkvLyB0cmFuc3Bvc2UgaGVhZGVyIGxldmVscyBi eSB0aGlzIGFtb3VudAoJKSwgJGF0dHMpKTsKCSRoZWxwID0gX3Nvb19wbHVnaW5fZmllbGQo J2hlbHAnKTsKCgkJLy8gcmVtb3ZlIGxlYWRpbmcgPHN0eWxlPiBlbGVtZW50CglpZiAoICRz dHJpcF9zdHlsZSBhbmQgcHJlZ19tYXRjaCgnL148c3R5bGUvJywgJGhlbHApICkKCQkkaGVs cCA9IHByZWdfcmVwbGFjZSgnL15bXHNcU10rPzxcL3N0eWxlPihbXHNcU10rKSQvJywgJyQx JywgJGhlbHApOwoKCQkvLyByZW1vdmUgbGVhZGluZyA8aDE+IGVsZW1lbnQKCWlmICggJHN0 cmlwX3RpdGxlICkKCQkkaGVscCA9IHByZWdfcmVwbGFjZSgnL14oW1xzXFNdKz8pPGgxW1xz XFNdKz88XC9oMT4oW1xzXFNdKykkLycsICckMSQyJywgJGhlbHApOwoKCQkvLyBkaXNwbGF5 IGZyb20gbmFtZWQgaGVhZGVyIGVsZW1lbnQgdG8gbmV4dCBoZWFkZXIgd2l0aCBzYW1lIG9y IGxvd2VyIGgtbGV2ZWwKCWlmICggJHNlY3Rpb25faWQgKSB7CgkJJHBhdHRlcm4gPSAiL14o W1xzXFNdKyk8aChcZCkoW14+XStpZD1bJ1wiXSRzZWN0aW9uX2lkKCd8XCIpLis/Pltcc1xT XSspJC8iOwoJCWlmICggcHJlZ19tYXRjaCgkcGF0dGVybiwgJGhlbHAsICRtYXRjaCkgKSB7 CgkJCWxpc3QoICwgLCAkaF9udW0sICRyZW1haW5kZXIpID0gJG1hdGNoOwoJCQkkaGVscCA9 ICcnOwoJCQkkcGF0dGVybiA9ICcvXihbXHNcU10rPyk8aChcZCkoW1xzXFNdKykkLyc7CgkJ CSRyZW1haW5kZXIgPSAiPGgkaF9udW0kcmVtYWluZGVyIjsKCQkJd2hpbGUgKCBwcmVnX21h dGNoKCRwYXR0ZXJuLCAkcmVtYWluZGVyLCAkbWF0Y2gpICkgewoJCQkJbGlzdCggLCAka2Vl cCwgJG5leHRfaCwgJHJlbWFpbmRlcikgPSAkbWF0Y2g7CgkJCQkkaGVscCAuPSAka2VlcDsK CQkJCSRyZW1haW5kZXIgPSAiPGgkbmV4dF9oJHJlbWFpbmRlciI7CgkJCQlpZiAoICRoX251 bSA+PSAkbmV4dF9oICkKCQkJCQkkcmVtYWluZGVyID0gJyc7CgkJCX0KCQkJaWYgKCAhICRo ZWxwICkKCQkJCSRoZWxwID0gJHJlbWFpbmRlcjsKCQl9Cgl9CgoJCS8vIHRyYW5zcG9zZSBI VE1MIGhlYWRlciBsZXZlbHMuCglpZiAoICRoX3BsdXMgKSB7CgkJZm9yICggJGkgPSAxOyAk aSA8PSA2OyAkaSsrICkgewoJCQkkaiA9ICRpICsgJGhfcGx1czsKCQkJaWYgKCAkaiA8IDEg KSAkaiA9IDE7CgkJCWlmICggJGogPiA2ICkgJGogPSA2OwoJCQkkb2xkX3RhZ1tdID0gIjxo JGkiOwoJCQkkb2xkX3RhZ1tdID0gIjwvaCRpIjsKCQkJJG5ld190YWdbXSA9ICI8aCRqIjsK CQkJJG5ld190YWdbXSA9ICI8L2gkaiI7CgkJfQoJCSRoZWxwID0gc3RyX3JlcGxhY2UoJG9s ZF90YWcsICRuZXdfdGFnLCAkaGVscCk7Cgl9CgoJcmV0dXJuICRoZWxwOwp9CgoJLy8gZGlz cGxheSBpbnN0YWxsZWQgY29kZSBzaXplIGluIEtCCmZ1bmN0aW9uIHNvb19wbHVnaW5fc2l6 ZSggJGF0dHMgKSB7CglnbG9iYWwgJHNvb19wbHVnaW5fZGlzcGxheV9wcmVmczsKCWV4dHJh Y3QobEF0dHMoYXJyYXkoCgkJJ2Zvcm1hdCcJPT4JJHNvb19wbHVnaW5fZGlzcGxheV9wcmVm c1snc2l6ZV9mb3JtYXQnXSwKCSksICRhdHRzKSk7Cgkkc2l6ZSA9IF9zb29fcGx1Z2luX2Zp ZWxkKCdzaXplJyk7CglyZXR1cm4gc3RyX3JlcGxhY2UoJ3tzaXplfScsICRzaXplLCAkZm9y bWF0KTsKfQoKCS8vIGRpc3BsYXkgcGx1Z2luIHNvdXJjZSBjb2RlCgkvLyBjb2RlIGhpZ2hs aWdodGluZyB3aXRoIG5hbWVkIGNsYXNzZXMgZm9yIHN0eWxpbmcKCS8vIHZhcmlvdXMgb3B0 aW9ucyBmb3IgbGluZSBudW1iZXJpbmcKCS8vIGRpc3BsYXkgZnVsbCBzb3VyY2Ugb3IgbmFt ZWQgZnVuY3Rpb24sIGNsYXNzLCBvciBtZXRob2QKZnVuY3Rpb24gc29vX3BsdWdpbl9jb2Rl KCAkYXR0cyApIHsKCWdsb2JhbCAkc29vX3BsdWdpbl9kaXNwbGF5X3ByZWZzOwoJZXh0cmFj dChsQXR0cyhhcnJheSgKCQknaGlnaGxpZ2h0JwkJCQk9Pgkkc29vX3BsdWdpbl9kaXNwbGF5 X3ByZWZzWydoaWdobGlnaHQnXSwKCQknc2hvd19saW5lX251bWJlcnMnCQk9Pgkkc29vX3Bs dWdpbl9kaXNwbGF5X3ByZWZzWydzaG93X2xpbmVfbnVtYmVycyddLAoJCSdyZWluZGV4X2xp bmVzJwkJCT0+CTAsCgkJJ3RhYl9zdG9wJwkJCQk9Pgkkc29vX3BsdWdpbl9kaXNwbGF5X3By ZWZzWyd0YWJfc3RvcCddLAoJCSdmdW5jdGlvbicJCQkJPT4JJycsCgkJJ3BocF9jbGFzcycJ CQkJPT4JJycsCgkJJ2NsYXNzJwkJCQkJPT4JJ3Nvb19wbHVnaW5fY29kZScsCgkJJ2h0bWxf aWQnCQkJCT0+CScnLAoJKSwgJGF0dHMpKTsKCgkkcmF3X2NvZGUgPSB0cmltKF9zb29fcGx1 Z2luX2ZpZWxkKCdjb2RlJykpOwoJJG1hdGNoX2luZGV4ID0gMjsKCSRzYWZldHlfY2hlY2sg PSB0cnVlOwoKCQkvLyBmaW5kIG5hbWVkIG1ldGhvZDogYXNzdW1lcyBlbmQgYnJhY2Ugb25l IHRhYiBpbiBmcm9tIHN0YXJ0IG9mIGxpbmUKCWlmICggJHBocF9jbGFzcyBhbmQgJGZ1bmN0 aW9uICkgewoJCSRwYXR0ZXJuID0gJy8oW1xzXFNdKihhYnN0cmFjdHwpXHMqY2xhc3Nccysn CgkJCS4gJHBocF9jbGFzcyAuICdccysuKj9ce1tcc1xTXSs/KShcdChwdWJsaWN8cHJpdmF0 ZXxwcm90ZWN0ZWQpP1xzKmZ1bmN0aW9uXHMrJwoJCQkuICRmdW5jdGlvbiAuICdccypcKFtc c1xTXSs/XG5cdH0uKilbXHNcU10qLyc7CgkJJG1hdGNoX2luZGV4ICsrOwoJfQoKCQkvLyBm aW5kIG5hbWVkIGZ1bmN0aW9uOiBhc3N1bWVzIGVuZCBicmFjZSBhdCBzdGFydCBvZiBsaW5l CgllbHNlaWYgKCAkZnVuY3Rpb24gKQoJCSRwYXR0ZXJuID0gJy8oW1xzXFNdKikoKHB1Ymxp Y3xwcml2YXRlfHByb3RlY3RlZCk/XHMqZnVuY3Rpb25ccysnCgkJCS4gJGZ1bmN0aW9uIC4g J1xzKlwoW1xzXFNdKz9cbn0uKikvJzsKCgkJLy8gZmluZCBuYW1lZCBjbGFzczogYXNzdW1l cyBlbmQgYnJhY2UgYXQgc3RhcnQgb2YgbGluZQoJZWxzZWlmICggJHBocF9jbGFzcyApCgkJ JHBhdHRlcm4gPSAnLyhbXHNcU10qPykoKGFic3RyYWN0fClccypjbGFzc1xzKycKCQkJLiAk cGhwX2NsYXNzIC4gJ1xzKy4qP1x7W1xzXFNdKz9cbn0uKilbXHNcU10qLyc7CgoJZWxzZQoJ CSRzYWZldHlfY2hlY2sgPSBmYWxzZTsKCgkJLy8gc2FmZXR5IGNoZWNrIGlzIGJlY2F1c2Ug dGhlIHByZWdfbWF0Y2goKSBjYW4gdGFrZSBhIGxvbmcgdGltZSBpZiB0aGVyZSBpcyBubyBt YXRjaAoJaWYgKCAkc2FmZXR5X2NoZWNrICkgewoJCWlmICggJGZ1bmN0aW9uIGFuZCAhIHBy ZWdfbWF0Y2goIi8kZnVuY3Rpb25ccypcKC8iLCAkcmF3X2NvZGUpICkKCQkJcmV0dXJuOwoJ CWlmICggJHBocF9jbGFzcyBhbmQgISBwcmVnX21hdGNoKCIvY2xhc3NccyokcGhwX2NsYXNz XHMrLyIsICRyYXdfY29kZSkgKQoJCQlyZXR1cm47Cgl9CgoJaWYgKCBpc3NldCgkcGF0dGVy bikgKSB7CgkJaWYgKCAhIHByZWdfbWF0Y2goJHBhdHRlcm4sICRyYXdfY29kZSwgJG1hdGNo KSApIHJldHVybjsKCQkkcmF3X2NvZGUgPSAkbWF0Y2hbJG1hdGNoX2luZGV4XTsKCQkJLy8g aWYgbm90IHJlaW5kZXhpbmcsIGZpbmQgc3RhcnRpbmcgbGluZSBudW1iZXIgaW4gZnVsbCBz b3VyY2UgY29kZQoJCSRzdGFydF9saW5lID0gJHJlaW5kZXhfbGluZXMgPwoJCQkkcmVpbmRl eF9saW5lcyA6IGNvdW50KGV4cGxvZGUobiwgJG1hdGNoWzFdKSk7Cgl9CgoJCS8vIGNvbnZl cnQgdGFicyB0byBzcGFjZXMsIHJldGFpbmluZyB0YWIgc3RvcCBhbGlnbm1lbnQKCWZvcmVh Y2ggKCBleHBsb2RlKG4sICRyYXdfY29kZSkgYXMgJGxpbmUgKSB7CgkJJGJ1Y2tldCA9IGFy cmF5KCk7CgkJZm9yZWFjaCAoIHN0cl9zcGxpdCgkbGluZSkgYXMgJGNoYXIgKQoJCQlpZiAo ICRjaGFyID09IHQgKSB7CgkJCQkkYWRkID0gJHRhYl9zdG9wIC0gZm1vZChjb3VudCgkYnVj a2V0KSwgJHRhYl9zdG9wKTsKCQkJCXdoaWxlICggJGFkZCApIHsKCQkJCQkkYnVja2V0W10g PSAnICc7CgkJCQkJJGFkZCAtLTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCQkkYnVja2V0W10g PSAkY2hhcjsKCQkkbGluZXNbXSA9IGltcGxvZGUoJycsICRidWNrZXQpOwoJfQoKCWlmICgg ISAkaGlnaGxpZ2h0ICkKCQlyZXR1cm4gaW1wbG9kZShuLCBhcnJheV9tYXAoJ2h0bWxzcGVj aWFsY2hhcnMnLCAkbGluZXMpKTsKCgkkZmluZCA9IGFycmF5KHNwLCBiciwgJzxjb2RlPics ICc8L2NvZGU+Jyk7CgkkcmVwbGFjZSA9IGFycmF5KCcgJywgbiwgJycsICcnKTsKCQkvLyBu YW1lcyBvZiBjb2RlIGhpZ2hsaWdodCB0eXBlcyBmcm9tIGluaV9nZXQoKQoJCS8vIGhpZ2hs aWdodF9zdHJpbmcoKSBvdXRwdXQgc3R5bGUgYXR0cmlidXRlcyB3aWxsIGJlIHJlcGxhY2Vk IGJ5IG5hbWVkIGNsYXNzZXMKCWZvcmVhY2ggKCBhcnJheSgnYmcnLCAnY29tbWVudCcsICdk ZWZhdWx0JywgJ2h0bWwnLCAna2V5d29yZCcsICdzdHJpbmcnKSBhcyAkayApIHsKCQkkZmlu ZFtdID0gJ3N0eWxlPSJjb2xvcjogJyAuIGluaV9nZXQoImhpZ2hsaWdodC4kayIpIC4gJyIn OwoJCSRyZXBsYWNlW10gPSAiY2xhc3M9XCJwaHBfJGtcIiI7Cgl9CgoJJHN0YXJ0X2xpbmUg PSAxOwoKCQkvLyBydW4gaGlnaGxpZ2h0X3N0cmluZygpLCBjbGVhbiB1cAoJJGhfcyA9IGhp Z2hsaWdodF9zdHJpbmcoIjw/cGhwXG4iIC4gaW1wbG9kZShuLCAkbGluZXMpIC4gIlxuPz4i LCB0cnVlKTsKCSRsaW5lcyA9IHN0cl9yZXBsYWNlKCRmaW5kLCAkcmVwbGFjZSwgZXhwbG9k ZShiciwgJGhfcykpOwoJYXJyYXlfc2hpZnQoJGxpbmVzKTsKCSRsaW5lc1swXSA9ICc8c3Bh biBjbGFzcz0icGhwX2h0bWwiPicgLiAkbGluZXNbMF07CglhcnJheV9wb3AoJGxpbmVzKTsK CSRsaW5lc1tjb3VudCgkbGluZXMpLTFdIC49ICc8L3NwYW4+JzsKCgkJLy8gYWRkIGxpbmUg bnVtYmVycwoJJHRvdGFsX2xpbmVzID0gJHN0YXJ0X2xpbmUgKyBjb3VudCgkbGluZXMpIC0g MTsKCWZvcmVhY2ggKCAkbGluZXMgYXMgJGkgPT4gJGxpbmUgKSB7CgkJaWYgKCAkc2hvd19s aW5lX251bWJlcnMgKSB7CgkJCSRpICs9ICRzdGFydF9saW5lOwoJCQkkbGluZSA9ICI8c3Bh biBjbGFzcz1cInBocF9jb21tZW50XCI+JGkgJHNob3dfbGluZV9udW1iZXJzPC9zcGFuPiAk bGluZSI7CgkJCWlmICggJGkgPCAxMDAwIGFuZCAkdG90YWxfbGluZXMgPiA5OTkgKSAkbGlu ZSA9IHNwIC4gJGxpbmU7CgkJCWlmICggJGkgPCAxMDAgYW5kICR0b3RhbF9saW5lcyA+IDk5 ICkgJGxpbmUgPSBzcCAuICRsaW5lOwoJCQlpZiAoICRpIDwgMTAgKSAkbGluZSA9IHNwIC4g JGxpbmU7CgkJfQoJCSRjb2RlW10gPSAkbGluZTsKCX0KCgkkdGFnX2F0dHMgPSAoICRjbGFz cyA/ICIgY2xhc3M9XCIkY2xhc3NcIiIgOiAnJyApIC4gKCAkaHRtbF9pZCA/ICIgaWQ9XCIk aHRtbF9pZFwiIiA6ICcnICk7CgoJcmV0dXJuICI8cHJlJHRhZ19hdHRzPjxjb2RlJHRhZ19h dHRzPiIgLiBpbXBsb2RlKG4sICRjb2RlKSAuICc8L2NvZGU+PC9wcmU+JzsKfQoKICAvLy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS8vCiAvLwkJCQkJCQlTdXBwb3J0IEZ1bmN0aW9ucwkJCQkJCQkvLwov Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS8vCgpmdW5jdGlvbiBfc29vX3BsdWdpbl9maWVsZCggJGZpZWxk LCAkYXR0cyA9IG51bGwgKSB7CglpZiAoIGlzX2FycmF5KCRhdHRzKSApCgkJZXh0cmFjdChs QXR0cyhhcnJheSgKCQkJJ2xpbmsnCT0+CTEsCgkJKSwgJGF0dHMpKTsKCWdsb2JhbCAkc29v X3BsdWdpbl9kaXNwbGF5OwoJJGF1dGhvcl91cmkgPSAkc29vX3BsdWdpbl9kaXNwbGF5Wydh dXRob3JfdXJpJ107CglpZiAoIGlzc2V0KCRzb29fcGx1Z2luX2Rpc3BsYXlbJGZpZWxkXSkg KSB7CgkJJG91dCA9ICRzb29fcGx1Z2luX2Rpc3BsYXlbJGZpZWxkXTsKCQlyZXR1cm4gKCAh IGVtcHR5KCRsaW5rKSBhbmQgJGF1dGhvcl91cmkgKSA/IGhyZWYoJG91dCwgJGF1dGhvcl91 cmkpIDogJG91dDsKCX0KfQoiO3M6NDoidHlwZSI7czoxOiIxIjtzOjU6ImZsYWdzIjtzOjE6 IjMiO3M6NToib3JkZXIiO3M6MToiNSI7czozOiJtZDUiO3M6MzI6IjBjZDRhZTk5Zjc5NTAy NjllNTIyNzRkOTZlZjQ5ZGI0Ijt9