# vdh_flickr v0.8.11 # Shows your flickr.com pictures in TextPattern. # Ralph von der Heyden # http://www.rvdh.net/vdh_flickr # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjc6InZlcnNpb24iO3M6NjoiMC44LjExIjtzOjY6ImF1dGhvciI7czoyMDoiUmFs cGggdm9uIGRlciBIZXlkZW4iO3M6MTA6ImF1dGhvcl91cmkiO3M6MzA6Imh0dHA6Ly93d3cu cnZkaC5uZXQvdmRoX2ZsaWNrciI7czoxMToiZGVzY3JpcHRpb24iO3M6NDY6IlNob3dzIHlv dXIgZmxpY2tyLmNvbSBwaWN0dXJlcyBpbiBUZXh0UGF0dGVybi4iO3M6NDoidHlwZSI7aTow O3M6NDoibmFtZSI7czoxMDoidmRoX2ZsaWNrciI7czo0OiJoZWxwIjtzOjIzOTMwOiIJPHA+ CmgxLiB2ZGhfZmxpY2tyIGRvY3VtZW50YXRpb248L3A+CgoJPGgyIGlkPSJjb250ZW50cyI+ Q29udGVudHM8L2gyPgoKCTx1bD4KCQk8bGk+PGEgaHJlZj0iI2ZlYXR1cmVzIj5GZWF0dXJl czwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjcmVxdWlyZW1lbnRzIj5SZXF1aXJlbWVudHM8 L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI3F1aWNrc3RhcnQiPlF1aWNrc3RhcnQ8L2E+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI3RhZ3MiPk1haW4gdGFncyBhbmQgdGFnIGF0dHJpYnV0ZXM8 L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2FkZGl0aW9uYWxfdGFncyI+QWRkaXRpb25hbCBU YWdzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNwaWN0dXJlX3NpemVzIj5QaWN0dXJlIHNp emVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNleGFtcGxlX2NzcyI+RXhhbXBsZSBDU1M8 L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2NsZWFuX3VybHMiPkNsZWFuIFVSTHM8L2E+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI2Zvcm1zIj5DdXN0b21pc2luZyB3aXRoIGZvcm1zPC9hPjwv bGk+Cgk8L3VsPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8cD52ZGhf ZmxpY2tyIGlzIGEgZnVsbC1mZWF0dXJlZCBnYWxsZXJ5IHBsdWdpbiBmb3IgdGV4dHBhdHRl cm4sIHVzaW5nIGEgY2xhc3NpY2FsIHRocmVlLXN0ZXAgc3lzdGVtOiBGaXJzdCwgeW91IGFy ZSBzaG93biBhIHNldCAoPWFsYnVtKSBwcmV2aWV3IHBhZ2UsIHRoZW4gYSB0aHVtYm5haWwg cGFnZSwgYW5kIGFuIGltYWdlIHBhZ2UgYWZ0ZXJ3YXJkcy4gVGhlIDxhIGhyZWY9Imh0dHA6 Ly93d3cucnZkaC5uZXQvdmRoX2ZsaWNrci9EZW1vIj5EZW1vPC9hPiBzaG93cyB0aGUgZGVm YXVsdCBjb25maWd1cmF0aW9uLjxiciAvPgpCdXQgeW91IGNhbiBsZWF2ZSBvdXQgYW55IHN0 ZXAsIHNvIHlvdSBjYW4gZm9yIGV4YW1wbGUgbGVhdmUgb3V0IHRoZSBzZXQgcHJldmlldyBv ciBib3RoIHRoZSBzZXQgcHJldmlldyBhbmQgdGh1bWJuYWlscyB0byBzaG93IGFuIGluZGl2 aWR1YWwgaW1hZ2UuPC9wPgoKCTxwPkZ1cnRoZXJtb3JlLCB0aGVzZSBhcmUgb3RoZXIgZmVh dHVyZXMgeW91IG1heSBiZSBpbnRlcmVzdGVkIGluOgoJPHVsPgoJCTxsaT5zZXRzOgoJPHVs PgoJCTxsaT5zaG93IGFsbCBzZXRzIGV4Y2VwdCBvZiBhIGxpc3Qgb2Ygc2V0czwvbGk+CgkJ PGxpPnNob3cgbm8gc2V0cyBleGNlcHQgb2YgYSBsaXN0IG9mIHNldHM8L2xpPgoJCTxsaT5z aG93IHNldCB0aXRsZSwgZGVzY3JpcHRpb24sIG51bWJlciBvZiBwaG90b3M8L2xpPgoJPC91 bD48L2xpPgoJCTxsaT50YWdzOgoJPHVsPgoJCTxsaT5zaG93IGEgbGlzdCBvZiB0aHVtYm5h aWxzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gdGFnLCBvciBhIGxpc3Qg b2YgdGFncyAoPHNwYW4gY2xhc3M9ImNhcHMiPkFORDwvc3Bhbj4gLyBPUiBjb21iaW5hdGlv biBwb3NzaWJsZSk8L2xpPgoJCTxsaT5zaG93IGEgbGlzdCBvZiBhbGwgeW91ciB0YWdzPC9s aT4KCQk8bGk+c2hvdyBhIGxpc3Qgb2YgeW91ciBYIG1vc3QgcG9wdWxhciB0YWdzICh3aGVy ZSBYIGlzIGEgbnVtYmVyKTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPnRodW1ibmFpbHM6Cgk8 dWw+CgkJPGxpPnNob3cgYSBsaXN0IG9mIHRodW1ibmFpbHMgdGhhdCBhcmUgYXNzb2NpYXRl ZCB3aXRoIGEgc2V0PC9saT4KCQk8bGk+c2hvdyBhIGxpc3Qgb2YgdGh1bWJuYWlscyBvZiB5 b3VyIGxhdGVzdCBYIHBpY3M8L2xpPgoJCTxsaT5zaG93IGEgbGlzdCBvZiB0aHVtYm5haWxz IHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gdGFnLCBvciBhIGxpc3Qgb2Yg dGFncyAoPHNwYW4gY2xhc3M9ImNhcHMiPkFORDwvc3Bhbj4gLyBPUiBjb21iaW5hdGlvbiBw b3NzaWJsZSk8L2xpPgoJCTxsaT5zaG93IGEgcmFuZG9tIHNlbGVjdGlvbiBvZiBYIHBpY3Mg b2YgYSBzZXQgLyBhIGxpc3Qgb2YgdGFncyAvIHlvdXIgWSBsYXRlc3QgcGljcyAoaGFuZHkg Zm9yIGJhZGdlcyk8L2xpPgoJCTxsaT5hIGNsaWNrIG9uIGEgdGh1bWJuYWlsIGNhbiBvcGVu IHRoZSBpbmRpdmlkdWFsIGltYWdlIGluIHRoZSBzYW1lIHdpbmRvdyAvIGEgbmV3IHdpbmRv dyAvIGluIGZsaWNrcjwvbGk+CgkJPGxpPmZsYXNoIHNsaWRlc2hvdyBvZiBjdXJyZW50IHRo dW1ibmFpbHM8L2xpPgoJPC91bD48L2xpPgoJCTxsaT5pbmRpdmlkdWFsIGltYWdlOgoJPHVs PgoJCTxsaT5zaG93IGltYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbjwvbGk+CgkJPGxpPnNo b3cgZGF0ZSBwb3N0ZWQgYW5kIGRhdGUgdGFrZW48L2xpPgoJCTxsaT5saW5rIGJhY2sgdG8g dGhlIHNldCBvciB0YWcgbGlzdDwvbGk+CgkJPGxpPmxpbmsgdG8gdGhlIHByZXZpb3VzIGFu ZCBuZXh0IGltYWdlIG9mIGEgc2V0IC8gdGhlIHBob3Rvc3RyZWFtPC9saT4KCQk8bGk+c2hv dyBhIHRodW1iIG9mIHRoZSBwcmV2aW91cyBhbmQgbmV4dCBpbWFnZTwvbGk+CgkJPGxpPnNo b3cgYSBsaXN0IG9mIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGltYWdlPC9s aT4KCQk8bGk+d2hlbiBhbiBpbmRpdmlkdWFsIGltYWdlIGlzIGNsaWNrZWQsIGxpbmsgaXQg dG8gYSBzcGVjaWZpYyB1cmwgLyB0aGUgb3JpZ2luYWwgc2l6ZWQgaW1hZ2UgLyB0aGUgaW1h Z2Ugb24gZmxpY2tyLmNvbSAvIHRoZSBpbWFnZSBpbmZvcm1hdGlvbiBwYWdlIG9uIGZsaWNr ci5jb208L2xpPgoJPC91bD48L2xpPgoJCTxsaT5wYWdpbmF0aW9uOgoJPHVsPgoJCTxsaT5w YWdpbmF0aW9uIGZvciBhbGwga2luZCBvZiB0aHVtYm5haWwgbGlzdHM8L2xpPgoJCTxsaT5z aG93IGN1cnJlbnQgcGFnZTwvbGk+CgkJPGxpPmxpbmsgdG8gcHJldmlvdXMvbmV4dC9maXJz dC9sYXN0IHBhZ2U8L2xpPgoJCTxsaT5zaG93IGxpc3Qgb2YgcGFnZXM8L2xpPgoJCTxsaT5z aG93IHRvdGFsIG51bWJlciBvZiBpbWFnZXM8L2xpPgoJCTxsaT5zaG93IHJhbmdlIG9mIGlt YWdlcyB0aGF0IGlzIGRpc3BsYXllZDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPmdlbmVyYWw6 Cgk8dWw+CgkJPGxpPnNwZWNpZnkgdGhlIHNpemVzIGZvciBzZXQgcHJldmlldywgdGh1bWJu YWlsIGFuZCBpbmRpdmlkdWFsIGltYWdlPC9saT4KCQk8bGk+c2hvdyBwcml2YXRlIHBpY3Ms IHRvbzwvbGk+CgkJPGxpPmNsZWFuIHVybHMgKHNnYl91cmxfaGFuZGxlciBhbmQgLmh0YWNj ZXNzIHR3ZWFrIG5lZWRlZCk8L2xpPgoJCTxsaT52YWxpZCA8c3BhbiBjbGFzcz0iY2FwcyI+ WEhUTUw8L3NwYW4+IDEuMCBTdHJpY3QgaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uPC9saT4K CQk8bGk+dHdlYWthYmxlIDxzcGFuIGNsYXNzPSJjYXBzIj5YSFRNTDwvc3Bhbj4gdmlhIGZv cm1zPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+PC9wPgoKCTxwPjxhIGhyZWY9IiNjb250ZW50 cyI+JnVhcnI7IHRvcDwvYT48L3A+CgoJPGgyIGlkPSJyZXF1aXJlbWVudHMiPlJlcXVpcmVt ZW50czwvaDI+CgoJPHA+SW4gb3JkZXIgdG8gcnVuIHZkaF9mbGlja3IsIHlvdSBtdXN0IGZp dCB0aGVzZSByZXF1aXJlbWVudHMgb24geW91ciBzZXJ2ZXI6PC9wPgoKCTx1bD4KCQk8bGk+ VGV4dHBhdHRlcm4gdmVyc2lvbiA0IG9yIG5ld2VyPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9 ImNhcHMiPlBIUDwvc3Bhbj4gNSB3aXRoIFNpbXBsZVhNTCBlbmFibGVkLjwvbGk+CgkJPGxp PjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IDQuMy5YIHdpdGggPHNwYW4gY2xhc3M9 ImNhcHMiPkRPTS1YTUw8L3NwYW4+IGVuYWJsZWQuPC9saT4KCTwvdWw+CgoJPHA+PGEgaHJl Zj0iI2NvbnRlbnRzIj4mdWFycjsgdG9wPC9hPjwvcD4KCgk8aDIgaWQ9InF1aWNrc3RhcnQi PlF1aWNrc3RhcnQ8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRlIGEgbmV3IHNlY3Rpb24gd2hp Y2ggd2lsbCBsYXRlciBob2xkIHlvdXIgR2FsbGVyeS48L2xpPgoJCTxsaT5DcmVhdGUgYSBu ZXcgYXJ0aWNsZSB3aXRoIG9ubHkgdGhlIGZvbGxvd2luZyB0ZXh0IGluIGl0OiA8YnIgLz4K IDxjb2RlPiYjNjA7dHhwOnZkaF9mbGlja3IgbnNpZD0mIzM0OzEyMzQ1Njc4QE4wMCYjMzQ7 IC8mIzYyOzwvY29kZT4gPGJyIC8+CiBPZiBjb3Vyc2UgeW91IGhhdmUgdG8gcmVwbGFjZSB0 aGUgbnNpZCB2YWx1ZSBieSB5b3VyIG93biBkYXRhIGZyb20gZmxpY2tyLmNvbS4gWW91IGNh biB1c2UgPGEgaHJlZj0iaHR0cDovL2lkZ2V0dHIuY29tLyI+aWRnZXR0cjwvYT4gaW4gb3Jk ZXIgdG8gZGV0ZXJtaW5lIHlvdXIgbnNpZC4gPGJyIC8+CiBBbHNvIG5vdGljZSB0aGF0IHlv dSBjYW4gcHV0IHR3byBzcGFjZXMgYmVmb3JlIHRoZSB0eHAtdGFnIHRvIHByZXZlbnQgdGV4 dHBhdHRlcm4gZnJvbSB3cmFwcGluZyB0aGUgZ2FsbGVyeSBpbiBwLXRhZ3MuIDxiciAvPgog PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkg bnNpZCBpbiB0aGUgdmRoX2ZsaWNrciBzb3VyY2UgY29kZS4gVGhpcyBtYWtlcyBzZW5zZSBp ZiB5b3UgYXJlIHVzaW5nIHNldmVyYWwgZ2FsbGVyaWVzIG9yIHZkaF9mbGlja3ItdGFncyBv biB5b3VyIHNpdGUuPC9saT4KCQk8bGk+U2F2ZSB0aGUgYXJ0aWNsZSBpbiB0aGUgc2VjdGlv biB5b3UgY3JlYXRlZCBpbiB0aGUgZmlyc3Qgc3RlcC48L2xpPgoJCTxsaT5Qb2ludCB5b3Vy IGJyb3dzZXIgdG8gaHR0cDovL3lvdXJkb21haW4uY29tL2dhbGxlcnlzZWN0aW9uIChvciBo dHRwOi8veW91cmRvbWFpbi5jb20vP3M9Z2FsbGVyeXNlY3Rpb24pLiA8YnIgLz4KIFlvdSBz aG91bGQgc2VlIGEgcHJldmlldyBwaWMgZm9yIGFsbCB5b3VyIHNldHMuIElmIHlvdSBjbGlj ayBvbiBvbmUgb2YgdGhlIHBpY3MsIHlvdSBzaG91bGQgc2VlIGEgdGh1bWJuYWlsIG92ZXJ2 aWV3IG9mIHRoZSBzZWxlY3RlZCBzZXQuIElmIHlvdSBjbGljayBvbiBvbmUgb2YgdGhlIHRo dW1ibmFpbHMsIHlvdSBzaG91bGQgc2VlIHRoZSBwaWMgaW4gNjQww5c0ODAuPC9saT4KCQk8 bGk+RG93bmxvYWQgPGEgaHJlZj0iI2V4YW1wbGVfY3NzIj50aGlzIGNzczwvYT4gdG8gbWFr ZSB5b3VyIHBob3RvIHBhZ2UgbG9vayBiZXR0ZXIuPC9saT4KCTwvdWw+CgoJPHA+PGEgaHJl Zj0iI2NvbnRlbnRzIj4mdWFycjsgdG9wPC9hPjwvcD4KCgk8aDIgaWQ9InRhZ3MiPk1haW4g dGFncyBhbmQgdGFnIGF0dHJpYnV0ZXM8L2gyPgoKCTxwPlRoZXNlIHRhZ3MgY2FuIGVpdGhl ciBnbyBpbnRvIGFuIGFydGljbGUgb3IgYSBwYWdlIHRlbXBsYXRlLjwvcD4KCgk8aDM+U3Rl cCAxOiBBdHRyaWJ1dGVzIGNvbmNlcm5pbmcgdGhlIHNldCBwcmV2aWV3ICh2ZGhfZmxpY2ty KS48L2gzPgoKCTxwPlNob3dzIHRoZSBwcmV2aWV3IGltYWdlLCB0aXRsZSBhbmQgZGVzY3Jp cHRpb24gb2Ygc3BlY2lmaWMgc2V0cywgb3IgYWxsIHNldHMuPC9wPgoKCTxoND5NYW5kYXRv cnkgQXR0cmlidXRlczo8L2g0PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5uc2lkPC9zdHJvbmc+ LCBpZiBub3Qgc3BlY2lmaWVkIGluIHRoZSBzb3VyY2UgY29kZS48L2xpPgoJPC91bD4KCgk8 aDQ+UG9zc2libGUgQXR0cmlidXRlczo8L2g0PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5zZXRf cHJldmlld19zaXplPSYjODIyMDttJiM4MjIxOzwvc3Ryb25nPiBQb3NzaWJsZSBpbWFnZSBz aXplcyBhcmUgZGVzY3JpYmVkIGJlbG93LjwvbGk+CgkJPGxpPjxzdHJvbmc+bW9kZT0mIzgy MjA7YWxsfG5vbmUmIzgyMjE7PC9zdHJvbmc+IHZkaF9mbGlja3IgYmFzaWNhbGx5IHN1cHBv cnRzIHR3byBtb2RlcyBmb3Igc2VsZWN0aW5nIGZsaWNrciBzZXRzOiBhbGwgYW5kIG5vbmUu IERlZmF1bHQgaXMgYWxsLjwvbGk+CgkJPGxpPjxzdHJvbmc+ZXhjZXB0PSYjODIyMDsxNjJY WFgsMTYzWFhYJiM4MjIxOzwvc3Ryb25nPiBGdXJ0aGVybW9yZSB5b3UgY2FuIHNwZWNpZnkg YSBsaXN0IG9mIGV4Y2VwdGlvbnMgZXhjZXB0aW9ucy4gPGJyIC8+CiBFeGFtcGxlczo8L2xp PgoJCTxsaT48c3Ryb25nPmVtYWlsPSYjODIyMDt5b3VAdGhlcmUuY29tJiM4MjIxOyBwYXNz d29yZD0mIzgyMjA7eW91cnBhc3N3b3JkJiM4MjIxOzwvc3Ryb25nPiBJZiB5b3UgZW50ZXIg eW91ciBlTWFpbCBhbmQgcGFzc3dvcmQgKHRoZSBvbmUgeW91IHVzZSB0byBsb2dpbiB0byBm bGlja3IpLCB2ZGhfZmxpY2tyIHdpbGwgc2hvdyB5b3VyIHByaXZhdGUgcGljcywgdG9vLgoJ PHVsPgoJCTxsaT48Y29kZT4mIzYwO3R4cDp2ZGhfZmxpY2tyIG5zaWQ9JiMzNDsxMjM0NTY3 OEBOMDAmIzM0OyBtb2RlPSYjMzQ7bm9uZSYjMzQ7IGV4Y2VwdD0mIzM0OzE2MlhYWCYjMzQ7 IC8mIzYyOzwvY29kZT4gPGJyIC8+CiBUaGlzIHdpbGwgc2hvdyBvbmx5IHRoZSBzZXQgbnVt YmVyIDE2MlhYWC48L2xpPgoJCTxsaT48Y29kZT4mIzYwO3R4cDp2ZGhfZmxpY2tyIG5zaWQ9 JiMzNDsxMjM0NTY3OEBOMDAmIzM0OyBtb2RlPSYjMzQ7YWxsJiMzNDsgZXhjZXB0PSYjMzQ7 MTYyWFhYLDE2M1hYWCYjMzQ7IC8mIzYyOzwvY29kZT4gPGJyIC8+CiBUaGlzIHdpbGwgc2hv dyBhbGwgc2V0cyBleGNlcHQgbnVtYmVycyAxNjJYWFggYW5kIDE2M1hYWC4gTXVsdGlwbGUg ZXhjZXB0aW9ucyBtdXN0IGJlIGNvbW1hLXNlcGVyYXRlZCB3aXRoIG5vIHNwYWNlcyBpbiBi ZXR3ZWVuLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxzdHJvbmc+dXNlX2FydGljbGV1cmw9 JiM4MjIwOzB8MSYjODIyMTs8L3N0cm9uZz4gSW5jbHVkZSB0aGUgYXJ0aWNsZSBpZCBhbmQv b3IgdGl0bGUgaW4gdGhlIHVybCAoZGVwZW5kaW5nIG9uIHlvdXIgdXJsIHNjaGVtZSksIHdo ZW4gbGlua2luZyB0byB0aGUgdGh1bWJuYWlscyBhbmQgaW5kaXZpZHVhbCBpbWFnZXMuIERl ZmF1bHQgaXMgMCwgd2hlbiB2ZGhfZmxpY2tyIHdhcyBsb2FkZWQgZnJvbSBhbiBhcnRpY2xl IGxpc3QsIGFuZCAxIGlmIHZkaF9mbGlja3Igd2FzIGxvYWRlZCBmcm9tIGFuIGluZGl2aWR1 YWwgYXJ0aWNsZS48L2xpPgoJPC91bD4KCgk8aDM+U3RlcCAyOiBBdHRyaWJ1dGVzIGNvbmNl cm5pbmcgdGhlIHRodW1ibmFpbCB2aWV3ICh2ZGhfZmxpY2tyX3RodW1ibmFpbHMpLjwvaDM+ CgoJPHA+U2hvd3MgYWxsIGltYWdlcyBpbiBhIHNwZWNpZmljIGZsaWNrciBzZXQsIGFsbCB0 aGUgaW1hZ2VzIGFzc29jaWF0ZWQgd2l0aCBhIGxpc3Qgb2YgdGFncyBvciB0aGUgWCBsYXRl c3QgaW1hZ2VzLjwvcD4KCgk8aDQ+TWFuZGF0b3J5IEF0dHJpYnV0ZXM6PC9oND4KCgk8dWw+ CgkJPGxpPjxzdHJvbmc+bnNpZDwvc3Ryb25nPiwgaWYgbm90IHNwZWNpZmllZCBpbiB0aGUg c291cmNlIGNvZGUuPC9saT4KCQk8bGk+PHN0cm9uZz5zZXQ9JiM4MjIwOzEyMzQ1NjcmIzgy MjE7PC9zdHJvbmc+IFRoZSBudW1iZXIgb2YgdGhlIHNldCB5b3Ugd2FudCB0byBzaG93LiBU byBkZXRlcm1pbmUgdGhpcyBudW1iZXIsIGxvZyBpbnRvIGZsaWNrciwgY2xpY2sgb24gdGhl IHNldCBhbmQgbG9vayBhdCB0aGUgdXJsLiBUaGUgc2V0IG51bWJlciBpcyB0aGUgbGFzdCBw YXJ0IG9mIHRoZSB1cmwsIHVzdWFsbHkgYSBzaXgtZGlnaXRzIG51bWJlci4gPGJyIC8+CiBF eGFtcGxlOiA8Y29kZT5odHRwOi8vd3d3LmZsaWNrci5jb20vcGhvdG9zLzEyMzQ1Njc4QE4w MC9zZXRzLzEzNTc4OS88L2NvZGU+IDxiciAvPgogSW4gdGhpcyBjYXNlIHRoZSBzZXQgbnVt YmVyIGlzIDEzNTc4OS4gPGJyIC8+CiBPUjogPGJyIC8+CiA8c3Ryb25nPnRhZ3M9JiM4MjIw O3RhZzEsdGFnMiYjODIyMTs8L3N0cm9uZz4gTGlzdCBvZiB0YWdzIHRoYXQgc2hvdWxkIGJl IGRpc3BsYXllZC4gTXVsdGlwbGUgdGFncyBtdXN0IGJlIGNvbW1hLXNlcGVyYXRlZCB3aXRo IG5vIHNwYWNlcyBpbiBiZXR3ZWVuLiBCeSBkZWZhdWx0LCBhbGwgaW1hZ2VzIGNvbnRhaW5p bmcgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIHRhZ3MgaXMgc2hvd24uIDxiciAvPgogT1I6IDxi ciAvPgogPHN0cm9uZz5sYXRlc3Q9JiM4MjIwOzIwJiM4MjIxOzwvc3Ryb25nPiBTaG93IHRo ZSBsYXRlc3QgMjAgcGljcy48L2xpPgoJPC91bD4KCgk8aDQ+UG9zc2libGUgQXR0cmlidXRl czo8L2g0PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz50aHVtYm5haWxfc2l6ZT0mIzgyMjA7dCYj ODIyMTs8L3N0cm9uZz4gUG9zc2libGUgaW1hZ2Ugc2l6ZXMgYXJlIGRlc2NyaWJlZCBiZWxv dy4gRG9uJiM4MjE3O3QgYmUgY29uZnVzZWQgYnkgdGhlIG5hbWUgdGh1bWJuYWlsX3NpemUu IFlvdSBjYW4gc2VsZWN0IGFueSBzaXplLjwvbGk+CgkJPGxpPjxzdHJvbmc+cmFuZG9tPSYj ODIyMDsxMCYjODIyMTs8L3N0cm9uZz4gU2hvdyBhIHJhbmRvbSBzZWxlY3Rpb24gb2YgMTAg b2YgdGhlIHNwZWNpZmllZCBzZXQgLyBsaXN0IG9mIHRhZ3MgLyBsYXRlc3QgcGljcy48L2xp PgoJCTxsaT48c3Ryb25nPnRhZ19hbmQ9JiM4MjIwOzB8MSYjODIyMTs8L3N0cm9uZz4gQ2hh bmdlIHRoZSBtb2RlIGhvdyBtdWx0aXBsZSB0YWdzIGFyZSBoYW5kbGVkLiBJZiBzd2l0Y2hl ZCB0byAmIzgyMjA7MSYjODIyMTssIHZkaF9mbGlja3Igd2lsbCBvbmx5IHNob3cgdGhlIHBp Y3R1cmVzIHRoYXQgY29udGFpbiA8c3BhbiBjbGFzcz0iY2FwcyI+QUxMPC9zcGFuPiBvZiB0 aGUgdGFncyBzcGVjaWZpZWQuIERlZmF1bHQgaXMgb2ZmICgwKS48L2xpPgoJCTxsaT48c3Ry b25nPm9wZW49JiM4MjIwO3NlbGZ8d2luZG93fGZsaWNrciYjODIyMTs8L3N0cm9uZz4KCTx1 bD4KCQk8bGk+c2VsZiAoZGVmYXVsdCk6IG9wZW5zIGltYWdlcyB3aXRoaW4gdGhlIHdlYnNp dGU8L2xpPgoJCTxsaT53aW5kb3c6IG9wZW5zIGltYWdlIGluIGEgbmV3IHdpbmRvdzwvbGk+ CgkJPGxpPmZsaWNrcjogb3BlbnMgaW1hZ2Ugd2l0aGluIHRoZSBmbGlja3IuY29tIHdlYnNp dGU8L2xpPgoJPC91bD48L2xpPgoJPC91bD4KCgk8aDM+U3RlcCAzOiBBdHRyaWJ1dGVzIGNv bmNlcm5pbmcgaW1kaXZpZHVhbCBpbWFnZXMgKHZkaF9mbGlja3JfaW1nKS48L2gzPgoKCTxw PlNob3dzIGEgc2luZ2xlIGltYWdlIGZyb20gZmxpY2tyLjwvcD4KCgk8aDQ+TWFuZGF0b3J5 IEF0dHJpYnV0ZXM6PC9oND4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+bnNpZDwvc3Ryb25nPiwg aWYgbm90IHNwZWNpZmllZCBpbiB0aGUgc291cmNlIGNvZGUuPC9saT4KCQk8bGk+PHN0cm9u Zz5pbWc9JiM4MjIwOzEyMzQ1NjcmIzgyMjE7PC9zdHJvbmc+IFRoZSBudW1iZXIgb2YgdGhl IGltYWdlIHlvdSB3YW50IHRvIHNob3cuIFRvIGRldGVybWluZSB0aGlzIG51bWJlciwgbG9n IGludG8gZmxpY2tyLCBjbGljayBvbiB0aGUgaW1hZ2UgYW5kIGxvb2sgYXQgdGhlIHVybC4g VGhlIGltYWdlIG51bWJlciBpcyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSB1cmwsIHVzdWFsbHkg YSBzZXZlbi1kaWdpdHMgbnVtYmVyLiBFeGFtcGxlOiA8YnIgLz4KIGh0dHA6Ly93d3cuZmxp Y2tyLmNvbS9waG90b3MvMTIzNDU2NzglNDBOMDAvNzY1NDMyMS8gPGJyIC8+CiBJbiB0aGlz IGNhc2UgdGhlIGltYWdlIG51bWJlciBpcyA3NjU0MzIxLjwvbGk+Cgk8L3VsPgoKCTxoND5Q b3NzaWJsZSBBdHRyaWJ1dGVzOjwvaDQ+CgoJPHVsPgoJCTxsaT48c3Ryb25nPmltZ19zaXpl PSYjODIyMDtuJiM4MjIxOzwvc3Ryb25nPiBQb3NzaWJsZSBpbWFnZSBzaXplcyBhcmUgZGVz Y3JpYmVkIGJlbG93LjwvbGk+CgkJPGxpPjxzdHJvbmc+b3JpZ2luYWxfc2l6ZT0mIzgyMjA7 byYjODIyMTs8L3N0cm9uZz4gU2l6ZSBvZiB0aGUgbGlua2VkIGltYWdlIGlmIGxpbms9JiM4 MjIwO29yaWdpbmFsX3NpemUmIzgyMjE7IGlzIHVzZWQuPC9saT4KCQk8bGk+PHN0cm9uZz5s aW5rPSYjODIyMDtodHRwOi8vd3d3Lmdvb2dsZS5jb218b3JpZ2luYWxfc2l6ZXxmbGlja3J8 aW1nX2luZm9ybWF0aW9uJiM4MjIxOzwvc3Ryb25nPiBMaW5rIHRoZSBpbWFnZSB0byBhIHNw ZWNpZmljIHVybCwgdGhlIG9yaWdpbmFsIHNpemVkIGltYWdlLCB0aGUgaW1hZ2Ugb24gZmxp Y2tyLmNvbSBvciBvbiB0aGUgaW1hZ2UgaW5mb3JtYXRpb24gcGFnZSBvbiBmbGlja3IuY29t LjwvbGk+CgkJPGxpPjxzdHJvbmc+Y29udGV4dG1vZGU9JiM4MjIwO3RleHR8aW1nJiM4MjIx Ozwvc3Ryb25nPiBTaG93IG5leHQgYW5kIHByZXZpb3VzIGltYWdlIGFzIHRleHQgKGVkaXRh YmxlIHZpYSB0ZXh0X25leHRfaW1nX2xpbmtfdGV4dCkgb3IgYXMgc21hbGwgcHJldmlldyBp bWFnZS4gRGVmYXVsdCBpcyB0ZXh0LjwvbGk+Cgk8L3VsPgoKCTxwPjxhIGhyZWY9IiNjb250 ZW50cyI+JnVhcnI7IHRvcDwvYT48L3A+CgoJPGgyIGlkPSJhZGRpdGlvbmFsX3RhZ3MiPkFk ZGl0aW9uYWwgVGFnczwvaDI+CgoJPHA+VGhlc2UgVGFncyBhcmUgaW5kZXBlbmRhbnQgb2Yg dGhlIDNzdGVwIGZ1bmN0aW9uYWxpdHkgYW5kIGNhbiBiZSB1c2VkIGZvciBhbnkgb2YgdGhl IHRocmVlIHN0ZXBzLiBHb29kIGZvciBuYXZpZ2F0aW9uIGJhcnMgdGhhdCBzaG91bGQgYmUg YWx3YXlzIHZpc2libGUuPC9wPgoKCTxoMz52ZGhfZmxpY2tyX3NldF9saXN0LjwvaDM+CgoJ PHA+U2hvd3MgYSBsaXN0IG9mIGFsbCB5b3VyIGZsaWNrciBzZXRzLjwvcD4KCgk8aDQ+TWFu ZGF0b3J5IEF0dHJpYnV0ZXM6PC9oND4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+bnNpZDwvc3Ry b25nPiwgaWYgbm90IHNwZWNpZmllZCBpbiB0aGUgc291cmNlIGNvZGUuPC9saT4KCTwvdWw+ CgoJPGg0PlBvc3NpYmxlIEF0dHJpYnV0ZXM6PC9oND4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+ d3JhcHRhZz0mIzgyMjE7Li4uJiM4MjIxOzwvc3Ryb25nPiBTZWUgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4uPC9saT4KCQk8bGk+PHN0cm9uZz5icmVhaz0mIzgyMjE7Li4uJiM4 MjIxOzwvc3Ryb25nPiBTZWUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4uPC9saT4K CQk8bGk+PHN0cm9uZz5lbWFpbD0mIzgyMjA7eW91QHRoZXJlLmNvbSYjODIyMTsgcGFzc3dv cmQ9JiM4MjIwO3lvdXJwYXNzd29yZCYjODIyMTs8L3N0cm9uZz4gSWYgeW91IGVudGVyIHlv dXIgZU1haWwgYW5kIHBhc3N3b3JkICh0aGUgb25lcyB5b3UgdXNlIHRvIGxvZ2luIHRvIGZs aWNrciksIHZkaF9mbGlja3Igd2lsbCBzaG93IHlvdXIgcHJpdmF0ZSBzZXRzLCB0b28uPC9s aT4KCTwvdWw+CgoJPGgzPnZkaF9mbGlja3JfdGFnX2xpc3RfYWxsPC9oMz4KCgk8cD5TaG93 cyBhIGxpc3Qgb2YgYWxsIHlvdXIgZmxpY2tyIHRhZ3MuPC9wPgoKCTxoND5NYW5kYXRvcnkg QXR0cmlidXRlczo8L2g0PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5uc2lkPC9zdHJvbmc+LCBp ZiBub3Qgc3BlY2lmaWVkIGluIHRoZSBzb3VyY2UgY29kZS48L2xpPgoJPC91bD4KCgk8aDQ+ UG9zc2libGUgQXR0cmlidXRlczo8L2g0PgoKCTx1bD4KCQk8bGk+PHN0cm9uZz53cmFwdGFn PSYjODIyMTsuLi4mIzgyMjE7PC9zdHJvbmc+IFNlZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPi48L2xpPgoJCTxsaT48c3Ryb25nPmJyZWFrPSYjODIyMTsuLi4mIzgyMjE7PC9z dHJvbmc+IFNlZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPi48L2xpPgoJCTxsaT48 c3Ryb25nPmVtYWlsPSYjODIyMDt5b3VAdGhlcmUuY29tJiM4MjIxOyBwYXNzd29yZD0mIzgy MjA7eW91cnBhc3N3b3JkJiM4MjIxOzwvc3Ryb25nPiBJZiB5b3UgZW50ZXIgeW91ciBlTWFp bCBhbmQgcGFzc3dvcmQgKHRoZSBvbmVzIHlvdSB1c2UgdG8gbG9naW4gdG8gZmxpY2tyKSwg dmRoX2ZsaWNrciB3aWxsIHNob3cgeW91ciBwcml2YXRlIHRhZ3MsIHRvby48L2xpPgoJPC91 bD4KCgk8aDM+dmRoX2ZsaWNrcl90YWdfbGlzdF9wb3B1bGFyPC9oMz4KCgk8cD5TaG93cyBh IGxpc3Qgb2YgeW91ciBYIG1vc3QgcG9wdWxhciBmbGlja3IgdGFncy4gWCBpcyBhIG51bWJl ci48L3A+CgoJPGg0Pk1hbmRhdG9yeSBBdHRyaWJ1dGVzOjwvaDQ+CgoJPHVsPgoJCTxsaT48 c3Ryb25nPm5zaWQ8L3N0cm9uZz4sIGlmIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNvdXJjZSBj b2RlLjwvbGk+Cgk8L3VsPgoKCTxoND5Qb3NzaWJsZSBBdHRyaWJ1dGVzOjwvaDQ+CgoJPHVs PgoJCTxsaT48c3Ryb25nPmNvdW50PSYjODIyMDsxMCYjODIyMTs8L3N0cm9uZz4sIHRoZSBu dW1iZXIgb2YgdGFncyB0byBkaXNwbGF5LiBEZWZhdWx0cyB0byAxMC48L2xpPgoJCTxsaT48 c3Ryb25nPndyYXB0YWc9JiM4MjIxOy4uLiYjODIyMTs8L3N0cm9uZz4gU2VlIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRvY3VtZW50YXRpb24uPC9saT4KCQk8bGk+PHN0cm9u Zz5icmVhaz0mIzgyMjE7Li4uJiM4MjIxOzwvc3Ryb25nPiBTZWUgPHNwYW4gY2xhc3M9ImNh cHMiPlRYUDwvc3Bhbj4gZG9jdW1lbnRhdGlvbi48L2xpPgoJCTxsaT48c3Ryb25nPmVtYWls PSYjODIyMDt5b3VAdGhlcmUuY29tJiM4MjIxOyBwYXNzd29yZD0mIzgyMjA7eW91cnBhc3N3 b3JkJiM4MjIxOzwvc3Ryb25nPiBJZiB5b3UgZW50ZXIgeW91ciBlTWFpbCBhbmQgcGFzc3dv cmQgKHRoZSBvbmVzIHlvdSB1c2UgdG8gbG9naW4gdG8gZmxpY2tyKSwgdmRoX2ZsaWNrciB3 aWxsIHNob3cgeW91ciBwcml2YXRlIHRhZ3MsIHRvby48L2xpPgoJPC91bD4KCgk8cD48YSBo cmVmPSIjY29udGVudHMiPiZ1YXJyOyB0b3A8L2E+PC9wPgoKCTxoMiBpZD0icGljdHVyZV9z aXplcyI+UGljdHVyZSBzaXplczwvaDI+CgoJPHA+VGhlIHBpY3R1cmUgc2l6ZXMgYXJlIGRl dGVybWluZWQgYnkgZmxpY2tyIGFuZCBjYW5ub3QgYmUgY2hhbmdlZCB0byBhbiBpbmRpdmlk dWFsIHZhbHVlLiBGbGlja3Igb2ZmZXJzIHRoZSBmb2xsb3dpbmcgc2l6ZXM6PC9wPgoKCTx1 bD4KCQk8bGk+PHN0cm9uZz5zPC9zdHJvbmc+ICAgc21hbGwgc3F1YXJlIDc1JiMyMTU7NzU8 L2xpPgoJCTxsaT48c3Ryb25nPnQ8L3N0cm9uZz4gICB0aHVtYm5haWwsIDEwMCBvbiBsb25n ZXN0IHNpZGU8L2xpPgoJCTxsaT48c3Ryb25nPm08L3N0cm9uZz4gICBzbWFsbCwgMjQwIG9u IGxvbmdlc3Qgc2lkZTwvbGk+CgkJPGxpPjxzdHJvbmc+bjwvc3Ryb25nPiAgIG1lZGl1bSwg NTAwIG9uIGxvbmdlc3Qgc2lkZTwvbGk+CgkJPGxpPjxzdHJvbmc+Yjwvc3Ryb25nPiAgIGxh cmdlLCAxMDI0IG9uIGxvbmdlc3Qgc2lkZSAob25seSBleGlzdHMgZm9yIHZlcnkgbGFyZ2Ug b3JpZ2luYWwgaW1hZ2VzKTwvbGk+CgkJPGxpPjxzdHJvbmc+bzwvc3Ryb25nPiAgIG9yaWdp bmFsIGltYWdlLCBlaXRoZXIgYSBqcGcsIGdpZiBvciBwbmcsIGRlcGVuZGluZyBvbiBzb3Vy Y2UgZm9ybWF0PC9saT4KCTwvdWw+CgoJPHA+WW91IGNhbiBzZWxlY3Qgc2l6ZXMgYXMgZm9s bG93czo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT4mIzYwO3R4cDp2ZGhfZmxpY2tyIHNldF9w cmV2aWV3X3NpemU9JiMzOTttJiMzOTsgdGh1bWJuYWlsX3NpemU9JiMzOTtzJiMzOTsgaW1n X3NpemU9JiMzOTtuJiMzOTsgLyYjNjI7PC9jb2RlPjwvbGk+Cgk8L3VsPgoKCTxwPkRlZmF1 bHQgZm9yIHNldF9wcmV2aWV3X3NpemUgaXMgbSwgZm9yIHRodW1ibmFpbF9zaXplIGlzIHMg YW5kIGZvciBpbWdfc2l6ZSBpcyBuLjwvcD4KCgk8cD48YSBocmVmPSIjY29udGVudHMiPiZ1 YXJyOyB0b3A8L2E+PC9wPgoKCTxoMiBpZD0iY2xlYW5fdXJscyI+QWNoaWV2aW5nIGNsZWFu IHVybHM8L2gyPgoKCTxwPlRoZXJlIGFyZSBzZXZlcmFsIHN0ZXBzIG5lZWRlZCB0byBlbmFi bGUgY2xlYW4gdXJscy4gQnV0IGRvbiYjODIxNzt0IGJlIGFmcmFpZCwgaXQgd29uJiM4MjE3 O3QgdGFrZSBsb25nZXIgdGhhbiAxNSBtaW51dGVzIGFuZCBpcyBkZWZpbml0ZWx5IHdvcnRo IHRoZSB0cm91YmxlLjwvcD4KCgk8cD4xLiBJbnN0YWxsIGFuZCBhY3RpdmF0ZSA8YSBocmVm PSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9NjgxMCYj Mzg7cD0xIj5zZ2JfdXJsX2hhbmRsZXIgYW5kIHNnYl9lcnJvcl9kb2N1bWVudHM8L2E+LiBU aGVuIGVkaXQgdGhlIHNvdXJjZSBvZiBzZ2JfZXJyb3JfZG9jdW1lbnRzIGFuZCBhZGQgdGhp cyBsaW5lIHRvIHRoZSBvdGhlciBzY2hlbWVzICh5b3UgbW9zdCBwcm9iYWJseSB3b24mIzgy MTc7dCBuZWVkIGFsbCBvZiB0aGVtLCBidXQgaWYgeW91IHBhc3RlIHRoZW0gYWxsLCB5b3Um IzgyMTc7cmUgZG9uZS4pOjwvcD4KCjxwcmU+PGNvZGU+JHNjaGVtZXNbJiMzOTtmbGlja3Jf dGl0bGVfc2V0JiMzOTtdID0gJiMzOTsvJXNlY3Rpb24lLyV0aXRsZSUvc2V0LyVzdHJpbmcl JiMzOTs7CiRzY2hlbWVzWyYjMzk7ZmxpY2tyX3RpdGxlX3NldF9pbWcmIzM5O10gPSAmIzM5 Oy8lc2VjdGlvbiUvJXRpdGxlJS9zZXQvJXN0cmluZyUvaW1nLyVzdHJpbmclJiMzOTs7CiRz Y2hlbWVzWyYjMzk7ZmxpY2tyX3RpdGxlX3RhZ3MmIzM5O10gPSAmIzM5Oy8lc2VjdGlvbiUv JXRpdGxlJS90YWdzLyVzdHJpbmclJiMzOTs7CiRzY2hlbWVzWyYjMzk7ZmxpY2tyX3RpdGxl X3RhZ3NfcGFnZSYjMzk7XSA9ICYjMzk7LyVzZWN0aW9uJS8ldGl0bGUlL3RhZ3MvJXN0cmlu ZyUvcGFnZS8lc3RyaW5nJSYjMzk7Owokc2NoZW1lc1smIzM5O2ZsaWNrcl90aXRsZV9zZXRf cGFnZSYjMzk7XSA9ICYjMzk7LyVzZWN0aW9uJS8ldGl0bGUlL3NldC8lc3RyaW5nJS9wYWdl LyVzdHJpbmclJiMzOTs7CiRzY2hlbWVzWyYjMzk7ZmxpY2tyX3NldCYjMzk7XSA9ICYjMzk7 LyVzZWN0aW9uJS9zZXQvJXN0cmluZyUmIzM5OzsKJHNjaGVtZXNbJiMzOTtmbGlja3Jfc2V0 X2ltZyYjMzk7XSA9ICYjMzk7LyVzZWN0aW9uJS9zZXQvJXN0cmluZyUvaW1nLyVzdHJpbmcl JiMzOTs7CiRzY2hlbWVzWyYjMzk7ZmxpY2tyX3RhZ3MmIzM5O10gPSAmIzM5Oy8lc2VjdGlv biUvdGFncy8lc3RyaW5nJSYjMzk7Owokc2NoZW1lc1smIzM5O2ZsaWNrcl90YWdzX3BhZ2Um IzM5O10gPSAmIzM5Oy8lc2VjdGlvbiUvdGFncy8lc3RyaW5nJS9wYWdlLyVzdHJpbmclJiMz OTs7CiRzY2hlbWVzWyYjMzk7ZmxpY2tyX3NldF9wYWdlJiMzOTtdID0gJiMzOTsvJXNlY3Rp b24lL3NldC8lc3RyaW5nJS9wYWdlLyVzdHJpbmclJiMzOTs7CjwvY29kZT48L3ByZT4KCgk8 cD4yLiBUaGVuIHlvdSBoYXZlIHRvIGFkZCB0aGVzZSBsaW5lcyB0byB5b3VyIC5odGFjY2Vz cyB0byBtYWtlIGNsZWFuIHVybHMgd29yay4gSGVyZSBpcyBteSBjb21wbGV0ZSAuaHRhY2Nl c3MgZmlsZSBzbyB0aGF0IHlvdSBjYW4gc2VlIGhvdyB0aGUgbGluZXMgaGF2ZSB0byBiZSBh ZGRlZDo8L3A+Cgo8cHJlPjxjb2RlPlJld3JpdGVCYXNlIC8KJiM2MDtJZk1vZHVsZSBtb2Rf cmV3cml0ZS5jJiM2MjsKUmV3cml0ZUVuZ2luZSBPbgpSZXdyaXRlUnVsZSBzZXQvKFswLTld KykgaW5kZXgucGhwP3NldD0kMQpSZXdyaXRlUnVsZSBpbWcvKFswLTldKykgaW5kZXgucGhw P2ltZz0kMQpSZXdyaXRlUnVsZSBzZXQvKFswLTldKykvaW1nLyhbMC05XSspIGluZGV4LnBo cD9zZXQ9JDEmIzM4O2ltZz0kMgpSZXdyaXRlUnVsZSBzZXQvKFswLTldKykvcGFnZS8oWzAt OV0rKSBpbmRleC5waHA/c2V0PSQxJiMzODtwYWdlPSQyClJld3JpdGVSdWxlIHRhZ3MvKC4r KSBpbmRleC5waHA/dGFncz0kMQpSZXdyaXRlUnVsZSB0YWdzLyguKykvcGFnZS8oWzAtOV0r KSBpbmRleC5waHA/dGFncz0kMSYjMzg7cGFnZT0kMgpSZXdyaXRlQ29uZCAle1JFUVVFU1Rf RklMRU5BTUV9IC1mIFtPUl0KUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAtZApS ZXdyaXRlUnVsZSBeKC4rKSAtIFtQVCxMXQpSZXdyaXRlUnVsZSBeKC4qKSBpbmRleC5waHAK JiM2MDsvSWZNb2R1bGUmIzYyOwo8L2NvZGU+PC9wcmU+CgoJPHA+My4gVGhlIGxhc3Qgc3Rl cCBpcyB0byBhZGQgdGhpcyBhdHRyaWJ1dGUgdG8geW91ciB2ZGhfZmxpY2tyIHRhZzogPGJy IC8+CiA8c3Ryb25nPmNsZWFuX3VybHM9JiM4MjIwOzEmIzgyMjE7PC9zdHJvbmc+PC9wPgoK CTxwPjxhIGhyZWY9IiNjb250ZW50cyI+JnVhcnI7IHRvcDwvYT48L3A+CgoJPGgyIGlkPSJl eGFtcGxlX2NzcyI+RXhhbXBsZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvaDI+ CgoJPHA+QWRkIHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gdG8geW91ciBn YWxsZXJ5IHNlY3Rpb24gQ1NTLWZpbGUgdG8gbWFrZSB5b3VyIGdhbGxlcnkgbG9vayBiZXR0 ZXIuPC9wPgoKPHByZT48Y29kZT4uc2V0cHJldmlldyB7CgltYXJnaW46IDAgMmVtIDFlbSAy ZW07Cn0KCS5zZXRwcmV2aWV3IC50aHVtYm5haWwgewoJCWZsb2F0OiBsZWZ0OwoJCW1hcmdp bi1yaWdodDogMWVtOwoJfQouZmxpY2tyc2V0IGEgewoJYm9yZGVyOiBzb2xpZCAjRjY3NzMz IDJweDsKCXdpZHRoOiA3NXB4OwoJaGVpZ2h0OiA3NXB4OwoJYmFja2dyb3VuZDogI2ZmZjBk NjsKCWZsb2F0OiBsZWZ0OwoJbWFyZ2luOiAxMHB4OwoJcGFkZGluZzogNXB4Owp9Ci5mbGlj a3JzZXQgYTpob3ZlciB7CgliYWNrZ3JvdW5kOiAjRjY3NzMzOwp9Ci5mbGlja3JzZXQgaW1n IHsKCWJvcmRlcjogMDsKfQoucGFnZXNfbmF2IHsKCWNsZWFyOiBib3RoOwp9Ci5pbmRpdmlk dWFsIHsKCXBhZGRpbmc6IDAgMmVtOwp9CgkuaW5kaXZpZHVhbCAuaW1hZ2UgewoJCW1hcmdp bjogMC41ZW0gYXV0bzsKCQl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl9CgkuaW5kaXZpZHVhbCAu aW1hZ2UgaW1nIHsKCX0KCS5pbmRpdmlkdWFsIC5mbGlja3JzZXRuYXYgewoJCXRleHQtYWxp Z246IGNlbnRlcjsKCX0KCQkuaW5kaXZpZHVhbCAuZmxpY2tyc2V0bmF2IGEsCgkJLmluZGl2 aWR1YWwgLmZsaWNrcnNldG5hdiBhOmxpbmssCgkJLmluZGl2aWR1YWwgLmZsaWNrcnNldG5h diBhOnZpc2l0ZWQgewoJCQl0ZXh0LWRlY29yYXRpb246IG5vbmU7CgkJfQoJLmluZGl2aWR1 YWwgLnNldG5hbWUgewoJCWRpc3BsYXk6IGlubGluZTsKCX0KPC9jb2RlPjwvcHJlPgoKCTxw PjxhIGhyZWY9IiNjb250ZW50cyI+JnVhcnI7IHRvcDwvYT48L3A+CgoJPGgyIGlkPSJmb3Jt cyI+Rm9ybXM8L2gyPgoKCTxoMz5XaGF0IGFyZSBmb3JtcyBnb29kIGZvcj88L2gzPgoKCTxw PklmIHlvdSBhcmUgY29tcGxldGVseSBzYXRpc2ZpZWQgd2l0aCB0aGUgbG9vayBhbmQgZnVu Y3Rpb25hbGl0aXkgb2YgeW91ciBnYWxsZXJ5LCByZWFkIG5vIG1vcmUuIE90aGVyd2lzZSwg dGhlIHZkaF9mbGlja3IgZm9ybSBtb2RlIGdpdmVzIHlvdSBwb3NzaWJpbGl0aWVzIHRvIHR3 ZWFrIG5lYXJseSBldmVyeSBsaW5lIG9mIGh0bWwgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdmRo X2ZsaWNrci48YnIgLz4KSW4gdGhpcyB3b3Jrc2hvcCwgd2Ugd2lsbCBmaXJzdCBjcmVhdGUg dGhyZWUgZm9ybXMgcmVwcmVzZW50aW5nIHRoZSBjbGFzc2ljYWwgZnVuY3Rpb25hbGl0eSBv ZiB0aGlzIHBsdWdpbi4gVGhpcyBtZWFucyB3ZSB3aWxsIGhhdmUgb25lIGZvcm0gZm9yIHRo ZSBzZXQgcHJldmlldyBwYWdlLCBvbmUgZm9ybSBmb3IgdGhlIHBhZ2UgdGhhdCBzaG93cyB0 aGUgdGh1bWJuYWlscyBvZiBhIHNldCBhbmQgYSBmb3JtIHRoYXQgZGV0ZXJtaW5lcyBob3cg aW5kaXZpZHVhbCBpbWFnZXMgbG9vayBsaWtlLiBUaGVzZSB3aWxsIGJlIGV4YWN0bHkgdGhl IHNhbWUgYXMgdGhlIGV4YW1wbGUgZm9ybXMgaW5jbHVkZWQgaW4gdGhlIHBsdWdpbiBzb3Vy Y2UgY29kZS4gQnV0IGFmdGVyIGNyZWF0aW5nIHRoZXNlIGZvcm1zLCB5b3Ugd2lsbCBiZSBh YmxlIHRvIHJlbW92ZSBvciBjaGFuZ2UgZWxlbWVudHMsIHNvIHRoYXQgdGhlIGxvb2sgb2Yg eW91ciBnYWxsZXJ5IGlzIGluZGVwZW5kYW50IG9mIGZ1dHVyZSBjaGFuZ2VzIGluIHRoZSBk ZWZhdWx0IGZvcm1zLjwvcD4KCgk8aDM+Q3JlYXRpbmcgZm9ybXM8L2gzPgoKCTxoND48c3Ry b25nPnByZXZpZXc8L3N0cm9uZz4sIGEgZm9ybSBmb3IgdGhlIHNldCBwcmV2aWV3IHBhZ2U8 L2g0PgoKCTxwPkxvZyBpbnRvIFRleHRwYXR0ZXJuIGFuZCBnbyB0byBwcmVzZW50YXRpb24g JnJhcnI7IGZvcm1zLiBDbGljayAmIzgyMjA7Y3JlYXRlIGEgbmV3IGZvcm0mIzgyMjE7LCBl bnRlciB0aGUgZm9ybSBuYW1lICYjODIyMDtwcmV2aWV3JiM4MjIxOyBhbmQgZm9ybSB0eXBl ICYjODIyMDttaXNjJiM4MjIxOy4gVGhlbiBwYXN0ZSB0aGUgZm9sbG93aW5nIGNvZGUgaW50 byB0aGUgdGV4dGJveDo8L3A+Cgo8cHJlPjxjb2RlPiYjNjA7ZGl2IGNsYXNzPSYjMzQ7c2V0 cHJldmlldyYjMzQ7JiM2MjsKJiM2MDtkaXYgY2xhc3M9JiMzNDt0aHVtYm5haWwmIzM0OyYj NjI7CiYjNjA7dHhwOnZkaF9mbGlja3Jfc2V0X2xpbmsgdGl0bGU9JiMzNDtQcm9jZWVkIHRv IHRoaXMgZ2FsbGVyeSYjMzQ7JiM2MjsmIzYwO3R4cDp2ZGhfZmxpY2tyX3NldF9pbWcgdGl0 bGU9JiMzNDtQcm9jZWVkIHRvIHRoaXMgZ2FsbGVyeSYjMzQ7IC8mIzYyOyYjNjA7L3R4cDp2 ZGhfZmxpY2tyX3NldF9saW5rJiM2MjsKJiM2MDsvZGl2JiM2MjsKJiM2MDtkaXYmIzYyOwom IzYwO2gzIGNsYXNzPSYjMzQ7dGl0bGUmIzM0OyYjNjI7JiM2MDt0eHA6dmRoX2ZsaWNrcl9z ZXRfbGluayB0aXRsZT0mIzM0O1Byb2NlZWQgdG8gdGhpcyBnYWxsZXJ5JiMzNDsmIzYyOyYj NjA7dHhwOnZkaF9mbGlja3Jfc2V0X3RpdGxlIC8mIzYyOyYjNjA7L3R4cDp2ZGhfZmxpY2ty X3NldF9saW5rJiM2MjsmIzYwOy9oMyYjNjI7CiYjNjA7aDQgY2xhc3M9JiMzNDtudW1iZXJf b2ZfcGhvdG9zJiMzNDsmIzYyOyYjNjA7dHhwOnZkaF9mbGlja3Jfc2V0X251bWJlcl9vZl9w aG90b3MgLyYjNjI7IFBob3RvcyYjNjA7L2g0JiM2MjsKJiM2MDtwIGNsYXNzPSYjMzQ7c2V0 X2Rlc2NyaXB0aW9uJiMzNDsmIzYyOyYjNjA7dHhwOnZkaF9mbGlja3Jfc2V0X2Rlc2NyaXB0 aW9uIC8mIzYyOyYjNjA7L3AmIzYyOwomIzYwOy9kaXYmIzYyOwomIzYwO2RpdiBzdHlsZT0m IzM0O2NsZWFyOmJvdGg7JiMzNDsmIzYyOyYjNjA7L2RpdiYjNjI7CiYjNjA7L2RpdiYjNjI7 CjwvY29kZT48L3ByZT4KCgk8aDQ+PHN0cm9uZz50aHVtYm5haWxzPC9zdHJvbmc+LCBhIGZv cm0gZm9yIHRoZSB0aHVtYm5haWxzIHBhZ2U8L2g0PgoKCTxwPkNyZWF0ZSB0aGlzIGZvcm0g YXMgZGVzY3JpYmVkIGFib3ZlLjwvcD4KCjxwcmU+PGNvZGU+JiM2MDtoMyYjNjI7JiM2MDt0 eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3RpdGxlIC8mIzYyOywgJiM2MDt0eHA6dmRoX2Zs aWNrcl90aHVtYm5haWxzX251bWJlcl9vZl9waG90b3MgLyYjNjI7IFBob3RvcyYjNjA7L2gz JiM2MjsKJiM2MDtwIGNsYXNzPSYjMzQ7ZmxpY2tyX3NsaWRlc2hvdyYjMzQ7JiM2MjsKJiM2 MDt0eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3NsaWRlc2hvdyYjNjI7JiMzODtyYXF1bzsg U2hvdyBhcyBzbGlkZXNob3cgaW4gbmV3IHdpbmRvdy4mIzYwOy90eHA6dmRoX2ZsaWNrcl90 aHVtYm5haWxzX3NsaWRlc2hvdyYjNjI7CiYjNjA7L3AmIzYyOwomIzYwO3R4cDp2ZGhfZmxp Y2tyX3RodW1ibmFpbHNfaWZfZGVzY3JpcHRpb24mIzYyOwomIzYwO3AgY2xhc3M9JiMzNDtm bGlja3JfdGh1bWJuYWlsc19kZXNjcmlwdGlvbiYjMzQ7JiM2MjsKJiM2MDt0eHA6dmRoX2Zs aWNrcl90aHVtYm5haWxzX2Rlc2NyaXB0aW9uIC8mIzYyOwomIzYwOy9wJiM2MjsKJiM2MDsv dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19pZl9kZXNjcmlwdGlvbiYjNjI7CiYjNjA7ZGl2 IGNsYXNzPSYjMzQ7ZmxpY2tyc2V0JiMzNDsmIzYyOwomIzYwO3R4cDp2ZGhfZmxpY2tyX3Ro dW1ibmFpbHNfbGlzdCAvJiM2MjsKJiM2MDsvZGl2JiM2MjsKJiM2MDt0eHA6dmRoX2ZsaWNr cl90aHVtYm5haWxzX2lmX211bHRpcGxlX3BhZ2VzJiM2MjsKJiM2MDtoMyBjbGFzcz0mIzM0 O3BhZ2VzX25hdiYjMzQ7JiM2MjtwYWdlcyBuYXZpZ2F0aW9uJiM2MDsvaDMmIzYyOwomIzYw O3AmIzYyOwp0aHVtYnMgcGVyIHBhZ2U6ICYjNjA7dHhwOnZkaF9mbGlja3JfdGh1bWJuYWls c19wZXJfcGFnZSAvJiM2MjsmIzYwO2JyIC8mIzYyOwpTaG93aW5nIHBhZ2UgJiM2MDt0eHA6 dmRoX2ZsaWNrcl90aHVtYm5haWxzX2N1cnJlbnRfcGFnZSAvJiM2Mjsgb2YgJiM2MDt0eHA6 dmRoX2ZsaWNrcl90aHVtYm5haWxzX3RvdGFsX3BhZ2VzIC8mIzYyOy4mIzYwO2JyIC8mIzYy OwpTaG93aW5nIHRodW1iICYjNjA7dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19wYWdlc19z dGFydHRodW1iIC8mIzYyOyB0byAmIzYwO3R4cDp2ZGhfZmxpY2tyX3RodW1ibmFpbHNfcGFn ZXNfZW5kdGh1bWIgLyYjNjI7LiYjNjA7YnIgLyYjNjI7CiYjNjA7dHhwOnZkaF9mbGlja3Jf dGh1bWJuYWlsc19wYWdlc19maXJzdCYjNjI7JiMzODtsYXF1bzsgZmlyc3QmIzYwOy90eHA6 dmRoX2ZsaWNrcl90aHVtYm5haWxzX3BhZ2VzX2ZpcnN0JiM2MjsgfAomIzYwO3R4cDp2ZGhf ZmxpY2tyX3RodW1ibmFpbHNfcGFnZXNfcHJldmlvdXMmIzYyOyYjMzg7bHQ7IHByZXZpb3Vz JiM2MDsvdHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19wYWdlc19wcmV2aW91cyYjNjI7IHwK JiM2MDt0eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3BhZ2VzX25leHQmIzYyO25leHQgJiMz ODtndDsmIzYwOy90eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3BhZ2VzX25leHQmIzYyOyB8 CiYjNjA7dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19wYWdlc19sYXN0JiM2MjtsYXN0ICYj Mzg7cmFxdW87JiM2MDsvdHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19wYWdlc19sYXN0JiM2 MjsKJiM2MDsvcCYjNjI7CkdvIHRvIHBhZ2UgbnVtYmVyOgomIzYwO3R4cDp2ZGhfZmxpY2ty X3RodW1ibmFpbHNfcGFnZXNfbGlzdCB3cmFwdGFnPSYjMzQ7dWwmIzM0OyBicmVhaz0mIzM0 O2xpJiMzNDsgY2xhc3MgPSYjMzQ7dGh1bWJzX3BhZ2VzJiMzNDsgLyYjNjI7CiYjNjA7L3R4 cDp2ZGhfZmxpY2tyX3RodW1ibmFpbHNfaWZfbXVsdGlwbGVfcGFnZXMmIzYyOwomIzYwO2Rp diBzdHlsZT0mIzM0O2NsZWFyOmJvdGg7JiMzNDsmIzYyOyYjNjA7L2RpdiYjNjI7CjwvY29k ZT48L3ByZT4KCgk8aDQ+PHN0cm9uZz5pbWFnZTwvc3Ryb25nPiwgYSBmb3JtIGZvciB0aGUg aW1hZ2UgcGFnZTwvaDQ+CgoJPHA+Q3JlYXRlIHRoaXMgZm9ybSBhcyBkZXNjcmliZWQgYWJv dmUuPC9wPgoKPHByZT48Y29kZT4mIzYwO2RpdiBjbGFzcz0mIzM0O2luZGl2aWR1YWwmIzM0 OyYjNjI7JiM2MDtkaXYgY2xhc3M9JiMzNDtpbWFnZSYjMzQ7JiM2MjsKJiM2MDtoMiBjbGFz cz0mIzM0O3RpdGxlJiMzNDsmIzYyOyYjNjA7dHhwOnZkaF9mbGlja3JfaW1nX3RpdGxlIC8m IzYyOyYjNjA7L2gyJiM2MjsKJiM2MDt0eHA6dmRoX2ZsaWNrcl9pbWdfbGluayYjNjI7JiM2 MDt0eHA6dmRoX2ZsaWNrcl9pbWdfbmFrZWQgLyYjNjI7JiM2MDsvdHhwOnZkaF9mbGlja3Jf aW1nX2xpbmsmIzYyOwomIzYwO2RpdiBjbGFzcz0mIzM0O2ZsaWNrcnNldG5hdiYjMzQ7JiM2 MjsKJiM2MDt0eHA6dmRoX2ZsaWNrcl9pbWdfcHJldmlvdXMgbGFiZWw9JiMzNDtwcmV2aW91 cyYjMzg7bmJzcDs6JiMzODtuYnNwOyYjMzQ7JiM2MjsmIzM4O2xhcnI7JiM2MDsvdHhwOnZk aF9mbGlja3JfaW1nX3ByZXZpb3VzJiM2MjsKJiM2MDtoMiBjbGFzcz0mIzM0O3NldG5hbWUm IzM0OyYjNjI7JiM2MDt0eHA6dmRoX2ZsaWNrcl9pbWdfc2V0X2xpbmsmIzYyOyYjNjA7dHhw OnZkaF9mbGlja3JfaW1nX3NldF90aXRsZSAvJiM2MjsmIzYwOy90eHA6dmRoX2ZsaWNrcl9p bWdfc2V0X2xpbmsmIzYyOyYjNjA7L2gyJiM2MjsKJiM2MDt0eHA6dmRoX2ZsaWNrcl9pbWdf bmV4dCBsYWJlbD0mIzM0O25leHQmIzM4O25ic3A7OiYjMzg7bmJzcDsmIzM0OyYjNjI7JiMz ODtyYXJyOyYjNjA7L3R4cDp2ZGhfZmxpY2tyX2ltZ19uZXh0JiM2MjsKJiM2MDsvZGl2JiM2 MjsKJiM2MDtkaXYgY2xhc3M9JiMzNDtmbGlja3JfdGFnX2xpc3QmIzM0OyYjNjI7CiYjNjA7 dHhwOnZkaF9mbGlja3JfaW1nX3RhZ3Mgc2VwYXJhdG9yPSYjMzQ7IHwgJiMzNDsgLyYjNjI7 CiYjNjA7L2RpdiYjNjI7CiYjNjA7ZGl2IGNsYXNzPSYjMzQ7ZmxpY2tyX2NvbW1lbnRzJiMz NDsmIzYyOwomIzYwO3R4cDp2ZGhfZmxpY2tyX2ltZ19udW1iZXJfb2ZfY29tbWVudHMgLyYj NjI7IENvbW1lbnRzLgomIzYwO3R4cDp2ZGhfZmxpY2tyX2ltZ19jb21tZW50c19pbnZpdGUm IzYyO1Nob3cgYW5kIHBvc3QgY29tbWVudHMhJiM2MDsvdHhwOnZkaF9mbGlja3JfaW1nX2Nv bW1lbnRzX2ludml0ZSYjNjI7JiM2MDticiAvJiM2MjsKUG9zdGVkICYjNjA7dHhwOnZkaF9m bGlja3JfaW1nX2RhdGVfcG9zdGVkIC8mIzYyOy4mIzYwO2JyIC8mIzYyOwpUYWtlbiAmIzYw O3R4cDp2ZGhfZmxpY2tyX2ltZ19kYXRlX3Rha2VuIC8mIzYyOy4mIzYwO2JyIC8mIzYyOwom IzYwOy9kaXYmIzYyOwomIzYwO3R4cDp2ZGhfZmxpY2tyX2ltZ19pZl9kZXNjcmlwdGlvbiYj NjI7CiYjNjA7cCBjbGFzcz0mIzM0O2ltZ19kZXNjcmlwdGlvbiYjMzQ7JiM2MjsKJiM2MDt0 eHA6dmRoX2ZsaWNrcl9pbWdfZGVzY3JpcHRpb24gLyYjNjI7CiYjNjA7L3AmIzYyOwomIzYw Oy90eHA6dmRoX2ZsaWNrcl9pbWdfaWZfZGVzY3JpcHRpb24mIzYyOwomIzYwOy9kaXYmIzYy OyYjNjA7L2RpdiYjNjI7JiM2MDtkaXYgc3R5bGU9JiMzNDtjbGVhcjpib3RoOyYjMzQ7JiM2 MjsmIzYwOy9kaXYmIzYyOwo8L2NvZGU+PC9wcmU+CgoJPGgzPlVzaW5nIHRoZSBjcmVhdGVk IGZvcm1zPC9oMz4KCgk8cD5UYWtlIHRoZSBmb2xsb3dpbmcgY29kZSBhcyBhbiBleGFtcGxl IHRvIGVuYWJsZSB1c2luZyB5b3VyIGZyZXNobHkgY3JlYXRlZCBmb3Jtczo8L3A+Cgo8cHJl Pjxjb2RlPiYjNjA7dHhwOnZkaF9mbGlja3IgbnNpZD0mIzM0OzQzOTczOTc2QE4wMCYjMzQ7 IHNldF9mb3JtPSYjMzQ7cHJldmlldyYjMzQ7IHRodW1ibmFpbHNfZm9ybT0mIzM0O3RodW1i bmFpbHMmIzM0OyBpbWdfZm9ybT0mIzM0O2ltYWdlJiMzNDsgLyYjNjI7CjwvY29kZT48L3By ZT4KCgk8cD5Ob3cgeW91IGNhbiBiZWdpbiBjdXN0b21pemluZyB5b3VyIGZvcm1zLjxiciAv PgpNYXliZSB5b3Ugd2FudCB0byByZW5hbWUgdGhlIGRpdnMgb24gdGhlIHNldCBwcmV2aWV3 IHBhZ2UuIFNvIG9wZW4geW91ciBwcmV2aWV3IGZvcm0gYW5kIGRvIHNvLiBNYXliZSB5b3Ug ZG9uJiM4MjE3O3Qgd2FudCBuYXZpZ2F0aW9uIHVuZGVybmVhdGggdGhlIGltYWdlcy4gU28g ZGVsZXRlIGFsbCB0aGUgdmRoX2ZsaWNrciB0YWdzIGNvbmNlcm5pbmcgbmF2aWdhdGlvbiBp biB0aGUgaW1hZ2UgZm9ybS4gT3IgbWF5YmUgeW91IGp1c3Qgd2FudCBhbGwgdGhlIHRleHQg dG8gYXBwZWFyIGluIHlvdXIgbGFuZ3VhZ2UgJiM4MjExOyBubyBwcm9ibGVtIGFueSBtb3Jl LjwvcD4KCgk8aDM+T3RoZXIgZm9ybSB0YWdzPC9oMz4KCgk8cD5Zb3UgY2FuIHVzZSB0aGVz ZSB0YWdzIHRvIHNob3cgYSB0aHVtYm5haWwgb2YgdGhlIHByZXZpb3VzIG9yIG5leHQgaW1h Z2UgaW5zdGVhZCBvZiB0aGUgYXJyb3dzICg8Y29kZT4mIzM4O2xhcnI7PC9jb2RlPiAmbGFy cjsgcmVzcGVjdGl2ZSA8Y29kZT4mIzM4O3JhcnI7PC9jb2RlPiAmcmFycjspIGluIHRoZSBp bWFnZSBmb3JtLjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPiYjNjA7dHhwOnZkaF9mbGlja3Jf aW1nX3ByZXZpb3VzX3RodW1ibmFpbCAvJiM2Mjs8L2NvZGU+PC9saT4KCQk8bGk+PGNvZGU+ JiM2MDt0eHA6dmRoX2ZsaWNrcl9pbWdfbmV4dF90aHVtYm5haWwgLyYjNjI7PC9jb2RlPjwv bGk+Cgk8L3VsPgoKCTxoMz5Gb3JtIHRhZyBhdHRyaWJ1dGVzLCBhbGwgbm90IG1hbmRhdG9y eTwvaDM+CgoJPGg0PmZvciA8Y29kZT4mIzYwO3R4cDp2ZGhfZmxpY2tyX3RodW1ibmFpbHNf bGlzdCAvJiM2Mjs8L2NvZGU+PC9oND4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+bGlzdG1vZGU9 JiM4MjIwO2ltZ3x0ZXh0JiM4MjIxOzwvc3Ryb25nPiBTaG93IHRoZSB0aHVtYm5haWwgbGlz dCBhcyBpbWFnZXMgKGRlZmF1bHQpIG9yIGFzIGEgdGV4dCBsaXN0LjwvbGk+CgkJPGxpPjxz dHJvbmc+d3JhcHRhZz0mIzgyMjE7Li4uJiM4MjIxOzwvc3Ryb25nPiBTZWUgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4uPC9saT4KCQk8bGk+PHN0cm9uZz5icmVhaz0mIzgyMjE7 Li4uJiM4MjIxOzwvc3Ryb25nPiBTZWUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4u PC9saT4KCTwvdWw+CgoJPHA+PGEgaHJlZj0iI2NvbnRlbnRzIj4mdWFycjsgdG9wPC9hPjwv cD4KCiI7czo0OiJjb2RlIjtzOjQ1NzI4OiIvKiB2ZGhfZmxpY2tyIFRleHRwYXR0ZXJuIHBs dWdpbgoqCiogQXV0aG9yOiBSYWxwaCB2b24gZGVyIEhleWRlbiA8ZmxpY2tyQHJ2ZGgubmV0 PgoqICAgICAgICAgaHR0cDovL3d3dy5ydmRoLm5ldC92ZGhfZmxpY2tyCioKKgoqIExpY2Vu c2U6IEdQTAoqCiovCgovKiBIZXJlIHlvdSBjYW4gdHJhbnNsYXRlIG9yIGFkanVzdCB0aGlu Z3MgYXMgeW91IGxpa2UuCioKKi8KZ2xvYmFsICR0ZXh0OwokdGV4dCA9IGFycmF5KCk7CiR0 ZXh0WydlcnJvcl9tZXNzYWdlJ10gPSAnRmFpbGVkIHRvIGNvbm5lY3QgdG8gZmxpY2tyLmNv bSEnOwokdGV4dFsnbGF0ZXN0J10gPSAnTXkgbGF0ZXN0IFBpY3R1cmVzLi4uJzsKCmdsb2Jh bCAkY2xlYW5fdXJsczsKLy8kY2xlYW5fdXJscyA9IDE7CgpnbG9iYWwgJG5zaWQ7Ci8vICRu c2lkID0gJzEyMzQ1Njc4QE4wMCc7CgoKY2xhc3MgVmRoX0ZsaWNrciB7Cgl2YXIgJGFwaV9r ZXksICRlbWFpbCwgJG5zaWQsICRwYXNzd29yZCwgJHVzZXJkYXRhLCAkeG1sLCAkZm9ybSwg JHVzZV9hcnRpY2xldXJsOwoKCWZ1bmN0aW9uIFZkaF9GbGlja3IoJHBhcmFtcykgewoJCSR0 aGlzLT5hcGlfa2V5ID0gJ2MzNGU0MGRjNzA3ZjliYzUyNzM2ZGJhNTY4MTE4OTNmJzsKCQlp Zihpc3NldCgkcGFyYW1zWydlcnJvcl9tZXNzYWdlJ10pKSB7CgkJCSRHTE9CQUxTWyd0ZXh0 J11bJ2Vycm9yX21lc3NhZ2UnXSA9ICRwYXJhbXNbJ2Vycm9yX21lc3NhZ2UnXTsKCQl9CgkJ aWYoaXNzZXQoJHBhcmFtc1snY2xlYW5fdXJscyddKSkgewoJCQkkR0xPQkFMU1snY2xlYW5f dXJscyddID0gJHBhcmFtc1snY2xlYW5fdXJscyddOwoJCX0KCQkkbWFpbnZlcnNpb24gPSBz dHJ0b2sgKFBIUF9WRVJTSU9OLCIuIik7CgkJaWYoISgkbWFpbnZlcnNpb24gPj0gNSkpIHsK CQkJJEdMT0JBTFNbJ3VzZV9waHA0J10gPSAxOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1sn ZW1haWwnXSkpICR0aGlzLT5lbWFpbCA9ICRwYXJhbXNbJ2VtYWlsJ107CgkJKGlzc2V0KCRH TE9CQUxTWyduc2lkJ10pKT8KCQkkdGhpcy0+bnNpZCA9ICRHTE9CQUxTWyduc2lkJ106CgkJ JHRoaXMtPm5zaWQgPSAkcGFyYW1zWyduc2lkJ107CgkJaWYgKCRHTE9CQUxTWydpc19hcnRp Y2xlX2xpc3QnXSA9PT0gZmFsc2UpICR0aGlzLT51c2VfYXJ0aWNsZXVybCA9IHRydWU7CgkJ aWYgKGlzc2V0KCRwYXJhbXNbJ3VzZV9hcnRpY2xldXJsJ10pIGFuZCAkcGFyYW1zWyd1c2Vf YXJ0aWNsZXVybCddID09IDEpICR0aGlzLT51c2VfYXJ0aWNsZXVybCA9IHRydWU7CgkJaWYg KGlzc2V0KCRwYXJhbXNbJ3VzZV9hcnRpY2xldXJsJ10pIGFuZCAkcGFyYW1zWyd1c2VfYXJ0 aWNsZXVybCddID09IDApICR0aGlzLT51c2VfYXJ0aWNsZXVybCA9IGZhbHNlOwoJCWlmICgh aXNzZXQoJHRoaXMtPm5zaWQpKSAkdGhpcy0+Z2V0TnNpZCgpOwoJCSR0aGlzLT51c2VyZGF0 YSA9ICcmYXBpX2tleT0nIC4gJHRoaXMtPmFwaV9rZXkgLiAnJnVzZXJfaWQ9JyAuICR0aGlz LT5uc2lkOwoJCWlmIChpc3NldCgkcGFyYW1zWydwYXNzd29yZCddKSkgewoJCQkkdGhpcy0+ cGFzc3dvcmQgPSAkcGFyYW1zWydwYXNzd29yZCddOwoJCQkkdGhpcy0+dXNlcmRhdGEgLj0g JyZwYXNzd29yZD0nIC4gJHRoaXMtPnBhc3N3b3JkOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMt PmVtYWlsKSkgJHRoaXMtPnVzZXJkYXRhIC49ICcmZW1haWw9JyAuICR0aGlzLT5lbWFpbDsK CX0KCglmdW5jdGlvbiBnZXROc2lkKCkgewoJCSRtZXRob2QgPSAnZmxpY2tyLnBlb3BsZS5m aW5kQnlFbWFpbCZhcGlfa2V5PScgLiAkdGhpcy0+YXBpX2tleSAuICcmZmluZF9lbWFpbD0n IC4gJHRoaXMtPmVtYWlsOwoJCSR0aGlzLT54bWwgPSBuZXcgRmxpY2tyKCRtZXRob2QpOwoJ CWlmKCR0aGlzLT54bWwtPmlzVmFsaWQoKSkgewoJCQkkdGhpcy0+bnNpZCA9IGFycmF5X3No aWZ0KCR0aGlzLT54bWwtPnhwYXRoKCcvcnNwL3VzZXIvQGlkJykpOwoJCX0KCX0KCglmdW5j dGlvbiBtYWtlUmVxdWVzdCgkcGFyYW1ldGVycykgewoJCSRrZXlzID0gYXJyYXlfa2V5cygk cGFyYW1ldGVycyk7CgkJaWYgKCRHTE9CQUxTWydwZXJtbGlua19tb2RlJ10gPT0gJ21lc3N5 JykgewoJCQkoJHRoaXMtPnVzZV9hcnRpY2xldXJsKT8KCQkJJGh0bWwgPSBwZXJtbGlua3Vy bCgkR0xPQkFMU1sndGhpc2FydGljbGUnXSk6CgkJCSRodG1sID0gaHUuJz9zPScudXJsZW5j b2RlKCRHTE9CQUxTWydzJ10pOwoJCQlmb3IoJGkgPSAwOyAkaSA8IHNpemVvZigkcGFyYW1l dGVycyk7ICRpKyspIHsKCQkJCSRodG1sIC49ICcmYW1wOycgLiAka2V5c1skaV0gLiAnPScg LiAkcGFyYW1ldGVyc1ska2V5c1skaV1dOwoJCQl9CgkJCXJldHVybiAkaHRtbDsKCQl9CgkJ ZWxzZSBpZiAoJEdMT0JBTFNbJ2NsZWFuX3VybHMnXSkgewoJCQkoJHRoaXMtPnVzZV9hcnRp Y2xldXJsKT8KCQkJJGh0bWwgPSBwZXJtbGlua3VybCgkR0xPQkFMU1sndGhpc2FydGljbGUn XSk6CgkJCSRodG1sID0gaHUudXJsZW5jb2RlKCRHTE9CQUxTWydzJ10pOwoJCQlmb3IoJGkg PSAwOyAkaSA8IHNpemVvZigkcGFyYW1ldGVycyk7ICRpKyspIHsKCQkJCSRodG1sIC49ICcv JyAuICRrZXlzWyRpXSAuICcvJyAuICRwYXJhbWV0ZXJzWyRrZXlzWyRpXV07CgkJCX0KCQkJ cmV0dXJuICRodG1sOwoJCX0KCQllbHNlIHsKCQkJKCR0aGlzLT51c2VfYXJ0aWNsZXVybCk/ CgkJCSRodG1sID0gcGVybWxpbmt1cmwoJEdMT0JBTFNbJ3RoaXNhcnRpY2xlJ10pIC4gJy8/ JyAuICRrZXlzWzBdIC4gJz0nIC4kcGFyYW1ldGVyc1ska2V5c1swXV06CgkJCSRodG1sID0g aHUudXJsZW5jb2RlKCRHTE9CQUxTWydzJ10pIC4gJy8/JyAuICRrZXlzWzBdIC4gJz0nIC4k cGFyYW1ldGVyc1ska2V5c1swXV07CgkJCWZvcigkaSA9IDE7ICRpIDwgc2l6ZW9mKCRwYXJh bWV0ZXJzKTsgJGkrKykgewoJCQkJJGh0bWwgLj0gJyZhbXA7JyAuICRrZXlzWyRpXSAuICc9 JyAuICRwYXJhbWV0ZXJzWyRrZXlzWyRpXV07CgkJCX0KCQl9CgkJcmV0dXJuICRodG1sOwoJ fQoKCWZ1bmN0aW9uIGdldFBob3RvVXJsKCRwaG90bywgJHNpemUpIHsKCQkkZmFybSA9ICRw aG90b1snZmFybSddOwoJCSRzZXJ2ZXIgPSAkcGhvdG9bJ3NlcnZlciddOwoJCSRpZCA9IChp c3NldCgkcGhvdG9bJ3ByaW1hcnknXSkpPyAkcGhvdG9bJ3ByaW1hcnknXSA6ICRwaG90b1sn aWQnXTsKCQkkc2VjcmV0ID0gJHBob3RvWydzZWNyZXQnXTsKCQkkZm9ybWF0ID0gImpwZyI7 CgkJJGltZ3NpemUgPSAoIm4iICE9ICRzaXplKT8gIl8iIC4gJHNpemUgOiAiIjsKCQlpZiAo Im8iID09ICRzaXplKQoJCXsKCQkJJHNlY3JldCA9ICRwaG90b1snb3JpZ2luYWxfc2VjcmV0 J107CgkJCSRmb3JtYXQgPSAkcGhvdG9bJ29yaWdpbmFsX2Zvcm1hdCddOwoJCX0KCQkkaW1n X3VybCA9ICJodHRwOi8vZmFybSR7ZmFybX0uc3RhdGljLmZsaWNrci5jb20vJHtzZXJ2ZXJ9 LyR7aWR9XyR7c2VjcmV0fSR7aW1nc2l6ZX0uJHtmb3JtYXR9IjsKCQlyZXR1cm4gJGltZ191 cmw7Cgl9CgoJZnVuY3Rpb24gX190b1N0cmluZygpIHsKCQlyZXR1cm4gJHRoaXMtPm5zaWQ7 Cgl9Cn0KCgpjbGFzcyBHYWxsZXJ5IGV4dGVuZHMgVmRoX0ZsaWNrciB7Cgl2YXIgJHhtbCwg JGksICRzZXQsICRzZXRfcHJldmlld19zaXplLCAkbW9kZTsKCXZhciAkc2V0c19wZXJfcGFn ZSwgJHBhZ2UsICRwcmV2aW91c19wYWdlLCAkbmV4dF9wYWdlLCAkbGFzdHBhZ2UsICRudW1i ZXJfb2Zfc2V0czsKCXZhciAkZXhjZXB0aW9ucyA9IGFycmF5KCk7Cgl2YXIgJHNldHMgPSBh cnJheSgpOwoKCWZ1bmN0aW9uIEdhbGxlcnkoJHBhcmFtcykgewoJCSR0aGlzLT5WZGhfRmxp Y2tyKCRwYXJhbXMpOwoJCWlmIChpc3NldCgkcGFyYW1zWydleGNlcHQnXSkpICR0aGlzLT5l eGNlcHRpb25zID0gZXhwbG9kZSgiLCIsICRwYXJhbXNbJ2V4Y2VwdCddKTsKCQkoaXNzZXQo JHBhcmFtc1snc2V0X3ByZXZpZXdfc2l6ZSddKSk/CgkJJHRoaXMtPnNldF9wcmV2aWV3X3Np emUgPSBAJHBhcmFtc1snc2V0X3ByZXZpZXdfc2l6ZSddOgoJCSR0aGlzLT5zZXRfcHJldmll d19zaXplID0gJ20nOwoJCShpc3NldCgkX0dFVFsncGFnZSddKSk/CgkJJHRoaXMtPnBhZ2Ug PSAkX0dFVFsncGFnZSddOgoJCSR0aGlzLT5wYWdlID0gMTsKCQkoIWVtcHR5KCRwYXJhbXNb J21vZGUnXSkpPwoJCSR0aGlzLT5tb2RlID0gJHBhcmFtc1snbW9kZSddOgoJCSR0aGlzLT5t b2RlID0gJ2FsbCc7CgkJJHRoaXMtPmdldFNldHMoJHBhcmFtcyk7CgkJaWYgKGlzc2V0KCRw YXJhbXNbJ3NldHNfcGVyX3BhZ2UnXSkpIHsKCQkJJHRoaXMtPnNldHNfcGVyX3BhZ2UgPSAk cGFyYW1zWyd0aHVtYnNfcGVyX3BhZ2UnXTsKCQkJJHRoaXMtPmxhc3RwYWdlID0gY2VpbCgk dGhpcy0+bnVtYmVyX29mX3NldHMgLyAkdGhpcy0+c2V0c19wZXJfcGFnZSk7CgkJCWlmICgk dGhpcy0+cGFnZS0xID49IDEpIHsKCQkJCSR0aGlzLT5wcmV2aW91c19wYWdlID0gJHRoaXMt PnBhZ2UgLSAxOwoJCQl9CgkJCWVsc2UgewoJCQkJJHRoaXMtPnByZXZpb3VzX3BhZ2UgPSAk dGhpcy0+bGFzdHBhZ2U7CgkJCX0KCQkJaWYgKCR0aGlzLT5wYWdlKzEgPD0gJHRoaXMtPmxh c3RwYWdlKSB7CgkJCQkkdGhpcy0+bmV4dF9wYWdlID0gJHRoaXMtPnBhZ2UgKyAxOwoJCQl9 CgkJCWVsc2UgewoJCQkJJHRoaXMtPm5leHRfcGFnZSA9ICAxOwoJCQl9CgkJfQoJCWlmIChp c3NldCgkcGFyYW1zWydzZXRfZm9ybSddKSkgewoJCQkkdGhpcy0+Zm9ybSA9IGZldGNoKCdG b3JtJywndHhwX2Zvcm0nLCJuYW1lIiwkcGFyYW1zWydzZXRfZm9ybSddKTsKCQl9CgkJZWxz ZSB7CgkJCSR0aGlzLT5mb3JtID0gJwoJCQk8ZGl2IGNsYXNzPSJzZXRwcmV2aWV3Ij4KCQkJ PGRpdiBjbGFzcz0idGh1bWJuYWlsIj4KCQkJPHR4cDp2ZGhfZmxpY2tyX3NldF9saW5rIHRp dGxlPSJQcm9jZWVkIHRvIHRoaXMgZ2FsbGVyeSI+PHR4cDp2ZGhfZmxpY2tyX3NldF9pbWcg dGl0bGU9IlByb2NlZWQgdG8gdGhpcyBnYWxsZXJ5IiAvPjwvdHhwOnZkaF9mbGlja3Jfc2V0 X2xpbms+CgkJCTwvZGl2PgoJCQk8ZGl2PgoJCQk8aDMgY2xhc3M9InRpdGxlIj48dHhwOnZk aF9mbGlja3Jfc2V0X2xpbmsgdGl0bGU9IlByb2NlZWQgdG8gdGhpcyBnYWxsZXJ5Ij48dHhw OnZkaF9mbGlja3Jfc2V0X3RpdGxlIC8+PC90eHA6dmRoX2ZsaWNrcl9zZXRfbGluaz48L2gz PgoJCQk8aDQgY2xhc3M9Im51bWJlcl9vZl9waG90b3MiPjx0eHA6dmRoX2ZsaWNrcl9zZXRf bnVtYmVyX29mX3Bob3RvcyAvPiBQaG90b3M8L2g0PgoJCQk8cCBjbGFzcz0ic2V0X2Rlc2Ny aXB0aW9uIj48dHhwOnZkaF9mbGlja3Jfc2V0X2Rlc2NyaXB0aW9uIC8+PC9wPgoJCQk8L2Rp dj4KCQkJPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PgoJCQk8L2Rpdj4nOwoJCX0K CX0KCglmdW5jdGlvbiBnZXRTZXRzKCRwYXJhbXMpIHsKCQkkbWV0aG9kID0gJ2ZsaWNrci5w aG90b3NldHMuZ2V0TGlzdCcgLiAkdGhpcy0+dXNlcmRhdGE7CgkJJHRoaXMtPnhtbCA9IG5l dyBGbGlja3IoJG1ldGhvZCk7CgkJaWYoJHRoaXMtPnhtbC0+aXNWYWxpZCgpKSB7CgkJCSRp PTE7CgkJCWZvcmVhY2goJHRoaXMtPnhtbC0+eHBhdGgoJy9yc3AvcGhvdG9zZXRzL3Bob3Rv c2V0JykgYXMgJHBob3Rvc2V0KSB7CgkJCQkkc2V0X2lkID0gYXJyYXlfc2hpZnQoJHRoaXMt PnhtbC0+eHBhdGgoIi9yc3AvcGhvdG9zZXRzL3Bob3Rvc2V0WyRpXS9AaWQiKSk7CgkJCQlp ZigkdGhpcy0+bW9kZT09J2FsbCcpIHsKCQkJCQlpZighaW5fYXJyYXkoJHNldF9pZCwgJHRo aXMtPmV4Y2VwdGlvbnMpKSB7CgkJCQkJCSR0aGlzLT5hZGRfdG9fc2V0cygkc2V0X2lkLCAk aSk7CgkJCQkJfQoJCQkJfQoJCQkJaWYoJHRoaXMtPm1vZGU9PSdub25lJykgewoJCQkJCWlm KGluX2FycmF5KCRzZXRfaWQsICR0aGlzLT5leGNlcHRpb25zKSkgewoJCQkJCQkkdGhpcy0+ YWRkX3RvX3NldHMoJHNldF9pZCwgJGkpOwoJCQkJCX0KCQkJCX0KCQkJCSRpKys7CgkJCX0K CQl9Cgl9CgoJZnVuY3Rpb24gYWRkX3RvX3NldHMoJHNldF9pZCwgJGkpIHsKCQkkc2V0ID0g YXJyYXkoJ2lkJyA9PiAkc2V0X2lkKTsKCQkkc2V0Wyd0aXRsZSddID0gYXJyYXlfc2hpZnQo JHRoaXMtPnhtbC0+eHBhdGgoIi9yc3AvcGhvdG9zZXRzL3Bob3Rvc2V0WyRpXS90aXRsZS90 ZXh0KCkiKSk7CgkJJHNldFsnZGVzY3JpcHRpb24nXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54 bWwtPnhwYXRoKCIvcnNwL3Bob3Rvc2V0cy9waG90b3NldFskaV0vZGVzY3JpcHRpb24vdGV4 dCgpIikpOwoJCSRzZXRbJ3ByaW1hcnknXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhw YXRoKCIvcnNwL3Bob3Rvc2V0cy9waG90b3NldFskaV0vQHByaW1hcnkiKSk7CgkJJHNldFsn ZmFybSddID0gYXJyYXlfc2hpZnQoJHRoaXMtPnhtbC0+eHBhdGgoIi9yc3AvcGhvdG9zZXRz L3Bob3Rvc2V0WyRpXS9AZmFybSIpKTsKCQkkc2V0WydzZWNyZXQnXSA9IGFycmF5X3NoaWZ0 KCR0aGlzLT54bWwtPnhwYXRoKCIvcnNwL3Bob3Rvc2V0cy9waG90b3NldFskaV0vQHNlY3Jl dCIpKTsKCQkkc2V0WydzZXJ2ZXInXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRo KCIvcnNwL3Bob3Rvc2V0cy9waG90b3NldFskaV0vQHNlcnZlciIpKTsKCQkkc2V0WydwaG90 b3MnXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCIvcnNwL3Bob3Rvc2V0cy9w aG90b3NldFskaV0vQHBob3RvcyIpKTsKCQlhcnJheV9wdXNoKCR0aGlzLT5zZXRzLCAkc2V0 KTsKCX0KCglmdW5jdGlvbiBzZXRfaW1nKCRwYXJhbXMpIHsKCQkkaW1nX3VybCA9ICR0aGlz LT5nZXRQaG90b1VybCgkdGhpcy0+c2V0LCAkdGhpcy0+c2V0X3ByZXZpZXdfc2l6ZSk7CgkJ JGltZ191cmwgPSAnPGltZyBzcmM9IicgLiAkaW1nX3VybCAuICciIGFsdD0iJyAuICR0aGlz LT50aXRsZXNbJHRoaXMtPmldOwoJCShpc3NldCgkcGFyYW1zWyd0aXRsZSddKSk/ICRpbWdf dXJsIC49ICciIHRpdGxlPSInIC4gJHBhcmFtc1sndGl0bGUnXSAuICciIC8+JyA6ICRpbWdf dXJsIC49ICciIC8+JzsKCQlyZXR1cm4gJGltZ191cmw7Cgl9CgoJZnVuY3Rpb24gc2V0X2xp bmsoJHBhcmFtcywgJHRoaW5nKSB7CgkJJHdoYXQgPSAnIGhyZWY9IicuICR0aGlzLT5tYWtl UmVxdWVzdChhcnJheSgnc2V0JyA9PiAkdGhpcy0+c2V0WydpZCddKSkgLiciJzsKCQlpZiAo aXNzZXQoJHBhcmFtc1sndGl0bGUnXSkpICR3aGF0IC49ICcgdGl0bGU9IicgLiAkcGFyYW1z Wyd0aXRsZSddIC4gJyInOwoJCSRodG1sID0gdGFnKCR0aGluZywnYScsJHdoYXQpOwoJCXJl dHVybiAkaHRtbDsKCX0KCglmdW5jdGlvbiBzZXRfdGl0bGUoKSB7CgkJJGh0bWwgPSAkdGhp cy0+c2V0Wyd0aXRsZSddOwoJCXJldHVybiAkaHRtbDsKCX0KCglmdW5jdGlvbiBzZXRfbnVt YmVyX29mX3Bob3RvcygpIHsKCQkkaHRtbCA9ICR0aGlzLT5zZXRbJ3Bob3RvcyddOwoJCXJl dHVybiAkaHRtbDsKCX0KCglmdW5jdGlvbiBzZXRfZGVzY3JpcHRpb24oKSB7CgkJJGh0bWwg PSAkdGhpcy0+c2V0WydkZXNjcmlwdGlvbiddOwoJCXJldHVybiAkaHRtbDsKCX0KCglmdW5j dGlvbiBzZXRfbGlzdCgkcGFyYW1zKSB7CgkJaWYoISR0aGlzLT54bWwtPmlzVmFsaWQoKSkg ewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCShpc3NldCgkcGFyYW1zWyd3cmFwdGFnJ10pID09 IHRydWUpPyAkd3JhcHRhZyA9ICRwYXJhbXNbJ3dyYXB0YWcnXSA6ICR3cmFwdGFnID0gJyc7 CgkJKGlzc2V0KCRwYXJhbXNbJ2JyZWFrJ10pID09IHRydWUpPyAkYnJlYWsgPSAkcGFyYW1z WydicmVhayddIDogJGJyZWFrID0gJ2JyJzsKCQkkdGhpcy0+aSA9IDA7CgkJZm9yZWFjaCAo JHRoaXMtPnNldHMgYXMgJHRoaXMtPnNldCkgewoJCQkoJF9HRVRbJ3NldCddID09IChpbnQp ICR0aGlzLT5zZXRbJ2lkJ10pPyAkcGFyYW0gPSAnIGNsYXNzPSJjdXJyZW50IicgOiAnJzsK CQkJKCRicmVhayAhPSAnYnInKT8KCQkJJGh0bWwgLj0gdGFnKCR0aGlzLT5zZXRfbGluaygn JywgJHRoaXMtPnNldF90aXRsZSgpKSwgJGJyZWFrLCAkcGFyYW0pIC4gIlxuIjoKCQkJJGh0 bWwgLj0gJHRoaXMtPnNldF9saW5rKCcnLCAkdGhpcy0+c2V0X3RpdGxlKCkpIC4nPGJyIC8+ JyAuICJcbiI7CgkJCSR0aGlzLT5pKys7CgkJCXVuc2V0KCRwYXJhbSk7CgkJfQoJCXJldHVy biAoKCR3cmFwdGFnICE9ICcnKSA9PSB0cnVlKT8gdGFnKCRodG1sLCAkd3JhcHRhZykgOiAk aHRtbDsKCX0KCglmdW5jdGlvbiBfX3RvU3RyaW5nKCkgewoJCWlmKCEkdGhpcy0+eG1sLT5p c1ZhbGlkKCkpIHsKCQkJcmV0dXJuICRHTE9CQUxTWyd0ZXh0J11bJ2Vycm9yX21lc3NhZ2Un XTsKCQl9CgkJJHRoaXMtPmkgPSAwOwoJCSRyZXN1bHQgPSAnJzsKCQlmb3JlYWNoICgkdGhp cy0+c2V0cyBhcyAkdGhpcy0+c2V0KSB7CgkJCSRyZXN1bHQgLj0gcGFyc2UoJHRoaXMtPmZv cm0pOwoJCQkkdGhpcy0+aSsrOwoJCX0KCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQoKCmNsYXNz IFRodW1ibmFpbHMgZXh0ZW5kcyBWZGhfRmxpY2tyIHsKCXZhciAkeG1sLCAkaWQsICRvd25l ciwgJHByaW1hcnksICRzZWNyZXQsICRudW1iZXJfb2ZfcGhvdG9zLCAkdGl0bGUsICRkZXNj cmlwdGlvbiwgJHNldCwgJHBob3RvLCAkbGF0ZXN0OwoJdmFyICR0aHVtYm5haWxfc2l6ZSwg JGltZ19zaXplLCAkb3BlbiwgJHRhZ19hbmQsICRsaW5rLCAkdXNlX2FydF9pZF9hc190YWc7 Cgl2YXIgJHBhZ2UsICR0aHVtYnNfcGVyX3BhZ2UsICRzdGFydCwgJGVuZCwgJGxhc3RwYWdl LCAkcHJldmlvdXNfcGFnZSwgJG5leHRfcGFnZTsKCXZhciAkcGhvdG9zID0gYXJyYXkoKSwg JHRhZ3MgPSBhcnJheSgpOwoKCWZ1bmN0aW9uIFRodW1ibmFpbHMoJHBhcmFtcykgewoJCSR0 aGlzLT5WZGhfRmxpY2tyKCRwYXJhbXMpOwoJCSR0aGlzLT5wYXJhbXMgPSAkcGFyYW1zOwoJ CShpc3NldCgkcGFyYW1zWyd0aHVtYm5haWxfc2l6ZSddKSk/CgkJJHRoaXMtPnRodW1ibmFp bF9zaXplID0gJHBhcmFtc1sndGh1bWJuYWlsX3NpemUnXToKCQkkdGhpcy0+dGh1bWJuYWls X3NpemUgPSAncyc7CgkJKGlzc2V0KCRwYXJhbXNbJ2ltZ19zaXplJ10pKT8KCQkkdGhpcy0+ aW1nX3NpemUgPSAkcGFyYW1zWydpbWdfc2l6ZSddOgoJCSR0aGlzLT5pbWdfc2l6ZSA9ICdu JzsKCQkoaXNzZXQoJHBhcmFtc1snb3BlbiddKSk/CgkJJHRoaXMtPm9wZW4gPSAkcGFyYW1z WydvcGVuJ106CgkJJHRoaXMtPm9wZW4gPSAnc2VsZic7CgkJKGlzc2V0KCRwYXJhbXNbJ3Nl dCddKSk/CgkJJHRoaXMtPnNldCA9ICRwYXJhbXNbJ3NldCddOgoJCSR0aGlzLT5zZXQgPSAk X0dFVFsnc2V0J107CgkJKGlzc2V0KCRfR0VUWyd0YWdzJ10pKT8KCQlAJHRoaXMtPnRhZ3Mg PSAkX0dFVFsndGFncyddOgoJCUAkdGhpcy0+dGFncyA9ICRwYXJhbXNbJ3RhZ3MnXTsKCQlp ZighZW1wdHkoJHRoaXMtPnRhZ3MpKSB1bnNldCgkdGhpcy0+c2V0KTsKCQkoaXNzZXQoJF9H RVRbJ3BhZ2UnXSkpPwoJCSR0aGlzLT5wYWdlID0gJF9HRVRbJ3BhZ2UnXToKCQkkdGhpcy0+ cGFnZSA9IDE7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2xhdGVzdCddKSkgJHRoaXMtPmxhdGVz dCA9ICRwYXJhbXNbJ2xhdGVzdCddOwoJCShpc3NldCgkcGFyYW1zWydsaW5rdGh1bWJzJ10p KT8KCQkkdGhpcy0+bGlua3RodW1icyA9ICRwYXJhbXNbJ2xpbmt0aHVtYnMnXToKCQkkdGhp cy0+bGlua3RodW1icyA9IDE7CgkJKGlzc2V0KCRwYXJhbXNbJ3VzZV9hcnRfaWRfYXNfdGFn J10pKT8KCQkkdGhpcy0+dXNlX2FydF9pZF9hc190YWcgPSAkcGFyYW1zWyd1c2VfYXJ0X2lk X2FzX3RhZyddOgoJCSR0aGlzLT51c2VfYXJ0X2lkX2FzX3RhZyA9IDA7CgkJaWYgKGlzc2V0 KCRwYXJhbXNbJ3RhZ19hbmQnXSkpICR0aGlzLT50YWdfYW5kID0gMTsKCQlpZiAoaXNzZXQo JHBhcmFtc1sndGh1bWJuYWlsc19mb3JtJ10pKSAkdGhpcy0+Zm9ybSA9IGZldGNoKCdGb3Jt JywndHhwX2Zvcm0nLCJuYW1lIiwkcGFyYW1zWyd0aHVtYm5haWxzX2Zvcm0nXSk7CgkJZWxz ZSB7CgkJCSR0aGlzLT5mb3JtID0gJwoJCQk8aDM+PHR4cDp2ZGhfZmxpY2tyX3RodW1ibmFp bHNfdGl0bGUgLz4sIDx0eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX251bWJlcl9vZl9waG90 b3MgLz4gUGhvdG9zPC9oMz4KCQkJPHAgY2xhc3M9ImZsaWNrcl9zbGlkZXNob3ciPgoJCQk8 dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19zbGlkZXNob3c+JnJhcXVvOyBTaG93IGFzIHNs aWRlc2hvdyBpbiBuZXcgd2luZG93LjwvdHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19zbGlk ZXNob3c+CgkJCTwvcD4KCQkJPHR4cDp2ZGhfZmxpY2tyX3RodW1ibmFpbHNfaWZfZGVzY3Jp cHRpb24+CgkJCTxwIGNsYXNzPSJmbGlja3JfdGh1bWJuYWlsc19kZXNjcmlwdGlvbiI+CgkJ CTx0eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX2Rlc2NyaXB0aW9uIC8+CgkJCTwvcD4KCQkJ PC90eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX2lmX2Rlc2NyaXB0aW9uPgoJCQk8ZGl2IGNs YXNzPSJmbGlja3JzZXQiPgoJCQk8dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19saXN0IC8+ CgkJCTwvZGl2PgoJCQk8dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19pZl9tdWx0aXBsZV9w YWdlcz4KCQkJPGgzIGNsYXNzPSJwYWdlc19uYXYiPnBhZ2VzIG5hdmlnYXRpb248L2gzPgoJ CQk8cD4KCQkJdGh1bWJzIHBlciBwYWdlOiA8dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19w ZXJfcGFnZSAvPjxiciAvPgoJCQlTaG93aW5nIHBhZ2UgPHR4cDp2ZGhfZmxpY2tyX3RodW1i bmFpbHNfY3VycmVudF9wYWdlIC8+IG9mIDx0eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3Rv dGFsX3BhZ2VzIC8+LjxiciAvPgoJCQlTaG93aW5nIHRodW1iIDx0eHA6dmRoX2ZsaWNrcl90 aHVtYm5haWxzX3BhZ2VzX3N0YXJ0dGh1bWIgLz4gdG8gPHR4cDp2ZGhfZmxpY2tyX3RodW1i bmFpbHNfcGFnZXNfZW5kdGh1bWIgLz4uPGJyIC8+CgkJCTx0eHA6dmRoX2ZsaWNrcl90aHVt Ym5haWxzX3BhZ2VzX2ZpcnN0PiZsYXF1bzsgZmlyc3Q8L3R4cDp2ZGhfZmxpY2tyX3RodW1i bmFpbHNfcGFnZXNfZmlyc3Q+IHwKCQkJPHR4cDp2ZGhfZmxpY2tyX3RodW1ibmFpbHNfcGFn ZXNfcHJldmlvdXM+Jmx0OyBwcmV2aW91czwvdHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19w YWdlc19wcmV2aW91cz4gfAoJCQk8dHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19wYWdlc19u ZXh0Pm5leHQgJmd0OzwvdHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19wYWdlc19uZXh0PiB8 CgkJCTx0eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3BhZ2VzX2xhc3Q+bGFzdCAmcmFxdW87 PC90eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3BhZ2VzX2xhc3Q+CgkJCTwvcD4KCQkJR28g dG8gcGFnZSBudW1iZXI6CgkJCTx0eHA6dmRoX2ZsaWNrcl90aHVtYm5haWxzX3BhZ2VzX2xp c3Qgd3JhcHRhZz0idWwiIGJyZWFrPSJsaSIgY2xhc3MgPSJ0aHVtYnNfcGFnZXMiIC8+CgkJ CTwvdHhwOnZkaF9mbGlja3JfdGh1bWJuYWlsc19pZl9tdWx0aXBsZV9wYWdlcz4KCQkJPGRp diBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2Pic7CgkJfQoJCSR0aGlzLT5nZXRQaG90b3Mo KTsKCQkkdGhpcy0+dGh1bWJzX3Blcl9wYWdlID0gMDsKCQlpZiAoaXNzZXQoJHBhcmFtc1sn dGh1bWJzX3Blcl9wYWdlJ10pKSB7CgkJCSR0aGlzLT50aHVtYnNfcGVyX3BhZ2UgPSAkcGFy YW1zWyd0aHVtYnNfcGVyX3BhZ2UnXTsKCQkJJHRoaXMtPmxhc3RwYWdlID0gY2VpbCgkdGhp cy0+bnVtYmVyX29mX3Bob3RvcyAvICR0aGlzLT50aHVtYnNfcGVyX3BhZ2UpOwoJCQlpZiAo JHRoaXMtPnBhZ2UtMSA+PSAxKSB7CgkJCQkkdGhpcy0+cHJldmlvdXNfcGFnZSA9ICR0aGlz LT5wYWdlIC0gMTsKCQkJfQoJCQllbHNlIHsKCQkJCSR0aGlzLT5wcmV2aW91c19wYWdlID0g JHRoaXMtPmxhc3RwYWdlOwoJCQl9CgkJCWlmICgkdGhpcy0+cGFnZSsxIDw9ICR0aGlzLT5s YXN0cGFnZSkgewoJCQkJJHRoaXMtPm5leHRfcGFnZSA9ICR0aGlzLT5wYWdlICsgMTsKCQkJ fQoJCQllbHNlIHsKCQkJCSR0aGlzLT5uZXh0X3BhZ2UgPSAgMTsKCQkJfQoJCX0KCX0KCglm dW5jdGlvbiBnZXRQaG90b3MoKSB7CgkJaWYgKCR0aGlzLT51c2VfYXJ0X2lkX2FzX3RhZyA9 PSAxKSB7CgkJCWdsb2JhbCAkdGhpc2FydGljbGU7CgkJCWlmKGlzc2V0KCR0aGlzLT50YWdz KSBhbmQgKCR0aGlzLT50YWdzICE9ICcnKSkgewoJCQkJJHRoaXMtPnRhZ3MgLj0gJywnOwoJ CQl9CgkJCSR0aGlzLT50YWdzIC49ICdhcnRpY2xlJy4kdGhpc2FydGljbGVbJ3RoaXNpZCdd OwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPnRhZ3MpKSB7CgkJCSR0aGlzLT50aXRsZSA9ICR0 aGlzLT50YWdzOwoJCQkkbWV0aG9kID0gJ2ZsaWNrci5waG90b3Muc2VhcmNoJyAuICR0aGlz LT51c2VyZGF0YSAuICcmdGFncz0nIC4gJHRoaXMtPnRhZ3MgLiAnJnBlcl9wYWdlPTUwMCZl eHRyYXM9b3JpZ2luYWxfZm9ybWF0JzsKCQkJaWYgKGlzc2V0KCR0aGlzLT50YWdfYW5kKSkg ewoJCQkJJG1ldGhvZCAuPSAnJnRhZ19tb2RlPWFsbCc7CgkJCX0KCQkJJHRoaXMtPnhtbCA9 IG5ldyBGbGlja3IoJG1ldGhvZCk7CgkJCWlmKCR0aGlzLT54bWwtPmlzVmFsaWQoKSkgewoJ CQkJZm9yZWFjaCgkdGhpcy0+eG1sLT54cGF0aCgnL3JzcC9waG90b3MvcGhvdG8vQGlkJykg YXMgJHBob3RvX2lkKSB7CgkJCQkJJHBob3RvID0gYXJyYXkoJ2lkJyA9PiAkcGhvdG9faWQp OwoJCQkJCSRwaG90b1sndGl0bGUnXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRo KCIvcnNwL3Bob3Rvcy9waG90b1tAaWQ9Ii4kcGhvdG9faWQuIl0vQHRpdGxlIikpOwoJCQkJ CSRwaG90b1snc2VjcmV0J10gPSBhcnJheV9zaGlmdCgkdGhpcy0+eG1sLT54cGF0aCgiL3Jz cC9waG90b3MvcGhvdG9bQGlkPSIuJHBob3RvX2lkLiJdL0BzZWNyZXQiKSk7CgkJCQkJJHBo b3RvWydvcmlnaW5hbF9zZWNyZXQnXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRo KCIvcnNwL3Bob3Rvcy9waG90b1tAaWQ9Ii4kcGhvdG9faWQuIl0vQG9yaWdpbmFsc2VjcmV0 IikpOwoJCQkJCSRwaG90b1snb3JpZ2luYWxfZm9ybWF0J10gPSBhcnJheV9zaGlmdCgkdGhp cy0+eG1sLT54cGF0aCgiL3JzcC9waG90b3MvcGhvdG9bQGlkPSIuJHBob3RvX2lkLiJdL0Bv cmlnaW5hbGZvcm1hdCIpKTsKCQkJCQkkcGhvdG9bJ3NlcnZlciddID0gYXJyYXlfc2hpZnQo JHRoaXMtPnhtbC0+eHBhdGgoIi9yc3AvcGhvdG9zL3Bob3RvW0BpZD0iLiRwaG90b19pZC4i XS9Ac2VydmVyIikpOwoJCQkJCSRwaG90b1snZmFybSddID0gYXJyYXlfc2hpZnQoJHRoaXMt PnhtbC0+eHBhdGgoIi9yc3AvcGhvdG9zL3Bob3RvW0BpZD0iLiRwaG90b19pZC4iXS9AZmFy bSIpKTsKCQkJCQlhcnJheV9wdXNoKCR0aGlzLT5waG90b3MsICRwaG90byk7CgkJCQl9CgkJ CQkkdGhpcy0+bnVtYmVyX29mX3Bob3RvcyA9IChzdHJpbmcpIGFycmF5X3NoaWZ0KCR0aGlz LT54bWwtPnhwYXRoKCcvcnNwL3Bob3Rvcy9AdG90YWwnKSk7CgkJCQlpZiAoaXNzZXQoJHRo aXMtPnBhcmFtc1sncmFuZG9tJ10pKSAkdGhpcy0+cmFuZG9taXplKCR0aGlzLT5wYXJhbXNb J3JhbmRvbSddKTsKCQkJfQoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPmxhdGVzdCkpIHsKCQkJ JHRoaXMtPnRpdGxlID0gJEdMT0JBTFNbJ3RleHQnXVsnbGF0ZXN0J107CgkJCSRtZXRob2Qg PSAnZmxpY2tyLnBob3Rvcy5zZWFyY2gnIC4gJHRoaXMtPnVzZXJkYXRhOwoJCQlpZiAoJHRo aXMtPnRodW1ic19wZXJfcGFnZSA9PSAwIG9yICR0aGlzLT5sYXRlc3QgPD0gJHRoaXMtPnRo dW1ic19wZXJfcGFnZSkgJG1ldGhvZCAuPSAnJnBlcl9wYWdlPScgLiAkdGhpcy0+bGF0ZXN0 OwoJCQllbHNlIHsKCQkJCSRtZXRob2QgLj0gJyZwZXJfcGFnZT0nIC4gJHRoaXMtPnRodW1i c19wZXJfcGFnZTsKCQkJfQoJCQkkbWV0aG9kIC49ICImZXh0cmFzPW9yaWdpbmFsX2Zvcm1h dCI7CgkJCSR0aGlzLT54bWwgPSBuZXcgRmxpY2tyKCRtZXRob2QpOwoJCQlpZigkdGhpcy0+ eG1sLT5pc1ZhbGlkKCkpIHsKCQkJCWZvcmVhY2goJHRoaXMtPnhtbC0+eHBhdGgoJy9yc3Av cGhvdG9zL3Bob3RvL0BpZCcpIGFzICRwaG90b19pZCkgewoJCQkJCSRwaG90byA9IGFycmF5 KCdpZCcgPT4gJHBob3RvX2lkKTsKCQkJCQkkcGhvdG9bJ3RpdGxlJ10gPSBhcnJheV9zaGlm dCgkdGhpcy0+eG1sLT54cGF0aCgiL3JzcC9waG90b3MvcGhvdG9bQGlkPSIuJHBob3RvX2lk LiJdL0B0aXRsZSIpKTsKCQkJCQkkcGhvdG9bJ3NlY3JldCddID0gYXJyYXlfc2hpZnQoJHRo aXMtPnhtbC0+eHBhdGgoIi9yc3AvcGhvdG9zL3Bob3RvW0BpZD0iLiRwaG90b19pZC4iXS9A c2VjcmV0IikpOwoJCQkJCSRwaG90b1snb3JpZ2luYWxfc2VjcmV0J10gPSBhcnJheV9zaGlm dCgkdGhpcy0+eG1sLT54cGF0aCgiL3JzcC9waG90b3MvcGhvdG9bQGlkPSIuJHBob3RvX2lk LiJdL0BvcmlnaW5hbHNlY3JldCIpKTsKCQkJCQkkcGhvdG9bJ29yaWdpbmFsX2Zvcm1hdCdd ID0gYXJyYXlfc2hpZnQoJHRoaXMtPnhtbC0+eHBhdGgoIi9yc3AvcGhvdG9zL3Bob3RvW0Bp ZD0iLiRwaG90b19pZC4iXS9Ab3JpZ2luYWxmb3JtYXQiKSk7CgkJCQkJJHBob3RvWydzZXJ2 ZXInXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCIvcnNwL3Bob3Rvcy9waG90 b1tAaWQ9Ii4kcGhvdG9faWQuIl0vQHNlcnZlciIpKTsKCQkJCQkkcGhvdG9bJ2Zhcm0nXSA9 IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCIvcnNwL3Bob3Rvcy9waG90b1tAaWQ9 Ii4kcGhvdG9faWQuIl0vQGZhcm0iKSk7CgkJCQkJYXJyYXlfcHVzaCgkdGhpcy0+cGhvdG9z LCAkcGhvdG8pOwoJCQkJfQoJCQkJJHRoaXMtPm51bWJlcl9vZl9waG90b3MgPSAoc3RyaW5n KSAkdGhpcy0+bGF0ZXN0OwoJCQkJaWYgKGlzc2V0KCR0aGlzLT5wYXJhbXNbJ3JhbmRvbSdd KSkgJHRoaXMtPnJhbmRvbWl6ZSgkdGhpcy0+cGFyYW1zWydyYW5kb20nXSk7CgkJCX0KCQl9 CgkJaWYgKGlzc2V0KCR0aGlzLT5zZXQpKSB7CgkJCSRtZXRob2QgPSAnZmxpY2tyLnBob3Rv c2V0cy5nZXRQaG90b3MnIC4gJHRoaXMtPnVzZXJkYXRhIC4gJyZwaG90b3NldF9pZD0nIC4g JHRoaXMtPnNldCAuICImZXh0cmFzPW9yaWdpbmFsX2Zvcm1hdCI7CgkJCSR0aGlzLT54bWwg PSBuZXcgRmxpY2tyKCRtZXRob2QpOwoJCQlpZigkdGhpcy0+eG1sLT5pc1ZhbGlkKCkpIHsK CQkJCWZvcmVhY2goJHRoaXMtPnhtbC0+eHBhdGgoJy9yc3AvcGhvdG9zZXQvcGhvdG8vQGlk JykgYXMgJHBob3RvX2lkKSB7CgkJCQkJJHBob3RvID0gYXJyYXkoJ2lkJyA9PiAkcGhvdG9f aWQpOwoJCQkJCSRwaG90b1sndGl0bGUnXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhw YXRoKCIvcnNwL3Bob3Rvc2V0L3Bob3RvW0BpZD0iLiRwaG90b19pZC4iXS9AdGl0bGUiKSk7 CgkJCQkJJHBob3RvWydzZWNyZXQnXSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRo KCIvcnNwL3Bob3Rvc2V0L3Bob3RvW0BpZD0iLiRwaG90b19pZC4iXS9Ac2VjcmV0IikpOwoJ CQkJCSRwaG90b1snb3JpZ2luYWxfc2VjcmV0J10gPSBhcnJheV9zaGlmdCgkdGhpcy0+eG1s LT54cGF0aCgiL3JzcC9waG90b3NldC9waG90b1tAaWQ9Ii4kcGhvdG9faWQuIl0vQG9yaWdp bmFsc2VjcmV0IikpOwoJCQkJCSRwaG90b1snb3JpZ2luYWxfZm9ybWF0J10gPSBhcnJheV9z aGlmdCgkdGhpcy0+eG1sLT54cGF0aCgiL3JzcC9waG90b3NldC9waG90b1tAaWQ9Ii4kcGhv dG9faWQuIl0vQG9yaWdpbmFsZm9ybWF0IikpOwoJCQkJCSRwaG90b1snc2VydmVyJ10gPSBh cnJheV9zaGlmdCgkdGhpcy0+eG1sLT54cGF0aCgiL3JzcC9waG90b3NldC9waG90b1tAaWQ9 Ii4kcGhvdG9faWQuIl0vQHNlcnZlciIpKTsKCQkJCQkkcGhvdG9bJ2Zhcm0nXSA9IGFycmF5 X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCIvcnNwL3Bob3Rvc2V0L3Bob3RvW0BpZD0iLiRw aG90b19pZC4iXS9AZmFybSIpKTsKCQkJCQlhcnJheV9wdXNoKCR0aGlzLT5waG90b3MsICRw aG90byk7CgkJCQl9CgkJCQkkdGhpcy0+bnVtYmVyX29mX3Bob3RvcyA9IChzdHJpbmcpIHNp emVvZigkdGhpcy0+cGhvdG9zKTsKCQkJCWlmIChpc3NldCgkdGhpcy0+cGFyYW1zWydyYW5k b20nXSkpICR0aGlzLT5yYW5kb21pemUoJHRoaXMtPnBhcmFtc1sncmFuZG9tJ10pOwoJCQl9 CgkJfQoJfQoKCWZ1bmN0aW9uIHJhbmRvbWl6ZSgkcmFuZHNpemUpIHsKCQlpZiAoJHJhbmRz aXplIDwgJHRoaXMtPm51bWJlcl9vZl9waG90b3MpIHsKCQkJc2h1ZmZsZSgkdGhpcy0+cGhv dG9zKTsKCQkJJHRoaXMtPnBob3RvcyA9IGFycmF5X3NsaWNlKCR0aGlzLT5waG90b3MsIDAs ICRyYW5kc2l6ZSk7CgkJCSR0aGlzLT5udW1iZXJfb2ZfcGhvdG9zID0gJHJhbmRzaXplOwoJ CX0KCX0KCglmdW5jdGlvbiBnZXRJbmZvKCkgewoJCSRtZXRob2QgPSAnZmxpY2tyLnBob3Rv c2V0cy5nZXRJbmZvJyAuICR0aGlzLT51c2VyZGF0YSAuICcmcGhvdG9zZXRfaWQ9JyAuICR0 aGlzLT5zZXQ7CgkJJHRoaXMtPnhtbCA9IG5ldyBGbGlja3IoJG1ldGhvZCk7CgkJaWYoJHRo aXMtPnhtbC0+aXNWYWxpZCgpKSB7CgkJCSR0aGlzLT5pZCA9IGFycmF5X3NoaWZ0KCR0aGlz LT54bWwtPnhwYXRoKCcvcnNwL3Bob3Rvc2V0L0BpZCcpKTsKCQkJJHRoaXMtPnByaW1hcnkg PSBhcnJheV9zaGlmdCgkdGhpcy0+eG1sLT54cGF0aCgnL3JzcC9waG90b3NldC9AcHJpbWFy eScpKTsKCQkJJHRoaXMtPnNlY3JldCA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRo KCcvcnNwL3Bob3Rvc2V0L0BzZWNyZXQnKSk7CgkJCSR0aGlzLT50aXRsZSA9IGFycmF5X3No aWZ0KCR0aGlzLT54bWwtPnhwYXRoKCcvcnNwL3Bob3Rvc2V0L3RpdGxlL3RleHQoKScpKTsK CQkJJHRoaXMtPmRlc2NyaXB0aW9uID0gYXJyYXlfc2hpZnQoJHRoaXMtPnhtbC0+eHBhdGgo Jy9yc3AvcGhvdG9zZXQvZGVzY3JpcHRpb24vdGV4dCgpJykpOwoJCQlpZiAoZW1wdHkoJHRo aXMtPmRlc2NyaXB0aW9uKSkgJHRoaXMtPmRlc2NyaXB0aW9uID0gJyZuYnNwOyc7CgkJfQoJ fQoKCWZ1bmN0aW9uIHRodW1ibmFpbHNfdGl0bGUoKSB7CgkJaWYgKGlzc2V0KCR0aGlzLT50 aXRsZSkgPT0gZmFsc2UpICR0aGlzLT5nZXRJbmZvKCk7CgkJcmV0dXJuICR0aGlzLT50aXRs ZTsKCX0KCglmdW5jdGlvbiB0aHVtYm5haWxzX2Rlc2NyaXB0aW9uKCkgewoJCWlmICgoaXNz ZXQoJHRoaXMtPmRlc2NyaXB0aW9uKSA9PSBmYWxzZSkgYW5kIGlzc2V0KCR0aGlzLT5zZXQp KSB7CgkJCSR0aGlzLT5nZXRJbmZvKCk7CgkJfQoJCWlmICgkdGhpcy0+ZGVzY3JpcHRpb24g IT0gJyZuYnNwOycgYW5kICFlbXB0eSgkdGhpcy0+ZGVzY3JpcHRpb24pKSByZXR1cm4gJHRo aXMtPmRlc2NyaXB0aW9uOwoJCXJldHVybiAnJzsKCX0KCglmdW5jdGlvbiB0aHVtYm5haWxz X2lmX2Rlc2NyaXB0aW9uICgkdGhpbmcpIHsKCQlpZiAoKGlzc2V0KCR0aGlzLT5kZXNjcmlw dGlvbikgPT0gZmFsc2UpIGFuZCBpc3NldCgkdGhpcy0+c2V0KSkgewoJCQkkdGhpcy0+Z2V0 SW5mbygpOwoJCX0KCQlpZiAoJHRoaXMtPmRlc2NyaXB0aW9uICE9ICcmbmJzcDsnIGFuZCAh ZW1wdHkoJHRoaXMtPmRlc2NyaXB0aW9uKSkgJHJlc3VsdCA9IHBhcnNlKCR0aGluZyk7CgkJ cmV0dXJuICRyZXN1bHQ7Cgl9CgoJZnVuY3Rpb24gdGh1bWJuYWlsc19zbGlkZXNob3coJHRo aW5nKSB7CgkJaWYoaXNzZXQoJHRoaXMtPnRhZ3MpKSB7CgkJCSRodG1sID0gJzxhIGhyZWY9 Imh0dHA6Ly93d3cuZmxpY2tyLmNvbS9zbGlkZVNob3cvaW5kZXguZ25lP25zaWQ9Jy51cmxl bmNvZGUoJHRoaXMtPm5zaWQpLicmYW1wO3VzZXJfaWQ9Jy51cmxlbmNvZGUoJHRoaXMtPm5z aWQpOwoJCQlpZihpc3NldCgkdGhpcy0+dGFnX2FuZCkpIHsKCQkJCSRodG1sIC49ICcmYW1w O3RhZ19tb2RlPWFsbCZhbXA7dGFncz0nLiB1cmxlbmNvZGUoJHRoaXMtPnRhZ3MpOwoJCQl9 CgkJCWVsc2UgewoJCQkJJGh0bWwgLj0gJyZhbXA7dGFnX21vZGU9YW55JmFtcDt0YWdzPScg LiB1cmxlbmNvZGUoJHRoaXMtPnRhZ3MpOwoJCQl9CgkJCSRodG1sIC49ICciICBvbmNsaWNr PSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwnc2xpZGVTaG93V2luXCcsIFwnd2lkdGg9NTAw LGhlaWdodD01MDAsdG9wPTE1MCxsZWZ0PTcwLHNjcm9sbGJhcnM9bm8sIHN0YXR1cz1ubywg cmVzaXphYmxlPW5vXCcpOyAnOwoJCQkkaHRtbCAuPSAncmV0dXJuIGZhbHNlOyI+JzsKCQl9 CgkJaWYoaXNzZXQoJHRoaXMtPnNldCkpIHsKCQkJJGh0bWwgPSAnPGEgaHJlZj0iaHR0cDov L3d3dy5mbGlja3IuY29tL3NsaWRlU2hvdy9pbmRleC5nbmU/bnNpZD0nLnVybGVuY29kZSgk dGhpcy0+bnNpZCkuJyZhbXA7c2V0X2lkPScuJHRoaXMtPnNldDsKCQkJJGh0bWwgLj0gJyIg IG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdzbGlkZVNob3dXaW5cJywgXCd3 aWR0aD01MDAsaGVpZ2h0PTUwMCx0b3A9MTUwLGxlZnQ9NzAsc2Nyb2xsYmFycz1ubywgc3Rh dHVzPW5vLCByZXNpemFibGU9bm9cJyk7ICc7CgkJCSRodG1sIC49ICdyZXR1cm4gZmFsc2U7 Ij4nOwoJCX0KCQlpZihpc3NldCgkdGhpcy0+bGF0ZXN0KSkgewoJCQkkaHRtbCA9ICc8YSBo cmVmPSJodHRwOi8vd3d3LmZsaWNrci5jb20vc2xpZGVTaG93L2luZGV4LmduZT9uc2lkPScu dXJsZW5jb2RlKCR0aGlzLT5uc2lkKS4nJmFtcDt1c2VyX2lkPScudXJsZW5jb2RlKCR0aGlz LT5uc2lkKS4nJmFtcDttYXhUaHVtYnM9Jy4kdGhpcy0+bGF0ZXN0OwoJCQkkaHRtbCAuPSAn IiAgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3NsaWRlU2hvd1dpblwnLCBc J3dpZHRoPTUwMCxoZWlnaHQ9NTAwLHRvcD0xNTAsbGVmdD03MCxzY3JvbGxiYXJzPW5vLCBz dGF0dXM9bm8sIHJlc2l6YWJsZT1ub1wnKTsgJzsKCQkJJGh0bWwgLj0gJ3JldHVybiBmYWxz ZTsiPic7CgkJfQoJCSRodG1sIC49ICR0aGluZy4nPC9hPic7CgkJcmV0dXJuICRodG1sOwoJ fQoKCWZ1bmN0aW9uIHRodW1ibmFpbHNfaW1nKCkgewoJCSRpbWdfdXJsID0gJHRoaXMtPmdl dFBob3RvVXJsKCR0aGlzLT5waG90bywgJHRoaXMtPnRodW1ibmFpbF9zaXplKTsKCQkkaW1n X3VybCA9ICc8aW1nIHNyYz0iJyAuICRpbWdfdXJsIC4gJyIgYWx0PSInIC4gJHRoaXMtPnBo b3RvWyd0aXRsZSddIC4gJyIgLz4nOwoJCXJldHVybiAkaW1nX3VybDsKCX0KCglmdW5jdGlv biB0aHVtYm5haWxzX2ltZ190aXRsZSgpIHsKCQlyZXR1cm4gJHRoaXMtPnBob3RvWyd0aXRs ZSddOwoJfQoKCWZ1bmN0aW9uIHRodW1ibmFpbHNfbGluaygkaW1nX3VybCkgewoJCWlmKCR0 aGlzLT5vcGVuID09ICdzZWxmJykgewoJCQlpZiAoaXNzZXQoJHRoaXMtPnNldCkpIHsKCQkJ CSRwYXJhbWV0ZXJzWydzZXQnXSA9ICR0aGlzLT5zZXQ7CgkJCX0KCQkJJHBhcmFtZXRlcnNb J2ltZyddID0gJHRoaXMtPnBob3RvWydpZCddOwoJCQkkaHRtbCA9IHRhZygkaW1nX3VybCwn YScsJyBocmVmPSInLiAkdGhpcy0+bWFrZVJlcXVlc3QoJHBhcmFtZXRlcnMpIC4nIicpLiJc biI7CgkJfQoJCWlmKCR0aGlzLT5vcGVuID09ICdmbGlja3InKSB7CgkJCSRodG1sID0gJzxh IGhyZWY9Imh0dHA6Ly93d3cuZmxpY2tyLmNvbS9waG90b3MvJyAuIHVybGVuY29kZSgkdGhp cy0+bnNpZCkgLiAnLycgLiAkdGhpcy0+cGhvdG9bJ2lkJ10gLiAnLyI+JyAuICJcbiI7CgkJ CSRodG1sIC49ICRpbWdfdXJsOwoJCQkkaHRtbCAuPSAnPC9hPicgLiAiXG4iOwoJCX0KCQlp ZigkdGhpcy0+b3BlbiA9PSAnd2luZG93JykgewoJCQkkaHRtbCA9ICc8YSBocmVmPSInOwoJ CQkkaHRtbCAuPSAkdGhpcy0+Z2V0UGhvdG9VcmwoJHRoaXMtPnBob3RvLCAkdGhpcy0+aW1n X3NpemUpOwoJCQkkaHRtbCAuPSAnIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYs IFwncG9wdXB3aW5kb3dcJywgXCdyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPic7CgkJ CSRodG1sIC49ICRpbWdfdXJsOwoJCQkkaHRtbCAuPSAnPC9hPic7CgkJfQoJCWlmKCR0aGlz LT5vcGVuID09ICdsaWdodGJveCcpIHsKCQkJJGh0bWwgPSAnPGEgaHJlZj0iJzsKCQkJJGh0 bWwgLj0gJHRoaXMtPmdldFBob3RvVXJsKCR0aGlzLT5waG90bywgJHRoaXMtPmltZ19zaXpl KTsKCQkJJHNldCA9ICR0aGlzLT50aHVtYm5haWxzX3RpdGxlKCk7CgkJCSRzZXQgPSB0cmlt KCRzZXQpOwoJCQkkaHRtbCAuPSAnIiByZWw9ImxpZ2h0Ym94WycuJHNldC4nXSI+JzsKCQkJ JGh0bWwgLj0gJGltZ191cmw7CgkJCSRodG1sIC49ICc8L2E+JzsKCQl9CgkJcmV0dXJuICRo dG1sOwoJfQoKCWZ1bmN0aW9uIHRodW1ibmFpbHNfbGlzdCgkcGFyYW1zKSB7CgkJaWYoISR0 aGlzLT54bWwtPmlzVmFsaWQoKSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCShpc3NldCgk cGFyYW1zWydsaXN0bW9kZSddKSk/CgkJJHRoaXMtPmxpc3Rtb2RlID0gJHBhcmFtc1snbGlz dG1vZGUnXToKCQkkdGhpcy0+bGlzdG1vZGUgPSAnaW1nJzsKCQkoaXNzZXQoJHBhcmFtc1sn d3JhcHRhZyddKSA9PSB0cnVlKT8gJHdyYXB0YWcgPSAkcGFyYW1zWyd3cmFwdGFnJ10gOiAk d3JhcHRhZyA9ICcnOwoJCShpc3NldCgkcGFyYW1zWydicmVhayddKSA9PSB0cnVlKT8gJGJy ZWFrID0gJHBhcmFtc1snYnJlYWsnXSA6ICRicmVhayA9ICcnOwoJCWlmICgkdGhpcy0+dGh1 bWJzX3Blcl9wYWdlID09IDApIHsKCQkJJHRoaXMtPnN0YXJ0ID0gMTsKCQkJJHRoaXMtPmVu ZCA9IHNpemVvZigkdGhpcy0+cGhvdG9zKTsKCQl9CgkJZWxzZSB7CgkJCSR0aGlzLT5zdGFy dCA9IChpbnQpICgkdGhpcy0+dGh1bWJzX3Blcl9wYWdlICogKCR0aGlzLT5wYWdlIC0gMSkp ICsgMTsKCQkJJHRoaXMtPmVuZCA9IG1pbigkdGhpcy0+dGh1bWJzX3Blcl9wYWdlICogJHRo aXMtPnBhZ2UsIHNpemVvZigkdGhpcy0+cGhvdG9zKSk7CgkJfQoJCSRodG1sID0gJyc7CgkJ Zm9yICgkdGhpcy0+aSA9ICR0aGlzLT5zdGFydCAtIDE7ICR0aGlzLT5pIDw9ICR0aGlzLT5l bmQgLSAxOyAkdGhpcy0+aSsrKSB7CgkJCSR0aGlzLT5waG90byA9ICR0aGlzLT5waG90b3Nb JHRoaXMtPmldOwoJCQkoQCRfR0VUWydpbWcnXSA9PSAoaW50KSAkdGhpcy0+cGhvdG9bJ2lk J10pPyAkcGFyYW0gPSAnIGNsYXNzPSJjdXJyZW50IicgOiAnJzsKCQkJKCR0aGlzLT5saXN0 bW9kZSA9PSAnaW1nJyk/ICR3aGF0ID0gJHRoaXMtPnRodW1ibmFpbHNfaW1nKCkgOiAkd2hh dCA9ICR0aGlzLT50aHVtYm5haWxzX2ltZ190aXRsZSgpOwoJCQkoJHRoaXMtPmxpbmt0aHVt YnMgPT0gMSk/ICR3aGF0ID0gJHRoaXMtPnRodW1ibmFpbHNfbGluaygkd2hhdCkgOiAnJzsK CQkJaWYoJGJyZWFrICE9ICcnKSB7CgkJCQkoJGJyZWFrICE9ICdicicpPwoJCQkJJGh0bWwg Lj0gdGFnKCR3aGF0LCAkYnJlYWssICRwYXJhbSkgLiAiXG4iOgoJCQkJJGh0bWwgLj0gJHdo YXQgLic8YnIgLz4nIC4gIlxuIjsKCQkJfQoJCQllbHNlIHsKCQkJCSRodG1sIC49ICR3aGF0 IC4gIlxuIjsKCQkJfQoJCQl1bnNldCgkcGFyYW0pOwoJCX0KCQlyZXR1cm4gKCgkd3JhcHRh ZyAhPSAnJykgPT0gdHJ1ZSk/IHRhZygkaHRtbCwgJHdyYXB0YWcpIDogJGh0bWw7Cgl9CgoJ ZnVuY3Rpb24gdGh1bWJuYWlsc19udW1iZXJfb2ZfcGhvdG9zICgpIHsKCQlyZXR1cm4gJHRo aXMtPm51bWJlcl9vZl9waG90b3M7Cgl9CgoJZnVuY3Rpb24gdGh1bWJuYWlsc19wZXJfcGFn ZSAoKSB7CgkJcmV0dXJuICR0aGlzLT50aHVtYnNfcGVyX3BhZ2U7Cgl9CgoJZnVuY3Rpb24g dGh1bWJuYWlsc19jdXJyZW50X3BhZ2UgKCkgewoJCXJldHVybiAkdGhpcy0+cGFnZTsKCX0K CglmdW5jdGlvbiB0aHVtYm5haWxzX3RvdGFsX3BhZ2VzICgpIHsKCQlyZXR1cm4gJHRoaXMt Pmxhc3RwYWdlOwoJfQoKCWZ1bmN0aW9uIHRodW1ibmFpbHNfcGFnZXNfZmlyc3QgKCR0aGlu ZykgewoJCWlmIChpc3NldCgkdGhpcy0+c2V0KSkgJHJlc3VsdCA9IHRhZyhwYXJzZSgkdGhp bmcpLCAnYScsICcgaHJlZj0iJy4gJHRoaXMtPm1ha2VSZXF1ZXN0KGFycmF5KCdzZXQnID0+ ICR0aGlzLT5pZCwgJ3BhZ2UnID0+IDEpKSAuJyInKTsKCQlpZiAoaXNzZXQoJHRoaXMtPnRh Z3MpKSAkcmVzdWx0ID0gdGFnKHBhcnNlKCR0aGluZyksICdhJywgJyBocmVmPSInLiAkdGhp cy0+bWFrZVJlcXVlc3QoYXJyYXkoJ3RhZ3MnID0+ICR0aGlzLT50YWdzLCAncGFnZScgPT4g MSkpIC4nIicpOwoJCWlmIChpc3NldCgkdGhpcy0+bGF0ZXN0KSkgJHJlc3VsdCA9IHRhZyhw YXJzZSgkdGhpbmcpLCAnYScsICcgaHJlZj0iJy4gJHRoaXMtPm1ha2VSZXF1ZXN0KGFycmF5 KCdwYWdlJyA9PiAxKSkgLiciJyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJZnVuY3Rpb24g dGh1bWJuYWlsc19wYWdlc19sYXN0ICgkdGhpbmcpIHsKCQlpZiAoaXNzZXQoJHRoaXMtPnNl dCkpICRyZXN1bHQgPSB0YWcocGFyc2UoJHRoaW5nKSwgJ2EnLCAnIGhyZWY9IicuICR0aGlz LT5tYWtlUmVxdWVzdChhcnJheSgnc2V0JyA9PiAkdGhpcy0+aWQsICdwYWdlJyA9PiAkdGhp cy0+bGFzdHBhZ2UpKSAuJyInKTsKCQlpZiAoaXNzZXQoJHRoaXMtPnRhZ3MpKSAkcmVzdWx0 ID0gdGFnKHBhcnNlKCR0aGluZyksICdhJywgJyBocmVmPSInLiAkdGhpcy0+bWFrZVJlcXVl c3QoYXJyYXkoJ3RhZ3MnID0+ICR0aGlzLT50YWdzLCAncGFnZScgPT4gJHRoaXMtPmxhc3Rw YWdlKSkgLiciJyk7CgkJaWYgKGlzc2V0KCR0aGlzLT5sYXRlc3QpKSAkcmVzdWx0ID0gdGFn KHBhcnNlKCR0aGluZyksICdhJywgJyBocmVmPSInLiAkdGhpcy0+bWFrZVJlcXVlc3QoYXJy YXkoJ3BhZ2UnID0+ICR0aGlzLT5sYXN0cGFnZSkpIC4nIicpOwoJCXJldHVybiAkcmVzdWx0 OwoJfQoKCWZ1bmN0aW9uIHRodW1ibmFpbHNfcGFnZXNfcHJldmlvdXMgKCR0aGluZykgewoJ CWlmIChpc3NldCgkdGhpcy0+c2V0KSkgJHJlc3VsdCA9IHRhZyhwYXJzZSgkdGhpbmcpLCAn YScsICcgaHJlZj0iJy4gJHRoaXMtPm1ha2VSZXF1ZXN0KGFycmF5KCdzZXQnID0+ICR0aGlz LT5pZCwgJ3BhZ2UnID0+ICR0aGlzLT5wcmV2aW91c19wYWdlKSkgLiciJyk7CgkJaWYgKGlz c2V0KCR0aGlzLT50YWdzKSkgJHJlc3VsdCA9IHRhZyhwYXJzZSgkdGhpbmcpLCAnYScsICcg aHJlZj0iJy4gJHRoaXMtPm1ha2VSZXF1ZXN0KGFycmF5KCd0YWdzJyA9PiAkdGhpcy0+dGFn cywgJ3BhZ2UnID0+ICR0aGlzLT5wcmV2aW91c19wYWdlKSkgLiciJyk7CgkJaWYgKGlzc2V0 KCR0aGlzLT5sYXRlc3QpKSAkcmVzdWx0ID0gdGFnKHBhcnNlKCR0aGluZyksICdhJywgJyBo cmVmPSInLiAkdGhpcy0+bWFrZVJlcXVlc3QoYXJyYXkoJ3BhZ2UnID0+ICR0aGlzLT5wcmV2 aW91c19wYWdlKSkgLiciJyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJZnVuY3Rpb24gdGh1 bWJuYWlsc19wYWdlc19uZXh0ICgkdGhpbmcpIHsKCQlpZiAoaXNzZXQoJHRoaXMtPnNldCkp ICRyZXN1bHQgPSB0YWcocGFyc2UoJHRoaW5nKSwgJ2EnLCAnIGhyZWY9IicuICR0aGlzLT5t YWtlUmVxdWVzdChhcnJheSgnc2V0JyA9PiAkdGhpcy0+aWQsICdwYWdlJyA9PiAkdGhpcy0+ bmV4dF9wYWdlKSkgLiciJyk7CgkJaWYgKGlzc2V0KCR0aGlzLT50YWdzKSkgJHJlc3VsdCA9 IHRhZyhwYXJzZSgkdGhpbmcpLCAnYScsICcgaHJlZj0iJy4gJHRoaXMtPm1ha2VSZXF1ZXN0 KGFycmF5KCd0YWdzJyA9PiAkdGhpcy0+dGFncywgJ3BhZ2UnID0+ICR0aGlzLT5uZXh0X3Bh Z2UpKSAuJyInKTsKCQlpZiAoaXNzZXQoJHRoaXMtPmxhdGVzdCkpICRyZXN1bHQgPSB0YWco cGFyc2UoJHRoaW5nKSwgJ2EnLCAnIGhyZWY9IicuICR0aGlzLT5tYWtlUmVxdWVzdChhcnJh eSgncGFnZScgPT4gJHRoaXMtPm5leHRfcGFnZSkpIC4nIicpOwoJCXJldHVybiAkcmVzdWx0 OwoJfQoKCWZ1bmN0aW9uIHRodW1ibmFpbHNfcGFnZXNfc3RhcnR0aHVtYiAoKSB7CgkJcmV0 dXJuICR0aGlzLT5zdGFydDsKCX0KCglmdW5jdGlvbiB0aHVtYm5haWxzX3BhZ2VzX2VuZHRo dW1iICgpIHsKCQlyZXR1cm4gJHRoaXMtPmVuZDsKCX0KCglmdW5jdGlvbiB0aHVtYm5haWxz X3BhZ2VzX2xpc3QgKCRwYXJhbXMpIHsKCQkkcGFnZXNfYXJyYXkgPSByYW5nZSgxLCAkdGhp cy0+bGFzdHBhZ2UpOwoJCWZvciAoJGkgPSAwOyAkaSA8PSAkdGhpcy0+bGFzdHBhZ2UgLSAx OyAkaSsrKSB7CgkJCWlmIChpc3NldCgkdGhpcy0+c2V0KSkgJHBhZ2VzX2FycmF5WyRpXSA9 IHRhZygkcGFnZXNfYXJyYXlbJGldLCAnYScsICcgaHJlZj0iJy4gJHRoaXMtPm1ha2VSZXF1 ZXN0KGFycmF5KCdzZXQnID0+ICR0aGlzLT5pZCwgJ3BhZ2UnID0+ICRwYWdlc19hcnJheVsk aV0pKSAuJyInKTsKCQkJaWYgKGlzc2V0KCR0aGlzLT50YWdzKSkgJHBhZ2VzX2FycmF5WyRp XSA9IHRhZygkcGFnZXNfYXJyYXlbJGldLCAnYScsICcgaHJlZj0iJy4gJHRoaXMtPm1ha2VS ZXF1ZXN0KGFycmF5KCd0YWdzJyA9PiAkdGhpcy0+dGFncywgJ3BhZ2UnID0+ICRwYWdlc19h cnJheVskaV0pKSAuJyInKTsKCQkJaWYgKGlzc2V0KCR0aGlzLT5sYXRlc3QpKSAkcGFnZXNf YXJyYXlbJGldID0gdGFnKCRwYWdlc19hcnJheVskaV0sICdhJywgJyBocmVmPSInLiAkdGhp cy0+bWFrZVJlcXVlc3QoYXJyYXkoJ3BhZ2UnID0+ICRwYWdlc19hcnJheVskaV0pKSAuJyIn KTsKCQl9CgkJcmV0dXJuIGRvV3JhcCgkcGFnZXNfYXJyYXksIEAkcGFyYW1zWyd3cmFwdGFn J10sIEAkcGFyYW1zWydicmVhayddLCBAJHBhcmFtc1snY2xhc3MnXSwgQCRwYXJhbXNbJ2Jy ZWFrY2xhc3MnXSwgQCRwYXJhbXNbJ2F0dHMnXSk7Cgl9CgoJZnVuY3Rpb24gdGh1bWJuYWls c19pZl9tdWx0aXBsZV9wYWdlcyAoJHRoaW5nKSB7CgkJKCR0aGlzLT50aHVtYnNfcGVyX3Bh Z2UgIT0gMCk/ICRyZXN1bHQgPSBwYXJzZSgkdGhpbmcpIDogJyc7CgkJcmV0dXJuICRyZXN1 bHQ7Cgl9CgoJZnVuY3Rpb24gX190b1N0cmluZygpIHsKCQlpZighJHRoaXMtPnhtbC0+aXNW YWxpZCgpKSB7CgkJCXJldHVybiAkR0xPQkFMU1sndGV4dCddWydlcnJvcl9tZXNzYWdlJ107 CgkJfQoJCSRyZXN1bHQgPSBwYXJzZSgkdGhpcy0+Zm9ybSk7CgkJcmV0dXJuICRyZXN1bHQ7 Cgl9Cn0KCgpjbGFzcyBQaWN0dXJlIGV4dGVuZHMgVmRoX0ZsaWNrciB7Cgl2YXIgJHhtbCwg JGlkLCAkc2VjcmV0LCAkc2VydmVyLCAkZGF0ZV91cGxvYWRlZCwgJHRpdGxlLCAkZGVzY3Jp cHRpb24sICRub3RlcywgJHNldCwgJGxpbmssICRpbWcsICRjb250ZXh0OwoJdmFyICRpbWdf c2l6ZSwgJHNob3dfaW1nX25hdiwgJHNob3dfaW1nX3RpdGxlLCAkbWV0aG9kLCAkc2V0X3Rp dGxlLCAkY29tbWVudHMsICRjb250ZXh0X21vZGU7Cgl2YXIgJGRhdGVfcG9zdGVkLCAkZGF0 ZV90YWtlbjsKCXZhciAkcHJldmlvdXMgPSBhcnJheSgpLCAkbmV4dCA9IGFycmF5KCksICR0 YWdzID0gYXJyYXkoKSwgJHJhd190YWdzID0gYXJyYXkoKSwgJHRhZ19pZHMgPSBhcnJheSgp OwoKCWZ1bmN0aW9uIFBpY3R1cmUoJHBhcmFtcykgewoJCSR0aGlzLT5WZGhfRmxpY2tyKCRw YXJhbXMpOwoJCShpc3NldCgkcGFyYW1zWydpbWdfc2l6ZSddKSk/CgkJJHRoaXMtPmltZ19z aXplID0gJHBhcmFtc1snaW1nX3NpemUnXToKCQkkdGhpcy0+aW1nX3NpemUgPSAnbic7CgkJ KGlzc2V0KCRwYXJhbXNbJ29yaWdpbmFsX3NpemUnXSkpPwoJCSR0aGlzLT5vcmlnaW5hbF9z aXplID0gJHBhcmFtc1snb3JpZ2luYWxfc2l6ZSddOgoJCSR0aGlzLT5vcmlnaW5hbF9zaXpl ID0gJ28nOwoJCShpc3NldCgkcGFyYW1zWydzZXQnXSkpPwoJCSR0aGlzLT5zZXQgPSAkcGFy YW1zWydzZXQnXToKCQkkdGhpcy0+c2V0ID0gJF9HRVRbJ3NldCddOwoJCShpc3NldCgkcGFy YW1zWydpbWcnXSkpPwoJCSR0aGlzLT5pbWcgPSAkcGFyYW1zWydpbWcnXToKCQkkdGhpcy0+ aW1nID0gJF9HRVRbJ2ltZyddOwoJCSRtZXRob2QgPSAnZmxpY2tyLnBob3Rvcy5nZXRJbmZv JyAuICR0aGlzLT51c2VyZGF0YSAuICcmcGhvdG9faWQ9JyAuICR0aGlzLT5pbWc7CgkJJHRo aXMtPnhtbCA9IG5ldyBGbGlja3IoJG1ldGhvZCk7CgkJaWYoJHRoaXMtPnhtbC0+aXNWYWxp ZCgpKSB7CgkJCSR0aGlzLT5pZCA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCcv cnNwL3Bob3RvL0BpZCcpKTsKCQkJJHRoaXMtPnNlY3JldCA9IGFycmF5X3NoaWZ0KCR0aGlz LT54bWwtPnhwYXRoKCcvcnNwL3Bob3RvL0BzZWNyZXQnKSk7CgkJCSR0aGlzLT5vcmlnaW5h bF9zZWNyZXQgPSBhcnJheV9zaGlmdCgkdGhpcy0+eG1sLT54cGF0aCgnL3JzcC9waG90by9A b3JpZ2luYWxzZWNyZXQnKSk7CgkJCSR0aGlzLT5vcmlnaW5hbF9mb3JtYXQgPSBhcnJheV9z aGlmdCgkdGhpcy0+eG1sLT54cGF0aCgnL3JzcC9waG90by9Ab3JpZ2luYWxmb3JtYXQnKSk7 CgkJCSR0aGlzLT5mYXJtID0gYXJyYXlfc2hpZnQoJHRoaXMtPnhtbC0+eHBhdGgoJy9yc3Av cGhvdG8vQGZhcm0nKSk7CgkJCSR0aGlzLT5zZXJ2ZXIgPSBhcnJheV9zaGlmdCgkdGhpcy0+ eG1sLT54cGF0aCgnL3JzcC9waG90by9Ac2VydmVyJykpOwoJCQkkdGhpcy0+ZGF0ZV9wb3N0 ZWQgPSBhcnJheV9zaGlmdCgkdGhpcy0+eG1sLT54cGF0aCgnL3JzcC9waG90by9kYXRlcy9A cG9zdGVkJykpOwoJCQkkdGhpcy0+ZGF0ZV90YWtlbiA9IGFycmF5X3NoaWZ0KCR0aGlzLT54 bWwtPnhwYXRoKCcvcnNwL3Bob3RvL2RhdGVzL0B0YWtlbicpKTsKCQkJJHRoaXMtPnRpdGxl ID0gYXJyYXlfc2hpZnQoJHRoaXMtPnhtbC0+eHBhdGgoJy9yc3AvcGhvdG8vdGl0bGUvdGV4 dCgpJykpOwoJCQkkdGhpcy0+ZGVzY3JpcHRpb24gPSBhcnJheV9zaGlmdCgkdGhpcy0+eG1s LT54cGF0aCgnL3JzcC9waG90by9kZXNjcmlwdGlvbi90ZXh0KCknKSk7CgkJCSR0aGlzLT5j b21tZW50cyA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCcvcnNwL3Bob3RvL2Nv bW1lbnRzL3RleHQoKScpKTsKCQkJJHRoaXMtPnJhd190YWdzID0gJHRoaXMtPnhtbC0+eHBh dGgoJy9yc3AvcGhvdG8vdGFncy90YWcvQHJhdycpOwoJCQkkdGhpcy0+dGFncyA9ICR0aGlz LT54bWwtPnhwYXRoKCcvcnNwL3Bob3RvL3RhZ3MvdGFnL3RleHQoKScpOwoJCQkkdGhpcy0+ bGluayA9IEAkcGFyYW1zWydsaW5rJ107CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydpbWdf Zm9ybSddKSkgewoJCQkkdGhpcy0+Zm9ybSA9IGZldGNoKCdGb3JtJywndHhwX2Zvcm0nLCJu YW1lIiwkcGFyYW1zWydpbWdfZm9ybSddKTsKCQl9CgkJZWxzZSB7CgkJCSR0aGlzLT5mb3Jt ID0gJwoJCQk8ZGl2IGNsYXNzPSJpbmRpdmlkdWFsIj48ZGl2IGNsYXNzPSJpbWFnZSI+CgkJ CTxoMiBjbGFzcz0idGl0bGUiPjx0eHA6dmRoX2ZsaWNrcl9pbWdfdGl0bGUgLz48L2gyPgoJ CQk8dHhwOnZkaF9mbGlja3JfaW1nX2xpbms+PHR4cDp2ZGhfZmxpY2tyX2ltZ19uYWtlZCAv PjwvdHhwOnZkaF9mbGlja3JfaW1nX2xpbms+CgkJCTxkaXYgY2xhc3M9ImZsaWNrcnNldG5h diI+CgkJCTx0eHA6dmRoX2ZsaWNrcl9pbWdfcHJldmlvdXMgbGFiZWw9InByZXZpb3VzJm5i c3A7OiZuYnNwOyI+JmxhcnI7PC90eHA6dmRoX2ZsaWNrcl9pbWdfcHJldmlvdXM+CgkJCTxo MiBjbGFzcz0ic2V0bmFtZSI+PHR4cDp2ZGhfZmxpY2tyX2ltZ19zZXRfbGluaz48dHhwOnZk aF9mbGlja3JfaW1nX3NldF90aXRsZSAvPjwvdHhwOnZkaF9mbGlja3JfaW1nX3NldF9saW5r PjwvaDI+CgkJCTx0eHA6dmRoX2ZsaWNrcl9pbWdfbmV4dCBsYWJlbD0ibmV4dCZuYnNwOzom bmJzcDsiPiZyYXJyOzwvdHhwOnZkaF9mbGlja3JfaW1nX25leHQ+CgkJCTwvZGl2PgoJCQk8 ZGl2IGNsYXNzPSJmbGlja3JfdGFnX2xpc3QiPgoJCQk8dHhwOnZkaF9mbGlja3JfaW1nX3Rh Z3Mgc2VwYXJhdG9yPSIgfCAiIC8+CgkJCTwvZGl2PgoJCQk8ZGl2IGNsYXNzPSJmbGlja3Jf Y29tbWVudHMiPgoJCQk8dHhwOnZkaF9mbGlja3JfaW1nX251bWJlcl9vZl9jb21tZW50cyAv PiBDb21tZW50cy4KCQkJPHR4cDp2ZGhfZmxpY2tyX2ltZ19jb21tZW50c19pbnZpdGU+U2hv dyBhbmQgcG9zdCBjb21tZW50cyE8L3R4cDp2ZGhfZmxpY2tyX2ltZ19jb21tZW50c19pbnZp dGU+PGJyIC8+CgkJCVBvc3RlZCA8dHhwOnZkaF9mbGlja3JfaW1nX2RhdGVfcG9zdGVkIC8+ LjxiciAvPgoJCQlUYWtlbiA8dHhwOnZkaF9mbGlja3JfaW1nX2RhdGVfdGFrZW4gLz4uPGJy IC8+CgkJCTwvZGl2PgoJCQk8dHhwOnZkaF9mbGlja3JfaW1nX2lmX2Rlc2NyaXB0aW9uPgoJ CQk8cCBjbGFzcz0iaW1nX2Rlc2NyaXB0aW9uIj4KCQkJPHR4cDp2ZGhfZmxpY2tyX2ltZ19k ZXNjcmlwdGlvbiAvPgoJCQk8L3A+CgkJCTwvdHhwOnZkaF9mbGlja3JfaW1nX2lmX2Rlc2Ny aXB0aW9uPgoJCQk8L2Rpdj48L2Rpdj48ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+ JzsKCQl9Cgl9CgoJZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHsKCQlpZiAoaXNzZXQoJHRoaXMt PnNldCkpIHsKCQkJJG1ldGhvZCA9ICdmbGlja3IucGhvdG9zZXRzLmdldENvbnRleHQnIC4g JHRoaXMtPnVzZXJkYXRhIC4gJyZwaG90b19pZD0nIC4gJHRoaXMtPmltZyAuICcmcGhvdG9z ZXRfaWQ9JyAuICR0aGlzLT5zZXQ7CgkJfQoJCWVsc2UgewoJCQkkbWV0aG9kID0gJ2ZsaWNr ci5waG90b3MuZ2V0Q29udGV4dCcgLiAkdGhpcy0+dXNlcmRhdGEgLiAnJnBob3RvX2lkPScg LiAkdGhpcy0+aW1nOwoJCX0KCQkkdGhpcy0+eG1sID0gbmV3IEZsaWNrcigkbWV0aG9kKTsK CQkkdGhpcy0+cHJldmlvdXNbJ2lkJ10gPSBhcnJheV9zaGlmdCgkdGhpcy0+eG1sLT54cGF0 aCgnL3JzcC9wcmV2cGhvdG8vQGlkJykpOwoJCSR0aGlzLT5wcmV2aW91c1sndGl0bGUnXSA9 IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCcvcnNwL3ByZXZwaG90by9AdGl0bGUn KSk7CgkJJHRoaXMtPnByZXZpb3VzWyd0aHVtYiddID0gYXJyYXlfc2hpZnQoJHRoaXMtPnht bC0+eHBhdGgoJy9yc3AvcHJldnBob3RvL0B0aHVtYicpKTsKCQkkdGhpcy0+bmV4dFsnaWQn XSA9IGFycmF5X3NoaWZ0KCR0aGlzLT54bWwtPnhwYXRoKCcvcnNwL25leHRwaG90by9AaWQn KSk7CgkJJHRoaXMtPm5leHRbJ3RpdGxlJ10gPSBhcnJheV9zaGlmdCgkdGhpcy0+eG1sLT54 cGF0aCgnL3JzcC9uZXh0cGhvdG8vQHRpdGxlJykpOwoJCSR0aGlzLT5uZXh0Wyd0aHVtYidd ID0gYXJyYXlfc2hpZnQoJHRoaXMtPnhtbC0+eHBhdGgoJy9yc3AvbmV4dHBob3RvL0B0aHVt YicpKTsKCQkkdGhpcy0+Y29udGV4dCA9IHRydWU7Cgl9CgoJZnVuY3Rpb24gaW1nX25ha2Vk KCkgewoJCSRwaG90byA9IGFycmF5KCJmYXJtIiA9PiAkdGhpcy0+ZmFybSwgInNlcnZlciIg PT4gJHRoaXMtPnNlcnZlciwgImlkIiA9PiAkdGhpcy0+aWQsICJzZWNyZXQiID0+ICR0aGlz LT5zZWNyZXQsICJvcmlnaW5hbF9zZWNyZXQiID0+ICR0aGlzLT5vcmlnaW5hbF9zZWNyZXQs ICJvcmlnaW5hbF9mb3JtYXQiID0+ICR0aGlzLT5vcmlnaW5hbF9mb3JtYXQpOwoJCSRpbWdf dXJsID0gJHRoaXMtPmdldFBob3RvVXJsKCRwaG90bywgJHRoaXMtPmltZ19zaXplKTsKCQkk aW1nX3VybCA9ICc8aW1nIHNyYz0iJyAuICRpbWdfdXJsIC4gJyIgYWx0PSInIC4gJHRoaXMt PnRpdGxlIC4gJyIgLz4nOwoJCXJldHVybiAkaW1nX3VybDsKCX0KCglmdW5jdGlvbiBpbWdf bGluaygkaW1nX3VybCkgewoJCWlmIChpc3NldCgkdGhpcy0+bGluaykpewoJCQlzd2l0Y2go JHRoaXMtPmxpbmspIHsKCQkJCWNhc2UgImZsaWNrciI6CgkJCQkkbGlua190YXJnZXQgPSAn aHR0cDovL3d3dy5mbGlja3IuY29tL3Bob3Rvcy8nIC4gdXJsZW5jb2RlKCR0aGlzLT5uc2lk KSAuICcvJyAuICR0aGlzLT5pZCAuICcvJzsKCQkJCWJyZWFrOwoJCQkJY2FzZSAib3JpZ2lu YWxfc2l6ZSIgfHwgImxpZ2h0Ym94IjoKCQkJCSRwaG90byA9IGFycmF5KCJmYXJtIiA9PiAk dGhpcy0+ZmFybSwgInNlcnZlciIgPT4gJHRoaXMtPnNlcnZlciwgImlkIiA9PiAkdGhpcy0+ aWQsICJzZWNyZXQiID0+ICR0aGlzLT5zZWNyZXQsICJvcmlnaW5hbF9zZWNyZXQiID0+ICR0 aGlzLT5vcmlnaW5hbF9zZWNyZXQsICJvcmlnaW5hbF9mb3JtYXQiID0+ICR0aGlzLT5vcmln aW5hbF9mb3JtYXQpOwoJCQkJJGxpbmtfdGFyZ2V0ID0gJHRoaXMtPmdldFBob3RvVXJsKCRw aG90bywgJHRoaXMtPm9yaWdpbmFsX3NpemUpOwoJCQkJYnJlYWs7CgkJCQljYXNlICJpbWdf aW5mb3JtYXRpb24iOgoJCQkJJGxpbmtfdGFyZ2V0ID0gJ2h0dHA6Ly93d3cuZmxpY2tyLmNv bS9waG90b19leGlmLmduZT9pZD0nIC4gJHRoaXMtPmlkOwoJCQkJYnJlYWs7CgkJCX0KCQkJ JGxpbmtfYXR0cmlidXRlcyA9ICcgaHJlZj0iJyAuICRsaW5rX3RhcmdldCAuICciJzsKCQkJ aWYgKCR0aGlzLT5saW5rID09ICJsaWdodGJveCIpIHsKCQkJCSRsaW5rX2F0dHJpYnV0ZXMg Lj0gJyByZWw9ImxpZ2h0Ym94Iic7CgkJCX0KCQkJJGltZ191cmwgPSB0YWcoJGltZ191cmws ICdhJywgJGxpbmtfYXR0cmlidXRlcyk7CgkJCSRpbWdfdXJsIC49ICJcbiI7CgkJfQoJCXJl dHVybiAkaW1nX3VybDsKCX0KCglmdW5jdGlvbiBpbWdfcHJldmlvdXMoJGxhYmVsLCAkdGhp bmcpIHsKCQlpZiAoIWlzc2V0KCR0aGlzLT5jb250ZXh0KSkgJHRoaXMtPmdldENvbnRleHQo KTsKCQkkdGhpcy0+cHJldmlvdXNbJ2lkJ10gPSAoaW50KSAoJHRoaXMtPnByZXZpb3VzWydp ZCddKTsKCQlpZiAoJHRoaXMtPnByZXZpb3VzWydpZCddICE9IDApIHsKCQkJJHRpdGxlID0g ICR0aGlzLT5wcmV2aW91c1sndGl0bGUnXTsKCQkJJGVuZCA9ICciIHRpdGxlPSInLiAkbGFi ZWwgLiAkdGl0bGU7CgkJCWlmIChpc3NldCgkdGhpcy0+c2V0KSkgJGh0bWwgPSB0YWcoJHRo aW5nLCdhJywnIGhyZWY9IicuICR0aGlzLT5tYWtlUmVxdWVzdChhcnJheSgnc2V0JyA9PiAk dGhpcy0+c2V0LCAnaW1nJyA9PiAkdGhpcy0+cHJldmlvdXNbJ2lkJ10pKSAuJGVuZC4nIicp LiJcbiI7CgkJCWVsc2UgJGh0bWwgPSB0YWcoJHRoaW5nLCdhJywnIGhyZWY9IicuICR0aGlz LT5tYWtlUmVxdWVzdChhcnJheSgnaW1nJyA9PiAkdGhpcy0+cHJldmlvdXNbJ2lkJ10pKSAu JGVuZC4nIicpLiJcbiI7CgkJfQoJCXJldHVybiAkaHRtbDsKCX0KCglmdW5jdGlvbiBpbWdf cHJldmlvdXNfdGh1bWJuYWlsKCkgewoJCWlmICghaXNzZXQoJHRoaXMtPmNvbnRleHQpKSAk dGhpcy0+Z2V0Q29udGV4dCgpOwoJCSR0aGlzLT5wcmV2aW91c1snaWQnXSA9IChpbnQpICgk dGhpcy0+cHJldmlvdXNbJ2lkJ10pOwoJCWlmICgkdGhpcy0+cHJldmlvdXNbJ2lkJ10gIT0g MCkgewoJCQkkcmVzdWx0ID0gJzxpbWcgc3JjPSInIC4gJHRoaXMtPnByZXZpb3VzWyd0aHVt YiddIC4gJyIgYWx0PSInIC4gJHRpdGxlIC4gJyIgLz4nOwoJCX0KCQlyZXR1cm4gJHJlc3Vs dDsKCX0KCglmdW5jdGlvbiBpbWdfbmV4dCgkbGFiZWwsICR0aGluZykgewoJCWlmICghaXNz ZXQoJHRoaXMtPmNvbnRleHQpKSAkdGhpcy0+Z2V0Q29udGV4dCgpOwoJCSR0aGlzLT5uZXh0 WydpZCddID0gKGludCkgKCR0aGlzLT5uZXh0WydpZCddKTsKCQlpZiAoJHRoaXMtPm5leHRb J2lkJ10gIT0gMCkgewoJCQkkdGl0bGUgPSAgJHRoaXMtPm5leHRbJ3RpdGxlJ107CgkJCSRl bmQgPSAnIiB0aXRsZT0iJy4gJGxhYmVsIC4gJHRpdGxlOwoJCQlpZiAoaXNzZXQoJHRoaXMt PnNldCkpICRodG1sID0gdGFnKCR0aGluZywnYScsJyBocmVmPSInLiAkdGhpcy0+bWFrZVJl cXVlc3QoYXJyYXkoJ3NldCcgPT4gJHRoaXMtPnNldCwgJ2ltZycgPT4gJHRoaXMtPm5leHRb J2lkJ10pKSAuJGVuZC4nIicpLiJcbiI7CgkJCWVsc2UgJGh0bWwgPSB0YWcoJHRoaW5nLCdh JywnIGhyZWY9IicuICR0aGlzLT5tYWtlUmVxdWVzdChhcnJheSgnaW1nJyA9PiAkdGhpcy0+ bmV4dFsnaWQnXSkpIC4kZW5kLiciJykuIlxuIjsKCQl9CgkJcmV0dXJuICRodG1sOwoJfQoK CWZ1bmN0aW9uIGltZ19uZXh0X3RodW1ibmFpbCgpIHsKCQlpZiAoIWlzc2V0KCR0aGlzLT5j b250ZXh0KSkgJHRoaXMtPmdldENvbnRleHQoKTsKCQkkdGhpcy0+bmV4dFsnaWQnXSA9IChp bnQpICgkdGhpcy0+bmV4dFsnaWQnXSk7CgkJaWYgKCR0aGlzLT5uZXh0WydpZCddICE9IDAp IHsKCQkJJHJlc3VsdCA9ICc8aW1nIHNyYz0iJyAuICR0aGlzLT5uZXh0Wyd0aHVtYiddIC4g JyIgYWx0PSInIC4gJHRpdGxlIC4gJyIgLz4nOwoJCX0KCQlyZXR1cm4gJHJlc3VsdDsKCX0K CglmdW5jdGlvbiBpbWdfc2V0X3RpdGxlKCkgewoJCWlmIChpc3NldCgkdGhpcy0+c2V0KSkg ewoJCQkkbWV0aG9kID0gJ2ZsaWNrci5waG90b3NldHMuZ2V0SW5mbycgLiAkdGhpcy0+dXNl cmRhdGEgLiAnJnBob3Rvc2V0X2lkPScgLiAkdGhpcy0+c2V0OwoJCQkkeG1sID0gbmV3IEZs aWNrcigkbWV0aG9kKTsKCQkJJHRoaXMtPnNldF90aXRsZSA9IGFycmF5X3NoaWZ0KCR4bWwt PnhwYXRoKCcvcnNwL3Bob3Rvc2V0L3RpdGxlL3RleHQoKScpKTsKCQkJcmV0dXJuICR0aGlz LT5zZXRfdGl0bGU7CgkJfQoJCXJldHVybiAnJzsKCX0KCglmdW5jdGlvbiBpbWdfc2V0X2xp bmsoJHRoaW5nKSB7CgkJaWYgKGlzc2V0KCR0aGlzLT5zZXQpKSB7CgkJCXJldHVybiB0YWco JHRoaW5nLCAnYScsICcgaHJlZj0iJy4gJHRoaXMtPm1ha2VSZXF1ZXN0KGFycmF5KCdzZXQn ID0+ICR0aGlzLT5zZXQpKSAuJyInKTsKCQl9CgkJcmV0dXJuICcnOwoJfQoKCWZ1bmN0aW9u IGltZ19uYXYoKSB7CgkJJGh0bWwgLj0gJHRoaXMtPmltZ19wcmV2aW91cygpOwoJCSRodG1s IC49ICc8aDIgY2xhc3M9InNldG5hbWUiPicgLiAkdGhpcy0+aW1nX3NldF90aXRsZSgpIC4g JzwvaDI+JyAuICJcbiI7CgkJJGh0bWwgLj0gJHRoaXMtPmltZ19uZXh0KCk7CgkJcmV0dXJu ICRodG1sOwoJfQoKCWZ1bmN0aW9uIGltZ190aXRsZSgpIHsKCQlyZXR1cm4gJHRoaXMtPnRp dGxlOwoJfQoKCWZ1bmN0aW9uIGltZ19kZXNjcmlwdGlvbigpIHsKCQkkZGVzY3JpcHRpb25f c3RyaW5nID0gKHN0cmluZykgJHRoaXMtPmRlc2NyaXB0aW9uOwoJCWlmICgkZGVzY3JpcHRp b25fc3RyaW5nICE9ICdBcnJheScpIHJldHVybiAkZGVzY3JpcHRpb25fc3RyaW5nOwoJfQoK CWZ1bmN0aW9uIGltZ19pZl9kZXNjcmlwdGlvbiAoJHRoaW5nKSB7CgkJaWYgKCR0aGlzLT5k ZXNjcmlwdGlvbiAhPSAnJm5ic3A7JyBhbmQgIWVtcHR5KCR0aGlzLT5kZXNjcmlwdGlvbikp ICRyZXN1bHQgPSBwYXJzZSgkdGhpbmcpOwoJCWVsc2UgJHJlc3VsdCA9ICcnOwoJCXJldHVy biAkcmVzdWx0OwoJfQoKCWZ1bmN0aW9uIGltZ190YWdzKCRzZXBhcmF0b3IpIHsKCQkkaHRt bCA9IHRhZygkdGhpcy0+cmF3X3RhZ3NbMF0sJ2EnLCcgaHJlZj0iJyAuICR0aGlzLT5tYWtl UmVxdWVzdChhcnJheSgndGFncycgPT4gJHRoaXMtPnRhZ3NbMF0pKSAuICciJykuIlxuIjsK CQlmb3IoJGkgPSAxOyAkaSA8IHNpemVvZigkdGhpcy0+dGFncyk7ICRpKyspIHsKCQkJJGh0 bWwgLj0gJHNlcGFyYXRvcjsKCQkJJGh0bWwgLj0gdGFnKCR0aGlzLT5yYXdfdGFnc1skaV0s J2EnLCcgaHJlZj0iJyAuICR0aGlzLT5tYWtlUmVxdWVzdChhcnJheSgndGFncycgPT4gJHRo aXMtPnRhZ3NbJGldKSkgLiAnIicpLiJcbiI7CgkJfQoJCXJldHVybiAkaHRtbDsKCX0KCglm dW5jdGlvbiBpbWdfbnVtYmVyX29mX2NvbW1lbnRzKCkgewoJCXJldHVybiAkdGhpcy0+Y29t bWVudHM7Cgl9CgoJZnVuY3Rpb24gaW1nX2NvbW1lbnRzX2ludml0ZSgkaW52aXRldGV4dCkg ewoJCXJldHVybiB0YWcoJGludml0ZXRleHQsJ2EnLCcgaHJlZj0iJyAuICdodHRwOi8vd3d3 LmZsaWNrci5jb20vcGhvdG9zLycgLiB1cmxlbmNvZGUoJHRoaXMtPm5zaWQpIC4gJy8nIC4g JHRoaXMtPmlkIC4gJy8iJyk7Cgl9CgoJZnVuY3Rpb24gaW1nX2RhdGVfcG9zdGVkKCRwYXJh bXMpIHsKCQlpZiAoaXNzZXQoJHBhcmFtc1snZm9ybWF0J10pKSByZXR1cm4gc2FmZV9zdHJm dGltZSgkcGFyYW1zWydmb3JtYXQnXSwgJHRoaXMtPmRhdGVfcG9zdGVkKTsKCQlnbG9iYWwg JGFyY2hpdmVfZGF0ZWZvcm1hdDsKCQlyZXR1cm4gc2FmZV9zdHJmdGltZSgkYXJjaGl2ZV9k YXRlZm9ybWF0LCAkdGhpcy0+ZGF0ZV9wb3N0ZWQpOwoJfQoKCWZ1bmN0aW9uIGltZ19kYXRl X3Rha2VuKCRwYXJhbXMpIHsKCQlpZiAoaXNzZXQoJHBhcmFtc1snZm9ybWF0J10pKSByZXR1 cm4gc2FmZV9zdHJmdGltZSgkcGFyYW1zWydmb3JtYXQnXSwgc3RydG90aW1lKCR0aGlzLT5k YXRlX3Rha2VuKSk7CgkJZ2xvYmFsICRhcmNoaXZlX2RhdGVmb3JtYXQ7CgkJcmV0dXJuIHNh ZmVfc3RyZnRpbWUoJGFyY2hpdmVfZGF0ZWZvcm1hdCwgc3RydG90aW1lKCR0aGlzLT5kYXRl X3Rha2VuKSk7Cgl9CgoJZnVuY3Rpb24gX190b1N0cmluZygpIHsKCQlpZighJHRoaXMtPnht bC0+aXNWYWxpZCgpKSB7CgkJCXJldHVybiAkR0xPQkFMU1sndGV4dCddWydlcnJvcl9tZXNz YWdlJ107CgkJfQoJCSRyZXN1bHQgPSBwYXJzZSgkdGhpcy0+Zm9ybSk7CgkJcmV0dXJuICRy ZXN1bHQ7Cgl9Cn0KCgpjbGFzcyBUYWdsaXN0IGV4dGVuZHMgVmRoX0ZsaWNrciB7Cgl2YXIg JHhtbCwgJHRhZ2xpc3QsICRjb3VudCwgJHNvdXJjZV90YWc7CgoJZnVuY3Rpb24gVGFnbGlz dCgkcGFyYW1zKSB7CgkJJHRoaXMtPlZkaF9GbGlja3IoJHBhcmFtcyk7Cgl9CgoJZnVuY3Rp b24gbGlzdF9hbGwoJHBhcmFtcykgewoJCSRtZXRob2QgPSAnZmxpY2tyLnRhZ3MuZ2V0TGlz dFVzZXInIC4gJHRoaXMtPnVzZXJkYXRhOwoJCXJldHVybiAkdGhpcy0+Z2VuZXJhdGVMaXN0 KCRtZXRob2QsICRwYXJhbXMpOwoJfQoKCWZ1bmN0aW9uIGxpc3RfcG9wdWxhcigkcGFyYW1z KSB7CgkJaXNzZXQoJHBhcmFtc1snY291bnQnXSk/ICR0aGlzLT5jb3VudCA9ICRwYXJhbXNb J2NvdW50J10gOiAkdGhpcy0+Y291bnQgPSAxMDsKCQkkbWV0aG9kID0gJ2ZsaWNrci50YWdz LmdldExpc3RVc2VyUG9wdWxhcicgLiAkdGhpcy0+dXNlcmRhdGEgLiAnJmNvdW50PScgLiAk dGhpcy0+Y291bnQ7CgkJcmV0dXJuICR0aGlzLT5nZW5lcmF0ZUxpc3QoJG1ldGhvZCwgJHBh cmFtcyk7Cgl9CgoJZnVuY3Rpb24gbGlzdF9yZWxhdGVkKCRwYXJhbXMpIHsKCQlpc3NldCgk cGFyYW1zWydzb3VyY2VfdGFnJ10pPyAkdGhpcy0+c291cmNlX3RhZyA9ICRwYXJhbXNbJ3Nv dXJjZV90YWcnXSA6ICR0aGlzLT5zb3VyY2VfdGFnID0gJyc7CgkJJG1ldGhvZCA9ICdmbGlj a3IudGFncy5nZXRSZWxhdGVkJyAuICR0aGlzLT51c2VyZGF0YSAuICcmdGFnPScgLiAkdGhp cy0+c291cmNlX3RhZzsKCQlyZXR1cm4gJHRoaXMtPmdlbmVyYXRlTGlzdCgkbWV0aG9kLCAk cGFyYW1zKTsKCX0KCglmdW5jdGlvbiBnZW5lcmF0ZUxpc3QgKCRtZXRob2QsICRwYXJhbXMp IHsKCQkkdGhpcy0+eG1sID0gbmV3IEZsaWNrcigkbWV0aG9kKTsKCQlpZigkdGhpcy0+eG1s LT5pc1ZhbGlkKCkpIHsKCQkJJHRoaXMtPnRhZ2xpc3QgPSAkdGhpcy0+eG1sLT54cGF0aCgn Ly90YWdzL3RhZy90ZXh0KCknKTsKCQl9CgkJZm9yICgkaSA9IDA7ICRpIDw9IHNpemVvZigk dGhpcy0+dGFnbGlzdCkgLSAxOyAkaSsrKSB7CgkJCSR0aGlzLT50YWdsaXN0WyRpXSA9IHRh ZygkdGhpcy0+dGFnbGlzdFskaV0sJ2EnLCcgaHJlZj0iJyAuICR0aGlzLT5tYWtlUmVxdWVz dChhcnJheSgndGFncycgPT4gJHRoaXMtPnRhZ2xpc3RbJGldKSkgLiAnIicpOwoJCX0KCQly ZXR1cm4gZG9XcmFwKCR0aGlzLT50YWdsaXN0LCAkcGFyYW1zWyd3cmFwdGFnJ10sICRwYXJh bXNbJ2JyZWFrJ10sICRwYXJhbXNbJ2NsYXNzJ10sICRwYXJhbXNbJ2JyZWFrY2xhc3MnXSwg JHBhcmFtc1snYXR0cyddKTsKCX0KCglmdW5jdGlvbiBfX3RvU3RyaW5nKCkgewoJCXJldHVy biAkdGhpcy0+bGlzdF9hbGw7Cgl9Cn0KCgpjbGFzcyBGbGlja3IgewoJdmFyICR4bWx1cmwg PSAnaHR0cDovL3d3dy5mbGlja3IuY29tL3NlcnZpY2VzL3Jlc3QvP21ldGhvZD0nOwoJdmFy ICR4bWw7CgoJZnVuY3Rpb24gRmxpY2tyKCRtZXRob2QpIHsKCQkvLyR0aW1lX3N0YXJ0ID0g bWljcm90aW1lKHRydWUpOwoJCSR0aGlzLT54bWx1cmwgLj0gJG1ldGhvZDsKCQlpZihpc3Nl dCgkR0xPQkFMU1sndXNlX3BocDQnXSkpIHsKCQkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3Vy bF9pbml0JykpIHsKCQkJCSRjaCA9IEBjdXJsX2luaXQoKTsKCQkJCWN1cmxfc2V0b3B0KCRj aCwgQ1VSTE9QVF9VUkwsICR0aGlzLT54bWx1cmwpOwoJCQkJY3VybF9zZXRvcHQoJGNoLCBD VVJMT1BUX0hFQURFUiwgMCk7CgkJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJO VFJBTlNGRVIsIDEpOwoJCQkJJHJlc3AgPSBjdXJsX2V4ZWMoJGNoKTsKCQkJCWN1cmxfY2xv c2UoJGNoKTsKCQkJCWlmKCRkb20gPSBAZG9teG1sX29wZW5fbWVtKCRyZXNwKSkgewoJCQkJ CSR0aGlzLT54bWwgPSB4cGF0aF9uZXdfY29udGV4dCgkZG9tKTsKCQkJCX0KCQkJfQoJCQll bHNlIGlmICgkcmVzcCA9IEBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+eG1sdXJsKSkgewoJ CQkJaWYoJGRvbSA9IEBkb214bWxfb3Blbl9tZW0oJHJlc3ApKSB7CgkJCQkJJHRoaXMtPnht bCA9IHhwYXRoX25ld19jb250ZXh0KCRkb20pOwoJCQkJfQoJCQl9CgkJCWVsc2UgaWYgKGZ1 bmN0aW9uX2V4aXN0cygnZG9teG1sX29wZW5fZmlsZScpKXsKCQkJCSRkb20gPSBAZG9teG1s X29wZW5fZmlsZSgkdGhpcy0+eG1sdXJsKTsKCQkJCSR0aGlzLT54bWwgPSB4cGF0aF9uZXdf Y29udGV4dCgkZG9tKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJaWYoISR0aGlzLT54bWwgPSBA c2ltcGxleG1sX2xvYWRfZmlsZSgkdGhpcy0+eG1sdXJsKSkgewoJCQkJdW5zZXQoJHRoaXMt PnhtbCk7CgkJCX0KCQl9CgkJLy9lY2hvIG4sY29tbWVudCgoJ3J1bnRpbWUgZm9yICcgLiAk bWV0aG9kLiAnOiAnIC4gKG1pY3JvdGltZSh0cnVlKSAtICR0aW1lX3N0YXJ0KSAuICI8YnIg Lz5cbiIpKTsKCX0KCglmdW5jdGlvbiBpc1ZhbGlkKCkgewoJCWlmKGlzc2V0KCR0aGlzLT54 bWwpKSB7CgkJCSRyZXMgPSBhcnJheV9zaGlmdCgkdGhpcy0+eHBhdGgoJy9yc3AvQHN0YXQn KSk7CgkJCWlmICgkcmVzID09ICdmYWlsJykgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJ CXJldHVybiB0cnVlOwoJCX0KCQllbHNlIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0KCglm dW5jdGlvbiB4cGF0aCgkcGF0aCkgewoJCWlmKCFpc3NldCgkdGhpcy0+eG1sKSkgewoJCQly ZXR1cm4gTlVMTDsKCQl9CgkJaWYoaXNzZXQoJEdMT0JBTFNbJ3VzZV9waHA0J10pKSB7CgkJ CSRyZXN1bHQgPSB4cGF0aF9ldmFsX2V4cHJlc3Npb24oJHRoaXMtPnhtbCwgJHBhdGgpOwoJ CQkkcmVzdWx0ID0gJHJlc3VsdC0+bm9kZXNldDsKCQkJLy8gQ29udmVydCB0byBTdHJpbmc6 CgkJCWZvcigkaXRlcmF0b3IgPSAwOyAkaXRlcmF0b3IgPCBjb3VudCgkcmVzdWx0KTsgJGl0 ZXJhdG9yKyspIHsKCQkJCSRyZXN1bHRbJGl0ZXJhdG9yXSA9ICRyZXN1bHRbJGl0ZXJhdG9y XS0+Z2V0X2NvbnRlbnQoKTsKCQkJfQoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9CgkJZWxzZSB7 CgkJCSRyZXN1bHQgPSAkdGhpcy0+eG1sLT54cGF0aCgkcGF0aCk7CgkJCS8vIENvbnZlcnQg dG8gU3RyaW5nOgoJCQlmb3IoJGl0ZXJhdG9yID0gMDsgJGl0ZXJhdG9yIDwgY291bnQoJHJl c3VsdCk7ICRpdGVyYXRvcisrKSB7CgkJCQkkcmVzdWx0WyRpdGVyYXRvcl0gPSAoc3RyaW5n KSAkcmVzdWx0WyRpdGVyYXRvcl07CgkJCX0KCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQp9 CgpmdW5jdGlvbiB2ZGhfZmxpY2tyKCRwYXJhbXMpIHsKCWlmKGlzc2V0KCRfR0VUWydpbWcn XSkpIHsKCQlyZXR1cm4gdmRoX2ZsaWNrcl9pbWcoJHBhcmFtcyk7Cgl9CglpZihpc3NldCgk X0dFVFsndGFncyddKSkgewoJCXJldHVybiB2ZGhfZmxpY2tyX3RodW1ibmFpbHMoJHBhcmFt cyk7Cgl9CglpZihpc3NldCgkX0dFVFsnc2V0J10pKSB7CgkJcmV0dXJuIHZkaF9mbGlja3Jf dGh1bWJuYWlscygkcGFyYW1zKTsKCX0KCWdsb2JhbCAkZ2FsOwoJLy8oKGlzc2V0ICgkZ2Fs KSk9PWZhbHNlKT8gJGdhbCA9IG5ldyBHYWxsZXJ5KCRwYXJhbXMpIDogJyc7CglpZiAoIWVt cHR5KCRwYXJhbXMpKSAkZ2FsID0gbmV3IEdhbGxlcnkoJHBhcmFtcyk7CglyZXR1cm4gJGdh bC0+X190b1N0cmluZygpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3RodW1ibmFpbHMoJHBh cmFtcykgewoJaWYoaXNzZXQoJF9HRVRbJ2ltZyddKSkgewoJCXJldHVybiB2ZGhfZmxpY2ty X2ltZygkcGFyYW1zKTsKCX0KCWdsb2JhbCAkdGh1bWJzOwoJLy8oKGlzc2V0ICgkdGh1bWJz KSk9PWZhbHNlKT8gJHRodW1icyA9IG5ldyBUaHVtYm5haWxzKCRwYXJhbXMpIDogJyc7Cglp ZiAoIWVtcHR5KCRwYXJhbXMpKSAkdGh1bWJzID0gbmV3IFRodW1ibmFpbHMoJHBhcmFtcyk7 CglyZXR1cm4gJHRodW1icy0+X190b1N0cmluZygpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2ty X2ltZygkcGFyYW1zKSB7CglnbG9iYWwgJHNpbmdsZWltZzsKCS8vKChpc3NldCAoJHNpbmds ZWltZykpPT1mYWxzZSk/ICRzaW5nbGVpbWcgPSBuZXcgUGljdHVyZSgkcGFyYW1zKSA6ICcn OwoJaWYgKCFlbXB0eSgkcGFyYW1zKSkgJHNpbmdsZWltZyA9IG5ldyBQaWN0dXJlKCRwYXJh bXMpOwoJcmV0dXJuICRzaW5nbGVpbWctPl9fdG9TdHJpbmcoKTsKfQoKLy9uZXVlIHR4cCB0 YWdzCgpnbG9iYWwgJHZkaF9mbGlja3I7CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3NldF9pbWcg KCRwYXJhbXMpIHsKCWdsb2JhbCAkZ2FsOwoJcmV0dXJuICRnYWwtPnNldF9pbWcoJHBhcmFt cyk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3Jfc2V0X3RpdGxlICgkcGFyYW1zKSB7CglnbG9i YWwgJGdhbDsKCXJldHVybiAkZ2FsLT5zZXRfdGl0bGUoJHBhcmFtcyk7Cn0KCmZ1bmN0aW9u IHZkaF9mbGlja3Jfc2V0X2Rlc2NyaXB0aW9uICgpIHsKCWdsb2JhbCAkZ2FsOwoJcmV0dXJu ICRnYWwtPnNldF9kZXNjcmlwdGlvbigpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3NldF9u dW1iZXJfb2ZfcGhvdG9zICgpIHsKCWdsb2JhbCAkZ2FsOwoJcmV0dXJuICRnYWwtPnNldF9u dW1iZXJfb2ZfcGhvdG9zKCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3Jfc2V0X2xpbmsgKCRw YXJhbXMsICR0aGluZykgewoJJHJlc3VsdCA9IHBhcnNlKCR0aGluZyk7CglnbG9iYWwgJGdh bDsKCXJldHVybiAkZ2FsLT5zZXRfbGluaygkcGFyYW1zLCAkcmVzdWx0KTsKfQoKZnVuY3Rp b24gdmRoX2ZsaWNrcl9zZXRfbGlzdCAoJHBhcmFtcykgewoJZ2xvYmFsICRnYWw7CgkoKGlz c2V0ICgkZ2FsKSk9PWZhbHNlKT8gJGdhbCA9IG5ldyBHYWxsZXJ5KCRwYXJhbXMpIDogJyc7 CglyZXR1cm4gJGdhbC0+c2V0X2xpc3QoJHBhcmFtcyk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlj a3JfdGFnX2xpc3RfYWxsICgkcGFyYW1zKSB7CgkkdGFnbGFsYWxhID0gbmV3IFRhZ2xpc3Qo JHBhcmFtcyk7CglyZXR1cm4gJHRhZ2xhbGFsYS0+bGlzdF9hbGwoJHBhcmFtcyk7Cn0KCmZ1 bmN0aW9uIHZkaF9mbGlja3JfdGFnX2xpc3RfcG9wdWxhciAoJHBhcmFtcykgewoJJHRhZ2xh bGFsYSA9IG5ldyBUYWdsaXN0KCRwYXJhbXMpOwoJcmV0dXJuICR0YWdsYWxhbGEtPmxpc3Rf cG9wdWxhcigkcGFyYW1zKTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl90YWdfbGlzdF9yZWxh dGVkICgkcGFyYW1zKSB7CgkkdGFnbGFsYWxhID0gbmV3IFRhZ2xpc3QoJHBhcmFtcyk7Cgly ZXR1cm4gJHRhZ2xhbGFsYS0+bGlzdF9yZWxhdGVkKCRwYXJhbXMpOwp9CgpmdW5jdGlvbiB2 ZGhfZmxpY2tyX3RodW1ibmFpbHNfdGl0bGUgKCkgewoJZ2xvYmFsICR0aHVtYnM7CglyZXR1 cm4gJHRodW1icy0+dGh1bWJuYWlsc190aXRsZSgpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2ty X3RodW1ibmFpbHNfZGVzY3JpcHRpb24gKCkgewoJZ2xvYmFsICR0aHVtYnM7CglyZXR1cm4g JHRodW1icy0+dGh1bWJuYWlsc19kZXNjcmlwdGlvbigpOwp9CgpmdW5jdGlvbiB2ZGhfZmxp Y2tyX3RodW1ibmFpbHNfaWZfZGVzY3JpcHRpb24gKCRwYXJhbXMsICR0aGluZykgewoJZ2xv YmFsICR0aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc19pZl9kZXNjcmlwdGlv bigkdGhpbmcpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3RodW1ibmFpbHNfc2xpZGVzaG93 ICgkcGFyYW1zLCAkdGhpbmcpIHsKCSRyZXN1bHQgPSBwYXJzZSgkdGhpbmcpOwoJZ2xvYmFs ICR0aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc19zbGlkZXNob3coJHJlc3Vs dCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfdGh1bWJuYWlsc19pbWcgKCkgewoJZ2xvYmFs ICR0aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc19pbWcoKTsKfQoKZnVuY3Rp b24gdmRoX2ZsaWNrcl90aHVtYm5haWxzX2ltZ190aXRsZSAoKSB7CglnbG9iYWwgJHRodW1i czsKCXJldHVybiAkdGh1bWJzLT50aHVtYm5haWxzX2ltZ190aXRsZSgpOwp9CgpmdW5jdGlv biB2ZGhfZmxpY2tyX3RodW1ibmFpbHNfbGluayAoJHBhcmFtcywgJHRoaW5nKSB7CgkkcmVz dWx0ID0gcGFyc2UoJHRoaW5nKTsKCWdsb2JhbCAkdGh1bWJzOwoJcmV0dXJuICR0aHVtYnMt PnRodW1ibmFpbHNfbGluaygkcmVzdWx0KTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl90aHVt Ym5haWxzX2xpc3QgKCRwYXJhbXMpIHsKCWdsb2JhbCAkdGh1bWJzOwoJaWYgKGlzc2V0KCRf R0VUWydzZXQnXSkgb3IgaXNzZXQoJF9HRVRbJ3RhZ3MnXSkgb3IgaXNzZXQoJHBhcmFtc1sn c2V0J10pIG9yIGlzc2V0KCRwYXJhbXNbJ3RhZ3MnXSkgb3IgaXNzZXQoJHBhcmFtc1snbGF0 ZXN0J10pKSB7CgkJaWYgKChpc3NldCAoJHRodW1icykpPT1mYWxzZSkgJHRodW1icyA9IG5l dyBUaHVtYm5haWxzKCRwYXJhbXMpOwoJfQoJaWYgKGlzc2V0KCRfR0VUWydzZXQnXSkgb3Ig aXNzZXQoJF9HRVRbJ3RhZ3MnXSkgb3IgaXNzZXQoJHRodW1icy0+c2V0KSBvciBpc3NldCgk dGh1bWJzLT50YWdzKSBvciBpc3NldCgkdGh1bWJzLT5sYXRlc3QpKSB7CgkJcmV0dXJuICR0 aHVtYnMtPnRodW1ibmFpbHNfbGlzdCgkcGFyYW1zKTsKCX0KCXJldHVybiBmYWxzZTsKfQoK ZnVuY3Rpb24gdmRoX2ZsaWNrcl90aHVtYm5haWxzX251bWJlcl9vZl9waG90b3MoKSB7Cgln bG9iYWwgJHRodW1iczsKCXJldHVybiAkdGh1bWJzLT50aHVtYm5haWxzX251bWJlcl9vZl9w aG90b3MoKTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl90aHVtYm5haWxzX3Blcl9wYWdlKCkg ewoJZ2xvYmFsICR0aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc19wZXJfcGFn ZSgpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3RodW1ibmFpbHNfY3VycmVudF9wYWdlKCkg ewoJZ2xvYmFsICR0aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc19jdXJyZW50 X3BhZ2UoKTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl90aHVtYm5haWxzX3RvdGFsX3BhZ2Vz KCkgewoJZ2xvYmFsICR0aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc190b3Rh bF9wYWdlcygpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3RodW1ibmFpbHNfcGFnZXNfZmly c3QoJHBhcmFtcywgJHRoaW5nKSB7CglnbG9iYWwgJHRodW1iczsKCXJldHVybiAkdGh1bWJz LT50aHVtYm5haWxzX3BhZ2VzX2ZpcnN0KCR0aGluZyk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlj a3JfdGh1bWJuYWlsc19wYWdlc19sYXN0KCRwYXJhbXMsICR0aGluZykgewoJZ2xvYmFsICR0 aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc19wYWdlc19sYXN0KCR0aGluZyk7 Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfdGh1bWJuYWlsc19wYWdlc19wcmV2aW91cygkcGFy YW1zLCAkdGhpbmcpIHsKCWdsb2JhbCAkdGh1bWJzOwoJcmV0dXJuICR0aHVtYnMtPnRodW1i bmFpbHNfcGFnZXNfcHJldmlvdXMoJHRoaW5nKTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl90 aHVtYm5haWxzX3BhZ2VzX25leHQoJHBhcmFtcywgJHRoaW5nKSB7CglnbG9iYWwgJHRodW1i czsKCXJldHVybiAkdGh1bWJzLT50aHVtYm5haWxzX3BhZ2VzX25leHQoJHRoaW5nKTsKfQoK ZnVuY3Rpb24gdmRoX2ZsaWNrcl90aHVtYm5haWxzX3BhZ2VzX2xpc3QoJHBhcmFtcykgewoJ Z2xvYmFsICR0aHVtYnM7CglyZXR1cm4gJHRodW1icy0+dGh1bWJuYWlsc19wYWdlc19saXN0 KCRwYXJhbXMpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3RodW1ibmFpbHNfcGFnZXNfc3Rh cnR0aHVtYigpIHsKCWdsb2JhbCAkdGh1bWJzOwoJcmV0dXJuICR0aHVtYnMtPnRodW1ibmFp bHNfcGFnZXNfc3RhcnR0aHVtYigpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX3RodW1ibmFp bHNfcGFnZXNfZW5kdGh1bWIoKSB7CglnbG9iYWwgJHRodW1iczsKCXJldHVybiAkdGh1bWJz LT50aHVtYm5haWxzX3BhZ2VzX2VuZHRodW1iKCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3Jf dGh1bWJuYWlsc19pZl9tdWx0aXBsZV9wYWdlcygkcGFyYW1zLCAkdGhpbmcpIHsKCWdsb2Jh bCAkdGh1bWJzOwoJcmV0dXJuICR0aHVtYnMtPnRodW1ibmFpbHNfaWZfbXVsdGlwbGVfcGFn ZXMoJHRoaW5nKTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl9pbWdfdGl0bGUgKCkgewoJZ2xv YmFsICRzaW5nbGVpbWc7CglyZXR1cm4gJHNpbmdsZWltZy0+aW1nX3RpdGxlKCk7Cn0KCmZ1 bmN0aW9uIHZkaF9mbGlja3JfaW1nX2Rlc2NyaXB0aW9uICgpIHsKCWdsb2JhbCAkc2luZ2xl aW1nOwoJcmV0dXJuICRzaW5nbGVpbWctPmltZ19kZXNjcmlwdGlvbigpOwp9CgpmdW5jdGlv biB2ZGhfZmxpY2tyX2ltZ19pZl9kZXNjcmlwdGlvbiAoJHBhcmFtcywgJHRoaW5nKSB7Cgln bG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xlaW1nLT5pbWdfaWZfZGVzY3JpcHRp b24oJHRoaW5nKTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl9pbWdfbmFrZWQgKCkgewoJZ2xv YmFsICRzaW5nbGVpbWc7CglyZXR1cm4gJHNpbmdsZWltZy0+aW1nX25ha2VkKCk7Cn0KCmZ1 bmN0aW9uIHZkaF9mbGlja3JfaW1nX2xpbmsgKCRwYXJhbXMsICR0aGluZykgewoJJHJlc3Vs dCA9IHBhcnNlKCR0aGluZyk7CglnbG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xl aW1nLT5pbWdfbGluaygkcmVzdWx0KTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl9pbWdfcHJl dmlvdXMgKCRwYXJhbXMsICR0aGluZykgewoJJHJlc3VsdCA9IHBhcnNlKCR0aGluZyk7Cgln bG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xlaW1nLT5pbWdfcHJldmlvdXMoJHBh cmFtc1snbGFiZWwnXSwgJHJlc3VsdCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaW1nX3By ZXZpb3VzX3RodW1ibmFpbCAoKSB7CglnbG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2lu Z2xlaW1nLT5pbWdfcHJldmlvdXNfdGh1bWJuYWlsKCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlj a3JfaW1nX25leHQgKCRwYXJhbXMsICR0aGluZykgewoJJHJlc3VsdCA9IHBhcnNlKCR0aGlu Zyk7CglnbG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xlaW1nLT5pbWdfbmV4dCgk cGFyYW1zWydsYWJlbCddLCAkcmVzdWx0KTsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl9pbWdf bmV4dF90aHVtYm5haWwgKCkgewoJZ2xvYmFsICRzaW5nbGVpbWc7CglyZXR1cm4gJHNpbmds ZWltZy0+aW1nX25leHRfdGh1bWJuYWlsKCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaW1n X3NldF90aXRsZSAoKSB7CglnbG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xlaW1n LT5pbWdfc2V0X3RpdGxlKCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaW1nX3NldF9saW5r ICgkcGFyYW1zLCAkdGhpbmcpIHsKCSRyZXN1bHQgPSBwYXJzZSgkdGhpbmcpOwoJZ2xvYmFs ICRzaW5nbGVpbWc7CglyZXR1cm4gJHNpbmdsZWltZy0+aW1nX3NldF9saW5rKCRyZXN1bHQp Owp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX2ltZ190YWdzICgkcGFyYW1zKSB7CglnbG9iYWwg JHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xlaW1nLT5pbWdfdGFncygkcGFyYW1zWydzZXBh cmF0b3InXSk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaW1nX251bWJlcl9vZl9jb21tZW50 cyAoKSB7CglnbG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xlaW1nLT5pbWdfbnVt YmVyX29mX2NvbW1lbnRzKCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaW1nX2NvbW1lbnRz X2ludml0ZSAoJHBhcmFtcywgJHRoaW5nKSB7CgkkcmVzdWx0ID0gcGFyc2UoJHRoaW5nKTsK CWdsb2JhbCAkc2luZ2xlaW1nOwoJcmV0dXJuICRzaW5nbGVpbWctPmltZ19jb21tZW50c19p bnZpdGUoJHJlc3VsdCk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaW1nX2RhdGVfcG9zdGVk ICgkcGFyYW1zKSB7CglnbG9iYWwgJHNpbmdsZWltZzsKCXJldHVybiAkc2luZ2xlaW1nLT5p bWdfZGF0ZV9wb3N0ZWQoJHBhcmFtcyk7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaW1nX2Rh dGVfdGFrZW4gKCRwYXJhbXMpIHsKCWdsb2JhbCAkc2luZ2xlaW1nOwoJcmV0dXJuICRzaW5n bGVpbWctPmltZ19kYXRlX3Rha2VuKCRwYXJhbXMpOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2ty X2VudigkcGFyYW1zKSB7CglnbG9iYWwgJHZkaF9mbGlja3I7CglpZihpc3NldCgkX0dFVFsn aW1nJ10pKSB7CgkJZ2xvYmFsICRzaW5nbGVpbWc7CgkJJHZkaF9mbGlja3JbJ2lzX2ltZydd ID0gMTsKCQkkc2luZ2xlaW1nID0gbmV3IFBpY3R1cmUoJHBhcmFtcyk7CgkJcmV0dXJuICcn OwoJfQoJaWYoaXNzZXQoJF9HRVRbJ3RhZ3MnXSkpIHsKCQlnbG9iYWwgJHRodW1iczsKCQkk dmRoX2ZsaWNrclsnaXNfdGh1bWJuYWlscyddID0gMTsKCQkkdmRoX2ZsaWNrclsnaXNfdGFn cyddID0gMTsKCQkkdGh1bWJzID0gbmV3IFRodW1ibmFpbHMoJHBhcmFtcyk7CgkJcmV0dXJu ICcnOwoJfQoJaWYoaXNzZXQoJF9HRVRbJ3NldCddKSkgewoJCWdsb2JhbCAkdGh1bWJzOwoJ CSR2ZGhfZmxpY2tyWydpc190aHVtYm5haWxzJ10gPSAxOwoJCSR2ZGhfZmxpY2tyWydpc19z ZXQnXSA9IDE7CgkJJHRodW1icyA9IG5ldyBUaHVtYm5haWxzKCRwYXJhbXMpOwoJCXJldHVy biAnJzsKCX0KCWdsb2JhbCAkZ2FsOwoJKChpc3NldCAoJGdhbCkpPT1mYWxzZSk/ICRnYWwg PSBuZXcgR2FsbGVyeSgkcGFyYW1zKSA6ICcnOwoJJHZkaF9mbGlja3JbJ2lzX3ByZXZpZXcn XSA9IDE7CglyZXR1cm4gJyc7Cn0KCmZ1bmN0aW9uIHZkaF9mbGlja3JfaWZfcHJldmlldygk cGFyYW1zLCAkdGhpbmcpIHsKCWdsb2JhbCAkdmRoX2ZsaWNrcjsKCXJldHVybiAoQCR2ZGhf ZmxpY2tyWydpc19wcmV2aWV3J10gPT0gdHJ1ZSkgPyBwYXJzZSgkdGhpbmcpIDogJyc7Cn0K CmZ1bmN0aW9uIHZkaF9mbGlja3JfaWZfdGh1bWJuYWlscygkcGFyYW1zLCAkdGhpbmcpIHsK CWdsb2JhbCAkdmRoX2ZsaWNrcjsKCXJldHVybiAoQCR2ZGhfZmxpY2tyWydpc190aHVtYm5h aWxzJ10gPT0gdHJ1ZSkgPyBwYXJzZSgkdGhpbmcpIDogJyc7Cn0KCmZ1bmN0aW9uIHZkaF9m bGlja3JfaWZfc2V0KCRwYXJhbXMsICR0aGluZykgewoJZ2xvYmFsICR2ZGhfZmxpY2tyOwoJ cmV0dXJuIChAJHZkaF9mbGlja3JbJ2lzX3NldCddID09IHRydWUpID8gcGFyc2UoJHRoaW5n KSA6ICcnOwp9CgpmdW5jdGlvbiB2ZGhfZmxpY2tyX2lmX3RhZ3MoJHBhcmFtcywgJHRoaW5n KSB7CglnbG9iYWwgJHZkaF9mbGlja3I7CglyZXR1cm4gKEAkdmRoX2ZsaWNrclsnaXNfdGFn cyddID09IHRydWUpID8gcGFyc2UoJHRoaW5nKSA6ICcnOwp9CgpmdW5jdGlvbiB2ZGhfZmxp Y2tyX2lmX2ltZygkcGFyYW1zLCAkdGhpbmcpIHsKCWdsb2JhbCAkdmRoX2ZsaWNrcjsKCXJl dHVybiAoQCR2ZGhfZmxpY2tyWydpc19pbWcnXSA9PSB0cnVlKSA/IHBhcnNlKCR0aGluZykg OiAnJzsKfQoKZnVuY3Rpb24gdmRoX2ZsaWNrcl9zaG93X25zaWQoJHBhcmFtcykgewoJJG5z aWRjaGVjayA9IG5ldyBWZGhfZmxpY2tyKCRwYXJhbXMpOwoJcmV0dXJuICRuc2lkY2hlY2st Pl9fdG9TdHJpbmcoKTsKfSI7czozOiJtZDUiO3M6MzI6ImJmOWVkNDdkYzY3N2JkOTRiYTE0 OWVjNzZlZTMyMjgwIjt9