# tru_tags v1.9 # Tagging support # Nathan Arthur # http://www.rainskit.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6MzoiMS45IjtzOjY6ImF1dGhvciI7czoxMzoiTmF0aGFu IEFydGh1ciI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3d3dy50cnVpc3QuY29t LyI7czoxMToiZGVzY3JpcHRpb24iO3M6MTU6IlRhZ2dpbmcgc3VwcG9ydCI7czo0OiJ0eXBl IjtpOjA7czo0OiJuYW1lIjtzOjg6InRydV90YWdzIjtzOjQ6ImhlbHAiO3M6MjM2Nzk6IgoJ PHA+VG8gbGVhcm4gbW9yZSBhYm91dCB0cnVfdGFncywgY2hlY2sgb3V0IHRoZSA8YSBocmVm PSIvYmxvZy80OTMvdHJ1dGFncy1hLXRhZ2dpbmctcGx1Z2luLWZvci10ZXh0cGF0dGVybiI+ aW50cm9kdWN0b3J5IGFydGljbGU8L2E+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnRydWlz dC5jb20vcmVmZXJlbmNlLzQ5NS90cnV0YWdzLWZlYXR1cmUtbGlzdCI+ZmVhdHVyZSBsaXN0 PC9hPi48L3A+Cgk8aDM+Q29uZmlndXJhdGlvbjwvaDM+Cgk8aDQ+U3RlcCAxOiBDcmVhdGUg YSBuZXcgc2VjdGlvbjwvaDQ+Cgk8cD50cnVfdGFncyBkZXBlbmRzIG9uIHRoZSBleGlzdGVu Y2Ugb2YgYSBzcGVjaWFsIFRleHRwYXR0ZXJuIHNlY3Rpb24gbmFtZWQgJiM4MjIwO3RhZywm IzgyMjE7IGJ5IGRlZmF1bHQ8c3VwPjxhIGhyZWY9IiNmbjY0NTQyOTM0MzQ0ZjI2Y2E5ZThl OGMiPjE8L2E+PC9zdXA+LiAgQ3JlYXRlIHRoYXQgc2VjdGlvbiwgdXNpbmcgd2hhdGV2ZXIg c2V0dGluZ3MgeW91IGxpa2UuICAoWW91IHdvbiYjODIxNzt0IGJlIHB1Ymxpc2hpbmcgYXJ0 aWNsZXMgdG8gdGhhdCBzZWN0aW9uLikgIEhlcmUmIzgyMTc7cyB3aGF0IEkgdXNlPHN1cD48 YSBocmVmPSIjZm43ODMyOTQ2Mzk0NGYyNmNhOWVkY2I1Ij4yPC9hPjwvc3VwPjo8L3A+Cgk8 cD48aW1nIHNyYz0iaHR0cDovL3d3dy50cnVpc3QuY29tL2ltYWdlcy8yLnBuZyIgaGVpZ2h0 PSIyODAiIHdpZHRoPSIzOTgiIGFsdD0idGFnIHNlY3Rpb24gY29uZmlndXJhdGlvbiIgY2xh c3M9ImRpYWdyYW0iIC8+PC9wPgoJPHAgY2xhc3M9ImZvb3Rub3RlIiBpZD0iZm42NDU0Mjkz NDM0NGYyNmNhOWU4ZThjIj48c3VwPjE8L3N1cD4gWW91IGNhbiB1c2UgYSBkaWZmZXJlbnQg bmFtZSwgYnV0IHlvdSBoYXZlIHRvIHVzZSBhIHNwZWNpYWwgYXR0cmlidXRlIGluIHNvbWUg b2YgdGhlIHBsdWdpbiBjYWxscyB0byBtYWtlICBldmVyeXRoaW5nIHdvcmsgY29ycmVjdGx5 LiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLjwvcD4KCTxwIGNsYXNzPSJmb290bm90ZSIgaWQ9 ImZuNzgzMjk0NjM5NDRmMjZjYTllZGNiNSI+PHN1cD4yPC9zdXA+IE5vdGUgdGhhdCBJIHVz ZSB0aGUgJiM4MjE2O2RlZmF1bHQmIzgyMTc7IHBhZ2UgJiM4MjExOyB0aGF0IGNob2ljZSBt YXkgbm90IGJlIHJpZ2h0IGZvciB5b3UuICBUaGlzIHNlY3Rpb24gd2lsbCBiZSBzaG93biB3 aGVuZXZlciB5b3UgY2xpY2sgb24gYSB0YWcsIHRvIGRpc3BsYXkgdGhlIHRhZyBzZWFyY2gg cmVzdWx0cy4gIFlvdSYjODIxNztsbCB3YW50IGEgcGFnZSB0aGF0IGhhcyB0aGUgY29ycmVj dCBsYXlvdXQvaGVhZGVycy9mb290ZXJzLiAgSSB1c2UgbXkgZGVmYXVsdCBwYWdlLCB3aXRo IDxjb2RlPiZsdDt0eHA6aWZfc2VjdGlvbiBuYW1lPSJ0YWciJmd0OzwvY29kZT4gdG8gY2hh bmdlIHRoZSBwYWdlIGRpc3BsYXkgaW4gdGhpcyBjYXNlLjwvcD4KCTxoND5TdGVwIDI6IENh bGwgdGhlIHBsdWdpbiBmcm9tIHRoYXQgc2VjdGlvbjwvaDQ+Cgk8cD5UbyBtYWtlIHRhZyBz ZWFyY2hpbmcgYW5kIHRoZSBkZWZhdWx0IHRhZyBjbG91ZCB3b3JrLCB5b3UmIzgyMTc7bGwg bmVlZCB0byBjYWxsIDxjb2RlPiZsdDt0eHA6dHJ1X3RhZ3NfaGFuZGxlciAvJmd0OzwvY29k ZT4gZnJvbSB0aGUgcGFnZSB5b3UgY2hvc2UgaW4gU3RlcCAxLiAgSSByZXBsYWNlZCB0aGUg ZGVmYXVsdCA8Y29kZT4mbHQ7dHhwOmFydGljbGUgLyZndDs8L2NvZGU+IHdpdGggc29tZXRo aW5nIGxpa2UgdGhpczo8L3A+CjxwcmU+Jmx0O3R4cDppZl9zZWN0aW9uIG5hbWU9InRhZyIm Z3Q7CiAgJmx0O3R4cDp0cnVfdGFnc19oYW5kbGVyIC8mZ3Q7CiZsdDt0eHA6ZWxzZSAvJmd0 OwogICZsdDt0eHA6YXJ0aWNsZSAvJmd0OwombHQ7L3R4cDppZl9zZWN0aW9uJmd0OzwvcHJl PgoJPGg0PlN0ZXAgMzogQ29uZmlndXJlIHlvdXIgYXJ0aWNsZSBmb3JtIHRvIGRpc3BsYXkg dGFnczwvaDQ+Cgk8cD5UbyBtYWtlIGVhY2ggYXJ0aWNsZSBzaG93IGEgbGlzdCBvZiBhbGwg dGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIGl0LCBwdXQgc29tZXRpbmcgbGlrZSB0aGlzIGlu IHlvdXIgYXJ0aWNsZSBmb3JtOjwvcD4KPHByZT4mbHQ7dHhwOnRydV90YWdzX2lmX2hhc190 YWdzJmd0OwogIHRhZ3M6ICZsdDt0eHA6dHJ1X3RhZ3NfZnJvbV9hcnRpY2xlIC8mZ3Q7CiZs dDsvdHhwOnRydV90YWdzX2lmX2hhc190YWdzJmd0OzwvcHJlPgoJPGg0PlN0ZXAgNDogRHJv cCBhIGN1c3RvbSB0YWcgY2xvdWQgc29tZXdoZXJlLCBpZiB5b3Ugd2FudDwvaDQ+Cgk8cD5J ZiB5b3UmIzgyMTc7ZCBsaWtlIHRvIHNob3cgYSB0YWcgY2xvdWQgc29tZXdoZXJlIG9uIHlv dXIgc2l0ZSAob3RoZXIgdGhhbiA8Y29kZT4vdGFnLzwvY29kZT4pLCBwdXQgc29tZXRoaW5n IGxpa2UgdGhpcyBpbiB0aGF0IHBhZ2U6PC9wPgo8cHJlPiZsdDt0eHA6dHJ1X3RhZ3NfY2xv dWQgLyZndDs8L3ByZT4KCTxwPlNlZSBiZWxvdyBmb3IgbG90cyBvZiBmb3JtYXR0aW5nIG9w dGlvbnMsIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byBvdXRwdXQgYSBzaW1wbGUgbGlzdCBp bnN0ZWFkIG9mIGEgY2xvdWQgKHVzaW5nIDxjb2RlPnRydV90YWdzX2xpc3Q8L2NvZGU+KS48 L3A+Cgk8aDQ+U3RlcCA1OiBTdGFydCB0YWdnaW5nITwvaDQ+Cgk8cD5XaGVuZXZlciB5b3Ug d3JpdGUgYW4gYXJ0aWNsZSwgcHV0IHlvdXIgdGFncyBpbnRvIHRoZSBLZXl3b3JkcyBmaWVs ZCBpbiBUZXh0cGF0dGVybi4gIChUaGUgS2V5d29yZHMgZmllbGQgaGlkZXMgYmVoaW5kIHRo ZSAmIzgyMjA7QWR2YW5jZWQgT3B0aW9ucyYjODIyMTsgbGluayBvbiB0aGUgbGVmdCBzaWRl IG9mIHRoZSAmIzgyMjA7d3JpdGUmIzgyMjE7IHBhZ2UuKSAgVGFncyBzaG91bGQgYmUgc2Vw YXJhdGVkIGJ5IGNvbW1hcywgYW5kIGNhbiBoYXZlIHNwYWNlczxzdXA+PGEgaHJlZj0iI2Zu NjQ1NDI5MzQzNDRmMjZjYTllOGU4YyI+MTwvYT48L3N1cD4uPC9wPgoJPHA+WW91JiM4MjE3 O2xsIHByb2JhYmx5IHdhbnQgdG8gaW5zdGFsbCBSb2IgU2FibGUmIzgyMTc7cyA8YSBocmVm PSJodHRwOi8vd3d3LndpbHNoaXJlb25lLmNvbS90ZXh0cGF0dGVybi1wbHVnaW5zL3Jzcy1h ZG1pbi1zaG93LWFkdi1vcHRzIj5yc3NfYWRtaW5fc2hvd19hZHZfb3B0czwvYT4sIHdoaWNo IHdpbGwgYXV0b21hdGljYWxseSBleHBhbmQgdGhlICYjODIyMDtBZHZhbmNlZCBPcHRpb25z JiM4MjIxOyBzZWN0aW9uIG9mIHRoZSAmIzgyMjA7d3JpdGUmIzgyMjE7IHBhZ2UsIHdoZW4g eW91IGFyZSB3cml0aW5nIGFydGljbGVzLiAgVGhhdCBnaXZlcyB5b3UgZWFzeSBhY2Nlc3Mg dG8gdGhlIEtleXdvcmRzIGZpZWxkLjwvcD4KCTxwIGNsYXNzPSJmb290bm90ZSIgaWQ9ImZu NjQ1NDI5MzQzNDRmMjZjYTllOGU4YyI+PHN1cD4xPC9zdXA+IFRhZ3Mgd2l0aCBzcGFjZXMg d2lsbCBnZW5lcmF0ZSB1cmxzIHdpdGggZGFzaGVzLCB3aGljaCB3aWxsIHdvcmsgY29ycmVj dGx5LiAgVGFncyB3aXRoIGRhc2hlcyB3aWxsIGFsc28gd29yayBjb3JyZWN0bHkuPC9wPgoJ PGg0PlN0ZXAgNjogRmFuY3kgZGlzcGxheSBjdXN0b21pemF0aW9uIChPcHRpb25hbCk8L2g0 PgoJPHA+WW91IGNhbiB1c2UgPGNvZGU+dHJ1X3RhZ3NfaWZfdGFnX3NlYXJjaDwvY29kZT4s IDxjb2RlPnRydV90YWdzX3RhZ19wYXJhbWV0ZXI8L2NvZGU+LCBhbmQgPGNvZGU+dHJ1X3Rh Z3Nfc2VhcmNoX3BhcmFtZXRlcjwvY29kZT4gdG8gY3VzdG9taXplIHlvdXIgcGFnZSB0aXRs ZXMgb3IgdGFnIHNlYXJjaCByZXN1bHRzLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLiAgRm9y IGFuIGV4YW1wbGUsIGRvIGEgdGFnIHNlYXJjaCBvbiB0aGlzIHNpdGUgYW5kIGxvb2sgYXQg dGhlIHRpdGxlYmFyLjwvcD4KCTxwPklmIHlvdSBkb24mIzgyMTc7dCBsaWtlIHRoZSBmYWN0 IHRoYXQgYWxsIHRhZ3MgYXJlIHNob3duIGluIGxvd2VyY2FzZSB5b3UgY2FuIHVzZSA8Y29k ZT4udGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemUuPC9jb2RlPiBpbiB5b3VyIENTUyBzdHls ZXNoZWV0LCBpbiBjb25qdW5jdGlvbiB3aXRoIGFuIGFwcHJvcHJpYXRlIDxjb2RlPmNsYXNz PC9jb2RlPiBhdHRyaWJ1dGUgb24geW91ciA8Y29kZT50cnVfdGFnc19jbG91ZDwvY29kZT4g Y2FsbCwgdG8gY2FwaXRhbGl6ZSB0aGUgdGFncy48L3A+Cgk8aDQ+U3RlcCA3OiBUdXJuIG9u IGNsZWFuIHVybHMgKE9wdGlvbmFsKTwvaDQ+Cgk8cD5DbGVhbiB1cmxzIGFyZSBub3cgcG9z c2libGUgd2l0aCB0cnVfdGFncywgcHJvdmlkZWQgdGhhdCB5b3UgYXJlIHdpbGxpbmcgdG8g bW9kaWZ5IFRleHRwYXR0ZXJuJiM4MjE3O3MgcmV3cml0ZSBydWxlcyAoaW4gdGhlIC5odGFj Y2VzcyBmaWxlKS4gIEJ1dCBiZSB3YXJuZWQgJiM4MjExOyByZXdyaXRlIHJ1bGVzIGFyZSBj b21wbGV4LiAgSSBtYWtlIG5vIGd1YXJhbnRlZXMgdGhhdCB0aGlzIHdvbiYjODIxNzt0IGVh dCB5b3VyIGNoaWxkcmVuLiAgPHN0cm9uZz5Zb3UgZG9uJiM4MjE3O3QgaGF2ZSB0byBkbyB0 aGlzPC9zdHJvbmc+IGJ1dCBhIGxvdCBvZiBwZW9wbGUgd2FudCBpdC4gIFRoaXMgc2l0ZSB1 c2VzIGl0LCBpZiB0aGF0IGhlbHBzLjwvcD4KCTxwPlRoZXNlIGluc3RydWN0aW9ucyBhcmUg Zm9yIGFwYWNoZSAyLjAgb24gdW5peC9saW51eCB3aXRoIHRleHRwYXR0ZXJuIGluc3RhbGxl ZCBhdCB0aGUgcm9vdCBvZiB5b3VyIHNpdGUuICBTZWUgPGEgaHJlZj0iaHR0cDovL2ZvcnVt LnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0xMDM4MjMjcDEwMzgyMyI+dGhp cyBmb3J1bSBwb3N0PC9hPiBmb3IgZGV0YWlscyBvbiBjbGVhbiB1cmxzIHdpdGggbGlnaHR0 cGQuICBBbGwgb3RoZXIgcGxhdGZvcm1zL3NlcnZlcnMvY29uZmlndXJhdGlvbnMgYXJlIHVu dGVzdGVkIChieSBtZSkuPC9wPgoJPHA+SGVyZSYjODIxNztzIHdoYXQgdG8gZG86PC9wPgoJ PG9sPgoJCTxsaT5BZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBUZXh0cGF0dGVybiYjODIx NztzIC5odGFjY2VzcyBmaWxlIChmb3VuZCBpbiB0aGUgcm9vdCBvZiB5b3VyIFRleHRwYXR0 ZXJuIGRpcmVjdG9yeSksIGFkanVzdGluZyB0aGVtIGlmIG5lY2Vzc2FyeS4gIFRoZXNlIGxp bmVzIHNob3VsZCBiZSA8c3Ryb25nPmFmdGVyPC9zdHJvbmc+IHRoZTwvbGk+Cgk8L29sPgoJ PHA+PGRpdiBjbGFzcz0icHJlIj48L3A+Cgk8cD5SZXdyaXRlUnVsZSAmIzk0OyguJiM0Mzsp ICYjNDU7IFtQVCxMXTwvcD4KCTxwPjwvZGl2PjwvcD4KCTxwPmFuZCA8c3Ryb25nPmJlZm9y ZTwvc3Ryb25nPiB0aGU8L3A+Cgk8cD48ZGl2IGNsYXNzPSJwcmUiPjwvcD4KCTxwPlJld3Jp dGVSdWxlICYjOTQ7KC4mIzQyOykgaW5kZXgucGhwPC9wPgoJPHA+PC9kaXY+PC9wPgoJPHA+ SGVyZSYjODIxNztzIHRoZSBiaXQgdG8gaW5zZXJ0ICh3aGljaCB5b3UgbWF5IG5lZWQgdG8g Y3VzdG9taXplIGZvciB5b3VyIHNpdGUpOjwvcD4KCTxwPjxkaXYgY2xhc3M9InByZSI+PC9w PgoJPHA+I1RoaXMgcGF0aCBzaG91bGQgbWF0Y2ggdGhlIHJlbGF0aXZlIHVybCBvZiB5b3Vy IFRleHRwYXR0ZXJuIGluc3RhbGw8YnIgLz4KUmV3cml0ZUJhc2UgLzxiciAvPgojSWYgeW91 J3JlIHVzaW5nIGEgc2VjdGlvbiBvdGhlciB0aGFuICYjMzQ7dGFnJiMzNDssIGNoYW5nZSB0 aGUgZm9sbG93aW5nIHR3byBydWxlcyBhY2NvcmRpbmdseTxiciAvPgpSZXdyaXRlUnVsZSAm Izk0O3RhZy8oWyYjOTQ7L10mIzQzOykkIHRhZy8kMS8gW1IsTF08YnIgLz4KUmV3cml0ZVJ1 bGUgJiM5NDt0YWcvKC4mIzQzOykvJCAmIzYzO3MmIzYxO3RhZyZhbXA7dCYjNjE7JDE8L3A+ Cgk8cD48L2Rpdj48L3A+Cgk8b2w+CgkJPGxpPjxzdHJvbmc+Q2hlY2sgdG8gbWFrZSBzdXJl IHlvdXIgc2l0ZSBpcyBzdGlsbCB3b3JraW5nLjwvc3Ryb25nPjwvbGk+CgkJPGxpPkVkaXQg dGhlIHRydV90YWdzIHBsdWdpbiAoYWRtaW4gLT4gcGx1Z2lucywgY2xpY2sgJiM4MjE2O0Vk aXQmIzgyMTc7KSBhbmQgY2hhbmdlIHRoZSA8Y29kZT50cnVfdGFnc191c2VfY2xlYW5fdXJs cygpPC9jb2RlPiBmdW5jdGlvbiB0byByZXR1cm4gPGNvZGU+MTwvY29kZT4uICAoSXQmIzgy MTc7cyB0aGUgZmlyc3QgZnVuY3Rpb24uKQoJPG9sPgoJCTxsaT5JZiB5b3UmIzgyMTc7cmUg cGxhbm5pbmcgb24gdXNpbmcgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIChsaWtlICYj ODIxNzsrJiM4MjE3OykgaW4geW91ciB0YWcgbmFtZXMsIGFuZCB5b3UmIzgyMTc7cmUgdXNp bmcgYXBhY2hlIDIsIHRoZW4geW91IGFsc28gbmVlZCB0byBtYWtlIDxjb2RlPnRydV90YWdz X2RvdWJsZV91cmxlbmNvZGUoKTwvY29kZT4gcmV0dXJuIDxjb2RlPjE8L2NvZGU+LiAgVGhp cyB3b3JrcyBhcm91bmQgYSBidWcgaW4gYXBhY2hlIGFuZCBtb2RfcmV3cml0ZS48L2xpPgoJ PC9vbD48L2xpPgoJCTxsaT5DbGVhbiB1cmxzIHNob3VsZCBiZSB3b3JraW5nIG5vdy4gIFRy eSBjbGlja2luZyBhIHRhZyBsaW5rIHRvIHNlZSB3aGF0IHVybCBpdCByZWZlcmVuY2VzLjwv bGk+CgkJPGxpPkJ5IGRlZmF1bHQsIGFydGljbGUgdGFncyB3aWxsIHNldCB0aGUgPGNvZGU+ cmVsPSJ0YWciPC9jb2RlPiBhdHRyaWJ1dGUsIGFuZCB0aGUgdGFnIGNsb3VkIChvciBsaXN0 KSB3b24mIzgyMTc7dC4gIFRoaXMgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0aGUgPGNvZGU+ dXNlcmVsdGFnPC9jb2RlPiBhdHRyaWJ1dGU7IHNlZSBiZWxvdyBmb3IgZGV0YWlscy48L2xp PgoJPC9vbD4KCTxoND5TdGVwIDg6IFNob3cgYSAmIzgyMjA7cmVsYXRlZCB0YWdzJiM4MjIx OyBjbG91ZCAoT3B0aW9uYWwpPC9oND4KCTxwPnYxLjggKGFuZCBiZXlvbmQpIG9mIHRydV90 YWdzIGhhcyBhIGZlYXR1cmUgdGhhdCBsZXRzIHlvdSBzaG93IGEgY2xvdWQgb2YgdGFncyB0 aGF0IGFyZSByZWxhdGVkIHRvIHRoZSB0YWdzIHVzZWQgaW4gYXJ0aWNsZXMgdGhhdCBhcmUg Zm91bmQgYnkgYSB0YWcgc2VhcmNoLjwvcD4KCTxwPkdvdCB0aGF0PzwvcD4KCTxwPlRvIHNl ZSBhbiBleGFtcGxlLCBkbyBhIHRhZyBzZWFyY2ggb24gdGhpcyBzaXRlIChjbGljayBhIGxp bmsgaW4gdGhlIHRhZyBjbG91ZCkuICBXaGVuIHRoZSBzZWFyY2ggcmVzdWx0cyBjb21lIHVw IHRoZSBzaWRlYmFyIHdpbGwgaGF2ZSBhIG5ldyBzZWN0aW9uIGluIGl0IGNhbGxlZCAmIzgy MjA7UmVsYXRlZCBUYWdzJiM4MjIxOy4gIFRoZSBjbG91ZCBpbiB0aGF0IHNlY3Rpb24gY29u dGFpbnMgYWxsIHRoZSB0YWdzIHVzZWQgYnkgYWxsIHRoZSBhcnRpY2xlcyBpbiB0aGUgc2Vh cmNoIHJlc3VsdC4gIEl0JiM4MjE3O3MgYSB3YXkgdG8gc2F5ICYjODIyMDt0aGVzZSBvdGhl ciB0YWdzIG1heSBiZSBzaW1pbGFyIHRvIHRoZSB0YWcgeW91IGp1c3Qgc2VhcmNoZWQmIzgy MjE7LjwvcD4KCTxwPjxzdHJvbmc+QmVmb3JlIHlvdSB1c2UgdGhpcyBvbiB5b3VyIHNpdGUs IGhvd2V2ZXIsPC9zdHJvbmc+IHlvdSBzaG91bGQgcmVhZCB0aGUgZGV0YWlsZWQgaW5zdHJ1 Y3Rpb25zIGNhcmVmdWxseS4gIFRoaXMgdGFnIGNhbiBoYXZlIHNpZ25pZmljYW50IHBlcmZv cm1hbmNlIGltcGxpY2F0aW9ucyBmb3IgeW91ciBzaXRlLCB3aGljaCB5b3VyIGhvc3Rpbmcg cHJvdmlkZXIgbWlnaHQgbm90IGJlIHZlcnkgaGFwcHkgYWJvdXQuPC9wPgoJPHA+VG8gdXNl IGl0IGFueXdheSwgcHV0IHNvbWV0aGluZyBsaWtlIHRoaXMgaW50byB0aGUgYXBwcm9wcmlh dGUgcGFnZTo8L3A+CjxwcmU+Jmx0O3R4cDp0cnVfdGFnc19pZl90YWdfc2VhcmNoJmd0Owom bHQ7dHhwOnRydV90YWdzX3JlbGF0ZWRfdGFnc19mcm9tX3NlYXJjaCBzZWN0aW9uPSJibG9n LHJlZmVyZW5jZSIgdXNlb3ZlcmFsbGNvdW50cz0iMSIgLyZndDsKJmx0Oy90eHA6dHJ1X3Rh Z3NfaWZfdGFnX3NlYXJjaCZndDs8L3ByZT4KCTxwPklmIHlvdSB1c2UgdGhlIDxjb2RlPnNl Y3Rpb248L2NvZGU+IGF0dHJpYnV0ZSBpbiB5b3VyIG1haW4gdGFnIGNsb3VkIHlvdSBzaG91 bGQgYWxzbyB1c2UgaXQgaGVyZS4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3Ig YW4gZXhwbGFuYXRpb24gb2Ygd2h5LjwvcD4KCTxwPlRoZSA8Y29kZT51c2Vyb3ZlcmFsbGNv dW50czwvY29kZT4gYXR0cmlidXRlIGNhdXNlcyB0aGUgY2xvdWQgdG8gc2l6ZSB0aGUgbGlu a3MgYWNjb3JkaW5nIHRvIGhvdyBsYXJnZSB0aGV5IHdvdWxkIGJlIGluIHRoZSBtYWluIGNs b3VkLiAgVGhhdCYjODIxNztzIHByb2JhYmx5IHdoYXQgeW91IHdhbnQsIGJ1dCBpdCBjYXVz ZXMgZXZlbiBtb3JlIHBlcmZvcm1hbmNlIHNsb3dkb3duLiAgU2VlIHRoZSBkb2N1bWVudGF0 aW9uIGJlbG93IGZvciBhbGwgdGhlIGRldGFpbHMuPC9wPgoJPGgzPlRhZyByZWZlcmVuY2U8 L2gzPgoJPGg0Pjxjb2RlPnRydV90YWdzX2hhbmRsZXI8L2NvZGU+PC9oND4KCTxwPlRoaXMg aXMgdGhlIG1haW4gZnVuY3Rpb24gdGhhdCBkcml2ZXMgdGFnIHNlYXJjaCBhbmQgc2hvd3Mg dGhlIGdlbmVyaWMgdGFnIGNsb3VkLiAgSXQgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBw YWdlIHRoYXQgaXMgdXNlZCBpbiB0aGUgJiM4MjE2O3RhZyYjODIxNzsgc2VjdGlvbi4gIEl0 IGdlbmVyYWxseSBjYWxscyA8Y29kZT5kb0FydGljbGVzKCk8L2NvZGU+IChpbiB0aGUgVGV4 dHBhdHRlcm4gY29kZSkgdG8gZGlzcGxheSB0YWcgc2VhcmNoIHJlc3VsdHMsIGJ1dCBpZiBu byB0YWcgd2FzIHBhc3NlZCBpbiB0aGUgdXJsIGl0IHdpbGwgY2FsbCA8Y29kZT50cnVfdGFn c19jbG91ZDwvY29kZT4gaW5zdGVhZC48L3A+Cgk8cD5UaGlzIHRhZyBhY2NlcHRzIG1vc3Qg b2YgdGhlIHN0YW5kYXJkIDxjb2RlPnR4cDphcnRpY2xlPC9jb2RlPiBhdHRyaWJ1dGVzLCB3 aGljaCB3aWxsIGJlIGFwcGxpZWQgZHVyaW5nIHRoZSB0YWcgc2VhcmNoLiAgTm90ZSB0aGF0 IDxjb2RlPnRydV90YWdzX2hhbmRsZXI8L2NvZGU+IDxzdHJvbmc+ZG9lcyBub3Q8L3N0cm9u Zz4gc3VwcG9ydCB1c2luZyBtdWx0aXBsZSBzZWN0aW9ucyB3aXRoIHRoZSA8Y29kZT5zZWN0 aW9uPC9jb2RlPiBhdHRyaWJ1dGUsIHdoZW4gZG9pbmcgYSB0YWcgc2VhcmNoLiAgSWYgbXVs dGlwbGUgc2VjdGlvbnMgYXJlIHBhc3NlZCwgbm9uZSBhcmUgdXNlZC48L3A+Cgk8cD48c3Ry b25nPk5vdGU6PC9zdHJvbmc+IEluIFRleHRwYXR0ZXJuLCB0aGUgPGNvZGU+bGltaXQ8L2Nv ZGU+IGF0dHJpYnV0ZSBpcyBkZWZhdWx0ZWQgdG8gPGNvZGU+MTA8L2NvZGU+LCB0byBsaW1p dCB0aGUgb3V0cHV0IHRvIDEwIGFydGljbGVzIHBlciBwYWdlLCBhbmQgdGhlIDxjb2RlPnR4 cDpvbGRlcjwvY29kZT4gYW5kIDxjb2RlPnR4cDpuZXdlcjwvY29kZT4gdGFncyBhcmUgdXNl ZCB0byBwYWdpbmF0ZSB0aGUgZnVsbCBsaXN0LiAgVGhlIDxjb2RlPnR4cDpvbGRlcjwvY29k ZT4gYW5kIDxjb2RlPnR4cDpuZXdlcjwvY29kZT4gdGFncyBkbyBub3Qgd29yayB3aXRoIHRy dV90YWdzLCBidXQgdGhlIDxjb2RlPmxpbWl0PC9jb2RlPiBpcyBzdGlsbCB1c2VkIGJ5IFRl eHRwYXR0ZXJuIHdoZW4gaXQgb3V0cHV0cyB0aGUgYXJ0aWNsZXMuICBUaGVyZWZvcmUsIHRy dV90YWdzIHVzZXMgYSBkZWZhdWx0IGxpbWl0IG9mIDxjb2RlPjEwMDA8L2NvZGU+IHdoZW4g ZG9pbmcgYW4gYXJ0aWNsZSBzZWFyY2guICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgbGltaXQg Ynkgc2V0dGluZyB0aGUgPGNvZGU+bGltaXQ8L2NvZGU+IGF0dHJpYnV0ZSBvbiA8Y29kZT50 cnVfdGFnc19oYW5kbGVyPC9jb2RlPi48L3A+Cgk8cD5UaGlzIHRhZyB3aWxsIGFsc28gYWNj ZXB0IGFsbCBvZiB0aGUgYXR0cmlidXRlcyB1c2VkIGJ5IDxjb2RlPnRydV90YWdfY2xvdWQ8 L2NvZGU+LiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLjwvcD4KCTxoND48Y29kZT50cnVfdGFn c19pZl9oYXNfdGFnczwvY29kZT48L2g0PgoJPHA+VGhpcyBjb25kaXRpb25hbCB0YWcgY2Fu IGJlIHVzZWQgaW4gYW4gYXJ0aWNsZSBmb3JtLCBhbmQgd2lsbCBldmFsdWF0ZSBpdHMgY29u dGVudHMgKGUuZy4gJiM4MjIwO3JldHVybiB0cnVlJiM4MjIxOykgaWYgdGhlIGN1cnJlbnQg YXJ0aWNsZSBoYXMgdGFncy48L3A+Cgk8aDQ+PGNvZGU+dHJ1X3RhZ3NfZnJvbV9hcnRpY2xl PC9jb2RlPjwvaDQ+Cgk8cD5UaGlzIHRhZyBjYW4gYmUgdXNlZCBpbiBhbiBhcnRpY2xlIGZv cm0gdG8gcmV0dXJuIGEgbGlzdCBvZiB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVu dCBhcnRpY2xlLiAgVHlwaWNhbGx5IChzZWUgYmVsb3cpLCBlYWNoIHRhZyBpbiB0aGUgbGlz dCB3aWxsIGJlIGEgbGluayAoPGNvZGU+Jmx0O2EgaHJlZj0uLi4mZ3Q7PC9jb2RlPikgdG8g dGhlIHRhZyBzZWFyY2ggdXJsIGZvciB0aGF0IHBhcnRpY3VsYXIgdGFnLjwvcD4KCTxwPlRo aXMgdGFnIGFjY2VwdHMgdGhlIHN0YW5kYXJkIDxjb2RlPndyYXB0YWc8L2NvZGU+LCA8Y29k ZT5icmVhazwvY29kZT4sIDxjb2RlPmNsYXNzPC9jb2RlPiwgYW5kIDxjb2RlPmJyZWFrY2xh c3M8L2NvZGU+IGF0dHJpYnV0ZXM8c3VwPjxhIGhyZWY9IiNmbjY0NTQyOTM0MzQ0ZjI2Y2E5 ZThlOGMiPjE8L2E+PC9zdXA+LjwvcD4KCTxwPklmIHlvdSBkb24mIzgyMTc7dCB3YW50IHRv IGhhdmUgdGhlIHRhZ3MgYmUgbGlua3MsIHlvdSBjYW4gc2V0IDxjb2RlPmdlbmVyYXRlbGlu a3M9IjAiPC9jb2RlPiB0byB0dXJuIHRoZSBsaW5rcyBvZmYuPC9wPgoJPHA+SWYgeW91IG5h bWVkIHlvdXIgJiM4MjE2O3RhZyYjODIxNzsgc2VjdGlvbiBzb21ldGhpbmcgb3RoZXIgdGhh biAmIzgyMjA7dGFnJiM4MjIxOywgc2V0IDxjb2RlPnRhZ3NlY3Rpb248L2NvZGU+IHRvIHRo ZSBuYW1lIG9mIHRoYXQgc2VjdGlvbi4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgc2V0IHRvIDxj b2RlPnRhZzwvY29kZT4uPC9wPgoJPHA+VGhlIDxjb2RlPnRpdGxlPC9jb2RlPiBhdHRyaWJ1 dGUgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSB0b29sdGlwIGZvciB0aGUgdGFncy48L3A+Cgk8 cD5JZiB5b3UgaGF2ZSBjbGVhbiB1cmxzIHR1cm5lZCBvbiAoc2VlIGFib3ZlKSwgeW91IGNh biB1c2UgdGhlIDxjb2RlPnVzZXJlbHRhZ3M8L2NvZGU+IGF0dHJpYnV0ZSB0byBzcGVjaWZ5 IHdoZXRoZXIgbGlua3MgaW4gdGhlIGxpc3Qgc2hvdWxkIGhhdmUgdGhlIDxhIGhyZWY9Imh0 dHA6Ly9taWNyb2Zvcm1hdHMub3JnL3dpa2kvcmVsdGFnIj48Y29kZT5yZWw9InRhZyI8L2Nv ZGU+PC9hPiAgKHVzZWQgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy50ZWNobm9yYXRpLmNvbS8i PlRlY2hub3JhdGk8L2E+KSBhdHRyaWJ1dGUgc2V0LiAgTm90ZSB0aGF0IHRoaXMgd29uJiM4 MjE3O3Qgd29yayBpZiB5b3UgdHVybiBvZmYgbGlua3MuICBBbHNvIG5vdGUgdGhhdCB0YWdz IGRvbiYjODIxNzt0IHNob3cgdXAgaW4gdGhlIFJTUy9BdG9tIGZlZWRzLCB1bmxlc3MgeW91 IDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9w aWQ9NDA5MDcjcDQwOTA3Ij5oYWNrIHRoZSB0ZXh0cGF0dGVybiBzb3VyY2U8L2E+LiAgVGhp cyBpcyBvbiBieSBkZWZhdWx0LjwvcD4KCTxwPkFnYWluIGlmIHlvdSBoYXZlIGNsZWFuIHVy bHMgdHVybmVkIG9uLCB5b3UgY2FuIHVzZSB0aGUgPGNvZGU+dXNlbm9mb2xsb3c8L2NvZGU+ IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHdoZXRoZXIgbGlua3MgaW4gdGhlIGxpc3Qgc2hvdWxk IGhhdmUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9nb29nbGVibG9nLmJsb2dzcG90LmNvbS8yMDA1 LzAxL3ByZXZlbnRpbmctY29tbWVudC1zcGFtLmh0bWwiPjxjb2RlPnJlbD0ibm9mb2xsb3ci PC9jb2RlPjwvYT4gYXR0cmlidXRlIHNldC4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuPC9w PgoJPHA+QXMgb2YgdjEuOCwgeW91IGNhbiBzZXQgdGhlIDxjb2RlPnVzZW92ZXJhbGxjb3Vu dHM8L2NvZGU+IGF0dHJpYnV0ZSB0byB0ZWxsIHRoZSB0YWcgbGlzdCB0byByZW5kZXIgYXMg YSBjbG91ZCAod2hlcmUgZWFjaCB0YWcgaXMgc2l6ZWQgYWNjb3JkaW5nIHRvIGl0cyBzaXRl LXdpZGUgZnJlcXVlbmN5KS4gIFRoaXMgdGFnIGlzbiYjODIxNzt0IHN1ZmZpY2llbnQgb24g aXRzIG93biwgaG93ZXZlcjsgb25jZSB5b3Ugc2V0IGl0IHlvdSBhbHNvIG5lZWQgdG8gc2V0 IHRoZSByZW5kZXJpbmcgYXR0cmlidXRlcyBsaWtlIDxjb2RlPm1heHBlcmNlbnQ9IjIwMCI8 L2NvZGU+LCA8Y29kZT5zZXRzaXplcz0iMSI8L2NvZGU+LCBhbmQgPGNvZGU+c2V0Y2xhc3Nl cz0iMSI8L2NvZGU+IGJlY2F1c2UgdGhlc2UgYXJlIGFsbCB0dXJuZWQgb2ZmIGJ5IGRlZmF1 bHQuICBZb3UmIzgyMTc7bGwgYWxzbyB0aGVuIGJlIGFibGUgdG8gdXNlIGF0dHJpYnV0ZXMg bGlrZSA8Y29kZT5zaG93Y291bnRzPC9jb2RlPiBhbmQgPGNvZGU+c29ydDwvY29kZT4uICBT ZWUgdGhlIDxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPiBkb2N1bWVudGF0aW9uIGZvciBk ZXRhaWxzIG9uIHRoZXNlIGF0dHJpYnV0ZXMuPC9wPgoJPHA+PHN0cm9uZz5CZSBjYXJlZnVs LCBob3dldmVyLDwvc3Ryb25nPiBiZWZvcmUgdHVybmluZyB0aGlzIG9uLiAgVGhpcyBhdHRy aWJ1dGUgY2F1c2VzIDxjb2RlPnRydV90YWdzPC9jb2RlPiB0byBkbyBhbiBleHRyYSBkYXRh YmFzZSBxdWVyeSBmb3IgZWFjaCBhcnRpY2xlIGRpc3BsYXllZCBvbiBhIHBhZ2UuICBUaGF0 IGV4dHJhIHF1ZXJ5IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHF1ZXJ5IHVzZWQgdG8gZ2VuZXJh dGUgdGhlIG92ZXJhbGwgY2xvdWQuICBZb3UgbWF5IHBheSBhIHBlcmZvcm1hbmNlIHBlbmFs dHkgZm9yIGFsbCB0aGUgZXh0cmEgcXVlcmllcy48L3A+Cgk8cCBjbGFzcz0iZm9vdG5vdGUi IGlkPSJmbjY0NTQyOTM0MzQ0ZjI2Y2E5ZThlOGMiPjxzdXA+MTwvc3VwPiBBcyB3aXRoIGFs bCBUZXh0cGF0dGVybiB0YWdzLCA8Y29kZT5jbGFzczwvY29kZT4gaXMgb25seSB1c2VkIGlm IHlvdSBzcGVjaWZ5IGFuIGFwcHJvcHJpYXRlIDxjb2RlPndyYXB0YWc8L2NvZGU+IGFuZCA8 Y29kZT5icmVha2NsYXNzPC9jb2RlPiBpcyBvbmx5IHVzZWQgaWYgeW91IHNwZWNpZnkgYW4g YXBwcm9wcmlhdGUgPGNvZGU+YnJlYWs8L2NvZGU+LjwvcD4KCTxoND48Y29kZT50cnVfdGFn c19jbG91ZDwvY29kZT48L2g0PgoJPGg0Pjxjb2RlPnRydV90YWdzX2xpc3Q8L2NvZGU+PC9o ND4KPHA+PGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGNhbiBiZSB1c2VkIG9uIGFueSBw YWdlLCBhbmQgaXMgZ2VuZXJhbGx5IHVzZWQgdG8gZ2VuZXJhdGUgYSBzaW1wbGUgdGFnIGNs b3VkIG9mIGFsbCB0aGUgdGFncyB1c2VkIG9uIHlvdXIgc2l0ZS4gIFRoZSBjbG91ZCBpcyBy ZWFsbHkganVzdCBhIGxpc3Qgb2YgbGlua3MsIG11Y2ggbGlrZSB0aGF0IGdlbmVyYXRlZCBi eSA8Y29kZT50cnVfdGFnc19mcm9tX2FydGljbGU8L2NvZGU+LCBidXQgd2l0aCBhIDxjb2Rl PnN0eWxlPC9jb2RlPiBhdHRyaWJ1dGUgc2V0IG9uIGVhY2ggbGluayB0byBnaXZlIGl0IGEg Zm9udCBzaXplIHJhbmdpbmcgZnJvbSAxMDAlIHRvIDIwMCUuPC9wPgo8cD48Y29kZT50cnVf dGFnc19saXN0PC9jb2RlPiBjYW4gYmUgdXNlZCBvbiBhbnkgcGFnZSwgYW5kIGlzIGdlbmVy YWxseSB1c2VkIHRvIG91dHB1dCBhIGJ1bGxldGVkIGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHVz ZWQgb24geW91ciBzaXRlLiAgQnkgZGVmYXVsdCwgdGhlIHRhZ3Mgd2lsbCBhbGwgaGF2ZSBh IGZvbnQtc2l6ZSBvZiAxMDAlLjwvcD4KCTxwPlRoZXNlIHR3byB0YWdzIGRvIHRoZSBleGFj dCBzYW1lIHRoaW5nICYjODIxMTsgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGp1c3Qg cHJvdmlkZXMgZGlmZmVyZW50IGRlZmF1bHRzIHRvIDxjb2RlPnRydV90YWdzX2xpc3Q8L2Nv ZGU+LjwvcD4KPHA+PGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGFuZCA8Y29kZT50cnVf dGFnc19saXN0PC9jb2RlPiBib3RoIHNldCB0aGUgPGNvZGU+Y2xhc3M8L2NvZGU+IGF0dHJp YnV0ZSBvZiBlYWNoIHRhZywgc3BlY2lmeWluZyB0d28gY2xhc3Nlcy4gIFRoZSBmaXJzdCBj bGFzcyBncm91cHMgdGhlIHRhZ3MgaW50byBjYXRlZ29yaWVzLCB3aXRoIGNsYXNzZXMgb2Yg PGNvZGU+dGFnU2l6ZVNtYWxsZXN0PC9jb2RlPiwgPGNvZGU+dGFnU2l6ZU1lZGl1bTwvY29k ZT4sIGFuZCA8Y29kZT50YWdTaXplTGFyZ2VzdDwvY29kZT4uICBVc2luZyB0aGVzZSwgeW91 IGNvdWxkIG1ha2UgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IHRhZ3MgaGF2ZSBkaWZmZXJl bnQgc3R5bGVzIHRoYW4gYWxsIHRoZSBvdGhlcnMuPC9wPgoJPHA+VGhlIHNlY29uZCBjbGFz cyBpbmRpY2F0ZXMgdGhlICYjODIyMDtzdGVwJiM4MjIxOyBvZiB0aGUgY3VycmVudCB0YWcs IHdpdGggY2xhc3NlcyBvZiA8Y29kZT50YWdTaXplMTwvY29kZT4sIDxjb2RlPnRhZ1NpemUy PC9jb2RlPiwgYW5kIHNvIG9uLiAgVGhlc2UgZ2l2ZSB5b3UgcHJlY2lzZSBjb250cm9sIG92 ZXIgZWFjaCB0YWcgc2l6ZSwgaWYgeW91IHdhbnQgaXQuPC9wPgoJPHA+SWYgeW91IHVzZSB0 aGVzZSBjbGFzc2VzIHRvIGNyZWF0ZSBzcGVjaWFsIENTUyBydWxlcywgeW91IG1heSBhbHNv IHdhbnQgdG8gc2V0IHRoZSA8Y29kZT5zZXRzaXplczwvY29kZT4gYXR0cmlidXRlLCBkZXNj cmliZWQgYmVsb3cuPC9wPgoJPGg1PkJvdGggdGFncyBhY2NlcHQgdGhlIGZvbGxvd2luZyBh dHRyaWJ1dGVzOjwvaDU+Cgk8dWw+CgkJPGxpPlRoZSBzdGFuZGFyZCA8Y29kZT53cmFwdGFn PC9jb2RlPiwgPGNvZGU+YnJlYWs8L2NvZGU+LCA8Y29kZT5jbGFzczwvY29kZT4sIGFuZCA8 Y29kZT5icmVha2NsYXNzPC9jb2RlPiBhdHRyaWJ1dGVzLiAgPGNvZGU+dHJ1X3RhZ3NfY2xv dWQ8L2NvZGU+IGhhcyBhIGRlZmF1bHQgPGNvZGU+YnJlYWs8L2NvZGU+IG9mIGEgY29tbWEu ICA8Y29kZT50cnVfdGFnc19saXN0PC9jb2RlPiBoYXMgYSBkZWZhdWx0IDxjb2RlPndyYXB0 YWc8L2NvZGU+IG9mIDxjb2RlPnVsPC9jb2RlPiBhbmQgYSBkZWZhdWx0IDxjb2RlPmJyZWFr PC9jb2RlPiBvZiA8Y29kZT5saTwvY29kZT4uPC9saT4KCQk8bGk+PGNvZGU+dGFnc2VjdGlv bjwvY29kZT4sIHdoaWNoIHRlbGxzIHRydV90YWdzIHRoZSBuYW1lIG9mIHlvdXIgJiM4MjE2 O3RhZyYjODIxNzsgc2VjdGlvbi4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBu YW1lZCB0aGUgc2VjdGlvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiAmIzgyMjA7dGFnJiM4MjIx Oy4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgc2V0IHRvIDxjb2RlPnRhZzwvY29kZT4uPC9saT4K CQk8bGk+PGNvZGU+c2VjdGlvbjwvY29kZT4sIHdoaWNoIHRlbGxzIGl0IHRvIGxpbWl0IHRo ZSBsaXN0IHRvIHRhZ3MgZnJvbSB0aGUgZ2l2ZW4gc2VjdGlvbiBvciBzZWN0aW9ucy4gIEZv ciBleGFtcGxlLCA8Y29kZT4mbHQ7dHhwOnRydV90YWdzX2Nsb3VkIHNlY3Rpb249ImJsb2cs cmVmZXJlbmNlIiAvJmd0OzwvY29kZT4gd291bGQgb25seSBzaG93IHRhZ3MgZnJvbSB0aGUg JiM4MjIwO2Jsb2cmIzgyMjE7IGFuZCAmIzgyMjA7cmVmZXJlbmNlJiM4MjIxOyBzZWN0aW9u cy4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgc2V0IHRvIGJsYW5rICh0byBzaG93IHRhZ3MgZnJv bSBhbGwgc2VjdGlvbnMpLgoJPHVsPgoJCTxsaT48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IGlm IHlvdSB1c2UgPGNvZGU+c2VjdGlvbjwvY29kZT4gdG8gbGltaXQgdGhlIGNsb3VkIHRvIGEg cGFydGljdWxhciBzZWN0aW9uLCBpdCB3b24mIzgyMTc7dCBsaW1pdCB0aGUgdGFnIHNlYXJj aCBmZWF0dXJlIHRvIHRoYXQgc2VjdGlvbi4gIFRoZSB0YWcgc2VhcmNoIGZpbmRzICh0YWdn ZWQpIGFydGljbGVzIGZyb20gYWxsIHNlY3Rpb25zLCBubyBtYXR0ZXIgd2hhdC4gIFRoYXQm IzgyMTc7cyBhIHNpZGUtZWZmZWN0IG9mIHRoZSB1c2Ugb2YgPGNvZGU+ZG9BcnRpY2xlcygp PC9jb2RlPiwgYW5kIEkgZG9uJiM4MjE3O3QgdGhpbmsgdGhlcmUmIzgyMTc7cyBhbnl0aGlu ZyBJIGNhbiBkbyBhYm91dCBpdC48L2xpPgoJPC91bD48L2xpPgoJCTxsaT48Y29kZT5taW5w ZXJjZW50PC9jb2RlPiBhbmQgPGNvZGU+bWF4cGVyY2VudDwvY29kZT4sIHdoaWNoIGNhbiBi ZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHdlaWdodGVkIGZvbnQgc2l6ZXMgaW4gdGhlIHRhZyBj bG91ZC9saXN0LiAgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IGRlZmF1bHRzIHRvIDxj b2RlPjEwMDwvY29kZT4gYW5kIDxjb2RlPjIwMDwvY29kZT4sIHJlc3BlY3RpdmVseSwgYW5k IDxjb2RlPnRydV90YWdzX2xpc3Q8L2NvZGU+IGRlZmF1bHRzIHRvIDxjb2RlPjEwMDwvY29k ZT4gYW5kIDxjb2RlPjEwMDwvY29kZT4uPC9saT4KCQk8bGk+PGNvZGU+c2hvd2NvdW50czwv Y29kZT4sIHdoaWNoIHdpbGwgYXBwZW5kIGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG51bWJl ciBvZiB0aW1lcyBhIHRhZyBoYXMgYmVlbiB1c2VkLCB0byBlYWNoIHRhZyBpbiB0aGUgbGlz dC4gIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgc2VlOiA8c3BhbiBjbGFzcz0icHJlIj48YSBo cmVmPSIvP3M9dGFnJiMzODt0PWxpZmUiPmxpZmU8L2E+IFszXSwgPGEgaHJlZj0iLz9zPXRh ZyYjMzg7dD10ZWNoIj50ZWNoPC9hPiBbNV08L3NwYW4+IGluIG15IHRhZyBjbG91ZCwgaWYg dGhpcyB3YXMgdHVybmVkIG9uLiAgVGhpcyBpcyBvZmYgYnkgZGVmYXVsdC4gIFVzZSA8Y29k ZT4xPC9jb2RlPiBvciA8Y29kZT50cnVlPC9jb2RlPiB0byB0dXJuIGl0IG9uLgoJPHVsPgoJ CTxsaT5UaGlzIGNhbiBhbHNvIGJlIHVzZWQgdG8gcHV0IHRoZSBjb3VudHMgaW4gdGhlIDxj b2RlPnRpdGxlPC9jb2RlPiBhdHRyaWJ1dGUgb2YgdGhlIGxpbmtzLCB3aGljaCB3aWxsIG1h a2UgaXQgYXBwZWFyIGluIGEgdG9vbHRpcC4gIFVzZSA8Y29kZT5zaG93Y291bnRzPSJ0aXRs ZSI8L2NvZGU+IG9yIDxjb2RlPnNob3djb3VudHM9ImJvdGgiPC9jb2RlPiAodG8gc2hvdyBp dCBpbiBib3RoIHBsYWNlcykgdG8gdHVybiBpdCBvbi48L2xpPgoJPC91bD48L2xpPgoJCTxs aT48Y29kZT5jb3VudHdyYXBjaGFyczwvY29kZT4sIHdoaWNoIGNvbnRyb2xzIHRoZSBjaGFy YWN0ZXJzIHVzZWQgdG8gc2hvdyB0aGUgdGFnIGNvdW50LCBpZiA8Y29kZT5zaG93Y291bnRz PC9jb2RlPiBpcyB0dXJuZWQgb24uICBCeSBkZWZhdWx0IHRoaXMgaXMgPGNvZGU+W108L2Nv ZGU+LiAgVGhlIGZpcnN0IGNoYXJhY3RlciB3aWxsIGJlIHB1dCBvbiB0aGUgbGVmdCBzaWRl IG9mIHRoZSBudW1iZXIsIGFuZCB0aGUgc2Vjb25kIGNoYXJhY3RlciB3aWxsIGJlIHB1dCBv biB0aGUgcmlnaHQuICBGb3IgZXhhbXBsZSwgYSA8Y29kZT5jb3VudHdyYXBjaGFyczwvY29k ZT4gb2YgPGNvZGU+KCk8L2NvZGU+IHdvdWxkIHNob3c6IDxzcGFuIGNsYXNzPSJwcmUiPjxh IGhyZWY9Ii8/cz10YWcmIzM4O3Q9bGlmZSI+bGlmZTwvYT4gKDMpLCA8YSBocmVmPSIvP3M9 dGFnJiMzODt0PXRlY2giPnRlY2g8L2E+ICg1KTwvc3Bhbj48L2xpPgoJCTxsaT48Y29kZT50 aXRsZTwvY29kZT4gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSB0b29sdGlwIGZvciB0aGUgdGFn cy48L2xpPgoJCTxsaT5JZiB5b3UgaGF2ZSBjbGVhbiB1cmxzIHR1cm5lZCBvbiAoc2VlIGFi b3ZlKSwgeW91IGNhbiB1c2UgdGhlIDxjb2RlPnVzZXJlbHRhZ3M8L2NvZGU+IGF0dHJpYnV0 ZSB0byBzcGVjaWZ5IHdoZXRoZXIgbGlua3MgaW4gdGhlIGxpc3Qgc2hvdWxkIGhhdmUgdGhl IDxhIGhyZWY9Imh0dHA6Ly9taWNyb2Zvcm1hdHMub3JnL3dpa2kvcmVsdGFnIj48Y29kZT5y ZWw9InRhZyI8L2NvZGU+PC9hPiAgKHVzZWQgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy50ZWNo bm9yYXRpLmNvbS8iPlRlY2hub3JhdGk8L2E+KSBhdHRyaWJ1dGUgc2V0LiAgVGhpcyBpcyBv ZmYgYnkgZGVmYXVsdC48L2xpPgoJCTxsaT5BZ2FpbiBpZiB5b3UgaGF2ZSBjbGVhbiB1cmxz IHR1cm5lZCBvbiwgeW91IGNhbiB1c2UgdGhlIDxjb2RlPnVzZW5vZm9sbG93PC9jb2RlPiBh dHRyaWJ1dGUgdG8gc3BlY2lmeSB3aGV0aGVyIGxpbmtzIGluIHRoZSBsaXN0IHNob3VsZCBo YXZlIHRoZSA8YSBocmVmPSJodHRwOi8vZ29vZ2xlYmxvZy5ibG9nc3BvdC5jb20vMjAwNS8w MS9wcmV2ZW50aW5nLWNvbW1lbnQtc3BhbS5odG1sIj48Y29kZT5yZWw9Im5vZm9sbG93Ijwv Y29kZT48L2E+IGF0dHJpYnV0ZSBzZXQuICBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LjwvbGk+ CgkJPGxpPklmIHlvdSBkb24mIzgyMTc7dCB3YW50IHRoZSB0YWdzIHRvIGJlIGxpbmtzLCB5 b3UgY2FuIHNldCA8Y29kZT5nZW5lcmF0ZWxpbmtzPSIwIjwvY29kZT4gdG8gdHVybiB0aGVt IG9mZi48L2xpPgoJCTxsaT48Y29kZT5taW50YWdjb3VudDwvY29kZT4gYW5kIDxjb2RlPm1h eHRhZ2NvdW50PC9jb2RlPiBjYW4gYmUgdXNlZCB0byBoaWRlIHRhZ3MgdGhhdCBvbmx5IGhh dmUgYSBmZXcgYXJ0aWNsZXMsIG9yIHRoYXQgaGF2ZSB0b28gbWFueS4gIFRoZXkgYXJlIGRl ZmF1bHRlZCB0byA8Y29kZT4wPC9jb2RlPiBhbmQgPGNvZGU+MTAwMDwvY29kZT4sIHJlc3Bl Y3RpdmVseS4gIEZvciBleGFtcGxlLCA8Y29kZT5taW50YWdjb3VudD0iMiI8L2NvZGU+IHdv dWxkIGhpZGUgYW55IHRhZ3MgdGhhdCB3ZXJlIG9ubHkgYXNzb2NpYXRlZCB3aXRoIGEgc2lu Z2xlIGFydGljbGUuICBJZiB5b3UgZG8gdGhpcywgeW91IG1heSB3YW50IHRvIGFkZCBhIGxp bmsgdG8gdGhlIGRlZmF1bHQgdGFnIGNsb3VkLCB1c3VhbGx5IGZvdW5kIGF0IDxjb2RlPi90 YWcvPC9jb2RlPi48L2xpPgoJCTxsaT5JZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBzaXpl KHMpIG9mIHRoZSB0YWdzIHlvdXJzZWxmICh0aHJvdWdoIENTUyksIHNldCA8Y29kZT5zZXRz aXplcz0iMCI8L2NvZGU+IHRvIHR1cm4gb2ZmIHRoZSA8Y29kZT5zdHlsZT0iZm9udC1zaXpl OiBYWFglIjwvY29kZT4gYXR0cmlidXRlIGdlbmVyYXRpb24uICBUaGF0IHdpbGwgbGVhdmUg YmVoaW5kIHRoZSBkZWZhdWx0IENTUyBjbGFzc2VzLCB3aGljaCB5b3UgY2FuIHVzZSB0byBj b250cm9sIHRoZSBkaXNwbGF5IG9mIHlvdXIgY2xvdWQuPC9saT4KCQk8bGk+SWYgeW91IGRv biYjODIxNzt0IHdhbnQgdGhlIHRhZ3MgdG8gaGF2ZSB0aGVpciA8Y29kZT5jbGFzczwvY29k ZT4gYXR0cmlidXRlcyBzZXQsIHlvdSBjYW4gc2V0IDxjb2RlPnNldGNsYXNzZXM9IjAiPC9j b2RlPiB0byB0dXJuIGl0IG9mZi48L2xpPgoJCTxsaT48Y29kZT5zb3J0PC9jb2RlPiBjYW4g YmUgdXNlZCB0byBzb3J0IHRoZSBjbG91ZCBieSB0YWcgZnJlcXVlbmN5LCByYXRoZXIgdGhh biB0aGUgZGVmYXVsdCBvZiBhbHBoYWJldGljYWxseS4gIFVzZSA8Y29kZT5zb3J0PSJjb3Vu dCI8L2NvZGU+IHRvIHNvcnQgYnkgZnJlcXVlbmN5IGluIGRlc2NlbmRpbmcgb3JkZXIsIGFu ZCA8Y29kZT5zb3J0PSJjb3VudCBhc2MiPC9jb2RlPiB0byBzb3J0IGJ5IGZyZXF1ZW5jeSBp biBhc2NlbmRpbmcgb3JkZXIuPC9saT4KCTwvdWw+Cgk8cD5Ob3RlIHRoYXQgeW91IGNhbiB1 c2UgdGhlIGF0dHJpYnV0ZXMgdG8gbWFrZSBlYWNoIHRhZyBkbyB0aGUgc2FtZSB0aGluZy4g IDxjb2RlPnRydV90YWdzX2Nsb3VkPC9jb2RlPiBpcyBqdXN0IGEgY29udmVuaWVuY2UgZnVu Y3Rpb24gZm9yIGdlbmVyYXRpbmcgYSB0YWcgY2xvdWQgdXNpbmcgPGNvZGU+dHJ1X3RhZ3Nf bGlzdDwvY29kZT4uICBUaGVyZWZvcmUsIGl0JiM4MjE3O3MgcG9zc2libGUgdG8gaGF2ZSBh IHRhZyBjbG91ZCB3aXRoIHRhZyBjb3VudHMgc2hvd2luZywgb3IgaGF2ZSBhIGJ1bGxldGVk IGxpc3Qgd2l0aCB2YXJpYWJsZSBmb250IHNpemVzLCBldGMuPC9wPgoJPGg0Pjxjb2RlPnRy dV90YWdzX2lmX3RhZ19zZWFyY2g8L2NvZGU+PC9oND4KCTxwPlRoaXMgY29uZGl0aW9uYWwg dGFnIGNhbiBiZSB1c2VkIGFueXdoZXJlIGFuZCB3aWxsIGV2YWx1YXRlIGl0cyBjb250ZW50 cyAoZS5nLiAmIzgyMjA7cmV0dXJuIHRydWUmIzgyMjE7KSBpZiB0aGUgY3VycmVudCB1cmwg aW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSB0YWcgc2VhcmNoIGdvaW5nIG9uLiAgVGhpcyBj YW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBsaWtlIGN1c3RvbWl6 ZSB0aGUgdGl0bGViYXIgd2hlbiB1c2luZyB0aGUgdGFnIHNlYXJjaC48L3A+Cgk8aDQ+PGNv ZGU+dHJ1X3RhZ3NfdGFnX3BhcmFtZXRlcjwvY29kZT48L2g0PgoJPHA+VGhpcyB0YWcgY2Fu IGJlIHVzZWQgYW55d2hlcmUgYW5kIHdpbGwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJy ZW50IHRhZyB1bmRlciBzZWFyY2gsIGR1cmluZyBhIHRhZyBzZWFyY2guICBUaGlzIGlzIGdl bmVyYWxseSB1c2VkIHdpdGggPGNvZGU+dHJ1X3RhZ3NfaWZfdGFnX3NlYXJjaDwvY29kZT4u PC9wPgoJPHA+SXQgYWNjZXB0cyBvbmUgcGFyYW1ldGVyLCA8Y29kZT5zdHJpcGh5cGhlbnM8 L2NvZGU+LCB3aGljaCB3aWxsIGNvbnZlcnQgYWxsIGh5cGhlbnMgdG8gc3BhY2VzIGluIHRh ZyBuYW1lcy4gIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgPGNvZGU+dHJ1X3RhZ3M8L2NvZGU+ IHdpbGwgY29udmVydCBzcGFjZXMgdG8gaHlwaGVucyB3aGVuIGl0IGRvZXMgYSB0YWcgc2Vh cmNoLCBhbmQgdGhpcyB1bmRvZXMgdGhhdCBjb252ZXJzaW9uLjwvcD4KCTxoND48Y29kZT50 cnVfdGFnc19zZWFyY2hfcGFyYW1ldGVyPC9jb2RlPjwvaDQ+Cgk8cD5UaGlzIHRhZyBjYW4g YmUgdXNlZCBhbnl3aGVyZSBhbmQgd2lsbCByZXR1cm4gdGhlIHRleHQgdGhlIHVzZXIgdHlw ZWQgaW50byB0aGUgc3RhbmRhcmQgc2VhcmNoIGJveCwgZHVyaW5nIGEgcmVndWxhciBzZWFy Y2guICBUaGlzIHRhZyBpcyBub3Qgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGFnZ2luZywg YnV0IGNhbiBiZSBoYW5keSBmb3IgY3VzdG9taXppbmcgdGhlIHRpdGxlYmFyIG9uIHNlYXJj aCByZXN1bHQgcGFnZXMuPC9wPgoJPGg0Pjxjb2RlPnRydV90YWdzX3JlbGF0ZWRfdGFnc19m cm9tX3NlYXJjaDwvY29kZT48L2g0PgoJPHA+VGhpcyB0YWcgaXMgdXNlZnVsIG9uIHRoZSBy ZXN1bHRzIHBhZ2Ugb2YgYSB0YWcgc2VhcmNoLiAgSXQgZ2VuZXJhdGVzIGEgY2xvdWQgb2Yg YWxsIHRoZSB0YWdzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGFydGljbGVzIGZvdW5kIGluIHRo YXQgc2VhcmNoLCBleGNsdWRpbmcgdGhlIHNlYXJjaCB0YWcgaXRzZWxmLiAgRm9yIGV4YW1w bGUsIGlmIGEgdGFnIHNlYXJjaCBmb3IgJiM4MjIwO2xpZmUmIzgyMjE7IGZvdW5kIHRocmVl IGFydGljbGVzIHRoYXQgd2VyZSB0YWdnZWQgYXMgZm9sbG93czo8L3A+Cgk8b2w+CgkJPGxp Pm1vbmV5LCBoZWFsdGgsIGxpZmU8L2xpPgoJCTxsaT5tb25leSwgcG9saXRpY3MsIGxpZmU8 L2xpPgoJCTxsaT5saWZlPC9saT4KCTwvb2w+Cgk8cD4uLi48Y29kZT50cnVfdGFnc19yZWxh dGVkX3RhZ3NfZnJvbV9zZWFyY2g8L2NvZGU+IHdvdWxkIGdlbmVyYXRlIGEgY2xvdWQgY29u dGFpbmluZyAmIzgyMjA7bW9uZXkmIzgyMjE7LCAmIzgyMjA7aGVhbHRoJiM4MjIxOywgYW5k ICYjODIyMDtwb2xpdGljcyYjODIyMTsuPC9wPgoJPHA+VGhpcyBpcyB1c2VmdWwgZm9yIGdl bmVyYXRpbmcgYSAmIzgyMjA7cmVsYXRlZCB0YWdzJiM4MjIxOyBjbG91ZCwgYXMgeW91IGNh biBzZWUgaW4gdGhlIHNpZGViYXIgb2YgdGhpcyBzaXRlIHdoZW4geW91IGRvIGEgdGFnIHNl YXJjaC48L3A+Cgk8cD48c3Ryb25nPkJlZm9yZSB5b3UgdXNlIHRoaXMgb24geW91ciBzaXRl LCBob3dldmVyLDwvc3Ryb25nPiBiZSB3YXJuZWQgdGhhdCBpdCYjODIxNztzIG5vdCBnb29k IGZvciB5b3VyIHNpdGUmIzgyMTc7cyBwZXJmb3JtYW5jZSwgYW5kIGl0JiM4MjE3O3MgYSBs aXR0bGUgYml0IG9mIGEgaGFjayAoYW5kIHRoZXJlZm9yZSBtYXkgYnJlYWsgd2l0aCBuZXdl ciB2ZXJzaW9ucyBvZiBUZXh0cGF0dGVybikuICBJdCBpcyBpbXBsZW1lbnRlZCBieSBjb21w bGV0ZWx5IHJlZG9pbmcgdGhlIGRhdGFiYXNlIHF1ZXJ5IHRoYXQgZm91bmQgYWxsIHRoZSBh cnRpY2xlcyBpbiB0aGUgZmlyc3QgcGxhY2UsIHdoaWNoIG1lYW5zIHRoYXQgeW91ciBzaXRl IGlzIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgdGhlIHNlYXJjaCB0d2ljZS4gIFRoZW4sIGRl cGVuZGluZyBvbiB0aGUgYXR0cmlidXRlcyB5b3UgdXNlLCBpdCBtYXkgZG8gYSBzZWNvbmQg cXVlcnkgdGhhdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBxdWVyeSB0aGF0IGdlbmVyYXRlcyB0 aGUgJiM4MjIwO2NvbXBsZXRlJiM4MjIxOyB0YWcgY2xvdWQuPC9wPgoJPHA+WW91IG1heSB3 YW50IHRvIHRlc3QgdGhpcyBjYXJlZnVsbHkgaWYgeW91IGhhdmUgYSBob3N0aW5nIHByb3Zp ZGVyIHdobyBjaGFyZ2VzIHlvdSBmb3IgQ1BVIGN5Y2xlcy4gIDopPC9wPgoJPHA+SWYgeW91 IGRlY2lkZSB0byB1c2UgdGhpcyB0YWcsIGJlIHN1cmUgdG8gbWluaWMgdGhlIDxjb2RlPnNl Y3Rpb248L2NvZGU+IGFuZCA8Y29kZT5saW1pdDwvY29kZT4gYXR0cmlidXRlcyBmcm9tIHlv dXIgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+IChvciA8Y29kZT50cnVfdGFnc19saXN0 PC9jb2RlPikgY2FsbCwgYWxvbmcgd2l0aCBhbnkgPGNvZGU+dHhwOmFydGljbGU8L2NvZGU+ IGF0dHJpYnV0ZXMgdGhhdCB5b3UgdXNlZCBpbiB5b3VyIDxjb2RlPnRydV90YWdzX2hhbmRs ZXI8L2NvZGU+IGNhbGwuICBJZiB5b3UgZG9uJiM4MjE3O3QsIHRoZSBzZXQgb2YgYXJ0aWNs ZXMgZm91bmQvdXNlZCBieSB0aGlzIHRhZyB3b24mIzgyMTc7dCBtYXRjaCB0aGUgc2V0IHRo YXQgYXJlIGRpc3BsYXllZCB0byB0aGUgdXNlci48L3A+Cgk8cD5UaGlzIHRhZyBhY2NlcHRz IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczo8L3A+Cgk8dWw+CgkJPGxpPkFsbCB0aGUgYXR0 cmlidXRlcyBvZiA8Y29kZT50eHA6YXJ0aWNsZTwvY29kZT48L2xpPgoJCTxsaT5BbGwgdGhl IGF0dHJpYnV0ZXMgb2YgPGNvZGU+dHJ1X3RhZ3NfY2xvdWQ8L2NvZGU+Lzxjb2RlPnRydV90 YWdzX2xpc3Q8L2NvZGU+LjwvbGk+CgkJPGxpPjxjb2RlPnVzZW92ZXJhbGxjb3VudHM8L2Nv ZGU+LCB3aGljaCBtYWtlcyB0aGUgY2xvdWQgcmVuZGVyIHVzaW5nIHRoZSBmcmVxdWVuY3kg ZGF0YSBmb3IgdGhlIHNpdGUtd2lkZSB0YWcgY2xvdWQuCgk8dWw+CgkJPGxpPkJ5IGRlZmF1 bHQsIDxjb2RlPnRydV90YWdzX3JlbGF0ZWRfdGFnc19mcm9tX3NlYXJjaDwvY29kZT4gb3V0 cHV0cyBhIGNsb3VkIHdoZXJlIHRoZSB3ZWlnaHRzIGFyZSBiYXNlZCBvbiB0aGUgZnJlcXVl bmN5IG9mIHRoZSB0YWdzIDxlbT5pbiB0aGUgc2VhcmNoIHJlc3VsdHM8L2VtPi4gIFVzaW5n IHRoZSBleGFtcGxlIGZyb20gYWJvdmUsICYjODIyMDttb25leSYjODIyMTsgd291bGQgaGF2 ZSBhIHdlaWdodCB0aGF0IHdhcyBkb3VibGUgdGhlIHdlaWdodCBvZiAmIzgyMjA7aGVhbHRo JiM4MjIxOyBhbmQgJiM4MjIwO3BvbGl0aWNzJiM4MjIxOy48L2xpPgoJCTxsaT5UaGlzIGF0 dHJpYnV0ZSB3aWxsIGNoYW5nZSB0aGF0IGJlaGF2aW9yLCBtYWtpbmcgdGhlIHRhZyBzaXpl cyBtYXRjaCB0aGUgc2l6ZXMgdXNlZCBpbiB0aGUgc2l0ZS13aWRlIHRhZyBjbG91ZC4gIElu IG90aGVyIHdvcmRzLCB0aGlzIGNsb3VkIHdpbGwgbG9vayBleGFjdGx5IGxpa2UgYSBzdWJz ZXQgb2YgeW91ciBzaXRld2lkZSBjbG91ZC48L2xpPgoJCTxsaT5JdCB3aWxsIGFsc28gYWRk IGFuIGV4dHJhIGRhdGFiYXNlIHF1ZXJ5IHRvIHRoZSBtaXggKG1lbnRpb25lZCBhYm92ZSks IHNvIGNvbnNpZGVyIHBlcmZvcm1hbmNlIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgaXQuPC9s aT4KCTwvdWw+PC9saT4KCTwvdWw+CgoKICI7czo0OiJjb2RlIjtzOjEyMDUxOiIKCgojQ29w eXJpZ2h0IDIwMDYgTmF0aGFuIEFydGh1cgojUmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBQdWJs aWMgTGljZW5zZSwgc2VlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3Bs LWxpY2Vuc2UucGhwIGZvciBkZXRhaWxzCiNUaGlzIHdvcmsgaXMgaW5zcGlyZWQgYnkgcmFu X3RhZ3MgYnkgUmFuIEFyb3Vzc2ksIG9yaWdpbmFsbHkgZm91bmQgYXQgaHR0cDovL2Fyb3Vz c2kuY29tL2FydGljbGUvNDUvdGFnZ2luZy10ZXh0cGF0dGVybgoKCiNTZWUgaHR0cDovL3d3 dy50cnVpc3QuY29tL3JlZmVyZW5jZS80OTcvdHJ1dGFncy11c2FnZS1pbnN0cnVjdGlvbnMg Zm9yIGluc3RydWN0aW9ucwpmdW5jdGlvbiB0cnVfdGFnc191c2VfY2xlYW5fdXJscygpCnsK CXJldHVybiAwOyAJI0RPIE5PVCBFTkFCTEUgVEhJUyB1bmxlc3MgeW91J3ZlIHJlYWQgdGhl IGluc3RydWN0aW9ucwp9CgojWU9VIE9OTFkgTkVFRCBUTyBDQVJFIEFCT1VUIFRISVMgRlVO Q1RJT04gSUYgWU9VIFVTRSBDTEVBTiBVUkxTIEFORCBOT04tQUxQSEFOVU1FUklDIENIQVJB Q1RFUlMgSU4gWU9VUiBUQUdTIChMSUtFICcrJykKI01NOiBtb3JlIGluZm8gYXQgaHR0cDov L2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0xMjMwMDcjcDEyMzAw NwpmdW5jdGlvbiB0cnVfdGFnc19kb3VibGVfdXJsZW5jb2RlKCkKewoJcmV0dXJuIDA7CSN1 c2UgdGhpcyBpZiB5b3UgYXJlbid0IHVzaW5nIGEgYnJva2VuIHZlcnNpb24gb2YgYXBhY2hl LCBvciBpZiB5b3Ugb25seSB1c2UgbGV0dGVycy9udW1iZXJzIGluIHlvdXIgdGFnIG5hbWVz LCBvciBpZiB5b3UncmUgbm90IHVzaW5nIGNsZWFuIHVybHMKCSNyZXR1cm4gdHJ1X3RhZ3Nf dXNlX2NsZWFuX3VybHMoKTsJI3VzZSB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSB2ZXJzaW9u IG9mIGFwYWNoZSB0aGF0IGhhcyB0aGlzIHByb2JsZW06IGh0dHA6Ly9pc3N1ZXMuYXBhY2hl Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MzQ2MDIKfQoKCiMjIyBQUklNQVJZIFRB RyBGVU5DVElPTlMgIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpmdW5jdGlv biB0cnVfdGFnc19oYW5kbGVyKCRhdHRzKSB7CgkkdGFnX3BhcmFtZXRlciA9IHRydV90YWdz X3RhZ19wYXJhbWV0ZXIoKTsKCWlmICghZW1wdHkoJHRhZ19wYXJhbWV0ZXIpKSB7CgkJJGF0 dHMgPSB0cnVfdGFnc19maXh1cF9xdWVyeV9hdHRzKCRhdHRzLCAkdGFnX3BhcmFtZXRlcik7 CgkJcmV0dXJuIGRvQXJ0aWNsZXMoJGF0dHMsIHRydWUpOwkJI2Z1bmN0aW9uIGluIFRYUCBj b2RlCgl9IGVsc2UgewoJCXJldHVybiB0cnVfdGFnc19jbG91ZCgkYXR0cyk7Cgl9Cn0KCgpm dW5jdGlvbiB0cnVfdGFnc19jbG91ZCgkYXR0cykgewoJcmV0dXJuIHRydV90YWdzX2xpc3Qo dHJ1X3RhZ3NfZ2V0X3N0YW5kYXJkX2Nsb3VkX2F0dHMoJGF0dHMsIGZhbHNlLCBmYWxzZSkp Owp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfbGlzdCgkYXR0cykgewoJJGF0dHMgPSB0cnVfdGFn c19nZXRfc3RhbmRhcmRfY2xvdWRfYXR0cygkYXR0cywgdHJ1ZSwgZmFsc2UpOwoJJGFsbF90 YWdzID0gdHJ1X3RhZ3NfY2xvdWRfcXVlcnkoJGF0dHMpOwoKCXJldHVybiB0cnVfdGFnc19y ZW5kZXJfY2xvdWQoJGF0dHMsICRhbGxfdGFncywgJGFsbF90YWdzKTsKfQoKCmZ1bmN0aW9u IHRydV90YWdzX2Zyb21fYXJ0aWNsZSgkYXR0cykgewoJZ2xvYmFsICR0aGlzYXJ0aWNsZSwg JHNpdGV1cmwsICRwYXRoX2Zyb21fcm9vdDsKCWV4dHJhY3QoJF9TRVJWRVIpOwoJZXh0cmFj dCgkdGhpc2FydGljbGUpOwoKCSR0YWdzX2ZpZWxkID0gdHJ1X3RhZ3NfZmllbGQoKTsKCSRy cyA9IHNhZmVfcm93KCR0YWdzX2ZpZWxkLCAidGV4dHBhdHRlcm4iLCAiSUQ9JyR0aGlzaWQn IEFORCAkdGFnc19maWVsZCA8PiAnJyIpOwoJJGFsbF90YWdzID0gZXhwbG9kZSgiLCIsIHRy aW0odHJ1X3RhZ3Nfc3RydG9sb3dlcigkcnNbJHRhZ3NfZmllbGRdKSkpOwoJJGFsbF90YWdz ID0gdHJ1X3RhZ3NfdHJpbV90YWdzKCRhbGxfdGFncyk7CgoJJGF0dHMgPSB0cnVfdGFnc19n ZXRfc3RhbmRhcmRfY2xvdWRfYXR0cygkYXR0cywgZmFsc2UsIHRydWUpOwoJJGFsbF90YWdz X2Zvcl93ZWlnaHQgPSAkYWxsX3RhZ3M7CglpZiAoJGF0dHNbJ3VzZW92ZXJhbGxjb3VudHMn XSkgewoJCSRhbGxfdGFnc19mb3Jfd2VpZ2h0ID0gdHJ1X3RhZ3NfY2xvdWRfcXVlcnkoJGF0 dHMpOwoJfQoKCXJldHVybiB0cnVfdGFnc19yZW5kZXJfY2xvdWQoJGF0dHMsICRhbGxfdGFn cywgJGFsbF90YWdzX2Zvcl93ZWlnaHQpOwp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfaWZfaGFz X3RhZ3MoJGF0dHMsICR0aGluZykgewoJZ2xvYmFsICR0aGlzYXJ0aWNsZTsKCWV4dHJhY3Qo JHRoaXNhcnRpY2xlKTsKCgkkdGFnc19maWVsZCA9IHRydV90YWdzX2ZpZWxkKCk7CgoJJHJz ID0gc2FmZV9yb3coJHRhZ3NfZmllbGQsICJ0ZXh0cGF0dGVybiIsICJJRD0nJHRoaXNpZCcg QU5EICR0YWdzX2ZpZWxkIDw+ICcnIik7CglyZXR1cm4gcGFyc2UoRXZhbEVsc2UoJHRoaW5n LCAkcnMpKTsKfQoKCmZ1bmN0aW9uIHRydV90YWdzX2lmX3RhZ19zZWFyY2goJGF0dHMsICR0 aGluZykKewoJJHRhZ19wYXJhbWV0ZXIgPSB0cnVfdGFnc190YWdfcGFyYW1ldGVyKCk7Cgkk Y29uZGl0aW9uID0gKCFlbXB0eSgkdGFnX3BhcmFtZXRlcikpID8gdHJ1ZSA6IGZhbHNlOwoJ cmV0dXJuIHBhcnNlKEV2YWxFbHNlKCR0aGluZywgJGNvbmRpdGlvbikpOwp9CgoKZnVuY3Rp b24gdHJ1X3RhZ3NfdGFnX3BhcmFtZXRlcigkYXR0cyA9IGFycmF5KCkpCnsKCWV4dHJhY3Qo bEF0dHMoYXJyYXkoJ3N0cmlwaHlwaGVucycgPT4gMCksICRhdHRzKSk7CgkkcGFybSA9IHN0 cmlwX3RhZ3MoZ3BzKCd0JykpOwoJcmV0dXJuICgkc3RyaXBoeXBoZW5zID8gc3RyX3JlcGxh Y2UoJy0nLCAnICcsICRwYXJtKSA6ICRwYXJtKTsKfQoKCmZ1bmN0aW9uIHRydV90YWdzX3Nl YXJjaF9wYXJhbWV0ZXIoKQp7CglyZXR1cm4gc3RyaXBfdGFncyhncHMoJ3EnKSk7Cn0KCgpm dW5jdGlvbiB0cnVfdGFnc19yZWxhdGVkX3RhZ3NfZnJvbV9zZWFyY2goJGF0dHMpIHsKCSR0 YWdfcGFyYW1ldGVyID0gdHJ1X3RhZ3NfdGFnX3BhcmFtZXRlcigpOwoJaWYgKCFlbXB0eSgk dGFnX3BhcmFtZXRlcikpIHsKCSAgICAgICAgJHRhZ3NfZmllbGQgPSB0cnVfdGFnc19maWVs ZCgpOwoJCSRhbGxfdGFncyA9IGFycmF5KCk7CgoJCSRxdWVyeV9hdHRzID0gdHJ1X3RhZ3Nf Zml4dXBfcXVlcnlfYXR0cygkYXR0cywgJHRhZ19wYXJhbWV0ZXIpOwoJCSRycyA9IHRydV90 YWdzX3JlZG9fYXJ0aWNsZV9zZWFyY2goJHF1ZXJ5X2F0dHMpOwoJCWlmICgkcnMpIHsKCQkJ d2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKSB7CgkJCQkkYXJ0aWNsZV90YWdzID0gZXhwbG9k ZSgiLCIsIHRyaW0odHJ1X3RhZ3Nfc3RydG9sb3dlcigkYVskdGFnc19maWVsZF0pKSk7CgkJ CQkkYWxsX3RhZ3MgPSBhcnJheV9tZXJnZSgkYWxsX3RhZ3MsIHRydV90YWdzX3RyaW1fdGFn cygkYXJ0aWNsZV90YWdzKSk7CgkJCX0KCQl9CgoJCSRhbHRfdGFnX3BhcmFtZXRlciA9IHN0 cl9yZXBsYWNlKCctJywgJyAnLCAkdGFnX3BhcmFtZXRlcik7CgkJZm9yZWFjaCAoJGFsbF90 YWdzIGFzICRrZXkgPT4gJHRhZykgewoJCQlpZiAoJHRhZyA9PSAkdGFnX3BhcmFtZXRlciB8 fCAkdGFnID09ICRhbHRfdGFnX3BhcmFtZXRlcikgewoJCQkJdW5zZXQoJGFsbF90YWdzWyRr ZXldKTsKCQkJfQoJCX0KCgkJJGNsb3VkX2F0dHMgPSB0cnVfdGFnc19nZXRfc3RhbmRhcmRf Y2xvdWRfYXR0cygkYXR0cywgZmFsc2UsIGZhbHNlKTsKCQkkYWxsX3RhZ3NfZm9yX3dlaWdo dCA9ICRhbGxfdGFnczsKCQlpZiAoJGNsb3VkX2F0dHNbJ3VzZW92ZXJhbGxjb3VudHMnXSkg ewoJCQkkYWxsX3RhZ3NfZm9yX3dlaWdodCA9IHRydV90YWdzX2Nsb3VkX3F1ZXJ5KCRjbG91 ZF9hdHRzKTsKCQl9CgoJCXJldHVybiB0cnVfdGFnc19yZW5kZXJfY2xvdWQoJGNsb3VkX2F0 dHMsICRhbGxfdGFncywgJGFsbF90YWdzX2Zvcl93ZWlnaHQpOwoJfSBlbHNlIHsKCQlyZXR1 cm4gJyc7Cgl9Cn0KCgojIyMgQ0xPVUQgU1VQUE9SVCBGVU5DVElPTlMgIyMjCiMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmZ1bmN0aW9uIHRydV90YWdzX2dldF9zdGFuZGFy ZF9jbG91ZF9hdHRzKCRhdHRzLCAkaXNMaXN0LCAkaXNBcnRpY2xlKSB7CglyZXR1cm4gbEF0 dHMoYXJyYXkoJ3dyYXB0YWcnCT0+ICgkaXNMaXN0ID8gJ3VsJyA6ICcnKSwKCQkJJ2JyZWFr JwkJPT4gKCRpc0xpc3QgPyAnbGknIDogJywgJyksCgkJCSdjbGFzcycJCT0+ICcnLAoJCQkn YnJlYWtjbGFzcycJPT4gJycsCgkJCSd0YWdzZWN0aW9uJwk9PiAndGFnJywKCQkJJ3NlY3Rp b24nCT0+ICcnLAoJCQknbWlucGVyY2VudCcJPT4gJzEwMCcsCgkJCSdtYXhwZXJjZW50Jwk9 PiAoJGlzTGlzdCB8fCAkaXNBcnRpY2xlID8gJzEwMCcgOiAnMjAwJyksCgkJCSdzaG93Y291 bnRzJwk9PiAnJywKCQkJJ2NvdW50d3JhcGNoYXJzJwk9PiAnW10nLAoJCQkndXNlcmVsdGFn Jwk9PiAoJGlzQXJ0aWNsZSA/ICcxJyA6ICcnKSwKCQkJJ2dlbmVyYXRlbGlua3MnCT0+ICcx JywKCQkJJ21pbnRhZ2NvdW50Jwk9PiAnMCcsCgkJCSdtYXh0YWdjb3VudCcJPT4gJzEwMDAn LAoJCQknc2V0c2l6ZXMnCT0+ICgkaXNBcnRpY2xlID8gJzAnIDogJzEnKSwKCQkJJ3VzZW5v Zm9sbG93Jwk9PiAnJywKCQkJJ3NvcnQnCQk9PiAnYWxwaGEnLAoJCQkndXNlb3ZlcmFsbGNv dW50cycJPT4gJycsCgkJCSdzZXRjbGFzc2VzJwk9PiAoJGlzQXJ0aWNsZSA/ICcwJyA6ICcx JyksCgkJCSd0aXRsZScJCT0+ICcnCgkJKSwkYXR0cyk7Cn0KCgpmdW5jdGlvbiB0cnVfdGFn c19jbG91ZF9xdWVyeSgkYXR0cykgewoJZXh0cmFjdCgkYXR0cyk7CgoJJHNlY3Rpb25fY2xh dXNlID0gJyc7CglpZiAoJHNlY3Rpb24gPD4gJycpIHsKCQkka2V5cyA9IHNwbGl0KCcsJywg JHNlY3Rpb24pOwoJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKCQkJJGtleXBhcnRzW10g PSAiIFNlY3Rpb24gPSAnIiAuIHRyaW0oJGtleSkgLiAiJyI7CgkJfQoJCSRzZWN0aW9uX2Ns YXVzZSA9ICIgQU5EICgiIC4gam9pbignIG9yICcsICRrZXlwYXJ0cykgLiAiKSI7Cgl9CgoJ JHRhZ3NfZmllbGQgPSB0cnVfdGFnc19maWVsZCgpOwoJaW5jbHVkZV9vbmNlIHR4cGF0aC4n L3B1Ymxpc2gvc2VhcmNoLnBocCc7CgkkZmlsdGVyID0gZmlsdGVyU2VhcmNoKCk7CgkkYWxs X3RhZ3MgPSBhcnJheSgpOwoJJHJzID0gc2FmZV9yb3dzKCIkdGFnc19maWVsZCIsICJ0ZXh0 cGF0dGVybiIsICIkdGFnc19maWVsZCA8PiAnJyIgLiAkc2VjdGlvbl9jbGF1c2UgLiAkZmls dGVyIC4gIiBhbmQgU3RhdHVzID49ICc0JyBhbmQgUG9zdGVkIDwgbm93KCkiKTsKCWZvcmVh Y2ggKCRycyBhcyAkcm93KSB7CgkJJHRlbXBfYXJyYXkgPSBleHBsb2RlKCIsIiwgdHJpbSh0 cnVfdGFnc19zdHJ0b2xvd2VyKCRyb3dbJHRhZ3NfZmllbGRdKSkpOwoJCSRhbGxfdGFncyA9 IGFycmF5X21lcmdlKCRhbGxfdGFncywgdHJ1X3RhZ3NfdHJpbV90YWdzKCR0ZW1wX2FycmF5 KSk7Cgl9CgoJcmV0dXJuICRhbGxfdGFnczsKfQoKCmZ1bmN0aW9uIHRydV90YWdzX3JlbmRl cl9jbG91ZCgkYXR0cywgJGFsbF90YWdzLCAkYWxsX3RhZ3NfZm9yX3dlaWdodCkgewoJZ2xv YmFsICRzaXRldXJsLCAkcGF0aF9mcm9tX3Jvb3Q7CglleHRyYWN0KCRfU0VSVkVSKTsKCWV4 dHJhY3QoJGF0dHMpOwoKCXNvcnQoJGFsbF90YWdzKTsKCXNvcnQoJGFsbF90YWdzX2Zvcl93 ZWlnaHQpOwoKCSR0YWdzX3dlaWdodCA9IGFycmF5X2NvdW50X3ZhbHVlcygkYWxsX3RhZ3Nf Zm9yX3dlaWdodCk7CgkkdGFnc191bmlxdWUgPSBhcnJheV91bmlxdWUoJGFsbF90YWdzKTsK Cglmb3JlYWNoICgkdGFnc191bmlxdWUgYXMgJGtleSA9PiAkdGFnKSB7CgkJaWYgKCR0YWdz X3dlaWdodFskdGFnXSA8ICRtaW50YWdjb3VudCB8fCAkdGFnc193ZWlnaHRbJHRhZ10gPiAk bWF4dGFnY291bnQpIHsKCQkJdW5zZXQoJHRhZ3NfdW5pcXVlWyRrZXldKTsKCQkJdW5zZXQo JHRhZ3Nfd2VpZ2h0WyR0YWddKTsKCQl9Cgl9CgoJJG1heCA9IG1heCgkdGFnc193ZWlnaHQp OwoJJG1pbiA9IG1pbigkdGFnc193ZWlnaHQpOwoJJHN0ZXB2YWx1ZSA9ICgkbWF4ID09ICRt aW4pID8gMCA6ICgkbWF4cGVyY2VudCAtICRtaW5wZXJjZW50KSAvICgkbWF4IC0gJG1pbik7 CgoJZm9yZWFjaCAoJHRhZ3Nfd2VpZ2h0IGFzICR0YWcgPT4gJHdlaWdodCkgewoJCWlmICgh aW5fYXJyYXkoJHRhZywgJHRhZ3NfdW5pcXVlKSkgewoJCQl1bnNldCgkdGFnc193ZWlnaHRb JHRhZ10pOwoJCX0KCX0KCglpZiAoc3RycG9zKCRzb3J0LCAnY291bnQnKSAhPT0gZmFsc2Up IHsKCQkkc29ydF9hc2MgPSAoc3RycG9zKCRzb3J0LCAnYXNjJykgIT09IGZhbHNlKTsKCQlh cnJheV9tdWx0aXNvcnQoJHRhZ3Nfd2VpZ2h0LCAoJHNvcnRfYXNjID8gU09SVF9BU0MgOiBT T1JUX0RFU0MpLCAkdGFnc191bmlxdWUpOwoJfQoKCWlmICgkZ2VuZXJhdGVsaW5rcykgewoJ CWlmICh0cnVfdGFnc191c2VfY2xlYW5fdXJscygpKSB7CgkJCSR1cmxwcmVmaXggPSAnaHR0 cDovLycgLiAkc2l0ZXVybCAuICRwYXRoX2Zyb21fcm9vdCAuICR0YWdzZWN0aW9uIC4gJy8n OwoJCQlpZiAoJHVzZXJlbHRhZykgewoJCQkJaWYgKCR1c2Vub2ZvbGxvdykgewoJCQkJCSR1 cmxzdWZmaXggPSAnLyIgcmVsPSJ0YWcgbm9mb2xsb3cnOwoJCQkJfSBlbHNlIHsKCQkJCQkk dXJsc3VmZml4ID0gJy8iIHJlbD0idGFnJzsKCQkJCX0KCQkJfSBlbHNlIGlmICgkdXNlbm9m b2xsb3cpIHsKCQkJCSR1cmxzdWZmaXggPSAnLyIgcmVsPSJub2ZvbGxvdyc7CgkJCX0gZWxz ZSB7CgkJCQkkdXJsc3VmZml4ID0gJy8nOwoJCQl9CgkJfSBlbHNlIHsKCQkJJHVybHByZWZp eCA9ICdodHRwOi8vJyAuICRzaXRldXJsIC4gJHBhdGhfZnJvbV9yb290IC4gJz9zPScgLiAk dGFnc2VjdGlvbiAuICcmYW1wO3Q9JzsKCQkJJHVybHN1ZmZpeCA9ICcnOwoJCX0KCX0KCglm b3JlYWNoICgkdGFnc191bmlxdWUgYXMgJHRhZykgewoJCSR0YWdfd2VpZ2h0ID0gZmxvb3Io JG1pbnBlcmNlbnQgKyAoJHRhZ3Nfd2VpZ2h0WyR0YWddIC0gJG1pbikgKiAkc3RlcHZhbHVl KTsKCgkJaWYgKCRzZXRzaXplcykKCQkJJHN0eWxlID0gJyBzdHlsZT0iZm9udC1zaXplOiAn IC4gJHRhZ193ZWlnaHQgLiAnJTsiJzsKCgkJaWYgKCRzZXRjbGFzc2VzKSB7CgkJCSR0YWdf Y2xhc3MgPSAnIGNsYXNzPSInOwoJCQlpZiAoJHRhZ3Nfd2VpZ2h0WyR0YWddID09ICRtaW4p CgkJCQkkdGFnX2NsYXNzIC49ICJ0YWdTaXplU21hbGxlc3QiOwoJCQllbHNlIGlmICgkdGFn c193ZWlnaHRbJHRhZ10gPT0gJG1heCkKCQkJCSR0YWdfY2xhc3MgLj0gInRhZ1NpemVMYXJn ZXN0IjsKCQkJZWxzZQoJCQkJJHRhZ19jbGFzcyAuPSAidGFnU2l6ZU1lZGl1bSI7CgkJCSR0 YWdfY2xhc3MgLj0gJyB0YWdTaXplJyAuICgkdGFnc193ZWlnaHRbJHRhZ10gKyAxIC0gJG1p bik7CgkJCSR0YWdfY2xhc3MgLj0gJyInOwoJCX0KCgkJLy9hZGFwdGVkIGZyb20gY29kZSBi eSBnZHRyb2lhbm8sIHNlZSBodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/cGlkPTEwMjg3NSNwMTAyODc1CgkJJHRpdGxlY291bnQgPSAnJzsKCQlpZiAoJHRp dGxlKQoJCQkkdGl0bGVjb3VudCA9ICcgdGl0bGU9IicgLiAkdGl0bGUgLiAnIic7CgkJJGRp c3BsYXljb3VudD0gJyc7CgkJJGNvdW50ID0gJGNvdW50d3JhcGNoYXJzezB9IC4gJHRhZ3Nf d2VpZ2h0WyR0YWddIC4gJGNvdW50d3JhcGNoYXJzezF9OwoJCWlmICgkc2hvd2NvdW50cyA9 PSAndGl0bGUnIHx8ICRzaG93Y291bnRzID09ICdib3RoJykKCQkJJHRpdGxlY291bnQgPSAn IHRpdGxlPSInIC4gJHRpdGxlIC4gJGNvdW50IC4gJyInOwoJCWlmICgkc2hvd2NvdW50cyAm JiAkc2hvd2NvdW50cyAhPSAndGl0bGUnKQoJCQkkZGlzcGxheWNvdW50ID0gJyAnIC4gJGNv dW50OwoKCQlpZiAoJGdlbmVyYXRlbGlua3MpIHsKCQkJJHdob2xldXJsID0gJyInIC4gJHVy bHByZWZpeCAuIHRydV90YWdzX3VybGVuY29kZShzdHJfcmVwbGFjZSgnICcsICctJywgJHRh ZykpIC4gJHVybHN1ZmZpeCAuICciJzsKCQkJJHRhZ3NfaHRtbFtdID0gJzxhIGhyZWY9JyAu ICR3aG9sZXVybCAuICR0YWdfY2xhc3MgLiAkc3R5bGUgLiAkdGl0bGVjb3VudCAuICc+JyAu ICR0YWcgLiAnPC9hPicgLiAkZGlzcGxheWNvdW50OwoJCX0gZWxzZSBpZiAoJHRhZ19jbGFz cyB8fCAkc3R5bGUgfHwgdGl0bGVjb3VudCkgewoJCQkkdGFnc19odG1sW10gPSAnPHNwYW4n IC4gJHRhZ19jbGFzcyAuICRzdHlsZSAuICR0aXRsZWNvdW50IC4gJz4nIC4gJHRhZyAuICc8 L3NwYW4+JyAuICRkaXNwbGF5Y291bnQ7CgkJfSBlbHNlIHsKCQkJJHRhZ3NfaHRtbFtdID0g JHRhZyAuICRkaXNwbGF5Y291bnQ7CgkJfQoJfQoKCXJldHVybiBkb1dyYXAoJHRhZ3NfaHRt bCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzLCAkYnJlYWtjbGFzcyk7Cn0KCgojIyMgT1RI RVIgU1VQUE9SVCBGVU5DVElPTlMgIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKCmZ1bmN0aW9uIHRydV90YWdzX3RyaW1fdGFncygkdGFnX2FycmF5KSB7CgkkdHJpbW1l ZCA9IGFycmF5KCk7Cglmb3JlYWNoICgkdGFnX2FycmF5IGFzICR0YWcpIHsKCQlpZiAoIiIg IT0gdHJpbSgkdGFnKSkgewoJCQkkdHJpbW1lZFtdID0gdHJpbSgkdGFnKTsKCQl9Cgl9Cgly ZXR1cm4gJHRyaW1tZWQ7Cn0KCgpmdW5jdGlvbiB0cnVfdGFnc19maWVsZCgpIHsKCXJldHVy biAnS2V5d29yZHMnOwp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3NfZml4dXBfcXVlcnlfYXR0cygk YXR0cywgJHRhZ19wYXJhbWV0ZXIpIHsKCSRrZXl3b3JkcyA9IGV4cGxvZGUoJywnLCAkdGFn X3BhcmFtZXRlcik7Cglmb3JlYWNoICgka2V5d29yZHMgYXMgJGtleXdvcmQpIHsKCQlpZiAo c3RycG9zKCRrZXl3b3JkLCAnLScpICE9PSBmYWxzZSkgewoJCQkka2V5d29yZHNbXSA9IHN0 cl9yZXBsYWNlKCctJywgJyAnLCAka2V5d29yZCk7CgkJfQoJfQoJJGF0dHNbJ2tleXdvcmRz J10gPSBpbXBsb2RlKCcsJywgJGtleXdvcmRzKTsKCglpZiAoJGF0dHNbJ3NlY3Rpb24nXSAm JiBzdHJwb3MoJGF0dHNbJ3NlY3Rpb24nXSwgJywnKSAhPT0gZmFsc2UpCgkJJGF0dHNbJ3Nl Y3Rpb24nXSA9ICcnOwoKCWlmICghJGF0dHNbJ2xpbWl0J10pCgkJJGF0dHNbJ2xpbWl0J10g PSAnMTAwMCc7CgkkYXR0c1snYWxsb3dvdmVycmlkZSddID0gdHJ1ZTsKCglyZXR1cm4gJGF0 dHM7Cn0KCgpmdW5jdGlvbiB0cnVfdGFnc19yZWRvX2FydGljbGVfc2VhcmNoKCRhdHRzKSB7 CgkkdGhlQXR0cyA9IGxBdHRzKGFycmF5KCdsaW1pdCcgICAgID0+IDEwMDAsCgkJCQknY2F0 ZWdvcnknICA9PiAnJywKCQkJCSdzZWN0aW9uJyAgID0+ICcnLAoJCQkJJ2V4Y2VycHRlZCcg PT4gJycsCgkJCQknYXV0aG9yJyAgICA9PiAnJywKCQkJCSdzb3J0YnknICAgID0+ICdQb3N0 ZWQnLAoJCQkJJ3NvcnRkaXInICAgPT4gJ2Rlc2MnLAoJCQkJJ21vbnRoJyAgICAgPT4gJycs CgkJCQkna2V5d29yZHMnICA9PiAnJywKCQkJCSdmcm9udHBhZ2UnID0+ICcnLAoJCQkJJ2lk JyAgICAgICAgPT4gJycsCgkJCQkndGltZScgICAgICA9PiAncGFzdCcsCgkJCQknc3RhdHVz JyAgICA9PiAnNCcsCgkJCQknb2Zmc2V0JyAgICA9PiAwCgkJCSksJGF0dHMpOwoJZXh0cmFj dCgkdGhlQXR0cyk7CgoJLy9CdWlsZGluZyBxdWVyeSBwYXJ0cwoJJGZyb250cGFnZSA9ICgk ZnJvbnRwYWdlKSA/IGZpbHRlckZyb250UGFnZSgpIDogJyc7CgkkY2F0ZWdvcnkgID0gKCEk Y2F0ZWdvcnkpICA/ICcnIDogIiBhbmQgKChDYXRlZ29yeTE9JyIuZG9zbGFzaCgkY2F0ZWdv cnkpLiInKSBvciAoQ2F0ZWdvcnkyPSciLmRvU2xhc2goJGNhdGVnb3J5KS4iJykpICI7Cgkk c2VjdGlvbiAgID0gKCEkc2VjdGlvbikgICA/ICcnIDogIiBhbmQgU2VjdGlvbiA9ICciLmRv c2xhc2goJHNlY3Rpb24pLiInIjsKCSRleGNlcnB0ZWQgPSAoJGV4Y2VycHRlZD09J3knKSAg PyAiIGFuZCBFeGNlcnB0ICE9JyciIDogJyc7CgkkYXV0aG9yICAgID0gKCEkYXV0aG9yKSAg ICA/ICcnIDogIiBhbmQgQXV0aG9ySUQgPSAnIi5kb3NsYXNoKCRhdXRob3IpLiInIjsKCSRt b250aCAgICAgPSAoISRtb250aCkgICAgID8gJycgOiAiIGFuZCBQb3N0ZWQgbGlrZSAnIi5k b1NsYXNoKCRtb250aCkuIiUnIjsKCSRpZCAgICAgICAgPSAoISRpZCkgICAgICAgID8gJycg OiAiIGFuZCBJRCA9ICciLmludHZhbCgkaWQpLiInIjsKCXN3aXRjaCAoJHRpbWUpIHsKCQlj YXNlICdhbnknOgoJCQkkdGltZSA9ICIiOyBicmVhazsKCQljYXNlICdmdXR1cmUnOgoJCQkk dGltZSA9ICIgYW5kIFBvc3RlZCA+IG5vdygpIjsgYnJlYWs7CgkJZGVmYXVsdDoKCQkJJHRp bWUgPSAiIGFuZCBQb3N0ZWQgPCBub3coKSI7Cgl9CglpZiAoIWlzX251bWVyaWMoJHN0YXR1 cykpCgkJJHN0YXR1cyA9IGdldFN0YXR1c051bSgkc3RhdHVzKTsKCgkkY3VzdG9tID0gJyc7 CgkvLyB0cnlpbmcgY3VzdG9tIGZpZWxkcyBoZXJlCgkkY3VzdG9tRmllbGRzID0gZ2V0Q3Vz dG9tRmllbGRzKCk7CglpZiAoJGN1c3RvbUZpZWxkcykgewoJCWZvcmVhY2goJGN1c3RvbUZp ZWxkcyBhcyAkY0ZpZWxkKSB7CgkJCWlmIChpc3NldCgkYXR0c1skY0ZpZWxkXSkpCgkJCQkk Y3VzdG9tUGFpcnNbJGNGaWVsZF0gPSAkYXR0c1skY0ZpZWxkXTsKCQl9CgkJaWYoIWVtcHR5 KCRjdXN0b21QYWlycykpCgkJCSRjdXN0b20gPSAgYnVpbGRDdXN0b21TcWwoJGN1c3RvbUZp ZWxkcywkY3VzdG9tUGFpcnMpOwoJCWVsc2UKCQkJJGN1c3RvbSA9ICcnOwoJfQoKCS8vQWxs b3cga2V5d29yZHMgZm9yIG5vLWN1c3RvbSBhcnRpY2xlcy4gVGhhdCB0YWdnaW5nIG1vZGUs IHlvdSBrbm93CglpZiAoJGtleXdvcmRzKSB7CgkJJGtleXMgPSBzcGxpdCgnLCcsJGtleXdv cmRzKTsKCQlmb3JlYWNoICgka2V5cyBhcyAka2V5KSB7CgkJCSRrZXlwYXJ0c1tdID0gIiBL ZXl3b3JkcyBsaWtlICclIi5kb1NsYXNoKHRyaW0oJGtleSkpLiIlJyI7CgkJfQoJCSRrZXl3 b3JkcyA9ICIgYW5kICgiIC4gam9pbignIG9yICcsJGtleXBhcnRzKSAuICIpIjsKCX0KCglp ZiAoJGlkKQoJCSRzdGF0dXNxID0gIiBhbmQgU3RhdHVzID49ICc0JyI7CgllbHNlCgkJJHN0 YXR1c3EgPSAiIGFuZCBTdGF0dXM9JyIuZG9TbGFzaCgkc3RhdHVzKS4iJyI7CgoJJHdoZXJl ID0gIjEiIC4gJHN0YXR1c3EuICR0aW1lLgoJCSRpZCAuICRjYXRlZ29yeSAuICRzZWN0aW9u IC4gJGV4Y2VycHRlZCAuICRtb250aCAuICRhdXRob3IgLiAka2V5d29yZHMgLiAkY3VzdG9t IC4gJGZyb250cGFnZTsKCgkJJHBnb2Zmc2V0ID0gJG9mZnNldCAuICcsICc7CgoJJHJzID0g c2FmZV9yb3dzX3N0YXJ0KCIqLCB1bml4X3RpbWVzdGFtcChQb3N0ZWQpIGFzIHVQb3N0ZWQi LCAndGV4dHBhdHRlcm4nLAoJCSR3aGVyZS4gJyBvcmRlciBieSAnIC4gZG9zbGFzaCgkc29y dGJ5KSAuICcgJyAuIGRvU2xhc2goJHNvcnRkaXIpIC4gJyBsaW1pdCAnIC4gZG9TbGFzaCgk bGltaXQpKTsKCglyZXR1cm4gJHJzOwp9CgoKZnVuY3Rpb24gdHJ1X3RhZ3Nfc3RydG9sb3dl cigkc3RyKSB7CglpZiAoZnVuY3Rpb25fZXhpc3RzKCJtYl9zdHJ0b2xvd2VyIikpIHsKCS8v aWYgKHZlcnNpb25fY29tcGFyZShwaHB2ZXJzaW9uKCksICI0LjMuMCIsICI+PSIpKSB7CgkJ cmV0dXJuIG1iX3N0cnRvbG93ZXIoJHN0ciwgIlVURi04Iik7Cgl9IGVsc2UgewoJCXJldHVy biBzdHJ0b2xvd2VyKCRzdHIpOwoJfQp9CgoKIyB0aGlzIHdvcmtzIGFyb3VuZCBhIGJ1ZyBp biBhcGFjaGUgYW5kIG1vZF9yZXdyaXRlIHRoYXQgc2hvd3MgdXAgaWYgeW91IHR1cm4gb24g Y2xlYW4gdXJscwpmdW5jdGlvbiB0cnVfdGFnc191cmxlbmNvZGUoJHN0cikgewoJaWYgKHRy dV90YWdzX2RvdWJsZV91cmxlbmNvZGUoKSkgewoJCXJldHVybiB1cmxlbmNvZGUodXJsZW5j b2RlKCRzdHIpKTsKCX0gZWxzZSB7CgkJcmV0dXJuIHVybGVuY29kZSgkc3RyKTsKCX0KfQoK CgoiO3M6MzoibWQ1IjtzOjMyOiIzMDA4NmIwZDNkYTBiNWM0NzNiMmJkZGQxNDQxNzkwZSI7 fQ==