# Name: smd_bio v0.3 # Type: Admin/Client side plugin # Customisable user biographies / profile info # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjc6InNtZF9iaW8iO3M6NjoiYXV0aG9yIjtzOjExOiJTdGVm IERhd3NvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29t LyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjAuMyI7czoxMToiZGVzY3JpcHRpb24iO3M6NDQ6IkN1 c3RvbWlzYWJsZSB1c2VyIGJpb2dyYXBoaWVzIC8gcHJvZmlsZSBpbmZvIjtzOjQ6ImhlbHAi O3M6MTg4MDM6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDE+c21kX2JpbzwvaDE+CgoJPHA+ Q29uZmlndXJlIGFkZGl0aW9uYWwgdXNlciBiaW9ncmFwaGljYWwgaW5mb3JtYXRpb24gdG8g YmUgY29sbGVjdGVkIHdoZW4gYXV0aG9ycyBhcmUgY3JlYXRlZCwgdGhlbiBzaG93IHRoYXQg aW5mbyBhcyBieWxpbmVzIGFnYWluc3QgeW91ciBhcnRpY2xlcy4gQSBiaXQgbGlrZSBjdXN0 b20gZmllbGRzIGZvciB1c2VyIGluZm8uPC9wPgoKCTxoMj5GZWF0dXJlczwvaDI+CgoJPHVs PgoJCTxsaT5EZWZpbmUgb25seSB0aGUgaW5mbyB5b3UgcmVxdWlyZSB0byBiZSBjb2xsZWN0 ZWQgYWJvdXQgeW91ciBhdXRob3JzICYjODIxMjsgdG90YWxseSBjdXN0b21pc2FibGU8L2xp PgoJCTxsaT5JbmZvIGlzIGNvbGxlY3RlZC9lZGl0ZWQgb24gdGhlIEFkbWluLSZndDtVc2Vy cyB0YWIgYmVuZWF0aCB0aGUgZXhpc3RpbmcgdXNlciBpbmZvPC9saT4KCQk8bGk+Q2hvb3Nl IGZyb20gYSB2YXJpZXR5IG9mIHR5cGVzIG9mIGNvbnRlbnQ6IHRleHQsIHJhZGlvIGJ1dHRv bnMsIHNlbGVjdCBsaXN0cywgY2hlY2tib3hlcywgaW1hZ2VzJiM4MjMwOzwvbGk+CgkJPGxp Pk91dHB1dCBhbnkgcGllY2VzIG9mIHRoZSBiaW9ncmFwaGljYWwgaW5mbyBpbiB5b3VyIGFy dGljbGUgZmxvdyB1c2luZyBhIHNpbmdsZSwgZmxleGlibGUgdGFnPC9saT4KCQk8bGk+SW1h Z2UgdGh1bWJuYWlsIHByZXZpZXcvc2VsZWN0aW9uIG9uIHRoZSBBZG1pbi0mZ3Q7VXNlcnMg dGFiPC9saT4KCQk8bGk+T3B0aW9uYWwgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4g dG8gbW9kaWZ5IHRoZSBsYXlvdXQgb2YgdGhlIEFkbWluLSZndDtVc2VycyB0YWI8L2xpPgoJ PC91bD4KCgk8aDI+QXV0aG9yIC8gQ3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDov L3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0ZWYgRGF3c29uPC9hPi4gVGhlIHBsdWdpbiBp cyBhIGxvZ2ljYWwgZXh0ZW5zaW9uIG9mIHB2Y191c2Vyc19pbmZvIGJ5IFBldGVyIFYuIENv b2sgKHRoZSBzbWRfYmlvX2FydGljbGVzIHRhZyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBh cyBwdmNfYXV0aG9yX2FydGljbGVzKS4gVGhhbmtzIGFsc28gdG8gcGllbWFuIGZvciBzZXR0 aW5nIHRoZSB3aGVlbHMgaW4gbW90aW9uIGFuZCBuZXQtY2FydmVyIGZvciBoaXMgaW5pbWl0 YWJsZSBrbmFjayBvZiBtYWtpbmcgdGhpbmdzIGJldHRlci48L3A+CgoJPGgyPkluc3RhbGxh dGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cCBjbGFzcz0icmVxdWlyZWQiPlJlcXVp cmVzIFRleHRwYXR0ZXJuIDQuMi4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZy b20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMTE2 L3NtZF9iaW8iPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSA8YSBocmVmPSJodHRwOi8v c3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LCBwYXN0ZSB0aGUgY29kZSBp bnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVn aW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEg aHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMx NDk2Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3JlIGluZm8gb3IgdG8gcmVwb3J0IG9uIHRo ZSBzdWNjZXNzIG9yIG90aGVyd2lzZSBvZiB0aGUgcGx1Z2luLjwvcD4KCgk8cD5XaGVuIHlv dSBmaXJzdCB2aXNpdCB0aGUgRXh0ZW5zaW9uLSZndDtCaW8gQ29uZmlnIHBhZ2UsIHRoZSBl eHRyYSB0YWJsZXMgd2lsIGJlIGluc3RhbGxlZCBhdXRvbWF0aWNhbGx5LjwvcD4KCgk8cD5U byB1bmluc3RhbGwsIHNpbXBseSBkZWxldGUgZnJvbSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lu cyBwYWdlLiBCdXQgbm90ZSB0aGUgZXh0cmEgdGFibGVzIHdpbGwgcmVtYWluIHVudGlsIHlv dSBkZWxldGUgdGhlbSBtYW51YWxseS4gQSBwbGFubmVkIGZlYXR1cmUgaXMgdG8gYWRkIGJ1 dHRvbnMgdG8gdGhlIGludGVyZmFjZSB0byBhbGxvdyBkZWxldGlvbiBvZiBhbGwgYWRkaXRp b25hbCBiaW8gaW5mb3JtYXRpb24gYW5kL29yIHJlbW92YWwgb2YgdGhlIHVuZGVybHlpbmcg dGFibGVzLjwvcD4KCgk8aDI+Q29uZmlndXJpbmcgYmlvIGl0ZW1zPC9oMj4KCgk8cD5WaXNp dCB0aGUgRXh0ZW5zaW9ucy0mZ3Q7QmlvIGNvbmZpZyB0YWIuIEFkZCBiaW8gaXRlbXMgc3Vj aCBhcyBjZWxsL3dvcmsvZmF4IG51bWJlcnMsIGRlcGFydG1lbnQsIG11Z3Nob3QsIHBvc3Rh bCBhZGRyZXNzLCBqb2IgdGl0bGUsIHdoYXRldmVyIHlvdSB3aXNoLiBKdXN0IGFkZCBvbmUg YXQgYSB0aW1lIGFuZCBoaXQgU2F2ZSBpbiBiZXR3ZWVuLiBUaGUgaXRlbXMgd2lsbCBiZSBs aXN0ZWQgYmVsb3cgdGhlIGZvcm0sIGFuZCBjYW4gYmUgc29ydGVkIGF0IHdpbGwuIEVhY2gg aXRlbSBjb21wcmlzZXM6PC9wPgoKCTx1bD4KCQk8bGk+PHN0cm9uZz5OYW1lPC9zdHJvbmc+ IDogYW4gaW50ZXJuYWwgbmFtZSB3aXRoIHdoaWNoIHlvdSB3aXNoIHRvIHJlZmVyIHRvIHlv dXIgYmlvIGl0ZW0uIEF2b2lkIGNoYXJhY3RlcnMgc3VjaCBhcyBzcGFjZXMgYW5kICYjODIx Njt3ZWlyZCYjODIxNzsgY2hhcmFjdGVycyBoZXJlPC9saT4KCQk8bGk+PHN0cm9uZz5UaXRs ZTwvc3Ryb25nPiA6IGEgaHVtYW4tZnJpZW5kbHkgbmFtZSBmb3IgeW91ciBiaW8gaXRlbS4g VGhpcyBpcyBkaXNwbGF5ZWQgdG8gdGhlIGxlZnQgb2YgdGhlIGlucHV0IGNvbnRyb2wgb24g dGhlIEFkbWluLSZndDtVc2VycyBwYW5lbCwgYW5kIGFzIGEgbGFiZWwgb24geW91ciBhcnRp Y2xlIHBhZ2VzPC9saT4KCQk8bGk+PHN0cm9uZz5UeXBlPC9zdHJvbmc+IDogdGhlIHR5cGUg b2YgZGF0YSB5b3Ugd2lzaCB0byBjb2xsZWN0LiBUaGlzIHdpbGwgYmUgdGhlIHZhcmlldHkg b2YgaW5wdXQgY29udHJvbCB5b3Ugc2VlIG9uIHRoZSBBZG1pbi0mZ3Q7VXNlcnMgdGFiPC9s aT4KCQk8bGk+PHN0cm9uZz5TaXplPC9zdHJvbmc+IDogdGhlIGRpbWVuc2lvbnMgb2YgdGhl IGNob3NlbiBpbnB1dCBjb250cm9sLiBUYWtlcyBvbmUgb3IgdHdvIGNvbW1hLXNlcGFyYXRl ZCB2YWx1ZXMsIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB3aGljaCBkZXBlbmRzIG9uIHRoZSBp dGVtIDxlbT5UeXBlPC9lbT46Cgk8dWw+CgkJPGxpPmZvciB0ZXh0LWJhc2VkIGlucHV0IGZp ZWxkcywgdGhlIGZpcnN0IGlzIHRoZSB3aWR0aCBvZiB0aGUgYm94IChpbiBjaGFyYWN0ZXJz KSBhbmQgdGhlIHNlY29uZCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBh IHVzZXIgY2FuIHR5cGUgKDAgPSBsZWF2ZSBhdCBkZWZhdWx0KTwvbGk+CgkJPGxpPmZvciB0 ZXh0YXJlYXMsIGl0IGlzIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBib3ggaW4gY2hh cmFjdGVycywgcmVzcGVjdGl2ZWx5PC9saT4KCQk8bGk+Zm9yIGltYWdlcywgdGhlIHR3byB2 YWx1ZXMgYXJlIHRoZSB4IGFuZCB5IGRpbWVuc2lvbnMgb2YgdGhlIGltYWdlL3RodW1ibmFp bCBvbiB0aGUgQWRtaW4tJmd0O1VzZXJzIHRhYi4gSWYgb25seSBvbmUgdmFsdWUgaXMgZ2l2 ZW4sIHRoZSBpbWFnZSB3aWxsIGJlIHNxdWFyZS4gSWYgZWl0aGVyIHZhbHVlIGlzIG9taXR0 ZWQsIHRoZSBpbWFnZSBvciB0aHVtYm5haWwgZGltZW5zaW9ucyAoYXMgc3RvcmVkIGluIHRo ZSBkYXRhYmFzZSkgYXJlIHVzZWQgaW5zdGVhZDwvbGk+CgkJPGxpPmZvciBvdGhlciB0eXBl cywgdGhlIFNpemUgaXMgY3VycmVudGx5IHVudXNlZDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxp PjxzdHJvbmc+VmFsdWU8L3N0cm9uZz4gOiBkZXBlbmRzIG9uIHRoZSBpdGVtIDxlbT5UeXBl PC9lbT46Cgk8dWw+CgkJPGxpPmZvciB0ZXh0LWJhc2VkIGl0ZW1zLCB0aGlzIGlzIHRoZSBk ZWZhdWx0IHZhbHVlIHRoYXQgd2lsbCBiZSBpbiB0aGUgdGV4dCBib3guIFlvdSBjYW4gdXNl IHRoaXMgdG8gaW5pdGlhbGlzZSBhbiBlbnRyeSwgb3Igb2ZmZXIgaW5zdHJ1Y3Rpb25zIGxp a2UgJiM4MjIwO1R5cGUgeW91ciBqb2IgZGVzY3JpcHRpb24gaGVyZSYjODIyMTs8L2xpPgoJ CTxsaT5mb3IgbGlzdCwgcmFkaW8gYW5kIGNoZWNrYm94IGl0ZW1zLCB0aGlzIGlzIHVzZWQg dG8gY29uZmlndXJlIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4gRWl0aGVyIHB1dCBvbmUgaXRl bSBwZXIgbGluZSBvciB1c2UgYSBjb21tYSB0byBzZXBhcmF0ZSBlYWNoIGl0ZW0uIElmIHlv dSBqdXN0IGxpc3QgaXRlbXMsIHRoZXkgd2lsbCBiZSB1c2VkIGFzIGxhYmVscyBleGFjdGx5 IGFzIHlvdSBkZWZpbmUgdGhlbS4gV2hlbiByZWZlcnJpbmcgdG8gdGhlbSBpbiA8Y29kZT4m bHQ7dHhwOnNtZF9iaW9faW5mbyAvJmd0OzwvY29kZT4gdGhlaXIgPGVtPm5hbWVzPC9lbT4g d2lsbCBiZSBhbGwgbG93ZXIgY2FzZSwgaGF2ZSAmIzgyMTY7bm9uLXdlYi1zYWZlJiM4MjE3 OyBjaGFyYWN0ZXJzIHJlbW92ZWQsIGFuZCB3aWxsIGhhdmUgc3BhY2VzIGNvbnZlcnRlZCB0 byB1bmRlcnNjb3Jlcy4gSWYgeW91IHdpc2ggdG8gZGVmaW5lIHlvdXIgb3duIG5hbWVzIGFu ZCBsYWJlbHMsIHVzZSB0aGUgc3ludGF4OiA8Y29kZT5vcHRpb25fbmFtZTEgPSZndDsgb3B0 aW9uX2xhYmVsMSwgb3B0aW9uX25hbWUyID0mZ3Q7IG9wdGlvbl9sYWJlbDIsIC4uLjwvY29k ZT4uIEZvciBleGFtcGxlIGEgRGVwYXJ0bWVudHMgZHJvcGRvd24gbGlzdCBtaWdodCBiZSBk ZWZpbmVkIGFzIDxjb2RlPnNhbGVzID0mZ3Q7IFNhbGVzLCBta3RnID0mZ3Q7IE1hcmtldGlu ZywgZW5nID0mZ3Q7IEVuZ2luZWVyaW5nLCBxdWFsID0mZ3Q7IFF1YWxpdHkgYXNzdXJhbmNl LCBpdCA9Jmd0OyBUZWNoIHN1cHBvcnQ8L2NvZGU+IG9yIDxjb2RlPlNhbGVzLCBNYXJrZXRp bmcsIEVuZ2luZWVyaW5nLCBRdWFsaXR5IGFzc3VyYW5jZSwgVGVjaCBzdXBwb3J0PC9jb2Rl PiAmIzgyMTI7IGluIHdoaWNoIGNhc2UgeW91IHdvdWxkIHJlZmVyIHRvIHlvdXIgbmV3IGl0 ZW1zIHdpdGggdGhlc2UgbmFtZXMsIHJlc3BlY3RpdmVseTogPGNvZGU+c2FsZXMsIG1hcmtl dGluZywgZW5naW5lZXJpbmcsIHF1YWxpdHlfYXNzdXJhbmNlLCB0ZWNoX3N1cHBvcnQ8L2Nv ZGU+LiBJbiBzZWxlY3QgbGlzdHMsIHlvdSBtYXkgcHV0IGFuIGVtcHR5IGl0ZW0gYXQgdGhl IHRvcCBpZiB5b3Ugd2lzaC4gSW4gc2VsZWN0IGxpc3RzIGFuZCByYWRpbyBzZXRzIHlvdSBt YXkgYWxzbyBtYXJrIG9uZSBsYWJlbCB3aXRoIDxjb2RlPlsqXTwvY29kZT4gdG8gaW5kaWNh dGUgaXQgaXMgdGhlIGRlZmF1bHQ8L2xpPgoJCTxsaT5mb3IgaW1hZ2VzLCBpdCBjYW4gYmUg dXNlZCB0byBzcGVjaWZ5IHRoZSBwYXJlbnQgY2F0ZWdvcnkgbmFtZSB1bmRlciB3aGljaCB0 aGUgZGVzaXJlZCBpbWFnZXMgYXJlIHN0b3JlZC4gSWYgb21pdHRlZCwgYWxsIGltYWdlcyBh cmUgYXZhaWxhYmxlIGluIHRoZSBpbWFnZSBzZWxlY3QgbGlzdDwvbGk+Cgk8L3VsPjwvbGk+ CgkJPGxpPjxzdHJvbmc+UG9zaXRpb248L3N0cm9uZz4gOiB0aGUgb3JkZXIgaW4gd2hpY2gg dGhlIGl0ZW1zIGFwcGVhciBvbiB0aGUgQWRtaW4tJmd0O1VzZXJzIHRhYi4gVGhlIGxvd2Vy IHRoZSBudW1iZXIgdGhlIGhpZ2hlciB1cCB0aGUgc2NyZWVuIGl0IHdpbGwgYmUuIFRoZSBu dW1iZXJzIDxlbT5kbyBub3Q8L2VtPiBoYXZlIHRvIGJlIHNlcXVlbnRpYWwgJiM4MjEyOyBp dCBpcyBhZHZpc2VkIHlvdSBzZXQgdGhlbSB3aXRoIGEgZ2FwIGJldHdlZW4gdGhlbSAoZS5n LiAxMCBvciAyMCkgc28geW91IGNhbiBhbHRlciB0aGUgb3JkZXIgZmFpcmx5IGVhc2lseTwv bGk+Cgk8L3VsPgoKCTxwPk5vdGUgdGhhdCB0aGUgRGF0ZS90aW1lIFR5cGUgaXMgZnVuY3Rp b25hbGx5IGlkZW50aWNhbCB0byBhIFRleHQgYm94LiBUaGlzIG1heSBjaGFuZ2UgaW4gZnV0 dXJlLjwvcD4KCgk8aDI+RW50ZXJpbmcgdXNlciBkYXRhPC9oMj4KCgk8cD5Zb3VyIGNvbmZp Z3VyZWQgaXRlbXMgd2lsbCBhcHBlYXIgb24gdGhlIEFkbWluLSZndDtVc2VycyB0YWIgYmVu ZWF0aCB0aGUgdXN1YWwgY3JvcCBvZiBkYXRhIGlucHV0IGNvbnRyb2xzLiBTaW1wbHkgZW50 ZXIgZGF0YSBpbiB0aGVtIGFuZCBpdCB3aWxsIGJlIHNhdmVkIGFsb25nIHdpdGggdGhlIGV4 aXN0aW5nIHVzZXIgZGF0YS4gSGl0IDxlbT5FZGl0PC9lbT4gYW5kIGFueSBjb25maWd1cmVk IGluZm8gd2lsbCBiZSByZXRyaWV2ZWQgZm9yIGVkaXRpbmcuPC9wPgoKCTxwPldoZW4gY2hv b3NpbmcgYW4gaW1hZ2UsIHlvdSBjYW4gZWl0aGVyIHR5cGUgaXRzIElEIGluIHRoZSBib3gg b3IgdXNlIHRoZSBkcm9wZG93biBzZWxlY3QgbGlzdCB0byBjaG9vc2UgYW4gaW1hZ2UuIFRo ZSBjaG9zZW4gaW1hZ2Ugd2lsbCBhcHBlYXIgYmVsb3cgdGhlIGlucHV0IGNvbnRyb2xzLjwv cD4KCgk8cD5JZiB5b3Ugd2lzaCB0byBhbHRlciB0aGUgbGF5b3V0IG9mIHRoZSBpbnB1dCBj b250cm9scywgeW91IG1heSBjcmVhdGUgYSBzdGFuZGFyZCBzdHlsZXNoZWV0IGluIFByZXNl bnRhdGlvbi0mZ3Q7U3R5bGUgYW5kIG5hbWUgaXQgPGNvZGU+c21kX2JpbzwvY29kZT4uIEl0 IHdpbGwgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkuPC9wPgoKCTxwPlRvIHZpZXcgdGhlIGV4 dGVuZGVkIGJpbyBpbmZvcm1hdGlvbiBmb3IgYSB1c2VyLCBob3ZlciBvdmVyIHRoZSA8ZW0+ RWRpdDwvZW0+IGxpbmsgb2YgYW4gaXRlbSBpbiB0aGUgbGlzdDsgYSB0b29sdGlwIHdpbGwg YXBwZWFyIHNob3dpbmcgc29tZSBvZiB0aGUgZXh0ZW5kZWQgYmlvLjwvcD4KCgk8aDI+RGlz cGxheWluZyB1c2VyIGJpbyBpbmZvPC9oMj4KCgk8aDM+PGNvZGU+Jmx0O3R4cDpzbWRfYmlv X2luZm8mZ3Q7PC9jb2RlPjwvaDM+CgoJPHA+VXNlIHRoaXMgdGFnIHRvIGRpc3BsYXkgcGll Y2VzIG9mIGluZm8gZnJvbSB0aGUgYmlvZ3JhcGh5LiBPbmUgb3IgbW9yZSBvZiB0aGVzZSB0 YWdzIGNhbiBiZSBlbXBsb3llZCBkZXBlbmRpbmcgb24gaG93IHlvdSBwcmVmZXIgdG8gd29y ay4gSXQgbWF5IGFsc28gYmUgdXNlZCBhcyBhIGNvbnRhaW5lciAob3IgdmlhIHRoZSA8Y29k ZT5mb3JtPC9jb2RlPiBhdHRyaWJ1dGUpIHRvIGFsbG93IHlvdSB0byBlbWJlZCBvdGhlciBU ZXhwYXR0ZXJuIHRhZ3MgYW5kL29yIHNwZWNpYWwgPGEgaHJlZj0iI3JlcHRhZ3MiPnJlcGxh Y2VtZW50IHRhZ3M8L2E+IHRvIGZvcm1hdCB0aGUgb3V0cHV0LjwvcD4KCgk8cD5Vc2UgdGhl IGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIHR3ZWFrIHRoZSBvdXRwdXQ6PC9wPgoKCTx1bD4K CQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPmF1dGhvcjwvc3Bhbj4gOiBsaXN0IG9mIGF1dGhv ciBsb2dpbiBuYW1lcyB5b3Ugd2lzaCB0byBkaXNwbGF5IGluZm8gZnJvbS4gSWYgb21pdHRl ZCwgdGhlIGN1cnJlbnQgKGluZGl2aWR1YWwgYXJ0aWNsZSkgYXV0aG9yIHdpbGwgYmUgdXNl ZC4gWW91IG1heSBzcGVjaWZ5IGFueSBpdGVtIGFzIDxjb2RlPlNNRF9QUklWUzo8L2NvZGU+ IGFuZCB0aGVuIGNvbG9uLXNlcGFyYXRlIHByaXYgbnVtYmVycy4gQW55IHVzZXJzIHdpdGgg dGhvc2UgbWF0Y2hpbmcgbGV2ZWwocykgd2lsbCBiZSBkaXNwbGF5ZWQ8L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+aXRlbXM8L3NwYW4+IDogbGlzdCBvZiBiaW8gaXRlbSA8ZW0+ bmFtZXM8L2VtPiB5b3Ugd2lzaCB0byBkaXNwbGF5LCBpbiB0aGUgb3JkZXIgeW91IHdpc2gg dG8gZGlzcGxheSB0aGVtLiBEZWZhdWx0cyB0byBhbGwgaXRlbXMuIE5vdGUgeW91IGNhbiBh bHNvIHVzZSBiaW8gaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhbmRhcmQgPHNwYW4gY2xhc3M9 ImNhcHMiPlRYUDwvc3Bhbj4gdXNlciBpbmZvLCBpLmUuIHlvdSBjYW4gdXNlIGFueSBvZiB0 aGUgZm9sbG93aW5nLCAoY2FzZSBzZW5zaXRpdmUpIDoKCTx1bD4KCQk8bGk+PGNvZGU+dXNl cl9pZDwvY29kZT48L2xpPgoJCTxsaT48Y29kZT5uYW1lPC9jb2RlPiAobG9naW4gbmFtZSk8 L2xpPgoJCTxsaT48Y29kZT5SZWFsTmFtZTwvY29kZT48L2xpPgoJCTxsaT48Y29kZT5lbWFp bDwvY29kZT48L2xpPgoJCTxsaT48Y29kZT5wcml2czwvY29kZT48L2xpPgoJCTxsaT48Y29k ZT5sYXN0X2FjY2VzczwvY29kZT48L2xpPgoJPC91bD48L2xpPgoJCTxsaT48c3BhbiBjbGFz cz0iYXRubSI+ZXhjbHVkZTwvc3Bhbj4gOiBsaXN0IG9mIGJpbyBpdGVtIDxlbT5uYW1lczwv ZW0+IHlvdSBkbyA8c3Ryb25nPm5vdDwvc3Ryb25nPiB3aXNoIHRvIGRpc3BsYXkuIFRoaXMg b3ZlcnJpZGVzIDxjb2RlPml0ZW1zPC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dG5tIj5mb3JtPC9zcGFuPiA6IHRoZSBuYW1lIG9mIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlRY UDwvc3Bhbj4gRm9ybSB3aXRoIHdoaWNoIHRvIHByb2Nlc3MgZWFjaCBpdGVtLiBJZiBub3Qg c3BlY2lmaWVkLCB0aGUgdGFnJiM4MjE3O3MgY29udGFpbmVyIHdpbGwgYmUgdXNlZCBpbnN0 ZWFkLiBJZiB0aGUgY29udGFpbmVyIGlzIGVtcHR5LCBkZWZhdWx0IG91dHB1dCBpcyB1c2Vk PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPml0ZW13cmFwdGFnPC9zcGFuPiA6IChY KUhUTUwgdGFnIHRvIHdyYXAgYXJvdW5kIGVhY2ggaXRlbTwvbGk+CgkJPGxpPjxzcGFuIGNs YXNzPSJhdG5tIj5pdGVtY2xhc3M8L3NwYW4+IDogZml4ZWQgPHNwYW4gY2xhc3M9ImNhcHMi PkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhZGQgdG8gZWFjaCBpdGVtLiBUaGUgZGVmYXVs dCBpcyB0byBhdXRvbWF0aWNhbGx5IGFzc2lnbiA8Y29kZT5zbWRfYmlvX25hbWVfb2ZfaXRl bTwvY29kZT4gKGUuZy4gc21kX2Jpb19jZWxsLCBzbWRfYmlvX2RlcHQsIGV0Yyk8L2xpPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+IDogKFgpSFRNTCB0YWcgdG8g cHV0IGJldHdlZW4gZWFjaCBpdGVtPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPndy YXB0YWc8L3NwYW4+IDogKFgpSFRNTCB0YWcgdG8gd3JhcCBhcm91bmQgZWFjaCBhdXRob3Im IzgyMTc7cyByZWNvcmQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+Y2xhc3M8L3Nw YW4+IDogPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgdG8gYXBwbHkgdG8g dGhlIHdyYXB0YWc8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWx0YWc8L3Nw YW4+IDogKFgpSFRNTCB0YWcgdG8gd3JhcCBhcm91bmQgdGhlIGl0ZW0mIzgyMTc7cyBsYWJl bCAoaWYgdXNlZCk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+bGFiZWxjbGFzczwv c3Bhbj4gOiA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFzcyB0byBhcHBseSB0 byB0aGUgbGFiZWwuIFRoZSBkZWZhdWx0IGlzIHRvIGF1dG9tYXRpY2FsbHkgYXNzaWduIDxj b2RlPnNtZF9iaW9fbmFtZV9vZl9pdGVtPC9jb2RlPiAoZS5nLiBzbWRfYmlvX3Bob25lLCBz bWRfYmlvX2hvbWVfYWRkcmVzcywgZXRjKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5sYWJlbDwvc3Bhbj4gOiB3aGV0aGVyIHRvIGRpc3BsYXkgYSBsYWJlbCBvciBub3QgZm9y IGVhY2ggaXRlbS4gQ2hvb3NlIGZyb206Cgk8dWw+CgkJPGxpPjxzdHJvbmc+MTwvc3Ryb25n PiA6IChkZWZhdWx0KSBEaXNwbGF5IHRoZSBUaXRsZSBvZiB0aGUgaXRlbTwvbGk+CgkJPGxp PjxzdHJvbmc+MDwvc3Ryb25nPiA6IERpc3BsYXkgdGhlIE5hbWUgb2YgdGhlIGl0ZW08L2xp PgoJCTxsaT48c3Ryb25nPnNvbWUgbGFiZWw8L3N0cm9uZz4gOiBEaXNwbGF5IHRoZSBnaXZl biB0ZXh0IGFzIGEgbGFiZWw8L2xpPgoJCTxsaT4mIzgyMjA7JiM4MjIxOyAoaS5lLiBlbXB0 eSkgOiBEbyBub3QgZGlzcGxheSBhbnkgbGFiZWw8L2xpPgoJPC91bD48L2xpPgoJPC91bD4K Cgk8aDQgaWQ9InJlcHRhZ3MiPlJlcGxhY2VtZW50IHRhZ3M8L2g0PgoKCTxwPkluc2lkZSB0 aGUgc21kX2Jpb19pbmZvIDxjb2RlPmZvcm08L2NvZGU+IG9yIGNvbnRhaW5lciB5b3UgbWF5 IHV0aWxpc2Ugc3BlY2lhbCByZXBsYWNlbWVudCB0YWdzIHRoYXQgYWxsb3cgeW91IHRvIGRp c3BsYXkgYW55IHBpZWNlcyBvZiBjb250ZW50IGZyb20gdGhlIGN1cnJlbnQgaXRlbS4gVGhl IGNvcmUgcmVwbGFjZW1lbnQgdGFncyBhcmU6PC9wPgoKCTx1bD4KCQk8bGk+PGNvZGU+e3Nt ZF9iaW9faW5mb19pdGVtfTwvY29kZT4gOiB0aGUgZ2l2ZW4gdmFsdWUgb2YgdGhlIGN1cnJl bnQgaXRlbTwvbGk+CgkJPGxpPjxjb2RlPntzbWRfYmlvX2luZm9fbmFtZX08L2NvZGU+IDog dGhlIHNhbml0aXplZCBuYW1lIG9mIHRoZSBjb2x1bW4gY29ycmVzcG9uZGluZyB0byB0aGlz IGl0ZW08L2xpPgoJCTxsaT48Y29kZT57c21kX2Jpb19pbmZvX3RpdGxlfTwvY29kZT4gOiB0 aGUgaHVtYW4tZnJpZW5kbHkgdGl0bGUgeW91IGFzc2lnbmVkIHRoaXMgaXRlbTwvbGk+CgkJ PGxpPjxjb2RlPntzbWRfYmlvX2luZm9faXRlbWNsYXNzfTwvY29kZT4gOiB0aGUgbmFtZSBv ZiB0aGUgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaXRlbTwvbGk+CgkJPGxpPjxjb2Rl PntzbWRfYmlvX2luZm9fbGFiZWxjbGFzc308L2NvZGU+IDogdGhlIG5hbWUgb2YgdGhlIGNs YXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGl0ZW0mIzgyMTc7cyBsYWJlbDwvbGk+CgkJPGxp Pjxjb2RlPntzbWRfYmlvXypuYW1lKn08L2NvZGU+IDogdGhlIHZhbHVlIG9mIHRoZSBuYW1l ZCBpdGVtIChlLmcuIDxjb2RlPnNtZF9iaW9fY2VsbDwvY29kZT4sIDxjb2RlPnNtZF9iaW9f ZGVwYXJ0bWVudDwvY29kZT4sIGV0Yyk8L2xpPgoJPC91bD4KCgk8cD5JZiB5b3UgaGF2ZSBl bGVjdGVkIHRvIGV4dHJhY3QgYSBsaXN0IGl0ZW0gc3VjaCBhcyByYWRpbywgbGlzdCBvciBj aGVja2JveCB5b3Ugd2lsbCBoYXZlIHNvbWUgbW9yZSByZXBsYWNlbWVudCB0YWdzIGluIHRo ZSBmb2xsb3dpbmcgZm9ybWF0OjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPntzbWRfYmlvXypu YW1lKl9pdGVtX059PC9jb2RlPiA6IHRoZSB2YWx1ZSBvZiBlYWNoIG5hbWVkIGl0ZW0gaW4g dHVybiwgd2hlcmUgTiBzdGFydHMgYXQgMSBhbmQgaW5jcmVtZW50czwvbGk+CgkJPGxpPjxj b2RlPntzbWRfYmlvXypuYW1lKl9sYWJlbF9OfTwvY29kZT4gOiB0aGUgdmFsdWUgb2YgZWFj aCBuYW1lZCBpdGVtJiM4MjE3O3MgbGFiZWwgaW4gdHVybi4gQWdhaW4sIE4gc3RhcnRzIGF0 IDEgYW5kIGNvdW50cyB1cCBmb3IgZXZlcnkgaXRlbSBpbiB5b3VyIGxpc3Q8L2xpPgoJCTxs aT48Y29kZT57c21kX2Jpb18qbmFtZSpfY2hvc2VuX059PC9jb2RlPiA6IHRoZSB2YWx1ZSBv ZiBlYWNoIHNlbGVjdGVkIGl0ZW0gaW4gdHVybiwgd2hlcmUgTiBzdGFydHMgYXQgMSBhbmQg aW5jcmVtZW50cy4gRm9yIHNlbGVjdCBhbmQgcmFkaW8gbGlzdHMgdGhlcmUgd2lsbCBiZSBv bmx5IG9uZTsgZm9yIGNoZWNrYm94IGdyb3VwcyB0aGVyZSBtYXkgYmUgbW9yZTwvbGk+CgkJ PGxpPjxjb2RlPntzbWRfYmlvXypuYW1lKl9jaG9zZW5fbGFiZWxfTn08L2NvZGU+IDogdGhl IHZhbHVlIG9mIGVhY2ggc2VsZWN0ZWQgaXRlbSYjODIxNztzIGxhYmVsIGluIHR1cm4sIHdo ZXJlIE4gc3RhcnRzIGF0IDEgYW5kIGluY3JlbWVudHM8L2xpPgoJCTxsaT48Y29kZT57c21k X2Jpb18qbmFtZSpfY291bnR9PC9jb2RlPiA6IHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVu dHMgaW4gdGhlIG5hbWVkIGxpc3Q8L2xpPgoJCTxsaT48Y29kZT57c21kX2Jpb18qbmFtZSpf Y2hvc2VuX2NvdW50fTwvY29kZT4gOiB0aGUgdG90YWwgbnVtYmVyIG9mIHNlbGVjdGVkIGVs ZW1lbnRzIGluIHRoZSBuYW1lZCBsaXN0PC9saT4KCTwvdWw+CgoJPGg0PlJlcGxhY2VtZW50 IHRhZyBub3RlczwvaDQ+CgoJPHA+SWYgeW91IGV4dHJhY3QgbW9yZSB0aGFuIG9uZSBpdGVt IGF0IG9uY2UgaW4geW91ciA8Y29kZT5pdGVtczwvY29kZT4gYXR0cmlidXRlLCB0aGUgaW5k aXZpZHVhbCBuYW1lZCByZXBsYWNlbWVudCB2YXJpYWJsZSB3b24mIzgyMTc7dCBiZSBhdmFp bGFibGUgdW50aWwgdGhlIHBsdWdpbiBoYXMgZGlzY292ZXJlZCB0aGVtLiBGb3IgZXhhbXBs ZTo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhw OnNtZF9iaW9faW5mbyBpdGVtcz0mcXVvdDtjZWxsLCBtdWcsIGRlcHQmcXVvdDsmZ3Q7Cntz bWRfYmlvX2luZm9fdGl0bGV9OiB7c21kX2Jpb19jZWxsfSZsdDticiAvJmd0Owp7c21kX2Jp b19pbmZvX3RpdGxlfToge3NtZF9iaW9fbXVnfSZsdDticiAvJmd0Owp7c21kX2Jpb19pbmZv X3RpdGxlfToge3NtZF9iaW9fZGVwdH0mbHQ7YnIgLyZndDsKJmx0Oy90eHA6c21kX2Jpb19p bmZvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+d291bGQgb3V0cHV0OjwvcD4KCjxwcmUgY2xh c3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPk1vYmlsZSBudW1iZXI6IDU1NS1TUVVJ RApNb2JpbGUgbnVtYmVyOiB7c21kX2Jpb19tdWd9Ck1vYmlsZSBudW1iZXI6IHtzbWRfYmlv X2RlcHR9Ck11Z3Nob3Q6IDU1NS1TUVVJRApNdWdzaG90OiAyCk11Z3Nob3Q6IHtzbWRfYmlv X2RlcHR9CkRlcHQ6IDU1NS1TUVVJRApEZXB0OiAyCkRlcHQ6IGVuZwo8L2NvZGU+PC9wcmU+ CgoJPHA+Tm90IHF1aXRlIHdoYXQgeW91IHdhbnRlZCEgRm9yIHRoaXMgcmVhc29uIGl0IGlz IGJlc3QgdG8gdXNlIHRoZSBpbmRpdmlkdWFsIG5hbWVkIGl0ZW1zIDxzdHJvbmc+b25seTwv c3Ryb25nPiB3aGVuIHlvdSBhcmUgdXNpbmcgYSBzaW5nbGUgPGNvZGU+aXRlbTwvY29kZT4u IFNlZSA8YSBocmVmPSIjZWc0Ij5FeGFtcGxlIDQ8L2E+IGZvciB3YXlzIHJvdW5kIHRoaXM6 PC9wPgoKCTxwPklmIHlvdSB3aXNoIHRvIHNlZSBhbiBlbnRpcmUgbGlzdCBvZiBhdmFpbGFi bGUgcmVwbGFjZW1lbnQgdGFncyBhcyB0aGUgcGx1Z2luIGJ1aWxkcyB0aGVtIHVwLCBhZGQg PGNvZGU+ZGVidWc9JnF1b3Q7MSZxdW90OzwvY29kZT4gdG8geW91ciBzbWRfYmlvX2luZm8g dGFnLjwvcD4KCgk8aDM+PGNvZGU+Jmx0O3R4cDpzbWRfYmlvX2FydGljbGVzJmd0OzwvY29k ZT48L2gzPgoKCTxwPkEgc2ltcGxlIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIDxjb2RlPiZs dDt0eHA6YXJ0aWNsZV9jdXN0b20gLyZndDs8L2NvZGU+IHRoYXQgc2V0cyB0aGUgPGNvZGU+ YXV0aG9yPC9jb2RlPiBhdHRyaWJ1dGUgdG8gdGhlIHBlcnNvbiB3aG8gd3JvdGUgdGhlIGN1 cnJlbnQgYXJ0aWNsZS4gSWYgeW91IHNwZWNpZnkgYW4gYXV0aG9yLCB0aGF0IHBlcnNvbiB3 aWxsIGJlIHVzZWQgaW5zdGVhZC4gSW4gYWxsIG90aGVyIHJlZ2FyZHMsIHRoZSB0YWcgZnVu Y3Rpb25zIGlkZW50aWNhbGx5IHRvIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5uZXQv d2lraS9pbmRleC5waHA/dGl0bGU9YXJ0aWNsZV9jdXN0b20iPmFydGljbGVfY3VzdG9tPC9h PiBhbmQgY2FuIGJlIHVzZWQgYXMgYSBjb250YWluZXIgaWYgeW91IHdpc2guPC9wPgoKCTxw IGNsYXNzPSJyZXF1aXJlZCI+PHNwYW4gY2xhc3M9ImNhcHMiPklNUE9SVEFOVDwvc3Bhbj46 IHRha2UgY2FyZSB3aGVuIHVzaW5nIHRoaXMgdGFnIGluc2lkZSB5b3VyIGRlZmF1bHQgZm9y bS4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IHlvdXIgb3duIGNvbnRhaW5lciBvciBhIGRlZGlj YXRlZCA8Y29kZT5mb3JtPC9jb2RlPiwgeW91IHdpbGwgcmVjZWl2ZSBhIDxlbT5jaXJjdWxh ciByZWZlcmVuY2UgZXJyb3I8L2VtPiBmcm9tIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IGFzIGl0IHRyaWVzIHRvIGNhbGwgdGhlIGRlZmF1bHQgZm9ybSwgd2hpY2ggY2FsbHMg dGhlIGRlZmF1bHQgZm9ybSwgd2hpY2ggY2FsbHMgdGhlIGRlZmF1bHQgZm9ybSYjODIzMDs8 L3A+CgoJPGgyPkV4YW1wbGVzPC9oMj4KCgk8aDMgaWQ9ImVnMSI+RXhhbXBsZSAxOiBMaXN0 IGJpbyBmaWVsZHM8L2gzPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9j ayI+Jmx0O3R4cDpzbWRfYmlvX2luZm8KICAgICBpdGVtcz0mcXVvdDtqb2J0aXRsZSwgZXh0 ZW5zaW9uLCBjZWxsLCBkZXBhcnRtZW50JnF1b3Q7CiAgICAgbGFiZWx0YWc9JnF1b3Q7ZHQm cXVvdDsgd3JhcHRhZz0mcXVvdDtkbCZxdW90OwogICAgIGl0ZW13cmFwdGFnPSZxdW90O2Rk JnF1b3Q7IGNsYXNzPSZxdW90O3JlY29yZCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJ PHA+U2hvd3MgdGhlIGpvYiB0aXRsZSwgd29yayYjODIxNztzIGV4dGVuc2lvbiBudW1iZXIs IGNlbGwgcGhvbmUgbnVtYmVyIGFuZCBkZXBhcnRtZW50IG9mIHRoZSBjdXJyZW50IGF1dGhv ciwgYXMgYSBkZWZpbml0aW9uIGxpc3QuPC9wPgoKCTxoMyBpZD0iZWcyIj5FeGFtcGxlIDI6 IExpc3QgdXNlcnMgYnkgcHJpdiBsZXZlbDwvaDM+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNv ZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9iaW9faW5mbwogICAgIGF1dGhvcj0mcXVv dDttcl9wdWIsIFNNRF9QUklWUzo0OjMmcXVvdDsKICAgICBpdGVtcz0mcXVvdDtuYW1lLCBS ZWFsTmFtZSwgZGVwYXJ0bWVudCZxdW90OwogICAgIGxhYmVsdGFnPSZxdW90O2R0JnF1b3Q7 IHdyYXB0YWc9JnF1b3Q7ZGwmcXVvdDsKICAgICBpdGVtd3JhcHRhZz0mcXVvdDtkZCZxdW90 OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+U2hvd3MgdGhlIG5hbWUsIHJlYWwgbmFtZSBh bmQgZGVwYXJ0bWVudCBvZiBhbGwgPGVtPkNvcHkgRWRpdG9yczwvZW0+IGFuZCA8ZW0+U3Rh ZmYgV3JpdGVyczwvZW0+IGFuZCB0aGUgdXNlciAmIzgyMTY7bXJfcHViJiM4MjE3Oy48L3A+ CgoJPGgzIGlkPSJlZzMiPkV4YW1wbGUgMzogVXNpbmcgc21kX2Jpb19hcnRpY2xlczwvaDM+ Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9i aW9faW5mbyBpdGVtcz0mcXVvdDtwaG90byZxdW90OyBsYWJlbD0mcXVvdDsmcXVvdDsmZ3Q7 CiAgICZsdDt0eHA6aW1hZ2UgaWQ9JnF1b3Q7e3NtZF9iaW9fcGhvdG99JnF1b3Q7IC8mZ3Q7 CiZsdDsvdHhwOnNtZF9iaW9faW5mbyZndDsgUmVjZW50IGFydGljbGVzIGJ5CiAgICZsdDth IGhyZWY9JnF1b3Q7L2Rlc2tzLyZsdDt0eHA6c21kX2Jpb19pbmZvCiAgICAgICAgaXRlbXM9 JiMzOTtkZXBhcnRtZW50JiMzOTsgbGFiZWw9JnF1b3Q7JnF1b3Q7IC8mZ3Q7JnF1b3Q7Jmd0 OwogICAgICAgICZsdDt0eHA6c21kX2Jpb19pbmZvIGl0ZW1zPSZxdW90O1JlYWxOYW1lJnF1 b3Q7CiAgICAgICAgICAgbGFiZWw9JnF1b3Q7JnF1b3Q7IC8mZ3Q7CiAgICAgJmx0Oy9hJmd0 OzoKJmx0O3R4cDpzbWRfYmlvX2FydGljbGVzIGxpbWl0PSZxdW90OzYmcXVvdDsKICAgICB3 cmFwdGFnPSZxdW90O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7Jmd0OwogICAmbHQ7 dHhwOnBlcm1saW5rJmd0OyZsdDt0eHA6dGl0bGUgLyZndDsmbHQ7L3R4cDpwZXJtbGluayZn dDsKJmx0Oy90eHA6c21kX2Jpb19hcnRpY2xlcyZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPkRp c3BsYXlzIHRoZSBhdXRob3IgcGhvdG8sIHRoZSBhdXRob3ImIzgyMTc7cyBSZWFsTmFtZSBs aW5rZWQgdG8gdGhlIHNlY3Rpb24gdGhhdCBleHBsYWlucyBhYm91dCB0aGUgZGVwYXJ0bWVu dCB0byB3aGljaCBzaGUgYmVsb25ncywgdGhlbiBsaXN0cyB0aGUgNiBtb3N0IHJlY2VudCBh cnRpY2xlcyBieSBoZXIuIE5vdGUgdGhlIHVzZSBvZiA8Y29kZT5sYWJlbD0mcXVvdDsmcXVv dDs8L2NvZGU+IHRvIHN1cHByZXNzIHRoZSBhdXRvbWF0aWMgbGFiZWxsaW5nIG9mIGl0ZW1z IGFuZCBvdXIgdXNlIG9mIGEgcmVwbGFjZW1lbnQgdGFnIHRvIGZlZWQgPGNvZGU+Jmx0O3R4 cDppbWFnZSAvJmd0OzwvY29kZT4gd2l0aCB0aGUgSUQgb2YgdGhlIHNlbGVjdGVkIHBob3Rv LjwvcD4KCgk8aDMgaWQ9ImVnNCI+RXhhbXBsZSA0OiBOZXN0aW5nIHRhZ3M8L2gzPgoKPHBy ZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0O3R4cDpzbWRfYmlvX2lu Zm8gYXV0aG9yPSZxdW90O1NNRF9QUklWUzo1JnF1b3Q7IGl0ZW1zPSZxdW90O25hbWUmcXVv dDsmZ3Q7CiAgICZsdDshLS0gRm9yIGVhY2ggYXV0aG9yJiMzOTtzIG5hbWUgLS0mZ3Q7CiAg ICZsdDthIGNsYXNzPSZxdW90O2ltYWdlJnF1b3Q7CiAgICAgaHJlZj0mcXVvdDsvYmxvZy8m bHQ7dHhwOnNtZF9iaW9faW5mbyBhdXRob3I9JnF1b3Q7e3NtZF9iaW9faW5mb19pdGVtfSZx dW90OwogICAgICAgaXRlbXM9JnF1b3Q7bmFtZSZxdW90OyBsYWJlbD0mcXVvdDsmcXVvdDsg LyZndDsmcXVvdDsKICAgICB0aXRsZT0mcXVvdDticm93c2Ugb3RoZXIgcG9zdHMgYnkgdGhp cyBhdXRob3ImcXVvdDsmZ3Q7CiAgICAgICZsdDtpbWcgY2xhc3M9JnF1b3Q7dGh1bWImcXVv dDsKICAgICAgICBzcmM9JnF1b3Q7L2ltYWdlcy8mbHQ7dHhwOnNtZF9iaW9faW5mbyBhdXRo b3I9JiMzOTt7c21kX2Jpb19pbmZvX2l0ZW19JiMzOTsKICAgICAgICBpdGVtcz0mIzM5O2lt YWdlJiMzOTsgbGFiZWw9JiMzOTsmIzM5OyAvJmd0Oy5qcGcmcXVvdDsgLyZndDsKICAgJmx0 Oy9hJmd0OwogICAmbHQ7ZGl2IGNsYXNzPSZxdW90O3N1bW1hcnkmcXVvdDsmZ3Q7CiAgICAg ICZsdDt0eHA6c21kX2Jpb19pbmZvIGF1dGhvcj0mIzM5O3tzbWRfYmlvX2luZm9faXRlbX0m IzM5OwoJICAgICBpdGVtcz0mIzM5O3Byb2ZpbGUmIzM5OyBsYWJlbD0mIzM5OyYjMzk7IC8m Z3Q7CiAgICZsdDsvZGl2Jmd0OwombHQ7L3R4cDpzbWRfYmlvX2luZm8mZ3Q7CjwvY29kZT48 L3ByZT4KCgk8cD5Ob3RlIHRoYXQgd2UgaXRlcmF0ZSBvdmVyIGVhY2ggYXV0aG9yIGZpcnN0 IGFuZCB0aGVuIHBsdWcgdGhlIDxjb2RlPntzbWRfYmlvX2luZm9faXRlbX08L2NvZGU+ICh0 aGUgYXV0aG9yJiM4MjE3O3MgbmFtZSkgaW50byBlYWNoIG5lc3RlZCA8Y29kZT5zbWRfYmlv X2luZm88L2NvZGU+IHRhZy4gVGhpcyBwdWxscyBvdXQgaW5kaXZpZHVhbCBpdGVtcyBqdXN0 IGZvciB0aGF0IGF1dGhvciBhbmQgaW5zZXJ0cyB0aGVtIGluIHRoZSBtYXJrdXAsIGFnYWlu IHVzaW5nIDxjb2RlPmxhYmVsPSZxdW90OyZxdW90OzwvY29kZT4gdG8gb21pdCB0aGUgbGFi ZWwuPC9wPgoKCTxoMj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MTQgSnVsIDA5IHwg MC4xIHwgSW5pdGlhbCAobm9uLXB1YmxpYykgcmVsZWFzZTwvbGk+CgkJPGxpPjIxIEF1ZyAw OSB8IDAuMiB8IEZpcnN0IHB1YmxpYyByZWxlYXNlIDsgbm8gaW1hZ2UvdGh1bWIgb3V0cHV0 IDsgZXhwZXJpbWVudGFsIDxjb2RlPm9wdGlvbnM8L2NvZGU+IGF0dHJpYnV0ZSByZW1vdmVk IDsgY29udGFpbmVyL2Zvcm0gYWNjZXB0cyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFu PiB0YWdzIDsgZml4ZWQgdGV4dGJveCBzaXplIGxpbWl0ICh0aGFua3MgTWF0dEQpPC9saT4K CQk8bGk+MzEgQXVnIDA5IHwgMC4zIHwgUmVtb3ZlZCA8Y29kZT5pdGVtPC9jb2RlPiBhdHRy aWJ1dGUgOyBmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgaWYgdXNpbmcgc2luZ2xlIGl0ZW1zIDsg aGlkZGVuIHByZWYgPGNvZGU+c21kX2Jpb19zYW5pdGl6ZV9uYW1lPC9jb2RlPiBmb3JjZXMg c2FuaXRpemVkIGxvZ2luIG5hbWVzPC9saT4KCTwvdWw+Cgo8L2Rpdj4KPCEtLSAqKiogQkVH SU4gUExVR0lOIENTUyAqKiogLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNzbWRfaGVs cCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQojc21kX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJv bGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7 IGJhY2tncm91bmQtY29sb3I6ICNGRkZGQ0M7fQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZv bnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1j b2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBw YWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHgg R2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0K I3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5n OjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlm OyB9CiNzbWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1OyBmb250OiBib2xkIDEycHggQXJp YWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7 dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9 CiNzbWRfaGVscCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0 dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVw cGVyY2FzZTsgfQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyBjb2xvcjoj MzNkOyB9CiNzbWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBk b3R0ZWQgIzk5OTsgfQojc21kX2hlbHAgdGFibGUge3dpZHRoOjkwJTsgdGV4dC1hbGlnbjpj ZW50ZXI7IHBhZGRpbmctYm90dG9tOjFlbTt9CiNzbWRfaGVscCB0ZCwgI3NtZF9oZWxwIHRo IHtib3JkZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbSAwO30KI3NtZF9oZWxwIHVs IHsgbGlzdC1zdHlsZS10eXBlOnNxdWFyZTsgfQojc21kX2hlbHAgLnJlcXVpcmVkIHtjb2xv cjpyZWQ7fQojc21kX2hlbHAgbGkgeyBtYXJnaW46NXB4IDIwcHggNXB4IDMwcHg7IH0KI3Nt ZF9oZWxwIC5icmVhayB7IG1hcmdpbi10b3A6NXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVO RCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjQ6ImNvZGUiO3M6MzM0Mjk6Ii8vIFRPRE86Ci8v ICBVc2UgYW4gYXJyYXkgbGlrZSAkdHlwZXMgPSBhcnJheSggJ2ludCcgPT4gYXJyYXkoIHNx bF90eXBlPSdJTlRFR0VSJywgd2lkZ2V0PSJURVhUIiwgd2lkZ2V0X2NvbnN0cmFpbnQ9Imlz X2ludGVnZXIiICksICk7Ci8vICAgLS0+IFBvcHVsYXRlIHRoZSBzZWxlY3QgYm94IGZyb20g dGhpcyBhcnJheQovLyAgQWRkICdpbmRleCcgY2hlY2tib3ggdG8gYWxsb3cgYW4gSW5kZXgg dG8gYmUgYWRkZWQgdG8gYSBtZXRhIGNvbHVtbgovLyAgQWJpbGl0eSB0byBzcGVjaWZ5IHdp bGRjYXJkcy9tYXRjaGVzIGZvciBpdGVtcy9hdXRob3JzIGluIHRoZSBjbGllbnQgdGFnCi8v ICBTcGVjaWZ5IHRvb2x0aXAgZXh0ZW5kZWQgYmlvIGluZm9ybWF0aW9uIGluIHByZWZzCmlm IChAdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsKCWFkZF9wcml2cygnc21kX2JpbycsICcx Jyk7CglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAnc21kX2JpbycsIHNtZF9iaW9fZ1R4 dCgnYWRtaW5fdGFiJykpOwoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9iaW8nLCAnc21kX2Jp bycpOwoJcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9iaW9fZmllbGRzJywgJ2F1dGhvcl91aScs ICdleHRlbmRfZGV0YWlsX2Zvcm0nKTsKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYmlvX2Fk bWluX2pzJywgJ2FkbWluX3NpZGUnLCAnaGVhZF9lbmQnKTsKCS8vIE5vdGUgdGhlc2UgYXJl IGFsbCBwcmUgVFhQJ3MgaW52b2x2ZW1lbnQKCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfYmlv X3NhdmUnLCAnYWRtaW4nLCAnYXV0aG9yX3NhdmUnLCAxKTsKCXJlZ2lzdGVyX2NhbGxiYWNr KCdzbWRfYmlvX3NhdmUnLCAnYWRtaW4nLCAnYXV0aG9yX3NhdmVfbmV3JywgMSk7CglyZWdp c3Rlcl9jYWxsYmFjaygnc21kX2Jpb19kZWxldGUnLCAnYWRtaW4nLCAnYWRtaW5fbXVsdGlf ZWRpdCcsIDEpOwp9CiRzdGVwID0gZ3BzKCdzdGVwJyk7CmlmICgkc3RlcCA9PSAnc21kX2Jp b19nZXRfaW1hZ2UnKSB7CglzbWRfYmlvX2dldF9pbWFnZSgpOwp9CmlmICgkc3RlcCA9PSAn c21kX2Jpb19nZXRfZWJpbycpIHsKCXNtZF9iaW9fZ2V0X2ViaW8oKTsKfQoKZ2xvYmFsICRz bWRfYmlvX3R5cGVzOwokc21kX2Jpb190eXBlcyA9IGFycmF5KAoJCSd0ZXh0X2lucHV0JyA9 PiAnVGV4dCBib3gnLAoJCSdsaXN0JyA9PiAnU2VsZWN0IGxpc3QnLAoJCSdyYWRpbycgPT4g J1JhZGlvIHNldCcsCgkJJ3llc25vcmFkaW8nID0+ICdZZXMvbm8gcmFkaW8nLAoJCSdjaGVj a2JveCcgPT4gJ0NoZWNrYm94KGVzKScsCgkJJ3RleHRhcmVhJyA9PiAnVGV4dCBhcmVhJywK CQknaW1hZ2UnID0+ICdJbWFnZScsCgkJJ2RhdGV0aW1lJyA9PiAnRGF0ZS9UaW1lJwoJKTsK CmlmICghZGVmaW5lZCgnU01EX0JJTycpKSB7CglkZWZpbmUoIlNNRF9CSU8iLCAnc21kX2Jp bycpOwp9CmlmICghZGVmaW5lZCgnU01EX0JJT19NRVRBJykpIHsKCWRlZmluZSgiU01EX0JJ T19NRVRBIiwgJ3NtZF9iaW9fbWV0YScpOwp9CgovLyAqKioqKioqKioqKioqKioqKioqKioq KioKLy8gQURNSU4gLT4gVVNFUlMgVEFCCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBzbWRfYmlvX2ZpZWxkcygkZXZlbnQsICRzdGVwLCAkbXQsICRkYXRhKSB7Cgkk b3V0ID0gJHZhbHMgPSBhcnJheSgpOwoKCSRyc3RlcCA9IGdwcygnc3RlcCcpOwoJaWYoc21k X2Jpb190YWJsZV9leGlzdCgpKSB7CgkJaWYgKCRyc3RlcCA9PSAnYXV0aG9yX2VkaXQnKSB7 CgkJCWV4dHJhY3QoZ3BzYShhcnJheSgndXNlcl9pZCcpKSk7CgkJCS8vIFNoYW1lIHdlIGhh dmUgdG8gZG91YmxlIGRlLWNsdXRjaCBoZXJlIGJ1dCB3ZSBjYW4ndCBpbmRleCBvbiB1c2Vy X2lkIHVuZm9ydHVuYXRlbHkgKCdjb3Mgd2hlbgoJCQkvLyBpbnNlcnRpbmcgbmV3IHVzZXJz LCB0aGUgYmlvIGZ1bmN0aW9ucyBydW4gX0JFRk9SRV8gYW4gYXV0b19pbmNyZW1lbnQgSUQg aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IFRYUCkKCQkJJHVuYW1lID0gc2FmZV9maWVsZCgnbmFt ZScsJ3R4cF91c2VycycsInVzZXJfaWQgPSAnJHVzZXJfaWQnIik7CgkJCSR2YWxzID0gc2Fm ZV9yb3coJyonLCBTTURfQklPLCAidXNlcl9yZWY9JyR1bmFtZSciKTsKCQl9CgkJJHdpZGdl dHMgPSBzYWZlX3Jvd3MoJyonLCBTTURfQklPX01FVEEsICcxPTEgT1JERVIgQlkgcG9zaXRp b24nKTsKCQkkdGRhYyA9ICcgY2xhc3M9Im5vbGluZSInOwoJCSR0ZGFjX2ltYWdlID0gJyBj bGFzcz0ibm9saW5lIHNtZF9iaW9faW1hZ2VfY2VsbCInOwoJCWZvcmVhY2ggKCR3aWRnZXRz IGFzICR3aWRnZXQpIHsKCQkJJHZhbCA9ICgkdmFscyAmJiBpc3NldCgkdmFsc1skd2lkZ2V0 WyduYW1lJ11dKSkgPyAkdmFsc1skd2lkZ2V0WyduYW1lJ11dIDogJHdpZGdldFsndmFsJ107 CgkJCSR0aXRsZSA9ICgkd2lkZ2V0Wyd0aXRsZSddKSA/ICR3aWRnZXRbJ3RpdGxlJ10gOiAk d2lkZ2V0WyduYW1lJ107CgkJCSRzaXplb3B0cyA9IGRvX2xpc3QoJHdpZGdldFsnc2l6ZSdd KTsKCQkJJHNpemUxID0gKCRzaXplb3B0c1swXSA+IDApID8gJHNpemVvcHRzWzBdIDogJyc7 CgkJCSRzaXplMiA9IChpc3NldCgkc2l6ZW9wdHNbMV0pICYmICRzaXplb3B0c1sxXSA+IDAp ID8gJHNpemVvcHRzWzFdIDogJyc7CgkJCSRuYW1lID0gJ3NtZF9iaW9fJy4kd2lkZ2V0Wydu YW1lJ107CgkJCXN3aXRjaCgkd2lkZ2V0Wyd0eXBlJ10pIHsKCQkJCWNhc2UgJ2xpc3QnOgoJ CQkJCSRzZWx2ID0gc21kX2Jpb19zcGxpdHZhbCgkd2lkZ2V0Wyd2YWwnXSk7CgkJCQkJbGlz dCgkc2VsdiwgJGRmbHQpID0gc21kX2Jpb19nZXRfZGVmYXVsdCgkc2VsdiwgJHZhbCk7CgkJ CQkJJG91dFtdID0gdHIoZkxhYmVsQ2VsbCgkdGl0bGUpLnRkYShzZWxlY3RJbnB1dCgkbmFt ZSwgJHNlbHYsICRkZmx0LCBmYWxzZSwgJycsICRuYW1lKSwgJHRkYWMpLCAnIGNsYXNzPSJz bWRfYmlvX3NlbGVjdCAnLiRuYW1lLiciJyk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdyYWRp byc6CgkJCQkJJHNlbHYgPSBzbWRfYmlvX3NwbGl0dmFsKCR3aWRnZXRbJ3ZhbCddKTsKCQkJ CQlsaXN0KCRzZWx2LCAkZGZsdCkgPSBzbWRfYmlvX2dldF9kZWZhdWx0KCRzZWx2LCAkdmFs KTsKCQkJCQkkb3V0W10gPSB0cihmTGFiZWxDZWxsKCR0aXRsZSkudGRhKHJhZGlvU2V0KCRz ZWx2LCAkbmFtZSwgJGRmbHQpLCAkdGRhYyksICcgY2xhc3M9InNtZF9iaW9fcmFkaW8gJy4k bmFtZS4nIicpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAneWVzbm9yYWRpbyc6CgkJCQkJJG91 dFtdID0gdHIoZkxhYmVsQ2VsbCgkdGl0bGUpLnRkYSh5ZXNub1JhZGlvKCRuYW1lLCAkdmFs KSwgJHRkYWMpLCAnIGNsYXNzPSJzbWRfYmlvX3JhZGlvICcuJG5hbWUuJyInKTsKCQkJCQli cmVhazsKCQkJCWNhc2UgJ2NoZWNrYm94JzoKCQkJCQkkc2VsdiA9IHNtZF9iaW9fc3BsaXR2 YWwoJHdpZGdldFsndmFsJ10pOwoJCQkJCSR2YWwgPSAoJHZhbHMgJiYgaXNzZXQoJHZhbHNb JHdpZGdldFsnbmFtZSddXSkpID8gJHZhbHNbJHdpZGdldFsnbmFtZSddXSA6ICcnOwoJCQkJ CSRjaGVja2VkVmFscyA9IGRvX2xpc3QoJHZhbCk7CgkJCQkJJGl0ZW1zID0gYXJyYXkoKTsK CQkJCQlmb3JlYWNoICgkc2VsdiBhcyAkaWR4ID0+ICRsYmwpIHsKCQkJCQkJLy8gTm90IHVz aW5nIGNoZWNrYm94KCkgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgb25jbGljawoJCQkJ CQkkaXRlbXNbXSA9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNiXycuJG5hbWUu JyIgdmFsdWU9IicuJGlkeC4nIicuKChpbl9hcnJheSgkaWR4LCAkY2hlY2tlZFZhbHMpKSA/ ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpIC4gJyBjbGFzcz0iY2hlY2tib3giIG9uY2xp Y2s9InNtZF9iaW9fY2hlY2tib3goXCcnLiRuYW1lLidcJyk7IiAvPicuJGxibDsKCQkJCQl9 CgkJCQkJJG91dFtdID0gdHIoZkxhYmVsQ2VsbCgkdGl0bGUpLnRkYShqb2luKCcnLCAkaXRl bXMpLCAkdGRhYyksICcgY2xhc3M9InNtZF9iaW9fY2hlY2tib3ggJy4kbmFtZS4nIicpLmZJ bnB1dCgnaGlkZGVuJywkbmFtZSwkdmFsLCcnLCcnLCcnLCcnLCcnLCRuYW1lKTsKCQkJCQli cmVhazsKCQkJCWNhc2UgJ3RleHRhcmVhJzoKCQkJCQkvLyBOb3QgdXNpbmcgdGV4dF9hcmVh KCkgYmVjYXVzZSBpdCBmb3JjZXMgaW5saW5lIHN0eWxlZCB3aWR0aC9oZWlnaHQgd2hpY2gg c2hvdWxkIGJlIGluIENTUwoJCQkJCSRzaXplMSA9ICgkc2l6ZTEgPT0gJycgfHwgJHNpemUx ID09IDApID8gNDAgOiAkc2l6ZTE7CgkJCQkJJHNpemUyID0gKCRzaXplMiA9PSAnJyB8fCAk c2l6ZTIgPT0gMCkgPyA1IDogJHNpemUyOwoJCQkJCSRvdXRbXSA9IHRyKGZMYWJlbENlbGwo JHRpdGxlKS50ZGEoJzx0ZXh0YXJlYSBpZD0iJy4kbmFtZS4nIiBuYW1lPSInLiRuYW1lLici IGNsYXNzPSJzbWRfYmlvX3RleHRhcmVhIiBjb2xzPSInLiRzaXplMS4nIiByb3dzPSInLiRz aXplMi4nIj4nLmh0bWxzcGVjaWFsY2hhcnMoJHZhbCkuJzwvdGV4dGFyZWE+JywgJHRkYWMp LCAnIGNsYXNzPSJzbWRfYmlvX3RleHRhcmVhICcuJG5hbWUuJyInKTsKCQkJCQlicmVhazsK CQkJCWNhc2UgJ2ltYWdlJzoKCQkJCQkkcGFyZW50ID0gJHdpZGdldFsndmFsJ107CgkJCQkJ JHZhbCA9ICgkdmFscyAmJiBpc3NldCgkdmFsc1skd2lkZ2V0WyduYW1lJ11dKSkgPyAkdmFs c1skd2lkZ2V0WyduYW1lJ11dIDogJyc7CgkJCQkJJHdoZXJlID0gKCRwYXJlbnQpID8gImNh dGVnb3J5PSckcGFyZW50JyIgOiAnMT0xJzsKCQkJCQkkdHJlZSA9IHNhZmVfcm93cygnKics ICd0eHBfaW1hZ2UnLCAkd2hlcmUpOwoJCQkJCSRzZWx2ID0gYXJyYXkoKTsKCQkJCQlmb3Jl YWNoICgkdHJlZSBhcyAkcm93KSB7CgkJCQkJCSRzZWx2WyRyb3dbJ2lkJ11dID0gJHJvd1sn bmFtZSddOwoJCQkJCX0KCQkJCQkkb3V0W10gPSB0cihmTGFiZWxDZWxsKCR0aXRsZSkudGRh KCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdmFsKS4n IiBuYW1lPSInLiRuYW1lLiciIHNpemU9IjQiIGNsYXNzPSJzbWRfYmlvX2ltYWdlX2lkIiAv Picuc2VsZWN0SW5wdXQoJG5hbWUuJ19saXN0JywgJHNlbHYsICR2YWwsIHRydWUsICcnKS4n PGRpdiBjbGFzcz0ic21kX2Jpb19pbWFnZSI+PC9kaXY+PHNwYW4gY2xhc3M9InNtZF9iaW9f aW1hZ2VfZGF0YSIgdGl0bGU9IicuKCgkc2l6ZTEpID8gJHNpemUxIDogJycpLicsJy4oKCRz aXplMikgPyAkc2l6ZTIgOiAkc2l6ZTEpLiciPjwvc3Bhbj4nLCAkdGRhY19pbWFnZS4gJyBp ZD0iJy4kbmFtZS4nIicpLCAnIGNsYXNzPSJzbWRfYmlvX2ltYWdlX3JvdyAnLiRuYW1lLici Jyk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdkYXRldGltZSc6CgkJCQljYXNlICd0ZXh0X2lu cHV0JzoKCQkJCQkvLyBOb3QgdXNpbmcgZklucHV0KCkgYmVjYXVzZSBpdCBoYXMgbm8gTUFY TEVOR1RIIHByb3BlcnR5CgkJCQkJJHNpemUxID0gKCRzaXplMSA9PSAnJyB8fCAkc2l6ZTEg PT0gMCkgPyAyNSA6ICRzaXplMTsKCQkJCQkkc2l6ZTIgPSAoJHNpemUyID09ICcnIHx8ICRz aXplMiA9PSAwKSA/ICRzaXplMSA6ICRzaXplMjsKCQkJCQkkb3V0W10gPSB0cihmTGFiZWxD ZWxsKCR0aXRsZSkudGRhKCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IicuaHRtbHNwZWNp YWxjaGFycygkdmFsKS4nIiBuYW1lPSInLiRuYW1lLiciIGlkPSInLiRuYW1lLiciIHNpemU9 IicuJHNpemUxLiciIG1heGxlbmd0aD0iJy4kc2l6ZTIuJyIgY2xhc3M9InNtZF9iaW9fdGV4 dCBlZGl0IiAvPicsICR0ZGFjKSwgJyBjbGFzcz0ic21kX2Jpb190ZXh0X2lucHV0ICcuJG5h bWUuJyInKTsKCQkJCQlicmVhazsKCQkJfQoJCX0KCX0KCXJldHVybiBqb2luKCcnLCAkb3V0 KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJlYWQgYSBuYW1lL3ZhbCBh cnJheSBhbmQgcmVtb3ZlIGFueSBbKl0gbWFya2VyIHdoaWNoIGluZGljYXRlcyBhIGRlZmF1 bHQgaXRlbQpmdW5jdGlvbiBzbWRfYmlvX2dldF9kZWZhdWx0KCRsaXN0LCAkY3VycikgewoJ JG91dCA9IGFycmF5KCk7CgkkZGZsdCA9ICRuZXdfZGZsdCA9ICcnOwoJZm9yZWFjaCAoJGxp c3QgYXMgJGl0ZW0gPT4gJHZhbHVlKSB7CgkJaWYgKCgkcG9zID0gc3RycG9zKCR2YWx1ZSwg J1sqXScpKSAhPT0gZmFsc2UpIHsKCQkJJG91dFskaXRlbV0gPSBzdWJzdHIoJHZhbHVlLCAw LCAkcG9zKTsKCQkJJG5ld19kZmx0ID0gJGl0ZW07CgkJfSBlbHNlIHsKCQkJJG91dFskaXRl bV0gPSAkdmFsdWU7CgkJfQoJCWlmICgkaXRlbSA9PSAkY3VycikgewoJCQkkZGZsdCA9ICRp dGVtOwoJCX0KCX0KCSRkZmx0ID0gKCRkZmx0KSA/ICRkZmx0IDogJG5ld19kZmx0OwoJcmV0 dXJuIGFycmF5KCRvdXQsICRkZmx0KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci8vIEFKQVggY2FsbHMKZnVuY3Rpb24gc21kX2Jpb19nZXRfaW1hZ2UoKSB7CglnbG9iYWwg JGltZ19kaXI7CgoJJGlkID0gZ3BzKCdpZCcpOwoJaWYgKCRpZCkgewoJCSRycyA9IHNhZmVf cm93KCcqJywgJ3R4cF9pbWFnZScsICJpZCA9ICckaWQnIik7CgkJZXh0cmFjdCgkcnMpOwoJ CSRvdXQgPSBhcnJheSgpOwoJCSRvdXRbJ3RodW1iJ10gPSAoJHRodW1ibmFpbCkgPyBodS4k aW1nX2Rpci4nLycuJGlkLid0Jy4kZXh0IDogJyc7CgkJJG91dFsnaW1hZ2UnXSA9IGh1LiRp bWdfZGlyLicvJy4kaWQuJGV4dDsKCQkkb3V0Wyd3J10gPSAkdzsKCQkkb3V0WydoJ10gPSAk aDsKCQkkb3V0Wyd0aHcnXSA9ICgkdGh1bWJfdykgPyAkdGh1bWJfdyA6ICcnOwoJCSRvdXRb J3RoaCddID0gKCR0aHVtYl9oKSA/ICR0aHVtYl9oIDogJyc7CgkJc2VuZF94bWxfcmVzcG9u c2UoJG91dCk7Cgl9IGVsc2UgewoJCXNlbmRfeG1sX3Jlc3BvbnNlKCk7Cgl9Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBJTVBPUlRBTlQ6IGNvbnN0YW50cyBOT1QgdXNl ZCBmb3IgdGFibGUgbmFtZXMKZnVuY3Rpb24gc21kX2Jpb19nZXRfZWJpbygpIHsKCWluY2x1 ZGVfb25jZSB0eHBhdGguJy9wdWJsaXNoL3RhZ2hhbmRsZXJzLnBocCc7CgoJJGlkID0gZ3Bz KCdpZCcpOwoJJGNvcmUgPSBhcnJheSgndXNlcl9yZWYnKTsKCSRycyA9IHNhZmVfcm93KCcq JywgJ3NtZF9iaW8nLCAidXNlcl9yZWYgPSAnJGlkJyIpOwoJJG1ldGEgPSBzYWZlX3Jvd3Mo JyonLCAnc21kX2Jpb19tZXRhJywgIjE9MSIpOwovLwkkaW5jbHVkZSA9IGFycmF5X21lcmdl KCRjb3JlLCBhcnJheSgnbXVnJywgJ2NlbGwnLCAnZGVwYXJ0bWVudCcpKTsgLy8gVE9ETzog Z2V0IHRoZXNlIGZyb20gcHJlZnMvbWV0YSB0YWJsZQoJJGFsbG93ZWRfdHlwZXMgPSBhcnJh eSgndGV4dF9pbnB1dCcsICd0ZXh0YXJlYScsICdkYXRldGltZScpOwoJJG91dCA9IGFycmF5 KCk7Cglmb3JlYWNoICgkcnMgYXMgJGlkeCA9PiAkdmFsKSB7Ci8vCQlpZiAoaW5fYXJyYXko JGlkeCwgJGluY2x1ZGUpKSB7CgkJCWlmIChpbl9hcnJheSgkaWR4LCAkY29yZSkpIHsKCQkJ CSRvdXRbJGlkeF0gPSBkb1NsYXNoKCR2YWwpOwoJCQl9IGVsc2UgewoJCQkJZm9yZWFjaCgk bWV0YSBhcyAkcm93KSB7CgkJCQkJaWYgKCRyb3dbJ25hbWUnXSA9PSAkaWR4KSB7CgkJCQkJ CWlmICgkcm93Wyd0eXBlJ10gPT0gImltYWdlIikgewoJCQkJCQkJJG91dFskaWR4XSA9ICdz bWRfaW1hZ2U6OicudGh1bWJuYWlsKGFycmF5KCdpZCc9PiAkdmFsKSk7CgkJCQkJCX0gZWxz ZSBpZiAoaW5fYXJyYXkoJHJvd1sndHlwZSddLCAkYWxsb3dlZF90eXBlcykpIHsKCQkJCQkJ CSRvdXRbJGlkeF0gPSAkcm93Wyd0aXRsZSddLic6OicuaHRtbHNwZWNpYWxjaGFycyhzdHJp cF90YWdzKCR2YWwpLCBFTlRfUVVPVEVTKTsKCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQl9 CgkJCQl9CgkJCX0KLy8JCX0KCX0KCXNlbmRfeG1sX3Jlc3BvbnNlKCRvdXQpOwp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2Jpb19hZG1pbl9qcygkZXZl bnQsICRzdGVwKSB7CgkkY3NzID0gc2FmZV9maWVsZCgnY3NzJywgJ3R4cF9jc3MnLCAibmFt ZT0nc21kX2JpbyciKTsKCWlmICgkY3NzKSB7CgkJJGNzcyA9ICc8c3R5bGUgdHlwZT0idGV4 dC9jc3MiPicubi5iYXNlNjRfZGVjb2RlKCRjc3MpLm4uJzwvc3R5bGU+JzsKCX0KCSRjc3Mg Lj0gPDw8RU9DU1MKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3Rvb2x0aXB7Cglwb3NpdGlv bjphYnNvbHV0ZTsKCWJvcmRlcjoxcHggc29saWQgIzMzMzsKCWJhY2tncm91bmQ6I2Y3ZjVk MTsKCXBhZGRpbmc6MnB4IDVweDsKCWNvbG9yOiMzMzM7CglkaXNwbGF5Om5vbmU7Cn0KPC9z dHlsZT4KRU9DU1M7CgllY2hvIDw8PEVPSlMKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPgovLzwhW0NEQVRBWwoKCS8vIENvbmNhdGVuYXRlIGNoZWNrYm94IG9wdGlvbnMgZm9y IHN0b3JhZ2UKCWZ1bmN0aW9uIHNtZF9iaW9fY2hlY2tib3goZGVzdCkgewoJCXZhciBvdXQg PSBbXTsKCQlqUXVlcnkoIjpjaGVja2JveCIpLmVhY2goZnVuY3Rpb24oKSB7CgkJCXZhciBp dGVtID0galF1ZXJ5KHRoaXMpOwoJCQlpZiAoaXRlbS5hdHRyKCduYW1lJykucmVwbGFjZSgn Y2JfJywnJykgPT0gZGVzdCkgewoJCQkJaWYgKGl0ZW0uYXR0cignY2hlY2tlZCcpID09IHRy dWUpIHsKCQkJCQlvdXQucHVzaChpdGVtLnZhbCgpKTsKCQkJCX0KCQkJfQoJCX0pOwoJCWpR dWVyeSgnIycrZGVzdCkudmFsKG91dC5qb2luKCcsJykpOwoJfQoKalF1ZXJ5KGZ1bmN0aW9u KCkgewoJLy8gR3JhYiBpbWFnZXMgZnJvbSB0aGUgc2VydmVyIHdoZW4gdGhlIHNlbGVjdC90 ZXh0Ym94IGNoYW5nZQoJalF1ZXJ5KCIuc21kX2Jpb19pbWFnZV9pZCIpLmJsdXIoZnVuY3Rp b24oKSB7CgkJaWQgPSBqUXVlcnkodGhpcykucGFyZW50KCkuYXR0cignaWQnKTsKCQl2YWwg PSBqUXVlcnkodGhpcykudmFsKCk7CgkJc21kX2Jpb19nZXRfaW1hZ2UoaWQsIHZhbCk7Cgl9 KS5ibHVyKCk7CglqUXVlcnkoIi5zbWRfYmlvX2ltYWdlX2NlbGwgLmxpc3QiKS5jaGFuZ2Uo ZnVuY3Rpb24oKSB7CgkJaWQgPSBqUXVlcnkodGhpcykucGFyZW50KCkuYXR0cignaWQnKTsK CQl2YWwgPSBqUXVlcnkodGhpcykudmFsKCk7CgkJc21kX2Jpb19nZXRfaW1hZ2UoaWQsIHZh bCk7Cgl9KTsKCWZ1bmN0aW9uIHNtZF9iaW9fZ2V0X2ltYWdlKGlkLCB2YWwpIHsKCQlqUXVl cnkoIiMiICsgaWQgKyAiIHNlbGVjdCBvcHRpb25bdmFsdWU9JyIrdmFsKyInXSIpLmF0dHIo InNlbGVjdGVkIiwgdHJ1ZSk7CgkJalF1ZXJ5KCIjIiArIGlkICsgIiBpbnB1dCIpLnZhbCh2 YWwpOwoJCXZhciBkaW1zID0galF1ZXJ5KCIjIiArIGlkICsgIiBzcGFuLnNtZF9iaW9faW1h Z2VfZGF0YSIpLmF0dHIoJ3RpdGxlJyk7CgkJdmFyIHNpemUgPSBuZXcgQXJyYXkoKTsKCQlp ZiAoZGltcykgewoJCQlzaXplID0gZGltcy5zcGxpdCgiLCIpOwoJCX0KCQlzZW5kQXN5bmNF dmVudCh7CgkJCQlldmVudDogdGV4dHBhdHRlcm4uZXZlbnQsCgkJCQlzdGVwOiAnc21kX2Jp b19nZXRfaW1hZ2UnLAoJCQkJaWQ6IHZhbAoJCQl9LCBmdW5jdGlvbihkYXRhKSB7CgkJCQlk YXRhID0galF1ZXJ5KGRhdGEpOwoJCQkJaWYgKGRhdGEpIHsKCQkJCQl2YXIgZnVsbCA9IDA7 CgkJCQkJdmFyIGltZ0xpbmsgPSBkYXRhLmZpbmQoJ3RodW1iJykuYXR0cigndmFsdWUnKTsK CQkJCQlpZiAoaW1nTGluayA9PSAnJykgewoJCQkJCQlmdWxsID0gMTsKCQkJCQkJdmFyIGlt Z0xpbmsgPSBkYXRhLmZpbmQoJ2ltYWdlJykuYXR0cigndmFsdWUnKTsKCQkJCQl9CgkJCQkJ aWYgKHNpemVbMF0gPT0gJycpIHsKCQkJCQkJaWYgKGZ1bGwgPT0gMSkgewoJCQkJCQkJc2l6 ZVswXSA9IGRhdGEuZmluZCgndycpLmF0dHIoJ3ZhbHVlJyk7CgkJCQkJCX0gZWxzZSB7CgkJ CQkJCQlzaXplWzBdID0gZGF0YS5maW5kKCd0aHcnKS5hdHRyKCd2YWx1ZScpOwoJCQkJCQl9 CgkJCQkJfQoJCQkJCWlmIChzaXplWzFdID09ICcnKSB7CgkJCQkJCWlmIChmdWxsID09IDEp IHsKCQkJCQkJCXNpemVbMV0gPSBkYXRhLmZpbmQoJ2gnKS5hdHRyKCd2YWx1ZScpOwoJCQkJ CQl9IGVsc2UgewoJCQkJCQkJc2l6ZVsxXSA9IGRhdGEuZmluZCgndGhoJykuYXR0cigndmFs dWUnKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlqUXVlcnkoIiMiICsgaWQgKyAiIC5zbWRfYmlv X2ltYWdlIikuZmFkZUluKCkuaHRtbCgnPGltZyBzcmM9IicraW1nTGluaysnIiB3aWR0aD0i JytzaXplWzBdKyciIGhlaWdodD0iJytzaXplWzFdKyciIC8+Jyk7CgkJCQl9IGVsc2UgewoJ CQkJCWpRdWVyeSgiIyIgKyBpZCArICIgLnNtZF9iaW9faW1hZ2UiKS5mYWRlT3V0KCkuZW1w dHkoKTsKCQkJCX0KCQkJfQoJCSk7Cgl9CgoJLy8gR3JhYiB0aGUgZXh0ZW5kZWQgaW5mbyB3 aGVuIGhvdmVyaW5nIGFuIGF1dGhvciBpbiB0aGUgbGlzdAoJalF1ZXJ5KCJmb3JtIHRhYmxl I2xpc3QgdHIiKS5lYWNoKGZ1bmN0aW9uKGUpIHsKCQl2YXIgdHQgPSAnJzsKCQl2YXIgcm93 ID0galF1ZXJ5KHRoaXMpOwoJCWlmIChyb3cuYXR0cigidGl0bGUiKSA9PSAnJykgewoJCQl2 YXIgcGVyc29uID0gcm93LmZpbmQoInRkOmZpcnN0IikudGV4dCgpOwoJCQlzZW5kQXN5bmNF dmVudCh7CgkJCQkJZXZlbnQ6IHRleHRwYXR0ZXJuLmV2ZW50LAoJCQkJCXN0ZXA6ICdzbWRf YmlvX2dldF9lYmlvJywKCQkJCQlpZDogcGVyc29uCgkJCQl9LCBmdW5jdGlvbihkYXRhKSB7 CgkJCQkJZGF0YSA9IGpRdWVyeShkYXRhKTsKCQkJCQkJdmFyIGVudHJ5ID0gZGF0YS5maW5k KCd1c2VyX3JlZicpOwoJCQkJCQlvdXQgPSAnJzsKCQkJCQkJZW50cnkubmV4dEFsbCgpLmVh Y2goZnVuY3Rpb24oaXRlbSkgewoJCQkJCQkJbm9kZSA9IGpRdWVyeSh0aGlzKS5jb250ZXh0 Lm5vZGVOYW1lOwoJCQkJCQkJaWYgKG5vZGUgIT0gJ2h0dHAtc3RhdHVzJykgewoJCQkJCQkJ CXZhbGwgPSBqUXVlcnkodGhpcykuYXR0cigndmFsdWUnKTsKCQkJCQkJCQlpZiAodmFsbCkg ewoJCQkJCQkJCQl2c3BsaXQgPSB2YWxsLnNwbGl0KCc6OicpOwoJCQkJCQkJCQlpZiAodnNw bGl0WzBdLmluZGV4T2YoJ3NtZF9pbWFnZScpIDwgMCkgewoJCQkJCQkJCQkJb3V0ICs9ICgo dnNwbGl0Lmxlbmd0aD4xKSA/IHZzcGxpdFswXSA6IG5vZGUpICsgJzogJzsKCQkJCQkJCQkJ fQoJCQkJCQkJCQl2YWxsID0gKCh2c3BsaXQubGVuZ3RoPjEpID8gdnNwbGl0WzFdIDogdnNw bGl0WzBdKTsKCQkJCQkJCQkJb3V0ICs9IHZhbGwgKyAnPGJyLz4nOwoJCQkJCQkJCX0gZWxz ZSB7CgkJCQkJCQkJCW91dCArPSBub2RlKyc6ICc7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJ CQl9KTsKCQkJCQkJcm93LmF0dHIoInRpdGxlIiwgb3V0KTsKCQkJCQl9CgkJCSk7CgkJfQoK CQl4T2Zmc2V0ID0gMzA7CgkJeU9mZnNldCA9IDI1OwoJCWhvdkl0ZW0gPSByb3cuZmluZCgi dGQ6bGFzdCIpLnByZXYoKTsKCQlob3ZJdGVtLmhvdmVyKGZ1bmN0aW9uKGUpIHsKCQkJdHQg PSBqUXVlcnkodGhpcykucGFyZW50KCkuYXR0cigidGl0bGUiKTsKCQkJaWYgKHR0ICE9ICcn KSB7CgkJCQlqUXVlcnkodGhpcykucGFyZW50KCkuYXR0cigidGl0bGUiLCAiIik7CgkJCQlq UXVlcnkoImJvZHkiKS5hcHBlbmQoIjxwIGlkPSd0b29sdGlwJz4iKyB0dCArIjwvcD4iKTsK CQkJCWpRdWVyeSgiI3Rvb2x0aXAiKQoJCQkJCS5jc3MoInRvcCIsKGUucGFnZVkgLSB4T2Zm c2V0KSArICJweCIpCgkJCQkJLmNzcygibGVmdCIsKGUucGFnZVggKyB5T2Zmc2V0KSArICJw eCIpCgkJCQkJLmZhZGVJbigiZmFzdCIpOwoJCQl9CgkJfSwKCQlmdW5jdGlvbigpIHsKCQkJ alF1ZXJ5KHRoaXMpLnBhcmVudCgpLmF0dHIoInRpdGxlIiwgdHQpOwoJCQlqUXVlcnkoIiN0 b29sdGlwIikucmVtb3ZlKCk7CgkgICAgfSk7CgkJaG92SXRlbS5tb3VzZW1vdmUoZnVuY3Rp b24oZSkgewoJCQlqUXVlcnkoIiN0b29sdGlwIikKCQkJCS5jc3MoInRvcCIsKGUucGFnZVkg LSB4T2Zmc2V0KSArICJweCIpCgkJCQkuY3NzKCJsZWZ0IiwoZS5wYWdlWCArIHlPZmZzZXQp ICsgInB4Iik7CgkJfSk7CgoKCX0pOwoKCS8vIEdyZXkgb3V0IHRoZSBTaXplIGJveCBmb3Ig dGhvc2UgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXQKCWpRdWVyeSgiI3BhZ2Utc21kX2JpbyAu bGlzdFtuYW1lPSd0eXBlJ10iKS5jaGFuZ2UoZnVuY3Rpb24oKSB7CgkJdmFyIHRoZVR5cGUg PSBqUXVlcnkoIiNwYWdlLXNtZF9iaW8gLmxpc3RbbmFtZT0ndHlwZSddIG9wdGlvbjpzZWxl Y3RlZCIpLnZhbCgpOwoJCXZhciBkZXN0ID0gIiNwYWdlLXNtZF9iaW8gaW5wdXRbbmFtZT0n c2l6ZSddIjsKCQlpZiAodGhlVHlwZSA9PSAnbGlzdCcgfHwgdGhlVHlwZSA9PSAncmFkaW8n IHx8IHRoZVR5cGUgPT0gJ3llc25vcmFkaW8nIHx8IHRoZVR5cGUgPT0gJ2NoZWNrYm94Jykg ewoJCQlqUXVlcnkoZGVzdCkuYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKCQkJalF1ZXJ5KGRl c3QpLnBhcmVudCgpLnByZXYoKS5jc3MoImNvbG9yIiwgJyM5OTknKTsKCQl9IGVsc2UgewoJ CQlqUXVlcnkoZGVzdCkuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7CgkJCWpRdWVyeShkZXN0 KS5wYXJlbnQoKS5wcmV2KCkuY3NzKCJjb2xvciIsICcnKTsKCQl9Cgl9KS5jaGFuZ2UoKTsK CgkvLyBQb3AgdXAgdGhlIGhlbHAgdG9vbHRpcHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgVHlw ZQoJalF1ZXJ5KCIucG9waGVscC5zbWRfYmlvX3NpemUiKS5ob3ZlcigKCQlmdW5jdGlvbihl KSB7CgkJCXZhciB0aGVUeXBlID0galF1ZXJ5KCIjcGFnZS1zbWRfYmlvIC5saXN0W25hbWU9 J3R5cGUnXSBvcHRpb246c2VsZWN0ZWQiKS52YWwoKTsKCQkJc3BhbmlkID0gJ3NwYW4jc21k X2Jpb19zaXplX2hlbHBfJyt0aGVUeXBlOwoJCQl0aGlzLnRpdGxlID0galF1ZXJ5KHNwYW5p ZCkuYXR0cigidGl0bGUiKTsKCQl9LCBmdW5jdGlvbihlKSB7CgkJCXRoaXMudGl0bGUgPSAn JzsKCQl9CgkpOwoJalF1ZXJ5KCIucG9waGVscC5zbWRfYmlvX3ZhbCIpLmhvdmVyKAoJCWZ1 bmN0aW9uKGUpIHsKCQkJdmFyIHRoZVR5cGUgPSBqUXVlcnkoIiNwYWdlLXNtZF9iaW8gLmxp c3RbbmFtZT0ndHlwZSddIG9wdGlvbjpzZWxlY3RlZCIpLnZhbCgpOwoJCQlzcGFuaWQgPSAn c3BhbiNzbWRfYmlvX3ZhbF9oZWxwXycrdGhlVHlwZTsKCQkJdGhpcy50aXRsZSA9IGpRdWVy eShzcGFuaWQpLmF0dHIoInRpdGxlIik7CgkJfSwgZnVuY3Rpb24oZSkgewoJCQl0aGlzLnRp dGxlID0gJyc7CgkJfQoJKTsKfSk7Ci8vXV0+Cjwvc2NyaXB0Pgp7JGNzc30KRU9KUzsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIE1ha2UgdGhlIG5hbWUvdmFsIHBhaXJz IGZvciBzZWxlY3RJbnB1dCAvIHJhZGlvIC8gY2hlY2tib3ggc2V0cwpmdW5jdGlvbiBzbWRf YmlvX3NwbGl0dmFsKCR2YWwpIHsKCSRzZWx2ID0gYXJyYXkoKTsKCgkkd3ZhbHMgPSBleHBs b2RlKCcsJywgJHZhbCk7Cglmb3JlYWNoICgkd3ZhbHMgYXMgJHd2YWwpIHsKCQkkcHJ0cyA9 IGV4cGxvZGUoJz0+JywgJHd2YWwpOwoJCWlmIChjb3VudCgkcHJ0cykgPT0gMSkgewoJCQkk cHJ0c1sxXSA9ICRwcnRzWzBdOwoJCQkkcHJ0c1swXSA9IHNtZF9iaW9fc2FuaXRpemUoJHBy dHNbMF0pOwoJCX0KCQkkc2Vsdlt0cmltKCRwcnRzWzBdKV0gPSB0cmltKCRwcnRzWzFdKTsK CX0KCXJldHVybiAkc2VsdjsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFN1 cGVyLXNhbml0aXplIHRoZSBwYXNzZWQgdmFsdWUgc28gd2UgY2FuIG1ha2UgdmFyaWFibGUg bmFtZXMgZnJvbSB0aGUgcmV0dXJuZWQgc3RyaW5nCmZ1bmN0aW9uIHNtZF9iaW9fc2FuaXRp emUoJHZhbCkgewoJcmV0dXJuIHN0cnRvbG93ZXIoc3RyX3JlcGxhY2UoIi0iLCAiXyIsIHNh bml0aXplRm9yVXJsKCR2YWwpKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBzbWRfYmlvX3NhdmUoJGV2ZW50LCAkc3RlcCkgewoJZ2xvYmFsICRwcmVmczsK CglpZiAoc21kX2Jpb190YWJsZV9leGlzdCgpKSB7CgkJJHRhcmdldHZhcnMgPSBhcnJheSgp OwoJCWV4dHJhY3QoZG9TbGFzaChwc2EoYXJyYXkoJ3ByaXZzJywgJ25hbWUnLCAnZW1haWwn LCAnUmVhbE5hbWUnLCAndXNlcl9pZCcpKSkpOwoJCWlmIChnZXRfcHJlZignc21kX2Jpb19z YW5pdGl6ZV9uYW1lJywgMCkgPiAwKSB7CgkJCS8vIFNhbml0aXplIGFuZCBwYXNzIHRoZSBu ZXcgbmFtZSBmb3J3YXJkIHRvIHRoZSBhY3R1YWwgdHhwX3VzZXIgc2F2ZSByb3V0aW5lCgkJ CSRuYW1lID0gc3RydG9sb3dlcihzYW5pdGl6ZUZvclVybCgkbmFtZSkpOwoJCQkkX1BPU1Rb J25hbWUnXSA9ICRuYW1lOwoJCX0KCQkkbGVuZ3RoID0gZnVuY3Rpb25fZXhpc3RzKCdtYl9z dHJsZW4nKSA/IG1iX3N0cmxlbigkbmFtZSwgJzhiaXQnKSA6IHN0cmxlbigkbmFtZSk7CgoJ CWlmICgoJHVzZXJfaWQgfHwgJG5hbWUpIGFuZCAkbGVuZ3RoIDw9IDY0IGFuZCBpc192YWxp ZF9lbWFpbCgkZW1haWwpKSB7CgkJCWZvcmVhY2ggKCRfUE9TVCBhcyAkaWR4ID0+ICRpdGVt KSB7CgkJCQlpZiAoc3RycG9zKCRpZHgsICdzbWRfYmlvXycpID09PSAwKSB7CgkJCQkJJHRh cmdldHZhcnNbXSA9ICRpZHg7CgkJCQl9CgkJCX0KCgkJCS8vIERvdWJsZSBkZS1jbHV0Y2gg YWdhaW4uLi4gZGFtbWl0IDotKAoJCQkkdXNlcl9pZCA9IGdwcygndXNlcl9pZCcpOwoJCQlp ZiAoJHVzZXJfaWQpIHsKCQkJCSR1c2VyX3JlZiA9IHNhZmVfZmllbGQoJ25hbWUnLCd0eHBf dXNlcnMnLCJ1c2VyX2lkID0gJyR1c2VyX2lkJyIpOwoJCQl9IGVsc2UgewoJCQkJJHVzZXJf cmVmID0gJG5hbWU7CgkJCX0KCgkJCWV4dHJhY3QoZ3BzYSgkdGFyZ2V0dmFycykpOwoJCQkk YmNvbHMgPSBnZXRUaGluZ3MoJ2Rlc2NyaWJlIGAnLlBGWC5TTURfQklPLidgJyk7CgkJCSRz cWxTZXQgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkdGFyZ2V0dmFycyBhcyAkdmFyKSB7CgkJ CQkkY29sbmFtZSA9IHN0cl9yZXBsYWNlKCdzbWRfYmlvXycsICcnLCAkdmFyKTsKCQkJCWlm IChpbl9hcnJheSgkY29sbmFtZSwgJGJjb2xzKSkgewoJCQkJCSRzcWxTZXRbXSA9ICJgJGNv bG5hbWVgID0gJyIuZG9TbGFzaCgkJHZhcikuIiciOwoJCQkJfQoJCQl9CgkJCWlmICgkc3Fs U2V0KSB7CgkJCQkkcnMgPSBzYWZlX3Vwc2VydChTTURfQklPLCBqb2luKCcsJywgJHNxbFNl dCksICJgdXNlcl9yZWZgID0gJyR1c2VyX3JlZiciKTsKCQkJfQoJCX0KCX0KfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9fZGVsZXRlKCRldmVudCwg JHN0ZXApIHsKCWdsb2JhbCAkdHhwX3VzZXI7CgoJaWYgKHNtZF9iaW9fdGFibGVfZXhpc3Qo KSkgewoJCS8vIFNpbmNlIHdlIGFyZSBleGVjdXRpbmcgJ3ByZScgZGVsZXRlIHdlIG5lZWQg dG8gdW5mb3J0dW5hdGVseSBkdXBsaWNhdGUgc29tZSBvZiB0aGUgY2hlY2tzCgkJLy8gZnJv bSB0eHBfYWRtaW4ucGhwIHNvIHdlIG1pbmltaXNlIHRoZSBvcHBvcnR1bml0eSB0byBkZWxl dGUgc29tZW9uZSBieSBtaXN0YWtlCgkJJHNlbGVjdGVkID0gcHMoJ3NlbGVjdGVkJyk7CgkJ JG1ldGhvZCA9IHBzKCdlZGl0X21ldGhvZCcpOwoJCWlmICghJHNlbGVjdGVkIG9yICFpc19h cnJheSgkc2VsZWN0ZWQpKSB7CgkJCXJldHVybjsKCQl9CgkJaWYgKCRtZXRob2QgIT0gJ2Rl bGV0ZScpIHsKCQkJcmV0dXJuOwoJCX0KCgkJJG5hbWVzID0gc2FmZV9jb2x1bW4oJ25hbWUn LCAndHhwX3VzZXJzJywgIm5hbWUgSU4gKCciLmpvaW4oIicsJyIsIGRvU2xhc2goJHNlbGVj dGVkKSkuIicpIEFORCBuYW1lICE9ICciLmRvU2xhc2goJHR4cF91c2VyKS4iJyIpOwoJCWlm ICghJG5hbWVzKSByZXR1cm47CgoJCSRhc3NpZ25fYXNzZXRzID0gcHMoJ2Fzc2lnbl9hc3Nl dHMnKTsKCQlpZiAoJGFzc2lnbl9hc3NldHMgPT09ICcnKSB7CgkJCXJldHVybjsKCQl9IGVs c2VpZiAoaW5fYXJyYXkoJGFzc2lnbl9hc3NldHMsICRuYW1lcykpIHsKCQkJcmV0dXJuOwoJ CX0gZWxzZSB7CgkJCS8vIEFsbCB0aGUgY2hlY2tzIHBhc3NlZCAtLSBkbyBpdAoJCQlzYWZl X2RlbGV0ZShTTURfQklPLCAidXNlcl9yZWYgSU4gKCciLmpvaW4oIicsJyIsIGRvU2xhc2go JG5hbWVzKSkuIicpIik7CgkJfQoJfQp9CgoKLy8gKioqKioqKioqKioqKioqKioqKioqKioq Ci8vIEJJTyBDT05GSUdVUkFUSU9OCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBU YWIgaGFuZGxlcgpmdW5jdGlvbiBzbWRfYmlvKCRldmVudCwgJHN0ZXApIHsKCWlmKCEkc3Rl cCBvciAhaW5fYXJyYXkoJHN0ZXAsIGFycmF5KAoJCQknc21kX2Jpb19tZXRhX2FkZCcsCgkJ CSdzbWRfYmlvX21ldGFfZGVsJywKCQkJJ3NtZF9iaW9fbWV0YV9zYXZlJywKCQkpKSkgewoJ CXNtZF9iaW9fY29uZmlnKCcnKTsKCX0gZWxzZSAkc3RlcCgpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21kX2Jpb19jb25maWcoJG1lc3NhZ2UpIHsKCWlm ICghc21kX2Jpb190YWJsZV9leGlzdCgpKSB7CgkJc21kX2Jpb19pbnN0YWxsKCcnKTsKCQll eGl0OwoJfQoKCXBhZ2V0b3Aoc21kX2Jpb19nVHh0KCdhZG1pbl90YWInKSwgJG1lc3NhZ2Up OwoKCWVjaG8gc21kX2Jpb19tZXRhX2VkaXQoKTsKCWVjaG8gc21kX2Jpb19tZXRhX2xpc3Qo KTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9fbWV0 YV9lZGl0KCkgewoJZ2xvYmFsICRzbWRfYmlvX3R5cGVzOwoKCSR2YXJzID0gYXJyYXkoJ3N0 ZXAnLCAnaWQnLCAndGl0bGUnLCAnbmFtZScsICd0eXBlJywgJ3NpemUnLCAndmFsJywgJ3Bv c2l0aW9uJyk7CgkkcnMgPSBhcnJheSgpOwoKCWV4dHJhY3QoZ3BzYSgkdmFycykpOwoJaWYg KCRpZCAmJiAkc3RlcCA9PSAnbWV0YV9lZGl0JykgewoJCSRpZCA9IGFzc2VydF9pbnQoJGlk KTsKCQkkcnMgPSBzYWZlX3JvdygnKicsIFNNRF9CSU9fTUVUQSwgImlkID0gJGlkIik7CgkJ ZXh0cmFjdCgkcnMpOwoJfQoKCWlmICgkc3RlcCA9PSAnc21kX2Jpb19tZXRhX3NhdmUnIHx8 ICRzdGVwID09ICdzbWRfYmlvX21ldGFfYWRkJyB8fCAkc3RlcCA9PSAnc21kX2Jpb19tZXRh X2RlbCcpIHsKCQlmb3JlYWNoICgkdmFycyBhcyAkdmFyKSB7CgkJCSQkdmFyID0gJyc7CgkJ fQoJfQoKCSRjYXB0aW9uID0gc21kX2Jpb19nVHh0KCgkc3RlcCA9PSAnbWV0YV9lZGl0Jykg PyAnbWV0YV9lZGl0JyA6ICdtZXRhX2FkZCcpOwoKCS8vIE1ha2UgdGhlIG5hbWUvdmFsIHBh aXJzIGZvciBzZWxlY3RJbnB1dAoJJHNlbHYgPSBhcnJheSgpOwoJZm9yZWFjaCAoJHNtZF9i aW9fdHlwZXMgYXMgJHdpZHggPT4gJHd2YWwpIHsKCQkkc2Vsdlskd2lkeF0gPSAkd3ZhbDsK CX0KCglyZXR1cm4gZm9ybSgKCQloZWQoJGNhcHRpb24sIDMsJyBzdHlsZT0idGV4dC1hbGln bjogY2VudGVyOyInKS4KCgkJc3RhcnRUYWJsZSgnZWRpdCcsICcnLCAnZWRpdC1wYW5lJyku CgoJCXRyKAoJCQlmTGFiZWxDZWxsKCduYW1lJykuCgkJCSgkaWQgJiYgJHN0ZXAgPT0gJ21l dGFfZWRpdCcgPyB0ZChzdHJvbmcoJG5hbWUpKSA6IGZJbnB1dENlbGwoJ25hbWUnLCAkbmFt ZSkpCgkJKS4KCgkJdHIoCgkJCWZMYWJlbENlbGwoJ3RpdGxlJykuCgkJCWZJbnB1dENlbGwo J3RpdGxlJywgJHRpdGxlKQoJCSkuCgoJCXRyKAoJCQlmTGFiZWxDZWxsKCd0eXBlJykuCgkJ CXRkKHNlbGVjdElucHV0KCd0eXBlJywgJHNlbHYsICR0eXBlLCBmYWxzZSkpCgkJKS4KCgkJ dHIoCgkJCWZMYWJlbENlbGwoc21kX2Jpb19nVHh0KCdzaXplJykpLgoJCQlmSW5wdXRDZWxs KCdzaXplJywgJHNpemUpLnRkKHRhZyhzbWRfYmlvX2dUeHQoJ2hlbHAnKSwgJ2EnLCAnIGNs YXNzPSJwb3BoZWxwIHNtZF9iaW9fc2l6ZSInKSkKCQkpLgoKCQl0cigKCQkJZkxhYmVsQ2Vs bCgndmFsdWUnKS4KCQkJdGQodGV4dF9hcmVhKCd2YWwnLCAnNTAnLCAnMTI4JywgJHZhbCkp LnRkKHRhZyhzbWRfYmlvX2dUeHQoJ2hlbHAnKSwgJ2EnLCAnIGNsYXNzPSJwb3BoZWxwIHNt ZF9iaW9fdmFsIicpKQoJCSkuCgoJCXRyKAoJCQlmTGFiZWxDZWxsKHNtZF9iaW9fZ1R4dCgn cG9zaXRpb24nKSkuCgkJCWZJbnB1dENlbGwoJ3Bvc2l0aW9uJywgJHBvc2l0aW9uKQoJCSku CgoJCXRyKAoJCQl0ZCgpLgoJCQl0ZCgKCQkJCWZJbnB1dCgnc3VibWl0JywgJycsIGdUeHQo J3NhdmUnKSwgJ3B1Ymxpc2gnKQoJCQkpCgkJKS4KCgkJZW5kVGFibGUoKS4KCgkJZUlucHV0 KCdzbWRfYmlvJykuCgkJKCRpZCA/IGhJbnB1dCgnaWQnLCAkaWQpLmhJbnB1dCgnbmFtZScs ICRuYW1lKS5zSW5wdXQoJ3NtZF9iaW9fbWV0YV9zYXZlJykgOiBzSW5wdXQoJ3NtZF9iaW9f bWV0YV9hZGQnKSkuCgkJdGFnKCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3NpemVfaGVs cF90ZXh0X2lucHV0IiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3NpemVoZWxwX3RleHRfaW5w dXQnKS4nIicpLgoJCXRhZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb19zaXplX2hlbHBf bGlzdCIgdGl0bGU9Iicuc21kX2Jpb19nVHh0KCdoZWxwX3VudXNlZCcpLiciJykuCgkJdGFn KCcgJywgJ3NwYW4nLCAnIGlkPSJzbWRfYmlvX3NpemVfaGVscF9yYWRpbyIgdGl0bGU9Iicu c21kX2Jpb19nVHh0KCdoZWxwX3VudXNlZCcpLiciJykuCgkJdGFnKCcgJywgJ3NwYW4nLCAn IGlkPSJzbWRfYmlvX3NpemVfaGVscF95ZXNub3JhZGlvIiB0aXRsZT0iJy5zbWRfYmlvX2dU eHQoJ2hlbHBfdW51c2VkJykuJyInKS4KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9i aW9fc2l6ZV9oZWxwX2NoZWNrYm94IiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ2hlbHBfdW51 c2VkJykuJyInKS4KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6ZV9oZWxw X3RleHRhcmVhIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3NpemVoZWxwX3RleHRhcmVhJyku JyInKS4KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6ZV9oZWxwX2ltYWdl IiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3NpemVoZWxwX2ltYWdlJykuJyInKS4KCQl0YWco JyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fc2l6ZV9oZWxwX2RhdGV0aW1lIiB0aXRsZT0i Jy5zbWRfYmlvX2dUeHQoJ3NpemVoZWxwX3RleHRfaW5wdXQnKS4nIicpLgoKCQl0YWcoJyAn LCAnc3BhbicsICcgaWQ9InNtZF9iaW9fdmFsX2hlbHBfdGV4dF9pbnB1dCIgdGl0bGU9Iicu c21kX2Jpb19nVHh0KCd2YWxoZWxwX3RleHRfaW5wdXQnKS4nIicpLgoJCXRhZygnICcsICdz cGFuJywgJyBpZD0ic21kX2Jpb192YWxfaGVscF9saXN0IiB0aXRsZT0iJy5zbWRfYmlvX2dU eHQoJ3ZhbGhlbHBfbHJjJykuJyInKS4KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9i aW9fdmFsX2hlbHBfcmFkaW8iIHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgndmFsaGVscF9scmMn KS4nIicpLgoJCXRhZygnICcsICdzcGFuJywgJyBpZD0ic21kX2Jpb192YWxfaGVscF95ZXNu b3JhZGlvIiB0aXRsZT0iJy5zbWRfYmlvX2dUeHQoJ3ZhbGhlbHBfeW5yJykuJyInKS4KCQl0 YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fdmFsX2hlbHBfY2hlY2tib3giIHRpdGxl PSInLnNtZF9iaW9fZ1R4dCgndmFsaGVscF9scmMnKS4nIicpLgoJCXRhZygnICcsICdzcGFu JywgJyBpZD0ic21kX2Jpb192YWxfaGVscF90ZXh0YXJlYSIgdGl0bGU9Iicuc21kX2Jpb19n VHh0KCd2YWxoZWxwX3RleHRfaW5wdXQnKS4nIicpLgoJCXRhZygnICcsICdzcGFuJywgJyBp ZD0ic21kX2Jpb192YWxfaGVscF9pbWFnZSIgdGl0bGU9Iicuc21kX2Jpb19nVHh0KCd2YWxo ZWxwX2ltYWdlJykuJyInKS4KCQl0YWcoJyAnLCAnc3BhbicsICcgaWQ9InNtZF9iaW9fdmFs X2hlbHBfZGF0ZXRpbWUiIHRpdGxlPSInLnNtZF9iaW9fZ1R4dCgndmFsaGVscF90ZXh0X2lu cHV0JykuJyInKQoJKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IHNtZF9iaW9fbWV0YV9saXN0KCkgewoJZ2xvYmFsICRzbWRfYmlvX3R5cGVzOwoKCWV4dHJh Y3QoZ3BzYShhcnJheSgnc29ydCcsICdkaXInLCAnY3JpdCcsICdzZWFyY2hfbWV0aG9kJykp KTsKCWlmICgkc29ydCA9PT0gJycpICRzb3J0ID0gZ2V0X3ByZWYoJ3NtZF9iaW9fbWV0YV9z b3J0X2NvbHVtbicsICduYW1lJyk7CglpZiAoJGRpciA9PT0gJycpICRkaXIgPSBnZXRfcHJl Zignc21kX2Jpb19tZXRhX3NvcnRfZGlyJywgJ2FzYycpOwoJJGRpciA9ICgkZGlyID09ICdk ZXNjJykgPyAnZGVzYycgOiAnYXNjJzsKCglpZiAoIWluX2FycmF5KCRzb3J0LCBhcnJheSgn bmFtZScsICd0aXRsZScsICd0eXBlJywgJ3NpemUnLCAndmFsJywgJ3Bvc2l0aW9uJykpKSAk c29ydCA9ICdwb3NpdGlvbic7CgoJJHNvcnRfc3FsICAgPSAkc29ydC4nICcuJGRpcjsKCglz ZXRfcHJlZignc21kX2Jpb19tZXRhX3NvcnRfY29sdW1uJywgJHNvcnQsICdzbWRfYmlvJywg MiwgJycsIDAsIFBSRUZfUFJJVkFURSk7CglzZXRfcHJlZignc21kX2Jpb19tZXRhX3NvcnRf ZGlyJywgJGRpciwgJ3NtZF9iaW8nLCAyLCAnJywgMCwgUFJFRl9QUklWQVRFKTsKCgkkc3dp dGNoX2RpciA9ICgkZGlyID09ICdkZXNjJykgPyAnYXNjJyA6ICdkZXNjJzsKCgkkcnMgPSBz YWZlX3Jvd3Nfc3RhcnQoJyonLCBTTURfQklPX01FVEEsICcxID0gMSBPUkRFUiBCWSAnLiRz b3J0X3NxbCk7CgoJaWYgKCRycykgewoJCWVjaG8gJzxmb3JtIGFjdGlvbj0iaW5kZXgucGhw IiBtZXRob2Q9InBvc3QiIG5hbWU9Imxvbmdmb3JtIiBvbnN1Ym1pdD0icmV0dXJuIHZlcmlm eShcJycuZ1R4dCgnYXJlX3lvdV9zdXJlJykuJ1wnKSI+Jy4KCgkJc3RhcnRUYWJsZSgnbGlz dCcpLgoJCXRyKAoJCQljb2x1bW5faGVhZCgnbmFtZScsICduYW1lJywgJ3NtZF9iaW8nLCB0 cnVlLCAkc3dpdGNoX2RpciwgJycsICcnLCAoJ25hbWUnID09ICRzb3J0KSA/ICRkaXIgOiAn JykuCgkJCWNvbHVtbl9oZWFkKCd0aXRsZScsICd0aXRsZScsICdzbWRfYmlvJywgdHJ1ZSwg JHN3aXRjaF9kaXIsICcnLCAnJywgKCd0aXRsZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4K CQkJY29sdW1uX2hlYWQoJ3R5cGUnLCAndHlwZScsICdzbWRfYmlvJywgdHJ1ZSwgJHN3aXRj aF9kaXIsICcnLCAnJywgKCd0eXBlJyA9PSAkc29ydCkgPyAkZGlyIDogJycpLgoJCQljb2x1 bW5faGVhZChzbWRfYmlvX2dUeHQoJ3NpemUnKSwgJ3NpemUnLCAnc21kX2JpbycsIHRydWUs ICRzd2l0Y2hfZGlyLCAnJywgJycsICgnc2l6ZScgPT0gJHNvcnQpID8gJGRpciA6ICcnKS4K CQkJY29sdW1uX2hlYWQoJ3ZhbHVlJywgJ3ZhbCcsICdzbWRfYmlvJywgdHJ1ZSwgJHN3aXRj aF9kaXIsICcnLCAnJywgKCd2YWwnID09ICRzb3J0KSA/ICRkaXIgOiAnJykuCgkJCWNvbHVt bl9oZWFkKHNtZF9iaW9fZ1R4dCgncG9zaXRpb24nKSwgJ3Bvc2l0aW9uJywgJ3NtZF9iaW8n LCB0cnVlLCAkc3dpdGNoX2RpciwgJycsICcnLCAoJ3Bvc2l0aW9uJyA9PSAkc29ydCkgPyAk ZGlyIDogJycpLgoJCQloQ2VsbCgpLgoJCQloQ2VsbCgpCgkJKTsKCgkJd2hpbGUgKCRhID0g bmV4dFJvdygkcnMpKSB7CgkJCWV4dHJhY3QoZG9TcGVjaWFsKCRhKSk7CgoJCQllY2hvIHRy KAoJCQkJdGQoJG5hbWUpLgoJCQkJdGQoJHRpdGxlKS4KCQkJCXRkKCRzbWRfYmlvX3R5cGVz WyR0eXBlXSkuCgkJCQl0ZCgkc2l6ZSkuCgkJCQl0ZCgkdmFsLDIwMCkuCgkJCQl0ZCgkcG9z aXRpb24pLgoJCQkJdGQoZUxpbmsoJ3NtZF9iaW8nLCAnbWV0YV9lZGl0JywgJ2lkJywgJGlk LCBnVHh0KCdlZGl0JykpKS4KCQkJCXRkKGRMaW5rKCdzbWRfYmlvJywgJ3NtZF9iaW9fbWV0 YV9kZWwnLCAnaWQnLCAkaWQsIDEsICduYW1lJywgJG5hbWUpKQoJCQkpOwoJCX0KCgkJZWNo byBlbmRUYWJsZSgpLic8L2Zvcm0+JzsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmZ1bmN0aW9uIHNtZF9iaW9fbWV0YV9tYWtlX2xpc3QoJHZhbCkgewoJJHd2YWxzID0g ZG9fbGlzdCgkdmFsLCAnXHJcbicpOwoJaWYgKGNvdW50KCR3dmFscykgPT0gMSkgewoJCSR3 dmFscyA9IGRvX2xpc3QoJHZhbCk7Cgl9CglyZXR1cm4gam9pbignLCAnLCBkb0FycmF5KCR3 dmFscywgJ3RyaW0nKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biBzbWRfYmlvX21ldGFfc2F2ZSgpIHsKCWV4dHJhY3QoZG9TbGFzaChwc2EoYXJyYXkoJ2lk JywgJ25hbWUnLCAndGl0bGUnLCAndHlwZScsICdzaXplJywgJ3ZhbCcsICdwb3NpdGlvbicp KSkpOwoJJGlkID0gYXNzZXJ0X2ludCgkaWQpOwoJJHZhbCA9IHNtZF9iaW9fbWV0YV9tYWtl X2xpc3QoJHZhbCk7CgoJJHJzID0gc2FmZV91cGRhdGUoU01EX0JJT19NRVRBLCAiCgkJdGl0 bGUgPSAnJHRpdGxlJywKCQl0eXBlID0gJyR0eXBlJywKCQlzaXplID0gJyRzaXplJywKCQl2 YWwgPSAnJHZhbCcsCgkJcG9zaXRpb24gPSAnJHBvc2l0aW9uJyIsCgkJImlkID0gJGlkIgoJ KTsKCglpZiAoJHJzKSB7CgkJc21kX2Jpb19jb25maWcoCgkJCXNtZF9iaW9fZ1R4dCgnbWV0 YV91cGRhdGVkJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKQoJCSk7Cgl9Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfYmlvX21ldGFfYWRkKCkgewoJ ZXh0cmFjdChkb1NsYXNoKHBzYShhcnJheSgnbmFtZScsICd0aXRsZScsICd0eXBlJywgJ3Np emUnLCAndmFsJywgJ3Bvc2l0aW9uJykpKSk7CgkkbmFtZSA9IHNtZF9iaW9fc2FuaXRpemUo JG5hbWUpOwoKCWlmICghZW1wdHkoJG5hbWUpICYmIHNtZF9iaW9fbWV0YV9jaGVjaygkbmFt ZSkpIHsKCQkkc2l6ZSA9IChlbXB0eSgkc2l6ZSkpID8gMjUgOiAkc2l6ZTsKCQkvL1RPRE86 IG1ha2UgdGhlIHNlbGVjdGlvbiBvZiBjb2x1bW4gbW9yZSBpbnRlbGxpZ2VudCBiYXNlZCBv biB0aGUgZ2l2ZW4gdHlwZQoJCWlmICgkdHlwZSA9PSAndGV4dGFyZWEnKSB7CgkJCSRhc2l6 ZSA9ICc0MDk2JzsgLy9UT0RPOiBGaW5kIGEgd2F5IHRvIHVzZXIgc3BlY2lmeSB0aGlzCgkJ CSRjb2x0eXBlID0gJ3RleHQnOwoJCX0gZWxzZSB7CgkJCSRhc2l6ZSA9ICc2NCc7IC8vVE9E TzogRmluZCBhIHdheSB0byB1c2VyIHNwZWNpZnkgdGhpcwoJCQkkY29sdHlwZSA9ICd2YXJj aGFyJzsKCQl9CgkJJHJldCA9IHNhZmVfYWx0ZXIoU01EX0JJTywgIkFERCBgJG5hbWVgICRj b2x0eXBlKCRhc2l6ZSkgTlVMTCIpOwoJCSR2YWwgPSBzbWRfYmlvX21ldGFfbWFrZV9saXN0 KCR2YWwpOwoKCQlpZiAoJHJldCkgewoJCQkkcnMgPSBzYWZlX2luc2VydChTTURfQklPX01F VEEsICIKCQkJCW5hbWUgPSAnJG5hbWUnLAoJCQkJdGl0bGUgPSAnJHRpdGxlJywKCQkJCXR5 cGUgPSAnJHR5cGUnLAoJCQkJc2l6ZSA9ICckc2l6ZScsCgkJCQl2YWwgPSAnJHZhbCcsCgkJ CQlwb3NpdGlvbiA9ICckcG9zaXRpb24nCgkJCSIpOwoKCQkJaWYgKCRycykgewoJCQkJc21k X2Jpb19jb25maWcoc21kX2Jpb19nVHh0KCdtZXRhX2FkZGVkJykpOwoJCQkJcmV0dXJuOwoJ CQl9CgkJCQkJfQoJfQoKCXNtZF9iaW9fY29uZmlnKGFycmF5KHNtZF9iaW9fZ1R4dCgnbWV0 YV9ub3RfYWRkZWQnKSwgRV9FUlJPUikpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gc21kX2Jpb19tZXRhX2RlbCgpIHsKCWV4dHJhY3QoZ3BzYShhcnJheSgn aWQnLCduYW1lJykpKTsKCgkkaWQgPSBhc3NlcnRfaW50KCRpZCk7CgkkbWVzc2FnZSA9IHNt ZF9iaW9fZ1R4dCgnbWV0YV9ub3RfZGVsZXRlZCcpOwoKCSRleGlzdHMgPSBzbWRfYmlvX21l dGFfY2hlY2soJG5hbWUpOwoJJHJldCA9IEBzYWZlX2FsdGVyKFNNRF9CSU8sICJEUk9QIENP TFVNTiBgJG5hbWVgIik7CglpZiAoJHJldCB8fCAkZXhpc3RzKSB7CgkJJHJldCA9IHNhZmVf ZGVsZXRlKFNNRF9CSU9fTUVUQSwgImlkPSckaWQnIik7CgkJJG1lc3NhZ2UgPSBzbWRfYmlv X2dUeHQoJ21ldGFfZGVsZXRlZCcpOwoJfQoKCXNtZF9iaW9fY29uZmlnKCRtZXNzYWdlKTsK fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9fbWV0YV9j aGVjaygkY29sKSB7CgkkdWNvbHMgPSBnZXRUaGluZ3MoJ2Rlc2NyaWJlIGAnLlBGWC4ndHhw X3VzZXJzYCcpOwoJJGJjb2xzID0gZ2V0VGhpbmdzKCdkZXNjcmliZSBgJy5QRlguU01EX0JJ Ty4nYCcpOwoJJGNvbHMgPSBhcnJheV9tZXJnZSgkdWNvbHMsICRiY29scyk7CiAJcmV0dXJu ICghaW5fYXJyYXkoJGNvbCwgJGNvbHMpKTsKfQoKCi8vICoqKioqKioqKioqKioqKioqKioq KioqKgovLyBUQUJMRSBHRU5FUkFUSU9OCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBzbWRfYmlvX3RhYmxlX2V4aXN0KCkgewoJaWYgKGdwcygnZGVidWcnKSkgewoJ CWVjaG8gIisrIFRBQkxFICIuU01EX0JJT19NRVRBLiIgSEFTICIuY291bnQoQHNhZmVfc2hv dygnY29sdW1ucycsIFNNRF9CSU9fTUVUQSkpLiIgQ09MVU1OUzsiOwoJfQoJcmV0dXJuKEBz YWZlX3Nob3coJ2NvbHVtbnMnLCBTTURfQklPX01FVEEpKTsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9iaW9faW5zdGFsbCgkbWVzc2FnZSkgewoJZ2xv YmFsICRzbWRfYmlvX3R5cGVzOwoKCSR2ZXJzaW9uID0gbXlzcWxfZ2V0X3NlcnZlcl9pbmZv KCk7CgkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID0gMDsKCWlmICgkdmVyc2lvbiA8ICI0 LjEuMiIpIHsKCQkkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddKys7CgkJdHJpZ2dlcl9lcnJv cigic21kX2JpbyByZXF1aXJlcyBNeVNRTCB2NC4xLjIgb3IgZ3JlYXRlci4iKTsKCX0gZWxz ZSB7CgkJJHJldCA9ICcnOwoJCSRzcWwgPSBhcnJheSgpOwoJCSRzcWxbXSA9ICJDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX0JJTy4iYCAoCgkJCWB1c2VyX3JlZmAg dmFyY2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAnJywKCQkJVU5JUVVFIEtFWSBgdXNlcl9y ZWZgIChgdXNlcl9yZWZgKQoJCSkgRU5HSU5FPU15SVNBTSBQQUNLX0tFWVM9MSAiOwoKCQkk c3FsW10gPSAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYCIuUEZYLlNNRF9CSU9fTUVU QS4iYCAoCgkJCWBpZGAgaW50KDQpIE5PVCBOVUxMIGF1dG9faW5jcmVtZW50LAoJCQlgdGl0 bGVgIHZhcmNoYXIoNjQpIE5VTEwgZGVmYXVsdCAnJywKCQkJYG5hbWVgIHZhcmNoYXIoNjQp IE5PVCBOVUxMIGRlZmF1bHQgJycsCgkJCWB0eXBlYCBzZXQoIi5kb1F1b3RlKGpvaW4oIics JyIsIGFycmF5X2tleXMoJHNtZF9iaW9fdHlwZXMpKSkuIikgTk9UIE5VTEwgZGVmYXVsdCAn dGV4dF9pbnB1dCcsCgkJCWBzaXplYCB2YXJjaGFyKDEwKSBOVUxMIGRlZmF1bHQgMCwKCQkJ YHZhbGAgdGV4dCBOVUxMIGRlZmF1bHQgJycsCgkJCWBwb3NpdGlvbmAgdGlueWludCgzKSBO VUxMIGRlZmF1bHQgMCwKCQkJUFJJTUFSWSBLRVkgKGBpZGApLAoJCQlVTklRVUUgS0VZIChg bmFtZWApCgkJKSBFTkdJTkU9TXlJU0FNIEFVVE9fSU5DUkVNRU5UPTEiOwoKCQlpZihncHMo J2RlYnVnJykpIHsKCQkJZG1wKCRzcWwpOwoJCX0KCQlmb3JlYWNoICgkc3FsIGFzICRxcnkp IHsKCQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7CgkJCWlmICgkcmV0PT09ZmFsc2UpIHsK CQkJCSRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsKCQkJCWVjaG8gIjxiPiIuJEdMT0JB TFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNxbF9lcnJvcigpLiI8YnIgLz5cbiI7 CgkJCQllY2hvICI8IS0tXG4gJHFyeSBcbi0tPlxuIjsKCQkJfQoJCX0KCX0KCglpZiAoJEdM T0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7CgkJJG1lc3NhZ2UgPSBzbWRfYmlvX2dU eHQoJ3RibF9pbnN0YWxsZWQnKTsKCQlzbWRfYmlvX2NvbmZpZygkbWVzc2FnZSk7Cgl9IGVs c2UgewoJCSRtZXNzYWdlID0gc21kX2Jpb19nVHh0KCd0Ymxfbm90X2luc3RhbGxlZCcpOwoJ CXNtZF9iaW9fY29uZmlnKCRtZXNzYWdlKTsKCX0KfQoKLy8gKioqKioqKioqKioqKioqKioq KioqKioqCi8vIENMSUVOVC1TSURFIFRBR1MKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIHNtZF9iaW9faW5mbygkYXR0cywgJHRoaW5nPU5VTEwpIHsKCWdsb2JhbCAk dGhpc2FydGljbGU7CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQknYXV0aG9yJyA9PiAnJywK CQknaXRlbXMnID0+ICdTTURfQUxMJywKCQknZXhjbHVkZScgPT4gJycsCgkJJ2Zvcm0nID0+ ICcnLAoJCSd3cmFwdGFnJyA9PiAnJywKCQknYnJlYWsnID0+ICcnLAoJCSdjbGFzcycgPT4g JycsCgkJJ2xhYmVsJyA9PiAnMScsCgkJJ2xhYmVsdGFnJyA9PiAnJywKCQknbGFiZWxjbGFz cycgPT4gJ1NNRF9ERkxUJywKCQknaXRlbXdyYXB0YWcnID0+ICcnLAoJCSdpdGVtY2xhc3Mn ID0+ICdTTURfREZMVCcsCgkJJ2RlYnVnJyA9PiAnMCcsCgkpLCAkYXR0cykpOwoKCSRhdXRo b3IgPSAoJGF1dGhvcikgPyAkYXV0aG9yIDogKGlzc2V0KCR0aGlzYXJ0aWNsZSkgPyAkdGhp c2FydGljbGVbJ2F1dGhvcmlkJ10gOiAnJyk7CgkkYXV0aG9yID0gZG9fbGlzdCgkYXV0aG9y KTsKCSRhdXRob3JzID0gYXJyYXkoKTsKCSR0aGluZyA9IChlbXB0eSgkZm9ybSkpID8gJHRo aW5nIDogZmV0Y2hfZm9ybSgkZm9ybSk7CgoJLy8gRXhwYW5kIGFueSBwcml2IGxldmVscwoJ Zm9yZWFjaCAoJGF1dGhvciBhcyAkdXNlcikgewoJCWlmIChzdHJwb3Moc3RydG9sb3dlcigk dXNlciksICJzbWRfcHJpdnMiKSA9PT0gMCkgewoJCQkkYXByaXZzID0gZXhwbG9kZSgnOics ICR1c2VyKTsKCQkJYXJyYXlfc2hpZnQoJGFwcml2cyk7IC8vIFJlbW92ZSBzbWRfcHJpdnMg dG9rZW4gZnJvbSB0aGUgYXJyYXkKCQkJJGF1dGhvcnMgPSBhcnJheV9tZXJnZSgkYXV0aG9y cywgc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhwX3VzZXJzJywgJ3ByaXZzIGluICgnIC4gZG9R dW90ZShqb2luKCInLCciLCAkYXByaXZzKSkgLiAnKScpKTsKCQl9IGVsc2UgewoJCQkkYXV0 aG9yc1tdID0gJHVzZXI7CgkJfQoJfQoKCSRpdGVtcyA9IGRvX2xpc3QoJGl0ZW1zKTsKCgkk ZXhjbHVkZSA9IGRvX2xpc3QoJGV4Y2x1ZGUpOwoJJGZpbmFsID0gJyc7CgoJLy8gVGhlIGlu ZGljZXMgYXJlIHRoZSBnVHh0KCkgbmFtZXMgZm9yIHRoZSBhc3NvY2lhdGVkIGl0ZW0KCSRj b3JlQ29scyA9IGFycmF5KCdpZCcgPT4gJ3VzZXJfaWQnLCAnbmFtZScgPT4gJ25hbWUnLCAn cmVhbF9uYW1lJyA9PiAnUmVhbE5hbWUnLCAnZW1haWwnID0+ICdlbWFpbCcsICdwcml2aWxl Z2VzJyA9PiAncHJpdnMnLCAnZGF0ZScgPT4gJ2xhc3RfYWNjZXNzJyk7CgoJaWYgKCRhdXRo b3JzKSB7CgkJJG1ldGEgPSBzYWZlX3Jvd3MoJyonLCBTTURfQklPX01FVEEsICcxPTEnKTsK CQkkY21ldGEgPSBzYWZlX3Nob3coJ2NvbHVtbnMnLCAndHhwX3VzZXJzJyk7CgkJJG51bSA9 IGNvdW50KCRtZXRhKTsKCQkkbGlzdF90eXBlcyA9IGFycmF5KCdjaGVja2JveCcsICdyYWRp bycsICdsaXN0Jyk7CgoJCWZvcmVhY2goJGNtZXRhIGFzICRpbmZvKSB7CgkJCWlmICghaW5f YXJyYXkoJGluZm9bJ0ZpZWxkJ10sICRjb3JlQ29scykpIGNvbnRpbnVlOwoJCQkkbWV0YVsk bnVtXVsnbmFtZSddID0gJGluZm9bJ0ZpZWxkJ107CgkJCSR0RmllbGQgPSBqb2luKCcnLCBh cnJheV9rZXlzKCRjb3JlQ29scywgJGluZm9bJ0ZpZWxkJ10pKTsKCQkJJG1ldGFbJG51bV1b J3RpdGxlJ10gPSAoZ1R4dCgkdEZpZWxkKSA9PSAkdEZpZWxkKSA/IHNtZF9iaW9fZ1R4dCgk dEZpZWxkKSA6IGdUeHQoJHRGaWVsZCk7CgkJCSRsZW5ndGggPSAoKCRvZmYgPSBzdHJwb3Mo JGluZm9bJ1R5cGUnXSwgJygnKSkgIT09IGZhbHNlKSA/ICRvZmYgOiBzdHJsZW4oJGluZm9b J1R5cGUnXSk7IC8vIEZpbmQgdGhlIGZpcnN0IG9wZW4gYnJhY2tldCBvciBlbmQgb2Ygc3Ry aW5nCgkJCSRtZXRhWyRudW1dWyd0eXBlJ10gPSBzdWJzdHIoJGluZm9bJ1R5cGUnXSwgMCwg JGxlbmd0aCk7CgkJCSRudW0rKzsKCQl9CgkJaWYgKCRkZWJ1ZyA+IDEpIHsKCQkJZWNobyAn KysgTUVUQSBEQVRBICsrJzsKCQkJZG1wKCRtZXRhKTsKCQl9CgoJCS8vIEV4Y2x1c2lvbnMg b3ZlcnJpZGUgZ2l2ZW4gaXRlbXMKCQlpZiAoJGV4Y2x1ZGVbMF0gIT0gJycgfHwgaW5fYXJy YXkoJ1NNRF9BTEwnLCAkaXRlbXMpKSB7CgkJCSRpdGVtcyA9IHNhZmVfY29sdW1uKCduYW1l JywgU01EX0JJT19NRVRBLCAnMT0xJyk7CgkJCSRpdGVtcyA9IGFycmF5X21lcmdlKCRpdGVt cywgJGNvcmVDb2xzKTsKCQl9CgoJCWZvcmVhY2ggKCRhdXRob3JzIGFzICR1c2VyKSB7CgkJ CSRjYmlvID0gc2FmZV9yb3coJyonLCAndHhwX3VzZXJzJywgIm5hbWU9JyR1c2VyJyIpOwoJ CQkkZWJpbyA9IHNhZmVfcm93KCcqJywgU01EX0JJTywgInVzZXJfcmVmPSckdXNlciciKTsK CQkJJGlkeCA9IC0xOwoJCQkkb3V0ID0gYXJyYXkoKTsKCQkJJHJlcGxhY2VtZW50cyA9IGFy cmF5KCk7CgoJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGlyZWYgPT4gJHdoYXRub3QpIHsKCQkJ CWlmIChpbl9hcnJheSgkd2hhdG5vdCwgJGV4Y2x1ZGUpKSBjb250aW51ZTsKCgkJCQkvLyBG aW5kIHRoZSBtZXRhIHJvdwoJCQkJZm9yZWFjaCAoJG1ldGEgYXMgJG51bSA9PiAkZGF0YSkg ewoJCQkJCWlmICgkZGF0YVsnbmFtZSddID09ICR3aGF0bm90KSB7CgkJCQkJCSRpZHggPSAk bnVtOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQlpZiAoJGlkeCA+IC0xKSB7CgkJ CQkJaWYgKGluX2FycmF5KCR3aGF0bm90LCAkY29yZUNvbHMpKSB7CgkJCQkJCSRyb3cgPSBp c3NldCgkY2Jpb1skd2hhdG5vdF0pID8gJGNiaW9bJHdoYXRub3RdIDogJyc7CgkJCQkJfSBl bHNlIHsKCQkJCQkJJHJvdyA9IGlzc2V0KCRlYmlvWyR3aGF0bm90XSkgPyAkZWJpb1skd2hh dG5vdF0gOiAnJzsKCQkJCQl9CgoJCQkJCWlmICgkcm93KSB7CgkJCQkJCWlmIChpbl9hcnJh eSgkbWV0YVskaWR4XVsndHlwZSddLCAkbGlzdF90eXBlcykpIHsKCQkJCQkJCSRyb3cgPSBk b19saXN0KCRyb3cpOwoJCQkJCQkJJHJvdyA9IGpvaW4oJywgJywkcm93KTsKCQkJCQkJfQoJ CQkJCQkkdGhlQ2xhc3MgPSAoJGl0ZW1jbGFzcz09J1NNRF9ERkxUJykgPyAnIHNtZF9iaW9f Jy4kbWV0YVskaWR4XVsnbmFtZSddIDogKCgkaXRlbWNsYXNzKSA/ICRpdGVtY2xhc3MgOiAn Jyk7CgkJCQkJCSRsYWJDbGFzcyA9ICgkbGFiZWxjbGFzcz09J1NNRF9ERkxUJykgPyAnIHNt ZF9iaW9fJy4kbWV0YVskaWR4XVsnbmFtZSddIDogKCgkbGFiZWxjbGFzcykgPyAkbGFiZWxj bGFzcyA6ICcnKTsKCQkJCQkJJHRoZVRpdGxlID0gJG1ldGFbJGlkeF1bJ3RpdGxlJ107CgkJ CQkJCSR0aGVOYW1lID0gJG1ldGFbJGlkeF1bJ25hbWUnXTsKCQkJCQkJJHJlcGxhY2VtZW50 c1sne3NtZF9iaW9faW5mb19pdGVtfSddID0gJHJvdzsKCQkJCQkJaWYgKGluX2FycmF5KCRt ZXRhWyRpZHhdWyd0eXBlJ10sICRsaXN0X3R5cGVzKSkgewoJCQkJCQkJJGNob3NlbnMgPSBk b19saXN0KCRyb3cpOwoJCQkJCQkJJG52ID0gc21kX2Jpb19zcGxpdHZhbCgkbWV0YVskaWR4 XVsndmFsJ10pOwoJCQkJCQkJbGlzdCgkbnYsICRkZmx0KSA9IHNtZF9iaW9fZ2V0X2RlZmF1 bHQoJG52LCAkcm93KTsKCQkJCQkJCSRsaXN0Y3RyPTE7CgkJCQkJCQkkY2hvc2VuY3RyPTA7 CgkJCQkJCQlmb3JlYWNoKCRudiBhcyAkbGlzdGl0ZW0gPT4gJGxpc3RsYWJlbCkgewoJCQkJ CQkJCSRyZXBsYWNlbWVudHNbJ3tzbWRfYmlvXycuJHRoZU5hbWUuJ19pdGVtXycuJGxpc3Rj dHIuJ30nXSA9ICRsaXN0aXRlbTsKCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb18n LiR0aGVOYW1lLidfbGFiZWxfJy4kbGlzdGN0ci4nfSddID0gJGxpc3RsYWJlbDsKCQkJCQkJ CQlpZiAoaW5fYXJyYXkoJGxpc3RpdGVtLCAkY2hvc2VucykpIHsKCQkJCQkJCQkJJGNob3Nl bmN0cisrOwoJCQkJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb18nLiR0aGVOYW1lLidf Y2hvc2VuXycuJGNob3NlbmN0ci4nfSddID0gJGxpc3RpdGVtOwoJCQkJCQkJCQkkcmVwbGFj ZW1lbnRzWyd7c21kX2Jpb18nLiR0aGVOYW1lLidfY2hvc2VuX2xhYmVsXycuJGNob3NlbmN0 ci4nfSddID0gJGxpc3RsYWJlbDsKCQkJCQkJCQl9CgkJCQkJCQkJJGxpc3RjdHIrKzsKCQkJ CQkJCX0KCQkJCQkJCSRyZXBsYWNlbWVudHNbJ3tzbWRfYmlvXycuJHRoZU5hbWUuJ19jb3Vu dH0nXSA9ICRsaXN0Y3RyLTE7CgkJCQkJCQkkcmVwbGFjZW1lbnRzWyd7c21kX2Jpb18nLiR0 aGVOYW1lLidfY2hvc2VuX2NvdW50fSddID0gJGNob3NlbmN0cjsKCQkJCQkJfQoJCQkJCQkk cmVwbGFjZW1lbnRzWyd7c21kX2Jpb19pbmZvX25hbWV9J10gPSAkdGhlTmFtZTsKCQkJCQkJ JHJlcGxhY2VtZW50c1sne3NtZF9iaW9faW5mb190aXRsZX0nXSA9ICR0aGVUaXRsZTsKCQkJ CQkJJHJlcGxhY2VtZW50c1sne3NtZF9iaW9faW5mb19pdGVtY2xhc3N9J10gPSAkdGhlQ2xh c3M7CgkJCQkJCSRyZXBsYWNlbWVudHNbJ3tzbWRfYmlvX2luZm9fbGFiZWxjbGFzc30nXSA9 ICRsYWJDbGFzczsKCQkJCQkJJHJlcGxhY2VtZW50c1sne3NtZF9iaW9fJy4kdGhlTmFtZS4n fSddID0gJHJvdzsKCQkJCQkJaWYgKCRkZWJ1ZykgewoJCQkJCQkJZWNobyAnKysgUkVQTEFD RU1FTlRTICsrJzsKCQkJCQkJCWRtcCgkcmVwbGFjZW1lbnRzKTsKCQkJCQkJfQoJCQkJCQkk dG9QYXJzZSA9ICghZW1wdHkoJHRoaW5nKSkgPyAkdGhpbmcgOiAodGFnKCgoJGxhYmVsPT0x KSA/ICR0aGVUaXRsZSA6ICgoJGxhYmVsPT0nJykgPyAnJyA6ICgoJGxhYmVsKSA/ICRsYWJl bCA6ICR0aGVOYW1lKSkpLCAoKCRsYWJlbHRhZyk/JGxhYmVsdGFnOidici8nKSwgKCgkbGFi ZWxjbGFzcyk/ICcgY2xhc3M9IicuJGxhYkNsYXNzLiciJyA6ICcnKSkuKCgkaXRlbXdyYXB0 YWcpID8gZG9UYWcoJHJvdywgJGl0ZW13cmFwdGFnLCAkdGhlQ2xhc3MpOiAkcm93KSk7CgoJ CQkJCQkkb3V0W10gPSBwYXJzZShzdHJ0cigkdG9QYXJzZSwgJHJlcGxhY2VtZW50cykpOwoJ CQkJCX0KCQkJCX0KCQkJfQoKCQkJJGZpbmFsIC49ICgkd3JhcHRhZykgPyBkb1dyYXAoJG91 dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzKSA6IGpvaW4oJycsICRvdXQpOwoJCX0KCX0K CXJldHVybiAkZmluYWw7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBBIHdy YXBwZXIgdG8gYXJ0aWNsZV9jdXN0b20gdGhhdCBhdXRvIHNldHMgdGhlIHVzZXIgdG8gdGhl IG9uZSBzcGVjaWZpZWQKLy8gb3IgdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIGF1dGhvci4KLy8g Tk9URTogbEF0dHMoKSBpcyBOT1QgdXNlZCBiZWNhdXNlIHRoYXQgbGltaXRzIHRoZSBwbHVn aW4gYXR0cmlidXRlcy4KZnVuY3Rpb24gc21kX2Jpb19hcnRpY2xlcygkYXR0cywgJHRoaW5n PU5VTEwpIHsKCWdsb2JhbCAkdGhpc2FydGljbGU7CgoJJGF1dGhvciA9IChpc3NldCgkYXR0 c1snYXV0aG9yJ10pKSA/ICRhdHRzWydhdXRob3InXSA6IChpc3NldCgkdGhpc2FydGljbGUp ID8gJHRoaXNhcnRpY2xlWydhdXRob3JpZCddIDogJycpOwoJJGF0dHNbJ2F1dGhvciddID0g JGF1dGhvcjsKCXJldHVybiBwYXJzZUFydGljbGVzKCRhdHRzLCAnMScsICR0aGluZyk7Cn0K Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBQbHVnaW4tc3BlY2lmaWMgcmVwbGFj ZW1lbnQgc3RyaW5ncyAtIGxvY2FsaXNlIGFzIHJlcXVpcmVkCmZ1bmN0aW9uIHNtZF9iaW9f Z1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7CgkkbGFuZyA9IGFycmF5KAoJCSdhZG1p bl90YWInID0+ICdCaW8gQ29uZmlnJywKCQknaGVscCcgPT4gJ1RpcCcsCgkJJ2hlbHBfdW51 c2VkJyA9PiAnVW51c2VkIGZvciB0aGlzIFR5cGUnLAoJCSdpZCcgPT4gJ0lEJywKCQknbmFt ZScgPT4gJ05hbWUnLAoJCSdtZXRhX2FkZCcgPT4gJ0FkZCBiaW8gaXRlbScsCgkJJ21ldGFf YWRkZWQnID0+ICdCaW8gaXRlbSBhZGRlZCcsCgkJJ21ldGFfbm90X2FkZGVkJyA9PiAnUHJv YmxlbSBhZGRpbmcgYmlvIGl0ZW06IGNoZWNrIG5hbWUgaXMgbm90IGFscmVhZHkgdXNlZCcs CgkJJ21ldGFfZGVsZXRlZCcgPT4gJ0JpbyBpdGVtIGFuZCBhbGwgaXRzIGRhdGEgZGVsZXRl ZCcsCgkJJ21ldGFfbm90X2RlbGV0ZWQnID0+ICdQcm9ibGVtIGRlbGV0aW5nIGJpbyBpdGVt OiBpdCBtYXkgc3RpbGwgZXhpc3QnLAoJCSdtZXRhX2VkaXQnID0+ICdFZGl0IGJpbyBpdGVt JywKCQknbWV0YV91cGRhdGVkJyA9PiAnQmlvIGl0ZW0gIntuYW1lfSIgdXBkYXRlZCcsCgkJ J3Bvc2l0aW9uJyA9PiAnUG9zaXRpb24nLAoJCSdwcml2aWxlZ2VzJyA9PiAnUHJpdmlsZWdl cycsCgkJJ3JlYWxfbmFtZScgPT4gJ0Z1bGwgbmFtZScsCgkJJ3NpemUnID0+ICdTaXplJywK CQknc2l6ZWhlbHBfdGV4dF9pbnB1dCcgPT4gJ1VwIHRvIHR3byB2YWx1ZXMgc3BlY2lmeWlu ZyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnM6IDEpIG9mIHRoZSBpbnB1dCBib3ggb24gdGhl IEFkbWluLT5Vc2VycyB0YWIsIDIpIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZW50ZXInLAoJ CSdzaXplaGVscF90ZXh0YXJlYScgPT4gJ1VwIHRvIHR3byB2YWx1ZXMgc3BlY2lmeWluZyB0 aGUgZGltZW5zaW9ucyBvZiB0aGUgdGV4dGFyZWEgaW4gY2hhcmFjdGVyczogMSkgV2lkdGgs IDIpIEhlaWdodCcsCgkJJ3NpemVoZWxwX2ltYWdlJyA9PiAnVGhlIHgsIHkgZGltZW5zaW9u cyBvZiB0aGUgaW1hZ2UvdGh1bWJuYWlsIG9uIHRoZSBBZG1pbi0+VXNlcnMgdGFiLiBJZiBv bmx5IG9uZSB2YWx1ZSBpcyBnaXZlbiwgdGhlIGltYWdlIHdpbGwgYmUgc3F1YXJlLiBJZiBl aXRoZXIgdmFsdWUgaXMgb21pdHRlZCwgdGhlIGRpbWVuc2lvbnMgc3RvcmVkIGluIHRoZSBk YXRhYmFzZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCcsCgkJJ3ZhbGhlbHBfdGV4dF9pbnB1dCcg PT4gJ1RoZSBkZWZhdWx0IHZhbHVlIHRoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIHRleHQgYm94 JywKCQkndmFsaGVscF9scmMnID0+ICdDb21tYS0gb3IgbmV3bGluZS1zZXBhcmF0ZWQgbGlz dCBvZiBhdmFpbGFibGUgb3B0aW9ucyBpbiB0aGUgc2V0LiBJZiB5b3UgbGlzdCBvbmx5IGl0 ZW0gbGFiZWxzLCB0aGUgbmFtZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIChs b3dlciBjYXNlLCBubyBzcGFjZXMpLiBZb3UgbWF5IHNwZWNpZnkgeW91ciBvd24gbmFtZXMg dXNpbmc6IG5hbWUxID0+IExhYmVsIDEsIG5hbWUyIC0+IExhYmVsIDIsIC4uLicsCgkJJ3Zh bGhlbHBfeW5yJyA9PiAnRGVmYXVsdCB2YWx1ZSBvZiB0aGUgWWVzL05vIGNoZWNrYm94LiAw IChvciBvbWl0dGVkKSA9IE5vOyAxID0gWWVzJywKCQkndmFsaGVscF9pbWFnZScgPT4gJ0xp bWl0IHRoZSBpbWFnZXMgaW4gdGhlIGRyb3Bkb3duIHRvIHRoZSBvbmVzIGluIHRoaXMgZ2l2 ZW4gcGFyZW50IGltYWdlIGNhdGVnb3J5LiBJZiBvbWl0dGVkLCBhbGwgaW1hZ2VzIGFyZSBh dmFpbGFibGUnLAoJCSd0YmxfaW5zdGFsbGVkJyA9PiAnVGFibGVzIGluc3RhbGxlZC4nLAoJ CSd0Ymxfbm90X2luc3RhbGxlZCcgPT4gJ1RhYmxlcyBOT1QgaW5zdGFsbGVkLicsCgkJJ3Rp dGxlJyA9PiAnVGl0bGUnLAoJCSd0eXBlJyA9PiAnVHlwZScsCgkJJ3ZhbHVlJyA9PiAnVmFs dWUnLAoJKTsKCXJldHVybiBzdHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsKfSI7czo0OiJ0 eXBlIjtzOjE6IjEiO3M6NToiZmxhZ3MiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1Ijtz OjM6Im1kNSI7czozMjoiOTI3M2RjOWY1ZjQxNGI2NWY5OWFmM2U3ZTMxZTQxMjYiO30=