# Name: soo_image v1.0.b.7 # Type: Admin/Client side plugin # Simple yet powerful image tags # 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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjk6InNvb19pbWFnZSI7czo2OiJhdXRob3IiO3M6ODoiSmVm ZiBTb28iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjU6Imh0dHA6Ly9pcHNlZGl4aXQubmV0L3R4 cC8iO3M6NzoidmVyc2lvbiI7czo3OiIxLjAuYi43IjtzOjExOiJkZXNjcmlwdGlvbiI7czoz MDoiU2ltcGxlIHlldCBwb3dlcmZ1bCBpbWFnZSB0YWdzIjtzOjQ6ImhlbHAiO3M6MzY3NjM6 IjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmRpdiNzZWRfaGVscCBwcmUge3BhZGRpbmc6IDAu NWVtIDFlbTsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7fQpk aXYjc2VkX2hlbHAgaDEsIGRpdiNzZWRfaGVscCBoMiwgZGl2I3NlZF9oZWxwIGgzLCBkaXYj c2VkX2hlbHAgaDMgY29kZSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0 OiBib2xkO30KZGl2I3NlZF9oZWxwIGgxLCBkaXYjc2VkX2hlbHAgaDIsIGRpdiNzZWRfaGVs cCBoMyB7bWFyZ2luLWxlZnQ6IC0xZW07fQpkaXYjc2VkX2hlbHAgaDIsIGRpdiNzZWRfaGVs cCBoMyB7bWFyZ2luLXRvcDogMmVtO30KZGl2I3NlZF9oZWxwIGgxIHtmb250LXNpemU6IDIu NGVtO30KZGl2I3NlZF9oZWxwIGgyIHtmb250LXNpemU6IDEuOGVtO30KZGl2I3NlZF9oZWxw IGgzIHtmb250LXNpemU6IDEuNGVtO30KZGl2I3NlZF9oZWxwIGg0IHtmb250LXNpemU6IDEu MmVtO30KZGl2I3NlZF9oZWxwIGg1IHtmb250LXNpemU6IDFlbTttYXJnaW4tbGVmdDoxZW07 Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIGg2IHtmb250LXNpemU6IDFlbTtt YXJnaW4tbGVmdDoyZW07Zm9udC1zdHlsZTpvYmxpcXVlO30KZGl2I3NlZF9oZWxwIGxpIHts aXN0LXN0eWxlLXR5cGU6IGRpc2M7fQpkaXYjc2VkX2hlbHAgbGkgbGkge2xpc3Qtc3R5bGUt dHlwZTogY2lyY2xlO30KZGl2I3NlZF9oZWxwIGxpIGxpIGxpIHtsaXN0LXN0eWxlLXR5cGU6 IHNxdWFyZTt9CmRpdiNzZWRfaGVscCBsaSBhIGNvZGUge2ZvbnQtd2VpZ2h0OiBub3JtYWw7 fQpkaXYjc2VkX2hlbHAgbGkgY29kZTpmaXJzdC1jaGlsZCB7YmFja2dyb3VuZDogI2RkZDtw YWRkaW5nOjAgLjNlbTttYXJnaW4tbGVmdDotLjNlbTt9CmRpdiNzZWRfaGVscCBsaSBsaSBj b2RlOmZpcnN0LWNoaWxkIHtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZzowO21hcmdpbi1sZWZ0 OjA7fQpkaXYjc2VkX2hlbHAgZGZuIHtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6b2Js aXF1ZTt9CmRpdiNzZWRfaGVscCAucmVxdWlyZWQsIGRpdiNzZWRfaGVscCAud2FybmluZyB7 Y29sb3I6cmVkO30KZGl2I3NlZF9oZWxwIC5kZWZhdWx0IHtjb2xvcjpncmVlbjt9Cjwvc3R5 bGU+CiA8ZGl2IGlkPSJzZWRfaGVscCI+CgoJPGgxPnNvb19pbWFnZTwvaDE+CgoJPGgyPkNv bnRlbnRzPC9oMj4KCgk8dWw+CgkJPGxpPjxhIGhyZWY9IiNvdmVydmlldyI+T3ZlcnZpZXc8 L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3VzYWdlIj5Vc2FnZTwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjaW1hZ2VfY29udGV4dCI+SW1hZ2UgQ29udGV4dDwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjdGFncyI+VGFnczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY29udHJvbGxl cl90YWciPkNvbnRyb2xsZXIgdGFnPC9hPgoJPHVsPgoJCTxsaT48YSBocmVmPSIjc29vX2lt YWdlX3NlbGVjdCI+c29vX2ltYWdlX3NlbGVjdDwvYT48L2xpPgoJPC91bD48L2xpPgoJPHVs PgoJCTxsaT48YSBocmVmPSIjb3V0cHV0X3RhZ3MiPk91dHB1dCB0YWdzPC9hPgoJPHVsPgoJ CTxsaT48YSBocmVmPSIjc29vX2ltYWdlIj5zb29faW1hZ2U8L2E+PC9saT4KCQk8bGk+PGEg aHJlZj0iI3Nvb19pbWFnZV8iPnNvb19pbWFnZV8qPC9hPiA8ZW0+KC1hdXRob3IsIC1jYXB0 aW9uLCBldGMuKTwvZW0+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3Nvb190aHVtYm5haWxfIj5z b29fdGh1bWJuYWlsXyo8L2E+IDxlbT4oLXVybCwgLWhlaWdodCwgLXdpZHRoKTwvZW0+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI3Nvb19leGlmIj5zb29fZXhpZjwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjcGFnaW5hdGlvbiI+UGFnaW5hdGlvbjwvYT48L2xpPgoJPC91bD48L2xpPgoJ CTxsaT48YSBocmVmPSIjY29uZGl0aW9uYWxfdGFncyI+Q29uZGl0aW9uYWwgdGFnczwvYT4K CTx1bD4KCQk8bGk+PGEgaHJlZj0iI3Nvb19pZl90eHBfaW1hZ2UiPnNvb19pZl90eHBfaW1h Z2U8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3Nvb19pZl9pbWFnZV8iPnNvb19pZl9pbWFn ZV8qPC9hPiA8ZW0+KC1hdXRob3IsIC1jYXRlZ29yeSwgZXRjLik8L2VtPjwvbGk+Cgk8L3Vs PjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNyZXF1aXJlbWVudHMiPlJlcXVp cmVtZW50cyAmYW1wOyBJbnN0YWxsYXRpb248L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3By ZWZlcmVuY2VzIj5QcmVmZXJlbmNlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjZXhhbXBs ZXMiPkV4YW1wbGVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNoaXN0b3J5Ij5IaXN0b3J5 PC9hPjwvbGk+Cgk8L3VsPgoKCTxwPkEgZnVsbCA8YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0 Lm5ldC90eHAvNTUvc29vX2ltYWdlLXVzZXItZ3VpZGUiPlVzZXIgR3VpZGU8L2E+IGlzIGF2 YWlsYWJsZSBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL2lwc2VkaXhpdC5uZXQvIj5hdXRob3Im IzgyMTc7cyB3ZWJzaXRlPC9hPi48L3A+CgoJPGgyIGlkPSJvdmVydmlldyI+T3ZlcnZpZXc8 L2gyPgoKCTxwPlllcywgaXQmIzgyMTc7cyA8ZW0+WWV0IEFub3RoZXIgSW1hZ2UgUGx1Z2lu PC9lbT4mIzE3NDsuIFRoaXMgb25lLCB0aG91Z2gsIGZpdHMgcmlnaHQgaW50byA8ZW0+VGhl IFRleHRwYXR0ZXJuIFdheTwvZW0+JiM4NDgyOy4gU2VyaW91c2x5LCBpdCBkb2VzIGFpbSB0 byBiZSBhcyBUeHAtaXNoIGFzIHBvc3NpYmxlLiBObyBmYW5jeSBzdHVmZiAod2l0aCBhbGwg dGhlIGxvY2tlZC1pbiBmb3JtYXR0aW5nIHRoYXQgdHlwaWNhbGx5IGdvZXMgYWxvbmcgd2l0 aCBpdCksIGJ1dCBzaW1wbGUgdGFncyB0aGF0IGJyaW5nIGltYWdlIGRpc3BsYXkgdGhlIHNh bWUga2luZCBvZiBmbGV4aWJsZSBwb3dlciBUeHAgb2ZmZXJzIGZvciBhcnRpY2xlIGRpc3Bs YXkuPC9wPgoKCTxwPkJhc2ljIGZlYXR1cmVzIGluY2x1ZGUgdGFncyBmb3IgZGlzcGxheWlu ZyBpbWFnZXMgYW5kIGFzc29jaWF0ZWQgaW5mbyAoc3VjaCBhcyA8Y29kZT5hdXRob3I8L2Nv ZGU+ICZhbXA7IDxjb2RlPmNhcHRpb248L2NvZGU+KS4gVGhlcmUgYXJlIGFsc28gPGEgaHJl Zj0iI2NvbmRpdGlvbmFsX3RhZ3MiPmNvbmRpdGlvbmFsIHRhZ3M8L2E+IGZvciBjaGVja2lu ZyBhZ2FpbnN0IHRoYXQgaW5mbywgYW5kIDxhIGhyZWY9IiNzb29fZXhpZiI+dGFncyBmb3Ig cmVhZGluZyBhbmQgZGlzcGxheWluZyA8c3BhbiBjbGFzcz0iY2FwcyI+RVhJRjwvc3Bhbj4g bWV0YWRhdGE8L2E+IGRpcmVjdGx5IGZyb20gaW1hZ2UgZmlsZXMuPC9wPgoKCTxwPlRoZSBr ZXkgZmVhdHVyZSBpcyBmbGV4aWJsZSBpbWFnZSBzZWxlY3Rpb24gY29tYmluZWQgd2l0aCBU eHAgZm9ybXMuIFJldHJpZXZlIGltYWdlcyBzaW5nbHkgb3IgaW4gZ3JvdXBzLiBTZWxlY3Qg cGFydGljdWxhciBpbWFnZXMgb3Igc2VhcmNoIG9uIGNhdGVnb3J5LCBhdXRob3IsIGFzcGVj dCByYXRpbywgYW5kL29yIGZpbGUgdHlwZS4gWW91ciBzZWxlY3Rpb24gd29ya3Mgd2l0aCA8 ZW0+aW1hZ2UgZm9ybXM8L2VtPiBmb3IgeW91ciBjaG9pY2Ugb2YgZm9ybWF0dGluZy4gWW91 ciBhdXRvbWF0aWNhbGx5LWZvcm1hdHRlZCBpbWFnZXMgY2FuIGJlIHBsYWNlZCBhbnl3aGVy ZSwgaW5jbHVkaW5nIGRpcmVjdGx5IGludG8gYXJ0aWNsZSBib2R5IHRleHQuIFlvdSBjYW4g Y3JlYXRlIGFuZCBjb250cm9sIGdhbGxlcmllcyB3aXRoIHlvdXIgY2hvaWNlIG9mIFR4cCB0 YWdzIGFuZCA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gbWFya3VwLiBZb3UgY2Fu IGFzc2lnbiBtdWx0aXBsZSBpbWFnZXMgdG8gYW4gYXJ0aWNsZS48L3A+CgoJPHA+PHN0cm9u Zz5zb29faW1hZ2U8L3N0cm9uZz4gaXMgZGVzaWduZWQgZm9yIGltYWdlcyBtYW5hZ2VkIHRo cm91Z2ggdGhlIFR4cCBJbWFnZXMgdGFiIChpdCYjODIxNztzIDxlbT5UaGUgVGV4dHBhdHRl cm4gV2F5PC9lbT4mIzg0ODI7LCBhZnRlciBhbGwpLCBidXQgYWxzbyBhbGxvd3MgZGlyZWN0 IHNlbGVjdGlvbiBieSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiAob2YgY291cnNl IHRoZXNlIHdvbiYjODIxNzt0IGhhdmUgY2FwdGlvbnMgZXRjLikuPC9wPgoKCTxoMiBpZD0i dXNhZ2UiPlVzYWdlPC9oMj4KCgk8cD5UaGUgPGEgaHJlZj0iI3Nvb19pbWFnZSI+PGNvZGU+ c29vX2ltYWdlPC9jb2RlPjwvYT4gdGFnIGNhbiBiZSB1c2VkIHN0YW5kYWxvbmUsIGluIHBs YWNlIG9mIDxhIGhyZWY9Imh0dHA6Ly90ZXh0Ym9vay50ZXh0cGF0dGVybi5uZXQvd2lraS9p bmRleC5waHA/dGl0bGU9aW1hZ2UiPjxjb2RlPmltYWdlPC9jb2RlPjwvYT4sIDxhIGhyZWY9 Imh0dHA6Ly90ZXh0Ym9vay50ZXh0cGF0dGVybi5uZXQvd2lraS9pbmRleC5waHA/dGl0bGU9 dGh1bWJuYWlsIj48Y29kZT50aHVtYm5haWw8L2NvZGU+PC9hPiwgb3IgPGEgaHJlZj0iaHR0 cDovL3RleHRib29rLnRleHRwYXR0ZXJuLm5ldC93aWtpL2luZGV4LnBocD90aXRsZT1hcnRp Y2xlX2ltYWdlIj48Y29kZT5hcnRpY2xlX2ltYWdlPC9jb2RlPjwvYT4uIE9uZSBhZHZhbnRh Z2UgaXMgY29udHJvbCBvdmVyIHRoZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGFuZCA8Y29kZT53 aWR0aDwvY29kZT4gYXR0cmlidXRlcyBpbiB0aGUgPGNvZGU+aW1nPC9jb2RlPiB0YWcsIG1h a2luZyBpdCBlYXNpZXIgdG8gY3JlYXRlIGxheW91dHMgaW4gd2hpY2ggdGhlIGltYWdlcyBz Y2FsZSBhbG9uZyB3aXRoIHRoZSB0ZXh0IHNpemUsIHVzaW5nIG9ubHkgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4uIFRoZXJlIGlzIGEgPGNvZGU+dGl0bGU8L2NvZGU+IGF0dHJp YnV0ZSBmb3IgY29udHJvbCBvdmVyIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPnRpdGxlPC9j b2RlPiBpbiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IG91dHB1dC4gPGNv ZGU+c29vX2ltYWdlPC9jb2RlPiBhbHNvIGFjY2VwdHMgPGNvZGU+bGlua19yZWw8L2NvZGU+ IGFuZCA8Y29kZT5vbmNsaWNrPC9jb2RlPiBhdHRyaWJ1dGVzLCBoZWxwZnVsIGZvciBob29r aW5nIGludG8gamF2YXNjcmlwdC1iYXNlZCBnYWxsZXJpZXMuPC9wPgoKCTxwPjxjb2RlPnNv b19pbWFnZTwvY29kZT4gY2FuIGdvIGluIGFuIGltYWdlIGZvcm0gdG8gZGlzcGxheSBpbWFn ZXMgcmV0cmlldmVkIGJ5IDxhIGhyZWY9IiNzb29faW1hZ2Vfc2VsZWN0Ij48Y29kZT5zb29f aW1hZ2Vfc2VsZWN0PC9jb2RlPjwvYT4uIFR4cCBkb2VzbiYjODIxNzt0IGhhdmUgaW1hZ2Ug Zm9ybXMgcGVyIHNlLCBzbyBhbiA8ZGZuPmltYWdlIGZvcm08L2Rmbj4gaXMgYSBmb3JtIG9m IHR5cGUgJiM4MjIwO21pc2MmIzgyMjE7IHRoYXQgaXMgY2FsbGVkIGJ5IDxjb2RlPnNvb19p bWFnZV9zZWxlY3Q8L2NvZGU+IGFuZCB0aGF0IGNvbnRhaW5zIG9uZSBvciBtb3JlIDxzdHJv bmc+c29vX2ltYWdlPC9zdHJvbmc+IHRhZ3MuPC9wPgoKCTxwPjxjb2RlPnNvb19pbWFnZV9z ZWxlY3Q8L2NvZGU+IGlzIGdlbmVyYWxseSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW4g aW1hZ2UgZm9ybS4gV2hhdCA8YSBocmVmPSJodHRwOi8vdGV4dGJvb2sudGV4dHBhdHRlcm4u bmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPWFydGljbGUiPjxjb2RlPmFydGljbGU8L2NvZGU+ PC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3RleHRib29rLnRleHRwYXR0ZXJuLm5ldC93aWtp L2luZGV4LnBocD90aXRsZT1hcnRpY2xlX2N1c3RvbSI+PGNvZGU+YXJ0aWNsZV9jdXN0b208 L2NvZGU+PC9hPiBkbyBmb3IgYXJ0aWNsZXMsIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2Nv ZGU+IGRvZXMgZm9yIGltYWdlcy4gVGhlIHRhZyBpdHNlbGYgY2FuIGdvIG5lYXJseSBhbnl3 aGVyZSAoYnV0IDxzcGFuIGNsYXNzPSJ3YXJuaW5nIj5ub3Q8L3NwYW4+IGluIGFuIGltYWdl IGZvcm0pLiBJdCByZXRyaWV2ZXMgaW1hZ2VzIGJhc2VkIG9uIHlvdXIgY3JpdGVyaWEgYW5k IHRoZW4gc2VuZHMgdGhlbSB0byB0aGUgaW1hZ2UgZm9ybSBmb3IgZGlzcGxheS4gSXQgcGx1 cyBhbiBpbWFnZSBmb3JtIGNhbiByZXBsYWNlIDxjb2RlPmFydGljbGVfaW1hZ2U8L2NvZGU+ LCBhbGxvd2luZyB5b3UgdG8gYXNzaWduIG11bHRpcGxlIGltYWdlcyBwZXIgYXJ0aWNsZS48 L3A+CgoJPHA+SW5zdGVhZCBvZiB1c2luZyBhbiBpbWFnZSBmb3JtLCB5b3UgY2FuIGFsc28g dXNlIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IGFzIGEgY29udGFpbmVyIHRhZyAo aW4gdGhlIHNhbWUgd2F5IDxjb2RlPmFydGljbGU8L2NvZGU+IGFuZCA8Y29kZT5hcnRpY2xl X2N1c3RvbTwvY29kZT4gd29yayBlaXRoZXIgYXMgc2luZ2xlIG9yIGNvbnRhaW5lciB0YWdz KS4gU29tZXRpbWVzIHRoaXMgaXMgbW9yZSBleHBlZGllbnQgdGhhbiBjcmVhdGluZyBhIG5l dyBmb3JtLjwvcD4KCgk8cD5UaGUgb3RoZXIgdGFncyB3b3JrIHdoZXJldmVyIHRoZXJlIGlz IDxhIGhyZWY9IiNpbWFnZV9jb250ZXh0Ij5pbWFnZSBjb250ZXh0PC9hPi48L3A+CgoJPGgy IGlkPSJpbWFnZV9jb250ZXh0Ij5JbWFnZSBDb250ZXh0IGFuZCBGb3JtczwvaDI+CgoJPHA+ TW9zdCA8c3Ryb25nPnNvb19pbWFnZTwvc3Ryb25nPiB0YWdzIHJlcXVpcmUgaW1hZ2UgY29u dGV4dCB0byBwcm9kdWNlIG91dHB1dC4gPGRmbj5JbWFnZSBjb250ZXh0PC9kZm4+IGlzIHBy b3ZpZGVkIGJ5IHRoZSBmaXJzdCBvZiwgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBwcmlvcml0 eTo8L3A+CgoJPHVsPgoJCTxsaT5JbnNpZGUgYW4gaW1hZ2UgZm9ybSwgdGhlIGltYWdlcyBz ZWxlY3RlZCBieSA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPgoJPHVsPgoJCTxsaT5z cGVjaWZpZWQgPGNvZGU+bmFtZTwvY29kZT4gdmFsdWVzLCBvcjs8L2xpPgoJCTxsaT5zcGVj aWZpZWQgPGNvZGU+aWQ8L2NvZGU+IHZhbHVlcywgb3I7PC9saT4KCQk8bGk+c3BlY2lmaWVk IDxjb2RlPmNhdGVnb3J5PC9jb2RlPiwgPGNvZGU+YXV0aG9yPC9jb2RlPiwgPGNvZGU+ZXh0 PC9jb2RlPiAoZmlsZSB0eXBlKSwgb3IgPGNvZGU+YXNwZWN0X3JhdGlvPC9jb2RlPiB2YWx1 ZXMsIG9yOzwvbGk+CgkJPGxpPmFydGljbGUgaW1hZ2VzLCBvcjs8L2xpPgoJPC91bD48L2xp PgoJCTxsaT5PdXRzaWRlIGFuIGltYWdlIGZvcm0KCTx1bD4KCQk8bGk+KGZpcnN0KSBhcnRp Y2xlIGltYWdlLCBvcjs8L2xpPgoJCTxsaT4ob3B0aW9uYWxseSkgZmlyc3QgaW1hZ2Ugc2Vs ZWN0ZWQgYnkgcHJldmlvdXMgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gdGFnIChw ZXJzaXN0ZW50IGNvbnRleHQpPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+CgoJPHA+SW5zaWRl IGFuIDxkZm4+aW1hZ2UgZm9ybTwvZGZuPiwgaS5lLiBhIGZvcm0gY2FsbGVkIGJ5IDxjb2Rl PnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IChvciB0aGUgY29udGVudHMgb2YgYSA8Y29kZT5z b29faW1hZ2Vfc2VsZWN0PC9jb2RlPiBjb250YWluZXIgdGFnKSwgYWxsIG9mIHRoZSBzZWxl Y3RlZCBpbWFnZXMgd2lsbCBiZSBwYXNzZWQsIG9uZSBhdCBhIHRpbWUsIHRvIGFueSA8c3Ry b25nPnNvb19pbWFnZTwvc3Ryb25nPiB0YWdzLiBPdXRzaWRlIGFuIGltYWdlIGZvcm0sIGEg PHN0cm9uZz5zb29faW1hZ2U8L3N0cm9uZz4gdGFnIG9ubHkgc2VlcyB0aGUgZmlyc3QgaW1h Z2UgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gVGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBhcnRp Y2xlIGltYWdlIG9yLCBpZiB0aGVyZSBpcyBubyBhcnRpY2xlIGltYWdlLCB0aGUgZmlyc3Qg aW1hZ2UgZnJvbSB0aGUgcHJldmlvdXMgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4g dGFnLjwvcD4KCgk8cD5UaGlzIGxhc3QgZWxlbWVudCwgdGhlIGZpcnN0IGltYWdlIGZyb20g dGhlIHByZXZpb3VzIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IHRhZywgaXMgY2Fs bGVkIDxkZm4+cGVyc2lzdGVudCBjb250ZXh0PC9kZm4+LiBJdCBpcyBvcHRpb25hbCBiZWNh dXNlIGl0IGNhbiBiZSBkaXNhYmxlZCBlaXRoZXIgaW4gcHJlZmVyZW5jZXMgb3IgaW4gPGNv ZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4mIzgyMTc7cyBhdHRyaWJ1dGVzLiBTZWUgPGEg aHJlZj0iaHR0cDovL2lwc2VkaXhpdC5uZXQvdHhwLzYxL3BhZ2luYXRpb24jcGVyc2lzdGVu dF9jb250ZXh0Ij5wYWdpbmF0aW9uPC9hPiBmb3IgYSB1c2VmdWwgZXhhbXBsZSBvZiBwZXJz aXN0ZW50IGNvbnRleHQuPC9wPgoKCTxwPk5vdGUgdGhhdCA8Y29kZT5zb29faW1hZ2Vfc2Vs ZWN0PC9jb2RlPiB1c3VhbGx5IG5lZWRzIHRvIGFwcGVhciBiZWZvcmUgYW55IG90aGVyIDxz dHJvbmc+c29vX2ltYWdlPC9zdHJvbmc+IHRhZ3MgaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGlz IGNvbnRleHQuIFRoZSA8YSBocmVmPSIjcGFnaW5hdGlvbiI+cGFnaW5hdGlvbiB0YWdzPC9h PiBhcmUgYW4gZXhjZXB0aW9uOyB0aGV5IGNhbiBnbyBhbnl3aGVyZSBvbiB0aGUgcGFnZS48 L3A+CgoJPGgyIGlkPSJ0YWdzIj5UYWdzPC9oMj4KCgk8aDMgaWQ9ImNvbnRyb2xsZXJfdGFn Ij5Db250cm9sbGVyIHRhZzwvaDM+CgoJPGg0IGlkPSJzb29faW1hZ2Vfc2VsZWN0Ij5zb29f aW1hZ2Vfc2VsZWN0PC9oND4KCgk8cD5TZWxlY3QgaW1hZ2VzIGZvciBkaXNwbGF5IHZpYSBv dGhlciA8c3Ryb25nPnNvb19pbWFnZTwvc3Ryb25nPiB0YWdzLiBTZWxlY3Qgc3BlY2lmaWMg aW1hZ2VzIGJ5IG5hbWUgb3IgaWQ7IHNlYXJjaCBmb3IgaW1hZ2VzIGJ5IGF1dGhvciwgY2F0 ZWdvcnksIGFzcGVjdCByYXRpbywgb3IgZmlsZSB0eXBlOyBvciByZXRyaWV2ZSBhcnRpY2xl IGltYWdlKHMpLiBFYWNoIHNlbGVjdGVkIGltYWdlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBp bWFnZSBmb3JtIG9yIGNvbnRhaW5lciBjb250ZW50cy48L3A+CgoJPHA+Q2FuIGJlIHVzZWQg YWxtb3N0IGFueXdoZXJlLCBidXQgPHNwYW4gY2xhc3M9Indhcm5pbmciPmRvIG5vdCB1c2Ug cmVjdXJzaXZlbHk8L3NwYW4+LCBpLmUuIGluc2lkZSBhbm90aGVyIDxzdHJvbmc+c29vX2lt YWdlPC9zdHJvbmc+IGltYWdlIGZvcm0gb3IgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29k ZT4gY29udGFpbmVyIHRhZy4gSW4gZ2VuZXJhbCB5b3UgbXVzdCBwbGFjZSA8Y29kZT5zb29f aW1hZ2Vfc2VsZWN0PC9jb2RlPiBhYm92ZSBhbnkgb3RoZXIgPHN0cm9uZz5zb29faW1hZ2U8 L3N0cm9uZz4gdGFncyBpZiA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiBpcyBleHBl Y3RlZCB0byBwcm92aWRlIHRoZSBpbWFnZSBjb250ZXh0IGZvciB0aGUgb3RoZXIgdGFncy4g KDxzdHJvbmc+c29vX2ltYWdlPC9zdHJvbmc+IHBhZ2luYXRpb24gdGFncyBhcmUgYW4gZXhj ZXB0aW9uLCBhbmQgY2FuIGJlIHBsYWNlZCBhbnl3aGVyZS4pPC9wPgoKCTxwPlVzZSBhcyBh IHNpbmdsZSB0YWcgKGluIHdoaWNoIGNhc2UgdGhlIDxjb2RlPmZvcm08L2NvZGU+IGF0dHJp YnV0ZSBpcyA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPnJlcXVpcmVkPC9zcGFuPik8L3A+Cgo8 cHJlPiZsdDt0eHA6c29vX2ltYWdlX3NlbGVjdCAvJmd0Owo8L3ByZT4KCgk8cD5vciBhcyBh IGNvbnRhaW5lciAoaW4gd2hpY2ggY2FzZSA8Y29kZT5mb3JtPC9jb2RlPiBhbmQgPGNvZGU+ bGlzdGZvcm08L2NvZGU+IHdpbGwgYmUgb3ZlcnJpZGRlbik8L3A+Cgo8cHJlPiZsdDt0eHA6 c29vX2ltYWdlX3NlbGVjdCZndDsKLi4uICpzb29faW1hZ2UqIHRhZ3MgYW5kIG90aGVyIGNv bnRlbnQKJmx0Oy90eHA6c29vX2ltYWdlX3NlbGVjdCZndDsKPC9wcmU+CgoJPGg1PkF0dHJp YnV0ZXM8L2g1PgoKCTxwPlVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLCBhbGwgYXR0cmlidXRl cyBkZWZhdWx0IHRvIHVuc2V0ICgmIzgyMjA7MCYjODIyMTsgb3IgZW1wdHkpLjwvcD4KCgk8 cD5Ob3RlIHRoYXQgPGNvZGU+bmFtZTwvY29kZT4gd2lsbCBvdmVycmlkZSA8Y29kZT5pZDwv Y29kZT4sIGFuZCBlaXRoZXIgb2YgdGhlc2Ugd2lsbCBvdmVycmlkZSA8Y29kZT5hdXRob3I8 L2NvZGU+LCA8Y29kZT5jYXRlZ29yeTwvY29kZT4sIDxjb2RlPmFzcGVjdF9yYXRpbzwvY29k ZT4sIGFuZCA8Y29kZT5leHQ8L2NvZGU+LiBJZiBub25lIG9mIHRoZXNlIGlzIGRlY2xhcmVk LCA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiBsb29rcyBmb3IgdGhlIGFydGljbGUg aW1hZ2UocykgYW5kIHNvIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+cmVxdWlyZXM8L3NwYW4+ IGFuIGFydGljbGUgY29udGV4dC48L3A+CgoJPHA+PGNvZGU+YXV0aG9yPC9jb2RlPiwgPGNv ZGU+Y2F0ZWdvcnk8L2NvZGU+LCA8Y29kZT5hc3BlY3RfcmF0aW88L2NvZGU+LCBhbmQgPGNv ZGU+ZXh0PC9jb2RlPiBjYW4gYmUgdXNlZCB0b2dldGhlciBmb3IgYSBjb21wbGV4IHNlbGVj dGlvbi4gRWFjaCBhdHRyaWJ1dGUgYWNjZXB0cyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBh bmQgd2l0aGluIGVhY2ggYXR0cmlidXRlIHRoZSByZXN1bHQgaXMgYW4gT1IgKGRpc2p1bmN0 aXZlKSBzZWFyY2gsIHdpZGVuaW5nIHRoZSBzZWFyY2guIEhvd2V2ZXIsIGFjcm9zcyBhdHRy aWJ1dGVzIHRoZSByZXN1bHQgaXMgYW4gPHNwYW4gY2xhc3M9ImNhcHMiPkFORDwvc3Bhbj4g KGNvbmp1bmN0aXZlKSBzZWFyY2gsIG5hcnJvd2luZyB0aGUgc2VhcmNoLiBFLmcuLCA8Y29k ZT4mbHQ7dHhwOnNvb19pbWFnZV9zZWxlY3QgY2F0ZWdvcnk9JnF1b3Q7YSxiJnF1b3Q7IGF1 dGhvcj0mcXVvdDtjJnF1b3Q7IC8mZ3Q7PC9jb2RlPiBzZWFyY2hlcyBmb3IgaW1hZ2VzIHRo YXQgYXJlIGVpdGhlciBpbiBjYXRlZ29yeSAmIzgyMjA7YSYjODIyMTsgb3IgJiM4MjIwO2Im IzgyMjE7LCBidXQgb25seSB0aG9zZSB0aGF0IGFyZSBieSBhdXRob3IgJiM4MjIwO2MmIzgy MjE7LjwvcD4KCgk8cD48Y29kZT5mb3JtPC9jb2RlPiBhbmQgPGNvZGU+bGlzdGZvcm08L2Nv ZGU+IGFyZSBvdmVycmlkZGVuIGJ5IHRoZSB0YWcgY29udGVudHMgd2hlbiA8Y29kZT5zb29f aW1hZ2Vfc2VsZWN0PC9jb2RlPiBpcyB1c2VkIGFzIGEgY29udGFpbmVyIHRhZy48L3A+CgoJ PGg2PkltYWdlIHNlbGVjdGlvbiBhdHRyaWJ1dGVzPC9oNj4KCgk8dWw+CgkJPGxpPjxjb2Rl Pm5hbWU8L2NvZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgpUeHAgbmFtZSAoZnJvbSBDb250 ZW50LSZndDtJbWFnZXMpIG9mIGltYWdlIHRvIHNlbGVjdCBmb3IgZGlzcGxheS4gV2lsbCBh Y2NlcHQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBmb3IgbXVsdGlwbGUgaW1hZ2VzLjwvbGk+ CgkJPGxpPjxjb2RlPmlkPC9jb2RlPiA8ZW0+KGludGVnZXIpPC9lbT48YnIgLz4KVHhwIElE IChmcm9tIENvbnRlbnQtJmd0O0ltYWdlcykgZm9yIGltYWdlIHNlbGVjdGlvbi4gV2lsbCBh Y2NlcHQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBmb3IgbXVsdGlwbGUgaW1hZ2VzOyBtdWx0 aXBsZSBpZCB2YWx1ZXMgY2FuIGFsc28gYmUgZW50ZXJlZCBhcyByYW5nZXMgKCYjODIyMDtp ZDppZCYjODIyMTsgb3IgJiM4MjIwO2lkLWlkJiM4MjIxOyksIGluY2x1ZGluZyBtdWx0aXBs ZSByYW5nZXMsIHByZXNlcnZpbmcgb3JkZXIgKGUuZy4sICYjODIyMDs0NC00NiwgMTE6OSYj ODIyMTsgZXF1aXZhbGVudCB0byAmIzgyMjA7NDQsNDUsNDYsMTEsMTAsOSYjODIyMTspPC9s aT4KCQk8bGk+PGNvZGU+YXNwZWN0X3JhdGlvPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48YnIg Lz4KSW1hZ2UgYXNwZWN0IHJhdGlvICh3aWR0aDpoZWlnaHQpLCB3cml0dGVuIGFzIGEgbnVt YmVyIChlLmcuICYjODIyMDsxLjUmIzgyMjE7KSBvciByYXRpbyAoZS5nLiAmIzgyMjA7Mzoy JiM4MjIxOyBvciAmIzgyMjA7My8yJiM4MjIxOykuIE9wdGlvbmFsbHkgcHJlZml4ICYjODIy MDsrJiM4MjIxOyB0byBnZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHNwZWNpZmllZCBh c3BlY3QgcmF0aW8sIG9yICYjODIyMDsmbWludXM7JiM4MjIxOyB0byBnZXQgbGVzcyB0aGFu IG9yIGVxdWFsIHRvIChlLmcuLCAmIzgyMjA7KzM6MiYjODIyMTsgcmV0dXJucyBpbWFnZXMg d2l0aCBhbiBhc3BlY3QgcmF0aW8gb2YgMzoyIG9yIGdyZWF0ZXIpLiBPciwgb3B0aW9uYWxs eSBnaXZlIHR3byByYXRpb3Mgc2VwYXJhdGVkIGJ5ICYjODIyMDsmbWludXM7JiM4MjIxOyB0 byBzcGVjaWZ5IGEgcmFuZ2UgKGUuZy4sICYjODIyMDsxLTImIzgyMjE7LCAmIzgyMjA7NDoz LTM6MiYjODIyMTssIGV0Yy4pPC9saT4KCQk8bGk+PGNvZGU+YXV0aG9yPC9jb2RlPiA8ZW0+ KHRleHQpPC9lbT48YnIgLz4KQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXV0aG9yIG5hbWVz IChsb2dpbiBuYW1lcykgZm9yIGltYWdlIHNlbGVjdGlvbi48L2xpPgoJCTxsaT48Y29kZT5j YXRlZ29yeTwvY29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+CkNvbW1hLXNlcGFyYXRlZCBs aXN0IG9mIGNhdGVnb3JpZXMgZm9yIGltYWdlIHNlbGVjdGlvbi48L2xpPgoJCTxsaT48Y29k ZT5leHQ8L2NvZGU+IDxlbT4oZmlsZW5hbWUgZXh0ZW5zaW9uKTwvZW0+PGJyIC8+CkNvbW1h LXNlcGFyYXRlZCBsaXN0IG9mIGZpbGUgdHlwZXMgZm9yIGltYWdlIHNlbGVjdGlvbiwgZS5n LiAmIzgyMjA7cG5nLGpwZyYjODIyMTsuPC9saT4KCQk8bGk+PGNvZGU+bGltaXQ8L2NvZGU+ IDxlbT4oaW50ZWdlcik8L2VtPjxiciAvPgpMaW1pdCBvbiBudW1iZXIgb2YgaW1hZ2VzIHRv IHJldHVybiBwZXIgcGFnZS4gRGVmYXVsdHMgdG8gJiM4MjIwOzAmIzgyMjE7LCBubyBsaW1p dC48L2xpPgoJCTxsaT48Y29kZT5zb3J0PC9jb2RlPiA8ZW0+KE15U1FMIHNvcnQgdmFsdWUp PC9lbT48YnIgLz4KU29ydCBvcmRlciB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgYnkgPGNvZGU+ YXV0aG9yPC9jb2RlPiwgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+LCA8Y29kZT5hc3BlY3RfcmF0 aW88L2NvZGU+IGFuZC9vciA8Y29kZT5leHQ8L2NvZGU+LiBEZWZhdWx0cyB0byAmIzgyMjA7 bmFtZSBhc2MmIzgyMjE7IChhbHBoYWJldGljYWwgYnkgaW1hZ2UgbmFtZSkuIE90aGVyIHBv c3NpYmlsaXRpZXMgaW5jbHVkZSAmIzgyMjA7ZGF0ZSBkZXNjJiM4MjIxOyAobW9zdCByZWNl bnQgZmlyc3QpIGFuZCAmIzgyMjA7cmFuZCYjODIyMTsgb3IgJiM4MjIwO3JhbmRvbSYjODIy MTsgKHJhbmRvbSkuIDxjb2RlPnNvcnQ8L2NvZGU+IGlzIG92ZXJyaWRlbiB3aGVuIHNlbGVj dGlvbiBpcyBieSA8Y29kZT5uYW1lPC9jb2RlPiwgPGNvZGU+aWQ8L2NvZGU+LCBvciBhcnRp Y2xlIGltYWdlLjwvbGk+CgkJPGxpPjxjb2RlPnBhZ2luYXRpb248L2NvZGU+IDxlbT4oYm9v bGVhbik8L2VtPjxiciAvPgo8c3BhbiBjbGFzcz0iZGVmYXVsdCI+RW5hYmxlZCBieSBkZWZh dWx0PC9zcGFuPi4gU2V0IDxjb2RlPnBhZ2luYXRpb249JnF1b3Q7MCZxdW90OzwvY29kZT4g dG8gcHJldmVudCB0aGlzIHRhZyBmcm9tIGNoYW5naW5nIG9yIHVzaW5nIHBhZ2luYXRpb24g dmFyaWFibGVzLiBJbiBnZW5lcmFsIHRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiB1c2luZyBt dWx0aXBsZSA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9jb2RlPiB0YWdzIG9uIGEgc2luZ2xl IHBhZ2UsIGFuZCB3aGVyZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIHRhZ3MgaGFzIGEgPGNv ZGU+bGltaXQ8L2NvZGU+IHNldC48L2xpPgoJCTxsaT48Y29kZT5wZXJzaXN0ZW50X2NvbnRl eHQ8L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPjxiciAvPgo8c3BhbiBjbGFzcz0iZGVmYXVs dCI+RW5hYmxlZCBieSBkZWZhdWx0PC9zcGFuPiwgc28gdGhhdCBsYXRlciA8Y29kZT5zb29f aW1hZ2U8L2NvZGU+IHRhZ3Mgd2lsbCBmaW5kIHRoZSBmaXJzdCBzZWxlY3RlZCBpbWFnZSBp ZiB0aGV5IGRvbiYjODIxNzt0IGZpbmQgc29tZXRoaW5nIGVsc2UgZmlyc3QuIFNldCA8Y29k ZT5wZXJzaXN0ZW50X2NvbnRleHQ9JnF1b3Q7MCZxdW90OzwvY29kZT4gdG8gcHJldmVudCB0 aGlzIGJlaGF2aW9yLjwvbGk+Cgk8L3VsPgoKCTxoNj5Gb3JtIG91dHB1dCBhdHRyaWJ1dGVz PC9oNj4KCgk8dWw+CgkJPGxpPjxjb2RlPmZvcm08L2NvZGU+IDxlbT4odGV4dCk8L2VtPiA8 c3BhbiBjbGFzcz0icmVxdWlyZWQiPlJlcXVpcmVkPC9zcGFuPiAoZXhjZXB0IHdoZW4gdXNp bmcgPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gYXMgYSBjb250YWluZXIgdGFnKTxi ciAvPgpOYW1lIG9mIFR4cCBmb3JtIHRvIGFwcGx5IHRvIHRoZSBpbWFnZShzKS4gRGVmYXVs dHMgdG8gJiM4MjIwO3Nvb19pbWFnZSYjODIyMTsgKG9yIHRoZSBwbHVnaW4mIzgyMTc7cyBw cmVmZXJlbmNlIHZhbHVlLCBpZiB5b3UgaGF2ZSBhc3NpZ25lZCBvbmUpLjwvbGk+CgkJPGxp Pjxjb2RlPmxpc3Rmb3JtPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KTmFtZSBvZiBU eHAgZm9ybSB0byB1c2UgaWYgbXVsdGlwbGUgaW1hZ2VzIGFyZSByZXRyaWV2ZWQuIERlZmF1 bHRzIHRvIHRoZSBzYW1lIHZhbHVlIGFzIDxjb2RlPmZvcm08L2NvZGU+IChvciB3aGF0ZXZl ciB2YWx1ZSB5b3UgaGF2ZSBhc3NpZ25lZCB0byB0aGUgZ2xvYmFsIGFycmF5KS48L2xpPgoJ CTxsaT48Y29kZT5icmVhazwvY29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+CjxzcGFuIGNs YXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgbmFtZSAobm8gYnJhY2tldHMpIG9yIHRleHQg dG8gc2VwYXJhdGUgbXVsdGlwbGUgaW1hZ2VzLjwvbGk+CgkJPGxpPjxjb2RlPndyYXB0YWc8 L2NvZGU+IDxlbT4oPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHRhZyBuYW1lKTwv ZW0+PGJyIC8+CjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgbmFtZSAobm8g YnJhY2tldHMpIGZvciBlbGVtZW50IHRvIHdyYXAgdGhlIGltYWdlKHMpLjwvbGk+CgkJPGxp Pjxjb2RlPmNsYXNzPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KPGEgaHJlZj0iaHR0 cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9zdHJ1Y3QvZ2xvYmFsLmh0bWwjYWRlZi1jbGFz cyIgdGl0bGU9InMiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBjbGFzcyBuYW1l PC9hPiBmb3IgdGhlIDxjb2RlPndyYXB0YWc8L2NvZGU+LjwvbGk+CgkJPGxpPjxjb2RlPmh0 bWxfaWQ8L2NvZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgo8YSBocmVmPSJodHRwOi8vd3d3 LnczLm9yZy9UUi9odG1sNDAxL3N0cnVjdC9nbG9iYWwuaHRtbCNhZGVmLWlkIj48c3BhbiBj bGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gaWQ8L2E+IGZvciB0aGUgPGNvZGU+d3JhcHRhZzwv Y29kZT4uPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJvdXRwdXRfdGFncyI+T3V0cHV0IHRhZ3M8 L2gzPgoKCTxoNCBpZD0ic29vX2ltYWdlIj5zb29faW1hZ2U8L2g0PgoKPHByZT4mbHQ7dHhw OnNvb19pbWFnZSAvJmd0Owo8L3ByZT4KCgk8cD5EaXNwbGF5IGEgc2luZ2xlIGltYWdlLjwv cD4KCgk8aDU+QXR0cmlidXRlczwvaDU+CgoJPHA+Tm9uZSByZXF1aXJlZCAoYnV0IHNlZSBw YXJhZ3JhcGggYmVsb3cpLiBVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCwgYWxsIGF0dHJpYnV0 ZXMgZGVmYXVsdCB0byB1bnNldCAoJiM4MjIwOzAmIzgyMjE7IG9yIGVtcHR5KS48L3A+CgoJ PHA+Tm90ZSB0aGF0IDxjb2RlPm5hbWU8L2NvZGU+IHdpbGwgb3ZlcnJpZGUgPGNvZGU+aWQ8 L2NvZGU+LiBJZiBuZWl0aGVyIGlzIGRlY2xhcmVkLCA8Y29kZT5zb29faW1hZ2U8L2NvZGU+ IDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+cmVxdWlyZXM8L3NwYW4+IGFydGljbGUgb3IgaW1h Z2UgY29udGV4dC48L3A+CgoJPHA+QnkgZGVmYXVsdCwgdGhlIDxjb2RlPmltZzwvY29kZT4g dGFnIHByb2R1Y2VkIGJ5IDxjb2RlPnNvb19pbWFnZTwvY29kZT4gaGFzIDxjb2RlPmhlaWdo dDwvY29kZT4gYW5kIDxjb2RlPndpZHRoPC9jb2RlPiBhdHRyaWJ1dGVzIHNldCB0byB0aGUg YWN0dWFsIGltYWdlIGRpbWVuc2lvbnMsIGluIHBpeGVscy4gWW91IGNhbiBjaGFuZ2UgdGhp cyBpbiB0aGUgcGx1Z2luJiM4MjE3O3MgcHJlZmVyZW5jZXMgc28gdGhhdCB0aGVzZSBhdHRy aWJ1dGVzIGFyZSBub3QgYWRkZWQuIEluIGVpdGhlciBjYXNlIHlvdSBjYW4gb3ZlcnJpZGUg dGhlIGRlZmF1bHQgc2V0dGluZyBieSBzcGVjaWZ5aW5nIDxjb2RlPmhlaWdodDwvY29kZT4g YW5kL29yIDxjb2RlPndpZHRoPC9jb2RlPiBpbiA8Y29kZT5zb29faW1hZ2U8L2NvZGU+Ojwv cD4KCgk8dWw+CgkJPGxpPklmIHlvdXIgcHJlZmVyZW5jZSBzZXR0aW5nIGlzIHRvIGRpc3Bs YXkgPGNvZGU+aGVpZ2h0PC9jb2RlPiBhbmQgPGNvZGU+d2lkdGg8L2NvZGU+IGJ5IGRlZmF1 bHQsIHlvdSBjYW4gc3VwcHJlc3MgdGhpcyBieSBkZWNsYXJpbmcgPGNvZGU+aGVpZ2h0PSZx dW90OzAmcXVvdDs8L2NvZGU+IG9yIDxjb2RlPndpZHRoPSZxdW90OzAmcXVvdDs8L2NvZGU+ IGluIHRoZSA8Y29kZT5zb29faW1hZ2U8L2NvZGU+IHRhZy4gWW91IGRvbiYjODIxNzt0IG5l ZWQgdG8gZGVjbGFyZSBib3RoOyBzZXR0aW5nIGVpdGhlciBvZiB0aGVtIHdpbGwgc3VwcHJl c3MgYm90aC48L2xpPgoJCTxsaT5JZiB5b3VyIHByZWZlcmVuY2Ugc2V0dGluZyBpcyB0byBz dXBwcmVzcyBib3RoIGJ5IGRlZmF1bHQsIHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSBkZWNs YXJpbmcgPGNvZGU+aGVpZ2h0PSZxdW90OzEmcXVvdDs8L2NvZGU+IG9yIDxjb2RlPndpZHRo PSZxdW90OzEmcXVvdDs8L2NvZGU+IGluIHRoZSA8Y29kZT5zb29faW1hZ2U8L2NvZGU+IHRh Zy4gQWdhaW4sIHlvdSBkb24mIzgyMTc7dCBuZWVkIHRvIGRlY2xhcmUgYm90aC48L2xpPgoJ CTxsaT5BcyBvZiB2ZXJzaW9uIDEuMC5iLjcsIHRodW1ibmFpbCBhdHRyaWJ1dGVzIGFyZSB0 cmVhdGVkIHRoZSBzYW1lIHdheSAoVHhwIHZlcnNpb24gNC4yLjAgb3IgbGF0ZXI7IG5vdGUg dGhhdCB0aGUgVHhwIDQuMi4wIHVwZ3JhZGUgZG9lcyBub3QgYXV0b21hdGljYWxseSBhZGQg dGh1bWJuYWlsIGhlaWdodCBhbmQgd2lkdGggdG8gdGhlIGRhdGFiYXNlIGZvciBleGlzdGlu ZyBpbWFnZXMpLjwvbGk+Cgk8L3VsPgoKCTxwPllvdSBjYW4gYWxzbyBhc3NpZ24gYXJiaXRy YXJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLUNTUzItMjAwODA0 MTEvc3luZGF0YS5odG1sI2xlbmd0aC11bml0cyI+PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwv c3Bhbj4gbGVuZ3RoIHZhbHVlczwvYT4gdG8gZWl0aGVyIGF0dHJpYnV0ZS4gSW4gdGhpcyBj YXNlLCB0aGUgdmFsdWUgd2lsbCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIDxjb2RlPmlt ZzwvY29kZT4gdGFnLiBJZiB5b3UgYXNzaWduIDxjb2RlPmhlaWdodDwvY29kZT4gc3VjaCBh IHZhbHVlLCBidXQgZGVjbGFyZSBub3RoaW5nIGZvciA8Y29kZT53aWR0aDwvY29kZT4sIHRo ZSA8Y29kZT5pbWc8L2NvZGU+IHRhZyB3aWxsIGhhdmUgdGhlIHNwZWNpZmllZCA8Y29kZT5o ZWlnaHQ8L2NvZGU+IGJ1dCB3aWxsIG5vdCBoYXZlIGEgPGNvZGU+d2lkdGg8L2NvZGU+IGF0 dHJpYnV0ZSAoYW5kIHZpY2UgdmVyc2EpOyB0aGlzIHByZXNlcnZlcyB0aGUgY29ycmVjdCBh c3BlY3QgcmF0aW8uPC9wPgoKCTxwPlNldHRpbmcgYW55IG9mIHRoZSBsaW5rLXJlbGF0ZWQg YXR0cmlidXRlcyAoPGNvZGU+bGluazwvY29kZT4sIDxjb2RlPmxpbmtfY2xhc3M8L2NvZGU+ LCA8Y29kZT5saW5rX2lkPC9jb2RlPiwgPGNvZGU+bGlua19yZWw8L2NvZGU+LCA8Y29kZT5s aW5rX3RvPC9jb2RlPiwgb3IgPGNvZGU+b25jbGljazwvY29kZT4pIGF1dG9tYXRpY2FsbHkg ZW5hYmxlcyBib3RoIDxjb2RlPmxpbms8L2NvZGU+IGFuZCA8Y29kZT50aHVtYm5haWw8L2Nv ZGU+LjwvcD4KCgk8aDY+SW1hZ2Ugc2VsZWN0aW9uIGF0dHJpYnV0ZXM8L2g2PgoKCTx1bD4K CQk8bGk+PGNvZGU+bmFtZTwvY29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+ClR4cCBuYW1l IChmcm9tIENvbnRlbnQtJmd0O0ltYWdlcykgb2YgaW1hZ2UgdG8gZGlzcGxheS48L2xpPgoJ CTxsaT48Y29kZT5pZDwvY29kZT4gPGVtPihpbnRlZ2VyKTwvZW0+PGJyIC8+ClR4cCBJRCAo ZnJvbSBDb250ZW50LSZndDtJbWFnZXMpIG9mIGltYWdlIHRvIGRpc3BsYXkuPC9saT4KCQk8 bGk+PGNvZGU+dGh1bWJuYWlsPC9jb2RlPiA8ZW0+KGJvb2xlYW4pPC9lbT48YnIgLz4KU2V0 IHRvIGRpc3BsYXkgdGhlIHRodW1ibmFpbCBpbnN0ZWFkIG9mIHRoZSBmdWxsLXNpemUgaW1h Z2UuPC9saT4KCTwvdWw+CgoJPGg2PkltYWdlIHRhZyBhdHRyaWJ1dGVzPC9oNj4KCgk8dWw+ CgkJPGxpPjxjb2RlPmhlaWdodDwvY29kZT4gPGVtPihtaXhlZCk8L2VtPgoJPHVsPgoJCTxs aT5lbXB0eSAoPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+KTogYWRkIHN0 YW5kYXJkIDxjb2RlPmhlaWdodDwvY29kZT4gYXR0cmlidXRlIChhY3R1YWwgaW1hZ2UgaGVp Z2h0IGluIHBpeGVscykgaWYgPGNvZGU+ZGVmYXVsdF9kaW1lbnNpb25zPC9jb2RlPiBwcmVm ZXJlbmNlIGlzIG9uLjwvbGk+CgkJPGxpPjxjb2RlPjA8L2NvZGU+IDogU3VwcHJlc3MgPGNv ZGU+aGVpZ2h0PC9jb2RlPiBhbmQgPGNvZGU+d2lkdGg8L2NvZGU+IGF0dHJpYnV0ZXMgaWYg PGNvZGU+ZGVmYXVsdF9kaW1lbnNpb25zPC9jb2RlPiBwcmVmZXJlbmNlIGlzIG9uLjwvbGk+ CgkJPGxpPjxjb2RlPjE8L2NvZGU+IDogZm9yY2Ugc3RhbmRhcmQgPGNvZGU+aGVpZ2h0PC9j b2RlPiBhbmQgPGNvZGU+d2lkdGg8L2NvZGU+IGF0dHJpYnV0ZXMgd2hlbiA8Y29kZT5kZWZh dWx0X2RpbWVuc2lvbnM8L2NvZGU+IHByZWZlcmVuY2UgaXMgb2ZmLjwvbGk+CgkJPGxpPjxh IGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvdHlwZXMuaHRtbCN0eXBlLWxl bmd0aCI+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IGxlbmd0aCB2YWx1ZTwvYT4g Zm9yIHRoZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGF0dHJpYnV0ZSAoZS5nLiAmIzgyMjA7NTAl JiM4MjIxOykuPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGNvZGU+d2lkdGg8L2NvZGU+IDxl bT4obWl4ZWQpPC9lbT48YnIgLz4KTGlrZSA8Y29kZT5oZWlnaHQ8L2NvZGU+LjwvbGk+CgkJ PGxpPjxjb2RlPmVzY2FwZTwvY29kZT4gPGVtPihib29sZWFuKTwvZW0+PGJyIC8+CjxzcGFu IGNsYXNzPSJkZWZhdWx0Ij5UcnVlIGJ5IGRlZmF1bHQ8L3NwYW4+LiBFc2NhcGUgPHNwYW4g Y2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+IHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgPGNv ZGU+YWx0PC9jb2RlPiBhbmQgPGNvZGU+dGl0bGU8L2NvZGU+IGF0dHJpYnV0ZXMuIFNldCB0 byAmIzgyMjA7MCYjODIyMTsgdG8gbGVhdmUgdW5lc2NhcGVkLjwvbGk+CgkJPGxpPjxjb2Rl PmNsYXNzPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KPGEgaHJlZj0iaHR0cDovL3d3 dy53My5vcmcvVFIvaHRtbDQwMS9zdHJ1Y3QvZ2xvYmFsLmh0bWwjYWRlZi1jbGFzcyIgdGl0 bGU9InMiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBjbGFzcyBuYW1lPC9hPiBm b3IgdGhlIDxjb2RlPmltZzwvY29kZT4gdGFnLjwvbGk+CgkJPGxpPjxjb2RlPmh0bWxfaWQ8 L2NvZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgo8YSBocmVmPSJodHRwOi8vd3d3LnczLm9y Zy9UUi9odG1sNDAxL3N0cnVjdC9nbG9iYWwuaHRtbCNhZGVmLWlkIj48c3BhbiBjbGFzcz0i Y2FwcyI+SFRNTDwvc3Bhbj4gaWQ8L2E+IGZvciB0aGUgPGNvZGU+aW1nPC9jb2RlPiB0YWcu PC9saT4KCQk8bGk+PGNvZGU+dGl0bGU8L2NvZGU+IDxlbT4oZm9ybWF0IHN0cmluZyk8L2Vt PjxiciAvPgo8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAx LTE5OTkxMjI0L3N0cnVjdC9nbG9iYWwuaHRtbCNhZGVmLXRpdGxlIj48c3BhbiBjbGFzcz0i Y2FwcyI+SFRNTDwvc3Bhbj4gdGl0bGUgYXR0cmlidXRlPC9hPiBmb3IgdGhlIDxjb2RlPmlt ZzwvY29kZT4gdGFnIChhbmQgPGNvZGU+YTwvY29kZT4gdGFnIGZvciBsaW5rZWQgdGh1bWJu YWlscykuIEFueSBvY2N1cnJlbmNlcyBvZiAmIzgyMjA7e2NhcHRpb259JiM4MjIxOyB3aWxs IGJlIHJlcGxhY2VkIGJ5IHRoZSBpbWFnZSBjYXB0aW9uIGZyb20gdGhlIFR4cCBkYXRhYmFz ZTsgbGlrZXdpc2UgZm9yICYjODIyMDt7YXV0aG9yfSYjODIyMTsgYW5kICYjODIyMDt7YWx0 fSYjODIyMTsuIDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5EZWZhdWx0PC9zcGFuPiBpcyAmIzgy MjA7e2NhcHRpb259JiM4MjIxOy48L2xpPgoJPC91bD4KCgk8aDY+TGlua2VkIHRodW1ibmFp bCBhdHRyaWJ1dGVzPC9oNj4KCgk8cD48c3BhbiBjbGFzcz0id2FybmluZyI+Tm90ZTo8L3Nw YW4+IHNldHRpbmcgYW55IG9mIHRoZXNlIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBib3RoIDxj b2RlPmxpbms8L2NvZGU+IGFuZCA8Y29kZT50aHVtYm5haWw8L2NvZGU+LjwvcD4KCgk8dWw+ CgkJPGxpPjxjb2RlPmxpbms8L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPjxiciAvPgpEaXNw bGF5IHRoZSB0aHVtYm5haWwgYXMgYSBsaW5rIHRvIHRoZSBmdWxsLXNpemUgaW1hZ2UuPC9s aT4KCQk8bGk+PGNvZGU+bGlua19jbGFzczwvY29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+ CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvc3RydWN0L2dsb2JhbC5o dG1sI2FkZWYtY2xhc3MiIHRpdGxlPSJzIj48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gY2xhc3MgbmFtZTwvYT4gZm9yIHRoZSA8Y29kZT5hPC9jb2RlPiB0YWcuPC9saT4KCQk8 bGk+PGNvZGU+bGlua19pZDwvY29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+CjxhIGhyZWY9 Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvc3RydWN0L2dsb2JhbC5odG1sI2FkZWYt aWQiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBpZDwvYT4gZm9yIHRoZSA8Y29k ZT5hPC9jb2RlPiB0YWcuPC9saT4KCQk8bGk+PGNvZGU+bGlua19yZWw8L2NvZGU+IDxlbT4o cmVsYXRpb24pPC9lbT48YnIgLz4KPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRt bDQwMS9zdHJ1Y3QvbGlua3MuaHRtbCNhZGVmLXJlbCI+PHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IDxjb2RlPnJlbDwvY29kZT4gYXR0cmlidXRlPC9hPiBmb3IgdGhlIDxjb2Rl PmE8L2NvZGU+IHRhZy48L2xpPgoJCTxsaT48Y29kZT5vbmNsaWNrPC9jb2RlPiA8ZW0+KHRl eHQpPC9lbT48YnIgLz4KPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OS9SRUMt aHRtbDQwMS0xOTk5MTIyNC9pbnRlcmFjdC9zY3JpcHRzLmh0bWwjYWRlZi1vbmNsaWNrIj48 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gPGNvZGU+b25jbGljazwvY29kZT4gYXR0 cmlidXRlPC9hPiBmb3IgdGhlIDxjb2RlPmE8L2NvZGU+IHRhZy48L2xpPgoJCTxsaT48Y29k ZT5saW5rX3RvPC9jb2RlPiA8ZW0+KDxzcGFuIGNsYXNzPSJjYXBzIj5VUkk8L3NwYW4+KTwv ZW0+PGJyIC8+ClJvb3QtcmVsYXRpdmUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSSTwvc3Bhbj4g dG8gbGluayB0bzsgaWYgdGhhdCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJJPC9zcGFuPiBjb250 YWlucyBhIDxzdHJvbmc+c29vX2ltYWdlPC9zdHJvbmc+IGdhbGxlcnkgdGhhdCBpbmNsdWRl cyB0aGlzIGltYWdlLCB0aGUgbGluayB3aWxsIGJlIHRvIHRoYXQgcG9pbnQgaW4gdGhlIGdh bGxlcnkgKHdvcmtzIGZvciBtdWx0aS1wYWdlIGdhbGxlcmllcykuPC9saT4KCTwvdWw+CgoJ PGg0IGlkPSJtZXRhZGF0YSI+VHhwIE1ldGFkYXRhIHRhZ3M8L2g0PgoKCTxwPkRpc3BsYXkg bWV0YWRhdGEgZmllbGRzIGZyb20gdGhlIFR4cCBpbWFnZSB0YWJsZS4gVGhlc2UgdGFncyBj YW4gYmUgdXNlZCBhbnl3aGVyZSwgYnV0IHJlcXVpcmUgaW1hZ2UgY29udGV4dC48L3A+Cgo8 cHJlPiZsdDt0eHA6c29vX2ltYWdlX2FsdCAvJmd0OwombHQ7dHhwOnNvb19pbWFnZV9hdXRo b3IgLyZndDsKJmx0O3R4cDpzb29faW1hZ2VfY2FwdGlvbiAvJmd0OwombHQ7dHhwOnNvb19p bWFnZV9jYXRlZ29yeSAvJmd0OwombHQ7dHhwOnNvb19pbWFnZV9kYXRlIC8mZ3Q7CiZsdDt0 eHA6c29vX2ltYWdlX2hlaWdodCAvJmd0OwombHQ7dHhwOnNvb19pbWFnZV9pZCAvJmd0Owom bHQ7dHhwOnNvb19pbWFnZV9uYW1lIC8mZ3Q7CiZsdDt0eHA6c29vX2ltYWdlX3VybCAvJmd0 OwombHQ7dHhwOnNvb19pbWFnZV93aWR0aCAvJmd0OwombHQ7dHhwOnNvb190aHVtYm5haWxf dXJsIC8mZ3Q7CiZsdDt0eHA6c29vX3RodW1ibmFpbF9oZWlnaHQgLyZndDsKJmx0O3R4cDpz b29fdGh1bWJuYWlsX3dpZHRoIC8mZ3Q7CjwvcHJlPgoKCTxwPjxjb2RlPnNvb19pbWFnZV9k YXRlPC9jb2RlPiByZXR1cm5zIHRoZSBkYXRlIHN0b3JlZCBieSBUeHAsIHdoaWNoIGlzIHRo ZSBpbWFnZSB1cGxvYWQgZGF0ZSwgd2hpY2ggaXMgbm90IGFsbCB0aGF0IHVzZWZ1bC4gU2Vl IDxjb2RlPnNvb19leGlmPC9jb2RlPiBmb3IgaG93IHRvIHNob3cgdGhlIGV4cG9zdXJlIGRh dGUgZm9yIGltYWdlcyBjb250YWluaW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5FWElGPC9zcGFu PiBkYXRhLjwvcD4KCgk8cD48Y29kZT5zb29faW1hZ2VfYXV0aG9yPC9jb2RlPiByZXR1cm5z IHRoZSBhdXRob3ImIzgyMTc7cyBmdWxsIG5hbWUgcmF0aGVyIHRoYW4gdGhlIGxvZ2luIG5h bWUgc3RvcmVkIGluIHRoZSBpbWFnZSB0YWJsZS48L3A+CgoJPHA+Tm90ZSB0aGF0IHRodW1i bmFpbCBoZWlnaHQgYW5kIHdpZHRoIGFyZSBhdmFpbGFibGUgb25seSBpbiBUeHAgNC4yLjAg b3IgbGF0ZXIuIEFsc28gbm90ZSB0aGF0IHRoZSBUeHAgNC4yLjAgdXBkYXRlIHNjcmlwdCBk b2VzIG5vdCB1cGRhdGUgdGhlc2UgZmllbGRzIGZvciBpbWFnZXMgYWxyZWFkeSBpbiB0aGUg ZGF0YWJhc2UgKHRoZSA8YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvOTEvc29v X3RodW1iX2F0dHMiPnNvb190aHVtYl9hdHRzPC9hPiBwbHVnaW4gb2ZmZXJzIGEgc29sdXRp b24pLjwvcD4KCgk8aDU+QXR0cmlidXRlczwvaDU+CgoJPHA+QWxsIG9mIHRoZXNlIHRhZ3Mg YWNjZXB0IHN0YW5kYXJkIDxjb2RlPndyYXB0YWc8L2NvZGU+LCA8Y29kZT5jbGFzczwvY29k ZT4sIGFuZCA8Y29kZT5odG1sX2lkPC9jb2RlPiBhdHRyaWJ1dGVzLjwvcD4KCgk8cD5BZGRp dGlvbmFsbHksIDxjb2RlPnNvb19pbWFnZV9hbHQ8L2NvZGU+IGFuZCA8Y29kZT5zb29faW1h Z2VfY2FwdGlvbjwvY29kZT4gZWFjaCBhY2NlcHQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBh dHRyaWJ1dGU6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+ZXNjYXBlPC9jb2RlPiA8ZW0+KGJv b2xlYW4pPC9lbT48YnIgLz4KU2V0IGJ5IGRlZmF1bHQsIDxzcGFuIGNsYXNzPSJjYXBzIj5I VE1MPC9zcGFuPiBzcGVjaWFsIGNoYXJhY3RlcnMgd2lsbCBiZSBjb252ZXJ0ZWQuIFNldCB0 byAmIzgyMjA7MCYjODIyMTsgdG8gbGVhdmUgdGhlIG91dHB1dCB1bmNvbnZlcnRlZC48L2xp PgoJPC91bD4KCgk8cD48Y29kZT5zb29faW1hZ2VfY2FwdGlvbjwvY29kZT4gYWNjZXB0cyB0 aGUgZm9sbG93aW5nIGF0dHJpYnV0ZTo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5ub193aWRv dzwvY29kZT4gPGVtPihib29sZWFuKTwvZW0+PGJyIC8+ClNldCBieSBkZWZhdWx0LCB3aWxs IGluc2VydCBhIG5vbi1icmVha2luZyBzcGFjZSBiZXR3ZWVuIHRoZSBsYXN0IHR3byB3b3Jk cyBpbiB0aGUgY2FwdGlvbi4gU2V0IHRvICYjODIyMDswJiM4MjIxOyB0byBsZWF2ZSB0aGUg b3V0cHV0IHVuY29udmVydGVkLjwvbGk+Cgk8L3VsPgoKCTxwPjxjb2RlPnNvb19pbWFnZV9k YXRlPC9jb2RlPiBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlOjwvcD4KCgk8dWw+ CgkJPGxpPjxjb2RlPmZvcm1hdDwvY29kZT4gPGVtPihmb3JtYXQgc3RyaW5nKTwvZW0+PGJy IC8+ClNldCB0byBhIHZhbGlkIDxhIGhyZWY9Imh0dHA6Ly91czIucGhwLm5ldC9zdHJmdGlt ZSI+c3RyZnRpbWUoKTwvYT4gdmFsdWUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZGF0ZSBm b3JtYXQgc2V0IGluIHNpdGUgcHJlZmVyZW5jZXMuPC9saT4KCTwvdWw+CgoJPGg0IGlkPSJz b29fZXhpZiI+RXhpZiB0YWdzPC9oND4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+c29vX2V4aWY8 L3N0cm9uZz48L2xpPgoJCTxsaT48c3Ryb25nPnNvb19leGlmX2ZpZWxkPC9zdHJvbmc+PC9s aT4KCQk8bGk+PHN0cm9uZz5zb29fZXhpZl92YWx1ZTwvc3Ryb25nPjwvbGk+Cgk8L3VsPgoK CTxwPlJldHJpZXZlIGFuZCBkaXNwbGF5IDxzcGFuIGNsYXNzPSJjYXBzIj5FWElGPC9zcGFu PiBtZXRhZGF0YSBkaXJlY3RseSBmcm9tIGltYWdlIGZpbGVzLiBJbiBzaW5nbGUtdGFnIG1v ZGUgZWFjaCBmaWVsZCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgZm9ybWF0ICYjODIyMDtm aWVsZDogdmFsdWUmIzgyMjE7LiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIHdpdGggdGhlIDxj b2RlPmZvcm1hdDwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8cD5JbiBjb250YWluZXItdGFn IG1vZGUgdGhlIHRhZyBjb250ZW50cyBhcmUgaXRlcmF0ZWQgb3Zlciwgb25jZSBmb3IgZWFj aCA8c3BhbiBjbGFzcz0iY2FwcyI+RVhJRjwvc3Bhbj4gZmllbGQ7IHVzZSB0aGUgPGNvZGU+ c29vX2V4aWZfZmllbGQ8L2NvZGU+IGFuZCA8Y29kZT5zb29fZXhpZl92YWx1ZTwvY29kZT4g dGFncyB0byBkaXNwbGF5IHRoZSBkYXRhLiBUaGF0IGlzLCB0aGUgdGFnIGNvbnRlbnRzIGFy ZSBsaWtlIGEgVHhwIGZvcm0uIFRoZSBmb2xsb3dpbmcgdHdvIGJsb2NrcyBhcmUgZXF1aXZh bGVudDo8L3A+Cgo8cHJlPiZsdDt0eHA6c29vX2V4aWYgLyZndDsKPC9wcmU+Cgo8cHJlPiZs dDt0eHA6c29vX2V4aWYmZ3Q7CiZsdDt0eHA6c29vX2V4aWZfZmllbGQgLyZndDs6ICZsdDt0 eHA6c29vX2V4aWZfdmFsdWUgLyZndDsKJmx0Oy90eHA6c29vX2V4aWYmZ3Q7CjwvcHJlPgoK CTxoNT5SZXF1aXJlbWVudHM8L2g1PgoKCTxwPjxjb2RlPnNvb19leGlmPC9jb2RlPiB1c2Vz IDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+JiM4MjE3O3MgPGNvZGU+ZXhpZl9yZWFk X2RhdGEoKTwvY29kZT4gZnVuY3Rpb24sIHdoaWNoIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+ cmVxdWlyZXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IHRvIGJlIGNv bXBpbGVkIHdpdGggJm1pbnVzOyZtaW51czs8Y29kZT5lbmFibGUtZXhpZjwvY29kZT4gKHlv dSBjYW4gY2hlY2sgdGhpcyBieSBydW5uaW5nIDxhIGhyZWY9Imh0dHA6Ly9waHAuYWJvdXQu Y29tL29kL2xlYXJucGhwL3AvUEhQX2luZm8uaHRtIj5waHBpbmZvKCk8L2E+KS4gSXQgcmVx dWlyZXMgYSBmdWxsIGZpbGUgcGF0aCBmb3IgdGhlIGltYWdlOyB0aGlzIHBsdWdpbiBvbmx5 IHdvcmtzIGZvciBpbWFnZSBmaWxlcyBpbiB5b3VyIGRlZmF1bHQgVHhwIGltYWdlIGRpcmVj dG9yeSAodGhleSBkb24mIzgyMTc7dCBoYXZlIHRvIGJlIGluIHRoZSBUeHAgZGF0YWJhc2Us IHRob3VnaCkuPC9wPgoKCTxoNT5BdHRyaWJ1dGVzPC9oNT4KCgk8dWw+CgkJPGxpPjxjb2Rl PmZpZWxkPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT4gQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Yg ZmllbGRzIHRvIGRpc3BsYXkuIFVzZSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+RVhJ Rjwvc3Bhbj4gZmllbGQgbmFtZXMgb3Igc2hvcnRjdXRzIChzZWUgYmVsb3cpLiBBZGRpdGlv bmFsIG9wdGlvbnM6Cgk8dWw+CgkJPGxpPjxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0 PC9zcGFuPiA8ZW0+KGVtcHR5KTwvZW0+IDogRGlzcGxheSBhIHByZS1zZXQgbGlzdCBvZiBj b21tb24gZmllbGRzPC9saT4KCQk8bGk+PGNvZGU+ZHVtcDwvY29kZT4gOiBEaXNwbGF5IGFs bCBmaWVsZHM8L2xpPgoJPC91bD48L2xpPgoJCTxsaT48Y29kZT5mb3JtYXQ9JnF1b3Q7Zm9y bWF0IHN0cmluZyZxdW90OzwvY29kZT4gRGVmYXVsdCBpcyAmIzgyMjA7e2ZpZWxkfToge3Zh bHVlfSYjODIyMTsuIEluIHNpbmdsZS10YWcgbW9kZSB0aGUgdGFnIHdpbGwgb3V0cHV0IHRo aXMgc3RyaW5nLCBhZnRlciBhbnkgb2NjdXJlbmNlcyBvZiAmIzgyMjA7e2ZpZWxkfSYjODIy MTsgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5FWElG PC9zcGFuPiBmaWVsZCBuYW1lOyBsaWtld2lzZSBmb3IgJiM4MjIwO3t2YWx1ZX0mIzgyMjE7 IGFuZCB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkVYSUY8L3NwYW4+IGZpZWxkIHZhbHVlLjwv bGk+CgkJPGxpPjxjb2RlPndyYXB0YWc9JnF1b3Q7dGFnIG5hbWUmcXVvdDs8L2NvZGU+IFRh ZyBuYW1lIChubyBicmFja2V0cykgZm9yIGVsZW1lbnQgdG8gd3JhcCB0aGUgYW5jaG9yPC9s aT4KCQk8bGk+PGNvZGU+YnJlYWs9JnF1b3Q7bWl4ZWQmcXVvdDs8L2NvZGU+IFRhZyBuYW1l IChubyBicmFja2V0cykgb3IgdGV4dCB0byBhZGQgYmV0d2VlbiBpdGVtczwvbGk+Cgk8L3Vs PgoKCTxoNT5GaWVsZC1uYW1lIHNob3J0Y3V0czwvaDU+CgoJPHA+VGhlc2UgYXJlIHRoZSBz YW1lIGFzIHVzZWQgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5odWdzYW4uY29tL0VYSUZ1dGls cy8iPjxzcGFuIGNsYXNzPSJjYXBzIj5FWElGVTwvc3Bhbj50aWxzPC9hPiwgYSBjb21tYW5k LWxpbmUgdXRpbGl0eSBmb3IgbWFuaXB1bGF0aW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5FWElG PC9zcGFuPiBkYXRhLjwvcD4KCgk8dGFibGU+CgkJPHRyPgoJCQk8dGg+PHNwYW4gY2xhc3M9 ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5FWElGPC9zcGFuPjwvc3Bhbj4gZmllbGQgPC90 aD4KCQkJPHRoPlNob3J0Y3V0PC90aD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRkPk1vZGVsPC90 ZD4KCQkJPHRkPm1vZGVsPC90ZD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRkPkV4cG9zdXJlVGlt ZTwvdGQ+CgkJCTx0ZD5leHAtdGltZTwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD5GTnVt YmVyPC90ZD4KCQkJPHRkPmYtbnVtYmVyPC90ZD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRkPklT T1NwZWVkUmF0aW5nczwvdGQ+CgkJCTx0ZD5pc28tc3BlZWQ8L3RkPgoJCTwvdHI+CgkJPHRy PgoJCQk8dGQ+RGF0ZVRpbWVPcmlnaW5hbDwvdGQ+CgkJCTx0ZD5kYXRlLXRha2VuPC90ZD4K CQk8L3RyPgoJCTx0cj4KCQkJPHRkPkZvY2FsTGVuZ3RoPC90ZD4KCQkJPHRkPmZvY2FsLWxl bjwvdGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD5JbWFnZUhpc3Rvcnk8L3RkPgoJCQk8dGQ+ aGlzdG9yeTwvdGQ+CgkJPC90cj4KCTwvdGFibGU+CgoJPGg1PkFkZGl0aW9uYWwgZmllbGRz PC9oNT4KCgk8cD5JZiB0aGUgPGNvZGU+Rm9jYWxMZW5ndGhJbjM1bW1GaWxtPC9jb2RlPiBm aWVsZCBpcyBhdmFpbGFibGUsIDxzdHJvbmc+c29vX2V4aWY8L3N0cm9uZz4gY29tcHV0ZXMg dHdvIGFkZGl0aW9uYWwgdmFsdWVzOjwvcD4KCgk8dGFibGU+CgkJPHRyPgoJCQk8dGg+Q29t cHV0ZWQgZmllbGQgPC90aD4KCQkJPHRoPlNob3J0Y3V0IDwvdGg+CgkJCTx0aD5EZXNjcmlw dGlvbjwvdGg+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD48c3BhbiBjbGFzcz0iY2FwcyI+PHNw YW4gY2xhc3M9ImNhcHMiPkZPVjwvc3Bhbj48L3NwYW4+PC90ZD4KCQkJPHRkPmZvdjwvdGQ+ CgkJCTx0ZD5GaWVsZCBvZiB2aWV3IChhc3N1bWVzIHJlY3RpbGluZWFyIGxlbnMpPC90ZD4K CQk8L3RyPgoJCTx0cj4KCQkJPHRkPkNyb3BGYWN0b3I8L3RkPgoJCQk8dGQ+Y3JvcDwvdGQ+ CgkJCTx0ZD5Dcm9wIGZhY3RvcjwvdGQ+CgkJPC90cj4KCTwvdGFibGU+CgoJPGg1PkRlZmF1 bHQgZmllbGRzPC9oNT4KCgk8cD5JZiBubyA8Y29kZT5maWVsZDwvY29kZT4gaXMgc3BlY2lm aWVkLCA8Y29kZT5zb29fZXhpZjwvY29kZT4gd2lsbCBzaG93IHRoZSBhbGwgZmllbGRzIGxp c3RlZCBhYm92ZS48L3A+CgoJPGg1PnNvb19leGlmX2ZpZWxkLCBzb29fZXhpZl92YWx1ZTwv aDU+CgoJPHA+V2hlbiBwbGFjZWQgaW4gYSA8Y29kZT5zb29fZXhpZjwvY29kZT4gY29udGFp bmVyIHRhZywgdGhlc2UgdGFncyBkaXNwbGF5IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+RVhJ Rjwvc3Bhbj4gZmllbGQgbmFtZSBhbmQgdmFsdWUsIHJlc3BlY3RpdmVseS4gRWFjaCBpcyBh IHNpbmdsZSB0YWcgYW5kIGFjY2VwdHMgdGhlIHN0YW5kYXJkIDxjb2RlPndyYXB0YWc8L2Nv ZGU+IGF0dHJpYnV0ZS4gQXMgc2hvd24gYWJvdmUsIDxjb2RlPnNvb19leGlmPC9jb2RlPiBj b252ZXJ0cyBzb21lIGZpZWxkIG5hbWVzIHRvIGEgbW9yZSByZWFkYWJsZSBmb3JtYXQ7IHRo ZSBzYW1lIGlzIHRydWUgZm9yIHNvbWUgZmllbGQgdmFsdWVzLiAoVGhlIDxjb2RlPkRhdGVU aW1lT3JpZ2luYWw8L2NvZGU+IGZpZWxkIGlzIGNvbnZlcnRlZCB0byB0aGUgZGF0ZSBmb3Jt YXQgZnJvbSB5b3VyIFR4cCBwcmVmZXJlbmNlcy4pPC9wPgoKCTxoNCBpZD0icGFnaW5hdGlv biI+UGFnaW5hdGlvbiB0YWdzPC9oND4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+c29vX2ltYWdl X3ByZXY8L3N0cm9uZz48L2xpPgoJCTxsaT48c3Ryb25nPnNvb19pbWFnZV9uZXh0PC9zdHJv bmc+PC9saT4KCQk8bGk+PHN0cm9uZz5zb29faW1hZ2VfcGFnZV9jb3VudDwvc3Ryb25nPjwv bGk+Cgk8L3VsPgoKCTxwPkZvciB1c2Ugd2hlbiA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0PC9j b2RlPiBoYXMgYSA8Y29kZT5saW1pdDwvY29kZT4uIFRoZSBmaXJzdCB0d28gY2FuIGJlIHVz ZWQgYXMgc2luZ2xlIHRhZ3Mgb3IgY29udGFpbmVycy4gQW55IG9mIHRoZXNlIGNhbiBiZSBw bGFjZWQgYW55d2hlcmUgb24gdGhlIHBhZ2UsIGV2ZW4gYmVmb3JlIHRoZSBhc3NvY2lhdGVk IDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IHRhZy4gKE5vdGUgdGhhdCBpZiB0aGVy ZSBpcyBtb3JlIHRoYW4gb25lIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IHRhZyBv biB0aGUgcGFnZSwgeW91IHNob3VsZCB1c2UgdGhlIDxjb2RlPnBhZ2luYXRpb248L2NvZGU+ IGF0dHJpYnV0ZSB0byBkaXNhYmxlIHBhZ2luYXRpb24gaW4gYWxsIGJ1dCBvbmUgb2YgdGhl IHRhZ3MuKTwvcD4KCjxwcmU+Jmx0O3R4cDpzb29faW1hZ2VfcHJldiAvJmd0OwombHQ7dHhw OnNvb19pbWFnZV9uZXh0Jmd0O05leHQmbHQ7L3R4cDpzb29faW1hZ2VfbmV4dCZndDsKJmx0 O3R4cDpzb29faW1hZ2VfcGFnZV9jb3VudCAvJmd0Owo8L3ByZT4KCgk8aDU+QXR0cmlidXRl czwvaDU+CgoJPHA+PGNvZGU+c29vX2ltYWdlX3ByZXY8L2NvZGU+IGFuZCA8Y29kZT5zb29f aW1hZ2VfbmV4dDwvY29kZT4gZWFjaCBhY2NlcHQgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBh dHRyaWJ1dGVzOgoJPHVsPgoJCTxsaT48Y29kZT5jbGFzczwvY29kZT4gPGVtPih0ZXh0KTwv ZW0+PGJyIC8+CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvc3RydWN0 L2dsb2JhbC5odG1sI2FkZWYtY2xhc3MiIHRpdGxlPSJzIj48c3BhbiBjbGFzcz0iY2FwcyI+ SFRNTDwvc3Bhbj4gY2xhc3MgbmFtZTwvYT4gZm9yIHRoZSA8Y29kZT5hPC9jb2RlPiB0YWcu PC9saT4KCQk8bGk+PGNvZGU+aHRtbF9pZDwvY29kZT4gPGVtPih0ZXh0KTwvZW0+PGJyIC8+ CjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvc3RydWN0L2dsb2JhbC5o dG1sI2FkZWYtaWQiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBpZDwvYT4gZm9y IHRoZSA8Y29kZT5hPC9jb2RlPiB0YWcuPC9saT4KCQk8bGk+PGNvZGU+bGlua190ZXh0PC9j b2RlPiA8ZW0+KHRleHQpPC9lbT48YnIgLz4KTGluayB0ZXh0LiBEZWZhdWx0IGlzICYjODIy MDsmbGFycjsmIzgyMjE7IGZvciA8Y29kZT5zb29faW1hZ2VfcHJldjwvY29kZT4gYW5kICYj ODIyMDsmcmFycjsmIzgyMjE7IGZvciA8Y29kZT5zb29faW1hZ2VfbmV4dDwvY29kZT4uIEl0 IGlzIG92ZXJyaWRlbiBieSB0aGUgdGFnIGNvbnRlbnRzIGlmIGl0IGlzIGEgY29udGFpbmVy IHRhZy48L2xpPgoJPC91bD48L3A+CgoJPHA+PGNvZGU+c29vX2ltYWdlX3BhZ2VfY291bnQ8 L2NvZGU+IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25hbCBhdHRyaWJ1dGVzOjwvcD4K Cgk8dWw+CgkJPGxpPjxjb2RlPmZvcm1hdDwvY29kZT4gPGVtPihmb3JtYXQgc3RyaW5nKTwv ZW0+IDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPiA8Y29kZT4gJnF1b3Q7 UGFnZSB7Y3VycmVudH0gb2Yge3RvdGFsfSZxdW90OyA8L2NvZGU+PGJyIC8+ClRhZyB3aWxs IG91dHB1dCB0aGlzIHN0cmluZyBhZnRlciByZXBsYWNpbmcgPGNvZGU+e2N1cnJlbnR9PC9j b2RlPiBhbmQgPGNvZGU+e3RvdGFsfTwvY29kZT4gd2l0aCBwYWdlIG51bWJlcnM8L2xpPgoJ CTxsaT48Y29kZT5zaG93YWx3YXlzPC9jb2RlPiA8ZW0+KGJvb2xlYW4pPC9lbT4gPHNwYW4g Y2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+IDxjb2RlPjA8L2NvZGU+PGJyIC8+Cldo ZXRoZXIgb3Igbm90IHRvIHNob3cgb3V0cHV0IHdoZW4gdGhlIGxpc3QgaXMgYSBzaW5nbGUg cGFnZTwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0iY29uZGl0aW9uYWxfdGFncyI+Q29uZGl0aW9u YWwgdGFnczwvaDM+CgoJPHA+U3RhbmRhcmQgY29uZGl0aW9uYWwgdGFnIGJlaGF2aW9yLCBj b21wYXRpYmxlIHdpdGggPGEgaHJlZj0iaHR0cDovL3RleHRib29rLnRleHRwYXR0ZXJuLm5l dC93aWtpL2luZGV4LnBocD90aXRsZT1UeHA6ZWxzZV8vIj48Y29kZT5lbHNlPC9jb2RlPjwv YT4uIENhbiBiZSB1c2VkIGFueXdoZXJlLCBidXQgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5y ZXF1aXJlPC9zcGFuPiBpbWFnZSBjb250ZXh0IG9yIGVsc2UgdGhleSB3aWxsIGFsd2F5cyBl dmFsdWF0ZSB0byA8Y29kZT5mYWxzZTwvY29kZT4uPC9wPgoKCTxoNCBpZD0ic29vX2lmX3R4 cF9pbWFnZSI+c29vX2lmX3R4cF9pbWFnZTwvaDQ+Cgo8cHJlPiZsdDt0eHA6c29vX2lmX3R4 cF9pbWFnZSZndDsuLi4mbHQ7dHhwOmVsc2UgLyZndDsuLi4mbHQ7L3R4cDpzb29faWZfdHhw X2ltYWdlJmd0Owo8L3ByZT4KCgk8aDU+QXR0cmlidXRlczwvaDU+CgoJPHA+PGNvZGU+c29v X2lmX3R4cF9pbWFnZTwvY29kZT4gZG9lcyBub3QgYWNjZXB0IGFueSBhdHRyaWJ1dGVzOyBp dCBzaW1wbHkgY2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoZSBpbWFnZSBpcyBzdG9yZWQgaW4g dGhlIFR4cCBpbWFnZSB0YWJsZSAoYXMgb3Bwb3NlZCB0byBhbiBhcnRpY2xlIGltYWdlIGRl Y2xhcmVkIGJ5IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+KS48L3A+CgoJPGg0IGlk PSJzb29faWZfaW1hZ2VfIj5zb29faWZfaW1hZ2VfKiA8ZW0+KC1hdXRob3IsIC1jYXRlZ29y eSwgLXRodW1ibmFpbCk8L2VtPjwvaDQ+Cgo8cHJlPiZsdDt0eHA6c29vX2lmX2ltYWdlX2F1 dGhvciZndDsuLi4mbHQ7dHhwOmVsc2UgLyZndDsuLi4mbHQ7L3R4cDpzb29faWZfaW1hZ2Vf YXV0aG9yJmd0OwombHQ7dHhwOnNvb19pZl9pbWFnZV9jYXRlZ29yeSZndDsuLi4mbHQ7dHhw OmVsc2UgLyZndDsuLi4mbHQ7L3R4cDpzb29faWZfaW1hZ2VfY2F0ZWdvcnkmZ3Q7CiZsdDt0 eHA6c29vX2lmX2ltYWdlX3RodW1ibmFpbCZndDsuLi4mbHQ7dHhwOmVsc2UgLyZndDsuLi4m bHQ7L3R4cDpzb29faWZfaW1hZ2VfdGh1bWJuYWlsJmd0Owo8L3ByZT4KCgk8aDU+QXR0cmli dXRlczwvaDU+CgoJPHA+PGNvZGU+c29vX2lmX2ltYWdlX3RodW1ibmFpbDwvY29kZT4gZG9l cyBub3QgYWNjZXB0IGFueSBhdHRyaWJ1dGVzOyBpdCBzaW1wbHkgY2hlY2tzIHdoZXRoZXIg b3Igbm90IHRoZSBpbWFnZSBoYXMgYSB0aHVtYm5haWwuPC9wPgoKCTxwPjxjb2RlPnNvb19p Zl9pbWFnZV9hdXRob3I8L2NvZGU+IGFuZCA8Y29kZT5zb29faWZfaW1hZ2VfY2F0ZWdvcnk8 L2NvZGU+IGVhY2ggYWNjZXB0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlOjwvcD4KCgk8dWw+ CgkJPGxpPjxjb2RlPm5hbWU8L2NvZGU+IDxlbT4odGV4dCk8L2VtPjxiciAvPgpDb21tYS1z ZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMuIENvbmRpdGlvbiBpcyB0cnVlIGlmIHRoZSB2YWx1 ZSBmcm9tIHRoZSBpbWFnZSBpcyBpbiB0aGlzIGxpc3QuIDxzcGFuIGNsYXNzPSJ3YXJuaW5n Ij5JbXBvcnRhbnQ6PC9zcGFuPiBmb3IgPGNvZGU+c29vX2lmX2ltYWdlX2F1dGhvcjwvY29k ZT4sIHVzZSBhdXRob3IgbG9naW4gbmFtZXMsIG5vdCBmdWxsIG5hbWVzLiBJZiB1bnNldCAo dGhlIGRlZmF1bHQpLCBjb25kaXRpb24gaXMgdHJ1ZSBpZiB0aGUgdmFsdWUgZnJvbSB0aGUg aW1hZ2UgaXMgZW1wdHkgb3IgMC48L2xpPgoJPC91bD4KCgk8aDIgaWQ9InJlcXVpcmVtZW50 cyI+UmVxdWlyZW1lbnRzICZhbXA7IEluc3RhbGxhdGlvbjwvaDI+CgoJPHA+VGhpcyBwbHVn aW4gPHNwYW4gY2xhc3M9InJlcXVpcmVkIj5yZXF1aXJlcyA8c3BhbiBjbGFzcz0iY2FwcyI+ UEhQPC9zcGFuPiA1IG9yIGdyZWF0ZXIgYW5kIHRoZTwvc3Bhbj4gPGEgaHJlZj0iaHR0cDov L2lwc2VkaXhpdC5uZXQvdHhwLzIxL3Nvby10eHAtb2JqIj5zb29fdHhwX29iaiBsaWJyYXJ5 IHBsdWdpbjwvYT4uIEZvciBkZXRhaWxzIHNlZSA8YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0 Lm5ldC90eHAvMjAvaW5zdGFsbGF0aW9uIj5odHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvMjAv aW5zdGFsbGF0aW9uPC9hPi48L3A+CgoJPGgyIGlkPSJwcmVmZXJlbmNlcyI+UHJlZmVyZW5j ZXM8L2gyPgoKCTxwPlRoaXMgcGx1Z2luIGlzIGNvbXBhdGlibGUgd2l0aCA8YSBocmVmPSJo dHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvOTIvc29vX3BsdWdpbl9wcmVmIj5zb29fcGx1Z2lu X3ByZWY8L2E+LCBhbGxvd2luZyB5b3UgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBpbWFn ZSBmb3JtLCBpbWFnZSBsaXN0IGZvcm0sIHdoZXRoZXIgb3Igbm90IGltYWdlIGRpbWVuc2lv bnMgYXJlIGluY2x1ZGVkIGluIDxjb2RlPmltZzwvY29kZT4gdGFnIG91dHB1dCBieSBkZWZh dWx0LCBhbmQgd2hldGhlciBvciBub3QgdG8gdXNlIDxhIGhyZWY9IiNpbWFnZV9jb250ZXh0 Ij5wZXJzaXN0ZW50IGNvbnRleHQ8L2E+IGZvciBpc29sYXRlZCA8Y29kZT5zb29faW1hZ2U8 L2NvZGU+IHRhZ3MuPC9wPgoKCTxoMiBpZD0iZXhhbXBsZXMiPkV4YW1wbGVzPC9oMj4KCgk8 cD5TZWUgPGEgaHJlZj0iaHR0cDovL2lwc2VkaXhpdC5uZXQvdHhwLzU1L3Nvb19pbWFnZS11 c2VyLWd1aWRlIj5odHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvNTUvc29vX2ltYWdlLXVzZXIt Z3VpZGU8L2E+IHRvIHNlZSA8c3Ryb25nPnNvb19pbWFnZTwvc3Ryb25nPiBpbiBhY3Rpb24u PC9wPgoKCTxoMiBpZD0iaGlzdG9yeSI+VmVyc2lvbiBIaXN0b3J5PC9oMj4KCgk8aDM+MS4w LmIuNyAoNy80LzIwMTAsIDxzcGFuIGNsYXNzPSJjYXBzIj5VU0E8L3NwYW4+IEluZGVwZW5k ZW5jZSBEYXkpPC9oMz4KCgk8dWw+CgkJPGxpPlRodW1ibmFpbCA8Y29kZT5oZWlnaHQ8L2Nv ZGU+IGFuZCA8Y29kZT53aWR0aDwvY29kZT4gYXR0cmlidXRlcyAoVHhwIDQuMi4wIG9yIGxh dGVyKSBhZGRlZCBhdXRvbWF0aWNhbGx5LCBhY2NvcmRpbmcgdG8gPGNvZGU+ZGVmYXVsdF9k aW1lbnNpb25zPC9jb2RlPiBwcmVmZXJlbmNlIChyZXF1aXJlcyBzb29fdHhwX29iaiB2IDEu MC5iLjcpLjwvbGk+CgkJPGxpPkhlbHAgdGV4dCB1cGRhdGVzLjwvbGk+Cgk8L3VsPgoKCTxo Mz4xLjAuYi42ICg2LzI5LzIwMTApPC9oMz4KCgk8dWw+CgkJPGxpPk5ldyBiZWhhdmlvciBm b3IgPGNvZGU+c29vX2ltYWdlPC9jb2RlPjogd2hlbiB1c2VkIG91dHNpZGUgPGNvZGU+c29v X2ltYWdlX3NlbGVjdDwvY29kZT4sIGFuZCB3aXRob3V0IDxjb2RlPmlkPC9jb2RlPiBvciA8 Y29kZT5uYW1lPC9jb2RlPiwgYXJ0aWNsZSBpbWFnZSBub3cgdGFrZXMgcHJpb3JpdHkgb3Zl ciBhbnkgaW1hZ2VzIGZyb20gPGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gdGFncyBl YXJsaWVyIG9uIHRoZSBwYWdlIChpLmUuLCBwZXJzaXN0ZW50IGNvbnRleHQpLiBUaGlzIGdp dmVzIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IgaW4gYW4gYXJ0aWNsZSBsaXN0LiAoVGhh bmtzIHRvIEFkaSBmb3Igc3BvdHRpbmcgdGhpcy4pPC9saT4KCQk8bGk+TmV3IHByZWZlcmVu Y2Ugc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBwZXJzaXN0ZW50IGNvbnRleHQuPC9saT4K CQk8bGk+Q29kZSBjbGVhbmluZyAoc29vX3R4cF9vYmogMS4wLmIuNiBub3cgcmVxdWlyZWQp LjwvbGk+Cgk8L3VsPgoKCTxoMz4xLjAuYi41ICg2LzIxLzIwMTApPC9oMz4KCgk8dWw+CgkJ PGxpPkZpeGVkIGJ1ZyBpbiA8Y29kZT5zb29faW1hZ2U8L2NvZGU+IHdoZXJlIDxjb2RlPndp ZHRoPSZxdW90OzAmcXVvdDs8L2NvZGU+IHdhcyBub3Qgc3VwcHJlc3NpbmcgZGltZW5zaW9u IGF0dHJpYnV0ZXMgYXMgZXhwZWN0ZWQ8L2xpPgoJCTxsaT5BZGRlZCA8Y29kZT53cmFwdGFn PC9jb2RlPiwgPGNvZGU+Y2xhc3M8L2NvZGU+LCBhbmQgPGNvZGU+aHRtbF9pZDwvY29kZT4g YXR0cmlidXRlcyB0byB2YXJpb3VzIHRhZ3MgKHJlcXVlc3RlZCBieSBBZGkpPC9saT4KCTwv dWw+CgoJPGgzPjEuMC5iLjQgKDQvOS8yMDEwKTwvaDM+CgoJPHVsPgoJCTxsaT5OZXcgdGFn OiA8Y29kZT5zb29faW1hZ2VfaWQ8L2NvZGU+IChvdXRwdXQgaW1hZ2UgSUQpPC9saT4KCTwv dWw+CgoJPGgzPjEuMC5iLjMgKDMvMjkvMjAxMCk8L2gzPgoKCTx1bD4KCQk8bGk+Rml4ZWQg ZGVmYXVsdCB0ZXh0IGZvciA8Y29kZT5zb29faW1hZ2VfcHJldjwvY29kZT48L2xpPgoJCTxs aT5BZGRlZCA8Y29kZT5wYWdpbmF0aW9uPC9jb2RlPiBhdHRyaWJ1dGUgdG8gPGNvZGU+c29v X2ltYWdlX3NlbGVjdDwvY29kZT4sIGZvciBiZXR0ZXIgcGFnaW5hdGlvbiBjb250cm9sIHdo ZW4gdGhlcmUgYXJlIG11bHRpcGxlIDxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IHRh Z3Mgb24gYSBwYWdlPC9saT4KCTwvdWw+CgoJPGgzPjEuMC5iLjIgKDkvMTgvMjAwOSk8L2gz PgoKCTx1bD4KCQk8bGk+Rml4ZWQgYnVnIGluIDxjb2RlPnNvb19pbWFnZV9kYXRlPC9jb2Rl PiAod2FzIGRpc3BsYXlpbmcgaW5jb3JyZWN0IGRhdGUgb3IgdGltZSB6b25lIGluIHNvbWUg Y2FzZXMpPC9saT4KCQk8bGk+TmV3IHRhZ3M6Cgk8dWw+CgkJPGxpPjxjb2RlPnNvb190aHVt Ym5haWxfdXJsPC9jb2RlPjwvbGk+CgkJPGxpPjxjb2RlPnNvb190aHVtYm5haWxfaGVpZ2h0 PC9jb2RlPiAoVHhwIDQuMi4wIG9yIGhpZ2hlcik8L2xpPgoJCTxsaT48Y29kZT5zb29fdGh1 bWJuYWlsX3dpZHRoPC9jb2RlPiAoVHhwIDQuMi4wIG9yIGhpZ2hlcik8L2xpPgoJCTxsaT48 Y29kZT5zb29faW1hZ2VfcGFnZV9jb3VudDwvY29kZT48L2xpPgoJPC91bD48L2xpPgoJCTxs aT5DaGFuZ2VkIGJlaGF2aW9yOiBub3cgdXNlcyAob3B0aW9uYWxseSkgc29vX3BsdWdpbl9w cmVmLiBUaGUgb2xkIHNvb19wbHVnaW5fcHJlZnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC48 L2xpPgoJPC91bD4KCgk8aDM+MS4wLmIuMSAoNy81LzIwMDkpPC9oMz4KCgk8dWw+CgkJPGxp Pk5ldyA8Y29kZT5saW5rX3RvPC9jb2RlPiBhdHRyaWJ1dGUgZm9yIDxjb2RlPnNvb19pbWFn ZTwvY29kZT48L2xpPgoJCTxsaT48Y29kZT5zb29faW1hZ2VfbmV4dDwvY29kZT4gY2FuIG5v dyBiZSB1c2VkIGJlZm9yZSBpdHMgYXNzb2NpYXRlZCA8Y29kZT5zb29faW1hZ2Vfc2VsZWN0 PC9jb2RlPiB0YWc8L2xpPgoJCTxsaT5VbmRlcmx5aW5nIHNvb190eHBfb2JqIGxpYnJhcnkg aGFzIGJlZW4gbGFyZ2VseSByZXdyaXR0ZW48L2xpPgoJCTxsaT5kb3duc2hpZnQgdG8gdjIu MCBvZiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkdQTDwvc3Bhbj48L2xpPgoJPC91bD4KCgk8 aDM+MS4wLmEuNSAoNS8xOC8yMDA5KSAobm90IHJlbGVhc2VkIHB1YmxpY2x5KTwvaDM+CgoJ PHVsPgoJCTxsaT5DaGFuZ2VzIHRvIHRoZSA8Y29kZT5zb29faW1hZ2U8L2NvZGU+IHRhZzoK CTx1bD4KCQk8bGk+TmV3IGF0dHJpYnV0ZXM6IDxjb2RlPnRpdGxlPC9jb2RlPiwgPGNvZGU+ bGlua19jbGFzczwvY29kZT4sIDxjb2RlPmxpbmtfaWQ8L2NvZGU+PC9saT4KCQk8bGk+TmV3 IGJlaGF2aW9yOiBTZXR0aW5nIGFueSBsaW5rLXJlbGF0ZWQgYXR0cmlidXRlIHNldHMgPGNv ZGU+dGh1bWJuYWlsPC9jb2RlPiBhbmQgPGNvZGU+bGluazwvY29kZT4gdG8gdHJ1ZTwvbGk+ Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxoMz4xLjAuYS40ICg1LzE3LzIwMDkpPC9oMz4KCgk8 dWw+CgkJPGxpPkFkZGVkIDxjb2RlPnNvb19leGlmPC9jb2RlPiBhbmQgcmVsYXRlZCB0YWdz IGZvciByZWFkaW5nIGFuZCBkaXNwbGF5aW5nIDxzcGFuIGNsYXNzPSJjYXBzIj5FWElGPC9z cGFuPiBtZXRhZGF0YTwvbGk+CgkJPGxpPkNhbiBub3cgZW50ZXIgcmFuZ2VzIG9mIGlkcyAo ZS5nLiwgJiM4MjIwOzQ0LTQ4LCAxMi05JiM4MjIxOykgZm9yIGFydGljbGUgaW1hZ2Ugb3Ig PGNvZGU+c29vX2ltYWdlX3NlbGVjdDwvY29kZT4gaWQ8L2xpPgoJCTxsaT5GaXhlZCBidWcg aW4gYXNwZWN0IHJhdGlvIHVzaW5nIHJhdGlvIHN5bnRheCAoZS5nLiwgJiM4MjIwOzQ6MyYj ODIyMTsgb3IgJiM4MjIwOzQvMyYjODIyMTspPC9saT4KCTwvdWw+CgoJPGgzPjEuMC5hLjMg KDUvMTQvMjAwOSk8L2gzPgoKCTxwPjxjb2RlPnNvb19pbWFnZV9zZWxlY3Q8L2NvZGU+IGNh biBub3cgYmUgdXNlZCBhcyBhIHNpbmdsZSBvciBjb250YWluZXIgdGFnPC9wPgoKCTxoMz4x LjAuYS4yICg1LzEzLzIwMDkpPC9oMz4KCgk8dWw+CgkJPGxpPkFkZGVkIDxjb2RlPnNvb19p bWFnZV91cmw8L2NvZGU+IHRhZzwvbGk+CgkJPGxpPkZpeGVkIGluY29ycmVjdCA8c3BhbiBj bGFzcz0iY2FwcyI+T1JERVI8L3NwYW4+IEJZIDxzcGFuIGNsYXNzPSJjYXBzIj5GSUVMRDwv c3Bhbj4gc3ludGF4PC9saT4KCQk8bGk+VXBncmFkZWQgPHN0cm9uZz5zb29fdHhwX29iajwv c3Ryb25nPiB0byBkZWFsIHdpdGggYSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1 LjIuMCAmIzgyMTE7IDUuMi4zIGJ1ZzwvbGk+Cgk8L3VsPgoKCTxoMz4xLjAuYS4xICg1LzIv MjAwOSk8L2gzPgoKCTxwPkluaXRpYWwgcmVsZWFzZTwvcD4KCiA8L2Rpdj4iO3M6NDoiY29k ZSI7czoyMDA3MzoiCnJlcXVpcmVfcGx1Z2luKCdzb29fdHhwX29iaicpOwpAcmVxdWlyZV9w bHVnaW4oJ3Nvb19wbHVnaW5fcHJlZicpOwkJLy8gb3B0aW9uYWwKCmdsb2JhbCAkc29vX2lt YWdlOwoKJHNvb19pbWFnZSA9IGFycmF5KAoJJ3BhZ2VfcGFyYW0nCQk9Pgknc29vX2ltZ19w ZycsCgknanVtcF9wYXJhbScJCT0+CSdzb29faW1nX2pwJywKKTsKJHNvb19pbWFnZV9wcmVm cyA9IGZ1bmN0aW9uX2V4aXN0cygnc29vX3BsdWdpbl9wcmVmX3ZhbHMnKSA/Cglzb29fcGx1 Z2luX3ByZWZfdmFscygnc29vX2ltYWdlJykgOiBzb29faW1hZ2VfZGVmYXVsdHMoKTsKZm9y ZWFjaCAoICRzb29faW1hZ2VfcHJlZnMgYXMgJG5hbWUgPT4gJHZhbCApCgkkc29vX2ltYWdl WyRuYW1lXSA9IGlzX2FycmF5KCR2YWwpID8gJHZhbFsndmFsJ10gOiAkdmFsOwoKYWRkX3By aXZzKCdwbHVnaW5fcHJlZnMuc29vX2ltYWdlJywnMSwyJyk7CmFkZF9wcml2cygncGx1Z2lu X2xpZmVjeWNsZS5zb29faW1hZ2UnLCcxLDInKTsKcmVnaXN0ZXJfY2FsbGJhY2soJ3Nvb19p bWFnZV9wcmVmcycsICdwbHVnaW5fcHJlZnMuc29vX2ltYWdlJyk7CnJlZ2lzdGVyX2NhbGxi YWNrKCdzb29faW1hZ2VfcHJlZnMnLCAncGx1Z2luX2xpZmVjeWNsZS5zb29faW1hZ2UnKTsK CmZ1bmN0aW9uIHNvb19pbWFnZV9wcmVmcyggJGV2ZW50LCAkc3RlcCApIHsKCWlmICggZnVu Y3Rpb25fZXhpc3RzKCdzb29fcGx1Z2luX3ByZWYnKSApCgkJcmV0dXJuIHNvb19wbHVnaW5f cHJlZigkZXZlbnQsICRzdGVwLCBzb29faW1hZ2VfZGVmYXVsdHMoKSk7CglpZiAoIHN1YnN0 cigkZXZlbnQsIDAsIDEyKSA9PSAncGx1Z2luX3ByZWZzJyApIHsKCQkkcGx1Z2luID0gc3Vi c3RyKCRldmVudCwgMTIpOwoJCSRtZXNzYWdlID0gJzxwPjxiciAvPjxzdHJvbmc+JyAuIGdU eHQoJ2VkaXQnKSAuICIgJHBsdWdpbiAiIC4KCQkJZ1R4dCgnZWRpdF9wcmVmZXJlbmNlcycp IC4gJzo8L3N0cm9uZz48YnIgLz4nIC4gZ1R4dCgnaW5zdGFsbF9wbHVnaW4nKQoJCQkuICcg PGEgaHJlZj0iaHR0cDovL2lwc2VkaXhpdC5uZXQvdHhwLzkyL3Nvb19wbHVnaW5fcHJlZiI+ c29vX3BsdWdpbl9wcmVmPC9hPjwvcD4nOwoJCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wcmVmZXJl bmNlcycpIC4gIiAmIzgyNTA7ICRwbHVnaW4iLCAkbWVzc2FnZSk7Cgl9Cn0KCmZ1bmN0aW9u IHNvb19pbWFnZV9kZWZhdWx0cyggKSB7CglyZXR1cm4gYXJyYXkoCgkJJ2RlZmF1bHRfZm9y bScJCQk9PglhcnJheSgKCQkJJ3ZhbCcJPT4JJ3Nvb19pbWFnZScsCgkJCSdodG1sJwk9Pgkn dGV4dF9pbnB1dCcsCgkJCSd0ZXh0Jwk9PgknRGVmYXVsdCBpbWFnZSBmb3JtJywKCQkpLAoJ CSdkZWZhdWx0X2xpc3Rmb3JtJwkJPT4JYXJyYXkoCgkJCSd2YWwnCT0+CScnLAoJCQknaHRt bCcJPT4JJ3RleHRfaW5wdXQnLAoJCQkndGV4dCcJPT4JJ0RlZmF1bHQgaW1hZ2UgbGlzdCBm b3JtJywKCQkpLAoJCSdkZWZhdWx0X2RpbWVuc2lvbnMnCT0+CWFycmF5KAoJCQkndmFsJwk9 PgkxLAoJCQknaHRtbCcJPT4JJ3llc25vcmFkaW8nLAoJCQkndGV4dCcJPT4JJ0FkZCBoZWln aHQgYW5kIHdpZHRoIGluIHBpeGVscyB0byBpbWcgdGFnIGJ5IGRlZmF1bHQ/JywKCQkpLAoJ CSdwZXJzaXN0ZW50X2NvbnRleHQnCT0+CWFycmF5KAoJCQkndmFsJwk9PgkxLAoJCQknaHRt bCcJPT4JJ3llc25vcmFkaW8nLAoJCQkndGV4dCcJPT4JJ1VzZSBwZXJzaXN0ZW50IGNvbnRl eHQgZm9yIHRhZ3Mgb3V0c2lkZSBhbiBpbWFnZSBmb3JtPycsCgkJKSwKCSk7Cn0KCiAgLy8t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0vLwogLy8JCQkJCQkJCQlUYWdzCQkJCQkJCQkvLwovLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS8vCgpmdW5jdGlvbiBzb29faW1hZ2Vfc2VsZWN0KCAkYXR0cywgJHRoaW5nID0g bnVsbCApIHsKCi8vIENvbnRyb2xsZXIgZm9yIHRoZSBzb29faW1hZ2UgcGx1Z2luLgovLwov LyBEZXRlcm1pbmUgd2hhdCBpbWFnZXMgdGhlIHVzZXIgaXMgcmVxdWVzdGluZywgZmV0Y2gg aW1hZ2UgZGF0YSBvYmplY3RzCi8vIChvciByYXcgVVJMcywgYXMgYXBwcm9wcmlhdGUpIGZv ciB0aG9zZSBpbWFnZXMsIGFuZCBwYXNzIHRoaXMgYWxvbmcKLy8gdG8gYW4gaW1hZ2UgZm9y bSAoaS5lLiwgYSBmb3JtIGNhbGxlZCBieSB0aGlzIHRhZywgY29udGFpbmluZyBvbmUgb3IK Ly8gbW9yZSBvZiBzb29faW1hZ2UncyBvdXRwdXQgdGFncykgZm9yIGRpc3BsYXkuCgoJZ2xv YmFsICRzb29faW1hZ2U7CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknYXNwZWN0X3JhdGlv Jwk9PgknJywKCQknYXV0aG9yJwkJPT4JJycsCgkJJ2JyZWFrJwkJCT0+CScnLAoJCSdjYXRl Z29yeScJCT0+CScnLAoJCSdjbGFzcycJCQk9PgknJywKCQknZXh0JwkJCT0+CScnLAoJCSdm b3JtJwkJCT0+CSRzb29faW1hZ2VbJ2RlZmF1bHRfZm9ybSddLAkJLy8gcmVxdWlyZWQKCQkn aHRtbF9pZCcJCT0+CScnLAoJCSdpZCcJCQk9PgknJywKCQknbGltaXQnCQkJPT4JMCwKCQkn bGlzdGZvcm0nCQk9Pgkkc29vX2ltYWdlWydkZWZhdWx0X2xpc3Rmb3JtJ10sCgkJJ25hbWUn CQkJPT4JJycsCgkJJ3BhZ2luYXRpb24nCT0+CXRydWUsCgkJJ3BlcnNpc3RlbnRfY29udGV4 dCcJPT4gJHNvb19pbWFnZVsncGVyc2lzdGVudF9jb250ZXh0J10sCgkJJ3NvcnQnCQkJPT4J J25hbWUgYXNjJywJCS8vIGFjY2VwdHMgbGlzdHMsIGUuZy4gImEgYXNjLGIsYyBkZXNjIgoJ CSd3cmFwdGFnJwkJPT4JJycsCgkpLCAkYXR0cykpOwoKCSRwYWdlID0gaW50dmFsKGdwcygk c29vX2ltYWdlWydwYWdlX3BhcmFtJ10pKTsKCWlmICggJHBhZ2UgPCAxICkgJHBhZ2UgPSAx OwoJJG9mZnNldCA9ICRwYWdpbmF0aW9uID8gKCRwYWdlIC0gMSkgKiAkbGltaXQgOiAwOwoK CSRqdW1wX3RvID0gaW50dmFsKGdwcygkc29vX2ltYWdlWydqdW1wX3BhcmFtJ10pKTsKCgkk cXVlcnkgPSBuZXcgc29vX3R4cF9zZWxlY3QoJ3R4cF9pbWFnZScpOwoKLy8gU2VsZWN0aW9u IHByaW9yaXR5OiBuYW1lOyBpZDsgKGNhdGVnb3J5fGF1dGhvcnxleHR8YXNwZWN0X3JhdGlv KTsgYXJ0aWNsZSBpbWFnZS4KLy8gQ29tbWEtc2VwYXJhdGVkIGxpc3RzIGFsbG93ZWQgZm9y IGFsbCBjcml0ZXJpYTsgcHJlc2VydmUgbGlzdCBvcmRlciBmb3IgbmFtZXxpZC4KCglpZiAo ICRuYW1lIG9yICRpZCApIHsKCQkkc29ydCA9ICcnOwoJCWlmICggJG5hbWUgKQoJCQkkcXVl cnktPmluKCduYW1lJywgJG5hbWUpLT5vcmRlcl9ieV9maWVsZCgnbmFtZScsICRuYW1lKTsK CQllbHNlCgkJCSRpZHMgPSBfc29vX3JhbmdlX3RvX2xpc3QoJGlkKTsKCX0KCgllbHNlaWYg KCAkY2F0ZWdvcnkgb3IgJGF1dGhvciBvciAkZXh0IG9yICRhc3BlY3RfcmF0aW8gKSB7CgkJ aWYgKCAkY2F0ZWdvcnkgKSAkcXVlcnktPmluKCdjYXRlZ29yeScsICRjYXRlZ29yeSk7CgkJ aWYgKCAkYXV0aG9yICkgJHF1ZXJ5LT5pbignYXV0aG9yJywgJGF1dGhvcik7CgkJaWYgKCAk ZXh0ICkgJHF1ZXJ5LT5pbignZXh0JywgX3Nvb192YWxpZF9leHQoJGV4dCkpOwoJCWlmICgg JGFzcGVjdF9yYXRpbyApIF9zb29faW1hZ2VfYXNwZWN0X3JhdGlvKCRxdWVyeSwgdHJpbSgk YXNwZWN0X3JhdGlvKSk7Cgl9CgoJZWxzZSB7CgkJJGltYWdlX2FycmF5ID0gX3Nvb19hcnRp Y2xlX2ltYWdlX2xpc3QoKTsKCQlpZiAoICEgJGltYWdlX2FycmF5ICkKCQkJcmV0dXJuIGZh bHNlOwoJCWZvcmVhY2ggKCAkaW1hZ2VfYXJyYXkgYXMgJGltZyApIHsKCQkJaWYgKCBpc19u dW1lcmljKCRpbWcpICkKCQkJCSRpZHNbXSA9ICRpbWc7CgkJCWVsc2UKCQkJCSR1cmxzW10g PSAkaW1nOwoJCX0KCX0KCWlmICggaXNzZXQoJGlkcykgKSB7CgkJJHNvcnQgPSAnJzsKCQkk cXVlcnktPmluKCdpZCcsICRpZHMpLT5vcmRlcl9ieV9maWVsZCgnaWQnLCAkaWRzKTsKCX0K CgkkZnVsbF9jb3VudCA9ICRxdWVyeS0+Y291bnQoKTsKCWlmICggJHBhZ2luYXRpb24gJiYg JGZ1bGxfY291bnQgPD0gJG9mZnNldCApIHsJCS8vIGluIGNhc2Ugb2YgZGlyZWN0IFVSSSBt YW5pcHVsYXRpb24gYW5kIGludmFsaWQgIwoJCSRwYWdlID0gJGxpbWl0ID8gY2VpbCgkZnVs bF9jb3VudCAvICRsaW1pdCkgOiAxOwkvLyBnbyB0byBsYXN0IHBhZ2UKCQkkb2Zmc2V0ID0g KCRwYWdlIC0gMSkgKiAkbGltaXQ7Cgl9CgoJJHNvb19pbWFnZVsndGhpc19wYWdlJ10gPSAk cGFnZTsKCWlmICggJHBhZ2luYXRpb24gKSAkc29vX2ltYWdlWyd0b3RhbF9wYWdlcyddID0g JGxpbWl0ID8gY2VpbCgkZnVsbF9jb3VudCAvICRsaW1pdCkgOiAxOwoKCWlmICggJGp1bXBf dG8gYW5kIGlzX251bWVyaWMoJGp1bXBfdG8pICkgewoJCSR1cmkgPSBuZXcgc29vX3VyaTsK CQkkdXJpLT5zZXRfcXVlcnlfcGFyYW0oJHNvb19pbWFnZVsnanVtcF9wYXJhbSddKTsKCQkk YWxsX2lkcyA9IG5ldyBzb29fdHhwX3Jvd3NldCgkcXVlcnktPm9yZGVyX2J5KCRzb3J0KSk7 CgkJJGFsbF9pZHMgPSBhcnJheV9mbGlwKCRhbGxfaWRzLT5maWVsZF92YWxzKCdpZCcpKTsK CQlpZiAoIGlzc2V0KCRhbGxfaWRzWyRqdW1wX3RvXSkgKSB7CgkJCSRqdW1wX2luZGV4ID0g JGFsbF9pZHNbJGp1bXBfdG9dOwoJCQlpZiAoICRsaW1pdCApIHsKCQkJCSRwYWdlID0gY2Vp bCgoJGp1bXBfaW5kZXggKyAxKSAvICRsaW1pdCk7CgkJCQkkb2Zmc2V0ID0gKCRwYWdlIC0g MSkgKiAkbGltaXQ7CgkJCQkkX1BPU1RbJHNvb19pbWFnZVsncGFnZV9wYXJhbSddXSA9ICRw YWdlOwoJCQl9CgkJfQoJfQoKCSRxdWVyeS0+b3JkZXJfYnkoJHNvcnQpLT5saW1pdCgkbGlt aXQpLT5vZmZzZXQoJG9mZnNldCk7CgkkcnMgPSBuZXcgc29vX3R4cF9yb3dzZXQoJHF1ZXJ5 KTsKCXVuc2V0KCRxdWVyeSk7CgoJaWYgKCBpc3NldCgkdXJscykgKQoJCWZvcmVhY2ggKCAk aW1hZ2VfYXJyYXkgYXMgJGkgPT4gJGltZyApIHsKCQkJaWYgKCBpc3NldCgkcnMtPnJvd3Nb JGltZ10pICkKCQkJCSRpbWFnZV9hcnJheVskaV0gPSAkcnMtPnJvd3NbJGltZ107CgkJCWVs c2VpZiAoICEgaW5fYXJyYXkoJGltZywgJHVybHMpICkKCQkJCXVuc2V0KCRpbWFnZV9hcnJh eVskaV0pOwoJCX0KCWVsc2UKCQkkaW1hZ2VfYXJyYXkgPSAkcnMtPnJvd3M7CgoJaWYgKCBl bXB0eSgkaW1hZ2VfYXJyYXkpICkKCQlyZXR1cm4gZmFsc2U7CgoJaWYgKCAkcGFnaW5hdGlv biAmJiAkbGltaXQgJiYgKCAkb2Zmc2V0ICsgJGxpbWl0IDwgJGZ1bGxfY291bnQgKSApCgkJ JHNvb19pbWFnZVsnbmV4dCddID0gJHBhZ2UgKyAxOwoKCS8vICRpbWFnZV9hcnJheSBub3cg Y29udGFpbnMgZGF0YSBvYmplY3RzIGFuZC9vciBwcmVzdW1lZCBVUkxzCgoJaWYgKCAoIGNv dW50KCRpbWFnZV9hcnJheSkgPiAxIG9yICRwYWdlID4gMSkgYW5kICRsaXN0Zm9ybSApCgkJ JGZvcm0gPSAkbGlzdGZvcm07CgoJJHNvb19pbWFnZVsnZmlyc3Rfc2VsZWN0aW9uJ10gPSBp c3NldCgkanVtcF9pbmRleCkgPyBuZXcgc29vX3R4cF9pbWcoJGp1bXBfdG8pIDogY3VycmVu dCgkaW1hZ2VfYXJyYXkpOwoKCWZvcmVhY2ggKCAkaW1hZ2VfYXJyYXkgYXMgJGltZyApIHsK CQlpZiAoICRpbWcgaW5zdGFuY2VvZiBzb29fdHhwX2ltZyApCgkJCSRzb29faW1hZ2VbJ2Rh dGFfb2JqJ10gPSAkaW1nOwoJCWVsc2UKCQkJJHNvb19pbWFnZVsndXJsJ10gPSAkaW1nOwoJ CSRwYXJzZWQgPSBpc19udWxsKCR0aGluZykgPyBwYXJzZV9mb3JtKCRmb3JtKSA6IHBhcnNl KCR0aGluZyk7CgkJaWYgKCAkcGFyc2VkICkgJG91dFtdID0gJHBhcnNlZDsKCQl1bnNldCgk c29vX2ltYWdlWydkYXRhX29iaiddKTsKCQl1bnNldCgkc29vX2ltYWdlWyd1cmwnXSk7Cgl9 CgoJaWYgKCAhICRwZXJzaXN0ZW50X2NvbnRleHQgKQoJCXVuc2V0KCRzb29faW1hZ2VbJ2Zp cnN0X3NlbGVjdGlvbiddKTsKCglyZXR1cm4gaXNzZXQoJG91dCkgPyBkb1dyYXAoJG91dCwg JHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAnJywgJycsICcnLCAkaHRtbF9pZCkgOiBmYWxz ZTsKCn0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBlbmQgb2Ygc29vX2ltYWdlX3NlbGVjdCAv Ly8vLy8vLy8vLy8vLy8vLy8vLy8KCmZ1bmN0aW9uIHNvb19pbWFnZSggJGF0dHMgKSB7Ci8v IERpc3BsYXkgYW4gaW1hZ2UuIFNlbGVjdGlvbiBieSwgaW4gZGVzY2VuZGluZyBvcmRlciBv ZiBwcmlvcml0eToKCS8vIHRoZSB0YWcncyAnbmFtZScgYXR0cmlidXRlOwoJLy8gdGhlIHRh ZydzICdpZCcgYXR0cmlidXRlOwoJLy8gdGhlIGltYWdlIGNvbnRleHQ6CgkJLy8gaWQgb3Ig dXJsIHNlbnQgYnkgJHNvb19pbWFnZSB0byBhbiBpbWFnZSBmb3JtCgkJLy8gYXJ0aWNsZSBp bWFnZQoJCS8vIGZpcnN0IHNlbGVjdGlvbiBmcm9tIHByaW9yIHNvb19pbWFnZV9zZWxlY3Qg KHN1YmplY3QgdG8gcHJlZiBzZXR0aW5nKQoKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2lk JwkJCT0+CScnLAoJCSduYW1lJwkJCT0+CScnLAoJCSd0aHVtYm5haWwnCQk9PglmYWxzZSwK CQknaGVpZ2h0JwkJPT4JJycsCgkJJ3dpZHRoJwkJCT0+CScnLAoJCSdodG1sX2lkJwkJPT4J JycsCgkJJ2NsYXNzJwkJCT0+CScnLAoJCSd0aXRsZScJCQk9Pgkne2NhcHRpb259JywKCQkn bGluaycJCQk9PglmYWxzZSwKCQknbGlua19jbGFzcycJPT4JJycsCgkJJ2xpbmtfaWQnCQk9 PgknJywKCQknbGlua19yZWwnCQk9PgknJywKCQknbGlua190bycJCT0+CScnLAoJCSdlc2Nh cGUnCQk9Pgl0cnVlLAoJCSdvbmNsaWNrJwkJPT4JJycsCQkvLyBvbmx5IGZvciBsaW5rZWQg dGh1bWJuYWlscwoJKSwgJGF0dHMpKTsKCglnbG9iYWwgJHNvb19pbWFnZTsKCglpZiAoICRs aW5rX2NsYXNzIG9yICRsaW5rX2lkIG9yICRsaW5rX3JlbCBvciAkb25jbGljayBvciAkbGlu a190byApCgkJJGxpbmsgPSB0cnVlOwoKCWlmICggJGxpbmsgKQoJCSR0aHVtYm5haWwgPSB0 cnVlOwoKCWlmICggJG5hbWUgb3IgJGlkICkKCQkkaW1hZ2UgPSBuZXcgc29vX3R4cF9pbWco JG5hbWUgPyAkbmFtZSA6ICRpZCk7CgllbHNlCgkJJGltYWdlID0gX3Nvb19pbWFnZV9ieV9j b250ZXh0KCk7CgkJCS8vIGZhbHNlIGlmIGltYWdlIGNvbnRleHQgaXMgZW1wdHkKCQkJLy8g b3RoZXJ3aXNlIGEgc29vX3R4cF9pbWcgb3Igc29vX2h0bWxfaW1nIG9iamVjdAoJCQkvLyBp ZiBzb29faHRtbF9pbWcgaXQgd2lsbCBiZSBVUkwgb25seSwgbm8gb3RoZXIgcHJvcGVydGll cwoKCWlmICggJGltYWdlIGluc3RhbmNlb2Ygc29vX2h0bWxfaW1nIGFuZCAkdGh1bWJuYWls ICkKCQlyZXR1cm4gZmFsc2U7CgoJaWYgKCAkaW1hZ2UgaW5zdGFuY2VvZiBzb29fdHhwX2lt ZyApIHsKCQlpZiAoICR0aHVtYm5haWwgYW5kICEkaW1hZ2UtPnRodW1ibmFpbCApCgkJCXJl dHVybiBmYWxzZTsKCQkkaW1hZ2VfZGF0YSA9ICRpbWFnZTsKCQkkaW1hZ2UgPSBuZXcgc29v X2h0bWxfaW1nKCRpbWFnZV9kYXRhLCAkdGh1bWJuYWlsLCAkZXNjYXBlKTsKCQkkdGl0bGUg PSBzdHJfcmVwbGFjZShhcnJheSgne2F1dGhvcn0nLCAne2FsdH0nLCAne2NhcHRpb259Jyks CgkJCWFycmF5KGdldF9hdXRob3JfbmFtZSgkaW1hZ2VfZGF0YS0+YXV0aG9yKSwgJGltYWdl LT5hbHQsICRpbWFnZS0+dGl0bGUpLCAkdGl0bGUpOwoJfQoKCWlmICggISAoICRpbWFnZSBp bnN0YW5jZW9mIHNvb19odG1sX2ltZyApICkKCQlyZXR1cm4gZmFsc2U7CgovLyBTdGFuZGFy ZCBoZWlnaHQgYW5kIHdpZHRoIGF0dHJpYnV0ZXMgKGkuZS4sIGFjdHVhbCBzaXplIGluIHBp eGVscykgd2lsbCBiZSBhZGRlZCB0byB0aGUgaW1nIHRhZyBpZiB0aGUgZGVmYXVsdF9kaW1l bnNpb25zIHByZWZlcmVuY2UgaXMgdHJ1ZSBhbmQgaGFzIG5vdCBiZWVuIG92ZXJyaWRlbiAo Ynkgc3BlY2lmeWluZyBoZWlnaHQgb3Igd2lkdGggb3RoZXIgdGhhbiAxKSwgb3IgaWYgZWl0 aGVyIGF0dHJpYnV0ZSBoYXMgYmVlbiBzZXQgdG8gMS4gT3RoZXJ3aXNlLCBoZWlnaHQgYW5k IHdpZHRoIGF0dHJpYnV0ZXMgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCBhcyBpcyAoaW4gd2hp Y2ggY2FzZSBhIHZhbHVlIG9mIDAgb3IgZW1wdHkgd2lsbCByZXN1bHQgaW4gbm8gYXR0cmli dXRlIGluIHRoZSBpbWcgdGFnKS4KCglpZiAoICR3aWR0aCA9PT0gJzAnIG9yICRoZWlnaHQg PT09ICcwJyBvciAkd2lkdGggPiAxIG9yICRoZWlnaHQgPiAxICkKCQkkc29vX2ltYWdlWydk ZWZhdWx0X2RpbWVuc2lvbnMnXSA9IGZhbHNlOwoKCWlmICggISAkc29vX2ltYWdlWydkZWZh dWx0X2RpbWVuc2lvbnMnXSBhbmQgJGhlaWdodCAhPSAxIGFuZCAkd2lkdGggIT0gMSApCgkJ JGltYWdlLT5oZWlnaHQoJGhlaWdodCktPndpZHRoKCR3aWR0aCk7CgoJJGltYWdlLT5jbGFz cygkY2xhc3MpCgkJLT5pZCgkaHRtbF9pZCkKCQktPnRpdGxlKCR0aXRsZSk7CgoJLy8gU2hh ZG93Ym94LXNwZWNpZmljIGJsb2NrIHRvIGNyZWF0ZSBnYWxsZXJpZXMKIAlpZiAoIHN0cnRv bG93ZXIoJGxpbmtfcmVsKSA9PSAic2hhZG93Ym94IgogCQlhbmQgaXNzZXQoJHNvb19pbWFn ZVsnZmlyc3Rfc2VsZWN0aW9uJ10pCiAJCWFuZCAkc29vX2ltYWdlWydmaXJzdF9zZWxlY3Rp b24nXSBpbnN0YW5jZW9mIHNvb190eHBfaW1nICkgewogCQkJJGltZ19vYmogPSAkc29vX2lt YWdlWydmaXJzdF9zZWxlY3Rpb24nXTsKIAkJCSRsaW5rX3JlbCAuPSAnWycgLiAkaW1nX29i ai0+aWQgLiAnXSc7Cgl9CgoJaWYgKCAkdGh1bWJuYWlsIGFuZCAkbGluayApIHsKCQlpZiAo ICRsaW5rX3RvICkKCQkJJHVybCA9IGh1IC4gJGxpbmtfdG8gLiAnPycgLiAkc29vX2ltYWdl WydqdW1wX3BhcmFtJ10KCQkJCS4gJz0nIC4gJGltYWdlX2RhdGEtPmlkOwoJCWVsc2UKCQkJ JHVybCA9ICRpbWFnZV9kYXRhLT5mdWxsX3VybDsKCQkkYW5jaG9yID0gbmV3IHNvb19odG1s X2FuY2hvcigkdXJsLCAkaW1hZ2UpOwoJCSRhbmNob3ItPnRpdGxlKCR0aXRsZSkKCQkJLT5v bmNsaWNrKCRvbmNsaWNrKQoJCQktPnJlbCgkbGlua19yZWwpCgkJCS0+Y2xhc3MoJGxpbmtf Y2xhc3MpCgkJCS0+aWQoJGxpbmtfaWQpOwoJfQoKCXJldHVybiBpc3NldCgkYW5jaG9yKSA/ ICRhbmNob3ItPnRhZygpIDogJGltYWdlLT50YWcoKTsKfQovLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vIGVuZCBvZiBzb29faW1hZ2UgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmZ1 bmN0aW9uIHNvb19pbWFnZV9hbHQoJGF0dHMpIHsgcmV0dXJuIF9zb29faW1hZ2VfZGF0YSgn YWx0JywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNvb19pbWFnZV9hdXRob3IoJGF0dHMpIHsgcmV0 dXJuIF9zb29faW1hZ2VfZGF0YSgnYXV0aG9yJywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNvb19p bWFnZV9jYXB0aW9uKCRhdHRzKSB7CXJldHVybiBfc29vX2ltYWdlX2RhdGEoJ2NhcHRpb24n LCAkYXR0cyk7IH0KZnVuY3Rpb24gc29vX2ltYWdlX2NhdGVnb3J5KCRhdHRzKSB7IHJldHVy biBfc29vX2ltYWdlX2RhdGEoJ2NhdGVnb3J5JywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNvb19p bWFnZV9kYXRlKCRhdHRzKSB7IHJldHVybiBfc29vX2ltYWdlX2RhdGEoJ2RhdGUnLCAkYXR0 cyk7IH0KZnVuY3Rpb24gc29vX2ltYWdlX2hlaWdodCgkYXR0cykgeyByZXR1cm4gX3Nvb19p bWFnZV9kYXRhKCdoJywgJGF0dHMpOyB9CmZ1bmN0aW9uIHNvb19pbWFnZV9pZCgkYXR0cykg eyByZXR1cm4gX3Nvb19pbWFnZV9kYXRhKCdpZCcsICRhdHRzKTsgfQpmdW5jdGlvbiBzb29f aW1hZ2VfbmFtZSgkYXR0cykgeyByZXR1cm4gX3Nvb19pbWFnZV9kYXRhKCduYW1lJywgJGF0 dHMpOyB9CmZ1bmN0aW9uIHNvb19pbWFnZV91cmwoJGF0dHMpIHsgcmV0dXJuIF9zb29faW1h Z2VfZGF0YSgnZnVsbF91cmwnLCAkYXR0cyk7IH0KZnVuY3Rpb24gc29vX2ltYWdlX3dpZHRo KCRhdHRzKSB7IHJldHVybiBfc29vX2ltYWdlX2RhdGEoJ3cnLCAkYXR0cyk7IH0KZnVuY3Rp b24gc29vX3RodW1ibmFpbF9oZWlnaHQoJGF0dHMpIHsgcmV0dXJuIF9zb29faW1hZ2VfZGF0 YSgndGh1bWJfaCcsICRhdHRzKTsgfQpmdW5jdGlvbiBzb29fdGh1bWJuYWlsX3VybCgkYXR0 cykgeyByZXR1cm4gX3Nvb19pbWFnZV9kYXRhKCd0aHVtYl91cmwnLCAkYXR0cyk7IH0KZnVu Y3Rpb24gc29vX3RodW1ibmFpbF93aWR0aCgkYXR0cykgeyByZXR1cm4gX3Nvb19pbWFnZV9k YXRhKCd0aHVtYl93JywgJGF0dHMpOyB9CgpmdW5jdGlvbiBfc29vX2ltYWdlX2RhdGEoJGZp ZWxkLCAkYXR0cyA9IGFycmF5KCkpIHsKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ2Zvcm1h dCcJPT4JJycsCgkJJ2VzY2FwZScJPT4JMSwKCQknbm9fd2lkb3cnCT0+CTEsCgkJJ3dyYXB0 YWcnCT0+ICcnLAoJCSdjbGFzcycJCT0+ICcnLAoJCSdodG1sX2lkJwk9PiAnJywKCSksICRh dHRzKSk7CgkkaW1hZ2UgPSBfc29vX2ltYWdlX2J5X2NvbnRleHQoKTsKCWlmICggISAkaW1h Z2UgaW5zdGFuY2VvZiBzb29fdHhwX2ltZyApCgkJJG91dCA9ICRmaWVsZCA9PSAndXJsJyA/ ICRpbWFnZSA6ICcnOwoJZWxzZQoJCXN3aXRjaCAoICRmaWVsZCApIHsKCQkJY2FzZSAnYWx0 JzoKCQkJCSRvdXQgPSAkZXNjYXBlID8gaHRtbHNwZWNpYWxjaGFycygkaW1hZ2UtPmFsdCkg OiAkaW1hZ2UtPmFsdDsKCQkJCWJyZWFrOwoJCQljYXNlICdhdXRob3InOgoJCQkJJG91dCA9 IGdldF9hdXRob3JfbmFtZSgkaW1hZ2UtPmF1dGhvcik7CgkJCQlicmVhazsKCQkJY2FzZSAn Y2FwdGlvbic6CgkJCQkkb3V0ID0gJGVzY2FwZSA/IGh0bWxzcGVjaWFsY2hhcnMoJGltYWdl LT5jYXB0aW9uKSA6ICRpbWFnZS0+Y2FwdGlvbjsKCQkJCSRvdXQgPSAkbm9fd2lkb3cgPyBw cmVnX3JlcGxhY2UoJy9ccysoXFMrKSQvJywgJyZuYnNwO1wxJywgJG91dCkgOiAkb3V0OwoJ CQkJYnJlYWs7CgkJCWNhc2UgJ2RhdGUnOgoJCQkJZ2xvYmFsICRkYXRlZm9ybWF0OwoJCQkJ JGYgPSAkZm9ybWF0ID8gJGZvcm1hdCA6ICRkYXRlZm9ybWF0OwoJCQkJJHV0aW1lID0gc2Fm ZV9zdHJ0b3RpbWUoJGltYWdlLT5kYXRlKTsKCQkJCSRvdXQgPSAkaW1hZ2UtPmRhdGUgPyBz YWZlX3N0cmZ0aW1lKCRmLCAkdXRpbWUpIDogJyc7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoK CQkJCSRvdXQgPSAkaW1hZ2UtPiRmaWVsZDsKCQl9CglyZXR1cm4gZG9XcmFwKGFycmF5KCRv dXQpLCAkd3JhcHRhZywgJycsICRjbGFzcywgJycsICcnLCAnJywgJGh0bWxfaWQpOwp9Cgpm dW5jdGlvbiBzb29faWZfdHhwX2ltYWdlKCRhdHRzLCAkdGhpbmcpIHsKCgkkaW1hZ2UgPSBf c29vX2ltYWdlX2J5X2NvbnRleHQoKTsKCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcs ICRpbWFnZSBpbnN0YW5jZW9mIHNvb190eHBfaW1nICkpOwp9CgpmdW5jdGlvbiBzb29faWZf aW1hZ2VfYXV0aG9yKCRhdHRzLCAkdGhpbmcpIHsKCglleHRyYWN0KGxBdHRzKGFycmF5KCdu YW1lJyA9PiAnJyksICRhdHRzKSk7CgkkaW1hZ2UgPSBfc29vX2ltYWdlX2J5X2NvbnRleHQo KTsKCXJldHVybiBwYXJzZShFdmFsRWxzZSgkdGhpbmcsICRpbWFnZSBpbnN0YW5jZW9mIHNv b190eHBfaW1nIGFuZCBpbl9saXN0KCRpbWFnZS0+YXV0aG9yLCAkbmFtZSkgKSk7Cn0KCmZ1 bmN0aW9uIHNvb19pZl9pbWFnZV9jYXRlZ29yeSgkYXR0cywgJHRoaW5nKSB7CgoJZXh0cmFj dChsQXR0cyhhcnJheSgnbmFtZScgPT4gJycpLCAkYXR0cykpOwoJJGltYWdlID0gX3Nvb19p bWFnZV9ieV9jb250ZXh0KCk7CglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5nLCAkaW1h Z2UgaW5zdGFuY2VvZiBzb29fdHhwX2ltZyBhbmQgaW5fbGlzdCgkaW1hZ2UtPmNhdGVnb3J5 LCAkbmFtZSkgKSk7Cn0KCmZ1bmN0aW9uIHNvb19pZl9pbWFnZV90aHVtYm5haWwoJGF0dHMs ICR0aGluZykgewoKCSRpbWFnZSA9IF9zb29faW1hZ2VfYnlfY29udGV4dCgpOwoJcmV0dXJu IHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJGltYWdlIGluc3RhbmNlb2Ygc29vX3R4cF9pbWcg YW5kICRpbWFnZS0+dGh1bWJuYWlsKSk7Cn0KCmZ1bmN0aW9uIHNvb19pbWFnZV9uZXh0KCRh dHRzLCAkdGhpbmcgPSBudWxsKSB7CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknbGlua190 ZXh0JwkJPT4gJyZyYXJyOycsCgkJJ2NsYXNzJwkJCT0+ICcnLAoJCSdodG1sX2lkJwkJPT4g JycsCgkpLCAkYXR0cykpOwoJZ2xvYmFsICRzb29faW1hZ2U7CgoJaWYgKCAhIGlzc2V0KCRz b29faW1hZ2VbJ25leHQnXSkgKQoJCXJldHVybiBzb29fdXRpbDo6c2Vjb25kcGFzcyhfX0ZV TkNUSU9OX18sICRhdHRzLCAkdGhpbmcpOwoJJHVyaSA9IG5ldyBzb29fdXJpOwoJJHVyaS0+ c2V0X3F1ZXJ5X3BhcmFtKCRzb29faW1hZ2VbJ2p1bXBfcGFyYW0nXSk7CgkkdXJpLT5zZXRf cXVlcnlfcGFyYW0oJHNvb19pbWFnZVsncGFnZV9wYXJhbSddLCAkc29vX2ltYWdlWyduZXh0 J10pOwoJJG91dCA9IG5ldyBzb29faHRtbF9hbmNob3IoJHVyaS0+ZnVsbCwgJHRoaW5nID8g JHRoaW5nIDogJGxpbmtfdGV4dCk7CglyZXR1cm4gJG91dC0+Y2xhc3MoJGNsYXNzKS0+aWQo JGh0bWxfaWQpLT50YWcoKTsKfQoKZnVuY3Rpb24gc29vX2ltYWdlX3ByZXYoJGF0dHMsICR0 aGluZyA9IG51bGwpIHsKCglleHRyYWN0KGxBdHRzKGFycmF5KAoJCSdsaW5rX3RleHQnCQk9 PiAnJmxhcnI7JywKCQknY2xhc3MnCQkJPT4gJycsCgkJJ2h0bWxfaWQnCQk9PiAnJywKCSks ICRhdHRzKSk7CglnbG9iYWwgJHNvb19pbWFnZTsKCgkkcHJldiA9IGludHZhbChncHMoJHNv b19pbWFnZVsncGFnZV9wYXJhbSddKSkgLSAxOwoJaWYgKCAkcHJldiA8IDEgKQoJCXJldHVy biBzb29fdXRpbDo6c2Vjb25kcGFzcyhfX0ZVTkNUSU9OX18sICRhdHRzLCAkdGhpbmcpOwoJ JHVyaSA9IG5ldyBzb29fdXJpOwoJJHVyaS0+c2V0X3F1ZXJ5X3BhcmFtKCRzb29faW1hZ2Vb J2p1bXBfcGFyYW0nXSk7CgkkdXJpLT5zZXRfcXVlcnlfcGFyYW0oJHNvb19pbWFnZVsncGFn ZV9wYXJhbSddLCAkcHJldiA+IDEgPyAkcHJldiA6IG51bGwpOwoJJG91dCA9IG5ldyBzb29f aHRtbF9hbmNob3IoJHVyaS0+ZnVsbCwgJHRoaW5nID8gJHRoaW5nIDogJGxpbmtfdGV4dCk7 CglyZXR1cm4gJG91dC0+Y2xhc3MoJGNsYXNzKS0+aWQoJGh0bWxfaWQpLT50YWcoKTsKfQoK ZnVuY3Rpb24gc29vX2ltYWdlX3BhZ2VfY291bnQoJGF0dHMpIHsKCglleHRyYWN0KGxBdHRz KGFycmF5KAoJCSdmb3JtYXQnIAkJPT4JJ1BhZ2Uge2N1cnJlbnR9IG9mIHt0b3RhbH0nLAoJ CSdzaG93YWx3YXlzJwk9PglmYWxzZSwKCSksICRhdHRzKSk7CglnbG9iYWwgJHNvb19pbWFn ZTsKCglpZiAoICEgaXNzZXQoJHNvb19pbWFnZVsndGhpc19wYWdlJ10pICkKCQlyZXR1cm4g c29vX3V0aWw6OnNlY29uZHBhc3MoX19GVU5DVElPTl9fLCAkYXR0cyk7CgoJaWYgKCAhICRz aG93YWx3YXlzIGFuZCAkc29vX2ltYWdlWyd0b3RhbF9wYWdlcyddIDw9IDEgKSByZXR1cm47 CgoJcmV0dXJuIHN0cl9yZXBsYWNlKGFycmF5KCd7Y3VycmVudH0nLCAne3RvdGFsfScpLAoJ CWFycmF5KCRzb29faW1hZ2VbJ3RoaXNfcGFnZSddLCAkc29vX2ltYWdlWyd0b3RhbF9wYWdl cyddKSwgJGZvcm1hdCk7Cn0KCmZ1bmN0aW9uIHNvb19leGlmKCRhdHRzLCAkdGhpbmcpIHsK CglnbG9iYWwgJGRhdGVmb3JtYXQsICRzb29fZXhpZl9maWVsZCwgJHNvb19leGlmX3ZhbHVl OwoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknZmllbGQnCQk9PgknJywKCQknZm9ybWF0Jwk9 Pgkne2ZpZWxkfToge3ZhbHVlfScsCgkJJ3dyYXB0YWcnCT0+CScnLAoJCSdicmVhaycJCT0+ CScnLAoJKSwgJGF0dHMpKTsKCgkkZGlzcGxheSA9IGFycmF5KAoJCSdNb2RlbCcJCQkJCT0+ CSdDYW1lcmEnLAoJCSdFeHBvc3VyZVRpbWUnCQkJPT4JJ1NodXR0ZXIgc3BlZWQnLAoJCSdG TnVtYmVyJwkJCQk9PgknRi1zdG9wJywKCQknSVNPU3BlZWRSYXRpbmdzJwkJPT4JJ0lTTyBz cGVlZCcsCgkJJ0RhdGVUaW1lT3JpZ2luYWwnCQk9PgknRXhwb3N1cmUgZGF0ZScsCgkJJ0Zv Y2FsTGVuZ3RoJwkJCT0+CSdGb2NhbCBsZW5ndGgnLAoJCSdDcm9wRmFjdG9yJwkJCT0+CSdD cm9wIGZhY3RvcicsCgkJJ0ZPVicJCQkJCT0+CSdDb21wdXRlZCBGT1YnLAoJCSdJbWFnZUhp c3RvcnknCQkJPT4JJ0hpc3RvcnknLAoJCSk7CgoJJHNob3J0Y3V0cyA9IGFycmF5KAoJCSdt b2RlbCcJCQkJCT0+CSdNb2RlbCcsCgkJJ2V4cC10aW1lJwkJCQk9PgknRXhwb3N1cmVUaW1l JywKCQknZi1udW1iZXInCQkJCT0+CSdGTnVtYmVyJywKCQknaXNvLXNwZWVkJwkJCQk9Pgkn SVNPU3BlZWRSYXRpbmdzJywKCQknZGF0ZS10YWtlbicJCQk9PgknRGF0ZVRpbWVPcmlnaW5h bCcsCgkJJ2ZvY2FsLWxlbicJCQkJPT4JJ0ZvY2FsTGVuZ3RoJywKCQknY3JvcCcJCQkJCT0+ CSdDcm9wRmFjdG9yJywKCQknaGlzdG9yeScJCQkJPT4JJ0ltYWdlSGlzdG9yeScsCgkpOwoK CWlmICggZW1wdHkoJGZpZWxkKSApCgkJJGZpZWxkcyA9IGFycmF5X2tleXMoJGRpc3BsYXkp OwoKCWVsc2UgewoJCSRmaWVsZHMgPSBkb19saXN0KCRmaWVsZCk7CgkJZm9yZWFjaCAoICRm aWVsZHMgYXMgJGkgPT4gJGYgKQoJCQlpZiAoIGFycmF5X2tleV9leGlzdHMoc3RydG9sb3dl cigkZiksICRzaG9ydGN1dHMpICkKCQkJCSRmaWVsZHNbJGldID0gJHNob3J0Y3V0c1skZl07 Cgl9CgoJJGV4aWYgPSBleGlmX3JlYWRfZGF0YShfc29vX2ltYWdlX3BhdGgoKSk7CgoJZXh0 cmFjdCgkZXhpZik7CgoJaWYgKCBpc3NldCgkRk51bWJlcikgKQoJCSRleGlmWydGTnVtYmVy J10gPSAnJmZub2Y7LycgLiByb3VuZChfc29vX2ltYWdlX2NvbnZlcnRfcmF0aW8oJEZOdW1i ZXIpLCAxKTsKCglpZiAoIGlzc2V0KCRGb2NhbExlbmd0aCkgKQoJCSRleGlmWydGb2NhbExl bmd0aCddID0gX3Nvb19pbWFnZV9jb252ZXJ0X3JhdGlvKCRGb2NhbExlbmd0aCkgLiAnbW0n OwoKCWlmICggaXNzZXQoJEZvY2FsTGVuZ3RoSW4zNW1tRmlsbSkgKSB7CgkJJGZsMzUgPSBf c29vX2ltYWdlX2NvbnZlcnRfcmF0aW8oJEZvY2FsTGVuZ3RoSW4zNW1tRmlsbSk7CgkJaWYg KCBpc3NldCgkRm9jYWxMZW5ndGgpICkKCQkJJGV4aWZbJ0Nyb3BGYWN0b3InXSA9IHJvdW5k KCRmbDM1IC8gX3Nvb19pbWFnZV9jb252ZXJ0X3JhdGlvKCRGb2NhbExlbmd0aCksIDEpOwoJ CSRleGlmWydGb2NhbExlbmd0aEluMzVtbUZpbG0nXSA9ICRmbDM1IC4gJ21tJzsKCQkvLyA0 My4yNyBpcyB0aGUgZGlhZ29uYWwgbGVuZ3RoIChtbSkgb2YgYSBmdWxsLWZyYW1lIHNlbnNv cgoJCSRleGlmWydGT1YnXSA9IHJvdW5kKHJhZDJkZWcoMiAqIGF0YW4oNDMuMjcgLyAoIDIg KiAkZmwzNSApKSksIDEpIC4gJyZkZWc7JzsKCX0KCglpZiAoIGlzc2V0KCREYXRlVGltZU9y aWdpbmFsKSApCgkJJGV4aWZbJ0RhdGVUaW1lT3JpZ2luYWwnXSA9CgkJCXNhZmVfc3RyZnRp bWUoJGRhdGVmb3JtYXQsIHN0cnRvdGltZSgkRGF0ZVRpbWVPcmlnaW5hbCkpOwoKCWlmICgg c3RydG9sb3dlcigkZmllbGRzWzBdKSA9PSAnZHVtcCcgKQoJCSRmaWVsZHMgPSBhcnJheV9r ZXlzKCRleGlmKTsKCglmb3JlYWNoICggJGZpZWxkcyBhcyAkayApIHsKCQlpZiAoIGlzc2V0 KCRleGlmWyRrXSkgKSB7CgkJCSR2ID0gJGV4aWZbJGtdOwoJCQkkc29vX2V4aWZfZmllbGQg PSBpc3NldCgkZGlzcGxheVska10pID8gJGRpc3BsYXlbJGtdIDogJGs7CgkJCSRzb29fZXhp Zl92YWx1ZSA9IGlzX2FycmF5KCR2KSA/IGltcGxvZGUoJyAnLCAkdikgOiB0cmltKCR2KTsK CQkJJHJfZm9ybWF0ID0gc3RyX3JlcGxhY2UoJ3tmaWVsZH0nLCAkc29vX2V4aWZfZmllbGQs ICRmb3JtYXQpOwoJCQkkcl9mb3JtYXQgPSBzdHJfcmVwbGFjZSgne3ZhbHVlfScsICRzb29f ZXhpZl92YWx1ZSwgJHJfZm9ybWF0KTsKCQkJJG91dFtdID0gJHRoaW5nID8gcGFyc2UoJHRo aW5nKSA6ICRyX2Zvcm1hdDsKCQl9Cgl9CglyZXR1cm4gaXNzZXQoJG91dCkgPyBkb1dyYXAo JG91dCwgJHdyYXB0YWcsICRicmVhaykgOiAnJzsKfQoKZnVuY3Rpb24gc29vX2V4aWZfZmll bGQoJGF0dHMpIHsKCglnbG9iYWwgJHNvb19leGlmX2ZpZWxkOwoJZXh0cmFjdChsQXR0cyhh cnJheSgKCQknd3JhcHRhZycJPT4JJycsCgkpLCAkYXR0cykpOwoKCWlmICggJHNvb19leGlm X2ZpZWxkICkKCQlyZXR1cm4gZG9XcmFwKGFycmF5KCRzb29fZXhpZl9maWVsZCksICR3cmFw dGFnLCAnJyk7Cn0KCmZ1bmN0aW9uIHNvb19leGlmX3ZhbHVlKCRhdHRzKSB7CgoJZ2xvYmFs ICRzb29fZXhpZl92YWx1ZTsKCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJJ3dyYXB0YWcnCT0+ CScnLAoJKSwgJGF0dHMpKTsKCglpZiAoICRzb29fZXhpZl92YWx1ZSApIHsKCQlpZiAoICEg aXNfYXJyYXkoJHNvb19leGlmX3ZhbHVlKSApCgkJCSRzb29fZXhpZl92YWx1ZSA9IGFycmF5 KCRzb29fZXhpZl92YWx1ZSk7CgkJcmV0dXJuIGRvV3JhcCgkc29vX2V4aWZfdmFsdWUsICR3 cmFwdGFnLCAnJyk7Cgl9Cn0KCiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwogLy8JCQkJCQkJU3Vw cG9ydCBGdW5jdGlvbnMJCQkJCQkJLy8KLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vLwoKZnVuY3Rpb24g X3Nvb19pbWFnZV9wYXRoKCkgewoKCWdsb2JhbCAkaW1nX2RpcjsKCgkkaW1nX2Rpcl9wYXRo ID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvJGltZ19kaXIvIjsKCSRpbWFnZSA9 IF9zb29faW1hZ2VfYnlfY29udGV4dCgpOwoKCWlmICggJGltYWdlIGluc3RhbmNlb2Ygc29v X3R4cF9pbWcgKQoJCSRmaWxlX3BhdGggPSAkaW1nX2Rpcl9wYXRoIC4gJGltYWdlLT5pZCAu ICRpbWFnZS0+ZXh0OwoKCWVsc2VpZiAoICRpbWFnZSBpbnN0YW5jZW9mIHNvb19odG1sX2lt ZyApIHsKCQkkcGF0dGVybiA9ICcmXignIC4gc3RyX3JlcGxhY2UoJy4nLCAnXC4nLCBodSkg LiAifFwvKSgkaW1nX2Rpci4rKSYiOwoJCWlmICggcHJlZ19tYXRjaCgkcGF0dGVybiwgJGlt YWdlLT5zcmMsICRtYXRjaCkgKQoJCQkkZmlsZV9wYXRoID0gJG1hdGNoWzJdOwoJfQoKCWlm ICggZW1wdHkoJGZpbGVfcGF0aCkgb3IgISBmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSApCgkJ cmV0dXJuIG51bGw7CgoJcmV0dXJuICRmaWxlX3BhdGg7Cn0KCmZ1bmN0aW9uIF9zb29fYXJ0 aWNsZV9pbWFnZV9saXN0KCkgewoJZ2xvYmFsICR0aGlzYXJ0aWNsZTsKCXJldHVybiBlbXB0 eSgkdGhpc2FydGljbGVbJ2FydGljbGVfaW1hZ2UnXSkgPwoJCWFycmF5KCkgOiBfc29vX3Jh bmdlX3RvX2xpc3QoJHRoaXNhcnRpY2xlWydhcnRpY2xlX2ltYWdlJ10pOwp9CgpmdW5jdGlv biBfc29vX3JhbmdlX3RvX2xpc3QoICRjc3YgKSB7CgoJJGl0ZW1zID0gZG9fbGlzdCgkY3N2 KTsKCWZvcmVhY2ggKCAkaXRlbXMgYXMgJGl0ZW0gKQoJCWlmICggcHJlZ19tYXRjaCgnLyhc ZCspKDp8LSkoXGQrKS8nLCAkaXRlbSwgJG1hdGNoKSApIHsKCQkJaWYgKCAkbWF0Y2hbM10g PiAkbWF0Y2hbMV0gKQoJCQkJZm9yICggJGkgPSAkbWF0Y2hbMV07ICRpIDw9ICRtYXRjaFsz XTsgJGkrKyApCgkJCQkJJG91dFtdID0gJGk7CgkJCWVsc2UKCQkJCWZvciAoICRpID0gJG1h dGNoWzFdOyAkaSA+PSAkbWF0Y2hbM107ICRpLS0gKQoJCQkJCSRvdXRbXSA9ICRpOwoJCX0K CQllbHNlCgkJCSRvdXRbXSA9ICRpdGVtOwoJcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIF9z b29fdmFsaWRfZXh0KCAkaW4gKSB7Cgkkb2sgPSBhcnJheSgnanBnJywgJ2pwZWcnLCAnZ2lm JywgJ3BuZycsICdibXAnLAoJCScuanBnJywgJy5qcGVnJywgJy5naWYnLCAnLnBuZycsICcu Ym1wJyk7CgkkZXh0cyA9IGlzX2FycmF5KCRpbikgPyAkaW4gOiBkb19saXN0KCRpbik7Cglm b3JlYWNoICgkZXh0cyBhcyAkaSA9PiAkdmFsdWUpCgkJaWYgKCAhaW5fYXJyYXkoJHZhbHVl LCAkb2spICkKCQkJdW5zZXQoJGV4dHNbJGldKTsKCQllbHNlCgkJCSRleHRzWyRpXSA9ICcu JyAuICR2YWx1ZTsKCXJldHVybiAkZXh0czsKfQoKZnVuY3Rpb24gX3Nvb19pbWFnZV9jb252 ZXJ0X3JhdGlvKCAkciApIHsKCWlmICggaXNfbnVtZXJpYygkcikgKQoJCXJldHVybiAkcjsK CWlmICggISBwcmVnX21hdGNoKCcvKC4rKSg6fFwvKSguKykvJywgJHIsICRtYXRjaCkgKQoJ CXJldHVybiBudWxsOwoJaWYgKCBpc19udW1lcmljKCRtYXRjaFsxXSkgYW5kIGlzX251bWVy aWMoJG1hdGNoWzNdKSBhbmQgJG1hdGNoWzNdICE9IDAgKQoJCXJldHVybiAkbWF0Y2hbMV0g LyAkbWF0Y2hbM107CgllbHNlCgkJcmV0dXJuIG51bGw7Cn0KCmZ1bmN0aW9uIF9zb29faW1h Z2VfYXNwZWN0X3JhdGlvKCAkcXVlcnksICRhc3BlY3RfcmF0aW8gKSB7CgoJJGZ1ZGdlID0g MC4wMTsKCSRwYXR0ZXJuID0gJy9eKFwrfC0pPyhbXi1dKykoLSk/KC4rKT8kLyc7CglpZiAo ICEgcHJlZ19tYXRjaCgkcGF0dGVybiwgJGFzcGVjdF9yYXRpbywgJG1hdGNoKSApCgkJcmV0 dXJuOwoKCWlmICggJG1hdGNoWzFdID09ICcrJyApIHsKCQkkbWluX2FyID0gX3Nvb19pbWFn ZV9jb252ZXJ0X3JhdGlvKCRtYXRjaFsyXSk7CgkJaWYgKCBpc19udWxsKCRtaW5fYXIpICkK CQkJcmV0dXJuOwoJfQoJZWxzZWlmICggJG1hdGNoWzFdID09ICctJyApIHsKCQkkbWF4X2Fy ID0gX3Nvb19pbWFnZV9jb252ZXJ0X3JhdGlvKCRtYXRjaFsyXSk7CgkJaWYgKCBpc19udWxs KCRtYXhfYXIpICkKCQkJcmV0dXJuOwoJfQoKCWVsc2VpZiAoIGlzc2V0KCRtYXRjaFszXSkg KSB7CgkJJG1pbl9hciA9IF9zb29faW1hZ2VfY29udmVydF9yYXRpbygkbWF0Y2hbMl0pOwoJ CSRtYXhfYXIgPSBfc29vX2ltYWdlX2NvbnZlcnRfcmF0aW8oJG1hdGNoWzRdKTsKCQlpZiAo IGlzX251bGwoJG1pbl9hcikgb3IgaXNfbnVsbCgkbWF4X2FyKSApCgkJCXJldHVybjsKCQlp ZiAoICRtYXhfYXIgPCAkbWluX2FyICkKCQkJbGlzdCgkbWF4X2FyLCAkbWluX2FyKSA9IGFy cmF5KCRtaW5fYXIsICRtYXhfYXIpOwoJfQoJZWxzZSB7CgkJJGFyID0gX3Nvb19pbWFnZV9j b252ZXJ0X3JhdGlvKCRtYXRjaFsyXSk7CgkJaWYgKCBpc19udWxsKCRhcikgKQoJCQlyZXR1 cm47CgkJJHF1ZXJ5LT53aGVyZSgndy9oJywgJGFyICsgJGZ1ZGdlLCAnPCcpCgkJCS0+d2hl cmUoJ3cvaCcsICRhciAtICRmdWRnZSwgJz4nKTsKCQlyZXR1cm47Cgl9CglpZiAoIGlzc2V0 KCRtaW5fYXIpICkKCQkkcXVlcnktPndoZXJlKCd3L2gnLCAkbWluX2FyIC0gJGZ1ZGdlLCAn Pj0nKTsKCWlmICggaXNzZXQoJG1heF9hcikgKQoJCSRxdWVyeS0+d2hlcmUoJ3cvaCcsICRt YXhfYXIgKyAkZnVkZ2UsICc8PScpOwoKfQoKZnVuY3Rpb24gX3Nvb19pbWFnZV9ieV9jb250 ZXh0KCApIHsKLy8gUmV0dXJuIGEgc2luZ2xlIGltYWdlIG9iamVjdCAoVHhwIG9yIEh0bWwp IGZvciB0aGUgY3VycmVudCBpbWFnZSBjb250ZXh0LgoJLy8gSW1hZ2UgcGFzc2VkIGJ5IHBh cmVudCBzb29faW1hZ2Vfc2VsZWN0IHRhZywgb3I7CgkvLyBmaXJzdCBhcnRpY2xlIGltYWdl LCBvcjsKCS8vIGZpcnN0IHNlbGVjdGlvbiBmcm9tIHByZXZpb3VzIHNvb19pbWFnZV9zZWxl Y3QgdGFnIChzdWJqZWN0IHRvIHByZWZzKS4KLy8gUmV0dXJuIGZhbHNlIGlmIGltYWdlIGNv bnRleHQgaXMgZW1wdHkKCglnbG9iYWwgJHNvb19pbWFnZTsKCglpZiAoIGlzc2V0KCRzb29f aW1hZ2VbJ2RhdGFfb2JqJ10pICkKCQkkaW1nID0gJHNvb19pbWFnZVsnZGF0YV9vYmonXTsK CgllbHNlaWYgKCBpc3NldCgkc29vX2ltYWdlWyd1cmwnXSkgKQoJCSRpbWcgPSAkc29vX2lt YWdlWyd1cmwnXTsKCgllbHNlaWYgKCAkYXJ0aWNsZV9pbWFnZSA9IGFycmF5X3NoaWZ0KF9z b29fYXJ0aWNsZV9pbWFnZV9saXN0KCkpICkKCQkkaW1nID0gJGFydGljbGVfaW1hZ2U7CgoJ ZWxzZWlmICggISBlbXB0eSgkc29vX2ltYWdlWydmaXJzdF9zZWxlY3Rpb24nXSkgKQoJCSRp bWcgPSAkc29vX2ltYWdlWydmaXJzdF9zZWxlY3Rpb24nXTsKCglpZiAoIGVtcHR5KCRpbWcp ICkgcmV0dXJuIGZhbHNlOwoJaWYgKCBpc19vYmplY3QoJGltZykgKSByZXR1cm4gJGltZzsK CWlmICggaXNfbnVtZXJpYygkaW1nKSApIHJldHVybiBuZXcgc29vX3R4cF9pbWcoJGltZyk7 CglyZXR1cm4gbmV3IHNvb19odG1sX2ltZyhhcnJheSgnc3JjJyA9PiAkaW1nKSk7Cn0KIjtz OjQ6InR5cGUiO3M6MToiMSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjU6Im9yZGVyIjtzOjE6 IjUiO3M6MzoibWQ1IjtzOjMyOiJjZTkwOGYzNGZkMzkzYWFiNWY3NjhjMWFjNjA4NDcyNSI7 fQ==