<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>Gallery</name>
	<version>1.0.1</version>
  <mincmsversion>1.6</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5UaGUgR2FsbGVyeSBtb2R1bGUgaXMgYW4gZWFzeSB0byB1c2UgcGhvdG8gZ2FsbGVyeSB3aGljaCBhdXRvbWF0aWNhbGx5IHNob3dzIHRoZSBpbWFnZXMgb2YgYSBzcGVjaWZpZWQgZGlyZWN0b3J5LiBTdWJkaXJlY3RvcmllcyB3aWxsIGJlIHNob3duIGFzIHN1YmdhbGxlcmllcy4gSXQgaGFzIGxvdHMgb2YgZmVhdHVyZXMsIHN1Y2ggYXMgYXV0b21hdGljIHRodW1ibmFpbGluZywgdGhlIHVzZSBvZiBtdWx0aXBsZSBMaWdodGJveC1saWtlIHRlbXBsYXRlcyBvciBhbnkgY3NzL2phdmFzY3JpcHQgdGVtcGxhdGUgeW91IGxpa2UsIGFuZCB5b3UgY2FuIGdpdmUgdGl0bGVzIGFuZCBkZXNjcmlwdGlvbnMgdG8geW91ciBnYWxsZXJpZXMgYXMgd2VsbCBhcyB5b3VyIHBob3Rvcy48L3A+DQo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCjxwPkZpcnN0LCBpbnNlcnQgdGhlIG1vZHVsZSB3aXRoIHRoZSAmIzEyMztHYWxsZXJ5fSB0YWcgaW50byB5b3VyIHBhZ2Ugb3IgdGVtcGxhdGUgYW55d2hlcmUgeW91IHdoaXNoLiBUaGVuIHVwbG9hZCBzb21lIGltYWdlcyB3aXRoIHRoZSBJbWFnZSBNYW5hZ2VyLCBGaWxlIE1hbmFnZXIgKGUuZy4gbXVsdGlwbGUgaW1hZ2VzIGluIHppcGZpbGUpIG9yIEZUUCB0byB0aGUgdXBsb2Fkcy9pbWFnZXMvR2FsbGVyeS8gZGlyZWN0b3J5LjwvcD4NCjxwPlRoYXQncyBpdCE8L3A+DQo8cD5JZiB5b3Ugd2FudCBtb3JlIHBob3RvIGdhbGxlcmllcywgc2ltcGx5IGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBhbmQgdXBsb2FkIHlvdXIgcGhvdG9zIGFzIGRlc2NyaWJlZC4gQnkgYWRkaW5nIHBhcmFtZXRlcnMgdG8gdGhlICYjMTIzO0dhbGxlcnl9IHRhZywgeW91IGNhbiBlYXNpbHkgbWFuaXB1bGF0ZSB3aGljaCBzdWJnYWxsZXJ5IHdpbGwgYmUgc2hvd24gaW4gd2hpY2ggdGVtcGxhdGUsIGUuZy4gJiMxMjM7R2FsbGVyeSBkaXI9ImhvbGlkYXlzL05ldGhlcmxhbmRzMjAwOSIgdGVtcGxhdGU9IkxpZ2h0Ym94In08L3A+DQo8cD5CeSBkZWZhdWx0IHRoZSB0aHVtYm5haWxzIGZyb20gdGhlIEltYWdlIE1hbmFnZXIgYXJlIHVzZWQgdG8gZGlzcGxheSB0aGUgcGhvdG8gZ2FsbGVyaWVzLjwvcD4NCjxoMz5BZHZhbmNlZCBPcHRpb25zLCBidXQgc3RpbGwgZWFzeSB0byB1c2U8L2gzPg0KPHA+SW4gdGhlIGFkbWluIHNlY3Rpb24geW91IGhhdmUgbG90cyBvZiBvdGhlciBvcHRpb25zOjwvcD4NCjx1bD4NCjxsaT5TZXQgYSBwaG90byBhcyB0aGUgZGVmYXVsdCBmb3IgYSBnYWxsZXJ5LCBzbyBpdCB3aWxsIHNob3cgaW4gdGhlIHBhcmVudCBnYWxsZXJ5IGFzIGEgJ2NvdmVyJyBpbiBzdGVhZCBvZiB0aGUgZGVmYXVsdCBmb2xkZXItaWNvbi48L2xpPg0KPGxpPkdpdmUgdGl0bGVzIGFuZCBkZXNjcmlwdGlvbnMgdG8gZ2FsbGVyaWVzLjwvbGk+DQo8bGk+U2V0IGEgZGVmYXVsdCB0ZW1wbGF0ZSBmb3IgZWFjaCBnYWxsZXJ5LjwvbGk+DQo8bGk+U2V0IHRodW1ibmFpbCBzaXplcyBmb3IgZWFjaCBnYWxsZXJ5LCB3aXRoIHBvc2liaWxpdGllcyB0byBzY2FsZSwgY3JvcCBhbmQvb3Igem9vbSB0aGUgaW1hZ2VzLjwvbGk+DQo8bGk+R2l2ZSB0aXRsZXMgYW5kIGRlc2NyaXB0aW9ucyB0byBwaG90b3MuPC9saT4NCjxsaT5Td2l0Y2ggYSBzcGVjaWZpYyBwaG90byBvciBnYWxsZXJ5IHRvIGluYWN0aXZlLCBwcmV2ZW50aW5nIGl0IGZyb20gZGlzcGxheS48L2xpPg0KPGxpPkVkaXQvY29weSB0ZW1wbGF0ZXMgb3IgY3JlYXRlIG5ldyBvbmVzLiBDaGVjayB0aGUgaW5mby1pY29uIGJlbmVhdGggdGhlIHRlbXBsYXRlLWNvZGUgZm9yIHRoZSBhdmFpbGFibGUgdmFyaWFibGVzLjwvbGk+DQo8L3VsPg0KPHA+SW4gb3JkZXIgdG8gZWRpdCB0ZW1wbGF0ZXMsIHRoZSB1c2VyIG11c3QgYmVsb25nIHRvIGEgZ3JvdXAgd2l0aCB0aGUgJ01vZGlmeSBUZW1wbGF0ZXMnIHBlcm1pc3Npb24uIFRvIGVkaXQgdGhlIGdsb2JhbCBHYWxsZXJ5IG9wdGlvbnMsIHRoZSB1c2VyIG11c3QgYmVsb25nIHRvIGEgZ3JvdXAgd2l0aCB0aGUgJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyBwZXJtaXNzaW9uLjwvcD4NCjxwPkFsbCB0aXRsZXMsIGRlc2NyaXB0aW9ucyBhbmQgc2V0dGluZ3MgYXJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuIFRoZSBkYXRhYmFzZSB3aWxsIHN5bmNocm9uaXplIHdpdGggdGhlIGZpbGVkaXJlY3RvcnkgZWFjaCB0aW1lIHRoZSBhY2NvcmRpbmcgZ2FsbGVyeSBpcyB2aXNpdGVkIGluIHRoZSBHYWxsZXJ5LWFkbWluLiBBIGxpdHRsZSB3YXJuaW5nOiB3aGVuIHlvdSBtb3ZlIGFuIGltYWdlIG9yIHN1YmRpcmVjdG9yeSB0byBhbm90aGVyIGRpcmVjdG9yeSwgeW91IHdpbGwgbG9vc2UgaXRzIHRpdGxlLCBkZXNjcmlwdGlvbiBhbmQgc2V0dGluZ3MuPC9wPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBGZWF0dXJlIFJlcXVlc3Qgb3IgQnVnIFJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBNb2R1bGUgRm9yZ2UNCjxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZ2FsbGVyeS8iPkdhbGxlcnkgUGFnZTwvYT4uPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCg0KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDksIEpvcyA8YSBocmVmPSJtYWlsdG86am9zdmRAbGl2ZS5ubCI+Jmx0O2pvc3ZkQGxpdmUubmwmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGRpcj0ic3ViMS9zdWIyIiAtIFBhcmFtZXRlciB0byBzcGVjaWZ5IGEgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB1cGxvYWRzL2ltYWdlcy9HYWxsZXJ5LzwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gdGVtcGxhdGU9IiIgLSBVc2UgYSBzZXBhcmF0ZSBkYXRhYmFzZSB0ZW1wbGF0ZSBmb3IgZGlzcGxheWluZyB0aGUgcGhvdG8gZ2FsbGVyeS4gVGhpcyB0ZW1wbGF0ZSBtdXN0IGV4aXN0IGFuZCBiZSB2aXNpYmxlIGluIHRoZSB0ZW1wbGF0ZSB0YWIgb2YgdGhlIEdhbGxlcnkgYWRtaW4sIHRob3VnaCBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHRoZSBkZWZhdWx0LiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZSB0ZW1wbGF0ZSB3aGljaCBpcyBhc3NpZ25lZCB0byB0aGUgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCwgZWxzZSB0aGUgZGVmYXVsdCB0ZW1wbGF0ZS48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IG51bWJlcj0iMTAwIiAtIE1heGltdW0gbnVtYmVyIG9mIGltYWdldGh1bWJzIHRvIGRpc3BsYXkgKHBlciBwYWdlKS4gTGVhdmluZyBlbXB0eSB3aWxsIHNob3cgYWxsIGltYWdlcy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHN0YXJ0PSIxIiAtIFN0YXJ0IGF0IHRoZSBudGggaW1hZ2UuIExlYXZpbmcgZW1wdHkgd2lsbCBzdGFydCBhdCB0aGUgZmlyc3QgaW1hZ2UuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBzaG93PSJhbGwiIC0gT3ZlcmlkZSB3aGljaCBpbWFnZXMgaGF2ZSB0byBiZSBzaG93bi4gUG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCjxsaT4nYWN0aXZlJyAtIHRvIGRpc3BsYXkgdGhlIGltYWdlcyBtYXJrZWQgYXMgYWN0aXZlIChkZWZhdWx0KTwvbGk+DQo8bGk+J2luYWN0aXZlJyAtIHRvIGRpc3BsYXkgb25seSB0aGUgaW1hZ2VzIG1hcmtlZCBhcyBpbmFjdGl2ZSA8L2xpPg0KPGxpPidhbGwnIC0gdG8gZGlzcGxheSBhbGwgaW1hZ2VzPC9saT4NCjwvdWw+DQo8L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0aG9yOiBKb3MgJmx0O2pvc3ZkQGxpdmUubmwmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4wLjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+DQo8bGk+VmVyc2lvbiAxLjAuMS4gMjMgQXVndXN0IDIwMDkuIEFwcGx5IHRodW1ibmFpbC1zZXR0aW5ncyBvbiAnQWxidW0tY292ZXJzJyBbIzM5MjRdLCBCdWdmaXggZm9yIFsjMzkyN10sIEFkZGVkIG1pc3NpbmcgL2RpdiB0byB0aGlja2JveC10ZW1wbGF0ZSwgZml4ZWQgYW4gaXNzdWUgd2l0aCBnZW5lcmF0aW5nIHRodW1ibmFpbHMgd2hlbiBubyB0aHVtYnMgYXZhaWxhYmxlIGluIEltYWdlTWFuYWdlciwgaW1wcm92ZWQgdGhlIG5hbWluZyBvZiB0aHVtYnMsIEJ1Z2ZpeCBmb3IgWyMzOTMxXSwgUHJldmVudCBkaXNwbGF5IHRoZSBjb250ZW50IG9mIGdhbGxlcmllcyB0aGF0IGFyZSBzZXQgYXMgaW5hY3RpdmUuPC9saT4NCjxsaT5WZXJzaW9uIDEuMC4gMTcgQXVndXN0IDIwMDkuIFBhZ2luYXRpb24gcGFyYW1ldGVycyBhZGRlZCwgU3RhbmRhcmQgdGVtcGxhdGVzIGNoYW5nZWQgYWNjb3JkaW5nbHksIEV4dGVuZGVkIHRoZSBtb2R1bGUtaGVscCwgQWRkZWQgZnVuY3Rpb25zIHRvIHNob3cgcmFuZG9tIG9yIGxhdGVzdCBpbWFnZXMsIFN1cHBvcnQgb2YgcHJldHR5LXVybHMsIFZhcmlvdXMgaW1wcm92ZW1lbnRzPC9saT4NCjxsaT5WZXJzaW9uIDAuNi4gOSBBdWd1c3QgMjAwOS4gSW5pdGlhbCBCZXRhIFJlbGVhc2UuPC9saT4NCjwvdWw+PGJyIC8+</about>
	<description>The easiest way to manage and display photo galleries</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.createthumbs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYoICEkZ0NtcyApIGV4aXQoKTsNCg0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR2FsbGVyeScpICkgDQogIHsNCiAgICBlY2hvICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKTsNCiAgICByZXR1cm47DQogIH0NCg0KaWYoICFpc3NldCgkcGFyYW1zWydnaWQnXSkgKQ0KICB7DQogICAgJHBhcmFtc1snZXJyb3JzJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7DQogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywnJywkcGFyYW1zKTsNCiAgICByZXR1cm47DQogIH0NCg0KJGdhbGxlcnlpbmZvID0gJHRoaXMtPl9HZXRnYWxsZXJ5aW5mb2J5aWQoJHBhcmFtc1snZ2lkJ10pOw0KJGdhbGxlcnlwYXRoID0gJHBhcmFtc1snZ2lkJ10gPT0gMSA/ICcnIDogdHJpbSgkZ2FsbGVyeWluZm9bJ2ZpbGVwYXRoJ10gLiAnLycgLiAkZ2FsbGVyeWluZm9bJ2ZpbGVuYW1lJ10sJy8nKTsNCg0KJGdhbGxlcnkgPSAkdGhpcy0+X0dldGdhbGxlcnlmaWxlcygkZ2FsbGVyeXBhdGgpOw0KZm9yZWFjaCAoJGdhbGxlcnkgYXMgJGZpbGUpIA0Kew0KCWlmKCBzdWJzdHIoJGZpbGVbJ2ZpbGVuYW1lJ10sLTEpICE9ICcvJyApDQoJew0KCQkkdGh1bWJuYW1lID0gJy4uL21vZHVsZXMvR2FsbGVyeS90aHVtYnMvJyAuICRwYXJhbXNbJ2dpZCddIC4gJy0nIC4gJGZpbGVbJ2ZpbGVpZCddIC4gc3Vic3RyKCRmaWxlWydmaWxlbmFtZSddLCBzdHJycG9zKCRmaWxlWydmaWxlbmFtZSddLCAnLicpKSA7DQoNCgkJJHRoaXMtPl9DcmVhdGVUaHVtYm5haWwoJHRodW1ibmFtZSwgDQoJCSAgICAgICAgICAgICAgICAgICAgICAgICcuLi8nIC4gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAoZW1wdHkoJGZpbGVbJ2ZpbGVwYXRoJ10pID8gJycgOiAkZmlsZVsnZmlsZXBhdGgnXSAuICcvJykgLiAkZmlsZVsnZmlsZW5hbWUnXSwgDQoJCSAgICAgICAgICAgICAgICAgICAgICAgICRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddLCANCgkJICAgICAgICAgICAgICAgICAgICAgICAgJGdhbGxlcnlpbmZvWyd0aHVtYmhlaWdodCddLCANCgkJICAgICAgICAgICAgICAgICAgICAgICAgJGdhbGxlcnlpbmZvWydyZXNpemVtZXRob2QnXSk7DQoJfQ0KfQ0KDQokdGhpcy0+UmVkaXJlY3QoJGlkLCdlZGl0Z2FsbGVyeScsJycsYXJyYXkoJ2dpZCc9PiRwYXJhbXNbJ2dpZCddLCdtb2RlJz0+ImVkaXQiLCdtb2R1bGVfbWVzc2FnZSc9PiR0aGlzLT5MYW5nKCd0aHVtYnNjcmVhdGVkJykpKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQokcGFyYW1zWydkaXInXSA9IGlzc2V0KCRwYXJhbXNbJ2RpciddKSA/IGNtc19odG1sX2VudGl0eV9kZWNvZGUodHJpbSgkcGFyYW1zWydkaXInXSwiLyIpKSA6ICcnOw0KJHN0YXJ0ID0gKGlzc2V0KCRwYXJhbXNbJ3N0YXJ0J10pICYmIGlzX251bWVyaWMoJHBhcmFtc1snc3RhcnQnXSkpID8gJHBhcmFtc1snc3RhcnQnXSA6IDE7DQokbnVtYmVyID0gKGlzc2V0KCRwYXJhbXNbJ251bWJlciddKSAmJiBpc19udW1lcmljKCRwYXJhbXNbJ251bWJlciddKSkgPyAkcGFyYW1zWydudW1iZXInXSA6IDEwMDA7DQokc2hvdyA9IChpc3NldCgkcGFyYW1zWydzaG93J10pICYmIGluX2FycmF5KCRwYXJhbXNbJ3Nob3cnXSwgYXJyYXkoJ2FjdGl2ZScsJ2luYWN0aXZlJywnYWxsJykpKSA/ICRwYXJhbXNbJ3Nob3cnXSA6ICdhY3RpdmUnOw0KDQokaW1nY291bnQgPSAwOw0KJGl0ZW1jb3VudCA9IDA7DQokaW1hZ2VzID0gYXJyYXkoKTsNCg0KaWYgKCBpc19kaXIoREVGQVVMVF9HQUxMRVJZX1BBVEggLiAkcGFyYW1zWydkaXInXSkgKQ0Kew0KCSR0aGlzLT5zbWFydHktPmFzc2lnbignZ2FsbGVyeXRpdGxlJywgdHJpbShzdWJzdHIoJHBhcmFtc1snZGlyJ10sIHN0cnJwb3MoJHBhcmFtc1snZGlyJ10sICcvJykpLCIvIikpOw0KDQoJLy8gZ2V0IGdhbGxlcnkgaW5mbw0KCSRnYWxsZXJ5aW5mbyA9ICR0aGlzLT5fR2V0Z2FsbGVyeWluZm8oJHBhcmFtc1snZGlyJ10pOw0KDQoJJHBhcmFtc2xpbmsgPSBhcnJheSgpOw0KCWlmICggaXNzZXQoJHBhcmFtc1snc3RhcnQnXSkgfHwgaXNzZXQoJHBhcmFtc1snbnVtYmVyJ10pICkNCgl7DQoJCSRwYXJhbXNsaW5rWydzdGFydCddID0gMTsNCgkJJHBhcmFtc2xpbmtbJ251bWJlciddID0gJG51bWJlcjsNCgl9DQoJaWYgKCBpc3NldCgkcGFyYW1zWydzaG93J10pICkNCgl7DQoJCSRwYXJhbXNsaW5rWydzaG93J10gPSAkcGFyYW1zWydzaG93J107DQoJfQ0KCQ0KCWlmICggJHNob3cgPT0gImFsbCIgfHwgKCRnYWxsZXJ5aW5mb1snYWN0aXZlJ10gPT0gMSAmJiAkc2hvdyA9PSAiYWN0aXZlIikgfHwgKCRnYWxsZXJ5aW5mb1snYWN0aXZlJ10gPT0gMCAmJiAkc2hvdyA9PSAiaW5hY3RpdmUiKSApDQoJew0KCQlpZiAoICFlbXB0eSgkZ2FsbGVyeWluZm8pICkNCgkJew0KCQkJaWYgKCAhZW1wdHkoJGdhbGxlcnlpbmZvWyd0aXRsZSddKSApDQoJCQl7DQoJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnYWxsZXJ5dGl0bGUnLCAkZ2FsbGVyeWluZm9bJ3RpdGxlJ10pOw0KCQkJfQ0KCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnYWxsZXJ5Y29tbWVudCcsICRnYWxsZXJ5aW5mb1snY29tbWVudCddKTsNCgkJCSRwYXJhbXNsaW5rWydkaXInXSA9ICRnYWxsZXJ5aW5mb1snZmlsZXBhdGgnXTsNCgkJCQ0KCQkJJHByZXR0eXVybCA9ICdnYWxsZXJ5LycgLiAkcGFyYW1zbGlua1snZGlyJ10gLiAnLycgLiANCgkJCQkJCShpc3NldCgkcGFyYW1zbGlua1snc3RhcnQnXSkgPyAkcGFyYW1zbGlua1snc3RhcnQnXSAuICcvJyAuICRwYXJhbXNsaW5rWydudW1iZXInXSAuICcvJyA6ICcnKSAuIA0KCQkJCQkJKGlzc2V0KCRwYXJhbXNsaW5rWydzaG93J10pID8gJHBhcmFtc2xpbmtbJ3Nob3cnXSAuICcvJyA6ICcnKSAuIA0KCQkJCQkJJHJldHVybmlkOw0KCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYXJlbnRsaW5rJywgZW1wdHkoJHBhcmFtc1snZGlyJ10pID8gJycgOiAkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwgJHJldHVybmlkLCAnZGVmYXVsdCcsICdQYXJlbnQnLCAkcGFyYW1zbGluaywgJycsIGZhbHNlLCB0cnVlLCAnJywgZmFsc2UsICRwcmV0dHl1cmwpKTsNCgkJfQ0KCQ0KCQ0KCQ0KCQkvLyBidWlsZCBnYWxsZXJ5DQoJCSRkaXJmaWxlcyA9ICR0aGlzLT5fR2V0ZGlyZmlsZXMoJHBhcmFtc1snZGlyJ10sRkFMU0UpOw0KCQkkZ2FsZXJ5ZmlsZXMgPSAkdGhpcy0+X0dldGdhbGxlcnlmaWxlcygkcGFyYW1zWydkaXInXSk7DQoJDQoJCWlmICggJGRpcmZpbGVzICkNCgkJew0KCQkJLy8gc29ydCAkZGlyZmlsZXMgYXNjZW5kaW5nIGJ5IHRvdGFsIHBhdGgNCgkJCWtzb3J0KCRkaXJmaWxlcyk7DQoJCQkNCgkJCWZvcmVhY2goJGRpcmZpbGVzIGFzICRrZXk9PiRpdGVtKQ0KCQkJew0KCQkJCWlmICggISRnYWxlcnlmaWxlcyB8fCAhYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZ2FsZXJ5ZmlsZXMpIHx8ICRzaG93ID09ICdhbGwnIHx8ICgkc2hvdyA9PSAnYWN0aXZlJyAmJiAkZ2FsZXJ5ZmlsZXNbJGtleV1bJ2FjdGl2ZSddICE9ICcwJykgfHwgKCRzaG93ID09ICdpbmFjdGl2ZScgJiYgJGdhbGVyeWZpbGVzWyRrZXldWydhY3RpdmUnXSA9PSAnMCcpICkNCgkJCQl7DQoJCQkJCS8vIGNyZWF0ZSBhIG5ldyBvYmplY3QgZm9yIGV2ZXJ5IHJlY29yZCB0aGF0IHdlIHJldHJpZXZlDQoJCQkJCSRyZWMgPSBuZXcgc3RkQ2xhc3MoKTsNCgkJCQkJJHJlYy0+ZmlsZSA9IERFRkFVTFRfR0FMTEVSWV9QQVRIIC4gJGtleTsNCgkJCQkJJHJlYy0+ZmlsZWRhdGUgPSAoJGdhbGVyeWZpbGVzICYmIGFycmF5X2tleV9leGlzdHMoJGtleSwgJGdhbGVyeWZpbGVzKSkgPyAkZ2FsZXJ5ZmlsZXNbJGtleV1bJ2ZpbGVkYXRlJ10gOiAnJzsNCgkJCQkJJHJlYy0+dGl0bGUgPSAoISRnYWxlcnlmaWxlcyB8fCAhYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZ2FsZXJ5ZmlsZXMpIHx8IGVtcHR5KCRnYWxlcnlmaWxlc1ska2V5XVsndGl0bGUnXSkpID8gdHJpbSgkaXRlbVsnZmlsZW5hbWUnXSwiLyIpIDogJGdhbGVyeWZpbGVzWyRrZXldWyd0aXRsZSddOw0KCQkJCQkkcmVjLT5jb21tZW50ID0gKCRnYWxlcnlmaWxlcyAmJiBhcnJheV9rZXlfZXhpc3RzKCRrZXksICRnYWxlcnlmaWxlcykpID8gJGdhbGVyeWZpbGVzWyRrZXldWydjb21tZW50J10gOiAnJzsNCgkJCQkJaWYgKCBpc19kaXIoREVGQVVMVF9HQUxMRVJZX1BBVEggLiAka2V5KSApDQoJCQkJCXsNCgkJCQkJCWlmICggISRnYWxlcnlmaWxlcyB8fCAhYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkZ2FsZXJ5ZmlsZXMpIHx8IGVtcHR5KCRnYWxlcnlmaWxlc1ska2V5XVsndGh1bWInXSkgKQ0KCQkJCQkJew0KCQkJCQkJCSRyZWMtPnRodW1iID0gJ21vZHVsZXMvR2FsbGVyeS9pbWFnZXMvZm9sZGVyLnBuZyc7DQoJCQkJCQl9DQoJCQkJCQllbHNlaWYgKCAkZ2FsbGVyeWluZm9bJ3RodW1id2lkdGgnXSA+IDAgKQ0KCQkJCQkJew0KCQkJCQkJCSRyZWMtPnRodW1iID0gJ21vZHVsZXMvR2FsbGVyeS90aHVtYnMvJyAuICRnYWxsZXJ5aW5mb1snZmlsZWlkJ10gLiAnLScgLiAkZ2FsZXJ5ZmlsZXNbJGtleV1bJ2RlZmF1bHRmaWxlJ10gLiBzdWJzdHIoJGdhbGVyeWZpbGVzWyRrZXldWyd0aHVtYiddLCBzdHJycG9zKCRnYWxlcnlmaWxlc1ska2V5XVsndGh1bWInXSwgJy4nKSk7DQoJCQkJCQkJJG9yaWdpbmFsaW1hZ2UgPSBERUZBVUxUX0dBTExFUllfUEFUSCAuIHN0cl9yZXBsYWNlKElNX1BSRUZJWCwnJywkZ2FsZXJ5ZmlsZXNbJGtleV1bJ3RodW1iJ10pOw0KCQkJCQkJfQ0KCQkJCQkJZWxzZQ0KCQkJCQkJew0KCQkJCQkJCSRyZWMtPnRodW1iID0gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAkZ2FsZXJ5ZmlsZXNbJGtleV1bJ3RodW1iJ107DQoJCQkJCQkJJG9yaWdpbmFsaW1hZ2UgPSBERUZBVUxUX0dBTExFUllfUEFUSCAuIHN0cl9yZXBsYWNlKElNX1BSRUZJWCwnJywkZ2FsZXJ5ZmlsZXNbJGtleV1bJ3RodW1iJ10pOw0KCQkJCQkJfQ0KCQkJCQkJJHBhcmFtc2xpbmtbJ2RpciddID0gJGtleTsNCgkJCQkJCSRwcmV0dHl1cmwgPSAnZ2FsbGVyeS8nIC4gJHBhcmFtc2xpbmtbJ2RpciddIC4gJy8nIC4gDQoJCQkJCQkJCShpc3NldCgkcGFyYW1zbGlua1snc3RhcnQnXSkgPyAkcGFyYW1zbGlua1snc3RhcnQnXSAuICcvJyAuICRwYXJhbXNsaW5rWydudW1iZXInXSAuICcvJyA6ICcnKSAuIA0KCQkJCQkJCQkoaXNzZXQoJHBhcmFtc2xpbmtbJ3Nob3cnXSkgPyAkcGFyYW1zbGlua1snc2hvdyddIC4gJy8nIDogJycpIC4gDQoJCQkJCQkJCSRyZXR1cm5pZDsNCgkNCgkJCQkJCSRyZWMtPmZvbGRlcmxpbmsgPSAkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwgJHJldHVybmlkLCAnZGVmYXVsdCcsIA0KCQkJCQkJCSc8aW1nIHNyYz0iJyAuICRyZWMtPnRodW1iIC4gJyIgYWx0PSInIC4gJHJlYy0+dGl0bGUgLiAnIiAvPicsDQoJCQkJCQkJJHBhcmFtc2xpbmssICcnLCBmYWxzZSwgdHJ1ZSwgJycsIGZhbHNlLCAkcHJldHR5dXJsICk7DQoJCQkJCQkkaXRlbWNvdW50Kys7DQoJCQkJCX0NCgkJCQkJZWxzZWlmICggJGdhbGxlcnlpbmZvWyd0aHVtYndpZHRoJ10gPiAwICkNCgkJCQkJew0KCQkJCQkJJHJlYy0+dGh1bWIgPSAnbW9kdWxlcy9HYWxsZXJ5L3RodW1icy8nIC4gJGdhbGxlcnlpbmZvWydmaWxlaWQnXSAuICctJyAuICRnYWxlcnlmaWxlc1ska2V5XVsnZmlsZWlkJ10gLiBzdWJzdHIoJGl0ZW1bJ2ZpbGVuYW1lJ10sIHN0cnJwb3MoJGl0ZW1bJ2ZpbGVuYW1lJ10sICcuJykpOw0KCQkJCQkJJG9yaWdpbmFsaW1hZ2UgPSBERUZBVUxUX0dBTExFUllfUEFUSCAuICRrZXk7DQoJCQkJCQkkcmVjLT5mb2xkZXJsaW5rID0gJyc7DQoJCQkJCQkkaXRlbWNvdW50Kys7DQoJCQkJCQkkaW1nY291bnQrKzsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJCSRyZWMtPnRodW1iID0gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAoZW1wdHkoJGl0ZW1bJ2ZpbGVwYXRoJ10pID8gJycgOiAkaXRlbVsnZmlsZXBhdGgnXSAuICcvJykgLiBJTV9QUkVGSVggLiAkaXRlbVsnZmlsZW5hbWUnXTsNCgkJCQkJCSRvcmlnaW5hbGltYWdlID0gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAka2V5Ow0KCQkJCQkJJHJlYy0+Zm9sZGVybGluayA9ICcnOw0KCQkJCQkJJGl0ZW1jb3VudCsrOw0KCQkJCQkJJGltZ2NvdW50Kys7DQoJCQkJCX0NCgkJDQoJCQkJCWlmICggJGl0ZW1jb3VudCA+PSAkc3RhcnQgJiYgJGl0ZW1jb3VudCA8ICgkbnVtYmVyICsgJHN0YXJ0KSApDQoJCQkJCXsNCgkJCQkJCWlmICggIWZpbGVfZXhpc3RzKCRyZWMtPnRodW1iKSApDQoJCQkJCQl7DQoJCQkJCQkJJHRoaXMtPl9DcmVhdGVUaHVtYm5haWwoJHJlYy0+dGh1bWIsIA0KCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICRvcmlnaW5hbGltYWdlLCANCgkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAoJGdhbGxlcnlpbmZvWyd0aHVtYndpZHRoJ10gPiAwKSA/ICRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddIDogOTYsDQoJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgKCRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddID4gMCkgPyAkZ2FsbGVyeWluZm9bJ3RodW1iaGVpZ2h0J10gOiA5NiwNCgkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAoJGdhbGxlcnlpbmZvWyd0aHVtYndpZHRoJ10gPiAwKSA/ICRnYWxsZXJ5aW5mb1sncmVzaXplbWV0aG9kJ10gOiAnc2MnKTsJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJYXJyYXlfcHVzaCgkaW1hZ2VzLCRyZWMpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KZWxzZQ0Kew0KCSRwYXJhbXNbJ21vZHVsZV9tZXNzYWdlJ10gPSAiVGhlIGRpcmVjdG9yeSAnIiAuICRwYXJhbXNbJ2RpciddIC4gIicgZG9lcyBub3QgZXhpc3QuIENoZWNrIHlvdXIgcGFyYW1ldGVycy4iOw0KfQ0KDQoNCi8vIEV4cG9zZSB0aGUgbGlzdCB0byBzbWFydHkuIFVzZSAiYnlfcmVmIiB0byBzYXZlIG1lbW9yeS4NCiR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2ltYWdlcycsJGltYWdlcyk7DQoNCi8vIGFuZCBhIGNvdW50IG9mIHJlY29yZHMNCiR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2Vjb3VudCcsICRpbWdjb3VudCAuICcgJyAuICgkaW1nY291bnQgPT0gMSA/ICR0aGlzLT5MYW5nKCdpbWFnZScpIDogJHRoaXMtPkxhbmcoJ2ltYWdlcycpKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsICRpdGVtY291bnQpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdudW1iZXInLCAkbnVtYmVyKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnZXMnLCBjZWlsKCRpdGVtY291bnQvJG51bWJlcikpOw0KDQovLyBwYWdlbmF2aWdhdGlvbg0KJHBhcmFtc2xpbmtbJ2RpciddID0gJHBhcmFtc1snZGlyJ107DQokcGFyYW1zbGlua1snc3RhcnQnXSA9ICRzdGFydCAtICRudW1iZXI7CQkNCiRwcmV0dHl1cmwgPSAnZ2FsbGVyeS8nIC4gJHBhcmFtc2xpbmtbJ2RpciddIC4gJy8nIC4gDQoJCQkJCShpc3NldCgkcGFyYW1zbGlua1snbnVtYmVyJ10pID8gJHBhcmFtc2xpbmtbJ3N0YXJ0J10gLiAnLycgLiAkcGFyYW1zbGlua1snbnVtYmVyJ10gLiAnLycgOiAnJykgLiANCgkJCQkJKGlzc2V0KCRwYXJhbXNsaW5rWydzaG93J10pID8gJHBhcmFtc2xpbmtbJ3Nob3cnXSAuICcvJyA6ICcnKSAuIA0KCQkJCQkkcmV0dXJuaWQ7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3ByZXZwYWdlJywgKCRwYXJhbXNsaW5rWydzdGFydCddID49IDEgPyAkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwgJHJldHVybmlkLCAnZGVmYXVsdCcsICR0aGlzLT5MYW5nKCdwcmV2cGFnZScpLCAkcGFyYW1zbGluaywgJycsIGZhbHNlLCB0cnVlLCAnJywgZmFsc2UsICRwcmV0dHl1cmwpIDogKCc8ZW0+JyAuICR0aGlzLT5MYW5nKCdwcmV2cGFnZScpIC4gJzwvZW0+JykpKTsNCg0KJHBhcmFtc2xpbmtbJ3N0YXJ0J10gPSAkc3RhcnQgKyAkbnVtYmVyOwkJDQokcHJldHR5dXJsID0gJ2dhbGxlcnkvJyAuICRwYXJhbXNsaW5rWydkaXInXSAuICcvJyAuIA0KCQkJCQkoaXNzZXQoJHBhcmFtc2xpbmtbJ251bWJlciddKSA/ICRwYXJhbXNsaW5rWydzdGFydCddIC4gJy8nIC4gJHBhcmFtc2xpbmtbJ251bWJlciddIC4gJy8nIDogJycpIC4gDQoJCQkJCShpc3NldCgkcGFyYW1zbGlua1snc2hvdyddKSA/ICRwYXJhbXNsaW5rWydzaG93J10gLiAnLycgOiAnJykgLiANCgkJCQkJJHJldHVybmlkOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduZXh0cGFnZScsICgkaXRlbWNvdW50ID49ICRwYXJhbXNsaW5rWydzdGFydCddID8gJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsICRyZXR1cm5pZCwgJ2RlZmF1bHQnLCAkdGhpcy0+TGFuZygnbmV4dHBhZ2UnKSwgJHBhcmFtc2xpbmssICcnLCBmYWxzZSwgdHJ1ZSwgJycsIGZhbHNlLCAkcHJldHR5dXJsKSA6ICgnPGVtPicgLiAkdGhpcy0+TGFuZygnbmV4dHBhZ2UnKSAuICc8L2VtPicpKSk7DQokcGFnZWxpbmtzID0gJyc7DQpmb3IgKCRpID0gMDsgJGkgPCBjZWlsKCRpdGVtY291bnQvJG51bWJlcik7ICRpKyspIA0Kew0KCSRwYXJhbXNsaW5rWydzdGFydCddID0gKCRpICogJG51bWJlcikgKyAxOw0KCSRwcmV0dHl1cmwgPSAnZ2FsbGVyeS8nIC4gJHBhcmFtc2xpbmtbJ2RpciddIC4gJy8nIC4gDQoJCQkJCQkoaXNzZXQoJHBhcmFtc2xpbmtbJ251bWJlciddKSA/ICRwYXJhbXNsaW5rWydzdGFydCddIC4gJy8nIC4gJHBhcmFtc2xpbmtbJ251bWJlciddIC4gJy8nIDogJycpIC4gDQoJCQkJCQkoaXNzZXQoJHBhcmFtc2xpbmtbJ3Nob3cnXSkgPyAkcGFyYW1zbGlua1snc2hvdyddIC4gJy8nIDogJycpIC4gDQoJCQkJCQkkcmV0dXJuaWQ7DQoJJHBhZ2VsaW5rcyAuPSAoJHBhcmFtc2xpbmtbJ3N0YXJ0J10gIT0gJHN0YXJ0ID8gJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsICRyZXR1cm5pZCwgJ2RlZmF1bHQnLCAkaSArIDEsICRwYXJhbXNsaW5rLCAnJywgZmFsc2UsIHRydWUsICcnLCBmYWxzZSwgJHByZXR0eXVybCkgOiAoJzxlbT4nIC4gKCRpICsgMSkgLiAnPC9lbT4nKSk7DQp9DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2VsaW5rcycsICRwYWdlbGlua3MpOw0KDQoNCmlmIChpc3NldCgkcGFyYW1zWydtb2R1bGVfbWVzc2FnZSddKSkNCnsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZHVsZV9tZXNzYWdlJywkcGFyYW1zWydtb2R1bGVfbWVzc2FnZSddKTsNCn0NCmVsc2UNCnsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZHVsZV9tZXNzYWdlJywnJyk7DQp9DQoNCg0KLy8gRGlzcGxheSB0ZW1wbGF0ZQ0KJHRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfdGVtcGxhdGUnKTsNCmlmICggIWVtcHR5KCRnYWxsZXJ5aW5mb1sndGVtcGxhdGUnXSkgJiYgJGdhbGxlcnlpbmZvWyd0ZW1wbGF0ZSddICE9IFVTRV9ERUZBVUxUX1RFTVBMQVRFICkNCiAgew0KICAgICR0ZW1wbGF0ZSA9ICRnYWxsZXJ5aW5mb1sndGVtcGxhdGUnXTsNCiAgfQ0KaWYgKCBpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZSddKSApDQogIHsNCiAgICAkdGVtcGxhdGUgPSAkcGFyYW1zWyd0ZW1wbGF0ZSddOw0KICB9DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgkdGVtcGxhdGUpOw0KDQoNCi8vIHBhc3MgZGF0YSB0byBoZWFkIHNlY3Rpb24uDQoNCi8vIGdldCB0ZW1wbGF0ZS1zcGVjaWZpYyBKYXZhU2NyaXB0IGFuZCBlY2hvDQokdGVtcGxhdGVjb2RlID0gJHRoaXMtPkdldFRlbXBsYXRlKCR0ZW1wbGF0ZSk7DQokdGVtcGxhdGVjb2RlYXJyID0gZXhwbG9kZShURU1QTEFURV9TRVBBUkFUT1IsICR0ZW1wbGF0ZWNvZGUpOw0KJHRlbXBsYXRlX21ldGFkYXRhID0gc3Vic3RyKCR0ZW1wbGF0ZWNvZGVhcnJbMl0sMCwtMik7DQoNCi8vIGNoZWNrIGlmIGEgY3NzIGZpbGUgZXhpc3RzIGFuZCBlY2hvDQppZiAoIGZpbGVfZXhpc3RzKCJtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2Nzcy8iIC4gJHRlbXBsYXRlIC4gIi5jc3MiKSApDQp7DQoJJHRlbXBsYXRlX21ldGFkYXRhIC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvY3NzLycgLiAkdGVtcGxhdGUgLiAnLmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+DQonOw0KfQ0KJHRoaXMtPkdhbGxlcnlNZXRhZGF0YSA9ICR0ZW1wbGF0ZV9tZXRhZGF0YTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR2FsbGVyeScpICkgDQp7DQogIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOw0KfQ0KDQoNCiMNCiNUaGUgdGFiIGhlYWRlcnMNCiMNCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOw0KaWYgKCAhZW1wdHkoJHBhcmFtc1snYWN0aXZlX3RhYiddKSApDQp7DQoJJGFjdGl2ZV90YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107DQp9DQplbHNlDQp7DQoJJGFjdGl2ZV90YWIgPSAnJzsNCn0NCg0KZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdnYWxsZXJpZXMnLCR0aGlzLT5MYW5nKCdnYWxsZXJpZXMnKSwgKCRhY3RpdmVfdGFiID09ICdnYWxsZXJpZXMnKT90cnVlOmZhbHNlKTsNCg0KDQppZiAoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApDQp7DQoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd0ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCd0ZW1wbGF0ZXMnKSwgKCRhY3RpdmVfdGFiID09ICd0ZW1wbGF0ZXMnKT90cnVlOmZhbHNlKTsNCn0NCg0KCQkJDQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkNCnsNCgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ29wdGlvbnMnLCR0aGlzLT5MYW5nKCdvcHRpb25zJyksICgkYWN0aXZlX3RhYiA9PSAnb3B0aW9ucycpP3RydWU6ZmFsc2UpOw0KfQ0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOw0KDQoNCiMNCiNUaGUgY29udGVudCBvZiB0aGUgdGFicw0KIw0KZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7DQoNCmlmICggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdhbGxlcnknKSApDQp7DQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2dhbGxlcmllcycsICRwYXJhbXMpOw0KCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9nYWxsZXJpZXN0YWIucGhwJyk7DQoJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQp9DQoNCmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKQ0Kew0KCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCd0ZW1wbGF0ZXMnLCAkcGFyYW1zKTsNCglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fdGVtcGxhdGVzdGFiLnBocCcpOw0KCWVjaG8gJHRoaXMtPkVuZFRhYigpOw0KfQ0KDQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkNCiAgew0KICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdvcHRpb25zJywgJHBhcmFtcyk7DQogICAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX29wdGlvbnN0YWIucGhwJyk7DQogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7DQogIH0NCg0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.deletetemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYoICEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkNCiAgew0KICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpOw0KICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsJHBhcmFtcyk7DQogICAgcmV0dXJuOw0KICB9DQoNCmlmKCAhKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pKSApDQogIHsNCiAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOw0KICAgIHJldHVybjsNCiAgfQ0KDQokdGVtcGxhdGUgPSBjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pOw0KJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCR0ZW1wbGF0ZSk7DQoNCi8vIGRlbGV0ZSBjc3MtZmlsZQ0KaWYoIGZpbGVfZXhpc3RzKCcuLi9tb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2Nzcy8nIC4gJHRlbXBsYXRlIC4gJy5jc3MnKSApDQogIHsNCiAgICB1bmxpbmsoJy4uL21vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvY3NzLycgLiAkdGVtcGxhdGUgLiAnLmNzcycpOw0KICB9DQoNCi8vIHNldCBhc3NpZ25lZCBnYWxsZXJpZXMgdG8gZGVmYXVsdC10ZW1wbGF0ZQ0KJHF1ZXJ5ID0gIlVQREFURSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIFNFVCB0ZW1wbGF0ZT0/IFdIRVJFIHRlbXBsYXRlPT8iOw0KJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KFVTRV9ERUZBVUxUX1RFTVBMQVRFLCAkdGVtcGxhdGUpKTsNCg0KJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAndGVtcGxhdGVkZWxldGVkJywgJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsNCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_addtemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCAhJGdDbXMgKSBleGl0KCk7DQoNCmlmKCBpc3NldCggJHBhcmFtc1snY2FuY2VsJ10gKSApDQogIHsNCiAgICAkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsNCiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsICRwYXJhbXMpOw0KICB9DQoNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOw0KICB9DQoNCmlmKCAhaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICkgKQ0KICB7DQogICAgJHBhcmFtc1snZXJyb3JzJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7DQogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwkcGFyYW1zWydvcmlnYWN0aW9uJ10sJycsJHBhcmFtcyk7DQogICAgcmV0dXJuOw0KICB9DQoNCmlmKCAhaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlJ10gKSApDQogIHsNCiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsNCiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCRwYXJhbXNbJ29yaWdhY3Rpb24nXSwnJywkcGFyYW1zKTsNCiAgICByZXR1cm47DQogIH0NCg0KDQokcGFyYW1zWyd0ZW1wbGF0ZSddID0gdHJpbSgkcGFyYW1zWyd0ZW1wbGF0ZSddKTsNCg0KLy8gY2hlY2sgaWYgdGhpcyB0ZW1wbGF0ZSBhbHJlYWR5IGV4aXN0cw0KJHR4dCA9IHRyaW0oJHRoaXMtPkdldFRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pKTsNCmlmKCAkdHh0ICE9ICIiICkNCiAgew0KICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cycpOw0KICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJHBhcmFtc1snb3JpZ2FjdGlvbiddLCcnLCRwYXJhbXMpOw0KICAgIHJldHVybjsNCiAgfQ0KDQovLyBzYXZlIHRlbXBsYXRlDQokdGhpcy0+U2V0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGUnXSwgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10uVEVNUExBVEVfU0VQQVJBVE9SLiRwYXJhbXNbJ3RlbXBsYXRlY3NzJ10uVEVNUExBVEVfU0VQQVJBVE9SLiRwYXJhbXNbJ3RlbXBsYXRlanMnXS4nKn0nICk7DQoNCi8vIHNhdmUgY3NzLWZpbGUNCiRoYW5kbGUgPSBmb3BlbignLi4vbW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9jc3MvJyAuICRwYXJhbXNbJ3RlbXBsYXRlJ10gLiAnLmNzcycsJ3cnKTsNCmZ3cml0ZSgkaGFuZGxlLCRwYXJhbXNbJ3RlbXBsYXRlY3NzJ10pOw0KZmNsb3NlKCRoYW5kbGUpOw0KDQokcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICd0ZW1wbGF0ZWFkZGVkJywgJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsNCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_editgallery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCAhaXNzZXQoICRnQ21zICkgKSBleGl0KCk7DQoNCmlmKCBpc3NldCggJHBhcmFtc1snY2FuY2VsJ10gKSApDQp7DQoJJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnZ2FsbGVyaWVzJyk7DQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsNCn0NCg0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR2FsbGVyeScpICkNCnsNCglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7DQp9DQoNCmlmKCAhaXNzZXQoICRwYXJhbXNbJ2dpZCddICkgKQ0Kew0KCSRwYXJhbXMgPSBhcnJheSgnZ2lkJyA9PiAkcGFyYW1zWydnaWQnXSwgJ21vZGUnID0+ICJlZGl0IiwgJ2Vycm9ycycgPT4gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsNCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdlZGl0Z2FsbGVyeScsJycsJHBhcmFtcyk7DQoJcmV0dXJuOw0KfQ0KDQokZ2FsbGVyeXRpdGxlID0gaXNzZXQoJHBhcmFtc1snZ2FsbGVyeXRpdGxlJ10pID8gJHBhcmFtc1snZ2FsbGVyeXRpdGxlJ10gOiAnJzsNCiRnYWxsZXJ5Y29tbWVudCA9IGlzc2V0KCRwYXJhbXNbJ2dhbGxlcnljb21tZW50J10pID8gJHBhcmFtc1snZ2FsbGVyeWNvbW1lbnQnXSA6ICcnOw0KDQokcXVlcnkgPSAiVVBEQVRFICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX2dhbGxlcnkgU0VUIHRpdGxlID0gPywgY29tbWVudCA9ID8gV0hFUkUgZmlsZWlkID0gPyI7DQokcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGdhbGxlcnl0aXRsZSwgJGdhbGxlcnljb21tZW50LCAkcGFyYW1zWydnaWQnXSkpOw0KDQppZiAoICRwYXJhbXNbJ3RodW1id2lkdGgnXSA8PSAwIHx8ICRwYXJhbXNbJ3RodW1iaGVpZ2h0J10gPD0gMCApDQp7DQoJJHBhcmFtc1sndGh1bWJ3aWR0aCddID0gTlVMTDsNCgkkcGFyYW1zWyd0aHVtYmhlaWdodCddID0gTlVMTDsNCn0NCiRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIChmaWxlaWQsdGVtcGxhdGUsdGh1bWJ3aWR0aCx0aHVtYmhlaWdodCxyZXNpemVtZXRob2QpIA0KCQlWQUxVRVMgKD8sPyw/LD8sPykNCgkJT04gRFVQTElDQVRFIEtFWSBVUERBVEUgdGVtcGxhdGU9Pyx0aHVtYndpZHRoPT8sdGh1bWJoZWlnaHQ9PyxyZXNpemVtZXRob2Q9PyI7DQokcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1snZ2lkJ10sJHBhcmFtc1sndGVtcGxhdGUnXSwkcGFyYW1zWyd0aHVtYndpZHRoJ10sJHBhcmFtc1sndGh1bWJoZWlnaHQnXSwkcGFyYW1zWydyZXNpemVtZXRob2QnXSwkcGFyYW1zWyd0ZW1wbGF0ZSddLCRwYXJhbXNbJ3RodW1id2lkdGgnXSwkcGFyYW1zWyd0aHVtYmhlaWdodCddLCRwYXJhbXNbJ3Jlc2l6ZW1ldGhvZCddKSkgfHwgJHJlc3VsdDsNCg0KDQppZiAoICRyZXN1bHQgKSANCnsNCglmb3JlYWNoKCRwYXJhbXNbJ2ZpbGV0aXRsZSddIGFzICRrZXk9PiRmaWxldGl0bGUpDQoJew0KCQkkcXVlcnkgPSAiVVBEQVRFICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX2dhbGxlcnkgU0VUIHRpdGxlID0gPywgY29tbWVudCA9ID8gV0hFUkUgZmlsZWlkID0gPyI7DQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkZmlsZXRpdGxlLCAkcGFyYW1zWydmaWxlY29tbWVudCddWyRrZXldLCAka2V5KSkgfHwgJHJlc3VsdDsNCgl9DQp9DQoNCmlmICggJHJlc3VsdCApIA0Kew0KCSRwYXJhbXMgPSBhcnJheSgnZ2lkJyA9PiAkcGFyYW1zWydnaWQnXSwgJ21vZGUnID0+ICJlZGl0IiwgJ21vZHVsZV9tZXNzYWdlJyA9PiAkdGhpcy0+TGFuZygnZ2FsbGVyeXVwZGF0ZWQnKSk7DQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2VkaXRnYWxsZXJ5JywgJycsICRwYXJhbXMpOw0KfQ0KZWxzZSANCnsNCgkkcGFyYW1zID0gYXJyYXkoJ2dpZCcgPT4gJHBhcmFtc1snZ2lkJ10sICdtb2RlJyA9PiAiZWRpdCIsICdlcnJvcnMnID0+ICR0aGlzLT5MYW5nKCdlcnJvcl91cGRhdGVnYWxsZXJ5ZmFpbGVkJykpOw0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0Z2FsbGVyeScsICcnLCAkcGFyYW1zKTsNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.do_edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCAhaXNzZXQoICRnQ21zICkgKSBleGl0KCk7DQoNCmlmKCBpc3NldCggJHBhcmFtc1snY2FuY2VsJ10gKSApDQogIHsNCiAgICAkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsNCiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsICRwYXJhbXMpOw0KICB9DQoNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOw0KICB9DQoNCmlmKCAhaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICkgKQ0KICB7DQogICAgJHBhcmFtc1snZXJyb3JzJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7DQogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwkcGFyYW1zWydvcmlnYWN0aW9uJ10sJycsJHBhcmFtcyk7DQogICAgcmV0dXJuOw0KICB9DQoNCmlmKCAhaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlJ10gKSApDQogIHsNCiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsNCiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCRwYXJhbXNbJ29yaWdhY3Rpb24nXSwnJywkcGFyYW1zKTsNCiAgICByZXR1cm47DQogIH0NCg0KLy8gc2F2ZSB0ZW1wbGF0ZQ0KJHRoaXMtPlNldFRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlJ10sICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddLlRFTVBMQVRFX1NFUEFSQVRPUi4kcGFyYW1zWyd0ZW1wbGF0ZWNzcyddLlRFTVBMQVRFX1NFUEFSQVRPUi4kcGFyYW1zWyd0ZW1wbGF0ZWpzJ10uJyp9JyApOw0KDQovLyBzYXZlIGNzcy1maWxlDQppZiggZW1wdHkoJHBhcmFtc1sndGVtcGxhdGVjc3MnXSkgKQ0KICB7DQogICAgdW5saW5rKCcuLi9tb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2Nzcy8nIC4gJHBhcmFtc1sndGVtcGxhdGUnXSAuICcuY3NzJyk7DQogIH0NCmVsc2UNCiAgew0KICAgICRoYW5kbGUgPSBmb3BlbignLi4vbW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9jc3MvJyAuICRwYXJhbXNbJ3RlbXBsYXRlJ10gLiAnLmNzcycsJ3cnKTsNCiAgICBmd3JpdGUoJGhhbmRsZSwkcGFyYW1zWyd0ZW1wbGF0ZWNzcyddKTsNCiAgICBmY2xvc2UoJGhhbmRsZSk7DQogIH0NCg0KaWYoIGlzc2V0KCRwYXJhbXNbJ2FwcGx5YnV0dG9uJ10pICkNCnsNCgkkcGFyYW1zID0gYXJyYXkoJ3RlbXBsYXRlJyA9PiAkcGFyYW1zWyd0ZW1wbGF0ZSddLCAnbW9kZScgPT4gImVkaXQiLCAnbW9kdWxlX21lc3NhZ2UnID0+ICR0aGlzLT5MYW5nKCd0ZW1wbGF0ZXVwZGF0ZWQnKSk7DQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICcnLCAkcGFyYW1zKTsNCn0NCmVsc2UNCnsNCgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICd0ZW1wbGF0ZXVwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOw0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_updateoptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgKSApDQp7DQogIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOw0KfQ0KDQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnYWxsb3dlZF9leHRlbnNpb25zJywgJHBhcmFtc1snYWxsb3dlZF9leHRlbnNpb25zJ10pOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZV9jb21tZW50X3d5c2l3eWcnLCAkcGFyYW1zWyd1c2VfY29tbWVudF93eXNpd3lnJ10pOw0KDQokcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICdvcHRpb25zdXBkYXRlZCcsICdhY3RpdmVfdGFiJyA9PiAnb3B0aW9ucycpOw0KJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/action.editgallery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYoICEkZ0NtcyApIGV4aXQoKTsNCg0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR2FsbGVyeScpICkgDQogIHsNCiAgICBlY2hvICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKTsNCiAgICByZXR1cm47DQogIH0NCg0KJHRoZW1lT2JqZWN0ID0mICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXTsNCg0KDQovLyBjaGVjayBpZiB3ZSBoYXZlIGEgZ2FsbGVyeSBuYW1lDQppZiggIWlzc2V0KCRwYXJhbXNbJ2dpZCddKSApDQogIHsNCiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsNCiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCcnLCRwYXJhbXMpOw0KICAgIHJldHVybjsNCiAgfQ0KaWYoICFpc3NldCgkcGFyYW1zWydtb2RlJ10pICkNCiAgew0KICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOw0KICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsJHBhcmFtcyk7DQogICAgcmV0dXJuOw0KICB9DQoNCiRwYXJhbXNbJ29yaWdhY3Rpb24nXSA9ICRwYXJhbXNbJ2FjdGlvbiddOw0KDQokZ2FsbGVyeWluZm8gPSAkdGhpcy0+X0dldGdhbGxlcnlpbmZvYnlpZCgkcGFyYW1zWydnaWQnXSk7DQokZ2FsbGVyeXBhdGggPSAkcGFyYW1zWydnaWQnXSA9PSAxID8gJycgOiB0cmltKCRnYWxsZXJ5aW5mb1snZmlsZXBhdGgnXSAuICcvJyAuICRnYWxsZXJ5aW5mb1snZmlsZW5hbWUnXSwnLycpOw0KDQokY29udGVudHMgPSAiIjsNCmlmKCAkcGFyYW1zWydtb2RlJ10gPT0gJ2FkZCcgKQ0KICB7DQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdkb19hZGRnYWxsZXJ5JywkcmV0dXJuaWQsJ3Bvc3QnLCcnLCBmYWxzZSwgJycsICRwYXJhbXMpKTsNCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dhbGxlcnluYW1lJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnZ2FsbGVyeScsICIiLCA0MCApKTsNCiAgfQ0KZWxzZSANCgl7DQoJCSR0aGlzLT5fVXBkYXRlR2FsbGVyeURCKCRnYWxsZXJ5cGF0aCwkcGFyYW1zWydnaWQnXSk7DQoJCSRnYWxsZXJ5ID0gJHRoaXMtPl9HZXRnYWxsZXJ5ZmlsZXMoJGdhbGxlcnlwYXRoKTsNCgkJDQoJCSRzaG93Z2FsbGVyeSA9IGFycmF5KCk7DQoJCWlmICggZW1wdHkoJGdhbGxlcnkpICkNCgkJew0KCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdub2ZpbGVzdGV4dCcsICR0aGlzLT5sYW5nKCJub2ZpbGVzdGV4dCIpKTsNCgkJfSANCgkJZWxzZSANCgkJew0KCQkJJHRydWVpbWFnZSA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCAkdGhpcy0+TGFuZygnc2V0ZmFsc2UnKSwnJywnJywnc3lzdGVtaWNvbicpOw0KCQkJJHRydWVpbWFnZTIgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlZmF1bHQnKSwnJywnJywnc3lzdGVtaWNvbicpOw0KCQkJJGZhbHNlaW1hZ2UgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicsICR0aGlzLT5MYW5nKCdzZXR0cnVlJyksJycsJycsJ3N5c3RlbWljb24nKTsNCgkJCQ0KCQkJZm9yZWFjaCAoJGdhbGxlcnkgYXMgJGZpbGUpIA0KCQkJew0KCQkJCSRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsNCgkJDQoJCQkJJHBhcmFtc1snZmlkJ10gPSAkZmlsZVsnZmlsZWlkJ107DQoJCQkJDQoJCQkJJG9uZXJvdy0+ZmlsZWlkID0gJGZpbGVbJ2ZpbGVpZCddOw0KCQkJCWlmICggc3Vic3RyKCRmaWxlWydmaWxlbmFtZSddLC0xKSA9PSAiLyIgKQ0KCQkJCXsNCgkJCQkJLy8gcmVjb3JkIGlzIGEgZGlyZWN0b3J5DQoJCQkJCSRvbmVyb3ctPnRodW1iID0gJzxpbWcgc3JjPSIuLi9tb2R1bGVzL0dhbGxlcnkvaW1hZ2VzL2ZvbGRlci5wbmciIGFsdD0iJyAuICRmaWxlWydmaWxlbmFtZSddIC4gJyIgLz4nOw0KCQkJCQkkb25lcm93LT50aXRsZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRnYWxsZXJ5JywgJHJldHVybmlkLCAkZmlsZVsnZmlsZW5hbWUnXSwgYXJyYXkoJ2dpZCc9PiRmaWxlWydmaWxlaWQnXSwnbW9kZSc9PiJlZGl0IikpOw0KCQkJCQkkb25lcm93LT5jb21tZW50ID0gIiI7DQoJCQkJCSRvbmVyb3ctPmZpbGVkYXRlID0gIiI7DQoJCQkJCSRvbmVyb3ctPmRlZmF1bHRsaW5rID0gIiI7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRvbmVyb3ctPnRodW1iID0gJzxpbWcgc3JjPSIuLi8nIC4gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAkZmlsZVsnZmlsZXBhdGgnXSAuICcvJyAuIElNX1BSRUZJWCAuICRmaWxlWydmaWxlbmFtZSddIC4gJyIgYWx0PSInIC4gJGZpbGVbJ2ZpbGVuYW1lJ10gLiAnIiAvPic7DQoJCQkJCSRvbmVyb3ctPnRpdGxlID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnZmlsZXRpdGxlWycgLiAkZmlsZVsnZmlsZWlkJ10gLiAnXScsICRmaWxlWyd0aXRsZSddLCAzMCwgMTAwICk7DQoJCQkJCS8vJG9uZXJvdy0+Y29tbWVudCA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2ZpbGVjb21tZW50WycgLiAkZmlsZVsnZmlsZWlkJ10gLiAnXScsICRmaWxlWydjb21tZW50J10sIDUwICk7DQoJCQkJCSRvbmVyb3ctPmNvbW1lbnQgPSAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoMCwgJGlkLCAkZmlsZVsnY29tbWVudCddLCAnZmlsZWNvbW1lbnRbJyAuICRmaWxlWydmaWxlaWQnXSAuICddJywgJ2Zha2UiIHN0eWxlPSJ3aWR0aDo0MGVtOyBoZWlnaHQ6NGVtOycsICcnLCAnJywgJycsICc0MCcsICc0Jyk7ICAvLyBjbGFzcyBmaWxsZWQgd2l0aCBmYWtlIGFuZCBzdHlsZS1pbmZvIHRvIG92ZXJydWxlIHRoZSB0aGVtZS1jc3MNCgkJCQkJJG9uZXJvdy0+ZmlsZWRhdGUgPSAkZmlsZVsnZmlsZWRhdGUnXTsNCgkJCQkJaWYoICRmaWxlWydmaWxlaWQnXSA9PSAkZ2FsbGVyeWluZm9bJ2RlZmF1bHRmaWxlJ10gKQ0KCQkJCQl7DQoJCQkJCSAgJG9uZXJvdy0+ZGVmYXVsdGxpbmsgPSAkdHJ1ZWltYWdlMjsNCgkJCQkJfQ0KCQkJCQllbHNlDQoJCQkJCXsNCgkJCQkJICAkb25lcm93LT5kZWZhdWx0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3N3aXRjaGRlZmF1bHQnLCAkcmV0dXJuaWQsICRmYWxzZWltYWdlLCAkcGFyYW1zKTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICggJGZpbGVbJ2FjdGl2ZSddICkgDQoJCQkJew0KCQkJCQkkYWN0aXZlaW1hZ2UgPSAkdHJ1ZWltYWdlOw0KCQkJCX0NCgkJCQllbHNlIA0KCQkJCXsNCgkJCQkJJGFjdGl2ZWltYWdlID0gJGZhbHNlaW1hZ2U7DQoJCQkJfQ0KCQkJCSRvbmVyb3ctPmFjdGl2ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdzd2l0Y2hhY3RpdmUnLCAkcmV0dXJuaWQsICRhY3RpdmVpbWFnZSwgJHBhcmFtcyk7DQoJDQoJCQkJaWYgKCAkZmlsZVsnZmlsZWlkJ10gIT0gMSApDQoJCQkJew0KCQkJCQlhcnJheV9wdXNoKCRzaG93Z2FsbGVyeSwgJG9uZXJvdyk7DQoJCQkJfQ0KCQkJfQ0KCQkNCgkJfQ0KCQkNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignaXRlbXMnLCAkc2hvd2dhbGxlcnkpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRzaG93Z2FsbGVyeSkpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlJywgJHRoaXMtPkxhbmcoJ2ltYWdlJykpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlJywgJHRoaXMtPkxhbmcoJ3RpdGxlJykpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbW1lbnQnLCAkdGhpcy0+TGFuZygnY29tbWVudCcpKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaWxlZGF0ZScsICR0aGlzLT5MYW5nKCdkYXRlJykpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FjdGl2ZScsICR0aGlzLT5MYW5nKCdhY3RpdmUnKSk7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZGVmYXVsdCcsICR0aGlzLT5MYW5nKCdkZWZhdWx0JykpOw0KCQkNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdkb19lZGl0Z2FsbGVyeScsJHJldHVybmlkLCdwb3N0JywnJywgZmFsc2UsICcnLCAkcGFyYW1zKSk7DQoJfQ0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2V0aXRsZScsJGdhbGxlcnlwYXRoKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2dhbGxlcnl0aXRsZScsJHRoaXMtPkxhbmcoJ2dhbGxlcnl0aXRsZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignZ2FsbGVyeXRpdGxlJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnZ2FsbGVyeXRpdGxlJywgJGdhbGxlcnlpbmZvWyd0aXRsZSddLCA0MCwgMTAwICkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfY29tbWVudCcsJHRoaXMtPkxhbmcoJ2NvbW1lbnQnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dhbGxlcnljb21tZW50JywgJHRoaXMtPkNyZWF0ZVRleHRBcmVhKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VfY29tbWVudF93eXNpd3lnJywxKSwgJGlkLCAkZ2FsbGVyeWluZm9bJ2NvbW1lbnQnXSwgJ2dhbGxlcnljb21tZW50JywgJ2Zha2UiIHN0eWxlPSJoZWlnaHQ6NmVtOycsICcnLCAnJywgJycsICc4MCcsICczJykpOw0KDQokdGVtcGxhdGVsaXN0ID0gYXJyYXkoJy0gJyAuICR0aGlzLT5MYW5nKCd1c2VkZWZhdWx0JykgLiAnIC0nPT5VU0VfREVGQVVMVF9URU1QTEFURSk7DQokcXVlcnkgPSAiU0VMRUNUIHRlbXBsYXRlX25hbWUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3RlbXBsYXRlcyBXSEVSRSBtb2R1bGVfbmFtZSA9ICdHYWxsZXJ5JyBPUkRFUiBCWSB0ZW1wbGF0ZV9uYW1lIEFTQyI7DQokcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQp3aGlsZSAoJHJlc3VsdCAmJiAkcm93ID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkNCiAgew0KICAgICR0ZW1wbGF0ZWxpc3RbJHJvd1sndGVtcGxhdGVfbmFtZSddXSA9ICRyb3dbJ3RlbXBsYXRlX25hbWUnXTsNCiAgfQ0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGUnLCAkdGhpcy0+TGFuZygndGVtcGxhdGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlJywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAndGVtcGxhdGUnLCAkdGVtcGxhdGVsaXN0LCAtMSwgJGdhbGxlcnlpbmZvWyd0ZW1wbGF0ZSddKSk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RodW1ibmFpbHNpemUnLCAkdGhpcy0+TGFuZygndGh1bWJuYWlsc2l6ZScpKTsNCiRyZXNpemVtZXRob2RsaXN0ID0gYXJyYXkoJHRoaXMtPkxhbmcoJ2Nyb3AnKT0+J2NyJywkdGhpcy0+TGFuZygnc2NhbGUnKT0+J3NjJywkdGhpcy0+TGFuZygnem9vbWNyb3AnKT0+J3pjJywkdGhpcy0+TGFuZygnem9vbXNjYWxlJyk9Pid6cycpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aHVtYm5haWxzaXplJywgDQoJCSR0aGlzLT5MYW5nKCdsZWF2ZWVtcHR5JykgLiAnPGJyIC8+JyAuDQoJCSR0aGlzLT5MYW5nKCd3aWR0aCcpIC4gJzombmJzcDsnIC4NCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAndGh1bWJ3aWR0aCcsICRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddLCA0LCA0ICkgLg0KCQknJm5ic3A7Jm5ic3A7Jm5ic3A7JyAuICR0aGlzLT5MYW5nKCdoZWlnaHQnKSAuICc6Jm5ic3A7JyAuDQoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ3RodW1iaGVpZ2h0JywgJGdhbGxlcnlpbmZvWyd0aHVtYmhlaWdodCddLCA0LCA0ICkgLg0KCQknJm5ic3A7Jm5ic3A7Jm5ic3A7JyAuICR0aGlzLT5MYW5nKCdyZXNpemVtZXRob2QnKSAuICc6Jm5ic3A7JyAuDQoJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ3Jlc2l6ZW1ldGhvZCcsICRyZXNpemVtZXRob2RsaXN0LCAtMSwgJGdhbGxlcnlpbmZvWydyZXNpemVtZXRob2QnXSkgLg0KCQkoIWVtcHR5KCRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddKSA/ICcmbmJzcDsmbmJzcDsmbmJzcDsnIC4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnY3JlYXRldGh1bWJzJywgJHJldHVybmlkLCAnPGltZyBzcmM9Ii4uL21vZHVsZXMvR2FsbGVyeS9pbWFnZXMvZnBhaW50LmdpZiIgYWx0PSInIC4gJHRoaXMtPkxhbmcoJ2NyZWF0ZXRodW1icycpIC4gJyIvPiAgJyAuICR0aGlzLT5MYW5nKCdjcmVhdGV0aHVtYnMnKSwgYXJyYXkoJ2dpZCc9PiRwYXJhbXNbJ2dpZCddKSwgJycsIGZhbHNlLCBmYWxzZSkgOiAnJykNCik7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdGJ1dHRvbicsICR0aGlzLT5MYW5nICgnc3VibWl0JykpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsICR0aGlzLT5MYW5nICgnY2FuY2VsJykpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXRnYWxsZXJ5LnRwbCcpOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYoICEkZ0NtcyApIGV4aXQoKTsNCg0KaWYoICEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkNCiAgew0KICAgICRwYXJhbXNbJ2Vycm9ycyddID0gJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpOw0KICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJycsJHBhcmFtcyk7DQogICAgcmV0dXJuOw0KICB9DQoNCmlmKCAhaXNzZXQoJHBhcmFtc1snbW9kZSddKSApDQogIHsNCiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsNCiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCcnLCRwYXJhbXMpOw0KICAgIHJldHVybjsNCiAgfQ0KDQokcGFyYW1zWydvcmlnYWN0aW9uJ10gPSAkcGFyYW1zWydhY3Rpb24nXTsNCiRjb250ZW50cyA9ICIiOw0KaWYoICRwYXJhbXNbJ21vZGUnXSA9PSAnYWRkJyApDQogIHsNCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQgKCRpZCwgJ2RvX2FkZHRlbXBsYXRlJywkcmV0dXJuaWQsJ3Bvc3QnLCcnLCBmYWxzZSwgJycsICRwYXJhbXMpKTsNCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlbmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ3RlbXBsYXRlJywgIiIsIDQwICkpOw0KICAgIGlmKCBpc3NldCgkcGFyYW1zWydkZWZhdWx0dGVtcGxhdGVwcmVmJ10pICYmICRwYXJhbXNbJ2RlZmF1bHR0ZW1wbGF0ZXByZWYnXSAhPSAnJyApDQogICAgICB7DQogICAgICAgICRjb250ZW50cyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRwYXJhbXNbJ2RlZmF1bHR0ZW1wbGF0ZXByZWYnXSk7DQogICAgICB9DQogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICYmICRwYXJhbXNbJ3RlbXBsYXRlJ10gIT0gJycgKQ0KICAgICAgew0KICAgICAgICAkY29udGVudHMgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGUnXSk7DQogICAgICB9DQogIH0NCmVsc2UgDQogIHsNCgkJaWYoICFpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZSddKSApDQoJCSAgew0KCQkgICAgJHBhcmFtc1snZXJyb3JzJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7DQoJCSAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCcnLCRwYXJhbXMpOw0KCQkgICAgcmV0dXJuOw0KCQkgIH0NCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQgKCRpZCwgJ2RvX2VkaXR0ZW1wbGF0ZScsJHJldHVybmlkLCdwb3N0JywnJywgZmFsc2UsICcnLCAkcGFyYW1zKSk7DQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZW5hbWUnLCRwYXJhbXNbJ3RlbXBsYXRlJ10pOw0KICAgICRjb250ZW50cyA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKTsNCiAgfQ0KDQokY29udGVudHNjb2RlID0gZXhwbG9kZShURU1QTEFURV9TRVBBUkFUT1IsICRjb250ZW50cyk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGUnLCR0aGlzLT5MYW5nKCd0aXRsZV90ZW1wbGF0ZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RlbXBsYXRlbmFtZScsJHRoaXMtPkxhbmcoJ3Byb21wdF90ZW1wbGF0ZW5hbWUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ3Byb21wdF90ZW1wbGF0ZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGVtcGxhdGUnLCAkdGhpcy0+Q3JlYXRlU3ludGF4QXJlYSAoJGlkLCAkY29udGVudHNjb2RlWzBdLCAndGVtcGxhdGVjb250ZW50JykpOw0KDQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignYXZhaWxhYmxldmFyaWFibGVzJywkdGhpcy0+TGFuZygnYXZhaWxhYmxldmFyaWFibGVzJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdmFpbGFibGV2YXJpYWJsZXNsaXN0JywkdGhpcy0+TGFuZygnYXZhaWxhYmxldmFyaWFibGVzbGlzdCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignYXZhaWxhYmxldmFyaWFibGVzbGluaycsJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9pbmZvLmdpZicsICR0aGlzLT5MYW5nKCdhdmFpbGFibGV2YXJpYWJsZXMnKSwnJywnJywnc3lzdGVtaWNvbicpKTsNCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGVjc3MnLCR0aGlzLT5MYW5nKCdwcm9tcHRfdGVtcGxhdGVjc3MnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlY3NzJywgJHRoaXMtPkNyZWF0ZVN5bnRheEFyZWEgKCRpZCwgc3RyX3JlcGxhY2UoIip9IiwgIiIsICRjb250ZW50c2NvZGVbMV0pLCAndGVtcGxhdGVjc3MnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZWpzJywkdGhpcy0+TGFuZygncHJvbXB0X3RlbXBsYXRlanMnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlanMnLCAkdGhpcy0+Q3JlYXRlU3ludGF4QXJlYSAoJGlkLCBzdWJzdHIoJGNvbnRlbnRzY29kZVsyXSwwLC0yKSwgJ3RlbXBsYXRlanMnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXRidXR0b24nLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignYXBwbHknLCRwYXJhbXNbJ21vZGUnXSA9PSAnYWRkJyA/ICcnIDogJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2FwcGx5YnV0dG9uJywgJHRoaXMtPkxhbmcoJ2FwcGx5JykpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsNCg0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlZGl0dGVtcGxhdGUudHBsJyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.showlatest.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQokcGFyYW1zWydkaXInXSA9IGlzc2V0KCRwYXJhbXNbJ2RpciddKSA/IGNtc19odG1sX2VudGl0eV9kZWNvZGUodHJpbSgkcGFyYW1zWydkaXInXSwiLyIpKSA6ICcnOw0KJHN0YXJ0ID0gKGlzc2V0KCRwYXJhbXNbJ3N0YXJ0J10pICYmIGlzX251bWVyaWMoJHBhcmFtc1snc3RhcnQnXSkpID8gJHBhcmFtc1snc3RhcnQnXSA6IDE7DQokbnVtYmVyID0gKGlzc2V0KCRwYXJhbXNbJ251bWJlciddKSAmJiBpc19udW1lcmljKCRwYXJhbXNbJ251bWJlciddKSkgPyAkcGFyYW1zWydudW1iZXInXSA6IDY7DQokc2hvdyA9IChpc3NldCgkcGFyYW1zWydzaG93J10pICYmIGluX2FycmF5KCRwYXJhbXNbJ3Nob3cnXSwgYXJyYXkoJ2FjdGl2ZScsJ2luYWN0aXZlJywnYWxsJykpKSA/ICRwYXJhbXNbJ3Nob3cnXSA6ICdhY3RpdmUnOw0KDQokaW1nY291bnQgPSAwOw0KJGl0ZW1jb3VudCA9IDA7DQokaW1hZ2VzID0gYXJyYXkoKTsNCg0KaWYgKCBpc19kaXIoREVGQVVMVF9HQUxMRVJZX1BBVEggLiAkcGFyYW1zWydkaXInXSkgKQ0Kew0KCSR0aGlzLT5zbWFydHktPmFzc2lnbignZ2FsbGVyeXRpdGxlJywgc3Vic3RyKCRwYXJhbXNbJ2RpciddLCBzdHJycG9zKCRwYXJhbXNbJ2RpciddLCAnLycpICsgMSkpOw0KDQoJLy8gZ2V0IGdhbGxlcnkgaW5mbw0KCSRnYWxsZXJ5aW5mbyA9ICR0aGlzLT5fR2V0Z2FsbGVyeWluZm8oJHBhcmFtc1snZGlyJ10pOw0KDQoJaWYgKCAkZ2FsbGVyeWluZm9bJ2FjdGl2ZSddID09IDEgKQ0KCXsNCgkJaWYgKCAhZW1wdHkoJGdhbGxlcnlpbmZvWyd0aXRsZSddKSApDQoJCXsNCgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZ2FsbGVyeXRpdGxlJywgJGdhbGxlcnlpbmZvWyd0aXRsZSddKTsNCgkJfQ0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dhbGxlcnljb21tZW50JywgJGdhbGxlcnlpbmZvWydjb21tZW50J10pOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhcmVudGxpbmsnLCAnJyk7DQoJfQ0KDQoNCg0KCS8vIGJ1aWxkIGdhbGxlcnkgd2l0aCByYW5kb20gaW1hZ2VzDQoJDQoJJGRiID0mICR0aGlzLT5HZXREQigpOwkNCgkkcXVlcnkgPSAiU0VMRUNUDQoJCQkJCQkJZzEuKiwgZzIuYWN0aXZlDQoJCQkJCQlGUk9NIA0KCQkJCQkJCSIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX2dhbGxlcnkgZzENCgkJCQkJCUxFRlQgSk9JTg0KCQkJCQkJCSIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX2dhbGxlcnkgZzINCgkJCQkJCU9ODQoJCQkJCQkJZzEuZ2FsbGVyeWlkID0gZzIuZmlsZWlkDQoJCQkJCQlXSEVSRQ0KCQkJCQkJCWcxLmZpbGVuYW1lIE5PVCBMSUtFICclLycNCgkJCQkJCQlBTkQgKGcxLmdhbGxlcnlpZD0/IE9SIGcxLmZpbGVwYXRoIExJS0UgPykiOw0KCVN3aXRjaCAoJHNob3cpDQoJew0KCQlDYXNlICdhY3RpdmUnOiANCgkJCSRxdWVyeSAuPSAiIEFORCBnMS5hY3RpdmU9MSI7DQoJCQlicmVhazsNCgkJQ2FzZSAnaW5hY3RpdmUnOg0KCQkJJHF1ZXJ5IC49ICIgQU5EIGcxLmFjdGl2ZT0wIjsNCgkJCWJyZWFrOw0KCX0NCgkkcXVlcnkgLj0gIg0KCQkJCQkJT1JERVIgQlkNCgkJCQkJCQlmaWxlZGF0ZSBERVNDDQoJCQkJCQlMSU1JVCAwLD8iOw0KCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkZ2FsbGVyeWluZm9bJ2ZpbGVpZCddLCAoZW1wdHkoJHBhcmFtc1snZGlyJ10pID8gJyUnIDogJHBhcmFtc1snZGlyJ10gLiAiLyUiKSwgJG51bWJlcikpOw0KCWlmICggJHJlc3VsdCAmJiAkcmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCApIA0KCXsNCgkgICRvdXRwdXQgPSBhcnJheSgpOw0KCSAgd2hpbGUgKCAkcm93PSRyZXN1bHQtPkZldGNoUm93KCkgKSANCgkgIHsNCgkgICAgJG91dHB1dFt0cmltKCRyb3dbJ2ZpbGVwYXRoJ10gLiAnLycgLiAkcm93WydmaWxlbmFtZSddLCcvJyldID0gJHJvdzsNCgkgICAgDQoJCS8vIGNyZWF0ZSBhIG5ldyBvYmplY3QgZm9yIGV2ZXJ5IHJlY29yZCB0aGF0IHdlIHJldHJpZXZlDQoJCSRyZWMgPSBuZXcgc3RkQ2xhc3MoKTsNCgkJJHJlYy0+ZmlsZSA9IERFRkFVTFRfR0FMTEVSWV9QQVRIIC4gdHJpbSgkcm93WydmaWxlcGF0aCddIC4gJy8nIC4gJHJvd1snZmlsZW5hbWUnXSwnLycpOw0KCQkkcmVjLT5maWxlZGF0ZSA9ICRyb3dbJ2ZpbGVkYXRlJ107DQoJCSRyZWMtPnRpdGxlID0gZW1wdHkoJHJvd1sndGl0bGUnXSkgPyAkcm93WydmaWxlbmFtZSddIDogJHJvd1sndGl0bGUnXTsNCgkJJHJlYy0+Y29tbWVudCA9ICRyb3dbJ2NvbW1lbnQnXTsNCgkJaWYgKCAkZ2FsbGVyeWluZm9bJ3RodW1id2lkdGgnXSA+IDAgKQ0KCQl7DQoJCQkkcmVjLT50aHVtYiA9ICdtb2R1bGVzL0dhbGxlcnkvdGh1bWJzLycgLiAkZ2FsbGVyeWluZm9bJ2ZpbGVpZCddIC4gJy0nIC4gJHJvd1snZmlsZWlkJ10gLiAnLScgLiAkZ2FsbGVyeWluZm9bJ3RodW1id2lkdGgnXSAuICd4JyAuICRnYWxsZXJ5aW5mb1sndGh1bWJoZWlnaHQnXSAuICctJyAuICRnYWxsZXJ5aW5mb1sncmVzaXplbWV0aG9kJ10gLiBzdWJzdHIoJHJvd1snZmlsZW5hbWUnXSwgc3RycnBvcygkcm93WydmaWxlbmFtZSddLCAnLicpKSA7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkcmVjLT50aHVtYiA9IERFRkFVTFRfR0FMTEVSWV9QQVRIIC4gKGVtcHR5KCRyb3dbJ2ZpbGVwYXRoJ10pID8gJycgOiAkcm93WydmaWxlcGF0aCddIC4gJy8nKSAuIElNX1BSRUZJWCAuICRyb3dbJ2ZpbGVuYW1lJ107DQoJCX0NCgkJJHJlYy0+Zm9sZGVybGluayA9ICcnOw0KCQkkaXRlbWNvdW50Kys7DQoJCSRpbWdjb3VudCsrOw0KDQoJCWlmICggIWZpbGVfZXhpc3RzKCRyZWMtPnRodW1iKSApDQoJCXsNCgkJCSR0aGlzLT5fQ3JlYXRlVGh1bWJuYWlsKCRyZWMtPnRodW1iLCANCgkJCSAgICAgICAgICAgICAgICAgICAgICAgICRyZWMtPmZpbGUsIA0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgKCRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddID4gMCkgPyAkZ2FsbGVyeWluZm9bJ3RodW1id2lkdGgnXSA6IDk2LA0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgKCRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddID4gMCkgPyAkZ2FsbGVyeWluZm9bJ3RodW1iaGVpZ2h0J10gOiA5NiwNCgkJCSAgICAgICAgICAgICAgICAgICAgICAgICgkZ2FsbGVyeWluZm9bJ3RodW1id2lkdGgnXSA+IDApID8gJGdhbGxlcnlpbmZvWydyZXNpemVtZXRob2QnXSA6ICdzY2FsZScpOwkJCQkJDQoJCX0NCgkJYXJyYXlfcHVzaCgkaW1hZ2VzLCRyZWMpOw0KCSAgfQ0KCX0NCn0NCmVsc2UNCnsNCgkkcGFyYW1zWydtb2R1bGVfbWVzc2FnZSddID0gIlRoZSBkaXJlY3RvcnkgJyIgLiAkcGFyYW1zWydkaXInXSAuICInIGRvZXMgbm90IGV4aXN0LiBDaGVjayB5b3VyIHBhcmFtZXRlcnMuIjsNCn0NCg0KDQovLyBFeHBvc2UgdGhlIGxpc3QgdG8gc21hcnR5LiBVc2UgImJ5X3JlZiIgdG8gc2F2ZSBtZW1vcnkuDQokdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdpbWFnZXMnLCRpbWFnZXMpOw0KDQovLyBhbmQgYSBjb3VudCBvZiByZWNvcmRzDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlY291bnQnLCAkaW1nY291bnQgLiAnICcgLiAoJGltZ2NvdW50ID09IDEgPyAkdGhpcy0+TGFuZygnaW1hZ2UnKSA6ICR0aGlzLT5MYW5nKCdpbWFnZXMnKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCAkaXRlbWNvdW50KTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnZXMnLCBjZWlsKCRpdGVtY291bnQvJG51bWJlcikpOw0KDQovLyBuYXZpZ2F0aW9ubGlua3Mgbm90IG5lc2Nlc2FyeSwgYnV0IGRlZmluZSBzbWFydHkgdmFyaWFibGVzIGZvciB0ZW1wbGF0ZXMgdGhhdCB1c2UgdGhlbQ0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcmV2cGFnZScsICcnKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignbmV4dHBhZ2UnLCAnJyk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2VsaW5rcycsICcnKTsNCg0KDQppZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX21lc3NhZ2UnXSkpDQp7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtb2R1bGVfbWVzc2FnZScsJHBhcmFtc1snbW9kdWxlX21lc3NhZ2UnXSk7DQp9DQplbHNlDQp7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtb2R1bGVfbWVzc2FnZScsJycpOw0KfQ0KDQoNCi8vIERpc3BsYXkgdGVtcGxhdGUNCiR0ZW1wbGF0ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjdXJyZW50X3RlbXBsYXRlJyk7DQppZiAoICFlbXB0eSgkZ2FsbGVyeWluZm9bJ3RlbXBsYXRlJ10pICYmICRnYWxsZXJ5aW5mb1sndGVtcGxhdGUnXSAhPSBVU0VfREVGQVVMVF9URU1QTEFURSApDQogIHsNCiAgICAkdGVtcGxhdGUgPSAkZ2FsbGVyeWluZm9bJ3RlbXBsYXRlJ107DQogIH0NCmlmICggaXNzZXQoJHBhcmFtc1sndGVtcGxhdGUnXSkgKQ0KICB7DQogICAgJHRlbXBsYXRlID0gJHBhcmFtc1sndGVtcGxhdGUnXTsNCiAgfQ0KDQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHRlbXBsYXRlKTsNCg0KDQovLyBwYXNzIGRhdGEgdG8gaGVhZCBzZWN0aW9uLg0KDQovLyBnZXQgdGVtcGxhdGUtc3BlY2lmaWMgSmF2YVNjcmlwdCBhbmQgZWNobw0KJHRlbXBsYXRlY29kZSA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgkdGVtcGxhdGUpOw0KJHRlbXBsYXRlY29kZWFyciA9IGV4cGxvZGUoVEVNUExBVEVfU0VQQVJBVE9SLCAkdGVtcGxhdGVjb2RlKTsNCiR0ZW1wbGF0ZV9tZXRhZGF0YSA9IHN1YnN0cigkdGVtcGxhdGVjb2RlYXJyWzJdLDAsLTIpOw0KDQovLyBjaGVjayBpZiBhIGNzcyBmaWxlIGV4aXN0cyBhbmQgZWNobw0KaWYgKCBmaWxlX2V4aXN0cygibW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9jc3MvIiAuICR0ZW1wbGF0ZSAuICIuY3NzIikgKQ0Kew0KCSR0ZW1wbGF0ZV9tZXRhZGF0YSAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2Nzcy8nIC4gJHRlbXBsYXRlIC4gJy5jc3MiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIiAvPg0KJzsNCn0NCiR0aGlzLT5HYWxsZXJ5TWV0YWRhdGEgPSAkdGVtcGxhdGVfbWV0YWRhdGE7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.showrandom.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQokc2hvd3N1YmRpciA9IChpc3NldCgkcGFyYW1zWydkaXInXSkgJiYgc3Vic3RyKCRwYXJhbXNbJ2RpciddLC0xKSkgPT0gJyonID8gVFJVRSA6IEZBTFNFOw0KJHBhcmFtc1snZGlyJ10gPSBpc3NldCgkcGFyYW1zWydkaXInXSkgPyBjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKHRyaW0odHJpbSgkcGFyYW1zWydkaXInXSwiKiIpLCIvIikpIDogJyc7DQokc3RhcnQgPSAoaXNzZXQoJHBhcmFtc1snc3RhcnQnXSkgJiYgaXNfbnVtZXJpYygkcGFyYW1zWydzdGFydCddKSkgPyAkcGFyYW1zWydzdGFydCddIDogMTsNCiRudW1iZXIgPSAoaXNzZXQoJHBhcmFtc1snbnVtYmVyJ10pICYmIGlzX251bWVyaWMoJHBhcmFtc1snbnVtYmVyJ10pKSA/ICRwYXJhbXNbJ251bWJlciddIDogNjsNCiRzaG93ID0gKGlzc2V0KCRwYXJhbXNbJ3Nob3cnXSkgJiYgaW5fYXJyYXkoJHBhcmFtc1snc2hvdyddLCBhcnJheSgnYWN0aXZlJywnaW5hY3RpdmUnLCdhbGwnKSkpID8gJHBhcmFtc1snc2hvdyddIDogJ2FjdGl2ZSc7DQoNCiRpbWdjb3VudCA9IDA7DQokaXRlbWNvdW50ID0gMDsNCiRpbWFnZXMgPSBhcnJheSgpOw0KDQppZiAoIGlzX2RpcihERUZBVUxUX0dBTExFUllfUEFUSCAuICRwYXJhbXNbJ2RpciddKSApDQp7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnYWxsZXJ5dGl0bGUnLCBzdWJzdHIoJHBhcmFtc1snZGlyJ10sIHN0cnJwb3MoJHBhcmFtc1snZGlyJ10sICcvJykgKyAxKSk7DQoNCgkvLyBnZXQgZ2FsbGVyeSBpbmZvDQoJJGdhbGxlcnlpbmZvID0gJHRoaXMtPl9HZXRnYWxsZXJ5aW5mbygkcGFyYW1zWydkaXInXSk7DQoNCglpZiAoICRnYWxsZXJ5aW5mb1snYWN0aXZlJ10gPT0gMSApDQoJew0KCQlpZiAoICFlbXB0eSgkZ2FsbGVyeWluZm9bJ3RpdGxlJ10pICkNCgkJew0KCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnYWxsZXJ5dGl0bGUnLCAkZ2FsbGVyeWluZm9bJ3RpdGxlJ10pOw0KCQl9DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZ2FsbGVyeWNvbW1lbnQnLCAkZ2FsbGVyeWluZm9bJ2NvbW1lbnQnXSk7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigncGFyZW50bGluaycsICcnKTsNCgl9DQoNCg0KDQoJLy8gYnVpbGQgZ2FsbGVyeSB3aXRoIHJhbmRvbSBpbWFnZXMNCgkNCgkkZGIgPSYgJHRoaXMtPkdldERCKCk7CQ0KCSRxdWVyeSA9ICJTRUxFQ1QNCgkJCQkJCQlnMS4qLCBnMi5hY3RpdmUNCgkJCQkJCUZST00gDQoJCQkJCQkJIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfZ2FsbGVyeSBnMQ0KCQkJCQkJTEVGVCBKT0lODQoJCQkJCQkJIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfZ2FsbGVyeSBnMg0KCQkJCQkJT04NCgkJCQkJCQlnMS5nYWxsZXJ5aWQgPSBnMi5maWxlaWQNCgkJCQkJCVdIRVJFDQoJCQkJCQkJZzEuZmlsZW5hbWUgTk9UIExJS0UgJyUvJyI7DQoJaWYgKCAkc2hvd3N1YmRpciApDQoJew0KCQkkcXVlcnkgLj0gIg0KCQkJCQkJQU5EIChnMS5nYWxsZXJ5aWQ9PyBPUiBnMS5maWxlcGF0aCBMSUtFID8pIjsNCgl9DQoJZWxzZXsNCgkJJHF1ZXJ5IC49ICINCgkJCQkJCUFORCAoZzEuZ2FsbGVyeWlkPT8gT1IgZzEuZmlsZXBhdGggPSA/KSI7DQoJfQ0KCVN3aXRjaCAoJHNob3cpDQoJew0KCQlDYXNlICdhY3RpdmUnOiANCgkJCSRxdWVyeSAuPSAiIEFORCBnMS5hY3RpdmU9MSI7DQoJCQlicmVhazsNCgkJQ2FzZSAnaW5hY3RpdmUnOg0KCQkJJHF1ZXJ5IC49ICIgQU5EIGcxLmFjdGl2ZT0wIjsNCgkJCWJyZWFrOw0KCX0NCgkkcXVlcnkgLj0gIg0KCQkJCQkJT1JERVIgQlkNCgkJCQkJCQlSQU5EKCkNCgkJCQkJCUxJTUlUIDAsPyI7DQoJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRnYWxsZXJ5aW5mb1snZmlsZWlkJ10sIChlbXB0eSgkcGFyYW1zWydkaXInXSkgPyAnJScgOiAkcGFyYW1zWydkaXInXSAuICIvJSIpLCAkbnVtYmVyKSk7DQoJaWYgKCAkcmVzdWx0ICYmICRyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwICkgDQoJew0KCSAgJG91dHB1dCA9IGFycmF5KCk7DQoJICB3aGlsZSAoICRyb3c9JHJlc3VsdC0+RmV0Y2hSb3coKSApIA0KCSAgew0KCSAgICAkb3V0cHV0W3RyaW0oJHJvd1snZmlsZXBhdGgnXSAuICcvJyAuICRyb3dbJ2ZpbGVuYW1lJ10sJy8nKV0gPSAkcm93Ow0KCSAgICANCgkJLy8gY3JlYXRlIGEgbmV3IG9iamVjdCBmb3IgZXZlcnkgcmVjb3JkIHRoYXQgd2UgcmV0cmlldmUNCgkJJHJlYyA9IG5ldyBzdGRDbGFzcygpOw0KCQkkcmVjLT5maWxlID0gREVGQVVMVF9HQUxMRVJZX1BBVEggLiB0cmltKCRyb3dbJ2ZpbGVwYXRoJ10gLiAnLycgLiAkcm93WydmaWxlbmFtZSddLCcvJyk7DQoJCSRyZWMtPmZpbGVkYXRlID0gJHJvd1snZmlsZWRhdGUnXTsNCgkJJHJlYy0+dGl0bGUgPSBlbXB0eSgkcm93Wyd0aXRsZSddKSA/ICRyb3dbJ2ZpbGVuYW1lJ10gOiAkcm93Wyd0aXRsZSddOw0KCQkkcmVjLT5jb21tZW50ID0gJHJvd1snY29tbWVudCddOw0KCQlpZiAoICRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddID4gMCApDQoJCXsNCgkJCSRyZWMtPnRodW1iID0gJ21vZHVsZXMvR2FsbGVyeS90aHVtYnMvJyAuICRnYWxsZXJ5aW5mb1snZmlsZWlkJ10gLiAnLScgLiAkcm93WydmaWxlaWQnXSAuICctJyAuICRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddIC4gJ3gnIC4gJGdhbGxlcnlpbmZvWyd0aHVtYmhlaWdodCddIC4gJy0nIC4gJGdhbGxlcnlpbmZvWydyZXNpemVtZXRob2QnXSAuIHN1YnN0cigkcm93WydmaWxlbmFtZSddLCBzdHJycG9zKCRyb3dbJ2ZpbGVuYW1lJ10sICcuJykpIDsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRyZWMtPnRodW1iID0gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAoZW1wdHkoJHJvd1snZmlsZXBhdGgnXSkgPyAnJyA6ICRyb3dbJ2ZpbGVwYXRoJ10gLiAnLycpIC4gSU1fUFJFRklYIC4gJHJvd1snZmlsZW5hbWUnXTsNCgkJfQ0KCQkkcmVjLT5mb2xkZXJsaW5rID0gJyc7DQoJCSRpdGVtY291bnQrKzsNCgkJJGltZ2NvdW50Kys7DQoNCgkJaWYgKCAhZmlsZV9leGlzdHMoJHJlYy0+dGh1bWIpICkNCgkJew0KCQkJJHRoaXMtPl9DcmVhdGVUaHVtYm5haWwoJHJlYy0+dGh1bWIsIA0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgJHJlYy0+ZmlsZSwgDQoJCQkgICAgICAgICAgICAgICAgICAgICAgICAoJGdhbGxlcnlpbmZvWyd0aHVtYndpZHRoJ10gPiAwKSA/ICRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddIDogOTYsDQoJCQkgICAgICAgICAgICAgICAgICAgICAgICAoJGdhbGxlcnlpbmZvWyd0aHVtYndpZHRoJ10gPiAwKSA/ICRnYWxsZXJ5aW5mb1sndGh1bWJoZWlnaHQnXSA6IDk2LA0KCQkJICAgICAgICAgICAgICAgICAgICAgICAgKCRnYWxsZXJ5aW5mb1sndGh1bWJ3aWR0aCddID4gMCkgPyAkZ2FsbGVyeWluZm9bJ3Jlc2l6ZW1ldGhvZCddIDogJ3NjYWxlJyk7CQkJCQkNCgkJfQ0KCQlhcnJheV9wdXNoKCRpbWFnZXMsJHJlYyk7DQoJICB9DQoJfQ0KfQ0KZWxzZQ0Kew0KCSRwYXJhbXNbJ21vZHVsZV9tZXNzYWdlJ10gPSAiVGhlIGRpcmVjdG9yeSAnIiAuICRwYXJhbXNbJ2RpciddIC4gIicgZG9lcyBub3QgZXhpc3QuIENoZWNrIHlvdXIgcGFyYW1ldGVycy4iOw0KfQ0KDQoNCi8vIEV4cG9zZSB0aGUgbGlzdCB0byBzbWFydHkuIFVzZSAiYnlfcmVmIiB0byBzYXZlIG1lbW9yeS4NCiR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2ltYWdlcycsJGltYWdlcyk7DQoNCi8vIGFuZCBhIGNvdW50IG9mIHJlY29yZHMNCiR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2Vjb3VudCcsICRpbWdjb3VudCAuICcgJyAuICgkaW1nY291bnQgPT0gMSA/ICR0aGlzLT5MYW5nKCdpbWFnZScpIDogJHRoaXMtPkxhbmcoJ2ltYWdlcycpKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsICRpdGVtY291bnQpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYWdlcycsIGNlaWwoJGl0ZW1jb3VudC8kbnVtYmVyKSk7DQoNCi8vIG5hdmlnYXRpb25saW5rcyBub3QgbmVzY2VzYXJ5LCBidXQgZGVmaW5lIHNtYXJ0eSB2YXJpYWJsZXMgZm9yIHRlbXBsYXRlcyB0aGF0IHVzZSB0aGVtDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3ByZXZwYWdlJywgJycpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduZXh0cGFnZScsICcnKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnZWxpbmtzJywgJycpOw0KDQoNCmlmIChpc3NldCgkcGFyYW1zWydtb2R1bGVfbWVzc2FnZSddKSkNCnsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZHVsZV9tZXNzYWdlJywkcGFyYW1zWydtb2R1bGVfbWVzc2FnZSddKTsNCn0NCmVsc2UNCnsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21vZHVsZV9tZXNzYWdlJywnJyk7DQp9DQoNCg0KLy8gRGlzcGxheSB0ZW1wbGF0ZQ0KJHRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfdGVtcGxhdGUnKTsNCmlmICggIWVtcHR5KCRnYWxsZXJ5aW5mb1sndGVtcGxhdGUnXSkgJiYgJGdhbGxlcnlpbmZvWyd0ZW1wbGF0ZSddICE9IFVTRV9ERUZBVUxUX1RFTVBMQVRFICkNCiAgew0KICAgICR0ZW1wbGF0ZSA9ICRnYWxsZXJ5aW5mb1sndGVtcGxhdGUnXTsNCiAgfQ0KaWYgKCBpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZSddKSApDQogIHsNCiAgICAkdGVtcGxhdGUgPSAkcGFyYW1zWyd0ZW1wbGF0ZSddOw0KICB9DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgkdGVtcGxhdGUpOw0KDQoNCi8vIHBhc3MgZGF0YSB0byBoZWFkIHNlY3Rpb24uDQoNCi8vIGdldCB0ZW1wbGF0ZS1zcGVjaWZpYyBKYXZhU2NyaXB0IGFuZCBlY2hvDQokdGVtcGxhdGVjb2RlID0gJHRoaXMtPkdldFRlbXBsYXRlKCR0ZW1wbGF0ZSk7DQokdGVtcGxhdGVjb2RlYXJyID0gZXhwbG9kZShURU1QTEFURV9TRVBBUkFUT1IsICR0ZW1wbGF0ZWNvZGUpOw0KJHRlbXBsYXRlX21ldGFkYXRhID0gc3Vic3RyKCR0ZW1wbGF0ZWNvZGVhcnJbMl0sMCwtMik7DQoNCi8vIGNoZWNrIGlmIGEgY3NzIGZpbGUgZXhpc3RzIGFuZCBlY2hvDQppZiAoIGZpbGVfZXhpc3RzKCJtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2Nzcy8iIC4gJHRlbXBsYXRlIC4gIi5jc3MiKSApDQp7DQoJJHRlbXBsYXRlX21ldGFkYXRhIC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvY3NzLycgLiAkdGVtcGxhdGUgLiAnLmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+DQonOw0KfQ0KJHRoaXMtPkdhbGxlcnlNZXRhZGF0YSA9ICR0ZW1wbGF0ZV9tZXRhZGF0YTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.switchactive.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQovLyBDaGVjayBwZXJtaXNzaW9ucw0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR2FsbGVyeScpICkNCnsNCgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7DQoJcmV0dXJuOw0KfQ0KDQokZmlsZV9pZCA9ICcnOw0KaWYgKCBpc3NldCgkcGFyYW1zWydmaWQnXSkgKQ0Kew0KCSRmaWxlX2lkID0gJHBhcmFtc1snZmlkJ107DQp9DQoNCg0KJHF1ZXJ5ID0gIlVQREFURSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9nYWxsZXJ5IFNFVCBhY3RpdmUgPSBhY3RpdmVeMSBXSEVSRSBmaWxlaWQgPSA/IjsNCiRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRmaWxlX2lkKSk7DQoNCiR0aGlzLT5SZWRpcmVjdCgkaWQsICRwYXJhbXNbJ29yaWdhY3Rpb24nXSAsICRyZXR1cm5pZCwgJHBhcmFtcyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.switchdefault.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQovLyBDaGVjayBwZXJtaXNzaW9ucw0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR2FsbGVyeScpICkNCnsNCgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7DQoJcmV0dXJuOw0KfQ0KDQokZmlsZV9pZCA9IGlzc2V0KCRwYXJhbXNbJ2ZpZCddKSA/ICRwYXJhbXNbJ2ZpZCddIDogJyc7DQokZ2FsbGVyeSA9IGlzc2V0KCRwYXJhbXNbJ2dpZCddKSA/ICRwYXJhbXNbJ2dpZCddIDogJyc7DQoNCiRxdWVyeSA9ICJVUERBVEUgIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfZ2FsbGVyeSBTRVQgZGVmYXVsdGZpbGUgPSA/IFdIRVJFIGZpbGVpZCA9ID8iOw0KJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGZpbGVfaWQsJGdhbGxlcnkpKTsNCg0KJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2VkaXRnYWxsZXJ5JyAsICRyZXR1cm5pZCwgJHBhcmFtcyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.switchdefaulttemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCggJGdDbXMgKSApIGV4aXQoKTsKCgppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApCiAgewoJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJcmV0dXJuOwogIH0KCmlmKCAhaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlJ10gKSApCiAgewoJCSRwYXJhbXMgPSBhcnJheSgnZXJyb3JzJz0+ICdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicgLCAkcmV0dXJuaWQsICRwYXJhbXMpOwogICAgcmV0dXJuOwogIH0KCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3RlbXBsYXRlJywkcGFyYW1zWyd0ZW1wbGF0ZSddKTsKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicgLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJykpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_galleriestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiR0aGVtZU9iamVjdCA9JiAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ107DQokdGhpcy0+X1VwZGF0ZUdhbGxlcnlEQignJywxKTsNCiRnYWxsZXJpZXMgPSAkdGhpcy0+X0dldEdhbGxlcmllcygpOw0KDQokc2hvd2dhbGxlcmllcyA9IGFycmF5KCk7DQppZiAoIGVtcHR5KCRnYWxsZXJpZXMpICkNCnsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25vZ2FsbGVyaWVzdGV4dCcsICR0aGlzLT5sYW5nKCJub2dhbGxlcmllc3RleHQiKSk7DQp9IA0KZWxzZSANCnsNCglmb3JlYWNoICgkZ2FsbGVyaWVzIGFzICRnYWxsZXJ5KSANCgl7DQoJCSRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsNCg0KCQkkb25lcm93LT5maWxlID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdGdhbGxlcnknLCAkcmV0dXJuaWQsIChlbXB0eSgkZ2FsbGVyeVsnZmlsZXBhdGgnXSkgPyAnJyA6ICRnYWxsZXJ5WydmaWxlcGF0aCddIC4gJy8nKSAuICRnYWxsZXJ5WydmaWxlbmFtZSddLCBhcnJheSgnZ2lkJz0+JGdhbGxlcnlbJ2ZpbGVpZCddLCdtb2RlJz0+ImVkaXQiKSk7DQoNCgkJaWYgKCAkZ2FsbGVyeVsnYWN0aXZlJ10gKSANCiAgICB7DQoJCQkkYWN0aXZlaW1hZ2UgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywgJHRoaXMtPkxhbmcoJ3NldGZhbHNlJyksJycsJycsJ3N5c3RlbWljb24nKTsNCgkJfSANCiAgICBlbHNlIA0KICAgIHsNCgkJCSRhY3RpdmVpbWFnZSA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmJywgJHRoaXMtPkxhbmcoJ3NldHRydWUnKSwnJywnJywnc3lzdGVtaWNvbicpOw0KCQl9DQoJCSRvbmVyb3ctPmFjdGl2ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdzd2l0Y2hhY3RpdmUnLCAkcmV0dXJuaWQsICRhY3RpdmVpbWFnZSwgYXJyYXkoJ2ZpZCcgPT4gJGdhbGxlcnlbJ2ZpbGVpZCddLCAnb3JpZ2FjdGlvbicgPT4gJ2RlZmF1bHRhZG1pbicpKTsNCg0KCQkkb25lcm93LT5lZGl0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRnYWxsZXJ5JywgJHJldHVybmlkLA0KCQkkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXRnYWxsZXJ5JyksJycsJycsJ3N5c3RlbWljb24nKSwNCgkJYXJyYXkoJ2dpZCcgPT4gJGdhbGxlcnlbJ2ZpbGVpZCddLCdtb2RlJz0+ImVkaXQiKSk7DQoNCgkJYXJyYXlfcHVzaCgkc2hvd2dhbGxlcmllcywgJG9uZXJvdyk7DQoJfQ0KDQp9DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2l0ZW1zJywgJHNob3dnYWxsZXJpZXMpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkc2hvd2dhbGxlcmllcykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnYWxsZXJ5cGF0aCcsICR0aGlzLT5MYW5nKCdnYWxsZXJ5cGF0aCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWN0aXZlJywgJHRoaXMtPkxhbmcoJ2FjdGl2ZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWN0aW9ucycsICR0aGlzLT5MYW5nKCdhY3Rpb25zJykpOw0KDQokbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRnYWxsZXJ5JywgMCwgJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZGdhbGxlcnknKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdGdhbGxlcnknLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCJhZGRnYWxsZXJ5IiksIGFycmF5KCJtb2RlIj0+ImFkZCIpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAkbGluayk7DQoNCg0KLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlDQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdhZG1pbmdhbGxlcmllcy50cGwnKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_optionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KICAvLyBDcmVhdGVGb3JtU3RhcnQgc2V0cyB1cCBhIHByb3BlciBmb3JtIHRhZyB0aGF0IHdpbGwgY2F1c2UgdGhlIHN1Ym1pdCB0bw0KICAvLyByZXR1cm4gY29udHJvbCB0byB0aGlzIG1vZHVsZSBmb3IgcHJvY2Vzc2luZy4NCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnZG9fdXBkYXRlb3B0aW9ucycsICRyZXR1cm5pZCkpOw0KJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOw0KDQokc21hcnR5LT5hc3NpZ24oJ2FsbG93ZWRfZXh0ZW5zaW9ucycsJHRoaXMtPkxhbmcoJ2FsbG93ZWRfZXh0ZW5zaW9ucycpKTsNCiRzbWFydHktPmFzc2lnbignaW5wdXRfYWxsb3dlZF9leHRlbnNpb25zJywkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnYWxsb3dlZF9leHRlbnNpb25zJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWxsb3dlZF9leHRlbnNpb25zJywnJyksNTAsMjU1KSk7DQoNCiRzbWFydHktPmFzc2lnbigndXNlX2NvbW1lbnRfd3lzaXd5ZycsJHRoaXMtPkxhbmcoJ3VzZV9jb21tZW50X3d5c2l3eWcnKSk7DQokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3VzZV9jb21tZW50X3d5c2l3eWcnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICd1c2VfY29tbWVudF93eXNpd3lnJywgJzEnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlX2NvbW1lbnRfd3lzaXd5ZycsMSkpKTsNCg0KJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ29wdGlvbnNzdWJtaXRidXR0b24nLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsNCg0KLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlDQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdhZG1pbm9wdGlvbnMudHBsJyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/function.admin_templatestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KJGZhbHNlaW1hZ2UxID0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9mYWxzZS5naWYnLCdtYWtlIGRlZmF1bHQnLCcnLCcnLCdzeXN0ZW1pY29uJyk7DQokdHJ1ZWltYWdlMSA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCdkZWZhdWx0JywnJywnJywnc3lzdGVtaWNvbicpOw0KDQokYWxsdGVtcGxhdGVzID0gJHRoaXMtPkxpc3RUZW1wbGF0ZXMoKTsNCiRyb3dhcnJheSA9IGFycmF5KCk7DQokcm93Y2xhc3MgPSAncm93MSc7DQoNCmZvcmVhY2goICRhbGx0ZW1wbGF0ZXMgYXMgJG9uZXRlbXBsYXRlICkNCnsNCgkkdG1wID0gJG9uZXRlbXBsYXRlOw0KCSRyb3cgPSBuZXcgU3RkQ2xhc3MoKTsNCgkkcm93LT5uYW1lID0gJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwNCgkJCQkkdG1wLCBhcnJheSgndGVtcGxhdGUnID0+ICR0bXAsICdtb2RlJz0+J2VkaXQnKSk7DQoJJHJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7DQoJDQoJJGRlZmF1bHQgPSAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfdGVtcGxhdGUnKSA9PSAkdG1wKSA/IHRydWUgOiBmYWxzZTsNCglpZiggJGRlZmF1bHQgKQ0KCXsNCgkJJHJvdy0+ZGVmYXVsdCA9ICR0cnVlaW1hZ2UxOw0KCX0NCgllbHNlDQoJew0KCQkkcm93LT5kZWZhdWx0ID0gJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ3N3aXRjaGRlZmF1bHR0ZW1wbGF0ZScsICRyZXR1cm5pZCwNCgkJCQkgICAgICAgJGZhbHNlaW1hZ2UxLA0KCQkJCSAgICAgICBhcnJheSgndGVtcGxhdGUnPT4kdG1wKSk7DQoJfQ0KDQoJJHJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLA0KCQkJCSAgICAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPg0KCQkJCSAgICBEaXNwbGF5SW1hZ2UgKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLA0KCQkJCQkJICAkdGhpcy0+TGFuZyAoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLA0KCQkJCSAgICBhcnJheSAoJ3RlbXBsYXRlJyA9PiAkdG1wLCAnbW9kZSc9PidlZGl0JykpOw0KCQ0KCSRyb3ctPmNvcHlsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwNCgkJCQkgICAgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT4NCgkJCQkgICAgRGlzcGxheUltYWdlICgnaWNvbnMvc3lzdGVtL2NvcHkuZ2lmJywNCgkJCQkJCSAgJHRoaXMtPkxhbmcgKCdjb3B5JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwNCgkJCQkgICAgYXJyYXkgKCd0ZW1wbGF0ZScgPT4gJHRtcCwgJ21vZGUnPT4nYWRkJykpOw0KCQ0KCSR0bXAgPSAiZGVmYXVsdCI7DQoJaWYoICgkb25ldGVtcGxhdGUgPT0gJHRtcCkgfHwgJGRlZmF1bHQgKQ0KCXsNCgkJJHJvdy0+ZGVsZXRlbGluayA9ICcmbmJzcDsnOw0KCX0NCgllbHNlDQoJew0KCQkkcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2RlbGV0ZXRlbXBsYXRlJywgJHJldHVybmlkLA0KCQkJCQkgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+DQoJCQkJCSAgRGlzcGxheUltYWdlICgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLA0KCQkJCQkJCSR0aGlzLT5MYW5nICgnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwNCgkJCQkJICBhcnJheSAoJ3RlbXBsYXRlJyA9PiAkb25ldGVtcGxhdGUpLA0KCQkJCQkgICR0aGlzLT5MYW5nICgnYXJleW91c3VyZScpKTsNCgl9DQoNCglhcnJheV9wdXNoICgkcm93YXJyYXksICRyb3cpOw0KCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzID0gInJvdzIiIDogJHJvd2NsYXNzID0gInJvdzEiKTsNCn0NCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRyb3dhcnJheSApOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduYW1lcHJvbXB0JywgJHRoaXMtPkxhbmcoJ3Byb21wdF9uYW1lJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZWZhdWx0cHJvbXB0JywgJHRoaXMtPkxhbmcoJ3Byb21wdF9kZWZhdWx0JykpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25ld3RlbXBsYXRlbGluaycsDQoJICAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLA0KCQkJICAgICAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygncHJvbXB0X25ld3RlbXBsYXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwNCgkJCSAgICAgYXJyYXkoJ21vZGUnID0+ICdhZGQnLA0KCQkJCSAgICdkZWZhdWx0dGVtcGxhdGVwcmVmJyA9PiAnZGVmYXVsdF90ZW1wbGF0ZV9jb250ZW50cycpLA0KCQkJICAgICAnJywgZmFsc2UsIGZhbHNlLCAnJykuJyAnLg0KDQoJICAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLA0KCQkJICAgICAkdGhpcy0+TGFuZygncHJvbXB0X25ld3RlbXBsYXRlJyksDQoJCQkgICAgIGFycmF5KCdtb2RlJyA9PiAnYWRkJywNCgkJCQkgICAnZGVmYXVsdHRlbXBsYXRlcHJlZicgPT4gJ2RlZmF1bHRfdGVtcGxhdGVfY29udGVudHMnDQoJCQkJICAgKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOw0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnRlbXBsYXRlcy50cGwnKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/Gallery.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogR2FsbGVyeQ0KIyBWZXJzaW9uOiAwLjYsIEpvcw0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dhbGxlcnkvDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIw0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoNCmRlZmluZSgnREVGQVVMVF9HQUxMRVJZX1BBVEgnLCAidXBsb2Fkcy9pbWFnZXMvR2FsbGVyeS8iKTsNCmRlZmluZSgnSU1fUFJFRklYJywgInRodW1iXyIpOyAgIC8vICRJTUNvbmZpZ1sndGh1bWJuYWlsX3ByZWZpeCddDQpkZWZpbmUoJ1VTRV9ERUZBVUxUX1RFTVBMQVRFJywgInVzZWRlZmF1bHR0ZW1wbGF0ZSIpOw0KZGVmaW5lKCdURU1QTEFURV9TRVBBUkFUT1InLCAieyotLS0tLS0tLS0tIik7DQoNCg0KY2xhc3MgR2FsbGVyeSBleHRlbmRzIENNU01vZHVsZQ0Kew0KICANCiAgZnVuY3Rpb24gR2V0TmFtZSgpDQogIHsNCiAgICByZXR1cm4gJ0dhbGxlcnknOw0KICB9DQogIA0KICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsNCiAgfQ0KDQogIA0KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkNCiAgew0KICAgIHJldHVybiAnMS4wLjEnOw0KICB9DQogIA0KICBmdW5jdGlvbiBHZXRIZWxwKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOw0KICB9DQogIA0KICBmdW5jdGlvbiBHZXRBdXRob3IoKQ0KICB7DQogICAgcmV0dXJuICdKb3MnOw0KICB9DQoNCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQ0KICB7DQogICAgcmV0dXJuICdqb3N2ZEBsaXZlLm5sJzsNCiAgfQ0KICANCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7DQogIH0NCiAgDQogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkNCiAgew0KICAgIHJldHVybiB0cnVlOw0KICB9DQoNCiAgZnVuY3Rpb24gSGFzQWRtaW4oKQ0KICB7DQogICAgcmV0dXJuIHRydWU7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQ0KICB7DQogICAgcmV0dXJuICdjb250ZW50JzsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOw0KICB9DQoNCiAgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVc2UgR2FsbGVyeScpOw0KICB9DQogIA0KICAvKioNCiAgICogR2V0RGVwZW5kZW5jaWVzKCkNCiAgICogcmV0dXJuIGFycmF5KCdzb21lbW9kdWxlJz0+JzEuMCcsICdvdGhlcm1vZHVsZSc9PicxLjEnKTsNCiAgICovDQogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpDQogIHsNCiAgICByZXR1cm4gYXJyYXkoKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkNCiAgew0KICAgIHJldHVybiAiMS42IjsNCiAgfQ0KICANCiAgIC8qDQogIGZ1bmN0aW9uIE1heGltdW1DTVNWZXJzaW9uKCkNCiAgew0KICAgIHJldHVybiAiMS45OSI7DQogIH0NCiAgKi8NCg0KICBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkNCiAgew0KCSAgJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7DQoNCgkgICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsNCgkgIA0KCSAgLy8gc3ludGF4IGZvciBjcmVhdGluZyBhIHBhcmFtZXRlciBpcyBwYXJhbWV0ZXIgbmFtZSwgZGVmYXVsdCB2YWx1ZSwgZGVzY3JpcHRpb24NCgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2RpcicsICdzdWIxL3N1YjInLCAkdGhpcy0+TGFuZygnaGVscF9kaXInKSk7DQoJICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGlyJyxDTEVBTl9TVFJJTkcpOw0KDQoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0ZW1wbGF0ZScsICcnLCAkdGhpcy0+TGFuZygnaGVscF90ZW1wbGF0ZScpKTsNCgkgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0ZW1wbGF0ZScsQ0xFQU5fU1RSSU5HKTsNCg0KCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbnVtYmVyJywgJzEwMCcsICR0aGlzLT5MYW5nKCdoZWxwX251bWJlcicpKTsNCgkgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdudW1iZXInLENMRUFOX0lOVCk7DQoNCgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3N0YXJ0JywgJzEnLCAkdGhpcy0+TGFuZygnaGVscF9zdGFydCcpKTsNCgkgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzdGFydCcsQ0xFQU5fSU5UKTsNCg0KCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignc2hvdycsICdhbGwnLCAkdGhpcy0+TGFuZygnaGVscF9zaG93JykpOw0KCSAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3Nob3cnLENMRUFOX1NUUklORyk7DQovKg0KCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY2F0ZWdvcnknLCAnJywgJHRoaXMtPkxhbmcoJ2hlbHBfY2F0ZWdvcnknKSk7DQoJICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY2F0ZWdvcnknLENMRUFOX1NUUklORyk7DQoNCgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2FjdGlvbicsICdkZWZhdWx0JywgJHRoaXMtPkxhbmcoJ2hlbHBfYWN0aW9uJykpOw0KCSAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FjdGlvbicsQ0xFQU5fU1RSSU5HKTsNCiovDQoJICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmlkJyxDTEVBTl9JTlQpOw0KCSAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2dpZCcsQ0xFQU5fSU5UKTsNCiAgDQoJICAvLyBQcmV0dHkgdXJsIHJvdXRlIGZvciB2aWV3aW5nIGEgZ2FsbGVyeQ0KCSAgJHRoaXMtPlJlZ2lzdGVyUm91dGUoJy9nYWxsZXJ5XC8oP1A8ZGlyPihbXHctXSpcLykrKSg/UDxzdGFydD5bMC05XSspXC8oP1A8bnVtYmVyPlswLTldKylcLyg/UDxzaG93PlthLXpBLVpdKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8nLCBhcnJheSgnYWN0aW9uJz0+J2RlZmF1bHQnKSk7DQoJICAkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL2dhbGxlcnlcLyg/UDxkaXI+KFtcdy1dKlwvKSspKD9QPHN0YXJ0PlswLTldKylcLyg/UDxudW1iZXI+WzAtOV0rKVwvKD9QPHJldHVybmlkPlswLTldKykkLycsIGFycmF5KCdhY3Rpb24nPT4nZGVmYXVsdCcpKTsNCgkgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcvZ2FsbGVyeVwvKD9QPGRpcj4oW1x3LV0qXC8pKykoP1A8cmV0dXJuaWQ+WzAtOV0rKSQvJywgYXJyYXkoJ2FjdGlvbic9PidkZWZhdWx0JykpOw0KDQogIH0NCiAgDQoJZnVuY3Rpb24gQ29udGVudFBvc3RSZW5kZXIoJiRjb250ZW50KSB7DQoJICAkcG9zID0gc3RyaXBvcygkY29udGVudCwiPC9oZWFkIik7DQoJICBpZiggJHBvcyAhPT0gRkFMU0UgJiYgaXNzZXQoJHRoaXMtPkdhbGxlcnlNZXRhZGF0YSkgKSANCgkgIHsNCgkJICAkY29udGVudCA9IHN1YnN0cigkY29udGVudCwgMCwgJHBvcykgLiAkdGhpcy0+R2FsbGVyeU1ldGFkYXRhIC4gc3Vic3RyKCRjb250ZW50LCAkcG9zKTsNCgkJfQ0KCSAgcmV0dXJuICRjb250ZW50Ow0KCX0NCgkNCiAgLyoqDQogICAqIEdldEV2ZW50RGVzY3JpcHRpb24oKQ0KICAgKiBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZA0KICAgKiB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIHdoYXQNCiAgICogdGhhdCBldmVudCBkb2VzLiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQ0KICAgKiByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4NCiAgICogQHBhcmFtIHN0cmluZyBFdmVudG5hbWUNCiAgICogQHJldHVybiBzdHJpbmcgRGVzY3JpcHRpb24gZm9yIGV2ZW50IA0KICAgKi8NCiAgZnVuY3Rpb24gR2V0RXZlbnREZXNjcmlwdGlvbiAoICRldmVudG5hbWUgKQ0KICB7DQogICAgcmV0dXJuOyAvLyAkdGhpcy0+TGFuZygnZXZlbnRfaW5mb18nLiRldmVudG5hbWUgKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdldEV2ZW50SGVscCgpDQogICAqIElmIHlvdXIgbW9kdWxlIGNhbiBjcmVhdGUgZXZlbnRzLCB5b3Ugd2lsbCBuZWVkDQogICAqIHRvIHByb3ZpZGUgdGhlIEFQSSB3aXRoIGRvY3VtZW50YXRpb24gb2YgaG93IHRvDQogICAqIHVzZSB0aGUgZXZlbnQuIFRoaXMgbWV0aG9kIHdyYXBzIHVwIGEgc2ltcGxlDQogICAqIHJldHVybiBvZiB0aGUgbG9jYWxpemVkIGRlc2NyaXB0aW9uLg0KICAgKiBAcGFyYW0gc3RyaW5nIEV2ZW50bmFtZQ0KICAgKiBAcmV0dXJuIHN0cmluZyBIZWxwIGZvciBldmVudA0KICAgKi8NCiAgZnVuY3Rpb24gR2V0RXZlbnRIZWxwICggJGV2ZW50bmFtZSApDQogIHsNCiAgICByZXR1cm47IC8vICR0aGlzLT5MYW5nKCdldmVudF9oZWxwXycuJGV2ZW50bmFtZSApOw0KICB9DQoNCiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOw0KICB9DQoNCiAgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsNCiAgfQ0KDQoNCg0KICANCiAgLyoqDQogICAqIEdhbGxlcnkgbWV0aG9kcyANCiAgICovDQoNCglmdW5jdGlvbiBfR2V0ZGlyZmlsZXMoJHBhdGgsJHJlY3Vyc2l2ZSkNCgl7DQoJCSRwYXRoID0gZW1wdHkoJHBhdGgpID8gJycgOiB0cmltKCRwYXRoLCIvIikgLiAnLyc7DQoJCSR1cGRpciA9IGlzX2RpcihERUZBVUxUX0dBTExFUllfUEFUSCAuICRwYXRoKSA/ICcnIDogJy4uLyc7DQoJCSRhbGxvd2V4dCA9IGV4cGxvZGUoJywnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWxsb3dlZF9leHRlbnNpb25zJywnJykpOw0KDQoJCWlmICggJGhhbmRsZSA9IG9wZW5kaXIoc3RyX3JlcGxhY2UoJy8nLERJUkVDVE9SWV9TRVBBUkFUT1IsJHVwZGlyIC4gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAkcGF0aCkpICkNCgkJew0KCQkJd2hpbGUgKCBmYWxzZSAhPT0gKCRmaWxlID0gcmVhZGRpcigkaGFuZGxlKSkgKQ0KCQkJew0KCQkJCSRleHQgPSBzdWJzdHIoJGZpbGUsIHN0cnJwb3MoJGZpbGUsICcuJykgKyAxKTsNCgkJCQlpZiAoICRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iICYmIHN1YnN0cigkZmlsZSwwLHN0cmxlbihJTV9QUkVGSVgpKSAhPSBJTV9QUkVGSVggJiYgKGluX2FycmF5KHN0cnRvbG93ZXIoJGV4dCksJGFsbG93ZXh0KSB8fCBpc19kaXIoJHVwZGlyIC4gREVGQVVMVF9HQUxMRVJZX1BBVEggLiAkcGF0aCAuICRmaWxlKSkgKSANCgkJCQl7DQoJCQkJCSRvdXRwdXRbJHBhdGggLiAkZmlsZV0gPSBhcnJheSgNCgkJCQkJCSdmaWxlbmFtZScgPT4gaXNfZGlyKCR1cGRpciAuIERFRkFVTFRfR0FMTEVSWV9QQVRIIC4gJHBhdGggLiAkZmlsZSkgPyAkZmlsZSAuICcvJyA6ICRmaWxlLA0KCQkJCQkJJ2ZpbGVwYXRoJyA9PiB0cmltKCRwYXRoLCIvIiksDQoJCQkJCQknZmlsZW1kYXRlJyA9PiBkYXRlKCJZLW0tZCBIOmk6cyIsIGZpbGVtdGltZSgkdXBkaXIgLiBERUZBVUxUX0dBTExFUllfUEFUSCAuICRwYXRoIC4gJGZpbGUpKSwNCgkJCQkJKTsNCgkJCQkJaWYgKCAkcmVjdXJzaXZlICYmIGlzX2RpcigkdXBkaXIgLiBERUZBVUxUX0dBTExFUllfUEFUSCAuICRwYXRoIC4gJGZpbGUpICkNCgkJCQkJew0KCQkJCQkJJG91dHB1dCA9IGFycmF5X21lcmdlKCRvdXRwdXQsJHRoaXMtPl9HZXRkaXJmaWxlcygkcGF0aCAuICRmaWxlLCRyZWN1cnNpdmUpKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCWNsb3NlZGlyKCRoYW5kbGUpOw0KCQl9DQoJCXJldHVybiBpc3NldCgkb3V0cHV0KSA/ICRvdXRwdXQgOiBGQUxTRTsNCgl9DQoNCg0KCWZ1bmN0aW9uIF9HZXRnYWxsZXJ5ZmlsZXMoJHBhdGgpIA0KCXsNCgkJJHBhdGggPSB0cmltKCRwYXRoLCIvIik7DQoJCQ0KCQkkZGIgPSYgJHRoaXMtPkdldERCKCk7CQ0KCQkkcXVlcnkgPSAiU0VMRUNUDQoJCQkJCQkJCWcxLiosIENPTkNBVChnMi5maWxlcGF0aCw/LGcyLmZpbGVuYW1lKSBBUyB0aHVtYg0KCQkJCQkJCUZST00gDQoJCQkJCQkJCSIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX2dhbGxlcnkgZzENCgkJCQkJCQlMRUZUIEpPSU4NCgkJCQkJCQkJIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfZ2FsbGVyeSBnMg0KCQkJCQkJCU9ODQoJCQkJCQkJCWcxLmRlZmF1bHRmaWxlID0gZzIuZmlsZWlkDQoJCQkJCQkJV0hFUkUNCgkJCQkJCQkJZzEuZmlsZXBhdGg9PyI7DQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgnLycuSU1fUFJFRklYLCRwYXRoKSk7DQoJCWlmICggJHJlc3VsdCAmJiAkcmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCApIA0KCQl7DQoJCSAgJG91dHB1dCA9IGFycmF5KCk7DQoJCSAgd2hpbGUgKCAkcm93PSRyZXN1bHQtPkZldGNoUm93KCkgKSANCgkJICB7DQoJCSAgICAkb3V0cHV0W3RyaW0oJHJvd1snZmlsZXBhdGgnXSAuICcvJyAuICRyb3dbJ2ZpbGVuYW1lJ10sJy8nKV0gPSAkcm93Ow0KCQkgIH0NCgkJfQ0KCQlpZiAoICEkcmVzdWx0ICkNCgkJew0KCQkJZWNobyBteXNxbF9lcnJvcigpOw0KCQkJZXhpdCgpOw0KCQl9DQoJCXJldHVybiBpc3NldCgkb3V0cHV0KSA/ICRvdXRwdXQgOiBGQUxTRTsNCgl9DQoNCg0KCWZ1bmN0aW9uIF9HZXRHYWxsZXJpZXMoKSANCgl7DQoJCSRkYiA9JiAkdGhpcy0+R2V0REIoKTsJDQoJCSRxdWVyeSA9ICJTRUxFQ1QNCgkJCQkJCQkJZzEuKiwgQ09OQ0FUKGcyLmZpbGVwYXRoLD8sZzIuZmlsZW5hbWUpIEFTIHRodW1iDQoJCQkJCQkJRlJPTSANCgkJCQkJCQkJIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfZ2FsbGVyeSBnMQ0KCQkJCQkJCUxFRlQgSk9JTg0KCQkJCQkJCQkiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9nYWxsZXJ5IGcyDQoJCQkJCQkJT04NCgkJCQkJCQkJZzEuZGVmYXVsdGZpbGUgPSBnMi5maWxlaWQNCgkJCQkJCQlXSEVSRQ0KCQkJCQkJCQlnMS5maWxlbmFtZSBMSUtFICclLycNCgkJCQkJCQlPUkRFUiBCWQ0KCQkJCQkJCQlnMS5maWxlb3JkZXIgQVNDLA0KCQkJCQkJCQlDT05DQVQoZzEuZmlsZXBhdGgsQ0FTVChJRihnMS5maWxlcGF0aD0nJywnJywnLycpIEFTIEJJTkFSWSksZzEuZmlsZW5hbWUpIEFTQyI7DQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgnLycuSU1fUFJFRklYKSk7DQoJCWlmICggJHJlc3VsdCAmJiAkcmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCApIA0KCQl7DQoJCSAgJG91dHB1dCA9IGFycmF5KCk7DQoJCSAgd2hpbGUgKCAkcm93PSRyZXN1bHQtPkZldGNoUm93KCkgKSANCgkJICB7DQoJCSAgICAkb3V0cHV0WyRyb3dbJ2ZpbGVpZCddXSA9ICRyb3c7DQoJCSAgfQ0KCQl9DQoJCWlmICggISRyZXN1bHQgKQ0KCQl7DQoJCQllY2hvIG15c3FsX2Vycm9yKCk7DQoJCQlleGl0KCk7DQoJCX0NCgkJcmV0dXJuIGlzc2V0KCRvdXRwdXQpID8gJG91dHB1dCA6IEZBTFNFOw0KCX0NCg0KDQoJZnVuY3Rpb24gX0dldGdhbGxlcnlpbmZvKCRwYXRoKQ0KCXsNCgkJJHBhdGggPSB0cmltKCRwYXRoLCIvIik7DQoJCWlmKCBzdHJwb3MoJHBhdGgsIi8iKSA9PT0gRkFMU0UgKQ0KCQl7DQoJCQkkZmlsZW5hbWUgPSBlbXB0eSgkcGF0aCkgPyAgJ0dhbGxlcnkvJyA6ICRwYXRoIC4gJy8nOw0KCQkJJGZpbGVwYXRoID0gJyc7DQoJCQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGZpbGVuYW1lID0gc3Vic3RyKCRwYXRoLCBzdHJycG9zKCRwYXRoLCAnLycpICsgMSkgLiAnLyc7DQoJCQkkZmlsZXBhdGggPSBzdWJzdHIoJHBhdGgsIDAsIHN0cnJwb3MoJHBhdGgsICcvJykpOw0KCQl9DQoJCSRkYiA9JiAkdGhpcy0+R2V0REIoKTsJDQoJCSRxdWVyeSA9ICJTRUxFQ1QgZy4qLCBncC50ZW1wbGF0ZSwgZ3AudGh1bWJ3aWR0aCwgZ3AudGh1bWJoZWlnaHQsIGdwLnJlc2l6ZW1ldGhvZCANCgkJCQlGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX2dhbGxlcnkgZw0KCQkJCUxFRlQgSk9JTiAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIGdwDQoJCQkJT04gZy5maWxlaWQ9Z3AuZmlsZWlkDQoJCQkJV0hFUkUgZmlsZW5hbWU9PyBBTkQgZmlsZXBhdGg9PyI7DQoJCSRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGZpbGVuYW1lLCRmaWxlcGF0aCkpOw0KDQoJCWlmKCAkcmVzdWx0ICYmICRyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwICkNCgkJew0KCQkJJG91dHB1dCA9ICRyZXN1bHQtPkZldGNoUm93KCk7DQoJCX0NCgkJaWYgKCAhJHJlc3VsdCApDQoJCXsNCgkJCWVjaG8gbXlzcWxfZXJyb3IoKTsNCgkJCWV4aXQoKTsNCgkJfQ0KCQlyZXR1cm4gaXNzZXQoJG91dHB1dCkgPyAkb3V0cHV0IDogRkFMU0U7DQoJfQ0KDQoNCglmdW5jdGlvbiBfR2V0Z2FsbGVyeWluZm9ieWlkKCRnaWQpDQoJew0KCQkkZGIgPSYgJHRoaXMtPkdldERCKCk7CQ0KCQkkcXVlcnkgPSAiU0VMRUNUIGcuKiwgZ3AudGVtcGxhdGUsIGdwLnRodW1id2lkdGgsIGdwLnRodW1iaGVpZ2h0LCBncC5yZXNpemVtZXRob2QgDQoJCQkJRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9nYWxsZXJ5IGcNCgkJCQlMRUZUIEpPSU4gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfZ2FsbGVyeV9wcm9wcyBncA0KCQkJCU9OIGcuZmlsZWlkPWdwLmZpbGVpZCANCgkJCQlXSEVSRSBnLmZpbGVpZD0/IjsNCgkJJHJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkZ2lkKSk7DQoJCWlmKCAkcmVzdWx0ICYmICRyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwICkNCgkJew0KCQkJJG91dHB1dCA9ICRyZXN1bHQtPkZldGNoUm93KCk7DQoJCX0NCgkJaWYgKCAhJHJlc3VsdCApDQoJCXsNCgkJCWVjaG8gbXlzcWxfZXJyb3IoKTsNCgkJCWV4aXQoKTsNCgkJfQ0KCQlyZXR1cm4gaXNzZXQoJG91dHB1dCkgPyAkb3V0cHV0IDogRkFMU0U7DQoJfQ0KDQoNCglmdW5jdGlvbiBfVXBkYXRlR2FsbGVyeURCKCRwYXRoLCRnaWQpDQoJew0KCQkkcGF0aCA9IHRyaW0oJHBhdGgsIi8iKTsNCgkJJGZpbGVfZ2FsbGVyeSA9ICR0aGlzLT5fR2V0ZGlyZmlsZXMoJHBhdGgsZmFsc2UpOw0KCQkkZGJfZ2FsbGVyeSA9ICR0aGlzLT5fR2V0Z2FsbGVyeWZpbGVzKCRwYXRoKTsNCg0KCQlpZiAoICRmaWxlX2dhbGxlcnkgKQ0KCQl7DQoJCQkvLyBUb2V2b2VnZW4gYWFuIERCOg0KCQkJJGdhbGxlcnlfYWRkID0gKGVtcHR5KCRkYl9nYWxsZXJ5KSB8fCAkZGJfZ2FsbGVyeSA9PT0gRkFMU0UpID8gJGZpbGVfZ2FsbGVyeSA6IGFycmF5X2RpZmZfYXNzb2MoJGZpbGVfZ2FsbGVyeSwkZGJfZ2FsbGVyeSk7DQoNCgkJCWlmICggIWVtcHR5KCRnYWxsZXJ5X2FkZCkgKQ0KCQkJew0KCQkJCSRkYiA9JiAkdGhpcy0+R2V0REIoKTsNCgkJCQlmb3JlYWNoKCRnYWxsZXJ5X2FkZCBhcyAka2V5PT4kaXRlbSkNCgkJCQl7DQoJCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9nYWxsZXJ5IChmaWxlbmFtZSwgZmlsZXBhdGgsIGZpbGVkYXRlLCBmaWxlb3JkZXIsIGFjdGl2ZSwgZGVmYXVsdGZpbGUsIGdhbGxlcnlpZCwgdGl0bGUsIGNvbW1lbnQpIFZBTFVFUyAoPyw/LD8sMCwxLDAsPywnJywnJykiOw0KCQkJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGl0ZW1bJ2ZpbGVuYW1lJ10sICRpdGVtWydmaWxlcGF0aCddLCAkaXRlbVsnZmlsZW1kYXRlJ10sICRnaWQpKTsNCgkJCQl9DQoJCQl9DQoJDQoJCQlpZiAoICRkYl9nYWxsZXJ5ICkNCgkJCXsNCgkJCQkvLyBWZXJ3aWpkZXJlbiB1aXQgREI6DQoJCQkJJGdhbGxlcnlfZGVsID0gYXJyYXlfZGlmZl9hc3NvYygkZGJfZ2FsbGVyeSwkZmlsZV9nYWxsZXJ5KTsNCgkJCQlpZiAoICFlbXB0eSgkZ2FsbGVyeV9kZWwpICkNCgkJCQl7DQoJCQkJCWZvcmVhY2goJGdhbGxlcnlfZGVsIGFzICRrZXk9PiRpdGVtKSB7DQoJCQkJCQlpZiAoICRpdGVtWydmaWxlaWQnXSAhPSAxICkgJGRlbGV0ZV9pZHNbXSA9ICRpdGVtWydmaWxlaWQnXTsNCgkJCQkJfQ0KCQkJCQlpZiAoIGlzc2V0KCRkZWxldGVfaWRzKSApDQoJCQkJCXsNCgkJCQkJCSRxdWVyeSA9IGltcGxvZGUoIicsJyIsJGRlbGV0ZV9pZHMpOw0KCQkJCQkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAibW9kdWxlX2dhbGxlcnkgV0hFUkUgZmlsZWlkIElOKCciIC4gJHF1ZXJ5IC4gIicpIjsNCgkJCQkJCSRkYiA9JiAkdGhpcy0+R2V0REIoKTsNCgkJCQkJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCgkJCQkJCWlmICggISRyZXN1bHQgKQ0KCQkJCQkJew0KCQkJCQkJCWVjaG8gbXlzcWxfZXJyb3IoKTsNCgkJCQkJCQllY2hvICI8YnIgLz48YnIgLz4iIC4gJHF1ZXJ5Ow0KCQkJCQkJCWV4aXQoKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQ0KCQkJfQ0KCQkJcmV0dXJuIFRSVUU7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQlyZXR1cm4gRkFMU0U7DQoJCX0NCgl9DQoNCglmdW5jdGlvbiBfQ3JlYXRlVGh1bWJuYWlsKCR0aHVtYm5hbWUsICRpbWFnZSwgJHRodW1id2lkdGgsICR0aHVtYmhlaWdodCwgJG1ldGhvZCkNCgl7DQoJCSR6b29tID0gLjMwOyAvLyB6b29tIHBlcmNlbnRhZ2UNCgkJJGltZ2RhdGEgPSBnZXRpbWFnZXNpemUoJGltYWdlKTsNCgkJJGltZ3JhdGlvID0gJGltZ2RhdGFbMF0gLyAkaW1nZGF0YVsxXTsgIC8vIHdpZHRoL2hlaWdodA0KCQkkdGh1bWJyYXRpbyA9ICR0aHVtYndpZHRoIC8gJHRodW1iaGVpZ2h0Ow0KCQlzd2l0Y2goJG1ldGhvZCkgew0KCQkJY2FzZSAic2MiOiAvLyBzY2FsZQ0KCQkJY2FzZSAienMiOiAvLyB6b29tICYgc2NhbGUNCgkJCQkkc3JjX3ggPSAwOw0KCQkJCSRzcmNfeSA9IDA7DQoJCQkJJHNyY193ID0gJGltZ2RhdGFbMF07DQoJCQkJJHNyY19oID0gJGltZ2RhdGFbMV07DQoJCQkJaWYoICRpbWdyYXRpbyA+ICR0aHVtYnJhdGlvICkNCgkJCQl7DQoJCQkJCSRuZXd3aWR0aCA9ICR0aHVtYndpZHRoOw0KCQkJCQkkbmV3aGVpZ2h0ID0gY2VpbCgkdGh1bWJ3aWR0aCAvICRpbWdyYXRpbyk7DQoJCQkJfQ0KCQkJCWVsc2UNCgkJCQl7DQoJCQkJCSRuZXdoZWlnaHQgPSAkdGh1bWJoZWlnaHQ7DQoJCQkJCSRuZXd3aWR0aCA9IGNlaWwoJHRodW1iaGVpZ2h0ICogJGltZ3JhdGlvKTsNCgkJCQl9DQoJCQkJYnJlYWs7DQoJCQkNCgkJCWNhc2UgImNyIjogLy8gY3JvcA0KCQkJY2FzZSAiemMiOiAvLyB6b29tICYgY3JvcA0KCQkJCSRuZXd3aWR0aCA9ICR0aHVtYndpZHRoOw0KCQkJCSRuZXdoZWlnaHQgPSAkdGh1bWJoZWlnaHQ7DQoJCQkJaWYoICRpbWdyYXRpbyA+ICR0aHVtYnJhdGlvICkNCgkJCQl7DQoJCQkJCSRzcmNfeCA9IGNlaWwoKCRpbWdkYXRhWzBdIC0gJGltZ2RhdGFbMV0gKiAkdGh1bWJyYXRpbykgLyAyKTsNCgkJCQkJJHNyY195ID0gMDsNCgkJCQkJJHNyY193ID0gJGltZ2RhdGFbMF0gLSAkc3JjX3ggKiAyOw0KCQkJCQkkc3JjX2ggPSAkaW1nZGF0YVsxXTsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJJHNyY194ID0gMDsNCgkJCQkJJHNyY195ID0gY2VpbCgoJGltZ2RhdGFbMV0gLSAkaW1nZGF0YVswXSAvICR0aHVtYnJhdGlvKSAvIDMpOw0KCQkJCQkkc3JjX3cgPSAkaW1nZGF0YVswXTsNCgkJCQkJJHNyY19oID0gJGltZ2RhdGFbMV0gLSAkc3JjX3kgKiAzOw0KCQkJCX0NCgkJCQlicmVhazsNCgkJfQ0KCQlpZiAoICRtZXRob2QgPT0gInpzIiB8fCAkbWV0aG9kID09ICJ6YyIgKQ0KCQl7DQoJCQkkc3JjX3ggPSAkc3JjX3ggKyBjZWlsKCR6b29tIC8gMiAqICRzcmNfdyk7DQoJCQkkc3JjX3kgPSAkc3JjX3kgKyBjZWlsKCR6b29tIC8gMyAqICRzcmNfaCk7DQoJCQkkc3JjX3cgPSBjZWlsKCRzcmNfdyAqICgxLSR6b29tKSk7DQoJCQkkc3JjX2ggPSBjZWlsKCRzcmNfaCAqICgxLSR6b29tKSk7DQoJCX0NCgkJJG5ld2ltYWdlID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJG5ld3dpZHRoLCRuZXdoZWlnaHQpOw0KCQlzd2l0Y2goJGltZ2RhdGFbJ21pbWUnXSkgew0KCQkJY2FzZSAiaW1hZ2UvZ2lmIjoNCgkJCQkkc291cmNlID0gaW1hZ2VjcmVhdGVmcm9tZ2lmKCRpbWFnZSk7IA0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiaW1hZ2UvcGpwZWciOg0KCQkJY2FzZSAiaW1hZ2UvanBlZyI6DQoJCQljYXNlICJpbWFnZS9qcGciOg0KCQkJCSRzb3VyY2UgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCRpbWFnZSk7IA0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiaW1hZ2UvcG5nIjoNCgkJCWNhc2UgImltYWdlL3gtcG5nIjoNCgkJCQkkc291cmNlID0gaW1hZ2VjcmVhdGVmcm9tcG5nKCRpbWFnZSk7IA0KCQkJCWJyZWFrOw0KCSAgCX0NCgkJaW1hZ2Vjb3B5cmVzYW1wbGVkKCRuZXdpbWFnZSwkc291cmNlLDAsMCwkc3JjX3gsJHNyY195LCRuZXd3aWR0aCwkbmV3aGVpZ2h0LCRzcmNfdywkc3JjX2gpOw0KCQlzd2l0Y2goJGltZ2RhdGFbJ21pbWUnXSkgew0KCQkJY2FzZSAiaW1hZ2UvZ2lmIjoNCgkJICAJCWltYWdlZ2lmKCRuZXdpbWFnZSwkdGh1bWJuYW1lKTsgDQoJCQkJYnJlYWs7DQoJCQljYXNlICJpbWFnZS9wanBlZyI6DQoJCQljYXNlICJpbWFnZS9qcGVnIjoNCgkJCWNhc2UgImltYWdlL2pwZyI6DQoJCSAgCQlpbWFnZWpwZWcoJG5ld2ltYWdlLCR0aHVtYm5hbWUsODApOyANCgkJCQlicmVhazsNCgkJCWNhc2UgImltYWdlL3BuZyI6DQoJCQljYXNlICJpbWFnZS94LXBuZyI6DQoJCQkJaW1hZ2VwbmcoJG5ld2ltYWdlLCR0aHVtYm5hbWUpOyAgDQoJCQkJYnJlYWs7DQoJICAgIH0NCgkJaW1hZ2VkZXN0cm95KCRuZXdpbWFnZSk7DQoJCWNobW9kKCR0aHVtYm5hbWUsIDA3NzcpOw0KCQlyZXR1cm4gJHRodW1ibmFtZTsNCgl9DQoNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/folder.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/folder.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/fpaint.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPcAAOlqa00zNGxRUzwiJUkvMnVaXz4kLWZMVzMYKUowQHdde3BfdaysxnFxfLa2x6amr1xwkenz92JrYnyOdIGUcPL08IuabImWaLzNceXxaNXbT/D3bvb4Tvb7U8/RS/7/qP7/yPz9yf//AICAAFZWAC4uAP//Dv//Gv3+Jf//PPz8S9DQQv//U///Vv//Xv//ZOjoXP//bv//cP7/cf3+cf//dv//ev//iP//lv//mf//muvrmP//qejomv//q///rv//w///xdbWpbe3kf//y+Xlxf//5P//8dvb2NvWQKmfRZWNTpiNS//YNpWHSF5EAPewNe6vQ7ePW/eUFtm+nti+n9KTTtq+nteykdvBqOXTw9mvjNaxkWFHNN27ocu5q9+zk8d+VG5fVlxCNk81LzcdGDgeGUYsJ1E3MlU7NlpAO19FQGJIQ25UT3ZcV3ddWB8EACIHA/lXPSoQDDYbFzYcGEEnI0QqJkcsKE81MWFGQmZMSGpQTHBWUnJYVHheWnpgXPA+KioQDUkvLdpdVT4kJP///+vr68zMzG5ubmZmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAQAAAI+AANaQFDEIyXgwgPahHoBUqUhxAjRvGixUuUGC9+vKjhw0USJmKWeIiyJUuUFyyIsJARRIUTK2GkKInCxeQPIiKI6DBRYQEAOU0kRMFiEqVKlhwuEAo0ZUKUKiZryNAhw0YOGhosQKCAIQoVkzyAmCiy44SRGR0iZNgQ5YrJFimOBBBg5AQOEChCfGh7JcqNHgcGGCigY8iYJzB08I0iRAEcNmQEMWhQCMGIFYv3wOHTps8aOIkOIUJAgi+BQWra0DnzJo0ZRYccdClx5cqcNID42KmDxg+eMm6QPEhwRQuf43z83Imj50+eBNATLNRSu3rtL9ixLwwIADs=]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/next.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/pageno.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/previous.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/uppage.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICJHYWxsZXJ5IjsNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gIlRoZSBlYXNpZXN0IHdheSB0byBtYW5hZ2UgYW5kIGRpc3BsYXkgcGhvdG8gZ2FsbGVyaWVzIjsNCiRsYW5nWydkZXNjcmlwdGlvbiddID0gIkFuIGVhc3kgdG8gdXNlIGdhbGxlcnkgd2hpY2ggYXV0b21hdGljYWxseSBzaG93cyB0aGUgaW1hZ2VzIG9mIGEgc3BlY2lmaWVkIGRpcmVjdG9yeS4iOw0KJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAiVGhlIEdhbGxlcnkgbW9kdWxlIHdhcyBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLiI7DQokbGFuZ1snaW5zdGFsbGVkJ10gPSAiVGhlIEdhbGxlcnkgbW9kdWxlIHZlcnNpb24gJXMgd2FzIGluc3RhbGxlZC4iOw0KJGxhbmdbJ3VwZ3JhZGVkJ10gPSAiVGhlIEdhbGxlcnkgbW9kdWxlIGlzIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuIjsNCiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAiVGhlIEdhbGxlcnkgIG1vZHVsZSB3YXMgdW5pbnN0YWxsZWQiOw0KJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAiVGhlIEdhbGxlcnkgbW9kdWxlIHdhcyB1bmluc3RhbGxlZCI7DQokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgR2FsbGVyeT8gVGhpcyBkb2VzIG5vdCBlZmZlY3QgdGhlIGltYWdlcywgYnV0IGFsbCBjb21tZW50LWRhdGEgYW5kIHRodW1ibmFpbHMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgR2FsbGVyeSB3aWxsIGJlIGxvc3QuIjsNCg0KDQokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAiQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuIjsNCiRsYW5nWydhY3Rpb25zJ10gPSAiQWN0aW9ucyI7DQokbGFuZ1snYWN0aXZlJ10gPSAiQWN0aXZlIjsNCiRsYW5nWydhcHBseSddID0gIkFwcGx5IjsNCiRsYW5nWydhcmV5b3VzdXJlJ10gPSAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZT8iOw0KJGxhbmdbJ2NhbmNlbCddID0gIkNhbmNlbCI7DQokbGFuZ1snY29weSddID0gIkNvcHkiOw0KJGxhbmdbJ2RlZmF1bHQnXSA9ICJEZWZhdWx0IjsNCiRsYW5nWydkZWxldGUnXSA9ICJEZWxldGUiOw0KJGxhbmdbJ2VkaXQnXSA9ICJFZGl0IjsNCiRsYW5nWydlcnJvciddID0gIkVycm9yISI7DQokbGFuZ1snc2V0ZmFsc2UnXT0gIlNldCBGYWxzZSI7DQokbGFuZ1snc2V0dHJ1ZSddPSAiU2V0IFRydWUiOw0KJGxhbmdbJ3N1Ym1pdCddID0gIlNhdmUiOw0KDQoNCiRsYW5nWydnYWxsZXJpZXMnXSA9ICJHYWxsZXJpZXMiOw0KJGxhbmdbJ2dhbGxlcnlwYXRoJ10gPSAiR2FsbGVyeSI7DQokbGFuZ1snZWRpdGdhbGxlcnknXSA9ICJFZGl0IGdhbGxlcnkiOw0KJGxhbmdbJ2FkZGdhbGxlcnknXSA9ICJBZGQgZ2FsbGVyeSI7DQokbGFuZ1snbm9nYWxsZXJpZXN0ZXh0J10gPSAiTm8gZ2FsbGVyaWVzIGF2YWlsYWJsZSI7DQokbGFuZ1snaW1hZ2UnXSA9ICJJbWFnZSI7DQokbGFuZ1sndGl0bGUnXSA9ICJUaXRsZSI7DQokbGFuZ1snZGF0ZSddID0gIkRhdGUiOw0KJGxhbmdbJ25vZmlsZXN0ZXh0J10gPSAiTm8gaW1hZ2VzIGF2YWlsYWJsZSI7DQokbGFuZ1snZ2FsbGVyeXRpdGxlJ10gPSAiR2FsbGVyeSBUaXRsZSI7DQokbGFuZ1snY29tbWVudCddID0gIkNvbW1lbnQiOw0KJGxhbmdbJ3RlbXBsYXRlJ10gPSAiVGVtcGxhdGUiOw0KJGxhbmdbJ3VzZWRlZmF1bHQnXSA9ICJ1c2UgZGVmYXVsdCI7DQokbGFuZ1sndGh1bWJuYWlsc2l6ZSddID0gIlRodW1ibmFpbCBTaXplIChGcm9udGVuZCkiOw0KJGxhbmdbJ2xlYXZlZW1wdHknXSA9ICIobGVhdmUgdGhpcyBlbXB0eSB0byB1c2UgdGhlIGRlZmF1bHQgdGh1bWJuYWlscyBmcm9tIEltYWdlTWFuYWdlcikiOw0KJGxhbmdbJ3dpZHRoJ10gPSAid2lkdGgiOw0KJGxhbmdbJ2hlaWdodCddID0gImhlaWdodCI7DQokbGFuZ1sncmVzaXplbWV0aG9kJ10gPSAicmVzaXplIG1ldGhvZCI7DQokbGFuZ1snY3JvcCddID0gImNyb3AiOw0KJGxhbmdbJ3NjYWxlJ10gPSAic2NhbGUiOw0KJGxhbmdbJ3pvb21jcm9wJ10gPSAiem9vbSAmYW1wOyBjcm9wIjsNCiRsYW5nWyd6b29tc2NhbGUnXSA9ICJ6b29tICZhbXA7IHNjYWxlIjsNCiRsYW5nWydjcmVhdGV0aHVtYnMnXSA9ICIoUmUpQ3JlYXRlIFRodW1icyI7DQokbGFuZ1sndGh1bWJzY3JlYXRlZCddID0gIlRodW1ibmFpbHMgY3JlYXRlZCI7DQokbGFuZ1snZ2FsbGVyeXVwZGF0ZWQnXSA9ICJUaGUgZ2FsbGVyeSB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuIjsNCiRsYW5nWydlcnJvcl91cGRhdGVnYWxsZXJ5ZmFpbGVkJ10gPSAiVXBkYXRpbmcgdGhlIGdhbGxlcnkgZmFpbGVkLiI7DQoNCg0KJGxhbmdbJ3RlbXBsYXRlcyddID0gIlRlbXBsYXRlcyI7DQokbGFuZ1sndGl0bGVfYXZhaWxhYmxlX3RlbXBsYXRlcyddID0gIkF2YWlsYWJsZSBUZW1wbGF0ZXMiOw0KJGxhbmdbJ3Byb21wdF9uYW1lJ10gPSAiTmFtZSI7DQokbGFuZ1sncHJvbXB0X2RlZmF1bHQnXSA9ICJEZWZhdWx0IjsNCiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICJDcmVhdGUgYSBuZXcgdGVtcGxhdGUiOw0KJGxhbmdbJ3RpdGxlX3RlbXBsYXRlJ10gPSAiVGVtcGxhdGUgRWRpdG9yIjsNCiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAiVGVtcGxhdGUgTmFtZSI7DQokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAiVGVtcGxhdGUgU291cmNlIjsNCiRsYW5nWydwcm9tcHRfdGVtcGxhdGVqcyddID0gIlRlbXBsYXRlIEphdmFTY3JpcHQiOw0KJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZWNzcyddID0gIlRlbXBsYXRlIENTUy1zdHlsZXNoZWV0IjsNCiRsYW5nWyd0ZW1wbGF0ZXVwZGF0ZWQnXSA9ICJUaGUgdGVtcGxhdGUgd2FzIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLiI7DQokbGFuZ1sndGVtcGxhdGVhZGRlZCddID0gIlRoZSB0ZW1wbGF0ZSB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLiI7DQokbGFuZ1snZXJyb3JfdGVtcGxhdGVuYW1lZXhpc3RzJ10gPSAiVGhlIHRlbXBsYXRlIG5hbWUgYWxyZWFkeSBleGlzdHMuIjsNCiRsYW5nWyd0ZW1wbGF0ZWRlbGV0ZWQnXSA9ICJUZW1wbGF0ZSBkZWxldGVkIjsNCiRsYW5nWydhdmFpbGFibGV2YXJpYWJsZXMnXSA9ICJBdmFpbGFibGUgVGVtcGxhdGUgU21hcnR5IFZhcmlhYmxlcyI7DQokbGFuZ1snYXZhaWxhYmxldmFyaWFibGVzbGlzdCddID0gIlRoZXNlIGFyZSB0aGUgdmFyaWFibGVzIHlvdSBjYW4gdXNlIHRvIGN1c3RvbWl6ZSB5b3VyIHRlbXBsYXRlOjxiciAvPjxiciAvPg0KJiMxMjM7JiMzNjttb2R1bGVfbWVzc2FnZX0gLSBlcnJvciBtZXNzYWdlLCBpcyBvbmx5IHNldCBpZiB0aGVyZSdzIGEgbWVzc2FnZTxiciAvPg0KJiMxMjM7JiMzNjtnYWxsZXJ5dGl0bGV9IC0gdGl0bGUgb2YgdGhlIGdhbGxlcnkuIElmIHRoZXJlJ3Mgbm8gdGl0bGUsIHRoaXMgd2lsbCBzaG93IHRoZSBkaXJlY3RvcnkgbmFtZTxiciAvPg0KJiMxMjM7JiMzNjtnYWxsZXJ5Y29tbWVudH0gLSBjb21tZW50IG9mIHRoZSBnYWxsZXJ5PGJyIC8+DQomIzEyMzsmIzM2O3BhcmVudGxpbmt9IC0gbGluayB0byB0aGUgcGFyZW50IGZvbGRlcjxiciAvPg0KJiMxMjM7JiMzNjtpbWFnZWNvdW50fSAtIHNob3dzIGUuZy4gXCI2IGltYWdlc1wiLCBkZXBlbmRpbmcgb24gbGFuZ3VhZ2U8YnIgLz4NCiYjMTIzOyYjMzY7aXRlbWNvdW50fSAtIG51bWJlciBvZiBpdGVtcywgaW1hZ2VzICsgZm9sZGVyczxiciAvPg0KJiMxMjM7JiMzNjtwYWdlc30gLSBudW1iZXIgb2YgcGFnZXM8YnIgLz4NCiYjMTIzOyYjMzY7cHJldnBhZ2V9IC0gbGluayB0byBwcmV2aW91cyBwYWdlLCBpZiBhcHBsaWNhYmxlPGJyIC8+DQomIzEyMzsmIzM2O25leHRwYWdlfSAtIGxpbmsgdG8gbmV4dCBwYWdlLCBpZiBhcHBsaWNhYmxlPGJyIC8+DQomIzEyMzsmIzM2O3BhZ2VsaW5rc30gLSBsaW5rcyB0byBlYWNoIGV4aXN0aW5nIHBhZ2U8YnIgLz4NCiYjMTIzOyYjMzY7aW1hZ2VzfSAtIGFycmF5IHdpdGgga2V5czo8YnIgLz4NCiZlbXNwOyZidWxsOyBmaWxlIC0gcmVsYXRpdmUgcGF0aCB0byB0aGUgb3JpZ2luYWwgaW1hZ2U8YnIgLz4NCiZlbXNwOyZidWxsOyB0aXRsZSAtIHRpdGxlIG9mIHRoZSBpbWFnZS4gSWYgdGhlcmUncyBubyB0aXRsZSwgdGhpcyB3aWxsIHNob3cgdGhlIGZpbGVuYW1lPGJyIC8+DQomZW1zcDsmYnVsbDsgY29tbWVudCAtIGNvbW1lbnQgdG8gdGhlIGltYWdlPGJyIC8+DQomZW1zcDsmYnVsbDsgZmlsZWRhdGUgLSBjcmVhdGlvbiBkYXRlL3RpbWUgPGJyIC8+DQomZW1zcDsmYnVsbDsgdGh1bWIgLSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0aHVtYm5haWw8YnIgLz4NCiZlbXNwOyZidWxsOyBmb2xkZXJsaW5rIC0gbGluayB0byBhIHN1YmdhbGxlcnkgd2l0aCB0aGUgdGh1bWIgb2YgdGhlIGltYWdlIHdoaWNoIGlzIHNldCBhcyBkZWZhdWx0IGluIHRoYXQgc3ViZ2FsbGVyeS4gSWYgbm8gaW1hZ2UgaXMgc2V0IGFzIGRlZmF1bHQsIGEgc3RhbmRhcmQgZm9sZGVyLWljb24gd2lsbCBiZSB1c2VkLiBmb2xkZXJsaW5rIGlzIGVtcHR5IGlmIHRoZSBpdGVtIGlzIGFuIGltYWdlPGJyIC8+DQoiOw0KDQoNCiRsYW5nWydvcHRpb25zJ10gPSAiT3B0aW9ucyI7DQokbGFuZ1snYWxsb3dlZF9leHRlbnNpb25zJ10gPSAiQWxsb3dlZCBFeHRlbnNpb25zIjsNCiRsYW5nWyd1c2VfY29tbWVudF93eXNpd3lnJ10gPSAiVXNlIGEgV1lTSVdZRyBlZGl0b3Igb24gdGhlIEdhbGxlcnkgY29tbWVudCBmaWVsZCI7DQokbGFuZ1snb3B0aW9uc3VwZGF0ZWQnXSA9ICJUaGUgb3B0aW9ucyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkLiI7DQoNCg0KJGxhbmdbJ2ltYWdlJ10gPSAiaW1hZ2UiOw0KJGxhbmdbJ2ltYWdlcyddID0gImltYWdlcyI7DQokbGFuZ1sncHJldnBhZ2UnXSA9ICJwcmV2aW91cyI7DQokbGFuZ1snbmV4dHBhZ2UnXSA9ICJuZXh0IjsNCiRsYW5nWydkZWZhdWx0Z2FsbGVyeWNvbW1lbnQnXSA9ICJUaGFuayB5b3UgZm9yIGluc3RhbGxpbmcgdGhlIEdhbGxlcnkgbW9kdWxlLiBJZiB5b3UgaGF2ZSB1cGxvYWRlZCBzb21lIGltYWdlcyB0byB0aGUgJ3VwbG9hZHMvaW1hZ2VzL0dhbGxlcnkvJyBmb2xkZXIsIHlvdSB3aWxsIHNlZSB0aGVtIGJlbG93LiBZb3UgY2FuIGVkaXQgdGl0bGVzLCBkZXNjcmlwdGlvbnMgYW5kIHRodW1ibmFpbCBzaXplcyBpbiB0aGUgYWRtaW4gc2VjdGlvbi4gQ2hlY2sgb3V0IGFsbCB0aGUgb3RoZXIgZmVhdHVyZXMgdGhpcyBtb2R1bGUgb2ZmZXJzIGluIHRoZSBtb2R1bGUtaGVscC4iOw0KDQoNCiRsYW5nWydoZWxwX2RpciddID0gIlBhcmFtZXRlciB0byBzcGVjaWZ5IGEgZGlyZWN0b3J5LCByZWxhdGl2ZSB0byB1cGxvYWRzL2ltYWdlcy9HYWxsZXJ5LyI7DQokbGFuZ1snaGVscF90ZW1wbGF0ZSddID0gIlVzZSBhIHNlcGFyYXRlIGRhdGFiYXNlIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBwaG90byBnYWxsZXJ5LiBUaGlzIHRlbXBsYXRlIG11c3QgZXhpc3QgYW5kIGJlIHZpc2libGUgaW4gdGhlIHRlbXBsYXRlIHRhYiBvZiB0aGUgR2FsbGVyeSBhZG1pbiwgdGhvdWdoIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgdGhlIGRlZmF1bHQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIHRlbXBsYXRlIHdoaWNoIGlzIGFzc2lnbmVkIHRvIHRoZSBkaXJlY3Rvcnkgd2lsbCBiZSB1c2VkLCBlbHNlIHRoZSBkZWZhdWx0IHRlbXBsYXRlLiI7DQokbGFuZ1snaGVscF9udW1iZXInXSA9ICJNYXhpbXVtIG51bWJlciBvZiBpbWFnZXRodW1icyB0byBkaXNwbGF5IChwZXIgcGFnZSkuIExlYXZpbmcgZW1wdHkgd2lsbCBzaG93IGFsbCBpbWFnZXMuIjsNCiRsYW5nWydoZWxwX3N0YXJ0J10gPSAiU3RhcnQgYXQgdGhlIG50aCBpbWFnZS4gTGVhdmluZyBlbXB0eSB3aWxsIHN0YXJ0IGF0IHRoZSBmaXJzdCBpbWFnZS4iOw0KJGxhbmdbJ2hlbHBfc2hvdyddID0gIk92ZXJpZGUgd2hpY2ggaW1hZ2VzIGhhdmUgdG8gYmUgc2hvd24uIFBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQo8bGk+J2FjdGl2ZScgLSB0byBkaXNwbGF5IHRoZSBpbWFnZXMgbWFya2VkIGFzIGFjdGl2ZSAoZGVmYXVsdCk8L2xpPg0KPGxpPidpbmFjdGl2ZScgLSB0byBkaXNwbGF5IG9ubHkgdGhlIGltYWdlcyBtYXJrZWQgYXMgaW5hY3RpdmUgPC9saT4NCjxsaT4nYWxsJyAtIHRvIGRpc3BsYXkgYWxsIGltYWdlczwvbGk+DQo8L3VsPg0KIjsNCiRsYW5nWydoZWxwX2NhdGVnb3J5J10gPSAiVG8gZGlzcGxheSBvbmx5IGltYWdlcy9nYWxsZXJpZXMgYXNzaWduZWQgdG8gdGhlIHNwZWNpZmllZCBjYXRlZ29yaWVzLiBVc2UgKiBhZnRlciB0aGUgbmFtZSB0byBzaG93IGNoaWxkcmVuLiAgTXVsdGlwbGUgY2F0ZWdvcmllcyBjYW4gYmUgdXNlZCBpZiBzZXBhcmF0ZWQgd2l0aCBhIGNvbW1hLiBMZWF2aW5nIGVtcHR5LCB3aWxsIHNob3cgYWxsIGNhdGVnb3JpZXMuIjsNCiRsYW5nWydoZWxwX2FjdGlvbiddID0gIk92ZXJyaWRlIHRoZSBkZWZhdWx0IGFjdGlvbi4gVXNlIGl0IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGFib3ZlIHBhcmFtZXRlcnMuIFBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQo8bGk+J3Nob3dyYW5kb20nIC0gdG8gZGlzcGxheSBhIHNldCBvZiByYW5kb20gdGh1bWItaW1hZ2VzIChhcHBsaWVzIG9ubHkgdG8gdGhlIGltYWdlcyB3aGljaCBhcmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSwgZGVmYXVsdHMgdG8gYSBudW1iZXIgb2YgNiBpbWFnZXMpLiBUaGUgZGlyIHBhcmFtZXRlciBtdXN0IGJlIHNldCwgb3IgdGhlIGRlZmF1bHQgR2FsbGVyeS1yb290IHdpbGwgYmUgdXNlZC4gVXNlICcvKicgYWZ0ZXIgdGhlIG5hbWUgdG8gaW5jbHVkZSBpbWFnZXMgZnJvbSBzdWJkaXJlY3RvcmllczwvbGk+DQo8bGk+J3Nob3dsYXRlc3QnIC0gdG8gZGlzcGxheSB0aGUgbW9zdCByZWNlbnRseSBhZGRlZCBpbWFnZXMgKGFwcGxpZXMgb25seSB0byB0aGUgaW1hZ2VzIHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLCBkZWZhdWx0cyB0byBhIG51bWJlciBvZiA2IGltYWdlcykgVGhlIGRpciBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQsIG9yIHRoZSBkZWZhdWx0IEdhbGxlcnktcm9vdCB3aWxsIGJlIHVzZWQuIFN1YmRpcmVjdG9yaWVzIGFyZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkPC9saT4NCjxsaT4nc2hvd2xhdGVzdGRpcicgLSBub3QgeWV0IGltcGxlbWVudGVkISBNZW5kIHRvIGRpc3BsYXkgYSBzZXQgb2YgcmFuZG9tIHRodW1iLWltYWdlcyBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IGFkZGVkIGRpcmVjdG9yeSAoYXBwbGllcyBvbmx5IHRvIHRoZSBpbWFnZXMgd2hpY2ggYXJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UsIGRlZmF1bHRzIHRvIGEgbnVtYmVyIG9mIDYgaW1hZ2VzKSBUaGUgdGh1bWItc2V0dGluZ3Mgb2YgdGhlIEdhbGxlcnktcm9vdCB3aWxsIGJlIHVzZWQ8L2xpPg0KPC91bD4NCiI7DQoNCiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICI8dWw+DQo8bGk+VmVyc2lvbiAxLjAuMS4gMjMgQXVndXN0IDIwMDkuIEFwcGx5IHRodW1ibmFpbC1zZXR0aW5ncyBvbiAnQWxidW0tY292ZXJzJyBbIzM5MjRdLCBCdWdmaXggZm9yIFsjMzkyN10sIEFkZGVkIG1pc3NpbmcgL2RpdiB0byB0aGlja2JveC10ZW1wbGF0ZSwgZml4ZWQgYW4gaXNzdWUgd2l0aCBnZW5lcmF0aW5nIHRodW1ibmFpbHMgd2hlbiBubyB0aHVtYnMgYXZhaWxhYmxlIGluIEltYWdlTWFuYWdlciwgaW1wcm92ZWQgdGhlIG5hbWluZyBvZiB0aHVtYnMsIEJ1Z2ZpeCBmb3IgWyMzOTMxXSwgUHJldmVudCBkaXNwbGF5IHRoZSBjb250ZW50IG9mIGdhbGxlcmllcyB0aGF0IGFyZSBzZXQgYXMgaW5hY3RpdmUuPC9saT4NCjxsaT5WZXJzaW9uIDEuMC4gMTcgQXVndXN0IDIwMDkuIFBhZ2luYXRpb24gcGFyYW1ldGVycyBhZGRlZCwgU3RhbmRhcmQgdGVtcGxhdGVzIGNoYW5nZWQgYWNjb3JkaW5nbHksIEV4dGVuZGVkIHRoZSBtb2R1bGUtaGVscCwgQWRkZWQgZnVuY3Rpb25zIHRvIHNob3cgcmFuZG9tIG9yIGxhdGVzdCBpbWFnZXMsIFN1cHBvcnQgb2YgcHJldHR5LXVybHMsIFZhcmlvdXMgaW1wcm92ZW1lbnRzPC9saT4NCjxsaT5WZXJzaW9uIDAuNi4gOSBBdWd1c3QgMjAwOS4gSW5pdGlhbCBCZXRhIFJlbGVhc2UuPC9saT4NCjwvdWw+IjsNCiRsYW5nWydoZWxwJ10gPSAiPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5UaGUgR2FsbGVyeSBtb2R1bGUgaXMgYW4gZWFzeSB0byB1c2UgcGhvdG8gZ2FsbGVyeSB3aGljaCBhdXRvbWF0aWNhbGx5IHNob3dzIHRoZSBpbWFnZXMgb2YgYSBzcGVjaWZpZWQgZGlyZWN0b3J5LiBTdWJkaXJlY3RvcmllcyB3aWxsIGJlIHNob3duIGFzIHN1YmdhbGxlcmllcy4gSXQgaGFzIGxvdHMgb2YgZmVhdHVyZXMsIHN1Y2ggYXMgYXV0b21hdGljIHRodW1ibmFpbGluZywgdGhlIHVzZSBvZiBtdWx0aXBsZSBMaWdodGJveC1saWtlIHRlbXBsYXRlcyBvciBhbnkgY3NzL2phdmFzY3JpcHQgdGVtcGxhdGUgeW91IGxpa2UsIGFuZCB5b3UgY2FuIGdpdmUgdGl0bGVzIGFuZCBkZXNjcmlwdGlvbnMgdG8geW91ciBnYWxsZXJpZXMgYXMgd2VsbCBhcyB5b3VyIHBob3Rvcy48L3A+DQo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCjxwPkZpcnN0LCBpbnNlcnQgdGhlIG1vZHVsZSB3aXRoIHRoZSAmIzEyMztHYWxsZXJ5fSB0YWcgaW50byB5b3VyIHBhZ2Ugb3IgdGVtcGxhdGUgYW55d2hlcmUgeW91IHdoaXNoLiBUaGVuIHVwbG9hZCBzb21lIGltYWdlcyB3aXRoIHRoZSBJbWFnZSBNYW5hZ2VyLCBGaWxlIE1hbmFnZXIgKGUuZy4gbXVsdGlwbGUgaW1hZ2VzIGluIHppcGZpbGUpIG9yIEZUUCB0byB0aGUgdXBsb2Fkcy9pbWFnZXMvR2FsbGVyeS8gZGlyZWN0b3J5LjwvcD4NCjxwPlRoYXQncyBpdCE8L3A+DQo8cD5JZiB5b3Ugd2FudCBtb3JlIHBob3RvIGdhbGxlcmllcywgc2ltcGx5IGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBhbmQgdXBsb2FkIHlvdXIgcGhvdG9zIGFzIGRlc2NyaWJlZC4gQnkgYWRkaW5nIHBhcmFtZXRlcnMgdG8gdGhlICYjMTIzO0dhbGxlcnl9IHRhZywgeW91IGNhbiBlYXNpbHkgbWFuaXB1bGF0ZSB3aGljaCBzdWJnYWxsZXJ5IHdpbGwgYmUgc2hvd24gaW4gd2hpY2ggdGVtcGxhdGUsIGUuZy4gJiMxMjM7R2FsbGVyeSBkaXI9XCJob2xpZGF5cy9OZXRoZXJsYW5kczIwMDlcIiB0ZW1wbGF0ZT1cIkxpZ2h0Ym94XCJ9PC9wPg0KPHA+QnkgZGVmYXVsdCB0aGUgdGh1bWJuYWlscyBmcm9tIHRoZSBJbWFnZSBNYW5hZ2VyIGFyZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHBob3RvIGdhbGxlcmllcy48L3A+DQo8aDM+QWR2YW5jZWQgT3B0aW9ucywgYnV0IHN0aWxsIGVhc3kgdG8gdXNlPC9oMz4NCjxwPkluIHRoZSBhZG1pbiBzZWN0aW9uIHlvdSBoYXZlIGxvdHMgb2Ygb3RoZXIgb3B0aW9uczo8L3A+DQo8dWw+DQo8bGk+U2V0IGEgcGhvdG8gYXMgdGhlIGRlZmF1bHQgZm9yIGEgZ2FsbGVyeSwgc28gaXQgd2lsbCBzaG93IGluIHRoZSBwYXJlbnQgZ2FsbGVyeSBhcyBhICdjb3ZlcicgaW4gc3RlYWQgb2YgdGhlIGRlZmF1bHQgZm9sZGVyLWljb24uPC9saT4NCjxsaT5HaXZlIHRpdGxlcyBhbmQgZGVzY3JpcHRpb25zIHRvIGdhbGxlcmllcy48L2xpPg0KPGxpPlNldCBhIGRlZmF1bHQgdGVtcGxhdGUgZm9yIGVhY2ggZ2FsbGVyeS48L2xpPg0KPGxpPlNldCB0aHVtYm5haWwgc2l6ZXMgZm9yIGVhY2ggZ2FsbGVyeSwgd2l0aCBwb3NpYmlsaXRpZXMgdG8gc2NhbGUsIGNyb3AgYW5kL29yIHpvb20gdGhlIGltYWdlcy48L2xpPg0KPGxpPkdpdmUgdGl0bGVzIGFuZCBkZXNjcmlwdGlvbnMgdG8gcGhvdG9zLjwvbGk+DQo8bGk+U3dpdGNoIGEgc3BlY2lmaWMgcGhvdG8gb3IgZ2FsbGVyeSB0byBpbmFjdGl2ZSwgcHJldmVudGluZyBpdCBmcm9tIGRpc3BsYXkuPC9saT4NCjxsaT5FZGl0L2NvcHkgdGVtcGxhdGVzIG9yIGNyZWF0ZSBuZXcgb25lcy4gQ2hlY2sgdGhlIGluZm8taWNvbiBiZW5lYXRoIHRoZSB0ZW1wbGF0ZS1jb2RlIGZvciB0aGUgYXZhaWxhYmxlIHZhcmlhYmxlcy48L2xpPg0KPC91bD4NCjxwPkluIG9yZGVyIHRvIGVkaXQgdGVtcGxhdGVzLCB0aGUgdXNlciBtdXN0IGJlbG9uZyB0byBhIGdyb3VwIHdpdGggdGhlICdNb2RpZnkgVGVtcGxhdGVzJyBwZXJtaXNzaW9uLiBUbyBlZGl0IHRoZSBnbG9iYWwgR2FsbGVyeSBvcHRpb25zLCB0aGUgdXNlciBtdXN0IGJlbG9uZyB0byBhIGdyb3VwIHdpdGggdGhlICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgcGVybWlzc2lvbi48L3A+DQo8cD5BbGwgdGl0bGVzLCBkZXNjcmlwdGlvbnMgYW5kIHNldHRpbmdzIGFyZSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLiBUaGUgZGF0YWJhc2Ugd2lsbCBzeW5jaHJvbml6ZSB3aXRoIHRoZSBmaWxlZGlyZWN0b3J5IGVhY2ggdGltZSB0aGUgYWNjb3JkaW5nIGdhbGxlcnkgaXMgdmlzaXRlZCBpbiB0aGUgR2FsbGVyeS1hZG1pbi4gQSBsaXR0bGUgd2FybmluZzogd2hlbiB5b3UgbW92ZSBhbiBpbWFnZSBvciBzdWJkaXJlY3RvcnkgdG8gYW5vdGhlciBkaXJlY3RvcnksIHlvdSB3aWxsIGxvb3NlIGl0cyB0aXRsZSwgZGVzY3JpcHRpb24gYW5kIHNldHRpbmdzLjwvcD4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCjx1bD4NCjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgRmVhdHVyZSBSZXF1ZXN0IG9yIEJ1ZyBSZXBvcnQsIHBsZWFzZSB2aXNpdCB0aGUgTW9kdWxlIEZvcmdlDQo8YSBocmVmPVwiaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nYWxsZXJ5L1wiPkdhbGxlcnkgUGFnZTwvYT4uPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9XCJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmdcIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICANCjwvdWw+DQo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwOSwgSm9zIDxhIGhyZWY9XCJtYWlsdG86am9zdmRAbGl2ZS5ubFwiPiZsdDtqb3N2ZEBsaXZlLm5sJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPVwiaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMXCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCiI7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogR2FsbGVyeQ0KIyBNZXRob2Q6IEluc3RhbGwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwOCBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9nYWxsZXJ5Lw0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCg0KJGRiID0mICRnQ21zLT5HZXREYigpOw0KDQovLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UNCiR0YWJvcHRhcnJheSA9IGFycmF5KCAnbXlzcWwnID0+ICdUWVBFPU15SVNBTScgKTsNCg0KJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7DQoNCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbg0KJGZsZHMgPSAiDQoJZmlsZWlkIEkgS0VZIEFVVE8sDQoJZmlsZW5hbWUgQygyNTUpLA0KCWZpbGVwYXRoIEMoMjU1KSwNCglmaWxlZGF0ZSAiIC4gQ01TX0FET0RCX0RUIC4gIiwNCglmaWxlb3JkZXIgSSwNCglhY3RpdmUgSSwNCglkZWZhdWx0ZmlsZSBJLA0KCWdhbGxlcnlpZCBJIEtFWSwNCgl0aXRsZSBDKDI1NSksDQoJY29tbWVudCBYDQoiOw0KDQokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dhbGxlcnkiLA0KCSRmbGRzLCANCgkkdGFib3B0YXJyYXkpOw0KJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KLyoNCi8vIGNyZWF0ZSBhIHNlcXVlbmNlDQokZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dhbGxlcnlfc2VxIik7DQoqLw0KDQokZmxkcyA9ICINCglmaWxlaWQgSSBLRVksDQoJdGVtcGxhdGUgQygxMDApLA0KCXRodW1id2lkdGggSSwNCgl0aHVtYmhlaWdodCBJLA0KCXJlc2l6ZW1ldGhvZCBDKDEwKQ0KIjsNCg0KJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIiwNCgkkZmxkcywgDQoJJHRhYm9wdGFycmF5KTsNCiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCg0KLy8gY3JlYXRlIGEgcGVybWlzc2lvbg0KJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1VzZSBHYWxsZXJ5JywgJ1VzZSBHYWxsZXJ5Jyk7DQokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignU2V0IEdhbGxlcnkgUHJlZnMnLCdTZXQgR2FsbGVyeSBQcmVmcycpOw0KDQovLyBzZXR1cCB0ZW1wbGF0ZXMNCiRmbiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcGxhdGVfc2xpbWJveC50cGwnOw0KaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApDQogIHsNCiAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsNCiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmYXVsdF90ZW1wbGF0ZV9jb250ZW50cycsJHRlbXBsYXRlKTsNCiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ1NsaW1ib3gnLCR0ZW1wbGF0ZSk7DQogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2N1cnJlbnRfdGVtcGxhdGUnLCdTbGltYm94Jyk7DQogIH0NCiRmbiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcGxhdGVfbGlnaHRib3gudHBsJzsNCmlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQ0KICB7DQogICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7DQogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdMaWdodGJveCcsJHRlbXBsYXRlKTsNCiAgfQ0KJGZuID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcGxhdGVzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZV90aGlja2JveC50cGwnOw0KaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApDQogIHsNCiAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsNCiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ1RoaWNrYm94JywkdGVtcGxhdGUpOw0KICB9DQoNCi8vIGNyZWF0ZSBhIHByZWZlcmVuY2UNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhbGxvd2VkX2V4dGVuc2lvbnMiLCAianBnLGpwZWcsZ2lmLHBuZyIpOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoInVzZV9jb21tZW50X3d5c2l3eWciLCBmYWxzZSk7DQoNCi8vIHJlZ2lzdGVyIGFuIGV2ZW50IHRoYXQgdGhlIEdhbGxlcnkgd2lsbCBpc3N1ZS4gT3RoZXIgbW9kdWxlcw0KLy8gb3IgdXNlciB0YWdzIHdpbGwgYmUgYWJsZSB0byBzdWJzY3JpYmUgdG8gdGhpcyBldmVudCwgYW5kIHRyaWdnZXINCi8vIG90aGVyIGFjdGlvbnMgd2hlbiBpdCBnZXRzIGNhbGxlZC4NCi8vICR0aGlzLT5DcmVhdGVFdmVudCggJ09uR2FsbGVyeVByZWZlcmVuY2VDaGFuZ2UnICk7DQoNCi8vIGNyZWF0ZSBkZWZhdWx0IGltYWdlZm9sZGVyDQppZiggIWlzX2RpcignLi4nLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3VwbG9hZHMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2ltYWdlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nR2FsbGVyeScpICkNCnsNCiAgICBta2RpcignLi4nLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3VwbG9hZHMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2ltYWdlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nR2FsbGVyeScpOw0KfQ0KDQokcXVlcnkgPSAiSU5TRVJUIElOVE8gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfZ2FsbGVyeSAoZmlsZW5hbWUsIGZpbGVwYXRoLCBmaWxlZGF0ZSwgZmlsZW9yZGVyLCBhY3RpdmUsIGRlZmF1bHRmaWxlLCBnYWxsZXJ5aWQsIHRpdGxlLCBjb21tZW50KSBWQUxVRVMgKD8sPyw/LC0xLDEsMCwwLD8sPykiOw0KJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJ0dhbGxlcnkvJywgJycsIGRhdGUoIlktbS1kIEg6aTpzIiwgZmlsZW10aW1lKCcuLi91cGxvYWRzL2ltYWdlcy9HYWxsZXJ5JykpLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdkZWZhdWx0Z2FsbGVyeWNvbW1lbnQnKSkpOw0KDQoNCi8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZw0KJHRoaXMtPkF1ZGl0KCAwLCANCgkkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIA0KCSR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSApOw0KCSAgICAgIA0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogR2FsbGVyeQ0KIyBNZXRob2Q6IFVuaW5zdGFsbA0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dhbGxlcnkvDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsNCg0KDQokZGIgPSYgJGdDbXMtPkdldERiKCk7DQoNCi8vIHJlbW92ZSB0aGUgZGF0YWJhc2UgdGFibGVzDQokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsNCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dhbGxlcnkiICk7DQokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7DQokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIiApOw0KJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KDQovLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zDQokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignVXNlIEdhbGxlcnknKTsNCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdTZXQgR2FsbGVyeSBQcmVmcycpOw0KDQovLyByZW1vdmUgYWxsIHByZWZlcmVuY2VzDQokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOw0KDQovLyByZW1vdmUgYWxsIHRlbXBsYXRlcw0KJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCk7DQoNCi8vIHJlbW92ZSB0aGUgZXZlbnRzDQovLyR0aGlzLT5SZW1vdmVFdmVudCggJ09uR2FsbGVyeVByZWZlcmVuY2VDaGFuZ2UnICk7DQoNCi8vIGRlbGV0ZSB0aHVtYnMgaW4gdGh1bWJzZm9sZGVyDQokdGh1bWJzZm9sZGVyID0gJy4uJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidtb2R1bGVzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidHYWxsZXJ5Jy5ESVJFQ1RPUllfU0VQQVJBVE9SLid0aHVtYnMnOw0KaWYoICRkaCA9IEBvcGVuZGlyKCR0aHVtYnNmb2xkZXIpICkNCnsNCgl3aGlsZSggZmFsc2UgIT09ICgkb2JqID0gcmVhZGRpcigkZGgpKSApIA0KCXsNCgkJaWYoICRvYmogIT0gJy4nICYmICRvYmogIT0gJy4uJyApDQoJCXsNCgkJCUB1bmxpbmsoJHRodW1ic2ZvbGRlci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvYmopOw0KCQl9DQoJfQ0KCWNsb3NlZGlyKCRkaCk7DQp9DQoNCg0KDQovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cNCiR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEdhbGxlcnkKIyBNZXRob2Q6IFVwZ3JhZGUKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDggYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2dhbGxlcnkvCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKCiRjdXJyZW50X3ZlcnNpb24gPSAkb2xkdmVyc2lvbjsKJGRiID0mICR0aGlzLT5HZXREYigpOwoKc3dpdGNoKCRjdXJyZW50X3ZlcnNpb24pCnsKCWNhc2UgIjAuNi4wLWJldGEiOgoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dhbGxlcnkiLCAiZ2FsbGVyeWlkIEkgS0VZIik7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCQoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nYWxsZXJ5IFNFVCBnYWxsZXJ5aWQ9SUYoZmlsZWlkPTEsMCwxKSBXSEVSRSBmaWxlcGF0aD0nJyI7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJCgkJJHF1ZXJ5ID0gIlNFTEVDVCBESVNUSU5DVCBmaWxlcGF0aCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ2FsbGVyeSBXSEVSRSAoZ2FsbGVyeWlkIElTIE5VTEwgT1IgZ2FsbGVyeWlkID0gMCkgQU5EIGZpbGVpZCA8PiAxIjsKCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJd2hpbGUgKCRyZXN1bHQgJiYgJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQkkZ2FsbGVyeWluZm8gPSAkdGhpcy0+X0dldGdhbGxlcnlpbmZvKCRyb3dbJ2ZpbGVwYXRoJ10pOwoJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ2FsbGVyeSBTRVQgZ2FsbGVyeWlkPT8gd2hlcmUgZmlsZXBhdGg9PyI7CgkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGdhbGxlcnlpbmZvWydmaWxlaWQnXSwkcm93WydmaWxlcGF0aCddKSk7CgkJfQoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIFNFVCByZXNpemVtZXRob2Q9J3NjJyBXSEVSRSByZXNpemVtZXRob2Q9J3NjYWxlJyI7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dhbGxlcnlfcHJvcHMgU0VUIHJlc2l6ZW1ldGhvZD0nY3InIFdIRVJFIHJlc2l6ZW1ldGhvZD0nY3JvcCciOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIFNFVCByZXNpemVtZXRob2Q9J3pzJyBXSEVSRSByZXNpemVtZXRob2Q9J3pvb21zY2FsZSciOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nYWxsZXJ5X3Byb3BzIFNFVCByZXNpemVtZXRob2Q9J3pjJyBXSEVSRSByZXNpemVtZXRob2Q9J3pvb21jcm9wJyI7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJJGN1cnJlbnRfdmVyc2lvbiA9ICIxLjAiOwoKCWNhc2UgIjEuMCI6CgkJJHRodW1ic2ZvbGRlciA9ICcuLicuRElSRUNUT1JZX1NFUEFSQVRPUi4nbW9kdWxlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nR2FsbGVyeScuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGh1bWJzJzsKCQlpZiggJGRoID0gQG9wZW5kaXIoJHRodW1ic2ZvbGRlcikgKQoJCXsKCQkJd2hpbGUoIGZhbHNlICE9PSAoJG9iaiA9IHJlYWRkaXIoJGRoKSkgKSAKCQkJewoJCQkJaWYoICRvYmogIT0gJy4nICYmICRvYmogIT0gJy4uJyApCgkJCQl7CgkJCQkJQHVubGluaygkdGh1bWJzZm9sZGVyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG9iaik7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoJGRoKTsKCQl9CgkJJGN1cnJlbnRfdmVyc2lvbiA9ICIxLjAuMSI7CgoJY2FzZSAiMS4wLjEiOgp9CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAKCSAgICAgICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgCgkgICAgICAkdGhpcy0+TGFuZygndXBncmFkZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admingalleries.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQgPiAwfQp7Kgk8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+CgkJPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPgoJPC9kaXY+Kn0KCTx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CgkJPHRoZWFkPgoJCQk8dHI+CgkJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCQkJPHRoPnskZ2FsbGVyeXBhdGh9PC90aD4KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPnskYWN0aXZlfTwvdGg+CQkJCgkJCQk8dGggY2xhc3M9InBhZ2VpY29uIj57JGFjdGlvbnN9PC90aD4KCQkJPC90cj4KCQk8L3RoZWFkPgoJCTx0Ym9keT4KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJe2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIiBhc3NpZ249cm93Y2xhc3N9CgkJCTx0ciBjbGFzcz0ieyRyb3djbGFzc30iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc30nOyI+CgkJCQk8dGQ+PC90ZD4KCQkJCTx0ZD57JGVudHJ5LT5maWxlfTwvdGQ+CgkJCQk8dGQgY2xhc3M9InBhZ2Vwb3MiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+eyRlbnRyeS0+YWN0aXZlbGlua308L3RkPgkJCQoJCQkJPHRkIGNsYXNzPSJwYWdlcG9zIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CgkJCTwvdHI+Cgl7L2ZvcmVhY2h9CgkJPC90Ym9keT4KCTwvdGFibGU+CntlbHNlfQoJPGg0Pnskbm9nYWxsZXJpZXN0ZXh0fTwvaDQ+CnsvaWZ9CnsqCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4KPC9kaXY+Kn0=]]></data>
	</file>
	<file>
	  <filename>/templates/adminoptions.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGFsbG93ZWRfZXh0ZW5zaW9uc306PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2FsbG93ZWRfZXh0ZW5zaW9uc308L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHVzZV9jb21tZW50X3d5c2l3eWd9OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF91c2VfY29tbWVudF93eXNpd3lnfTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPg0KCTwvZGl2Pg0KeyRlbmRmb3JtfQ0K]]></data>
	</file>
	<file>
	  <filename>/templates/admintemplates.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskbmV3dGVtcGxhdGVsaW5rfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+Cjx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiAgPHRoZWFkPgogICAgPHRyPgogICAgICA8dGggd2lkdGg9Ijc1JSI+eyRuYW1lcHJvbXB0fTwvdGg+CiAgICAgIDx0aD57JGRlZmF1bHRwcm9tcHR9PC90aD4KICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KICAgIDwvdHI+CiAgPC90aGVhZD4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KICAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgIDx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CiAgICAgPHRkPnskZW50cnktPmRlZmF1bHR9PC90ZD4KICAgICA8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KICAgICA8dGQ+eyRlbnRyeS0+Y29weWxpbmt9PC90ZD4KICAgICA8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgogICA8L3RyPgp7L2ZvcmVhY2h9CjwvdGFibGU+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRuZXd0ZW1wbGF0ZWxpbmt9PC9wPgo8L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/css/Lightbox.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmdhbGxlcnkgLmltZyB7DQoJZmxvYXQ6IGxlZnQ7DQoJbWFyZ2luOiAzcHg7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouZ2FsbGVyeSAucGFnZW5hdmlnYXRpb24gew0KCWhlaWdodDogNTBweDsNCn0NCg0KLmdhbGxlcnkgLnByZXZwYWdlIGEsIC5nYWxsZXJ5IC5wcmV2cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMDsNCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3ByZXZpb3VzLnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLm5leHRwYWdlIGEsIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMCA2cHggMCAwOw0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvbmV4dC5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYXJlbnRsaW5rIGEgew0KCWRpc3BsYXk6IGJsb2NrOyANCgl3aWR0aDogNTBweDsgDQoJaGVpZ2h0OiAzOXB4Ow0KCWZsb2F0OiBsZWZ0OyANCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3VwcGFnZS5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbmF2aWdhdGlvbiBhOmhvdmVyIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucHJldnBhZ2UgZW0sIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VsaW5rcyB7DQoJZmxvYXQ6IHJpZ2h0Ow0KCWJvcmRlci1yaWdodDogMnB4IHNvbGlkICM2NjY7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbGlua3MgYSwgLmdhbGxlcnkgLnBhZ2VsaW5rcyBlbSB7DQoJbWFyZ2luLXRvcDogNnB4Ow0KCXBhZGRpbmc6IDAgNnB4Ow0KCWJvcmRlci1sZWZ0OiAycHggc29saWQgIzY2NjsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQoJZm9udDogYm9sZCAxMXB4IHZlcmRhbmE7IGNvbG9yOiAjNjY2Ow0KfQ0KDQouZ2FsbGVyeSAucGFnZWxpbmtzIGVtIHsNCgljb2xvcjogIzAwMDsNCn0NCg0KDQojbGlnaHRib3h7CXBvc2l0aW9uOiBhYnNvbHV0ZTsJbGVmdDogMDsgd2lkdGg6IDEwMCU7IHotaW5kZXg6IDEwMDsgdGV4dC1hbGlnbjogY2VudGVyOyBsaW5lLWhlaWdodDogMDt9DQojbGlnaHRib3ggaW1neyB3aWR0aDogYXV0bzsgaGVpZ2h0OiBhdXRvO30NCiNsaWdodGJveCBhIGltZ3sgYm9yZGVyOiBub25lOyB9DQoNCiNvdXRlckltYWdlQ29udGFpbmVyeyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IHdpZHRoOiAyNTBweDsgaGVpZ2h0OiAyNTBweDsgbWFyZ2luOiAwIGF1dG87IH0NCiNpbWFnZUNvbnRhaW5lcnsgcGFkZGluZzogMTBweDsgfQ0KDQojbG9hZGluZ3sgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDQwJTsgbGVmdDogMCU7IGhlaWdodDogMjUlOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogY2VudGVyOyBsaW5lLWhlaWdodDogMDsgfQ0KI2hvdmVyTmF2eyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgei1pbmRleDogMTA7IH0NCiNpbWFnZUNvbnRhaW5lcj4jaG92ZXJOYXZ7IGxlZnQ6IDA7fQ0KI2hvdmVyTmF2IGF7IG91dGxpbmU6IG5vbmU7fQ0KDQojcHJldkxpbmssICNuZXh0TGlua3sgd2lkdGg6IDQ5JTsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9naWY7YmFzZTY0LEFBQUEpOyAvKiBUcmljayBJRSBpbnRvIHNob3dpbmcgaG92ZXIgKi8gZGlzcGxheTogYmxvY2s7IH0NCiNwcmV2TGluayB7IGxlZnQ6IDA7IGZsb2F0OiBsZWZ0O30NCiNuZXh0TGluayB7IHJpZ2h0OiAwOyBmbG9hdDogcmlnaHQ7fQ0KI3ByZXZMaW5rOmhvdmVyLCAjcHJldkxpbms6dmlzaXRlZDpob3ZlciB7IGJhY2tncm91bmQ6IHVybCguLi9saWdodGJveC9pbWFnZXMvcHJldmxhYmVsLmdpZikgbGVmdCAxNSUgbm8tcmVwZWF0OyB9DQojbmV4dExpbms6aG92ZXIsICNuZXh0TGluazp2aXNpdGVkOmhvdmVyIHsgYmFja2dyb3VuZDogdXJsKC4uL2xpZ2h0Ym94L2ltYWdlcy9uZXh0bGFiZWwuZ2lmKSByaWdodCAxNSUgbm8tcmVwZWF0OyB9DQoNCiNpbWFnZURhdGFDb250YWluZXJ7IGZvbnQ6IDEwcHggVmVyZGFuYSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyBtYXJnaW46IDAgYXV0bzsgbGluZS1oZWlnaHQ6IDEuNGVtOyBvdmVyZmxvdzogYXV0bzsgd2lkdGg6IDEwMCUJOyB9DQoNCiNpbWFnZURhdGF7CXBhZGRpbmc6MCAxMHB4OyBjb2xvcjogIzY2NjsgfQ0KI2ltYWdlRGF0YSAjaW1hZ2VEZXRhaWxzeyB3aWR0aDogNzAlOyBmbG9hdDogbGVmdDsgdGV4dC1hbGlnbjogbGVmdDsgfQkNCiNpbWFnZURhdGEgI2NhcHRpb257IGZvbnQtd2VpZ2h0OiBib2xkOwl9DQojaW1hZ2VEYXRhICNudW1iZXJEaXNwbGF5eyBkaXNwbGF5OiBibG9jazsgY2xlYXI6IGxlZnQ7IHBhZGRpbmctYm90dG9tOiAxLjBlbTsJfQkJCQ0KI2ltYWdlRGF0YSAjYm90dG9tTmF2Q2xvc2V7IHdpZHRoOiA2NnB4OyBmbG9hdDogcmlnaHQ7ICBwYWRkaW5nLWJvdHRvbTogMC43ZW07IG91dGxpbmU6IG5vbmU7fQkgCQ0KDQojb3ZlcmxheXsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHotaW5kZXg6IDkwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsgfQ0KDQo=]]></data>
	</file>
	<file>
	  <filename>/templates/css/Slimbox.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmdhbGxlcnkgLmltZyB7DQoJZmxvYXQ6IGxlZnQ7DQoJbWFyZ2luOiAzcHg7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouZ2FsbGVyeSAucGFnZW5hdmlnYXRpb24gew0KCWhlaWdodDogNTBweDsNCn0NCg0KLmdhbGxlcnkgLnByZXZwYWdlIGEsIC5nYWxsZXJ5IC5wcmV2cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMDsNCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3ByZXZpb3VzLnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLm5leHRwYWdlIGEsIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMCA2cHggMCAwOw0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvbmV4dC5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYXJlbnRsaW5rIGEgew0KCWRpc3BsYXk6IGJsb2NrOyANCgl3aWR0aDogNTBweDsgDQoJaGVpZ2h0OiAzOXB4Ow0KCWZsb2F0OiBsZWZ0OyANCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3VwcGFnZS5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbmF2aWdhdGlvbiBhOmhvdmVyIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucHJldnBhZ2UgZW0sIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VsaW5rcyB7DQoJZmxvYXQ6IHJpZ2h0Ow0KCWJvcmRlci1yaWdodDogMnB4IHNvbGlkICM2NjY7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbGlua3MgYSwgLmdhbGxlcnkgLnBhZ2VsaW5rcyBlbSB7DQoJbWFyZ2luLXRvcDogNnB4Ow0KCXBhZGRpbmc6IDAgNnB4Ow0KCWJvcmRlci1sZWZ0OiAycHggc29saWQgIzY2NjsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQoJZm9udDogYm9sZCAxMXB4IHZlcmRhbmE7IGNvbG9yOiAjNjY2Ow0KfQ0KDQouZ2FsbGVyeSAucGFnZWxpbmtzIGVtIHsNCgljb2xvcjogIzAwMDsNCn0NCg0KDQovKiBTTElNQk9YICovDQoNCiNsYk92ZXJsYXkgew0KCXBvc2l0aW9uOiBmaXhlZDsNCgl6LWluZGV4OiA5OTk5Ow0KCWxlZnQ6IDA7DQoJdG9wOiAwOw0KCXdpZHRoOiAxMDAlOw0KCWhlaWdodDogMTAwJTsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOw0KCWN1cnNvcjogcG9pbnRlcjsNCn0NCg0KI2xiQ2VudGVyLCAjbGJCb3R0b21Db250YWluZXIgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl6LWluZGV4OiA5OTk5Ow0KCW92ZXJmbG93OiBoaWRkZW47DQoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCn0NCg0KLmxiTG9hZGluZyB7DQoJYmFja2dyb3VuZDogI2ZmZiB1cmwoLi4vc2xpbWJveC9jc3MvbG9hZGluZy5naWYpIG5vLXJlcGVhdCBjZW50ZXI7DQp9DQoNCiNsYkltYWdlIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJbGVmdDogMDsNCgl0b3A6IDA7DQoJYm9yZGVyOiAxMHB4IHNvbGlkICNmZmY7DQoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCn0NCg0KI2xiUHJldkxpbmssICNsYk5leHRMaW5rIHsNCglkaXNwbGF5OiBibG9jazsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJdG9wOiAwOw0KCXdpZHRoOiA1MCU7DQoJb3V0bGluZTogbm9uZTsNCn0NCg0KI2xiUHJldkxpbmsgew0KCWxlZnQ6IDA7DQp9DQoNCiNsYlByZXZMaW5rOmhvdmVyIHsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoLi4vc2xpbWJveC9jc3MvcHJldmxhYmVsLmdpZikgbm8tcmVwZWF0IDAgMTUlOw0KfQ0KDQojbGJOZXh0TGluayB7DQoJcmlnaHQ6IDA7DQp9DQoNCiNsYk5leHRMaW5rOmhvdmVyIHsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoLi4vc2xpbWJveC9jc3MvbmV4dGxhYmVsLmdpZikgbm8tcmVwZWF0IDEwMCUgMTUlOw0KfQ0KDQojbGJCb3R0b20gew0KCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgR2VuZXZhLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQoJZm9udC1zaXplOiAxMHB4Ow0KCWNvbG9yOiAjNjY2Ow0KCWxpbmUtaGVpZ2h0OiAxLjRlbTsNCgl0ZXh0LWFsaWduOiBsZWZ0Ow0KCWJvcmRlcjogMTBweCBzb2xpZCAjZmZmOw0KCWJvcmRlci10b3Atc3R5bGU6IG5vbmU7DQp9DQoNCiNsYkNsb3NlTGluayB7DQoJZGlzcGxheTogYmxvY2s7DQoJZmxvYXQ6IHJpZ2h0Ow0KCXdpZHRoOiA2NnB4Ow0KCWhlaWdodDogMjJweDsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoLi4vc2xpbWJveC9jc3MvY2xvc2VsYWJlbC5naWYpIG5vLXJlcGVhdCBjZW50ZXI7DQoJbWFyZ2luOiA1cHggMDsNCglvdXRsaW5lOiBub25lOw0KfQ0KDQojbGJDYXB0aW9uLCAjbGJOdW1iZXIgew0KCW1hcmdpbi1yaWdodDogNzFweDsNCn0NCg0KI2xiQ2FwdGlvbiB7DQoJZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoNCg==]]></data>
	</file>
	<file>
	  <filename>/templates/css/Thickbox.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmdhbGxlcnkgLmltZyB7DQoJZmxvYXQ6IGxlZnQ7DQoJbWFyZ2luOiAzcHg7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouZ2FsbGVyeSAucGFnZW5hdmlnYXRpb24gew0KCWhlaWdodDogNTBweDsNCn0NCg0KLmdhbGxlcnkgLnByZXZwYWdlIGEsIC5nYWxsZXJ5IC5wcmV2cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMDsNCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3ByZXZpb3VzLnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLm5leHRwYWdlIGEsIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMCA2cHggMCAwOw0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvbmV4dC5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYXJlbnRsaW5rIGEgew0KCWRpc3BsYXk6IGJsb2NrOyANCgl3aWR0aDogNTBweDsgDQoJaGVpZ2h0OiAzOXB4Ow0KCWZsb2F0OiBsZWZ0OyANCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3VwcGFnZS5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbmF2aWdhdGlvbiBhOmhvdmVyIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucHJldnBhZ2UgZW0sIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VsaW5rcyB7DQoJZmxvYXQ6IHJpZ2h0Ow0KCWJvcmRlci1yaWdodDogMnB4IHNvbGlkICM2NjY7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbGlua3MgYSwgLmdhbGxlcnkgLnBhZ2VsaW5rcyBlbSB7DQoJbWFyZ2luLXRvcDogNnB4Ow0KCXBhZGRpbmc6IDAgNnB4Ow0KCWJvcmRlci1sZWZ0OiAycHggc29saWQgIzY2NjsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQoJZm9udDogYm9sZCAxMXB4IHZlcmRhbmE7IGNvbG9yOiAjNjY2Ow0KfQ0KDQouZ2FsbGVyeSAucGFnZWxpbmtzIGVtIHsNCgljb2xvcjogIzAwMDsNCn0NCg0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIC0tLS0tLS0tLS0+Pj4gZ2xvYmFsIHNldHRpbmdzIG5lZWRlZCBmb3IgdGhpY2tib3ggPDw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoqe3BhZGRpbmc6IDA7IG1hcmdpbjogMDt9DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogLS0tLS0tLS0tLT4+PiB0aGlja2JveCBzcGVjaWZpYyBsaW5rIGFuZCBmb250IHNldHRpbmdzIDw8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiNUQl93aW5kb3cgew0KCWZvbnQ6IDEycHggQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCgljb2xvcjogIzMzMzMzMzsNCn0NCg0KI1RCX3NlY29uZExpbmUgew0KCWZvbnQ6IDEwcHggQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCgljb2xvcjojNjY2NjY2Ow0KfQ0KDQojVEJfd2luZG93IGE6bGluayB7Y29sb3I6ICM2NjY2NjY7fQ0KI1RCX3dpbmRvdyBhOnZpc2l0ZWQge2NvbG9yOiAjNjY2NjY2O30NCiNUQl93aW5kb3cgYTpob3ZlciB7Y29sb3I6ICMwMDA7fQ0KI1RCX3dpbmRvdyBhOmFjdGl2ZSB7Y29sb3I6ICM2NjY2NjY7fQ0KI1RCX3dpbmRvdyBhOmZvY3Vze2NvbG9yOiAjNjY2NjY2O30NCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAtLS0tLS0tLS0tPj4+IHRoaWNrYm94IHNldHRpbmdzIDw8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KI1RCX292ZXJsYXkgew0KCXBvc2l0aW9uOiBmaXhlZDsNCgl6LWluZGV4OjEwMDsNCgl0b3A6IDBweDsNCglsZWZ0OiAwcHg7DQoJaGVpZ2h0OjEwMCU7DQoJd2lkdGg6MTAwJTsNCn0NCg0KLlRCX292ZXJsYXlNYWNGRkJHSGFjayB7YmFja2dyb3VuZDogdXJsKG1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvdGhpY2tib3gvbWFjRkZCZ0hhY2sucG5nKSByZXBlYXQ7fQ0KLlRCX292ZXJsYXlCRyB7DQoJYmFja2dyb3VuZC1jb2xvcjojMDAwOw0KCWZpbHRlcjphbHBoYShvcGFjaXR5PTc1KTsNCgktbW96LW9wYWNpdHk6IDAuNzU7DQoJb3BhY2l0eTogMC43NTsNCn0NCg0KKiBodG1sICNUQl9vdmVybGF5IHsgLyogaWU2IGhhY2sgKi8NCiAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICBoZWlnaHQ6IGV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCA/IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0IDogZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgKyAncHgnKTsNCn0NCg0KI1RCX3dpbmRvdyB7DQoJcG9zaXRpb246IGZpeGVkOw0KCWJhY2tncm91bmQ6ICNmZmZmZmY7DQoJei1pbmRleDogMTAyOw0KCWNvbG9yOiMwMDAwMDA7DQoJZGlzcGxheTpub25lOw0KCWJvcmRlcjogNHB4IHNvbGlkICM1MjUyNTI7DQoJdGV4dC1hbGlnbjpsZWZ0Ow0KCXRvcDo1MCU7DQoJbGVmdDo1MCU7DQp9DQoNCiogaHRtbCAjVEJfd2luZG93IHsgLyogaWU2IGhhY2sgKi8NCnBvc2l0aW9uOiBhYnNvbHV0ZTsNCm1hcmdpbi10b3A6IGV4cHJlc3Npb24oMCAtIHBhcnNlSW50KHRoaXMub2Zmc2V0SGVpZ2h0IC8gMikgKyAoVEJXaW5kb3dNYXJnaW4gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgKyAncHgnKTsNCn0NCg0KI1RCX3dpbmRvdyBpbWcjVEJfSW1hZ2Ugew0KCWRpc3BsYXk6YmxvY2s7DQoJbWFyZ2luOiAxNXB4IDAgMCAxNXB4Ow0KCWJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjY2M7DQoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7DQoJYm9yZGVyLXRvcDogMXB4IHNvbGlkICM2NjY7DQoJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNjY2Ow0KfQ0KDQojVEJfY2FwdGlvbnsNCgloZWlnaHQ6MjVweDsNCglwYWRkaW5nOjdweCAzMHB4IDEwcHggMjVweDsNCglmbG9hdDpsZWZ0Ow0KfQ0KDQojVEJfY2xvc2VXaW5kb3d7DQoJaGVpZ2h0OjI1cHg7DQoJcGFkZGluZzoxMXB4IDI1cHggMTBweCAwOw0KCWZsb2F0OnJpZ2h0Ow0KfQ0KDQojVEJfY2xvc2VBamF4V2luZG93ew0KCXBhZGRpbmc6N3B4IDEwcHggNXB4IDA7DQoJbWFyZ2luLWJvdHRvbToxcHg7DQoJdGV4dC1hbGlnbjpyaWdodDsNCglmbG9hdDpyaWdodDsNCn0NCg0KI1RCX2FqYXhXaW5kb3dUaXRsZXsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6N3B4IDAgNXB4IDEwcHg7DQoJbWFyZ2luLWJvdHRvbToxcHg7DQp9DQoNCiNUQl90aXRsZXsNCgliYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7DQoJaGVpZ2h0OjI3cHg7DQp9DQoNCiNUQl9hamF4Q29udGVudHsNCgljbGVhcjpib3RoOw0KCXBhZGRpbmc6MnB4IDE1cHggMTVweCAxNXB4Ow0KCW92ZXJmbG93OmF1dG87DQoJdGV4dC1hbGlnbjpsZWZ0Ow0KCWxpbmUtaGVpZ2h0OjEuNGVtOw0KfQ0KDQojVEJfYWpheENvbnRlbnQuVEJfbW9kYWx7DQoJcGFkZGluZzoxNXB4Ow0KfQ0KDQojVEJfYWpheENvbnRlbnQgcHsNCglwYWRkaW5nOjVweCAwcHggNXB4IDBweDsNCn0NCg0KI1RCX2xvYWR7DQoJcG9zaXRpb246IGZpeGVkOw0KCWRpc3BsYXk6bm9uZTsNCgloZWlnaHQ6MTNweDsNCgl3aWR0aDoyMDhweDsNCgl6LWluZGV4OjEwMzsNCgl0b3A6IDUwJTsNCglsZWZ0OiA1MCU7DQoJbWFyZ2luOiAtNnB4IDAgMCAtMTA0cHg7IC8qIC1oZWlnaHQvMiAwIDAgLXdpZHRoLzIgKi8NCn0NCg0KKiBodG1sICNUQl9sb2FkIHsgLyogaWU2IGhhY2sgKi8NCnBvc2l0aW9uOiBhYnNvbHV0ZTsNCm1hcmdpbi10b3A6IGV4cHJlc3Npb24oMCAtIHBhcnNlSW50KHRoaXMub2Zmc2V0SGVpZ2h0IC8gMikgKyAoVEJXaW5kb3dNYXJnaW4gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgKyAncHgnKTsNCn0NCg0KI1RCX0hpZGVTZWxlY3R7DQoJei1pbmRleDo5OTsNCglwb3NpdGlvbjpmaXhlZDsNCgl0b3A6IDA7DQoJbGVmdDogMDsNCgliYWNrZ3JvdW5kLWNvbG9yOiNmZmY7DQoJYm9yZGVyOm5vbmU7DQoJZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7DQoJLW1vei1vcGFjaXR5OiAwOw0KCW9wYWNpdHk6IDA7DQoJaGVpZ2h0OjEwMCU7DQoJd2lkdGg6MTAwJTsNCn0NCg0KKiBodG1sICNUQl9IaWRlU2VsZWN0IHsgLyogaWU2IGhhY2sgKi8NCiAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICBoZWlnaHQ6IGV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCA/IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0IDogZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgKyAncHgnKTsNCn0NCg0KI1RCX2lmcmFtZUNvbnRlbnR7DQoJY2xlYXI6Ym90aDsNCglib3JkZXI6bm9uZTsNCgltYXJnaW4tYm90dG9tOi0xcHg7DQoJbWFyZ2luLXRvcDoxcHg7DQoJX21hcmdpbi1ib3R0b206MXB4Ow0KfQ0KDQo=]]></data>
	</file>
	<file>
	  <filename>/templates/editgallery.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2pxdWVyeS9qcXVlcnkuanMiPjwvc2NyaXB0Pg0Key9saXRlcmFsfQ0KDQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KPGgzPnskcGFnZXRpdGxlfTwvaDM+DQo8L2Rpdj4NCnskZm9ybXN0YXJ0fXsqJGhpZGRlbip9DQoNCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZ2FsbGVyeXRpdGxlfTo8L3A+DQogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZ2FsbGVyeXRpdGxlfTwvcD4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2NvbW1lbnR9OjwvcD4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRnYWxsZXJ5Y29tbWVudH08L3A+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90ZW1wbGF0ZX06PC9wPg0KICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRlbXBsYXRlfTwvcD4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3RodW1ibmFpbHNpemV9OjwvcD4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0aHVtYm5haWxzaXplfTwvcD4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9eyRjYW5jZWx9PC9wPg0KPC9kaXY+DQoNCntpZiAkaXRlbWNvdW50ID4gMH0NCgk8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCQk8dGhlYWQ+DQoJCQk8dHI+DQoJCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJCQk8dGg+eyRpbWFnZX08L3RoPg0KCQkJCTx0aD57JHRpdGxlfTwvdGg+DQoJCQkJPHRoPnskY29tbWVudH08L3RoPg0KCQkJCTx0aD57JGZpbGVkYXRlfTwvdGg+DQoJCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+eyRhY3RpdmV9PC90aD4JCQkNCgkJCQk8dGggY2xhc3M9InBhZ2VpY29uIj57JGRlZmF1bHR9PC90aD4JCQkNCgkJCTwvdHI+DQoJCTwvdGhlYWQ+DQoJCTx0Ym9keT4NCgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQ0KCQl7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIiIGFzc2lnbj1yb3djbGFzc30NCgkJCTx0ciBjbGFzcz0ieyRyb3djbGFzc30iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc30nOyI+DQoJCQkJPHRkPjwvdGQ+DQoJCQkJPHRkPnskZW50cnktPnRodW1ifTwvdGQ+DQoJCQkJPHRkPnskZW50cnktPnRpdGxlfTwvdGQ+DQoJCQkJPHRkPnskZW50cnktPmNvbW1lbnR9PC90ZD4NCgkJCQk8dGQ+eyRlbnRyeS0+ZmlsZWRhdGV9PC90ZD4NCgkJCQk8dGQgY2xhc3M9InBhZ2Vwb3MiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+eyRlbnRyeS0+YWN0aXZlbGlua308L3RkPgkJCQ0KCQkJCTx0ZCBjbGFzcz0icGFnZXBvcyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj57JGVudHJ5LT5kZWZhdWx0bGlua308L3RkPgkJCQ0KCQkJPC90cj4NCgl7L2ZvcmVhY2h9DQoJCTwvdGJvZHk+DQoJPC90YWJsZT4NCg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4NCgkgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4NCgk8L2Rpdj4NCg0Ke2Vsc2V9DQoJPGg0Pnskbm9maWxlc3RleHR9PC9oND4NCnsvaWZ9DQoNCnskZm9ybWVuZH0NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPGgzPnskdGl0bGV9PC9oMz4KPC9kaXY+CnskZm9ybXN0YXJ0fQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdGVtcGxhdGVuYW1lfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0ZW1wbGF0ZW5hbWV9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90ZW1wbGF0ZX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGV9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskYXZhaWxhYmxldmFyaWFibGVzfTogPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlY29sbGFwc2UoJ3ZhcmlhYmxlc2luZm8nKTsgcmV0dXJuIGZhbHNlOyI+eyRhdmFpbGFibGV2YXJpYWJsZXNsaW5rfTwvYT48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJ2YXJpYWJsZXNpbmZvIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskYXZhaWxhYmxldmFyaWFibGVzbGlzdH08L3A+CjwvZGl2Pgo8L2Rpdj4KCgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfXskYXBwbHl9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90ZW1wbGF0ZWNzc306PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGVjc3N9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90ZW1wbGF0ZWpzfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0ZW1wbGF0ZWpzfTwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfXskYXBwbHl9PC9wPgo8L2Rpdj4KeyRmb3JtZW5kfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/jquery/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/jquery/jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS4zLjIKICogaHR0cDovL2pxdWVyeS5jb20vCiAqCiAqIENvcHlyaWdodCAoYykgMjAwOSBKb2huIFJlc2lnCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL0xpY2Vuc2UKICoKICogRGF0ZTogMjAwOS0wMi0xOSAxNzozNDoyMSAtMDUwMCAoVGh1LCAxOSBGZWIgMjAwOSkKICogUmV2aXNpb246IDYyNDYKICovCihmdW5jdGlvbigpe3ZhciBsPXRoaXMsZyx5PWwualF1ZXJ5LHA9bC4kLG89bC5qUXVlcnk9bC4kPWZ1bmN0aW9uKEUsRil7cmV0dXJuIG5ldyBvLmZuLmluaXQoRSxGKX0sRD0vXltePF0qKDwoLnxccykrPilbXj5dKiR8XiMoW1x3LV0rKSQvLGY9L14uW146I1xbXC4sXSokLztvLmZuPW8ucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKEUsSCl7RT1FfHxkb2N1bWVudDtpZihFLm5vZGVUeXBlKXt0aGlzWzBdPUU7dGhpcy5sZW5ndGg9MTt0aGlzLmNvbnRleHQ9RTtyZXR1cm4gdGhpc31pZih0eXBlb2YgRT09PSJzdHJpbmciKXt2YXIgRz1ELmV4ZWMoRSk7aWYoRyYmKEdbMV18fCFIKSl7aWYoR1sxXSl7RT1vLmNsZWFuKFtHWzFdXSxIKX1lbHNle3ZhciBJPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEdbM10pO2lmKEkmJkkuaWQhPUdbM10pe3JldHVybiBvKCkuZmluZChFKX12YXIgRj1vKEl8fFtdKTtGLmNvbnRleHQ9ZG9jdW1lbnQ7Ri5zZWxlY3Rvcj1FO3JldHVybiBGfX1lbHNle3JldHVybiBvKEgpLmZpbmQoRSl9fWVsc2V7aWYoby5pc0Z1bmN0aW9uKEUpKXtyZXR1cm4gbyhkb2N1bWVudCkucmVhZHkoRSl9fWlmKEUuc2VsZWN0b3ImJkUuY29udGV4dCl7dGhpcy5zZWxlY3Rvcj1FLnNlbGVjdG9yO3RoaXMuY29udGV4dD1FLmNvbnRleHR9cmV0dXJuIHRoaXMuc2V0QXJyYXkoby5pc0FycmF5KEUpP0U6by5tYWtlQXJyYXkoRSkpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuMy4yIixzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxnZXQ6ZnVuY3Rpb24oRSl7cmV0dXJuIEU9PT1nP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMpOnRoaXNbRV19LHB1c2hTdGFjazpmdW5jdGlvbihGLEgsRSl7dmFyIEc9byhGKTtHLnByZXZPYmplY3Q9dGhpcztHLmNvbnRleHQ9dGhpcy5jb250ZXh0O2lmKEg9PT0iZmluZCIpe0cuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK0V9ZWxzZXtpZihIKXtHLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK0grIigiK0UrIikifX1yZXR1cm4gR30sc2V0QXJyYXk6ZnVuY3Rpb24oRSl7dGhpcy5sZW5ndGg9MDtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLEUpO3JldHVybiB0aGlzfSxlYWNoOmZ1bmN0aW9uKEYsRSl7cmV0dXJuIG8uZWFjaCh0aGlzLEYsRSl9LGluZGV4OmZ1bmN0aW9uKEUpe3JldHVybiBvLmluQXJyYXkoRSYmRS5qcXVlcnk/RVswXTpFLHRoaXMpfSxhdHRyOmZ1bmN0aW9uKEYsSCxHKXt2YXIgRT1GO2lmKHR5cGVvZiBGPT09InN0cmluZyIpe2lmKEg9PT1nKXtyZXR1cm4gdGhpc1swXSYmb1tHfHwiYXR0ciJdKHRoaXNbMF0sRil9ZWxzZXtFPXt9O0VbRl09SH19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihJKXtmb3IoRiBpbiBFKXtvLmF0dHIoRz90aGlzLnN0eWxlOnRoaXMsRixvLnByb3AodGhpcyxFW0ZdLEcsSSxGKSl9fSl9LGNzczpmdW5jdGlvbihFLEYpe2lmKChFPT0id2lkdGgifHxFPT0iaGVpZ2h0IikmJnBhcnNlRmxvYXQoRik8MCl7Rj1nfXJldHVybiB0aGlzLmF0dHIoRSxGLCJjdXJDU1MiKX0sdGV4dDpmdW5jdGlvbihGKXtpZih0eXBlb2YgRiE9PSJvYmplY3QiJiZGIT1udWxsKXtyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoRikpfXZhciBFPSIiO28uZWFjaChGfHx0aGlzLGZ1bmN0aW9uKCl7by5lYWNoKHRoaXMuY2hpbGROb2RlcyxmdW5jdGlvbigpe2lmKHRoaXMubm9kZVR5cGUhPTgpe0UrPXRoaXMubm9kZVR5cGUhPTE/dGhpcy5ub2RlVmFsdWU6by5mbi50ZXh0KFt0aGlzXSl9fSl9KTtyZXR1cm4gRX0sd3JhcEFsbDpmdW5jdGlvbihFKXtpZih0aGlzWzBdKXt2YXIgRj1vKEUsdGhpc1swXS5vd25lckRvY3VtZW50KS5jbG9uZSgpO2lmKHRoaXNbMF0ucGFyZW50Tm9kZSl7Ri5pbnNlcnRCZWZvcmUodGhpc1swXSl9Ri5tYXAoZnVuY3Rpb24oKXt2YXIgRz10aGlzO3doaWxlKEcuZmlyc3RDaGlsZCl7Rz1HLmZpcnN0Q2hpbGR9cmV0dXJuIEd9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7byh0aGlzKS5jb250ZW50cygpLndyYXBBbGwoRSl9KX0sd3JhcDpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7byh0aGlzKS53cmFwQWxsKEUpfSl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKEUpe2lmKHRoaXMubm9kZVR5cGU9PTEpe3RoaXMuYXBwZW5kQ2hpbGQoRSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsdHJ1ZSxmdW5jdGlvbihFKXtpZih0aGlzLm5vZGVUeXBlPT0xKXt0aGlzLmluc2VydEJlZm9yZShFLHRoaXMuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihFKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsZnVuY3Rpb24oRSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShFLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fG8oW10pfSxwdXNoOltdLnB1c2gsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2UsZmluZDpmdW5jdGlvbihFKXtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBGPXRoaXMucHVzaFN0YWNrKFtdLCJmaW5kIixFKTtGLmxlbmd0aD0wO28uZmluZChFLHRoaXNbMF0sRik7cmV0dXJuIEZ9ZWxzZXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby51bmlxdWUoby5tYXAodGhpcyxmdW5jdGlvbihHKXtyZXR1cm4gby5maW5kKEUsRyl9KSksImZpbmQiLEUpfX0sY2xvbmU6ZnVuY3Rpb24oRyl7dmFyIEU9dGhpcy5tYXAoZnVuY3Rpb24oKXtpZighby5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmIW8uaXNYTUxEb2ModGhpcykpe3ZhciBJPXRoaXMub3V0ZXJIVE1MO2lmKCFJKXt2YXIgSj10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Si5hcHBlbmRDaGlsZCh0aGlzLmNsb25lTm9kZSh0cnVlKSk7ST1KLmlubmVySFRNTH1yZXR1cm4gby5jbGVhbihbSS5yZXBsYWNlKC8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csIiIpLnJlcGxhY2UoL15ccyovLCIiKV0pWzBdfWVsc2V7cmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRydWUpfX0pO2lmKEc9PT10cnVlKXt2YXIgSD10aGlzLmZpbmQoIioiKS5hbmRTZWxmKCksRj0wO0UuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZSE9PUhbRl0ubm9kZU5hbWUpe3JldHVybn12YXIgST1vLmRhdGEoSFtGXSwiZXZlbnRzIik7Zm9yKHZhciBLIGluIEkpe2Zvcih2YXIgSiBpbiBJW0tdKXtvLmV2ZW50LmFkZCh0aGlzLEssSVtLXVtKXSxJW0tdW0pdLmRhdGEpfX1GKyt9KX1yZXR1cm4gRX0sZmlsdGVyOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhvLmlzRnVuY3Rpb24oRSkmJm8uZ3JlcCh0aGlzLGZ1bmN0aW9uKEcsRil7cmV0dXJuIEUuY2FsbChHLEYpfSl8fG8ubXVsdGlGaWx0ZXIoRSxvLmdyZXAodGhpcyxmdW5jdGlvbihGKXtyZXR1cm4gRi5ub2RlVHlwZT09PTF9KSksImZpbHRlciIsRSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oRSl7dmFyIEc9by5leHByLm1hdGNoLlBPUy50ZXN0KEUpP28oRSk6bnVsbCxGPTA7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIEg9dGhpczt3aGlsZShIJiZILm93bmVyRG9jdW1lbnQpe2lmKEc/Ry5pbmRleChIKT4tMTpvKEgpLmlzKEUpKXtvLmRhdGEoSCwiY2xvc2VzdCIsRik7cmV0dXJuIEh9SD1ILnBhcmVudE5vZGU7RisrfX0pfSxub3Q6ZnVuY3Rpb24oRSl7aWYodHlwZW9mIEU9PT0ic3RyaW5nIil7aWYoZi50ZXN0KEUpKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5tdWx0aUZpbHRlcihFLHRoaXMsdHJ1ZSksIm5vdCIsRSl9ZWxzZXtFPW8ubXVsdGlGaWx0ZXIoRSx0aGlzKX19dmFyIEY9RS5sZW5ndGgmJkVbRS5sZW5ndGgtMV0hPT1nJiYhRS5ub2RlVHlwZTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gRj9vLmluQXJyYXkodGhpcyxFKTwwOnRoaXMhPUV9KX0sYWRkOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhvLnVuaXF1ZShvLm1lcmdlKHRoaXMuZ2V0KCksdHlwZW9mIEU9PT0ic3RyaW5nIj9vKEUpOm8ubWFrZUFycmF5KEUpKSkpfSxpczpmdW5jdGlvbihFKXtyZXR1cm4gISFFJiZvLm11bHRpRmlsdGVyKEUsdGhpcykubGVuZ3RoPjB9LGhhc0NsYXNzOmZ1bmN0aW9uKEUpe3JldHVybiAhIUUmJnRoaXMuaXMoIi4iK0UpfSx2YWw6ZnVuY3Rpb24oSyl7aWYoSz09PWcpe3ZhciBFPXRoaXNbMF07aWYoRSl7aWYoby5ub2RlTmFtZShFLCJvcHRpb24iKSl7cmV0dXJuKEUuYXR0cmlidXRlcy52YWx1ZXx8e30pLnNwZWNpZmllZD9FLnZhbHVlOkUudGV4dH1pZihvLm5vZGVOYW1lKEUsInNlbGVjdCIpKXt2YXIgST1FLnNlbGVjdGVkSW5kZXgsTD1bXSxNPUUub3B0aW9ucyxIPUUudHlwZT09InNlbGVjdC1vbmUiO2lmKEk8MCl7cmV0dXJuIG51bGx9Zm9yKHZhciBGPUg/STowLEo9SD9JKzE6TS5sZW5ndGg7RjxKO0YrKyl7dmFyIEc9TVtGXTtpZihHLnNlbGVjdGVkKXtLPW8oRykudmFsKCk7aWYoSCl7cmV0dXJuIEt9TC5wdXNoKEspfX1yZXR1cm4gTH1yZXR1cm4oRS52YWx1ZXx8IiIpLnJlcGxhY2UoL1xyL2csIiIpfXJldHVybiBnfWlmKHR5cGVvZiBLPT09Im51bWJlciIpe0srPSIifXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVUeXBlIT0xKXtyZXR1cm59aWYoby5pc0FycmF5KEspJiYvcmFkaW98Y2hlY2tib3gvLnRlc3QodGhpcy50eXBlKSl7dGhpcy5jaGVja2VkPShvLmluQXJyYXkodGhpcy52YWx1ZSxLKT49MHx8by5pbkFycmF5KHRoaXMubmFtZSxLKT49MCl9ZWxzZXtpZihvLm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2YXIgTj1vLm1ha2VBcnJheShLKTtvKCJvcHRpb24iLHRoaXMpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPShvLmluQXJyYXkodGhpcy52YWx1ZSxOKT49MHx8by5pbkFycmF5KHRoaXMudGV4dCxOKT49MCl9KTtpZighTi5sZW5ndGgpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX19ZWxzZXt0aGlzLnZhbHVlPUt9fX0pfSxodG1sOmZ1bmN0aW9uKEUpe3JldHVybiBFPT09Zz8odGhpc1swXT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKC8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csIiIpOm51bGwpOnRoaXMuZW1wdHkoKS5hcHBlbmQoRSl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmFmdGVyKEUpLnJlbW92ZSgpfSxlcTpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5zbGljZShFLCtFKzEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubWFwKHRoaXMsZnVuY3Rpb24oRyxGKXtyZXR1cm4gRS5jYWxsKEcsRixHKX0pKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfSxkb21NYW5pcDpmdW5jdGlvbihKLE0sTCl7aWYodGhpc1swXSl7dmFyIEk9KHRoaXNbMF0ub3duZXJEb2N1bWVudHx8dGhpc1swXSkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLEY9by5jbGVhbihKLCh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fHRoaXNbMF0pLEkpLEg9SS5maXJzdENoaWxkO2lmKEgpe2Zvcih2YXIgRz0wLEU9dGhpcy5sZW5ndGg7RzxFO0crKyl7TC5jYWxsKEsodGhpc1tHXSxIKSx0aGlzLmxlbmd0aD4xfHxHPjA/SS5jbG9uZU5vZGUodHJ1ZSk6SSl9fWlmKEYpe28uZWFjaChGLHopfX1yZXR1cm4gdGhpcztmdW5jdGlvbiBLKE4sTyl7cmV0dXJuIE0mJm8ubm9kZU5hbWUoTiwidGFibGUiKSYmby5ub2RlTmFtZShPLCJ0ciIpPyhOLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxOLmFwcGVuZENoaWxkKE4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKSk6Tn19fTtvLmZuLmluaXQucHJvdG90eXBlPW8uZm47ZnVuY3Rpb24geihFLEYpe2lmKEYuc3JjKXtvLmFqYXgoe3VybDpGLnNyYyxhc3luYzpmYWxzZSxkYXRhVHlwZToic2NyaXB0In0pfWVsc2V7by5nbG9iYWxFdmFsKEYudGV4dHx8Ri50ZXh0Q29udGVudHx8Ri5pbm5lckhUTUx8fCIiKX1pZihGLnBhcmVudE5vZGUpe0YucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChGKX19ZnVuY3Rpb24gZSgpe3JldHVybiArbmV3IERhdGV9by5leHRlbmQ9by5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgSj1hcmd1bWVudHNbMF18fHt9LEg9MSxJPWFyZ3VtZW50cy5sZW5ndGgsRT1mYWxzZSxHO2lmKHR5cGVvZiBKPT09ImJvb2xlYW4iKXtFPUo7Sj1hcmd1bWVudHNbMV18fHt9O0g9Mn1pZih0eXBlb2YgSiE9PSJvYmplY3QiJiYhby5pc0Z1bmN0aW9uKEopKXtKPXt9fWlmKEk9PUgpe0o9dGhpczstLUh9Zm9yKDtIPEk7SCsrKXtpZigoRz1hcmd1bWVudHNbSF0pIT1udWxsKXtmb3IodmFyIEYgaW4gRyl7dmFyIEs9SltGXSxMPUdbRl07aWYoSj09PUwpe2NvbnRpbnVlfWlmKEUmJkwmJnR5cGVvZiBMPT09Im9iamVjdCImJiFMLm5vZGVUeXBlKXtKW0ZdPW8uZXh0ZW5kKEUsS3x8KEwubGVuZ3RoIT1udWxsP1tdOnt9KSxMKX1lbHNle2lmKEwhPT1nKXtKW0ZdPUx9fX19fXJldHVybiBKfTt2YXIgYj0vei0/aW5kZXh8Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaSxxPWRvY3VtZW50LmRlZmF1bHRWaWV3fHx7fSxzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7by5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oRSl7bC4kPXA7aWYoRSl7bC5qUXVlcnk9eX1yZXR1cm4gb30saXNGdW5jdGlvbjpmdW5jdGlvbihFKXtyZXR1cm4gcy5jYWxsKEUpPT09IltvYmplY3QgRnVuY3Rpb25dIn0saXNBcnJheTpmdW5jdGlvbihFKXtyZXR1cm4gcy5jYWxsKEUpPT09IltvYmplY3QgQXJyYXldIn0saXNYTUxEb2M6ZnVuY3Rpb24oRSl7cmV0dXJuIEUubm9kZVR5cGU9PT05JiZFLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9PSJIVE1MInx8ISFFLm93bmVyRG9jdW1lbnQmJm8uaXNYTUxEb2MoRS5vd25lckRvY3VtZW50KX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihHKXtpZihHJiYvXFMvLnRlc3QoRykpe3ZhciBGPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxFPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO0UudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtpZihvLnN1cHBvcnQuc2NyaXB0RXZhbCl7RS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShHKSl9ZWxzZXtFLnRleHQ9R31GLmluc2VydEJlZm9yZShFLEYuZmlyc3RDaGlsZCk7Ri5yZW1vdmVDaGlsZChFKX19LG5vZGVOYW1lOmZ1bmN0aW9uKEYsRSl7cmV0dXJuIEYubm9kZU5hbWUmJkYubm9kZU5hbWUudG9VcHBlckNhc2UoKT09RS50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKEcsSyxGKXt2YXIgRSxIPTAsST1HLmxlbmd0aDtpZihGKXtpZihJPT09Zyl7Zm9yKEUgaW4gRyl7aWYoSy5hcHBseShHW0VdLEYpPT09ZmFsc2Upe2JyZWFrfX19ZWxzZXtmb3IoO0g8STspe2lmKEsuYXBwbHkoR1tIKytdLEYpPT09ZmFsc2Upe2JyZWFrfX19fWVsc2V7aWYoST09PWcpe2ZvcihFIGluIEcpe2lmKEsuY2FsbChHW0VdLEUsR1tFXSk9PT1mYWxzZSl7YnJlYWt9fX1lbHNle2Zvcih2YXIgSj1HWzBdO0g8SSYmSy5jYWxsKEosSCxKKSE9PWZhbHNlO0o9R1srK0hdKXt9fX1yZXR1cm4gR30scHJvcDpmdW5jdGlvbihILEksRyxGLEUpe2lmKG8uaXNGdW5jdGlvbihJKSl7ST1JLmNhbGwoSCxGKX1yZXR1cm4gdHlwZW9mIEk9PT0ibnVtYmVyIiYmRz09ImN1ckNTUyImJiFiLnRlc3QoRSk/SSsicHgiOkl9LGNsYXNzTmFtZTp7YWRkOmZ1bmN0aW9uKEUsRil7by5lYWNoKChGfHwiIikuc3BsaXQoL1xzKy8pLGZ1bmN0aW9uKEcsSCl7aWYoRS5ub2RlVHlwZT09MSYmIW8uY2xhc3NOYW1lLmhhcyhFLmNsYXNzTmFtZSxIKSl7RS5jbGFzc05hbWUrPShFLmNsYXNzTmFtZT8iICI6IiIpK0h9fSl9LHJlbW92ZTpmdW5jdGlvbihFLEYpe2lmKEUubm9kZVR5cGU9PTEpe0UuY2xhc3NOYW1lPUYhPT1nP28uZ3JlcChFLmNsYXNzTmFtZS5zcGxpdCgvXHMrLyksZnVuY3Rpb24oRyl7cmV0dXJuICFvLmNsYXNzTmFtZS5oYXMoRixHKX0pLmpvaW4oIiAiKToiIn19LGhhczpmdW5jdGlvbihGLEUpe3JldHVybiBGJiZvLmluQXJyYXkoRSwoRi5jbGFzc05hbWV8fEYpLnRvU3RyaW5nKCkuc3BsaXQoL1xzKy8pKT4tMX19LHN3YXA6ZnVuY3Rpb24oSCxHLEkpe3ZhciBFPXt9O2Zvcih2YXIgRiBpbiBHKXtFW0ZdPUguc3R5bGVbRl07SC5zdHlsZVtGXT1HW0ZdfUkuY2FsbChIKTtmb3IodmFyIEYgaW4gRyl7SC5zdHlsZVtGXT1FW0ZdfX0sY3NzOmZ1bmN0aW9uKEgsRixKLEUpe2lmKEY9PSJ3aWR0aCJ8fEY9PSJoZWlnaHQiKXt2YXIgTCxHPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxLPUY9PSJ3aWR0aCI/WyJMZWZ0IiwiUmlnaHQiXTpbIlRvcCIsIkJvdHRvbSJdO2Z1bmN0aW9uIEkoKXtMPUY9PSJ3aWR0aCI/SC5vZmZzZXRXaWR0aDpILm9mZnNldEhlaWdodDtpZihFPT09ImJvcmRlciIpe3JldHVybn1vLmVhY2goSyxmdW5jdGlvbigpe2lmKCFFKXtMLT1wYXJzZUZsb2F0KG8uY3VyQ1NTKEgsInBhZGRpbmciK3RoaXMsdHJ1ZSkpfHwwfWlmKEU9PT0ibWFyZ2luIil7TCs9cGFyc2VGbG9hdChvLmN1ckNTUyhILCJtYXJnaW4iK3RoaXMsdHJ1ZSkpfHwwfWVsc2V7TC09cGFyc2VGbG9hdChvLmN1ckNTUyhILCJib3JkZXIiK3RoaXMrIldpZHRoIix0cnVlKSl8fDB9fSl9aWYoSC5vZmZzZXRXaWR0aCE9PTApe0koKX1lbHNle28uc3dhcChILEcsSSl9cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5yb3VuZChMKSl9cmV0dXJuIG8uY3VyQ1NTKEgsRixKKX0sY3VyQ1NTOmZ1bmN0aW9uKEksRixHKXt2YXIgTCxFPUkuc3R5bGU7aWYoRj09Im9wYWNpdHkiJiYhby5zdXBwb3J0Lm9wYWNpdHkpe0w9by5hdHRyKEUsIm9wYWNpdHkiKTtyZXR1cm4gTD09IiI/IjEiOkx9aWYoRi5tYXRjaCgvZmxvYXQvaSkpe0Y9d31pZighRyYmRSYmRVtGXSl7TD1FW0ZdfWVsc2V7aWYocS5nZXRDb21wdXRlZFN0eWxlKXtpZihGLm1hdGNoKC9mbG9hdC9pKSl7Rj0iZmxvYXQifUY9Ri5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnRvTG93ZXJDYXNlKCk7dmFyIE09cS5nZXRDb21wdXRlZFN0eWxlKEksbnVsbCk7aWYoTSl7TD1NLmdldFByb3BlcnR5VmFsdWUoRil9aWYoRj09Im9wYWNpdHkiJiZMPT0iIil7TD0iMSJ9fWVsc2V7aWYoSS5jdXJyZW50U3R5bGUpe3ZhciBKPUYucmVwbGFjZSgvXC0oXHcpL2csZnVuY3Rpb24oTixPKXtyZXR1cm4gTy50b1VwcGVyQ2FzZSgpfSk7TD1JLmN1cnJlbnRTdHlsZVtGXXx8SS5jdXJyZW50U3R5bGVbSl07aWYoIS9eXGQrKHB4KT8kL2kudGVzdChMKSYmL15cZC8udGVzdChMKSl7dmFyIEg9RS5sZWZ0LEs9SS5ydW50aW1lU3R5bGUubGVmdDtJLnJ1bnRpbWVTdHlsZS5sZWZ0PUkuY3VycmVudFN0eWxlLmxlZnQ7RS5sZWZ0PUx8fDA7TD1FLnBpeGVsTGVmdCsicHgiO0UubGVmdD1IO0kucnVudGltZVN0eWxlLmxlZnQ9S319fX1yZXR1cm4gTH0sY2xlYW46ZnVuY3Rpb24oRixLLEkpe0s9S3x8ZG9jdW1lbnQ7aWYodHlwZW9mIEsuY3JlYXRlRWxlbWVudD09PSJ1bmRlZmluZWQiKXtLPUsub3duZXJEb2N1bWVudHx8S1swXSYmS1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudH1pZighSSYmRi5sZW5ndGg9PT0xJiZ0eXBlb2YgRlswXT09PSJzdHJpbmciKXt2YXIgSD0vXjwoXHcrKVxzKlwvPz4kLy5leGVjKEZbMF0pO2lmKEgpe3JldHVybltLLmNyZWF0ZUVsZW1lbnQoSFsxXSldfX12YXIgRz1bXSxFPVtdLEw9Sy5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmVhY2goRixmdW5jdGlvbihQLFMpe2lmKHR5cGVvZiBTPT09Im51bWJlciIpe1MrPSIifWlmKCFTKXtyZXR1cm59aWYodHlwZW9mIFM9PT0ic3RyaW5nIil7Uz1TLnJlcGxhY2UoLyg8KFx3KylbXj5dKj8pXC8+L2csZnVuY3Rpb24oVSxWLFQpe3JldHVybiBULm1hdGNoKC9eKGFiYnJ8YnJ8Y29sfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW18aHJ8YXJlYXxlbWJlZCkkL2kpP1U6VisiPjwvIitUKyI+In0pO3ZhciBPPVMucmVwbGFjZSgvXlxzKy8sIiIpLnN1YnN0cmluZygwLDEwKS50b0xvd2VyQ2FzZSgpO3ZhciBRPSFPLmluZGV4T2YoIjxvcHQiKSYmWzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXXx8IU8uaW5kZXhPZigiPGxlZyIpJiZbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il18fE8ubWF0Y2goL148KHRoZWFkfHRib2R5fHRmb290fGNvbGd8Y2FwKS8pJiZbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il18fCFPLmluZGV4T2YoIjx0ciIpJiZbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il18fCghTy5pbmRleE9mKCI8dGQiKXx8IU8uaW5kZXhPZigiPHRoIikpJiZbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il18fCFPLmluZGV4T2YoIjxjb2wiKSYmWzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdfHwhby5zdXBwb3J0Lmh0bWxTZXJpYWxpemUmJlsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdfHxbMCwiIiwiIl07TC5pbm5lckhUTUw9UVsxXStTK1FbMl07d2hpbGUoUVswXS0tKXtMPUwubGFzdENoaWxkfWlmKCFvLnN1cHBvcnQudGJvZHkpe3ZhciBSPS88dGJvZHkvaS50ZXN0KFMpLE49IU8uaW5kZXhPZigiPHRhYmxlIikmJiFSP0wuZmlyc3RDaGlsZCYmTC5maXJzdENoaWxkLmNoaWxkTm9kZXM6UVsxXT09Ijx0YWJsZT4iJiYhUj9MLmNoaWxkTm9kZXM6W107Zm9yKHZhciBNPU4ubGVuZ3RoLTE7TT49MDstLU0pe2lmKG8ubm9kZU5hbWUoTltNXSwidGJvZHkiKSYmIU5bTV0uY2hpbGROb2Rlcy5sZW5ndGgpe05bTV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChOW01dKX19fWlmKCFvLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJi9eXHMvLnRlc3QoUykpe0wuaW5zZXJ0QmVmb3JlKEsuY3JlYXRlVGV4dE5vZGUoUy5tYXRjaCgvXlxzKi8pWzBdKSxMLmZpcnN0Q2hpbGQpfVM9by5tYWtlQXJyYXkoTC5jaGlsZE5vZGVzKX1pZihTLm5vZGVUeXBlKXtHLnB1c2goUyl9ZWxzZXtHPW8ubWVyZ2UoRyxTKX19KTtpZihJKXtmb3IodmFyIEo9MDtHW0pdO0orKyl7aWYoby5ub2RlTmFtZShHW0pdLCJzY3JpcHQiKSYmKCFHW0pdLnR5cGV8fEdbSl0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKXtFLnB1c2goR1tKXS5wYXJlbnROb2RlP0dbSl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChHW0pdKTpHW0pdKX1lbHNle2lmKEdbSl0ubm9kZVR5cGU9PT0xKXtHLnNwbGljZS5hcHBseShHLFtKKzEsMF0uY29uY2F0KG8ubWFrZUFycmF5KEdbSl0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSkpfUkuYXBwZW5kQ2hpbGQoR1tKXSl9fXJldHVybiBFfXJldHVybiBHfSxhdHRyOmZ1bmN0aW9uKEosRyxLKXtpZighSnx8Si5ub2RlVHlwZT09M3x8Si5ub2RlVHlwZT09OCl7cmV0dXJuIGd9dmFyIEg9IW8uaXNYTUxEb2MoSiksTD1LIT09ZztHPUgmJm8ucHJvcHNbR118fEc7aWYoSi50YWdOYW1lKXt2YXIgRj0vaHJlZnxzcmN8c3R5bGUvLnRlc3QoRyk7aWYoRz09InNlbGVjdGVkIiYmSi5wYXJlbnROb2RlKXtKLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleH1pZihHIGluIEomJkgmJiFGKXtpZihMKXtpZihHPT0idHlwZSImJm8ubm9kZU5hbWUoSiwiaW5wdXQiKSYmSi5wYXJlbnROb2RlKXt0aHJvdyJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQifUpbR109S31pZihvLm5vZGVOYW1lKEosImZvcm0iKSYmSi5nZXRBdHRyaWJ1dGVOb2RlKEcpKXtyZXR1cm4gSi5nZXRBdHRyaWJ1dGVOb2RlKEcpLm5vZGVWYWx1ZX1pZihHPT0idGFiSW5kZXgiKXt2YXIgST1KLmdldEF0dHJpYnV0ZU5vZGUoInRhYkluZGV4Iik7cmV0dXJuIEkmJkkuc3BlY2lmaWVkP0kudmFsdWU6Si5ub2RlTmFtZS5tYXRjaCgvKGJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKS9pKT8wOkoubm9kZU5hbWUubWF0Y2goL14oYXxhcmVhKSQvaSkmJkouaHJlZj8wOmd9cmV0dXJuIEpbR119aWYoIW8uc3VwcG9ydC5zdHlsZSYmSCYmRz09InN0eWxlIil7cmV0dXJuIG8uYXR0cihKLnN0eWxlLCJjc3NUZXh0IixLKX1pZihMKXtKLnNldEF0dHJpYnV0ZShHLCIiK0spfXZhciBFPSFvLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQmJkgmJkY/Si5nZXRBdHRyaWJ1dGUoRywyKTpKLmdldEF0dHJpYnV0ZShHKTtyZXR1cm4gRT09PW51bGw/ZzpFfWlmKCFvLnN1cHBvcnQub3BhY2l0eSYmRz09Im9wYWNpdHkiKXtpZihMKXtKLnpvb209MTtKLmZpbHRlcj0oSi5maWx0ZXJ8fCIiKS5yZXBsYWNlKC9hbHBoYVwoW14pXSpcKS8sIiIpKyhwYXJzZUludChLKSsiIj09Ik5hTiI/IiI6ImFscGhhKG9wYWNpdHk9IitLKjEwMCsiKSIpfXJldHVybiBKLmZpbHRlciYmSi5maWx0ZXIuaW5kZXhPZigib3BhY2l0eT0iKT49MD8ocGFyc2VGbG9hdChKLmZpbHRlci5tYXRjaCgvb3BhY2l0eT0oW14pXSopLylbMV0pLzEwMCkrIiI6IiJ9Rz1HLnJlcGxhY2UoLy0oW2Etel0pL2lnLGZ1bmN0aW9uKE0sTil7cmV0dXJuIE4udG9VcHBlckNhc2UoKX0pO2lmKEwpe0pbR109S31yZXR1cm4gSltHXX0sdHJpbTpmdW5jdGlvbihFKXtyZXR1cm4oRXx8IiIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKEcpe3ZhciBFPVtdO2lmKEchPW51bGwpe3ZhciBGPUcubGVuZ3RoO2lmKEY9PW51bGx8fHR5cGVvZiBHPT09InN0cmluZyJ8fG8uaXNGdW5jdGlvbihHKXx8Ry5zZXRJbnRlcnZhbCl7RVswXT1HfWVsc2V7d2hpbGUoRil7RVstLUZdPUdbRl19fX1yZXR1cm4gRX0saW5BcnJheTpmdW5jdGlvbihHLEgpe2Zvcih2YXIgRT0wLEY9SC5sZW5ndGg7RTxGO0UrKyl7aWYoSFtFXT09PUcpe3JldHVybiBFfX1yZXR1cm4gLTF9LG1lcmdlOmZ1bmN0aW9uKEgsRSl7dmFyIEY9MCxHLEk9SC5sZW5ndGg7aWYoIW8uc3VwcG9ydC5nZXRBbGwpe3doaWxlKChHPUVbRisrXSkhPW51bGwpe2lmKEcubm9kZVR5cGUhPTgpe0hbSSsrXT1HfX19ZWxzZXt3aGlsZSgoRz1FW0YrK10pIT1udWxsKXtIW0krK109R319cmV0dXJuIEh9LHVuaXF1ZTpmdW5jdGlvbihLKXt2YXIgRj1bXSxFPXt9O3RyeXtmb3IodmFyIEc9MCxIPUsubGVuZ3RoO0c8SDtHKyspe3ZhciBKPW8uZGF0YShLW0ddKTtpZighRVtKXSl7RVtKXT10cnVlO0YucHVzaChLW0ddKX19fWNhdGNoKEkpe0Y9S31yZXR1cm4gRn0sZ3JlcDpmdW5jdGlvbihGLEosRSl7dmFyIEc9W107Zm9yKHZhciBIPTAsST1GLmxlbmd0aDtIPEk7SCsrKXtpZighRSE9IUooRltIXSxIKSl7Ry5wdXNoKEZbSF0pfX1yZXR1cm4gR30sbWFwOmZ1bmN0aW9uKEUsSil7dmFyIEY9W107Zm9yKHZhciBHPTAsSD1FLmxlbmd0aDtHPEg7RysrKXt2YXIgST1KKEVbR10sRyk7aWYoSSE9bnVsbCl7RltGLmxlbmd0aF09SX19cmV0dXJuIEYuY29uY2F0LmFwcGx5KFtdLEYpfX0pO3ZhciBDPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtvLmJyb3dzZXI9e3ZlcnNpb246KEMubWF0Y2goLy4rKD86cnZ8aXR8cmF8aWUpW1wvOiBdKFtcZC5dKykvKXx8WzAsIjAiXSlbMV0sc2FmYXJpOi93ZWJraXQvLnRlc3QoQyksb3BlcmE6L29wZXJhLy50ZXN0KEMpLG1zaWU6L21zaWUvLnRlc3QoQykmJiEvb3BlcmEvLnRlc3QoQyksbW96aWxsYTovbW96aWxsYS8udGVzdChDKSYmIS8oY29tcGF0aWJsZXx3ZWJraXQpLy50ZXN0KEMpfTtvLmVhY2goe3BhcmVudDpmdW5jdGlvbihFKXtyZXR1cm4gRS5wYXJlbnROb2RlfSxwYXJlbnRzOmZ1bmN0aW9uKEUpe3JldHVybiBvLmRpcihFLCJwYXJlbnROb2RlIil9LG5leHQ6ZnVuY3Rpb24oRSl7cmV0dXJuIG8ubnRoKEUsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihFKXtyZXR1cm4gby5udGgoRSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihFKXtyZXR1cm4gby5kaXIoRSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihFKXtyZXR1cm4gby5kaXIoRSwicHJldmlvdXNTaWJsaW5nIil9LHNpYmxpbmdzOmZ1bmN0aW9uKEUpe3JldHVybiBvLnNpYmxpbmcoRS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsRSl9LGNoaWxkcmVuOmZ1bmN0aW9uKEUpe3JldHVybiBvLnNpYmxpbmcoRS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oRSl7cmV0dXJuIG8ubm9kZU5hbWUoRSwiaWZyYW1lIik/RS5jb250ZW50RG9jdW1lbnR8fEUuY29udGVudFdpbmRvdy5kb2N1bWVudDpvLm1ha2VBcnJheShFLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oRSxGKXtvLmZuW0VdPWZ1bmN0aW9uKEcpe3ZhciBIPW8ubWFwKHRoaXMsRik7aWYoRyYmdHlwZW9mIEc9PSJzdHJpbmciKXtIPW8ubXVsdGlGaWx0ZXIoRyxIKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soby51bmlxdWUoSCksRSxHKX19KTtvLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oRyl7dmFyIEo9W10sTD1vKEcpO2Zvcih2YXIgSz0wLEg9TC5sZW5ndGg7SzxIO0srKyl7dmFyIEk9KEs+MD90aGlzLmNsb25lKHRydWUpOnRoaXMpLmdldCgpO28uZm5bRl0uYXBwbHkobyhMW0tdKSxJKTtKPUouY29uY2F0KEkpfXJldHVybiB0aGlzLnB1c2hTdGFjayhKLEUsRyl9fSk7by5lYWNoKHtyZW1vdmVBdHRyOmZ1bmN0aW9uKEUpe28uYXR0cih0aGlzLEUsIiIpO2lmKHRoaXMubm9kZVR5cGU9PTEpe3RoaXMucmVtb3ZlQXR0cmlidXRlKEUpfX0sYWRkQ2xhc3M6ZnVuY3Rpb24oRSl7by5jbGFzc05hbWUuYWRkKHRoaXMsRSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEUpe28uY2xhc3NOYW1lLnJlbW92ZSh0aGlzLEUpfSx0b2dnbGVDbGFzczpmdW5jdGlvbihGLEUpe2lmKHR5cGVvZiBFIT09ImJvb2xlYW4iKXtFPSFvLmNsYXNzTmFtZS5oYXModGhpcyxGKX1vLmNsYXNzTmFtZVtFPyJhZGQiOiJyZW1vdmUiXSh0aGlzLEYpfSxyZW1vdmU6ZnVuY3Rpb24oRSl7aWYoIUV8fG8uZmlsdGVyKEUsW3RoaXNdKS5sZW5ndGgpe28oIioiLHRoaXMpLmFkZChbdGhpc10pLmVhY2goZnVuY3Rpb24oKXtvLmV2ZW50LnJlbW92ZSh0aGlzKTtvLnJlbW92ZURhdGEodGhpcyl9KTtpZih0aGlzLnBhcmVudE5vZGUpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX19fSxlbXB0eTpmdW5jdGlvbigpe28odGhpcykuY2hpbGRyZW4oKS5yZW1vdmUoKTt3aGlsZSh0aGlzLmZpcnN0Q2hpbGQpe3RoaXMucmVtb3ZlQ2hpbGQodGhpcy5maXJzdENoaWxkKX19fSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEYsYXJndW1lbnRzKX19KTtmdW5jdGlvbiBqKEUsRil7cmV0dXJuIEVbMF0mJnBhcnNlSW50KG8uY3VyQ1NTKEVbMF0sRix0cnVlKSwxMCl8fDB9dmFyIGg9ImpRdWVyeSIrZSgpLHY9MCxBPXt9O28uZXh0ZW5kKHtjYWNoZTp7fSxkYXRhOmZ1bmN0aW9uKEYsRSxHKXtGPUY9PWw/QTpGO3ZhciBIPUZbaF07aWYoIUgpe0g9RltoXT0rK3Z9aWYoRSYmIW8uY2FjaGVbSF0pe28uY2FjaGVbSF09e319aWYoRyE9PWcpe28uY2FjaGVbSF1bRV09R31yZXR1cm4gRT9vLmNhY2hlW0hdW0VdOkh9LHJlbW92ZURhdGE6ZnVuY3Rpb24oRixFKXtGPUY9PWw/QTpGO3ZhciBIPUZbaF07aWYoRSl7aWYoby5jYWNoZVtIXSl7ZGVsZXRlIG8uY2FjaGVbSF1bRV07RT0iIjtmb3IoRSBpbiBvLmNhY2hlW0hdKXticmVha31pZighRSl7by5yZW1vdmVEYXRhKEYpfX19ZWxzZXt0cnl7ZGVsZXRlIEZbaF19Y2F0Y2goRyl7aWYoRi5yZW1vdmVBdHRyaWJ1dGUpe0YucmVtb3ZlQXR0cmlidXRlKGgpfX1kZWxldGUgby5jYWNoZVtIXX19LHF1ZXVlOmZ1bmN0aW9uKEYsRSxIKXtpZihGKXtFPShFfHwiZngiKSsicXVldWUiO3ZhciBHPW8uZGF0YShGLEUpO2lmKCFHfHxvLmlzQXJyYXkoSCkpe0c9by5kYXRhKEYsRSxvLm1ha2VBcnJheShIKSl9ZWxzZXtpZihIKXtHLnB1c2goSCl9fX1yZXR1cm4gR30sZGVxdWV1ZTpmdW5jdGlvbihILEcpe3ZhciBFPW8ucXVldWUoSCxHKSxGPUUuc2hpZnQoKTtpZighR3x8Rz09PSJmeCIpe0Y9RVswXX1pZihGIT09Zyl7Ri5jYWxsKEgpfX19KTtvLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihFLEcpe3ZhciBIPUUuc3BsaXQoIi4iKTtIWzFdPUhbMV0/Ii4iK0hbMV06IiI7aWYoRz09PWcpe3ZhciBGPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK0hbMV0rIiEiLFtIWzBdXSk7aWYoRj09PWcmJnRoaXMubGVuZ3RoKXtGPW8uZGF0YSh0aGlzWzBdLEUpfXJldHVybiBGPT09ZyYmSFsxXT90aGlzLmRhdGEoSFswXSk6Rn1lbHNle3JldHVybiB0aGlzLnRyaWdnZXIoInNldERhdGEiK0hbMV0rIiEiLFtIWzBdLEddKS5lYWNoKGZ1bmN0aW9uKCl7by5kYXRhKHRoaXMsRSxHKX0pfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5yZW1vdmVEYXRhKHRoaXMsRSl9KX0scXVldWU6ZnVuY3Rpb24oRSxGKXtpZih0eXBlb2YgRSE9PSJzdHJpbmciKXtGPUU7RT0iZngifWlmKEY9PT1nKXtyZXR1cm4gby5xdWV1ZSh0aGlzWzBdLEUpfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgRz1vLnF1ZXVlKHRoaXMsRSxGKTtpZihFPT0iZngiJiZHLmxlbmd0aD09MSl7R1swXS5jYWxsKHRoaXMpfX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtvLmRlcXVldWUodGhpcyxFKX0pfX0pOwovKgogKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSAtIHYwLjkuMwogKiAgQ29weXJpZ2h0IDIwMDksIFRoZSBEb2pvIEZvdW5kYXRpb24KICogIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5kIEdQTCBMaWNlbnNlcy4KICogIE1vcmUgaW5mb3JtYXRpb246IGh0dHA6Ly9zaXp6bGVqcy5jb20vCiAqLwooZnVuY3Rpb24oKXt2YXIgUj0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXltcXV0qXF18WyciXVteJyJdKlsnIl18W15bXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/L2csTD0wLEg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgRj1mdW5jdGlvbihZLFUsYWIsYWMpe2FiPWFifHxbXTtVPVV8fGRvY3VtZW50O2lmKFUubm9kZVR5cGUhPT0xJiZVLm5vZGVUeXBlIT09OSl7cmV0dXJuW119aWYoIVl8fHR5cGVvZiBZIT09InN0cmluZyIpe3JldHVybiBhYn12YXIgWj1bXSxXLGFmLGFpLFQsYWQsVixYPXRydWU7Ui5sYXN0SW5kZXg9MDt3aGlsZSgoVz1SLmV4ZWMoWSkpIT09bnVsbCl7Wi5wdXNoKFdbMV0pO2lmKFdbMl0pe1Y9UmVnRXhwLnJpZ2h0Q29udGV4dDticmVha319aWYoWi5sZW5ndGg+MSYmTS5leGVjKFkpKXtpZihaLmxlbmd0aD09PTImJkkucmVsYXRpdmVbWlswXV0pe2FmPUooWlswXStaWzFdLFUpfWVsc2V7YWY9SS5yZWxhdGl2ZVtaWzBdXT9bVV06RihaLnNoaWZ0KCksVSk7d2hpbGUoWi5sZW5ndGgpe1k9Wi5zaGlmdCgpO2lmKEkucmVsYXRpdmVbWV0pe1krPVouc2hpZnQoKX1hZj1KKFksYWYpfX19ZWxzZXt2YXIgYWU9YWM/e2V4cHI6Wi5wb3AoKSxzZXQ6RShhYyl9OkYuZmluZChaLnBvcCgpLFoubGVuZ3RoPT09MSYmVS5wYXJlbnROb2RlP1UucGFyZW50Tm9kZTpVLFEoVSkpO2FmPUYuZmlsdGVyKGFlLmV4cHIsYWUuc2V0KTtpZihaLmxlbmd0aD4wKXthaT1FKGFmKX1lbHNle1g9ZmFsc2V9d2hpbGUoWi5sZW5ndGgpe3ZhciBhaD1aLnBvcCgpLGFnPWFoO2lmKCFJLnJlbGF0aXZlW2FoXSl7YWg9IiJ9ZWxzZXthZz1aLnBvcCgpfWlmKGFnPT1udWxsKXthZz1VfUkucmVsYXRpdmVbYWhdKGFpLGFnLFEoVSkpfX1pZighYWkpe2FpPWFmfWlmKCFhaSl7dGhyb3ciU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIisoYWh8fFkpfWlmKEguY2FsbChhaSk9PT0iW29iamVjdCBBcnJheV0iKXtpZighWCl7YWIucHVzaC5hcHBseShhYixhaSl9ZWxzZXtpZihVLm5vZGVUeXBlPT09MSl7Zm9yKHZhciBhYT0wO2FpW2FhXSE9bnVsbDthYSsrKXtpZihhaVthYV0mJihhaVthYV09PT10cnVlfHxhaVthYV0ubm9kZVR5cGU9PT0xJiZLKFUsYWlbYWFdKSkpe2FiLnB1c2goYWZbYWFdKX19fWVsc2V7Zm9yKHZhciBhYT0wO2FpW2FhXSE9bnVsbDthYSsrKXtpZihhaVthYV0mJmFpW2FhXS5ub2RlVHlwZT09PTEpe2FiLnB1c2goYWZbYWFdKX19fX19ZWxzZXtFKGFpLGFiKX1pZihWKXtGKFYsVSxhYixhYyk7aWYoRyl7aGFzRHVwbGljYXRlPWZhbHNlO2FiLnNvcnQoRyk7aWYoaGFzRHVwbGljYXRlKXtmb3IodmFyIGFhPTE7YWE8YWIubGVuZ3RoO2FhKyspe2lmKGFiW2FhXT09PWFiW2FhLTFdKXthYi5zcGxpY2UoYWEtLSwxKX19fX19cmV0dXJuIGFifTtGLm1hdGNoZXM9ZnVuY3Rpb24oVCxVKXtyZXR1cm4gRihULG51bGwsbnVsbCxVKX07Ri5maW5kPWZ1bmN0aW9uKGFhLFQsYWIpe3ZhciBaLFg7aWYoIWFhKXtyZXR1cm5bXX1mb3IodmFyIFc9MCxWPUkub3JkZXIubGVuZ3RoO1c8VjtXKyspe3ZhciBZPUkub3JkZXJbV10sWDtpZigoWD1JLm1hdGNoW1ldLmV4ZWMoYWEpKSl7dmFyIFU9UmVnRXhwLmxlZnRDb250ZXh0O2lmKFUuc3Vic3RyKFUubGVuZ3RoLTEpIT09IlxcIil7WFsxXT0oWFsxXXx8IiIpLnJlcGxhY2UoL1xcL2csIiIpO1o9SS5maW5kW1ldKFgsVCxhYik7aWYoWiE9bnVsbCl7YWE9YWEucmVwbGFjZShJLm1hdGNoW1ldLCIiKTticmVha319fX1pZighWil7Wj1ULmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIil9cmV0dXJue3NldDpaLGV4cHI6YWF9fTtGLmZpbHRlcj1mdW5jdGlvbihhZCxhYyxhZyxXKXt2YXIgVj1hZCxhaT1bXSxhYT1hYyxZLFQsWj1hYyYmYWNbMF0mJlEoYWNbMF0pO3doaWxlKGFkJiZhYy5sZW5ndGgpe2Zvcih2YXIgYWIgaW4gSS5maWx0ZXIpe2lmKChZPUkubWF0Y2hbYWJdLmV4ZWMoYWQpKSE9bnVsbCl7dmFyIFU9SS5maWx0ZXJbYWJdLGFoLGFmO1Q9ZmFsc2U7aWYoYWE9PWFpKXthaT1bXX1pZihJLnByZUZpbHRlclthYl0pe1k9SS5wcmVGaWx0ZXJbYWJdKFksYWEsYWcsYWksVyxaKTtpZighWSl7VD1haD10cnVlfWVsc2V7aWYoWT09PXRydWUpe2NvbnRpbnVlfX19aWYoWSl7Zm9yKHZhciBYPTA7KGFmPWFhW1hdKSE9bnVsbDtYKyspe2lmKGFmKXthaD1VKGFmLFksWCxhYSk7dmFyIGFlPVdeISFhaDtpZihhZyYmYWghPW51bGwpe2lmKGFlKXtUPXRydWV9ZWxzZXthYVtYXT1mYWxzZX19ZWxzZXtpZihhZSl7YWkucHVzaChhZik7VD10cnVlfX19fX1pZihhaCE9PWcpe2lmKCFhZyl7YWE9YWl9YWQ9YWQucmVwbGFjZShJLm1hdGNoW2FiXSwiIik7aWYoIVQpe3JldHVybltdfWJyZWFrfX19aWYoYWQ9PVYpe2lmKFQ9PW51bGwpe3Rocm93IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYWR9ZWxzZXticmVha319Vj1hZH1yZXR1cm4gYWF9O3ZhciBJPUYuc2VsZWN0b3JzPXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXy1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZfLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRl8tXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXy1dfFxcLikrKVxzKig/OihcUz89KVxzKihbJyJdKikoLio/KVwzfClccypcXS8sVEFHOi9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKl8tXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xkbistXSopXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W14tXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZfLV18XFwuKSspKD86XCgoWyciXSopKCg/OlwoW15cKV0rXCl8W15cMlwoXCldKikrKVwyXCkpPy99LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKFQpe3JldHVybiBULmdldEF0dHJpYnV0ZSgiaHJlZiIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhYSxULFope3ZhciBYPXR5cGVvZiBUPT09InN0cmluZyIsYWI9WCYmIS9cVy8udGVzdChUKSxZPVgmJiFhYjtpZihhYiYmIVope1Q9VC50b1VwcGVyQ2FzZSgpfWZvcih2YXIgVz0wLFY9YWEubGVuZ3RoLFU7VzxWO1crKyl7aWYoKFU9YWFbV10pKXt3aGlsZSgoVT1VLnByZXZpb3VzU2libGluZykmJlUubm9kZVR5cGUhPT0xKXt9YWFbV109WXx8VSYmVS5ub2RlTmFtZT09PVQ/VXx8ZmFsc2U6VT09PVR9fWlmKFkpe0YuZmlsdGVyKFQsYWEsdHJ1ZSl9fSwiPiI6ZnVuY3Rpb24oWixVLGFhKXt2YXIgWD10eXBlb2YgVT09PSJzdHJpbmciO2lmKFgmJiEvXFcvLnRlc3QoVSkpe1U9YWE/VTpVLnRvVXBwZXJDYXNlKCk7Zm9yKHZhciBWPTAsVD1aLmxlbmd0aDtWPFQ7VisrKXt2YXIgWT1aW1ZdO2lmKFkpe3ZhciBXPVkucGFyZW50Tm9kZTtaW1ZdPVcubm9kZU5hbWU9PT1VP1c6ZmFsc2V9fX1lbHNle2Zvcih2YXIgVj0wLFQ9Wi5sZW5ndGg7VjxUO1YrKyl7dmFyIFk9WltWXTtpZihZKXtaW1ZdPVg/WS5wYXJlbnROb2RlOlkucGFyZW50Tm9kZT09PVV9fWlmKFgpe0YuZmlsdGVyKFUsWix0cnVlKX19fSwiIjpmdW5jdGlvbihXLFUsWSl7dmFyIFY9TCsrLFQ9UztpZighVS5tYXRjaCgvXFcvKSl7dmFyIFg9VT1ZP1U6VS50b1VwcGVyQ2FzZSgpO1Q9UH1UKCJwYXJlbnROb2RlIixVLFYsVyxYLFkpfSwifiI6ZnVuY3Rpb24oVyxVLFkpe3ZhciBWPUwrKyxUPVM7aWYodHlwZW9mIFU9PT0ic3RyaW5nIiYmIVUubWF0Y2goL1xXLykpe3ZhciBYPVU9WT9VOlUudG9VcHBlckNhc2UoKTtUPVB9VCgicHJldmlvdXNTaWJsaW5nIixVLFYsVyxYLFkpfX0sZmluZDp7SUQ6ZnVuY3Rpb24oVSxWLFcpe2lmKHR5cGVvZiBWLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFXKXt2YXIgVD1WLmdldEVsZW1lbnRCeUlkKFVbMV0pO3JldHVybiBUP1tUXTpbXX19LE5BTUU6ZnVuY3Rpb24oVixZLFope2lmKHR5cGVvZiBZLmdldEVsZW1lbnRzQnlOYW1lIT09InVuZGVmaW5lZCIpe3ZhciBVPVtdLFg9WS5nZXRFbGVtZW50c0J5TmFtZShWWzFdKTtmb3IodmFyIFc9MCxUPVgubGVuZ3RoO1c8VDtXKyspe2lmKFhbV10uZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1WWzFdKXtVLnB1c2goWFtXXSl9fXJldHVybiBVLmxlbmd0aD09PTA/bnVsbDpVfX0sVEFHOmZ1bmN0aW9uKFQsVSl7cmV0dXJuIFUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVFsxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKFcsVSxWLFQsWixhYSl7Vz0iICIrV1sxXS5yZXBsYWNlKC9cXC9nLCIiKSsiICI7aWYoYWEpe3JldHVybiBXfWZvcih2YXIgWD0wLFk7KFk9VVtYXSkhPW51bGw7WCsrKXtpZihZKXtpZihaXihZLmNsYXNzTmFtZSYmKCIgIitZLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoVyk+PTApKXtpZighVil7VC5wdXNoKFkpfX1lbHNle2lmKFYpe1VbWF09ZmFsc2V9fX19cmV0dXJuIGZhbHNlfSxJRDpmdW5jdGlvbihUKXtyZXR1cm4gVFsxXS5yZXBsYWNlKC9cXC9nLCIiKX0sVEFHOmZ1bmN0aW9uKFUsVCl7Zm9yKHZhciBWPTA7VFtWXT09PWZhbHNlO1YrKyl7fXJldHVybiBUW1ZdJiZRKFRbVl0pP1VbMV06VVsxXS50b1VwcGVyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihUKXtpZihUWzFdPT0ibnRoIil7dmFyIFU9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhUWzJdPT0iZXZlbiImJiIybiJ8fFRbMl09PSJvZGQiJiYiMm4rMSJ8fCEvXEQvLnRlc3QoVFsyXSkmJiIwbisiK1RbMl18fFRbMl0pO1RbMl09KFVbMV0rKFVbMl18fDEpKS0wO1RbM109VVszXS0wfVRbMF09TCsrO3JldHVybiBUfSxBVFRSOmZ1bmN0aW9uKFgsVSxWLFQsWSxaKXt2YXIgVz1YWzFdLnJlcGxhY2UoL1xcL2csIiIpO2lmKCFaJiZJLmF0dHJNYXBbV10pe1hbMV09SS5hdHRyTWFwW1ddfWlmKFhbMl09PT0ifj0iKXtYWzRdPSIgIitYWzRdKyIgIn1yZXR1cm4gWH0sUFNFVURPOmZ1bmN0aW9uKFgsVSxWLFQsWSl7aWYoWFsxXT09PSJub3QiKXtpZihYWzNdLm1hdGNoKFIpLmxlbmd0aD4xfHwvXlx3Ly50ZXN0KFhbM10pKXtYWzNdPUYoWFszXSxudWxsLG51bGwsVSl9ZWxzZXt2YXIgVz1GLmZpbHRlcihYWzNdLFUsVix0cnVlXlkpO2lmKCFWKXtULnB1c2guYXBwbHkoVCxXKX1yZXR1cm4gZmFsc2V9fWVsc2V7aWYoSS5tYXRjaC5QT1MudGVzdChYWzBdKXx8SS5tYXRjaC5DSElMRC50ZXN0KFhbMF0pKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIFh9LFBPUzpmdW5jdGlvbihUKXtULnVuc2hpZnQodHJ1ZSk7cmV0dXJuIFR9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKFQpe3JldHVybiBULmRpc2FibGVkPT09ZmFsc2UmJlQudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihUKXtyZXR1cm4gVC5kaXNhYmxlZD09PXRydWV9LGNoZWNrZWQ6ZnVuY3Rpb24oVCl7cmV0dXJuIFQuY2hlY2tlZD09PXRydWV9LHNlbGVjdGVkOmZ1bmN0aW9uKFQpe1QucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBULnNlbGVjdGVkPT09dHJ1ZX0scGFyZW50OmZ1bmN0aW9uKFQpe3JldHVybiAhIVQuZmlyc3RDaGlsZH0sZW1wdHk6ZnVuY3Rpb24oVCl7cmV0dXJuICFULmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihWLFUsVCl7cmV0dXJuICEhRihUWzNdLFYpLmxlbmd0aH0saGVhZGVyOmZ1bmN0aW9uKFQpe3JldHVybi9oXGQvaS50ZXN0KFQubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKFQpe3JldHVybiJ0ZXh0Ij09PVQudHlwZX0scmFkaW86ZnVuY3Rpb24oVCl7cmV0dXJuInJhZGlvIj09PVQudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oVCl7cmV0dXJuImNoZWNrYm94Ij09PVQudHlwZX0sZmlsZTpmdW5jdGlvbihUKXtyZXR1cm4iZmlsZSI9PT1ULnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKFQpe3JldHVybiJwYXNzd29yZCI9PT1ULnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihUKXtyZXR1cm4ic3VibWl0Ij09PVQudHlwZX0saW1hZ2U6ZnVuY3Rpb24oVCl7cmV0dXJuImltYWdlIj09PVQudHlwZX0scmVzZXQ6ZnVuY3Rpb24oVCl7cmV0dXJuInJlc2V0Ij09PVQudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKFQpe3JldHVybiJidXR0b24iPT09VC50eXBlfHxULm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT0iQlVUVE9OIn0saW5wdXQ6ZnVuY3Rpb24oVCl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KFQubm9kZU5hbWUpfX0sc2V0RmlsdGVyczp7Zmlyc3Q6ZnVuY3Rpb24oVSxUKXtyZXR1cm4gVD09PTB9LGxhc3Q6ZnVuY3Rpb24oVixVLFQsVyl7cmV0dXJuIFU9PT1XLmxlbmd0aC0xfSxldmVuOmZ1bmN0aW9uKFUsVCl7cmV0dXJuIFQlMj09PTB9LG9kZDpmdW5jdGlvbihVLFQpe3JldHVybiBUJTI9PT0xfSxsdDpmdW5jdGlvbihWLFUsVCl7cmV0dXJuIFU8VFszXS0wfSxndDpmdW5jdGlvbihWLFUsVCl7cmV0dXJuIFU+VFszXS0wfSxudGg6ZnVuY3Rpb24oVixVLFQpe3JldHVybiBUWzNdLTA9PVV9LGVxOmZ1bmN0aW9uKFYsVSxUKXtyZXR1cm4gVFszXS0wPT1VfX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oWixWLFcsYWEpe3ZhciBVPVZbMV0sWD1JLmZpbHRlcnNbVV07aWYoWCl7cmV0dXJuIFgoWixXLFYsYWEpfWVsc2V7aWYoVT09PSJjb250YWlucyIpe3JldHVybihaLnRleHRDb250ZW50fHxaLmlubmVyVGV4dHx8IiIpLmluZGV4T2YoVlszXSk+PTB9ZWxzZXtpZihVPT09Im5vdCIpe3ZhciBZPVZbM107Zm9yKHZhciBXPTAsVD1ZLmxlbmd0aDtXPFQ7VysrKXtpZihZW1ddPT09Wil7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX19fX0sQ0hJTEQ6ZnVuY3Rpb24oVCxXKXt2YXIgWj1XWzFdLFU9VDtzd2l0Y2goWil7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShVPVUucHJldmlvdXNTaWJsaW5nKXtpZihVLm5vZGVUeXBlPT09MSl7cmV0dXJuIGZhbHNlfX1pZihaPT0iZmlyc3QiKXtyZXR1cm4gdHJ1ZX1VPVQ7Y2FzZSJsYXN0Ijp3aGlsZShVPVUubmV4dFNpYmxpbmcpe2lmKFUubm9kZVR5cGU9PT0xKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlO2Nhc2UibnRoIjp2YXIgVj1XWzJdLGFjPVdbM107aWYoVj09MSYmYWM9PTApe3JldHVybiB0cnVlfXZhciBZPVdbMF0sYWI9VC5wYXJlbnROb2RlO2lmKGFiJiYoYWIuc2l6Y2FjaGUhPT1ZfHwhVC5ub2RlSW5kZXgpKXt2YXIgWD0wO2ZvcihVPWFiLmZpcnN0Q2hpbGQ7VTtVPVUubmV4dFNpYmxpbmcpe2lmKFUubm9kZVR5cGU9PT0xKXtVLm5vZGVJbmRleD0rK1h9fWFiLnNpemNhY2hlPVl9dmFyIGFhPVQubm9kZUluZGV4LWFjO2lmKFY9PTApe3JldHVybiBhYT09MH1lbHNle3JldHVybihhYSVWPT0wJiZhYS9WPj0wKX19fSxJRDpmdW5jdGlvbihVLFQpe3JldHVybiBVLm5vZGVUeXBlPT09MSYmVS5nZXRBdHRyaWJ1dGUoImlkIik9PT1UfSxUQUc6ZnVuY3Rpb24oVSxUKXtyZXR1cm4oVD09PSIqIiYmVS5ub2RlVHlwZT09PTEpfHxVLm5vZGVOYW1lPT09VH0sQ0xBU1M6ZnVuY3Rpb24oVSxUKXtyZXR1cm4oIiAiKyhVLmNsYXNzTmFtZXx8VS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpKyIgIikuaW5kZXhPZihUKT4tMX0sQVRUUjpmdW5jdGlvbihZLFcpe3ZhciBWPVdbMV0sVD1JLmF0dHJIYW5kbGVbVl0/SS5hdHRySGFuZGxlW1ZdKFkpOllbVl0hPW51bGw/WVtWXTpZLmdldEF0dHJpYnV0ZShWKSxaPVQrIiIsWD1XWzJdLFU9V1s0XTtyZXR1cm4gVD09bnVsbD9YPT09IiE9IjpYPT09Ij0iP1o9PT1VOlg9PT0iKj0iP1ouaW5kZXhPZihVKT49MDpYPT09In49Ij8oIiAiK1orIiAiKS5pbmRleE9mKFUpPj0wOiFVP1omJlQhPT1mYWxzZTpYPT09IiE9Ij9aIT1VOlg9PT0iXj0iP1ouaW5kZXhPZihVKT09PTA6WD09PSIkPSI/Wi5zdWJzdHIoWi5sZW5ndGgtVS5sZW5ndGgpPT09VTpYPT09Inw9Ij9aPT09VXx8Wi5zdWJzdHIoMCxVLmxlbmd0aCsxKT09PVUrIi0iOmZhbHNlfSxQT1M6ZnVuY3Rpb24oWCxVLFYsWSl7dmFyIFQ9VVsyXSxXPUkuc2V0RmlsdGVyc1tUXTtpZihXKXtyZXR1cm4gVyhYLFYsVSxZKX19fX07dmFyIE09SS5tYXRjaC5QT1M7Zm9yKHZhciBPIGluIEkubWF0Y2gpe0kubWF0Y2hbT109UmVnRXhwKEkubWF0Y2hbT10uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSl9dmFyIEU9ZnVuY3Rpb24oVSxUKXtVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFUpO2lmKFQpe1QucHVzaC5hcHBseShULFUpO3JldHVybiBUfXJldHVybiBVfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpfWNhdGNoKE4pe0U9ZnVuY3Rpb24oWCxXKXt2YXIgVT1XfHxbXTtpZihILmNhbGwoWCk9PT0iW29iamVjdCBBcnJheV0iKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShVLFgpfWVsc2V7aWYodHlwZW9mIFgubGVuZ3RoPT09Im51bWJlciIpe2Zvcih2YXIgVj0wLFQ9WC5sZW5ndGg7VjxUO1YrKyl7VS5wdXNoKFhbVl0pfX1lbHNle2Zvcih2YXIgVj0wO1hbVl07VisrKXtVLnB1c2goWFtWXSl9fX1yZXR1cm4gVX19dmFyIEc7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtHPWZ1bmN0aW9uKFUsVCl7dmFyIFY9VS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihUKSY0Py0xOlU9PT1UPzA6MTtpZihWPT09MCl7aGFzRHVwbGljYXRlPXRydWV9cmV0dXJuIFZ9fWVsc2V7aWYoInNvdXJjZUluZGV4IiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe0c9ZnVuY3Rpb24oVSxUKXt2YXIgVj1VLnNvdXJjZUluZGV4LVQuc291cmNlSW5kZXg7aWYoVj09PTApe2hhc0R1cGxpY2F0ZT10cnVlfXJldHVybiBWfX1lbHNle2lmKGRvY3VtZW50LmNyZWF0ZVJhbmdlKXtHPWZ1bmN0aW9uKFcsVSl7dmFyIFY9Vy5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksVD1VLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtWLnNlbGVjdE5vZGUoVyk7Vi5jb2xsYXBzZSh0cnVlKTtULnNlbGVjdE5vZGUoVSk7VC5jb2xsYXBzZSh0cnVlKTt2YXIgWD1WLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQsVCk7aWYoWD09PTApe2hhc0R1cGxpY2F0ZT10cnVlfXJldHVybiBYfX19fShmdW5jdGlvbigpe3ZhciBVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxWPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpO1UuaW5uZXJIVE1MPSI8aW5wdXQgbmFtZT0nIitWKyInLz4iO3ZhciBUPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtULmluc2VydEJlZm9yZShVLFQuZmlyc3RDaGlsZCk7aWYoISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWKSl7SS5maW5kLklEPWZ1bmN0aW9uKFgsWSxaKXtpZih0eXBlb2YgWS5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhWil7dmFyIFc9WS5nZXRFbGVtZW50QnlJZChYWzFdKTtyZXR1cm4gVz9XLmlkPT09WFsxXXx8dHlwZW9mIFcuZ2V0QXR0cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZXLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09WFsxXT9bV106ZzpbXX19O0kuZmlsdGVyLklEPWZ1bmN0aW9uKFksVyl7dmFyIFg9dHlwZW9mIFkuZ2V0QXR0cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZZLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIFkubm9kZVR5cGU9PT0xJiZYJiZYLm5vZGVWYWx1ZT09PVd9fVQucmVtb3ZlQ2hpbGQoVSl9KSgpOyhmdW5jdGlvbigpe3ZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikpO2lmKFQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCl7SS5maW5kLlRBRz1mdW5jdGlvbihVLFkpe3ZhciBYPVkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVVsxXSk7aWYoVVsxXT09PSIqIil7dmFyIFc9W107Zm9yKHZhciBWPTA7WFtWXTtWKyspe2lmKFhbVl0ubm9kZVR5cGU9PT0xKXtXLnB1c2goWFtWXSl9fVg9V31yZXR1cm4gWH19VC5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iO2lmKFQuZmlyc3RDaGlsZCYmdHlwZW9mIFQuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPT0idW5kZWZpbmVkIiYmVC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiKXtJLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihVKXtyZXR1cm4gVS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfX19KSgpO2lmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpeyhmdW5jdGlvbigpe3ZhciBUPUYsVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtVLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKFUucXVlcnlTZWxlY3RvckFsbCYmVS5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aD09PTApe3JldHVybn1GPWZ1bmN0aW9uKFksWCxWLFcpe1g9WHx8ZG9jdW1lbnQ7aWYoIVcmJlgubm9kZVR5cGU9PT05JiYhUShYKSl7dHJ5e3JldHVybiBFKFgucXVlcnlTZWxlY3RvckFsbChZKSxWKX1jYXRjaChaKXt9fXJldHVybiBUKFksWCxWLFcpfTtGLmZpbmQ9VC5maW5kO0YuZmlsdGVyPVQuZmlsdGVyO0Yuc2VsZWN0b3JzPVQuc2VsZWN0b3JzO0YubWF0Y2hlcz1ULm1hdGNoZXN9KSgpfWlmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXsoZnVuY3Rpb24oKXt2YXIgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtULmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKFQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTApe3JldHVybn1ULmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lmKFQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpe3JldHVybn1JLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIik7SS5maW5kLkNMQVNTPWZ1bmN0aW9uKFUsVixXKXtpZih0eXBlb2YgVi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT09InVuZGVmaW5lZCImJiFXKXtyZXR1cm4gVi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFVbMV0pfX19KSgpfWZ1bmN0aW9uIFAoVSxaLFksYWQsYWEsYWMpe3ZhciBhYj1VPT0icHJldmlvdXNTaWJsaW5nIiYmIWFjO2Zvcih2YXIgVz0wLFY9YWQubGVuZ3RoO1c8VjtXKyspe3ZhciBUPWFkW1ddO2lmKFQpe2lmKGFiJiZULm5vZGVUeXBlPT09MSl7VC5zaXpjYWNoZT1ZO1Quc2l6c2V0PVd9VD1UW1VdO3ZhciBYPWZhbHNlO3doaWxlKFQpe2lmKFQuc2l6Y2FjaGU9PT1ZKXtYPWFkW1Quc2l6c2V0XTticmVha31pZihULm5vZGVUeXBlPT09MSYmIWFjKXtULnNpemNhY2hlPVk7VC5zaXpzZXQ9V31pZihULm5vZGVOYW1lPT09Wil7WD1UO2JyZWFrfVQ9VFtVXX1hZFtXXT1YfX19ZnVuY3Rpb24gUyhVLFosWSxhZCxhYSxhYyl7dmFyIGFiPVU9PSJwcmV2aW91c1NpYmxpbmciJiYhYWM7Zm9yKHZhciBXPTAsVj1hZC5sZW5ndGg7VzxWO1crKyl7dmFyIFQ9YWRbV107aWYoVCl7aWYoYWImJlQubm9kZVR5cGU9PT0xKXtULnNpemNhY2hlPVk7VC5zaXpzZXQ9V31UPVRbVV07dmFyIFg9ZmFsc2U7d2hpbGUoVCl7aWYoVC5zaXpjYWNoZT09PVkpe1g9YWRbVC5zaXpzZXRdO2JyZWFrfWlmKFQubm9kZVR5cGU9PT0xKXtpZighYWMpe1Quc2l6Y2FjaGU9WTtULnNpenNldD1XfWlmKHR5cGVvZiBaIT09InN0cmluZyIpe2lmKFQ9PT1aKXtYPXRydWU7YnJlYWt9fWVsc2V7aWYoRi5maWx0ZXIoWixbVF0pLmxlbmd0aD4wKXtYPVQ7YnJlYWt9fX1UPVRbVV19YWRbV109WH19fXZhciBLPWRvY3VtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKFUsVCl7cmV0dXJuIFUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oVCkmMTZ9OmZ1bmN0aW9uKFUsVCl7cmV0dXJuIFUhPT1UJiYoVS5jb250YWlucz9VLmNvbnRhaW5zKFQpOnRydWUpfTt2YXIgUT1mdW5jdGlvbihUKXtyZXR1cm4gVC5ub2RlVHlwZT09PTkmJlQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lIT09IkhUTUwifHwhIVQub3duZXJEb2N1bWVudCYmUShULm93bmVyRG9jdW1lbnQpfTt2YXIgSj1mdW5jdGlvbihULGFhKXt2YXIgVz1bXSxYPSIiLFksVj1hYS5ub2RlVHlwZT9bYWFdOmFhO3doaWxlKChZPUkubWF0Y2guUFNFVURPLmV4ZWMoVCkpKXtYKz1ZWzBdO1Q9VC5yZXBsYWNlKEkubWF0Y2guUFNFVURPLCIiKX1UPUkucmVsYXRpdmVbVF0/VCsiKiI6VDtmb3IodmFyIFo9MCxVPVYubGVuZ3RoO1o8VTtaKyspe0YoVCxWW1pdLFcpfXJldHVybiBGLmZpbHRlcihYLFcpfTtvLmZpbmQ9RjtvLmZpbHRlcj1GLmZpbHRlcjtvLmV4cHI9Ri5zZWxlY3RvcnM7by5leHByWyI6Il09by5leHByLmZpbHRlcnM7Ri5zZWxlY3RvcnMuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oVCl7cmV0dXJuIFQub2Zmc2V0V2lkdGg9PT0wfHxULm9mZnNldEhlaWdodD09PTB9O0Yuc2VsZWN0b3JzLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihUKXtyZXR1cm4gVC5vZmZzZXRXaWR0aD4wfHxULm9mZnNldEhlaWdodD4wfTtGLnNlbGVjdG9ycy5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKFQpe3JldHVybiBvLmdyZXAoby50aW1lcnMsZnVuY3Rpb24oVSl7cmV0dXJuIFQ9PT1VLmVsZW19KS5sZW5ndGh9O28ubXVsdGlGaWx0ZXI9ZnVuY3Rpb24oVixULFUpe2lmKFUpe1Y9Ijpub3QoIitWKyIpIn1yZXR1cm4gRi5tYXRjaGVzKFYsVCl9O28uZGlyPWZ1bmN0aW9uKFYsVSl7dmFyIFQ9W10sVz1WW1VdO3doaWxlKFcmJlchPWRvY3VtZW50KXtpZihXLm5vZGVUeXBlPT0xKXtULnB1c2goVyl9Vz1XW1VdfXJldHVybiBUfTtvLm50aD1mdW5jdGlvbihYLFQsVixXKXtUPVR8fDE7dmFyIFU9MDtmb3IoO1g7WD1YW1ZdKXtpZihYLm5vZGVUeXBlPT0xJiYrK1U9PVQpe2JyZWFrfX1yZXR1cm4gWH07by5zaWJsaW5nPWZ1bmN0aW9uKFYsVSl7dmFyIFQ9W107Zm9yKDtWO1Y9Vi5uZXh0U2libGluZyl7aWYoVi5ub2RlVHlwZT09MSYmViE9VSl7VC5wdXNoKFYpfX1yZXR1cm4gVH07cmV0dXJuO2wuU2l6emxlPUZ9KSgpO28uZXZlbnQ9e2FkZDpmdW5jdGlvbihJLEYsSCxLKXtpZihJLm5vZGVUeXBlPT0zfHxJLm5vZGVUeXBlPT04KXtyZXR1cm59aWYoSS5zZXRJbnRlcnZhbCYmSSE9bCl7ST1sfWlmKCFILmd1aWQpe0guZ3VpZD10aGlzLmd1aWQrK31pZihLIT09Zyl7dmFyIEc9SDtIPXRoaXMucHJveHkoRyk7SC5kYXRhPUt9dmFyIEU9by5kYXRhKEksImV2ZW50cyIpfHxvLmRhdGEoSSwiZXZlbnRzIix7fSksSj1vLmRhdGEoSSwiaGFuZGxlIil8fG8uZGF0YShJLCJoYW5kbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBvIT09InVuZGVmaW5lZCImJiFvLmV2ZW50LnRyaWdnZXJlZD9vLmV2ZW50LmhhbmRsZS5hcHBseShhcmd1bWVudHMuY2FsbGVlLmVsZW0sYXJndW1lbnRzKTpnfSk7Si5lbGVtPUk7by5lYWNoKEYuc3BsaXQoL1xzKy8pLGZ1bmN0aW9uKE0sTil7dmFyIE89Ti5zcGxpdCgiLiIpO049Ty5zaGlmdCgpO0gudHlwZT1PLnNsaWNlKCkuc29ydCgpLmpvaW4oIi4iKTt2YXIgTD1FW05dO2lmKG8uZXZlbnQuc3BlY2lhbEFsbFtOXSl7by5ldmVudC5zcGVjaWFsQWxsW05dLnNldHVwLmNhbGwoSSxLLE8pfWlmKCFMKXtMPUVbTl09e307aWYoIW8uZXZlbnQuc3BlY2lhbFtOXXx8by5ldmVudC5zcGVjaWFsW05dLnNldHVwLmNhbGwoSSxLLE8pPT09ZmFsc2Upe2lmKEkuYWRkRXZlbnRMaXN0ZW5lcil7SS5hZGRFdmVudExpc3RlbmVyKE4sSixmYWxzZSl9ZWxzZXtpZihJLmF0dGFjaEV2ZW50KXtJLmF0dGFjaEV2ZW50KCJvbiIrTixKKX19fX1MW0guZ3VpZF09SDtvLmV2ZW50Lmdsb2JhbFtOXT10cnVlfSk7ST1udWxsfSxndWlkOjEsZ2xvYmFsOnt9LHJlbW92ZTpmdW5jdGlvbihLLEgsSil7aWYoSy5ub2RlVHlwZT09M3x8Sy5ub2RlVHlwZT09OCl7cmV0dXJufXZhciBHPW8uZGF0YShLLCJldmVudHMiKSxGLEU7aWYoRyl7aWYoSD09PWd8fCh0eXBlb2YgSD09PSJzdHJpbmciJiZILmNoYXJBdCgwKT09Ii4iKSl7Zm9yKHZhciBJIGluIEcpe3RoaXMucmVtb3ZlKEssSSsoSHx8IiIpKX19ZWxzZXtpZihILnR5cGUpe0o9SC5oYW5kbGVyO0g9SC50eXBlfW8uZWFjaChILnNwbGl0KC9ccysvKSxmdW5jdGlvbihNLE8pe3ZhciBRPU8uc3BsaXQoIi4iKTtPPVEuc2hpZnQoKTt2YXIgTj1SZWdFeHAoIihefFxcLikiK1Euc2xpY2UoKS5zb3J0KCkuam9pbigiLipcXC4iKSsiKFxcLnwkKSIpO2lmKEdbT10pe2lmKEope2RlbGV0ZSBHW09dW0ouZ3VpZF19ZWxzZXtmb3IodmFyIFAgaW4gR1tPXSl7aWYoTi50ZXN0KEdbT11bUF0udHlwZSkpe2RlbGV0ZSBHW09dW1BdfX19aWYoby5ldmVudC5zcGVjaWFsQWxsW09dKXtvLmV2ZW50LnNwZWNpYWxBbGxbT10udGVhcmRvd24uY2FsbChLLFEpfWZvcihGIGluIEdbT10pe2JyZWFrfWlmKCFGKXtpZighby5ldmVudC5zcGVjaWFsW09dfHxvLmV2ZW50LnNwZWNpYWxbT10udGVhcmRvd24uY2FsbChLLFEpPT09ZmFsc2Upe2lmKEsucmVtb3ZlRXZlbnRMaXN0ZW5lcil7Sy5yZW1vdmVFdmVudExpc3RlbmVyKE8sby5kYXRhKEssImhhbmRsZSIpLGZhbHNlKX1lbHNle2lmKEsuZGV0YWNoRXZlbnQpe0suZGV0YWNoRXZlbnQoIm9uIitPLG8uZGF0YShLLCJoYW5kbGUiKSl9fX1GPW51bGw7ZGVsZXRlIEdbT119fX0pfWZvcihGIGluIEcpe2JyZWFrfWlmKCFGKXt2YXIgTD1vLmRhdGEoSywiaGFuZGxlIik7aWYoTCl7TC5lbGVtPW51bGx9by5yZW1vdmVEYXRhKEssImV2ZW50cyIpO28ucmVtb3ZlRGF0YShLLCJoYW5kbGUiKX19fSx0cmlnZ2VyOmZ1bmN0aW9uKEksSyxILEUpe3ZhciBHPUkudHlwZXx8STtpZighRSl7ST10eXBlb2YgST09PSJvYmplY3QiP0lbaF0/STpvLmV4dGVuZChvLkV2ZW50KEcpLEkpOm8uRXZlbnQoRyk7aWYoRy5pbmRleE9mKCIhIik+PTApe0kudHlwZT1HPUcuc2xpY2UoMCwtMSk7SS5leGNsdXNpdmU9dHJ1ZX1pZighSCl7SS5zdG9wUHJvcGFnYXRpb24oKTtpZih0aGlzLmdsb2JhbFtHXSl7by5lYWNoKG8uY2FjaGUsZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50cyYmdGhpcy5ldmVudHNbR10pe28uZXZlbnQudHJpZ2dlcihJLEssdGhpcy5oYW5kbGUuZWxlbSl9fSl9fWlmKCFIfHxILm5vZGVUeXBlPT0zfHxILm5vZGVUeXBlPT04KXtyZXR1cm4gZ31JLnJlc3VsdD1nO0kudGFyZ2V0PUg7Sz1vLm1ha2VBcnJheShLKTtLLnVuc2hpZnQoSSl9SS5jdXJyZW50VGFyZ2V0PUg7dmFyIEo9by5kYXRhKEgsImhhbmRsZSIpO2lmKEope0ouYXBwbHkoSCxLKX1pZigoIUhbR118fChvLm5vZGVOYW1lKEgsImEiKSYmRz09ImNsaWNrIikpJiZIWyJvbiIrR10mJkhbIm9uIitHXS5hcHBseShILEspPT09ZmFsc2Upe0kucmVzdWx0PWZhbHNlfWlmKCFFJiZIW0ddJiYhSS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIShvLm5vZGVOYW1lKEgsImEiKSYmRz09ImNsaWNrIikpe3RoaXMudHJpZ2dlcmVkPXRydWU7dHJ5e0hbR10oKX1jYXRjaChMKXt9fXRoaXMudHJpZ2dlcmVkPWZhbHNlO2lmKCFJLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3ZhciBGPUgucGFyZW50Tm9kZXx8SC5vd25lckRvY3VtZW50O2lmKEYpe28uZXZlbnQudHJpZ2dlcihJLEssRix0cnVlKX19fSxoYW5kbGU6ZnVuY3Rpb24oSyl7dmFyIEosRTtLPWFyZ3VtZW50c1swXT1vLmV2ZW50LmZpeChLfHxsLmV2ZW50KTtLLmN1cnJlbnRUYXJnZXQ9dGhpczt2YXIgTD1LLnR5cGUuc3BsaXQoIi4iKTtLLnR5cGU9TC5zaGlmdCgpO0o9IUwubGVuZ3RoJiYhSy5leGNsdXNpdmU7dmFyIEk9UmVnRXhwKCIoXnxcXC4pIitMLnNsaWNlKCkuc29ydCgpLmpvaW4oIi4qXFwuIikrIihcXC58JCkiKTtFPShvLmRhdGEodGhpcywiZXZlbnRzIil8fHt9KVtLLnR5cGVdO2Zvcih2YXIgRyBpbiBFKXt2YXIgSD1FW0ddO2lmKEp8fEkudGVzdChILnR5cGUpKXtLLmhhbmRsZXI9SDtLLmRhdGE9SC5kYXRhO3ZhciBGPUguYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKEYhPT1nKXtLLnJlc3VsdD1GO2lmKEY9PT1mYWxzZSl7Sy5wcmV2ZW50RGVmYXVsdCgpO0suc3RvcFByb3BhZ2F0aW9uKCl9fWlmKEsuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl7YnJlYWt9fX19LHByb3BzOiJhbHRLZXkgYXR0ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBjYW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbWV0YUtleSBuZXdWYWx1ZSBvcmlnaW5hbFRhcmdldCBwYWdlWCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3JlZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdG9FbGVtZW50IHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAiKSxmaXg6ZnVuY3Rpb24oSCl7aWYoSFtoXSl7cmV0dXJuIEh9dmFyIEY9SDtIPW8uRXZlbnQoRik7Zm9yKHZhciBHPXRoaXMucHJvcHMubGVuZ3RoLEo7Rzspe0o9dGhpcy5wcm9wc1stLUddO0hbSl09RltKXX1pZighSC50YXJnZXQpe0gudGFyZ2V0PUguc3JjRWxlbWVudHx8ZG9jdW1lbnR9aWYoSC50YXJnZXQubm9kZVR5cGU9PTMpe0gudGFyZ2V0PUgudGFyZ2V0LnBhcmVudE5vZGV9aWYoIUgucmVsYXRlZFRhcmdldCYmSC5mcm9tRWxlbWVudCl7SC5yZWxhdGVkVGFyZ2V0PUguZnJvbUVsZW1lbnQ9PUgudGFyZ2V0P0gudG9FbGVtZW50OkguZnJvbUVsZW1lbnR9aWYoSC5wYWdlWD09bnVsbCYmSC5jbGllbnRYIT1udWxsKXt2YXIgST1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRT1kb2N1bWVudC5ib2R5O0gucGFnZVg9SC5jbGllbnRYKyhJJiZJLnNjcm9sbExlZnR8fEUmJkUuc2Nyb2xsTGVmdHx8MCktKEkuY2xpZW50TGVmdHx8MCk7SC5wYWdlWT1ILmNsaWVudFkrKEkmJkkuc2Nyb2xsVG9wfHxFJiZFLnNjcm9sbFRvcHx8MCktKEkuY2xpZW50VG9wfHwwKX1pZighSC53aGljaCYmKChILmNoYXJDb2RlfHxILmNoYXJDb2RlPT09MCk/SC5jaGFyQ29kZTpILmtleUNvZGUpKXtILndoaWNoPUguY2hhckNvZGV8fEgua2V5Q29kZX1pZighSC5tZXRhS2V5JiZILmN0cmxLZXkpe0gubWV0YUtleT1ILmN0cmxLZXl9aWYoIUgud2hpY2gmJkguYnV0dG9uKXtILndoaWNoPShILmJ1dHRvbiYxPzE6KEguYnV0dG9uJjI/MzooSC5idXR0b24mND8yOjApKSl9cmV0dXJuIEh9LHByb3h5OmZ1bmN0aW9uKEYsRSl7RT1FfHxmdW5jdGlvbigpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07RS5ndWlkPUYuZ3VpZD1GLmd1aWR8fEUuZ3VpZHx8dGhpcy5ndWlkKys7cmV0dXJuIEV9LHNwZWNpYWw6e3JlYWR5OntzZXR1cDpCLHRlYXJkb3duOmZ1bmN0aW9uKCl7fX19LHNwZWNpYWxBbGw6e2xpdmU6e3NldHVwOmZ1bmN0aW9uKEUsRil7by5ldmVudC5hZGQodGhpcyxGWzBdLGMpfSx0ZWFyZG93bjpmdW5jdGlvbihHKXtpZihHLmxlbmd0aCl7dmFyIEU9MCxGPVJlZ0V4cCgiKF58XFwuKSIrR1swXSsiKFxcLnwkKSIpO28uZWFjaCgoby5kYXRhKHRoaXMsImV2ZW50cyIpLmxpdmV8fHt9KSxmdW5jdGlvbigpe2lmKEYudGVzdCh0aGlzLnR5cGUpKXtFKyt9fSk7aWYoRTwxKXtvLmV2ZW50LnJlbW92ZSh0aGlzLEdbMF0sYyl9fX19fX07by5FdmVudD1mdW5jdGlvbihFKXtpZighdGhpcy5wcmV2ZW50RGVmYXVsdCl7cmV0dXJuIG5ldyBvLkV2ZW50KEUpfWlmKEUmJkUudHlwZSl7dGhpcy5vcmlnaW5hbEV2ZW50PUU7dGhpcy50eXBlPUUudHlwZX1lbHNle3RoaXMudHlwZT1FfXRoaXMudGltZVN0YW1wPWUoKTt0aGlzW2hdPXRydWV9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gdSgpe3JldHVybiB0cnVlfW8uRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXU7dmFyIEU9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFFKXtyZXR1cm59aWYoRS5wcmV2ZW50RGVmYXVsdCl7RS5wcmV2ZW50RGVmYXVsdCgpfUUucmV0dXJuVmFsdWU9ZmFsc2V9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dTt2YXIgRT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIUUpe3JldHVybn1pZihFLnN0b3BQcm9wYWdhdGlvbil7RS5zdG9wUHJvcGFnYXRpb24oKX1FLmNhbmNlbEJ1YmJsZT10cnVlfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXU7dGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOmssaXNQcm9wYWdhdGlvblN0b3BwZWQ6ayxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDprfTt2YXIgYT1mdW5jdGlvbihGKXt2YXIgRT1GLnJlbGF0ZWRUYXJnZXQ7d2hpbGUoRSYmRSE9dGhpcyl7dHJ5e0U9RS5wYXJlbnROb2RlfWNhdGNoKEcpe0U9dGhpc319aWYoRSE9dGhpcyl7Ri50eXBlPUYuZGF0YTtvLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtvLmVhY2goe21vdXNlb3ZlcjoibW91c2VlbnRlciIsbW91c2VvdXQ6Im1vdXNlbGVhdmUifSxmdW5jdGlvbihGLEUpe28uZXZlbnQuc3BlY2lhbFtFXT17c2V0dXA6ZnVuY3Rpb24oKXtvLmV2ZW50LmFkZCh0aGlzLEYsYSxFKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtvLmV2ZW50LnJlbW92ZSh0aGlzLEYsYSl9fX0pO28uZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKEYsRyxFKXtyZXR1cm4gRj09InVubG9hZCI/dGhpcy5vbmUoRixHLEUpOnRoaXMuZWFjaChmdW5jdGlvbigpe28uZXZlbnQuYWRkKHRoaXMsRixFfHxHLEUmJkcpfSl9LG9uZTpmdW5jdGlvbihHLEgsRil7dmFyIEU9by5ldmVudC5wcm94eShGfHxILGZ1bmN0aW9uKEkpe28odGhpcykudW5iaW5kKEksRSk7cmV0dXJuKEZ8fEgpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtvLmV2ZW50LmFkZCh0aGlzLEcsRSxGJiZIKX0pfSx1bmJpbmQ6ZnVuY3Rpb24oRixFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5ldmVudC5yZW1vdmUodGhpcyxGLEUpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oRSxGKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5ldmVudC50cmlnZ2VyKEUsRix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihFLEcpe2lmKHRoaXNbMF0pe3ZhciBGPW8uRXZlbnQoRSk7Ri5wcmV2ZW50RGVmYXVsdCgpO0Yuc3RvcFByb3BhZ2F0aW9uKCk7by5ldmVudC50cmlnZ2VyKEYsRyx0aGlzWzBdKTtyZXR1cm4gRi5yZXN1bHR9fSx0b2dnbGU6ZnVuY3Rpb24oRyl7dmFyIEU9YXJndW1lbnRzLEY9MTt3aGlsZShGPEUubGVuZ3RoKXtvLmV2ZW50LnByb3h5KEcsRVtGKytdKX1yZXR1cm4gdGhpcy5jbGljayhvLmV2ZW50LnByb3h5KEcsZnVuY3Rpb24oSCl7dGhpcy5sYXN0VG9nZ2xlPSh0aGlzLmxhc3RUb2dnbGV8fDApJUY7SC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBFW3RoaXMubGFzdFRvZ2dsZSsrXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fGZhbHNlfSkpfSxob3ZlcjpmdW5jdGlvbihFLEYpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoRSkubW91c2VsZWF2ZShGKX0scmVhZHk6ZnVuY3Rpb24oRSl7QigpO2lmKG8uaXNSZWFkeSl7RS5jYWxsKGRvY3VtZW50LG8pfWVsc2V7by5yZWFkeUxpc3QucHVzaChFKX1yZXR1cm4gdGhpc30sbGl2ZTpmdW5jdGlvbihHLEYpe3ZhciBFPW8uZXZlbnQucHJveHkoRik7RS5ndWlkKz10aGlzLnNlbGVjdG9yK0c7byhkb2N1bWVudCkuYmluZChpKEcsdGhpcy5zZWxlY3RvciksdGhpcy5zZWxlY3RvcixFKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKEYsRSl7byhkb2N1bWVudCkudW5iaW5kKGkoRix0aGlzLnNlbGVjdG9yKSxFP3tndWlkOkUuZ3VpZCt0aGlzLnNlbGVjdG9yK0Z9Om51bGwpO3JldHVybiB0aGlzfX0pO2Z1bmN0aW9uIGMoSCl7dmFyIEU9UmVnRXhwKCIoXnxcXC4pIitILnR5cGUrIihcXC58JCkiKSxHPXRydWUsRj1bXTtvLmVhY2goby5kYXRhKHRoaXMsImV2ZW50cyIpLmxpdmV8fFtdLGZ1bmN0aW9uKEksSil7aWYoRS50ZXN0KEoudHlwZSkpe3ZhciBLPW8oSC50YXJnZXQpLmNsb3Nlc3QoSi5kYXRhKVswXTtpZihLKXtGLnB1c2goe2VsZW06SyxmbjpKfSl9fX0pO0Yuc29ydChmdW5jdGlvbihKLEkpe3JldHVybiBvLmRhdGEoSi5lbGVtLCJjbG9zZXN0Iiktby5kYXRhKEkuZWxlbSwiY2xvc2VzdCIpfSk7by5lYWNoKEYsZnVuY3Rpb24oKXtpZih0aGlzLmZuLmNhbGwodGhpcy5lbGVtLEgsdGhpcy5mbi5kYXRhKT09PWZhbHNlKXtyZXR1cm4oRz1mYWxzZSl9fSk7cmV0dXJuIEd9ZnVuY3Rpb24gaShGLEUpe3JldHVyblsibGl2ZSIsRixFLnJlcGxhY2UoL1wuL2csImAiKS5yZXBsYWNlKC8gL2csInwiKV0uam9pbigiLiIpfW8uZXh0ZW5kKHtpc1JlYWR5OmZhbHNlLHJlYWR5TGlzdDpbXSxyZWFkeTpmdW5jdGlvbigpe2lmKCFvLmlzUmVhZHkpe28uaXNSZWFkeT10cnVlO2lmKG8ucmVhZHlMaXN0KXtvLmVhY2goby5yZWFkeUxpc3QsZnVuY3Rpb24oKXt0aGlzLmNhbGwoZG9jdW1lbnQsbyl9KTtvLnJlYWR5TGlzdD1udWxsfW8oZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpfX19KTt2YXIgeD1mYWxzZTtmdW5jdGlvbiBCKCl7aWYoeCl7cmV0dXJufXg9dHJ1ZTtpZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGFyZ3VtZW50cy5jYWxsZWUsZmFsc2UpO28ucmVhZHkoKX0sZmFsc2UpfWVsc2V7aWYoZG9jdW1lbnQuYXR0YWNoRXZlbnQpe2RvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpe2RvY3VtZW50LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGFyZ3VtZW50cy5jYWxsZWUpO28ucmVhZHkoKX19KTtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmw9PWwudG9wKXsoZnVuY3Rpb24oKXtpZihvLmlzUmVhZHkpe3JldHVybn10cnl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goRSl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybn1vLnJlYWR5KCl9KSgpfX19by5ldmVudC5hZGQobCwibG9hZCIsby5yZWFkeSl9by5lYWNoKCgiYmx1cixmb2N1cyxsb2FkLHJlc2l6ZSxzY3JvbGwsdW5sb2FkLGNsaWNrLGRibGNsaWNrLG1vdXNlZG93bixtb3VzZXVwLG1vdXNlbW92ZSxtb3VzZW92ZXIsbW91c2VvdXQsbW91c2VlbnRlcixtb3VzZWxlYXZlLGNoYW5nZSxzZWxlY3Qsc3VibWl0LGtleWRvd24sa2V5cHJlc3Msa2V5dXAsZXJyb3IiKS5zcGxpdCgiLCIpLGZ1bmN0aW9uKEYsRSl7by5mbltFXT1mdW5jdGlvbihHKXtyZXR1cm4gRz90aGlzLmJpbmQoRSxHKTp0aGlzLnRyaWdnZXIoRSl9fSk7byhsKS5iaW5kKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBFIGluIG8uY2FjaGUpe2lmKEUhPTEmJm8uY2FjaGVbRV0uaGFuZGxlKXtvLmV2ZW50LnJlbW92ZShvLmNhY2hlW0VdLmhhbmRsZS5lbGVtKX19fSk7KGZ1bmN0aW9uKCl7by5zdXBwb3J0PXt9O3ZhciBGPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxHPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSj0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKTtLLnN0eWxlLmRpc3BsYXk9Im5vbmUiO0suaW5uZXJIVE1MPScgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0iL2EiIHN0eWxlPSJjb2xvcjpyZWQ7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41OyI+YTwvYT48c2VsZWN0PjxvcHRpb24+dGV4dDwvb3B0aW9uPjwvc2VsZWN0PjxvYmplY3Q+PHBhcmFtLz48L29iamVjdD4nO3ZhciBIPUsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxFPUsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighSHx8IUgubGVuZ3RofHwhRSl7cmV0dXJufW8uc3VwcG9ydD17bGVhZGluZ1doaXRlc3BhY2U6Sy5maXJzdENoaWxkLm5vZGVUeXBlPT0zLHRib2R5OiFLLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxvYmplY3RBbGw6ISFLLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhSy5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovcmVkLy50ZXN0KEUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpFLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5OkUuc3R5bGUub3BhY2l0eT09PSIwLjUiLGNzc0Zsb2F0OiEhRS5zdHlsZS5jc3NGbG9hdCxzY3JpcHRFdmFsOmZhbHNlLG5vQ2xvbmVFdmVudDp0cnVlLGJveE1vZGVsOm51bGx9O0cudHlwZT0idGV4dC9qYXZhc2NyaXB0Ijt0cnl7Ry5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgid2luZG93LiIrSisiPTE7IikpfWNhdGNoKEkpe31GLmluc2VydEJlZm9yZShHLEYuZmlyc3RDaGlsZCk7aWYobFtKXSl7by5zdXBwb3J0LnNjcmlwdEV2YWw9dHJ1ZTtkZWxldGUgbFtKXX1GLnJlbW92ZUNoaWxkKEcpO2lmKEsuYXR0YWNoRXZlbnQmJksuZmlyZUV2ZW50KXtLLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe28uc3VwcG9ydC5ub0Nsb25lRXZlbnQ9ZmFsc2U7Sy5kZXRhY2hFdmVudCgib25jbGljayIsYXJndW1lbnRzLmNhbGxlZSl9KTtLLmNsb25lTm9kZSh0cnVlKS5maXJlRXZlbnQoIm9uY2xpY2siKX1vKGZ1bmN0aW9uKCl7dmFyIEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7TC5zdHlsZS53aWR0aD1MLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTCk7by5ib3hNb2RlbD1vLnN1cHBvcnQuYm94TW9kZWw9TC5vZmZzZXRXaWR0aD09PTI7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChMKS5zdHlsZS5kaXNwbGF5PSJub25lIn0pfSkoKTt2YXIgdz1vLnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCI7by5wcm9wcz17ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsImZsb2F0Ijp3LGNzc0Zsb2F0Oncsc3R5bGVGbG9hdDp3LHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsdGFiaW5kZXg6InRhYkluZGV4In07by5mbi5leHRlbmQoe19sb2FkOm8uZm4ubG9hZCxsb2FkOmZ1bmN0aW9uKEcsSixLKXtpZih0eXBlb2YgRyE9PSJzdHJpbmciKXtyZXR1cm4gdGhpcy5fbG9hZChHKX12YXIgST1HLmluZGV4T2YoIiAiKTtpZihJPj0wKXt2YXIgRT1HLnNsaWNlKEksRy5sZW5ndGgpO0c9Ry5zbGljZSgwLEkpfXZhciBIPSJHRVQiO2lmKEope2lmKG8uaXNGdW5jdGlvbihKKSl7Sz1KO0o9bnVsbH1lbHNle2lmKHR5cGVvZiBKPT09Im9iamVjdCIpe0o9by5wYXJhbShKKTtIPSJQT1NUIn19fXZhciBGPXRoaXM7by5hamF4KHt1cmw6Ryx0eXBlOkgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Sixjb21wbGV0ZTpmdW5jdGlvbihNLEwpe2lmKEw9PSJzdWNjZXNzInx8TD09Im5vdG1vZGlmaWVkIil7Ri5odG1sKEU/bygiPGRpdi8+IikuYXBwZW5kKE0ucmVzcG9uc2VUZXh0LnJlcGxhY2UoLzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9nLCIiKSkuZmluZChFKTpNLnJlc3BvbnNlVGV4dCl9aWYoSyl7Ri5lYWNoKEssW00ucmVzcG9uc2VUZXh0LEwsTV0pfX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG8ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9vLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fC9zZWxlY3R8dGV4dGFyZWEvaS50ZXN0KHRoaXMubm9kZU5hbWUpfHwvdGV4dHxoaWRkZW58cGFzc3dvcmR8c2VhcmNoL2kudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihFLEYpe3ZhciBHPW8odGhpcykudmFsKCk7cmV0dXJuIEc9PW51bGw/bnVsbDpvLmlzQXJyYXkoRyk/by5tYXAoRyxmdW5jdGlvbihJLEgpe3JldHVybntuYW1lOkYubmFtZSx2YWx1ZTpJfX0pOntuYW1lOkYubmFtZSx2YWx1ZTpHfX0pLmdldCgpfX0pO28uZWFjaCgiYWpheFN0YXJ0LGFqYXhTdG9wLGFqYXhDb21wbGV0ZSxhamF4RXJyb3IsYWpheFN1Y2Nlc3MsYWpheFNlbmQiLnNwbGl0KCIsIiksZnVuY3Rpb24oRSxGKXtvLmZuW0ZdPWZ1bmN0aW9uKEcpe3JldHVybiB0aGlzLmJpbmQoRixHKX19KTt2YXIgcj1lKCk7by5leHRlbmQoe2dldDpmdW5jdGlvbihFLEcsSCxGKXtpZihvLmlzRnVuY3Rpb24oRykpe0g9RztHPW51bGx9cmV0dXJuIG8uYWpheCh7dHlwZToiR0VUIix1cmw6RSxkYXRhOkcsc3VjY2VzczpILGRhdGFUeXBlOkZ9KX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKEUsRil7cmV0dXJuIG8uZ2V0KEUsbnVsbCxGLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihFLEYsRyl7cmV0dXJuIG8uZ2V0KEUsRixHLCJqc29uIil9LHBvc3Q6ZnVuY3Rpb24oRSxHLEgsRil7aWYoby5pc0Z1bmN0aW9uKEcpKXtIPUc7Rz17fX1yZXR1cm4gby5hamF4KHt0eXBlOiJQT1NUIix1cmw6RSxkYXRhOkcsc3VjY2VzczpILGRhdGFUeXBlOkZ9KX0sYWpheFNldHVwOmZ1bmN0aW9uKEUpe28uZXh0ZW5kKG8uYWpheFNldHRpbmdzLEUpfSxhamF4U2V0dGluZ3M6e3VybDpsb2NhdGlvbi5ocmVmLGdsb2JhbDp0cnVlLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6dHJ1ZSxhc3luYzp0cnVlLHhocjpmdW5jdGlvbigpe3JldHVybiBsLkFjdGl2ZVhPYmplY3Q/bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik6bmV3IFhNTEh0dHBSZXF1ZXN0KCl9LGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIixzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0Iix0ZXh0OiJ0ZXh0L3BsYWluIixfZGVmYXVsdDoiKi8qIn19LGxhc3RNb2RpZmllZDp7fSxhamF4OmZ1bmN0aW9uKE0pe009by5leHRlbmQodHJ1ZSxNLG8uZXh0ZW5kKHRydWUse30sby5hamF4U2V0dGluZ3MsTSkpO3ZhciBXLEY9Lz1cPygmfCQpL2csUixWLEc9TS50eXBlLnRvVXBwZXJDYXNlKCk7aWYoTS5kYXRhJiZNLnByb2Nlc3NEYXRhJiZ0eXBlb2YgTS5kYXRhIT09InN0cmluZyIpe00uZGF0YT1vLnBhcmFtKE0uZGF0YSl9aWYoTS5kYXRhVHlwZT09Impzb25wIil7aWYoRz09IkdFVCIpe2lmKCFNLnVybC5tYXRjaChGKSl7TS51cmwrPShNLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsoTS5qc29ucHx8ImNhbGxiYWNrIikrIj0/In19ZWxzZXtpZighTS5kYXRhfHwhTS5kYXRhLm1hdGNoKEYpKXtNLmRhdGE9KE0uZGF0YT9NLmRhdGErIiYiOiIiKSsoTS5qc29ucHx8ImNhbGxiYWNrIikrIj0/In19TS5kYXRhVHlwZT0ianNvbiJ9aWYoTS5kYXRhVHlwZT09Impzb24iJiYoTS5kYXRhJiZNLmRhdGEubWF0Y2goRil8fE0udXJsLm1hdGNoKEYpKSl7Vz0ianNvbnAiK3IrKztpZihNLmRhdGEpe00uZGF0YT0oTS5kYXRhKyIiKS5yZXBsYWNlKEYsIj0iK1crIiQxIil9TS51cmw9TS51cmwucmVwbGFjZShGLCI9IitXKyIkMSIpO00uZGF0YVR5cGU9InNjcmlwdCI7bFtXXT1mdW5jdGlvbihYKXtWPVg7SSgpO0woKTtsW1ddPWc7dHJ5e2RlbGV0ZSBsW1ddfWNhdGNoKFkpe31pZihIKXtILnJlbW92ZUNoaWxkKFQpfX19aWYoTS5kYXRhVHlwZT09InNjcmlwdCImJk0uY2FjaGU9PW51bGwpe00uY2FjaGU9ZmFsc2V9aWYoTS5jYWNoZT09PWZhbHNlJiZHPT0iR0VUIil7dmFyIEU9ZSgpO3ZhciBVPU0udXJsLnJlcGxhY2UoLyhcP3wmKV89Lio/KCZ8JCkvLCIkMV89IitFKyIkMiIpO00udXJsPVUrKChVPT1NLnVybCk/KE0udXJsLm1hdGNoKC9cPy8pPyImIjoiPyIpKyJfPSIrRToiIil9aWYoTS5kYXRhJiZHPT0iR0VUIil7TS51cmwrPShNLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKStNLmRhdGE7TS5kYXRhPW51bGx9aWYoTS5nbG9iYWwmJiFvLmFjdGl2ZSsrKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfXZhciBRPS9eKFx3KzopP1wvXC8oW15cLz8jXSspLy5leGVjKE0udXJsKTtpZihNLmRhdGFUeXBlPT0ic2NyaXB0IiYmRz09IkdFVCImJlEmJihRWzFdJiZRWzFdIT1sb2NhdGlvbi5wcm90b2NvbHx8UVsyXSE9bG9jYXRpb24uaG9zdCkpe3ZhciBIPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07dmFyIFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7VC5zcmM9TS51cmw7aWYoTS5zY3JpcHRDaGFyc2V0KXtULmNoYXJzZXQ9TS5zY3JpcHRDaGFyc2V0fWlmKCFXKXt2YXIgTz1mYWxzZTtULm9ubG9hZD1ULm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKCFPJiYoIXRoaXMucmVhZHlTdGF0ZXx8dGhpcy5yZWFkeVN0YXRlPT0ibG9hZGVkInx8dGhpcy5yZWFkeVN0YXRlPT0iY29tcGxldGUiKSl7Tz10cnVlO0koKTtMKCk7VC5vbmxvYWQ9VC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDtILnJlbW92ZUNoaWxkKFQpfX19SC5hcHBlbmRDaGlsZChUKTtyZXR1cm4gZ312YXIgSz1mYWxzZTt2YXIgSj1NLnhocigpO2lmKE0udXNlcm5hbWUpe0oub3BlbihHLE0udXJsLE0uYXN5bmMsTS51c2VybmFtZSxNLnBhc3N3b3JkKX1lbHNle0oub3BlbihHLE0udXJsLE0uYXN5bmMpfXRyeXtpZihNLmRhdGEpe0ouc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixNLmNvbnRlbnRUeXBlKX1pZihNLmlmTW9kaWZpZWQpe0ouc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLG8ubGFzdE1vZGlmaWVkW00udXJsXXx8IlRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UIil9Si5zZXRSZXF1ZXN0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKTtKLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsTS5kYXRhVHlwZSYmTS5hY2NlcHRzW00uZGF0YVR5cGVdP00uYWNjZXB0c1tNLmRhdGFUeXBlXSsiLCAqLyoiOk0uYWNjZXB0cy5fZGVmYXVsdCl9Y2F0Y2goUyl7fWlmKE0uYmVmb3JlU2VuZCYmTS5iZWZvcmVTZW5kKEosTSk9PT1mYWxzZSl7aWYoTS5nbG9iYWwmJiEtLW8uYWN0aXZlKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9Si5hYm9ydCgpO3JldHVybiBmYWxzZX1pZihNLmdsb2JhbCl7by5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW0osTV0pfXZhciBOPWZ1bmN0aW9uKFgpe2lmKEoucmVhZHlTdGF0ZT09MCl7aWYoUCl7Y2xlYXJJbnRlcnZhbChQKTtQPW51bGw7aWYoTS5nbG9iYWwmJiEtLW8uYWN0aXZlKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9fX1lbHNle2lmKCFLJiZKJiYoSi5yZWFkeVN0YXRlPT00fHxYPT0idGltZW91dCIpKXtLPXRydWU7aWYoUCl7Y2xlYXJJbnRlcnZhbChQKTtQPW51bGx9Uj1YPT0idGltZW91dCI/InRpbWVvdXQiOiFvLmh0dHBTdWNjZXNzKEopPyJlcnJvciI6TS5pZk1vZGlmaWVkJiZvLmh0dHBOb3RNb2RpZmllZChKLE0udXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjtpZihSPT0ic3VjY2VzcyIpe3RyeXtWPW8uaHR0cERhdGEoSixNLmRhdGFUeXBlLE0pfWNhdGNoKFope1I9InBhcnNlcmVycm9yIn19aWYoUj09InN1Y2Nlc3MiKXt2YXIgWTt0cnl7WT1KLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIil9Y2F0Y2goWil7fWlmKE0uaWZNb2RpZmllZCYmWSl7by5sYXN0TW9kaWZpZWRbTS51cmxdPVl9aWYoIVcpe0koKX19ZWxzZXtvLmhhbmRsZUVycm9yKE0sSixSKX1MKCk7aWYoWCl7Si5hYm9ydCgpfWlmKE0uYXN5bmMpe0o9bnVsbH19fX07aWYoTS5hc3luYyl7dmFyIFA9c2V0SW50ZXJ2YWwoTiwxMyk7aWYoTS50aW1lb3V0PjApe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihKJiYhSyl7TigidGltZW91dCIpfX0sTS50aW1lb3V0KX19dHJ5e0ouc2VuZChNLmRhdGEpfWNhdGNoKFMpe28uaGFuZGxlRXJyb3IoTSxKLG51bGwsUyl9aWYoIU0uYXN5bmMpe04oKX1mdW5jdGlvbiBJKCl7aWYoTS5zdWNjZXNzKXtNLnN1Y2Nlc3MoVixSKX1pZihNLmdsb2JhbCl7by5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW0osTV0pfX1mdW5jdGlvbiBMKCl7aWYoTS5jb21wbGV0ZSl7TS5jb21wbGV0ZShKLFIpfWlmKE0uZ2xvYmFsKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW0osTV0pfWlmKE0uZ2xvYmFsJiYhLS1vLmFjdGl2ZSl7by5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfX1yZXR1cm4gSn0saGFuZGxlRXJyb3I6ZnVuY3Rpb24oRixILEUsRyl7aWYoRi5lcnJvcil7Ri5lcnJvcihILEUsRyl9aWYoRi5nbG9iYWwpe28uZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbSCxGLEddKX19LGFjdGl2ZTowLGh0dHBTdWNjZXNzOmZ1bmN0aW9uKEYpe3RyeXtyZXR1cm4gIUYuc3RhdHVzJiZsb2NhdGlvbi5wcm90b2NvbD09ImZpbGU6Inx8KEYuc3RhdHVzPj0yMDAmJkYuc3RhdHVzPDMwMCl8fEYuc3RhdHVzPT0zMDR8fEYuc3RhdHVzPT0xMjIzfWNhdGNoKEUpe31yZXR1cm4gZmFsc2V9LGh0dHBOb3RNb2RpZmllZDpmdW5jdGlvbihHLEUpe3RyeXt2YXIgSD1HLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7cmV0dXJuIEcuc3RhdHVzPT0zMDR8fEg9PW8ubGFzdE1vZGlmaWVkW0VdfWNhdGNoKEYpe31yZXR1cm4gZmFsc2V9LGh0dHBEYXRhOmZ1bmN0aW9uKEosSCxHKXt2YXIgRj1KLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSxFPUg9PSJ4bWwifHwhSCYmRiYmRi5pbmRleE9mKCJ4bWwiKT49MCxJPUU/Si5yZXNwb25zZVhNTDpKLnJlc3BvbnNlVGV4dDtpZihFJiZJLmRvY3VtZW50RWxlbWVudC50YWdOYW1lPT0icGFyc2VyZXJyb3IiKXt0aHJvdyJwYXJzZXJlcnJvciJ9aWYoRyYmRy5kYXRhRmlsdGVyKXtJPUcuZGF0YUZpbHRlcihJLEgpfWlmKHR5cGVvZiBJPT09InN0cmluZyIpe2lmKEg9PSJzY3JpcHQiKXtvLmdsb2JhbEV2YWwoSSl9aWYoSD09Impzb24iKXtJPWxbImV2YWwiXSgiKCIrSSsiKSIpfX1yZXR1cm4gSX0scGFyYW06ZnVuY3Rpb24oRSl7dmFyIEc9W107ZnVuY3Rpb24gSChJLEope0dbRy5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChJKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEopfWlmKG8uaXNBcnJheShFKXx8RS5qcXVlcnkpe28uZWFjaChFLGZ1bmN0aW9uKCl7SCh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KX1lbHNle2Zvcih2YXIgRiBpbiBFKXtpZihvLmlzQXJyYXkoRVtGXSkpe28uZWFjaChFW0ZdLGZ1bmN0aW9uKCl7SChGLHRoaXMpfSl9ZWxzZXtIKEYsby5pc0Z1bmN0aW9uKEVbRl0pP0VbRl0oKTpFW0ZdKX19fXJldHVybiBHLmpvaW4oIiYiKS5yZXBsYWNlKC8lMjAvZywiKyIpfX0pO3ZhciBtPXt9LG4sZD1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXTtmdW5jdGlvbiB0KEYsRSl7dmFyIEc9e307by5lYWNoKGQuY29uY2F0LmFwcGx5KFtdLGQuc2xpY2UoMCxFKSksZnVuY3Rpb24oKXtHW3RoaXNdPUZ9KTtyZXR1cm4gR31vLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihKLEwpe2lmKEope3JldHVybiB0aGlzLmFuaW1hdGUodCgic2hvdyIsMyksSixMKX1lbHNle2Zvcih2YXIgSD0wLEY9dGhpcy5sZW5ndGg7SDxGO0grKyl7dmFyIEU9by5kYXRhKHRoaXNbSF0sIm9sZGRpc3BsYXkiKTt0aGlzW0hdLnN0eWxlLmRpc3BsYXk9RXx8IiI7aWYoby5jc3ModGhpc1tIXSwiZGlzcGxheSIpPT09Im5vbmUiKXt2YXIgRz10aGlzW0hdLnRhZ05hbWUsSztpZihtW0ddKXtLPW1bR119ZWxzZXt2YXIgST1vKCI8IitHKyIgLz4iKS5hcHBlbmRUbygiYm9keSIpO0s9SS5jc3MoImRpc3BsYXkiKTtpZihLPT09Im5vbmUiKXtLPSJibG9jayJ9SS5yZW1vdmUoKTttW0ddPUt9by5kYXRhKHRoaXNbSF0sIm9sZGRpc3BsYXkiLEspfX1mb3IodmFyIEg9MCxGPXRoaXMubGVuZ3RoO0g8RjtIKyspe3RoaXNbSF0uc3R5bGUuZGlzcGxheT1vLmRhdGEodGhpc1tIXSwib2xkZGlzcGxheSIpfHwiIn1yZXR1cm4gdGhpc319LGhpZGU6ZnVuY3Rpb24oSCxJKXtpZihIKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQoImhpZGUiLDMpLEgsSSl9ZWxzZXtmb3IodmFyIEc9MCxGPXRoaXMubGVuZ3RoO0c8RjtHKyspe3ZhciBFPW8uZGF0YSh0aGlzW0ddLCJvbGRkaXNwbGF5Iik7aWYoIUUmJkUhPT0ibm9uZSIpe28uZGF0YSh0aGlzW0ddLCJvbGRkaXNwbGF5IixvLmNzcyh0aGlzW0ddLCJkaXNwbGF5IikpfX1mb3IodmFyIEc9MCxGPXRoaXMubGVuZ3RoO0c8RjtHKyspe3RoaXNbR10uc3R5bGUuZGlzcGxheT0ibm9uZSJ9cmV0dXJuIHRoaXN9fSxfdG9nZ2xlOm8uZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihHLEYpe3ZhciBFPXR5cGVvZiBHPT09ImJvb2xlYW4iO3JldHVybiBvLmlzRnVuY3Rpb24oRykmJm8uaXNGdW5jdGlvbihGKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOkc9PW51bGx8fEU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIEg9RT9HOm8odGhpcykuaXMoIjpoaWRkZW4iKTtvKHRoaXMpW0g/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZSh0KCJ0b2dnbGUiLDMpLEcsRil9LGZhZGVUbzpmdW5jdGlvbihFLEcsRil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh7b3BhY2l0eTpHfSxFLEYpfSxhbmltYXRlOmZ1bmN0aW9uKEksRixILEcpe3ZhciBFPW8uc3BlZWQoRixILEcpO3JldHVybiB0aGlzW0UucXVldWU9PT1mYWxzZT8iZWFjaCI6InF1ZXVlIl0oZnVuY3Rpb24oKXt2YXIgSz1vLmV4dGVuZCh7fSxFKSxNLEw9dGhpcy5ub2RlVHlwZT09MSYmbyh0aGlzKS5pcygiOmhpZGRlbiIpLEo9dGhpcztmb3IoTSBpbiBJKXtpZihJW01dPT0iaGlkZSImJkx8fElbTV09PSJzaG93IiYmIUwpe3JldHVybiBLLmNvbXBsZXRlLmNhbGwodGhpcyl9aWYoKE09PSJoZWlnaHQifHxNPT0id2lkdGgiKSYmdGhpcy5zdHlsZSl7Sy5kaXNwbGF5PW8uY3NzKHRoaXMsImRpc3BsYXkiKTtLLm92ZXJmbG93PXRoaXMuc3R5bGUub3ZlcmZsb3d9fWlmKEsub3ZlcmZsb3chPW51bGwpe3RoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiJ9Sy5jdXJBbmltPW8uZXh0ZW5kKHt9LEkpO28uZWFjaChJLGZ1bmN0aW9uKE8sUyl7dmFyIFI9bmV3IG8uZngoSixLLE8pO2lmKC90b2dnbGV8c2hvd3xoaWRlLy50ZXN0KFMpKXtSW1M9PSJ0b2dnbGUiP0w/InNob3ciOiJoaWRlIjpTXShJKX1lbHNle3ZhciBRPVMudG9TdHJpbmcoKS5tYXRjaCgvXihbKy1dPSk/KFtcZCstLl0rKSguKikkLyksVD1SLmN1cih0cnVlKXx8MDtpZihRKXt2YXIgTj1wYXJzZUZsb2F0KFFbMl0pLFA9UVszXXx8InB4IjtpZihQIT0icHgiKXtKLnN0eWxlW09dPShOfHwxKStQO1Q9KChOfHwxKS9SLmN1cih0cnVlKSkqVDtKLnN0eWxlW09dPVQrUH1pZihRWzFdKXtOPSgoUVsxXT09Ii09Ij8tMToxKSpOKStUfVIuY3VzdG9tKFQsTixQKX1lbHNle1IuY3VzdG9tKFQsUywiIil9fX0pO3JldHVybiB0cnVlfSl9LHN0b3A6ZnVuY3Rpb24oRixFKXt2YXIgRz1vLnRpbWVycztpZihGKXt0aGlzLnF1ZXVlKFtdKX10aGlzLmVhY2goZnVuY3Rpb24oKXtmb3IodmFyIEg9Ry5sZW5ndGgtMTtIPj0wO0gtLSl7aWYoR1tIXS5lbGVtPT10aGlzKXtpZihFKXtHW0hdKHRydWUpfUcuc3BsaWNlKEgsMSl9fX0pO2lmKCFFKXt0aGlzLmRlcXVldWUoKX1yZXR1cm4gdGhpc319KTtvLmVhY2goe3NsaWRlRG93bjp0KCJzaG93IiwxKSxzbGlkZVVwOnQoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOnQoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9fSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oRyxIKXtyZXR1cm4gdGhpcy5hbmltYXRlKEYsRyxIKX19KTtvLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oRyxILEYpe3ZhciBFPXR5cGVvZiBHPT09Im9iamVjdCI/Rzp7Y29tcGxldGU6Rnx8IUYmJkh8fG8uaXNGdW5jdGlvbihHKSYmRyxkdXJhdGlvbjpHLGVhc2luZzpGJiZIfHxIJiYhby5pc0Z1bmN0aW9uKEgpJiZIfTtFLmR1cmF0aW9uPW8uZngub2ZmPzA6dHlwZW9mIEUuZHVyYXRpb249PT0ibnVtYmVyIj9FLmR1cmF0aW9uOm8uZnguc3BlZWRzW0UuZHVyYXRpb25dfHxvLmZ4LnNwZWVkcy5fZGVmYXVsdDtFLm9sZD1FLmNvbXBsZXRlO0UuY29tcGxldGU9ZnVuY3Rpb24oKXtpZihFLnF1ZXVlIT09ZmFsc2Upe28odGhpcykuZGVxdWV1ZSgpfWlmKG8uaXNGdW5jdGlvbihFLm9sZCkpe0Uub2xkLmNhbGwodGhpcyl9fTtyZXR1cm4gRX0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oRyxILEUsRil7cmV0dXJuIEUrRipHfSxzd2luZzpmdW5jdGlvbihHLEgsRSxGKXtyZXR1cm4oKC1NYXRoLmNvcyhHKk1hdGguUEkpLzIpKzAuNSkqRitFfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKEYsRSxHKXt0aGlzLm9wdGlvbnM9RTt0aGlzLmVsZW09Rjt0aGlzLnByb3A9RztpZighRS5vcmlnKXtFLm9yaWc9e319fX0pO28uZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuc3RlcCl7dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyl9KG8uZnguc3RlcFt0aGlzLnByb3BdfHxvLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKCh0aGlzLnByb3A9PSJoZWlnaHQifHx0aGlzLnByb3A9PSJ3aWR0aCIpJiZ0aGlzLmVsZW0uc3R5bGUpe3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fSxjdXI6ZnVuY3Rpb24oRil7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpe3JldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXX12YXIgRT1wYXJzZUZsb2F0KG8uY3NzKHRoaXMuZWxlbSx0aGlzLnByb3AsRikpO3JldHVybiBFJiZFPi0xMDAwMD9FOnBhcnNlRmxvYXQoby5jdXJDU1ModGhpcy5lbGVtLHRoaXMucHJvcCkpfHwwfSxjdXN0b206ZnVuY3Rpb24oSSxILEcpe3RoaXMuc3RhcnRUaW1lPWUoKTt0aGlzLnN0YXJ0PUk7dGhpcy5lbmQ9SDt0aGlzLnVuaXQ9R3x8dGhpcy51bml0fHwicHgiO3RoaXMubm93PXRoaXMuc3RhcnQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0wO3ZhciBFPXRoaXM7ZnVuY3Rpb24gRihKKXtyZXR1cm4gRS5zdGVwKEopfUYuZWxlbT10aGlzLmVsZW07aWYoRigpJiZvLnRpbWVycy5wdXNoKEYpJiYhbil7bj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3ZhciBLPW8udGltZXJzO2Zvcih2YXIgSj0wO0o8Sy5sZW5ndGg7SisrKXtpZighS1tKXSgpKXtLLnNwbGljZShKLS0sMSl9fWlmKCFLLmxlbmd0aCl7Y2xlYXJJbnRlcnZhbChuKTtuPWd9fSwxMyl9fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1vLmF0dHIodGhpcy5lbGVtLnN0eWxlLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLnNob3c9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlzLnByb3A9PSJ3aWR0aCJ8fHRoaXMucHJvcD09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO28odGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPW8uYXR0cih0aGlzLmVsZW0uc3R5bGUsdGhpcy5wcm9wKTt0aGlzLm9wdGlvbnMuaGlkZT10cnVlO3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oSCl7dmFyIEc9ZSgpO2lmKEh8fEc+PXRoaXMub3B0aW9ucy5kdXJhdGlvbit0aGlzLnN0YXJ0VGltZSl7dGhpcy5ub3c9dGhpcy5lbmQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0xO3RoaXMudXBkYXRlKCk7dGhpcy5vcHRpb25zLmN1ckFuaW1bdGhpcy5wcm9wXT10cnVlO3ZhciBFPXRydWU7Zm9yKHZhciBGIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKXtpZih0aGlzLm9wdGlvbnMuY3VyQW5pbVtGXSE9PXRydWUpe0U9ZmFsc2V9fWlmKEUpe2lmKHRoaXMub3B0aW9ucy5kaXNwbGF5IT1udWxsKXt0aGlzLmVsZW0uc3R5bGUub3ZlcmZsb3c9dGhpcy5vcHRpb25zLm92ZXJmbG93O3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PXRoaXMub3B0aW9ucy5kaXNwbGF5O2lmKG8uY3NzKHRoaXMuZWxlbSwiZGlzcGxheSIpPT0ibm9uZSIpe3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fWlmKHRoaXMub3B0aW9ucy5oaWRlKXtvKHRoaXMuZWxlbSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5oaWRlfHx0aGlzLm9wdGlvbnMuc2hvdyl7Zm9yKHZhciBJIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKXtvLmF0dHIodGhpcy5lbGVtLnN0eWxlLEksdGhpcy5vcHRpb25zLm9yaWdbSV0pfX10aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle3ZhciBKPUctdGhpcy5zdGFydFRpbWU7dGhpcy5zdGF0ZT1KL3RoaXMub3B0aW9ucy5kdXJhdGlvbjt0aGlzLnBvcz1vLmVhc2luZ1t0aGlzLm9wdGlvbnMuZWFzaW5nfHwoby5lYXNpbmcuc3dpbmc/InN3aW5nIjoibGluZWFyIildKHRoaXMuc3RhdGUsSiwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTt0aGlzLm5vdz10aGlzLnN0YXJ0KygodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpO3RoaXMudXBkYXRlKCl9cmV0dXJuIHRydWV9fTtvLmV4dGVuZChvLmZ4LHtzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihFKXtvLmF0dHIoRS5lbGVtLnN0eWxlLCJvcGFjaXR5IixFLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKEUpe2lmKEUuZWxlbS5zdHlsZSYmRS5lbGVtLnN0eWxlW0UucHJvcF0hPW51bGwpe0UuZWxlbS5zdHlsZVtFLnByb3BdPUUubm93K0UudW5pdH1lbHNle0UuZWxlbVtFLnByb3BdPUUubm93fX19fSk7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7by5mbi5vZmZzZXQ9ZnVuY3Rpb24oKXtpZighdGhpc1swXSl7cmV0dXJue3RvcDowLGxlZnQ6MH19aWYodGhpc1swXT09PXRoaXNbMF0ub3duZXJEb2N1bWVudC5ib2R5KXtyZXR1cm4gby5vZmZzZXQuYm9keU9mZnNldCh0aGlzWzBdKX12YXIgRz10aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEo9dGhpc1swXS5vd25lckRvY3VtZW50LEY9Si5ib2R5LEU9Si5kb2N1bWVudEVsZW1lbnQsTD1FLmNsaWVudFRvcHx8Ri5jbGllbnRUb3B8fDAsSz1FLmNsaWVudExlZnR8fEYuY2xpZW50TGVmdHx8MCxJPUcudG9wKyhzZWxmLnBhZ2VZT2Zmc2V0fHxvLmJveE1vZGVsJiZFLnNjcm9sbFRvcHx8Ri5zY3JvbGxUb3ApLUwsSD1HLmxlZnQrKHNlbGYucGFnZVhPZmZzZXR8fG8uYm94TW9kZWwmJkUuc2Nyb2xsTGVmdHx8Ri5zY3JvbGxMZWZ0KS1LO3JldHVybnt0b3A6SSxsZWZ0Okh9fX1lbHNle28uZm4ub2Zmc2V0PWZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pe3JldHVybnt0b3A6MCxsZWZ0OjB9fWlmKHRoaXNbMF09PT10aGlzWzBdLm93bmVyRG9jdW1lbnQuYm9keSl7cmV0dXJuIG8ub2Zmc2V0LmJvZHlPZmZzZXQodGhpc1swXSl9by5vZmZzZXQuaW5pdGlhbGl6ZWR8fG8ub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgSj10aGlzWzBdLEc9Si5vZmZzZXRQYXJlbnQsRj1KLE89Si5vd25lckRvY3VtZW50LE0sSD1PLmRvY3VtZW50RWxlbWVudCxLPU8uYm9keSxMPU8uZGVmYXVsdFZpZXcsRT1MLmdldENvbXB1dGVkU3R5bGUoSixudWxsKSxOPUoub2Zmc2V0VG9wLEk9Si5vZmZzZXRMZWZ0O3doaWxlKChKPUoucGFyZW50Tm9kZSkmJkohPT1LJiZKIT09SCl7TT1MLmdldENvbXB1dGVkU3R5bGUoSixudWxsKTtOLT1KLnNjcm9sbFRvcCxJLT1KLnNjcm9sbExlZnQ7aWYoSj09PUcpe04rPUoub2Zmc2V0VG9wLEkrPUoub2Zmc2V0TGVmdDtpZihvLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYhKG8ub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzJiYvXnQoYWJsZXxkfGgpJC9pLnRlc3QoSi50YWdOYW1lKSkpe04rPXBhcnNlSW50KE0uYm9yZGVyVG9wV2lkdGgsMTApfHwwLEkrPXBhcnNlSW50KE0uYm9yZGVyTGVmdFdpZHRoLDEwKXx8MH1GPUcsRz1KLm9mZnNldFBhcmVudH1pZihvLm9mZnNldC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUmJk0ub3ZlcmZsb3chPT0idmlzaWJsZSIpe04rPXBhcnNlSW50KE0uYm9yZGVyVG9wV2lkdGgsMTApfHwwLEkrPXBhcnNlSW50KE0uYm9yZGVyTGVmdFdpZHRoLDEwKXx8MH1FPU19aWYoRS5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fEUucG9zaXRpb249PT0ic3RhdGljIil7Tis9Sy5vZmZzZXRUb3AsSSs9Sy5vZmZzZXRMZWZ0fWlmKEUucG9zaXRpb249PT0iZml4ZWQiKXtOKz1NYXRoLm1heChILnNjcm9sbFRvcCxLLnNjcm9sbFRvcCksSSs9TWF0aC5tYXgoSC5zY3JvbGxMZWZ0LEsuc2Nyb2xsTGVmdCl9cmV0dXJue3RvcDpOLGxlZnQ6SX19fW8ub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5pbml0aWFsaXplZCl7cmV0dXJufXZhciBMPWRvY3VtZW50LmJvZHksRj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxILEcsTixJLE0sRSxKPUwuc3R5bGUubWFyZ2luVG9wLEs9JzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OyI+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPic7TT17cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9O2ZvcihFIGluIE0pe0Yuc3R5bGVbRV09TVtFXX1GLmlubmVySFRNTD1LO0wuaW5zZXJ0QmVmb3JlKEYsTC5maXJzdENoaWxkKTtIPUYuZmlyc3RDaGlsZCxHPUguZmlyc3RDaGlsZCxJPUgubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkO3RoaXMuZG9lc05vdEFkZEJvcmRlcj0oRy5vZmZzZXRUb3AhPT01KTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPShJLm9mZnNldFRvcD09PTUpO0guc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsSC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO3RoaXMuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlPShHLm9mZnNldFRvcD09PS01KTtMLnN0eWxlLm1hcmdpblRvcD0iMXB4Ijt0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PShMLm9mZnNldFRvcD09PTApO0wuc3R5bGUubWFyZ2luVG9wPUo7TC5yZW1vdmVDaGlsZChGKTt0aGlzLmluaXRpYWxpemVkPXRydWV9LGJvZHlPZmZzZXQ6ZnVuY3Rpb24oRSl7by5vZmZzZXQuaW5pdGlhbGl6ZWR8fG8ub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgRz1FLm9mZnNldFRvcCxGPUUub2Zmc2V0TGVmdDtpZihvLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Rys9cGFyc2VJbnQoby5jdXJDU1MoRSwibWFyZ2luVG9wIix0cnVlKSwxMCl8fDAsRis9cGFyc2VJbnQoby5jdXJDU1MoRSwibWFyZ2luTGVmdCIsdHJ1ZSksMTApfHwwfXJldHVybnt0b3A6RyxsZWZ0OkZ9fX07by5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEk9MCxIPTAsRjtpZih0aGlzWzBdKXt2YXIgRz10aGlzLm9mZnNldFBhcmVudCgpLEo9dGhpcy5vZmZzZXQoKSxFPS9eYm9keXxodG1sJC9pLnRlc3QoR1swXS50YWdOYW1lKT97dG9wOjAsbGVmdDowfTpHLm9mZnNldCgpO0oudG9wLT1qKHRoaXMsIm1hcmdpblRvcCIpO0oubGVmdC09aih0aGlzLCJtYXJnaW5MZWZ0Iik7RS50b3ArPWooRywiYm9yZGVyVG9wV2lkdGgiKTtFLmxlZnQrPWooRywiYm9yZGVyTGVmdFdpZHRoIik7Rj17dG9wOkoudG9wLUUudG9wLGxlZnQ6Si5sZWZ0LUUubGVmdH19cmV0dXJuIEZ9LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBFPXRoaXNbMF0ub2Zmc2V0UGFyZW50fHxkb2N1bWVudC5ib2R5O3doaWxlKEUmJighL15ib2R5fGh0bWwkL2kudGVzdChFLnRhZ05hbWUpJiZvLmNzcyhFLCJwb3NpdGlvbiIpPT0ic3RhdGljIikpe0U9RS5vZmZzZXRQYXJlbnR9cmV0dXJuIG8oRSl9fSk7by5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKEYsRSl7dmFyIEc9InNjcm9sbCIrRTtvLmZuW0ddPWZ1bmN0aW9uKEgpe2lmKCF0aGlzWzBdKXtyZXR1cm4gbnVsbH1yZXR1cm4gSCE9PWc/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09bHx8dGhpcz09ZG9jdW1lbnQ/bC5zY3JvbGxUbyghRj9IOm8obCkuc2Nyb2xsTGVmdCgpLEY/SDpvKGwpLnNjcm9sbFRvcCgpKTp0aGlzW0ddPUh9KTp0aGlzWzBdPT1sfHx0aGlzWzBdPT1kb2N1bWVudD9zZWxmW0Y/InBhZ2VZT2Zmc2V0IjoicGFnZVhPZmZzZXQiXXx8by5ib3hNb2RlbCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W0ddfHxkb2N1bWVudC5ib2R5W0ddOnRoaXNbMF1bR119fSk7by5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihJLEcpe3ZhciBFPUk/IkxlZnQiOiJUb3AiLEg9ST8iUmlnaHQiOiJCb3R0b20iLEY9Ry50b0xvd2VyQ2FzZSgpO28uZm5bImlubmVyIitHXT1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdP28uY3NzKHRoaXNbMF0sRixmYWxzZSwicGFkZGluZyIpOm51bGx9O28uZm5bIm91dGVyIitHXT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpc1swXT9vLmNzcyh0aGlzWzBdLEYsZmFsc2UsSz8ibWFyZ2luIjoiYm9yZGVyIik6bnVsbH07dmFyIEo9Ry50b0xvd2VyQ2FzZSgpO28uZm5bSl09ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXNbMF09PWw/ZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrR118fGRvY3VtZW50LmJvZHlbImNsaWVudCIrR106dGhpc1swXT09ZG9jdW1lbnQ/TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK0ddLGRvY3VtZW50LmJvZHlbInNjcm9sbCIrR10sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK0ddLGRvY3VtZW50LmJvZHlbIm9mZnNldCIrR10sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK0ddKTpLPT09Zz8odGhpcy5sZW5ndGg/by5jc3ModGhpc1swXSxKKTpudWxsKTp0aGlzLmNzcyhKLHR5cGVvZiBLPT09InN0cmluZyI/SzpLKyJweCIpfX0pfSkoKTs=]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/lightbox/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/lightbox/css/lightbox.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I2xpZ2h0Ym94ewlwb3NpdGlvbjogYWJzb2x1dGU7CWxlZnQ6IDA7IHdpZHRoOiAxMDAlOyB6LWluZGV4OiAxMDA7IHRleHQtYWxpZ246IGNlbnRlcjsgbGluZS1oZWlnaHQ6IDA7fQojbGlnaHRib3ggaW1neyB3aWR0aDogYXV0bzsgaGVpZ2h0OiBhdXRvO30KI2xpZ2h0Ym94IGEgaW1neyBib3JkZXI6IG5vbmU7IH0KCiNvdXRlckltYWdlQ29udGFpbmVyeyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IHdpZHRoOiAyNTBweDsgaGVpZ2h0OiAyNTBweDsgbWFyZ2luOiAwIGF1dG87IH0KI2ltYWdlQ29udGFpbmVyeyBwYWRkaW5nOiAxMHB4OyB9CgojbG9hZGluZ3sgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDQwJTsgbGVmdDogMCU7IGhlaWdodDogMjUlOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogY2VudGVyOyBsaW5lLWhlaWdodDogMDsgfQojaG92ZXJOYXZ7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyB6LWluZGV4OiAxMDsgfQojaW1hZ2VDb250YWluZXI+I2hvdmVyTmF2eyBsZWZ0OiAwO30KI2hvdmVyTmF2IGF7IG91dGxpbmU6IG5vbmU7fQoKI3ByZXZMaW5rLCAjbmV4dExpbmt7IHdpZHRoOiA0OSU7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxBQUFBKTsgLyogVHJpY2sgSUUgaW50byBzaG93aW5nIGhvdmVyICovIGRpc3BsYXk6IGJsb2NrOyB9CiNwcmV2TGluayB7IGxlZnQ6IDA7IGZsb2F0OiBsZWZ0O30KI25leHRMaW5rIHsgcmlnaHQ6IDA7IGZsb2F0OiByaWdodDt9CiNwcmV2TGluazpob3ZlciwgI3ByZXZMaW5rOnZpc2l0ZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2VzL3ByZXZsYWJlbC5naWYpIGxlZnQgMTUlIG5vLXJlcGVhdDsgfQojbmV4dExpbms6aG92ZXIsICNuZXh0TGluazp2aXNpdGVkOmhvdmVyIHsgYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9uZXh0bGFiZWwuZ2lmKSByaWdodCAxNSUgbm8tcmVwZWF0OyB9CgojaW1hZ2VEYXRhQ29udGFpbmVyeyBmb250OiAxMHB4IFZlcmRhbmEsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgbWFyZ2luOiAwIGF1dG87IGxpbmUtaGVpZ2h0OiAxLjRlbTsgb3ZlcmZsb3c6IGF1dG87IHdpZHRoOiAxMDAlCTsgfQoKI2ltYWdlRGF0YXsJcGFkZGluZzowIDEwcHg7IGNvbG9yOiAjNjY2OyB9CiNpbWFnZURhdGEgI2ltYWdlRGV0YWlsc3sgd2lkdGg6IDcwJTsgZmxvYXQ6IGxlZnQ7IHRleHQtYWxpZ246IGxlZnQ7IH0JCiNpbWFnZURhdGEgI2NhcHRpb257IGZvbnQtd2VpZ2h0OiBib2xkOwl9CiNpbWFnZURhdGEgI251bWJlckRpc3BsYXl7IGRpc3BsYXk6IGJsb2NrOyBjbGVhcjogbGVmdDsgcGFkZGluZy1ib3R0b206IDEuMGVtOwl9CQkJCiNpbWFnZURhdGEgI2JvdHRvbU5hdkNsb3NleyB3aWR0aDogNjZweDsgZmxvYXQ6IHJpZ2h0OyAgcGFkZGluZy1ib3R0b206IDAuN2VtOyBvdXRsaW5lOiBub25lO30JIAkKCiNvdmVybGF5eyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgei1pbmRleDogOTA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOyB9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/lightbox/images/bullet.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhBgAGAIAAADs7O1paWiH5BAAAAAAALAAAAAAGAAYAAAIIRB6Gy816QAEAOw==]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/close.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGgAaALMJAHt7e8jIyJycnPT09JiYmL29vWVlZd7e3lpaWv///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAAaABoAAASLMEl5pr0YH1PzDZxmIEjnJQUZThtJmljqrsnovpl8r8HtwigfbqKbmYq/mDCEHCp9AIKwdApOd8DcVZX1NEmA7kmwHFQxA5tPcLYcANtCO9HaIuTV+k6IzxymAgNwPn1uU3h6LoV0h25qiiyNF39CAXSPJIuRPgYUj5qGRiw2oJNckwaWcxticywWEQA7]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/closelabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhQgAWAOYAAMDAwMHBwZ2dnVlZWdLS0oODg6+vr/X19eTk5FBQULi4uIyMjJSUlFRUVFZWVtzc3FJSUsnJyVFRUVhYWFVVVezs7FNTU/b29v39/erq6vr6+qampldXV6KiokxMTE9PT2ZmZvf3993d3czMzGBgYHt7e6Ghofz8/PDw8N7e3mxsbLW1tfv7+5WVlc3NzcrKynh4eOvr60tLS+Dg4F9fX7m5ud/f37S0tIaGhnBwcGNjY+Xl5ZKSkoiIiKmpqW5ubpeXl29vb9XV1Y6Oju3t7WVlZXZ2dpiYmG1tbXx8fO/v7+fn57GxsbOzs/Hx8Xl5eVpaWmRkZE1NTXNzc2dnZ5aWloeHh+Pj405OTmlpadvb23p6ev////7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABCABYAAAf/gFyCg4SFhoeIiYqLjI2Oj4xdkpOUlZaXl5BcJ42Ynp+YkZJcLEdCXJZcIwIaqKCvoKJdIUAeUSKuXYIuNB5VF5QVWgiwXQjDlwdaWrqLo00yAxZFWq6qJA0DHj6SBAtb4AsEXQBbzJUABeBbBQCUCusFL1wB6+uDoxlbHwMJVDaCRtCwMAALDhRdImxZEEFLhAIGyJmrZGALAwJaCDDYElGigYwbLtDjGKBkAHz5SiQY0EDFDBfYBkixEgJVgQIHJuWUeE4Sgi0CKgmYOJSSoHoPDhmtUIIfBSTYJiToIbKLli3uLJXrybPSVQVdKirYeXRLUkOVuMRIAmGAAw4D/yAMqSlp6yW7k4paAtqlgrotGxCUbSGgsAKURlEYoTBgQoMOrSbhRTcx75ZLfLscAPDN7EjChhFP4qIkCGOWDHRNIoD1bmVJ8MZRYp1VMseRZwulnTElGwUHcU1gcHXg5k5jOSdbzWyZmOZJQHErHZ1ChQRpWUA4mAChw3BJChk6LLBgM0cA6JlVvJhxI9iw7DdsOVnPgMkARARRB3E9AYwrLziwnQTCueJNPOOUY09W6ayzQG0NgnPYSPZ4Zo0IIEAARQIlZCBIDQJOIEEHJ1ByjHOvnHjJMjlFwsUDOqzkXwyoCLKCBBxwIMMNxfSYijNcOMEABB9s4aFRK1iQQDAOIvjo5CjO6MICD09UkAuUTPyww5VPwiILFxpUdQkGS3DZ5SuyNOOJfmf6mGaPgQAAOw==]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/donate-button.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhawAVANUAAMDbWrfWTbvYU7nXUL7aV8LcXdvrdGFuLmNvMmBtLd/tg1xrKGJvMF1sKdfpY1hpImRwM+bxpFtrJujyq9zreOXwn2hyOdjpaF9tK+PvltfoYFdoIGlyOtnpa+LvkmdxN9boX+Dth+HujFdpIVpqJdrqb+fxp93sfVlpI2VwNeTwm2ZxNsffZMXeYcngZ8vharXVSs3jbc/jb9Hkcq3QP6/SQrHTRa7RQLPTR+nyrlZoHwAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABrABUAAAb/wJxwSCwaj8ikcslsOnOcyWxKrVqv2Kx2y+16vxaTbEwum8/otHrNbrvfn0hsTq/b7/i8fs/v+/8rFS+DhIWGh4iJiouMjY6PKSouk5SVlpeYmZqbnJ2enxAZLKOkO6alp6SoqqytrqOmsa+zrTuwtrS5owgeLb6/scCmv8TDxMfIyS3GxsrOvs3P0sQMIgXX2LE7BdrXsd7b3OHd2ODh2ePppubr5uLr7eTa5+XlByEA+fraAPw7+ab6/QsoEOC/fQb1FSxIMGDDgQkfLnR4kKBChQkUENjI0RSBHR8/ghTpUVvHeRw3mjypEqRHkTBjmnxZcmTNlilzEsBwQoDP8J+mBMQSuoOo0Xk+g/5cGlRp0qJHoTaVWnSq0ahPrzpd+rMBhQFgw5oaEIvsDrNox45Fyxas2rNi4b51e3bt3Llp5dbVG7Zv2AUGAggebErwDsOHA2hTnLgwY8eDHydGHItwZcaIKTc+7Hgx5s+RI0soAaO06dOoU6tezbq169ewY5PogKO27du4c+vezbu379/Ag6O4YKO48ePIkytfzry58+fQoz9wUKO69evYs2vfzr279+/gw4/QcKO8+fPo06tfz769+/fw428AQaO+/fv48+vfz7+///8ABqjDgAQWaOCBCCao4IIMNujggwQGAQA7]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/download-icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFgAWAPfFAGtra1NTU1JSUmtra46Ojo+Pj8nJyZCQkLi4uLS0tJGRkZOTk4yMjFNTU5SUlI+Pj6GhoYSEhD4+PouLi8LCwoSEhMbGxpmZmVJSUpGRkYWFhZOTk8TExK+vr5+fn66urpiYmFNTU4+Pj5GRkUpKSqGhoYyMjHZ2dr29vZCQkKurq6SkpIODg7q6uqCgoIWFhWlpacjIyI2NjZCQkJCQkLCwsLCwsGpqaomJiampqYqKisPDw2tra4mJiZ6enszMzGhoaKurq46OjqysrKWlpaysrJqamqmpqaioqLm5uZmZmZycnJubm6CgoI6Ojo2NjZKSkpSUlL+/v66urr29vZKSkq+vr8rKyqenp5aWlre3t7q6upaWlqenp7i4uIuLi3Z2dr6+vpGRkYyMjJKSkpGRkampqaSkpIeHh6ampp6enru7u5OTk7+/v7a2tr6+vpKSkoyMjIaGhlFRUbW1tZKSkvn5+aioqLi4uJOTk5CQkImJiYeHh8HBwaysrJKSkp2dnaOjo7a2tn19fZqamqGhoZqamo6OjoiIiJeXl5SUlIaGhoqKik9PT5GRkaGhoYeHh46Ojvz8/IuLi5+fn7Ozs5CQkIiIiIGBgaCgoMXFxaqqqoyMjG5uboaGhomJiaqqqqGhoZiYmKOjo5aWlnp6epGRkbGxsby8vGtra2lpaXd3d8fHx5SUlImJiaKiora2tqenp6SkpJWVlcrKyrS0tKurq3R0dI2NjZ2dnaampqenp5mZmVJSUmtra8LCwmtra97e3mxsbFJSUv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAMUALAAAAAAWABYAAAj/AIsJHEiwoMFijYQpXKgQmMOHEB2SABbjhx9btkCZuXNnly4ismSNehUq1BstDmmNisgyYq41woCxCvWrps2bOH8ZwhNTUyZiQIMKHUqMF6yYO9QAtROsqdOnQUXVitknF9GrQUmditmGCVass6zEpGIIqKSnaIMFzeMn5hZeX6/+MRMTT6K4RE3tigmLVKu/ef78MUXYkmERIiJFEiFLYaVWeVYNm0y5MhhcuDhFCqXQRh5Tw0JZqYWHyi8LtDhMGcZp0iROlBRO+WNpGJ0klA38QgXLyjBXjBhNWqLQliURw9pwoLyl1pRdoX67uuTKkEJQiYcZsEDZjy5KvPIMXPN0CRIkUgp3ReI07A0eympEmZr0YtgLT/dbCVNlKhN7G2ZQZokrLAwCxjAVJFiBKcJIoAoulAyTSXiRQIJJKbd0AkwIlghmCifCFCMBEBuGYOKJlYVwg0MKzREQADs=]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/image-1.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/nextlabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAPeDAP39/enp6UdHR6mpqY+Pj+bm5tDQ0MLCwuzs7O/v76qqqvHx8fb29vr6+v7+/lxcXPf39+3t7WdnZ2VlZV9fX0lJSc3Nze7u7ltbW/v7+7y8vKampurq6qenp3BwcPDw8FpaWoCAgLGxsWNjY2BgYPn5+ejo6ExMTFRUVE5OTqOjo9LS0mJiYufn52hoaI6OjldXV2FhYVFRUaioqNXV1d/f38HBwfz8/Pj4+JGRkbS0tF1dXd7e3oODg3p6eoGBgfLy8mZmZoKCgs/Pz1JSUllZWaurq4WFhW1tbWRkZOLi4srKylZWVqSkpLW1tbKysre3t0VFRV5eXqKiovPz88vLy8bGxmtra3V1dcjIyJqamlVVVXh4eIiIiEhISHd3d9jY2I2Njbq6upmZmeDg4G5ubktLS9bW1tzc3FNTU6WlpWpqap2dnU9PT66urr6+voyMjE1NTYaGhuTk5OHh4dfX16ysrOvr68PDw0JCQlhYWH5+fnNzc3l5eZubm+Pj42xsbPT09P///zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIMALAAAAAA/ACAAAAj/AAcNEkSwoMGDCBMqXMgQ4cCGECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKEECsDLDQsEbNkQICuREwYCbHZTQaOKSIAIFeOaoGGDEjYIOOiB4BECgQgweBBvseSDIBAsUE0aM2GGhxRUMZAQ5IHCiigEYIzAQIUHiy4KlOVCkOIJDUIMQUgQFeNAjggkTLZQuiQPHQZYUWhyUKMCBTYUVHDgAWErARZg2OgRl+EFBL4gXCcekeeKhTAKDRgQECMl0TQEuRf4I4qw3BhIFalTYYUAQQh8ZIFYcHCCgAGsCEnDU2SIHgpDOAZJg4OMBSYi3ggD08LKjxvDixyUAwXEw5YSCLiT0PjiSIAICBJMFiSCygYUPIAaJG1eJ/IMgBoA8MEEQnuWAEA96hCAIFBV0kB94/EngnyBDMCGDC3pRgIUGHIpBRwlCwICGXT6gAEZB+rH2wgQTCuJHBQQGMMEJAtSYxwYimLFBQTQU4QF2M0SxH0hUJBCfZgicBkB7FzQZAQML3HGkIAsEkAFBDCBwQ0pcVtTAEAaEKaYBFnjXJUQl2HDAmmwe8MYZZ8Yp55x01mnnnQo9hCdEAu0JUUAAOw==]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/prevlabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAPeJANzc3P39/fb29rq6utra2v7+/ltbW8HBwfX19fz8/F5eXk1NTV9fX/r6+uDg4NXV1djY2ICAgGBgYFFRUVRUVEpKSt3d3eLi4tnZ2cDAwOPj4/n5+cLCwsPDw/Dw8PLy8ru7u6CgoN/f34ODg0JCQktLS11dXVpaWnJycmpqar6+vpCQkJSUlMzMzPj4+KSkpFJSUmVlZcbGxsTExGxsbIGBgba2tuXl5WNjY3BwcHZ2dmZmZufn5+vr687OztfX18rKysnJyejo6FxcXFBQUKGhoY2NjZubm3h4eHt7e5iYmN7e3tPT00BAQLi4uEdHR39/f3p6evPz89bW1qenp+bm5k9PT3d3d2RkZEhISHl5eby8vPT09HR0dG9vb62traOjo/v7+66urr+/v25ubmFhYWlpadTU1I6OjrW1tb29vaKiourq6p2dnbm5uVVVVZqamqampvHx8ff396qqqtDQ0IyMjMjIyKioqKurq2JiYoaGhklJSVhYWLOzs+Hh4UFBQXFxcc/Pz8vLy3Nzc+/v71dXV+7u7v///zMzMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIkALAAAAAA/ACAAAAj/ABEJHEiwoMGDCBMqNJgo0cKHECM+dCixosWLGDNq3Mixo8ePIEOKHEmypMmTKFNubOBjTAYOU1wIJJAhg4oWQgR+6HCg5wEOPAbJKDBwQ5A7IhHUmMCgaRIHiIrAUKCgTIw8iCwYMGTgxAkFddBMADCQgAkjIgVA8SLgQ5oSdhKsMQBgg4UcfX5osLJCBIS/BQ4sCDEQTwUfaSMQSoCowAkdUl4ouCEwDhEOVRZQKeghBQ0EiBBcCUQ0pIAIOTwgsJHFSAAwBrZgUINDgoMLFEaocOOkA2M4FIAgYlIBxEgBI4iYGCIBCQZEL2DEGEIBxQxEAAyYMLMDx4gGiDAszVCCSIkEHsdr7Ogw48ccgUUMAPlSYoBAABNYaBCx5ELpJGQ4gAULjCXWhUEhMNBDAjro8QF2C9BxkAwL7CGBICSdhgJ4BIWgwAWIgFBCG1lNsMIDKJ5xiECF0FBBFAFkqEUKHA50xBsiIMIFEnwE8QcFT5AgZBN+CFTAEYCIUVIAGjhQ2kBsACATIj08IMQGABCgpZYeDCQHBKCpJOZFNxAAwJlonhnjmA+1YMMAcMY5AAhhsPlQAQHkqaeedvbp55+ABiqonxQNulBDAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/images/thumb-1.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiINCiAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImVuIj4NCjxoZWFkPg0KCQ0KCTx0aXRsZT5MaWdodGJveCBKUyB2Mi4wIHwgVGVzdCBQYWdlPC90aXRsZT4NCg0KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2xpZ2h0Ym94LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+DQoJDQoJPHNjcmlwdCBzcmM9ImpzL3Byb3RvdHlwZS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0ianMvc2NyaXB0YWN1bG91cy5qcz9sb2FkPWVmZmVjdHMsYnVpbGRlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgk8c2NyaXB0IHNyYz0ianMvbGlnaHRib3guanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoNCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCQlib2R5eyBjb2xvcjogIzMzMzsgZm9udDogMTNweCAnTHVjaWRhIEdyYW5kZScsIFZlcmRhbmEsIHNhbnMtc2VyaWY7CX0NCgk8L3N0eWxlPg0KDQo8L2hlYWQ+DQo8Ym9keT4NCg0KDQo8aDE+PGEgaHJlZj0iaHR0cDovL3d3dy5sb2tlc2hkaGFrYXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Mi8iPkxpZ2h0Ym94IEpTIDxlbT52Mi4wNDwvZW0+PC9hPjwvaDE+DQo8cD48YSBocmVmPSJodHRwOi8vd3d3Lmxva2VzaGRoYWthci5jb20iPmJ5IExva2VzaCBEaGFrYXI8L2E+PC9wPg0KDQo8aDI+RXhhbXBsZTwvaDI+DQoNCjxhIGhyZWY9ImltYWdlcy9pbWFnZS0xLmpwZyIgcmVsPSJsaWdodGJveCI+PGltZyBzcmM9ImltYWdlcy90aHVtYi0xLmpwZyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSI0MCIgYWx0PSIiIC8+PC9hPg0KDQoNCg0KDQo8aDI+SG93IHRvIFVzZTo8L2gyPg0KPGgzPlBhcnQgMSAtIFNldHVwPC9oMz4NCjxvbD4NCjxsaT5MaWdodGJveCB2Mi4wIHVzZXMgdGhlIFByb3RvdHlwZSBGcmFtZXdvcmsgYW5kIFNjcmlwdGFjdWxvdXMgRWZmZWN0cyBMaWJyYXJ5LiBZb3Ugd2lsbCBuZWVkIHRvIGluY2x1ZGUgdGhlc2UgdGhyZWUgSmF2YXNjcmlwdCBmaWxlcyBpbiB5b3VyIGhlYWRlci4NCjxwcmU+PGNvZGU+Jmx0O3NjcmlwdCB0eXBlPSZxdW90O3RleHQvamF2YXNjcmlwdCZxdW90OyBzcmM9JnF1b3Q7anMvcHJvdG90eXBlLmpzJnF1b3Q7Jmd0OyZsdDsvc2NyaXB0Jmd0Ow0KJmx0O3NjcmlwdCB0eXBlPSZxdW90O3RleHQvamF2YXNjcmlwdCZxdW90OyBzcmM9JnF1b3Q7anMvc2NyaXB0YWN1bG91cy5qcz9sb2FkPWVmZmVjdHMsYnVpbGRlciZxdW90OyZndDsmbHQ7L3NjcmlwdCZndDsNCiZsdDtzY3JpcHQgdHlwZT0mcXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsgc3JjPSZxdW90O2pzL2xpZ2h0Ym94LmpzJnF1b3Q7Jmd0OyZsdDsvc2NyaXB0Jmd0Ow0KPC9jb2RlPjwvcHJlPg0KPC9saT4NCjxsaT5JbmNsdWRlIHRoZSBMaWdodGJveCBDU1MgZmlsZSAob3IgYXBwZW5kIHlvdXIgYWN0aXZlIHN0eWxlc2hlZXQgd2l0aCB0aGUgTGlnaHRib3ggc3R5bGVzKS4NCjxwcmU+PGNvZGU+Jmx0O2xpbmsgcmVsPSZxdW90O3N0eWxlc2hlZXQmcXVvdDsgaHJlZj0mcXVvdDtjc3MvbGlnaHRib3guY3NzJnF1b3Q7IHR5cGU9JnF1b3Q7dGV4dC9jc3MmcXVvdDsgbWVkaWE9JnF1b3Q7c2NyZWVuJnF1b3Q7IC8mZ3Q7DQo8L2NvZGU+PC9wcmU+DQo8L2xpPg0KPGxpPkNoZWNrIHRoZSBDU1MgYW5kIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlZCA8Y29kZT5wcmV2bGFiZWwuZ2lmPC9jb2RlPiBhbmQgPGNvZGU+bmV4dGxhYmVsLmdpZjwvY29kZT4gZmlsZXMgYXJlIGluIHRoZSByaWdodCBsb2NhdGlvbi4gQWxzbywgbWFrZSBzdXJlIHRoZSA8Y29kZT5sb2FkaW5nLmdpZjwvY29kZT4gYW5kIDxjb2RlPmNsb3NlbGFiZWwuZ2lmPC9jb2RlPiBmaWxlcyBhcyByZWZlcmVuY2VkIG5lYXIgdGhlIHRvcCBvZiB0aGUgPGNvZGU+bGlnaHRib3guanM8L2NvZGU+IGZpbGUgYXJlIGluIHRoZSByaWdodCBsb2NhdGlvbi48L2xpPg0KPC9vbD4NCjxoMz5QYXJ0IDIgLSBBY3RpdmF0ZTwvaDM+DQo8b2w+DQo8bGk+QWRkIGEgPGNvZGU+cmVsPSJsaWdodGJveCI8L2NvZGU+IGF0dHJpYnV0ZSB0byBhbnkgbGluayB0YWcgdG8gYWN0aXZhdGUgdGhlIGxpZ2h0Ym94LiBGb3IgZXhhbXBsZToNCjxwcmU+PGNvZGU+Jmx0O2EgaHJlZj0mcXVvdDtpbWFnZXMvaW1hZ2UtMS5qcGcmcXVvdDsgcmVsPSZxdW90O2xpZ2h0Ym94JnF1b3Q7IHRpdGxlPSZxdW90O215IGNhcHRpb24mcXVvdDsmZ3Q7aW1hZ2UgIzEmbHQ7L2EmZ3Q7DQo8L2NvZGU+PC9wcmU+DQo8ZW0+T3B0aW9uYWw6IDwvZW0+VXNlIHRoZSA8Y29kZT50aXRsZTwvY29kZT4gYXR0cmlidXRlIGlmIHlvdSB3YW50IHRvIHNob3cgYSBjYXB0aW9uLgkJPC9saT4NCjxsaT5JZiB5b3UgaGF2ZSBhIHNldCBvZiByZWxhdGVkIGltYWdlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGdyb3VwLCBmb2xsb3cgc3RlcCBvbmUgYnV0IGFkZGl0aW9uYWxseSBpbmNsdWRlIGEgZ3JvdXAgbmFtZSBiZXR3ZWVuIHNxdWFyZSBicmFja2V0cyBpbiB0aGUgcmVsIGF0dHJpYnV0ZS4gRm9yIGV4YW1wbGU6IA0KPHByZT48Y29kZT4mbHQ7YSBocmVmPSZxdW90O2ltYWdlcy9pbWFnZS0xLmpwZyZxdW90OyByZWw9JnF1b3Q7bGlnaHRib3hbcm9hZHRyaXBdJnF1b3Q7Jmd0O2ltYWdlICMxJmx0Oy9hJmd0Ow0KJmx0O2EgaHJlZj0mcXVvdDtpbWFnZXMvaW1hZ2UtMi5qcGcmcXVvdDsgcmVsPSZxdW90O2xpZ2h0Ym94W3JvYWR0cmlwXSZxdW90OyZndDtpbWFnZSAjMiZsdDsvYSZndDsNCiZsdDthIGhyZWY9JnF1b3Q7aW1hZ2VzL2ltYWdlLTMuanBnJnF1b3Q7IHJlbD0mcXVvdDtsaWdodGJveFtyb2FkdHJpcF0mcXVvdDsmZ3Q7aW1hZ2UgIzMmbHQ7L2EmZ3Q7DQo8L2NvZGU+PC9wcmU+DQpObyBsaW1pdHMgdG8gdGhlIG51bWJlciBvZiBpbWFnZSBzZXRzIHBlciBwYWdlIG9yIGhvdyBtYW55IGltYWdlcyBhcmUgYWxsb3dlZCBpbiBlYWNoIHNldC4gR28gbnV0cyE8L2xpPg0KPC9vbD4JDQoNCg0KPC9ib2R5Pg0KPC9odG1sPg0K]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/lightbox/js/builder.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gc2NyaXB0LmFjdWxvLnVzIGJ1aWxkZXIuanMgdjEuOC4xLCBUaHUgSmFuIDAzIDIyOjA3OjEyIC0wNTAwIDIwMDgKCi8vIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0cDovL21pci5hY3Vsby51cykKLy8KLy8gc2NyaXB0LmFjdWxvLnVzIGlzIGZyZWVseSBkaXN0cmlidXRhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbiBNSVQtc3R5bGUgbGljZW5zZS4KLy8gRm9yIGRldGFpbHMsIHNlZSB0aGUgc2NyaXB0LmFjdWxvLnVzIHdlYiBzaXRlOiBodHRwOi8vc2NyaXB0LmFjdWxvLnVzLwoKdmFyIEJ1aWxkZXIgPSB7CiAgTk9ERU1BUDogewogICAgQVJFQTogJ21hcCcsCiAgICBDQVBUSU9OOiAndGFibGUnLAogICAgQ09MOiAndGFibGUnLAogICAgQ09MR1JPVVA6ICd0YWJsZScsCiAgICBMRUdFTkQ6ICdmaWVsZHNldCcsCiAgICBPUFRHUk9VUDogJ3NlbGVjdCcsCiAgICBPUFRJT046ICdzZWxlY3QnLAogICAgUEFSQU06ICdvYmplY3QnLAogICAgVEJPRFk6ICd0YWJsZScsCiAgICBURDogJ3RhYmxlJywKICAgIFRGT09UOiAndGFibGUnLAogICAgVEg6ICd0YWJsZScsCiAgICBUSEVBRDogJ3RhYmxlJywKICAgIFRSOiAndGFibGUnCiAgfSwKICAvLyBub3RlOiBGb3IgRmlyZWZveCA8IDEuNSwgT1BUSU9OIGFuZCBPUFRHUk9VUCB0YWdzIGFyZSBjdXJyZW50bHkgYnJva2VuLAogIC8vICAgICAgIGR1ZSB0byBhIEZpcmVmb3ggYnVnCiAgbm9kZTogZnVuY3Rpb24oZWxlbWVudE5hbWUpIHsKICAgIGVsZW1lbnROYW1lID0gZWxlbWVudE5hbWUudG9VcHBlckNhc2UoKTsKICAgIAogICAgLy8gdHJ5IGlubmVySFRNTCBhcHByb2FjaAogICAgdmFyIHBhcmVudFRhZyA9IHRoaXMuTk9ERU1BUFtlbGVtZW50TmFtZV0gfHwgJ2Rpdic7CiAgICB2YXIgcGFyZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50VGFnKTsKICAgIHRyeSB7IC8vIHByZXZlbnQgSUUgImZlYXR1cmUiOiBodHRwOi8vZGV2LnJ1YnlvbnJhaWxzLm9yZy90aWNrZXQvMjcwNwogICAgICBwYXJlbnRFbGVtZW50LmlubmVySFRNTCA9ICI8IiArIGVsZW1lbnROYW1lICsgIj48LyIgKyBlbGVtZW50TmFtZSArICI+IjsKICAgIH0gY2F0Y2goZSkge30KICAgIHZhciBlbGVtZW50ID0gcGFyZW50RWxlbWVudC5maXJzdENoaWxkIHx8IG51bGw7CiAgICAgIAogICAgLy8gc2VlIGlmIGJyb3dzZXIgYWRkZWQgd3JhcHBpbmcgdGFncwogICAgaWYoZWxlbWVudCAmJiAoZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT0gZWxlbWVudE5hbWUpKQogICAgICBlbGVtZW50ID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShlbGVtZW50TmFtZSlbMF07CiAgICAKICAgIC8vIGZhbGxiYWNrIHRvIGNyZWF0ZUVsZW1lbnQgYXBwcm9hY2gKICAgIGlmKCFlbGVtZW50KSBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50TmFtZSk7CiAgICAKICAgIC8vIGFib3J0IGlmIG5vdGhpbmcgY291bGQgYmUgY3JlYXRlZAogICAgaWYoIWVsZW1lbnQpIHJldHVybjsKCiAgICAvLyBhdHRyaWJ1dGVzIChvciB0ZXh0KQogICAgaWYoYXJndW1lbnRzWzFdKQogICAgICBpZih0aGlzLl9pc1N0cmluZ09yTnVtYmVyKGFyZ3VtZW50c1sxXSkgfHwKICAgICAgICAoYXJndW1lbnRzWzFdIGluc3RhbmNlb2YgQXJyYXkpIHx8CiAgICAgICAgYXJndW1lbnRzWzFdLnRhZ05hbWUpIHsKICAgICAgICAgIHRoaXMuX2NoaWxkcmVuKGVsZW1lbnQsIGFyZ3VtZW50c1sxXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBhdHRycyA9IHRoaXMuX2F0dHJpYnV0ZXMoYXJndW1lbnRzWzFdKTsKICAgICAgICAgIGlmKGF0dHJzLmxlbmd0aCkgewogICAgICAgICAgICB0cnkgeyAvLyBwcmV2ZW50IElFICJmZWF0dXJlIjogaHR0cDovL2Rldi5ydWJ5b25yYWlscy5vcmcvdGlja2V0LzI3MDcKICAgICAgICAgICAgICBwYXJlbnRFbGVtZW50LmlubmVySFRNTCA9ICI8IiArZWxlbWVudE5hbWUgKyAiICIgKwogICAgICAgICAgICAgICAgYXR0cnMgKyAiPjwvIiArIGVsZW1lbnROYW1lICsgIj4iOwogICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgIGVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LmZpcnN0Q2hpbGQgfHwgbnVsbDsKICAgICAgICAgICAgLy8gd29ya2Fyb3VuZCBmaXJlZm94IDEuMC5YIGJ1ZwogICAgICAgICAgICBpZighZWxlbWVudCkgewogICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnROYW1lKTsKICAgICAgICAgICAgICBmb3IoYXR0ciBpbiBhcmd1bWVudHNbMV0pIAogICAgICAgICAgICAgICAgZWxlbWVudFthdHRyID09ICdjbGFzcycgPyAnY2xhc3NOYW1lJyA6IGF0dHJdID0gYXJndW1lbnRzWzFdW2F0dHJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9IGVsZW1lbnROYW1lKQogICAgICAgICAgICAgIGVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGVsZW1lbnROYW1lKVswXTsKICAgICAgICAgIH0KICAgICAgICB9IAoKICAgIC8vIHRleHQsIG9yIGFycmF5IG9mIGNoaWxkcmVuCiAgICBpZihhcmd1bWVudHNbMl0pCiAgICAgIHRoaXMuX2NoaWxkcmVuKGVsZW1lbnQsIGFyZ3VtZW50c1syXSk7CgogICAgIHJldHVybiBlbGVtZW50OwogIH0sCiAgX3RleHQ6IGZ1bmN0aW9uKHRleHQpIHsKICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7CiAgfSwKCiAgQVRUUl9NQVA6IHsKICAgICdjbGFzc05hbWUnOiAnY2xhc3MnLAogICAgJ2h0bWxGb3InOiAnZm9yJwogIH0sCgogIF9hdHRyaWJ1dGVzOiBmdW5jdGlvbihhdHRyaWJ1dGVzKSB7CiAgICB2YXIgYXR0cnMgPSBbXTsKICAgIGZvcihhdHRyaWJ1dGUgaW4gYXR0cmlidXRlcykKICAgICAgYXR0cnMucHVzaCgoYXR0cmlidXRlIGluIHRoaXMuQVRUUl9NQVAgPyB0aGlzLkFUVFJfTUFQW2F0dHJpYnV0ZV0gOiBhdHRyaWJ1dGUpICsKICAgICAgICAgICc9IicgKyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0udG9TdHJpbmcoKS5lc2NhcGVIVE1MKCkuZ3N1YigvIi8sJyZxdW90OycpICsgJyInKTsKICAgIHJldHVybiBhdHRycy5qb2luKCIgIik7CiAgfSwKICBfY2hpbGRyZW46IGZ1bmN0aW9uKGVsZW1lbnQsIGNoaWxkcmVuKSB7CiAgICBpZihjaGlsZHJlbi50YWdOYW1lKSB7CiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpbGRyZW4pOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZih0eXBlb2YgY2hpbGRyZW49PSdvYmplY3QnKSB7IC8vIGFycmF5IGNhbiBob2xkIG5vZGVzIGFuZCB0ZXh0CiAgICAgIGNoaWxkcmVuLmZsYXR0ZW4oKS5lYWNoKCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYodHlwZW9mIGU9PSdvYmplY3QnKQogICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChlKQogICAgICAgIGVsc2UKICAgICAgICAgIGlmKEJ1aWxkZXIuX2lzU3RyaW5nT3JOdW1iZXIoZSkpCiAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoQnVpbGRlci5fdGV4dChlKSk7CiAgICAgIH0pOwogICAgfSBlbHNlCiAgICAgIGlmKEJ1aWxkZXIuX2lzU3RyaW5nT3JOdW1iZXIoY2hpbGRyZW4pKQogICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoQnVpbGRlci5fdGV4dChjaGlsZHJlbikpOwogIH0sCiAgX2lzU3RyaW5nT3JOdW1iZXI6IGZ1bmN0aW9uKHBhcmFtKSB7CiAgICByZXR1cm4odHlwZW9mIHBhcmFtPT0nc3RyaW5nJyB8fCB0eXBlb2YgcGFyYW09PSdudW1iZXInKTsKICB9LAogIGJ1aWxkOiBmdW5jdGlvbihodG1sKSB7CiAgICB2YXIgZWxlbWVudCA9IHRoaXMubm9kZSgnZGl2Jyk7CiAgICAkKGVsZW1lbnQpLnVwZGF0ZShodG1sLnN0cmlwKCkpOwogICAgcmV0dXJuIGVsZW1lbnQuZG93bigpOwogIH0sCiAgZHVtcDogZnVuY3Rpb24oc2NvcGUpIHsgCiAgICBpZih0eXBlb2Ygc2NvcGUgIT0gJ29iamVjdCcgJiYgdHlwZW9mIHNjb3BlICE9ICdmdW5jdGlvbicpIHNjb3BlID0gd2luZG93OyAvL2dsb2JhbCBzY29wZSAKICAKICAgIHZhciB0YWdzID0gKCJBIEFCQlIgQUNST05ZTSBBRERSRVNTIEFQUExFVCBBUkVBIEIgQkFTRSBCQVNFRk9OVCBCRE8gQklHIEJMT0NLUVVPVEUgQk9EWSAiICsKICAgICAgIkJSIEJVVFRPTiBDQVBUSU9OIENFTlRFUiBDSVRFIENPREUgQ09MIENPTEdST1VQIEREIERFTCBERk4gRElSIERJViBETCBEVCBFTSBGSUVMRFNFVCAiICsKICAgICAgIkZPTlQgRk9STSBGUkFNRSBGUkFNRVNFVCBIMSBIMiBIMyBINCBINSBINiBIRUFEIEhSIEhUTUwgSSBJRlJBTUUgSU1HIElOUFVUIElOUyBJU0lOREVYICIrCiAgICAgICJLQkQgTEFCRUwgTEVHRU5EIExJIExJTksgTUFQIE1FTlUgTUVUQSBOT0ZSQU1FUyBOT1NDUklQVCBPQkpFQ1QgT0wgT1BUR1JPVVAgT1BUSU9OIFAgIisKICAgICAgIlBBUkFNIFBSRSBRIFMgU0FNUCBTQ1JJUFQgU0VMRUNUIFNNQUxMIFNQQU4gU1RSSUtFIFNUUk9ORyBTVFlMRSBTVUIgU1VQIFRBQkxFIFRCT0RZIFREICIrCiAgICAgICJURVhUQVJFQSBURk9PVCBUSCBUSEVBRCBUSVRMRSBUUiBUVCBVIFVMIFZBUiIpLnNwbGl0KC9ccysvKTsKICAKICAgIHRhZ3MuZWFjaCggZnVuY3Rpb24odGFnKXsgCiAgICAgIHNjb3BlW3RhZ10gPSBmdW5jdGlvbigpIHsgCiAgICAgICAgcmV0dXJuIEJ1aWxkZXIubm9kZS5hcHBseShCdWlsZGVyLCBbdGFnXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOyAgCiAgICAgIH0gCiAgICB9KTsKICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/js/effects.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gc2NyaXB0LmFjdWxvLnVzIGVmZmVjdHMuanMgdjEuOC4xLCBUaHUgSmFuIDAzIDIyOjA3OjEyIC0wNTAwIDIwMDgKCi8vIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0cDovL21pci5hY3Vsby51cykKLy8gQ29udHJpYnV0b3JzOgovLyAgSnVzdGluIFBhbG1lciAoaHR0cDovL2VuY3l0ZW1lZGlhLmNvbS8pCi8vICBNYXJrIFBpbGdyaW0gKGh0dHA6Ly9kaXZlaW50b21hcmsub3JnLykKLy8gIE1hcnRpbiBCaWFsYXNpbmtpCi8vIAovLyBzY3JpcHQuYWN1bG8udXMgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgovLyBGb3IgZGV0YWlscywgc2VlIHRoZSBzY3JpcHQuYWN1bG8udXMgd2ViIHNpdGU6IGh0dHA6Ly9zY3JpcHQuYWN1bG8udXMvIAoKLy8gY29udmVydHMgcmdiKCkgYW5kICN4eHggdG8gI3h4eHh4eCBmb3JtYXQsICAKLy8gcmV0dXJucyBzZWxmIChvciBmaXJzdCBhcmd1bWVudCkgaWYgbm90IGNvbnZlcnRhYmxlICAKU3RyaW5nLnByb3RvdHlwZS5wYXJzZUNvbG9yID0gZnVuY3Rpb24oKSB7ICAKICB2YXIgY29sb3IgPSAnIyc7CiAgaWYgKHRoaXMuc2xpY2UoMCw0KSA9PSAncmdiKCcpIHsgIAogICAgdmFyIGNvbHMgPSB0aGlzLnNsaWNlKDQsdGhpcy5sZW5ndGgtMSkuc3BsaXQoJywnKTsgIAogICAgdmFyIGk9MDsgZG8geyBjb2xvciArPSBwYXJzZUludChjb2xzW2ldKS50b0NvbG9yUGFydCgpIH0gd2hpbGUgKCsraTwzKTsgIAogIH0gZWxzZSB7ICAKICAgIGlmICh0aGlzLnNsaWNlKDAsMSkgPT0gJyMnKSB7ICAKICAgICAgaWYgKHRoaXMubGVuZ3RoPT00KSBmb3IodmFyIGk9MTtpPDQ7aSsrKSBjb2xvciArPSAodGhpcy5jaGFyQXQoaSkgKyB0aGlzLmNoYXJBdChpKSkudG9Mb3dlckNhc2UoKTsgIAogICAgICBpZiAodGhpcy5sZW5ndGg9PTcpIGNvbG9yID0gdGhpcy50b0xvd2VyQ2FzZSgpOyAgCiAgICB9ICAKICB9ICAKICByZXR1cm4gKGNvbG9yLmxlbmd0aD09NyA/IGNvbG9yIDogKGFyZ3VtZW50c1swXSB8fCB0aGlzKSk7ICAKfTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKRWxlbWVudC5jb2xsZWN0VGV4dE5vZGVzID0gZnVuY3Rpb24oZWxlbWVudCkgeyAgCiAgcmV0dXJuICRBKCQoZWxlbWVudCkuY2hpbGROb2RlcykuY29sbGVjdCggZnVuY3Rpb24obm9kZSkgewogICAgcmV0dXJuIChub2RlLm5vZGVUeXBlPT0zID8gbm9kZS5ub2RlVmFsdWUgOiAKICAgICAgKG5vZGUuaGFzQ2hpbGROb2RlcygpID8gRWxlbWVudC5jb2xsZWN0VGV4dE5vZGVzKG5vZGUpIDogJycpKTsKICB9KS5mbGF0dGVuKCkuam9pbignJyk7Cn07CgpFbGVtZW50LmNvbGxlY3RUZXh0Tm9kZXNJZ25vcmVDbGFzcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgeyAgCiAgcmV0dXJuICRBKCQoZWxlbWVudCkuY2hpbGROb2RlcykuY29sbGVjdCggZnVuY3Rpb24obm9kZSkgewogICAgcmV0dXJuIChub2RlLm5vZGVUeXBlPT0zID8gbm9kZS5ub2RlVmFsdWUgOiAKICAgICAgKChub2RlLmhhc0NoaWxkTm9kZXMoKSAmJiAhRWxlbWVudC5oYXNDbGFzc05hbWUobm9kZSxjbGFzc05hbWUpKSA/IAogICAgICAgIEVsZW1lbnQuY29sbGVjdFRleHROb2Rlc0lnbm9yZUNsYXNzKG5vZGUsIGNsYXNzTmFtZSkgOiAnJykpOwogIH0pLmZsYXR0ZW4oKS5qb2luKCcnKTsKfTsKCkVsZW1lbnQuc2V0Q29udGVudFpvb20gPSBmdW5jdGlvbihlbGVtZW50LCBwZXJjZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7ICAKICBlbGVtZW50LnNldFN0eWxlKHtmb250U2l6ZTogKHBlcmNlbnQvMTAwKSArICdlbSd9KTsgICAKICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB3aW5kb3cuc2Nyb2xsQnkoMCwwKTsKICByZXR1cm4gZWxlbWVudDsKfTsKCkVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQpewogIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLm9wYWNpdHkgfHwgJyc7Cn07CgpFbGVtZW50LmZvcmNlUmVyZW5kZXJpbmcgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgdHJ5IHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIG4gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpOwogICAgZWxlbWVudC5hcHBlbmRDaGlsZChuKTsKICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQobik7CiAgfSBjYXRjaChlKSB7IH0KfTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKdmFyIEVmZmVjdCA9IHsKICBfZWxlbWVudERvZXNOb3RFeGlzdEVycm9yOiB7CiAgICBuYW1lOiAnRWxlbWVudERvZXNOb3RFeGlzdEVycm9yJywKICAgIG1lc3NhZ2U6ICdUaGUgc3BlY2lmaWVkIERPTSBlbGVtZW50IGRvZXMgbm90IGV4aXN0LCBidXQgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZWZmZWN0IHRvIG9wZXJhdGUnCiAgfSwKICBUcmFuc2l0aW9uczogewogICAgbGluZWFyOiBQcm90b3R5cGUuSywKICAgIHNpbm9pZGFsOiBmdW5jdGlvbihwb3MpIHsKICAgICAgcmV0dXJuICgtTWF0aC5jb3MocG9zKk1hdGguUEkpLzIpICsgMC41OwogICAgfSwKICAgIHJldmVyc2U6IGZ1bmN0aW9uKHBvcykgewogICAgICByZXR1cm4gMS1wb3M7CiAgICB9LAogICAgZmxpY2tlcjogZnVuY3Rpb24ocG9zKSB7CiAgICAgIHZhciBwb3MgPSAoKC1NYXRoLmNvcyhwb3MqTWF0aC5QSSkvNCkgKyAwLjc1KSArIE1hdGgucmFuZG9tKCkvNDsKICAgICAgcmV0dXJuIHBvcyA+IDEgPyAxIDogcG9zOwogICAgfSwKICAgIHdvYmJsZTogZnVuY3Rpb24ocG9zKSB7CiAgICAgIHJldHVybiAoLU1hdGguY29zKHBvcypNYXRoLlBJKig5KnBvcykpLzIpICsgMC41OwogICAgfSwKICAgIHB1bHNlOiBmdW5jdGlvbihwb3MsIHB1bHNlcykgeyAKICAgICAgcHVsc2VzID0gcHVsc2VzIHx8IDU7IAogICAgICByZXR1cm4gKAogICAgICAgICgocG9zICUgKDEvcHVsc2VzKSkgKiBwdWxzZXMpLnJvdW5kKCkgPT0gMCA/IAogICAgICAgICAgICAgICgocG9zICogcHVsc2VzICogMikgLSAocG9zICogcHVsc2VzICogMikuZmxvb3IoKSkgOiAKICAgICAgICAgIDEgLSAoKHBvcyAqIHB1bHNlcyAqIDIpIC0gKHBvcyAqIHB1bHNlcyAqIDIpLmZsb29yKCkpCiAgICAgICAgKTsKICAgIH0sCiAgICBzcHJpbmc6IGZ1bmN0aW9uKHBvcykgeyAKICAgICAgcmV0dXJuIDEgLSAoTWF0aC5jb3MocG9zICogNC41ICogTWF0aC5QSSkgKiBNYXRoLmV4cCgtcG9zICogNikpOyAKICAgIH0sCiAgICBub25lOiBmdW5jdGlvbihwb3MpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9LAogICAgZnVsbDogZnVuY3Rpb24ocG9zKSB7CiAgICAgIHJldHVybiAxOwogICAgfQogIH0sCiAgRGVmYXVsdE9wdGlvbnM6IHsKICAgIGR1cmF0aW9uOiAgIDEuMCwgICAvLyBzZWNvbmRzCiAgICBmcHM6ICAgICAgICAxMDAsICAgLy8gMTAwPSBhc3N1bWUgNjZmcHMgbWF4LgogICAgc3luYzogICAgICAgZmFsc2UsIC8vIHRydWUgZm9yIGNvbWJpbmluZwogICAgZnJvbTogICAgICAgMC4wLAogICAgdG86ICAgICAgICAgMS4wLAogICAgZGVsYXk6ICAgICAgMC4wLAogICAgcXVldWU6ICAgICAgJ3BhcmFsbGVsJwogIH0sCiAgdGFnaWZ5VGV4dDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHRhZ2lmeVN0eWxlID0gJ3Bvc2l0aW9uOnJlbGF0aXZlJzsKICAgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSkgdGFnaWZ5U3R5bGUgKz0gJzt6b29tOjEnOwogICAgCiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICRBKGVsZW1lbnQuY2hpbGROb2RlcykuZWFjaCggZnVuY3Rpb24oY2hpbGQpIHsKICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlPT0zKSB7CiAgICAgICAgY2hpbGQubm9kZVZhbHVlLnRvQXJyYXkoKS5lYWNoKCBmdW5jdGlvbihjaGFyYWN0ZXIpIHsKICAgICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKAogICAgICAgICAgICBuZXcgRWxlbWVudCgnc3BhbicsIHtzdHlsZTogdGFnaWZ5U3R5bGV9KS51cGRhdGUoCiAgICAgICAgICAgICAgY2hhcmFjdGVyID09ICcgJyA/IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKSA6IGNoYXJhY3RlciksIAogICAgICAgICAgICAgIGNoaWxkKTsKICAgICAgICB9KTsKICAgICAgICBFbGVtZW50LnJlbW92ZShjaGlsZCk7CiAgICAgIH0KICAgIH0pOwogIH0sCiAgbXVsdGlwbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVmZmVjdCkgewogICAgdmFyIGVsZW1lbnRzOwogICAgaWYgKCgodHlwZW9mIGVsZW1lbnQgPT0gJ29iamVjdCcpIHx8IAogICAgICAgIE9iamVjdC5pc0Z1bmN0aW9uKGVsZW1lbnQpKSAmJiAKICAgICAgIChlbGVtZW50Lmxlbmd0aCkpCiAgICAgIGVsZW1lbnRzID0gZWxlbWVudDsKICAgIGVsc2UKICAgICAgZWxlbWVudHMgPSAkKGVsZW1lbnQpLmNoaWxkTm9kZXM7CiAgICAgIAogICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgc3BlZWQ6IDAuMSwKICAgICAgZGVsYXk6IDAuMAogICAgfSwgYXJndW1lbnRzWzJdIHx8IHsgfSk7CiAgICB2YXIgbWFzdGVyRGVsYXkgPSBvcHRpb25zLmRlbGF5OwoKICAgICRBKGVsZW1lbnRzKS5lYWNoKCBmdW5jdGlvbihlbGVtZW50LCBpbmRleCkgewogICAgICBuZXcgZWZmZWN0KGVsZW1lbnQsIE9iamVjdC5leHRlbmQob3B0aW9ucywgeyBkZWxheTogaW5kZXggKiBvcHRpb25zLnNwZWVkICsgbWFzdGVyRGVsYXkgfSkpOwogICAgfSk7CiAgfSwKICBQQUlSUzogewogICAgJ3NsaWRlJzogIFsnU2xpZGVEb3duJywnU2xpZGVVcCddLAogICAgJ2JsaW5kJzogIFsnQmxpbmREb3duJywnQmxpbmRVcCddLAogICAgJ2FwcGVhcic6IFsnQXBwZWFyJywnRmFkZSddCiAgfSwKICB0b2dnbGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGVmZmVjdCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlZmZlY3QgPSAoZWZmZWN0IHx8ICdhcHBlYXInKS50b0xvd2VyQ2FzZSgpOwogICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgcXVldWU6IHsgcG9zaXRpb246J2VuZCcsIHNjb3BlOihlbGVtZW50LmlkIHx8ICdnbG9iYWwnKSwgbGltaXQ6IDEgfQogICAgfSwgYXJndW1lbnRzWzJdIHx8IHsgfSk7CiAgICBFZmZlY3RbZWxlbWVudC52aXNpYmxlKCkgPyAKICAgICAgRWZmZWN0LlBBSVJTW2VmZmVjdF1bMV0gOiBFZmZlY3QuUEFJUlNbZWZmZWN0XVswXV0oZWxlbWVudCwgb3B0aW9ucyk7CiAgfQp9OwoKRWZmZWN0LkRlZmF1bHRPcHRpb25zLnRyYW5zaXRpb24gPSBFZmZlY3QuVHJhbnNpdGlvbnMuc2lub2lkYWw7CgovKiAtLS0tLS0tLS0tLS0tIGNvcmUgZWZmZWN0cyAtLS0tLS0tLS0tLS0tICovCgpFZmZlY3QuU2NvcGVkUXVldWUgPSBDbGFzcy5jcmVhdGUoRW51bWVyYWJsZSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5lZmZlY3RzICA9IFtdOwogICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7ICAgIAogIH0sCiAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICB0aGlzLmVmZmVjdHMuX2VhY2goaXRlcmF0b3IpOwogIH0sCiAgYWRkOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIHZhciB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgIAogICAgdmFyIHBvc2l0aW9uID0gT2JqZWN0LmlzU3RyaW5nKGVmZmVjdC5vcHRpb25zLnF1ZXVlKSA/IAogICAgICBlZmZlY3Qub3B0aW9ucy5xdWV1ZSA6IGVmZmVjdC5vcHRpb25zLnF1ZXVlLnBvc2l0aW9uOwogICAgCiAgICBzd2l0Y2gocG9zaXRpb24pIHsKICAgICAgY2FzZSAnZnJvbnQnOgogICAgICAgIC8vIG1vdmUgdW5zdGFydGVkIGVmZmVjdHMgYWZ0ZXIgdGhpcyBlZmZlY3QgIAogICAgICAgIHRoaXMuZWZmZWN0cy5maW5kQWxsKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5zdGF0ZT09J2lkbGUnIH0pLmVhY2goIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZS5zdGFydE9uICArPSBlZmZlY3QuZmluaXNoT247CiAgICAgICAgICAgIGUuZmluaXNoT24gKz0gZWZmZWN0LmZpbmlzaE9uOwogICAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ3dpdGgtbGFzdCc6CiAgICAgICAgdGltZXN0YW1wID0gdGhpcy5lZmZlY3RzLnBsdWNrKCdzdGFydE9uJykubWF4KCkgfHwgdGltZXN0YW1wOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdlbmQnOgogICAgICAgIC8vIHN0YXJ0IGVmZmVjdCBhZnRlciBsYXN0IHF1ZXVlZCBlZmZlY3QgaGFzIGZpbmlzaGVkCiAgICAgICAgdGltZXN0YW1wID0gdGhpcy5lZmZlY3RzLnBsdWNrKCdmaW5pc2hPbicpLm1heCgpIHx8IHRpbWVzdGFtcDsKICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgZWZmZWN0LnN0YXJ0T24gICs9IHRpbWVzdGFtcDsKICAgIGVmZmVjdC5maW5pc2hPbiArPSB0aW1lc3RhbXA7CgogICAgaWYgKCFlZmZlY3Qub3B0aW9ucy5xdWV1ZS5saW1pdCB8fCAodGhpcy5lZmZlY3RzLmxlbmd0aCA8IGVmZmVjdC5vcHRpb25zLnF1ZXVlLmxpbWl0KSkKICAgICAgdGhpcy5lZmZlY3RzLnB1c2goZWZmZWN0KTsKICAgIAogICAgaWYgKCF0aGlzLmludGVydmFsKQogICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwodGhpcy5sb29wLmJpbmQodGhpcyksIDE1KTsKICB9LAogIHJlbW92ZTogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICB0aGlzLmVmZmVjdHMgPSB0aGlzLmVmZmVjdHMucmVqZWN0KGZ1bmN0aW9uKGUpIHsgcmV0dXJuIGU9PWVmZmVjdCB9KTsKICAgIGlmICh0aGlzLmVmZmVjdHMubGVuZ3RoID09IDApIHsKICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTsKICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7CiAgICB9CiAgfSwKICBsb29wOiBmdW5jdGlvbigpIHsKICAgIHZhciB0aW1lUG9zID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiAgICBmb3IodmFyIGk9MCwgbGVuPXRoaXMuZWZmZWN0cy5sZW5ndGg7aTxsZW47aSsrKSAKICAgICAgdGhpcy5lZmZlY3RzW2ldICYmIHRoaXMuZWZmZWN0c1tpXS5sb29wKHRpbWVQb3MpOwogIH0KfSk7CgpFZmZlY3QuUXVldWVzID0gewogIGluc3RhbmNlczogJEgoKSwKICBnZXQ6IGZ1bmN0aW9uKHF1ZXVlTmFtZSkgewogICAgaWYgKCFPYmplY3QuaXNTdHJpbmcocXVldWVOYW1lKSkgcmV0dXJuIHF1ZXVlTmFtZTsKICAgIAogICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VzLmdldChxdWV1ZU5hbWUpIHx8CiAgICAgIHRoaXMuaW5zdGFuY2VzLnNldChxdWV1ZU5hbWUsIG5ldyBFZmZlY3QuU2NvcGVkUXVldWUoKSk7CiAgfQp9OwpFZmZlY3QuUXVldWUgPSBFZmZlY3QuUXVldWVzLmdldCgnZ2xvYmFsJyk7CgpFZmZlY3QuQmFzZSA9IENsYXNzLmNyZWF0ZSh7CiAgcG9zaXRpb246IG51bGwsCiAgc3RhcnQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIGZ1bmN0aW9uIGNvZGVGb3JFdmVudChvcHRpb25zLGV2ZW50TmFtZSl7CiAgICAgIHJldHVybiAoCiAgICAgICAgKG9wdGlvbnNbZXZlbnROYW1lKydJbnRlcm5hbCddID8gJ3RoaXMub3B0aW9ucy4nK2V2ZW50TmFtZSsnSW50ZXJuYWwodGhpcyk7JyA6ICcnKSArCiAgICAgICAgKG9wdGlvbnNbZXZlbnROYW1lXSA/ICd0aGlzLm9wdGlvbnMuJytldmVudE5hbWUrJyh0aGlzKTsnIDogJycpCiAgICAgICk7CiAgICB9CiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zaXRpb24gPT09IGZhbHNlKSBvcHRpb25zLnRyYW5zaXRpb24gPSBFZmZlY3QuVHJhbnNpdGlvbnMubGluZWFyOwogICAgdGhpcy5vcHRpb25zICAgICAgPSBPYmplY3QuZXh0ZW5kKE9iamVjdC5leHRlbmQoeyB9LEVmZmVjdC5EZWZhdWx0T3B0aW9ucyksIG9wdGlvbnMgfHwgeyB9KTsKICAgIHRoaXMuY3VycmVudEZyYW1lID0gMDsKICAgIHRoaXMuc3RhdGUgICAgICAgID0gJ2lkbGUnOwogICAgdGhpcy5zdGFydE9uICAgICAgPSB0aGlzLm9wdGlvbnMuZGVsYXkqMTAwMDsKICAgIHRoaXMuZmluaXNoT24gICAgID0gdGhpcy5zdGFydE9uKyh0aGlzLm9wdGlvbnMuZHVyYXRpb24qMTAwMCk7CiAgICB0aGlzLmZyb21Ub0RlbHRhICA9IHRoaXMub3B0aW9ucy50by10aGlzLm9wdGlvbnMuZnJvbTsKICAgIHRoaXMudG90YWxUaW1lICAgID0gdGhpcy5maW5pc2hPbi10aGlzLnN0YXJ0T247CiAgICB0aGlzLnRvdGFsRnJhbWVzICA9IHRoaXMub3B0aW9ucy5mcHMqdGhpcy5vcHRpb25zLmR1cmF0aW9uOwogICAgCiAgICBldmFsKCd0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKHBvcyl7ICcrCiAgICAgICdpZiAodGhpcy5zdGF0ZT09ImlkbGUiKXt0aGlzLnN0YXRlPSJydW5uaW5nIjsnKwogICAgICBjb2RlRm9yRXZlbnQodGhpcy5vcHRpb25zLCdiZWZvcmVTZXR1cCcpKwogICAgICAodGhpcy5zZXR1cCA/ICd0aGlzLnNldHVwKCk7JzonJykrIAogICAgICBjb2RlRm9yRXZlbnQodGhpcy5vcHRpb25zLCdhZnRlclNldHVwJykrCiAgICAgICd9O2lmICh0aGlzLnN0YXRlPT0icnVubmluZyIpeycrCiAgICAgICdwb3M9dGhpcy5vcHRpb25zLnRyYW5zaXRpb24ocG9zKSonK3RoaXMuZnJvbVRvRGVsdGErJysnK3RoaXMub3B0aW9ucy5mcm9tKyc7JysKICAgICAgJ3RoaXMucG9zaXRpb249cG9zOycrCiAgICAgIGNvZGVGb3JFdmVudCh0aGlzLm9wdGlvbnMsJ2JlZm9yZVVwZGF0ZScpKwogICAgICAodGhpcy51cGRhdGUgPyAndGhpcy51cGRhdGUocG9zKTsnOicnKSsKICAgICAgY29kZUZvckV2ZW50KHRoaXMub3B0aW9ucywnYWZ0ZXJVcGRhdGUnKSsKICAgICAgJ319Jyk7CiAgICAKICAgIHRoaXMuZXZlbnQoJ2JlZm9yZVN0YXJ0Jyk7CiAgICBpZiAoIXRoaXMub3B0aW9ucy5zeW5jKQogICAgICBFZmZlY3QuUXVldWVzLmdldChPYmplY3QuaXNTdHJpbmcodGhpcy5vcHRpb25zLnF1ZXVlKSA/IAogICAgICAgICdnbG9iYWwnIDogdGhpcy5vcHRpb25zLnF1ZXVlLnNjb3BlKS5hZGQodGhpcyk7CiAgfSwKICBsb29wOiBmdW5jdGlvbih0aW1lUG9zKSB7CiAgICBpZiAodGltZVBvcyA+PSB0aGlzLnN0YXJ0T24pIHsKICAgICAgaWYgKHRpbWVQb3MgPj0gdGhpcy5maW5pc2hPbikgewogICAgICAgIHRoaXMucmVuZGVyKDEuMCk7CiAgICAgICAgdGhpcy5jYW5jZWwoKTsKICAgICAgICB0aGlzLmV2ZW50KCdiZWZvcmVGaW5pc2gnKTsKICAgICAgICBpZiAodGhpcy5maW5pc2gpIHRoaXMuZmluaXNoKCk7IAogICAgICAgIHRoaXMuZXZlbnQoJ2FmdGVyRmluaXNoJyk7CiAgICAgICAgcmV0dXJuOyAgCiAgICAgIH0KICAgICAgdmFyIHBvcyAgID0gKHRpbWVQb3MgLSB0aGlzLnN0YXJ0T24pIC8gdGhpcy50b3RhbFRpbWUsCiAgICAgICAgICBmcmFtZSA9IChwb3MgKiB0aGlzLnRvdGFsRnJhbWVzKS5yb3VuZCgpOwogICAgICBpZiAoZnJhbWUgPiB0aGlzLmN1cnJlbnRGcmFtZSkgewogICAgICAgIHRoaXMucmVuZGVyKHBvcyk7CiAgICAgICAgdGhpcy5jdXJyZW50RnJhbWUgPSBmcmFtZTsKICAgICAgfQogICAgfQogIH0sCiAgY2FuY2VsOiBmdW5jdGlvbigpIHsKICAgIGlmICghdGhpcy5vcHRpb25zLnN5bmMpCiAgICAgIEVmZmVjdC5RdWV1ZXMuZ2V0KE9iamVjdC5pc1N0cmluZyh0aGlzLm9wdGlvbnMucXVldWUpID8gCiAgICAgICAgJ2dsb2JhbCcgOiB0aGlzLm9wdGlvbnMucXVldWUuc2NvcGUpLnJlbW92ZSh0aGlzKTsKICAgIHRoaXMuc3RhdGUgPSAnZmluaXNoZWQnOwogIH0sCiAgZXZlbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSkgewogICAgaWYgKHRoaXMub3B0aW9uc1tldmVudE5hbWUgKyAnSW50ZXJuYWwnXSkgdGhpcy5vcHRpb25zW2V2ZW50TmFtZSArICdJbnRlcm5hbCddKHRoaXMpOwogICAgaWYgKHRoaXMub3B0aW9uc1tldmVudE5hbWVdKSB0aGlzLm9wdGlvbnNbZXZlbnROYW1lXSh0aGlzKTsKICB9LAogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgdmFyIGRhdGEgPSAkSCgpOwogICAgZm9yKHByb3BlcnR5IGluIHRoaXMpCiAgICAgIGlmICghT2JqZWN0LmlzRnVuY3Rpb24odGhpc1twcm9wZXJ0eV0pKSBkYXRhLnNldChwcm9wZXJ0eSwgdGhpc1twcm9wZXJ0eV0pOwogICAgcmV0dXJuICcjPEVmZmVjdDonICsgZGF0YS5pbnNwZWN0KCkgKyAnLG9wdGlvbnM6JyArICRIKHRoaXMub3B0aW9ucykuaW5zcGVjdCgpICsgJz4nOwogIH0KfSk7CgpFZmZlY3QuUGFyYWxsZWwgPSBDbGFzcy5jcmVhdGUoRWZmZWN0LkJhc2UsIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihlZmZlY3RzKSB7CiAgICB0aGlzLmVmZmVjdHMgPSBlZmZlY3RzIHx8IFtdOwogICAgdGhpcy5zdGFydChhcmd1bWVudHNbMV0pOwogIH0sCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgdGhpcy5lZmZlY3RzLmludm9rZSgncmVuZGVyJywgcG9zaXRpb24pOwogIH0sCiAgZmluaXNoOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgdGhpcy5lZmZlY3RzLmVhY2goIGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBlZmZlY3QucmVuZGVyKDEuMCk7CiAgICAgIGVmZmVjdC5jYW5jZWwoKTsKICAgICAgZWZmZWN0LmV2ZW50KCdiZWZvcmVGaW5pc2gnKTsKICAgICAgaWYgKGVmZmVjdC5maW5pc2gpIGVmZmVjdC5maW5pc2gocG9zaXRpb24pOwogICAgICBlZmZlY3QuZXZlbnQoJ2FmdGVyRmluaXNoJyk7CiAgICB9KTsKICB9Cn0pOwoKRWZmZWN0LlR3ZWVuID0gQ2xhc3MuY3JlYXRlKEVmZmVjdC5CYXNlLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ob2JqZWN0LCBmcm9tLCB0bykgewogICAgb2JqZWN0ID0gT2JqZWN0LmlzU3RyaW5nKG9iamVjdCkgPyAkKG9iamVjdCkgOiBvYmplY3Q7CiAgICB2YXIgYXJncyA9ICRBKGFyZ3VtZW50cyksIG1ldGhvZCA9IGFyZ3MubGFzdCgpLCAKICAgICAgb3B0aW9ucyA9IGFyZ3MubGVuZ3RoID09IDUgPyBhcmdzWzNdIDogbnVsbDsKICAgIHRoaXMubWV0aG9kID0gT2JqZWN0LmlzRnVuY3Rpb24obWV0aG9kKSA/IG1ldGhvZC5iaW5kKG9iamVjdCkgOgogICAgICBPYmplY3QuaXNGdW5jdGlvbihvYmplY3RbbWV0aG9kXSkgPyBvYmplY3RbbWV0aG9kXS5iaW5kKG9iamVjdCkgOiAKICAgICAgZnVuY3Rpb24odmFsdWUpIHsgb2JqZWN0W21ldGhvZF0gPSB2YWx1ZSB9OwogICAgdGhpcy5zdGFydChPYmplY3QuZXh0ZW5kKHsgZnJvbTogZnJvbSwgdG86IHRvIH0sIG9wdGlvbnMgfHwgeyB9KSk7CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICB0aGlzLm1ldGhvZChwb3NpdGlvbik7CiAgfQp9KTsKCkVmZmVjdC5FdmVudCA9IENsYXNzLmNyZWF0ZShFZmZlY3QuQmFzZSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5zdGFydChPYmplY3QuZXh0ZW5kKHsgZHVyYXRpb246IDAgfSwgYXJndW1lbnRzWzBdIHx8IHsgfSkpOwogIH0sCiAgdXBkYXRlOiBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbgp9KTsKCkVmZmVjdC5PcGFjaXR5ID0gQ2xhc3MuY3JlYXRlKEVmZmVjdC5CYXNlLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmICghdGhpcy5lbGVtZW50KSB0aHJvdyhFZmZlY3QuX2VsZW1lbnREb2VzTm90RXhpc3RFcnJvcik7CiAgICAvLyBtYWtlIHRoaXMgd29yayBvbiBJRSBvbiBlbGVtZW50cyB3aXRob3V0ICdsYXlvdXQnCiAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUgJiYgKCF0aGlzLmVsZW1lbnQuY3VycmVudFN0eWxlLmhhc0xheW91dCkpCiAgICAgIHRoaXMuZWxlbWVudC5zZXRTdHlsZSh7em9vbTogMX0pOwogICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgZnJvbTogdGhpcy5lbGVtZW50LmdldE9wYWNpdHkoKSB8fCAwLjAsCiAgICAgIHRvOiAgIDEuMAogICAgfSwgYXJndW1lbnRzWzFdIHx8IHsgfSk7CiAgICB0aGlzLnN0YXJ0KG9wdGlvbnMpOwogIH0sCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgdGhpcy5lbGVtZW50LnNldE9wYWNpdHkocG9zaXRpb24pOwogIH0KfSk7CgpFZmZlY3QuTW92ZSA9IENsYXNzLmNyZWF0ZShFZmZlY3QuQmFzZSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoIXRoaXMuZWxlbWVudCkgdGhyb3coRWZmZWN0Ll9lbGVtZW50RG9lc05vdEV4aXN0RXJyb3IpOwogICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgeDogICAgMCwKICAgICAgeTogICAgMCwKICAgICAgbW9kZTogJ3JlbGF0aXZlJwogICAgfSwgYXJndW1lbnRzWzFdIHx8IHsgfSk7CiAgICB0aGlzLnN0YXJ0KG9wdGlvbnMpOwogIH0sCiAgc2V0dXA6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5lbGVtZW50Lm1ha2VQb3NpdGlvbmVkKCk7CiAgICB0aGlzLm9yaWdpbmFsTGVmdCA9IHBhcnNlRmxvYXQodGhpcy5lbGVtZW50LmdldFN0eWxlKCdsZWZ0JykgfHwgJzAnKTsKICAgIHRoaXMub3JpZ2luYWxUb3AgID0gcGFyc2VGbG9hdCh0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ3RvcCcpICB8fCAnMCcpOwogICAgaWYgKHRoaXMub3B0aW9ucy5tb2RlID09ICdhYnNvbHV0ZScpIHsKICAgICAgdGhpcy5vcHRpb25zLnggPSB0aGlzLm9wdGlvbnMueCAtIHRoaXMub3JpZ2luYWxMZWZ0OwogICAgICB0aGlzLm9wdGlvbnMueSA9IHRoaXMub3B0aW9ucy55IC0gdGhpcy5vcmlnaW5hbFRvcDsKICAgIH0KICB9LAogIHVwZGF0ZTogZnVuY3Rpb24ocG9zaXRpb24pIHsKICAgIHRoaXMuZWxlbWVudC5zZXRTdHlsZSh7CiAgICAgIGxlZnQ6ICh0aGlzLm9wdGlvbnMueCAgKiBwb3NpdGlvbiArIHRoaXMub3JpZ2luYWxMZWZ0KS5yb3VuZCgpICsgJ3B4JywKICAgICAgdG9wOiAgKHRoaXMub3B0aW9ucy55ICAqIHBvc2l0aW9uICsgdGhpcy5vcmlnaW5hbFRvcCkucm91bmQoKSAgKyAncHgnCiAgICB9KTsKICB9Cn0pOwoKLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CkVmZmVjdC5Nb3ZlQnkgPSBmdW5jdGlvbihlbGVtZW50LCB0b1RvcCwgdG9MZWZ0KSB7CiAgcmV0dXJuIG5ldyBFZmZlY3QuTW92ZShlbGVtZW50LCAKICAgIE9iamVjdC5leHRlbmQoeyB4OiB0b0xlZnQsIHk6IHRvVG9wIH0sIGFyZ3VtZW50c1szXSB8fCB7IH0pKTsKfTsKCkVmZmVjdC5TY2FsZSA9IENsYXNzLmNyZWF0ZShFZmZlY3QuQmFzZSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIHBlcmNlbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoIXRoaXMuZWxlbWVudCkgdGhyb3coRWZmZWN0Ll9lbGVtZW50RG9lc05vdEV4aXN0RXJyb3IpOwogICAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgICAgc2NhbGVYOiB0cnVlLAogICAgICBzY2FsZVk6IHRydWUsCiAgICAgIHNjYWxlQ29udGVudDogdHJ1ZSwKICAgICAgc2NhbGVGcm9tQ2VudGVyOiBmYWxzZSwKICAgICAgc2NhbGVNb2RlOiAnYm94JywgICAgICAgIC8vICdib3gnIG9yICdjb250ZW50cycgb3IgeyB9IHdpdGggcHJvdmlkZWQgdmFsdWVzCiAgICAgIHNjYWxlRnJvbTogMTAwLjAsCiAgICAgIHNjYWxlVG86ICAgcGVyY2VudAogICAgfSwgYXJndW1lbnRzWzJdIHx8IHsgfSk7CiAgICB0aGlzLnN0YXJ0KG9wdGlvbnMpOwogIH0sCiAgc2V0dXA6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5yZXN0b3JlQWZ0ZXJGaW5pc2ggPSB0aGlzLm9wdGlvbnMucmVzdG9yZUFmdGVyRmluaXNoIHx8IGZhbHNlOwogICAgdGhpcy5lbGVtZW50UG9zaXRpb25pbmcgPSB0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyk7CiAgICAKICAgIHRoaXMub3JpZ2luYWxTdHlsZSA9IHsgfTsKICAgIFsndG9wJywnbGVmdCcsJ3dpZHRoJywnaGVpZ2h0JywnZm9udFNpemUnXS5lYWNoKCBmdW5jdGlvbihrKSB7CiAgICAgIHRoaXMub3JpZ2luYWxTdHlsZVtrXSA9IHRoaXMuZWxlbWVudC5zdHlsZVtrXTsKICAgIH0uYmluZCh0aGlzKSk7CiAgICAgIAogICAgdGhpcy5vcmlnaW5hbFRvcCAgPSB0aGlzLmVsZW1lbnQub2Zmc2V0VG9wOwogICAgdGhpcy5vcmlnaW5hbExlZnQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0TGVmdDsKICAgIAogICAgdmFyIGZvbnRTaXplID0gdGhpcy5lbGVtZW50LmdldFN0eWxlKCdmb250LXNpemUnKSB8fCAnMTAwJSc7CiAgICBbJ2VtJywncHgnLCclJywncHQnXS5lYWNoKCBmdW5jdGlvbihmb250U2l6ZVR5cGUpIHsKICAgICAgaWYgKGZvbnRTaXplLmluZGV4T2YoZm9udFNpemVUeXBlKT4wKSB7CiAgICAgICAgdGhpcy5mb250U2l6ZSAgICAgPSBwYXJzZUZsb2F0KGZvbnRTaXplKTsKICAgICAgICB0aGlzLmZvbnRTaXplVHlwZSA9IGZvbnRTaXplVHlwZTsKICAgICAgfQogICAgfS5iaW5kKHRoaXMpKTsKICAgIAogICAgdGhpcy5mYWN0b3IgPSAodGhpcy5vcHRpb25zLnNjYWxlVG8gLSB0aGlzLm9wdGlvbnMuc2NhbGVGcm9tKS8xMDA7CiAgICAKICAgIHRoaXMuZGltcyA9IG51bGw7CiAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlTW9kZT09J2JveCcpCiAgICAgIHRoaXMuZGltcyA9IFt0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0LCB0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGhdOwogICAgaWYgKC9eY29udGVudC8udGVzdCh0aGlzLm9wdGlvbnMuc2NhbGVNb2RlKSkKICAgICAgdGhpcy5kaW1zID0gW3RoaXMuZWxlbWVudC5zY3JvbGxIZWlnaHQsIHRoaXMuZWxlbWVudC5zY3JvbGxXaWR0aF07CiAgICBpZiAoIXRoaXMuZGltcykKICAgICAgdGhpcy5kaW1zID0gW3RoaXMub3B0aW9ucy5zY2FsZU1vZGUub3JpZ2luYWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2NhbGVNb2RlLm9yaWdpbmFsV2lkdGhdOwogIH0sCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgdmFyIGN1cnJlbnRTY2FsZSA9ICh0aGlzLm9wdGlvbnMuc2NhbGVGcm9tLzEwMC4wKSArICh0aGlzLmZhY3RvciAqIHBvc2l0aW9uKTsKICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGVDb250ZW50ICYmIHRoaXMuZm9udFNpemUpCiAgICAgIHRoaXMuZWxlbWVudC5zZXRTdHlsZSh7Zm9udFNpemU6IHRoaXMuZm9udFNpemUgKiBjdXJyZW50U2NhbGUgKyB0aGlzLmZvbnRTaXplVHlwZSB9KTsKICAgIHRoaXMuc2V0RGltZW5zaW9ucyh0aGlzLmRpbXNbMF0gKiBjdXJyZW50U2NhbGUsIHRoaXMuZGltc1sxXSAqIGN1cnJlbnRTY2FsZSk7CiAgfSwKICBmaW5pc2g6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICBpZiAodGhpcy5yZXN0b3JlQWZ0ZXJGaW5pc2gpIHRoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm9yaWdpbmFsU3R5bGUpOwogIH0sCiAgc2V0RGltZW5zaW9uczogZnVuY3Rpb24oaGVpZ2h0LCB3aWR0aCkgewogICAgdmFyIGQgPSB7IH07CiAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlWCkgZC53aWR0aCA9IHdpZHRoLnJvdW5kKCkgKyAncHgnOwogICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsZVkpIGQuaGVpZ2h0ID0gaGVpZ2h0LnJvdW5kKCkgKyAncHgnOwogICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsZUZyb21DZW50ZXIpIHsKICAgICAgdmFyIHRvcGQgID0gKGhlaWdodCAtIHRoaXMuZGltc1swXSkvMjsKICAgICAgdmFyIGxlZnRkID0gKHdpZHRoICAtIHRoaXMuZGltc1sxXSkvMjsKICAgICAgaWYgKHRoaXMuZWxlbWVudFBvc2l0aW9uaW5nID09ICdhYnNvbHV0ZScpIHsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNjYWxlWSkgZC50b3AgPSB0aGlzLm9yaWdpbmFsVG9wLXRvcGQgKyAncHgnOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGVYKSBkLmxlZnQgPSB0aGlzLm9yaWdpbmFsTGVmdC1sZWZ0ZCArICdweCc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zY2FsZVkpIGQudG9wID0gLXRvcGQgKyAncHgnOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2NhbGVYKSBkLmxlZnQgPSAtbGVmdGQgKyAncHgnOwogICAgICB9CiAgICB9CiAgICB0aGlzLmVsZW1lbnQuc2V0U3R5bGUoZCk7CiAgfQp9KTsKCkVmZmVjdC5IaWdobGlnaHQgPSBDbGFzcy5jcmVhdGUoRWZmZWN0LkJhc2UsIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKCF0aGlzLmVsZW1lbnQpIHRocm93KEVmZmVjdC5fZWxlbWVudERvZXNOb3RFeGlzdEVycm9yKTsKICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7IHN0YXJ0Y29sb3I6ICcjZmZmZjk5JyB9LCBhcmd1bWVudHNbMV0gfHwgeyB9KTsKICAgIHRoaXMuc3RhcnQob3B0aW9ucyk7CiAgfSwKICBzZXR1cDogZnVuY3Rpb24oKSB7CiAgICAvLyBQcmV2ZW50IGV4ZWN1dGluZyBvbiBlbGVtZW50cyBub3QgaW4gdGhlIGxheW91dCBmbG93CiAgICBpZiAodGhpcy5lbGVtZW50LmdldFN0eWxlKCdkaXNwbGF5Jyk9PSdub25lJykgeyB0aGlzLmNhbmNlbCgpOyByZXR1cm47IH0KICAgIC8vIERpc2FibGUgYmFja2dyb3VuZCBpbWFnZSBkdXJpbmcgdGhlIGVmZmVjdAogICAgdGhpcy5vbGRTdHlsZSA9IHsgfTsKICAgIGlmICghdGhpcy5vcHRpb25zLmtlZXBCYWNrZ3JvdW5kSW1hZ2UpIHsKICAgICAgdGhpcy5vbGRTdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSB0aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ2JhY2tncm91bmQtaW1hZ2UnKTsKICAgICAgdGhpcy5lbGVtZW50LnNldFN0eWxlKHtiYWNrZ3JvdW5kSW1hZ2U6ICdub25lJ30pOwogICAgfQogICAgaWYgKCF0aGlzLm9wdGlvbnMuZW5kY29sb3IpCiAgICAgIHRoaXMub3B0aW9ucy5lbmRjb2xvciA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpLnBhcnNlQ29sb3IoJyNmZmZmZmYnKTsKICAgIGlmICghdGhpcy5vcHRpb25zLnJlc3RvcmVjb2xvcikKICAgICAgdGhpcy5vcHRpb25zLnJlc3RvcmVjb2xvciA9IHRoaXMuZWxlbWVudC5nZXRTdHlsZSgnYmFja2dyb3VuZC1jb2xvcicpOwogICAgLy8gaW5pdCBjb2xvciBjYWxjdWxhdGlvbnMKICAgIHRoaXMuX2Jhc2UgID0gJFIoMCwyKS5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBwYXJzZUludCh0aGlzLm9wdGlvbnMuc3RhcnRjb2xvci5zbGljZShpKjIrMSxpKjIrMyksMTYpIH0uYmluZCh0aGlzKSk7CiAgICB0aGlzLl9kZWx0YSA9ICRSKDAsMikubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4gcGFyc2VJbnQodGhpcy5vcHRpb25zLmVuZGNvbG9yLnNsaWNlKGkqMisxLGkqMiszKSwxNiktdGhpcy5fYmFzZVtpXSB9LmJpbmQodGhpcykpOwogIH0sCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgdGhpcy5lbGVtZW50LnNldFN0eWxlKHtiYWNrZ3JvdW5kQ29sb3I6ICRSKDAsMikuaW5qZWN0KCcjJyxmdW5jdGlvbihtLHYsaSl7CiAgICAgIHJldHVybiBtKygodGhpcy5fYmFzZVtpXSsodGhpcy5fZGVsdGFbaV0qcG9zaXRpb24pKS5yb3VuZCgpLnRvQ29sb3JQYXJ0KCkpOyB9LmJpbmQodGhpcykpIH0pOwogIH0sCiAgZmluaXNoOiBmdW5jdGlvbigpIHsKICAgIHRoaXMuZWxlbWVudC5zZXRTdHlsZShPYmplY3QuZXh0ZW5kKHRoaXMub2xkU3R5bGUsIHsKICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLm9wdGlvbnMucmVzdG9yZWNvbG9yCiAgICB9KSk7CiAgfQp9KTsKCkVmZmVjdC5TY3JvbGxUbyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1sxXSB8fCB7IH0sCiAgICBzY3JvbGxPZmZzZXRzID0gZG9jdW1lbnQudmlld3BvcnQuZ2V0U2Nyb2xsT2Zmc2V0cygpLAogICAgZWxlbWVudE9mZnNldHMgPSAkKGVsZW1lbnQpLmN1bXVsYXRpdmVPZmZzZXQoKSwKICAgIG1heCA9ICh3aW5kb3cuaGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KSAtIGRvY3VtZW50LnZpZXdwb3J0LmdldEhlaWdodCgpOyAgCgogIGlmIChvcHRpb25zLm9mZnNldCkgZWxlbWVudE9mZnNldHNbMV0gKz0gb3B0aW9ucy5vZmZzZXQ7CgogIHJldHVybiBuZXcgRWZmZWN0LlR3ZWVuKG51bGwsCiAgICBzY3JvbGxPZmZzZXRzLnRvcCwKICAgIGVsZW1lbnRPZmZzZXRzWzFdID4gbWF4ID8gbWF4IDogZWxlbWVudE9mZnNldHNbMV0sCiAgICBvcHRpb25zLAogICAgZnVuY3Rpb24ocCl7IHNjcm9sbFRvKHNjcm9sbE9mZnNldHMubGVmdCwgcC5yb3VuZCgpKSB9CiAgKTsKfTsKCi8qIC0tLS0tLS0tLS0tLS0gY29tYmluYXRpb24gZWZmZWN0cyAtLS0tLS0tLS0tLS0tICovCgpFZmZlY3QuRmFkZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICB2YXIgb2xkT3BhY2l0eSA9IGVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eSgpOwogIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICBmcm9tOiBlbGVtZW50LmdldE9wYWNpdHkoKSB8fCAxLjAsCiAgICB0bzogICAwLjAsCiAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgCiAgICAgIGlmIChlZmZlY3Qub3B0aW9ucy50byE9MCkgcmV0dXJuOwogICAgICBlZmZlY3QuZWxlbWVudC5oaWRlKCkuc2V0U3R5bGUoe29wYWNpdHk6IG9sZE9wYWNpdHl9KTsgCiAgICB9CiAgfSwgYXJndW1lbnRzWzFdIHx8IHsgfSk7CiAgcmV0dXJuIG5ldyBFZmZlY3QuT3BhY2l0eShlbGVtZW50LG9wdGlvbnMpOwp9OwoKRWZmZWN0LkFwcGVhciA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICB2YXIgb3B0aW9ucyA9IE9iamVjdC5leHRlbmQoewogIGZyb206IChlbGVtZW50LmdldFN0eWxlKCdkaXNwbGF5JykgPT0gJ25vbmUnID8gMC4wIDogZWxlbWVudC5nZXRPcGFjaXR5KCkgfHwgMC4wKSwKICB0bzogICAxLjAsCiAgLy8gZm9yY2UgU2FmYXJpIHRvIHJlbmRlciBmbG9hdGVkIGVsZW1lbnRzIHByb3Blcmx5CiAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICBlZmZlY3QuZWxlbWVudC5mb3JjZVJlcmVuZGVyaW5nKCk7CiAgfSwKICBiZWZvcmVTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICBlZmZlY3QuZWxlbWVudC5zZXRPcGFjaXR5KGVmZmVjdC5vcHRpb25zLmZyb20pLnNob3coKTsgCiAgfX0sIGFyZ3VtZW50c1sxXSB8fCB7IH0pOwogIHJldHVybiBuZXcgRWZmZWN0Lk9wYWNpdHkoZWxlbWVudCxvcHRpb25zKTsKfTsKCkVmZmVjdC5QdWZmID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvbGRTdHlsZSA9IHsgCiAgICBvcGFjaXR5OiBlbGVtZW50LmdldElubGluZU9wYWNpdHkoKSwgCiAgICBwb3NpdGlvbjogZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKSwKICAgIHRvcDogIGVsZW1lbnQuc3R5bGUudG9wLAogICAgbGVmdDogZWxlbWVudC5zdHlsZS5sZWZ0LAogICAgd2lkdGg6IGVsZW1lbnQuc3R5bGUud2lkdGgsCiAgICBoZWlnaHQ6IGVsZW1lbnQuc3R5bGUuaGVpZ2h0CiAgfTsKICByZXR1cm4gbmV3IEVmZmVjdC5QYXJhbGxlbCgKICAgWyBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIDIwMCwgCiAgICAgIHsgc3luYzogdHJ1ZSwgc2NhbGVGcm9tQ2VudGVyOiB0cnVlLCBzY2FsZUNvbnRlbnQ6IHRydWUsIHJlc3RvcmVBZnRlckZpbmlzaDogdHJ1ZSB9KSwgCiAgICAgbmV3IEVmZmVjdC5PcGFjaXR5KGVsZW1lbnQsIHsgc3luYzogdHJ1ZSwgdG86IDAuMCB9ICkgXSwgCiAgICAgT2JqZWN0LmV4dGVuZCh7IGR1cmF0aW9uOiAxLjAsIAogICAgICBiZWZvcmVTZXR1cEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgICAgICBQb3NpdGlvbi5hYnNvbHV0aXplKGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQpCiAgICAgIH0sCiAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICAgICBlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50LmhpZGUoKS5zZXRTdHlsZShvbGRTdHlsZSk7IH0KICAgICB9LCBhcmd1bWVudHNbMV0gfHwgeyB9KQogICApOwp9OwoKRWZmZWN0LkJsaW5kVXAgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgZWxlbWVudC5tYWtlQ2xpcHBpbmcoKTsKICByZXR1cm4gbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCAwLAogICAgT2JqZWN0LmV4dGVuZCh7IHNjYWxlQ29udGVudDogZmFsc2UsIAogICAgICBzY2FsZVg6IGZhbHNlLCAKICAgICAgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlLAogICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgICAgICBlZmZlY3QuZWxlbWVudC5oaWRlKCkudW5kb0NsaXBwaW5nKCk7CiAgICAgIH0gCiAgICB9LCBhcmd1bWVudHNbMV0gfHwgeyB9KQogICk7Cn07CgpFZmZlY3QuQmxpbmREb3duID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBlbGVtZW50RGltZW5zaW9ucyA9IGVsZW1lbnQuZ2V0RGltZW5zaW9ucygpOwogIHJldHVybiBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIDEwMCwgT2JqZWN0LmV4dGVuZCh7IAogICAgc2NhbGVDb250ZW50OiBmYWxzZSwgCiAgICBzY2FsZVg6IGZhbHNlLAogICAgc2NhbGVGcm9tOiAwLAogICAgc2NhbGVNb2RlOiB7b3JpZ2luYWxIZWlnaHQ6IGVsZW1lbnREaW1lbnNpb25zLmhlaWdodCwgb3JpZ2luYWxXaWR0aDogZWxlbWVudERpbWVuc2lvbnMud2lkdGh9LAogICAgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlLAogICAgYWZ0ZXJTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgIGVmZmVjdC5lbGVtZW50Lm1ha2VDbGlwcGluZygpLnNldFN0eWxlKHtoZWlnaHQ6ICcwcHgnfSkuc2hvdygpOyAKICAgIH0sICAKICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBlZmZlY3QuZWxlbWVudC51bmRvQ2xpcHBpbmcoKTsKICAgIH0KICB9LCBhcmd1bWVudHNbMV0gfHwgeyB9KSk7Cn07CgpFZmZlY3QuU3dpdGNoT2ZmID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvbGRPcGFjaXR5ID0gZWxlbWVudC5nZXRJbmxpbmVPcGFjaXR5KCk7CiAgcmV0dXJuIG5ldyBFZmZlY3QuQXBwZWFyKGVsZW1lbnQsIE9iamVjdC5leHRlbmQoewogICAgZHVyYXRpb246IDAuNCwKICAgIGZyb206IDAsCiAgICB0cmFuc2l0aW9uOiBFZmZlY3QuVHJhbnNpdGlvbnMuZmxpY2tlciwKICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBuZXcgRWZmZWN0LlNjYWxlKGVmZmVjdC5lbGVtZW50LCAxLCB7IAogICAgICAgIGR1cmF0aW9uOiAwLjMsIHNjYWxlRnJvbUNlbnRlcjogdHJ1ZSwKICAgICAgICBzY2FsZVg6IGZhbHNlLCBzY2FsZUNvbnRlbnQ6IGZhbHNlLCByZXN0b3JlQWZ0ZXJGaW5pc2g6IHRydWUsCiAgICAgICAgYmVmb3JlU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgeyAKICAgICAgICAgIGVmZmVjdC5lbGVtZW50Lm1ha2VQb3NpdGlvbmVkKCkubWFrZUNsaXBwaW5nKCk7CiAgICAgICAgfSwKICAgICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgICAgICAgIGVmZmVjdC5lbGVtZW50LmhpZGUoKS51bmRvQ2xpcHBpbmcoKS51bmRvUG9zaXRpb25lZCgpLnNldFN0eWxlKHtvcGFjaXR5OiBvbGRPcGFjaXR5fSk7CiAgICAgICAgfQogICAgICB9KQogICAgfQogIH0sIGFyZ3VtZW50c1sxXSB8fCB7IH0pKTsKfTsKCkVmZmVjdC5Ecm9wT3V0ID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvbGRTdHlsZSA9IHsKICAgIHRvcDogZWxlbWVudC5nZXRTdHlsZSgndG9wJyksCiAgICBsZWZ0OiBlbGVtZW50LmdldFN0eWxlKCdsZWZ0JyksCiAgICBvcGFjaXR5OiBlbGVtZW50LmdldElubGluZU9wYWNpdHkoKSB9OwogIHJldHVybiBuZXcgRWZmZWN0LlBhcmFsbGVsKAogICAgWyBuZXcgRWZmZWN0Lk1vdmUoZWxlbWVudCwge3g6IDAsIHk6IDEwMCwgc3luYzogdHJ1ZSB9KSwgCiAgICAgIG5ldyBFZmZlY3QuT3BhY2l0eShlbGVtZW50LCB7IHN5bmM6IHRydWUsIHRvOiAwLjAgfSkgXSwKICAgIE9iamVjdC5leHRlbmQoCiAgICAgIHsgZHVyYXRpb246IDAuNSwKICAgICAgICBiZWZvcmVTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgICAgICBlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50Lm1ha2VQb3NpdGlvbmVkKCk7IAogICAgICAgIH0sCiAgICAgICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgICAgICBlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50LmhpZGUoKS51bmRvUG9zaXRpb25lZCgpLnNldFN0eWxlKG9sZFN0eWxlKTsKICAgICAgICB9IAogICAgICB9LCBhcmd1bWVudHNbMV0gfHwgeyB9KSk7Cn07CgpFZmZlY3QuU2hha2UgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgIGRpc3RhbmNlOiAyMCwKICAgIGR1cmF0aW9uOiAwLjUKICB9LCBhcmd1bWVudHNbMV0gfHwge30pOwogIHZhciBkaXN0YW5jZSA9IHBhcnNlRmxvYXQob3B0aW9ucy5kaXN0YW5jZSk7CiAgdmFyIHNwbGl0ID0gcGFyc2VGbG9hdChvcHRpb25zLmR1cmF0aW9uKSAvIDEwLjA7CiAgdmFyIG9sZFN0eWxlID0gewogICAgdG9wOiBlbGVtZW50LmdldFN0eWxlKCd0b3AnKSwKICAgIGxlZnQ6IGVsZW1lbnQuZ2V0U3R5bGUoJ2xlZnQnKSB9OwogICAgcmV0dXJuIG5ldyBFZmZlY3QuTW92ZShlbGVtZW50LAogICAgICB7IHg6ICBkaXN0YW5jZSwgeTogMCwgZHVyYXRpb246IHNwbGl0LCBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwKICAgICAgeyB4OiAtZGlzdGFuY2UqMiwgeTogMCwgZHVyYXRpb246IHNwbGl0KjIsICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwKICAgICAgeyB4OiAgZGlzdGFuY2UqMiwgeTogMCwgZHVyYXRpb246IHNwbGl0KjIsICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwKICAgICAgeyB4OiAtZGlzdGFuY2UqMiwgeTogMCwgZHVyYXRpb246IHNwbGl0KjIsICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwKICAgICAgeyB4OiAgZGlzdGFuY2UqMiwgeTogMCwgZHVyYXRpb246IHNwbGl0KjIsICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwKICAgICAgeyB4OiAtZGlzdGFuY2UsIHk6IDAsIGR1cmF0aW9uOiBzcGxpdCwgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgICAgZWZmZWN0LmVsZW1lbnQudW5kb1Bvc2l0aW9uZWQoKS5zZXRTdHlsZShvbGRTdHlsZSk7CiAgfX0pIH19KSB9fSkgfX0pIH19KSB9fSk7Cn07CgpFZmZlY3QuU2xpZGVEb3duID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpLmNsZWFuV2hpdGVzcGFjZSgpOwogIC8vIFNsaWRlRG93biBuZWVkIHRvIGhhdmUgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQgd3JhcHBlZCBpbiBhIGNvbnRhaW5lciBlbGVtZW50IHdpdGggZml4ZWQgaGVpZ2h0IQogIHZhciBvbGRJbm5lckJvdHRvbSA9IGVsZW1lbnQuZG93bigpLmdldFN0eWxlKCdib3R0b20nKTsKICB2YXIgZWxlbWVudERpbWVuc2lvbnMgPSBlbGVtZW50LmdldERpbWVuc2lvbnMoKTsKICByZXR1cm4gbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCAxMDAsIE9iamVjdC5leHRlbmQoeyAKICAgIHNjYWxlQ29udGVudDogZmFsc2UsIAogICAgc2NhbGVYOiBmYWxzZSwgCiAgICBzY2FsZUZyb206IHdpbmRvdy5vcGVyYSA/IDAgOiAxLAogICAgc2NhbGVNb2RlOiB7b3JpZ2luYWxIZWlnaHQ6IGVsZW1lbnREaW1lbnNpb25zLmhlaWdodCwgb3JpZ2luYWxXaWR0aDogZWxlbWVudERpbWVuc2lvbnMud2lkdGh9LAogICAgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlLAogICAgYWZ0ZXJTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgIGVmZmVjdC5lbGVtZW50Lm1ha2VQb3NpdGlvbmVkKCk7CiAgICAgIGVmZmVjdC5lbGVtZW50LmRvd24oKS5tYWtlUG9zaXRpb25lZCgpOwogICAgICBpZiAod2luZG93Lm9wZXJhKSBlZmZlY3QuZWxlbWVudC5zZXRTdHlsZSh7dG9wOiAnJ30pOwogICAgICBlZmZlY3QuZWxlbWVudC5tYWtlQ2xpcHBpbmcoKS5zZXRTdHlsZSh7aGVpZ2h0OiAnMHB4J30pLnNob3coKTsgCiAgICB9LAogICAgYWZ0ZXJVcGRhdGVJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgIGVmZmVjdC5lbGVtZW50LmRvd24oKS5zZXRTdHlsZSh7Ym90dG9tOgogICAgICAgIChlZmZlY3QuZGltc1swXSAtIGVmZmVjdC5lbGVtZW50LmNsaWVudEhlaWdodCkgKyAncHgnIH0pOyAKICAgIH0sCiAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgICAgZWZmZWN0LmVsZW1lbnQudW5kb0NsaXBwaW5nKCkudW5kb1Bvc2l0aW9uZWQoKTsKICAgICAgZWZmZWN0LmVsZW1lbnQuZG93bigpLnVuZG9Qb3NpdGlvbmVkKCkuc2V0U3R5bGUoe2JvdHRvbTogb2xkSW5uZXJCb3R0b219KTsgfQogICAgfSwgYXJndW1lbnRzWzFdIHx8IHsgfSkKICApOwp9OwoKRWZmZWN0LlNsaWRlVXAgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCkuY2xlYW5XaGl0ZXNwYWNlKCk7CiAgdmFyIG9sZElubmVyQm90dG9tID0gZWxlbWVudC5kb3duKCkuZ2V0U3R5bGUoJ2JvdHRvbScpOwogIHZhciBlbGVtZW50RGltZW5zaW9ucyA9IGVsZW1lbnQuZ2V0RGltZW5zaW9ucygpOwogIHJldHVybiBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIHdpbmRvdy5vcGVyYSA/IDAgOiAxLAogICBPYmplY3QuZXh0ZW5kKHsgc2NhbGVDb250ZW50OiBmYWxzZSwgCiAgICBzY2FsZVg6IGZhbHNlLCAKICAgIHNjYWxlTW9kZTogJ2JveCcsCiAgICBzY2FsZUZyb206IDEwMCwKICAgIHNjYWxlTW9kZToge29yaWdpbmFsSGVpZ2h0OiBlbGVtZW50RGltZW5zaW9ucy5oZWlnaHQsIG9yaWdpbmFsV2lkdGg6IGVsZW1lbnREaW1lbnNpb25zLndpZHRofSwKICAgIHJlc3RvcmVBZnRlckZpbmlzaDogdHJ1ZSwKICAgIGFmdGVyU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBlZmZlY3QuZWxlbWVudC5tYWtlUG9zaXRpb25lZCgpOwogICAgICBlZmZlY3QuZWxlbWVudC5kb3duKCkubWFrZVBvc2l0aW9uZWQoKTsKICAgICAgaWYgKHdpbmRvdy5vcGVyYSkgZWZmZWN0LmVsZW1lbnQuc2V0U3R5bGUoe3RvcDogJyd9KTsKICAgICAgZWZmZWN0LmVsZW1lbnQubWFrZUNsaXBwaW5nKCkuc2hvdygpOwogICAgfSwgIAogICAgYWZ0ZXJVcGRhdGVJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgIGVmZmVjdC5lbGVtZW50LmRvd24oKS5zZXRTdHlsZSh7Ym90dG9tOgogICAgICAgIChlZmZlY3QuZGltc1swXSAtIGVmZmVjdC5lbGVtZW50LmNsaWVudEhlaWdodCkgKyAncHgnIH0pOwogICAgfSwKICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBlZmZlY3QuZWxlbWVudC5oaWRlKCkudW5kb0NsaXBwaW5nKCkudW5kb1Bvc2l0aW9uZWQoKTsKICAgICAgZWZmZWN0LmVsZW1lbnQuZG93bigpLnVuZG9Qb3NpdGlvbmVkKCkuc2V0U3R5bGUoe2JvdHRvbTogb2xkSW5uZXJCb3R0b219KTsKICAgIH0KICAgfSwgYXJndW1lbnRzWzFdIHx8IHsgfSkKICApOwp9OwoKLy8gQnVnIGluIG9wZXJhIG1ha2VzIHRoZSBURCBjb250YWluaW5nIHRoaXMgZWxlbWVudCBleHBhbmQgZm9yIGEgaW5zdGFuY2UgYWZ0ZXIgZmluaXNoIApFZmZlY3QuU3F1aXNoID0gZnVuY3Rpb24oZWxlbWVudCkgewogIHJldHVybiBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIHdpbmRvdy5vcGVyYSA/IDEgOiAwLCB7IAogICAgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlLAogICAgYmVmb3JlU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBlZmZlY3QuZWxlbWVudC5tYWtlQ2xpcHBpbmcoKTsgCiAgICB9LCAgCiAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgICAgZWZmZWN0LmVsZW1lbnQuaGlkZSgpLnVuZG9DbGlwcGluZygpOyAKICAgIH0KICB9KTsKfTsKCkVmZmVjdC5Hcm93ID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICBkaXJlY3Rpb246ICdjZW50ZXInLAogICAgbW92ZVRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5zaW5vaWRhbCwKICAgIHNjYWxlVHJhbnNpdGlvbjogRWZmZWN0LlRyYW5zaXRpb25zLnNpbm9pZGFsLAogICAgb3BhY2l0eVRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5mdWxsCiAgfSwgYXJndW1lbnRzWzFdIHx8IHsgfSk7CiAgdmFyIG9sZFN0eWxlID0gewogICAgdG9wOiBlbGVtZW50LnN0eWxlLnRvcCwKICAgIGxlZnQ6IGVsZW1lbnQuc3R5bGUubGVmdCwKICAgIGhlaWdodDogZWxlbWVudC5zdHlsZS5oZWlnaHQsCiAgICB3aWR0aDogZWxlbWVudC5zdHlsZS53aWR0aCwKICAgIG9wYWNpdHk6IGVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eSgpIH07CgogIHZhciBkaW1zID0gZWxlbWVudC5nZXREaW1lbnNpb25zKCk7ICAgIAogIHZhciBpbml0aWFsTW92ZVgsIGluaXRpYWxNb3ZlWTsKICB2YXIgbW92ZVgsIG1vdmVZOwogIAogIHN3aXRjaCAob3B0aW9ucy5kaXJlY3Rpb24pIHsKICAgIGNhc2UgJ3RvcC1sZWZ0JzoKICAgICAgaW5pdGlhbE1vdmVYID0gaW5pdGlhbE1vdmVZID0gbW92ZVggPSBtb3ZlWSA9IDA7IAogICAgICBicmVhazsKICAgIGNhc2UgJ3RvcC1yaWdodCc6CiAgICAgIGluaXRpYWxNb3ZlWCA9IGRpbXMud2lkdGg7CiAgICAgIGluaXRpYWxNb3ZlWSA9IG1vdmVZID0gMDsKICAgICAgbW92ZVggPSAtZGltcy53aWR0aDsKICAgICAgYnJlYWs7CiAgICBjYXNlICdib3R0b20tbGVmdCc6CiAgICAgIGluaXRpYWxNb3ZlWCA9IG1vdmVYID0gMDsKICAgICAgaW5pdGlhbE1vdmVZID0gZGltcy5oZWlnaHQ7CiAgICAgIG1vdmVZID0gLWRpbXMuaGVpZ2h0OwogICAgICBicmVhazsKICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6CiAgICAgIGluaXRpYWxNb3ZlWCA9IGRpbXMud2lkdGg7CiAgICAgIGluaXRpYWxNb3ZlWSA9IGRpbXMuaGVpZ2h0OwogICAgICBtb3ZlWCA9IC1kaW1zLndpZHRoOwogICAgICBtb3ZlWSA9IC1kaW1zLmhlaWdodDsKICAgICAgYnJlYWs7CiAgICBjYXNlICdjZW50ZXInOgogICAgICBpbml0aWFsTW92ZVggPSBkaW1zLndpZHRoIC8gMjsKICAgICAgaW5pdGlhbE1vdmVZID0gZGltcy5oZWlnaHQgLyAyOwogICAgICBtb3ZlWCA9IC1kaW1zLndpZHRoIC8gMjsKICAgICAgbW92ZVkgPSAtZGltcy5oZWlnaHQgLyAyOwogICAgICBicmVhazsKICB9CiAgCiAgcmV0dXJuIG5ldyBFZmZlY3QuTW92ZShlbGVtZW50LCB7CiAgICB4OiBpbml0aWFsTW92ZVgsCiAgICB5OiBpbml0aWFsTW92ZVksCiAgICBkdXJhdGlvbjogMC4wMSwgCiAgICBiZWZvcmVTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgIGVmZmVjdC5lbGVtZW50LmhpZGUoKS5tYWtlQ2xpcHBpbmcoKS5tYWtlUG9zaXRpb25lZCgpOwogICAgfSwKICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICBuZXcgRWZmZWN0LlBhcmFsbGVsKAogICAgICAgIFsgbmV3IEVmZmVjdC5PcGFjaXR5KGVmZmVjdC5lbGVtZW50LCB7IHN5bmM6IHRydWUsIHRvOiAxLjAsIGZyb206IDAuMCwgdHJhbnNpdGlvbjogb3B0aW9ucy5vcGFjaXR5VHJhbnNpdGlvbiB9KSwKICAgICAgICAgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxlbWVudCwgeyB4OiBtb3ZlWCwgeTogbW92ZVksIHN5bmM6IHRydWUsIHRyYW5zaXRpb246IG9wdGlvbnMubW92ZVRyYW5zaXRpb24gfSksCiAgICAgICAgICBuZXcgRWZmZWN0LlNjYWxlKGVmZmVjdC5lbGVtZW50LCAxMDAsIHsKICAgICAgICAgICAgc2NhbGVNb2RlOiB7IG9yaWdpbmFsSGVpZ2h0OiBkaW1zLmhlaWdodCwgb3JpZ2luYWxXaWR0aDogZGltcy53aWR0aCB9LCAKICAgICAgICAgICAgc3luYzogdHJ1ZSwgc2NhbGVGcm9tOiB3aW5kb3cub3BlcmEgPyAxIDogMCwgdHJhbnNpdGlvbjogb3B0aW9ucy5zY2FsZVRyYW5zaXRpb24sIHJlc3RvcmVBZnRlckZpbmlzaDogdHJ1ZX0pCiAgICAgICAgXSwgT2JqZWN0LmV4dGVuZCh7CiAgICAgICAgICAgICBiZWZvcmVTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICAgICAgICAgICAgIGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQuc2V0U3R5bGUoe2hlaWdodDogJzBweCd9KS5zaG93KCk7IAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICAgICAgICAgICBlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50LnVuZG9DbGlwcGluZygpLnVuZG9Qb3NpdGlvbmVkKCkuc2V0U3R5bGUob2xkU3R5bGUpOyAKICAgICAgICAgICAgIH0KICAgICAgICAgICB9LCBvcHRpb25zKQogICAgICApCiAgICB9CiAgfSk7Cn07CgpFZmZlY3QuU2hyaW5rID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICBkaXJlY3Rpb246ICdjZW50ZXInLAogICAgbW92ZVRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5zaW5vaWRhbCwKICAgIHNjYWxlVHJhbnNpdGlvbjogRWZmZWN0LlRyYW5zaXRpb25zLnNpbm9pZGFsLAogICAgb3BhY2l0eVRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5ub25lCiAgfSwgYXJndW1lbnRzWzFdIHx8IHsgfSk7CiAgdmFyIG9sZFN0eWxlID0gewogICAgdG9wOiBlbGVtZW50LnN0eWxlLnRvcCwKICAgIGxlZnQ6IGVsZW1lbnQuc3R5bGUubGVmdCwKICAgIGhlaWdodDogZWxlbWVudC5zdHlsZS5oZWlnaHQsCiAgICB3aWR0aDogZWxlbWVudC5zdHlsZS53aWR0aCwKICAgIG9wYWNpdHk6IGVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eSgpIH07CgogIHZhciBkaW1zID0gZWxlbWVudC5nZXREaW1lbnNpb25zKCk7CiAgdmFyIG1vdmVYLCBtb3ZlWTsKICAKICBzd2l0Y2ggKG9wdGlvbnMuZGlyZWN0aW9uKSB7CiAgICBjYXNlICd0b3AtbGVmdCc6CiAgICAgIG1vdmVYID0gbW92ZVkgPSAwOwogICAgICBicmVhazsKICAgIGNhc2UgJ3RvcC1yaWdodCc6CiAgICAgIG1vdmVYID0gZGltcy53aWR0aDsKICAgICAgbW92ZVkgPSAwOwogICAgICBicmVhazsKICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzoKICAgICAgbW92ZVggPSAwOwogICAgICBtb3ZlWSA9IGRpbXMuaGVpZ2h0OwogICAgICBicmVhazsKICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6CiAgICAgIG1vdmVYID0gZGltcy53aWR0aDsKICAgICAgbW92ZVkgPSBkaW1zLmhlaWdodDsKICAgICAgYnJlYWs7CiAgICBjYXNlICdjZW50ZXInOiAgCiAgICAgIG1vdmVYID0gZGltcy53aWR0aCAvIDI7CiAgICAgIG1vdmVZID0gZGltcy5oZWlnaHQgLyAyOwogICAgICBicmVhazsKICB9CiAgCiAgcmV0dXJuIG5ldyBFZmZlY3QuUGFyYWxsZWwoCiAgICBbIG5ldyBFZmZlY3QuT3BhY2l0eShlbGVtZW50LCB7IHN5bmM6IHRydWUsIHRvOiAwLjAsIGZyb206IDEuMCwgdHJhbnNpdGlvbjogb3B0aW9ucy5vcGFjaXR5VHJhbnNpdGlvbiB9KSwKICAgICAgbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCB3aW5kb3cub3BlcmEgPyAxIDogMCwgeyBzeW5jOiB0cnVlLCB0cmFuc2l0aW9uOiBvcHRpb25zLnNjYWxlVHJhbnNpdGlvbiwgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlfSksCiAgICAgIG5ldyBFZmZlY3QuTW92ZShlbGVtZW50LCB7IHg6IG1vdmVYLCB5OiBtb3ZlWSwgc3luYzogdHJ1ZSwgdHJhbnNpdGlvbjogb3B0aW9ucy5tb3ZlVHJhbnNpdGlvbiB9KQogICAgXSwgT2JqZWN0LmV4dGVuZCh7ICAgICAgICAgICAgCiAgICAgICAgIGJlZm9yZVN0YXJ0SW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICAgICAgIGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQubWFrZVBvc2l0aW9uZWQoKS5tYWtlQ2xpcHBpbmcoKTsgCiAgICAgICAgIH0sCiAgICAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICAgICAgIGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQuaGlkZSgpLnVuZG9DbGlwcGluZygpLnVuZG9Qb3NpdGlvbmVkKCkuc2V0U3R5bGUob2xkU3R5bGUpOyB9CiAgICAgICB9LCBvcHRpb25zKQogICk7Cn07CgpFZmZlY3QuUHVsc2F0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICB2YXIgb3B0aW9ucyAgICA9IGFyZ3VtZW50c1sxXSB8fCB7IH07CiAgdmFyIG9sZE9wYWNpdHkgPSBlbGVtZW50LmdldElubGluZU9wYWNpdHkoKTsKICB2YXIgdHJhbnNpdGlvbiA9IG9wdGlvbnMudHJhbnNpdGlvbiB8fCBFZmZlY3QuVHJhbnNpdGlvbnMuc2lub2lkYWw7CiAgdmFyIHJldmVyc2VyICAgPSBmdW5jdGlvbihwb3MpeyByZXR1cm4gdHJhbnNpdGlvbigxLUVmZmVjdC5UcmFuc2l0aW9ucy5wdWxzZShwb3MsIG9wdGlvbnMucHVsc2VzKSkgfTsKICByZXZlcnNlci5iaW5kKHRyYW5zaXRpb24pOwogIHJldHVybiBuZXcgRWZmZWN0Lk9wYWNpdHkoZWxlbWVudCwgCiAgICBPYmplY3QuZXh0ZW5kKE9iamVjdC5leHRlbmQoeyAgZHVyYXRpb246IDIuMCwgZnJvbTogMCwKICAgICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IGVmZmVjdC5lbGVtZW50LnNldFN0eWxlKHtvcGFjaXR5OiBvbGRPcGFjaXR5fSk7IH0KICAgIH0sIG9wdGlvbnMpLCB7dHJhbnNpdGlvbjogcmV2ZXJzZXJ9KSk7Cn07CgpFZmZlY3QuRm9sZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICB2YXIgb2xkU3R5bGUgPSB7CiAgICB0b3A6IGVsZW1lbnQuc3R5bGUudG9wLAogICAgbGVmdDogZWxlbWVudC5zdHlsZS5sZWZ0LAogICAgd2lkdGg6IGVsZW1lbnQuc3R5bGUud2lkdGgsCiAgICBoZWlnaHQ6IGVsZW1lbnQuc3R5bGUuaGVpZ2h0IH07CiAgZWxlbWVudC5tYWtlQ2xpcHBpbmcoKTsKICByZXR1cm4gbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCA1LCBPYmplY3QuZXh0ZW5kKHsgICAKICAgIHNjYWxlQ29udGVudDogZmFsc2UsCiAgICBzY2FsZVg6IGZhbHNlLAogICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICBuZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIDEsIHsgCiAgICAgIHNjYWxlQ29udGVudDogZmFsc2UsIAogICAgICBzY2FsZVk6IGZhbHNlLAogICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsKICAgICAgICBlZmZlY3QuZWxlbWVudC5oaWRlKCkudW5kb0NsaXBwaW5nKCkuc2V0U3R5bGUob2xkU3R5bGUpOwogICAgICB9IH0pOwogIH19LCBhcmd1bWVudHNbMV0gfHwgeyB9KSk7Cn07CgpFZmZlY3QuTW9ycGggPSBDbGFzcy5jcmVhdGUoRWZmZWN0LkJhc2UsIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKCF0aGlzLmVsZW1lbnQpIHRocm93KEVmZmVjdC5fZWxlbWVudERvZXNOb3RFeGlzdEVycm9yKTsKICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICAgIHN0eWxlOiB7IH0KICAgIH0sIGFyZ3VtZW50c1sxXSB8fCB7IH0pOwogICAgCiAgICBpZiAoIU9iamVjdC5pc1N0cmluZyhvcHRpb25zLnN0eWxlKSkgdGhpcy5zdHlsZSA9ICRIKG9wdGlvbnMuc3R5bGUpOwogICAgZWxzZSB7CiAgICAgIGlmIChvcHRpb25zLnN0eWxlLmluY2x1ZGUoJzonKSkKICAgICAgICB0aGlzLnN0eWxlID0gb3B0aW9ucy5zdHlsZS5wYXJzZVN0eWxlKCk7CiAgICAgIGVsc2UgewogICAgICAgIHRoaXMuZWxlbWVudC5hZGRDbGFzc05hbWUob3B0aW9ucy5zdHlsZSk7CiAgICAgICAgdGhpcy5zdHlsZSA9ICRIKHRoaXMuZWxlbWVudC5nZXRTdHlsZXMoKSk7CiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzTmFtZShvcHRpb25zLnN0eWxlKTsKICAgICAgICB2YXIgY3NzID0gdGhpcy5lbGVtZW50LmdldFN0eWxlcygpOwogICAgICAgIHRoaXMuc3R5bGUgPSB0aGlzLnN0eWxlLnJlamVjdChmdW5jdGlvbihzdHlsZSkgewogICAgICAgICAgcmV0dXJuIHN0eWxlLnZhbHVlID09IGNzc1tzdHlsZS5rZXldOwogICAgICAgIH0pOwogICAgICAgIG9wdGlvbnMuYWZ0ZXJGaW5pc2hJbnRlcm5hbCA9IGZ1bmN0aW9uKGVmZmVjdCkgewogICAgICAgICAgZWZmZWN0LmVsZW1lbnQuYWRkQ2xhc3NOYW1lKGVmZmVjdC5vcHRpb25zLnN0eWxlKTsKICAgICAgICAgIGVmZmVjdC50cmFuc2Zvcm1zLmVhY2goZnVuY3Rpb24odHJhbnNmb3JtKSB7CiAgICAgICAgICAgIGVmZmVjdC5lbGVtZW50LnN0eWxlW3RyYW5zZm9ybS5zdHlsZV0gPSAnJzsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdGhpcy5zdGFydChvcHRpb25zKTsKICB9LAogIAogIHNldHVwOiBmdW5jdGlvbigpewogICAgZnVuY3Rpb24gcGFyc2VDb2xvcihjb2xvcil7CiAgICAgIGlmICghY29sb3IgfHwgWydyZ2JhKDAsIDAsIDAsIDApJywndHJhbnNwYXJlbnQnXS5pbmNsdWRlKGNvbG9yKSkgY29sb3IgPSAnI2ZmZmZmZic7CiAgICAgIGNvbG9yID0gY29sb3IucGFyc2VDb2xvcigpOwogICAgICByZXR1cm4gJFIoMCwyKS5tYXAoZnVuY3Rpb24oaSl7CiAgICAgICAgcmV0dXJuIHBhcnNlSW50KCBjb2xvci5zbGljZShpKjIrMSxpKjIrMyksIDE2ICkgCiAgICAgIH0pOwogICAgfQogICAgdGhpcy50cmFuc2Zvcm1zID0gdGhpcy5zdHlsZS5tYXAoZnVuY3Rpb24ocGFpcil7CiAgICAgIHZhciBwcm9wZXJ0eSA9IHBhaXJbMF0sIHZhbHVlID0gcGFpclsxXSwgdW5pdCA9IG51bGw7CgogICAgICBpZiAodmFsdWUucGFyc2VDb2xvcignI3p6enp6eicpICE9ICcjenp6enp6JykgewogICAgICAgIHZhbHVlID0gdmFsdWUucGFyc2VDb2xvcigpOwogICAgICAgIHVuaXQgID0gJ2NvbG9yJzsKICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIHsKICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpOwogICAgICAgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSAmJiAoIXRoaXMuZWxlbWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSkKICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRTdHlsZSh7em9vbTogMX0pOwogICAgICB9IGVsc2UgaWYgKEVsZW1lbnQuQ1NTX0xFTkdUSC50ZXN0KHZhbHVlKSkgewogICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSB2YWx1ZS5tYXRjaCgvXihbXCtcLV0/WzAtOVwuXSspKC4qKSQvKTsKICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChjb21wb25lbnRzWzFdKTsKICAgICAgICAgIHVuaXQgPSAoY29tcG9uZW50cy5sZW5ndGggPT0gMykgPyBjb21wb25lbnRzWzJdIDogbnVsbDsKICAgICAgfQoKICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB0aGlzLmVsZW1lbnQuZ2V0U3R5bGUocHJvcGVydHkpOwogICAgICByZXR1cm4geyAKICAgICAgICBzdHlsZTogcHJvcGVydHkuY2FtZWxpemUoKSwgCiAgICAgICAgb3JpZ2luYWxWYWx1ZTogdW5pdD09J2NvbG9yJyA/IHBhcnNlQ29sb3Iob3JpZ2luYWxWYWx1ZSkgOiBwYXJzZUZsb2F0KG9yaWdpbmFsVmFsdWUgfHwgMCksIAogICAgICAgIHRhcmdldFZhbHVlOiB1bml0PT0nY29sb3InID8gcGFyc2VDb2xvcih2YWx1ZSkgOiB2YWx1ZSwKICAgICAgICB1bml0OiB1bml0CiAgICAgIH07CiAgICB9LmJpbmQodGhpcykpLnJlamVjdChmdW5jdGlvbih0cmFuc2Zvcm0pewogICAgICByZXR1cm4gKAogICAgICAgICh0cmFuc2Zvcm0ub3JpZ2luYWxWYWx1ZSA9PSB0cmFuc2Zvcm0udGFyZ2V0VmFsdWUpIHx8CiAgICAgICAgKAogICAgICAgICAgdHJhbnNmb3JtLnVuaXQgIT0gJ2NvbG9yJyAmJgogICAgICAgICAgKGlzTmFOKHRyYW5zZm9ybS5vcmlnaW5hbFZhbHVlKSB8fCBpc05hTih0cmFuc2Zvcm0udGFyZ2V0VmFsdWUpKQogICAgICAgICkKICAgICAgKQogICAgfSk7CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICB2YXIgc3R5bGUgPSB7IH0sIHRyYW5zZm9ybSwgaSA9IHRoaXMudHJhbnNmb3Jtcy5sZW5ndGg7CiAgICB3aGlsZShpLS0pCiAgICAgIHN0eWxlWyh0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybXNbaV0pLnN0eWxlXSA9IAogICAgICAgIHRyYW5zZm9ybS51bml0PT0nY29sb3InID8gJyMnKwogICAgICAgICAgKE1hdGgucm91bmQodHJhbnNmb3JtLm9yaWdpbmFsVmFsdWVbMF0rCiAgICAgICAgICAgICh0cmFuc2Zvcm0udGFyZ2V0VmFsdWVbMF0tdHJhbnNmb3JtLm9yaWdpbmFsVmFsdWVbMF0pKnBvc2l0aW9uKSkudG9Db2xvclBhcnQoKSArCiAgICAgICAgICAoTWF0aC5yb3VuZCh0cmFuc2Zvcm0ub3JpZ2luYWxWYWx1ZVsxXSsKICAgICAgICAgICAgKHRyYW5zZm9ybS50YXJnZXRWYWx1ZVsxXS10cmFuc2Zvcm0ub3JpZ2luYWxWYWx1ZVsxXSkqcG9zaXRpb24pKS50b0NvbG9yUGFydCgpICsKICAgICAgICAgIChNYXRoLnJvdW5kKHRyYW5zZm9ybS5vcmlnaW5hbFZhbHVlWzJdKwogICAgICAgICAgICAodHJhbnNmb3JtLnRhcmdldFZhbHVlWzJdLXRyYW5zZm9ybS5vcmlnaW5hbFZhbHVlWzJdKSpwb3NpdGlvbikpLnRvQ29sb3JQYXJ0KCkgOgogICAgICAgICh0cmFuc2Zvcm0ub3JpZ2luYWxWYWx1ZSArCiAgICAgICAgICAodHJhbnNmb3JtLnRhcmdldFZhbHVlIC0gdHJhbnNmb3JtLm9yaWdpbmFsVmFsdWUpICogcG9zaXRpb24pLnRvRml4ZWQoMykgKyAKICAgICAgICAgICAgKHRyYW5zZm9ybS51bml0ID09PSBudWxsID8gJycgOiB0cmFuc2Zvcm0udW5pdCk7CiAgICB0aGlzLmVsZW1lbnQuc2V0U3R5bGUoc3R5bGUsIHRydWUpOwogIH0KfSk7CgpFZmZlY3QuVHJhbnNmb3JtID0gQ2xhc3MuY3JlYXRlKHsKICBpbml0aWFsaXplOiBmdW5jdGlvbih0cmFja3MpewogICAgdGhpcy50cmFja3MgID0gW107CiAgICB0aGlzLm9wdGlvbnMgPSBhcmd1bWVudHNbMV0gfHwgeyB9OwogICAgdGhpcy5hZGRUcmFja3ModHJhY2tzKTsKICB9LAogIGFkZFRyYWNrczogZnVuY3Rpb24odHJhY2tzKXsKICAgIHRyYWNrcy5lYWNoKGZ1bmN0aW9uKHRyYWNrKXsKICAgICAgdHJhY2sgPSAkSCh0cmFjayk7CiAgICAgIHZhciBkYXRhID0gdHJhY2sudmFsdWVzKCkuZmlyc3QoKTsKICAgICAgdGhpcy50cmFja3MucHVzaCgkSCh7CiAgICAgICAgaWRzOiAgICAgdHJhY2sua2V5cygpLmZpcnN0KCksCiAgICAgICAgZWZmZWN0OiAgRWZmZWN0Lk1vcnBoLAogICAgICAgIG9wdGlvbnM6IHsgc3R5bGU6IGRhdGEgfQogICAgICB9KSk7CiAgICB9LmJpbmQodGhpcykpOwogICAgcmV0dXJuIHRoaXM7CiAgfSwKICBwbGF5OiBmdW5jdGlvbigpewogICAgcmV0dXJuIG5ldyBFZmZlY3QuUGFyYWxsZWwoCiAgICAgIHRoaXMudHJhY2tzLm1hcChmdW5jdGlvbih0cmFjayl7CiAgICAgICAgdmFyIGlkcyA9IHRyYWNrLmdldCgnaWRzJyksIGVmZmVjdCA9IHRyYWNrLmdldCgnZWZmZWN0JyksIG9wdGlvbnMgPSB0cmFjay5nZXQoJ29wdGlvbnMnKTsKICAgICAgICB2YXIgZWxlbWVudHMgPSBbJChpZHMpIHx8ICQkKGlkcyldLmZsYXR0ZW4oKTsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGUpeyByZXR1cm4gbmV3IGVmZmVjdChlLCBPYmplY3QuZXh0ZW5kKHsgc3luYzp0cnVlIH0sIG9wdGlvbnMpKSB9KTsKICAgICAgfSkuZmxhdHRlbigpLAogICAgICB0aGlzLm9wdGlvbnMKICAgICk7CiAgfQp9KTsKCkVsZW1lbnQuQ1NTX1BST1BFUlRJRVMgPSAkdygKICAnYmFja2dyb3VuZENvbG9yIGJhY2tncm91bmRQb3NpdGlvbiBib3JkZXJCb3R0b21Db2xvciBib3JkZXJCb3R0b21TdHlsZSAnICsgCiAgJ2JvcmRlckJvdHRvbVdpZHRoIGJvcmRlckxlZnRDb2xvciBib3JkZXJMZWZ0U3R5bGUgYm9yZGVyTGVmdFdpZHRoICcgKwogICdib3JkZXJSaWdodENvbG9yIGJvcmRlclJpZ2h0U3R5bGUgYm9yZGVyUmlnaHRXaWR0aCBib3JkZXJTcGFjaW5nICcgKwogICdib3JkZXJUb3BDb2xvciBib3JkZXJUb3BTdHlsZSBib3JkZXJUb3BXaWR0aCBib3R0b20gY2xpcCBjb2xvciAnICsKICAnZm9udFNpemUgZm9udFdlaWdodCBoZWlnaHQgbGVmdCBsZXR0ZXJTcGFjaW5nIGxpbmVIZWlnaHQgJyArCiAgJ21hcmdpbkJvdHRvbSBtYXJnaW5MZWZ0IG1hcmdpblJpZ2h0IG1hcmdpblRvcCBtYXJrZXJPZmZzZXQgbWF4SGVpZ2h0ICcrCiAgJ21heFdpZHRoIG1pbkhlaWdodCBtaW5XaWR0aCBvcGFjaXR5IG91dGxpbmVDb2xvciBvdXRsaW5lT2Zmc2V0ICcgKwogICdvdXRsaW5lV2lkdGggcGFkZGluZ0JvdHRvbSBwYWRkaW5nTGVmdCBwYWRkaW5nUmlnaHQgcGFkZGluZ1RvcCAnICsKICAncmlnaHQgdGV4dEluZGVudCB0b3Agd2lkdGggd29yZFNwYWNpbmcgekluZGV4Jyk7CiAgCkVsZW1lbnQuQ1NTX0xFTkdUSCA9IC9eKChbXCtcLV0/WzAtOVwuXSspKGVtfGV4fHB4fGlufGNtfG1tfHB0fHBjfFwlKSl8MCQvOwoKU3RyaW5nLl9fcGFyc2VTdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKU3RyaW5nLnByb3RvdHlwZS5wYXJzZVN0eWxlID0gZnVuY3Rpb24oKXsKICB2YXIgc3R5bGUsIHN0eWxlUnVsZXMgPSAkSCgpOwogIGlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpCiAgICBzdHlsZSA9IG5ldyBFbGVtZW50KCdkaXYnLHtzdHlsZTp0aGlzfSkuc3R5bGU7CiAgZWxzZSB7CiAgICBTdHJpbmcuX19wYXJzZVN0eWxlRWxlbWVudC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT0iJyArIHRoaXMgKyAnIj48L2Rpdj4nOwogICAgc3R5bGUgPSBTdHJpbmcuX19wYXJzZVN0eWxlRWxlbWVudC5jaGlsZE5vZGVzWzBdLnN0eWxlOwogIH0KICAKICBFbGVtZW50LkNTU19QUk9QRVJUSUVTLmVhY2goZnVuY3Rpb24ocHJvcGVydHkpewogICAgaWYgKHN0eWxlW3Byb3BlcnR5XSkgc3R5bGVSdWxlcy5zZXQocHJvcGVydHksIHN0eWxlW3Byb3BlcnR5XSk7IAogIH0pOwogIAogIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSAmJiB0aGlzLmluY2x1ZGUoJ29wYWNpdHknKSkKICAgIHN0eWxlUnVsZXMuc2V0KCdvcGFjaXR5JywgdGhpcy5tYXRjaCgvb3BhY2l0eTpccyooKD86MHwxKT8oPzpcLlxkKik/KS8pWzFdKTsKCiAgcmV0dXJuIHN0eWxlUnVsZXM7Cn07CgppZiAoZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSkgewogIEVsZW1lbnQuZ2V0U3R5bGVzID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIGNzcyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoJChlbGVtZW50KSwgbnVsbCk7CiAgICByZXR1cm4gRWxlbWVudC5DU1NfUFJPUEVSVElFUy5pbmplY3QoeyB9LCBmdW5jdGlvbihzdHlsZXMsIHByb3BlcnR5KSB7CiAgICAgIHN0eWxlc1twcm9wZXJ0eV0gPSBjc3NbcHJvcGVydHldOwogICAgICByZXR1cm4gc3R5bGVzOwogICAgfSk7CiAgfTsKfSBlbHNlIHsKICBFbGVtZW50LmdldFN0eWxlcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIGNzcyA9IGVsZW1lbnQuY3VycmVudFN0eWxlLCBzdHlsZXM7CiAgICBzdHlsZXMgPSBFbGVtZW50LkNTU19QUk9QRVJUSUVTLmluamVjdCh7IH0sIGZ1bmN0aW9uKHJlc3VsdHMsIHByb3BlcnR5KSB7CiAgICAgIHJlc3VsdHNbcHJvcGVydHldID0gY3NzW3Byb3BlcnR5XTsKICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9KTsKICAgIGlmICghc3R5bGVzLm9wYWNpdHkpIHN0eWxlcy5vcGFjaXR5ID0gZWxlbWVudC5nZXRPcGFjaXR5KCk7CiAgICByZXR1cm4gc3R5bGVzOwogIH07Cn07CgpFZmZlY3QuTWV0aG9kcyA9IHsKICBtb3JwaDogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgbmV3IEVmZmVjdC5Nb3JwaChlbGVtZW50LCBPYmplY3QuZXh0ZW5kKHsgc3R5bGU6IHN0eWxlIH0sIGFyZ3VtZW50c1syXSB8fCB7IH0pKTsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCiAgdmlzdWFsRWZmZWN0OiBmdW5jdGlvbihlbGVtZW50LCBlZmZlY3QsIG9wdGlvbnMpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpCiAgICB2YXIgcyA9IGVmZmVjdC5kYXNoZXJpemUoKS5jYW1lbGl6ZSgpLCBrbGFzcyA9IHMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzLnN1YnN0cmluZygxKTsKICAgIG5ldyBFZmZlY3Rba2xhc3NdKGVsZW1lbnQsIG9wdGlvbnMpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKICBoaWdobGlnaHQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgbmV3IEVmZmVjdC5IaWdobGlnaHQoZWxlbWVudCwgb3B0aW9ucyk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9Cn07CgokdygnZmFkZSBhcHBlYXIgZ3JvdyBzaHJpbmsgZm9sZCBibGluZFVwIGJsaW5kRG93biBzbGlkZVVwIHNsaWRlRG93biAnKwogICdwdWxzYXRlIHNoYWtlIHB1ZmYgc3F1aXNoIHN3aXRjaE9mZiBkcm9wT3V0JykuZWFjaCgKICBmdW5jdGlvbihlZmZlY3QpIHsgCiAgICBFZmZlY3QuTWV0aG9kc1tlZmZlY3RdID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucyl7CiAgICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgICBFZmZlY3RbZWZmZWN0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZWZmZWN0LnN1YnN0cmluZygxKV0oZWxlbWVudCwgb3B0aW9ucyk7CiAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogIH0KKTsKCiR3KCdnZXRJbmxpbmVPcGFjaXR5IGZvcmNlUmVyZW5kZXJpbmcgc2V0Q29udGVudFpvb20gY29sbGVjdFRleHROb2RlcyBjb2xsZWN0VGV4dE5vZGVzSWdub3JlQ2xhc3MgZ2V0U3R5bGVzJykuZWFjaCggCiAgZnVuY3Rpb24oZikgeyBFZmZlY3QuTWV0aG9kc1tmXSA9IEVsZW1lbnRbZl07IH0KKTsKCkVsZW1lbnQuYWRkTWV0aG9kcyhFZmZlY3QuTWV0aG9kcyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/js/lightbox.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vDQovLwlMaWdodGJveCB2Mi4wNA0KLy8JYnkgTG9rZXNoIERoYWthciAtIGh0dHA6Ly93d3cubG9rZXNoZGhha2FyLmNvbQ0KLy8JTGFzdCBNb2RpZmljYXRpb246IDIvOS8wOA0KLy8NCi8vCUZvciBtb3JlIGluZm9ybWF0aW9uLCB2aXNpdDoNCi8vCWh0dHA6Ly9sb2tlc2hkaGFrYXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Mi8NCi8vDQovLwlMaWNlbnNlZCB1bmRlciB0aGUgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiAyLjUgTGljZW5zZSAtIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzIuNS8NCi8vICAJLSBGcmVlIGZvciB1c2UgaW4gYm90aCBwZXJzb25hbCBhbmQgY29tbWVyY2lhbCBwcm9qZWN0cw0KLy8JCS0gQXR0cmlidXRpb24gcmVxdWlyZXMgbGVhdmluZyBhdXRob3IgbmFtZSwgYXV0aG9yIGxpbmssIGFuZCB0aGUgbGljZW5zZSBpbmZvIGludGFjdC4NCi8vCQ0KLy8gIFRoYW5rczogU2NvdHQgVXB0b24odXB0b25pYy5jb20pLCBQZXRlci1QYXVsIEtvY2gocXVpcmtzbW9kZS5jb20pLCBhbmQgVGhvbWFzIEZ1Y2hzKG1pci5hY3Vsby51cykgZm9yIGlkZWFzLCBsaWJzLCBhbmQgc25pcHBldHMuDQovLyAgCQlBcnRlbXkgVHJlZ3ViZW5rbyAoYXJ0eS5uYW1lKSBmb3IgY2xlYW51cCBhbmQgaGVscCBpbiB1cGRhdGluZyB0byBsYXRlc3QgdmVyIG9mIHByb3RvLWFjdWxvdXMuDQovLw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8qDQoNCiAgICBUYWJsZSBvZiBDb250ZW50cw0KICAgIC0tLS0tLS0tLS0tLS0tLS0tDQogICAgQ29uZmlndXJhdGlvbg0KDQogICAgTGlnaHRib3ggQ2xhc3MgRGVjbGFyYXRpb24NCiAgICAtIGluaXRpYWxpemUoKQ0KICAgIC0gdXBkYXRlSW1hZ2VMaXN0KCkNCiAgICAtIHN0YXJ0KCkNCiAgICAtIGNoYW5nZUltYWdlKCkNCiAgICAtIHJlc2l6ZUltYWdlQ29udGFpbmVyKCkNCiAgICAtIHNob3dJbWFnZSgpDQogICAgLSB1cGRhdGVEZXRhaWxzKCkNCiAgICAtIHVwZGF0ZU5hdigpDQogICAgLSBlbmFibGVLZXlib2FyZE5hdigpDQogICAgLSBkaXNhYmxlS2V5Ym9hcmROYXYoKQ0KICAgIC0ga2V5Ym9hcmRBY3Rpb24oKQ0KICAgIC0gcHJlbG9hZE5laWdoYm9ySW1hZ2VzKCkNCiAgICAtIGVuZCgpDQogICAgDQogICAgRnVuY3Rpb24gQ2FsbHMNCiAgICAtIGRvY3VtZW50Lm9ic2VydmUoKQ0KICAgDQoqLw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLy8NCi8vICBDb25maWd1cmF0aW9ubA0KLy8NCkxpZ2h0Ym94T3B0aW9ucyA9IE9iamVjdC5leHRlbmQoew0KICAgIGZpbGVMb2FkaW5nSW1hZ2U6ICAgICAgICAnbW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9saWdodGJveC9pbWFnZXMvbG9hZGluZy5naWYnLCAgICAgDQogICAgZmlsZUJvdHRvbU5hdkNsb3NlSW1hZ2U6ICdtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2xpZ2h0Ym94L2ltYWdlcy9jbG9zZWxhYmVsLmdpZicsDQoNCiAgICBvdmVybGF5T3BhY2l0eTogMC44LCAgIC8vIGNvbnRyb2xzIHRyYW5zcGFyZW5jeSBvZiBzaGFkb3cgb3ZlcmxheQ0KDQogICAgYW5pbWF0ZTogdHJ1ZSwgICAgICAgICAvLyB0b2dnbGVzIHJlc2l6aW5nIGFuaW1hdGlvbnMNCiAgICByZXNpemVTcGVlZDogNywgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzcGVlZCBvZiB0aGUgaW1hZ2UgcmVzaXppbmcgYW5pbWF0aW9ucyAoMT1zbG93ZXN0IGFuZCAxMD1mYXN0ZXN0KQ0KDQogICAgYm9yZGVyU2l6ZTogMTAsICAgICAgICAgLy9pZiB5b3UgYWRqdXN0IHRoZSBwYWRkaW5nIGluIHRoZSBDU1MsIHlvdSB3aWxsIG5lZWQgdG8gdXBkYXRlIHRoaXMgdmFyaWFibGUNCg0KCS8vIFdoZW4gZ3JvdXBpbmcgaW1hZ2VzIHRoaXMgaXMgdXNlZCB0byB3cml0ZTogSW1hZ2UgIyBvZiAjLg0KCS8vIENoYW5nZSBpdCBmb3Igbm9uLWVuZ2xpc2ggbG9jYWxpemF0aW9uDQoJbGFiZWxJbWFnZTogIkltYWdlIiwNCglsYWJlbE9mOiAib2YiDQp9LCB3aW5kb3cuTGlnaHRib3hPcHRpb25zIHx8IHt9KTsNCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KdmFyIExpZ2h0Ym94ID0gQ2xhc3MuY3JlYXRlKCk7DQoNCkxpZ2h0Ym94LnByb3RvdHlwZSA9IHsNCiAgICBpbWFnZUFycmF5OiBbXSwNCiAgICBhY3RpdmVJbWFnZTogdW5kZWZpbmVkLA0KICAgIA0KICAgIC8vIGluaXRpYWxpemUoKQ0KICAgIC8vIENvbnN0cnVjdG9yIHJ1bnMgb24gY29tcGxldGlvbiBvZiB0aGUgRE9NIGxvYWRpbmcuIENhbGxzIHVwZGF0ZUltYWdlTGlzdCBhbmQgdGhlbg0KICAgIC8vIHRoZSBmdW5jdGlvbiBpbnNlcnRzIGh0bWwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHNoYWRvdyANCiAgICAvLyBvdmVybGF5IGFuZCB0aGUgaW1hZ2UgY29udGFpbmVyLg0KICAgIC8vDQogICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7ICAgIA0KICAgICAgICANCiAgICAgICAgdGhpcy51cGRhdGVJbWFnZUxpc3QoKTsNCiAgICAgICAgDQogICAgICAgIHRoaXMua2V5Ym9hcmRBY3Rpb24gPSB0aGlzLmtleWJvYXJkQWN0aW9uLmJpbmRBc0V2ZW50TGlzdGVuZXIodGhpcyk7DQoNCiAgICAgICAgaWYgKExpZ2h0Ym94T3B0aW9ucy5yZXNpemVTcGVlZCA+IDEwKSBMaWdodGJveE9wdGlvbnMucmVzaXplU3BlZWQgPSAxMDsNCiAgICAgICAgaWYgKExpZ2h0Ym94T3B0aW9ucy5yZXNpemVTcGVlZCA8IDEpICBMaWdodGJveE9wdGlvbnMucmVzaXplU3BlZWQgPSAxOw0KDQoJICAgIHRoaXMucmVzaXplRHVyYXRpb24gPSBMaWdodGJveE9wdGlvbnMuYW5pbWF0ZSA/ICgoMTEgLSBMaWdodGJveE9wdGlvbnMucmVzaXplU3BlZWQpICogMC4xNSkgOiAwOw0KCSAgICB0aGlzLm92ZXJsYXlEdXJhdGlvbiA9IExpZ2h0Ym94T3B0aW9ucy5hbmltYXRlID8gMC4yIDogMDsgIC8vIHNoYWRvdyBmYWRlIGluL291dCBkdXJhdGlvbg0KDQogICAgICAgIC8vIFdoZW4gTGlnaHRib3ggc3RhcnRzIGl0IHdpbGwgcmVzaXplIGl0c2VsZiBmcm9tIDI1MCBieSAyNTAgdG8gdGhlIGN1cnJlbnQgaW1hZ2UgZGltZW5zaW9uLg0KICAgICAgICAvLyBJZiBhbmltYXRpb25zIGFyZSB0dXJuZWQgb2ZmLCBpdCB3aWxsIGJlIGhpZGRlbiBhcyB0byBwcmV2ZW50IGEgZmxpY2tlciBvZiBhDQogICAgICAgIC8vIHdoaXRlIDI1MCBieSAyNTAgYm94Lg0KICAgICAgICB2YXIgc2l6ZSA9IChMaWdodGJveE9wdGlvbnMuYW5pbWF0ZSA/IDI1MCA6IDEpICsgJ3B4JzsNCiAgICAgICAgDQoNCiAgICAgICAgLy8gQ29kZSBpbnNlcnRzIGh0bWwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0aGF0IGxvb2tzIHNpbWlsYXIgdG8gdGhpczoNCiAgICAgICAgLy8NCiAgICAgICAgLy8gIDxkaXYgaWQ9Im92ZXJsYXkiPjwvZGl2Pg0KICAgICAgICAvLyAgPGRpdiBpZD0ibGlnaHRib3giPg0KICAgICAgICAvLyAgICAgIDxkaXYgaWQ9Im91dGVySW1hZ2VDb250YWluZXIiPg0KICAgICAgICAvLyAgICAgICAgICA8ZGl2IGlkPSJpbWFnZUNvbnRhaW5lciI+DQogICAgICAgIC8vICAgICAgICAgICAgICA8aW1nIGlkPSJsaWdodGJveEltYWdlIj4NCiAgICAgICAgLy8gICAgICAgICAgICAgIDxkaXYgc3R5bGU9IiIgaWQ9ImhvdmVyTmF2Ij4NCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0icHJldkxpbmsiPjwvYT4NCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0ibmV4dExpbmsiPjwvYT4NCiAgICAgICAgLy8gICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAvLyAgICAgICAgICAgICAgPGRpdiBpZD0ibG9hZGluZyI+DQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9ImxvYWRpbmdMaW5rIj4NCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9sb2FkaW5nLmdpZiI+DQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAvLyAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIC8vICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAvLyAgICAgIDwvZGl2Pg0KICAgICAgICAvLyAgICAgIDxkaXYgaWQ9ImltYWdlRGF0YUNvbnRhaW5lciI+DQogICAgICAgIC8vICAgICAgICAgIDxkaXYgaWQ9ImltYWdlRGF0YSI+DQogICAgICAgIC8vICAgICAgICAgICAgICA8ZGl2IGlkPSJpbWFnZURldGFpbHMiPg0KICAgICAgICAvLyAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJjYXB0aW9uIj48L3NwYW4+DQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9Im51bWJlckRpc3BsYXkiPjwvc3Bhbj4NCiAgICAgICAgLy8gICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAvLyAgICAgICAgICAgICAgPGRpdiBpZD0iYm90dG9tTmF2Ij4NCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iYm90dG9tTmF2Q2xvc2UiPg0KICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2Nsb3NlLmdpZiI+DQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAvLyAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIC8vICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAvLyAgICAgIDwvZGl2Pg0KICAgICAgICAvLyAgPC9kaXY+DQoNCg0KICAgICAgICB2YXIgb2JqQm9keSA9ICQkKCdib2R5JylbMF07DQoNCgkJb2JqQm9keS5hcHBlbmRDaGlsZChCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOidvdmVybGF5J30pKTsNCgkNCiAgICAgICAgb2JqQm9keS5hcHBlbmRDaGlsZChCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOidsaWdodGJveCd9LCBbDQogICAgICAgICAgICBCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOidvdXRlckltYWdlQ29udGFpbmVyJ30sIA0KICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnZGl2Jyx7aWQ6J2ltYWdlQ29udGFpbmVyJ30sIFsNCiAgICAgICAgICAgICAgICAgICAgQnVpbGRlci5ub2RlKCdpbWcnLHtpZDonbGlnaHRib3hJbWFnZSd9KSwgDQogICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnZGl2Jyx7aWQ6J2hvdmVyTmF2J30sIFsNCiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnYScse2lkOidwcmV2TGluaycsIGhyZWY6ICcjJyB9KSwNCiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnYScse2lkOiduZXh0TGluaycsIGhyZWY6ICcjJyB9KQ0KICAgICAgICAgICAgICAgICAgICBdKSwNCiAgICAgICAgICAgICAgICAgICAgQnVpbGRlci5ub2RlKCdkaXYnLHtpZDonbG9hZGluZyd9LCANCiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnYScse2lkOidsb2FkaW5nTGluaycsIGhyZWY6ICcjJyB9LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGVyLm5vZGUoJ2ltZycsIHtzcmM6IExpZ2h0Ym94T3B0aW9ucy5maWxlTG9hZGluZ0ltYWdlfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIF0pDQogICAgICAgICAgICApLA0KICAgICAgICAgICAgQnVpbGRlci5ub2RlKCdkaXYnLCB7aWQ6J2ltYWdlRGF0YUNvbnRhaW5lcid9LA0KICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnZGl2Jyx7aWQ6J2ltYWdlRGF0YSd9LCBbDQogICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnZGl2Jyx7aWQ6J2ltYWdlRGV0YWlscyd9LCBbDQogICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGVyLm5vZGUoJ3NwYW4nLHtpZDonY2FwdGlvbid9KSwNCiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnc3Bhbicse2lkOidudW1iZXJEaXNwbGF5J30pDQogICAgICAgICAgICAgICAgICAgIF0pLA0KICAgICAgICAgICAgICAgICAgICBCdWlsZGVyLm5vZGUoJ2Rpdicse2lkOidib3R0b21OYXYnfSwNCiAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnYScse2lkOidib3R0b21OYXZDbG9zZScsIGhyZWY6ICcjJyB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkZXIubm9kZSgnaW1nJywgeyBzcmM6IExpZ2h0Ym94T3B0aW9ucy5maWxlQm90dG9tTmF2Q2xvc2VJbWFnZSB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgXSkNCiAgICAgICAgICAgICkNCiAgICAgICAgXSkpOw0KDQoNCgkJJCgnb3ZlcmxheScpLmhpZGUoKS5vYnNlcnZlKCdjbGljaycsIChmdW5jdGlvbigpIHsgdGhpcy5lbmQoKTsgfSkuYmluZCh0aGlzKSk7DQoJCSQoJ2xpZ2h0Ym94JykuaGlkZSgpLm9ic2VydmUoJ2NsaWNrJywgKGZ1bmN0aW9uKGV2ZW50KSB7IGlmIChldmVudC5lbGVtZW50KCkuaWQgPT0gJ2xpZ2h0Ym94JykgdGhpcy5lbmQoKTsgfSkuYmluZCh0aGlzKSk7DQoJCSQoJ291dGVySW1hZ2VDb250YWluZXInKS5zZXRTdHlsZSh7IHdpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemUgfSk7DQoJCSQoJ3ByZXZMaW5rJykub2JzZXJ2ZSgnY2xpY2snLCAoZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQuc3RvcCgpOyB0aGlzLmNoYW5nZUltYWdlKHRoaXMuYWN0aXZlSW1hZ2UgLSAxKTsgfSkuYmluZEFzRXZlbnRMaXN0ZW5lcih0aGlzKSk7DQoJCSQoJ25leHRMaW5rJykub2JzZXJ2ZSgnY2xpY2snLCAoZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQuc3RvcCgpOyB0aGlzLmNoYW5nZUltYWdlKHRoaXMuYWN0aXZlSW1hZ2UgKyAxKTsgfSkuYmluZEFzRXZlbnRMaXN0ZW5lcih0aGlzKSk7DQoJCSQoJ2xvYWRpbmdMaW5rJykub2JzZXJ2ZSgnY2xpY2snLCAoZnVuY3Rpb24oZXZlbnQpIHsgZXZlbnQuc3RvcCgpOyB0aGlzLmVuZCgpOyB9KS5iaW5kKHRoaXMpKTsNCgkJJCgnYm90dG9tTmF2Q2xvc2UnKS5vYnNlcnZlKCdjbGljaycsIChmdW5jdGlvbihldmVudCkgeyBldmVudC5zdG9wKCk7IHRoaXMuZW5kKCk7IH0pLmJpbmQodGhpcykpOw0KDQogICAgICAgIHZhciB0aCA9IHRoaXM7DQogICAgICAgIChmdW5jdGlvbigpew0KICAgICAgICAgICAgdmFyIGlkcyA9IA0KICAgICAgICAgICAgICAgICdvdmVybGF5IGxpZ2h0Ym94IG91dGVySW1hZ2VDb250YWluZXIgaW1hZ2VDb250YWluZXIgbGlnaHRib3hJbWFnZSBob3Zlck5hdiBwcmV2TGluayBuZXh0TGluayBsb2FkaW5nIGxvYWRpbmdMaW5rICcgKyANCiAgICAgICAgICAgICAgICAnaW1hZ2VEYXRhQ29udGFpbmVyIGltYWdlRGF0YSBpbWFnZURldGFpbHMgY2FwdGlvbiBudW1iZXJEaXNwbGF5IGJvdHRvbU5hdiBib3R0b21OYXZDbG9zZSc7ICAgDQogICAgICAgICAgICAkdyhpZHMpLmVhY2goZnVuY3Rpb24oaWQpeyB0aFtpZF0gPSAkKGlkKTsgfSk7DQogICAgICAgIH0pLmRlZmVyKCk7DQogICAgfSwNCg0KICAgIC8vDQogICAgLy8gdXBkYXRlSW1hZ2VMaXN0KCkNCiAgICAvLyBMb29wcyB0aHJvdWdoIGFuY2hvciB0YWdzIGxvb2tpbmcgZm9yICdsaWdodGJveCcgcmVmZXJlbmNlcyBhbmQgYXBwbGllcyBvbmNsaWNrDQogICAgLy8gZXZlbnRzIHRvIGFwcHJvcHJpYXRlIGxpbmtzLiBZb3UgY2FuIHJlcnVuIGFmdGVyIGR5bmFtaWNhbGx5IGFkZGluZyBpbWFnZXMgdy9hamF4Lg0KICAgIC8vDQogICAgdXBkYXRlSW1hZ2VMaXN0OiBmdW5jdGlvbigpIHsgICANCiAgICAgICAgdGhpcy51cGRhdGVJbWFnZUxpc3QgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsNCg0KICAgICAgICBkb2N1bWVudC5vYnNlcnZlKCdjbGljaycsIChmdW5jdGlvbihldmVudCl7DQogICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQuZmluZEVsZW1lbnQoJ2FbcmVsXj1saWdodGJveF0nKSB8fCBldmVudC5maW5kRWxlbWVudCgnYXJlYVtyZWxePWxpZ2h0Ym94XScpOw0KICAgICAgICAgICAgaWYgKHRhcmdldCkgew0KICAgICAgICAgICAgICAgIGV2ZW50LnN0b3AoKTsNCiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0KHRhcmdldCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pLmJpbmQodGhpcykpOw0KICAgIH0sDQogICAgDQogICAgLy8NCiAgICAvLyAgc3RhcnQoKQ0KICAgIC8vICBEaXNwbGF5IG92ZXJsYXkgYW5kIGxpZ2h0Ym94LiBJZiBpbWFnZSBpcyBwYXJ0IG9mIGEgc2V0LCBhZGQgc2libGluZ3MgdG8gaW1hZ2VBcnJheS4NCiAgICAvLw0KICAgIHN0YXJ0OiBmdW5jdGlvbihpbWFnZUxpbmspIHsgICAgDQoNCiAgICAgICAgJCQoJ3NlbGVjdCcsICdvYmplY3QnLCAnZW1iZWQnKS5lYWNoKGZ1bmN0aW9uKG5vZGUpeyBub2RlLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJyB9KTsNCg0KICAgICAgICAvLyBzdHJldGNoIG92ZXJsYXkgdG8gZmlsbCBwYWdlIGFuZCBmYWRlIGluDQogICAgICAgIHZhciBhcnJheVBhZ2VTaXplID0gdGhpcy5nZXRQYWdlU2l6ZSgpOw0KICAgICAgICAkKCdvdmVybGF5Jykuc2V0U3R5bGUoeyB3aWR0aDogYXJyYXlQYWdlU2l6ZVswXSArICdweCcsIGhlaWdodDogYXJyYXlQYWdlU2l6ZVsxXSArICdweCcgfSk7DQoNCiAgICAgICAgbmV3IEVmZmVjdC5BcHBlYXIodGhpcy5vdmVybGF5LCB7IGR1cmF0aW9uOiB0aGlzLm92ZXJsYXlEdXJhdGlvbiwgZnJvbTogMC4wLCB0bzogTGlnaHRib3hPcHRpb25zLm92ZXJsYXlPcGFjaXR5IH0pOw0KDQogICAgICAgIHRoaXMuaW1hZ2VBcnJheSA9IFtdOw0KICAgICAgICB2YXIgaW1hZ2VOdW0gPSAwOyAgICAgICANCg0KICAgICAgICBpZiAoKGltYWdlTGluay5yZWwgPT0gJ2xpZ2h0Ym94Jykpew0KICAgICAgICAgICAgLy8gaWYgaW1hZ2UgaXMgTk9UIHBhcnQgb2YgYSBzZXQsIGFkZCBzaW5nbGUgaW1hZ2UgdG8gaW1hZ2VBcnJheQ0KICAgICAgICAgICAgdGhpcy5pbWFnZUFycmF5LnB1c2goW2ltYWdlTGluay5ocmVmLCBpbWFnZUxpbmsudGl0bGVdKTsgICAgICAgICANCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vIGlmIGltYWdlIGlzIHBhcnQgb2YgYSBzZXQuLg0KICAgICAgICAgICAgdGhpcy5pbWFnZUFycmF5ID0gDQogICAgICAgICAgICAgICAgJCQoaW1hZ2VMaW5rLnRhZ05hbWUgKyAnW2hyZWZdW3JlbD0iJyArIGltYWdlTGluay5yZWwgKyAnIl0nKS4NCiAgICAgICAgICAgICAgICBjb2xsZWN0KGZ1bmN0aW9uKGFuY2hvcil7IHJldHVybiBbYW5jaG9yLmhyZWYsIGFuY2hvci50aXRsZV07IH0pLg0KICAgICAgICAgICAgICAgIHVuaXEoKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgd2hpbGUgKHRoaXMuaW1hZ2VBcnJheVtpbWFnZU51bV1bMF0gIT0gaW1hZ2VMaW5rLmhyZWYpIHsgaW1hZ2VOdW0rKzsgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gY2FsY3VsYXRlIHRvcCBhbmQgbGVmdCBvZmZzZXQgZm9yIHRoZSBsaWdodGJveCANCiAgICAgICAgdmFyIGFycmF5UGFnZVNjcm9sbCA9IGRvY3VtZW50LnZpZXdwb3J0LmdldFNjcm9sbE9mZnNldHMoKTsNCiAgICAgICAgdmFyIGxpZ2h0Ym94VG9wID0gYXJyYXlQYWdlU2Nyb2xsWzFdICsgKGRvY3VtZW50LnZpZXdwb3J0LmdldEhlaWdodCgpIC8gMTApOw0KICAgICAgICB2YXIgbGlnaHRib3hMZWZ0ID0gYXJyYXlQYWdlU2Nyb2xsWzBdOw0KICAgICAgICB0aGlzLmxpZ2h0Ym94LnNldFN0eWxlKHsgdG9wOiBsaWdodGJveFRvcCArICdweCcsIGxlZnQ6IGxpZ2h0Ym94TGVmdCArICdweCcgfSkuc2hvdygpOw0KICAgICAgICANCiAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZShpbWFnZU51bSk7DQogICAgfSwNCg0KICAgIC8vDQogICAgLy8gIGNoYW5nZUltYWdlKCkNCiAgICAvLyAgSGlkZSBtb3N0IGVsZW1lbnRzIGFuZCBwcmVsb2FkIGltYWdlIGluIHByZXBhcmF0aW9uIGZvciByZXNpemluZyBpbWFnZSBjb250YWluZXIuDQogICAgLy8NCiAgICBjaGFuZ2VJbWFnZTogZnVuY3Rpb24oaW1hZ2VOdW0pIHsgICANCiAgICAgICAgDQogICAgICAgIHRoaXMuYWN0aXZlSW1hZ2UgPSBpbWFnZU51bTsgLy8gdXBkYXRlIGdsb2JhbCB2YXINCg0KICAgICAgICAvLyBoaWRlIGVsZW1lbnRzIGR1cmluZyB0cmFuc2l0aW9uDQogICAgICAgIGlmIChMaWdodGJveE9wdGlvbnMuYW5pbWF0ZSkgdGhpcy5sb2FkaW5nLnNob3coKTsNCiAgICAgICAgdGhpcy5saWdodGJveEltYWdlLmhpZGUoKTsNCiAgICAgICAgdGhpcy5ob3Zlck5hdi5oaWRlKCk7DQogICAgICAgIHRoaXMucHJldkxpbmsuaGlkZSgpOw0KICAgICAgICB0aGlzLm5leHRMaW5rLmhpZGUoKTsNCgkJLy8gSEFDSzogT3BlcmE5IGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHNjcmlwdGFjdWxvdXMgb3BhY2l0eSBhbmQgYXBwZWFyIGZ4DQogICAgICAgIHRoaXMuaW1hZ2VEYXRhQ29udGFpbmVyLnNldFN0eWxlKHtvcGFjaXR5OiAuMDAwMX0pOw0KICAgICAgICB0aGlzLm51bWJlckRpc3BsYXkuaGlkZSgpOyAgICAgIA0KICAgICAgICANCiAgICAgICAgdmFyIGltZ1ByZWxvYWRlciA9IG5ldyBJbWFnZSgpOw0KICAgICAgICANCiAgICAgICAgLy8gb25jZSBpbWFnZSBpcyBwcmVsb2FkZWQsIHJlc2l6ZSBpbWFnZSBjb250YWluZXINCg0KDQogICAgICAgIGltZ1ByZWxvYWRlci5vbmxvYWQgPSAoZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHRoaXMubGlnaHRib3hJbWFnZS5zcmMgPSB0aGlzLmltYWdlQXJyYXlbdGhpcy5hY3RpdmVJbWFnZV1bMF07DQogICAgICAgICAgICB0aGlzLnJlc2l6ZUltYWdlQ29udGFpbmVyKGltZ1ByZWxvYWRlci53aWR0aCwgaW1nUHJlbG9hZGVyLmhlaWdodCk7DQogICAgICAgIH0pLmJpbmQodGhpcyk7DQogICAgICAgIGltZ1ByZWxvYWRlci5zcmMgPSB0aGlzLmltYWdlQXJyYXlbdGhpcy5hY3RpdmVJbWFnZV1bMF07DQogICAgfSwNCg0KICAgIC8vDQogICAgLy8gIHJlc2l6ZUltYWdlQ29udGFpbmVyKCkNCiAgICAvLw0KICAgIHJlc2l6ZUltYWdlQ29udGFpbmVyOiBmdW5jdGlvbihpbWdXaWR0aCwgaW1nSGVpZ2h0KSB7DQoNCiAgICAgICAgLy8gZ2V0IGN1cnJlbnQgd2lkdGggYW5kIGhlaWdodA0KICAgICAgICB2YXIgd2lkdGhDdXJyZW50ICA9IHRoaXMub3V0ZXJJbWFnZUNvbnRhaW5lci5nZXRXaWR0aCgpOw0KICAgICAgICB2YXIgaGVpZ2h0Q3VycmVudCA9IHRoaXMub3V0ZXJJbWFnZUNvbnRhaW5lci5nZXRIZWlnaHQoKTsNCg0KICAgICAgICAvLyBnZXQgbmV3IHdpZHRoIGFuZCBoZWlnaHQNCiAgICAgICAgdmFyIHdpZHRoTmV3ICA9IChpbWdXaWR0aCAgKyBMaWdodGJveE9wdGlvbnMuYm9yZGVyU2l6ZSAqIDIpOw0KICAgICAgICB2YXIgaGVpZ2h0TmV3ID0gKGltZ0hlaWdodCArIExpZ2h0Ym94T3B0aW9ucy5ib3JkZXJTaXplICogMik7DQoNCiAgICAgICAgLy8gc2NhbGFycyBiYXNlZCBvbiBjaGFuZ2UgZnJvbSBvbGQgdG8gbmV3DQogICAgICAgIHZhciB4U2NhbGUgPSAod2lkdGhOZXcgIC8gd2lkdGhDdXJyZW50KSAgKiAxMDA7DQogICAgICAgIHZhciB5U2NhbGUgPSAoaGVpZ2h0TmV3IC8gaGVpZ2h0Q3VycmVudCkgKiAxMDA7DQoNCiAgICAgICAgLy8gY2FsY3VsYXRlIHNpemUgZGlmZmVyZW5jZSBiZXR3ZWVuIG5ldyBhbmQgb2xkIGltYWdlLCBhbmQgcmVzaXplIGlmIG5lY2Vzc2FyeQ0KICAgICAgICB2YXIgd0RpZmYgPSB3aWR0aEN1cnJlbnQgLSB3aWR0aE5ldzsNCiAgICAgICAgdmFyIGhEaWZmID0gaGVpZ2h0Q3VycmVudCAtIGhlaWdodE5ldzsNCg0KICAgICAgICBpZiAoaERpZmYgIT0gMCkgbmV3IEVmZmVjdC5TY2FsZSh0aGlzLm91dGVySW1hZ2VDb250YWluZXIsIHlTY2FsZSwge3NjYWxlWDogZmFsc2UsIGR1cmF0aW9uOiB0aGlzLnJlc2l6ZUR1cmF0aW9uLCBxdWV1ZTogJ2Zyb250J30pOyANCiAgICAgICAgaWYgKHdEaWZmICE9IDApIG5ldyBFZmZlY3QuU2NhbGUodGhpcy5vdXRlckltYWdlQ29udGFpbmVyLCB4U2NhbGUsIHtzY2FsZVk6IGZhbHNlLCBkdXJhdGlvbjogdGhpcy5yZXNpemVEdXJhdGlvbiwgZGVsYXk6IHRoaXMucmVzaXplRHVyYXRpb259KTsgDQoNCiAgICAgICAgLy8gaWYgbmV3IGFuZCBvbGQgaW1hZ2UgYXJlIHNhbWUgc2l6ZSBhbmQgbm8gc2NhbGluZyB0cmFuc2l0aW9uIGlzIG5lY2Vzc2FyeSwgDQogICAgICAgIC8vIGRvIGEgcXVpY2sgcGF1c2UgdG8gcHJldmVudCBpbWFnZSBmbGlja2VyLg0KICAgICAgICB2YXIgdGltZW91dCA9IDA7DQogICAgICAgIGlmICgoaERpZmYgPT0gMCkgJiYgKHdEaWZmID09IDApKXsNCiAgICAgICAgICAgIHRpbWVvdXQgPSAxMDA7DQogICAgICAgICAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHRpbWVvdXQgPSAyNTA7ICAgDQogICAgICAgIH0NCg0KICAgICAgICAoZnVuY3Rpb24oKXsNCiAgICAgICAgICAgIHRoaXMucHJldkxpbmsuc2V0U3R5bGUoeyBoZWlnaHQ6IGltZ0hlaWdodCArICdweCcgfSk7DQogICAgICAgICAgICB0aGlzLm5leHRMaW5rLnNldFN0eWxlKHsgaGVpZ2h0OiBpbWdIZWlnaHQgKyAncHgnIH0pOw0KICAgICAgICAgICAgdGhpcy5pbWFnZURhdGFDb250YWluZXIuc2V0U3R5bGUoeyB3aWR0aDogd2lkdGhOZXcgKyAncHgnIH0pOw0KDQogICAgICAgICAgICB0aGlzLnNob3dJbWFnZSgpOw0KICAgICAgICB9KS5iaW5kKHRoaXMpLmRlbGF5KHRpbWVvdXQgLyAxMDAwKTsNCiAgICB9LA0KICAgIA0KICAgIC8vDQogICAgLy8gIHNob3dJbWFnZSgpDQogICAgLy8gIERpc3BsYXkgaW1hZ2UgYW5kIGJlZ2luIHByZWxvYWRpbmcgbmVpZ2hib3JzLg0KICAgIC8vDQogICAgc2hvd0ltYWdlOiBmdW5jdGlvbigpew0KICAgICAgICB0aGlzLmxvYWRpbmcuaGlkZSgpOw0KICAgICAgICBuZXcgRWZmZWN0LkFwcGVhcih0aGlzLmxpZ2h0Ym94SW1hZ2UsIHsgDQogICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5yZXNpemVEdXJhdGlvbiwgDQogICAgICAgICAgICBxdWV1ZTogJ2VuZCcsIA0KICAgICAgICAgICAgYWZ0ZXJGaW5pc2g6IChmdW5jdGlvbigpeyB0aGlzLnVwZGF0ZURldGFpbHMoKTsgfSkuYmluZCh0aGlzKSANCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMucHJlbG9hZE5laWdoYm9ySW1hZ2VzKCk7DQogICAgfSwNCg0KICAgIC8vDQogICAgLy8gIHVwZGF0ZURldGFpbHMoKQ0KICAgIC8vICBEaXNwbGF5IGNhcHRpb24sIGltYWdlIG51bWJlciwgYW5kIGJvdHRvbSBuYXYuDQogICAgLy8NCiAgICB1cGRhdGVEZXRhaWxzOiBmdW5jdGlvbigpIHsNCiAgICANCiAgICAgICAgLy8gaWYgY2FwdGlvbiBpcyBub3QgbnVsbA0KICAgICAgICBpZiAodGhpcy5pbWFnZUFycmF5W3RoaXMuYWN0aXZlSW1hZ2VdWzFdICE9ICIiKXsNCiAgICAgICAgICAgIHRoaXMuY2FwdGlvbi51cGRhdGUodGhpcy5pbWFnZUFycmF5W3RoaXMuYWN0aXZlSW1hZ2VdWzFdKS5zaG93KCk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vIGlmIGltYWdlIGlzIHBhcnQgb2Ygc2V0IGRpc3BsYXkgJ0ltYWdlIHggb2YgeCcgDQogICAgICAgIGlmICh0aGlzLmltYWdlQXJyYXkubGVuZ3RoID4gMSl7DQogICAgICAgICAgICB0aGlzLm51bWJlckRpc3BsYXkudXBkYXRlKCBMaWdodGJveE9wdGlvbnMubGFiZWxJbWFnZSArICcgJyArICh0aGlzLmFjdGl2ZUltYWdlICsgMSkgKyAnICcgKyBMaWdodGJveE9wdGlvbnMubGFiZWxPZiArICcgICcgKyB0aGlzLmltYWdlQXJyYXkubGVuZ3RoKS5zaG93KCk7DQogICAgICAgIH0NCg0KICAgICAgICBuZXcgRWZmZWN0LlBhcmFsbGVsKA0KICAgICAgICAgICAgWyANCiAgICAgICAgICAgICAgICBuZXcgRWZmZWN0LlNsaWRlRG93bih0aGlzLmltYWdlRGF0YUNvbnRhaW5lciwgeyBzeW5jOiB0cnVlLCBkdXJhdGlvbjogdGhpcy5yZXNpemVEdXJhdGlvbiwgZnJvbTogMC4wLCB0bzogMS4wIH0pLCANCiAgICAgICAgICAgICAgICBuZXcgRWZmZWN0LkFwcGVhcih0aGlzLmltYWdlRGF0YUNvbnRhaW5lciwgeyBzeW5jOiB0cnVlLCBkdXJhdGlvbjogdGhpcy5yZXNpemVEdXJhdGlvbiB9KSANCiAgICAgICAgICAgIF0sIA0KICAgICAgICAgICAgeyANCiAgICAgICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5yZXNpemVEdXJhdGlvbiwgDQogICAgICAgICAgICAgICAgYWZ0ZXJGaW5pc2g6IChmdW5jdGlvbigpIHsNCgkgICAgICAgICAgICAgICAgLy8gdXBkYXRlIG92ZXJsYXkgc2l6ZSBhbmQgdXBkYXRlIG5hdg0KCSAgICAgICAgICAgICAgICB2YXIgYXJyYXlQYWdlU2l6ZSA9IHRoaXMuZ2V0UGFnZVNpemUoKTsNCgkgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5LnNldFN0eWxlKHsgaGVpZ2h0OiBhcnJheVBhZ2VTaXplWzFdICsgJ3B4JyB9KTsNCgkgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVOYXYoKTsNCiAgICAgICAgICAgICAgICB9KS5iaW5kKHRoaXMpDQogICAgICAgICAgICB9IA0KICAgICAgICApOw0KICAgIH0sDQoNCiAgICAvLw0KICAgIC8vICB1cGRhdGVOYXYoKQ0KICAgIC8vICBEaXNwbGF5IGFwcHJvcHJpYXRlIHByZXZpb3VzIGFuZCBuZXh0IGhvdmVyIG5hdmlnYXRpb24uDQogICAgLy8NCiAgICB1cGRhdGVOYXY6IGZ1bmN0aW9uKCkgew0KDQogICAgICAgIHRoaXMuaG92ZXJOYXYuc2hvdygpOyAgICAgICAgICAgICAgIA0KDQogICAgICAgIC8vIGlmIG5vdCBmaXJzdCBpbWFnZSBpbiBzZXQsIGRpc3BsYXkgcHJldiBpbWFnZSBidXR0b24NCiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW1hZ2UgPiAwKSB0aGlzLnByZXZMaW5rLnNob3coKTsNCg0KICAgICAgICAvLyBpZiBub3QgbGFzdCBpbWFnZSBpbiBzZXQsIGRpc3BsYXkgbmV4dCBpbWFnZSBidXR0b24NCiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW1hZ2UgPCAodGhpcy5pbWFnZUFycmF5Lmxlbmd0aCAtIDEpKSB0aGlzLm5leHRMaW5rLnNob3coKTsNCiAgICAgICAgDQogICAgICAgIHRoaXMuZW5hYmxlS2V5Ym9hcmROYXYoKTsNCiAgICB9LA0KDQogICAgLy8NCiAgICAvLyAgZW5hYmxlS2V5Ym9hcmROYXYoKQ0KICAgIC8vDQogICAgZW5hYmxlS2V5Ym9hcmROYXY6IGZ1bmN0aW9uKCkgew0KICAgICAgICBkb2N1bWVudC5vYnNlcnZlKCdrZXlkb3duJywgdGhpcy5rZXlib2FyZEFjdGlvbik7IA0KICAgIH0sDQoNCiAgICAvLw0KICAgIC8vICBkaXNhYmxlS2V5Ym9hcmROYXYoKQ0KICAgIC8vDQogICAgZGlzYWJsZUtleWJvYXJkTmF2OiBmdW5jdGlvbigpIHsNCiAgICAgICAgZG9jdW1lbnQuc3RvcE9ic2VydmluZygna2V5ZG93bicsIHRoaXMua2V5Ym9hcmRBY3Rpb24pOyANCiAgICB9LA0KDQogICAgLy8NCiAgICAvLyAga2V5Ym9hcmRBY3Rpb24oKQ0KICAgIC8vDQogICAga2V5Ym9hcmRBY3Rpb246IGZ1bmN0aW9uKGV2ZW50KSB7DQogICAgICAgIHZhciBrZXljb2RlID0gZXZlbnQua2V5Q29kZTsNCg0KICAgICAgICB2YXIgZXNjYXBlS2V5Ow0KICAgICAgICBpZiAoZXZlbnQuRE9NX1ZLX0VTQ0FQRSkgeyAgLy8gbW96aWxsYQ0KICAgICAgICAgICAgZXNjYXBlS2V5ID0gZXZlbnQuRE9NX1ZLX0VTQ0FQRTsNCiAgICAgICAgfSBlbHNlIHsgLy8gaWUNCiAgICAgICAgICAgIGVzY2FwZUtleSA9IDI3Ow0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIGtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Y29kZSkudG9Mb3dlckNhc2UoKTsNCiAgICAgICAgDQogICAgICAgIGlmIChrZXkubWF0Y2goL3h8b3xjLykgfHwgKGtleWNvZGUgPT0gZXNjYXBlS2V5KSl7IC8vIGNsb3NlIGxpZ2h0Ym94DQogICAgICAgICAgICB0aGlzLmVuZCgpOw0KICAgICAgICB9IGVsc2UgaWYgKChrZXkgPT0gJ3AnKSB8fCAoa2V5Y29kZSA9PSAzNykpeyAvLyBkaXNwbGF5IHByZXZpb3VzIGltYWdlDQogICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVJbWFnZSAhPSAwKXsNCiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVLZXlib2FyZE5hdigpOw0KICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5hY3RpdmVJbWFnZSAtIDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2UgaWYgKChrZXkgPT0gJ24nKSB8fCAoa2V5Y29kZSA9PSAzOSkpeyAvLyBkaXNwbGF5IG5leHQgaW1hZ2UNCiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUltYWdlICE9ICh0aGlzLmltYWdlQXJyYXkubGVuZ3RoIC0gMSkpew0KICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUtleWJvYXJkTmF2KCk7DQogICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZSh0aGlzLmFjdGl2ZUltYWdlICsgMSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9LA0KDQogICAgLy8NCiAgICAvLyAgcHJlbG9hZE5laWdoYm9ySW1hZ2VzKCkNCiAgICAvLyAgUHJlbG9hZCBwcmV2aW91cyBhbmQgbmV4dCBpbWFnZXMuDQogICAgLy8NCiAgICBwcmVsb2FkTmVpZ2hib3JJbWFnZXM6IGZ1bmN0aW9uKCl7DQogICAgICAgIHZhciBwcmVsb2FkTmV4dEltYWdlLCBwcmVsb2FkUHJldkltYWdlOw0KICAgICAgICBpZiAodGhpcy5pbWFnZUFycmF5Lmxlbmd0aCA+IHRoaXMuYWN0aXZlSW1hZ2UgKyAxKXsNCiAgICAgICAgICAgIHByZWxvYWROZXh0SW1hZ2UgPSBuZXcgSW1hZ2UoKTsNCiAgICAgICAgICAgIHByZWxvYWROZXh0SW1hZ2Uuc3JjID0gdGhpcy5pbWFnZUFycmF5W3RoaXMuYWN0aXZlSW1hZ2UgKyAxXVswXTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodGhpcy5hY3RpdmVJbWFnZSA+IDApew0KICAgICAgICAgICAgcHJlbG9hZFByZXZJbWFnZSA9IG5ldyBJbWFnZSgpOw0KICAgICAgICAgICAgcHJlbG9hZFByZXZJbWFnZS5zcmMgPSB0aGlzLmltYWdlQXJyYXlbdGhpcy5hY3RpdmVJbWFnZSAtIDFdWzBdOw0KICAgICAgICB9DQogICAgDQogICAgfSwNCg0KICAgIC8vDQogICAgLy8gIGVuZCgpDQogICAgLy8NCiAgICBlbmQ6IGZ1bmN0aW9uKCkgew0KICAgICAgICB0aGlzLmRpc2FibGVLZXlib2FyZE5hdigpOw0KICAgICAgICB0aGlzLmxpZ2h0Ym94LmhpZGUoKTsNCiAgICAgICAgbmV3IEVmZmVjdC5GYWRlKHRoaXMub3ZlcmxheSwgeyBkdXJhdGlvbjogdGhpcy5vdmVybGF5RHVyYXRpb24gfSk7DQogICAgICAgICQkKCdzZWxlY3QnLCAnb2JqZWN0JywgJ2VtYmVkJykuZWFjaChmdW5jdGlvbihub2RlKXsgbm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnIH0pOw0KICAgIH0sDQoNCiAgICAvLw0KICAgIC8vICBnZXRQYWdlU2l6ZSgpDQogICAgLy8NCiAgICBnZXRQYWdlU2l6ZTogZnVuY3Rpb24oKSB7DQoJICAgICAgICANCgkgICAgIHZhciB4U2Nyb2xsLCB5U2Nyb2xsOw0KCQkNCgkJaWYgKHdpbmRvdy5pbm5lckhlaWdodCAmJiB3aW5kb3cuc2Nyb2xsTWF4WSkgewkNCgkJCXhTY3JvbGwgPSB3aW5kb3cuaW5uZXJXaWR0aCArIHdpbmRvdy5zY3JvbGxNYXhYOw0KCQkJeVNjcm9sbCA9IHdpbmRvdy5pbm5lckhlaWdodCArIHdpbmRvdy5zY3JvbGxNYXhZOw0KCQl9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQpeyAvLyBhbGwgYnV0IEV4cGxvcmVyIE1hYw0KCQkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7DQoJCQl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7DQoJCX0gZWxzZSB7IC8vIEV4cGxvcmVyIE1hYy4uLndvdWxkIGFsc28gd29yayBpbiBFeHBsb3JlciA2IFN0cmljdCwgTW96aWxsYSBhbmQgU2FmYXJpDQoJCQl4U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDsNCgkJCXlTY3JvbGwgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDsNCgkJfQ0KCQkNCgkJdmFyIHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQ7DQoJCQ0KCQlpZiAoc2VsZi5pbm5lckhlaWdodCkgewkvLyBhbGwgZXhjZXB0IEV4cGxvcmVyDQoJCQlpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpew0KCQkJCXdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOyANCgkJCX0gZWxzZSB7DQoJCQkJd2luZG93V2lkdGggPSBzZWxmLmlubmVyV2lkdGg7DQoJCQl9DQoJCQl3aW5kb3dIZWlnaHQgPSBzZWxmLmlubmVySGVpZ2h0Ow0KCQl9IGVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7IC8vIEV4cGxvcmVyIDYgU3RyaWN0IE1vZGUNCgkJCXdpbmRvd1dpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOw0KCQkJd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsNCgkJfSBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSB7IC8vIG90aGVyIEV4cGxvcmVycw0KCQkJd2luZG93V2lkdGggPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOw0KCQkJd2luZG93SGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7DQoJCX0JDQoJCQ0KCQkvLyBmb3Igc21hbGwgcGFnZXMgd2l0aCB0b3RhbCBoZWlnaHQgbGVzcyB0aGVuIGhlaWdodCBvZiB0aGUgdmlld3BvcnQNCgkJaWYoeVNjcm9sbCA8IHdpbmRvd0hlaWdodCl7DQoJCQlwYWdlSGVpZ2h0ID0gd2luZG93SGVpZ2h0Ow0KCQl9IGVsc2UgeyANCgkJCXBhZ2VIZWlnaHQgPSB5U2Nyb2xsOw0KCQl9DQoJDQoJCS8vIGZvciBzbWFsbCBwYWdlcyB3aXRoIHRvdGFsIHdpZHRoIGxlc3MgdGhlbiB3aWR0aCBvZiB0aGUgdmlld3BvcnQNCgkJaWYoeFNjcm9sbCA8IHdpbmRvd1dpZHRoKXsJDQoJCQlwYWdlV2lkdGggPSB4U2Nyb2xsOwkJDQoJCX0gZWxzZSB7DQoJCQlwYWdlV2lkdGggPSB3aW5kb3dXaWR0aDsNCgkJfQ0KDQoJCXJldHVybiBbcGFnZVdpZHRoLHBhZ2VIZWlnaHRdOw0KCX0NCn0NCg0KZG9jdW1lbnQub2JzZXJ2ZSgnZG9tOmxvYWRlZCcsIGZ1bmN0aW9uICgpIHsgbmV3IExpZ2h0Ym94KCk7IH0pOw==]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/js/prototype.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjYuMC4yCiAqICAoYykgMjAwNS0yMDA4IFNhbSBTdGVwaGVuc29uCiAqCiAqICBQcm90b3R5cGUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgogKiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgUHJvdG90eXBlIHdlYiBzaXRlOiBodHRwOi8vd3d3LnByb3RvdHlwZWpzLm9yZy8KICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2YXIgUHJvdG90eXBlID0gewogIFZlcnNpb246ICcxLjYuMC4yJywKCiAgQnJvd3NlcjogewogICAgSUU6ICAgICAhISh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5vcGVyYSksCiAgICBPcGVyYTogICEhd2luZG93Lm9wZXJhLAogICAgV2ViS2l0OiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0FwcGxlV2ViS2l0LycpID4gLTEsCiAgICBHZWNrbzogIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignR2Vja28nKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignS0hUTUwnKSA9PSAtMSwKICAgIE1vYmlsZVNhZmFyaTogISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BcHBsZS4qTW9iaWxlLipTYWZhcmkvKQogIH0sCgogIEJyb3dzZXJGZWF0dXJlczogewogICAgWFBhdGg6ICEhZG9jdW1lbnQuZXZhbHVhdGUsCiAgICBFbGVtZW50RXh0ZW5zaW9uczogISF3aW5kb3cuSFRNTEVsZW1lbnQsCiAgICBTcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zOgogICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5fX3Byb3RvX18gJiYKICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuX19wcm90b19fICE9PQogICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKS5fX3Byb3RvX18KICB9LAoKICBTY3JpcHRGcmFnbWVudDogJzxzY3JpcHRbXj5dKj4oW1xcU1xcc10qPyk8XC9zY3JpcHQ+JywKICBKU09ORmlsdGVyOiAvXlwvXCotc2VjdXJlLShbXHNcU10qKVwqXC9ccyokLywKCiAgZW1wdHlGdW5jdGlvbjogZnVuY3Rpb24oKSB7IH0sCiAgSzogZnVuY3Rpb24oeCkgeyByZXR1cm4geCB9Cn07CgppZiAoUHJvdG90eXBlLkJyb3dzZXIuTW9iaWxlU2FmYXJpKQogIFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucyA9IGZhbHNlOwoKCi8qIEJhc2VkIG9uIEFsZXggQXJuZWxsJ3MgaW5oZXJpdGFuY2UgaW1wbGVtZW50YXRpb24uICovCnZhciBDbGFzcyA9IHsKICBjcmVhdGU6IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhcmVudCA9IG51bGwsIHByb3BlcnRpZXMgPSAkQShhcmd1bWVudHMpOwogICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHByb3BlcnRpZXNbMF0pKQogICAgICBwYXJlbnQgPSBwcm9wZXJ0aWVzLnNoaWZ0KCk7CgogICAgZnVuY3Rpb24ga2xhc3MoKSB7CiAgICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfQoKICAgIE9iamVjdC5leHRlbmQoa2xhc3MsIENsYXNzLk1ldGhvZHMpOwogICAga2xhc3Muc3VwZXJjbGFzcyA9IHBhcmVudDsKICAgIGtsYXNzLnN1YmNsYXNzZXMgPSBbXTsKCiAgICBpZiAocGFyZW50KSB7CiAgICAgIHZhciBzdWJjbGFzcyA9IGZ1bmN0aW9uKCkgeyB9OwogICAgICBzdWJjbGFzcy5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOwogICAgICBrbGFzcy5wcm90b3R5cGUgPSBuZXcgc3ViY2xhc3M7CiAgICAgIHBhcmVudC5zdWJjbGFzc2VzLnB1c2goa2xhc3MpOwogICAgfQoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykKICAgICAga2xhc3MuYWRkTWV0aG9kcyhwcm9wZXJ0aWVzW2ldKTsKCiAgICBpZiAoIWtsYXNzLnByb3RvdHlwZS5pbml0aWFsaXplKQogICAgICBrbGFzcy5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwoKICAgIGtsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGtsYXNzOwoKICAgIHJldHVybiBrbGFzczsKICB9Cn07CgpDbGFzcy5NZXRob2RzID0gewogIGFkZE1ldGhvZHM6IGZ1bmN0aW9uKHNvdXJjZSkgewogICAgdmFyIGFuY2VzdG9yICAgPSB0aGlzLnN1cGVyY2xhc3MgJiYgdGhpcy5zdXBlcmNsYXNzLnByb3RvdHlwZTsKICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsKCiAgICBpZiAoIU9iamVjdC5rZXlzKHsgdG9TdHJpbmc6IHRydWUgfSkubGVuZ3RoKQogICAgICBwcm9wZXJ0aWVzLnB1c2goInRvU3RyaW5nIiwgInZhbHVlT2YiKTsKCiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldLCB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV07CiAgICAgIGlmIChhbmNlc3RvciAmJiBPYmplY3QuaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgIHZhbHVlLmFyZ3VtZW50TmFtZXMoKS5maXJzdCgpID09ICIkc3VwZXIiKSB7CiAgICAgICAgdmFyIG1ldGhvZCA9IHZhbHVlLCB2YWx1ZSA9IE9iamVjdC5leHRlbmQoKGZ1bmN0aW9uKG0pIHsKICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIGFuY2VzdG9yW21dLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfTsKICAgICAgICB9KShwcm9wZXJ0eSkud3JhcChtZXRob2QpLCB7CiAgICAgICAgICB2YWx1ZU9mOiAgZnVuY3Rpb24oKSB7IHJldHVybiBtZXRob2QgfSwKICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ldGhvZC50b1N0cmluZygpIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLnByb3RvdHlwZVtwcm9wZXJ0eV0gPSB2YWx1ZTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9Cn07Cgp2YXIgQWJzdHJhY3QgPSB7IH07CgpPYmplY3QuZXh0ZW5kID0gZnVuY3Rpb24oZGVzdGluYXRpb24sIHNvdXJjZSkgewogIGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkKICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CiAgcmV0dXJuIGRlc3RpbmF0aW9uOwp9OwoKT2JqZWN0LmV4dGVuZChPYmplY3QsIHsKICBpbnNwZWN0OiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHRyeSB7CiAgICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQob2JqZWN0KSkgcmV0dXJuICd1bmRlZmluZWQnOwogICAgICBpZiAob2JqZWN0ID09PSBudWxsKSByZXR1cm4gJ251bGwnOwogICAgICByZXR1cm4gb2JqZWN0Lmluc3BlY3QgPyBvYmplY3QuaW5zcGVjdCgpIDogU3RyaW5nKG9iamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikgcmV0dXJuICcuLi4nOwogICAgICB0aHJvdyBlOwogICAgfQogIH0sCgogIHRvSlNPTjogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmplY3Q7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSAndW5kZWZpbmVkJzoKICAgICAgY2FzZSAnZnVuY3Rpb24nOgogICAgICBjYXNlICd1bmtub3duJzogcmV0dXJuOwogICAgICBjYXNlICdib29sZWFuJzogcmV0dXJuIG9iamVjdC50b1N0cmluZygpOwogICAgfQoKICAgIGlmIChvYmplY3QgPT09IG51bGwpIHJldHVybiAnbnVsbCc7CiAgICBpZiAob2JqZWN0LnRvSlNPTikgcmV0dXJuIG9iamVjdC50b0pTT04oKTsKICAgIGlmIChPYmplY3QuaXNFbGVtZW50KG9iamVjdCkpIHJldHVybjsKCiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KSB7CiAgICAgIHZhciB2YWx1ZSA9IE9iamVjdC50b0pTT04ob2JqZWN0W3Byb3BlcnR5XSk7CiAgICAgIGlmICghT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkKICAgICAgICByZXN1bHRzLnB1c2gocHJvcGVydHkudG9KU09OKCkgKyAnOiAnICsgdmFsdWUpOwogICAgfQoKICAgIHJldHVybiAneycgKyByZXN1bHRzLmpvaW4oJywgJykgKyAnfSc7CiAgfSwKCiAgdG9RdWVyeVN0cmluZzogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gJEgob2JqZWN0KS50b1F1ZXJ5U3RyaW5nKCk7CiAgfSwKCiAgdG9IVE1MOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0LnRvSFRNTCA/IG9iamVjdC50b0hUTUwoKSA6IFN0cmluZy5pbnRlcnByZXQob2JqZWN0KTsKICB9LAoKICBrZXlzOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHZhciBrZXlzID0gW107CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmplY3QpCiAgICAgIGtleXMucHVzaChwcm9wZXJ0eSk7CiAgICByZXR1cm4ga2V5czsKICB9LAoKICB2YWx1ZXM6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgdmFyIHZhbHVlcyA9IFtdOwogICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb2JqZWN0KQogICAgICB2YWx1ZXMucHVzaChvYmplY3RbcHJvcGVydHldKTsKICAgIHJldHVybiB2YWx1ZXM7CiAgfSwKCiAgY2xvbmU6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgcmV0dXJuIE9iamVjdC5leHRlbmQoeyB9LCBvYmplY3QpOwogIH0sCgogIGlzRWxlbWVudDogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ICYmIG9iamVjdC5ub2RlVHlwZSA9PSAxOwogIH0sCgogIGlzQXJyYXk6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT0gIm9iamVjdCIgJiYKICAgICAgJ3NwbGljZScgaW4gb2JqZWN0ICYmICdqb2luJyBpbiBvYmplY3Q7CiAgfSwKCiAgaXNIYXNoOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBIYXNoOwogIH0sCgogIGlzRnVuY3Rpb246IGZ1bmN0aW9uKG9iamVjdCkgewogICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT0gImZ1bmN0aW9uIjsKICB9LAoKICBpc1N0cmluZzogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAic3RyaW5nIjsKICB9LAoKICBpc051bWJlcjogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAibnVtYmVyIjsKICB9LAoKICBpc1VuZGVmaW5lZDogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAidW5kZWZpbmVkIjsKICB9Cn0pOwoKT2JqZWN0LmV4dGVuZChGdW5jdGlvbi5wcm90b3R5cGUsIHsKICBhcmd1bWVudE5hbWVzOiBmdW5jdGlvbigpIHsKICAgIHZhciBuYW1lcyA9IHRoaXMudG9TdHJpbmcoKS5tYXRjaCgvXltcc1woXSpmdW5jdGlvblteKF0qXCgoLio/KVwpLylbMV0uc3BsaXQoIiwiKS5pbnZva2UoInN0cmlwIik7CiAgICByZXR1cm4gbmFtZXMubGVuZ3RoID09IDEgJiYgIW5hbWVzWzBdID8gW10gOiBuYW1lczsKICB9LAoKICBiaW5kOiBmdW5jdGlvbigpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMiAmJiBPYmplY3QuaXNVbmRlZmluZWQoYXJndW1lbnRzWzBdKSkgcmV0dXJuIHRoaXM7CiAgICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gJEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5zaGlmdCgpOwogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkob2JqZWN0LCBhcmdzLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7CiAgICB9CiAgfSwKCiAgYmluZEFzRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oKSB7CiAgICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gJEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5zaGlmdCgpOwogICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseShvYmplY3QsIFtldmVudCB8fCB3aW5kb3cuZXZlbnRdLmNvbmNhdChhcmdzKSk7CiAgICB9CiAgfSwKCiAgY3Vycnk6IGZ1bmN0aW9uKCkgewogICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGhpczsKICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpOwogICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkodGhpcywgYXJncy5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwogICAgfQogIH0sCgogIGRlbGF5OiBmdW5jdGlvbigpIHsKICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpLCB0aW1lb3V0ID0gYXJncy5zaGlmdCgpICogMTAwMDsKICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KF9fbWV0aG9kLCBhcmdzKTsKICAgIH0sIHRpbWVvdXQpOwogIH0sCgogIHdyYXA6IGZ1bmN0aW9uKHdyYXBwZXIpIHsKICAgIHZhciBfX21ldGhvZCA9IHRoaXM7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB3cmFwcGVyLmFwcGx5KHRoaXMsIFtfX21ldGhvZC5iaW5kKHRoaXMpXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwogICAgfQogIH0sCgogIG1ldGhvZGl6ZTogZnVuY3Rpb24oKSB7CiAgICBpZiAodGhpcy5fbWV0aG9kaXplZCkgcmV0dXJuIHRoaXMuX21ldGhvZGl6ZWQ7CiAgICB2YXIgX19tZXRob2QgPSB0aGlzOwogICAgcmV0dXJuIHRoaXMuX21ldGhvZGl6ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KG51bGwsIFt0aGlzXS5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwogICAgfTsKICB9Cn0pOwoKRnVuY3Rpb24ucHJvdG90eXBlLmRlZmVyID0gRnVuY3Rpb24ucHJvdG90eXBlLmRlbGF5LmN1cnJ5KDAuMDEpOwoKRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7CiAgcmV0dXJuICciJyArIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSArICctJyArCiAgICAodGhpcy5nZXRVVENNb250aCgpICsgMSkudG9QYWRkZWRTdHJpbmcoMikgKyAnLScgKwogICAgdGhpcy5nZXRVVENEYXRlKCkudG9QYWRkZWRTdHJpbmcoMikgKyAnVCcgKwogICAgdGhpcy5nZXRVVENIb3VycygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJzonICsKICAgIHRoaXMuZ2V0VVRDTWludXRlcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJzonICsKICAgIHRoaXMuZ2V0VVRDU2Vjb25kcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJ1oiJzsKfTsKCnZhciBUcnkgPSB7CiAgdGhlc2U6IGZ1bmN0aW9uKCkgewogICAgdmFyIHJldHVyblZhbHVlOwoKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGxhbWJkYSA9IGFyZ3VtZW50c1tpXTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm5WYWx1ZSA9IGxhbWJkYSgpOwogICAgICAgIGJyZWFrOwogICAgICB9IGNhdGNoIChlKSB7IH0KICAgIH0KCiAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgfQp9OwoKUmVnRXhwLnByb3RvdHlwZS5tYXRjaCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdDsKClJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXVwvXFxdKS9nLCAnXFwkMScpOwp9OwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2YXIgUGVyaW9kaWNhbEV4ZWN1dGVyID0gQ2xhc3MuY3JlYXRlKHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihjYWxsYmFjaywgZnJlcXVlbmN5KSB7CiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gZmFsc2U7CgogICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKCk7CiAgfSwKCiAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy5vblRpbWVyRXZlbnQuYmluZCh0aGlzKSwgdGhpcy5mcmVxdWVuY3kgKiAxMDAwKTsKICB9LAoKICBleGVjdXRlOiBmdW5jdGlvbigpIHsKICAgIHRoaXMuY2FsbGJhY2sodGhpcyk7CiAgfSwKCiAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICBpZiAoIXRoaXMudGltZXIpIHJldHVybjsKICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7CiAgICB0aGlzLnRpbWVyID0gbnVsbDsKICB9LAoKICBvblRpbWVyRXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKCF0aGlzLmN1cnJlbnRseUV4ZWN1dGluZykgewogICAgICB0cnkgewogICAgICAgIHRoaXMuY3VycmVudGx5RXhlY3V0aW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLmV4ZWN1dGUoKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgfQp9KTsKT2JqZWN0LmV4dGVuZChTdHJpbmcsIHsKICBpbnRlcnByZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTsKICB9LAogIHNwZWNpYWxDaGFyOiB7CiAgICAnXGInOiAnXFxiJywKICAgICdcdCc6ICdcXHQnLAogICAgJ1xuJzogJ1xcbicsCiAgICAnXGYnOiAnXFxmJywKICAgICdccic6ICdcXHInLAogICAgJ1xcJzogJ1xcXFwnCiAgfQp9KTsKCk9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgewogIGdzdWI6IGZ1bmN0aW9uKHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJycsIHNvdXJjZSA9IHRoaXMsIG1hdGNoOwogICAgcmVwbGFjZW1lbnQgPSBhcmd1bWVudHMuY2FsbGVlLnByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CgogICAgd2hpbGUgKHNvdXJjZS5sZW5ndGggPiAwKSB7CiAgICAgIGlmIChtYXRjaCA9IHNvdXJjZS5tYXRjaChwYXR0ZXJuKSkgewogICAgICAgIHJlc3VsdCArPSBzb3VyY2Uuc2xpY2UoMCwgbWF0Y2guaW5kZXgpOwogICAgICAgIHJlc3VsdCArPSBTdHJpbmcuaW50ZXJwcmV0KHJlcGxhY2VtZW50KG1hdGNoKSk7CiAgICAgICAgc291cmNlICA9IHNvdXJjZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ICs9IHNvdXJjZSwgc291cmNlID0gJyc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfSwKCiAgc3ViOiBmdW5jdGlvbihwYXR0ZXJuLCByZXBsYWNlbWVudCwgY291bnQpIHsKICAgIHJlcGxhY2VtZW50ID0gdGhpcy5nc3ViLnByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CiAgICBjb3VudCA9IE9iamVjdC5pc1VuZGVmaW5lZChjb3VudCkgPyAxIDogY291bnQ7CgogICAgcmV0dXJuIHRoaXMuZ3N1YihwYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewogICAgICBpZiAoLS1jb3VudCA8IDApIHJldHVybiBtYXRjaFswXTsKICAgICAgcmV0dXJuIHJlcGxhY2VtZW50KG1hdGNoKTsKICAgIH0pOwogIH0sCgogIHNjYW46IGZ1bmN0aW9uKHBhdHRlcm4sIGl0ZXJhdG9yKSB7CiAgICB0aGlzLmdzdWIocGF0dGVybiwgaXRlcmF0b3IpOwogICAgcmV0dXJuIFN0cmluZyh0aGlzKTsKICB9LAoKICB0cnVuY2F0ZTogZnVuY3Rpb24obGVuZ3RoLCB0cnVuY2F0aW9uKSB7CiAgICBsZW5ndGggPSBsZW5ndGggfHwgMzA7CiAgICB0cnVuY2F0aW9uID0gT2JqZWN0LmlzVW5kZWZpbmVkKHRydW5jYXRpb24pID8gJy4uLicgOiB0cnVuY2F0aW9uOwogICAgcmV0dXJuIHRoaXMubGVuZ3RoID4gbGVuZ3RoID8KICAgICAgdGhpcy5zbGljZSgwLCBsZW5ndGggLSB0cnVuY2F0aW9uLmxlbmd0aCkgKyB0cnVuY2F0aW9uIDogU3RyaW5nKHRoaXMpOwogIH0sCgogIHN0cmlwOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnJlcGxhY2UoL15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8sICcnKTsKICB9LAoKICBzdHJpcFRhZ3M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvPFwvP1tePl0rPi9naSwgJycpOwogIH0sCgogIHN0cmlwU2NyaXB0czogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5yZXBsYWNlKG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyksICcnKTsKICB9LAoKICBleHRyYWN0U2NyaXB0czogZnVuY3Rpb24oKSB7CiAgICB2YXIgbWF0Y2hBbGwgPSBuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3JpcHRGcmFnbWVudCwgJ2ltZycpOwogICAgdmFyIG1hdGNoT25lID0gbmV3IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQsICdpbScpOwogICAgcmV0dXJuICh0aGlzLm1hdGNoKG1hdGNoQWxsKSB8fCBbXSkubWFwKGZ1bmN0aW9uKHNjcmlwdFRhZykgewogICAgICByZXR1cm4gKHNjcmlwdFRhZy5tYXRjaChtYXRjaE9uZSkgfHwgWycnLCAnJ10pWzFdOwogICAgfSk7CiAgfSwKCiAgZXZhbFNjcmlwdHM6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuZXh0cmFjdFNjcmlwdHMoKS5tYXAoZnVuY3Rpb24oc2NyaXB0KSB7IHJldHVybiBldmFsKHNjcmlwdCkgfSk7CiAgfSwKCiAgZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7CiAgICB2YXIgc2VsZiA9IGFyZ3VtZW50cy5jYWxsZWU7CiAgICBzZWxmLnRleHQuZGF0YSA9IHRoaXM7CiAgICByZXR1cm4gc2VsZi5kaXYuaW5uZXJIVE1MOwogIH0sCgogIHVuZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpOwogICAgZGl2LmlubmVySFRNTCA9IHRoaXMuc3RyaXBUYWdzKCk7CiAgICByZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF0gPyAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/CiAgICAgICRBKGRpdi5jaGlsZE5vZGVzKS5pbmplY3QoJycsIGZ1bmN0aW9uKG1lbW8sIG5vZGUpIHsgcmV0dXJuIG1lbW8rbm9kZS5ub2RlVmFsdWUgfSkgOgogICAgICBkaXYuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUpIDogJyc7CiAgfSwKCiAgdG9RdWVyeVBhcmFtczogZnVuY3Rpb24oc2VwYXJhdG9yKSB7CiAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmlwKCkubWF0Y2goLyhbXj8jXSopKCMuKik/JC8pOwogICAgaWYgKCFtYXRjaCkgcmV0dXJuIHsgfTsKCiAgICByZXR1cm4gbWF0Y2hbMV0uc3BsaXQoc2VwYXJhdG9yIHx8ICcmJykuaW5qZWN0KHsgfSwgZnVuY3Rpb24oaGFzaCwgcGFpcikgewogICAgICBpZiAoKHBhaXIgPSBwYWlyLnNwbGl0KCc9JykpWzBdKSB7CiAgICAgICAgdmFyIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChwYWlyLnNoaWZ0KCkpOwogICAgICAgIHZhciB2YWx1ZSA9IHBhaXIubGVuZ3RoID4gMSA/IHBhaXIuam9pbignPScpIDogcGFpclswXTsKICAgICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7CgogICAgICAgIGlmIChrZXkgaW4gaGFzaCkgewogICAgICAgICAgaWYgKCFPYmplY3QuaXNBcnJheShoYXNoW2tleV0pKSBoYXNoW2tleV0gPSBbaGFzaFtrZXldXTsKICAgICAgICAgIGhhc2hba2V5XS5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBoYXNoW2tleV0gPSB2YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4gaGFzaDsKICAgIH0pOwogIH0sCgogIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuc3BsaXQoJycpOwogIH0sCgogIHN1Y2M6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuc2xpY2UoMCwgdGhpcy5sZW5ndGggLSAxKSArCiAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5jaGFyQ29kZUF0KHRoaXMubGVuZ3RoIC0gMSkgKyAxKTsKICB9LAoKICB0aW1lczogZnVuY3Rpb24oY291bnQpIHsKICAgIHJldHVybiBjb3VudCA8IDEgPyAnJyA6IG5ldyBBcnJheShjb3VudCArIDEpLmpvaW4odGhpcyk7CiAgfSwKCiAgY2FtZWxpemU6IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhcnRzID0gdGhpcy5zcGxpdCgnLScpLCBsZW4gPSBwYXJ0cy5sZW5ndGg7CiAgICBpZiAobGVuID09IDEpIHJldHVybiBwYXJ0c1swXTsKCiAgICB2YXIgY2FtZWxpemVkID0gdGhpcy5jaGFyQXQoMCkgPT0gJy0nCiAgICAgID8gcGFydHNbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0c1swXS5zdWJzdHJpbmcoMSkKICAgICAgOiBwYXJ0c1swXTsKCiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKQogICAgICBjYW1lbGl6ZWQgKz0gcGFydHNbaV0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0c1tpXS5zdWJzdHJpbmcoMSk7CgogICAgcmV0dXJuIGNhbWVsaXplZDsKICB9LAoKICBjYXBpdGFsaXplOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKTsKICB9LAoKICB1bmRlcnNjb3JlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmdzdWIoLzo6LywgJy8nKS5nc3ViKC8oW0EtWl0rKShbQS1aXVthLXpdKS8sJyN7MX1fI3syfScpLmdzdWIoLyhbYS16XGRdKShbQS1aXSkvLCcjezF9XyN7Mn0nKS5nc3ViKC8tLywnXycpLnRvTG93ZXJDYXNlKCk7CiAgfSwKCiAgZGFzaGVyaXplOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmdzdWIoL18vLCctJyk7CiAgfSwKCiAgaW5zcGVjdDogZnVuY3Rpb24odXNlRG91YmxlUXVvdGVzKSB7CiAgICB2YXIgZXNjYXBlZFN0cmluZyA9IHRoaXMuZ3N1YigvW1x4MDAtXHgxZlxcXS8sIGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBjaGFyYWN0ZXIgPSBTdHJpbmcuc3BlY2lhbENoYXJbbWF0Y2hbMF1dOwogICAgICByZXR1cm4gY2hhcmFjdGVyID8gY2hhcmFjdGVyIDogJ1xcdTAwJyArIG1hdGNoWzBdLmNoYXJDb2RlQXQoKS50b1BhZGRlZFN0cmluZygyLCAxNik7CiAgICB9KTsKICAgIGlmICh1c2VEb3VibGVRdW90ZXMpIHJldHVybiAnIicgKyBlc2NhcGVkU3RyaW5nLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwogICAgcmV0dXJuICInIiArIGVzY2FwZWRTdHJpbmcucmVwbGFjZSgvJy9nLCAnXFxcJycpICsgIiciOwogIH0sCgogIHRvSlNPTjogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5pbnNwZWN0KHRydWUpOwogIH0sCgogIHVuZmlsdGVySlNPTjogZnVuY3Rpb24oZmlsdGVyKSB7CiAgICByZXR1cm4gdGhpcy5zdWIoZmlsdGVyIHx8IFByb3RvdHlwZS5KU09ORmlsdGVyLCAnI3sxfScpOwogIH0sCgogIGlzSlNPTjogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RyID0gdGhpczsKICAgIGlmIChzdHIuYmxhbmsoKSkgcmV0dXJuIGZhbHNlOwogICAgc3RyID0gdGhpcy5yZXBsYWNlKC9cXC4vZywgJ0AnKS5yZXBsYWNlKC8iW14iXFxcblxyXSoiL2csICcnKTsKICAgIHJldHVybiAoL15bLDp7fVxbXF0wLTkuXC0rRWFlZmxuci11IFxuXHJcdF0qJC8pLnRlc3Qoc3RyKTsKICB9LAoKICBldmFsSlNPTjogZnVuY3Rpb24oc2FuaXRpemUpIHsKICAgIHZhciBqc29uID0gdGhpcy51bmZpbHRlckpTT04oKTsKICAgIHRyeSB7CiAgICAgIGlmICghc2FuaXRpemUgfHwganNvbi5pc0pTT04oKSkgcmV0dXJuIGV2YWwoJygnICsganNvbiArICcpJyk7CiAgICB9IGNhdGNoIChlKSB7IH0KICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQmFkbHkgZm9ybWVkIEpTT04gc3RyaW5nOiAnICsgdGhpcy5pbnNwZWN0KCkpOwogIH0sCgogIGluY2x1ZGU6IGZ1bmN0aW9uKHBhdHRlcm4pIHsKICAgIHJldHVybiB0aGlzLmluZGV4T2YocGF0dGVybikgPiAtMTsKICB9LAoKICBzdGFydHNXaXRoOiBmdW5jdGlvbihwYXR0ZXJuKSB7CiAgICByZXR1cm4gdGhpcy5pbmRleE9mKHBhdHRlcm4pID09PSAwOwogIH0sCgogIGVuZHNXaXRoOiBmdW5jdGlvbihwYXR0ZXJuKSB7CiAgICB2YXIgZCA9IHRoaXMubGVuZ3RoIC0gcGF0dGVybi5sZW5ndGg7CiAgICByZXR1cm4gZCA+PSAwICYmIHRoaXMubGFzdEluZGV4T2YocGF0dGVybikgPT09IGQ7CiAgfSwKCiAgZW1wdHk6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMgPT0gJyc7CiAgfSwKCiAgYmxhbms6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIC9eXHMqJC8udGVzdCh0aGlzKTsKICB9LAoKICBpbnRlcnBvbGF0ZTogZnVuY3Rpb24ob2JqZWN0LCBwYXR0ZXJuKSB7CiAgICByZXR1cm4gbmV3IFRlbXBsYXRlKHRoaXMsIHBhdHRlcm4pLmV2YWx1YXRlKG9iamVjdCk7CiAgfQp9KTsKCmlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQgfHwgUHJvdG90eXBlLkJyb3dzZXIuSUUpIE9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgewogIGVzY2FwZUhUTUw6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvJi9nLCcmYW1wOycpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJlcGxhY2UoLz4vZywnJmd0OycpOwogIH0sCiAgdW5lc2NhcGVIVE1MOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnJlcGxhY2UoLyZhbXA7L2csJyYnKS5yZXBsYWNlKC8mbHQ7L2csJzwnKS5yZXBsYWNlKC8mZ3Q7L2csJz4nKTsKICB9Cn0pOwoKU3RyaW5nLnByb3RvdHlwZS5nc3ViLnByZXBhcmVSZXBsYWNlbWVudCA9IGZ1bmN0aW9uKHJlcGxhY2VtZW50KSB7CiAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJlcGxhY2VtZW50KSkgcmV0dXJuIHJlcGxhY2VtZW50OwogIHZhciB0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShyZXBsYWNlbWVudCk7CiAgcmV0dXJuIGZ1bmN0aW9uKG1hdGNoKSB7IHJldHVybiB0ZW1wbGF0ZS5ldmFsdWF0ZShtYXRjaCkgfTsKfTsKClN0cmluZy5wcm90b3R5cGUucGFyc2VRdWVyeSA9IFN0cmluZy5wcm90b3R5cGUudG9RdWVyeVBhcmFtczsKCk9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZS5lc2NhcGVIVE1MLCB7CiAgZGl2OiAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksCiAgdGV4dDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpCn0pOwoKd2l0aCAoU3RyaW5nLnByb3RvdHlwZS5lc2NhcGVIVE1MKSBkaXYuYXBwZW5kQ2hpbGQodGV4dCk7Cgp2YXIgVGVtcGxhdGUgPSBDbGFzcy5jcmVhdGUoewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKHRlbXBsYXRlLCBwYXR0ZXJuKSB7CiAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGUudG9TdHJpbmcoKTsKICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm4gfHwgVGVtcGxhdGUuUGF0dGVybjsKICB9LAoKICBldmFsdWF0ZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24ob2JqZWN0LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMpKQogICAgICBvYmplY3QgPSBvYmplY3QudG9UZW1wbGF0ZVJlcGxhY2VtZW50cygpOwoKICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmdzdWIodGhpcy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewogICAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAnJzsKCiAgICAgIHZhciBiZWZvcmUgPSBtYXRjaFsxXSB8fCAnJzsKICAgICAgaWYgKGJlZm9yZSA9PSAnXFwnKSByZXR1cm4gbWF0Y2hbMl07CgogICAgICB2YXIgY3R4ID0gb2JqZWN0LCBleHByID0gbWF0Y2hbM107CiAgICAgIHZhciBwYXR0ZXJuID0gL14oW14uW10rfFxbKCg/Oi4qP1teXFxdKT8pXF0pKFwufFxbfCQpLzsKICAgICAgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoZXhwcik7CiAgICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gYmVmb3JlOwoKICAgICAgd2hpbGUgKG1hdGNoICE9IG51bGwpIHsKICAgICAgICB2YXIgY29tcCA9IG1hdGNoWzFdLnN0YXJ0c1dpdGgoJ1snKSA/IG1hdGNoWzJdLmdzdWIoJ1xcXFxdJywgJ10nKSA6IG1hdGNoWzFdOwogICAgICAgIGN0eCA9IGN0eFtjb21wXTsKICAgICAgICBpZiAobnVsbCA9PSBjdHggfHwgJycgPT0gbWF0Y2hbM10pIGJyZWFrOwogICAgICAgIGV4cHIgPSBleHByLnN1YnN0cmluZygnWycgPT0gbWF0Y2hbM10gPyBtYXRjaFsxXS5sZW5ndGggOiBtYXRjaFswXS5sZW5ndGgpOwogICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKGV4cHIpOwogICAgICB9CgogICAgICByZXR1cm4gYmVmb3JlICsgU3RyaW5nLmludGVycHJldChjdHgpOwogICAgfSk7CiAgfQp9KTsKVGVtcGxhdGUuUGF0dGVybiA9IC8oXnwufFxyfFxuKSgjXHsoLio/KVx9KS87Cgp2YXIgJGJyZWFrID0geyB9OwoKdmFyIEVudW1lcmFibGUgPSB7CiAgZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIHZhciBpbmRleCA9IDA7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7CiAgICB0cnkgewogICAgICB0aGlzLl9lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgaXRlcmF0b3IodmFsdWUsIGluZGV4KyspOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGUgIT0gJGJyZWFrKSB0aHJvdyBlOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgZWFjaFNsaWNlOiBmdW5jdGlvbihudW1iZXIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIGluZGV4ID0gLW51bWJlciwgc2xpY2VzID0gW10sIGFycmF5ID0gdGhpcy50b0FycmF5KCk7CiAgICB3aGlsZSAoKGluZGV4ICs9IG51bWJlcikgPCBhcnJheS5sZW5ndGgpCiAgICAgIHNsaWNlcy5wdXNoKGFycmF5LnNsaWNlKGluZGV4LCBpbmRleCtudW1iZXIpKTsKICAgIHJldHVybiBzbGljZXMuY29sbGVjdChpdGVyYXRvciwgY29udGV4dCk7CiAgfSwKCiAgYWxsOiBmdW5jdGlvbihpdGVyYXRvciwgY29udGV4dCkgewogICAgaXRlcmF0b3IgPSBpdGVyYXRvciA/IGl0ZXJhdG9yLmJpbmQoY29udGV4dCkgOiBQcm90b3R5cGUuSzsKICAgIHZhciByZXN1bHQgPSB0cnVlOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICByZXN1bHQgPSByZXN1bHQgJiYgISFpdGVyYXRvcih2YWx1ZSwgaW5kZXgpOwogICAgICBpZiAoIXJlc3VsdCkgdGhyb3cgJGJyZWFrOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIGFueTogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgPyBpdGVyYXRvci5iaW5kKGNvbnRleHQpIDogUHJvdG90eXBlLks7CiAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGlmIChyZXN1bHQgPSAhIWl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpCiAgICAgICAgdGhyb3cgJGJyZWFrOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIGNvbGxlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9LAoKICBkZXRlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7CiAgICB2YXIgcmVzdWx0OwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICBpZiAoaXRlcmF0b3IodmFsdWUsIGluZGV4KSkgewogICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgIHRocm93ICRicmVhazsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIGZpbmRBbGw6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yLmJpbmQoY29udGV4dCk7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICBpZiAoaXRlcmF0b3IodmFsdWUsIGluZGV4KSkKICAgICAgICByZXN1bHRzLnB1c2godmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9LAoKICBncmVwOiBmdW5jdGlvbihmaWx0ZXIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKCiAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKGZpbHRlcikpCiAgICAgIGZpbHRlciA9IG5ldyBSZWdFeHAoZmlsdGVyKTsKCiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGlmIChmaWx0ZXIubWF0Y2godmFsdWUpKQogICAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfSwKCiAgaW5jbHVkZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24odGhpcy5pbmRleE9mKSkKICAgICAgaWYgKHRoaXMuaW5kZXhPZihvYmplY3QpICE9IC0xKSByZXR1cm4gdHJ1ZTsKCiAgICB2YXIgZm91bmQgPSBmYWxzZTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSkgewogICAgICBpZiAodmFsdWUgPT0gb2JqZWN0KSB7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIHRocm93ICRicmVhazsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gZm91bmQ7CiAgfSwKCiAgaW5Hcm91cHNPZjogZnVuY3Rpb24obnVtYmVyLCBmaWxsV2l0aCkgewogICAgZmlsbFdpdGggPSBPYmplY3QuaXNVbmRlZmluZWQoZmlsbFdpdGgpID8gbnVsbCA6IGZpbGxXaXRoOwogICAgcmV0dXJuIHRoaXMuZWFjaFNsaWNlKG51bWJlciwgZnVuY3Rpb24oc2xpY2UpIHsKICAgICAgd2hpbGUoc2xpY2UubGVuZ3RoIDwgbnVtYmVyKSBzbGljZS5wdXNoKGZpbGxXaXRoKTsKICAgICAgcmV0dXJuIHNsaWNlOwogICAgfSk7CiAgfSwKCiAgaW5qZWN0OiBmdW5jdGlvbihtZW1vLCBpdGVyYXRvciwgY29udGV4dCkgewogICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRleHQpOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICBtZW1vID0gaXRlcmF0b3IobWVtbywgdmFsdWUsIGluZGV4KTsKICAgIH0pOwogICAgcmV0dXJuIG1lbW87CiAgfSwKCiAgaW52b2tlOiBmdW5jdGlvbihtZXRob2QpIHsKICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKS5zbGljZSgxKTsKICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWVbbWV0aG9kXS5hcHBseSh2YWx1ZSwgYXJncyk7CiAgICB9KTsKICB9LAoKICBtYXg6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIHJlc3VsdDsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgdmFsdWUgPSBpdGVyYXRvcih2YWx1ZSwgaW5kZXgpOwogICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgdmFsdWUgPj0gcmVzdWx0KQogICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIG1pbjogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgPyBpdGVyYXRvci5iaW5kKGNvbnRleHQpIDogUHJvdG90eXBlLks7CiAgICB2YXIgcmVzdWx0OwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICB2YWx1ZSA9IGl0ZXJhdG9yKHZhbHVlLCBpbmRleCk7CiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCB8fCB2YWx1ZSA8IHJlc3VsdCkKICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAoKICBwYXJ0aXRpb246IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7CiAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwogICAgdmFyIHRydWVzID0gW10sIGZhbHNlcyA9IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICAoaXRlcmF0b3IodmFsdWUsIGluZGV4KSA/CiAgICAgICAgdHJ1ZXMgOiBmYWxzZXMpLnB1c2godmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gW3RydWVzLCBmYWxzZXNdOwogIH0sCgogIHBsdWNrOiBmdW5jdGlvbihwcm9wZXJ0eSkgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHldKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfSwKCiAgcmVqZWN0OiBmdW5jdGlvbihpdGVyYXRvciwgY29udGV4dCkgewogICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRleHQpOwogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKCFpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKQogICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHRzOwogIH0sCgogIHNvcnRCeTogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IuYmluZChjb250ZXh0KTsKICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGNyaXRlcmlhOiBpdGVyYXRvcih2YWx1ZSwgaW5kZXgpfTsKICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHsKICAgICAgdmFyIGEgPSBsZWZ0LmNyaXRlcmlhLCBiID0gcmlnaHQuY3JpdGVyaWE7CiAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDsKICAgIH0pLnBsdWNrKCd2YWx1ZScpOwogIH0sCgogIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMubWFwKCk7CiAgfSwKCiAgemlwOiBmdW5jdGlvbigpIHsKICAgIHZhciBpdGVyYXRvciA9IFByb3RvdHlwZS5LLCBhcmdzID0gJEEoYXJndW1lbnRzKTsKICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihhcmdzLmxhc3QoKSkpCiAgICAgIGl0ZXJhdG9yID0gYXJncy5wb3AoKTsKCiAgICB2YXIgY29sbGVjdGlvbnMgPSBbdGhpc10uY29uY2F0KGFyZ3MpLm1hcCgkQSk7CiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIHJldHVybiBpdGVyYXRvcihjb2xsZWN0aW9ucy5wbHVjayhpbmRleCkpOwogICAgfSk7CiAgfSwKCiAgc2l6ZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy50b0FycmF5KCkubGVuZ3RoOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICcjPEVudW1lcmFibGU6JyArIHRoaXMudG9BcnJheSgpLmluc3BlY3QoKSArICc+JzsKICB9Cn07CgpPYmplY3QuZXh0ZW5kKEVudW1lcmFibGUsIHsKICBtYXA6ICAgICBFbnVtZXJhYmxlLmNvbGxlY3QsCiAgZmluZDogICAgRW51bWVyYWJsZS5kZXRlY3QsCiAgc2VsZWN0OiAgRW51bWVyYWJsZS5maW5kQWxsLAogIGZpbHRlcjogIEVudW1lcmFibGUuZmluZEFsbCwKICBtZW1iZXI6ICBFbnVtZXJhYmxlLmluY2x1ZGUsCiAgZW50cmllczogRW51bWVyYWJsZS50b0FycmF5LAogIGV2ZXJ5OiAgIEVudW1lcmFibGUuYWxsLAogIHNvbWU6ICAgIEVudW1lcmFibGUuYW55Cn0pOwpmdW5jdGlvbiAkQShpdGVyYWJsZSkgewogIGlmICghaXRlcmFibGUpIHJldHVybiBbXTsKICBpZiAoaXRlcmFibGUudG9BcnJheSkgcmV0dXJuIGl0ZXJhYmxlLnRvQXJyYXkoKTsKICB2YXIgbGVuZ3RoID0gaXRlcmFibGUubGVuZ3RoIHx8IDAsIHJlc3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKICB3aGlsZSAobGVuZ3RoLS0pIHJlc3VsdHNbbGVuZ3RoXSA9IGl0ZXJhYmxlW2xlbmd0aF07CiAgcmV0dXJuIHJlc3VsdHM7Cn0KCmlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpIHsKICAkQSA9IGZ1bmN0aW9uKGl0ZXJhYmxlKSB7CiAgICBpZiAoIWl0ZXJhYmxlKSByZXR1cm4gW107CiAgICBpZiAoIShPYmplY3QuaXNGdW5jdGlvbihpdGVyYWJsZSkgJiYgaXRlcmFibGUgPT0gJ1tvYmplY3QgTm9kZUxpc3RdJykgJiYKICAgICAgICBpdGVyYWJsZS50b0FycmF5KSByZXR1cm4gaXRlcmFibGUudG9BcnJheSgpOwogICAgdmFyIGxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aCB8fCAwLCByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7CiAgICB3aGlsZSAobGVuZ3RoLS0pIHJlc3VsdHNbbGVuZ3RoXSA9IGl0ZXJhYmxlW2xlbmd0aF07CiAgICByZXR1cm4gcmVzdWx0czsKICB9Owp9CgpBcnJheS5mcm9tID0gJEE7CgpPYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgRW51bWVyYWJsZSk7CgppZiAoIUFycmF5LnByb3RvdHlwZS5fcmV2ZXJzZSkgQXJyYXkucHJvdG90eXBlLl9yZXZlcnNlID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2U7CgpPYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgewogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgIGl0ZXJhdG9yKHRoaXNbaV0pOwogIH0sCgogIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgIHRoaXMubGVuZ3RoID0gMDsKICAgIHJldHVybiB0aGlzOwogIH0sCgogIGZpcnN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzWzBdOwogIH0sCgogIGxhc3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXNbdGhpcy5sZW5ndGggLSAxXTsKICB9LAoKICBjb21wYWN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbDsKICAgIH0pOwogIH0sCgogIGZsYXR0ZW46IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuaW5qZWN0KFtdLCBmdW5jdGlvbihhcnJheSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdChPYmplY3QuaXNBcnJheSh2YWx1ZSkgPwogICAgICAgIHZhbHVlLmZsYXR0ZW4oKSA6IFt2YWx1ZV0pOwogICAgfSk7CiAgfSwKCiAgd2l0aG91dDogZnVuY3Rpb24oKSB7CiAgICB2YXIgdmFsdWVzID0gJEEoYXJndW1lbnRzKTsKICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgewogICAgICByZXR1cm4gIXZhbHVlcy5pbmNsdWRlKHZhbHVlKTsKICAgIH0pOwogIH0sCgogIHJldmVyc2U6IGZ1bmN0aW9uKGlubGluZSkgewogICAgcmV0dXJuIChpbmxpbmUgIT09IGZhbHNlID8gdGhpcyA6IHRoaXMudG9BcnJheSgpKS5fcmV2ZXJzZSgpOwogIH0sCgogIHJlZHVjZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5sZW5ndGggPiAxID8gdGhpcyA6IHRoaXNbMF07CiAgfSwKCiAgdW5pcTogZnVuY3Rpb24oc29ydGVkKSB7CiAgICByZXR1cm4gdGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSwgaW5kZXgpIHsKICAgICAgaWYgKDAgPT0gaW5kZXggfHwgKHNvcnRlZCA/IGFycmF5Lmxhc3QoKSAhPSB2YWx1ZSA6ICFhcnJheS5pbmNsdWRlKHZhbHVlKSkpCiAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0pOwogIH0sCgogIGludGVyc2VjdDogZnVuY3Rpb24oYXJyYXkpIHsKICAgIHJldHVybiB0aGlzLnVuaXEoKS5maW5kQWxsKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgcmV0dXJuIGFycmF5LmRldGVjdChmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gaXRlbSA9PT0gdmFsdWUgfSk7CiAgICB9KTsKICB9LAoKICBjbG9uZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gW10uY29uY2F0KHRoaXMpOwogIH0sCgogIHNpemU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMubGVuZ3RoOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICdbJyArIHRoaXMubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCcsICcpICsgJ10nOwogIH0sCgogIHRvSlNPTjogZnVuY3Rpb24oKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKG9iamVjdCkgewogICAgICB2YXIgdmFsdWUgPSBPYmplY3QudG9KU09OKG9iamVjdCk7CiAgICAgIGlmICghT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmVzdWx0cy5wdXNoKHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuICdbJyArIHJlc3VsdHMuam9pbignLCAnKSArICddJzsKICB9Cn0pOwoKLy8gdXNlIG5hdGl2ZSBicm93c2VyIEpTIDEuNiBpbXBsZW1lbnRhdGlvbiBpZiBhdmFpbGFibGUKaWYgKE9iamVjdC5pc0Z1bmN0aW9uKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSkKICBBcnJheS5wcm90b3R5cGUuX2VhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDsKCmlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24oaXRlbSwgaSkgewogIGkgfHwgKGkgPSAwKTsKICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgaWYgKGkgPCAwKSBpID0gbGVuZ3RoICsgaTsKICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKQogICAgaWYgKHRoaXNbaV0gPT09IGl0ZW0pIHJldHVybiBpOwogIHJldHVybiAtMTsKfTsKCmlmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbihpdGVtLCBpKSB7CiAgaSA9IGlzTmFOKGkpID8gdGhpcy5sZW5ndGggOiAoaSA8IDAgPyB0aGlzLmxlbmd0aCArIGkgOiBpKSArIDE7CiAgdmFyIG4gPSB0aGlzLnNsaWNlKDAsIGkpLnJldmVyc2UoKS5pbmRleE9mKGl0ZW0pOwogIHJldHVybiAobiA8IDApID8gbiA6IGkgLSBuIC0gMTsKfTsKCkFycmF5LnByb3RvdHlwZS50b0FycmF5ID0gQXJyYXkucHJvdG90eXBlLmNsb25lOwoKZnVuY3Rpb24gJHcoc3RyaW5nKSB7CiAgaWYgKCFPYmplY3QuaXNTdHJpbmcoc3RyaW5nKSkgcmV0dXJuIFtdOwogIHN0cmluZyA9IHN0cmluZy5zdHJpcCgpOwogIHJldHVybiBzdHJpbmcgPyBzdHJpbmcuc3BsaXQoL1xzKy8pIDogW107Cn0KCmlmIChQcm90b3R5cGUuQnJvd3Nlci5PcGVyYSl7CiAgQXJyYXkucHJvdG90eXBlLmNvbmNhdCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGFycmF5ID0gW107CiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gdGhpcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaCh0aGlzW2ldKTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKE9iamVjdC5pc0FycmF5KGFyZ3VtZW50c1tpXSkpIHsKICAgICAgICBmb3IgKHZhciBqID0gMCwgYXJyYXlMZW5ndGggPSBhcmd1bWVudHNbaV0ubGVuZ3RoOyBqIDwgYXJyYXlMZW5ndGg7IGorKykKICAgICAgICAgIGFycmF5LnB1c2goYXJndW1lbnRzW2ldW2pdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcnJheS5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBhcnJheTsKICB9Owp9Ck9iamVjdC5leHRlbmQoTnVtYmVyLnByb3RvdHlwZSwgewogIHRvQ29sb3JQYXJ0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnRvUGFkZGVkU3RyaW5nKDIsIDE2KTsKICB9LAoKICBzdWNjOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzICsgMTsKICB9LAoKICB0aW1lczogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgICRSKDAsIHRoaXMsIHRydWUpLmVhY2goaXRlcmF0b3IpOwogICAgcmV0dXJuIHRoaXM7CiAgfSwKCiAgdG9QYWRkZWRTdHJpbmc6IGZ1bmN0aW9uKGxlbmd0aCwgcmFkaXgpIHsKICAgIHZhciBzdHJpbmcgPSB0aGlzLnRvU3RyaW5nKHJhZGl4IHx8IDEwKTsKICAgIHJldHVybiAnMCcudGltZXMobGVuZ3RoIC0gc3RyaW5nLmxlbmd0aCkgKyBzdHJpbmc7CiAgfSwKCiAgdG9KU09OOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBpc0Zpbml0ZSh0aGlzKSA/IHRoaXMudG9TdHJpbmcoKSA6ICdudWxsJzsKICB9Cn0pOwoKJHcoJ2FicyByb3VuZCBjZWlsIGZsb29yJykuZWFjaChmdW5jdGlvbihtZXRob2QpewogIE51bWJlci5wcm90b3R5cGVbbWV0aG9kXSA9IE1hdGhbbWV0aG9kXS5tZXRob2RpemUoKTsKfSk7CmZ1bmN0aW9uICRIKG9iamVjdCkgewogIHJldHVybiBuZXcgSGFzaChvYmplY3QpOwp9OwoKdmFyIEhhc2ggPSBDbGFzcy5jcmVhdGUoRW51bWVyYWJsZSwgKGZ1bmN0aW9uKCkgewoKICBmdW5jdGlvbiB0b1F1ZXJ5UGFpcihrZXksIHZhbHVlKSB7CiAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGtleTsKICAgIHJldHVybiBrZXkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nLmludGVycHJldCh2YWx1ZSkpOwogIH0KCiAgcmV0dXJuIHsKICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgICB0aGlzLl9vYmplY3QgPSBPYmplY3QuaXNIYXNoKG9iamVjdCkgPyBvYmplY3QudG9PYmplY3QoKSA6IE9iamVjdC5jbG9uZShvYmplY3QpOwogICAgfSwKCiAgICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX29iamVjdCkgewogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX29iamVjdFtrZXldLCBwYWlyID0gW2tleSwgdmFsdWVdOwogICAgICAgIHBhaXIua2V5ID0ga2V5OwogICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKICAgICAgICBpdGVyYXRvcihwYWlyKTsKICAgICAgfQogICAgfSwKCiAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFtrZXldID0gdmFsdWU7CiAgICB9LAoKICAgIGdldDogZnVuY3Rpb24oa2V5KSB7CiAgICAgIHJldHVybiB0aGlzLl9vYmplY3Rba2V5XTsKICAgIH0sCgogICAgdW5zZXQ6IGZ1bmN0aW9uKGtleSkgewogICAgICB2YXIgdmFsdWUgPSB0aGlzLl9vYmplY3Rba2V5XTsKICAgICAgZGVsZXRlIHRoaXMuX29iamVjdFtrZXldOwogICAgICByZXR1cm4gdmFsdWU7CiAgICB9LAoKICAgIHRvT2JqZWN0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIE9iamVjdC5jbG9uZSh0aGlzLl9vYmplY3QpOwogICAgfSwKCiAgICBrZXlzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMucGx1Y2soJ2tleScpOwogICAgfSwKCiAgICB2YWx1ZXM6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy5wbHVjaygndmFsdWUnKTsKICAgIH0sCgogICAgaW5kZXg6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuZGV0ZWN0KGZ1bmN0aW9uKHBhaXIpIHsKICAgICAgICByZXR1cm4gcGFpci52YWx1ZSA9PT0gdmFsdWU7CiAgICAgIH0pOwogICAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2gua2V5OwogICAgfSwKCiAgICBtZXJnZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiB0aGlzLmNsb25lKCkudXBkYXRlKG9iamVjdCk7CiAgICB9LAoKICAgIHVwZGF0ZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiBuZXcgSGFzaChvYmplY3QpLmluamVjdCh0aGlzLCBmdW5jdGlvbihyZXN1bHQsIHBhaXIpIHsKICAgICAgICByZXN1bHQuc2V0KHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9KTsKICAgIH0sCgogICAgdG9RdWVyeVN0cmluZzogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7CiAgICAgICAgdmFyIGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChwYWlyLmtleSksIHZhbHVlcyA9IHBhaXIudmFsdWU7CgogICAgICAgIGlmICh2YWx1ZXMgJiYgdHlwZW9mIHZhbHVlcyA9PSAnb2JqZWN0JykgewogICAgICAgICAgaWYgKE9iamVjdC5pc0FycmF5KHZhbHVlcykpCiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHRvUXVlcnlQYWlyLmN1cnJ5KGtleSkpLmpvaW4oJyYnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvUXVlcnlQYWlyKGtleSwgdmFsdWVzKTsKICAgICAgfSkuam9pbignJicpOwogICAgfSwKCiAgICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuICcjPEhhc2g6eycgKyB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7CiAgICAgICAgcmV0dXJuIHBhaXIubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCc6ICcpOwogICAgICB9KS5qb2luKCcsICcpICsgJ30+JzsKICAgIH0sCgogICAgdG9KU09OOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIE9iamVjdC50b0pTT04odGhpcy50b09iamVjdCgpKTsKICAgIH0sCgogICAgY2xvbmU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbmV3IEhhc2godGhpcyk7CiAgICB9CiAgfQp9KSgpKTsKCkhhc2gucHJvdG90eXBlLnRvVGVtcGxhdGVSZXBsYWNlbWVudHMgPSBIYXNoLnByb3RvdHlwZS50b09iamVjdDsKSGFzaC5mcm9tID0gJEg7CnZhciBPYmplY3RSYW5nZSA9IENsYXNzLmNyZWF0ZShFbnVtZXJhYmxlLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7CiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7CiAgICB0aGlzLmVuZCA9IGVuZDsKICAgIHRoaXMuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwogIH0sCgogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHZhbHVlID0gdGhpcy5zdGFydDsKICAgIHdoaWxlICh0aGlzLmluY2x1ZGUodmFsdWUpKSB7CiAgICAgIGl0ZXJhdG9yKHZhbHVlKTsKICAgICAgdmFsdWUgPSB2YWx1ZS5zdWNjKCk7CiAgICB9CiAgfSwKCiAgaW5jbHVkZTogZnVuY3Rpb24odmFsdWUpIHsKICAgIGlmICh2YWx1ZSA8IHRoaXMuc3RhcnQpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICh0aGlzLmV4Y2x1c2l2ZSkKICAgICAgcmV0dXJuIHZhbHVlIDwgdGhpcy5lbmQ7CiAgICByZXR1cm4gdmFsdWUgPD0gdGhpcy5lbmQ7CiAgfQp9KTsKCnZhciAkUiA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQsIGV4Y2x1c2l2ZSkgewogIHJldHVybiBuZXcgT2JqZWN0UmFuZ2Uoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKTsKfTsKCnZhciBBamF4ID0gewogIGdldFRyYW5zcG9ydDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gVHJ5LnRoZXNlKAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCl9LAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5YTUxIVFRQJyl9LAogICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyl9CiAgICApIHx8IGZhbHNlOwogIH0sCgogIGFjdGl2ZVJlcXVlc3RDb3VudDogMAp9OwoKQWpheC5SZXNwb25kZXJzID0gewogIHJlc3BvbmRlcnM6IFtdLAoKICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHRoaXMucmVzcG9uZGVycy5fZWFjaChpdGVyYXRvcik7CiAgfSwKCiAgcmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3BvbmRlcikgewogICAgaWYgKCF0aGlzLmluY2x1ZGUocmVzcG9uZGVyKSkKICAgICAgdGhpcy5yZXNwb25kZXJzLnB1c2gocmVzcG9uZGVyKTsKICB9LAoKICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25kZXIpIHsKICAgIHRoaXMucmVzcG9uZGVycyA9IHRoaXMucmVzcG9uZGVycy53aXRob3V0KHJlc3BvbmRlcik7CiAgfSwKCiAgZGlzcGF0Y2g6IGZ1bmN0aW9uKGNhbGxiYWNrLCByZXF1ZXN0LCB0cmFuc3BvcnQsIGpzb24pIHsKICAgIHRoaXMuZWFjaChmdW5jdGlvbihyZXNwb25kZXIpIHsKICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJlc3BvbmRlcltjYWxsYmFja10pKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc3BvbmRlcltjYWxsYmFja10uYXBwbHkocmVzcG9uZGVyLCBbcmVxdWVzdCwgdHJhbnNwb3J0LCBqc29uXSk7CiAgICAgICAgfSBjYXRjaCAoZSkgeyB9CiAgICAgIH0KICAgIH0pOwogIH0KfTsKCk9iamVjdC5leHRlbmQoQWpheC5SZXNwb25kZXJzLCBFbnVtZXJhYmxlKTsKCkFqYXguUmVzcG9uZGVycy5yZWdpc3Rlcih7CiAgb25DcmVhdGU6ICAgZnVuY3Rpb24oKSB7IEFqYXguYWN0aXZlUmVxdWVzdENvdW50KysgfSwKICBvbkNvbXBsZXRlOiBmdW5jdGlvbigpIHsgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQtLSB9Cn0pOwoKQWpheC5CYXNlID0gQ2xhc3MuY3JlYXRlKHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgIG1ldGhvZDogICAgICAgJ3Bvc3QnLAogICAgICBhc3luY2hyb25vdXM6IHRydWUsCiAgICAgIGNvbnRlbnRUeXBlOiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsCiAgICAgIGVuY29kaW5nOiAgICAgJ1VURi04JywKICAgICAgcGFyYW1ldGVyczogICAnJywKICAgICAgZXZhbEpTT046ICAgICB0cnVlLAogICAgICBldmFsSlM6ICAgICAgIHRydWUKICAgIH07CiAgICBPYmplY3QuZXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7IH0pOwoKICAgIHRoaXMub3B0aW9ucy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7CgogICAgaWYgKE9iamVjdC5pc1N0cmluZyh0aGlzLm9wdGlvbnMucGFyYW1ldGVycykpCiAgICAgIHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzID0gdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMudG9RdWVyeVBhcmFtcygpOwogICAgZWxzZSBpZiAoT2JqZWN0LmlzSGFzaCh0aGlzLm9wdGlvbnMucGFyYW1ldGVycykpCiAgICAgIHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzID0gdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMudG9PYmplY3QoKTsKICB9Cn0pOwoKQWpheC5SZXF1ZXN0ID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgewogIF9jb21wbGV0ZTogZmFsc2UsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgdXJsLCBvcHRpb25zKSB7CiAgICAkc3VwZXIob3B0aW9ucyk7CiAgICB0aGlzLnRyYW5zcG9ydCA9IEFqYXguZ2V0VHJhbnNwb3J0KCk7CiAgICB0aGlzLnJlcXVlc3QodXJsKTsKICB9LAoKICByZXF1ZXN0OiBmdW5jdGlvbih1cmwpIHsKICAgIHRoaXMudXJsID0gdXJsOwogICAgdGhpcy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kOwogICAgdmFyIHBhcmFtcyA9IE9iamVjdC5jbG9uZSh0aGlzLm9wdGlvbnMucGFyYW1ldGVycyk7CgogICAgaWYgKCFbJ2dldCcsICdwb3N0J10uaW5jbHVkZSh0aGlzLm1ldGhvZCkpIHsKICAgICAgLy8gc2ltdWxhdGUgb3RoZXIgdmVyYnMgb3ZlciBwb3N0CiAgICAgIHBhcmFtc1snX21ldGhvZCddID0gdGhpcy5tZXRob2Q7CiAgICAgIHRoaXMubWV0aG9kID0gJ3Bvc3QnOwogICAgfQoKICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtczsKCiAgICBpZiAocGFyYW1zID0gT2JqZWN0LnRvUXVlcnlTdHJpbmcocGFyYW1zKSkgewogICAgICAvLyB3aGVuIEdFVCwgYXBwZW5kIHBhcmFtZXRlcnMgdG8gVVJMCiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PSAnZ2V0JykKICAgICAgICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5jbHVkZSgnPycpID8gJyYnIDogJz8nKSArIHBhcmFtczsKICAgICAgZWxzZSBpZiAoL0tvbnF1ZXJvcnxTYWZhcml8S0hUTUwvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpCiAgICAgICAgcGFyYW1zICs9ICcmXz0nOwogICAgfQoKICAgIHRyeSB7CiAgICAgIHZhciByZXNwb25zZSA9IG5ldyBBamF4LlJlc3BvbnNlKHRoaXMpOwogICAgICBpZiAodGhpcy5vcHRpb25zLm9uQ3JlYXRlKSB0aGlzLm9wdGlvbnMub25DcmVhdGUocmVzcG9uc2UpOwogICAgICBBamF4LlJlc3BvbmRlcnMuZGlzcGF0Y2goJ29uQ3JlYXRlJywgdGhpcywgcmVzcG9uc2UpOwoKICAgICAgdGhpcy50cmFuc3BvcnQub3Blbih0aGlzLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCB0aGlzLnVybCwKICAgICAgICB0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKTsKCiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKSB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUuYmluZCh0aGlzKS5kZWZlcigxKTsKCiAgICAgIHRoaXMudHJhbnNwb3J0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpOwogICAgICB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7CgogICAgICB0aGlzLmJvZHkgPSB0aGlzLm1ldGhvZCA9PSAncG9zdCcgPyAodGhpcy5vcHRpb25zLnBvc3RCb2R5IHx8IHBhcmFtcykgOiBudWxsOwogICAgICB0aGlzLnRyYW5zcG9ydC5zZW5kKHRoaXMuYm9keSk7CgogICAgICAvKiBGb3JjZSBGaXJlZm94IHRvIGhhbmRsZSByZWFkeSBzdGF0ZSA0IGZvciBzeW5jaHJvbm91cyByZXF1ZXN0cyAqLwogICAgICBpZiAoIXRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMgJiYgdGhpcy50cmFuc3BvcnQub3ZlcnJpZGVNaW1lVHlwZSkKICAgICAgICB0aGlzLm9uU3RhdGVDaGFuZ2UoKTsKCiAgICB9CiAgICBjYXRjaCAoZSkgewogICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwogICAgfQogIH0sCgogIG9uU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgdmFyIHJlYWR5U3RhdGUgPSB0aGlzLnRyYW5zcG9ydC5yZWFkeVN0YXRlOwogICAgaWYgKHJlYWR5U3RhdGUgPiAxICYmICEoKHJlYWR5U3RhdGUgPT0gNCkgJiYgdGhpcy5fY29tcGxldGUpKQogICAgICB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUodGhpcy50cmFuc3BvcnQucmVhZHlTdGF0ZSk7CiAgfSwKCiAgc2V0UmVxdWVzdEhlYWRlcnM6IGZ1bmN0aW9uKCkgewogICAgdmFyIGhlYWRlcnMgPSB7CiAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JywKICAgICAgJ1gtUHJvdG90eXBlLVZlcnNpb24nOiBQcm90b3R5cGUuVmVyc2lvbiwKICAgICAgJ0FjY2VwdCc6ICd0ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qJwogICAgfTsKCiAgICBpZiAodGhpcy5tZXRob2QgPT0gJ3Bvc3QnKSB7CiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddID0gdGhpcy5vcHRpb25zLmNvbnRlbnRUeXBlICsKICAgICAgICAodGhpcy5vcHRpb25zLmVuY29kaW5nID8gJzsgY2hhcnNldD0nICsgdGhpcy5vcHRpb25zLmVuY29kaW5nIDogJycpOwoKICAgICAgLyogRm9yY2UgIkNvbm5lY3Rpb246IGNsb3NlIiBmb3Igb2xkZXIgTW96aWxsYSBicm93c2VycyB0byB3b3JrCiAgICAgICAqIGFyb3VuZCBhIGJ1ZyB3aGVyZSBYTUxIdHRwUmVxdWVzdCBzZW5kcyBhbiBpbmNvcnJlY3QKICAgICAgICogQ29udGVudC1sZW5ndGggaGVhZGVyLiBTZWUgTW96aWxsYSBCdWd6aWxsYSAjMjQ2NjUxLgogICAgICAgKi8KICAgICAgaWYgKHRoaXMudHJhbnNwb3J0Lm92ZXJyaWRlTWltZVR5cGUgJiYKICAgICAgICAgIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9HZWNrb1wvKFxkezR9KS8pIHx8IFswLDIwMDVdKVsxXSA8IDIwMDUpCiAgICAgICAgICAgIGhlYWRlcnNbJ0Nvbm5lY3Rpb24nXSA9ICdjbG9zZSc7CiAgICB9CgogICAgLy8gdXNlci1kZWZpbmVkIGhlYWRlcnMKICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlcXVlc3RIZWFkZXJzID09ICdvYmplY3QnKSB7CiAgICAgIHZhciBleHRyYXMgPSB0aGlzLm9wdGlvbnMucmVxdWVzdEhlYWRlcnM7CgogICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24oZXh0cmFzLnB1c2gpKQogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBleHRyYXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDIpCiAgICAgICAgICBoZWFkZXJzW2V4dHJhc1tpXV0gPSBleHRyYXNbaSsxXTsKICAgICAgZWxzZQogICAgICAgICRIKGV4dHJhcykuZWFjaChmdW5jdGlvbihwYWlyKSB7IGhlYWRlcnNbcGFpci5rZXldID0gcGFpci52YWx1ZSB9KTsKICAgIH0KCiAgICBmb3IgKHZhciBuYW1lIGluIGhlYWRlcnMpCiAgICAgIHRoaXMudHJhbnNwb3J0LnNldFJlcXVlc3RIZWFkZXIobmFtZSwgaGVhZGVyc1tuYW1lXSk7CiAgfSwKCiAgc3VjY2VzczogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhdHVzID0gdGhpcy5nZXRTdGF0dXMoKTsKICAgIHJldHVybiAhc3RhdHVzIHx8IChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCk7CiAgfSwKCiAgZ2V0U3RhdHVzOiBmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5zdGF0dXMgfHwgMDsKICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIDAgfQogIH0sCgogIHJlc3BvbmRUb1JlYWR5U3RhdGU6IGZ1bmN0aW9uKHJlYWR5U3RhdGUpIHsKICAgIHZhciBzdGF0ZSA9IEFqYXguUmVxdWVzdC5FdmVudHNbcmVhZHlTdGF0ZV0sIHJlc3BvbnNlID0gbmV3IEFqYXguUmVzcG9uc2UodGhpcyk7CgogICAgaWYgKHN0YXRlID09ICdDb21wbGV0ZScpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLl9jb21wbGV0ZSA9IHRydWU7CiAgICAgICAgKHRoaXMub3B0aW9uc1snb24nICsgcmVzcG9uc2Uuc3RhdHVzXQogICAgICAgICB8fCB0aGlzLm9wdGlvbnNbJ29uJyArICh0aGlzLnN1Y2Nlc3MoKSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJyldCiAgICAgICAgIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKShyZXNwb25zZSwgcmVzcG9uc2UuaGVhZGVySlNPTik7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwogICAgICB9CgogICAgICB2YXIgY29udGVudFR5cGUgPSByZXNwb25zZS5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpOwogICAgICBpZiAodGhpcy5vcHRpb25zLmV2YWxKUyA9PSAnZm9yY2UnCiAgICAgICAgICB8fCAodGhpcy5vcHRpb25zLmV2YWxKUyAmJiB0aGlzLmlzU2FtZU9yaWdpbigpICYmIGNvbnRlbnRUeXBlCiAgICAgICAgICAmJiBjb250ZW50VHlwZS5tYXRjaCgvXlxzKih0ZXh0fGFwcGxpY2F0aW9uKVwvKHgtKT8oamF2YXxlY21hKXNjcmlwdCg7LiopP1xzKiQvaSkpKQogICAgICAgIHRoaXMuZXZhbFJlc3BvbnNlKCk7CiAgICB9CgogICAgdHJ5IHsKICAgICAgKHRoaXMub3B0aW9uc1snb24nICsgc3RhdGVdIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKShyZXNwb25zZSwgcmVzcG9uc2UuaGVhZGVySlNPTik7CiAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb24nICsgc3RhdGUsIHRoaXMsIHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgIH0KCiAgICBpZiAoc3RhdGUgPT0gJ0NvbXBsZXRlJykgewogICAgICAvLyBhdm9pZCBtZW1vcnkgbGVhayBpbiBNU0lFOiBjbGVhbiB1cAogICAgICB0aGlzLnRyYW5zcG9ydC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgIH0KICB9LAoKICBpc1NhbWVPcmlnaW46IGZ1bmN0aW9uKCkgewogICAgdmFyIG0gPSB0aGlzLnVybC5tYXRjaCgvXlxzKmh0dHBzPzpcL1wvW15cL10qLyk7CiAgICByZXR1cm4gIW0gfHwgKG1bMF0gPT0gJyN7cHJvdG9jb2x9Ly8je2RvbWFpbn0je3BvcnR9Jy5pbnRlcnBvbGF0ZSh7CiAgICAgIHByb3RvY29sOiBsb2NhdGlvbi5wcm90b2NvbCwKICAgICAgZG9tYWluOiBkb2N1bWVudC5kb21haW4sCiAgICAgIHBvcnQ6IGxvY2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlvbi5wb3J0IDogJycKICAgIH0pKTsKICB9LAoKICBnZXRIZWFkZXI6IGZ1bmN0aW9uKG5hbWUpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1lKSB8fCBudWxsOwogICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbCB9CiAgfSwKCiAgZXZhbFJlc3BvbnNlOiBmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBldmFsKCh0aGlzLnRyYW5zcG9ydC5yZXNwb25zZVRleHQgfHwgJycpLnVuZmlsdGVySlNPTigpKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgIH0KICB9LAoKICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7CiAgICAodGhpcy5vcHRpb25zLm9uRXhjZXB0aW9uIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKSh0aGlzLCBleGNlcHRpb24pOwogICAgQWpheC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbicsIHRoaXMsIGV4Y2VwdGlvbik7CiAgfQp9KTsKCkFqYXguUmVxdWVzdC5FdmVudHMgPQogIFsnVW5pbml0aWFsaXplZCcsICdMb2FkaW5nJywgJ0xvYWRlZCcsICdJbnRlcmFjdGl2ZScsICdDb21wbGV0ZSddOwoKQWpheC5SZXNwb25zZSA9IENsYXNzLmNyZWF0ZSh7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24ocmVxdWVzdCl7CiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwogICAgdmFyIHRyYW5zcG9ydCAgPSB0aGlzLnRyYW5zcG9ydCAgPSByZXF1ZXN0LnRyYW5zcG9ydCwKICAgICAgICByZWFkeVN0YXRlID0gdGhpcy5yZWFkeVN0YXRlID0gdHJhbnNwb3J0LnJlYWR5U3RhdGU7CgogICAgaWYoKHJlYWR5U3RhdGUgPiAyICYmICFQcm90b3R5cGUuQnJvd3Nlci5JRSkgfHwgcmVhZHlTdGF0ZSA9PSA0KSB7CiAgICAgIHRoaXMuc3RhdHVzICAgICAgID0gdGhpcy5nZXRTdGF0dXMoKTsKICAgICAgdGhpcy5zdGF0dXNUZXh0ICAgPSB0aGlzLmdldFN0YXR1c1RleHQoKTsKICAgICAgdGhpcy5yZXNwb25zZVRleHQgPSBTdHJpbmcuaW50ZXJwcmV0KHRyYW5zcG9ydC5yZXNwb25zZVRleHQpOwogICAgICB0aGlzLmhlYWRlckpTT04gICA9IHRoaXMuX2dldEhlYWRlckpTT04oKTsKICAgIH0KCiAgICBpZihyZWFkeVN0YXRlID09IDQpIHsKICAgICAgdmFyIHhtbCA9IHRyYW5zcG9ydC5yZXNwb25zZVhNTDsKICAgICAgdGhpcy5yZXNwb25zZVhNTCAgPSBPYmplY3QuaXNVbmRlZmluZWQoeG1sKSA/IG51bGwgOiB4bWw7CiAgICAgIHRoaXMucmVzcG9uc2VKU09OID0gdGhpcy5fZ2V0UmVzcG9uc2VKU09OKCk7CiAgICB9CiAgfSwKCiAgc3RhdHVzOiAgICAgIDAsCiAgc3RhdHVzVGV4dDogJycsCgogIGdldFN0YXR1czogQWpheC5SZXF1ZXN0LnByb3RvdHlwZS5nZXRTdGF0dXMsCgogIGdldFN0YXR1c1RleHQ6IGZ1bmN0aW9uKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LnN0YXR1c1RleHQgfHwgJyc7CiAgICB9IGNhdGNoIChlKSB7IHJldHVybiAnJyB9CiAgfSwKCiAgZ2V0SGVhZGVyOiBBamF4LlJlcXVlc3QucHJvdG90eXBlLmdldEhlYWRlciwKCiAgZ2V0QWxsSGVhZGVyczogZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gdGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGwgfQogIH0sCgogIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbihuYW1lKSB7CiAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7CiAgfSwKCiAgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKICB9LAoKICBfZ2V0SGVhZGVySlNPTjogZnVuY3Rpb24oKSB7CiAgICB2YXIganNvbiA9IHRoaXMuZ2V0SGVhZGVyKCdYLUpTT04nKTsKICAgIGlmICghanNvbikgcmV0dXJuIG51bGw7CiAgICBqc29uID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShqc29uKSk7CiAgICB0cnkgewogICAgICByZXR1cm4ganNvbi5ldmFsSlNPTih0aGlzLnJlcXVlc3Qub3B0aW9ucy5zYW5pdGl6ZUpTT04gfHwKICAgICAgICAhdGhpcy5yZXF1ZXN0LmlzU2FtZU9yaWdpbigpKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5yZXF1ZXN0LmRpc3BhdGNoRXhjZXB0aW9uKGUpOwogICAgfQogIH0sCgogIF9nZXRSZXNwb25zZUpTT046IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSB0aGlzLnJlcXVlc3Qub3B0aW9uczsKICAgIGlmICghb3B0aW9ucy5ldmFsSlNPTiB8fCAob3B0aW9ucy5ldmFsSlNPTiAhPSAnZm9yY2UnICYmCiAgICAgICEodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpIHx8ICcnKS5pbmNsdWRlKCdhcHBsaWNhdGlvbi9qc29uJykpIHx8CiAgICAgICAgdGhpcy5yZXNwb25zZVRleHQuYmxhbmsoKSkKICAgICAgICAgIHJldHVybiBudWxsOwogICAgdHJ5IHsKICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VUZXh0LmV2YWxKU09OKG9wdGlvbnMuc2FuaXRpemVKU09OIHx8CiAgICAgICAgIXRoaXMucmVxdWVzdC5pc1NhbWVPcmlnaW4oKSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMucmVxdWVzdC5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKICAgIH0KICB9Cn0pOwoKQWpheC5VcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguUmVxdWVzdCwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpIHsKICAgIHRoaXMuY29udGFpbmVyID0gewogICAgICBzdWNjZXNzOiAoY29udGFpbmVyLnN1Y2Nlc3MgfHwgY29udGFpbmVyKSwKICAgICAgZmFpbHVyZTogKGNvbnRhaW5lci5mYWlsdXJlIHx8IChjb250YWluZXIuc3VjY2VzcyA/IG51bGwgOiBjb250YWluZXIpKQogICAgfTsKCiAgICBvcHRpb25zID0gT2JqZWN0LmNsb25lKG9wdGlvbnMpOwogICAgdmFyIG9uQ29tcGxldGUgPSBvcHRpb25zLm9uQ29tcGxldGU7CiAgICBvcHRpb25zLm9uQ29tcGxldGUgPSAoZnVuY3Rpb24ocmVzcG9uc2UsIGpzb24pIHsKICAgICAgdGhpcy51cGRhdGVDb250ZW50KHJlc3BvbnNlLnJlc3BvbnNlVGV4dCk7CiAgICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihvbkNvbXBsZXRlKSkgb25Db21wbGV0ZShyZXNwb25zZSwganNvbik7CiAgICB9KS5iaW5kKHRoaXMpOwoKICAgICRzdXBlcih1cmwsIG9wdGlvbnMpOwogIH0sCgogIHVwZGF0ZUNvbnRlbnQ6IGZ1bmN0aW9uKHJlc3BvbnNlVGV4dCkgewogICAgdmFyIHJlY2VpdmVyID0gdGhpcy5jb250YWluZXJbdGhpcy5zdWNjZXNzKCkgPyAnc3VjY2VzcycgOiAnZmFpbHVyZSddLAogICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CgogICAgaWYgKCFvcHRpb25zLmV2YWxTY3JpcHRzKSByZXNwb25zZVRleHQgPSByZXNwb25zZVRleHQuc3RyaXBTY3JpcHRzKCk7CgogICAgaWYgKHJlY2VpdmVyID0gJChyZWNlaXZlcikpIHsKICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0aW9uKSB7CiAgICAgICAgaWYgKE9iamVjdC5pc1N0cmluZyhvcHRpb25zLmluc2VydGlvbikpIHsKICAgICAgICAgIHZhciBpbnNlcnRpb24gPSB7IH07IGluc2VydGlvbltvcHRpb25zLmluc2VydGlvbl0gPSByZXNwb25zZVRleHQ7CiAgICAgICAgICByZWNlaXZlci5pbnNlcnQoaW5zZXJ0aW9uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBvcHRpb25zLmluc2VydGlvbihyZWNlaXZlciwgcmVzcG9uc2VUZXh0KTsKICAgICAgfQogICAgICBlbHNlIHJlY2VpdmVyLnVwZGF0ZShyZXNwb25zZVRleHQpOwogICAgfQogIH0KfSk7CgpBamF4LlBlcmlvZGljYWxVcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpIHsKICAgICRzdXBlcihvcHRpb25zKTsKICAgIHRoaXMub25Db21wbGV0ZSA9IHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlOwoKICAgIHRoaXMuZnJlcXVlbmN5ID0gKHRoaXMub3B0aW9ucy5mcmVxdWVuY3kgfHwgMik7CiAgICB0aGlzLmRlY2F5ID0gKHRoaXMub3B0aW9ucy5kZWNheSB8fCAxKTsKCiAgICB0aGlzLnVwZGF0ZXIgPSB7IH07CiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKICAgIHRoaXMudXJsID0gdXJsOwoKICAgIHRoaXMuc3RhcnQoKTsKICB9LAoKICBzdGFydDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLm9wdGlvbnMub25Db21wbGV0ZSA9IHRoaXMudXBkYXRlQ29tcGxldGUuYmluZCh0aGlzKTsKICAgIHRoaXMub25UaW1lckV2ZW50KCk7CiAgfSwKCiAgc3RvcDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnVwZGF0ZXIub3B0aW9ucy5vbkNvbXBsZXRlID0gdW5kZWZpbmVkOwogICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOwogICAgKHRoaXMub25Db21wbGV0ZSB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbikuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB9LAoKICB1cGRhdGVDb21wbGV0ZTogZnVuY3Rpb24ocmVzcG9uc2UpIHsKICAgIGlmICh0aGlzLm9wdGlvbnMuZGVjYXkpIHsKICAgICAgdGhpcy5kZWNheSA9IChyZXNwb25zZS5yZXNwb25zZVRleHQgPT0gdGhpcy5sYXN0VGV4dCA/CiAgICAgICAgdGhpcy5kZWNheSAqIHRoaXMub3B0aW9ucy5kZWNheSA6IDEpOwoKICAgICAgdGhpcy5sYXN0VGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDsKICAgIH0KICAgIHRoaXMudGltZXIgPSB0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLmRlbGF5KHRoaXMuZGVjYXkgKiB0aGlzLmZyZXF1ZW5jeSk7CiAgfSwKCiAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKICAgIHRoaXMudXBkYXRlciA9IG5ldyBBamF4LlVwZGF0ZXIodGhpcy5jb250YWluZXIsIHRoaXMudXJsLCB0aGlzLm9wdGlvbnMpOwogIH0KfSk7CmZ1bmN0aW9uICQoZWxlbWVudCkgewogIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgZm9yICh2YXIgaSA9IDAsIGVsZW1lbnRzID0gW10sIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgZWxlbWVudHMucHVzaCgkKGFyZ3VtZW50c1tpXSkpOwogICAgcmV0dXJuIGVsZW1lbnRzOwogIH0KICBpZiAoT2JqZWN0LmlzU3RyaW5nKGVsZW1lbnQpKQogICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQpOwogIHJldHVybiBFbGVtZW50LmV4dGVuZChlbGVtZW50KTsKfQoKaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGgpIHsKICBkb2N1bWVudC5fZ2V0RWxlbWVudHNCeVhQYXRoID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgcGFyZW50RWxlbWVudCkgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBxdWVyeSA9IGRvY3VtZW50LmV2YWx1YXRlKGV4cHJlc3Npb24sICQocGFyZW50RWxlbWVudCkgfHwgZG9jdW1lbnQsCiAgICAgIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBxdWVyeS5zbmFwc2hvdExlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKQogICAgICByZXN1bHRzLnB1c2goRWxlbWVudC5leHRlbmQocXVlcnkuc25hcHNob3RJdGVtKGkpKSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9Owp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCmlmICghd2luZG93Lk5vZGUpIHZhciBOb2RlID0geyB9OwoKaWYgKCFOb2RlLkVMRU1FTlRfTk9ERSkgewogIC8vIERPTSBsZXZlbCAyIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZwogIE9iamVjdC5leHRlbmQoTm9kZSwgewogICAgRUxFTUVOVF9OT0RFOiAxLAogICAgQVRUUklCVVRFX05PREU6IDIsCiAgICBURVhUX05PREU6IDMsCiAgICBDREFUQV9TRUNUSU9OX05PREU6IDQsCiAgICBFTlRJVFlfUkVGRVJFTkNFX05PREU6IDUsCiAgICBFTlRJVFlfTk9ERTogNiwKICAgIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTogNywKICAgIENPTU1FTlRfTk9ERTogOCwKICAgIERPQ1VNRU5UX05PREU6IDksCiAgICBET0NVTUVOVF9UWVBFX05PREU6IDEwLAogICAgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTogMTEsCiAgICBOT1RBVElPTl9OT0RFOiAxMgogIH0pOwp9CgooZnVuY3Rpb24oKSB7CiAgdmFyIGVsZW1lbnQgPSB0aGlzLkVsZW1lbnQ7CiAgdGhpcy5FbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSwgYXR0cmlidXRlcykgewogICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwgeyB9OwogICAgdGFnTmFtZSA9IHRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgIHZhciBjYWNoZSA9IEVsZW1lbnQuY2FjaGU7CiAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUgJiYgYXR0cmlidXRlcy5uYW1lKSB7CiAgICAgIHRhZ05hbWUgPSAnPCcgKyB0YWdOYW1lICsgJyBuYW1lPSInICsgYXR0cmlidXRlcy5uYW1lICsgJyI+JzsKICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMubmFtZTsKICAgICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSwgYXR0cmlidXRlcyk7CiAgICB9CiAgICBpZiAoIWNhY2hlW3RhZ05hbWVdKSBjYWNoZVt0YWdOYW1lXSA9IEVsZW1lbnQuZXh0ZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSkpOwogICAgcmV0dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoY2FjaGVbdGFnTmFtZV0uY2xvbmVOb2RlKGZhbHNlKSwgYXR0cmlidXRlcyk7CiAgfTsKICBPYmplY3QuZXh0ZW5kKHRoaXMuRWxlbWVudCwgZWxlbWVudCB8fCB7IH0pOwp9KS5jYWxsKHdpbmRvdyk7CgpFbGVtZW50LmNhY2hlID0geyB9OwoKRWxlbWVudC5NZXRob2RzID0gewogIHZpc2libGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOwogIH0sCgogIHRvZ2dsZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBFbGVtZW50W0VsZW1lbnQudmlzaWJsZShlbGVtZW50KSA/ICdoaWRlJyA6ICdzaG93J10oZWxlbWVudCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBoaWRlOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBzaG93OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHJlbW92ZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICB1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwogICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVudCkpIHJldHVybiBlbGVtZW50LnVwZGF0ZSgpLmluc2VydChjb250ZW50KTsKICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOwogICAgZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOwogICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRlZmVyKCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICByZXBsYWNlOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBjb250ZW50ID0gY29udGVudC50b0VsZW1lbnQoKTsKICAgIGVsc2UgaWYgKCFPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSB7CiAgICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOwogICAgICB2YXIgcmFuZ2UgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShlbGVtZW50KTsKICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRlZmVyKCk7CiAgICAgIGNvbnRlbnQgPSByYW5nZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29udGVudC5zdHJpcFNjcmlwdHMoKSk7CiAgICB9CiAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgaW5zZXJ0OiBmdW5jdGlvbihlbGVtZW50LCBpbnNlcnRpb25zKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKCiAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKGluc2VydGlvbnMpIHx8IE9iamVjdC5pc051bWJlcihpbnNlcnRpb25zKSB8fAogICAgICAgIE9iamVjdC5pc0VsZW1lbnQoaW5zZXJ0aW9ucykgfHwgKGluc2VydGlvbnMgJiYgKGluc2VydGlvbnMudG9FbGVtZW50IHx8IGluc2VydGlvbnMudG9IVE1MKSkpCiAgICAgICAgICBpbnNlcnRpb25zID0ge2JvdHRvbTppbnNlcnRpb25zfTsKCiAgICB2YXIgY29udGVudCwgaW5zZXJ0LCB0YWdOYW1lLCBjaGlsZE5vZGVzOwoKICAgIGZvciAodmFyIHBvc2l0aW9uIGluIGluc2VydGlvbnMpIHsKICAgICAgY29udGVudCAgPSBpbnNlcnRpb25zW3Bvc2l0aW9uXTsKICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpOwogICAgICBpbnNlcnQgPSBFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnNbcG9zaXRpb25dOwoKICAgICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwogICAgICBpZiAoT2JqZWN0LmlzRWxlbWVudChjb250ZW50KSkgewogICAgICAgIGluc2VydChlbGVtZW50LCBjb250ZW50KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29udGVudCk7CgogICAgICB0YWdOYW1lID0gKChwb3NpdGlvbiA9PSAnYmVmb3JlJyB8fCBwb3NpdGlvbiA9PSAnYWZ0ZXInKQogICAgICAgID8gZWxlbWVudC5wYXJlbnROb2RlIDogZWxlbWVudCkudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwoKICAgICAgY2hpbGROb2RlcyA9IEVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygpKTsKCiAgICAgIGlmIChwb3NpdGlvbiA9PSAndG9wJyB8fCBwb3NpdGlvbiA9PSAnYWZ0ZXInKSBjaGlsZE5vZGVzLnJldmVyc2UoKTsKICAgICAgY2hpbGROb2Rlcy5lYWNoKGluc2VydC5jdXJyeShlbGVtZW50KSk7CgogICAgICBjb250ZW50LmV2YWxTY3JpcHRzLmJpbmQoY29udGVudCkuZGVmZXIoKTsKICAgIH0KCiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICB3cmFwOiBmdW5jdGlvbihlbGVtZW50LCB3cmFwcGVyLCBhdHRyaWJ1dGVzKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChPYmplY3QuaXNFbGVtZW50KHdyYXBwZXIpKQogICAgICAkKHdyYXBwZXIpLndyaXRlQXR0cmlidXRlKGF0dHJpYnV0ZXMgfHwgeyB9KTsKICAgIGVsc2UgaWYgKE9iamVjdC5pc1N0cmluZyh3cmFwcGVyKSkgd3JhcHBlciA9IG5ldyBFbGVtZW50KHdyYXBwZXIsIGF0dHJpYnV0ZXMpOwogICAgZWxzZSB3cmFwcGVyID0gbmV3IEVsZW1lbnQoJ2RpdicsIHdyYXBwZXIpOwogICAgaWYgKGVsZW1lbnQucGFyZW50Tm9kZSkKICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh3cmFwcGVyLCBlbGVtZW50KTsKICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICByZXR1cm4gd3JhcHBlcjsKICB9LAoKICBpbnNwZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciByZXN1bHQgPSAnPCcgKyBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICRIKHsnaWQnOiAnaWQnLCAnY2xhc3NOYW1lJzogJ2NsYXNzJ30pLmVhY2goZnVuY3Rpb24ocGFpcikgewogICAgICB2YXIgcHJvcGVydHkgPSBwYWlyLmZpcnN0KCksIGF0dHJpYnV0ZSA9IHBhaXIubGFzdCgpOwogICAgICB2YXIgdmFsdWUgPSAoZWxlbWVudFtwcm9wZXJ0eV0gfHwgJycpLnRvU3RyaW5nKCk7CiAgICAgIGlmICh2YWx1ZSkgcmVzdWx0ICs9ICcgJyArIGF0dHJpYnV0ZSArICc9JyArIHZhbHVlLmluc3BlY3QodHJ1ZSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQgKyAnPic7CiAgfSwKCiAgcmVjdXJzaXZlbHlDb2xsZWN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgZWxlbWVudHMgPSBbXTsKICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudFtwcm9wZXJ0eV0pCiAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlID09IDEpCiAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVuZChlbGVtZW50KSk7CiAgICByZXR1cm4gZWxlbWVudHM7CiAgfSwKCiAgYW5jZXN0b3JzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gJChlbGVtZW50KS5yZWN1cnNpdmVseUNvbGxlY3QoJ3BhcmVudE5vZGUnKTsKICB9LAoKICBkZXNjZW5kYW50czogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQoZWxlbWVudCkuc2VsZWN0KCIqIik7CiAgfSwKCiAgZmlyc3REZXNjZW5kYW50OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KS5maXJzdENoaWxkOwogICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPSAxKSBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZzsKICAgIHJldHVybiAkKGVsZW1lbnQpOwogIH0sCgogIGltbWVkaWF0ZURlc2NlbmRhbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KS5maXJzdENoaWxkKSkgcmV0dXJuIFtdOwogICAgd2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPSAxKSBlbGVtZW50ID0gZWxlbWVudC5uZXh0U2libGluZzsKICAgIGlmIChlbGVtZW50KSByZXR1cm4gW2VsZW1lbnRdLmNvbmNhdCgkKGVsZW1lbnQpLm5leHRTaWJsaW5ncygpKTsKICAgIHJldHVybiBbXTsKICB9LAoKICBwcmV2aW91c1NpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gJChlbGVtZW50KS5yZWN1cnNpdmVseUNvbGxlY3QoJ3ByZXZpb3VzU2libGluZycpOwogIH0sCgogIG5leHRTaWJsaW5nczogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQoZWxlbWVudCkucmVjdXJzaXZlbHlDb2xsZWN0KCduZXh0U2libGluZycpOwogIH0sCgogIHNpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHJldHVybiBlbGVtZW50LnByZXZpb3VzU2libGluZ3MoKS5yZXZlcnNlKCkuY29uY2F0KGVsZW1lbnQubmV4dFNpYmxpbmdzKCkpOwogIH0sCgogIG1hdGNoOiBmdW5jdGlvbihlbGVtZW50LCBzZWxlY3RvcikgewogICAgaWYgKE9iamVjdC5pc1N0cmluZyhzZWxlY3RvcikpCiAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIHJldHVybiBzZWxlY3Rvci5tYXRjaCgkKGVsZW1lbnQpKTsKICB9LAoKICB1cDogZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwgaW5kZXgpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuICQoZWxlbWVudC5wYXJlbnROb2RlKTsKICAgIHZhciBhbmNlc3RvcnMgPSBlbGVtZW50LmFuY2VzdG9ycygpOwogICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IGFuY2VzdG9yc1tleHByZXNzaW9uXSA6CiAgICAgIFNlbGVjdG9yLmZpbmRFbGVtZW50KGFuY2VzdG9ycywgZXhwcmVzc2lvbiwgaW5kZXgpOwogIH0sCgogIGRvd246IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHJldHVybiBlbGVtZW50LmZpcnN0RGVzY2VuZGFudCgpOwogICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IGVsZW1lbnQuZGVzY2VuZGFudHMoKVtleHByZXNzaW9uXSA6CiAgICAgIGVsZW1lbnQuc2VsZWN0KGV4cHJlc3Npb24pW2luZGV4IHx8IDBdOwogIH0sCgogIHByZXZpb3VzOiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gJChTZWxlY3Rvci5oYW5kbGVycy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKGVsZW1lbnQpKTsKICAgIHZhciBwcmV2aW91c1NpYmxpbmdzID0gZWxlbWVudC5wcmV2aW91c1NpYmxpbmdzKCk7CiAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Npb24pID8gcHJldmlvdXNTaWJsaW5nc1tleHByZXNzaW9uXSA6CiAgICAgIFNlbGVjdG9yLmZpbmRFbGVtZW50KHByZXZpb3VzU2libGluZ3MsIGV4cHJlc3Npb24sIGluZGV4KTsKICB9LAoKICBuZXh0OiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gJChTZWxlY3Rvci5oYW5kbGVycy5uZXh0RWxlbWVudFNpYmxpbmcoZWxlbWVudCkpOwogICAgdmFyIG5leHRTaWJsaW5ncyA9IGVsZW1lbnQubmV4dFNpYmxpbmdzKCk7CiAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Npb24pID8gbmV4dFNpYmxpbmdzW2V4cHJlc3Npb25dIDoKICAgICAgU2VsZWN0b3IuZmluZEVsZW1lbnQobmV4dFNpYmxpbmdzLCBleHByZXNzaW9uLCBpbmRleCk7CiAgfSwKCiAgc2VsZWN0OiBmdW5jdGlvbigpIHsKICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKSwgZWxlbWVudCA9ICQoYXJncy5zaGlmdCgpKTsKICAgIHJldHVybiBTZWxlY3Rvci5maW5kQ2hpbGRFbGVtZW50cyhlbGVtZW50LCBhcmdzKTsKICB9LAoKICBhZGphY2VudDogZnVuY3Rpb24oKSB7CiAgICB2YXIgYXJncyA9ICRBKGFyZ3VtZW50cyksIGVsZW1lbnQgPSAkKGFyZ3Muc2hpZnQoKSk7CiAgICByZXR1cm4gU2VsZWN0b3IuZmluZENoaWxkRWxlbWVudHMoZWxlbWVudC5wYXJlbnROb2RlLCBhcmdzKS53aXRob3V0KGVsZW1lbnQpOwogIH0sCgogIGlkZW50aWZ5OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBpZCA9IGVsZW1lbnQucmVhZEF0dHJpYnV0ZSgnaWQnKSwgc2VsZiA9IGFyZ3VtZW50cy5jYWxsZWU7CiAgICBpZiAoaWQpIHJldHVybiBpZDsKICAgIGRvIHsgaWQgPSAnYW5vbnltb3VzX2VsZW1lbnRfJyArIHNlbGYuY291bnRlcisrIH0gd2hpbGUgKCQoaWQpKTsKICAgIGVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoJ2lkJywgaWQpOwogICAgcmV0dXJuIGlkOwogIH0sCgogIHJlYWRBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CiAgICAgIHZhciB0ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnJlYWQ7CiAgICAgIGlmICh0LnZhbHVlc1tuYW1lXSkgcmV0dXJuIHQudmFsdWVzW25hbWVdKGVsZW1lbnQsIG5hbWUpOwogICAgICBpZiAodC5uYW1lc1tuYW1lXSkgbmFtZSA9IHQubmFtZXNbbmFtZV07CiAgICAgIGlmIChuYW1lLmluY2x1ZGUoJzonKSkgewogICAgICAgIHJldHVybiAoIWVsZW1lbnQuYXR0cmlidXRlcyB8fCAhZWxlbWVudC5hdHRyaWJ1dGVzW25hbWVdKSA/IG51bGwgOgogICAgICAgICBlbGVtZW50LmF0dHJpYnV0ZXNbbmFtZV0udmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsKICB9LAoKICB3cml0ZUF0dHJpYnV0ZTogZnVuY3Rpb24oZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIGF0dHJpYnV0ZXMgPSB7IH0sIHQgPSBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMud3JpdGU7CgogICAgaWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSBhdHRyaWJ1dGVzID0gbmFtZTsKICAgIGVsc2UgYXR0cmlidXRlc1tuYW1lXSA9IE9iamVjdC5pc1VuZGVmaW5lZCh2YWx1ZSkgPyB0cnVlIDogdmFsdWU7CgogICAgZm9yICh2YXIgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7CiAgICAgIG5hbWUgPSB0Lm5hbWVzW2F0dHJdIHx8IGF0dHI7CiAgICAgIHZhbHVlID0gYXR0cmlidXRlc1thdHRyXTsKICAgICAgaWYgKHQudmFsdWVzW2F0dHJdKSBuYW1lID0gdC52YWx1ZXNbYXR0cl0oZWxlbWVudCwgdmFsdWUpOwogICAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSBudWxsKQogICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOwogICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBuYW1lKTsKICAgICAgZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1lbnQpLmdldERpbWVuc2lvbnMoKS5oZWlnaHQ7CiAgfSwKCiAgZ2V0V2lkdGg6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHJldHVybiAkKGVsZW1lbnQpLmdldERpbWVuc2lvbnMoKS53aWR0aDsKICB9LAoKICBjbGFzc05hbWVzOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IEVsZW1lbnQuQ2xhc3NOYW1lcyhlbGVtZW50KTsKICB9LAoKICBoYXNDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CiAgICB2YXIgZWxlbWVudENsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lOwogICAgcmV0dXJuIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA+IDAgJiYgKGVsZW1lbnRDbGFzc05hbWUgPT0gY2xhc3NOYW1lIHx8CiAgICAgIG5ldyBSZWdFeHAoIihefFxccykiICsgY2xhc3NOYW1lICsgIihcXHN8JCkiKS50ZXN0KGVsZW1lbnRDbGFzc05hbWUpKSk7CiAgfSwKCiAgYWRkQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOwogICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzTmFtZShjbGFzc05hbWUpKQogICAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAoZWxlbWVudC5jbGFzc05hbWUgPyAnICcgOiAnJykgKyBjbGFzc05hbWU7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICByZW1vdmVDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoCiAgICAgIG5ldyBSZWdFeHAoIihefFxccyspIiArIGNsYXNzTmFtZSArICIoXFxzK3wkKSIpLCAnICcpLnN0cmlwKCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICB0b2dnbGVDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CiAgICByZXR1cm4gZWxlbWVudFtlbGVtZW50Lmhhc0NsYXNzTmFtZShjbGFzc05hbWUpID8KICAgICAgJ3JlbW92ZUNsYXNzTmFtZScgOiAnYWRkQ2xhc3NOYW1lJ10oY2xhc3NOYW1lKTsKICB9LAoKICAvLyByZW1vdmVzIHdoaXRlc3BhY2Utb25seSB0ZXh0IG5vZGUgY2hpbGRyZW4KICBjbGVhbldoaXRlc3BhY2U6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIG5vZGUgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICB3aGlsZSAobm9kZSkgewogICAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzICYmICEvXFMvLnRlc3Qobm9kZS5ub2RlVmFsdWUpKQogICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKICAgIH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGVtcHR5OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICByZXR1cm4gJChlbGVtZW50KS5pbm5lckhUTUwuYmxhbmsoKTsKICB9LAoKICBkZXNjZW5kYW50T2Y6IGZ1bmN0aW9uKGVsZW1lbnQsIGFuY2VzdG9yKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KSwgYW5jZXN0b3IgPSAkKGFuY2VzdG9yKTsKICAgIHZhciBvcmlnaW5hbEFuY2VzdG9yID0gYW5jZXN0b3I7CgogICAgaWYgKGVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24pCiAgICAgIHJldHVybiAoZWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhbmNlc3RvcikgJiA4KSA9PT0gODsKCiAgICBpZiAoZWxlbWVudC5zb3VyY2VJbmRleCAmJiAhUHJvdG90eXBlLkJyb3dzZXIuT3BlcmEpIHsKICAgICAgdmFyIGUgPSBlbGVtZW50LnNvdXJjZUluZGV4LCBhID0gYW5jZXN0b3Iuc291cmNlSW5kZXgsCiAgICAgICBuZXh0QW5jZXN0b3IgPSBhbmNlc3Rvci5uZXh0U2libGluZzsKICAgICAgaWYgKCFuZXh0QW5jZXN0b3IpIHsKICAgICAgICBkbyB7IGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZTsgfQogICAgICAgIHdoaWxlICghKG5leHRBbmNlc3RvciA9IGFuY2VzdG9yLm5leHRTaWJsaW5nKSAmJiBhbmNlc3Rvci5wYXJlbnROb2RlKTsKICAgICAgfQogICAgICBpZiAobmV4dEFuY2VzdG9yICYmIG5leHRBbmNlc3Rvci5zb3VyY2VJbmRleCkKICAgICAgIHJldHVybiAoZSA+IGEgJiYgZSA8IG5leHRBbmNlc3Rvci5zb3VyY2VJbmRleCk7CiAgICB9CgogICAgd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpCiAgICAgIGlmIChlbGVtZW50ID09IG9yaWdpbmFsQW5jZXN0b3IpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIHNjcm9sbFRvOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBwb3MgPSBlbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoKTsKICAgIHdpbmRvdy5zY3JvbGxUbyhwb3NbMF0sIHBvc1sxXSk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBnZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgc3R5bGUgPSBzdHlsZSA9PSAnZmxvYXQnID8gJ2Nzc0Zsb2F0JyA6IHN0eWxlLmNhbWVsaXplKCk7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlXTsKICAgIGlmICghdmFsdWUpIHsKICAgICAgdmFyIGNzcyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7CiAgICAgIHZhbHVlID0gY3NzID8gY3NzW3N0eWxlXSA6IG51bGw7CiAgICB9CiAgICBpZiAoc3R5bGUgPT0gJ29wYWNpdHknKSByZXR1cm4gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDEuMDsKICAgIHJldHVybiB2YWx1ZSA9PSAnYXV0bycgPyBudWxsIDogdmFsdWU7CiAgfSwKCiAgZ2V0T3BhY2l0eTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQoZWxlbWVudCkuZ2V0U3R5bGUoJ29wYWNpdHknKTsKICB9LAoKICBzZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGVzKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBlbGVtZW50U3R5bGUgPSBlbGVtZW50LnN0eWxlLCBtYXRjaDsKICAgIGlmIChPYmplY3QuaXNTdHJpbmcoc3R5bGVzKSkgewogICAgICBlbGVtZW50LnN0eWxlLmNzc1RleHQgKz0gJzsnICsgc3R5bGVzOwogICAgICByZXR1cm4gc3R5bGVzLmluY2x1ZGUoJ29wYWNpdHknKSA/CiAgICAgICAgZWxlbWVudC5zZXRPcGFjaXR5KHN0eWxlcy5tYXRjaCgvb3BhY2l0eTpccyooXGQ/XC4/XGQqKS8pWzFdKSA6IGVsZW1lbnQ7CiAgICB9CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzdHlsZXMpCiAgICAgIGlmIChwcm9wZXJ0eSA9PSAnb3BhY2l0eScpIGVsZW1lbnQuc2V0T3BhY2l0eShzdHlsZXNbcHJvcGVydHldKTsKICAgICAgZWxzZQogICAgICAgIGVsZW1lbnRTdHlsZVsocHJvcGVydHkgPT0gJ2Zsb2F0JyB8fCBwcm9wZXJ0eSA9PSAnY3NzRmxvYXQnKSA/CiAgICAgICAgICAoT2JqZWN0LmlzVW5kZWZpbmVkKGVsZW1lbnRTdHlsZS5zdHlsZUZsb2F0KSA/ICdjc3NGbG9hdCcgOiAnc3R5bGVGbG9hdCcpIDoKICAgICAgICAgICAgcHJvcGVydHldID0gc3R5bGVzW3Byb3BlcnR5XTsKCiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBzZXRPcGFjaXR5OiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpID8gJycgOgogICAgICAodmFsdWUgPCAwLjAwMDAxKSA/IDAgOiB2YWx1ZTsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGdldERpbWVuc2lvbnM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIGRpc3BsYXkgPSAkKGVsZW1lbnQpLmdldFN0eWxlKCdkaXNwbGF5Jyk7CiAgICBpZiAoZGlzcGxheSAhPSAnbm9uZScgJiYgZGlzcGxheSAhPSBudWxsKSAvLyBTYWZhcmkgYnVnCiAgICAgIHJldHVybiB7d2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHR9OwoKICAgIC8vIEFsbCAqV2lkdGggYW5kICpIZWlnaHQgcHJvcGVydGllcyBnaXZlIDAgb24gZWxlbWVudHMgd2l0aCBkaXNwbGF5IG5vbmUsCiAgICAvLyBzbyBlbmFibGUgdGhlIGVsZW1lbnQgdGVtcG9yYXJpbHkKICAgIHZhciBlbHMgPSBlbGVtZW50LnN0eWxlOwogICAgdmFyIG9yaWdpbmFsVmlzaWJpbGl0eSA9IGVscy52aXNpYmlsaXR5OwogICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSBlbHMucG9zaXRpb247CiAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gZWxzLmRpc3BsYXk7CiAgICBlbHMudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwogICAgZWxzLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIGVscy5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIHZhciBvcmlnaW5hbFdpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDsKICAgIHZhciBvcmlnaW5hbEhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgZWxzLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7CiAgICBlbHMucG9zaXRpb24gPSBvcmlnaW5hbFBvc2l0aW9uOwogICAgZWxzLnZpc2liaWxpdHkgPSBvcmlnaW5hbFZpc2liaWxpdHk7CiAgICByZXR1cm4ge3dpZHRoOiBvcmlnaW5hbFdpZHRoLCBoZWlnaHQ6IG9yaWdpbmFsSGVpZ2h0fTsKICB9LAoKICBtYWtlUG9zaXRpb25lZDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgcG9zID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKTsKICAgIGlmIChwb3MgPT0gJ3N0YXRpYycgfHwgIXBvcykgewogICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHRydWU7CiAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOwogICAgICAvLyBPcGVyYSByZXR1cm5zIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uaW5nIGNvbnRleHQsIHdoZW4gYW4KICAgICAgLy8gZWxlbWVudCBpcyBwb3NpdGlvbiByZWxhdGl2ZSBidXQgdG9wIGFuZCBsZWZ0IGhhdmUgbm90IGJlZW4gZGVmaW5lZAogICAgICBpZiAod2luZG93Lm9wZXJhKSB7CiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSAwOwogICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHVuZG9Qb3NpdGlvbmVkOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCkgewogICAgICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHVuZGVmaW5lZDsKICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9CiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPQogICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9CiAgICAgICAgZWxlbWVudC5zdHlsZS5ib3R0b20gPQogICAgICAgIGVsZW1lbnQuc3R5bGUucmlnaHQgPSAnJzsKICAgIH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIG1ha2VDbGlwcGluZzogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cpIHJldHVybiBlbGVtZW50OwogICAgZWxlbWVudC5fb3ZlcmZsb3cgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdvdmVyZmxvdycpIHx8ICdhdXRvJzsKICAgIGlmIChlbGVtZW50Ll9vdmVyZmxvdyAhPT0gJ2hpZGRlbicpCiAgICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIHVuZG9DbGlwcGluZzogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoIWVsZW1lbnQuX292ZXJmbG93KSByZXR1cm4gZWxlbWVudDsKICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBlbGVtZW50Ll9vdmVyZmxvdyA9PSAnYXV0bycgPyAnJyA6IGVsZW1lbnQuX292ZXJmbG93OwogICAgZWxlbWVudC5fb3ZlcmZsb3cgPSBudWxsOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgY3VtdWxhdGl2ZU9mZnNldDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7CiAgICBkbyB7CiAgICAgIHZhbHVlVCArPSBlbGVtZW50Lm9mZnNldFRvcCAgfHwgMDsKICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwogICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7CiAgICB9IHdoaWxlIChlbGVtZW50KTsKICAgIHJldHVybiBFbGVtZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwogIH0sCgogIHBvc2l0aW9uZWRPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwogICAgZG8gewogICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CiAgICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwogICAgICBpZiAoZWxlbWVudCkgewogICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT0gJ0JPRFknKSBicmVhazsKICAgICAgICB2YXIgcCA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7CiAgICAgICAgaWYgKHAgIT09ICdzdGF0aWMnKSBicmVhazsKICAgICAgfQogICAgfSB3aGlsZSAoZWxlbWVudCk7CiAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKICB9LAoKICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpIHJldHVybjsKICAgIC8vIFBvc2l0aW9uLnByZXBhcmUoKTsgLy8gVG8gYmUgZG9uZSBtYW51YWxseSBieSBTY3JpcHR5IHdoZW4gaXQgbmVlZHMgaXQuCgogICAgdmFyIG9mZnNldHMgPSBlbGVtZW50LnBvc2l0aW9uZWRPZmZzZXQoKTsKICAgIHZhciB0b3AgICAgID0gb2Zmc2V0c1sxXTsKICAgIHZhciBsZWZ0ICAgID0gb2Zmc2V0c1swXTsKICAgIHZhciB3aWR0aCAgID0gZWxlbWVudC5jbGllbnRXaWR0aDsKICAgIHZhciBoZWlnaHQgID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CgogICAgZWxlbWVudC5fb3JpZ2luYWxMZWZ0ICAgPSBsZWZ0IC0gcGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLmxlZnQgIHx8IDApOwogICAgZWxlbWVudC5fb3JpZ2luYWxUb3AgICAgPSB0b3AgIC0gcGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLnRvcCB8fCAwKTsKICAgIGVsZW1lbnQuX29yaWdpbmFsV2lkdGggID0gZWxlbWVudC5zdHlsZS53aWR0aDsKICAgIGVsZW1lbnQuX29yaWdpbmFsSGVpZ2h0ID0gZWxlbWVudC5zdHlsZS5oZWlnaHQ7CgogICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CiAgICBlbGVtZW50LnN0eWxlLnRvcCAgICA9IHRvcCArICdweCc7CiAgICBlbGVtZW50LnN0eWxlLmxlZnQgICA9IGxlZnQgKyAncHgnOwogICAgZWxlbWVudC5zdHlsZS53aWR0aCAgPSB3aWR0aCArICdweCc7CiAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICByZWxhdGl2aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09ICdyZWxhdGl2ZScpIHJldHVybjsKICAgIC8vIFBvc2l0aW9uLnByZXBhcmUoKTsgLy8gVG8gYmUgZG9uZSBtYW51YWxseSBieSBTY3JpcHR5IHdoZW4gaXQgbmVlZHMgaXQuCgogICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CiAgICB2YXIgdG9wICA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgIHx8IDApIC0gKGVsZW1lbnQuX29yaWdpbmFsVG9wIHx8IDApOwogICAgdmFyIGxlZnQgPSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUubGVmdCB8fCAwKSAtIChlbGVtZW50Ll9vcmlnaW5hbExlZnQgfHwgMCk7CgogICAgZWxlbWVudC5zdHlsZS50b3AgICAgPSB0b3AgKyAncHgnOwogICAgZWxlbWVudC5zdHlsZS5sZWZ0ICAgPSBsZWZ0ICsgJ3B4JzsKICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZWxlbWVudC5fb3JpZ2luYWxIZWlnaHQ7CiAgICBlbGVtZW50LnN0eWxlLndpZHRoICA9IGVsZW1lbnQuX29yaWdpbmFsV2lkdGg7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBjdW11bGF0aXZlU2Nyb2xsT2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQuc2Nyb2xsVG9wICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7CiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CiAgICB9IHdoaWxlIChlbGVtZW50KTsKICAgIHJldHVybiBFbGVtZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwogIH0sCgogIGdldE9mZnNldFBhcmVudDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50KSByZXR1cm4gJChlbGVtZW50Lm9mZnNldFBhcmVudCk7CiAgICBpZiAoZWxlbWVudCA9PSBkb2N1bWVudC5ib2R5KSByZXR1cm4gJChlbGVtZW50KTsKCiAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpICYmIGVsZW1lbnQgIT0gZG9jdW1lbnQuYm9keSkKICAgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgIT0gJ3N0YXRpYycpCiAgICAgICAgcmV0dXJuICQoZWxlbWVudCk7CgogICAgcmV0dXJuICQoZG9jdW1lbnQuYm9keSk7CiAgfSwKCiAgdmlld3BvcnRPZmZzZXQ6IGZ1bmN0aW9uKGZvckVsZW1lbnQpIHsKICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwoKICAgIHZhciBlbGVtZW50ID0gZm9yRWxlbWVudDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7CgogICAgICAvLyBTYWZhcmkgZml4CiAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PSBkb2N1bWVudC5ib2R5ICYmCiAgICAgICAgRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKSBicmVhazsKCiAgICB9IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQpOwoKICAgIGVsZW1lbnQgPSBmb3JFbGVtZW50OwogICAgZG8gewogICAgICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyLk9wZXJhIHx8IGVsZW1lbnQudGFnTmFtZSA9PSAnQk9EWScpIHsKICAgICAgICB2YWx1ZVQgLT0gZWxlbWVudC5zY3JvbGxUb3AgIHx8IDA7CiAgICAgICAgdmFsdWVMIC09IGVsZW1lbnQuc2Nyb2xsTGVmdCB8fCAwOwogICAgICB9CiAgICB9IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKTsKCiAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKICB9LAoKICBjbG9uZVBvc2l0aW9uOiBmdW5jdGlvbihlbGVtZW50LCBzb3VyY2UpIHsKICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICAgIHNldExlZnQ6ICAgIHRydWUsCiAgICAgIHNldFRvcDogICAgIHRydWUsCiAgICAgIHNldFdpZHRoOiAgIHRydWUsCiAgICAgIHNldEhlaWdodDogIHRydWUsCiAgICAgIG9mZnNldFRvcDogIDAsCiAgICAgIG9mZnNldExlZnQ6IDAKICAgIH0sIGFyZ3VtZW50c1syXSB8fCB7IH0pOwoKICAgIC8vIGZpbmQgcGFnZSBwb3NpdGlvbiBvZiBzb3VyY2UKICAgIHNvdXJjZSA9ICQoc291cmNlKTsKICAgIHZhciBwID0gc291cmNlLnZpZXdwb3J0T2Zmc2V0KCk7CgogICAgLy8gZmluZCBjb29yZGluYXRlIHN5c3RlbSB0byB1c2UKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIGRlbHRhID0gWzAsIDBdOwogICAgdmFyIHBhcmVudCA9IG51bGw7CiAgICAvLyBkZWx0YSBbMCwwXSB3aWxsIGRvIGZpbmUgd2l0aCBwb3NpdGlvbjogZml4ZWQgZWxlbWVudHMsCiAgICAvLyBwb3NpdGlvbjphYnNvbHV0ZSBuZWVkcyBvZmZzZXRQYXJlbnQgZGVsdGFzCiAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PSAnYWJzb2x1dGUnKSB7CiAgICAgIHBhcmVudCA9IGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCk7CiAgICAgIGRlbHRhID0gcGFyZW50LnZpZXdwb3J0T2Zmc2V0KCk7CiAgICB9CgogICAgLy8gY29ycmVjdCBieSBib2R5IG9mZnNldHMgKGZpeGVzIFNhZmFyaSkKICAgIGlmIChwYXJlbnQgPT0gZG9jdW1lbnQuYm9keSkgewogICAgICBkZWx0YVswXSAtPSBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CiAgICAgIGRlbHRhWzFdIC09IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwogICAgfQoKICAgIC8vIHNldCBwb3NpdGlvbgogICAgaWYgKG9wdGlvbnMuc2V0TGVmdCkgICBlbGVtZW50LnN0eWxlLmxlZnQgID0gKHBbMF0gLSBkZWx0YVswXSArIG9wdGlvbnMub2Zmc2V0TGVmdCkgKyAncHgnOwogICAgaWYgKG9wdGlvbnMuc2V0VG9wKSAgICBlbGVtZW50LnN0eWxlLnRvcCAgID0gKHBbMV0gLSBkZWx0YVsxXSArIG9wdGlvbnMub2Zmc2V0VG9wKSArICdweCc7CiAgICBpZiAob3B0aW9ucy5zZXRXaWR0aCkgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBzb3VyY2Uub2Zmc2V0V2lkdGggKyAncHgnOwogICAgaWYgKG9wdGlvbnMuc2V0SGVpZ2h0KSBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHNvdXJjZS5vZmZzZXRIZWlnaHQgKyAncHgnOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQp9OwoKRWxlbWVudC5NZXRob2RzLmlkZW50aWZ5LmNvdW50ZXIgPSAxOwoKT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMsIHsKICBnZXRFbGVtZW50c0J5U2VsZWN0b3I6IEVsZW1lbnQuTWV0aG9kcy5zZWxlY3QsCiAgY2hpbGRFbGVtZW50czogRWxlbWVudC5NZXRob2RzLmltbWVkaWF0ZURlc2NlbmRhbnRzCn0pOwoKRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zID0gewogIHdyaXRlOiB7CiAgICBuYW1lczogewogICAgICBjbGFzc05hbWU6ICdjbGFzcycsCiAgICAgIGh0bWxGb3I6ICAgJ2ZvcicKICAgIH0sCiAgICB2YWx1ZXM6IHsgfQogIH0KfTsKCmlmIChQcm90b3R5cGUuQnJvd3Nlci5PcGVyYSkgewogIEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZSA9IEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZS53cmFwKAogICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVudCwgc3R5bGUpIHsKICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgIGNhc2UgJ2xlZnQnOiBjYXNlICd0b3AnOiBjYXNlICdyaWdodCc6IGNhc2UgJ2JvdHRvbSc6CiAgICAgICAgICBpZiAocHJvY2VlZChlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ3N0YXRpYycpIHJldHVybiBudWxsOwogICAgICAgIGNhc2UgJ2hlaWdodCc6IGNhc2UgJ3dpZHRoJzoKICAgICAgICAgIC8vIHJldHVybnMgJzBweCcgZm9yIGhpZGRlbiBlbGVtZW50czsgd2Ugd2FudCBpdCB0byByZXR1cm4gbnVsbAogICAgICAgICAgaWYgKCFFbGVtZW50LnZpc2libGUoZWxlbWVudCkpIHJldHVybiBudWxsOwoKICAgICAgICAgIC8vIHJldHVybnMgdGhlIGJvcmRlci1ib3ggZGltZW5zaW9ucyByYXRoZXIgdGhhbiB0aGUgY29udGVudC1ib3gKICAgICAgICAgIC8vIGRpbWVuc2lvbnMsIHNvIHdlIHN1YnRyYWN0IHBhZGRpbmcgYW5kIGJvcmRlcnMgZnJvbSB0aGUgdmFsdWUKICAgICAgICAgIHZhciBkaW0gPSBwYXJzZUludChwcm9jZWVkKGVsZW1lbnQsIHN0eWxlKSwgMTApOwoKICAgICAgICAgIGlmIChkaW0gIT09IGVsZW1lbnRbJ29mZnNldCcgKyBzdHlsZS5jYXBpdGFsaXplKCldKQogICAgICAgICAgICByZXR1cm4gZGltICsgJ3B4JzsKCiAgICAgICAgICB2YXIgcHJvcGVydGllczsKICAgICAgICAgIGlmIChzdHlsZSA9PT0gJ2hlaWdodCcpIHsKICAgICAgICAgICAgcHJvcGVydGllcyA9IFsnYm9yZGVyLXRvcC13aWR0aCcsICdwYWRkaW5nLXRvcCcsCiAgICAgICAgICAgICAncGFkZGluZy1ib3R0b20nLCAnYm9yZGVyLWJvdHRvbS13aWR0aCddOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbJ2JvcmRlci1sZWZ0LXdpZHRoJywgJ3BhZGRpbmctbGVmdCcsCiAgICAgICAgICAgICAncGFkZGluZy1yaWdodCcsICdib3JkZXItcmlnaHQtd2lkdGgnXTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmluamVjdChkaW0sIGZ1bmN0aW9uKG1lbW8sIHByb3BlcnR5KSB7CiAgICAgICAgICAgIHZhciB2YWwgPSBwcm9jZWVkKGVsZW1lbnQsIHByb3BlcnR5KTsKICAgICAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCA/IG1lbW8gOiBtZW1vIC0gcGFyc2VJbnQodmFsLCAxMCk7CiAgICAgICAgICB9KSArICdweCc7CiAgICAgICAgZGVmYXVsdDogcmV0dXJuIHByb2NlZWQoZWxlbWVudCwgc3R5bGUpOwogICAgICB9CiAgICB9CiAgKTsKCiAgRWxlbWVudC5NZXRob2RzLnJlYWRBdHRyaWJ1dGUgPSBFbGVtZW50Lk1ldGhvZHMucmVhZEF0dHJpYnV0ZS53cmFwKAogICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVudCwgYXR0cmlidXRlKSB7CiAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICd0aXRsZScpIHJldHVybiBlbGVtZW50LnRpdGxlOwogICAgICByZXR1cm4gcHJvY2VlZChlbGVtZW50LCBhdHRyaWJ1dGUpOwogICAgfQogICk7Cn0KCmVsc2UgaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CiAgLy8gSUUgZG9lc24ndCByZXBvcnQgb2Zmc2V0cyBjb3JyZWN0bHkgZm9yIHN0YXRpYyBlbGVtZW50cywgc28gd2UgY2hhbmdlIHRoZW0KICAvLyB0byAicmVsYXRpdmUiIHRvIGdldCB0aGUgdmFsdWVzLCB0aGVuIGNoYW5nZSB0aGVtIGJhY2suCiAgRWxlbWVudC5NZXRob2RzLmdldE9mZnNldFBhcmVudCA9IEVsZW1lbnQuTWV0aG9kcy5nZXRPZmZzZXRQYXJlbnQud3JhcCgKICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQpIHsKICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyk7CiAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBwcm9jZWVkKGVsZW1lbnQpOwogICAgICBlbGVtZW50LnNldFN0eWxlKHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSk7CiAgICAgIHZhciB2YWx1ZSA9IHByb2NlZWQoZWxlbWVudCk7CiAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRpb24gfSk7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICApOwoKICAkdygncG9zaXRpb25lZE9mZnNldCB2aWV3cG9ydE9mZnNldCcpLmVhY2goZnVuY3Rpb24obWV0aG9kKSB7CiAgICBFbGVtZW50Lk1ldGhvZHNbbWV0aG9kXSA9IEVsZW1lbnQuTWV0aG9kc1ttZXRob2RdLndyYXAoCiAgICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICAgICB2YXIgcG9zaXRpb24gPSBlbGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpOwogICAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBwcm9jZWVkKGVsZW1lbnQpOwogICAgICAgIC8vIFRyaWdnZXIgaGFzTGF5b3V0IG9uIHRoZSBvZmZzZXQgcGFyZW50IHNvIHRoYXQgSUU2IHJlcG9ydHMKICAgICAgICAvLyBhY2N1cmF0ZSBvZmZzZXRUb3AgYW5kIG9mZnNldExlZnQgdmFsdWVzIGZvciBwb3NpdGlvbjogZml4ZWQuCiAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCk7CiAgICAgICAgaWYgKG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpCiAgICAgICAgICBvZmZzZXRQYXJlbnQuc2V0U3R5bGUoeyB6b29tOiAxIH0pOwogICAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9KTsKICAgICAgICB2YXIgdmFsdWUgPSBwcm9jZWVkKGVsZW1lbnQpOwogICAgICAgIGVsZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRpb24gfSk7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICApOwogIH0pOwoKICBFbGVtZW50Lk1ldGhvZHMuZ2V0U3R5bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBzdHlsZSA9IChzdHlsZSA9PSAnZmxvYXQnIHx8IHN0eWxlID09ICdjc3NGbG9hdCcpID8gJ3N0eWxlRmxvYXQnIDogc3R5bGUuY2FtZWxpemUoKTsKICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuc3R5bGVbc3R5bGVdOwogICAgaWYgKCF2YWx1ZSAmJiBlbGVtZW50LmN1cnJlbnRTdHlsZSkgdmFsdWUgPSBlbGVtZW50LmN1cnJlbnRTdHlsZVtzdHlsZV07CgogICAgaWYgKHN0eWxlID09ICdvcGFjaXR5JykgewogICAgICBpZiAodmFsdWUgPSAoZWxlbWVudC5nZXRTdHlsZSgnZmlsdGVyJykgfHwgJycpLm1hdGNoKC9hbHBoYVwob3BhY2l0eT0oLiopXCkvKSkKICAgICAgICBpZiAodmFsdWVbMV0pIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlWzFdKSAvIDEwMDsKICAgICAgcmV0dXJuIDEuMDsKICAgIH0KCiAgICBpZiAodmFsdWUgPT0gJ2F1dG8nKSB7CiAgICAgIGlmICgoc3R5bGUgPT0gJ3dpZHRoJyB8fCBzdHlsZSA9PSAnaGVpZ2h0JykgJiYgKGVsZW1lbnQuZ2V0U3R5bGUoJ2Rpc3BsYXknKSAhPSAnbm9uZScpKQogICAgICAgIHJldHVybiBlbGVtZW50WydvZmZzZXQnICsgc3R5bGUuY2FwaXRhbGl6ZSgpXSArICdweCc7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH07CgogIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIGZ1bmN0aW9uIHN0cmlwQWxwaGEoZmlsdGVyKXsKICAgICAgcmV0dXJuIGZpbHRlci5yZXBsYWNlKC9hbHBoYVwoW15cKV0qXCkvZ2ksJycpOwogICAgfQogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgY3VycmVudFN0eWxlID0gZWxlbWVudC5jdXJyZW50U3R5bGU7CiAgICBpZiAoKGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmhhc0xheW91dCkgfHwKICAgICAgKCFjdXJyZW50U3R5bGUgJiYgZWxlbWVudC5zdHlsZS56b29tID09ICdub3JtYWwnKSkKICAgICAgICBlbGVtZW50LnN0eWxlLnpvb20gPSAxOwoKICAgIHZhciBmaWx0ZXIgPSBlbGVtZW50LmdldFN0eWxlKCdmaWx0ZXInKSwgc3R5bGUgPSBlbGVtZW50LnN0eWxlOwogICAgaWYgKHZhbHVlID09IDEgfHwgdmFsdWUgPT09ICcnKSB7CiAgICAgIChmaWx0ZXIgPSBzdHJpcEFscGhhKGZpbHRlcikpID8KICAgICAgICBzdHlsZS5maWx0ZXIgPSBmaWx0ZXIgOiBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpOwogICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwLjAwMDAxKSB2YWx1ZSA9IDA7CiAgICBzdHlsZS5maWx0ZXIgPSBzdHJpcEFscGhhKGZpbHRlcikgKwogICAgICAnYWxwaGEob3BhY2l0eT0nICsgKHZhbHVlICogMTAwKSArICcpJzsKICAgIHJldHVybiBlbGVtZW50OwogIH07CgogIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucyA9IHsKICAgIHJlYWQ6IHsKICAgICAgbmFtZXM6IHsKICAgICAgICAnY2xhc3MnOiAnY2xhc3NOYW1lJywKICAgICAgICAnZm9yJzogICAnaHRtbEZvcicKICAgICAgfSwKICAgICAgdmFsdWVzOiB7CiAgICAgICAgX2dldEF0dHI6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgMik7CiAgICAgICAgfSwKICAgICAgICBfZ2V0QXR0ck5vZGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewogICAgICAgICAgdmFyIG5vZGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTsKICAgICAgICAgIHJldHVybiBub2RlID8gbm9kZS52YWx1ZSA6ICIiOwogICAgICAgIH0sCiAgICAgICAgX2dldEV2OiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKICAgICAgICAgIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7CiAgICAgICAgICByZXR1cm4gYXR0cmlidXRlID8gYXR0cmlidXRlLnRvU3RyaW5nKCkuc2xpY2UoMjMsIC0yKSA6IG51bGw7CiAgICAgICAgfSwKICAgICAgICBfZmxhZzogZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7CiAgICAgICAgICByZXR1cm4gJChlbGVtZW50KS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSA/IGF0dHJpYnV0ZSA6IG51bGw7CiAgICAgICAgfSwKICAgICAgICBzdHlsZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0sCiAgICAgICAgdGl0bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICAgIHJldHVybiBlbGVtZW50LnRpdGxlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy53cml0ZSA9IHsKICAgIG5hbWVzOiBPYmplY3QuZXh0ZW5kKHsKICAgICAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsCiAgICAgIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnCiAgICB9LCBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMucmVhZC5uYW1lcyksCiAgICB2YWx1ZXM6IHsKICAgICAgY2hlY2tlZDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSAhIXZhbHVlOwogICAgICB9LAoKICAgICAgc3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CiAgICAgICAgZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgPyB2YWx1ZSA6ICcnOwogICAgICB9CiAgICB9CiAgfTsKCiAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhhcyA9IHt9OwoKICAkdygnY29sU3BhbiByb3dTcGFuIHZBbGlnbiBkYXRlVGltZSBhY2Nlc3NLZXkgdGFiSW5kZXggJyArCiAgICAgICdlbmNUeXBlIG1heExlbmd0aCByZWFkT25seSBsb25nRGVzYycpLmVhY2goZnVuY3Rpb24oYXR0cikgewogICAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndyaXRlLm5hbWVzW2F0dHIudG9Mb3dlckNhc2UoKV0gPSBhdHRyOwogICAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhhc1thdHRyLnRvTG93ZXJDYXNlKCldID0gYXR0cjsKICB9KTsKCiAgKGZ1bmN0aW9uKHYpIHsKICAgIE9iamVjdC5leHRlbmQodiwgewogICAgICBocmVmOiAgICAgICAgdi5fZ2V0QXR0ciwKICAgICAgc3JjOiAgICAgICAgIHYuX2dldEF0dHIsCiAgICAgIHR5cGU6ICAgICAgICB2Ll9nZXRBdHRyLAogICAgICBhY3Rpb246ICAgICAgdi5fZ2V0QXR0ck5vZGUsCiAgICAgIGRpc2FibGVkOiAgICB2Ll9mbGFnLAogICAgICBjaGVja2VkOiAgICAgdi5fZmxhZywKICAgICAgcmVhZG9ubHk6ICAgIHYuX2ZsYWcsCiAgICAgIG11bHRpcGxlOiAgICB2Ll9mbGFnLAogICAgICBvbmxvYWQ6ICAgICAgdi5fZ2V0RXYsCiAgICAgIG9udW5sb2FkOiAgICB2Ll9nZXRFdiwKICAgICAgb25jbGljazogICAgIHYuX2dldEV2LAogICAgICBvbmRibGNsaWNrOiAgdi5fZ2V0RXYsCiAgICAgIG9ubW91c2Vkb3duOiB2Ll9nZXRFdiwKICAgICAgb25tb3VzZXVwOiAgIHYuX2dldEV2LAogICAgICBvbm1vdXNlb3Zlcjogdi5fZ2V0RXYsCiAgICAgIG9ubW91c2Vtb3ZlOiB2Ll9nZXRFdiwKICAgICAgb25tb3VzZW91dDogIHYuX2dldEV2LAogICAgICBvbmZvY3VzOiAgICAgdi5fZ2V0RXYsCiAgICAgIG9uYmx1cjogICAgICB2Ll9nZXRFdiwKICAgICAgb25rZXlwcmVzczogIHYuX2dldEV2LAogICAgICBvbmtleWRvd246ICAgdi5fZ2V0RXYsCiAgICAgIG9ua2V5dXA6ICAgICB2Ll9nZXRFdiwKICAgICAgb25zdWJtaXQ6ICAgIHYuX2dldEV2LAogICAgICBvbnJlc2V0OiAgICAgdi5fZ2V0RXYsCiAgICAgIG9uc2VsZWN0OiAgICB2Ll9nZXRFdiwKICAgICAgb25jaGFuZ2U6ICAgIHYuX2dldEV2CiAgICB9KTsKICB9KShFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMucmVhZC52YWx1ZXMpOwp9CgplbHNlIGlmIChQcm90b3R5cGUuQnJvd3Nlci5HZWNrbyAmJiAvcnY6MVwuOFwuMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgewogIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gKHZhbHVlID09IDEpID8gMC45OTk5OTkgOgogICAgICAodmFsdWUgPT09ICcnKSA/ICcnIDogKHZhbHVlIDwgMC4wMDAwMSkgPyAwIDogdmFsdWU7CiAgICByZXR1cm4gZWxlbWVudDsKICB9Owp9CgplbHNlIGlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpIHsKICBFbGVtZW50Lk1ldGhvZHMuc2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICh2YWx1ZSA9PSAxIHx8IHZhbHVlID09PSAnJykgPyAnJyA6CiAgICAgICh2YWx1ZSA8IDAuMDAwMDEpID8gMCA6IHZhbHVlOwoKICAgIGlmICh2YWx1ZSA9PSAxKQogICAgICBpZihlbGVtZW50LnRhZ05hbWUgPT0gJ0lNRycgJiYgZWxlbWVudC53aWR0aCkgewogICAgICAgIGVsZW1lbnQud2lkdGgrKzsgZWxlbWVudC53aWR0aC0tOwogICAgICB9IGVsc2UgdHJ5IHsKICAgICAgICB2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyk7CiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChuKTsKICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG4pOwogICAgICB9IGNhdGNoIChlKSB7IH0KCiAgICByZXR1cm4gZWxlbWVudDsKICB9OwoKICAvLyBTYWZhcmkgcmV0dXJucyBtYXJnaW5zIG9uIGJvZHkgd2hpY2ggaXMgaW5jb3JyZWN0IGlmIHRoZSBjaGlsZCBpcyBhYnNvbHV0ZWx5CiAgLy8gcG9zaXRpb25lZC4gIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCByZWRlZmluZSBFbGVtZW50I2N1bXVsYXRpdmVPZmZzZXQgZm9yCiAgLy8gS0hUTUwvV2ViS2l0IG9ubHkuCiAgRWxlbWVudC5NZXRob2RzLmN1bXVsYXRpdmVPZmZzZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7CiAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PSBkb2N1bWVudC5ib2R5KQogICAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpIGJyZWFrOwoKICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwogICAgfSB3aGlsZSAoZWxlbWVudCk7CgogICAgcmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7CiAgfTsKfQoKaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFIHx8IFByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKSB7CiAgLy8gSUUgYW5kIE9wZXJhIGFyZSBtaXNzaW5nIC5pbm5lckhUTUwgc3VwcG9ydCBmb3IgVEFCTEUtcmVsYXRlZCBhbmQgU0VMRUNUIGVsZW1lbnRzCiAgRWxlbWVudC5NZXRob2RzLnVwZGF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwoKICAgIGlmIChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBjb250ZW50ID0gY29udGVudC50b0VsZW1lbnQoKTsKICAgIGlmIChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSByZXR1cm4gZWxlbWVudC51cGRhdGUoKS5pbnNlcnQoY29udGVudCk7CgogICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29udGVudCk7CiAgICB2YXIgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwoKICAgIGlmICh0YWdOYW1lIGluIEVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucy50YWdzKSB7CiAgICAgICRBKGVsZW1lbnQuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihub2RlKSB7IGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSkgfSk7CiAgICAgIEVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygpKQogICAgICAgIC5lYWNoKGZ1bmN0aW9uKG5vZGUpIHsgZWxlbWVudC5hcHBlbmRDaGlsZChub2RlKSB9KTsKICAgIH0KICAgIGVsc2UgZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOwoKICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfTsKfQoKaWYgKCdvdXRlckhUTUwnIGluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSB7CiAgRWxlbWVudC5NZXRob2RzLnJlcGxhY2UgPSBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKCiAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7CiAgICBpZiAoT2JqZWN0LmlzRWxlbWVudChjb250ZW50KSkgewogICAgICBlbGVtZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQpOwogICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KCiAgICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50KTsKICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGUsIHRhZ05hbWUgPSBwYXJlbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwoKICAgIGlmIChFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFnc1t0YWdOYW1lXSkgewogICAgICB2YXIgbmV4dFNpYmxpbmcgPSBlbGVtZW50Lm5leHQoKTsKICAgICAgdmFyIGZyYWdtZW50cyA9IEVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygpKTsKICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpOwogICAgICBpZiAobmV4dFNpYmxpbmcpCiAgICAgICAgZnJhZ21lbnRzLmVhY2goZnVuY3Rpb24obm9kZSkgeyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHRTaWJsaW5nKSB9KTsKICAgICAgZWxzZQogICAgICAgIGZyYWdtZW50cy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHsgcGFyZW50LmFwcGVuZENoaWxkKG5vZGUpIH0pOwogICAgfQogICAgZWxzZSBlbGVtZW50Lm91dGVySFRNTCA9IGNvbnRlbnQuc3RyaXBTY3JpcHRzKCk7CgogICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRlZmVyKCk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9Owp9CgpFbGVtZW50Ll9yZXR1cm5PZmZzZXQgPSBmdW5jdGlvbihsLCB0KSB7CiAgdmFyIHJlc3VsdCA9IFtsLCB0XTsKICByZXN1bHQubGVmdCA9IGw7CiAgcmVzdWx0LnRvcCA9IHQ7CiAgcmV0dXJuIHJlc3VsdDsKfTsKCkVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCA9IGZ1bmN0aW9uKHRhZ05hbWUsIGh0bWwpIHsKICB2YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpLCB0ID0gRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3NbdGFnTmFtZV07CiAgaWYgKHQpIHsKICAgIGRpdi5pbm5lckhUTUwgPSB0WzBdICsgaHRtbCArIHRbMV07CiAgICB0WzJdLnRpbWVzKGZ1bmN0aW9uKCkgeyBkaXYgPSBkaXYuZmlyc3RDaGlsZCB9KTsKICB9IGVsc2UgZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgcmV0dXJuICRBKGRpdi5jaGlsZE5vZGVzKTsKfTsKCkVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucyA9IHsKICBiZWZvcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKICAgIGVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZWxlbWVudCk7CiAgfSwKICB0b3A6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQuZmlyc3RDaGlsZCk7CiAgfSwKICBib3R0b206IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgfSwKICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkgewogICAgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBlbGVtZW50Lm5leHRTaWJsaW5nKTsKICB9LAogIHRhZ3M6IHsKICAgIFRBQkxFOiAgWyc8dGFibGU+JywgICAgICAgICAgICAgICAgJzwvdGFibGU+JywgICAgICAgICAgICAgICAgICAgMV0sCiAgICBUQk9EWTogIFsnPHRhYmxlPjx0Ym9keT4nLCAgICAgICAgICc8L3Rib2R5PjwvdGFibGU+JywgICAgICAgICAgIDJdLAogICAgVFI6ICAgICBbJzx0YWJsZT48dGJvZHk+PHRyPicsICAgICAnPC90cj48L3Rib2R5PjwvdGFibGU+JywgICAgICAzXSwKICAgIFREOiAgICAgWyc8dGFibGU+PHRib2R5Pjx0cj48dGQ+JywgJzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+JywgNF0sCiAgICBTRUxFQ1Q6IFsnPHNlbGVjdD4nLCAgICAgICAgICAgICAgICc8L3NlbGVjdD4nLCAgICAgICAgICAgICAgICAgIDFdCiAgfQp9OwoKKGZ1bmN0aW9uKCkgewogIE9iamVjdC5leHRlbmQodGhpcy50YWdzLCB7CiAgICBUSEVBRDogdGhpcy50YWdzLlRCT0RZLAogICAgVEZPT1Q6IHRoaXMudGFncy5UQk9EWSwKICAgIFRIOiAgICB0aGlzLnRhZ3MuVEQKICB9KTsKfSkuY2FsbChFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMpOwoKRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCA9IHsKICBoYXNBdHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewogICAgYXR0cmlidXRlID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLmhhc1thdHRyaWJ1dGVdIHx8IGF0dHJpYnV0ZTsKICAgIHZhciBub2RlID0gJChlbGVtZW50KS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7CiAgICByZXR1cm4gbm9kZSAmJiBub2RlLnNwZWNpZmllZDsKICB9Cn07CgpFbGVtZW50Lk1ldGhvZHMuQnlUYWcgPSB7IH07CgpPYmplY3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7CgppZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMgJiYKICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLl9fcHJvdG9fXykgewogIHdpbmRvdy5IVE1MRWxlbWVudCA9IHsgfTsKICB3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90eXBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuX19wcm90b19fOwogIFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMgPSB0cnVlOwp9CgpFbGVtZW50LmV4dGVuZCA9IChmdW5jdGlvbigpIHsKICBpZiAoUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5TcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zKQogICAgcmV0dXJuIFByb3RvdHlwZS5LOwoKICB2YXIgTWV0aG9kcyA9IHsgfSwgQnlUYWcgPSBFbGVtZW50Lk1ldGhvZHMuQnlUYWc7CgogIHZhciBleHRlbmQgPSBPYmplY3QuZXh0ZW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlIHx8CiAgICAgICAgZWxlbWVudC5ub2RlVHlwZSAhPSAxIHx8IGVsZW1lbnQgPT0gd2luZG93KSByZXR1cm4gZWxlbWVudDsKCiAgICB2YXIgbWV0aG9kcyA9IE9iamVjdC5jbG9uZShNZXRob2RzKSwKICAgICAgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZSwgcHJvcGVydHksIHZhbHVlOwoKICAgIC8vIGV4dGVuZCBtZXRob2RzIGZvciBzcGVjaWZpYyB0YWdzCiAgICBpZiAoQnlUYWdbdGFnTmFtZV0pIE9iamVjdC5leHRlbmQobWV0aG9kcywgQnlUYWdbdGFnTmFtZV0pOwoKICAgIGZvciAocHJvcGVydHkgaW4gbWV0aG9kcykgewogICAgICB2YWx1ZSA9IG1ldGhvZHNbcHJvcGVydHldOwogICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24odmFsdWUpICYmICEocHJvcGVydHkgaW4gZWxlbWVudCkpCiAgICAgICAgZWxlbWVudFtwcm9wZXJ0eV0gPSB2YWx1ZS5tZXRob2RpemUoKTsKICAgIH0KCiAgICBlbGVtZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247CiAgICByZXR1cm4gZWxlbWVudDsKCiAgfSwgewogICAgcmVmcmVzaDogZnVuY3Rpb24oKSB7CiAgICAgIC8vIGV4dGVuZCBtZXRob2RzIGZvciBhbGwgdGFncyAoU2FmYXJpIGRvZXNuJ3QgbmVlZCB0aGlzKQogICAgICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuRWxlbWVudEV4dGVuc2lvbnMpIHsKICAgICAgICBPYmplY3QuZXh0ZW5kKE1ldGhvZHMsIEVsZW1lbnQuTWV0aG9kcyk7CiAgICAgICAgT2JqZWN0LmV4dGVuZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkKTsKICAgICAgfQogICAgfQogIH0pOwoKICBleHRlbmQucmVmcmVzaCgpOwogIHJldHVybiBleHRlbmQ7Cn0pKCk7CgpFbGVtZW50Lmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewogIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSkgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7CiAgcmV0dXJuIEVsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQuaGFzQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSk7Cn07CgpFbGVtZW50LmFkZE1ldGhvZHMgPSBmdW5jdGlvbihtZXRob2RzKSB7CiAgdmFyIEYgPSBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLCBUID0gRWxlbWVudC5NZXRob2RzLkJ5VGFnOwoKICBpZiAoIW1ldGhvZHMpIHsKICAgIE9iamVjdC5leHRlbmQoRm9ybSwgRm9ybS5NZXRob2RzKTsKICAgIE9iamVjdC5leHRlbmQoRm9ybS5FbGVtZW50LCBGb3JtLkVsZW1lbnQuTWV0aG9kcyk7CiAgICBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5CeVRhZywgewogICAgICAiRk9STSI6ICAgICBPYmplY3QuY2xvbmUoRm9ybS5NZXRob2RzKSwKICAgICAgIklOUFVUIjogICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKSwKICAgICAgIlNFTEVDVCI6ICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKSwKICAgICAgIlRFWFRBUkVBIjogT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKQogICAgfSk7CiAgfQoKICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7CiAgICB2YXIgdGFnTmFtZSA9IG1ldGhvZHM7CiAgICBtZXRob2RzID0gYXJndW1lbnRzWzFdOwogIH0KCiAgaWYgKCF0YWdOYW1lKSBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywgbWV0aG9kcyB8fCB7IH0pOwogIGVsc2UgewogICAgaWYgKE9iamVjdC5pc0FycmF5KHRhZ05hbWUpKSB0YWdOYW1lLmVhY2goZXh0ZW5kKTsKICAgIGVsc2UgZXh0ZW5kKHRhZ05hbWUpOwogIH0KCiAgZnVuY3Rpb24gZXh0ZW5kKHRhZ05hbWUpIHsKICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRvVXBwZXJDYXNlKCk7CiAgICBpZiAoIUVsZW1lbnQuTWV0aG9kcy5CeVRhZ1t0YWdOYW1lXSkKICAgICAgRWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdID0geyB9OwogICAgT2JqZWN0LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMuQnlUYWdbdGFnTmFtZV0sIG1ldGhvZHMpOwogIH0KCiAgZnVuY3Rpb24gY29weShtZXRob2RzLCBkZXN0aW5hdGlvbiwgb25seUlmQWJzZW50KSB7CiAgICBvbmx5SWZBYnNlbnQgPSBvbmx5SWZBYnNlbnQgfHwgZmFsc2U7CiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBtZXRob2RzKSB7CiAgICAgIHZhciB2YWx1ZSA9IG1ldGhvZHNbcHJvcGVydHldOwogICAgICBpZiAoIU9iamVjdC5pc0Z1bmN0aW9uKHZhbHVlKSkgY29udGludWU7CiAgICAgIGlmICghb25seUlmQWJzZW50IHx8ICEocHJvcGVydHkgaW4gZGVzdGluYXRpb24pKQogICAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHZhbHVlLm1ldGhvZGl6ZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZmluZERPTUNsYXNzKHRhZ05hbWUpIHsKICAgIHZhciBrbGFzczsKICAgIHZhciB0cmFucyA9IHsKICAgICAgIk9QVEdST1VQIjogIk9wdEdyb3VwIiwgIlRFWFRBUkVBIjogIlRleHRBcmVhIiwgIlAiOiAiUGFyYWdyYXBoIiwKICAgICAgIkZJRUxEU0VUIjogIkZpZWxkU2V0IiwgIlVMIjogIlVMaXN0IiwgIk9MIjogIk9MaXN0IiwgIkRMIjogIkRMaXN0IiwKICAgICAgIkRJUiI6ICJEaXJlY3RvcnkiLCAiSDEiOiAiSGVhZGluZyIsICJIMiI6ICJIZWFkaW5nIiwgIkgzIjogIkhlYWRpbmciLAogICAgICAiSDQiOiAiSGVhZGluZyIsICJINSI6ICJIZWFkaW5nIiwgIkg2IjogIkhlYWRpbmciLCAiUSI6ICJRdW90ZSIsCiAgICAgICJJTlMiOiAiTW9kIiwgIkRFTCI6ICJNb2QiLCAiQSI6ICJBbmNob3IiLCAiSU1HIjogIkltYWdlIiwgIkNBUFRJT04iOgogICAgICAiVGFibGVDYXB0aW9uIiwgIkNPTCI6ICJUYWJsZUNvbCIsICJDT0xHUk9VUCI6ICJUYWJsZUNvbCIsICJUSEVBRCI6CiAgICAgICJUYWJsZVNlY3Rpb24iLCAiVEZPT1QiOiAiVGFibGVTZWN0aW9uIiwgIlRCT0RZIjogIlRhYmxlU2VjdGlvbiIsICJUUiI6CiAgICAgICJUYWJsZVJvdyIsICJUSCI6ICJUYWJsZUNlbGwiLCAiVEQiOiAiVGFibGVDZWxsIiwgIkZSQU1FU0VUIjoKICAgICAgIkZyYW1lU2V0IiwgIklGUkFNRSI6ICJJRnJhbWUiCiAgICB9OwogICAgaWYgKHRyYW5zW3RhZ05hbWVdKSBrbGFzcyA9ICdIVE1MJyArIHRyYW5zW3RhZ05hbWVdICsgJ0VsZW1lbnQnOwogICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3dba2xhc3NdOwogICAga2xhc3MgPSAnSFRNTCcgKyB0YWdOYW1lICsgJ0VsZW1lbnQnOwogICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3dba2xhc3NdOwogICAga2xhc3MgPSAnSFRNTCcgKyB0YWdOYW1lLmNhcGl0YWxpemUoKSArICdFbGVtZW50JzsKICAgIGlmICh3aW5kb3dba2xhc3NdKSByZXR1cm4gd2luZG93W2tsYXNzXTsKCiAgICB3aW5kb3dba2xhc3NdID0geyB9OwogICAgd2luZG93W2tsYXNzXS5wcm90b3R5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpLl9fcHJvdG9fXzsKICAgIHJldHVybiB3aW5kb3dba2xhc3NdOwogIH0KCiAgaWYgKEYuRWxlbWVudEV4dGVuc2lvbnMpIHsKICAgIGNvcHkoRWxlbWVudC5NZXRob2RzLCBIVE1MRWxlbWVudC5wcm90b3R5cGUpOwogICAgY29weShFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkLCBIVE1MRWxlbWVudC5wcm90b3R5cGUsIHRydWUpOwogIH0KCiAgaWYgKEYuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucykgewogICAgZm9yICh2YXIgdGFnIGluIEVsZW1lbnQuTWV0aG9kcy5CeVRhZykgewogICAgICB2YXIga2xhc3MgPSBmaW5kRE9NQ2xhc3ModGFnKTsKICAgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChrbGFzcykpIGNvbnRpbnVlOwogICAgICBjb3B5KFRbdGFnXSwga2xhc3MucHJvdG90eXBlKTsKICAgIH0KICB9CgogIE9iamVjdC5leHRlbmQoRWxlbWVudCwgRWxlbWVudC5NZXRob2RzKTsKICBkZWxldGUgRWxlbWVudC5CeVRhZzsKCiAgaWYgKEVsZW1lbnQuZXh0ZW5kLnJlZnJlc2gpIEVsZW1lbnQuZXh0ZW5kLnJlZnJlc2goKTsKICBFbGVtZW50LmNhY2hlID0geyB9Owp9OwoKZG9jdW1lbnQudmlld3BvcnQgPSB7CiAgZ2V0RGltZW5zaW9uczogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGltZW5zaW9ucyA9IHsgfTsKICAgIHZhciBCID0gUHJvdG90eXBlLkJyb3dzZXI7CiAgICAkdygnd2lkdGggaGVpZ2h0JykuZWFjaChmdW5jdGlvbihkKSB7CiAgICAgIHZhciBEID0gZC5jYXBpdGFsaXplKCk7CiAgICAgIGRpbWVuc2lvbnNbZF0gPSAoQi5XZWJLaXQgJiYgIWRvY3VtZW50LmV2YWx1YXRlKSA/IHNlbGZbJ2lubmVyJyArIERdIDoKICAgICAgICAoQi5PcGVyYSkgPyBkb2N1bWVudC5ib2R5WydjbGllbnQnICsgRF0gOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbJ2NsaWVudCcgKyBEXTsKICAgIH0pOwogICAgcmV0dXJuIGRpbWVuc2lvbnM7CiAgfSwKCiAgZ2V0V2lkdGg6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuZ2V0RGltZW5zaW9ucygpLndpZHRoOwogIH0sCgogIGdldEhlaWdodDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5nZXREaW1lbnNpb25zKCkuaGVpZ2h0OwogIH0sCgogIGdldFNjcm9sbE9mZnNldHM6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCgKICAgICAgd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKICAgICAgd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApOwogIH0KfTsKLyogUG9ydGlvbnMgb2YgdGhlIFNlbGVjdG9yIGNsYXNzIGFyZSBkZXJpdmVkIGZyb20gSmFjayBTbG9jdW3DouKCrOKEonMgRG9tUXVlcnksCiAqIHBhcnQgb2YgWVVJLUV4dCB2ZXJzaW9uIDAuNDAsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbiBNSVQtc3R5bGUKICogbGljZW5zZS4gIFBsZWFzZSBzZWUgaHR0cDovL3d3dy55dWktZXh0LmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uICovCgp2YXIgU2VsZWN0b3IgPSBDbGFzcy5jcmVhdGUoewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3RyaXAoKTsKICAgIHRoaXMuY29tcGlsZU1hdGNoZXIoKTsKICB9LAoKICBzaG91bGRVc2VYUGF0aDogZnVuY3Rpb24oKSB7CiAgICBpZiAoIVByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGgpIHJldHVybiBmYWxzZTsKCiAgICB2YXIgZSA9IHRoaXMuZXhwcmVzc2lvbjsKCiAgICAvLyBTYWZhcmkgMyBjaG9rZXMgb24gOiotb2YtdHlwZSBhbmQgOmVtcHR5CiAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0ICYmCiAgICAgKGUuaW5jbHVkZSgiLW9mLXR5cGUiKSB8fCBlLmluY2x1ZGUoIjplbXB0eSIpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIC8vIFhQYXRoIGNhbid0IGRvIG5hbWVzcGFjZWQgYXR0cmlidXRlcywgbm9yIGNhbiBpdCByZWFkCiAgICAvLyB0aGUgImNoZWNrZWQiIHByb3BlcnR5IGZyb20gRE9NIG5vZGVzCiAgICBpZiAoKC8oXFtbXHctXSo/Onw6Y2hlY2tlZCkvKS50ZXN0KHRoaXMuZXhwcmVzc2lvbikpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gdHJ1ZTsKICB9LAoKICBjb21waWxlTWF0Y2hlcjogZnVuY3Rpb24oKSB7CiAgICBpZiAodGhpcy5zaG91bGRVc2VYUGF0aCgpKQogICAgICByZXR1cm4gdGhpcy5jb21waWxlWFBhdGhNYXRjaGVyKCk7CgogICAgdmFyIGUgPSB0aGlzLmV4cHJlc3Npb24sIHBzID0gU2VsZWN0b3IucGF0dGVybnMsIGggPSBTZWxlY3Rvci5oYW5kbGVycywKICAgICAgICBjID0gU2VsZWN0b3IuY3JpdGVyaWEsIGxlLCBwLCBtOwoKICAgIGlmIChTZWxlY3Rvci5fY2FjaGVbZV0pIHsKICAgICAgdGhpcy5tYXRjaGVyID0gU2VsZWN0b3IuX2NhY2hlW2VdOwogICAgICByZXR1cm47CiAgICB9CgogICAgdGhpcy5tYXRjaGVyID0gWyJ0aGlzLm1hdGNoZXIgPSBmdW5jdGlvbihyb290KSB7IiwKICAgICAgICAgICAgICAgICAgICAidmFyIHIgPSByb290LCBoID0gU2VsZWN0b3IuaGFuZGxlcnMsIGMgPSBmYWxzZSwgbjsiXTsKCiAgICB3aGlsZSAoZSAmJiBsZSAhPSBlICYmICgvXFMvKS50ZXN0KGUpKSB7CiAgICAgIGxlID0gZTsKICAgICAgZm9yICh2YXIgaSBpbiBwcykgewogICAgICAgIHAgPSBwc1tpXTsKICAgICAgICBpZiAobSA9IGUubWF0Y2gocCkpIHsKICAgICAgICAgIHRoaXMubWF0Y2hlci5wdXNoKE9iamVjdC5pc0Z1bmN0aW9uKGNbaV0pID8gY1tpXShtKSA6CiAgICAJICAgICAgbmV3IFRlbXBsYXRlKGNbaV0pLmV2YWx1YXRlKG0pKTsKICAgICAgICAgIGUgPSBlLnJlcGxhY2UobVswXSwgJycpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdGhpcy5tYXRjaGVyLnB1c2goInJldHVybiBoLnVuaXF1ZShuKTtcbn0iKTsKICAgIGV2YWwodGhpcy5tYXRjaGVyLmpvaW4oJ1xuJykpOwogICAgU2VsZWN0b3IuX2NhY2hlW3RoaXMuZXhwcmVzc2lvbl0gPSB0aGlzLm1hdGNoZXI7CiAgfSwKCiAgY29tcGlsZVhQYXRoTWF0Y2hlcjogZnVuY3Rpb24oKSB7CiAgICB2YXIgZSA9IHRoaXMuZXhwcmVzc2lvbiwgcHMgPSBTZWxlY3Rvci5wYXR0ZXJucywKICAgICAgICB4ID0gU2VsZWN0b3IueHBhdGgsIGxlLCBtOwoKICAgIGlmIChTZWxlY3Rvci5fY2FjaGVbZV0pIHsKICAgICAgdGhpcy54cGF0aCA9IFNlbGVjdG9yLl9jYWNoZVtlXTsgcmV0dXJuOwogICAgfQoKICAgIHRoaXMubWF0Y2hlciA9IFsnLi8vKiddOwogICAgd2hpbGUgKGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVzdChlKSkgewogICAgICBsZSA9IGU7CiAgICAgIGZvciAodmFyIGkgaW4gcHMpIHsKICAgICAgICBpZiAobSA9IGUubWF0Y2gocHNbaV0pKSB7CiAgICAgICAgICB0aGlzLm1hdGNoZXIucHVzaChPYmplY3QuaXNGdW5jdGlvbih4W2ldKSA/IHhbaV0obSkgOgogICAgICAgICAgICBuZXcgVGVtcGxhdGUoeFtpXSkuZXZhbHVhdGUobSkpOwogICAgICAgICAgZSA9IGUucmVwbGFjZShtWzBdLCAnJyk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB0aGlzLnhwYXRoID0gdGhpcy5tYXRjaGVyLmpvaW4oJycpOwogICAgU2VsZWN0b3IuX2NhY2hlW3RoaXMuZXhwcmVzc2lvbl0gPSB0aGlzLnhwYXRoOwogIH0sCgogIGZpbmRFbGVtZW50czogZnVuY3Rpb24ocm9vdCkgewogICAgcm9vdCA9IHJvb3QgfHwgZG9jdW1lbnQ7CiAgICBpZiAodGhpcy54cGF0aCkgcmV0dXJuIGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgodGhpcy54cGF0aCwgcm9vdCk7CiAgICByZXR1cm4gdGhpcy5tYXRjaGVyKHJvb3QpOwogIH0sCgogIG1hdGNoOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB0aGlzLnRva2VucyA9IFtdOwoKICAgIHZhciBlID0gdGhpcy5leHByZXNzaW9uLCBwcyA9IFNlbGVjdG9yLnBhdHRlcm5zLCBhcyA9IFNlbGVjdG9yLmFzc2VydGlvbnM7CiAgICB2YXIgbGUsIHAsIG07CgogICAgd2hpbGUgKGUgJiYgbGUgIT09IGUgJiYgKC9cUy8pLnRlc3QoZSkpIHsKICAgICAgbGUgPSBlOwogICAgICBmb3IgKHZhciBpIGluIHBzKSB7CiAgICAgICAgcCA9IHBzW2ldOwogICAgICAgIGlmIChtID0gZS5tYXRjaChwKSkgewogICAgICAgICAgLy8gdXNlIHRoZSBTZWxlY3Rvci5hc3NlcnRpb25zIG1ldGhvZHMgdW5sZXNzIHRoZSBzZWxlY3RvcgogICAgICAgICAgLy8gaXMgdG9vIGNvbXBsZXguCiAgICAgICAgICBpZiAoYXNbaV0pIHsKICAgICAgICAgICAgdGhpcy50b2tlbnMucHVzaChbaSwgT2JqZWN0LmNsb25lKG0pXSk7CiAgICAgICAgICAgIGUgPSBlLnJlcGxhY2UobVswXSwgJycpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gcmVsdWN0YW50bHkgZG8gYSBkb2N1bWVudC13aWRlIHNlYXJjaAogICAgICAgICAgICAvLyBhbmQgbG9vayBmb3IgYSBtYXRjaCBpbiB0aGUgYXJyYXkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEVsZW1lbnRzKGRvY3VtZW50KS5pbmNsdWRlKGVsZW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhciBtYXRjaCA9IHRydWUsIG5hbWUsIG1hdGNoZXM7CiAgICBmb3IgKHZhciBpID0gMCwgdG9rZW47IHRva2VuID0gdGhpcy50b2tlbnNbaV07IGkrKykgewogICAgICBuYW1lID0gdG9rZW5bMF0sIG1hdGNoZXMgPSB0b2tlblsxXTsKICAgICAgaWYgKCFTZWxlY3Rvci5hc3NlcnRpb25zW25hbWVdKGVsZW1lbnQsIG1hdGNoZXMpKSB7CiAgICAgICAgbWF0Y2ggPSBmYWxzZTsgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbWF0Y2g7CiAgfSwKCiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbjsKICB9LAoKICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiAiIzxTZWxlY3RvcjoiICsgdGhpcy5leHByZXNzaW9uLmluc3BlY3QoKSArICI+IjsKICB9Cn0pOwoKT2JqZWN0LmV4dGVuZChTZWxlY3RvciwgewogIF9jYWNoZTogeyB9LAoKICB4cGF0aDogewogICAgZGVzY2VuZGFudDogICAiLy8qIiwKICAgIGNoaWxkOiAgICAgICAgIi8qIiwKICAgIGFkamFjZW50OiAgICAgIi9mb2xsb3dpbmctc2libGluZzo6KlsxXSIsCiAgICBsYXRlclNpYmxpbmc6ICcvZm9sbG93aW5nLXNpYmxpbmc6OionLAogICAgdGFnTmFtZTogICAgICBmdW5jdGlvbihtKSB7CiAgICAgIGlmIChtWzFdID09ICcqJykgcmV0dXJuICcnOwogICAgICByZXR1cm4gIltsb2NhbC1uYW1lKCk9JyIgKyBtWzFdLnRvTG93ZXJDYXNlKCkgKwogICAgICAgICAgICAgIicgb3IgbG9jYWwtbmFtZSgpPSciICsgbVsxXS50b1VwcGVyQ2FzZSgpICsgIiddIjsKICAgIH0sCiAgICBjbGFzc05hbWU6ICAgICJbY29udGFpbnMoY29uY2F0KCcgJywgQGNsYXNzLCAnICcpLCAnICN7MX0gJyldIiwKICAgIGlkOiAgICAgICAgICAgIltAaWQ9JyN7MX0nXSIsCiAgICBhdHRyUHJlc2VuY2U6IGZ1bmN0aW9uKG0pIHsKICAgICAgbVsxXSA9IG1bMV0udG9Mb3dlckNhc2UoKTsKICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSgiW0AjezF9XSIpLmV2YWx1YXRlKG0pOwogICAgfSwKICAgIGF0dHI6IGZ1bmN0aW9uKG0pIHsKICAgICAgbVsxXSA9IG1bMV0udG9Mb3dlckNhc2UoKTsKICAgICAgbVszXSA9IG1bNV0gfHwgbVs2XTsKICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZShTZWxlY3Rvci54cGF0aC5vcGVyYXRvcnNbbVsyXV0pLmV2YWx1YXRlKG0pOwogICAgfSwKICAgIHBzZXVkbzogZnVuY3Rpb24obSkgewogICAgICB2YXIgaCA9IFNlbGVjdG9yLnhwYXRoLnBzZXVkb3NbbVsxXV07CiAgICAgIGlmICghaCkgcmV0dXJuICcnOwogICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24oaCkpIHJldHVybiBoKG0pOwogICAgICByZXR1cm4gbmV3IFRlbXBsYXRlKFNlbGVjdG9yLnhwYXRoLnBzZXVkb3NbbVsxXV0pLmV2YWx1YXRlKG0pOwogICAgfSwKICAgIG9wZXJhdG9yczogewogICAgICAnPSc6ICAiW0AjezF9PScjezN9J10iLAogICAgICAnIT0nOiAiW0AjezF9IT0nI3szfSddIiwKICAgICAgJ149JzogIltzdGFydHMtd2l0aChAI3sxfSwgJyN7M30nKV0iLAogICAgICAnJD0nOiAiW3N1YnN0cmluZyhAI3sxfSwgKHN0cmluZy1sZW5ndGgoQCN7MX0pIC0gc3RyaW5nLWxlbmd0aCgnI3szfScpICsgMSkpPScjezN9J10iLAogICAgICAnKj0nOiAiW2NvbnRhaW5zKEAjezF9LCAnI3szfScpXSIsCiAgICAgICd+PSc6ICJbY29udGFpbnMoY29uY2F0KCcgJywgQCN7MX0sICcgJyksICcgI3szfSAnKV0iLAogICAgICAnfD0nOiAiW2NvbnRhaW5zKGNvbmNhdCgnLScsIEAjezF9LCAnLScpLCAnLSN7M30tJyldIgogICAgfSwKICAgIHBzZXVkb3M6IHsKICAgICAgJ2ZpcnN0LWNoaWxkJzogJ1tub3QocHJlY2VkaW5nLXNpYmxpbmc6OiopXScsCiAgICAgICdsYXN0LWNoaWxkJzogICdbbm90KGZvbGxvd2luZy1zaWJsaW5nOjoqKV0nLAogICAgICAnb25seS1jaGlsZCc6ICAnW25vdChwcmVjZWRpbmctc2libGluZzo6KiBvciBmb2xsb3dpbmctc2libGluZzo6KildJywKICAgICAgJ2VtcHR5JzogICAgICAgIltjb3VudCgqKSA9IDAgYW5kIChjb3VudCh0ZXh0KCkpID0gMCBvciB0cmFuc2xhdGUodGV4dCgpLCAnIFx0XHJcbicsICcnKSA9ICcnKV0iLAogICAgICAnY2hlY2tlZCc6ICAgICAiW0BjaGVja2VkXSIsCiAgICAgICdkaXNhYmxlZCc6ICAgICJbQGRpc2FibGVkXSIsCiAgICAgICdlbmFibGVkJzogICAgICJbbm90KEBkaXNhYmxlZCldIiwKICAgICAgJ25vdCc6IGZ1bmN0aW9uKG0pIHsKICAgICAgICB2YXIgZSA9IG1bNl0sIHAgPSBTZWxlY3Rvci5wYXR0ZXJucywKICAgICAgICAgICAgeCA9IFNlbGVjdG9yLnhwYXRoLCBsZSwgdjsKCiAgICAgICAgdmFyIGV4Y2x1c2lvbiA9IFtdOwogICAgICAgIHdoaWxlIChlICYmIGxlICE9IGUgJiYgKC9cUy8pLnRlc3QoZSkpIHsKICAgICAgICAgIGxlID0gZTsKICAgICAgICAgIGZvciAodmFyIGkgaW4gcCkgewogICAgICAgICAgICBpZiAobSA9IGUubWF0Y2gocFtpXSkpIHsKICAgICAgICAgICAgICB2ID0gT2JqZWN0LmlzRnVuY3Rpb24oeFtpXSkgPyB4W2ldKG0pIDogbmV3IFRlbXBsYXRlKHhbaV0pLmV2YWx1YXRlKG0pOwogICAgICAgICAgICAgIGV4Y2x1c2lvbi5wdXNoKCIoIiArIHYuc3Vic3RyaW5nKDEsIHYubGVuZ3RoIC0gMSkgKyAiKSIpOwogICAgICAgICAgICAgIGUgPSBlLnJlcGxhY2UobVswXSwgJycpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAiW25vdCgiICsgZXhjbHVzaW9uLmpvaW4oIiBhbmQgIikgKyAiKV0iOwogICAgICB9LAogICAgICAnbnRoLWNoaWxkJzogICAgICBmdW5jdGlvbihtKSB7CiAgICAgICAgcmV0dXJuIFNlbGVjdG9yLnhwYXRoLnBzZXVkb3MubnRoKCIoY291bnQoLi9wcmVjZWRpbmctc2libGluZzo6KikgKyAxKSAiLCBtKTsKICAgICAgfSwKICAgICAgJ250aC1sYXN0LWNoaWxkJzogZnVuY3Rpb24obSkgewogICAgICAgIHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zLm50aCgiKGNvdW50KC4vZm9sbG93aW5nLXNpYmxpbmc6OiopICsgMSkgIiwgbSk7CiAgICAgIH0sCiAgICAgICdudGgtb2YtdHlwZSc6ICAgIGZ1bmN0aW9uKG0pIHsKICAgICAgICByZXR1cm4gU2VsZWN0b3IueHBhdGgucHNldWRvcy5udGgoInBvc2l0aW9uKCkgIiwgbSk7CiAgICAgIH0sCiAgICAgICdudGgtbGFzdC1vZi10eXBlJzogZnVuY3Rpb24obSkgewogICAgICAgIHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zLm50aCgiKGxhc3QoKSArIDEgLSBwb3NpdGlvbigpKSAiLCBtKTsKICAgICAgfSwKICAgICAgJ2ZpcnN0LW9mLXR5cGUnOiAgZnVuY3Rpb24obSkgewogICAgICAgIG1bNl0gPSAiMSI7IHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zWydudGgtb2YtdHlwZSddKG0pOwogICAgICB9LAogICAgICAnbGFzdC1vZi10eXBlJzogICBmdW5jdGlvbihtKSB7CiAgICAgICAgbVs2XSA9ICIxIjsgcmV0dXJuIFNlbGVjdG9yLnhwYXRoLnBzZXVkb3NbJ250aC1sYXN0LW9mLXR5cGUnXShtKTsKICAgICAgfSwKICAgICAgJ29ubHktb2YtdHlwZSc6ICAgZnVuY3Rpb24obSkgewogICAgICAgIHZhciBwID0gU2VsZWN0b3IueHBhdGgucHNldWRvczsgcmV0dXJuIHBbJ2ZpcnN0LW9mLXR5cGUnXShtKSArIHBbJ2xhc3Qtb2YtdHlwZSddKG0pOwogICAgICB9LAogICAgICBudGg6IGZ1bmN0aW9uKGZyYWdtZW50LCBtKSB7CiAgICAgICAgdmFyIG1tLCBmb3JtdWxhID0gbVs2XSwgcHJlZGljYXRlOwogICAgICAgIGlmIChmb3JtdWxhID09ICdldmVuJykgZm9ybXVsYSA9ICcybiswJzsKICAgICAgICBpZiAoZm9ybXVsYSA9PSAnb2RkJykgIGZvcm11bGEgPSAnMm4rMSc7CiAgICAgICAgaWYgKG1tID0gZm9ybXVsYS5tYXRjaCgvXihcZCspJC8pKSAvLyBkaWdpdCBvbmx5CiAgICAgICAgICByZXR1cm4gJ1snICsgZnJhZ21lbnQgKyAiPSAiICsgbW1bMV0gKyAnXSc7CiAgICAgICAgaWYgKG1tID0gZm9ybXVsYS5tYXRjaCgvXigtP1xkKik/bigoWystXSkoXGQrKSk/LykpIHsgLy8gYW4rYgogICAgICAgICAgaWYgKG1tWzFdID09ICItIikgbW1bMV0gPSAtMTsKICAgICAgICAgIHZhciBhID0gbW1bMV0gPyBOdW1iZXIobW1bMV0pIDogMTsKICAgICAgICAgIHZhciBiID0gbW1bMl0gPyBOdW1iZXIobW1bMl0pIDogMDsKICAgICAgICAgIHByZWRpY2F0ZSA9ICJbKCgje2ZyYWdtZW50fSAtICN7Yn0pIG1vZCAje2F9ID0gMCkgYW5kICIgKwogICAgICAgICAgIigoI3tmcmFnbWVudH0gLSAje2J9KSBkaXYgI3thfSA+PSAwKV0iOwogICAgICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZShwcmVkaWNhdGUpLmV2YWx1YXRlKHsKICAgICAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50LCBhOiBhLCBiOiBiIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCgogIGNyaXRlcmlhOiB7CiAgICB0YWdOYW1lOiAgICAgICduID0gaC50YWdOYW1lKG4sIHIsICIjezF9IiwgYyk7ICAgICAgYyA9IGZhbHNlOycsCiAgICBjbGFzc05hbWU6ICAgICduID0gaC5jbGFzc05hbWUobiwgciwgIiN7MX0iLCBjKTsgICAgYyA9IGZhbHNlOycsCiAgICBpZDogICAgICAgICAgICduID0gaC5pZChuLCByLCAiI3sxfSIsIGMpOyAgICAgICAgICAgYyA9IGZhbHNlOycsCiAgICBhdHRyUHJlc2VuY2U6ICduID0gaC5hdHRyUHJlc2VuY2UobiwgciwgIiN7MX0iLCBjKTsgYyA9IGZhbHNlOycsCiAgICBhdHRyOiBmdW5jdGlvbihtKSB7CiAgICAgIG1bM10gPSAobVs1XSB8fCBtWzZdKTsKICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSgnbiA9IGguYXR0cihuLCByLCAiI3sxfSIsICIjezN9IiwgIiN7Mn0iLCBjKTsgYyA9IGZhbHNlOycpLmV2YWx1YXRlKG0pOwogICAgfSwKICAgIHBzZXVkbzogZnVuY3Rpb24obSkgewogICAgICBpZiAobVs2XSkgbVs2XSA9IG1bNl0ucmVwbGFjZSgvIi9nLCAnXFwiJyk7CiAgICAgIHJldHVybiBuZXcgVGVtcGxhdGUoJ24gPSBoLnBzZXVkbyhuLCAiI3sxfSIsICIjezZ9IiwgciwgYyk7IGMgPSBmYWxzZTsnKS5ldmFsdWF0ZShtKTsKICAgIH0sCiAgICBkZXNjZW5kYW50OiAgICdjID0gImRlc2NlbmRhbnQiOycsCiAgICBjaGlsZDogICAgICAgICdjID0gImNoaWxkIjsnLAogICAgYWRqYWNlbnQ6ICAgICAnYyA9ICJhZGphY2VudCI7JywKICAgIGxhdGVyU2libGluZzogJ2MgPSAibGF0ZXJTaWJsaW5nIjsnCiAgfSwKCiAgcGF0dGVybnM6IHsKICAgIC8vIGNvbWJpbmF0b3JzIG11c3QgYmUgbGlzdGVkIGZpcnN0CiAgICAvLyAoYW5kIGRlc2NlbmRhbnQgbmVlZHMgdG8gYmUgbGFzdCBjb21iaW5hdG9yKQogICAgbGF0ZXJTaWJsaW5nOiAvXlxzKn5ccyovLAogICAgY2hpbGQ6ICAgICAgICAvXlxzKj5ccyovLAogICAgYWRqYWNlbnQ6ICAgICAvXlxzKlwrXHMqLywKICAgIGRlc2NlbmRhbnQ6ICAgL15ccy8sCgogICAgLy8gc2VsZWN0b3JzIGZvbGxvdwogICAgdGFnTmFtZTogICAgICAvXlxzKihcKnxbXHdcLV0rKShcYnwkKT8vLAogICAgaWQ6ICAgICAgICAgICAvXiMoW1x3XC1cKl0rKShcYnwkKS8sCiAgICBjbGFzc05hbWU6ICAgIC9eXC4oW1x3XC1cKl0rKShcYnwkKS8sCiAgICBwc2V1ZG86Ci9eOigoZmlyc3R8bGFzdHxudGh8bnRoLWxhc3R8b25seSkoLWNoaWxkfC1vZi10eXBlKXxlbXB0eXxjaGVja2VkfChlbnxkaXMpYWJsZWR8bm90KShcKCguKj8pXCkpPyhcYnwkfCg/PVxzfFs6K34+XSkpLywKICAgIGF0dHJQcmVzZW5jZTogL15cWyhbXHddKylcXS8sCiAgICBhdHRyOiAgICAgICAgIC9cWygoPzpbXHctXSo6KT9bXHctXSspXHMqKD86KFshXiQqfnxdPz0pXHMqKChbJyJdKShbXlw0XSo/KVw0fChbXiciXVteXF1dKj8pKSk/XF0vCiAgfSwKCiAgLy8gZm9yIFNlbGVjdG9yLm1hdGNoIGFuZCBFbGVtZW50I21hdGNoCiAgYXNzZXJ0aW9uczogewogICAgdGFnTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewogICAgICByZXR1cm4gbWF0Y2hlc1sxXS50b1VwcGVyQ2FzZSgpID09IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwogICAgfSwKCiAgICBjbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIG1hdGNoZXMpIHsKICAgICAgcmV0dXJuIEVsZW1lbnQuaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwogICAgfSwKCiAgICBpZDogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewogICAgICByZXR1cm4gZWxlbWVudC5pZCA9PT0gbWF0Y2hlc1sxXTsKICAgIH0sCgogICAgYXR0clByZXNlbmNlOiBmdW5jdGlvbihlbGVtZW50LCBtYXRjaGVzKSB7CiAgICAgIHJldHVybiBFbGVtZW50Lmhhc0F0dHJpYnV0ZShlbGVtZW50LCBtYXRjaGVzWzFdKTsKICAgIH0sCgogICAgYXR0cjogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewogICAgICB2YXIgbm9kZVZhbHVlID0gRWxlbWVudC5yZWFkQXR0cmlidXRlKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwogICAgICByZXR1cm4gbm9kZVZhbHVlICYmIFNlbGVjdG9yLm9wZXJhdG9yc1ttYXRjaGVzWzJdXShub2RlVmFsdWUsIG1hdGNoZXNbNV0gfHwgbWF0Y2hlc1s2XSk7CiAgICB9CiAgfSwKCiAgaGFuZGxlcnM6IHsKICAgIC8vIFVUSUxJVFkgRlVOQ1RJT05TCiAgICAvLyBqb2lucyB0d28gY29sbGVjdGlvbnMKICAgIGNvbmNhdDogZnVuY3Rpb24oYSwgYikgewogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IGJbaV07IGkrKykKICAgICAgICBhLnB1c2gobm9kZSk7CiAgICAgIHJldHVybiBhOwogICAgfSwKCiAgICAvLyBtYXJrcyBhbiBhcnJheSBvZiBub2RlcyBmb3IgY291bnRpbmcKICAgIG1hcms6IGZ1bmN0aW9uKG5vZGVzKSB7CiAgICAgIHZhciBfdHJ1ZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlID0gX3RydWU7CiAgICAgIHJldHVybiBub2RlczsKICAgIH0sCgogICAgdW5tYXJrOiBmdW5jdGlvbihub2RlcykgewogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlID0gdW5kZWZpbmVkOwogICAgICByZXR1cm4gbm9kZXM7CiAgICB9LAoKICAgIC8vIG1hcmsgZWFjaCBjaGlsZCBub2RlIHdpdGggaXRzIHBvc2l0aW9uIChmb3IgbnRoIGNhbGxzKQogICAgLy8gIm9mVHlwZSIgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSdyZSBpbmRleGluZyBmb3IgbnRoLW9mLXR5cGUKICAgIC8vIHJhdGhlciB0aGFuIG50aC1jaGlsZAogICAgaW5kZXg6IGZ1bmN0aW9uKHBhcmVudE5vZGUsIHJldmVyc2UsIG9mVHlwZSkgewogICAgICBwYXJlbnROb2RlLl9jb3VudGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgICAgaWYgKHJldmVyc2UpIHsKICAgICAgICBmb3IgKHZhciBub2RlcyA9IHBhcmVudE5vZGUuY2hpbGROb2RlcywgaSA9IG5vZGVzLmxlbmd0aCAtIDEsIGogPSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgKCFvZlR5cGUgfHwgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSkgbm9kZS5ub2RlSW5kZXggPSBqKys7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMSwgbm9kZXMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXM7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSAmJiAoIW9mVHlwZSB8fCBub2RlLl9jb3VudGVkQnlQcm90b3R5cGUpKSBub2RlLm5vZGVJbmRleCA9IGorKzsKICAgICAgfQogICAgfSwKCiAgICAvLyBmaWx0ZXJzIG91dCBkdXBsaWNhdGVzIGFuZCBleHRlbmRzIGFsbCBub2RlcwogICAgdW5pcXVlOiBmdW5jdGlvbihub2RlcykgewogICAgICBpZiAobm9kZXMubGVuZ3RoID09IDApIHJldHVybiBub2RlczsKICAgICAgdmFyIHJlc3VsdHMgPSBbXSwgbjsKICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspCiAgICAgICAgaWYgKCEobiA9IG5vZGVzW2ldKS5fY291bnRlZEJ5UHJvdG90eXBlKSB7CiAgICAgICAgICBuLl9jb3VudGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKICAgICAgICAgIHJlc3VsdHMucHVzaChFbGVtZW50LmV4dGVuZChuKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gU2VsZWN0b3IuaGFuZGxlcnMudW5tYXJrKHJlc3VsdHMpOwogICAgfSwKCiAgICAvLyBDT01CSU5BVE9SIEZVTkNUSU9OUwogICAgZGVzY2VuZGFudDogZnVuY3Rpb24obm9kZXMpIHsKICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgaC5jb25jYXQocmVzdWx0cywgbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKTsKICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgIGNoaWxkOiBmdW5jdGlvbihub2RlcykgewogICAgICB2YXIgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwogICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewogICAgICAgIGZvciAodmFyIGogPSAwLCBjaGlsZDsgY2hpbGQgPSBub2RlLmNoaWxkTm9kZXNbal07IGorKykKICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxICYmIGNoaWxkLnRhZ05hbWUgIT0gJyEnKSByZXN1bHRzLnB1c2goY2hpbGQpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKCiAgICBhZGphY2VudDogZnVuY3Rpb24obm9kZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpOwogICAgICAgIGlmIChuZXh0KSByZXN1bHRzLnB1c2gobmV4dCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgIGxhdGVyU2libGluZzogZnVuY3Rpb24obm9kZXMpIHsKICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgaC5jb25jYXQocmVzdWx0cywgRWxlbWVudC5uZXh0U2libGluZ3Mobm9kZSkpOwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgbmV4dEVsZW1lbnRTaWJsaW5nOiBmdW5jdGlvbihub2RlKSB7CiAgICAgIHdoaWxlIChub2RlID0gbm9kZS5uZXh0U2libGluZykKCSAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBub2RlOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgogICAgcHJldmlvdXNFbGVtZW50U2libGluZzogZnVuY3Rpb24obm9kZSkgewogICAgICB3aGlsZSAobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKQogICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBub2RlOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0sCgogICAgLy8gVE9LRU4gRlVOQ1RJT05TCiAgICB0YWdOYW1lOiBmdW5jdGlvbihub2Rlcywgcm9vdCwgdGFnTmFtZSwgY29tYmluYXRvcikgewogICAgICB2YXIgdVRhZ05hbWUgPSB0YWdOYW1lLnRvVXBwZXJDYXNlKCk7CiAgICAgIHZhciByZXN1bHRzID0gW10sIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgaWYgKG5vZGVzKSB7CiAgICAgICAgaWYgKGNvbWJpbmF0b3IpIHsKICAgICAgICAgIC8vIGZhc3RsYW5lIGZvciBvcmRpbmFyeSBkZXNjZW5kYW50IGNvbWJpbmF0b3JzCiAgICAgICAgICBpZiAoY29tYmluYXRvciA9PSAiZGVzY2VuZGFudCIpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgICAgICAgIGguY29uY2F0KHJlc3VsdHMsIG5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSkpOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICAgIH0gZWxzZSBub2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwogICAgICAgICAgaWYgKHRhZ05hbWUgPT0gIioiKSByZXR1cm4gbm9kZXM7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gdVRhZ05hbWUpIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgfSBlbHNlIHJldHVybiByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOwogICAgfSwKCiAgICBpZDogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGlkLCBjb21iaW5hdG9yKSB7CiAgICAgIHZhciB0YXJnZXROb2RlID0gJChpZCksIGggPSBTZWxlY3Rvci5oYW5kbGVyczsKICAgICAgaWYgKCF0YXJnZXROb2RlKSByZXR1cm4gW107CiAgICAgIGlmICghbm9kZXMgJiYgcm9vdCA9PSBkb2N1bWVudCkgcmV0dXJuIFt0YXJnZXROb2RlXTsKICAgICAgaWYgKG5vZGVzKSB7CiAgICAgICAgaWYgKGNvbWJpbmF0b3IpIHsKICAgICAgICAgIGlmIChjb21iaW5hdG9yID09ICdjaGlsZCcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgICAgICAgIGlmICh0YXJnZXROb2RlLnBhcmVudE5vZGUgPT0gbm9kZSkgcmV0dXJuIFt0YXJnZXROb2RlXTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29tYmluYXRvciA9PSAnZGVzY2VuZGFudCcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgICAgICAgIGlmIChFbGVtZW50LmRlc2NlbmRhbnRPZih0YXJnZXROb2RlLCBub2RlKSkgcmV0dXJuIFt0YXJnZXROb2RlXTsKICAgICAgICAgIH0gZWxzZSBpZiAoY29tYmluYXRvciA9PSAnYWRqYWNlbnQnKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICAgICAgICBpZiAoU2VsZWN0b3IuaGFuZGxlcnMucHJldmlvdXNFbGVtZW50U2libGluZyh0YXJnZXROb2RlKSA9PSBub2RlKQogICAgICAgICAgICAgICAgcmV0dXJuIFt0YXJnZXROb2RlXTsKICAgICAgICAgIH0gZWxzZSBub2RlcyA9IGhbY29tYmluYXRvcl0obm9kZXMpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgICBpZiAobm9kZSA9PSB0YXJnZXROb2RlKSByZXR1cm4gW3RhcmdldE5vZGVdOwogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICByZXR1cm4gKHRhcmdldE5vZGUgJiYgRWxlbWVudC5kZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgcm9vdCkpID8gW3RhcmdldE5vZGVdIDogW107CiAgICB9LAoKICAgIGNsYXNzTmFtZTogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGNsYXNzTmFtZSwgY29tYmluYXRvcikgewogICAgICBpZiAobm9kZXMgJiYgY29tYmluYXRvcikgbm9kZXMgPSB0aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKICAgICAgcmV0dXJuIFNlbGVjdG9yLmhhbmRsZXJzLmJ5Q2xhc3NOYW1lKG5vZGVzLCByb290LCBjbGFzc05hbWUpOwogICAgfSwKCiAgICBieUNsYXNzTmFtZTogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGNsYXNzTmFtZSkgewogICAgICBpZiAoIW5vZGVzKSBub2RlcyA9IFNlbGVjdG9yLmhhbmRsZXJzLmRlc2NlbmRhbnQoW3Jvb3RdKTsKICAgICAgdmFyIG5lZWRsZSA9ICcgJyArIGNsYXNzTmFtZSArICcgJzsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZSwgbm9kZUNsYXNzTmFtZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICBub2RlQ2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7CiAgICAgICAgaWYgKG5vZGVDbGFzc05hbWUubGVuZ3RoID09IDApIGNvbnRpbnVlOwogICAgICAgIGlmIChub2RlQ2xhc3NOYW1lID09IGNsYXNzTmFtZSB8fCAoJyAnICsgbm9kZUNsYXNzTmFtZSArICcgJykuaW5jbHVkZShuZWVkbGUpKQogICAgICAgICAgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKCiAgICBhdHRyUHJlc2VuY2U6IGZ1bmN0aW9uKG5vZGVzLCByb290LCBhdHRyLCBjb21iaW5hdG9yKSB7CiAgICAgIGlmICghbm9kZXMpIG5vZGVzID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwogICAgICBpZiAobm9kZXMgJiYgY29tYmluYXRvcikgbm9kZXMgPSB0aGlzW2NvbWJpbmF0b3JdKG5vZGVzKTsKICAgICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgIGlmIChFbGVtZW50Lmhhc0F0dHJpYnV0ZShub2RlLCBhdHRyKSkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgYXR0cjogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGF0dHIsIHZhbHVlLCBvcGVyYXRvciwgY29tYmluYXRvcikgewogICAgICBpZiAoIW5vZGVzKSBub2RlcyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKICAgICAgaWYgKG5vZGVzICYmIGNvbWJpbmF0b3IpIG5vZGVzID0gdGhpc1tjb21iaW5hdG9yXShub2Rlcyk7CiAgICAgIHZhciBoYW5kbGVyID0gU2VsZWN0b3Iub3BlcmF0b3JzW29wZXJhdG9yXSwgcmVzdWx0cyA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICB2YXIgbm9kZVZhbHVlID0gRWxlbWVudC5yZWFkQXR0cmlidXRlKG5vZGUsIGF0dHIpOwogICAgICAgIGlmIChub2RlVmFsdWUgPT09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGlmIChoYW5kbGVyKG5vZGVWYWx1ZSwgdmFsdWUpKSByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgIHBzZXVkbzogZnVuY3Rpb24obm9kZXMsIG5hbWUsIHZhbHVlLCByb290LCBjb21iaW5hdG9yKSB7CiAgICAgIGlmIChub2RlcyAmJiBjb21iaW5hdG9yKSBub2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwogICAgICBpZiAoIW5vZGVzKSBub2RlcyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3NbbmFtZV0obm9kZXMsIHZhbHVlLCByb290KTsKICAgIH0KICB9LAoKICBwc2V1ZG9zOiB7CiAgICAnZmlyc3QtY2hpbGQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICBpZiAoU2VsZWN0b3IuaGFuZGxlcnMucHJldmlvdXNFbGVtZW50U2libGluZyhub2RlKSkgY29udGludWU7CiAgICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAogICAgJ2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICBpZiAoU2VsZWN0b3IuaGFuZGxlcnMubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpKSBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCiAgICAnb25seS1jaGlsZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICB2YXIgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwogICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICBpZiAoIWgucHJldmlvdXNFbGVtZW50U2libGluZyhub2RlKSAmJiAhaC5uZXh0RWxlbWVudFNpYmxpbmcobm9kZSkpCiAgICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKICAgICdudGgtY2hpbGQnOiAgICAgICAgZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCBmb3JtdWxhLCByb290KTsKICAgIH0sCiAgICAnbnRoLWxhc3QtY2hpbGQnOiAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7CiAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50aChub2RlcywgZm9ybXVsYSwgcm9vdCwgdHJ1ZSk7CiAgICB9LAogICAgJ250aC1vZi10eXBlJzogICAgICBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewogICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRvcy5udGgobm9kZXMsIGZvcm11bGEsIHJvb3QsIGZhbHNlLCB0cnVlKTsKICAgIH0sCiAgICAnbnRoLWxhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxhLCByb290KSB7CiAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50aChub2RlcywgZm9ybXVsYSwgcm9vdCwgdHJ1ZSwgdHJ1ZSk7CiAgICB9LAogICAgJ2ZpcnN0LW9mLXR5cGUnOiAgICBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewogICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRvcy5udGgobm9kZXMsICIxIiwgcm9vdCwgZmFsc2UsIHRydWUpOwogICAgfSwKICAgICdsYXN0LW9mLXR5cGUnOiAgICAgZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCAiMSIsIHJvb3QsIHRydWUsIHRydWUpOwogICAgfSwKICAgICdvbmx5LW9mLXR5cGUnOiAgICAgZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKICAgICAgdmFyIHAgPSBTZWxlY3Rvci5wc2V1ZG9zOwogICAgICByZXR1cm4gcFsnbGFzdC1vZi10eXBlJ10ocFsnZmlyc3Qtb2YtdHlwZSddKG5vZGVzLCBmb3JtdWxhLCByb290KSwgZm9ybXVsYSwgcm9vdCk7CiAgICB9LAoKICAgIC8vIGhhbmRsZXMgdGhlIGFuK2IgbG9naWMKICAgIGdldEluZGljZXM6IGZ1bmN0aW9uKGEsIGIsIHRvdGFsKSB7CiAgICAgIGlmIChhID09IDApIHJldHVybiBiID4gMCA/IFtiXSA6IFtdOwogICAgICByZXR1cm4gJFIoMSwgdG90YWwpLmluamVjdChbXSwgZnVuY3Rpb24obWVtbywgaSkgewogICAgICAgIGlmICgwID09IChpIC0gYikgJSBhICYmIChpIC0gYikgLyBhID49IDApIG1lbW8ucHVzaChpKTsKICAgICAgICByZXR1cm4gbWVtbzsKICAgICAgfSk7CiAgICB9LAoKICAgIC8vIGhhbmRsZXMgbnRoKC1sYXN0KS1jaGlsZCwgbnRoKC1sYXN0KS1vZi10eXBlLCBhbmQgKGZpcnN0fGxhc3QpLW9mLXR5cGUKICAgIG50aDogZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QsIHJldmVyc2UsIG9mVHlwZSkgewogICAgICBpZiAobm9kZXMubGVuZ3RoID09IDApIHJldHVybiBbXTsKICAgICAgaWYgKGZvcm11bGEgPT0gJ2V2ZW4nKSBmb3JtdWxhID0gJzJuKzAnOwogICAgICBpZiAoZm9ybXVsYSA9PSAnb2RkJykgIGZvcm11bGEgPSAnMm4rMSc7CiAgICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnMsIHJlc3VsdHMgPSBbXSwgaW5kZXhlZCA9IFtdLCBtOwogICAgICBoLm1hcmsobm9kZXMpOwogICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSB7CiAgICAgICAgICBoLmluZGV4KG5vZGUucGFyZW50Tm9kZSwgcmV2ZXJzZSwgb2ZUeXBlKTsKICAgICAgICAgIGluZGV4ZWQucHVzaChub2RlLnBhcmVudE5vZGUpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZm9ybXVsYS5tYXRjaCgvXlxkKyQvKSkgeyAvLyBqdXN0IGEgbnVtYmVyCiAgICAgICAgZm9ybXVsYSA9IE51bWJlcihmb3JtdWxhKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgICBpZiAobm9kZS5ub2RlSW5kZXggPT0gZm9ybXVsYSkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICB9IGVsc2UgaWYgKG0gPSBmb3JtdWxhLm1hdGNoKC9eKC0/XGQqKT9uKChbKy1dKShcZCspKT8vKSkgeyAvLyBhbitiCiAgICAgICAgaWYgKG1bMV0gPT0gIi0iKSBtWzFdID0gLTE7CiAgICAgICAgdmFyIGEgPSBtWzFdID8gTnVtYmVyKG1bMV0pIDogMTsKICAgICAgICB2YXIgYiA9IG1bMl0gPyBOdW1iZXIobVsyXSkgOiAwOwogICAgICAgIHZhciBpbmRpY2VzID0gU2VsZWN0b3IucHNldWRvcy5nZXRJbmRpY2VzKGEsIGIsIG5vZGVzLmxlbmd0aCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGUsIGwgPSBpbmRpY2VzLmxlbmd0aDsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbDsgaisrKQogICAgICAgICAgICBpZiAobm9kZS5ub2RlSW5kZXggPT0gaW5kaWNlc1tqXSkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICAgIH0KICAgICAgfQogICAgICBoLnVubWFyayhub2Rlcyk7CiAgICAgIGgudW5tYXJrKGluZGV4ZWQpOwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgJ2VtcHR5JzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7CiAgICAgICAgLy8gSUUgdHJlYXRzIGNvbW1lbnRzIGFzIGVsZW1lbnQgbm9kZXMKICAgICAgICBpZiAobm9kZS50YWdOYW1lID09ICchJyB8fCAobm9kZS5maXJzdENoaWxkICYmICFub2RlLmlubmVySFRNTC5tYXRjaCgvXlxzKiQvKSkpIGNvbnRpbnVlOwogICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgJ25vdCc6IGZ1bmN0aW9uKG5vZGVzLCBzZWxlY3Rvciwgcm9vdCkgewogICAgICB2YXIgaCA9IFNlbGVjdG9yLmhhbmRsZXJzLCBzZWxlY3RvclR5cGUsIG07CiAgICAgIHZhciBleGNsdXNpb25zID0gbmV3IFNlbGVjdG9yKHNlbGVjdG9yKS5maW5kRWxlbWVudHMocm9vdCk7CiAgICAgIGgubWFyayhleGNsdXNpb25zKTsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgaWYgKCFub2RlLl9jb3VudGVkQnlQcm90b3R5cGUpIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgaC51bm1hcmsoZXhjbHVzaW9ucyk7CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSwKCiAgICAnZW5hYmxlZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICBpZiAoIW5vZGUuZGlzYWJsZWQpIHJlc3VsdHMucHVzaChub2RlKTsKICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9LAoKICAgICdkaXNhYmxlZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewogICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKICAgICAgICBpZiAobm9kZS5kaXNhYmxlZCkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0sCgogICAgJ2NoZWNrZWQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCiAgICAgICAgaWYgKG5vZGUuY2hlY2tlZCkgcmVzdWx0cy5wdXNoKG5vZGUpOwogICAgICByZXR1cm4gcmVzdWx0czsKICAgIH0KICB9LAoKICBvcGVyYXRvcnM6IHsKICAgICc9JzogIGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudiA9PSB2OyB9LAogICAgJyE9JzogZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJuIG52ICE9IHY7IH0sCiAgICAnXj0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gbnYuc3RhcnRzV2l0aCh2KTsgfSwKICAgICckPSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudi5lbmRzV2l0aCh2KTsgfSwKICAgICcqPSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudi5pbmNsdWRlKHYpOyB9LAogICAgJ349JzogZnVuY3Rpb24obnYsIHYpIHsgcmV0dXJuICgnICcgKyBudiArICcgJykuaW5jbHVkZSgnICcgKyB2ICsgJyAnKTsgfSwKICAgICd8PSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiAoJy0nICsgbnYudG9VcHBlckNhc2UoKSArICctJykuaW5jbHVkZSgnLScgKyB2LnRvVXBwZXJDYXNlKCkgKyAnLScpOyB9CiAgfSwKCiAgc3BsaXQ6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKICAgIHZhciBleHByZXNzaW9ucyA9IFtdOwogICAgZXhwcmVzc2lvbi5zY2FuKC8oKFtcdyM6Ln4+KygpXHMtXSt8XCp8XFsuKj9cXSkrKVxzKigsfCQpLywgZnVuY3Rpb24obSkgewogICAgICBleHByZXNzaW9ucy5wdXNoKG1bMV0uc3RyaXAoKSk7CiAgICB9KTsKICAgIHJldHVybiBleHByZXNzaW9uczsKICB9LAoKICBtYXRjaEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50cywgZXhwcmVzc2lvbikgewogICAgdmFyIG1hdGNoZXMgPSAkJChleHByZXNzaW9uKSwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzOwogICAgaC5tYXJrKG1hdGNoZXMpOwogICAgZm9yICh2YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnRzW2ldOyBpKyspCiAgICAgIGlmIChlbGVtZW50Ll9jb3VudGVkQnlQcm90b3R5cGUpIHJlc3VsdHMucHVzaChlbGVtZW50KTsKICAgIGgudW5tYXJrKG1hdGNoZXMpOwogICAgcmV0dXJuIHJlc3VsdHM7CiAgfSwKCiAgZmluZEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnRzLCBleHByZXNzaW9uLCBpbmRleCkgewogICAgaWYgKE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSkgewogICAgICBpbmRleCA9IGV4cHJlc3Npb247IGV4cHJlc3Npb24gPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiBTZWxlY3Rvci5tYXRjaEVsZW1lbnRzKGVsZW1lbnRzLCBleHByZXNzaW9uIHx8ICcqJylbaW5kZXggfHwgMF07CiAgfSwKCiAgZmluZENoaWxkRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb25zKSB7CiAgICBleHByZXNzaW9ucyA9IFNlbGVjdG9yLnNwbGl0KGV4cHJlc3Npb25zLmpvaW4oJywnKSk7CiAgICB2YXIgcmVzdWx0cyA9IFtdLCBoID0gU2VsZWN0b3IuaGFuZGxlcnM7CiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV4cHJlc3Npb25zLmxlbmd0aCwgc2VsZWN0b3I7IGkgPCBsOyBpKyspIHsKICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IoZXhwcmVzc2lvbnNbaV0uc3RyaXAoKSk7CiAgICAgIGguY29uY2F0KHJlc3VsdHMsIHNlbGVjdG9yLmZpbmRFbGVtZW50cyhlbGVtZW50KSk7CiAgICB9CiAgICByZXR1cm4gKGwgPiAxKSA/IGgudW5pcXVlKHJlc3VsdHMpIDogcmVzdWx0czsKICB9Cn0pOwoKaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CiAgT2JqZWN0LmV4dGVuZChTZWxlY3Rvci5oYW5kbGVycywgewogICAgLy8gSUUgcmV0dXJucyBjb21tZW50IG5vZGVzIG9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikuCiAgICAvLyBGaWx0ZXIgdGhlbSBvdXQuCiAgICBjb25jYXQ6IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBiW2ldOyBpKyspCiAgICAgICAgaWYgKG5vZGUudGFnTmFtZSAhPT0gIiEiKSBhLnB1c2gobm9kZSk7CiAgICAgIHJldHVybiBhOwogICAgfSwKCiAgICAvLyBJRSBpbXByb3Blcmx5IHNlcmlhbGl6ZXMgX2NvdW50ZWRCeVByb3RvdHlwZSBpbiAoaW5uZXJ8b3V0ZXIpSFRNTC4KICAgIHVubWFyazogZnVuY3Rpb24obm9kZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQogICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdfY291bnRlZEJ5UHJvdG90eXBlJyk7CiAgICAgIHJldHVybiBub2RlczsKICAgIH0KICB9KTsKfQoKZnVuY3Rpb24gJCQoKSB7CiAgcmV0dXJuIFNlbGVjdG9yLmZpbmRDaGlsZEVsZW1lbnRzKGRvY3VtZW50LCAkQShhcmd1bWVudHMpKTsKfQp2YXIgRm9ybSA9IHsKICByZXNldDogZnVuY3Rpb24oZm9ybSkgewogICAgJChmb3JtKS5yZXNldCgpOwogICAgcmV0dXJuIGZvcm07CiAgfSwKCiAgc2VyaWFsaXplRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBvcHRpb25zKSB7CiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7IGhhc2g6ICEhb3B0aW9ucyB9OwogICAgZWxzZSBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKG9wdGlvbnMuaGFzaCkpIG9wdGlvbnMuaGFzaCA9IHRydWU7CiAgICB2YXIga2V5LCB2YWx1ZSwgc3VibWl0dGVkID0gZmFsc2UsIHN1Ym1pdCA9IG9wdGlvbnMuc3VibWl0OwoKICAgIHZhciBkYXRhID0gZWxlbWVudHMuaW5qZWN0KHsgfSwgZnVuY3Rpb24ocmVzdWx0LCBlbGVtZW50KSB7CiAgICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsKICAgICAgICBrZXkgPSBlbGVtZW50Lm5hbWU7IHZhbHVlID0gJChlbGVtZW50KS5nZXRWYWx1ZSgpOwogICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIChlbGVtZW50LnR5cGUgIT0gJ3N1Ym1pdCcgfHwgKCFzdWJtaXR0ZWQgJiYKICAgICAgICAgICAgc3VibWl0ICE9PSBmYWxzZSAmJiAoIXN1Ym1pdCB8fCBrZXkgPT0gc3VibWl0KSAmJiAoc3VibWl0dGVkID0gdHJ1ZSkpKSkgewogICAgICAgICAgaWYgKGtleSBpbiByZXN1bHQpIHsKICAgICAgICAgICAgLy8gYSBrZXkgaXMgYWxyZWFkeSBwcmVzZW50OyBjb25zdHJ1Y3QgYW4gYXJyYXkgb2YgdmFsdWVzCiAgICAgICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkocmVzdWx0W2tleV0pKSByZXN1bHRba2V5XSA9IFtyZXN1bHRba2V5XV07CiAgICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSByZXN1bHRba2V5XSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CgogICAgcmV0dXJuIG9wdGlvbnMuaGFzaCA/IGRhdGEgOiBPYmplY3QudG9RdWVyeVN0cmluZyhkYXRhKTsKICB9Cn07CgpGb3JtLk1ldGhvZHMgPSB7CiAgc2VyaWFsaXplOiBmdW5jdGlvbihmb3JtLCBvcHRpb25zKSB7CiAgICByZXR1cm4gRm9ybS5zZXJpYWxpemVFbGVtZW50cyhGb3JtLmdldEVsZW1lbnRzKGZvcm0pLCBvcHRpb25zKTsKICB9LAoKICBnZXRFbGVtZW50czogZnVuY3Rpb24oZm9ybSkgewogICAgcmV0dXJuICRBKCQoZm9ybSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSkuaW5qZWN0KFtdLAogICAgICBmdW5jdGlvbihlbGVtZW50cywgY2hpbGQpIHsKICAgICAgICBpZiAoRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW2NoaWxkLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0pCiAgICAgICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnRzOwogICAgICB9CiAgICApOwogIH0sCgogIGdldElucHV0czogZnVuY3Rpb24oZm9ybSwgdHlwZU5hbWUsIG5hbWUpIHsKICAgIGZvcm0gPSAkKGZvcm0pOwogICAgdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7CgogICAgaWYgKCF0eXBlTmFtZSAmJiAhbmFtZSkgcmV0dXJuICRBKGlucHV0cykubWFwKEVsZW1lbnQuZXh0ZW5kKTsKCiAgICBmb3IgKHZhciBpID0gMCwgbWF0Y2hpbmdJbnB1dHMgPSBbXSwgbGVuZ3RoID0gaW5wdXRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBpbnB1dCA9IGlucHV0c1tpXTsKICAgICAgaWYgKCh0eXBlTmFtZSAmJiBpbnB1dC50eXBlICE9IHR5cGVOYW1lKSB8fCAobmFtZSAmJiBpbnB1dC5uYW1lICE9IG5hbWUpKQogICAgICAgIGNvbnRpbnVlOwogICAgICBtYXRjaGluZ0lucHV0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGlucHV0KSk7CiAgICB9CgogICAgcmV0dXJuIG1hdGNoaW5nSW5wdXRzOwogIH0sCgogIGRpc2FibGU6IGZ1bmN0aW9uKGZvcm0pIHsKICAgIGZvcm0gPSAkKGZvcm0pOwogICAgRm9ybS5nZXRFbGVtZW50cyhmb3JtKS5pbnZva2UoJ2Rpc2FibGUnKTsKICAgIHJldHVybiBmb3JtOwogIH0sCgogIGVuYWJsZTogZnVuY3Rpb24oZm9ybSkgewogICAgZm9ybSA9ICQoZm9ybSk7CiAgICBGb3JtLmdldEVsZW1lbnRzKGZvcm0pLmludm9rZSgnZW5hYmxlJyk7CiAgICByZXR1cm4gZm9ybTsKICB9LAoKICBmaW5kRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7CiAgICB2YXIgZWxlbWVudHMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCkuZmluZEFsbChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgIHJldHVybiAnaGlkZGVuJyAhPSBlbGVtZW50LnR5cGUgJiYgIWVsZW1lbnQuZGlzYWJsZWQ7CiAgICB9KTsKICAgIHZhciBmaXJzdEJ5SW5kZXggPSBlbGVtZW50cy5maW5kQWxsKGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCd0YWJJbmRleCcpICYmIGVsZW1lbnQudGFiSW5kZXggPj0gMDsKICAgIH0pLnNvcnRCeShmdW5jdGlvbihlbGVtZW50KSB7IHJldHVybiBlbGVtZW50LnRhYkluZGV4IH0pLmZpcnN0KCk7CgogICAgcmV0dXJuIGZpcnN0QnlJbmRleCA/IGZpcnN0QnlJbmRleCA6IGVsZW1lbnRzLmZpbmQoZnVuY3Rpb24oZWxlbWVudCkgewogICAgICByZXR1cm4gWydpbnB1dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnXS5pbmNsdWRlKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKICAgIH0pOwogIH0sCgogIGZvY3VzRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7CiAgICBmb3JtID0gJChmb3JtKTsKICAgIGZvcm0uZmluZEZpcnN0RWxlbWVudCgpLmFjdGl2YXRlKCk7CiAgICByZXR1cm4gZm9ybTsKICB9LAoKICByZXF1ZXN0OiBmdW5jdGlvbihmb3JtLCBvcHRpb25zKSB7CiAgICBmb3JtID0gJChmb3JtKSwgb3B0aW9ucyA9IE9iamVjdC5jbG9uZShvcHRpb25zIHx8IHsgfSk7CgogICAgdmFyIHBhcmFtcyA9IG9wdGlvbnMucGFyYW1ldGVycywgYWN0aW9uID0gZm9ybS5yZWFkQXR0cmlidXRlKCdhY3Rpb24nKSB8fCAnJzsKICAgIGlmIChhY3Rpb24uYmxhbmsoKSkgYWN0aW9uID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICBvcHRpb25zLnBhcmFtZXRlcnMgPSBmb3JtLnNlcmlhbGl6ZSh0cnVlKTsKCiAgICBpZiAocGFyYW1zKSB7CiAgICAgIGlmIChPYmplY3QuaXNTdHJpbmcocGFyYW1zKSkgcGFyYW1zID0gcGFyYW1zLnRvUXVlcnlQYXJhbXMoKTsKICAgICAgT2JqZWN0LmV4dGVuZChvcHRpb25zLnBhcmFtZXRlcnMsIHBhcmFtcyk7CiAgICB9CgogICAgaWYgKGZvcm0uaGFzQXR0cmlidXRlKCdtZXRob2QnKSAmJiAhb3B0aW9ucy5tZXRob2QpCiAgICAgIG9wdGlvbnMubWV0aG9kID0gZm9ybS5tZXRob2Q7CgogICAgcmV0dXJuIG5ldyBBamF4LlJlcXVlc3QoYWN0aW9uLCBvcHRpb25zKTsKICB9Cn07CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCkZvcm0uRWxlbWVudCA9IHsKICBmb2N1czogZnVuY3Rpb24oZWxlbWVudCkgewogICAgJChlbGVtZW50KS5mb2N1cygpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAkKGVsZW1lbnQpLnNlbGVjdCgpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQp9OwoKRm9ybS5FbGVtZW50Lk1ldGhvZHMgPSB7CiAgc2VyaWFsaXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsKICAgICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXRWYWx1ZSgpOwogICAgICBpZiAodmFsdWUgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdmFyIHBhaXIgPSB7IH07CiAgICAgICAgcGFpcltlbGVtZW50Lm5hbWVdID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIE9iamVjdC50b1F1ZXJ5U3RyaW5nKHBhaXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfSwKCiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2RdKGVsZW1lbnQpOwogIH0sCgogIHNldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgbWV0aG9kID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICBGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnNbbWV0aG9kXShlbGVtZW50LCB2YWx1ZSk7CiAgICByZXR1cm4gZWxlbWVudDsKICB9LAoKICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCkgewogICAgJChlbGVtZW50KS52YWx1ZSA9ICcnOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgcHJlc2VudDogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuICQoZWxlbWVudCkudmFsdWUgIT0gJyc7CiAgfSwKCiAgYWN0aXZhdGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdHJ5IHsKICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgICBpZiAoZWxlbWVudC5zZWxlY3QgJiYgKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbnB1dCcgfHwKICAgICAgICAgICFbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXS5pbmNsdWRlKGVsZW1lbnQudHlwZSkpKQogICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7CiAgICB9IGNhdGNoIChlKSB7IH0KICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGRpc2FibGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgZWxlbWVudC5ibHVyKCk7CiAgICBlbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKICAgIHJldHVybiBlbGVtZW50OwogIH0sCgogIGVuYWJsZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBlbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CiAgICByZXR1cm4gZWxlbWVudDsKICB9Cn07CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnZhciBGaWVsZCA9IEZvcm0uRWxlbWVudDsKdmFyICRGID0gRm9ybS5FbGVtZW50Lk1ldGhvZHMuZ2V0VmFsdWU7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCkZvcm0uRWxlbWVudC5TZXJpYWxpemVycyA9IHsKICBpbnB1dDogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIHN3aXRjaCAoZWxlbWVudC50eXBlLnRvTG93ZXJDYXNlKCkpIHsKICAgICAgY2FzZSAnY2hlY2tib3gnOgogICAgICBjYXNlICdyYWRpbyc6CiAgICAgICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVycy5pbnB1dFNlbGVjdG9yKGVsZW1lbnQsIHZhbHVlKTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzLnRleHRhcmVhKGVsZW1lbnQsIHZhbHVlKTsKICAgIH0KICB9LAoKICBpbnB1dFNlbGVjdG9yOiBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewogICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybiBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogbnVsbDsKICAgIGVsc2UgZWxlbWVudC5jaGVja2VkID0gISF2YWx1ZTsKICB9LAoKICB0ZXh0YXJlYTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm4gZWxlbWVudC52YWx1ZTsKICAgIGVsc2UgZWxlbWVudC52YWx1ZSA9IHZhbHVlOwogIH0sCgogIHNlbGVjdDogZnVuY3Rpb24oZWxlbWVudCwgaW5kZXgpIHsKICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoaW5kZXgpKQogICAgICByZXR1cm4gdGhpc1tlbGVtZW50LnR5cGUgPT0gJ3NlbGVjdC1vbmUnID8KICAgICAgICAnc2VsZWN0T25lJyA6ICdzZWxlY3RNYW55J10oZWxlbWVudCk7CiAgICBlbHNlIHsKICAgICAgdmFyIG9wdCwgdmFsdWUsIHNpbmdsZSA9ICFPYmplY3QuaXNBcnJheShpbmRleCk7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtZW50Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3B0ID0gZWxlbWVudC5vcHRpb25zW2ldOwogICAgICAgIHZhbHVlID0gdGhpcy5vcHRpb25WYWx1ZShvcHQpOwogICAgICAgIGlmIChzaW5nbGUpIHsKICAgICAgICAgIGlmICh2YWx1ZSA9PSBpbmRleCkgewogICAgICAgICAgICBvcHQuc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2Ugb3B0LnNlbGVjdGVkID0gaW5kZXguaW5jbHVkZSh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9LAoKICBzZWxlY3RPbmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciBpbmRleCA9IGVsZW1lbnQuc2VsZWN0ZWRJbmRleDsKICAgIHJldHVybiBpbmRleCA+PSAwID8gdGhpcy5vcHRpb25WYWx1ZShlbGVtZW50Lm9wdGlvbnNbaW5kZXhdKSA6IG51bGw7CiAgfSwKCiAgc2VsZWN0TWFueTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgdmFyIHZhbHVlcywgbGVuZ3RoID0gZWxlbWVudC5sZW5ndGg7CiAgICBpZiAoIWxlbmd0aCkgcmV0dXJuIG51bGw7CgogICAgZm9yICh2YXIgaSA9IDAsIHZhbHVlcyA9IFtdOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIG9wdCA9IGVsZW1lbnQub3B0aW9uc1tpXTsKICAgICAgaWYgKG9wdC5zZWxlY3RlZCkgdmFsdWVzLnB1c2godGhpcy5vcHRpb25WYWx1ZShvcHQpKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfSwKCiAgb3B0aW9uVmFsdWU6IGZ1bmN0aW9uKG9wdCkgewogICAgLy8gZXh0ZW5kIGVsZW1lbnQgYmVjYXVzZSBoYXNBdHRyaWJ1dGUgbWF5IG5vdCBiZSBuYXRpdmUKICAgIHJldHVybiBFbGVtZW50LmV4dGVuZChvcHQpLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSA/IG9wdC52YWx1ZSA6IG9wdC50ZXh0OwogIH0KfTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKQWJzdHJhY3QuVGltZWRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZShQZXJpb2RpY2FsRXhlY3V0ZXIsIHsKICBpbml0aWFsaXplOiBmdW5jdGlvbigkc3VwZXIsIGVsZW1lbnQsIGZyZXF1ZW5jeSwgY2FsbGJhY2spIHsKICAgICRzdXBlcihjYWxsYmFjaywgZnJlcXVlbmN5KTsKICAgIHRoaXMuZWxlbWVudCAgID0gJChlbGVtZW50KTsKICAgIHRoaXMubGFzdFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogIH0sCgogIGV4ZWN1dGU6IGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogICAgaWYgKE9iamVjdC5pc1N0cmluZyh0aGlzLmxhc3RWYWx1ZSkgJiYgT2JqZWN0LmlzU3RyaW5nKHZhbHVlKSA/CiAgICAgICAgdGhpcy5sYXN0VmFsdWUgIT0gdmFsdWUgOiBTdHJpbmcodGhpcy5sYXN0VmFsdWUpICE9IFN0cmluZyh2YWx1ZSkpIHsKICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQsIHZhbHVlKTsKICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTsKICAgIH0KICB9Cn0pOwoKRm9ybS5FbGVtZW50Lk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIsIHsKICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gRm9ybS5FbGVtZW50LmdldFZhbHVlKHRoaXMuZWxlbWVudCk7CiAgfQp9KTsKCkZvcm0uT2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuVGltZWRPYnNlcnZlciwgewogIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZSh0aGlzLmVsZW1lbnQpOwogIH0KfSk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCkFic3RyYWN0LkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7CiAgICB0aGlzLmVsZW1lbnQgID0gJChlbGVtZW50KTsKICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKCiAgICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKICAgIGlmICh0aGlzLmVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdmb3JtJykKICAgICAgdGhpcy5yZWdpc3RlckZvcm1DYWxsYmFja3MoKTsKICAgIGVsc2UKICAgICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKHRoaXMuZWxlbWVudCk7CiAgfSwKCiAgb25FbGVtZW50RXZlbnQ6IGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogICAgaWYgKHRoaXMubGFzdFZhbHVlICE9IHZhbHVlKSB7CiAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5lbGVtZW50LCB2YWx1ZSk7CiAgICAgIHRoaXMubGFzdFZhbHVlID0gdmFsdWU7CiAgICB9CiAgfSwKCiAgcmVnaXN0ZXJGb3JtQ2FsbGJhY2tzOiBmdW5jdGlvbigpIHsKICAgIEZvcm0uZ2V0RWxlbWVudHModGhpcy5lbGVtZW50KS5lYWNoKHRoaXMucmVnaXN0ZXJDYWxsYmFjaywgdGhpcyk7CiAgfSwKCiAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQudHlwZSkgewogICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgY2FzZSAnY2hlY2tib3gnOgogICAgICAgIGNhc2UgJ3JhZGlvJzoKICAgICAgICAgIEV2ZW50Lm9ic2VydmUoZWxlbWVudCwgJ2NsaWNrJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRoaXMpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBFdmVudC5vYnNlcnZlKGVsZW1lbnQsICdjaGFuZ2UnLCB0aGlzLm9uRWxlbWVudEV2ZW50LmJpbmQodGhpcykpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9Cn0pOwoKRm9ybS5FbGVtZW50LkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoQWJzdHJhY3QuRXZlbnRPYnNlcnZlciwgewogIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBGb3JtLkVsZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVtZW50KTsKICB9Cn0pOwoKRm9ybS5FdmVudE9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LkV2ZW50T2JzZXJ2ZXIsIHsKICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5lbGVtZW50KTsKICB9Cn0pOwppZiAoIXdpbmRvdy5FdmVudCkgdmFyIEV2ZW50ID0geyB9OwoKT2JqZWN0LmV4dGVuZChFdmVudCwgewogIEtFWV9CQUNLU1BBQ0U6IDgsCiAgS0VZX1RBQjogICAgICAgOSwKICBLRVlfUkVUVVJOOiAgIDEzLAogIEtFWV9FU0M6ICAgICAgMjcsCiAgS0VZX0xFRlQ6ICAgICAzNywKICBLRVlfVVA6ICAgICAgIDM4LAogIEtFWV9SSUdIVDogICAgMzksCiAgS0VZX0RPV046ICAgICA0MCwKICBLRVlfREVMRVRFOiAgIDQ2LAogIEtFWV9IT01FOiAgICAgMzYsCiAgS0VZX0VORDogICAgICAzNSwKICBLRVlfUEFHRVVQOiAgIDMzLAogIEtFWV9QQUdFRE9XTjogMzQsCiAgS0VZX0lOU0VSVDogICA0NSwKCiAgY2FjaGU6IHsgfSwKCiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24oZXZlbnQpIHsKICAgIHZhciBlbGVtZW50OwogICAgc3dpdGNoKGV2ZW50LnR5cGUpIHsKICAgICAgY2FzZSAnbW91c2VvdmVyJzogZWxlbWVudCA9IGV2ZW50LmZyb21FbGVtZW50OyBicmVhazsKICAgICAgY2FzZSAnbW91c2VvdXQnOiAgZWxlbWVudCA9IGV2ZW50LnRvRWxlbWVudDsgICBicmVhazsKICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVudCk7CiAgfQp9KTsKCkV2ZW50Lk1ldGhvZHMgPSAoZnVuY3Rpb24oKSB7CiAgdmFyIGlzQnV0dG9uOwoKICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKICAgIHZhciBidXR0b25NYXAgPSB7IDA6IDEsIDE6IDQsIDI6IDIgfTsKICAgIGlzQnV0dG9uID0gZnVuY3Rpb24oZXZlbnQsIGNvZGUpIHsKICAgICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PSBidXR0b25NYXBbY29kZV07CiAgICB9OwoKICB9IGVsc2UgaWYgKFByb3RvdHlwZS5Ccm93c2VyLldlYktpdCkgewogICAgaXNCdXR0b24gPSBmdW5jdGlvbihldmVudCwgY29kZSkgewogICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICBjYXNlIDA6IHJldHVybiBldmVudC53aGljaCA9PSAxICYmICFldmVudC5tZXRhS2V5OwogICAgICAgIGNhc2UgMTogcmV0dXJuIGV2ZW50LndoaWNoID09IDEgJiYgZXZlbnQubWV0YUtleTsKICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH07CgogIH0gZWxzZSB7CiAgICBpc0J1dHRvbiA9IGZ1bmN0aW9uKGV2ZW50LCBjb2RlKSB7CiAgICAgIHJldHVybiBldmVudC53aGljaCA/IChldmVudC53aGljaCA9PT0gY29kZSArIDEpIDogKGV2ZW50LmJ1dHRvbiA9PT0gY29kZSk7CiAgICB9OwogIH0KCiAgcmV0dXJuIHsKICAgIGlzTGVmdENsaWNrOiAgIGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBpc0J1dHRvbihldmVudCwgMCkgfSwKICAgIGlzTWlkZGxlQ2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBpc0J1dHRvbihldmVudCwgMSkgfSwKICAgIGlzUmlnaHRDbGljazogIGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBpc0J1dHRvbihldmVudCwgMikgfSwKCiAgICBlbGVtZW50OiBmdW5jdGlvbihldmVudCkgewogICAgICB2YXIgbm9kZSA9IEV2ZW50LmV4dGVuZChldmVudCkudGFyZ2V0OwogICAgICByZXR1cm4gRWxlbWVudC5leHRlbmQobm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSA/IG5vZGUucGFyZW50Tm9kZSA6IG5vZGUpOwogICAgfSwKCiAgICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZXZlbnQsIGV4cHJlc3Npb24pIHsKICAgICAgdmFyIGVsZW1lbnQgPSBFdmVudC5lbGVtZW50KGV2ZW50KTsKICAgICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gZWxlbWVudDsKICAgICAgdmFyIGVsZW1lbnRzID0gW2VsZW1lbnRdLmNvbmNhdChlbGVtZW50LmFuY2VzdG9ycygpKTsKICAgICAgcmV0dXJuIFNlbGVjdG9yLmZpbmRFbGVtZW50KGVsZW1lbnRzLCBleHByZXNzaW9uLCAwKTsKICAgIH0sCgogICAgcG9pbnRlcjogZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB4OiBldmVudC5wYWdlWCB8fCAoZXZlbnQuY2xpZW50WCArCiAgICAgICAgICAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSksCiAgICAgICAgeTogZXZlbnQucGFnZVkgfHwgKGV2ZW50LmNsaWVudFkgKwogICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKQogICAgICB9OwogICAgfSwKCiAgICBwb2ludGVyWDogZnVuY3Rpb24oZXZlbnQpIHsgcmV0dXJuIEV2ZW50LnBvaW50ZXIoZXZlbnQpLnggfSwKICAgIHBvaW50ZXJZOiBmdW5jdGlvbihldmVudCkgeyByZXR1cm4gRXZlbnQucG9pbnRlcihldmVudCkueSB9LAoKICAgIHN0b3A6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIEV2ZW50LmV4dGVuZChldmVudCk7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBldmVudC5zdG9wcGVkID0gdHJ1ZTsKICAgIH0KICB9Owp9KSgpOwoKRXZlbnQuZXh0ZW5kID0gKGZ1bmN0aW9uKCkgewogIHZhciBtZXRob2RzID0gT2JqZWN0LmtleXMoRXZlbnQuTWV0aG9kcykuaW5qZWN0KHsgfSwgZnVuY3Rpb24obSwgbmFtZSkgewogICAgbVtuYW1lXSA9IEV2ZW50Lk1ldGhvZHNbbmFtZV0ubWV0aG9kaXplKCk7CiAgICByZXR1cm4gbTsKICB9KTsKCiAgaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CiAgICBPYmplY3QuZXh0ZW5kKG1ldGhvZHMsIHsKICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlIH0sCiAgICAgIHByZXZlbnREZWZhdWx0OiAgZnVuY3Rpb24oKSB7IHRoaXMucmV0dXJuVmFsdWUgPSBmYWxzZSB9LAogICAgICBpbnNwZWN0OiBmdW5jdGlvbigpIHsgcmV0dXJuICJbb2JqZWN0IEV2ZW50XSIgfQogICAgfSk7CgogICAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIGlmICghZXZlbnQpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGV2ZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlKSByZXR1cm4gZXZlbnQ7CgogICAgICBldmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwogICAgICB2YXIgcG9pbnRlciA9IEV2ZW50LnBvaW50ZXIoZXZlbnQpOwogICAgICBPYmplY3QuZXh0ZW5kKGV2ZW50LCB7CiAgICAgICAgdGFyZ2V0OiBldmVudC5zcmNFbGVtZW50LAogICAgICAgIHJlbGF0ZWRUYXJnZXQ6IEV2ZW50LnJlbGF0ZWRUYXJnZXQoZXZlbnQpLAogICAgICAgIHBhZ2VYOiAgcG9pbnRlci54LAogICAgICAgIHBhZ2VZOiAgcG9pbnRlci55CiAgICAgIH0pOwogICAgICByZXR1cm4gT2JqZWN0LmV4dGVuZChldmVudCwgbWV0aG9kcyk7CiAgICB9OwoKICB9IGVsc2UgewogICAgRXZlbnQucHJvdG90eXBlID0gRXZlbnQucHJvdG90eXBlIHx8IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIikuX19wcm90b19fOwogICAgT2JqZWN0LmV4dGVuZChFdmVudC5wcm90b3R5cGUsIG1ldGhvZHMpOwogICAgcmV0dXJuIFByb3RvdHlwZS5LOwogIH0KfSkoKTsKCk9iamVjdC5leHRlbmQoRXZlbnQsIChmdW5jdGlvbigpIHsKICB2YXIgY2FjaGUgPSBFdmVudC5jYWNoZTsKCiAgZnVuY3Rpb24gZ2V0RXZlbnRJRChlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5fcHJvdG90eXBlRXZlbnRJRCkgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SURbMF07CiAgICBhcmd1bWVudHMuY2FsbGVlLmlkID0gYXJndW1lbnRzLmNhbGxlZS5pZCB8fCAxOwogICAgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SUQgPSBbKythcmd1bWVudHMuY2FsbGVlLmlkXTsKICB9CgogIGZ1bmN0aW9uIGdldERPTUV2ZW50TmFtZShldmVudE5hbWUpIHsKICAgIGlmIChldmVudE5hbWUgJiYgZXZlbnROYW1lLmluY2x1ZGUoJzonKSkgcmV0dXJuICJkYXRhYXZhaWxhYmxlIjsKICAgIHJldHVybiBldmVudE5hbWU7CiAgfQoKICBmdW5jdGlvbiBnZXRDYWNoZUZvcklEKGlkKSB7CiAgICByZXR1cm4gY2FjaGVbaWRdID0gY2FjaGVbaWRdIHx8IHsgfTsKICB9CgogIGZ1bmN0aW9uIGdldFdyYXBwZXJzRm9yRXZlbnROYW1lKGlkLCBldmVudE5hbWUpIHsKICAgIHZhciBjID0gZ2V0Q2FjaGVGb3JJRChpZCk7CiAgICByZXR1cm4gY1tldmVudE5hbWVdID0gY1tldmVudE5hbWVdIHx8IFtdOwogIH0KCiAgZnVuY3Rpb24gY3JlYXRlV3JhcHBlcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgIHZhciBpZCA9IGdldEV2ZW50SUQoZWxlbWVudCk7CiAgICB2YXIgYyA9IGdldFdyYXBwZXJzRm9yRXZlbnROYW1lKGlkLCBldmVudE5hbWUpOwogICAgaWYgKGMucGx1Y2soImhhbmRsZXIiKS5pbmNsdWRlKGhhbmRsZXIpKSByZXR1cm4gZmFsc2U7CgogICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICBpZiAoIUV2ZW50IHx8ICFFdmVudC5leHRlbmQgfHwKICAgICAgICAoZXZlbnQuZXZlbnROYW1lICYmIGV2ZW50LmV2ZW50TmFtZSAhPSBldmVudE5hbWUpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50KTsKICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKICAgIH07CgogICAgd3JhcHBlci5oYW5kbGVyID0gaGFuZGxlcjsKICAgIGMucHVzaCh3cmFwcGVyKTsKICAgIHJldHVybiB3cmFwcGVyOwogIH0KCiAgZnVuY3Rpb24gZmluZFdyYXBwZXIoaWQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgdmFyIGMgPSBnZXRXcmFwcGVyc0ZvckV2ZW50TmFtZShpZCwgZXZlbnROYW1lKTsKICAgIHJldHVybiBjLmZpbmQoZnVuY3Rpb24od3JhcHBlcikgeyByZXR1cm4gd3JhcHBlci5oYW5kbGVyID09IGhhbmRsZXIgfSk7CiAgfQoKICBmdW5jdGlvbiBkZXN0cm95V3JhcHBlcihpZCwgZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICB2YXIgYyA9IGdldENhY2hlRm9ySUQoaWQpOwogICAgaWYgKCFjW2V2ZW50TmFtZV0pIHJldHVybiBmYWxzZTsKICAgIGNbZXZlbnROYW1lXSA9IGNbZXZlbnROYW1lXS53aXRob3V0KGZpbmRXcmFwcGVyKGlkLCBldmVudE5hbWUsIGhhbmRsZXIpKTsKICB9CgogIGZ1bmN0aW9uIGRlc3Ryb3lDYWNoZSgpIHsKICAgIGZvciAodmFyIGlkIGluIGNhY2hlKQogICAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gY2FjaGVbaWRdKQogICAgICAgIGNhY2hlW2lkXVtldmVudE5hbWVdID0gbnVsbDsKICB9CgogIGlmICh3aW5kb3cuYXR0YWNoRXZlbnQpIHsKICAgIHdpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLCBkZXN0cm95Q2FjaGUpOwogIH0KCiAgcmV0dXJuIHsKICAgIG9ic2VydmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICAgdmFyIG5hbWUgPSBnZXRET01FdmVudE5hbWUoZXZlbnROYW1lKTsKCiAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlV3JhcHBlcihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICBpZiAoIXdyYXBwZXIpIHJldHVybiBlbGVtZW50OwoKICAgICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwcGVyLCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib24iICsgbmFtZSwgd3JhcHBlcik7CiAgICAgIH0KCiAgICAgIHJldHVybiBlbGVtZW50OwogICAgfSwKCiAgICBzdG9wT2JzZXJ2aW5nOiBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAgIHZhciBpZCA9IGdldEV2ZW50SUQoZWxlbWVudCksIG5hbWUgPSBnZXRET01FdmVudE5hbWUoZXZlbnROYW1lKTsKCiAgICAgIGlmICghaGFuZGxlciAmJiBldmVudE5hbWUpIHsKICAgICAgICBnZXRXcmFwcGVyc0ZvckV2ZW50TmFtZShpZCwgZXZlbnROYW1lKS5lYWNoKGZ1bmN0aW9uKHdyYXBwZXIpIHsKICAgICAgICAgIGVsZW1lbnQuc3RvcE9ic2VydmluZyhldmVudE5hbWUsIHdyYXBwZXIuaGFuZGxlcik7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CgogICAgICB9IGVsc2UgaWYgKCFldmVudE5hbWUpIHsKICAgICAgICBPYmplY3Qua2V5cyhnZXRDYWNoZUZvcklEKGlkKSkuZWFjaChmdW5jdGlvbihldmVudE5hbWUpIHsKICAgICAgICAgIGVsZW1lbnQuc3RvcE9ic2VydmluZyhldmVudE5hbWUpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICB9CgogICAgICB2YXIgd3JhcHBlciA9IGZpbmRXcmFwcGVyKGlkLCBldmVudE5hbWUsIGhhbmRsZXIpOwogICAgICBpZiAoIXdyYXBwZXIpIHJldHVybiBlbGVtZW50OwoKICAgICAgaWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikgewogICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwcGVyLCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgib24iICsgbmFtZSwgd3JhcHBlcik7CiAgICAgIH0KCiAgICAgIGRlc3Ryb3lXcmFwcGVyKGlkLCBldmVudE5hbWUsIGhhbmRsZXIpOwoKICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9LAoKICAgIGZpcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgbWVtbykgewogICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgICAgaWYgKGVsZW1lbnQgPT0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgIWVsZW1lbnQuZGlzcGF0Y2hFdmVudCkKICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwoKICAgICAgdmFyIGV2ZW50OwogICAgICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHsKICAgICAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7CiAgICAgICAgZXZlbnQuaW5pdEV2ZW50KCJkYXRhYXZhaWxhYmxlIiwgdHJ1ZSwgdHJ1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpOwogICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9ICJvbmRhdGFhdmFpbGFibGUiOwogICAgICB9CgogICAgICBldmVudC5ldmVudE5hbWUgPSBldmVudE5hbWU7CiAgICAgIGV2ZW50Lm1lbW8gPSBtZW1vIHx8IHsgfTsKCiAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkgewogICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWxlbWVudC5maXJlRXZlbnQoZXZlbnQuZXZlbnRUeXBlLCBldmVudCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBFdmVudC5leHRlbmQoZXZlbnQpOwogICAgfQogIH07Cn0pKCkpOwoKT2JqZWN0LmV4dGVuZChFdmVudCwgRXZlbnQuTWV0aG9kcyk7CgpFbGVtZW50LmFkZE1ldGhvZHMoewogIGZpcmU6ICAgICAgICAgIEV2ZW50LmZpcmUsCiAgb2JzZXJ2ZTogICAgICAgRXZlbnQub2JzZXJ2ZSwKICBzdG9wT2JzZXJ2aW5nOiBFdmVudC5zdG9wT2JzZXJ2aW5nCn0pOwoKT2JqZWN0LmV4dGVuZChkb2N1bWVudCwgewogIGZpcmU6ICAgICAgICAgIEVsZW1lbnQuTWV0aG9kcy5maXJlLm1ldGhvZGl6ZSgpLAogIG9ic2VydmU6ICAgICAgIEVsZW1lbnQuTWV0aG9kcy5vYnNlcnZlLm1ldGhvZGl6ZSgpLAogIHN0b3BPYnNlcnZpbmc6IEVsZW1lbnQuTWV0aG9kcy5zdG9wT2JzZXJ2aW5nLm1ldGhvZGl6ZSgpLAogIGxvYWRlZDogICAgICAgIGZhbHNlCn0pOwoKKGZ1bmN0aW9uKCkgewogIC8qIFN1cHBvcnQgZm9yIHRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGlzIGJhc2VkIG9uIHdvcmsgYnkgRGFuIFdlYmIsCiAgICAgTWF0dGhpYXMgTWlsbGVyLCBEZWFuIEVkd2FyZHMgYW5kIEpvaG4gUmVzaWcuICovCgogIHZhciB0aW1lcjsKCiAgZnVuY3Rpb24gZmlyZUNvbnRlbnRMb2FkZWRFdmVudCgpIHsKICAgIGlmIChkb2N1bWVudC5sb2FkZWQpIHJldHVybjsKICAgIGlmICh0aW1lcikgd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgZG9jdW1lbnQuZmlyZSgiZG9tOmxvYWRlZCIpOwogICAgZG9jdW1lbnQubG9hZGVkID0gdHJ1ZTsKICB9CgogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7CiAgICAgIHRpbWVyID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgIGlmICgvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGRvY3VtZW50LnJlYWR5U3RhdGUpKQogICAgICAgICAgZmlyZUNvbnRlbnRMb2FkZWRFdmVudCgpOwogICAgICB9LCAwKTsKCiAgICAgIEV2ZW50Lm9ic2VydmUod2luZG93LCAibG9hZCIsIGZpcmVDb250ZW50TG9hZGVkRXZlbnQpOwoKICAgIH0gZWxzZSB7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLAogICAgICAgIGZpcmVDb250ZW50TG9hZGVkRXZlbnQsIGZhbHNlKTsKICAgIH0KCiAgfSBlbHNlIHsKICAgIGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IGlkPV9fb25ET01Db250ZW50TG9hZGVkIGRlZmVyIHNyYz0vLzo+PFwvc2NyaXB0PiIpOwogICAgJCgiX19vbkRPTUNvbnRlbnRMb2FkZWQiKS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSB7CiAgICAgICAgdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOwogICAgICAgIGZpcmVDb250ZW50TG9hZGVkRXZlbnQoKTsKICAgICAgfQogICAgfTsKICB9Cn0pKCk7Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBERVBSRUNBVEVEIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKSGFzaC50b1F1ZXJ5U3RyaW5nID0gT2JqZWN0LnRvUXVlcnlTdHJpbmc7Cgp2YXIgVG9nZ2xlID0geyBkaXNwbGF5OiBFbGVtZW50LnRvZ2dsZSB9OwoKRWxlbWVudC5NZXRob2RzLmNoaWxkT2YgPSBFbGVtZW50Lk1ldGhvZHMuZGVzY2VuZGFudE9mOwoKdmFyIEluc2VydGlvbiA9IHsKICBCZWZvcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7YmVmb3JlOmNvbnRlbnR9KTsKICB9LAoKICBUb3A6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7dG9wOmNvbnRlbnR9KTsKICB9LAoKICBCb3R0b206IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7Ym90dG9tOmNvbnRlbnR9KTsKICB9LAoKICBBZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgewogICAgcmV0dXJuIEVsZW1lbnQuaW5zZXJ0KGVsZW1lbnQsIHthZnRlcjpjb250ZW50fSk7CiAgfQp9OwoKdmFyICRjb250aW51ZSA9IG5ldyBFcnJvcignInRocm93ICRjb250aW51ZSIgaXMgZGVwcmVjYXRlZCwgdXNlICJyZXR1cm4iIGluc3RlYWQnKTsKCi8vIFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIHNjcmlwdC5hY3Vsby51czsgbm90aWNlIHRoZSBkZXByZWNhdGVkIG1ldGhvZHMKLy8gZnVydGhlciBiZWxvdywgdGhhdCBtYXAgdG8gdGhlIG5ld2VyIEVsZW1lbnQgbWV0aG9kcy4KdmFyIFBvc2l0aW9uID0gewogIC8vIHNldCB0byB0cnVlIGlmIG5lZWRlZCwgd2FybmluZzogZmlyZWZveCBwZXJmb3JtYW5jZSBwcm9ibGVtcwogIC8vIE5PVCBuZWVlZGVkIGZvciBwYWdlIHNjcm9sbGluZywgb25seSBpZiBkcmFnZ2FibGUgY29udGFpbmVkIGluCiAgLy8gc2Nyb2xsYWJsZSBlbGVtZW50cwogIGluY2x1ZGVTY3JvbGxPZmZzZXRzOiBmYWxzZSwKCiAgLy8gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgd2l0aGluSW5jbHVkaW5nU2Nyb2xsb2Zmc2V0LCBldmVyeSB0aW1lIHRoZQogIC8vIHBhZ2UgaXMgc2Nyb2xsZWQKICBwcmVwYXJlOiBmdW5jdGlvbigpIHsKICAgIHRoaXMuZGVsdGFYID0gIHdpbmRvdy5wYWdlWE9mZnNldAogICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQKICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdAogICAgICAgICAgICAgICAgfHwgMDsKICAgIHRoaXMuZGVsdGFZID0gIHdpbmRvdy5wYWdlWU9mZnNldAogICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcAogICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AKICAgICAgICAgICAgICAgIHx8IDA7CiAgfSwKCiAgLy8gY2FjaGVzIHgveSBjb29yZGluYXRlIHBhaXIgdG8gdXNlIHdpdGggb3ZlcmxhcAogIHdpdGhpbjogZnVuY3Rpb24oZWxlbWVudCwgeCwgeSkgewogICAgaWYgKHRoaXMuaW5jbHVkZVNjcm9sbE9mZnNldHMpCiAgICAgIHJldHVybiB0aGlzLndpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHMoZWxlbWVudCwgeCwgeSk7CiAgICB0aGlzLnhjb21wID0geDsKICAgIHRoaXMueWNvbXAgPSB5OwogICAgdGhpcy5vZmZzZXQgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CgogICAgcmV0dXJuICh5ID49IHRoaXMub2Zmc2V0WzFdICYmCiAgICAgICAgICAgIHkgPCAgdGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdodCAmJgogICAgICAgICAgICB4ID49IHRoaXMub2Zmc2V0WzBdICYmCiAgICAgICAgICAgIHggPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKTsKICB9LAoKICB3aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXRzOiBmdW5jdGlvbihlbGVtZW50LCB4LCB5KSB7CiAgICB2YXIgb2Zmc2V0Y2FjaGUgPSBFbGVtZW50LmN1bXVsYXRpdmVTY3JvbGxPZmZzZXQoZWxlbWVudCk7CgogICAgdGhpcy54Y29tcCA9IHggKyBvZmZzZXRjYWNoZVswXSAtIHRoaXMuZGVsdGFYOwogICAgdGhpcy55Y29tcCA9IHkgKyBvZmZzZXRjYWNoZVsxXSAtIHRoaXMuZGVsdGFZOwogICAgdGhpcy5vZmZzZXQgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7CgogICAgcmV0dXJuICh0aGlzLnljb21wID49IHRoaXMub2Zmc2V0WzFdICYmCiAgICAgICAgICAgIHRoaXMueWNvbXAgPCAgdGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdodCAmJgogICAgICAgICAgICB0aGlzLnhjb21wID49IHRoaXMub2Zmc2V0WzBdICYmCiAgICAgICAgICAgIHRoaXMueGNvbXAgPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKTsKICB9LAoKICAvLyB3aXRoaW4gbXVzdCBiZSBjYWxsZWQgZGlyZWN0bHkgYmVmb3JlCiAgb3ZlcmxhcDogZnVuY3Rpb24obW9kZSwgZWxlbWVudCkgewogICAgaWYgKCFtb2RlKSByZXR1cm4gMDsKICAgIGlmIChtb2RlID09ICd2ZXJ0aWNhbCcpCiAgICAgIHJldHVybiAoKHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQpIC0gdGhpcy55Y29tcCkgLwogICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0OwogICAgaWYgKG1vZGUgPT0gJ2hvcml6b250YWwnKQogICAgICByZXR1cm4gKCh0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zmc2V0V2lkdGgpIC0gdGhpcy54Y29tcCkgLwogICAgICAgIGVsZW1lbnQub2Zmc2V0V2lkdGg7CiAgfSwKCiAgLy8gRGVwcmVjYXRpb24gbGF5ZXIgLS0gdXNlIG5ld2VyIEVsZW1lbnQgbWV0aG9kcyBub3cgKDEuNS4yKS4KCiAgY3VtdWxhdGl2ZU9mZnNldDogRWxlbWVudC5NZXRob2RzLmN1bXVsYXRpdmVPZmZzZXQsCgogIHBvc2l0aW9uZWRPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5wb3NpdGlvbmVkT2Zmc2V0LAoKICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CiAgICByZXR1cm4gRWxlbWVudC5hYnNvbHV0aXplKGVsZW1lbnQpOwogIH0sCgogIHJlbGF0aXZpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIFBvc2l0aW9uLnByZXBhcmUoKTsKICAgIHJldHVybiBFbGVtZW50LnJlbGF0aXZpemUoZWxlbWVudCk7CiAgfSwKCiAgcmVhbE9mZnNldDogRWxlbWVudC5NZXRob2RzLmN1bXVsYXRpdmVTY3JvbGxPZmZzZXQsCgogIG9mZnNldFBhcmVudDogRWxlbWVudC5NZXRob2RzLmdldE9mZnNldFBhcmVudCwKCiAgcGFnZTogRWxlbWVudC5NZXRob2RzLnZpZXdwb3J0T2Zmc2V0LAoKICBjbG9uZTogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpIHsKICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHsgfTsKICAgIHJldHVybiBFbGVtZW50LmNsb25lUG9zaXRpb24odGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpOwogIH0KfTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24oaW5zdGFuY2VNZXRob2RzKXsKICBmdW5jdGlvbiBpdGVyKG5hbWUpIHsKICAgIHJldHVybiBuYW1lLmJsYW5rKCkgPyBudWxsIDogIltjb250YWlucyhjb25jYXQoJyAnLCBAY2xhc3MsICcgJyksICcgIiArIG5hbWUgKyAiICcpXSI7CiAgfQoKICBpbnN0YW5jZU1ldGhvZHMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGggPwogIGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvU3RyaW5nKCkuc3RyaXAoKTsKICAgIHZhciBjb25kID0gL1xzLy50ZXN0KGNsYXNzTmFtZSkgPyAkdyhjbGFzc05hbWUpLm1hcChpdGVyKS5qb2luKCcnKSA6IGl0ZXIoY2xhc3NOYW1lKTsKICAgIHJldHVybiBjb25kID8gZG9jdW1lbnQuX2dldEVsZW1lbnRzQnlYUGF0aCgnLi8vKicgKyBjb25kLCBlbGVtZW50KSA6IFtdOwogIH0gOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b1N0cmluZygpLnN0cmlwKCk7CiAgICB2YXIgZWxlbWVudHMgPSBbXSwgY2xhc3NOYW1lcyA9ICgvXHMvLnRlc3QoY2xhc3NOYW1lKSA/ICR3KGNsYXNzTmFtZSkgOiBudWxsKTsKICAgIGlmICghY2xhc3NOYW1lcyAmJiAhY2xhc3NOYW1lKSByZXR1cm4gZWxlbWVudHM7CgogICAgdmFyIG5vZGVzID0gJChlbGVtZW50KS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOwogICAgY2xhc3NOYW1lID0gJyAnICsgY2xhc3NOYW1lICsgJyAnOwoKICAgIGZvciAodmFyIGkgPSAwLCBjaGlsZCwgY247IGNoaWxkID0gbm9kZXNbaV07IGkrKykgewogICAgICBpZiAoY2hpbGQuY2xhc3NOYW1lICYmIChjbiA9ICcgJyArIGNoaWxkLmNsYXNzTmFtZSArICcgJykgJiYgKGNuLmluY2x1ZGUoY2xhc3NOYW1lKSB8fAogICAgICAgICAgKGNsYXNzTmFtZXMgJiYgY2xhc3NOYW1lcy5hbGwoZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICByZXR1cm4gIW5hbWUudG9TdHJpbmcoKS5ibGFuaygpICYmIGNuLmluY2x1ZGUoJyAnICsgbmFtZSArICcgJyk7CiAgICAgICAgICB9KSkpKQogICAgICAgIGVsZW1lbnRzLnB1c2goRWxlbWVudC5leHRlbmQoY2hpbGQpKTsKICAgIH0KICAgIHJldHVybiBlbGVtZW50czsKICB9OwoKICByZXR1cm4gZnVuY3Rpb24oY2xhc3NOYW1lLCBwYXJlbnRFbGVtZW50KSB7CiAgICByZXR1cm4gJChwYXJlbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTsKICB9Owp9KEVsZW1lbnQuTWV0aG9kcyk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCkVsZW1lbnQuQ2xhc3NOYW1lcyA9IENsYXNzLmNyZWF0ZSgpOwpFbGVtZW50LkNsYXNzTmFtZXMucHJvdG90eXBlID0gewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgfSwKCiAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lLnNwbGl0KC9ccysvKS5zZWxlY3QoZnVuY3Rpb24obmFtZSkgewogICAgICByZXR1cm4gbmFtZS5sZW5ndGggPiAwOwogICAgfSkuX2VhY2goaXRlcmF0b3IpOwogIH0sCgogIHNldDogZnVuY3Rpb24oY2xhc3NOYW1lKSB7CiAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogIH0sCgogIGFkZDogZnVuY3Rpb24oY2xhc3NOYW1lVG9BZGQpIHsKICAgIGlmICh0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9BZGQpKSByZXR1cm47CiAgICB0aGlzLnNldCgkQSh0aGlzKS5jb25jYXQoY2xhc3NOYW1lVG9BZGQpLmpvaW4oJyAnKSk7CiAgfSwKCiAgcmVtb3ZlOiBmdW5jdGlvbihjbGFzc05hbWVUb1JlbW92ZSkgewogICAgaWYgKCF0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9SZW1vdmUpKSByZXR1cm47CiAgICB0aGlzLnNldCgkQSh0aGlzKS53aXRob3V0KGNsYXNzTmFtZVRvUmVtb3ZlKS5qb2luKCcgJykpOwogIH0sCgogIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiAkQSh0aGlzKS5qb2luKCcgJyk7CiAgfQp9OwoKT2JqZWN0LmV4dGVuZChFbGVtZW50LkNsYXNzTmFtZXMucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKRWxlbWVudC5hZGRNZXRob2RzKCk7]]></data>
	</file>
	<file>
	  <filename>/templates/lightbox/js/scriptaculous.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gc2NyaXB0LmFjdWxvLnVzIHNjcmlwdGFjdWxvdXMuanMgdjEuOC4xLCBUaHUgSmFuIDAzIDIyOjA3OjEyIC0wNTAwIDIwMDgKCi8vIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cywgaHR0cDovL21pci5hY3Vsby51cykKLy8gCi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwovLyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKLy8gIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwovLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwovLyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLy8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgovLyAKLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLy8gaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi8vCi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAovLyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLy8gTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQovLyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCi8vIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgovLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLy8KLy8gRm9yIGRldGFpbHMsIHNlZSB0aGUgc2NyaXB0LmFjdWxvLnVzIHdlYiBzaXRlOiBodHRwOi8vc2NyaXB0LmFjdWxvLnVzLwoKdmFyIFNjcmlwdGFjdWxvdXMgPSB7CiAgVmVyc2lvbjogJzEuOC4xJywKICByZXF1aXJlOiBmdW5jdGlvbihsaWJyYXJ5TmFtZSkgewogICAgLy8gaW5zZXJ0aW5nIHZpYSBET00gZmFpbHMgaW4gU2FmYXJpIDIuMCwgc28gYnJ1dGUgZm9yY2UgYXBwcm9hY2gKICAgIGRvY3VtZW50LndyaXRlKCc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInK2xpYnJhcnlOYW1lKyciPjxcL3NjcmlwdD4nKTsKICB9LAogIFJFUVVJUkVEX1BST1RPVFlQRTogJzEuNi4wJywKICBsb2FkOiBmdW5jdGlvbigpIHsKICAgIGZ1bmN0aW9uIGNvbnZlcnRWZXJzaW9uU3RyaW5nKHZlcnNpb25TdHJpbmcpewogICAgICB2YXIgciA9IHZlcnNpb25TdHJpbmcuc3BsaXQoJy4nKTsKICAgICAgcmV0dXJuIHBhcnNlSW50KHJbMF0pKjEwMDAwMCArIHBhcnNlSW50KHJbMV0pKjEwMDAgKyBwYXJzZUludChyWzJdKTsKICAgIH0KIAogICAgaWYoKHR5cGVvZiBQcm90b3R5cGU9PSd1bmRlZmluZWQnKSB8fCAKICAgICAgICh0eXBlb2YgRWxlbWVudCA9PSAndW5kZWZpbmVkJykgfHwgCiAgICAgICAodHlwZW9mIEVsZW1lbnQuTWV0aG9kcz09J3VuZGVmaW5lZCcpIHx8CiAgICAgICAoY29udmVydFZlcnNpb25TdHJpbmcoUHJvdG90eXBlLlZlcnNpb24pIDwgCiAgICAgICAgY29udmVydFZlcnNpb25TdHJpbmcoU2NyaXB0YWN1bG91cy5SRVFVSVJFRF9QUk9UT1RZUEUpKSkKICAgICAgIHRocm93KCJzY3JpcHQuYWN1bG8udXMgcmVxdWlyZXMgdGhlIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yayA+PSAiICsKICAgICAgICBTY3JpcHRhY3Vsb3VzLlJFUVVJUkVEX1BST1RPVFlQRSk7CiAgICAKICAgICRBKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSkuZmluZEFsbCggZnVuY3Rpb24ocykgewogICAgICByZXR1cm4gKHMuc3JjICYmIHMuc3JjLm1hdGNoKC9zY3JpcHRhY3Vsb3VzXC5qcyhcPy4qKT8kLykpCiAgICB9KS5lYWNoKCBmdW5jdGlvbihzKSB7CiAgICAgIHZhciBwYXRoID0gcy5zcmMucmVwbGFjZSgvc2NyaXB0YWN1bG91c1wuanMoXD8uKik/JC8sJycpOwogICAgICB2YXIgaW5jbHVkZXMgPSBzLnNyYy5tYXRjaCgvXD8uKmxvYWQ9KFthLXosXSopLyk7CiAgICAgIChpbmNsdWRlcyA/IGluY2x1ZGVzWzFdIDogJ2J1aWxkZXIsZWZmZWN0cyxkcmFnZHJvcCxjb250cm9scyxzbGlkZXIsc291bmQnKS5zcGxpdCgnLCcpLmVhY2goCiAgICAgICBmdW5jdGlvbihpbmNsdWRlKSB7IFNjcmlwdGFjdWxvdXMucmVxdWlyZShwYXRoK2luY2x1ZGUrJy5qcycpIH0pOwogICAgfSk7CiAgfQp9CgpTY3JpcHRhY3Vsb3VzLmxvYWQoKTs=]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/slimbox/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/slimbox/css/closelabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODdhQgAWAO4AAP7+/v///3p6etvb28DAwMHBwZ2dnVlZWdLS0oODg6+vr/X19eTk5IyMjLi4uFBQUJSUlFRUVFZWVtzc3MnJyVJSUlhYWFFRUVNTU+zs7FVVVf39/erq6vb29szMzN3d3Xt7e2BgYFdXV6Kiovr6+qampk9PT0xMTPf392ZmZl9fX+Dg4EtLS97e3qGhofz8/PDw8Ovr6/v7+7W1tWxsbJWVlXh4eMrKys3NzXl5efHx8WRkZFpaWufn5+/v77Ozs7GxsePj44eHh2lpaU5OTnNzc01NTZaWlmdnZ3x8fOXl5WNjY5KSkqmpqYiIiN/f37m5ubS0tHBwcIaGhmVlZe3t7XZ2dm1tbZiYmJeXl25ubm9vb46OjtXV1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAQgAWAAAH/4ABgoOEhYaHiImKi4yNjo+MAJKTlJWWl5eQAS+NmJ6fmJGSATJYXQGWAR4GJKigr6CiAChZJzsfrgCCOConRx2UGQMMsAAMw5cLAwO6i6M/LAcYVAOuqiERBydNkggNAuANCAAEAsyVBAngAgkElA7rCTcBBevrg6McAiYHD0hPgjyowHCAyBQYACgIaEBhAIUECsiZq6RAAAQEAxBAEBBRooKMJTrQ41igZAF8+UA8OBCBxgoc2A4YEYICVYIECybllHhOEgMBBioZmDiUkqB6Ew4ZzQCCn4Yr2Cw8cCISwAAB7iyV68mz0lUHACo62HlUQFJDlQLESFLhgAQRB/8qcKkpaeslu5OKWgIKIIM6ASUYlK1hoLADlEZhWNFwwEKEEa0m4UU3Ma+AS3wBLCDwzexIwoYRTwrgYwtjlhB0TUKA9W5lSfDGUWKdVTLHkWcLpV1RJJsGCXFdbHC14OZOYzknW81smZjmSUBxKx3dgsYFaUNSSLBQYcRwSQoZOkzQYDNHAuiZVbyYcSPYsOxLCDhZT4HJAlUEUU9x/YGNIDdIsN0FwrniTTzjlGNPVums00BtDYJz2Ej2eGbNBylUwMMDIHAgCBQCWnDBCC9Qcoxzr5x4yTI5RRLABEus5F8MqAgywwUiiMBCFMX0mIozAegAQQUmCOChUTNg8IAwFB/46OQozugiAxM5ZJALlEBoocSVT8IiSwAkVHXJBj1w2eUrsjTjiX5n+phmj4EAADs=]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/css/loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhHwAfANUAAP///5qamiYmJuTk5Ly8vMzMzKqqqrCwsKKioujo6NTU1Pb29qioqKCgoK6urtLS0tzc3NjY2Li4uObm5nBwcMbGxmhoaEZGRkhISDIyMvj4+Pr6+lBQUDY2NsTExFZWVpKSkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAHwAfAAAG/0CAcEhMPAgOBKDDoQQKxKh0CJEErleAYLu1HDRT6YCALWu5XEolPIwYymY0GmNgAxrwuJybCUcaAHlYZ3sCdxFRA28BgVgHBQMLAAkeIB9ojQYDRGSDAQwKYRsIF4ZlBFR5AJt2a3kQQlZlDBN2QxMMcBKTeaG2Qwp5RnAHv1EHcEdwUMZDBXBIcKzNq3BJcJLUAAtwStrNCNjf3GUIDtLfA9adWMzUz6cPxN/IZQ8JvdTBcAkAsli0jOHSJQSCqmlhNr0awo7RJ19TFORqdAXVEEVZyjyKtG1AgXoZA2iK8oeiKkFZGiCaggelSTiA2LhxidLASjZjBL2siNBOFQ84LyXA+mYEiRJzBO7ZCQIAIfkEAQoAIQAsEAAAAA8ADwAABldAhIPwSISOyGRguZRAAEkkc0oYREPTqSESzU4bXe8ylDEgF4PCYRoSCDCVKEDBCLTdAormasXjD1chFRd+AhaBIQiFAgWBGx+FdoEghRSIHoUciAmFHUEAIfkEAQoAIQAsFgAFAAkAFQAABlnAkDDUiAyHgYBhcEwmCQCh0wkJTRjTgESoyAYSIcAh+xAWsgThIOsQLrKIo1yYENjtHaHnbucIQXwCFCEbH4EBIQiBAgUVF4EWQosHQ3wUGkd2GBVzGQZDQQAh+QQBCgAhACwQABAADwAPAAAGWcCQcChcBI5HBJE4QB4dy2HBGSBEQ4AD9XFVUAOJ6IRBlUQroS+EuEFcBGkkARBKeEAfgR5+NAyEe4F6IQ0RQ4KBGUuIehgGi4gUaJB7FgcaVx0cFAEFV0NBACH5BAEKACEALAUAFgAVAAkAAAZUwJAwVBkajYOjUHBBbJQhgIIROAqugg/IkwgtBoVDYFxdYs+CEHk9DmXQZzWb3DBg4Ff53BAhUvB6awRJQhoHFmiBARIQAFAFARQcHSEIDgQPXUZBACH5BAEKACEALAAAEAAPAA8AAAZZwI5gOEyEjsgjhzj0JJMUpgD0RAakn001VJAKENuQRXqpbA/e0KCqiRJDAYYC8KxghvCA/lAYLJAGGXl6hHpPDYWJTxEGiYRVAwSOAVsAEBKKYSEJDwQOCEEAIfkEAQoAIQAsAAAFAAkAFQAABlnAkNCQERpDFYxAcNRQlkvjAQoVWqiCS6WAFSBCAexnE3pSQUIO1iPsYBPHuBARqNcXQoe9PhAS9gEFQg+ABwAhCYABCkISgAwTIRCKQgB/dkcDBnVyEQ1HQQAh+QQBCgAhACwAAAAADwAPAAAGWMCQcEgsBCicDnGoOVgEUOgyVKFEr0sD5oolZrjdUKQRAkeFA0MgUI5+QJ5ECEBYr8sXxIYIsdupUxJ+AQwTUwmDAQpTIQ+DBwCMdX4FjCEOgwOWCIMLlkEAOw==]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/css/nextlabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAMQcAHp6eqqqqs7OzmFhYfPz89DQ0MLCwtvb221tbZ6enpycnFVVVYaGhra2tufn59bW1oeHh8/Pz76+vvr6+sHBwZKSkvn5+d/f383NzXJycklJSf///zMzMwAAAAAAAAAAACH5BAEAABwALAAAAAA/ACAAAAXfIMdtZGmeaKquLDq2cCzPdG3feK7vfO//wKBwSCwaj8igRsMwATSk53IJ2DA0gVJAU9lOpwIfuPSMYgPoxoYw0Bw2jsWAIFAoMhqI3SFuz82AKAIaVU9hWhqHP4RbCYFlKQlMGo4mW4piVQiJG5BPAKAAaiRsGn+WnECEGwemBJ6EoaOsY6iYPasbjbAqCAsHcgS2SlUkmwtQncknW1mNw6rFtEtmaNa0CCWbipfEqMlSXwTbJYOn3Unp6ukTEQXv8O8YF+stFhQG+fr5Eg/1/wADChxIsOCLgjBEIIQRAgA7]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/css/prevlabel.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAMQaALGxsYSEhNLS0v39/WJiYm1tbenp6dzc3MfHx7q6upqamo+Pj6Wlpby8vN3d3Xl5efT09OXl5bu7u9ra2v7+/ra2tvv7+8zMzFdXV////zMzMwAAAAAAAAAAAAAAAAAAACH5BAEAABoALAAAAAA/ACAAAAXwYCaOZGmeaKqamra+cPy6cm3feK7vfO//wKBwSCwaj8jkDoBpYh4IkbO5cGQE06ZAgWmQGhhAkKkAMAgYQwZTAJgJhCsm4HYbHE9SID3GCEQIYWsBIwx+WGIlD3wZBhgLQkx/GYFicyMLaYgmYIlMUX1lZ3wYBAEBBZdYBaenIhAEBSIFspFOpqClAWgAEHKsrSNcDpVDkiaXZCKbJngMXGq2kySXGalqzCYPqZDGfsiEcoRYdHXTYBig0uCYh1mCr7FK8/T1IhETB/r7+gP2KxcqJBhIMIEEC/9UUBjAsGHDhBAjSpxIseIQGhZTtAgBADs=]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/css/slimbox2.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogU0xJTUJPWCAqLwoKI2xiT3ZlcmxheSB7Cglwb3NpdGlvbjogZml4ZWQ7Cgl6LWluZGV4OiA5OTk5OwoJbGVmdDogMDsKCXRvcDogMDsKCXdpZHRoOiAxMDAlOwoJaGVpZ2h0OiAxMDAlOwoJYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKCWN1cnNvcjogcG9pbnRlcjsKfQoKI2xiQ2VudGVyLCAjbGJCb3R0b21Db250YWluZXIgewoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDogOTk5OTsKCW92ZXJmbG93OiBoaWRkZW47CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9CgoubGJMb2FkaW5nIHsKCWJhY2tncm91bmQ6ICNmZmYgdXJsKGxvYWRpbmcuZ2lmKSBuby1yZXBlYXQgY2VudGVyOwp9CgojbGJJbWFnZSB7Cglwb3NpdGlvbjogYWJzb2x1dGU7CglsZWZ0OiAwOwoJdG9wOiAwOwoJYm9yZGVyOiAxMHB4IHNvbGlkICNmZmY7CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Owp9CgojbGJQcmV2TGluaywgI2xiTmV4dExpbmsgewoJZGlzcGxheTogYmxvY2s7Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IDA7Cgl3aWR0aDogNTAlOwoJb3V0bGluZTogbm9uZTsKfQoKI2xiUHJldkxpbmsgewoJbGVmdDogMDsKfQoKI2xiUHJldkxpbms6aG92ZXIgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKHByZXZsYWJlbC5naWYpIG5vLXJlcGVhdCAwIDE1JTsKfQoKI2xiTmV4dExpbmsgewoJcmlnaHQ6IDA7Cn0KCiNsYk5leHRMaW5rOmhvdmVyIHsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybChuZXh0bGFiZWwuZ2lmKSBuby1yZXBlYXQgMTAwJSAxNSU7Cn0KCiNsYkJvdHRvbSB7Cglmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEdlbmV2YSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwoJZm9udC1zaXplOiAxMHB4OwoJY29sb3I6ICM2NjY7CglsaW5lLWhlaWdodDogMS40ZW07Cgl0ZXh0LWFsaWduOiBsZWZ0OwoJYm9yZGVyOiAxMHB4IHNvbGlkICNmZmY7Cglib3JkZXItdG9wLXN0eWxlOiBub25lOwp9CgojbGJDbG9zZUxpbmsgewoJZGlzcGxheTogYmxvY2s7CglmbG9hdDogcmlnaHQ7Cgl3aWR0aDogNjZweDsKCWhlaWdodDogMjJweDsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybChjbG9zZWxhYmVsLmdpZikgbm8tcmVwZWF0IGNlbnRlcjsKCW1hcmdpbjogNXB4IDA7CglvdXRsaW5lOiBub25lOwp9CgojbGJDYXB0aW9uLCAjbGJOdW1iZXIgewoJbWFyZ2luLXJpZ2h0OiA3MXB4Owp9CgojbGJDYXB0aW9uIHsKCWZvbnQtd2VpZ2h0OiBib2xkOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/example.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+U2xpbWJveCAyIGV4YW1wbGUgcGFnZTwvdGl0bGU+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL3NsaW1ib3gyLmpzIj48L3NjcmlwdD4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NsaW1ib3gyLmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iIC8+Cgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJCWJvZHkgewoJCQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwoJCQlmb250LWZhbWlseTogYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsKCQkJY29sb3I6ICMwMDA7CgkJfQoJCWgxLCBwIHsKCQkJdGV4dC1hbGlnbjogY2VudGVyOwoJCX0KCQlwIHsKCQkJbWFyZ2luLXRvcDogMTAwcHg7CgkJfQoJCWEgewoJCQlmb250LXdlaWdodDogYm9sZDsKCQkJY29sb3I6ICNmMDA7CgkJfQoJPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCTxoMT5TbGltYm94IDIgZXhhbXBsZSBwYWdlPC9oMT4KCTxwPgoJCTxhIGhyZWY9ImV4YW1wbGUuanBnIiByZWw9ImxpZ2h0Ym94IiB0aXRsZT0iQmVhdXRpZnVsLCBpc24ndCBpdD8iPkNsaWNrIGhlcmU8L2E+IHRvIHZpZXcgYSBwaWN0dXJlIGluc2lkZSBTbGltYm94LgoJPC9wPgo8L2JvZHk+CjwvaHRtbD4=]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/example.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/extra/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/slimbox/extra/autoactivation.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKCVdpdGggdGhlIGZvbGxvd2luZyBjb2RlLCBTbGltYm94IHdpbGwgYWN0aXZhdGUgaXRzZWxmIGF1dG9tYXRpY2FsbHkgb24gYWxsIGxpbmtzIHBvaW50aW5nIHRvIGltYWdlcywKCW9yIG1vcmUgc3BlY2lmaWNhbGx5IGFsbCBsaW5rcyBoYXZpbmcgVVJMcyBlbmRpbmcgd2l0aDogIi5qcGciIG9yICIucG5nIiBvciAiLmdpZiIuCglBcyBhIHJlc3VsdCwgeW91IHdpbGwgbm90IG5lZWQgdG8gc2V0IHRoZSByZWw9ImxpZ2h0Ym94IiBhdHRyaWJ1dGUgb24gYW55IGxpbmsgdG8gYWN0aXZhdGUgU2xpbWJveC4KCUZ1cnRoZXJtb3JlLCBhbGwgaW1hZ2UgbGlua3MgY29udGFpbmVkIGluIHRoZSBzYW1lIGJsb2NrIG9yIHBhcmFncmFwaCAoaGF2aW5nIHRoZSBzYW1lIHBhcmVudCBlbGVtZW50KQoJd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gYSBnYWxsZXJ5LCBzbyB5b3Ugd2lsbCBub3QgbmVlZCB0byBzcGVjaWZ5IGdyb3VwcyBlaXRoZXIuCglJbWFnZXMgdGhhdCBhcmUgYWxvbmUgaW4gdGhlaXIgYmxvY2sgb3IgcGFyYWdyYXBoIHdpbGwgYmUgZGlzcGxheWVkIGluZGl2aWR1YWxseS4KCglSZXBsYWNlIHRoZSBkZWZhdWx0IGF1dG9sb2FkIGNvZGUgYmxvY2sgd2l0aCB0aGlzIG9uZS4KKi8KCmpRdWVyeShmdW5jdGlvbigkKSB7CgkkKCJhW2hyZWZdIikuZmlsdGVyKGZ1bmN0aW9uKCkgewoJCXJldHVybiAvXC4oanBnfHBuZ3xnaWYpJC9pLnRlc3QodGhpcy5ocmVmKTsKCX0pLnNsaW1ib3goe30sIG51bGwsIGZ1bmN0aW9uKGVsKSB7CgkJcmV0dXJuICh0aGlzID09IGVsKSB8fCAodGhpcy5wYXJlbnROb2RlICYmICh0aGlzLnBhcmVudE5vZGUgPT0gZWwucGFyZW50Tm9kZSkpOwoJfSk7Cn0pOw==]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/extra/flickr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKCVRoaXMgY29kZSBhdXRvbWF0aWNhbGx5IGludGVncmF0ZXMgRmxpY2tyIHRodW1ibmFpbHMgd2l0aCBTbGltYm94LgoJSXQgd2lsbCBzY2FuIGZvciBhbGwgbGlua3MgYXJvdW5kIHRodW1ibmFpbCBpbWFnZXMgcG9pbnRpbmcgdG8gRmxpY2tyIHBob3RvIFBBR0VTLgoJTm90ZSB0aGF0IHlvdSBkb24ndCBuZWVkIHRvIGFkZCByZWw9ImxpZ2h0Ym94IiB0byB0aGVzZSBsaW5rcy4KCVdoZW4gY2xpY2tpbmcgb24gYSBGbGlja3IgdGh1bWJuYWlsLCBTbGltYm94IHdpbGwgb3BlbiBhbmQgZGlzcGxheSB0aGUgbWVkaXVtLXNpemVkIGltYWdlLgoJVGhlIHRpdGxlIGF0dHJpYnV0ZSBvZiB0aGUgbGluayAob3IgdGhlIGFsdCBhdHRyaWJ1dGUgb2YgdGhlIHRodW1ibmFpbCBpZiBub3QgYXZhaWxhYmxlKSB3aWxsIGJlIHVzZWQKCWFzIGRlc2NyaXB0aW9uIHRleHQsIGFuZCBhIGxpbmsgdG8gdGhlIEZsaWNrciBwaG90byBwYWdlIHdpbGwgYmUgYWRkZWQgdW5kZXIgdGhlIGRlc2NyaXB0aW9uLgoKCUFkZCB0aGUgZm9sbG93aW5nIGNvZGUgdG8gdGhlIGF1dG9sb2FkIGNvZGUgYmxvY2suCiovCgpqUXVlcnkoZnVuY3Rpb24oJCkgewoJJCgiYVtocmVmXj0naHR0cDovL3d3dy5mbGlja3IuY29tL3Bob3Rvcy8nXSA+IGltZzpmaXJzdC1jaGlsZFtzcmNdIikucGFyZW50KCkuc2xpbWJveCh7fSwgZnVuY3Rpb24oZWwpIHsKCQlyZXR1cm4gW2VsLmZpcnN0Q2hpbGQuc3JjLnJlcGxhY2UoL19bbXRzXVwuKFx3KykkLywgIi4kMSIpLAoJCQkoZWwudGl0bGUgfHwgZWwuZmlyc3RDaGlsZC5hbHQpICsgJzxiciAvPjxhIGhyZWY9IicgKyBlbC5ocmVmICsgJyI+RmxpY2tyIHBhZ2U8L2E+J107Cgl9KTsKfSk7]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/extra/picasaweb.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKCVRoaXMgY29kZSBhdXRvbWF0aWNhbGx5IGludGVncmF0ZXMgUGljYXNhIFdlYiBBbGJ1bXMgdGh1bWJuYWlscyB3aXRoIFNsaW1ib3guCglJdCB3aWxsIHNjYW4gZm9yIGFsbCBsaW5rcyBhcm91bmQgdGh1bWJuYWlsIGltYWdlcyBwb2ludGluZyB0byBQaWNhc2EgV2ViIEFsYnVtcyBwaG90byBQQUdFUy4KCU5vdGUgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBhZGQgcmVsPSJsaWdodGJveCIgdG8gdGhlc2UgbGlua3MuCglXaGVuIGNsaWNraW5nIG9uIGEgUGljYXNhIFdlYiBBbGJ1bXMgdGh1bWJuYWlsLCBTbGltYm94IHdpbGwgb3BlbiBhbmQgZGlzcGxheSB0aGUgbWVkaXVtLXNpemVkIGltYWdlLgoJVGhlIHRpdGxlIGF0dHJpYnV0ZSBvZiB0aGUgbGluayAob3IgdGhlIGFsdCBhdHRyaWJ1dGUgb2YgdGhlIHRodW1ibmFpbCBpZiBub3QgYXZhaWxhYmxlKSB3aWxsIGJlIHVzZWQKCWFzIGRlc2NyaXB0aW9uIHRleHQsIGFuZCBhIGxpbmsgdG8gdGhlIFBpY2FzYSBXZWIgQWxidW1zIHBob3RvIHBhZ2Ugd2lsbCBiZSBhZGRlZCB1bmRlciB0aGUgZGVzY3JpcHRpb24uCgoJQWRkIHRoZSBmb2xsb3dpbmcgY29kZSB0byB0aGUgYXV0b2xvYWQgY29kZSBibG9jay4KKi8KCmpRdWVyeShmdW5jdGlvbigkKSB7CgkkKCJhW2hyZWZePSdodHRwOi8vcGljYXNhd2ViLmdvb2dsZS4nXSA+IGltZzpmaXJzdC1jaGlsZFtzcmNdIikucGFyZW50KCkuc2xpbWJveCh7fSwgZnVuY3Rpb24oZWwpIHsKCQlyZXR1cm4gW2VsLmZpcnN0Q2hpbGQuc3JjLnJlcGxhY2UoL1wvc1xkKyg/OlwtYyk/XC8oW15cL10rKSQvLCAiL3M1MTIvJDEiKSwKCQkJKGVsLnRpdGxlIHx8IGVsLmZpcnN0Q2hpbGQuYWx0KSArICc8YnIgLz48YSBocmVmPSInICsgZWwuaHJlZiArICciPlBpY2FzYSBXZWIgQWxidW1zIHBhZ2U8L2E+J107Cgl9KTsKfSk7]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/slimbox/js/jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS4zLjIKICogaHR0cDovL2pxdWVyeS5jb20vCiAqCiAqIENvcHlyaWdodCAoYykgMjAwOSBKb2huIFJlc2lnCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzLgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL0xpY2Vuc2UKICoKICogRGF0ZTogMjAwOS0wMi0xOSAxNzozNDoyMSAtMDUwMCAoVGh1LCAxOSBGZWIgMjAwOSkKICogUmV2aXNpb246IDYyNDYKICovCihmdW5jdGlvbigpe3ZhciBsPXRoaXMsZyx5PWwualF1ZXJ5LHA9bC4kLG89bC5qUXVlcnk9bC4kPWZ1bmN0aW9uKEUsRil7cmV0dXJuIG5ldyBvLmZuLmluaXQoRSxGKX0sRD0vXltePF0qKDwoLnxccykrPilbXj5dKiR8XiMoW1x3LV0rKSQvLGY9L14uW146I1xbXC4sXSokLztvLmZuPW8ucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKEUsSCl7RT1FfHxkb2N1bWVudDtpZihFLm5vZGVUeXBlKXt0aGlzWzBdPUU7dGhpcy5sZW5ndGg9MTt0aGlzLmNvbnRleHQ9RTtyZXR1cm4gdGhpc31pZih0eXBlb2YgRT09PSJzdHJpbmciKXt2YXIgRz1ELmV4ZWMoRSk7aWYoRyYmKEdbMV18fCFIKSl7aWYoR1sxXSl7RT1vLmNsZWFuKFtHWzFdXSxIKX1lbHNle3ZhciBJPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEdbM10pO2lmKEkmJkkuaWQhPUdbM10pe3JldHVybiBvKCkuZmluZChFKX12YXIgRj1vKEl8fFtdKTtGLmNvbnRleHQ9ZG9jdW1lbnQ7Ri5zZWxlY3Rvcj1FO3JldHVybiBGfX1lbHNle3JldHVybiBvKEgpLmZpbmQoRSl9fWVsc2V7aWYoby5pc0Z1bmN0aW9uKEUpKXtyZXR1cm4gbyhkb2N1bWVudCkucmVhZHkoRSl9fWlmKEUuc2VsZWN0b3ImJkUuY29udGV4dCl7dGhpcy5zZWxlY3Rvcj1FLnNlbGVjdG9yO3RoaXMuY29udGV4dD1FLmNvbnRleHR9cmV0dXJuIHRoaXMuc2V0QXJyYXkoby5pc0FycmF5KEUpP0U6by5tYWtlQXJyYXkoRSkpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuMy4yIixzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxnZXQ6ZnVuY3Rpb24oRSl7cmV0dXJuIEU9PT1nP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMpOnRoaXNbRV19LHB1c2hTdGFjazpmdW5jdGlvbihGLEgsRSl7dmFyIEc9byhGKTtHLnByZXZPYmplY3Q9dGhpcztHLmNvbnRleHQ9dGhpcy5jb250ZXh0O2lmKEg9PT0iZmluZCIpe0cuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK0V9ZWxzZXtpZihIKXtHLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK0grIigiK0UrIikifX1yZXR1cm4gR30sc2V0QXJyYXk6ZnVuY3Rpb24oRSl7dGhpcy5sZW5ndGg9MDtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLEUpO3JldHVybiB0aGlzfSxlYWNoOmZ1bmN0aW9uKEYsRSl7cmV0dXJuIG8uZWFjaCh0aGlzLEYsRSl9LGluZGV4OmZ1bmN0aW9uKEUpe3JldHVybiBvLmluQXJyYXkoRSYmRS5qcXVlcnk/RVswXTpFLHRoaXMpfSxhdHRyOmZ1bmN0aW9uKEYsSCxHKXt2YXIgRT1GO2lmKHR5cGVvZiBGPT09InN0cmluZyIpe2lmKEg9PT1nKXtyZXR1cm4gdGhpc1swXSYmb1tHfHwiYXR0ciJdKHRoaXNbMF0sRil9ZWxzZXtFPXt9O0VbRl09SH19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihJKXtmb3IoRiBpbiBFKXtvLmF0dHIoRz90aGlzLnN0eWxlOnRoaXMsRixvLnByb3AodGhpcyxFW0ZdLEcsSSxGKSl9fSl9LGNzczpmdW5jdGlvbihFLEYpe2lmKChFPT0id2lkdGgifHxFPT0iaGVpZ2h0IikmJnBhcnNlRmxvYXQoRik8MCl7Rj1nfXJldHVybiB0aGlzLmF0dHIoRSxGLCJjdXJDU1MiKX0sdGV4dDpmdW5jdGlvbihGKXtpZih0eXBlb2YgRiE9PSJvYmplY3QiJiZGIT1udWxsKXtyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoRikpfXZhciBFPSIiO28uZWFjaChGfHx0aGlzLGZ1bmN0aW9uKCl7by5lYWNoKHRoaXMuY2hpbGROb2RlcyxmdW5jdGlvbigpe2lmKHRoaXMubm9kZVR5cGUhPTgpe0UrPXRoaXMubm9kZVR5cGUhPTE/dGhpcy5ub2RlVmFsdWU6by5mbi50ZXh0KFt0aGlzXSl9fSl9KTtyZXR1cm4gRX0sd3JhcEFsbDpmdW5jdGlvbihFKXtpZih0aGlzWzBdKXt2YXIgRj1vKEUsdGhpc1swXS5vd25lckRvY3VtZW50KS5jbG9uZSgpO2lmKHRoaXNbMF0ucGFyZW50Tm9kZSl7Ri5pbnNlcnRCZWZvcmUodGhpc1swXSl9Ri5tYXAoZnVuY3Rpb24oKXt2YXIgRz10aGlzO3doaWxlKEcuZmlyc3RDaGlsZCl7Rz1HLmZpcnN0Q2hpbGR9cmV0dXJuIEd9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7byh0aGlzKS5jb250ZW50cygpLndyYXBBbGwoRSl9KX0sd3JhcDpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7byh0aGlzKS53cmFwQWxsKEUpfSl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKEUpe2lmKHRoaXMubm9kZVR5cGU9PTEpe3RoaXMuYXBwZW5kQ2hpbGQoRSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsdHJ1ZSxmdW5jdGlvbihFKXtpZih0aGlzLm5vZGVUeXBlPT0xKXt0aGlzLmluc2VydEJlZm9yZShFLHRoaXMuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihFKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsZnVuY3Rpb24oRSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShFLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fG8oW10pfSxwdXNoOltdLnB1c2gsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2UsZmluZDpmdW5jdGlvbihFKXtpZih0aGlzLmxlbmd0aD09PTEpe3ZhciBGPXRoaXMucHVzaFN0YWNrKFtdLCJmaW5kIixFKTtGLmxlbmd0aD0wO28uZmluZChFLHRoaXNbMF0sRik7cmV0dXJuIEZ9ZWxzZXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby51bmlxdWUoby5tYXAodGhpcyxmdW5jdGlvbihHKXtyZXR1cm4gby5maW5kKEUsRyl9KSksImZpbmQiLEUpfX0sY2xvbmU6ZnVuY3Rpb24oRyl7dmFyIEU9dGhpcy5tYXAoZnVuY3Rpb24oKXtpZighby5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmIW8uaXNYTUxEb2ModGhpcykpe3ZhciBJPXRoaXMub3V0ZXJIVE1MO2lmKCFJKXt2YXIgSj10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Si5hcHBlbmRDaGlsZCh0aGlzLmNsb25lTm9kZSh0cnVlKSk7ST1KLmlubmVySFRNTH1yZXR1cm4gby5jbGVhbihbSS5yZXBsYWNlKC8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csIiIpLnJlcGxhY2UoL15ccyovLCIiKV0pWzBdfWVsc2V7cmV0dXJuIHRoaXMuY2xvbmVOb2RlKHRydWUpfX0pO2lmKEc9PT10cnVlKXt2YXIgSD10aGlzLmZpbmQoIioiKS5hbmRTZWxmKCksRj0wO0UuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZSE9PUhbRl0ubm9kZU5hbWUpe3JldHVybn12YXIgST1vLmRhdGEoSFtGXSwiZXZlbnRzIik7Zm9yKHZhciBLIGluIEkpe2Zvcih2YXIgSiBpbiBJW0tdKXtvLmV2ZW50LmFkZCh0aGlzLEssSVtLXVtKXSxJW0tdW0pdLmRhdGEpfX1GKyt9KX1yZXR1cm4gRX0sZmlsdGVyOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhvLmlzRnVuY3Rpb24oRSkmJm8uZ3JlcCh0aGlzLGZ1bmN0aW9uKEcsRil7cmV0dXJuIEUuY2FsbChHLEYpfSl8fG8ubXVsdGlGaWx0ZXIoRSxvLmdyZXAodGhpcyxmdW5jdGlvbihGKXtyZXR1cm4gRi5ub2RlVHlwZT09PTF9KSksImZpbHRlciIsRSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oRSl7dmFyIEc9by5leHByLm1hdGNoLlBPUy50ZXN0KEUpP28oRSk6bnVsbCxGPTA7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIEg9dGhpczt3aGlsZShIJiZILm93bmVyRG9jdW1lbnQpe2lmKEc/Ry5pbmRleChIKT4tMTpvKEgpLmlzKEUpKXtvLmRhdGEoSCwiY2xvc2VzdCIsRik7cmV0dXJuIEh9SD1ILnBhcmVudE5vZGU7RisrfX0pfSxub3Q6ZnVuY3Rpb24oRSl7aWYodHlwZW9mIEU9PT0ic3RyaW5nIil7aWYoZi50ZXN0KEUpKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5tdWx0aUZpbHRlcihFLHRoaXMsdHJ1ZSksIm5vdCIsRSl9ZWxzZXtFPW8ubXVsdGlGaWx0ZXIoRSx0aGlzKX19dmFyIEY9RS5sZW5ndGgmJkVbRS5sZW5ndGgtMV0hPT1nJiYhRS5ub2RlVHlwZTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gRj9vLmluQXJyYXkodGhpcyxFKTwwOnRoaXMhPUV9KX0sYWRkOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhvLnVuaXF1ZShvLm1lcmdlKHRoaXMuZ2V0KCksdHlwZW9mIEU9PT0ic3RyaW5nIj9vKEUpOm8ubWFrZUFycmF5KEUpKSkpfSxpczpmdW5jdGlvbihFKXtyZXR1cm4gISFFJiZvLm11bHRpRmlsdGVyKEUsdGhpcykubGVuZ3RoPjB9LGhhc0NsYXNzOmZ1bmN0aW9uKEUpe3JldHVybiAhIUUmJnRoaXMuaXMoIi4iK0UpfSx2YWw6ZnVuY3Rpb24oSyl7aWYoSz09PWcpe3ZhciBFPXRoaXNbMF07aWYoRSl7aWYoby5ub2RlTmFtZShFLCJvcHRpb24iKSl7cmV0dXJuKEUuYXR0cmlidXRlcy52YWx1ZXx8e30pLnNwZWNpZmllZD9FLnZhbHVlOkUudGV4dH1pZihvLm5vZGVOYW1lKEUsInNlbGVjdCIpKXt2YXIgST1FLnNlbGVjdGVkSW5kZXgsTD1bXSxNPUUub3B0aW9ucyxIPUUudHlwZT09InNlbGVjdC1vbmUiO2lmKEk8MCl7cmV0dXJuIG51bGx9Zm9yKHZhciBGPUg/STowLEo9SD9JKzE6TS5sZW5ndGg7RjxKO0YrKyl7dmFyIEc9TVtGXTtpZihHLnNlbGVjdGVkKXtLPW8oRykudmFsKCk7aWYoSCl7cmV0dXJuIEt9TC5wdXNoKEspfX1yZXR1cm4gTH1yZXR1cm4oRS52YWx1ZXx8IiIpLnJlcGxhY2UoL1xyL2csIiIpfXJldHVybiBnfWlmKHR5cGVvZiBLPT09Im51bWJlciIpe0srPSIifXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVUeXBlIT0xKXtyZXR1cm59aWYoby5pc0FycmF5KEspJiYvcmFkaW98Y2hlY2tib3gvLnRlc3QodGhpcy50eXBlKSl7dGhpcy5jaGVja2VkPShvLmluQXJyYXkodGhpcy52YWx1ZSxLKT49MHx8by5pbkFycmF5KHRoaXMubmFtZSxLKT49MCl9ZWxzZXtpZihvLm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2YXIgTj1vLm1ha2VBcnJheShLKTtvKCJvcHRpb24iLHRoaXMpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPShvLmluQXJyYXkodGhpcy52YWx1ZSxOKT49MHx8by5pbkFycmF5KHRoaXMudGV4dCxOKT49MCl9KTtpZighTi5sZW5ndGgpe3RoaXMuc2VsZWN0ZWRJbmRleD0tMX19ZWxzZXt0aGlzLnZhbHVlPUt9fX0pfSxodG1sOmZ1bmN0aW9uKEUpe3JldHVybiBFPT09Zz8odGhpc1swXT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKC8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csIiIpOm51bGwpOnRoaXMuZW1wdHkoKS5hcHBlbmQoRSl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmFmdGVyKEUpLnJlbW92ZSgpfSxlcTpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5zbGljZShFLCtFKzEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubWFwKHRoaXMsZnVuY3Rpb24oRyxGKXtyZXR1cm4gRS5jYWxsKEcsRixHKX0pKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfSxkb21NYW5pcDpmdW5jdGlvbihKLE0sTCl7aWYodGhpc1swXSl7dmFyIEk9KHRoaXNbMF0ub3duZXJEb2N1bWVudHx8dGhpc1swXSkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLEY9by5jbGVhbihKLCh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fHRoaXNbMF0pLEkpLEg9SS5maXJzdENoaWxkO2lmKEgpe2Zvcih2YXIgRz0wLEU9dGhpcy5sZW5ndGg7RzxFO0crKyl7TC5jYWxsKEsodGhpc1tHXSxIKSx0aGlzLmxlbmd0aD4xfHxHPjA/SS5jbG9uZU5vZGUodHJ1ZSk6SSl9fWlmKEYpe28uZWFjaChGLHopfX1yZXR1cm4gdGhpcztmdW5jdGlvbiBLKE4sTyl7cmV0dXJuIE0mJm8ubm9kZU5hbWUoTiwidGFibGUiKSYmby5ub2RlTmFtZShPLCJ0ciIpPyhOLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxOLmFwcGVuZENoaWxkKE4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKSk6Tn19fTtvLmZuLmluaXQucHJvdG90eXBlPW8uZm47ZnVuY3Rpb24geihFLEYpe2lmKEYuc3JjKXtvLmFqYXgoe3VybDpGLnNyYyxhc3luYzpmYWxzZSxkYXRhVHlwZToic2NyaXB0In0pfWVsc2V7by5nbG9iYWxFdmFsKEYudGV4dHx8Ri50ZXh0Q29udGVudHx8Ri5pbm5lckhUTUx8fCIiKX1pZihGLnBhcmVudE5vZGUpe0YucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChGKX19ZnVuY3Rpb24gZSgpe3JldHVybiArbmV3IERhdGV9by5leHRlbmQ9by5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgSj1hcmd1bWVudHNbMF18fHt9LEg9MSxJPWFyZ3VtZW50cy5sZW5ndGgsRT1mYWxzZSxHO2lmKHR5cGVvZiBKPT09ImJvb2xlYW4iKXtFPUo7Sj1hcmd1bWVudHNbMV18fHt9O0g9Mn1pZih0eXBlb2YgSiE9PSJvYmplY3QiJiYhby5pc0Z1bmN0aW9uKEopKXtKPXt9fWlmKEk9PUgpe0o9dGhpczstLUh9Zm9yKDtIPEk7SCsrKXtpZigoRz1hcmd1bWVudHNbSF0pIT1udWxsKXtmb3IodmFyIEYgaW4gRyl7dmFyIEs9SltGXSxMPUdbRl07aWYoSj09PUwpe2NvbnRpbnVlfWlmKEUmJkwmJnR5cGVvZiBMPT09Im9iamVjdCImJiFMLm5vZGVUeXBlKXtKW0ZdPW8uZXh0ZW5kKEUsS3x8KEwubGVuZ3RoIT1udWxsP1tdOnt9KSxMKX1lbHNle2lmKEwhPT1nKXtKW0ZdPUx9fX19fXJldHVybiBKfTt2YXIgYj0vei0/aW5kZXh8Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaSxxPWRvY3VtZW50LmRlZmF1bHRWaWV3fHx7fSxzPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7by5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oRSl7bC4kPXA7aWYoRSl7bC5qUXVlcnk9eX1yZXR1cm4gb30saXNGdW5jdGlvbjpmdW5jdGlvbihFKXtyZXR1cm4gcy5jYWxsKEUpPT09IltvYmplY3QgRnVuY3Rpb25dIn0saXNBcnJheTpmdW5jdGlvbihFKXtyZXR1cm4gcy5jYWxsKEUpPT09IltvYmplY3QgQXJyYXldIn0saXNYTUxEb2M6ZnVuY3Rpb24oRSl7cmV0dXJuIEUubm9kZVR5cGU9PT05JiZFLmRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSE9PSJIVE1MInx8ISFFLm93bmVyRG9jdW1lbnQmJm8uaXNYTUxEb2MoRS5vd25lckRvY3VtZW50KX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihHKXtpZihHJiYvXFMvLnRlc3QoRykpe3ZhciBGPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxFPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO0UudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtpZihvLnN1cHBvcnQuc2NyaXB0RXZhbCl7RS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShHKSl9ZWxzZXtFLnRleHQ9R31GLmluc2VydEJlZm9yZShFLEYuZmlyc3RDaGlsZCk7Ri5yZW1vdmVDaGlsZChFKX19LG5vZGVOYW1lOmZ1bmN0aW9uKEYsRSl7cmV0dXJuIEYubm9kZU5hbWUmJkYubm9kZU5hbWUudG9VcHBlckNhc2UoKT09RS50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKEcsSyxGKXt2YXIgRSxIPTAsST1HLmxlbmd0aDtpZihGKXtpZihJPT09Zyl7Zm9yKEUgaW4gRyl7aWYoSy5hcHBseShHW0VdLEYpPT09ZmFsc2Upe2JyZWFrfX19ZWxzZXtmb3IoO0g8STspe2lmKEsuYXBwbHkoR1tIKytdLEYpPT09ZmFsc2Upe2JyZWFrfX19fWVsc2V7aWYoST09PWcpe2ZvcihFIGluIEcpe2lmKEsuY2FsbChHW0VdLEUsR1tFXSk9PT1mYWxzZSl7YnJlYWt9fX1lbHNle2Zvcih2YXIgSj1HWzBdO0g8SSYmSy5jYWxsKEosSCxKKSE9PWZhbHNlO0o9R1srK0hdKXt9fX1yZXR1cm4gR30scHJvcDpmdW5jdGlvbihILEksRyxGLEUpe2lmKG8uaXNGdW5jdGlvbihJKSl7ST1JLmNhbGwoSCxGKX1yZXR1cm4gdHlwZW9mIEk9PT0ibnVtYmVyIiYmRz09ImN1ckNTUyImJiFiLnRlc3QoRSk/SSsicHgiOkl9LGNsYXNzTmFtZTp7YWRkOmZ1bmN0aW9uKEUsRil7by5lYWNoKChGfHwiIikuc3BsaXQoL1xzKy8pLGZ1bmN0aW9uKEcsSCl7aWYoRS5ub2RlVHlwZT09MSYmIW8uY2xhc3NOYW1lLmhhcyhFLmNsYXNzTmFtZSxIKSl7RS5jbGFzc05hbWUrPShFLmNsYXNzTmFtZT8iICI6IiIpK0h9fSl9LHJlbW92ZTpmdW5jdGlvbihFLEYpe2lmKEUubm9kZVR5cGU9PTEpe0UuY2xhc3NOYW1lPUYhPT1nP28uZ3JlcChFLmNsYXNzTmFtZS5zcGxpdCgvXHMrLyksZnVuY3Rpb24oRyl7cmV0dXJuICFvLmNsYXNzTmFtZS5oYXMoRixHKX0pLmpvaW4oIiAiKToiIn19LGhhczpmdW5jdGlvbihGLEUpe3JldHVybiBGJiZvLmluQXJyYXkoRSwoRi5jbGFzc05hbWV8fEYpLnRvU3RyaW5nKCkuc3BsaXQoL1xzKy8pKT4tMX19LHN3YXA6ZnVuY3Rpb24oSCxHLEkpe3ZhciBFPXt9O2Zvcih2YXIgRiBpbiBHKXtFW0ZdPUguc3R5bGVbRl07SC5zdHlsZVtGXT1HW0ZdfUkuY2FsbChIKTtmb3IodmFyIEYgaW4gRyl7SC5zdHlsZVtGXT1FW0ZdfX0sY3NzOmZ1bmN0aW9uKEgsRixKLEUpe2lmKEY9PSJ3aWR0aCJ8fEY9PSJoZWlnaHQiKXt2YXIgTCxHPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxLPUY9PSJ3aWR0aCI/WyJMZWZ0IiwiUmlnaHQiXTpbIlRvcCIsIkJvdHRvbSJdO2Z1bmN0aW9uIEkoKXtMPUY9PSJ3aWR0aCI/SC5vZmZzZXRXaWR0aDpILm9mZnNldEhlaWdodDtpZihFPT09ImJvcmRlciIpe3JldHVybn1vLmVhY2goSyxmdW5jdGlvbigpe2lmKCFFKXtMLT1wYXJzZUZsb2F0KG8uY3VyQ1NTKEgsInBhZGRpbmciK3RoaXMsdHJ1ZSkpfHwwfWlmKEU9PT0ibWFyZ2luIil7TCs9cGFyc2VGbG9hdChvLmN1ckNTUyhILCJtYXJnaW4iK3RoaXMsdHJ1ZSkpfHwwfWVsc2V7TC09cGFyc2VGbG9hdChvLmN1ckNTUyhILCJib3JkZXIiK3RoaXMrIldpZHRoIix0cnVlKSl8fDB9fSl9aWYoSC5vZmZzZXRXaWR0aCE9PTApe0koKX1lbHNle28uc3dhcChILEcsSSl9cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5yb3VuZChMKSl9cmV0dXJuIG8uY3VyQ1NTKEgsRixKKX0sY3VyQ1NTOmZ1bmN0aW9uKEksRixHKXt2YXIgTCxFPUkuc3R5bGU7aWYoRj09Im9wYWNpdHkiJiYhby5zdXBwb3J0Lm9wYWNpdHkpe0w9by5hdHRyKEUsIm9wYWNpdHkiKTtyZXR1cm4gTD09IiI/IjEiOkx9aWYoRi5tYXRjaCgvZmxvYXQvaSkpe0Y9d31pZighRyYmRSYmRVtGXSl7TD1FW0ZdfWVsc2V7aWYocS5nZXRDb21wdXRlZFN0eWxlKXtpZihGLm1hdGNoKC9mbG9hdC9pKSl7Rj0iZmxvYXQifUY9Ri5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnRvTG93ZXJDYXNlKCk7dmFyIE09cS5nZXRDb21wdXRlZFN0eWxlKEksbnVsbCk7aWYoTSl7TD1NLmdldFByb3BlcnR5VmFsdWUoRil9aWYoRj09Im9wYWNpdHkiJiZMPT0iIil7TD0iMSJ9fWVsc2V7aWYoSS5jdXJyZW50U3R5bGUpe3ZhciBKPUYucmVwbGFjZSgvXC0oXHcpL2csZnVuY3Rpb24oTixPKXtyZXR1cm4gTy50b1VwcGVyQ2FzZSgpfSk7TD1JLmN1cnJlbnRTdHlsZVtGXXx8SS5jdXJyZW50U3R5bGVbSl07aWYoIS9eXGQrKHB4KT8kL2kudGVzdChMKSYmL15cZC8udGVzdChMKSl7dmFyIEg9RS5sZWZ0LEs9SS5ydW50aW1lU3R5bGUubGVmdDtJLnJ1bnRpbWVTdHlsZS5sZWZ0PUkuY3VycmVudFN0eWxlLmxlZnQ7RS5sZWZ0PUx8fDA7TD1FLnBpeGVsTGVmdCsicHgiO0UubGVmdD1IO0kucnVudGltZVN0eWxlLmxlZnQ9S319fX1yZXR1cm4gTH0sY2xlYW46ZnVuY3Rpb24oRixLLEkpe0s9S3x8ZG9jdW1lbnQ7aWYodHlwZW9mIEsuY3JlYXRlRWxlbWVudD09PSJ1bmRlZmluZWQiKXtLPUsub3duZXJEb2N1bWVudHx8S1swXSYmS1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudH1pZighSSYmRi5sZW5ndGg9PT0xJiZ0eXBlb2YgRlswXT09PSJzdHJpbmciKXt2YXIgSD0vXjwoXHcrKVxzKlwvPz4kLy5leGVjKEZbMF0pO2lmKEgpe3JldHVybltLLmNyZWF0ZUVsZW1lbnQoSFsxXSldfX12YXIgRz1bXSxFPVtdLEw9Sy5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmVhY2goRixmdW5jdGlvbihQLFMpe2lmKHR5cGVvZiBTPT09Im51bWJlciIpe1MrPSIifWlmKCFTKXtyZXR1cm59aWYodHlwZW9mIFM9PT0ic3RyaW5nIil7Uz1TLnJlcGxhY2UoLyg8KFx3KylbXj5dKj8pXC8+L2csZnVuY3Rpb24oVSxWLFQpe3JldHVybiBULm1hdGNoKC9eKGFiYnJ8YnJ8Y29sfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW18aHJ8YXJlYXxlbWJlZCkkL2kpP1U6VisiPjwvIitUKyI+In0pO3ZhciBPPVMucmVwbGFjZSgvXlxzKy8sIiIpLnN1YnN0cmluZygwLDEwKS50b0xvd2VyQ2FzZSgpO3ZhciBRPSFPLmluZGV4T2YoIjxvcHQiKSYmWzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXXx8IU8uaW5kZXhPZigiPGxlZyIpJiZbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il18fE8ubWF0Y2goL148KHRoZWFkfHRib2R5fHRmb290fGNvbGd8Y2FwKS8pJiZbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il18fCFPLmluZGV4T2YoIjx0ciIpJiZbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il18fCghTy5pbmRleE9mKCI8dGQiKXx8IU8uaW5kZXhPZigiPHRoIikpJiZbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il18fCFPLmluZGV4T2YoIjxjb2wiKSYmWzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdfHwhby5zdXBwb3J0Lmh0bWxTZXJpYWxpemUmJlsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdfHxbMCwiIiwiIl07TC5pbm5lckhUTUw9UVsxXStTK1FbMl07d2hpbGUoUVswXS0tKXtMPUwubGFzdENoaWxkfWlmKCFvLnN1cHBvcnQudGJvZHkpe3ZhciBSPS88dGJvZHkvaS50ZXN0KFMpLE49IU8uaW5kZXhPZigiPHRhYmxlIikmJiFSP0wuZmlyc3RDaGlsZCYmTC5maXJzdENoaWxkLmNoaWxkTm9kZXM6UVsxXT09Ijx0YWJsZT4iJiYhUj9MLmNoaWxkTm9kZXM6W107Zm9yKHZhciBNPU4ubGVuZ3RoLTE7TT49MDstLU0pe2lmKG8ubm9kZU5hbWUoTltNXSwidGJvZHkiKSYmIU5bTV0uY2hpbGROb2Rlcy5sZW5ndGgpe05bTV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChOW01dKX19fWlmKCFvLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJi9eXHMvLnRlc3QoUykpe0wuaW5zZXJ0QmVmb3JlKEsuY3JlYXRlVGV4dE5vZGUoUy5tYXRjaCgvXlxzKi8pWzBdKSxMLmZpcnN0Q2hpbGQpfVM9by5tYWtlQXJyYXkoTC5jaGlsZE5vZGVzKX1pZihTLm5vZGVUeXBlKXtHLnB1c2goUyl9ZWxzZXtHPW8ubWVyZ2UoRyxTKX19KTtpZihJKXtmb3IodmFyIEo9MDtHW0pdO0orKyl7aWYoby5ub2RlTmFtZShHW0pdLCJzY3JpcHQiKSYmKCFHW0pdLnR5cGV8fEdbSl0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKXtFLnB1c2goR1tKXS5wYXJlbnROb2RlP0dbSl0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChHW0pdKTpHW0pdKX1lbHNle2lmKEdbSl0ubm9kZVR5cGU9PT0xKXtHLnNwbGljZS5hcHBseShHLFtKKzEsMF0uY29uY2F0KG8ubWFrZUFycmF5KEdbSl0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSkpfUkuYXBwZW5kQ2hpbGQoR1tKXSl9fXJldHVybiBFfXJldHVybiBHfSxhdHRyOmZ1bmN0aW9uKEosRyxLKXtpZighSnx8Si5ub2RlVHlwZT09M3x8Si5ub2RlVHlwZT09OCl7cmV0dXJuIGd9dmFyIEg9IW8uaXNYTUxEb2MoSiksTD1LIT09ZztHPUgmJm8ucHJvcHNbR118fEc7aWYoSi50YWdOYW1lKXt2YXIgRj0vaHJlZnxzcmN8c3R5bGUvLnRlc3QoRyk7aWYoRz09InNlbGVjdGVkIiYmSi5wYXJlbnROb2RlKXtKLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleH1pZihHIGluIEomJkgmJiFGKXtpZihMKXtpZihHPT0idHlwZSImJm8ubm9kZU5hbWUoSiwiaW5wdXQiKSYmSi5wYXJlbnROb2RlKXt0aHJvdyJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQifUpbR109S31pZihvLm5vZGVOYW1lKEosImZvcm0iKSYmSi5nZXRBdHRyaWJ1dGVOb2RlKEcpKXtyZXR1cm4gSi5nZXRBdHRyaWJ1dGVOb2RlKEcpLm5vZGVWYWx1ZX1pZihHPT0idGFiSW5kZXgiKXt2YXIgST1KLmdldEF0dHJpYnV0ZU5vZGUoInRhYkluZGV4Iik7cmV0dXJuIEkmJkkuc3BlY2lmaWVkP0kudmFsdWU6Si5ub2RlTmFtZS5tYXRjaCgvKGJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKS9pKT8wOkoubm9kZU5hbWUubWF0Y2goL14oYXxhcmVhKSQvaSkmJkouaHJlZj8wOmd9cmV0dXJuIEpbR119aWYoIW8uc3VwcG9ydC5zdHlsZSYmSCYmRz09InN0eWxlIil7cmV0dXJuIG8uYXR0cihKLnN0eWxlLCJjc3NUZXh0IixLKX1pZihMKXtKLnNldEF0dHJpYnV0ZShHLCIiK0spfXZhciBFPSFvLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQmJkgmJkY/Si5nZXRBdHRyaWJ1dGUoRywyKTpKLmdldEF0dHJpYnV0ZShHKTtyZXR1cm4gRT09PW51bGw/ZzpFfWlmKCFvLnN1cHBvcnQub3BhY2l0eSYmRz09Im9wYWNpdHkiKXtpZihMKXtKLnpvb209MTtKLmZpbHRlcj0oSi5maWx0ZXJ8fCIiKS5yZXBsYWNlKC9hbHBoYVwoW14pXSpcKS8sIiIpKyhwYXJzZUludChLKSsiIj09Ik5hTiI/IiI6ImFscGhhKG9wYWNpdHk9IitLKjEwMCsiKSIpfXJldHVybiBKLmZpbHRlciYmSi5maWx0ZXIuaW5kZXhPZigib3BhY2l0eT0iKT49MD8ocGFyc2VGbG9hdChKLmZpbHRlci5tYXRjaCgvb3BhY2l0eT0oW14pXSopLylbMV0pLzEwMCkrIiI6IiJ9Rz1HLnJlcGxhY2UoLy0oW2Etel0pL2lnLGZ1bmN0aW9uKE0sTil7cmV0dXJuIE4udG9VcHBlckNhc2UoKX0pO2lmKEwpe0pbR109S31yZXR1cm4gSltHXX0sdHJpbTpmdW5jdGlvbihFKXtyZXR1cm4oRXx8IiIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKEcpe3ZhciBFPVtdO2lmKEchPW51bGwpe3ZhciBGPUcubGVuZ3RoO2lmKEY9PW51bGx8fHR5cGVvZiBHPT09InN0cmluZyJ8fG8uaXNGdW5jdGlvbihHKXx8Ry5zZXRJbnRlcnZhbCl7RVswXT1HfWVsc2V7d2hpbGUoRil7RVstLUZdPUdbRl19fX1yZXR1cm4gRX0saW5BcnJheTpmdW5jdGlvbihHLEgpe2Zvcih2YXIgRT0wLEY9SC5sZW5ndGg7RTxGO0UrKyl7aWYoSFtFXT09PUcpe3JldHVybiBFfX1yZXR1cm4gLTF9LG1lcmdlOmZ1bmN0aW9uKEgsRSl7dmFyIEY9MCxHLEk9SC5sZW5ndGg7aWYoIW8uc3VwcG9ydC5nZXRBbGwpe3doaWxlKChHPUVbRisrXSkhPW51bGwpe2lmKEcubm9kZVR5cGUhPTgpe0hbSSsrXT1HfX19ZWxzZXt3aGlsZSgoRz1FW0YrK10pIT1udWxsKXtIW0krK109R319cmV0dXJuIEh9LHVuaXF1ZTpmdW5jdGlvbihLKXt2YXIgRj1bXSxFPXt9O3RyeXtmb3IodmFyIEc9MCxIPUsubGVuZ3RoO0c8SDtHKyspe3ZhciBKPW8uZGF0YShLW0ddKTtpZighRVtKXSl7RVtKXT10cnVlO0YucHVzaChLW0ddKX19fWNhdGNoKEkpe0Y9S31yZXR1cm4gRn0sZ3JlcDpmdW5jdGlvbihGLEosRSl7dmFyIEc9W107Zm9yKHZhciBIPTAsST1GLmxlbmd0aDtIPEk7SCsrKXtpZighRSE9IUooRltIXSxIKSl7Ry5wdXNoKEZbSF0pfX1yZXR1cm4gR30sbWFwOmZ1bmN0aW9uKEUsSil7dmFyIEY9W107Zm9yKHZhciBHPTAsSD1FLmxlbmd0aDtHPEg7RysrKXt2YXIgST1KKEVbR10sRyk7aWYoSSE9bnVsbCl7RltGLmxlbmd0aF09SX19cmV0dXJuIEYuY29uY2F0LmFwcGx5KFtdLEYpfX0pO3ZhciBDPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtvLmJyb3dzZXI9e3ZlcnNpb246KEMubWF0Y2goLy4rKD86cnZ8aXR8cmF8aWUpW1wvOiBdKFtcZC5dKykvKXx8WzAsIjAiXSlbMV0sc2FmYXJpOi93ZWJraXQvLnRlc3QoQyksb3BlcmE6L29wZXJhLy50ZXN0KEMpLG1zaWU6L21zaWUvLnRlc3QoQykmJiEvb3BlcmEvLnRlc3QoQyksbW96aWxsYTovbW96aWxsYS8udGVzdChDKSYmIS8oY29tcGF0aWJsZXx3ZWJraXQpLy50ZXN0KEMpfTtvLmVhY2goe3BhcmVudDpmdW5jdGlvbihFKXtyZXR1cm4gRS5wYXJlbnROb2RlfSxwYXJlbnRzOmZ1bmN0aW9uKEUpe3JldHVybiBvLmRpcihFLCJwYXJlbnROb2RlIil9LG5leHQ6ZnVuY3Rpb24oRSl7cmV0dXJuIG8ubnRoKEUsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihFKXtyZXR1cm4gby5udGgoRSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihFKXtyZXR1cm4gby5kaXIoRSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihFKXtyZXR1cm4gby5kaXIoRSwicHJldmlvdXNTaWJsaW5nIil9LHNpYmxpbmdzOmZ1bmN0aW9uKEUpe3JldHVybiBvLnNpYmxpbmcoRS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsRSl9LGNoaWxkcmVuOmZ1bmN0aW9uKEUpe3JldHVybiBvLnNpYmxpbmcoRS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oRSl7cmV0dXJuIG8ubm9kZU5hbWUoRSwiaWZyYW1lIik/RS5jb250ZW50RG9jdW1lbnR8fEUuY29udGVudFdpbmRvdy5kb2N1bWVudDpvLm1ha2VBcnJheShFLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oRSxGKXtvLmZuW0VdPWZ1bmN0aW9uKEcpe3ZhciBIPW8ubWFwKHRoaXMsRik7aWYoRyYmdHlwZW9mIEc9PSJzdHJpbmciKXtIPW8ubXVsdGlGaWx0ZXIoRyxIKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soby51bmlxdWUoSCksRSxHKX19KTtvLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oRyl7dmFyIEo9W10sTD1vKEcpO2Zvcih2YXIgSz0wLEg9TC5sZW5ndGg7SzxIO0srKyl7dmFyIEk9KEs+MD90aGlzLmNsb25lKHRydWUpOnRoaXMpLmdldCgpO28uZm5bRl0uYXBwbHkobyhMW0tdKSxJKTtKPUouY29uY2F0KEkpfXJldHVybiB0aGlzLnB1c2hTdGFjayhKLEUsRyl9fSk7by5lYWNoKHtyZW1vdmVBdHRyOmZ1bmN0aW9uKEUpe28uYXR0cih0aGlzLEUsIiIpO2lmKHRoaXMubm9kZVR5cGU9PTEpe3RoaXMucmVtb3ZlQXR0cmlidXRlKEUpfX0sYWRkQ2xhc3M6ZnVuY3Rpb24oRSl7by5jbGFzc05hbWUuYWRkKHRoaXMsRSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEUpe28uY2xhc3NOYW1lLnJlbW92ZSh0aGlzLEUpfSx0b2dnbGVDbGFzczpmdW5jdGlvbihGLEUpe2lmKHR5cGVvZiBFIT09ImJvb2xlYW4iKXtFPSFvLmNsYXNzTmFtZS5oYXModGhpcyxGKX1vLmNsYXNzTmFtZVtFPyJhZGQiOiJyZW1vdmUiXSh0aGlzLEYpfSxyZW1vdmU6ZnVuY3Rpb24oRSl7aWYoIUV8fG8uZmlsdGVyKEUsW3RoaXNdKS5sZW5ndGgpe28oIioiLHRoaXMpLmFkZChbdGhpc10pLmVhY2goZnVuY3Rpb24oKXtvLmV2ZW50LnJlbW92ZSh0aGlzKTtvLnJlbW92ZURhdGEodGhpcyl9KTtpZih0aGlzLnBhcmVudE5vZGUpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX19fSxlbXB0eTpmdW5jdGlvbigpe28odGhpcykuY2hpbGRyZW4oKS5yZW1vdmUoKTt3aGlsZSh0aGlzLmZpcnN0Q2hpbGQpe3RoaXMucmVtb3ZlQ2hpbGQodGhpcy5maXJzdENoaWxkKX19fSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEYsYXJndW1lbnRzKX19KTtmdW5jdGlvbiBqKEUsRil7cmV0dXJuIEVbMF0mJnBhcnNlSW50KG8uY3VyQ1NTKEVbMF0sRix0cnVlKSwxMCl8fDB9dmFyIGg9ImpRdWVyeSIrZSgpLHY9MCxBPXt9O28uZXh0ZW5kKHtjYWNoZTp7fSxkYXRhOmZ1bmN0aW9uKEYsRSxHKXtGPUY9PWw/QTpGO3ZhciBIPUZbaF07aWYoIUgpe0g9RltoXT0rK3Z9aWYoRSYmIW8uY2FjaGVbSF0pe28uY2FjaGVbSF09e319aWYoRyE9PWcpe28uY2FjaGVbSF1bRV09R31yZXR1cm4gRT9vLmNhY2hlW0hdW0VdOkh9LHJlbW92ZURhdGE6ZnVuY3Rpb24oRixFKXtGPUY9PWw/QTpGO3ZhciBIPUZbaF07aWYoRSl7aWYoby5jYWNoZVtIXSl7ZGVsZXRlIG8uY2FjaGVbSF1bRV07RT0iIjtmb3IoRSBpbiBvLmNhY2hlW0hdKXticmVha31pZighRSl7by5yZW1vdmVEYXRhKEYpfX19ZWxzZXt0cnl7ZGVsZXRlIEZbaF19Y2F0Y2goRyl7aWYoRi5yZW1vdmVBdHRyaWJ1dGUpe0YucmVtb3ZlQXR0cmlidXRlKGgpfX1kZWxldGUgby5jYWNoZVtIXX19LHF1ZXVlOmZ1bmN0aW9uKEYsRSxIKXtpZihGKXtFPShFfHwiZngiKSsicXVldWUiO3ZhciBHPW8uZGF0YShGLEUpO2lmKCFHfHxvLmlzQXJyYXkoSCkpe0c9by5kYXRhKEYsRSxvLm1ha2VBcnJheShIKSl9ZWxzZXtpZihIKXtHLnB1c2goSCl9fX1yZXR1cm4gR30sZGVxdWV1ZTpmdW5jdGlvbihILEcpe3ZhciBFPW8ucXVldWUoSCxHKSxGPUUuc2hpZnQoKTtpZighR3x8Rz09PSJmeCIpe0Y9RVswXX1pZihGIT09Zyl7Ri5jYWxsKEgpfX19KTtvLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihFLEcpe3ZhciBIPUUuc3BsaXQoIi4iKTtIWzFdPUhbMV0/Ii4iK0hbMV06IiI7aWYoRz09PWcpe3ZhciBGPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK0hbMV0rIiEiLFtIWzBdXSk7aWYoRj09PWcmJnRoaXMubGVuZ3RoKXtGPW8uZGF0YSh0aGlzWzBdLEUpfXJldHVybiBGPT09ZyYmSFsxXT90aGlzLmRhdGEoSFswXSk6Rn1lbHNle3JldHVybiB0aGlzLnRyaWdnZXIoInNldERhdGEiK0hbMV0rIiEiLFtIWzBdLEddKS5lYWNoKGZ1bmN0aW9uKCl7by5kYXRhKHRoaXMsRSxHKX0pfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5yZW1vdmVEYXRhKHRoaXMsRSl9KX0scXVldWU6ZnVuY3Rpb24oRSxGKXtpZih0eXBlb2YgRSE9PSJzdHJpbmciKXtGPUU7RT0iZngifWlmKEY9PT1nKXtyZXR1cm4gby5xdWV1ZSh0aGlzWzBdLEUpfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgRz1vLnF1ZXVlKHRoaXMsRSxGKTtpZihFPT0iZngiJiZHLmxlbmd0aD09MSl7R1swXS5jYWxsKHRoaXMpfX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtvLmRlcXVldWUodGhpcyxFKX0pfX0pOwovKgogKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSAtIHYwLjkuMwogKiAgQ29weXJpZ2h0IDIwMDksIFRoZSBEb2pvIEZvdW5kYXRpb24KICogIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5kIEdQTCBMaWNlbnNlcy4KICogIE1vcmUgaW5mb3JtYXRpb246IGh0dHA6Ly9zaXp6bGVqcy5jb20vCiAqLwooZnVuY3Rpb24oKXt2YXIgUj0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXltcXV0qXF18WyciXVteJyJdKlsnIl18W15bXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/L2csTD0wLEg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgRj1mdW5jdGlvbihZLFUsYWIsYWMpe2FiPWFifHxbXTtVPVV8fGRvY3VtZW50O2lmKFUubm9kZVR5cGUhPT0xJiZVLm5vZGVUeXBlIT09OSl7cmV0dXJuW119aWYoIVl8fHR5cGVvZiBZIT09InN0cmluZyIpe3JldHVybiBhYn12YXIgWj1bXSxXLGFmLGFpLFQsYWQsVixYPXRydWU7Ui5sYXN0SW5kZXg9MDt3aGlsZSgoVz1SLmV4ZWMoWSkpIT09bnVsbCl7Wi5wdXNoKFdbMV0pO2lmKFdbMl0pe1Y9UmVnRXhwLnJpZ2h0Q29udGV4dDticmVha319aWYoWi5sZW5ndGg+MSYmTS5leGVjKFkpKXtpZihaLmxlbmd0aD09PTImJkkucmVsYXRpdmVbWlswXV0pe2FmPUooWlswXStaWzFdLFUpfWVsc2V7YWY9SS5yZWxhdGl2ZVtaWzBdXT9bVV06RihaLnNoaWZ0KCksVSk7d2hpbGUoWi5sZW5ndGgpe1k9Wi5zaGlmdCgpO2lmKEkucmVsYXRpdmVbWV0pe1krPVouc2hpZnQoKX1hZj1KKFksYWYpfX19ZWxzZXt2YXIgYWU9YWM/e2V4cHI6Wi5wb3AoKSxzZXQ6RShhYyl9OkYuZmluZChaLnBvcCgpLFoubGVuZ3RoPT09MSYmVS5wYXJlbnROb2RlP1UucGFyZW50Tm9kZTpVLFEoVSkpO2FmPUYuZmlsdGVyKGFlLmV4cHIsYWUuc2V0KTtpZihaLmxlbmd0aD4wKXthaT1FKGFmKX1lbHNle1g9ZmFsc2V9d2hpbGUoWi5sZW5ndGgpe3ZhciBhaD1aLnBvcCgpLGFnPWFoO2lmKCFJLnJlbGF0aXZlW2FoXSl7YWg9IiJ9ZWxzZXthZz1aLnBvcCgpfWlmKGFnPT1udWxsKXthZz1VfUkucmVsYXRpdmVbYWhdKGFpLGFnLFEoVSkpfX1pZighYWkpe2FpPWFmfWlmKCFhaSl7dGhyb3ciU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIisoYWh8fFkpfWlmKEguY2FsbChhaSk9PT0iW29iamVjdCBBcnJheV0iKXtpZighWCl7YWIucHVzaC5hcHBseShhYixhaSl9ZWxzZXtpZihVLm5vZGVUeXBlPT09MSl7Zm9yKHZhciBhYT0wO2FpW2FhXSE9bnVsbDthYSsrKXtpZihhaVthYV0mJihhaVthYV09PT10cnVlfHxhaVthYV0ubm9kZVR5cGU9PT0xJiZLKFUsYWlbYWFdKSkpe2FiLnB1c2goYWZbYWFdKX19fWVsc2V7Zm9yKHZhciBhYT0wO2FpW2FhXSE9bnVsbDthYSsrKXtpZihhaVthYV0mJmFpW2FhXS5ub2RlVHlwZT09PTEpe2FiLnB1c2goYWZbYWFdKX19fX19ZWxzZXtFKGFpLGFiKX1pZihWKXtGKFYsVSxhYixhYyk7aWYoRyl7aGFzRHVwbGljYXRlPWZhbHNlO2FiLnNvcnQoRyk7aWYoaGFzRHVwbGljYXRlKXtmb3IodmFyIGFhPTE7YWE8YWIubGVuZ3RoO2FhKyspe2lmKGFiW2FhXT09PWFiW2FhLTFdKXthYi5zcGxpY2UoYWEtLSwxKX19fX19cmV0dXJuIGFifTtGLm1hdGNoZXM9ZnVuY3Rpb24oVCxVKXtyZXR1cm4gRihULG51bGwsbnVsbCxVKX07Ri5maW5kPWZ1bmN0aW9uKGFhLFQsYWIpe3ZhciBaLFg7aWYoIWFhKXtyZXR1cm5bXX1mb3IodmFyIFc9MCxWPUkub3JkZXIubGVuZ3RoO1c8VjtXKyspe3ZhciBZPUkub3JkZXJbV10sWDtpZigoWD1JLm1hdGNoW1ldLmV4ZWMoYWEpKSl7dmFyIFU9UmVnRXhwLmxlZnRDb250ZXh0O2lmKFUuc3Vic3RyKFUubGVuZ3RoLTEpIT09IlxcIil7WFsxXT0oWFsxXXx8IiIpLnJlcGxhY2UoL1xcL2csIiIpO1o9SS5maW5kW1ldKFgsVCxhYik7aWYoWiE9bnVsbCl7YWE9YWEucmVwbGFjZShJLm1hdGNoW1ldLCIiKTticmVha319fX1pZighWil7Wj1ULmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIil9cmV0dXJue3NldDpaLGV4cHI6YWF9fTtGLmZpbHRlcj1mdW5jdGlvbihhZCxhYyxhZyxXKXt2YXIgVj1hZCxhaT1bXSxhYT1hYyxZLFQsWj1hYyYmYWNbMF0mJlEoYWNbMF0pO3doaWxlKGFkJiZhYy5sZW5ndGgpe2Zvcih2YXIgYWIgaW4gSS5maWx0ZXIpe2lmKChZPUkubWF0Y2hbYWJdLmV4ZWMoYWQpKSE9bnVsbCl7dmFyIFU9SS5maWx0ZXJbYWJdLGFoLGFmO1Q9ZmFsc2U7aWYoYWE9PWFpKXthaT1bXX1pZihJLnByZUZpbHRlclthYl0pe1k9SS5wcmVGaWx0ZXJbYWJdKFksYWEsYWcsYWksVyxaKTtpZighWSl7VD1haD10cnVlfWVsc2V7aWYoWT09PXRydWUpe2NvbnRpbnVlfX19aWYoWSl7Zm9yKHZhciBYPTA7KGFmPWFhW1hdKSE9bnVsbDtYKyspe2lmKGFmKXthaD1VKGFmLFksWCxhYSk7dmFyIGFlPVdeISFhaDtpZihhZyYmYWghPW51bGwpe2lmKGFlKXtUPXRydWV9ZWxzZXthYVtYXT1mYWxzZX19ZWxzZXtpZihhZSl7YWkucHVzaChhZik7VD10cnVlfX19fX1pZihhaCE9PWcpe2lmKCFhZyl7YWE9YWl9YWQ9YWQucmVwbGFjZShJLm1hdGNoW2FiXSwiIik7aWYoIVQpe3JldHVybltdfWJyZWFrfX19aWYoYWQ9PVYpe2lmKFQ9PW51bGwpe3Rocm93IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYWR9ZWxzZXticmVha319Vj1hZH1yZXR1cm4gYWF9O3ZhciBJPUYuc2VsZWN0b3JzPXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXy1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZfLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRl8tXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXy1dfFxcLikrKVxzKig/OihcUz89KVxzKihbJyJdKikoLio/KVwzfClccypcXS8sVEFHOi9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKl8tXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xkbistXSopXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W14tXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZfLV18XFwuKSspKD86XCgoWyciXSopKCg/OlwoW15cKV0rXCl8W15cMlwoXCldKikrKVwyXCkpPy99LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKFQpe3JldHVybiBULmdldEF0dHJpYnV0ZSgiaHJlZiIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhYSxULFope3ZhciBYPXR5cGVvZiBUPT09InN0cmluZyIsYWI9WCYmIS9cVy8udGVzdChUKSxZPVgmJiFhYjtpZihhYiYmIVope1Q9VC50b1VwcGVyQ2FzZSgpfWZvcih2YXIgVz0wLFY9YWEubGVuZ3RoLFU7VzxWO1crKyl7aWYoKFU9YWFbV10pKXt3aGlsZSgoVT1VLnByZXZpb3VzU2libGluZykmJlUubm9kZVR5cGUhPT0xKXt9YWFbV109WXx8VSYmVS5ub2RlTmFtZT09PVQ/VXx8ZmFsc2U6VT09PVR9fWlmKFkpe0YuZmlsdGVyKFQsYWEsdHJ1ZSl9fSwiPiI6ZnVuY3Rpb24oWixVLGFhKXt2YXIgWD10eXBlb2YgVT09PSJzdHJpbmciO2lmKFgmJiEvXFcvLnRlc3QoVSkpe1U9YWE/VTpVLnRvVXBwZXJDYXNlKCk7Zm9yKHZhciBWPTAsVD1aLmxlbmd0aDtWPFQ7VisrKXt2YXIgWT1aW1ZdO2lmKFkpe3ZhciBXPVkucGFyZW50Tm9kZTtaW1ZdPVcubm9kZU5hbWU9PT1VP1c6ZmFsc2V9fX1lbHNle2Zvcih2YXIgVj0wLFQ9Wi5sZW5ndGg7VjxUO1YrKyl7dmFyIFk9WltWXTtpZihZKXtaW1ZdPVg/WS5wYXJlbnROb2RlOlkucGFyZW50Tm9kZT09PVV9fWlmKFgpe0YuZmlsdGVyKFUsWix0cnVlKX19fSwiIjpmdW5jdGlvbihXLFUsWSl7dmFyIFY9TCsrLFQ9UztpZighVS5tYXRjaCgvXFcvKSl7dmFyIFg9VT1ZP1U6VS50b1VwcGVyQ2FzZSgpO1Q9UH1UKCJwYXJlbnROb2RlIixVLFYsVyxYLFkpfSwifiI6ZnVuY3Rpb24oVyxVLFkpe3ZhciBWPUwrKyxUPVM7aWYodHlwZW9mIFU9PT0ic3RyaW5nIiYmIVUubWF0Y2goL1xXLykpe3ZhciBYPVU9WT9VOlUudG9VcHBlckNhc2UoKTtUPVB9VCgicHJldmlvdXNTaWJsaW5nIixVLFYsVyxYLFkpfX0sZmluZDp7SUQ6ZnVuY3Rpb24oVSxWLFcpe2lmKHR5cGVvZiBWLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFXKXt2YXIgVD1WLmdldEVsZW1lbnRCeUlkKFVbMV0pO3JldHVybiBUP1tUXTpbXX19LE5BTUU6ZnVuY3Rpb24oVixZLFope2lmKHR5cGVvZiBZLmdldEVsZW1lbnRzQnlOYW1lIT09InVuZGVmaW5lZCIpe3ZhciBVPVtdLFg9WS5nZXRFbGVtZW50c0J5TmFtZShWWzFdKTtmb3IodmFyIFc9MCxUPVgubGVuZ3RoO1c8VDtXKyspe2lmKFhbV10uZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1WWzFdKXtVLnB1c2goWFtXXSl9fXJldHVybiBVLmxlbmd0aD09PTA/bnVsbDpVfX0sVEFHOmZ1bmN0aW9uKFQsVSl7cmV0dXJuIFUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVFsxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKFcsVSxWLFQsWixhYSl7Vz0iICIrV1sxXS5yZXBsYWNlKC9cXC9nLCIiKSsiICI7aWYoYWEpe3JldHVybiBXfWZvcih2YXIgWD0wLFk7KFk9VVtYXSkhPW51bGw7WCsrKXtpZihZKXtpZihaXihZLmNsYXNzTmFtZSYmKCIgIitZLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoVyk+PTApKXtpZighVil7VC5wdXNoKFkpfX1lbHNle2lmKFYpe1VbWF09ZmFsc2V9fX19cmV0dXJuIGZhbHNlfSxJRDpmdW5jdGlvbihUKXtyZXR1cm4gVFsxXS5yZXBsYWNlKC9cXC9nLCIiKX0sVEFHOmZ1bmN0aW9uKFUsVCl7Zm9yKHZhciBWPTA7VFtWXT09PWZhbHNlO1YrKyl7fXJldHVybiBUW1ZdJiZRKFRbVl0pP1VbMV06VVsxXS50b1VwcGVyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihUKXtpZihUWzFdPT0ibnRoIil7dmFyIFU9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhUWzJdPT0iZXZlbiImJiIybiJ8fFRbMl09PSJvZGQiJiYiMm4rMSJ8fCEvXEQvLnRlc3QoVFsyXSkmJiIwbisiK1RbMl18fFRbMl0pO1RbMl09KFVbMV0rKFVbMl18fDEpKS0wO1RbM109VVszXS0wfVRbMF09TCsrO3JldHVybiBUfSxBVFRSOmZ1bmN0aW9uKFgsVSxWLFQsWSxaKXt2YXIgVz1YWzFdLnJlcGxhY2UoL1xcL2csIiIpO2lmKCFaJiZJLmF0dHJNYXBbV10pe1hbMV09SS5hdHRyTWFwW1ddfWlmKFhbMl09PT0ifj0iKXtYWzRdPSIgIitYWzRdKyIgIn1yZXR1cm4gWH0sUFNFVURPOmZ1bmN0aW9uKFgsVSxWLFQsWSl7aWYoWFsxXT09PSJub3QiKXtpZihYWzNdLm1hdGNoKFIpLmxlbmd0aD4xfHwvXlx3Ly50ZXN0KFhbM10pKXtYWzNdPUYoWFszXSxudWxsLG51bGwsVSl9ZWxzZXt2YXIgVz1GLmZpbHRlcihYWzNdLFUsVix0cnVlXlkpO2lmKCFWKXtULnB1c2guYXBwbHkoVCxXKX1yZXR1cm4gZmFsc2V9fWVsc2V7aWYoSS5tYXRjaC5QT1MudGVzdChYWzBdKXx8SS5tYXRjaC5DSElMRC50ZXN0KFhbMF0pKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIFh9LFBPUzpmdW5jdGlvbihUKXtULnVuc2hpZnQodHJ1ZSk7cmV0dXJuIFR9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKFQpe3JldHVybiBULmRpc2FibGVkPT09ZmFsc2UmJlQudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihUKXtyZXR1cm4gVC5kaXNhYmxlZD09PXRydWV9LGNoZWNrZWQ6ZnVuY3Rpb24oVCl7cmV0dXJuIFQuY2hlY2tlZD09PXRydWV9LHNlbGVjdGVkOmZ1bmN0aW9uKFQpe1QucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBULnNlbGVjdGVkPT09dHJ1ZX0scGFyZW50OmZ1bmN0aW9uKFQpe3JldHVybiAhIVQuZmlyc3RDaGlsZH0sZW1wdHk6ZnVuY3Rpb24oVCl7cmV0dXJuICFULmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihWLFUsVCl7cmV0dXJuICEhRihUWzNdLFYpLmxlbmd0aH0saGVhZGVyOmZ1bmN0aW9uKFQpe3JldHVybi9oXGQvaS50ZXN0KFQubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKFQpe3JldHVybiJ0ZXh0Ij09PVQudHlwZX0scmFkaW86ZnVuY3Rpb24oVCl7cmV0dXJuInJhZGlvIj09PVQudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oVCl7cmV0dXJuImNoZWNrYm94Ij09PVQudHlwZX0sZmlsZTpmdW5jdGlvbihUKXtyZXR1cm4iZmlsZSI9PT1ULnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKFQpe3JldHVybiJwYXNzd29yZCI9PT1ULnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihUKXtyZXR1cm4ic3VibWl0Ij09PVQudHlwZX0saW1hZ2U6ZnVuY3Rpb24oVCl7cmV0dXJuImltYWdlIj09PVQudHlwZX0scmVzZXQ6ZnVuY3Rpb24oVCl7cmV0dXJuInJlc2V0Ij09PVQudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKFQpe3JldHVybiJidXR0b24iPT09VC50eXBlfHxULm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT0iQlVUVE9OIn0saW5wdXQ6ZnVuY3Rpb24oVCl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KFQubm9kZU5hbWUpfX0sc2V0RmlsdGVyczp7Zmlyc3Q6ZnVuY3Rpb24oVSxUKXtyZXR1cm4gVD09PTB9LGxhc3Q6ZnVuY3Rpb24oVixVLFQsVyl7cmV0dXJuIFU9PT1XLmxlbmd0aC0xfSxldmVuOmZ1bmN0aW9uKFUsVCl7cmV0dXJuIFQlMj09PTB9LG9kZDpmdW5jdGlvbihVLFQpe3JldHVybiBUJTI9PT0xfSxsdDpmdW5jdGlvbihWLFUsVCl7cmV0dXJuIFU8VFszXS0wfSxndDpmdW5jdGlvbihWLFUsVCl7cmV0dXJuIFU+VFszXS0wfSxudGg6ZnVuY3Rpb24oVixVLFQpe3JldHVybiBUWzNdLTA9PVV9LGVxOmZ1bmN0aW9uKFYsVSxUKXtyZXR1cm4gVFszXS0wPT1VfX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oWixWLFcsYWEpe3ZhciBVPVZbMV0sWD1JLmZpbHRlcnNbVV07aWYoWCl7cmV0dXJuIFgoWixXLFYsYWEpfWVsc2V7aWYoVT09PSJjb250YWlucyIpe3JldHVybihaLnRleHRDb250ZW50fHxaLmlubmVyVGV4dHx8IiIpLmluZGV4T2YoVlszXSk+PTB9ZWxzZXtpZihVPT09Im5vdCIpe3ZhciBZPVZbM107Zm9yKHZhciBXPTAsVD1ZLmxlbmd0aDtXPFQ7VysrKXtpZihZW1ddPT09Wil7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX19fX0sQ0hJTEQ6ZnVuY3Rpb24oVCxXKXt2YXIgWj1XWzFdLFU9VDtzd2l0Y2goWil7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShVPVUucHJldmlvdXNTaWJsaW5nKXtpZihVLm5vZGVUeXBlPT09MSl7cmV0dXJuIGZhbHNlfX1pZihaPT0iZmlyc3QiKXtyZXR1cm4gdHJ1ZX1VPVQ7Y2FzZSJsYXN0Ijp3aGlsZShVPVUubmV4dFNpYmxpbmcpe2lmKFUubm9kZVR5cGU9PT0xKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlO2Nhc2UibnRoIjp2YXIgVj1XWzJdLGFjPVdbM107aWYoVj09MSYmYWM9PTApe3JldHVybiB0cnVlfXZhciBZPVdbMF0sYWI9VC5wYXJlbnROb2RlO2lmKGFiJiYoYWIuc2l6Y2FjaGUhPT1ZfHwhVC5ub2RlSW5kZXgpKXt2YXIgWD0wO2ZvcihVPWFiLmZpcnN0Q2hpbGQ7VTtVPVUubmV4dFNpYmxpbmcpe2lmKFUubm9kZVR5cGU9PT0xKXtVLm5vZGVJbmRleD0rK1h9fWFiLnNpemNhY2hlPVl9dmFyIGFhPVQubm9kZUluZGV4LWFjO2lmKFY9PTApe3JldHVybiBhYT09MH1lbHNle3JldHVybihhYSVWPT0wJiZhYS9WPj0wKX19fSxJRDpmdW5jdGlvbihVLFQpe3JldHVybiBVLm5vZGVUeXBlPT09MSYmVS5nZXRBdHRyaWJ1dGUoImlkIik9PT1UfSxUQUc6ZnVuY3Rpb24oVSxUKXtyZXR1cm4oVD09PSIqIiYmVS5ub2RlVHlwZT09PTEpfHxVLm5vZGVOYW1lPT09VH0sQ0xBU1M6ZnVuY3Rpb24oVSxUKXtyZXR1cm4oIiAiKyhVLmNsYXNzTmFtZXx8VS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpKyIgIikuaW5kZXhPZihUKT4tMX0sQVRUUjpmdW5jdGlvbihZLFcpe3ZhciBWPVdbMV0sVD1JLmF0dHJIYW5kbGVbVl0/SS5hdHRySGFuZGxlW1ZdKFkpOllbVl0hPW51bGw/WVtWXTpZLmdldEF0dHJpYnV0ZShWKSxaPVQrIiIsWD1XWzJdLFU9V1s0XTtyZXR1cm4gVD09bnVsbD9YPT09IiE9IjpYPT09Ij0iP1o9PT1VOlg9PT0iKj0iP1ouaW5kZXhPZihVKT49MDpYPT09In49Ij8oIiAiK1orIiAiKS5pbmRleE9mKFUpPj0wOiFVP1omJlQhPT1mYWxzZTpYPT09IiE9Ij9aIT1VOlg9PT0iXj0iP1ouaW5kZXhPZihVKT09PTA6WD09PSIkPSI/Wi5zdWJzdHIoWi5sZW5ndGgtVS5sZW5ndGgpPT09VTpYPT09Inw9Ij9aPT09VXx8Wi5zdWJzdHIoMCxVLmxlbmd0aCsxKT09PVUrIi0iOmZhbHNlfSxQT1M6ZnVuY3Rpb24oWCxVLFYsWSl7dmFyIFQ9VVsyXSxXPUkuc2V0RmlsdGVyc1tUXTtpZihXKXtyZXR1cm4gVyhYLFYsVSxZKX19fX07dmFyIE09SS5tYXRjaC5QT1M7Zm9yKHZhciBPIGluIEkubWF0Y2gpe0kubWF0Y2hbT109UmVnRXhwKEkubWF0Y2hbT10uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSl9dmFyIEU9ZnVuY3Rpb24oVSxUKXtVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFUpO2lmKFQpe1QucHVzaC5hcHBseShULFUpO3JldHVybiBUfXJldHVybiBVfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpfWNhdGNoKE4pe0U9ZnVuY3Rpb24oWCxXKXt2YXIgVT1XfHxbXTtpZihILmNhbGwoWCk9PT0iW29iamVjdCBBcnJheV0iKXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShVLFgpfWVsc2V7aWYodHlwZW9mIFgubGVuZ3RoPT09Im51bWJlciIpe2Zvcih2YXIgVj0wLFQ9WC5sZW5ndGg7VjxUO1YrKyl7VS5wdXNoKFhbVl0pfX1lbHNle2Zvcih2YXIgVj0wO1hbVl07VisrKXtVLnB1c2goWFtWXSl9fX1yZXR1cm4gVX19dmFyIEc7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtHPWZ1bmN0aW9uKFUsVCl7dmFyIFY9VS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihUKSY0Py0xOlU9PT1UPzA6MTtpZihWPT09MCl7aGFzRHVwbGljYXRlPXRydWV9cmV0dXJuIFZ9fWVsc2V7aWYoInNvdXJjZUluZGV4IiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpe0c9ZnVuY3Rpb24oVSxUKXt2YXIgVj1VLnNvdXJjZUluZGV4LVQuc291cmNlSW5kZXg7aWYoVj09PTApe2hhc0R1cGxpY2F0ZT10cnVlfXJldHVybiBWfX1lbHNle2lmKGRvY3VtZW50LmNyZWF0ZVJhbmdlKXtHPWZ1bmN0aW9uKFcsVSl7dmFyIFY9Vy5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksVD1VLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtWLnNlbGVjdE5vZGUoVyk7Vi5jb2xsYXBzZSh0cnVlKTtULnNlbGVjdE5vZGUoVSk7VC5jb2xsYXBzZSh0cnVlKTt2YXIgWD1WLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19FTkQsVCk7aWYoWD09PTApe2hhc0R1cGxpY2F0ZT10cnVlfXJldHVybiBYfX19fShmdW5jdGlvbigpe3ZhciBVPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxWPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpO1UuaW5uZXJIVE1MPSI8aW5wdXQgbmFtZT0nIitWKyInLz4iO3ZhciBUPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtULmluc2VydEJlZm9yZShVLFQuZmlyc3RDaGlsZCk7aWYoISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChWKSl7SS5maW5kLklEPWZ1bmN0aW9uKFgsWSxaKXtpZih0eXBlb2YgWS5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhWil7dmFyIFc9WS5nZXRFbGVtZW50QnlJZChYWzFdKTtyZXR1cm4gVz9XLmlkPT09WFsxXXx8dHlwZW9mIFcuZ2V0QXR0cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZXLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09WFsxXT9bV106ZzpbXX19O0kuZmlsdGVyLklEPWZ1bmN0aW9uKFksVyl7dmFyIFg9dHlwZW9mIFkuZ2V0QXR0cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZZLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIFkubm9kZVR5cGU9PT0xJiZYJiZYLm5vZGVWYWx1ZT09PVd9fVQucmVtb3ZlQ2hpbGQoVSl9KSgpOyhmdW5jdGlvbigpe3ZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikpO2lmKFQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCl7SS5maW5kLlRBRz1mdW5jdGlvbihVLFkpe3ZhciBYPVkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVVsxXSk7aWYoVVsxXT09PSIqIil7dmFyIFc9W107Zm9yKHZhciBWPTA7WFtWXTtWKyspe2lmKFhbVl0ubm9kZVR5cGU9PT0xKXtXLnB1c2goWFtWXSl9fVg9V31yZXR1cm4gWH19VC5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iO2lmKFQuZmlyc3RDaGlsZCYmdHlwZW9mIFQuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPT0idW5kZWZpbmVkIiYmVC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiKXtJLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihVKXtyZXR1cm4gVS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfX19KSgpO2lmKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpeyhmdW5jdGlvbigpe3ZhciBUPUYsVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtVLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKFUucXVlcnlTZWxlY3RvckFsbCYmVS5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aD09PTApe3JldHVybn1GPWZ1bmN0aW9uKFksWCxWLFcpe1g9WHx8ZG9jdW1lbnQ7aWYoIVcmJlgubm9kZVR5cGU9PT05JiYhUShYKSl7dHJ5e3JldHVybiBFKFgucXVlcnlTZWxlY3RvckFsbChZKSxWKX1jYXRjaChaKXt9fXJldHVybiBUKFksWCxWLFcpfTtGLmZpbmQ9VC5maW5kO0YuZmlsdGVyPVQuZmlsdGVyO0Yuc2VsZWN0b3JzPVQuc2VsZWN0b3JzO0YubWF0Y2hlcz1ULm1hdGNoZXN9KSgpfWlmKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXsoZnVuY3Rpb24oKXt2YXIgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtULmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKFQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTApe3JldHVybn1ULmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lmKFQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpe3JldHVybn1JLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIik7SS5maW5kLkNMQVNTPWZ1bmN0aW9uKFUsVixXKXtpZih0eXBlb2YgVi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT09InVuZGVmaW5lZCImJiFXKXtyZXR1cm4gVi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFVbMV0pfX19KSgpfWZ1bmN0aW9uIFAoVSxaLFksYWQsYWEsYWMpe3ZhciBhYj1VPT0icHJldmlvdXNTaWJsaW5nIiYmIWFjO2Zvcih2YXIgVz0wLFY9YWQubGVuZ3RoO1c8VjtXKyspe3ZhciBUPWFkW1ddO2lmKFQpe2lmKGFiJiZULm5vZGVUeXBlPT09MSl7VC5zaXpjYWNoZT1ZO1Quc2l6c2V0PVd9VD1UW1VdO3ZhciBYPWZhbHNlO3doaWxlKFQpe2lmKFQuc2l6Y2FjaGU9PT1ZKXtYPWFkW1Quc2l6c2V0XTticmVha31pZihULm5vZGVUeXBlPT09MSYmIWFjKXtULnNpemNhY2hlPVk7VC5zaXpzZXQ9V31pZihULm5vZGVOYW1lPT09Wil7WD1UO2JyZWFrfVQ9VFtVXX1hZFtXXT1YfX19ZnVuY3Rpb24gUyhVLFosWSxhZCxhYSxhYyl7dmFyIGFiPVU9PSJwcmV2aW91c1NpYmxpbmciJiYhYWM7Zm9yKHZhciBXPTAsVj1hZC5sZW5ndGg7VzxWO1crKyl7dmFyIFQ9YWRbV107aWYoVCl7aWYoYWImJlQubm9kZVR5cGU9PT0xKXtULnNpemNhY2hlPVk7VC5zaXpzZXQ9V31UPVRbVV07dmFyIFg9ZmFsc2U7d2hpbGUoVCl7aWYoVC5zaXpjYWNoZT09PVkpe1g9YWRbVC5zaXpzZXRdO2JyZWFrfWlmKFQubm9kZVR5cGU9PT0xKXtpZighYWMpe1Quc2l6Y2FjaGU9WTtULnNpenNldD1XfWlmKHR5cGVvZiBaIT09InN0cmluZyIpe2lmKFQ9PT1aKXtYPXRydWU7YnJlYWt9fWVsc2V7aWYoRi5maWx0ZXIoWixbVF0pLmxlbmd0aD4wKXtYPVQ7YnJlYWt9fX1UPVRbVV19YWRbV109WH19fXZhciBLPWRvY3VtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKFUsVCl7cmV0dXJuIFUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oVCkmMTZ9OmZ1bmN0aW9uKFUsVCl7cmV0dXJuIFUhPT1UJiYoVS5jb250YWlucz9VLmNvbnRhaW5zKFQpOnRydWUpfTt2YXIgUT1mdW5jdGlvbihUKXtyZXR1cm4gVC5ub2RlVHlwZT09PTkmJlQuZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lIT09IkhUTUwifHwhIVQub3duZXJEb2N1bWVudCYmUShULm93bmVyRG9jdW1lbnQpfTt2YXIgSj1mdW5jdGlvbihULGFhKXt2YXIgVz1bXSxYPSIiLFksVj1hYS5ub2RlVHlwZT9bYWFdOmFhO3doaWxlKChZPUkubWF0Y2guUFNFVURPLmV4ZWMoVCkpKXtYKz1ZWzBdO1Q9VC5yZXBsYWNlKEkubWF0Y2guUFNFVURPLCIiKX1UPUkucmVsYXRpdmVbVF0/VCsiKiI6VDtmb3IodmFyIFo9MCxVPVYubGVuZ3RoO1o8VTtaKyspe0YoVCxWW1pdLFcpfXJldHVybiBGLmZpbHRlcihYLFcpfTtvLmZpbmQ9RjtvLmZpbHRlcj1GLmZpbHRlcjtvLmV4cHI9Ri5zZWxlY3RvcnM7by5leHByWyI6Il09by5leHByLmZpbHRlcnM7Ri5zZWxlY3RvcnMuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oVCl7cmV0dXJuIFQub2Zmc2V0V2lkdGg9PT0wfHxULm9mZnNldEhlaWdodD09PTB9O0Yuc2VsZWN0b3JzLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihUKXtyZXR1cm4gVC5vZmZzZXRXaWR0aD4wfHxULm9mZnNldEhlaWdodD4wfTtGLnNlbGVjdG9ycy5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKFQpe3JldHVybiBvLmdyZXAoby50aW1lcnMsZnVuY3Rpb24oVSl7cmV0dXJuIFQ9PT1VLmVsZW19KS5sZW5ndGh9O28ubXVsdGlGaWx0ZXI9ZnVuY3Rpb24oVixULFUpe2lmKFUpe1Y9Ijpub3QoIitWKyIpIn1yZXR1cm4gRi5tYXRjaGVzKFYsVCl9O28uZGlyPWZ1bmN0aW9uKFYsVSl7dmFyIFQ9W10sVz1WW1VdO3doaWxlKFcmJlchPWRvY3VtZW50KXtpZihXLm5vZGVUeXBlPT0xKXtULnB1c2goVyl9Vz1XW1VdfXJldHVybiBUfTtvLm50aD1mdW5jdGlvbihYLFQsVixXKXtUPVR8fDE7dmFyIFU9MDtmb3IoO1g7WD1YW1ZdKXtpZihYLm5vZGVUeXBlPT0xJiYrK1U9PVQpe2JyZWFrfX1yZXR1cm4gWH07by5zaWJsaW5nPWZ1bmN0aW9uKFYsVSl7dmFyIFQ9W107Zm9yKDtWO1Y9Vi5uZXh0U2libGluZyl7aWYoVi5ub2RlVHlwZT09MSYmViE9VSl7VC5wdXNoKFYpfX1yZXR1cm4gVH07cmV0dXJuO2wuU2l6emxlPUZ9KSgpO28uZXZlbnQ9e2FkZDpmdW5jdGlvbihJLEYsSCxLKXtpZihJLm5vZGVUeXBlPT0zfHxJLm5vZGVUeXBlPT04KXtyZXR1cm59aWYoSS5zZXRJbnRlcnZhbCYmSSE9bCl7ST1sfWlmKCFILmd1aWQpe0guZ3VpZD10aGlzLmd1aWQrK31pZihLIT09Zyl7dmFyIEc9SDtIPXRoaXMucHJveHkoRyk7SC5kYXRhPUt9dmFyIEU9by5kYXRhKEksImV2ZW50cyIpfHxvLmRhdGEoSSwiZXZlbnRzIix7fSksSj1vLmRhdGEoSSwiaGFuZGxlIil8fG8uZGF0YShJLCJoYW5kbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBvIT09InVuZGVmaW5lZCImJiFvLmV2ZW50LnRyaWdnZXJlZD9vLmV2ZW50LmhhbmRsZS5hcHBseShhcmd1bWVudHMuY2FsbGVlLmVsZW0sYXJndW1lbnRzKTpnfSk7Si5lbGVtPUk7by5lYWNoKEYuc3BsaXQoL1xzKy8pLGZ1bmN0aW9uKE0sTil7dmFyIE89Ti5zcGxpdCgiLiIpO049Ty5zaGlmdCgpO0gudHlwZT1PLnNsaWNlKCkuc29ydCgpLmpvaW4oIi4iKTt2YXIgTD1FW05dO2lmKG8uZXZlbnQuc3BlY2lhbEFsbFtOXSl7by5ldmVudC5zcGVjaWFsQWxsW05dLnNldHVwLmNhbGwoSSxLLE8pfWlmKCFMKXtMPUVbTl09e307aWYoIW8uZXZlbnQuc3BlY2lhbFtOXXx8by5ldmVudC5zcGVjaWFsW05dLnNldHVwLmNhbGwoSSxLLE8pPT09ZmFsc2Upe2lmKEkuYWRkRXZlbnRMaXN0ZW5lcil7SS5hZGRFdmVudExpc3RlbmVyKE4sSixmYWxzZSl9ZWxzZXtpZihJLmF0dGFjaEV2ZW50KXtJLmF0dGFjaEV2ZW50KCJvbiIrTixKKX19fX1MW0guZ3VpZF09SDtvLmV2ZW50Lmdsb2JhbFtOXT10cnVlfSk7ST1udWxsfSxndWlkOjEsZ2xvYmFsOnt9LHJlbW92ZTpmdW5jdGlvbihLLEgsSil7aWYoSy5ub2RlVHlwZT09M3x8Sy5ub2RlVHlwZT09OCl7cmV0dXJufXZhciBHPW8uZGF0YShLLCJldmVudHMiKSxGLEU7aWYoRyl7aWYoSD09PWd8fCh0eXBlb2YgSD09PSJzdHJpbmciJiZILmNoYXJBdCgwKT09Ii4iKSl7Zm9yKHZhciBJIGluIEcpe3RoaXMucmVtb3ZlKEssSSsoSHx8IiIpKX19ZWxzZXtpZihILnR5cGUpe0o9SC5oYW5kbGVyO0g9SC50eXBlfW8uZWFjaChILnNwbGl0KC9ccysvKSxmdW5jdGlvbihNLE8pe3ZhciBRPU8uc3BsaXQoIi4iKTtPPVEuc2hpZnQoKTt2YXIgTj1SZWdFeHAoIihefFxcLikiK1Euc2xpY2UoKS5zb3J0KCkuam9pbigiLipcXC4iKSsiKFxcLnwkKSIpO2lmKEdbT10pe2lmKEope2RlbGV0ZSBHW09dW0ouZ3VpZF19ZWxzZXtmb3IodmFyIFAgaW4gR1tPXSl7aWYoTi50ZXN0KEdbT11bUF0udHlwZSkpe2RlbGV0ZSBHW09dW1BdfX19aWYoby5ldmVudC5zcGVjaWFsQWxsW09dKXtvLmV2ZW50LnNwZWNpYWxBbGxbT10udGVhcmRvd24uY2FsbChLLFEpfWZvcihGIGluIEdbT10pe2JyZWFrfWlmKCFGKXtpZighby5ldmVudC5zcGVjaWFsW09dfHxvLmV2ZW50LnNwZWNpYWxbT10udGVhcmRvd24uY2FsbChLLFEpPT09ZmFsc2Upe2lmKEsucmVtb3ZlRXZlbnRMaXN0ZW5lcil7Sy5yZW1vdmVFdmVudExpc3RlbmVyKE8sby5kYXRhKEssImhhbmRsZSIpLGZhbHNlKX1lbHNle2lmKEsuZGV0YWNoRXZlbnQpe0suZGV0YWNoRXZlbnQoIm9uIitPLG8uZGF0YShLLCJoYW5kbGUiKSl9fX1GPW51bGw7ZGVsZXRlIEdbT119fX0pfWZvcihGIGluIEcpe2JyZWFrfWlmKCFGKXt2YXIgTD1vLmRhdGEoSywiaGFuZGxlIik7aWYoTCl7TC5lbGVtPW51bGx9by5yZW1vdmVEYXRhKEssImV2ZW50cyIpO28ucmVtb3ZlRGF0YShLLCJoYW5kbGUiKX19fSx0cmlnZ2VyOmZ1bmN0aW9uKEksSyxILEUpe3ZhciBHPUkudHlwZXx8STtpZighRSl7ST10eXBlb2YgST09PSJvYmplY3QiP0lbaF0/STpvLmV4dGVuZChvLkV2ZW50KEcpLEkpOm8uRXZlbnQoRyk7aWYoRy5pbmRleE9mKCIhIik+PTApe0kudHlwZT1HPUcuc2xpY2UoMCwtMSk7SS5leGNsdXNpdmU9dHJ1ZX1pZighSCl7SS5zdG9wUHJvcGFnYXRpb24oKTtpZih0aGlzLmdsb2JhbFtHXSl7by5lYWNoKG8uY2FjaGUsZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50cyYmdGhpcy5ldmVudHNbR10pe28uZXZlbnQudHJpZ2dlcihJLEssdGhpcy5oYW5kbGUuZWxlbSl9fSl9fWlmKCFIfHxILm5vZGVUeXBlPT0zfHxILm5vZGVUeXBlPT04KXtyZXR1cm4gZ31JLnJlc3VsdD1nO0kudGFyZ2V0PUg7Sz1vLm1ha2VBcnJheShLKTtLLnVuc2hpZnQoSSl9SS5jdXJyZW50VGFyZ2V0PUg7dmFyIEo9by5kYXRhKEgsImhhbmRsZSIpO2lmKEope0ouYXBwbHkoSCxLKX1pZigoIUhbR118fChvLm5vZGVOYW1lKEgsImEiKSYmRz09ImNsaWNrIikpJiZIWyJvbiIrR10mJkhbIm9uIitHXS5hcHBseShILEspPT09ZmFsc2Upe0kucmVzdWx0PWZhbHNlfWlmKCFFJiZIW0ddJiYhSS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIShvLm5vZGVOYW1lKEgsImEiKSYmRz09ImNsaWNrIikpe3RoaXMudHJpZ2dlcmVkPXRydWU7dHJ5e0hbR10oKX1jYXRjaChMKXt9fXRoaXMudHJpZ2dlcmVkPWZhbHNlO2lmKCFJLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3ZhciBGPUgucGFyZW50Tm9kZXx8SC5vd25lckRvY3VtZW50O2lmKEYpe28uZXZlbnQudHJpZ2dlcihJLEssRix0cnVlKX19fSxoYW5kbGU6ZnVuY3Rpb24oSyl7dmFyIEosRTtLPWFyZ3VtZW50c1swXT1vLmV2ZW50LmZpeChLfHxsLmV2ZW50KTtLLmN1cnJlbnRUYXJnZXQ9dGhpczt2YXIgTD1LLnR5cGUuc3BsaXQoIi4iKTtLLnR5cGU9TC5zaGlmdCgpO0o9IUwubGVuZ3RoJiYhSy5leGNsdXNpdmU7dmFyIEk9UmVnRXhwKCIoXnxcXC4pIitMLnNsaWNlKCkuc29ydCgpLmpvaW4oIi4qXFwuIikrIihcXC58JCkiKTtFPShvLmRhdGEodGhpcywiZXZlbnRzIil8fHt9KVtLLnR5cGVdO2Zvcih2YXIgRyBpbiBFKXt2YXIgSD1FW0ddO2lmKEp8fEkudGVzdChILnR5cGUpKXtLLmhhbmRsZXI9SDtLLmRhdGE9SC5kYXRhO3ZhciBGPUguYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKEYhPT1nKXtLLnJlc3VsdD1GO2lmKEY9PT1mYWxzZSl7Sy5wcmV2ZW50RGVmYXVsdCgpO0suc3RvcFByb3BhZ2F0aW9uKCl9fWlmKEsuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl7YnJlYWt9fX19LHByb3BzOiJhbHRLZXkgYXR0ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBjYW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbWV0YUtleSBuZXdWYWx1ZSBvcmlnaW5hbFRhcmdldCBwYWdlWCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3JlZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdG9FbGVtZW50IHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAiKSxmaXg6ZnVuY3Rpb24oSCl7aWYoSFtoXSl7cmV0dXJuIEh9dmFyIEY9SDtIPW8uRXZlbnQoRik7Zm9yKHZhciBHPXRoaXMucHJvcHMubGVuZ3RoLEo7Rzspe0o9dGhpcy5wcm9wc1stLUddO0hbSl09RltKXX1pZighSC50YXJnZXQpe0gudGFyZ2V0PUguc3JjRWxlbWVudHx8ZG9jdW1lbnR9aWYoSC50YXJnZXQubm9kZVR5cGU9PTMpe0gudGFyZ2V0PUgudGFyZ2V0LnBhcmVudE5vZGV9aWYoIUgucmVsYXRlZFRhcmdldCYmSC5mcm9tRWxlbWVudCl7SC5yZWxhdGVkVGFyZ2V0PUguZnJvbUVsZW1lbnQ9PUgudGFyZ2V0P0gudG9FbGVtZW50OkguZnJvbUVsZW1lbnR9aWYoSC5wYWdlWD09bnVsbCYmSC5jbGllbnRYIT1udWxsKXt2YXIgST1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRT1kb2N1bWVudC5ib2R5O0gucGFnZVg9SC5jbGllbnRYKyhJJiZJLnNjcm9sbExlZnR8fEUmJkUuc2Nyb2xsTGVmdHx8MCktKEkuY2xpZW50TGVmdHx8MCk7SC5wYWdlWT1ILmNsaWVudFkrKEkmJkkuc2Nyb2xsVG9wfHxFJiZFLnNjcm9sbFRvcHx8MCktKEkuY2xpZW50VG9wfHwwKX1pZighSC53aGljaCYmKChILmNoYXJDb2RlfHxILmNoYXJDb2RlPT09MCk/SC5jaGFyQ29kZTpILmtleUNvZGUpKXtILndoaWNoPUguY2hhckNvZGV8fEgua2V5Q29kZX1pZighSC5tZXRhS2V5JiZILmN0cmxLZXkpe0gubWV0YUtleT1ILmN0cmxLZXl9aWYoIUgud2hpY2gmJkguYnV0dG9uKXtILndoaWNoPShILmJ1dHRvbiYxPzE6KEguYnV0dG9uJjI/MzooSC5idXR0b24mND8yOjApKSl9cmV0dXJuIEh9LHByb3h5OmZ1bmN0aW9uKEYsRSl7RT1FfHxmdW5jdGlvbigpe3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07RS5ndWlkPUYuZ3VpZD1GLmd1aWR8fEUuZ3VpZHx8dGhpcy5ndWlkKys7cmV0dXJuIEV9LHNwZWNpYWw6e3JlYWR5OntzZXR1cDpCLHRlYXJkb3duOmZ1bmN0aW9uKCl7fX19LHNwZWNpYWxBbGw6e2xpdmU6e3NldHVwOmZ1bmN0aW9uKEUsRil7by5ldmVudC5hZGQodGhpcyxGWzBdLGMpfSx0ZWFyZG93bjpmdW5jdGlvbihHKXtpZihHLmxlbmd0aCl7dmFyIEU9MCxGPVJlZ0V4cCgiKF58XFwuKSIrR1swXSsiKFxcLnwkKSIpO28uZWFjaCgoby5kYXRhKHRoaXMsImV2ZW50cyIpLmxpdmV8fHt9KSxmdW5jdGlvbigpe2lmKEYudGVzdCh0aGlzLnR5cGUpKXtFKyt9fSk7aWYoRTwxKXtvLmV2ZW50LnJlbW92ZSh0aGlzLEdbMF0sYyl9fX19fX07by5FdmVudD1mdW5jdGlvbihFKXtpZighdGhpcy5wcmV2ZW50RGVmYXVsdCl7cmV0dXJuIG5ldyBvLkV2ZW50KEUpfWlmKEUmJkUudHlwZSl7dGhpcy5vcmlnaW5hbEV2ZW50PUU7dGhpcy50eXBlPUUudHlwZX1lbHNle3RoaXMudHlwZT1FfXRoaXMudGltZVN0YW1wPWUoKTt0aGlzW2hdPXRydWV9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gdSgpe3JldHVybiB0cnVlfW8uRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXU7dmFyIEU9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFFKXtyZXR1cm59aWYoRS5wcmV2ZW50RGVmYXVsdCl7RS5wcmV2ZW50RGVmYXVsdCgpfUUucmV0dXJuVmFsdWU9ZmFsc2V9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dTt2YXIgRT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIUUpe3JldHVybn1pZihFLnN0b3BQcm9wYWdhdGlvbil7RS5zdG9wUHJvcGFnYXRpb24oKX1FLmNhbmNlbEJ1YmJsZT10cnVlfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXU7dGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOmssaXNQcm9wYWdhdGlvblN0b3BwZWQ6ayxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDprfTt2YXIgYT1mdW5jdGlvbihGKXt2YXIgRT1GLnJlbGF0ZWRUYXJnZXQ7d2hpbGUoRSYmRSE9dGhpcyl7dHJ5e0U9RS5wYXJlbnROb2RlfWNhdGNoKEcpe0U9dGhpc319aWYoRSE9dGhpcyl7Ri50eXBlPUYuZGF0YTtvLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTtvLmVhY2goe21vdXNlb3ZlcjoibW91c2VlbnRlciIsbW91c2VvdXQ6Im1vdXNlbGVhdmUifSxmdW5jdGlvbihGLEUpe28uZXZlbnQuc3BlY2lhbFtFXT17c2V0dXA6ZnVuY3Rpb24oKXtvLmV2ZW50LmFkZCh0aGlzLEYsYSxFKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtvLmV2ZW50LnJlbW92ZSh0aGlzLEYsYSl9fX0pO28uZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKEYsRyxFKXtyZXR1cm4gRj09InVubG9hZCI/dGhpcy5vbmUoRixHLEUpOnRoaXMuZWFjaChmdW5jdGlvbigpe28uZXZlbnQuYWRkKHRoaXMsRixFfHxHLEUmJkcpfSl9LG9uZTpmdW5jdGlvbihHLEgsRil7dmFyIEU9by5ldmVudC5wcm94eShGfHxILGZ1bmN0aW9uKEkpe28odGhpcykudW5iaW5kKEksRSk7cmV0dXJuKEZ8fEgpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtvLmV2ZW50LmFkZCh0aGlzLEcsRSxGJiZIKX0pfSx1bmJpbmQ6ZnVuY3Rpb24oRixFKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5ldmVudC5yZW1vdmUodGhpcyxGLEUpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oRSxGKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7by5ldmVudC50cmlnZ2VyKEUsRix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihFLEcpe2lmKHRoaXNbMF0pe3ZhciBGPW8uRXZlbnQoRSk7Ri5wcmV2ZW50RGVmYXVsdCgpO0Yuc3RvcFByb3BhZ2F0aW9uKCk7by5ldmVudC50cmlnZ2VyKEYsRyx0aGlzWzBdKTtyZXR1cm4gRi5yZXN1bHR9fSx0b2dnbGU6ZnVuY3Rpb24oRyl7dmFyIEU9YXJndW1lbnRzLEY9MTt3aGlsZShGPEUubGVuZ3RoKXtvLmV2ZW50LnByb3h5KEcsRVtGKytdKX1yZXR1cm4gdGhpcy5jbGljayhvLmV2ZW50LnByb3h5KEcsZnVuY3Rpb24oSCl7dGhpcy5sYXN0VG9nZ2xlPSh0aGlzLmxhc3RUb2dnbGV8fDApJUY7SC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBFW3RoaXMubGFzdFRvZ2dsZSsrXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fGZhbHNlfSkpfSxob3ZlcjpmdW5jdGlvbihFLEYpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoRSkubW91c2VsZWF2ZShGKX0scmVhZHk6ZnVuY3Rpb24oRSl7QigpO2lmKG8uaXNSZWFkeSl7RS5jYWxsKGRvY3VtZW50LG8pfWVsc2V7by5yZWFkeUxpc3QucHVzaChFKX1yZXR1cm4gdGhpc30sbGl2ZTpmdW5jdGlvbihHLEYpe3ZhciBFPW8uZXZlbnQucHJveHkoRik7RS5ndWlkKz10aGlzLnNlbGVjdG9yK0c7byhkb2N1bWVudCkuYmluZChpKEcsdGhpcy5zZWxlY3RvciksdGhpcy5zZWxlY3RvcixFKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKEYsRSl7byhkb2N1bWVudCkudW5iaW5kKGkoRix0aGlzLnNlbGVjdG9yKSxFP3tndWlkOkUuZ3VpZCt0aGlzLnNlbGVjdG9yK0Z9Om51bGwpO3JldHVybiB0aGlzfX0pO2Z1bmN0aW9uIGMoSCl7dmFyIEU9UmVnRXhwKCIoXnxcXC4pIitILnR5cGUrIihcXC58JCkiKSxHPXRydWUsRj1bXTtvLmVhY2goby5kYXRhKHRoaXMsImV2ZW50cyIpLmxpdmV8fFtdLGZ1bmN0aW9uKEksSil7aWYoRS50ZXN0KEoudHlwZSkpe3ZhciBLPW8oSC50YXJnZXQpLmNsb3Nlc3QoSi5kYXRhKVswXTtpZihLKXtGLnB1c2goe2VsZW06SyxmbjpKfSl9fX0pO0Yuc29ydChmdW5jdGlvbihKLEkpe3JldHVybiBvLmRhdGEoSi5lbGVtLCJjbG9zZXN0Iiktby5kYXRhKEkuZWxlbSwiY2xvc2VzdCIpfSk7by5lYWNoKEYsZnVuY3Rpb24oKXtpZih0aGlzLmZuLmNhbGwodGhpcy5lbGVtLEgsdGhpcy5mbi5kYXRhKT09PWZhbHNlKXtyZXR1cm4oRz1mYWxzZSl9fSk7cmV0dXJuIEd9ZnVuY3Rpb24gaShGLEUpe3JldHVyblsibGl2ZSIsRixFLnJlcGxhY2UoL1wuL2csImAiKS5yZXBsYWNlKC8gL2csInwiKV0uam9pbigiLiIpfW8uZXh0ZW5kKHtpc1JlYWR5OmZhbHNlLHJlYWR5TGlzdDpbXSxyZWFkeTpmdW5jdGlvbigpe2lmKCFvLmlzUmVhZHkpe28uaXNSZWFkeT10cnVlO2lmKG8ucmVhZHlMaXN0KXtvLmVhY2goby5yZWFkeUxpc3QsZnVuY3Rpb24oKXt0aGlzLmNhbGwoZG9jdW1lbnQsbyl9KTtvLnJlYWR5TGlzdD1udWxsfW8oZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpfX19KTt2YXIgeD1mYWxzZTtmdW5jdGlvbiBCKCl7aWYoeCl7cmV0dXJufXg9dHJ1ZTtpZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGFyZ3VtZW50cy5jYWxsZWUsZmFsc2UpO28ucmVhZHkoKX0sZmFsc2UpfWVsc2V7aWYoZG9jdW1lbnQuYXR0YWNoRXZlbnQpe2RvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpe2RvY3VtZW50LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGFyZ3VtZW50cy5jYWxsZWUpO28ucmVhZHkoKX19KTtpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmw9PWwudG9wKXsoZnVuY3Rpb24oKXtpZihvLmlzUmVhZHkpe3JldHVybn10cnl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goRSl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybn1vLnJlYWR5KCl9KSgpfX19by5ldmVudC5hZGQobCwibG9hZCIsby5yZWFkeSl9by5lYWNoKCgiYmx1cixmb2N1cyxsb2FkLHJlc2l6ZSxzY3JvbGwsdW5sb2FkLGNsaWNrLGRibGNsaWNrLG1vdXNlZG93bixtb3VzZXVwLG1vdXNlbW92ZSxtb3VzZW92ZXIsbW91c2VvdXQsbW91c2VlbnRlcixtb3VzZWxlYXZlLGNoYW5nZSxzZWxlY3Qsc3VibWl0LGtleWRvd24sa2V5cHJlc3Msa2V5dXAsZXJyb3IiKS5zcGxpdCgiLCIpLGZ1bmN0aW9uKEYsRSl7by5mbltFXT1mdW5jdGlvbihHKXtyZXR1cm4gRz90aGlzLmJpbmQoRSxHKTp0aGlzLnRyaWdnZXIoRSl9fSk7byhsKS5iaW5kKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBFIGluIG8uY2FjaGUpe2lmKEUhPTEmJm8uY2FjaGVbRV0uaGFuZGxlKXtvLmV2ZW50LnJlbW92ZShvLmNhY2hlW0VdLmhhbmRsZS5lbGVtKX19fSk7KGZ1bmN0aW9uKCl7by5zdXBwb3J0PXt9O3ZhciBGPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxHPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSj0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKTtLLnN0eWxlLmRpc3BsYXk9Im5vbmUiO0suaW5uZXJIVE1MPScgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0iL2EiIHN0eWxlPSJjb2xvcjpyZWQ7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41OyI+YTwvYT48c2VsZWN0PjxvcHRpb24+dGV4dDwvb3B0aW9uPjwvc2VsZWN0PjxvYmplY3Q+PHBhcmFtLz48L29iamVjdD4nO3ZhciBIPUsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxFPUsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighSHx8IUgubGVuZ3RofHwhRSl7cmV0dXJufW8uc3VwcG9ydD17bGVhZGluZ1doaXRlc3BhY2U6Sy5maXJzdENoaWxkLm5vZGVUeXBlPT0zLHRib2R5OiFLLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxvYmplY3RBbGw6ISFLLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhSy5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovcmVkLy50ZXN0KEUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpFLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5OkUuc3R5bGUub3BhY2l0eT09PSIwLjUiLGNzc0Zsb2F0OiEhRS5zdHlsZS5jc3NGbG9hdCxzY3JpcHRFdmFsOmZhbHNlLG5vQ2xvbmVFdmVudDp0cnVlLGJveE1vZGVsOm51bGx9O0cudHlwZT0idGV4dC9qYXZhc2NyaXB0Ijt0cnl7Ry5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgid2luZG93LiIrSisiPTE7IikpfWNhdGNoKEkpe31GLmluc2VydEJlZm9yZShHLEYuZmlyc3RDaGlsZCk7aWYobFtKXSl7by5zdXBwb3J0LnNjcmlwdEV2YWw9dHJ1ZTtkZWxldGUgbFtKXX1GLnJlbW92ZUNoaWxkKEcpO2lmKEsuYXR0YWNoRXZlbnQmJksuZmlyZUV2ZW50KXtLLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe28uc3VwcG9ydC5ub0Nsb25lRXZlbnQ9ZmFsc2U7Sy5kZXRhY2hFdmVudCgib25jbGljayIsYXJndW1lbnRzLmNhbGxlZSl9KTtLLmNsb25lTm9kZSh0cnVlKS5maXJlRXZlbnQoIm9uY2xpY2siKX1vKGZ1bmN0aW9uKCl7dmFyIEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7TC5zdHlsZS53aWR0aD1MLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTCk7by5ib3hNb2RlbD1vLnN1cHBvcnQuYm94TW9kZWw9TC5vZmZzZXRXaWR0aD09PTI7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChMKS5zdHlsZS5kaXNwbGF5PSJub25lIn0pfSkoKTt2YXIgdz1vLnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCI7by5wcm9wcz17ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsImZsb2F0Ijp3LGNzc0Zsb2F0Oncsc3R5bGVGbG9hdDp3LHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsdGFiaW5kZXg6InRhYkluZGV4In07by5mbi5leHRlbmQoe19sb2FkOm8uZm4ubG9hZCxsb2FkOmZ1bmN0aW9uKEcsSixLKXtpZih0eXBlb2YgRyE9PSJzdHJpbmciKXtyZXR1cm4gdGhpcy5fbG9hZChHKX12YXIgST1HLmluZGV4T2YoIiAiKTtpZihJPj0wKXt2YXIgRT1HLnNsaWNlKEksRy5sZW5ndGgpO0c9Ry5zbGljZSgwLEkpfXZhciBIPSJHRVQiO2lmKEope2lmKG8uaXNGdW5jdGlvbihKKSl7Sz1KO0o9bnVsbH1lbHNle2lmKHR5cGVvZiBKPT09Im9iamVjdCIpe0o9by5wYXJhbShKKTtIPSJQT1NUIn19fXZhciBGPXRoaXM7by5hamF4KHt1cmw6Ryx0eXBlOkgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Sixjb21wbGV0ZTpmdW5jdGlvbihNLEwpe2lmKEw9PSJzdWNjZXNzInx8TD09Im5vdG1vZGlmaWVkIil7Ri5odG1sKEU/bygiPGRpdi8+IikuYXBwZW5kKE0ucmVzcG9uc2VUZXh0LnJlcGxhY2UoLzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9nLCIiKSkuZmluZChFKTpNLnJlc3BvbnNlVGV4dCl9aWYoSyl7Ri5lYWNoKEssW00ucmVzcG9uc2VUZXh0LEwsTV0pfX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG8ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9vLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fC9zZWxlY3R8dGV4dGFyZWEvaS50ZXN0KHRoaXMubm9kZU5hbWUpfHwvdGV4dHxoaWRkZW58cGFzc3dvcmR8c2VhcmNoL2kudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihFLEYpe3ZhciBHPW8odGhpcykudmFsKCk7cmV0dXJuIEc9PW51bGw/bnVsbDpvLmlzQXJyYXkoRyk/by5tYXAoRyxmdW5jdGlvbihJLEgpe3JldHVybntuYW1lOkYubmFtZSx2YWx1ZTpJfX0pOntuYW1lOkYubmFtZSx2YWx1ZTpHfX0pLmdldCgpfX0pO28uZWFjaCgiYWpheFN0YXJ0LGFqYXhTdG9wLGFqYXhDb21wbGV0ZSxhamF4RXJyb3IsYWpheFN1Y2Nlc3MsYWpheFNlbmQiLnNwbGl0KCIsIiksZnVuY3Rpb24oRSxGKXtvLmZuW0ZdPWZ1bmN0aW9uKEcpe3JldHVybiB0aGlzLmJpbmQoRixHKX19KTt2YXIgcj1lKCk7by5leHRlbmQoe2dldDpmdW5jdGlvbihFLEcsSCxGKXtpZihvLmlzRnVuY3Rpb24oRykpe0g9RztHPW51bGx9cmV0dXJuIG8uYWpheCh7dHlwZToiR0VUIix1cmw6RSxkYXRhOkcsc3VjY2VzczpILGRhdGFUeXBlOkZ9KX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKEUsRil7cmV0dXJuIG8uZ2V0KEUsbnVsbCxGLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihFLEYsRyl7cmV0dXJuIG8uZ2V0KEUsRixHLCJqc29uIil9LHBvc3Q6ZnVuY3Rpb24oRSxHLEgsRil7aWYoby5pc0Z1bmN0aW9uKEcpKXtIPUc7Rz17fX1yZXR1cm4gby5hamF4KHt0eXBlOiJQT1NUIix1cmw6RSxkYXRhOkcsc3VjY2VzczpILGRhdGFUeXBlOkZ9KX0sYWpheFNldHVwOmZ1bmN0aW9uKEUpe28uZXh0ZW5kKG8uYWpheFNldHRpbmdzLEUpfSxhamF4U2V0dGluZ3M6e3VybDpsb2NhdGlvbi5ocmVmLGdsb2JhbDp0cnVlLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6dHJ1ZSxhc3luYzp0cnVlLHhocjpmdW5jdGlvbigpe3JldHVybiBsLkFjdGl2ZVhPYmplY3Q/bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik6bmV3IFhNTEh0dHBSZXF1ZXN0KCl9LGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIixzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0Iix0ZXh0OiJ0ZXh0L3BsYWluIixfZGVmYXVsdDoiKi8qIn19LGxhc3RNb2RpZmllZDp7fSxhamF4OmZ1bmN0aW9uKE0pe009by5leHRlbmQodHJ1ZSxNLG8uZXh0ZW5kKHRydWUse30sby5hamF4U2V0dGluZ3MsTSkpO3ZhciBXLEY9Lz1cPygmfCQpL2csUixWLEc9TS50eXBlLnRvVXBwZXJDYXNlKCk7aWYoTS5kYXRhJiZNLnByb2Nlc3NEYXRhJiZ0eXBlb2YgTS5kYXRhIT09InN0cmluZyIpe00uZGF0YT1vLnBhcmFtKE0uZGF0YSl9aWYoTS5kYXRhVHlwZT09Impzb25wIil7aWYoRz09IkdFVCIpe2lmKCFNLnVybC5tYXRjaChGKSl7TS51cmwrPShNLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsoTS5qc29ucHx8ImNhbGxiYWNrIikrIj0/In19ZWxzZXtpZighTS5kYXRhfHwhTS5kYXRhLm1hdGNoKEYpKXtNLmRhdGE9KE0uZGF0YT9NLmRhdGErIiYiOiIiKSsoTS5qc29ucHx8ImNhbGxiYWNrIikrIj0/In19TS5kYXRhVHlwZT0ianNvbiJ9aWYoTS5kYXRhVHlwZT09Impzb24iJiYoTS5kYXRhJiZNLmRhdGEubWF0Y2goRil8fE0udXJsLm1hdGNoKEYpKSl7Vz0ianNvbnAiK3IrKztpZihNLmRhdGEpe00uZGF0YT0oTS5kYXRhKyIiKS5yZXBsYWNlKEYsIj0iK1crIiQxIil9TS51cmw9TS51cmwucmVwbGFjZShGLCI9IitXKyIkMSIpO00uZGF0YVR5cGU9InNjcmlwdCI7bFtXXT1mdW5jdGlvbihYKXtWPVg7SSgpO0woKTtsW1ddPWc7dHJ5e2RlbGV0ZSBsW1ddfWNhdGNoKFkpe31pZihIKXtILnJlbW92ZUNoaWxkKFQpfX19aWYoTS5kYXRhVHlwZT09InNjcmlwdCImJk0uY2FjaGU9PW51bGwpe00uY2FjaGU9ZmFsc2V9aWYoTS5jYWNoZT09PWZhbHNlJiZHPT0iR0VUIil7dmFyIEU9ZSgpO3ZhciBVPU0udXJsLnJlcGxhY2UoLyhcP3wmKV89Lio/KCZ8JCkvLCIkMV89IitFKyIkMiIpO00udXJsPVUrKChVPT1NLnVybCk/KE0udXJsLm1hdGNoKC9cPy8pPyImIjoiPyIpKyJfPSIrRToiIil9aWYoTS5kYXRhJiZHPT0iR0VUIil7TS51cmwrPShNLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKStNLmRhdGE7TS5kYXRhPW51bGx9aWYoTS5nbG9iYWwmJiFvLmFjdGl2ZSsrKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpfXZhciBRPS9eKFx3KzopP1wvXC8oW15cLz8jXSspLy5leGVjKE0udXJsKTtpZihNLmRhdGFUeXBlPT0ic2NyaXB0IiYmRz09IkdFVCImJlEmJihRWzFdJiZRWzFdIT1sb2NhdGlvbi5wcm90b2NvbHx8UVsyXSE9bG9jYXRpb24uaG9zdCkpe3ZhciBIPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07dmFyIFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7VC5zcmM9TS51cmw7aWYoTS5zY3JpcHRDaGFyc2V0KXtULmNoYXJzZXQ9TS5zY3JpcHRDaGFyc2V0fWlmKCFXKXt2YXIgTz1mYWxzZTtULm9ubG9hZD1ULm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKCFPJiYoIXRoaXMucmVhZHlTdGF0ZXx8dGhpcy5yZWFkeVN0YXRlPT0ibG9hZGVkInx8dGhpcy5yZWFkeVN0YXRlPT0iY29tcGxldGUiKSl7Tz10cnVlO0koKTtMKCk7VC5vbmxvYWQ9VC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDtILnJlbW92ZUNoaWxkKFQpfX19SC5hcHBlbmRDaGlsZChUKTtyZXR1cm4gZ312YXIgSz1mYWxzZTt2YXIgSj1NLnhocigpO2lmKE0udXNlcm5hbWUpe0oub3BlbihHLE0udXJsLE0uYXN5bmMsTS51c2VybmFtZSxNLnBhc3N3b3JkKX1lbHNle0oub3BlbihHLE0udXJsLE0uYXN5bmMpfXRyeXtpZihNLmRhdGEpe0ouc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixNLmNvbnRlbnRUeXBlKX1pZihNLmlmTW9kaWZpZWQpe0ouc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLG8ubGFzdE1vZGlmaWVkW00udXJsXXx8IlRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UIil9Si5zZXRSZXF1ZXN0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKTtKLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsTS5kYXRhVHlwZSYmTS5hY2NlcHRzW00uZGF0YVR5cGVdP00uYWNjZXB0c1tNLmRhdGFUeXBlXSsiLCAqLyoiOk0uYWNjZXB0cy5fZGVmYXVsdCl9Y2F0Y2goUyl7fWlmKE0uYmVmb3JlU2VuZCYmTS5iZWZvcmVTZW5kKEosTSk9PT1mYWxzZSl7aWYoTS5nbG9iYWwmJiEtLW8uYWN0aXZlKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9Si5hYm9ydCgpO3JldHVybiBmYWxzZX1pZihNLmdsb2JhbCl7by5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW0osTV0pfXZhciBOPWZ1bmN0aW9uKFgpe2lmKEoucmVhZHlTdGF0ZT09MCl7aWYoUCl7Y2xlYXJJbnRlcnZhbChQKTtQPW51bGw7aWYoTS5nbG9iYWwmJiEtLW8uYWN0aXZlKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9fX1lbHNle2lmKCFLJiZKJiYoSi5yZWFkeVN0YXRlPT00fHxYPT0idGltZW91dCIpKXtLPXRydWU7aWYoUCl7Y2xlYXJJbnRlcnZhbChQKTtQPW51bGx9Uj1YPT0idGltZW91dCI/InRpbWVvdXQiOiFvLmh0dHBTdWNjZXNzKEopPyJlcnJvciI6TS5pZk1vZGlmaWVkJiZvLmh0dHBOb3RNb2RpZmllZChKLE0udXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjtpZihSPT0ic3VjY2VzcyIpe3RyeXtWPW8uaHR0cERhdGEoSixNLmRhdGFUeXBlLE0pfWNhdGNoKFope1I9InBhcnNlcmVycm9yIn19aWYoUj09InN1Y2Nlc3MiKXt2YXIgWTt0cnl7WT1KLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIil9Y2F0Y2goWil7fWlmKE0uaWZNb2RpZmllZCYmWSl7by5sYXN0TW9kaWZpZWRbTS51cmxdPVl9aWYoIVcpe0koKX19ZWxzZXtvLmhhbmRsZUVycm9yKE0sSixSKX1MKCk7aWYoWCl7Si5hYm9ydCgpfWlmKE0uYXN5bmMpe0o9bnVsbH19fX07aWYoTS5hc3luYyl7dmFyIFA9c2V0SW50ZXJ2YWwoTiwxMyk7aWYoTS50aW1lb3V0PjApe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihKJiYhSyl7TigidGltZW91dCIpfX0sTS50aW1lb3V0KX19dHJ5e0ouc2VuZChNLmRhdGEpfWNhdGNoKFMpe28uaGFuZGxlRXJyb3IoTSxKLG51bGwsUyl9aWYoIU0uYXN5bmMpe04oKX1mdW5jdGlvbiBJKCl7aWYoTS5zdWNjZXNzKXtNLnN1Y2Nlc3MoVixSKX1pZihNLmdsb2JhbCl7by5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW0osTV0pfX1mdW5jdGlvbiBMKCl7aWYoTS5jb21wbGV0ZSl7TS5jb21wbGV0ZShKLFIpfWlmKE0uZ2xvYmFsKXtvLmV2ZW50LnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW0osTV0pfWlmKE0uZ2xvYmFsJiYhLS1vLmFjdGl2ZSl7by5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfX1yZXR1cm4gSn0saGFuZGxlRXJyb3I6ZnVuY3Rpb24oRixILEUsRyl7aWYoRi5lcnJvcil7Ri5lcnJvcihILEUsRyl9aWYoRi5nbG9iYWwpe28uZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbSCxGLEddKX19LGFjdGl2ZTowLGh0dHBTdWNjZXNzOmZ1bmN0aW9uKEYpe3RyeXtyZXR1cm4gIUYuc3RhdHVzJiZsb2NhdGlvbi5wcm90b2NvbD09ImZpbGU6Inx8KEYuc3RhdHVzPj0yMDAmJkYuc3RhdHVzPDMwMCl8fEYuc3RhdHVzPT0zMDR8fEYuc3RhdHVzPT0xMjIzfWNhdGNoKEUpe31yZXR1cm4gZmFsc2V9LGh0dHBOb3RNb2RpZmllZDpmdW5jdGlvbihHLEUpe3RyeXt2YXIgSD1HLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7cmV0dXJuIEcuc3RhdHVzPT0zMDR8fEg9PW8ubGFzdE1vZGlmaWVkW0VdfWNhdGNoKEYpe31yZXR1cm4gZmFsc2V9LGh0dHBEYXRhOmZ1bmN0aW9uKEosSCxHKXt2YXIgRj1KLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSxFPUg9PSJ4bWwifHwhSCYmRiYmRi5pbmRleE9mKCJ4bWwiKT49MCxJPUU/Si5yZXNwb25zZVhNTDpKLnJlc3BvbnNlVGV4dDtpZihFJiZJLmRvY3VtZW50RWxlbWVudC50YWdOYW1lPT0icGFyc2VyZXJyb3IiKXt0aHJvdyJwYXJzZXJlcnJvciJ9aWYoRyYmRy5kYXRhRmlsdGVyKXtJPUcuZGF0YUZpbHRlcihJLEgpfWlmKHR5cGVvZiBJPT09InN0cmluZyIpe2lmKEg9PSJzY3JpcHQiKXtvLmdsb2JhbEV2YWwoSSl9aWYoSD09Impzb24iKXtJPWxbImV2YWwiXSgiKCIrSSsiKSIpfX1yZXR1cm4gSX0scGFyYW06ZnVuY3Rpb24oRSl7dmFyIEc9W107ZnVuY3Rpb24gSChJLEope0dbRy5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChJKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEopfWlmKG8uaXNBcnJheShFKXx8RS5qcXVlcnkpe28uZWFjaChFLGZ1bmN0aW9uKCl7SCh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KX1lbHNle2Zvcih2YXIgRiBpbiBFKXtpZihvLmlzQXJyYXkoRVtGXSkpe28uZWFjaChFW0ZdLGZ1bmN0aW9uKCl7SChGLHRoaXMpfSl9ZWxzZXtIKEYsby5pc0Z1bmN0aW9uKEVbRl0pP0VbRl0oKTpFW0ZdKX19fXJldHVybiBHLmpvaW4oIiYiKS5yZXBsYWNlKC8lMjAvZywiKyIpfX0pO3ZhciBtPXt9LG4sZD1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXTtmdW5jdGlvbiB0KEYsRSl7dmFyIEc9e307by5lYWNoKGQuY29uY2F0LmFwcGx5KFtdLGQuc2xpY2UoMCxFKSksZnVuY3Rpb24oKXtHW3RoaXNdPUZ9KTtyZXR1cm4gR31vLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihKLEwpe2lmKEope3JldHVybiB0aGlzLmFuaW1hdGUodCgic2hvdyIsMyksSixMKX1lbHNle2Zvcih2YXIgSD0wLEY9dGhpcy5sZW5ndGg7SDxGO0grKyl7dmFyIEU9by5kYXRhKHRoaXNbSF0sIm9sZGRpc3BsYXkiKTt0aGlzW0hdLnN0eWxlLmRpc3BsYXk9RXx8IiI7aWYoby5jc3ModGhpc1tIXSwiZGlzcGxheSIpPT09Im5vbmUiKXt2YXIgRz10aGlzW0hdLnRhZ05hbWUsSztpZihtW0ddKXtLPW1bR119ZWxzZXt2YXIgST1vKCI8IitHKyIgLz4iKS5hcHBlbmRUbygiYm9keSIpO0s9SS5jc3MoImRpc3BsYXkiKTtpZihLPT09Im5vbmUiKXtLPSJibG9jayJ9SS5yZW1vdmUoKTttW0ddPUt9by5kYXRhKHRoaXNbSF0sIm9sZGRpc3BsYXkiLEspfX1mb3IodmFyIEg9MCxGPXRoaXMubGVuZ3RoO0g8RjtIKyspe3RoaXNbSF0uc3R5bGUuZGlzcGxheT1vLmRhdGEodGhpc1tIXSwib2xkZGlzcGxheSIpfHwiIn1yZXR1cm4gdGhpc319LGhpZGU6ZnVuY3Rpb24oSCxJKXtpZihIKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQoImhpZGUiLDMpLEgsSSl9ZWxzZXtmb3IodmFyIEc9MCxGPXRoaXMubGVuZ3RoO0c8RjtHKyspe3ZhciBFPW8uZGF0YSh0aGlzW0ddLCJvbGRkaXNwbGF5Iik7aWYoIUUmJkUhPT0ibm9uZSIpe28uZGF0YSh0aGlzW0ddLCJvbGRkaXNwbGF5IixvLmNzcyh0aGlzW0ddLCJkaXNwbGF5IikpfX1mb3IodmFyIEc9MCxGPXRoaXMubGVuZ3RoO0c8RjtHKyspe3RoaXNbR10uc3R5bGUuZGlzcGxheT0ibm9uZSJ9cmV0dXJuIHRoaXN9fSxfdG9nZ2xlOm8uZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihHLEYpe3ZhciBFPXR5cGVvZiBHPT09ImJvb2xlYW4iO3JldHVybiBvLmlzRnVuY3Rpb24oRykmJm8uaXNGdW5jdGlvbihGKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOkc9PW51bGx8fEU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIEg9RT9HOm8odGhpcykuaXMoIjpoaWRkZW4iKTtvKHRoaXMpW0g/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZSh0KCJ0b2dnbGUiLDMpLEcsRil9LGZhZGVUbzpmdW5jdGlvbihFLEcsRil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh7b3BhY2l0eTpHfSxFLEYpfSxhbmltYXRlOmZ1bmN0aW9uKEksRixILEcpe3ZhciBFPW8uc3BlZWQoRixILEcpO3JldHVybiB0aGlzW0UucXVldWU9PT1mYWxzZT8iZWFjaCI6InF1ZXVlIl0oZnVuY3Rpb24oKXt2YXIgSz1vLmV4dGVuZCh7fSxFKSxNLEw9dGhpcy5ub2RlVHlwZT09MSYmbyh0aGlzKS5pcygiOmhpZGRlbiIpLEo9dGhpcztmb3IoTSBpbiBJKXtpZihJW01dPT0iaGlkZSImJkx8fElbTV09PSJzaG93IiYmIUwpe3JldHVybiBLLmNvbXBsZXRlLmNhbGwodGhpcyl9aWYoKE09PSJoZWlnaHQifHxNPT0id2lkdGgiKSYmdGhpcy5zdHlsZSl7Sy5kaXNwbGF5PW8uY3NzKHRoaXMsImRpc3BsYXkiKTtLLm92ZXJmbG93PXRoaXMuc3R5bGUub3ZlcmZsb3d9fWlmKEsub3ZlcmZsb3chPW51bGwpe3RoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiJ9Sy5jdXJBbmltPW8uZXh0ZW5kKHt9LEkpO28uZWFjaChJLGZ1bmN0aW9uKE8sUyl7dmFyIFI9bmV3IG8uZngoSixLLE8pO2lmKC90b2dnbGV8c2hvd3xoaWRlLy50ZXN0KFMpKXtSW1M9PSJ0b2dnbGUiP0w/InNob3ciOiJoaWRlIjpTXShJKX1lbHNle3ZhciBRPVMudG9TdHJpbmcoKS5tYXRjaCgvXihbKy1dPSk/KFtcZCstLl0rKSguKikkLyksVD1SLmN1cih0cnVlKXx8MDtpZihRKXt2YXIgTj1wYXJzZUZsb2F0KFFbMl0pLFA9UVszXXx8InB4IjtpZihQIT0icHgiKXtKLnN0eWxlW09dPShOfHwxKStQO1Q9KChOfHwxKS9SLmN1cih0cnVlKSkqVDtKLnN0eWxlW09dPVQrUH1pZihRWzFdKXtOPSgoUVsxXT09Ii09Ij8tMToxKSpOKStUfVIuY3VzdG9tKFQsTixQKX1lbHNle1IuY3VzdG9tKFQsUywiIil9fX0pO3JldHVybiB0cnVlfSl9LHN0b3A6ZnVuY3Rpb24oRixFKXt2YXIgRz1vLnRpbWVycztpZihGKXt0aGlzLnF1ZXVlKFtdKX10aGlzLmVhY2goZnVuY3Rpb24oKXtmb3IodmFyIEg9Ry5sZW5ndGgtMTtIPj0wO0gtLSl7aWYoR1tIXS5lbGVtPT10aGlzKXtpZihFKXtHW0hdKHRydWUpfUcuc3BsaWNlKEgsMSl9fX0pO2lmKCFFKXt0aGlzLmRlcXVldWUoKX1yZXR1cm4gdGhpc319KTtvLmVhY2goe3NsaWRlRG93bjp0KCJzaG93IiwxKSxzbGlkZVVwOnQoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOnQoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9fSxmdW5jdGlvbihFLEYpe28uZm5bRV09ZnVuY3Rpb24oRyxIKXtyZXR1cm4gdGhpcy5hbmltYXRlKEYsRyxIKX19KTtvLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oRyxILEYpe3ZhciBFPXR5cGVvZiBHPT09Im9iamVjdCI/Rzp7Y29tcGxldGU6Rnx8IUYmJkh8fG8uaXNGdW5jdGlvbihHKSYmRyxkdXJhdGlvbjpHLGVhc2luZzpGJiZIfHxIJiYhby5pc0Z1bmN0aW9uKEgpJiZIfTtFLmR1cmF0aW9uPW8uZngub2ZmPzA6dHlwZW9mIEUuZHVyYXRpb249PT0ibnVtYmVyIj9FLmR1cmF0aW9uOm8uZnguc3BlZWRzW0UuZHVyYXRpb25dfHxvLmZ4LnNwZWVkcy5fZGVmYXVsdDtFLm9sZD1FLmNvbXBsZXRlO0UuY29tcGxldGU9ZnVuY3Rpb24oKXtpZihFLnF1ZXVlIT09ZmFsc2Upe28odGhpcykuZGVxdWV1ZSgpfWlmKG8uaXNGdW5jdGlvbihFLm9sZCkpe0Uub2xkLmNhbGwodGhpcyl9fTtyZXR1cm4gRX0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oRyxILEUsRil7cmV0dXJuIEUrRipHfSxzd2luZzpmdW5jdGlvbihHLEgsRSxGKXtyZXR1cm4oKC1NYXRoLmNvcyhHKk1hdGguUEkpLzIpKzAuNSkqRitFfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKEYsRSxHKXt0aGlzLm9wdGlvbnM9RTt0aGlzLmVsZW09Rjt0aGlzLnByb3A9RztpZighRS5vcmlnKXtFLm9yaWc9e319fX0pO28uZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuc3RlcCl7dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyl9KG8uZnguc3RlcFt0aGlzLnByb3BdfHxvLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKCh0aGlzLnByb3A9PSJoZWlnaHQifHx0aGlzLnByb3A9PSJ3aWR0aCIpJiZ0aGlzLmVsZW0uc3R5bGUpe3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fSxjdXI6ZnVuY3Rpb24oRil7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpe3JldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXX12YXIgRT1wYXJzZUZsb2F0KG8uY3NzKHRoaXMuZWxlbSx0aGlzLnByb3AsRikpO3JldHVybiBFJiZFPi0xMDAwMD9FOnBhcnNlRmxvYXQoby5jdXJDU1ModGhpcy5lbGVtLHRoaXMucHJvcCkpfHwwfSxjdXN0b206ZnVuY3Rpb24oSSxILEcpe3RoaXMuc3RhcnRUaW1lPWUoKTt0aGlzLnN0YXJ0PUk7dGhpcy5lbmQ9SDt0aGlzLnVuaXQ9R3x8dGhpcy51bml0fHwicHgiO3RoaXMubm93PXRoaXMuc3RhcnQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0wO3ZhciBFPXRoaXM7ZnVuY3Rpb24gRihKKXtyZXR1cm4gRS5zdGVwKEopfUYuZWxlbT10aGlzLmVsZW07aWYoRigpJiZvLnRpbWVycy5wdXNoKEYpJiYhbil7bj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3ZhciBLPW8udGltZXJzO2Zvcih2YXIgSj0wO0o8Sy5sZW5ndGg7SisrKXtpZighS1tKXSgpKXtLLnNwbGljZShKLS0sMSl9fWlmKCFLLmxlbmd0aCl7Y2xlYXJJbnRlcnZhbChuKTtuPWd9fSwxMyl9fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1vLmF0dHIodGhpcy5lbGVtLnN0eWxlLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLnNob3c9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlzLnByb3A9PSJ3aWR0aCJ8fHRoaXMucHJvcD09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO28odGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPW8uYXR0cih0aGlzLmVsZW0uc3R5bGUsdGhpcy5wcm9wKTt0aGlzLm9wdGlvbnMuaGlkZT10cnVlO3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oSCl7dmFyIEc9ZSgpO2lmKEh8fEc+PXRoaXMub3B0aW9ucy5kdXJhdGlvbit0aGlzLnN0YXJ0VGltZSl7dGhpcy5ub3c9dGhpcy5lbmQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0xO3RoaXMudXBkYXRlKCk7dGhpcy5vcHRpb25zLmN1ckFuaW1bdGhpcy5wcm9wXT10cnVlO3ZhciBFPXRydWU7Zm9yKHZhciBGIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKXtpZih0aGlzLm9wdGlvbnMuY3VyQW5pbVtGXSE9PXRydWUpe0U9ZmFsc2V9fWlmKEUpe2lmKHRoaXMub3B0aW9ucy5kaXNwbGF5IT1udWxsKXt0aGlzLmVsZW0uc3R5bGUub3ZlcmZsb3c9dGhpcy5vcHRpb25zLm92ZXJmbG93O3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PXRoaXMub3B0aW9ucy5kaXNwbGF5O2lmKG8uY3NzKHRoaXMuZWxlbSwiZGlzcGxheSIpPT0ibm9uZSIpe3RoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fWlmKHRoaXMub3B0aW9ucy5oaWRlKXtvKHRoaXMuZWxlbSkuaGlkZSgpfWlmKHRoaXMub3B0aW9ucy5oaWRlfHx0aGlzLm9wdGlvbnMuc2hvdyl7Zm9yKHZhciBJIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKXtvLmF0dHIodGhpcy5lbGVtLnN0eWxlLEksdGhpcy5vcHRpb25zLm9yaWdbSV0pfX10aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle3ZhciBKPUctdGhpcy5zdGFydFRpbWU7dGhpcy5zdGF0ZT1KL3RoaXMub3B0aW9ucy5kdXJhdGlvbjt0aGlzLnBvcz1vLmVhc2luZ1t0aGlzLm9wdGlvbnMuZWFzaW5nfHwoby5lYXNpbmcuc3dpbmc/InN3aW5nIjoibGluZWFyIildKHRoaXMuc3RhdGUsSiwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTt0aGlzLm5vdz10aGlzLnN0YXJ0KygodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpO3RoaXMudXBkYXRlKCl9cmV0dXJuIHRydWV9fTtvLmV4dGVuZChvLmZ4LHtzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihFKXtvLmF0dHIoRS5lbGVtLnN0eWxlLCJvcGFjaXR5IixFLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKEUpe2lmKEUuZWxlbS5zdHlsZSYmRS5lbGVtLnN0eWxlW0UucHJvcF0hPW51bGwpe0UuZWxlbS5zdHlsZVtFLnByb3BdPUUubm93K0UudW5pdH1lbHNle0UuZWxlbVtFLnByb3BdPUUubm93fX19fSk7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7by5mbi5vZmZzZXQ9ZnVuY3Rpb24oKXtpZighdGhpc1swXSl7cmV0dXJue3RvcDowLGxlZnQ6MH19aWYodGhpc1swXT09PXRoaXNbMF0ub3duZXJEb2N1bWVudC5ib2R5KXtyZXR1cm4gby5vZmZzZXQuYm9keU9mZnNldCh0aGlzWzBdKX12YXIgRz10aGlzWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEo9dGhpc1swXS5vd25lckRvY3VtZW50LEY9Si5ib2R5LEU9Si5kb2N1bWVudEVsZW1lbnQsTD1FLmNsaWVudFRvcHx8Ri5jbGllbnRUb3B8fDAsSz1FLmNsaWVudExlZnR8fEYuY2xpZW50TGVmdHx8MCxJPUcudG9wKyhzZWxmLnBhZ2VZT2Zmc2V0fHxvLmJveE1vZGVsJiZFLnNjcm9sbFRvcHx8Ri5zY3JvbGxUb3ApLUwsSD1HLmxlZnQrKHNlbGYucGFnZVhPZmZzZXR8fG8uYm94TW9kZWwmJkUuc2Nyb2xsTGVmdHx8Ri5zY3JvbGxMZWZ0KS1LO3JldHVybnt0b3A6SSxsZWZ0Okh9fX1lbHNle28uZm4ub2Zmc2V0PWZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pe3JldHVybnt0b3A6MCxsZWZ0OjB9fWlmKHRoaXNbMF09PT10aGlzWzBdLm93bmVyRG9jdW1lbnQuYm9keSl7cmV0dXJuIG8ub2Zmc2V0LmJvZHlPZmZzZXQodGhpc1swXSl9by5vZmZzZXQuaW5pdGlhbGl6ZWR8fG8ub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgSj10aGlzWzBdLEc9Si5vZmZzZXRQYXJlbnQsRj1KLE89Si5vd25lckRvY3VtZW50LE0sSD1PLmRvY3VtZW50RWxlbWVudCxLPU8uYm9keSxMPU8uZGVmYXVsdFZpZXcsRT1MLmdldENvbXB1dGVkU3R5bGUoSixudWxsKSxOPUoub2Zmc2V0VG9wLEk9Si5vZmZzZXRMZWZ0O3doaWxlKChKPUoucGFyZW50Tm9kZSkmJkohPT1LJiZKIT09SCl7TT1MLmdldENvbXB1dGVkU3R5bGUoSixudWxsKTtOLT1KLnNjcm9sbFRvcCxJLT1KLnNjcm9sbExlZnQ7aWYoSj09PUcpe04rPUoub2Zmc2V0VG9wLEkrPUoub2Zmc2V0TGVmdDtpZihvLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYhKG8ub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzJiYvXnQoYWJsZXxkfGgpJC9pLnRlc3QoSi50YWdOYW1lKSkpe04rPXBhcnNlSW50KE0uYm9yZGVyVG9wV2lkdGgsMTApfHwwLEkrPXBhcnNlSW50KE0uYm9yZGVyTGVmdFdpZHRoLDEwKXx8MH1GPUcsRz1KLm9mZnNldFBhcmVudH1pZihvLm9mZnNldC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUmJk0ub3ZlcmZsb3chPT0idmlzaWJsZSIpe04rPXBhcnNlSW50KE0uYm9yZGVyVG9wV2lkdGgsMTApfHwwLEkrPXBhcnNlSW50KE0uYm9yZGVyTGVmdFdpZHRoLDEwKXx8MH1FPU19aWYoRS5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fEUucG9zaXRpb249PT0ic3RhdGljIil7Tis9Sy5vZmZzZXRUb3AsSSs9Sy5vZmZzZXRMZWZ0fWlmKEUucG9zaXRpb249PT0iZml4ZWQiKXtOKz1NYXRoLm1heChILnNjcm9sbFRvcCxLLnNjcm9sbFRvcCksSSs9TWF0aC5tYXgoSC5zY3JvbGxMZWZ0LEsuc2Nyb2xsTGVmdCl9cmV0dXJue3RvcDpOLGxlZnQ6SX19fW8ub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5pbml0aWFsaXplZCl7cmV0dXJufXZhciBMPWRvY3VtZW50LmJvZHksRj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxILEcsTixJLE0sRSxKPUwuc3R5bGUubWFyZ2luVG9wLEs9JzxkaXYgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OyI+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPic7TT17cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9O2ZvcihFIGluIE0pe0Yuc3R5bGVbRV09TVtFXX1GLmlubmVySFRNTD1LO0wuaW5zZXJ0QmVmb3JlKEYsTC5maXJzdENoaWxkKTtIPUYuZmlyc3RDaGlsZCxHPUguZmlyc3RDaGlsZCxJPUgubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkO3RoaXMuZG9lc05vdEFkZEJvcmRlcj0oRy5vZmZzZXRUb3AhPT01KTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPShJLm9mZnNldFRvcD09PTUpO0guc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsSC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO3RoaXMuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlPShHLm9mZnNldFRvcD09PS01KTtMLnN0eWxlLm1hcmdpblRvcD0iMXB4Ijt0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PShMLm9mZnNldFRvcD09PTApO0wuc3R5bGUubWFyZ2luVG9wPUo7TC5yZW1vdmVDaGlsZChGKTt0aGlzLmluaXRpYWxpemVkPXRydWV9LGJvZHlPZmZzZXQ6ZnVuY3Rpb24oRSl7by5vZmZzZXQuaW5pdGlhbGl6ZWR8fG8ub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgRz1FLm9mZnNldFRvcCxGPUUub2Zmc2V0TGVmdDtpZihvLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Rys9cGFyc2VJbnQoby5jdXJDU1MoRSwibWFyZ2luVG9wIix0cnVlKSwxMCl8fDAsRis9cGFyc2VJbnQoby5jdXJDU1MoRSwibWFyZ2luTGVmdCIsdHJ1ZSksMTApfHwwfXJldHVybnt0b3A6RyxsZWZ0OkZ9fX07by5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIEk9MCxIPTAsRjtpZih0aGlzWzBdKXt2YXIgRz10aGlzLm9mZnNldFBhcmVudCgpLEo9dGhpcy5vZmZzZXQoKSxFPS9eYm9keXxodG1sJC9pLnRlc3QoR1swXS50YWdOYW1lKT97dG9wOjAsbGVmdDowfTpHLm9mZnNldCgpO0oudG9wLT1qKHRoaXMsIm1hcmdpblRvcCIpO0oubGVmdC09aih0aGlzLCJtYXJnaW5MZWZ0Iik7RS50b3ArPWooRywiYm9yZGVyVG9wV2lkdGgiKTtFLmxlZnQrPWooRywiYm9yZGVyTGVmdFdpZHRoIik7Rj17dG9wOkoudG9wLUUudG9wLGxlZnQ6Si5sZWZ0LUUubGVmdH19cmV0dXJuIEZ9LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBFPXRoaXNbMF0ub2Zmc2V0UGFyZW50fHxkb2N1bWVudC5ib2R5O3doaWxlKEUmJighL15ib2R5fGh0bWwkL2kudGVzdChFLnRhZ05hbWUpJiZvLmNzcyhFLCJwb3NpdGlvbiIpPT0ic3RhdGljIikpe0U9RS5vZmZzZXRQYXJlbnR9cmV0dXJuIG8oRSl9fSk7by5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKEYsRSl7dmFyIEc9InNjcm9sbCIrRTtvLmZuW0ddPWZ1bmN0aW9uKEgpe2lmKCF0aGlzWzBdKXtyZXR1cm4gbnVsbH1yZXR1cm4gSCE9PWc/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09bHx8dGhpcz09ZG9jdW1lbnQ/bC5zY3JvbGxUbyghRj9IOm8obCkuc2Nyb2xsTGVmdCgpLEY/SDpvKGwpLnNjcm9sbFRvcCgpKTp0aGlzW0ddPUh9KTp0aGlzWzBdPT1sfHx0aGlzWzBdPT1kb2N1bWVudD9zZWxmW0Y/InBhZ2VZT2Zmc2V0IjoicGFnZVhPZmZzZXQiXXx8by5ib3hNb2RlbCYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W0ddfHxkb2N1bWVudC5ib2R5W0ddOnRoaXNbMF1bR119fSk7by5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihJLEcpe3ZhciBFPUk/IkxlZnQiOiJUb3AiLEg9ST8iUmlnaHQiOiJCb3R0b20iLEY9Ry50b0xvd2VyQ2FzZSgpO28uZm5bImlubmVyIitHXT1mdW5jdGlvbigpe3JldHVybiB0aGlzWzBdP28uY3NzKHRoaXNbMF0sRixmYWxzZSwicGFkZGluZyIpOm51bGx9O28uZm5bIm91dGVyIitHXT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpc1swXT9vLmNzcyh0aGlzWzBdLEYsZmFsc2UsSz8ibWFyZ2luIjoiYm9yZGVyIik6bnVsbH07dmFyIEo9Ry50b0xvd2VyQ2FzZSgpO28uZm5bSl09ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXNbMF09PWw/ZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrR118fGRvY3VtZW50LmJvZHlbImNsaWVudCIrR106dGhpc1swXT09ZG9jdW1lbnQ/TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK0ddLGRvY3VtZW50LmJvZHlbInNjcm9sbCIrR10sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK0ddLGRvY3VtZW50LmJvZHlbIm9mZnNldCIrR10sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK0ddKTpLPT09Zz8odGhpcy5sZW5ndGg/by5jc3ModGhpc1swXSxKKTpudWxsKTp0aGlzLmNzcyhKLHR5cGVvZiBLPT09InN0cmluZyI/SzpLKyJweCIpfX0pfSkoKTs=]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/js/slimbox2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKCVNsaW1ib3ggdjIuMDIgLSBUaGUgdWx0aW1hdGUgbGlnaHR3ZWlnaHQgTGlnaHRib3ggY2xvbmUgZm9yIGpRdWVyeQoJKGMpIDIwMDctMjAwOSBDaHJpc3RvcGhlIEJleWxzIDxodHRwOi8vd3d3LmRpZ2l0YWxpYS5iZT4KCU1JVC1zdHlsZSBsaWNlbnNlLgoqLwooZnVuY3Rpb24odyl7dmFyIEU9dyh3aW5kb3cpLHUsZyxGPS0xLG8seCxELHYseSxMLHMsbj0hd2luZG93LlhNTEh0dHBSZXF1ZXN0LGU9d2luZG93Lm9wZXJhJiYoZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiKSYmKHcuYnJvd3Nlci52ZXJzaW9uPj05LjMpLG09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGw9e30sdD1uZXcgSW1hZ2UoKSxKPW5ldyBJbWFnZSgpLEgsYSxoLHEsSSxkLEcsYyxBLEs7dyhmdW5jdGlvbigpe3coImJvZHkiKS5hcHBlbmQodyhbSD13KCc8ZGl2IGlkPSJsYk92ZXJsYXkiIC8+JylbMF0sYT13KCc8ZGl2IGlkPSJsYkNlbnRlciIgLz4nKVswXSxHPXcoJzxkaXYgaWQ9ImxiQm90dG9tQ29udGFpbmVyIiAvPicpWzBdXSkuY3NzKCJkaXNwbGF5Iiwibm9uZSIpKTtoPXcoJzxkaXYgaWQ9ImxiSW1hZ2UiIC8+JykuYXBwZW5kVG8oYSkuYXBwZW5kKHE9dygnPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyIgLz4nKS5hcHBlbmQoW0k9dygnPGEgaWQ9ImxiUHJldkxpbmsiIGhyZWY9IiMiIC8+JykuY2xpY2soQilbMF0sZD13KCc8YSBpZD0ibGJOZXh0TGluayIgaHJlZj0iIyIgLz4nKS5jbGljayhmKVswXV0pWzBdKVswXTtjPXcoJzxkaXYgaWQ9ImxiQm90dG9tIiAvPicpLmFwcGVuZFRvKEcpLmFwcGVuZChbdygnPGEgaWQ9ImxiQ2xvc2VMaW5rIiBocmVmPSIjIiAvPicpLmFkZChIKS5jbGljayhDKVswXSxBPXcoJzxkaXYgaWQ9ImxiQ2FwdGlvbiIgLz4nKVswXSxLPXcoJzxkaXYgaWQ9ImxiTnVtYmVyIiAvPicpWzBdLHcoJzxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyIgLz4nKVswXV0pWzBdfSk7dy5zbGltYm94PWZ1bmN0aW9uKE8sTixNKXt1PXcuZXh0ZW5kKHtsb29wOmZhbHNlLG92ZXJsYXlPcGFjaXR5OjAuOCxvdmVybGF5RmFkZUR1cmF0aW9uOjQwMCxyZXNpemVEdXJhdGlvbjo0MDAscmVzaXplRWFzaW5nOiJzd2luZyIsaW5pdGlhbFdpZHRoOjI1MCxpbml0aWFsSGVpZ2h0OjI1MCxpbWFnZUZhZGVEdXJhdGlvbjo0MDAsY2FwdGlvbkFuaW1hdGlvbkR1cmF0aW9uOjQwMCxjb3VudGVyVGV4dDoiSW1hZ2Uge3h9IG9mIHt5fSIsY2xvc2VLZXlzOlsyNyw4OCw2N10scHJldmlvdXNLZXlzOlszNyw4MF0sbmV4dEtleXM6WzM5LDc4XX0sTSk7aWYodHlwZW9mIE89PSJzdHJpbmciKXtPPVtbTyxOXV07Tj0wfXk9RS5zY3JvbGxUb3AoKSsoKGU/bS5jbGllbnRIZWlnaHQ6RS5oZWlnaHQoKSkvMik7TD11LmluaXRpYWxXaWR0aDtzPXUuaW5pdGlhbEhlaWdodDt3KGEpLmNzcyh7dG9wOk1hdGgubWF4KDAseS0ocy8yKSksd2lkdGg6TCxoZWlnaHQ6cyxtYXJnaW5MZWZ0Oi1MLzJ9KS5zaG93KCk7dj1ufHwoSC5jdXJyZW50U3R5bGUmJihILmN1cnJlbnRTdHlsZS5wb3NpdGlvbiE9ImZpeGVkIikpO2lmKHYpe0guc3R5bGUucG9zaXRpb249ImFic29sdXRlIn13KEgpLmNzcygib3BhY2l0eSIsdS5vdmVybGF5T3BhY2l0eSkuZmFkZUluKHUub3ZlcmxheUZhZGVEdXJhdGlvbik7eigpO2soMSk7Zz1PO3UubG9vcD11Lmxvb3AmJihnLmxlbmd0aD4xKTtyZXR1cm4gYihOKX07dy5mbi5zbGltYm94PWZ1bmN0aW9uKE0sUCxPKXtQPVB8fGZ1bmN0aW9uKFEpe3JldHVybltRLmhyZWYsUS50aXRsZV19O089T3x8ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZX07dmFyIE49dGhpcztyZXR1cm4gTi51bmJpbmQoImNsaWNrIikuY2xpY2soZnVuY3Rpb24oKXt2YXIgUz10aGlzLFU9MCxULFE9MCxSO1Q9dy5ncmVwKE4sZnVuY3Rpb24oVyxWKXtyZXR1cm4gTy5jYWxsKFMsVyxWKX0pO2ZvcihSPVQubGVuZ3RoO1E8UjsrK1Epe2lmKFRbUV09PVMpe1U9UX1UW1FdPVAoVFtRXSxRKX1yZXR1cm4gdy5zbGltYm94KFQsVSxNKX0pfTtmdW5jdGlvbiB6KCl7dmFyIE49RS5zY3JvbGxMZWZ0KCksTT1lP20uY2xpZW50V2lkdGg6RS53aWR0aCgpO3coW2EsR10pLmNzcygibGVmdCIsTisoTS8yKSk7aWYodil7dyhIKS5jc3Moe2xlZnQ6Tix0b3A6RS5zY3JvbGxUb3AoKSx3aWR0aDpNLGhlaWdodDpFLmhlaWdodCgpfSl9fWZ1bmN0aW9uIGsoTSl7dygib2JqZWN0IikuYWRkKG4/InNlbGVjdCI6ImVtYmVkIikuZWFjaChmdW5jdGlvbihPLFApe2lmKE0pe3cuZGF0YShQLCJzbGltYm94IixQLnN0eWxlLnZpc2liaWxpdHkpfVAuc3R5bGUudmlzaWJpbGl0eT1NPyJoaWRkZW4iOncuZGF0YShQLCJzbGltYm94Iil9KTt2YXIgTj1NPyJiaW5kIjoidW5iaW5kIjtFW05dKCJzY3JvbGwgcmVzaXplIix6KTt3KGRvY3VtZW50KVtOXSgia2V5ZG93biIscCl9ZnVuY3Rpb24gcChPKXt2YXIgTj1PLmtleUNvZGUsTT13LmluQXJyYXk7cmV0dXJuKE0oTix1LmNsb3NlS2V5cyk+PTApP0MoKTooTShOLHUubmV4dEtleXMpPj0wKT9mKCk6KE0oTix1LnByZXZpb3VzS2V5cyk+PTApP0IoKTpmYWxzZX1mdW5jdGlvbiBCKCl7cmV0dXJuIGIoeCl9ZnVuY3Rpb24gZigpe3JldHVybiBiKEQpfWZ1bmN0aW9uIGIoTSl7aWYoTT49MCl7Rj1NO289Z1tGXVswXTt4PShGfHwodS5sb29wP2cubGVuZ3RoOjApKS0xO0Q9KChGKzEpJWcubGVuZ3RoKXx8KHUubG9vcD8wOi0xKTtyKCk7YS5jbGFzc05hbWU9ImxiTG9hZGluZyI7bD1uZXcgSW1hZ2UoKTtsLm9ubG9hZD1qO2wuc3JjPW99cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIGooKXthLmNsYXNzTmFtZT0iIjt3KGgpLmNzcyh7YmFja2dyb3VuZEltYWdlOiJ1cmwoIitvKyIpIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6IiJ9KTt3KHEpLndpZHRoKGwud2lkdGgpO3coW3EsSSxkXSkuaGVpZ2h0KGwuaGVpZ2h0KTt3KEEpLmh0bWwoZ1tGXVsxXXx8IiIpO3coSykuaHRtbCgoKChnLmxlbmd0aD4xKSYmdS5jb3VudGVyVGV4dCl8fCIiKS5yZXBsYWNlKC97eH0vLEYrMSkucmVwbGFjZSgve3l9LyxnLmxlbmd0aCkpO2lmKHg+PTApe3Quc3JjPWdbeF1bMF19aWYoRD49MCl7Si5zcmM9Z1tEXVswXX1MPWgub2Zmc2V0V2lkdGg7cz1oLm9mZnNldEhlaWdodDt2YXIgTT1NYXRoLm1heCgwLHktKHMvMikpO2lmKGEub2Zmc2V0SGVpZ2h0IT1zKXt3KGEpLmFuaW1hdGUoe2hlaWdodDpzLHRvcDpNfSx1LnJlc2l6ZUR1cmF0aW9uLHUucmVzaXplRWFzaW5nKX1pZihhLm9mZnNldFdpZHRoIT1MKXt3KGEpLmFuaW1hdGUoe3dpZHRoOkwsbWFyZ2luTGVmdDotTC8yfSx1LnJlc2l6ZUR1cmF0aW9uLHUucmVzaXplRWFzaW5nKX13KGEpLnF1ZXVlKGZ1bmN0aW9uKCl7dyhHKS5jc3Moe3dpZHRoOkwsdG9wOk0rcyxtYXJnaW5MZWZ0Oi1MLzIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiIifSk7dyhoKS5jc3Moe2Rpc3BsYXk6Im5vbmUiLHZpc2liaWxpdHk6IiIsb3BhY2l0eToiIn0pLmZhZGVJbih1LmltYWdlRmFkZUR1cmF0aW9uLGkpfSl9ZnVuY3Rpb24gaSgpe2lmKHg+PTApe3coSSkuc2hvdygpfWlmKEQ+PTApe3coZCkuc2hvdygpfXcoYykuY3NzKCJtYXJnaW5Ub3AiLC1jLm9mZnNldEhlaWdodCkuYW5pbWF0ZSh7bWFyZ2luVG9wOjB9LHUuY2FwdGlvbkFuaW1hdGlvbkR1cmF0aW9uKTtHLnN0eWxlLnZpc2liaWxpdHk9IiJ9ZnVuY3Rpb24gcigpe2wub25sb2FkPW51bGw7bC5zcmM9dC5zcmM9Si5zcmM9bzt3KFthLGgsY10pLnN0b3AodHJ1ZSk7dyhbSSxkLGgsR10pLmhpZGUoKX1mdW5jdGlvbiBDKCl7aWYoRj49MCl7cigpO0Y9eD1EPS0xO3coYSkuaGlkZSgpO3coSCkuc3RvcCgpLmZhZGVPdXQodS5vdmVybGF5RmFkZUR1cmF0aW9uLGspfXJldHVybiBmYWxzZX19KShqUXVlcnkpOwoKLy8gQVVUT0xPQUQgQ09ERSBCTE9DSyAoTUFZIEJFIENIQU5HRUQgT1IgUkVNT1ZFRCkKalF1ZXJ5KGZ1bmN0aW9uKCQpIHsKCSQoImFbcmVsXj0nbGlnaHRib3gnXSIpLnNsaW1ib3goey8qIFB1dCBjdXN0b20gb3B0aW9ucyBoZXJlICovfSwgbnVsbCwgZnVuY3Rpb24oZWwpIHsKCQlyZXR1cm4gKHRoaXMgPT0gZWwpIHx8ICgodGhpcy5yZWwubGVuZ3RoID4gOCkgJiYgKHRoaXMucmVsID09IGVsLnJlbCkpOwoJfSk7Cn0pOw==]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/README.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U0xJTUJPWCBWMi4wMiBSRUFETUUKPT09PT09PT09PT09PT09PT09PT0KVGhlIHVsdGltYXRlIGxpZ2h0d2VpZ2h0IExpZ2h0Ym94IGNsb25lCi4uLiBub3cgdXNpbmcgdGhlIGpRdWVyeSBqYXZhc2NyaXB0IGxpYnJhcnkKCihjKSBDaHJpc3RvcGhlIEJleWxzIDIwMDctMjAwOQpNSVQtc3R5bGUgbGljZW5zZQoKaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3NsaW1ib3gvCgoKSW5jbHVkZWQgZmlsZXM6CgpleGFtcGxlLmh0bWwJCUEgc2ltcGxlIGV4YW1wbGUgcGFnZSBkZW1vbnN0cmF0aW5nIGhvdyB0byB1c2UgU2xpbWJveCB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCmV4YW1wbGUuanBnCQlBbiBleGFtcGxlIGltYWdlIHVzZWQgb24gdGhlIGV4YW1wbGUgcGFnZS4KUkVBRE1FLnR4dAkJVGhlIGZpbGUgeW91IGFyZSByZWFkaW5nLgpjc3MvKgkJCVRoZSBTbGltYm94IHN0eWxlc2hlZXQgYW5kIGl0cyBhc3NvY2lhdGVkIGltYWdlcy4gWW91IGNhbiBlZGl0IHRoZW0gdG8gY3VzdG9taXplIFNsaW1ib3ggYXBwZWFyYW5jZS4KanMvc2xpbWJveDIuanMJCVRoZSBtaW5pZmllZCB2ZXJzaW9uIG9mIFNsaW1ib3ggMiwgcGx1cyB0aGUgZWRpdGFibGUgYXV0b2xvYWRpbmcgY29kZSB1c2luZyBkZWZhdWx0IG9wdGlvbnMuCnNyYy9zbGltYm94Mi5qcwkJVGhlIFNsaW1ib3ggMiBzb3VyY2UuIENvbnRhaW5zIG1hbnkgY29tbWVudHMgYW5kIGlzIG5vdCBzdWl0YWJsZSBmb3IgcHJvZHVjdGlvbiB1c2UgKG5lZWRzIHRvIGJlIG1pbmlmaWVkIGZpcnN0KS4KZXh0cmEvKgkJCVNvbWUgZXh0cmEgc2NyaXB0cyB0aGF0IHlvdSBjYW4gYWRkIHRvIHRoZSBhdXRvbG9hZCBjb2RlIGJsb2NrIGluc2lkZSBzbGltYm94Mi5qcyB0byBhZGQgc3BlY2lhbCBmdW5jdGlvbmFsaXR5LgoKClNsaW1ib3ggMiByZXF1aXJlcyB0aGUgalF1ZXJ5IGxpYnJhcnkgKHZlcnNpb24gMS4yLjYgb3IgbW9yZSByZWNlbnQpIHRvIGJlIGluc3RhbGxlZCBvbiB5b3VyIHdlYnNpdGUgaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseS4KCllvdSBjYW4gcmVtb3ZlIG9yIGN1c3RvbWl6ZSB0aGUgcHJvdmlkZWQgYXV0b2xvYWQgY29kZSBibG9jayBieSBlZGl0aW5nIHRoZSBzbGltYm94Mi5qcyBmaWxlLiBCeSBkZWZhdWx0LCBpdCBiZWhhdmVzIGxpa2UgTGlnaHRib3guCldoZW4gZGVwbG95aW5nIHNsaW1ib3gyLmpzLCB5b3UgTVVTVCBhbHdheXMgcHJlc2VydmUgdGhlIGNvcHlyaWdodCBub3RpY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KCklmIHlvdSBhcmUgYSBkZXZlbG9wZXIgYW5kIHdhbnQgdG8gZWRpdCB0aGUgcHJvdmlkZWQgc291cmNlIGNvZGUsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIG1pbmlmeSB0aGUgc2NyaXB0IHVzaW5nICJZVUkgQ29tcHJlc3NvciIKYnkgSnVsaWVuIExlY29tdGUgYmVmb3JlIGRpc3RyaWJ1dGlvbi4gSXQgd2lsbCBzdHJpcCBzcGFjZXMgYW5kIGNvbW1lbnRzIGFuZCBzaHJpbmsgdGhlIHZhcmlhYmxlIG5hbWVzIGluIG9yZGVyIHRvIG9idGFpbiB0aGUgc21hbGxlc3QgZmlsZSBzaXplLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBvZmZpY2lhbCBwcm9qZWN0IHBhZ2UuCgoKRW5qb3kh]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/slimbox/src/autoload.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQVVUT0xPQUQgQ09ERSBCTE9DSyAoTUFZIEJFIENIQU5HRUQgT1IgUkVNT1ZFRCkKalF1ZXJ5KGZ1bmN0aW9uKCQpIHsKCSQoImFbcmVsXj0nbGlnaHRib3gnXSIpLnNsaW1ib3goey8qIFB1dCBjdXN0b20gb3B0aW9ucyBoZXJlICovfSwgbnVsbCwgZnVuY3Rpb24oZWwpIHsKCQlyZXR1cm4gKHRoaXMgPT0gZWwpIHx8ICgodGhpcy5yZWwubGVuZ3RoID4gOCkgJiYgKHRoaXMucmVsID09IGVsLnJlbCkpOwoJfSk7Cn0pOw==]]></data>
	</file>
	<file>
	  <filename>/templates/slimbox/src/slimbox2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCglTbGltYm94IHYyLjAyIC0gVGhlIHVsdGltYXRlIGxpZ2h0d2VpZ2h0IExpZ2h0Ym94IGNsb25lIGZvciBqUXVlcnkKCShjKSAyMDA3LTIwMDkgQ2hyaXN0b3BoZSBCZXlscyA8aHR0cDovL3d3dy5kaWdpdGFsaWEuYmU+CglNSVQtc3R5bGUgbGljZW5zZS4KKi8KCihmdW5jdGlvbigkKSB7CgoJLy8gR2xvYmFsIHZhcmlhYmxlcywgYWNjZXNzaWJsZSB0byBTbGltYm94IG9ubHkKCXZhciB3aW4gPSAkKHdpbmRvdyksIG9wdGlvbnMsIGltYWdlcywgYWN0aXZlSW1hZ2UgPSAtMSwgYWN0aXZlVVJMLCBwcmV2SW1hZ2UsIG5leHRJbWFnZSwgY29tcGF0aWJsZU92ZXJsYXksIG1pZGRsZSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCwgaWU2ID0gIXdpbmRvdy5YTUxIdHRwUmVxdWVzdCwKCQlvcGVyYUZpeCA9IHdpbmRvdy5vcGVyYSAmJiAoZG9jdW1lbnQuY29tcGF0TW9kZSA9PSAiQ1NTMUNvbXBhdCIpICYmICgkLmJyb3dzZXIudmVyc2lvbiA+PSA5LjMpLCBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCgoJLy8gUHJlbG9hZCBpbWFnZXMKCXByZWxvYWQgPSB7fSwgcHJlbG9hZFByZXYgPSBuZXcgSW1hZ2UoKSwgcHJlbG9hZE5leHQgPSBuZXcgSW1hZ2UoKSwKCgkvLyBET00gZWxlbWVudHMKCW92ZXJsYXksIGNlbnRlciwgaW1hZ2UsIHNpemVyLCBwcmV2TGluaywgbmV4dExpbmssIGJvdHRvbUNvbnRhaW5lciwgYm90dG9tLCBjYXB0aW9uLCBudW1iZXI7CgoJLyoKCQlJbml0aWFsaXphdGlvbgoJKi8KCgkkKGZ1bmN0aW9uKCkgewoJCS8vIEFwcGVuZCB0aGUgU2xpbWJveCBIVE1MIGNvZGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQKCQkkKCJib2R5IikuYXBwZW5kKAoJCQkkKFsKCQkJCW92ZXJsYXkgPSAkKCc8ZGl2IGlkPSJsYk92ZXJsYXkiIC8+JylbMF0sCgkJCQljZW50ZXIgPSAkKCc8ZGl2IGlkPSJsYkNlbnRlciIgLz4nKVswXSwKCQkJCWJvdHRvbUNvbnRhaW5lciA9ICQoJzxkaXYgaWQ9ImxiQm90dG9tQ29udGFpbmVyIiAvPicpWzBdCgkJCV0pLmNzcygiZGlzcGxheSIsICJub25lIikKCQkpOwoKCQlpbWFnZSA9ICQoJzxkaXYgaWQ9ImxiSW1hZ2UiIC8+JykuYXBwZW5kVG8oY2VudGVyKS5hcHBlbmQoCgkJCXNpemVyID0gJCgnPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyIgLz4nKS5hcHBlbmQoWwoJCQkJcHJldkxpbmsgPSAkKCc8YSBpZD0ibGJQcmV2TGluayIgaHJlZj0iIyIgLz4nKS5jbGljayhwcmV2aW91cylbMF0sCgkJCQluZXh0TGluayA9ICQoJzxhIGlkPSJsYk5leHRMaW5rIiBocmVmPSIjIiAvPicpLmNsaWNrKG5leHQpWzBdCgkJCV0pWzBdCgkJKVswXTsKCgkJYm90dG9tID0gJCgnPGRpdiBpZD0ibGJCb3R0b20iIC8+JykuYXBwZW5kVG8oYm90dG9tQ29udGFpbmVyKS5hcHBlbmQoWwoJCQkkKCc8YSBpZD0ibGJDbG9zZUxpbmsiIGhyZWY9IiMiIC8+JykuYWRkKG92ZXJsYXkpLmNsaWNrKGNsb3NlKVswXSwKCQkJY2FwdGlvbiA9ICQoJzxkaXYgaWQ9ImxiQ2FwdGlvbiIgLz4nKVswXSwKCQkJbnVtYmVyID0gJCgnPGRpdiBpZD0ibGJOdW1iZXIiIC8+JylbMF0sCgkJCSQoJzxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyIgLz4nKVswXQoJCV0pWzBdOwoJfSk7CgoKCS8qCgkJQVBJCgkqLwoKCS8vIE9wZW4gU2xpbWJveCB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycwoJJC5zbGltYm94ID0gZnVuY3Rpb24oX2ltYWdlcywgc3RhcnRJbWFnZSwgX29wdGlvbnMpIHsKCQlvcHRpb25zID0gJC5leHRlbmQoewoJCQlsb29wOiBmYWxzZSwJCQkJLy8gQWxsb3dzIHRvIG5hdmlnYXRlIGJldHdlZW4gZmlyc3QgYW5kIGxhc3QgaW1hZ2VzCgkJCW92ZXJsYXlPcGFjaXR5OiAwLjgsCQkJLy8gMSBpcyBvcGFxdWUsIDAgaXMgY29tcGxldGVseSB0cmFuc3BhcmVudCAoY2hhbmdlIHRoZSBjb2xvciBpbiB0aGUgQ1NTIGZpbGUpCgkJCW92ZXJsYXlGYWRlRHVyYXRpb246IDQwMCwJCS8vIER1cmF0aW9uIG9mIHRoZSBvdmVybGF5IGZhZGUtaW4gYW5kIGZhZGUtb3V0IGFuaW1hdGlvbnMgKGluIG1pbGxpc2Vjb25kcykKCQkJcmVzaXplRHVyYXRpb246IDQwMCwJCQkvLyBEdXJhdGlvbiBvZiBlYWNoIG9mIHRoZSBib3ggcmVzaXplIGFuaW1hdGlvbnMgKGluIG1pbGxpc2Vjb25kcykKCQkJcmVzaXplRWFzaW5nOiAic3dpbmciLAkJCS8vICJzd2luZyIgaXMgalF1ZXJ5J3MgZGVmYXVsdCBlYXNpbmcKCQkJaW5pdGlhbFdpZHRoOiAyNTAsCQkJLy8gSW5pdGlhbCB3aWR0aCBvZiB0aGUgYm94IChpbiBwaXhlbHMpCgkJCWluaXRpYWxIZWlnaHQ6IDI1MCwJCQkvLyBJbml0aWFsIGhlaWdodCBvZiB0aGUgYm94IChpbiBwaXhlbHMpCgkJCWltYWdlRmFkZUR1cmF0aW9uOiA0MDAsCQkJLy8gRHVyYXRpb24gb2YgdGhlIGltYWdlIGZhZGUtaW4gYW5pbWF0aW9uIChpbiBtaWxsaXNlY29uZHMpCgkJCWNhcHRpb25BbmltYXRpb25EdXJhdGlvbjogNDAwLAkJLy8gRHVyYXRpb24gb2YgdGhlIGNhcHRpb24gYW5pbWF0aW9uIChpbiBtaWxsaXNlY29uZHMpCgkJCWNvdW50ZXJUZXh0OiAiSW1hZ2Uge3h9IG9mIHt5fSIsCS8vIFRyYW5zbGF0ZSBvciBjaGFuZ2UgYXMgeW91IHdpc2gsIG9yIHNldCBpdCB0byBmYWxzZSB0byBkaXNhYmxlIGNvdW50ZXIgdGV4dCBmb3IgaW1hZ2UgZ3JvdXBzCgkJCWNsb3NlS2V5czogWzI3LCA4OCwgNjddLAkJLy8gQXJyYXkgb2Yga2V5Y29kZXMgdG8gY2xvc2UgU2xpbWJveCwgZGVmYXVsdDogRXNjICgyNyksICd4JyAoODgpLCAnYycgKDY3KQoJCQlwcmV2aW91c0tleXM6IFszNywgODBdLAkJCS8vIEFycmF5IG9mIGtleWNvZGVzIHRvIG5hdmlnYXRlIHRvIHRoZSBwcmV2aW91cyBpbWFnZSwgZGVmYXVsdDogTGVmdCBhcnJvdyAoMzcpLCAncCcgKDgwKQoJCQluZXh0S2V5czogWzM5LCA3OF0JCQkvLyBBcnJheSBvZiBrZXljb2RlcyB0byBuYXZpZ2F0ZSB0byB0aGUgbmV4dCBpbWFnZSwgZGVmYXVsdDogUmlnaHQgYXJyb3cgKDM5KSwgJ24nICg3OCkKCQl9LCBfb3B0aW9ucyk7CgoJCS8vIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGEgc2luZ2xlIGltYWdlLCB3aXRoIFVSTCBhbmQgVGl0bGUgYXMgZmlyc3QgdHdvIGFyZ3VtZW50cwoJCWlmICh0eXBlb2YgX2ltYWdlcyA9PSAic3RyaW5nIikgewoJCQlfaW1hZ2VzID0gW1tfaW1hZ2VzLCBzdGFydEltYWdlXV07CgkJCXN0YXJ0SW1hZ2UgPSAwOwoJCX0KCgkJbWlkZGxlID0gd2luLnNjcm9sbFRvcCgpICsgKChvcGVyYUZpeCA/IGRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiB3aW4uaGVpZ2h0KCkpIC8gMik7CgkJY2VudGVyV2lkdGggPSBvcHRpb25zLmluaXRpYWxXaWR0aDsKCQljZW50ZXJIZWlnaHQgPSBvcHRpb25zLmluaXRpYWxIZWlnaHQ7CgkJJChjZW50ZXIpLmNzcyh7dG9wOiBNYXRoLm1heCgwLCBtaWRkbGUgLSAoY2VudGVySGVpZ2h0IC8gMikpLCB3aWR0aDogY2VudGVyV2lkdGgsIGhlaWdodDogY2VudGVySGVpZ2h0LCBtYXJnaW5MZWZ0OiAtY2VudGVyV2lkdGgvMn0pLnNob3coKTsKCQljb21wYXRpYmxlT3ZlcmxheSA9IGllNiB8fCAob3ZlcmxheS5jdXJyZW50U3R5bGUgJiYgKG92ZXJsYXkuY3VycmVudFN0eWxlLnBvc2l0aW9uICE9ICJmaXhlZCIpKTsKCQlpZiAoY29tcGF0aWJsZU92ZXJsYXkpIG92ZXJsYXkuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwoJCSQob3ZlcmxheSkuY3NzKCJvcGFjaXR5Iiwgb3B0aW9ucy5vdmVybGF5T3BhY2l0eSkuZmFkZUluKG9wdGlvbnMub3ZlcmxheUZhZGVEdXJhdGlvbik7CgkJcG9zaXRpb24oKTsKCQlzZXR1cCgxKTsKCgkJaW1hZ2VzID0gX2ltYWdlczsKCQlvcHRpb25zLmxvb3AgPSBvcHRpb25zLmxvb3AgJiYgKGltYWdlcy5sZW5ndGggPiAxKTsKCQlyZXR1cm4gY2hhbmdlSW1hZ2Uoc3RhcnRJbWFnZSk7Cgl9OwoKCS8qCgkJb3B0aW9uczoJT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QsIHNlZSBqUXVlcnkuc2xpbWJveCgpCgkJbGlua01hcHBlcjoJT3B0aW9uYWwgZnVuY3Rpb24gdGFraW5nIGEgbGluayBET00gZWxlbWVudCBhbmQgYW4gaW5kZXggYXMgYXJndW1lbnRzIGFuZCByZXR1cm5pbmcgYW4gYXJyYXkgY29udGFpbmluZyAyIGVsZW1lbnRzOgoJCQkJdGhlIGltYWdlIFVSTCBhbmQgdGhlIGltYWdlIGNhcHRpb24gKG1heSBjb250YWluIEhUTUwpCgkJbGlua3NGaWx0ZXI6CU9wdGlvbmFsIGZ1bmN0aW9uIHRha2luZyBhIGxpbmsgRE9NIGVsZW1lbnQgYW5kIGFuIGluZGV4IGFzIGFyZ3VtZW50cyBhbmQgcmV0dXJuaW5nIHRydWUgaWYgdGhlIGVsZW1lbnQgaXMgcGFydCBvZgoJCQkJdGhlIGltYWdlIGNvbGxlY3Rpb24gdGhhdCB3aWxsIGJlIHNob3duIG9uIGNsaWNrLCBmYWxzZSBpZiBub3QuICJ0aGlzIiByZWZlcnMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZC4KCQkJCVRoaXMgZnVuY3Rpb24gbXVzdCBhbHdheXMgcmV0dXJuIHRydWUgd2hlbiB0aGUgRE9NIGVsZW1lbnQgYXJndW1lbnQgaXMgInRoaXMiLgoJKi8KCSQuZm4uc2xpbWJveCA9IGZ1bmN0aW9uKF9vcHRpb25zLCBsaW5rTWFwcGVyLCBsaW5rc0ZpbHRlcikgewoJCWxpbmtNYXBwZXIgPSBsaW5rTWFwcGVyIHx8IGZ1bmN0aW9uKGVsKSB7CgkJCXJldHVybiBbZWwuaHJlZiwgZWwudGl0bGVdOwoJCX07CgoJCWxpbmtzRmlsdGVyID0gbGlua3NGaWx0ZXIgfHwgZnVuY3Rpb24oKSB7CgkJCXJldHVybiB0cnVlOwoJCX07CgoJCXZhciBsaW5rcyA9IHRoaXM7CgoJCXJldHVybiBsaW5rcy51bmJpbmQoImNsaWNrIikuY2xpY2soZnVuY3Rpb24oKSB7CgkJCS8vIEJ1aWxkIHRoZSBsaXN0IG9mIGltYWdlcyB0aGF0IHdpbGwgYmUgZGlzcGxheWVkCgkJCXZhciBsaW5rID0gdGhpcywgc3RhcnRJbmRleCA9IDAsIGZpbHRlcmVkTGlua3MsIGkgPSAwLCBsZW5ndGg7CgkJCWZpbHRlcmVkTGlua3MgPSAkLmdyZXAobGlua3MsIGZ1bmN0aW9uKGVsLCBpKSB7CgkJCQlyZXR1cm4gbGlua3NGaWx0ZXIuY2FsbChsaW5rLCBlbCwgaSk7CgkJCX0pOwoKCQkJLy8gV2UgY2Fubm90IHVzZSBqUXVlcnkubWFwKCkgYmVjYXVzZSBpdCBmbGF0dGVucyB0aGUgcmV0dXJuZWQgYXJyYXkKCQkJZm9yIChsZW5ndGggPSBmaWx0ZXJlZExpbmtzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7CgkJCQlpZiAoZmlsdGVyZWRMaW5rc1tpXSA9PSBsaW5rKSBzdGFydEluZGV4ID0gaTsKCQkJCWZpbHRlcmVkTGlua3NbaV0gPSBsaW5rTWFwcGVyKGZpbHRlcmVkTGlua3NbaV0sIGkpOwoJCQl9CgoJCQlyZXR1cm4gJC5zbGltYm94KGZpbHRlcmVkTGlua3MsIHN0YXJ0SW5kZXgsIF9vcHRpb25zKTsKCQl9KTsKCX07CgoKCS8qCgkJSW50ZXJuYWwgZnVuY3Rpb25zCgkqLwoKCWZ1bmN0aW9uIHBvc2l0aW9uKCkgewoJCXZhciBsID0gd2luLnNjcm9sbExlZnQoKSwgdyA9IG9wZXJhRml4ID8gZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDogd2luLndpZHRoKCk7CgkJJChbY2VudGVyLCBib3R0b21Db250YWluZXJdKS5jc3MoImxlZnQiLCBsICsgKHcgLyAyKSk7CgkJaWYgKGNvbXBhdGlibGVPdmVybGF5KSAkKG92ZXJsYXkpLmNzcyh7bGVmdDogbCwgdG9wOiB3aW4uc2Nyb2xsVG9wKCksIHdpZHRoOiB3LCBoZWlnaHQ6IHdpbi5oZWlnaHQoKX0pOwoJfQoKCWZ1bmN0aW9uIHNldHVwKG9wZW4pIHsKCQkkKCJvYmplY3QiKS5hZGQoaWU2ID8gInNlbGVjdCIgOiAiZW1iZWQiKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkgewoJCQlpZiAob3BlbikgJC5kYXRhKGVsLCAic2xpbWJveCIsIGVsLnN0eWxlLnZpc2liaWxpdHkpOwoJCQllbC5zdHlsZS52aXNpYmlsaXR5ID0gb3BlbiA/ICJoaWRkZW4iIDogJC5kYXRhKGVsLCAic2xpbWJveCIpOwoJCX0pOwoJCXZhciBmbiA9IG9wZW4gPyAiYmluZCIgOiAidW5iaW5kIjsKCQl3aW5bZm5dKCJzY3JvbGwgcmVzaXplIiwgcG9zaXRpb24pOwoJCSQoZG9jdW1lbnQpW2ZuXSgia2V5ZG93biIsIGtleURvd24pOwoJfQoKCWZ1bmN0aW9uIGtleURvd24oZXZlbnQpIHsKCQl2YXIgY29kZSA9IGV2ZW50LmtleUNvZGUsIGZuID0gJC5pbkFycmF5OwoJCS8vIFByZXZlbnQgZGVmYXVsdCBrZXlib2FyZCBhY3Rpb24gKGxpa2UgbmF2aWdhdGluZyBpbnNpZGUgdGhlIHBhZ2UpCgkJcmV0dXJuIChmbihjb2RlLCBvcHRpb25zLmNsb3NlS2V5cykgPj0gMCkgPyBjbG9zZSgpCgkJCTogKGZuKGNvZGUsIG9wdGlvbnMubmV4dEtleXMpID49IDApID8gbmV4dCgpCgkJCTogKGZuKGNvZGUsIG9wdGlvbnMucHJldmlvdXNLZXlzKSA+PSAwKSA/IHByZXZpb3VzKCkKCQkJOiBmYWxzZTsKCX0KCglmdW5jdGlvbiBwcmV2aW91cygpIHsKCQlyZXR1cm4gY2hhbmdlSW1hZ2UocHJldkltYWdlKTsKCX0KCglmdW5jdGlvbiBuZXh0KCkgewoJCXJldHVybiBjaGFuZ2VJbWFnZShuZXh0SW1hZ2UpOwoJfQoKCWZ1bmN0aW9uIGNoYW5nZUltYWdlKGltYWdlSW5kZXgpIHsKCQlpZiAoaW1hZ2VJbmRleCA+PSAwKSB7CgkJCWFjdGl2ZUltYWdlID0gaW1hZ2VJbmRleDsKCQkJYWN0aXZlVVJMID0gaW1hZ2VzW2FjdGl2ZUltYWdlXVswXTsKCQkJcHJldkltYWdlID0gKGFjdGl2ZUltYWdlIHx8IChvcHRpb25zLmxvb3AgPyBpbWFnZXMubGVuZ3RoIDogMCkpIC0gMTsKCQkJbmV4dEltYWdlID0gKChhY3RpdmVJbWFnZSArIDEpICUgaW1hZ2VzLmxlbmd0aCkgfHwgKG9wdGlvbnMubG9vcCA/IDAgOiAtMSk7CgoJCQlzdG9wKCk7CgkJCWNlbnRlci5jbGFzc05hbWUgPSAibGJMb2FkaW5nIjsKCgkJCXByZWxvYWQgPSBuZXcgSW1hZ2UoKTsKCQkJcHJlbG9hZC5vbmxvYWQgPSBhbmltYXRlQm94OwoJCQlwcmVsb2FkLnNyYyA9IGFjdGl2ZVVSTDsKCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCglmdW5jdGlvbiBhbmltYXRlQm94KCkgewoJCWNlbnRlci5jbGFzc05hbWUgPSAiIjsKCQkkKGltYWdlKS5jc3Moe2JhY2tncm91bmRJbWFnZTogInVybCgiICsgYWN0aXZlVVJMICsgIikiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiwgZGlzcGxheTogIiJ9KTsKCQkkKHNpemVyKS53aWR0aChwcmVsb2FkLndpZHRoKTsKCQkkKFtzaXplciwgcHJldkxpbmssIG5leHRMaW5rXSkuaGVpZ2h0KHByZWxvYWQuaGVpZ2h0KTsKCgkJJChjYXB0aW9uKS5odG1sKGltYWdlc1thY3RpdmVJbWFnZV1bMV0gfHwgIiIpOwoJCSQobnVtYmVyKS5odG1sKCgoKGltYWdlcy5sZW5ndGggPiAxKSAmJiBvcHRpb25zLmNvdW50ZXJUZXh0KSB8fCAiIikucmVwbGFjZSgve3h9LywgYWN0aXZlSW1hZ2UgKyAxKS5yZXBsYWNlKC97eX0vLCBpbWFnZXMubGVuZ3RoKSk7CgoJCWlmIChwcmV2SW1hZ2UgPj0gMCkgcHJlbG9hZFByZXYuc3JjID0gaW1hZ2VzW3ByZXZJbWFnZV1bMF07CgkJaWYgKG5leHRJbWFnZSA+PSAwKSBwcmVsb2FkTmV4dC5zcmMgPSBpbWFnZXNbbmV4dEltYWdlXVswXTsKCgkJY2VudGVyV2lkdGggPSBpbWFnZS5vZmZzZXRXaWR0aDsKCQljZW50ZXJIZWlnaHQgPSBpbWFnZS5vZmZzZXRIZWlnaHQ7CgkJdmFyIHRvcCA9IE1hdGgubWF4KDAsIG1pZGRsZSAtIChjZW50ZXJIZWlnaHQgLyAyKSk7CgkJaWYgKGNlbnRlci5vZmZzZXRIZWlnaHQgIT0gY2VudGVySGVpZ2h0KSB7CgkJCSQoY2VudGVyKS5hbmltYXRlKHtoZWlnaHQ6IGNlbnRlckhlaWdodCwgdG9wOiB0b3B9LCBvcHRpb25zLnJlc2l6ZUR1cmF0aW9uLCBvcHRpb25zLnJlc2l6ZUVhc2luZyk7CgkJfQoJCWlmIChjZW50ZXIub2Zmc2V0V2lkdGggIT0gY2VudGVyV2lkdGgpIHsKCQkJJChjZW50ZXIpLmFuaW1hdGUoe3dpZHRoOiBjZW50ZXJXaWR0aCwgbWFyZ2luTGVmdDogLWNlbnRlcldpZHRoLzJ9LCBvcHRpb25zLnJlc2l6ZUR1cmF0aW9uLCBvcHRpb25zLnJlc2l6ZUVhc2luZyk7CgkJfQoJCSQoY2VudGVyKS5xdWV1ZShmdW5jdGlvbigpIHsKCQkJJChib3R0b21Db250YWluZXIpLmNzcyh7d2lkdGg6IGNlbnRlcldpZHRoLCB0b3A6IHRvcCArIGNlbnRlckhlaWdodCwgbWFyZ2luTGVmdDogLWNlbnRlcldpZHRoLzIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiIn0pOwoJCQkkKGltYWdlKS5jc3Moe2Rpc3BsYXk6ICJub25lIiwgdmlzaWJpbGl0eTogIiIsIG9wYWNpdHk6ICIifSkuZmFkZUluKG9wdGlvbnMuaW1hZ2VGYWRlRHVyYXRpb24sIGFuaW1hdGVDYXB0aW9uKTsKCQl9KTsKCX0KCglmdW5jdGlvbiBhbmltYXRlQ2FwdGlvbigpIHsKCQlpZiAocHJldkltYWdlID49IDApICQocHJldkxpbmspLnNob3coKTsKCQlpZiAobmV4dEltYWdlID49IDApICQobmV4dExpbmspLnNob3coKTsKCQkkKGJvdHRvbSkuY3NzKCJtYXJnaW5Ub3AiLCAtYm90dG9tLm9mZnNldEhlaWdodCkuYW5pbWF0ZSh7bWFyZ2luVG9wOiAwfSwgb3B0aW9ucy5jYXB0aW9uQW5pbWF0aW9uRHVyYXRpb24pOwoJCWJvdHRvbUNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gIiI7Cgl9CgoJZnVuY3Rpb24gc3RvcCgpIHsKCQlwcmVsb2FkLm9ubG9hZCA9IG51bGw7CgkJcHJlbG9hZC5zcmMgPSBwcmVsb2FkUHJldi5zcmMgPSBwcmVsb2FkTmV4dC5zcmMgPSBhY3RpdmVVUkw7CgkJJChbY2VudGVyLCBpbWFnZSwgYm90dG9tXSkuc3RvcCh0cnVlKTsKCQkkKFtwcmV2TGluaywgbmV4dExpbmssIGltYWdlLCBib3R0b21Db250YWluZXJdKS5oaWRlKCk7Cgl9CgoJZnVuY3Rpb24gY2xvc2UoKSB7CgkJaWYgKGFjdGl2ZUltYWdlID49IDApIHsKCQkJc3RvcCgpOwoJCQlhY3RpdmVJbWFnZSA9IHByZXZJbWFnZSA9IG5leHRJbWFnZSA9IC0xOwoJCQkkKGNlbnRlcikuaGlkZSgpOwoJCQkkKG92ZXJsYXkpLnN0b3AoKS5mYWRlT3V0KG9wdGlvbnMub3ZlcmxheUZhZGVEdXJhdGlvbiwgc2V0dXApOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/templates/template_lightbox.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iZ2FsbGVyeSI+DQp7aWYgaXNzZXQoJG1vZHVsZV9tZXNzYWdlKX08aDI+eyRtb2R1bGVfbWVzc2FnZXxlc2NhcGV9PC9oMj57L2lmfQ0Ke2lmIGlzc2V0KCRnYWxsZXJ5dGl0bGUpfTxoMz57JGdhbGxlcnl0aXRsZX08L2gzPnsvaWZ9DQp7aWYgaXNzZXQoJGdhbGxlcnljb21tZW50KX08ZGl2IGNsYXNzPSJnYWxsZXJ5Y29tbWVudCI+eyRnYWxsZXJ5Y29tbWVudH08L2Rpdj57L2lmfQ0KPHA+eyRpbWFnZWNvdW50fTwvcD4NCjxkaXYgY2xhc3M9InBhZ2VuYXZpZ2F0aW9uIj4NCntpZiAkcGFnZXMgPiAxfQ0KPGRpdiBjbGFzcz0icHJldnBhZ2UiPnskcHJldnBhZ2V9PC9kaXY+DQo8ZGl2IGNsYXNzPSJuZXh0cGFnZSI+eyRuZXh0cGFnZX08L2Rpdj4NCnsvaWZ9DQp7aWYgaXNzZXQoJHBhcmVudGxpbmspfTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPnskcGFyZW50bGlua308L2Rpdj57L2lmfQ0Ke2lmICRwYWdlcyA+IDF9PGRpdiBjbGFzcz0icGFnZWxpbmtzIj57JHBhZ2VsaW5rc308L2Rpdj57L2lmfQ0KPC9kaXY+DQoNCntmb3JlYWNoIGZyb209JGltYWdlcyBpdGVtPWltYWdlfQ0KCTxkaXYgY2xhc3M9ImltZyI+DQoJe2lmICRpbWFnZS0+Zm9sZGVybGlua30NCgkJeyRpbWFnZS0+Zm9sZGVybGlua308YnIgLz4NCgkJeyRpbWFnZS0+dGl0bGV9DQoJe2Vsc2V9DQogICA8YSBocmVmPSJ7JGltYWdlLT5maWxlfSIgdGl0bGU9InskaW1hZ2UtPnRpdGxlfSIgcmVsPSJsaWdodGJveFtnYWxsZXJ5XSI+PGltZyBzcmM9InskaW1hZ2UtPnRodW1ifSIgYWx0PSJ7JGltYWdlLT50aXRsZX0iIC8+PC9hPg0KCXsvaWZ9DQoJPC9kaXY+DQp7L2ZvcmVhY2h9DQo8L2Rpdj4NCg0KeyotLS0tLS0tLS0tDQouZ2FsbGVyeSAuaW1nIHsNCglmbG9hdDogbGVmdDsNCgltYXJnaW46IDNweDsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbmF2aWdhdGlvbiB7DQoJaGVpZ2h0OiA1MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucHJldnBhZ2UgYSwgLmdhbGxlcnkgLnByZXZwYWdlIGVtIHsNCglkaXNwbGF5OiBibG9jazsgDQoJd2lkdGg6IDUwcHg7IA0KCWhlaWdodDogMzlweDsNCglmbG9hdDogbGVmdDsgDQoJbWFyZ2luOiAwOw0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvcHJldmlvdXMucG5nKSB0cmFuc3BhcmVudCBuby1yZXBlYXQgMCAwOw0KfQ0KDQouZ2FsbGVyeSAubmV4dHBhZ2UgYSwgLmdhbGxlcnkgLm5leHRwYWdlIGVtIHsNCglkaXNwbGF5OiBibG9jazsgDQoJd2lkdGg6IDUwcHg7IA0KCWhlaWdodDogMzlweDsNCglmbG9hdDogbGVmdDsgDQoJbWFyZ2luOiAwIDZweCAwIDA7DQoJdGV4dC1pbmRlbnQ6IC0xMDAwcHg7DQoJYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9uZXh0LnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLnBhcmVudGxpbmsgYSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvdXBwYWdlLnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VuYXZpZ2F0aW9uIGE6aG92ZXIgew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwcHg7DQp9DQoNCi5nYWxsZXJ5IC5wcmV2cGFnZSBlbSwgLmdhbGxlcnkgLm5leHRwYWdlIGVtIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucGFnZWxpbmtzIHsNCglmbG9hdDogcmlnaHQ7DQoJYm9yZGVyLXJpZ2h0OiAycHggc29saWQgIzY2NjsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VsaW5rcyBhLCAuZ2FsbGVyeSAucGFnZWxpbmtzIGVtIHsNCgltYXJnaW4tdG9wOiA2cHg7DQoJcGFkZGluZzogMCA2cHg7DQoJYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjNjY2Ow0KCXRleHQtYWxpZ246IGNlbnRlcjsNCglmb250OiBib2xkIDExcHggdmVyZGFuYTsgY29sb3I6ICM2NjY7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbGlua3MgZW0gew0KCWNvbG9yOiAjMDAwOw0KfQ0KDQoNCiNsaWdodGJveHsJcG9zaXRpb246IGFic29sdXRlOwlsZWZ0OiAwOyB3aWR0aDogMTAwJTsgei1pbmRleDogMTAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGxpbmUtaGVpZ2h0OiAwO30NCiNsaWdodGJveCBpbWd7IHdpZHRoOiBhdXRvOyBoZWlnaHQ6IGF1dG87fQ0KI2xpZ2h0Ym94IGEgaW1neyBib3JkZXI6IG5vbmU7IH0NCg0KI291dGVySW1hZ2VDb250YWluZXJ7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgd2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDI1MHB4OyBtYXJnaW46IDAgYXV0bzsgfQ0KI2ltYWdlQ29udGFpbmVyeyBwYWRkaW5nOiAxMHB4OyB9DQoNCiNsb2FkaW5neyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDAlOyBsZWZ0OiAwJTsgaGVpZ2h0OiAyNSU7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGxpbmUtaGVpZ2h0OiAwOyB9DQojaG92ZXJOYXZ7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyB6LWluZGV4OiAxMDsgfQ0KI2ltYWdlQ29udGFpbmVyPiNob3Zlck5hdnsgbGVmdDogMDt9DQojaG92ZXJOYXYgYXsgb3V0bGluZTogbm9uZTt9DQoNCiNwcmV2TGluaywgI25leHRMaW5reyB3aWR0aDogNDklOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL2dpZjtiYXNlNjQsQUFBQSk7IC8qIFRyaWNrIElFIGludG8gc2hvd2luZyBob3ZlciAqLyBkaXNwbGF5OiBibG9jazsgfQ0KI3ByZXZMaW5rIHsgbGVmdDogMDsgZmxvYXQ6IGxlZnQ7fQ0KI25leHRMaW5rIHsgcmlnaHQ6IDA7IGZsb2F0OiByaWdodDt9DQojcHJldkxpbms6aG92ZXIsICNwcmV2TGluazp2aXNpdGVkOmhvdmVyIHsgYmFja2dyb3VuZDogdXJsKC4uL2xpZ2h0Ym94L2ltYWdlcy9wcmV2bGFiZWwuZ2lmKSBsZWZ0IDE1JSBuby1yZXBlYXQ7IH0NCiNuZXh0TGluazpob3ZlciwgI25leHRMaW5rOnZpc2l0ZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiB1cmwoLi4vbGlnaHRib3gvaW1hZ2VzL25leHRsYWJlbC5naWYpIHJpZ2h0IDE1JSBuby1yZXBlYXQ7IH0NCg0KI2ltYWdlRGF0YUNvbnRhaW5lcnsgZm9udDogMTBweCBWZXJkYW5hLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IG1hcmdpbjogMCBhdXRvOyBsaW5lLWhlaWdodDogMS40ZW07IG92ZXJmbG93OiBhdXRvOyB3aWR0aDogMTAwJQk7IH0NCg0KI2ltYWdlRGF0YXsJcGFkZGluZzowIDEwcHg7IGNvbG9yOiAjNjY2OyB9DQojaW1hZ2VEYXRhICNpbWFnZURldGFpbHN7IHdpZHRoOiA3MCU7IGZsb2F0OiBsZWZ0OyB0ZXh0LWFsaWduOiBsZWZ0OyB9CQ0KI2ltYWdlRGF0YSAjY2FwdGlvbnsgZm9udC13ZWlnaHQ6IGJvbGQ7CX0NCiNpbWFnZURhdGEgI251bWJlckRpc3BsYXl7IGRpc3BsYXk6IGJsb2NrOyBjbGVhcjogbGVmdDsgcGFkZGluZy1ib3R0b206IDEuMGVtOwl9CQkJDQojaW1hZ2VEYXRhICNib3R0b21OYXZDbG9zZXsgd2lkdGg6IDY2cHg7IGZsb2F0OiByaWdodDsgIHBhZGRpbmctYm90dG9tOiAwLjdlbTsgb3V0bGluZTogbm9uZTt9CSAJDQoNCiNvdmVybGF5eyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgei1pbmRleDogOTA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOyB9DQoNCnsqLS0tLS0tLS0tLQ0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9saWdodGJveC9qcy9wcm90b3R5cGUuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9saWdodGJveC9qcy9zY3JpcHRhY3Vsb3VzLmpzP2xvYWQ9ZWZmZWN0cyxidWlsZGVyIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Im1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvbGlnaHRib3gvanMvbGlnaHRib3guanMiPjwvc2NyaXB0Pg0KKn0=]]></data>
	</file>
	<file>
	  <filename>/templates/template_slimbox.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iZ2FsbGVyeSI+DQp7aWYgaXNzZXQoJG1vZHVsZV9tZXNzYWdlKX08aDI+eyRtb2R1bGVfbWVzc2FnZXxlc2NhcGV9PC9oMj57L2lmfQ0Ke2lmIGlzc2V0KCRnYWxsZXJ5dGl0bGUpfTxoMz57JGdhbGxlcnl0aXRsZX08L2gzPnsvaWZ9DQp7aWYgaXNzZXQoJGdhbGxlcnljb21tZW50KX08ZGl2IGNsYXNzPSJnYWxsZXJ5Y29tbWVudCI+eyRnYWxsZXJ5Y29tbWVudH08L2Rpdj57L2lmfQ0KPHA+eyRpbWFnZWNvdW50fTwvcD4NCjxkaXYgY2xhc3M9InBhZ2VuYXZpZ2F0aW9uIj4NCntpZiAkcGFnZXMgPiAxfQ0KPGRpdiBjbGFzcz0icHJldnBhZ2UiPnskcHJldnBhZ2V9PC9kaXY+DQo8ZGl2IGNsYXNzPSJuZXh0cGFnZSI+eyRuZXh0cGFnZX08L2Rpdj4NCnsvaWZ9DQp7aWYgaXNzZXQoJHBhcmVudGxpbmspfTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPnskcGFyZW50bGlua308L2Rpdj57L2lmfQ0Ke2lmICRwYWdlcyA+IDF9PGRpdiBjbGFzcz0icGFnZWxpbmtzIj57JHBhZ2VsaW5rc308L2Rpdj57L2lmfQ0KPC9kaXY+DQoNCntmb3JlYWNoIGZyb209JGltYWdlcyBpdGVtPWltYWdlfQ0KCTxkaXYgY2xhc3M9ImltZyI+DQoJe2lmICRpbWFnZS0+Zm9sZGVybGlua30NCgkJeyRpbWFnZS0+Zm9sZGVybGlua308YnIgLz4NCgkJeyRpbWFnZS0+dGl0bGV9DQoJe2Vsc2V9DQogICA8YSBocmVmPSJ7JGltYWdlLT5maWxlfSIgdGl0bGU9InskaW1hZ2UtPnRpdGxlfSIgcmVsPSJsaWdodGJveFtnYWxsZXJ5XSI+PGltZyBzcmM9InskaW1hZ2UtPnRodW1ifSIgYWx0PSJ7JGltYWdlLT50aXRsZX0iIC8+PC9hPg0KCXsvaWZ9DQoJPC9kaXY+DQp7L2ZvcmVhY2h9DQo8L2Rpdj4NCg0KeyotLS0tLS0tLS0tDQouZ2FsbGVyeSAuaW1nIHsNCglmbG9hdDogbGVmdDsNCgltYXJnaW46IDNweDsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbmF2aWdhdGlvbiB7DQoJaGVpZ2h0OiA1MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucHJldnBhZ2UgYSwgLmdhbGxlcnkgLnByZXZwYWdlIGVtIHsNCglkaXNwbGF5OiBibG9jazsgDQoJd2lkdGg6IDUwcHg7IA0KCWhlaWdodDogMzlweDsNCglmbG9hdDogbGVmdDsgDQoJbWFyZ2luOiAwOw0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvcHJldmlvdXMucG5nKSB0cmFuc3BhcmVudCBuby1yZXBlYXQgMCAwOw0KfQ0KDQouZ2FsbGVyeSAubmV4dHBhZ2UgYSwgLmdhbGxlcnkgLm5leHRwYWdlIGVtIHsNCglkaXNwbGF5OiBibG9jazsgDQoJd2lkdGg6IDUwcHg7IA0KCWhlaWdodDogMzlweDsNCglmbG9hdDogbGVmdDsgDQoJbWFyZ2luOiAwIDZweCAwIDA7DQoJdGV4dC1pbmRlbnQ6IC0xMDAwcHg7DQoJYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9uZXh0LnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLnBhcmVudGxpbmsgYSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvdXBwYWdlLnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VuYXZpZ2F0aW9uIGE6aG92ZXIgew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwcHg7DQp9DQoNCi5nYWxsZXJ5IC5wcmV2cGFnZSBlbSwgLmdhbGxlcnkgLm5leHRwYWdlIGVtIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucGFnZWxpbmtzIHsNCglmbG9hdDogcmlnaHQ7DQoJYm9yZGVyLXJpZ2h0OiAycHggc29saWQgIzY2NjsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VsaW5rcyBhLCAuZ2FsbGVyeSAucGFnZWxpbmtzIGVtIHsNCgltYXJnaW4tdG9wOiA2cHg7DQoJcGFkZGluZzogMCA2cHg7DQoJYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjNjY2Ow0KCXRleHQtYWxpZ246IGNlbnRlcjsNCglmb250OiBib2xkIDExcHggdmVyZGFuYTsgY29sb3I6ICM2NjY7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbGlua3MgZW0gew0KCWNvbG9yOiAjMDAwOw0KfQ0KDQoNCi8qIFNMSU1CT1ggKi8NCg0KI2xiT3ZlcmxheSB7DQoJcG9zaXRpb246IGZpeGVkOw0KCXotaW5kZXg6IDk5OTk7DQoJbGVmdDogMDsNCgl0b3A6IDA7DQoJd2lkdGg6IDEwMCU7DQoJaGVpZ2h0OiAxMDAlOw0KCWJhY2tncm91bmQtY29sb3I6ICMwMDA7DQoJY3Vyc29yOiBwb2ludGVyOw0KfQ0KDQojbGJDZW50ZXIsICNsYkJvdHRvbUNvbnRhaW5lciB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCXotaW5kZXg6IDk5OTk7DQoJb3ZlcmZsb3c6IGhpZGRlbjsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KfQ0KDQoubGJMb2FkaW5nIHsNCgliYWNrZ3JvdW5kOiAjZmZmIHVybCguLi9zbGltYm94L2Nzcy9sb2FkaW5nLmdpZikgbm8tcmVwZWF0IGNlbnRlcjsNCn0NCg0KI2xiSW1hZ2Ugew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCglsZWZ0OiAwOw0KCXRvcDogMDsNCglib3JkZXI6IDEwcHggc29saWQgI2ZmZjsNCgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KDQojbGJQcmV2TGluaywgI2xiTmV4dExpbmsgew0KCWRpc3BsYXk6IGJsb2NrOw0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDA7DQoJd2lkdGg6IDUwJTsNCglvdXRsaW5lOiBub25lOw0KfQ0KDQojbGJQcmV2TGluayB7DQoJbGVmdDogMDsNCn0NCg0KI2xiUHJldkxpbms6aG92ZXIgew0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9zbGltYm94L2Nzcy9wcmV2bGFiZWwuZ2lmKSBuby1yZXBlYXQgMCAxNSU7DQp9DQoNCiNsYk5leHRMaW5rIHsNCglyaWdodDogMDsNCn0NCg0KI2xiTmV4dExpbms6aG92ZXIgew0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9zbGltYm94L2Nzcy9uZXh0bGFiZWwuZ2lmKSBuby1yZXBlYXQgMTAwJSAxNSU7DQp9DQoNCiNsYkJvdHRvbSB7DQoJZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBHZW5ldmEsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCglmb250LXNpemU6IDEwcHg7DQoJY29sb3I6ICM2NjY7DQoJbGluZS1oZWlnaHQ6IDEuNGVtOw0KCXRleHQtYWxpZ246IGxlZnQ7DQoJYm9yZGVyOiAxMHB4IHNvbGlkICNmZmY7DQoJYm9yZGVyLXRvcC1zdHlsZTogbm9uZTsNCn0NCg0KI2xiQ2xvc2VMaW5rIHsNCglkaXNwbGF5OiBibG9jazsNCglmbG9hdDogcmlnaHQ7DQoJd2lkdGg6IDY2cHg7DQoJaGVpZ2h0OiAyMnB4Ow0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9zbGltYm94L2Nzcy9jbG9zZWxhYmVsLmdpZikgbm8tcmVwZWF0IGNlbnRlcjsNCgltYXJnaW46IDVweCAwOw0KCW91dGxpbmU6IG5vbmU7DQp9DQoNCiNsYkNhcHRpb24sICNsYk51bWJlciB7DQoJbWFyZ2luLXJpZ2h0OiA3MXB4Ow0KfQ0KDQojbGJDYXB0aW9uIHsNCglmb250LXdlaWdodDogYm9sZDsNCn0NCg0KeyotLS0tLS0tLS0tDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL2pxdWVyeS9qcXVlcnkuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibW9kdWxlcy9HYWxsZXJ5L3RlbXBsYXRlcy9zbGltYm94L2pzL3NsaW1ib3gyLmpzIj48L3NjcmlwdD4NCip9]]></data>
	</file>
	<file>
	  <filename>/templates/template_thickbox.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iZ2FsbGVyeSI+DQp7aWYgaXNzZXQoJG1vZHVsZV9tZXNzYWdlKX08aDI+eyRtb2R1bGVfbWVzc2FnZXxlc2NhcGV9PC9oMj57L2lmfQ0Ke2lmIGlzc2V0KCRnYWxsZXJ5dGl0bGUpfTxoMz57JGdhbGxlcnl0aXRsZX08L2gzPnsvaWZ9DQp7aWYgaXNzZXQoJGdhbGxlcnljb21tZW50KX08ZGl2IGNsYXNzPSJnYWxsZXJ5Y29tbWVudCI+eyRnYWxsZXJ5Y29tbWVudH08L2Rpdj57L2lmfQ0KPHA+eyRpbWFnZWNvdW50fTwvcD4NCjxkaXYgY2xhc3M9InBhZ2VuYXZpZ2F0aW9uIj4NCntpZiAkcGFnZXMgPiAxfQ0KPGRpdiBjbGFzcz0icHJldnBhZ2UiPnskcHJldnBhZ2V9PC9kaXY+DQo8ZGl2IGNsYXNzPSJuZXh0cGFnZSI+eyRuZXh0cGFnZX08L2Rpdj4NCnsvaWZ9DQp7aWYgaXNzZXQoJHBhcmVudGxpbmspfTxkaXYgY2xhc3M9InBhcmVudGxpbmsiPnskcGFyZW50bGlua308L2Rpdj57L2lmfQ0Ke2lmICRwYWdlcyA+IDF9PGRpdiBjbGFzcz0icGFnZWxpbmtzIj57JHBhZ2VsaW5rc308L2Rpdj57L2lmfQ0KPC9kaXY+DQoNCntmb3JlYWNoIGZyb209JGltYWdlcyBpdGVtPWltYWdlfQ0KCTxkaXYgY2xhc3M9ImltZyI+DQoJe2lmICRpbWFnZS0+Zm9sZGVybGlua30NCgkJeyRpbWFnZS0+Zm9sZGVybGlua308YnIgLz4NCgkJeyRpbWFnZS0+dGl0bGV9DQoJe2Vsc2V9DQogICA8YSBocmVmPSJ7JGltYWdlLT5maWxlfSIgdGl0bGU9InskaW1hZ2UtPnRpdGxlfSIgY2xhc3M9InRoaWNrYm94IiByZWw9ImdhbGxlcnkiPjxpbWcgc3JjPSJ7JGltYWdlLT50aHVtYn0iIGFsdD0ieyRpbWFnZS0+dGl0bGV9IiAvPjwvYT4NCgl7L2lmfQ0KCTwvZGl2Pg0Key9mb3JlYWNofQ0KPC9kaXY+DQoNCnsqLS0tLS0tLS0tLQ0KLmdhbGxlcnkgLmltZyB7DQoJZmxvYXQ6IGxlZnQ7DQoJbWFyZ2luOiAzcHg7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQouZ2FsbGVyeSAucGFnZW5hdmlnYXRpb24gew0KCWhlaWdodDogNTBweDsNCn0NCg0KLmdhbGxlcnkgLnByZXZwYWdlIGEsIC5nYWxsZXJ5IC5wcmV2cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMDsNCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3ByZXZpb3VzLnBuZykgdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLmdhbGxlcnkgLm5leHRwYWdlIGEsIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJZGlzcGxheTogYmxvY2s7IA0KCXdpZHRoOiA1MHB4OyANCgloZWlnaHQ6IDM5cHg7DQoJZmxvYXQ6IGxlZnQ7IA0KCW1hcmdpbjogMCA2cHggMCAwOw0KCXRleHQtaW5kZW50OiAtMTAwMHB4Ow0KCWJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvbmV4dC5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYXJlbnRsaW5rIGEgew0KCWRpc3BsYXk6IGJsb2NrOyANCgl3aWR0aDogNTBweDsgDQoJaGVpZ2h0OiAzOXB4Ow0KCWZsb2F0OiBsZWZ0OyANCgl0ZXh0LWluZGVudDogLTEwMDBweDsNCgliYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL3VwcGFnZS5wbmcpIHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbmF2aWdhdGlvbiBhOmhvdmVyIHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00MHB4Ow0KfQ0KDQouZ2FsbGVyeSAucHJldnBhZ2UgZW0sIC5nYWxsZXJ5IC5uZXh0cGFnZSBlbSB7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsNCn0NCg0KLmdhbGxlcnkgLnBhZ2VsaW5rcyB7DQoJZmxvYXQ6IHJpZ2h0Ow0KCWJvcmRlci1yaWdodDogMnB4IHNvbGlkICM2NjY7DQp9DQoNCi5nYWxsZXJ5IC5wYWdlbGlua3MgYSwgLmdhbGxlcnkgLnBhZ2VsaW5rcyBlbSB7DQoJbWFyZ2luLXRvcDogNnB4Ow0KCXBhZGRpbmc6IDAgNnB4Ow0KCWJvcmRlci1sZWZ0OiAycHggc29saWQgIzY2NjsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQoJZm9udDogYm9sZCAxMXB4IHZlcmRhbmE7IGNvbG9yOiAjNjY2Ow0KfQ0KDQouZ2FsbGVyeSAucGFnZWxpbmtzIGVtIHsNCgljb2xvcjogIzAwMDsNCn0NCg0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIC0tLS0tLS0tLS0+Pj4gZ2xvYmFsIHNldHRpbmdzIG5lZWRlZCBmb3IgdGhpY2tib3ggPDw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoqe3BhZGRpbmc6IDA7IG1hcmdpbjogMDt9DQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogLS0tLS0tLS0tLT4+PiB0aGlja2JveCBzcGVjaWZpYyBsaW5rIGFuZCBmb250IHNldHRpbmdzIDw8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiNUQl93aW5kb3cgew0KCWZvbnQ6IDEycHggQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCgljb2xvcjogIzMzMzMzMzsNCn0NCg0KI1RCX3NlY29uZExpbmUgew0KCWZvbnQ6IDEwcHggQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCgljb2xvcjojNjY2NjY2Ow0KfQ0KDQojVEJfd2luZG93IGE6bGluayB7Y29sb3I6ICM2NjY2NjY7fQ0KI1RCX3dpbmRvdyBhOnZpc2l0ZWQge2NvbG9yOiAjNjY2NjY2O30NCiNUQl93aW5kb3cgYTpob3ZlciB7Y29sb3I6ICMwMDA7fQ0KI1RCX3dpbmRvdyBhOmFjdGl2ZSB7Y29sb3I6ICM2NjY2NjY7fQ0KI1RCX3dpbmRvdyBhOmZvY3Vze2NvbG9yOiAjNjY2NjY2O30NCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiAtLS0tLS0tLS0tPj4+IHRoaWNrYm94IHNldHRpbmdzIDw8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KI1RCX292ZXJsYXkgew0KCXBvc2l0aW9uOiBmaXhlZDsNCgl6LWluZGV4OjEwMDsNCgl0b3A6IDBweDsNCglsZWZ0OiAwcHg7DQoJaGVpZ2h0OjEwMCU7DQoJd2lkdGg6MTAwJTsNCn0NCg0KLlRCX292ZXJsYXlNYWNGRkJHSGFjayB7YmFja2dyb3VuZDogdXJsKG1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvdGhpY2tib3gvbWFjRkZCZ0hhY2sucG5nKSByZXBlYXQ7fQ0KLlRCX292ZXJsYXlCRyB7DQoJYmFja2dyb3VuZC1jb2xvcjojMDAwOw0KCWZpbHRlcjphbHBoYShvcGFjaXR5PTc1KTsNCgktbW96LW9wYWNpdHk6IDAuNzU7DQoJb3BhY2l0eTogMC43NTsNCn0NCg0KKiBodG1sICNUQl9vdmVybGF5IHsgLyogaWU2IGhhY2sgKi8NCiAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICBoZWlnaHQ6IGV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCA/IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0IDogZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgKyAncHgnKTsNCn0NCg0KI1RCX3dpbmRvdyB7DQoJcG9zaXRpb246IGZpeGVkOw0KCWJhY2tncm91bmQ6ICNmZmZmZmY7DQoJei1pbmRleDogMTAyOw0KCWNvbG9yOiMwMDAwMDA7DQoJZGlzcGxheTpub25lOw0KCWJvcmRlcjogNHB4IHNvbGlkICM1MjUyNTI7DQoJdGV4dC1hbGlnbjpsZWZ0Ow0KCXRvcDo1MCU7DQoJbGVmdDo1MCU7DQp9DQoNCiogaHRtbCAjVEJfd2luZG93IHsgLyogaWU2IGhhY2sgKi8NCnBvc2l0aW9uOiBhYnNvbHV0ZTsNCm1hcmdpbi10b3A6IGV4cHJlc3Npb24oMCAtIHBhcnNlSW50KHRoaXMub2Zmc2V0SGVpZ2h0IC8gMikgKyAoVEJXaW5kb3dNYXJnaW4gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgKyAncHgnKTsNCn0NCg0KI1RCX3dpbmRvdyBpbWcjVEJfSW1hZ2Ugew0KCWRpc3BsYXk6YmxvY2s7DQoJbWFyZ2luOiAxNXB4IDAgMCAxNXB4Ow0KCWJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjY2M7DQoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7DQoJYm9yZGVyLXRvcDogMXB4IHNvbGlkICM2NjY7DQoJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNjY2Ow0KfQ0KDQojVEJfY2FwdGlvbnsNCgloZWlnaHQ6MjVweDsNCglwYWRkaW5nOjdweCAzMHB4IDEwcHggMjVweDsNCglmbG9hdDpsZWZ0Ow0KfQ0KDQojVEJfY2xvc2VXaW5kb3d7DQoJaGVpZ2h0OjI1cHg7DQoJcGFkZGluZzoxMXB4IDI1cHggMTBweCAwOw0KCWZsb2F0OnJpZ2h0Ow0KfQ0KDQojVEJfY2xvc2VBamF4V2luZG93ew0KCXBhZGRpbmc6N3B4IDEwcHggNXB4IDA7DQoJbWFyZ2luLWJvdHRvbToxcHg7DQoJdGV4dC1hbGlnbjpyaWdodDsNCglmbG9hdDpyaWdodDsNCn0NCg0KI1RCX2FqYXhXaW5kb3dUaXRsZXsNCglmbG9hdDpsZWZ0Ow0KCXBhZGRpbmc6N3B4IDAgNXB4IDEwcHg7DQoJbWFyZ2luLWJvdHRvbToxcHg7DQp9DQoNCiNUQl90aXRsZXsNCgliYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7DQoJaGVpZ2h0OjI3cHg7DQp9DQoNCiNUQl9hamF4Q29udGVudHsNCgljbGVhcjpib3RoOw0KCXBhZGRpbmc6MnB4IDE1cHggMTVweCAxNXB4Ow0KCW92ZXJmbG93OmF1dG87DQoJdGV4dC1hbGlnbjpsZWZ0Ow0KCWxpbmUtaGVpZ2h0OjEuNGVtOw0KfQ0KDQojVEJfYWpheENvbnRlbnQuVEJfbW9kYWx7DQoJcGFkZGluZzoxNXB4Ow0KfQ0KDQojVEJfYWpheENvbnRlbnQgcHsNCglwYWRkaW5nOjVweCAwcHggNXB4IDBweDsNCn0NCg0KI1RCX2xvYWR7DQoJcG9zaXRpb246IGZpeGVkOw0KCWRpc3BsYXk6bm9uZTsNCgloZWlnaHQ6MTNweDsNCgl3aWR0aDoyMDhweDsNCgl6LWluZGV4OjEwMzsNCgl0b3A6IDUwJTsNCglsZWZ0OiA1MCU7DQoJbWFyZ2luOiAtNnB4IDAgMCAtMTA0cHg7IC8qIC1oZWlnaHQvMiAwIDAgLXdpZHRoLzIgKi8NCn0NCg0KKiBodG1sICNUQl9sb2FkIHsgLyogaWU2IGhhY2sgKi8NCnBvc2l0aW9uOiBhYnNvbHV0ZTsNCm1hcmdpbi10b3A6IGV4cHJlc3Npb24oMCAtIHBhcnNlSW50KHRoaXMub2Zmc2V0SGVpZ2h0IC8gMikgKyAoVEJXaW5kb3dNYXJnaW4gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgKyAncHgnKTsNCn0NCg0KI1RCX0hpZGVTZWxlY3R7DQoJei1pbmRleDo5OTsNCglwb3NpdGlvbjpmaXhlZDsNCgl0b3A6IDA7DQoJbGVmdDogMDsNCgliYWNrZ3JvdW5kLWNvbG9yOiNmZmY7DQoJYm9yZGVyOm5vbmU7DQoJZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7DQoJLW1vei1vcGFjaXR5OiAwOw0KCW9wYWNpdHk6IDA7DQoJaGVpZ2h0OjEwMCU7DQoJd2lkdGg6MTAwJTsNCn0NCg0KKiBodG1sICNUQl9IaWRlU2VsZWN0IHsgLyogaWU2IGhhY2sgKi8NCiAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICBoZWlnaHQ6IGV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCA/IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0IDogZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgKyAncHgnKTsNCn0NCg0KI1RCX2lmcmFtZUNvbnRlbnR7DQoJY2xlYXI6Ym90aDsNCglib3JkZXI6bm9uZTsNCgltYXJnaW4tYm90dG9tOi0xcHg7DQoJbWFyZ2luLXRvcDoxcHg7DQoJX21hcmdpbi1ib3R0b206MXB4Ow0KfQ0KDQp7Ki0tLS0tLS0tLS0NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Im1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvanF1ZXJ5L2pxdWVyeS5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL3RoaWNrYm94L3RoaWNrYm94LmpzIj48L3NjcmlwdD4NCip9]]></data>
	</file>
	<file>
	  <filename>/templates/thickbox/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/thickbox/Kopie van thickbox.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIFRoaWNrYm94IDMuMSAtIE9uZSBCb3ggVG8gUnVsZSBUaGVtIEFsbC4NCiAqIEJ5IENvZHkgTGluZGxleSAoaHR0cDovL3d3dy5jb2R5bGluZGxleS5jb20pDQogKiBDb3B5cmlnaHQgKGMpIDIwMDcgY29keSBsaW5kbGV5DQogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwDQoqLw0KCQkgIA0KdmFyIHRiX3BhdGhUb0ltYWdlID0gIm1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvdGhpY2tib3gvbG9hZGluZ0FuaW1hdGlvbi5naWYiOw0KDQovKiEhISEhISEhISEhISEhISEhIGVkaXQgYmVsb3cgdGhpcyBsaW5lIGF0IHlvdXIgb3duIHJpc2sgISEhISEhISEhISEhISEhISEhISEhISEqLw0KDQovL29uIHBhZ2UgbG9hZCBjYWxsIHRiX2luaXQNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7ICAgDQoJdGJfaW5pdCgnYS50aGlja2JveCwgYXJlYS50aGlja2JveCwgaW5wdXQudGhpY2tib3gnKTsvL3Bhc3Mgd2hlcmUgdG8gYXBwbHkgdGhpY2tib3gNCglpbWdMb2FkZXIgPSBuZXcgSW1hZ2UoKTsvLyBwcmVsb2FkIGltYWdlDQoJaW1nTG9hZGVyLnNyYyA9IHRiX3BhdGhUb0ltYWdlOw0KfSk7DQoNCi8vYWRkIHRoaWNrYm94IHRvIGhyZWYgJiBhcmVhIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIGNsYXNzIG9mIC50aGlja2JveA0KZnVuY3Rpb24gdGJfaW5pdChkb21DaHVuayl7DQoJJChkb21DaHVuaykuY2xpY2soZnVuY3Rpb24oKXsNCgl2YXIgdCA9IHRoaXMudGl0bGUgfHwgdGhpcy5uYW1lIHx8IG51bGw7DQoJdmFyIGEgPSB0aGlzLmhyZWYgfHwgdGhpcy5hbHQ7DQoJdmFyIGcgPSB0aGlzLnJlbCB8fCBmYWxzZTsNCgl0Yl9zaG93KHQsYSxnKTsNCgl0aGlzLmJsdXIoKTsNCglyZXR1cm4gZmFsc2U7DQoJfSk7DQp9DQoNCmZ1bmN0aW9uIHRiX3Nob3coY2FwdGlvbiwgdXJsLCBpbWFnZUdyb3VwKSB7Ly9mdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYSB0aGlja2JveCBsaW5rDQoNCgl0cnkgew0KCQlpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGUubWF4SGVpZ2h0ID09PSAidW5kZWZpbmVkIikgey8vaWYgSUUgNg0KCQkJJCgiYm9keSIsImh0bWwiKS5jc3Moe2hlaWdodDogIjEwMCUiLCB3aWR0aDogIjEwMCUifSk7DQoJCQkkKCJodG1sIikuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpOw0KCQkJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUQl9IaWRlU2VsZWN0IikgPT09IG51bGwpIHsvL2lmcmFtZSB0byBoaWRlIHNlbGVjdCBlbGVtZW50cyBpbiBpZTYNCgkJCQkkKCJib2R5IikuYXBwZW5kKCI8aWZyYW1lIGlkPSdUQl9IaWRlU2VsZWN0Jz48L2lmcmFtZT48ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5IikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCX0NCgkJfWVsc2V7Ly9hbGwgb3RoZXJzDQoJCQlpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVEJfb3ZlcmxheSIpID09PSBudWxsKXsNCgkJCQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5IikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCX0NCgkJfQ0KCQkNCgkJaWYodGJfZGV0ZWN0TWFjWEZGKCkpew0KCQkJJCgiI1RCX292ZXJsYXkiKS5hZGRDbGFzcygiVEJfb3ZlcmxheU1hY0ZGQkdIYWNrIik7Ly91c2UgcG5nIG92ZXJsYXkgc28gaGlkZSBmbGFzaA0KCQl9ZWxzZXsNCgkJCSQoIiNUQl9vdmVybGF5IikuYWRkQ2xhc3MoIlRCX292ZXJsYXlCRyIpOy8vdXNlIGJhY2tncm91bmQgYW5kIG9wYWNpdHkNCgkJfQ0KCQkNCgkJaWYoY2FwdGlvbj09PW51bGwpe2NhcHRpb249IiI7fQ0KCQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9sb2FkJz48aW1nIHNyYz0nIitpbWdMb2FkZXIuc3JjKyInIC8+PC9kaXY+Iik7Ly9hZGQgbG9hZGVyIHRvIHRoZSBwYWdlDQoJCSQoJyNUQl9sb2FkJykuc2hvdygpOy8vc2hvdyBsb2FkZXINCgkJDQoJCXZhciBiYXNlVVJMOw0KCSAgIGlmKHVybC5pbmRleE9mKCI/IikhPT0tMSl7IC8vZmYgdGhlcmUgaXMgYSBxdWVyeSBzdHJpbmcgaW52b2x2ZWQNCgkJCWJhc2VVUkwgPSB1cmwuc3Vic3RyKDAsIHVybC5pbmRleE9mKCI/IikpOw0KCSAgIH1lbHNleyANCgkgICAJCWJhc2VVUkwgPSB1cmw7DQoJICAgfQ0KCSAgIA0KCSAgIHZhciB1cmxTdHJpbmcgPSAvXC5qcGckfFwuanBlZyR8XC5wbmckfFwuZ2lmJHxcLmJtcCQvOw0KCSAgIHZhciB1cmxUeXBlID0gYmFzZVVSTC50b0xvd2VyQ2FzZSgpLm1hdGNoKHVybFN0cmluZyk7DQoNCgkJaWYodXJsVHlwZSA9PSAnLmpwZycgfHwgdXJsVHlwZSA9PSAnLmpwZWcnIHx8IHVybFR5cGUgPT0gJy5wbmcnIHx8IHVybFR5cGUgPT0gJy5naWYnIHx8IHVybFR5cGUgPT0gJy5ibXAnKXsvL2NvZGUgdG8gc2hvdyBpbWFnZXMNCgkJCQkNCgkJCVRCX1ByZXZDYXB0aW9uID0gIiI7DQoJCQlUQl9QcmV2VVJMID0gIiI7DQoJCQlUQl9QcmV2SFRNTCA9ICIiOw0KCQkJVEJfTmV4dENhcHRpb24gPSAiIjsNCgkJCVRCX05leHRVUkwgPSAiIjsNCgkJCVRCX05leHRIVE1MID0gIiI7DQoJCQlUQl9pbWFnZUNvdW50ID0gIiI7DQoJCQlUQl9Gb3VuZFVSTCA9IGZhbHNlOw0KCQkJaWYoaW1hZ2VHcm91cCl7DQoJCQkJVEJfVGVtcEFycmF5ID0gJCgiYVtAcmVsPSIraW1hZ2VHcm91cCsiXSIpLmdldCgpOw0KCQkJCWZvciAoVEJfQ291bnRlciA9IDA7ICgoVEJfQ291bnRlciA8IFRCX1RlbXBBcnJheS5sZW5ndGgpICYmIChUQl9OZXh0SFRNTCA9PT0gIiIpKTsgVEJfQ291bnRlcisrKSB7DQoJCQkJCXZhciB1cmxUeXBlVGVtcCA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVmLnRvTG93ZXJDYXNlKCkubWF0Y2godXJsU3RyaW5nKTsNCgkJCQkJCWlmICghKFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVmID09IHVybCkpIHsJCQkJCQkNCgkJCQkJCQlpZiAoVEJfRm91bmRVUkwpIHsNCgkJCQkJCQkJVEJfTmV4dENhcHRpb24gPSBUQl9UZW1wQXJyYXlbVEJfQ291bnRlcl0udGl0bGU7DQoJCQkJCQkJCVRCX05leHRVUkwgPSBUQl9UZW1wQXJyYXlbVEJfQ291bnRlcl0uaHJlZjsNCgkJCQkJCQkJVEJfTmV4dEhUTUwgPSAiPHNwYW4gaWQ9J1RCX25leHQnPiZuYnNwOyZuYnNwOzxhIGhyZWY9JyMnPk5leHQgJmd0OzwvYT48L3NwYW4+IjsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQlUQl9QcmV2Q2FwdGlvbiA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS50aXRsZTsNCgkJCQkJCQkJVEJfUHJldlVSTCA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVmOw0KCQkJCQkJCQlUQl9QcmV2SFRNTCA9ICI8c3BhbiBpZD0nVEJfcHJldic+Jm5ic3A7Jm5ic3A7PGEgaHJlZj0nIyc+Jmx0OyBQcmV2PC9hPjwvc3Bhbj4iOw0KCQkJCQkJCX0NCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJVEJfRm91bmRVUkwgPSB0cnVlOw0KCQkJCQkJCVRCX2ltYWdlQ291bnQgPSAiSW1hZ2UgIiArIChUQl9Db3VudGVyICsgMSkgKyIgb2YgIisgKFRCX1RlbXBBcnJheS5sZW5ndGgpOwkJCQkJCQkJCQkJDQoJCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCQlpbWdQcmVsb2FkZXIgPSBuZXcgSW1hZ2UoKTsNCgkJCWltZ1ByZWxvYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpewkJDQoJCQlpbWdQcmVsb2FkZXIub25sb2FkID0gbnVsbDsNCgkJCQkNCgkJCS8vIFJlc2l6aW5nIGxhcmdlIGltYWdlcyAtIG9yZ2luYWwgYnkgQ2hyaXN0aWFuIE1vbnRveWEgZWRpdGVkIGJ5IG1lLg0KCQkJdmFyIHBhZ2VzaXplID0gdGJfZ2V0UGFnZVNpemUoKTsNCgkJCXZhciB4ID0gcGFnZXNpemVbMF0gLSAxNTA7DQoJCQl2YXIgeSA9IHBhZ2VzaXplWzFdIC0gMTUwOw0KCQkJdmFyIGltYWdlV2lkdGggPSBpbWdQcmVsb2FkZXIud2lkdGg7DQoJCQl2YXIgaW1hZ2VIZWlnaHQgPSBpbWdQcmVsb2FkZXIuaGVpZ2h0Ow0KCQkJaWYgKGltYWdlV2lkdGggPiB4KSB7DQoJCQkJaW1hZ2VIZWlnaHQgPSBpbWFnZUhlaWdodCAqICh4IC8gaW1hZ2VXaWR0aCk7IA0KCQkJCWltYWdlV2lkdGggPSB4OyANCgkJCQlpZiAoaW1hZ2VIZWlnaHQgPiB5KSB7IA0KCQkJCQlpbWFnZVdpZHRoID0gaW1hZ2VXaWR0aCAqICh5IC8gaW1hZ2VIZWlnaHQpOyANCgkJCQkJaW1hZ2VIZWlnaHQgPSB5OyANCgkJCQl9DQoJCQl9IGVsc2UgaWYgKGltYWdlSGVpZ2h0ID4geSkgeyANCgkJCQlpbWFnZVdpZHRoID0gaW1hZ2VXaWR0aCAqICh5IC8gaW1hZ2VIZWlnaHQpOyANCgkJCQlpbWFnZUhlaWdodCA9IHk7IA0KCQkJCWlmIChpbWFnZVdpZHRoID4geCkgeyANCgkJCQkJaW1hZ2VIZWlnaHQgPSBpbWFnZUhlaWdodCAqICh4IC8gaW1hZ2VXaWR0aCk7IA0KCQkJCQlpbWFnZVdpZHRoID0geDsNCgkJCQl9DQoJCQl9DQoJCQkvLyBFbmQgUmVzaXppbmcNCgkJCQ0KCQkJVEJfV0lEVEggPSBpbWFnZVdpZHRoICsgMzA7DQoJCQlUQl9IRUlHSFQgPSBpbWFnZUhlaWdodCArIDYwOw0KCQkJJCgiI1RCX3dpbmRvdyIpLmFwcGVuZCgiPGEgaHJlZj0nJyBpZD0nVEJfSW1hZ2VPZmYnIHRpdGxlPSdDbG9zZSc+PGltZyBpZD0nVEJfSW1hZ2UnIHNyYz0nIit1cmwrIicgd2lkdGg9JyIraW1hZ2VXaWR0aCsiJyBoZWlnaHQ9JyIraW1hZ2VIZWlnaHQrIicgYWx0PSciK2NhcHRpb24rIicvPjwvYT4iICsgIjxkaXYgaWQ9J1RCX2NhcHRpb24nPiIrY2FwdGlvbisiPGRpdiBpZD0nVEJfc2Vjb25kTGluZSc+IiArIFRCX2ltYWdlQ291bnQgKyBUQl9QcmV2SFRNTCArIFRCX05leHRIVE1MICsgIjwvZGl2PjwvZGl2PjxkaXYgaWQ9J1RCX2Nsb3NlV2luZG93Jz48YSBocmVmPScjJyBpZD0nVEJfY2xvc2VXaW5kb3dCdXR0b24nIHRpdGxlPSdDbG9zZSc+Y2xvc2U8L2E+IG9yIEVzYyBLZXk8L2Rpdj4iKTsgCQkNCgkJCQ0KCQkJJCgiI1RCX2Nsb3NlV2luZG93QnV0dG9uIikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCQ0KCQkJaWYgKCEoVEJfUHJldkhUTUwgPT09ICIiKSkgew0KCQkJCWZ1bmN0aW9uIGdvUHJldigpew0KCQkJCQlpZigkKGRvY3VtZW50KS51bmJpbmQoImNsaWNrIixnb1ByZXYpKXskKGRvY3VtZW50KS51bmJpbmQoImNsaWNrIixnb1ByZXYpO30NCgkJCQkJJCgiI1RCX3dpbmRvdyIpLnJlbW92ZSgpOw0KCQkJCQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCQl0Yl9zaG93KFRCX1ByZXZDYXB0aW9uLCBUQl9QcmV2VVJMLCBpbWFnZUdyb3VwKTsNCgkJCQkJcmV0dXJuIGZhbHNlOwkNCgkJCQl9DQoJCQkJJCgiI1RCX3ByZXYiKS5jbGljayhnb1ByZXYpOw0KCQkJfQ0KCQkJDQoJCQlpZiAoIShUQl9OZXh0SFRNTCA9PT0gIiIpKSB7CQkNCgkJCQlmdW5jdGlvbiBnb05leHQoKXsNCgkJCQkJJCgiI1RCX3dpbmRvdyIpLnJlbW92ZSgpOw0KCQkJCQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCQl0Yl9zaG93KFRCX05leHRDYXB0aW9uLCBUQl9OZXh0VVJMLCBpbWFnZUdyb3VwKTsJCQkJDQoJCQkJCXJldHVybiBmYWxzZTsJDQoJCQkJfQ0KCQkJCSQoIiNUQl9uZXh0IikuY2xpY2soZ29OZXh0KTsNCgkJCQkNCgkJCX0NCg0KCQkJZG9jdW1lbnQub25rZXlkb3duID0gZnVuY3Rpb24oZSl7IAkNCgkJCQlpZiAoZSA9PSBudWxsKSB7IC8vIGllDQoJCQkJCWtleWNvZGUgPSBldmVudC5rZXlDb2RlOw0KCQkJCX0gZWxzZSB7IC8vIG1vemlsbGENCgkJCQkJa2V5Y29kZSA9IGUud2hpY2g7DQoJCQkJfQ0KCQkJCWlmKGtleWNvZGUgPT0gMjcpeyAvLyBjbG9zZQ0KCQkJCQl0Yl9yZW1vdmUoKTsNCgkJCQl9IGVsc2UgaWYoa2V5Y29kZSA9PSAxOTApeyAvLyBkaXNwbGF5IHByZXZpb3VzIGltYWdlDQoJCQkJCWlmKCEoVEJfTmV4dEhUTUwgPT0gIiIpKXsNCgkJCQkJCWRvY3VtZW50Lm9ua2V5ZG93biA9ICIiOw0KCQkJCQkJZ29OZXh0KCk7DQoJCQkJCX0NCgkJCQl9IGVsc2UgaWYoa2V5Y29kZSA9PSAxODgpeyAvLyBkaXNwbGF5IG5leHQgaW1hZ2UNCgkJCQkJaWYoIShUQl9QcmV2SFRNTCA9PSAiIikpew0KCQkJCQkJZG9jdW1lbnQub25rZXlkb3duID0gIiI7DQoJCQkJCQlnb1ByZXYoKTsNCgkJCQkJfQ0KCQkJCX0JDQoJCQl9Ow0KCQkJDQoJCQl0Yl9wb3NpdGlvbigpOw0KCQkJJCgiI1RCX2xvYWQiKS5yZW1vdmUoKTsNCgkJCSQoIiNUQl9JbWFnZU9mZiIpLmNsaWNrKHRiX3JlbW92ZSk7DQoJCQkkKCIjVEJfd2luZG93IikuY3NzKHtkaXNwbGF5OiJibG9jayJ9KTsgLy9mb3Igc2FmYXJpIHVzaW5nIGNzcyBpbnN0ZWFkIG9mIHNob3cNCgkJCX07DQoJCQkNCgkJCWltZ1ByZWxvYWRlci5zcmMgPSB1cmw7DQoJCX1lbHNley8vY29kZSB0byBzaG93IGh0bWwNCgkJCQ0KCQkJdmFyIHF1ZXJ5U3RyaW5nID0gdXJsLnJlcGxhY2UoL15bXlw/XStcPz8vLCcnKTsNCgkJCXZhciBwYXJhbXMgPSB0Yl9wYXJzZVF1ZXJ5KCBxdWVyeVN0cmluZyApOw0KDQoJCQlUQl9XSURUSCA9IChwYXJhbXNbJ3dpZHRoJ10qMSkgKyAzMCB8fCA2MzA7IC8vZGVmYXVsdHMgdG8gNjMwIGlmIG5vIHBhcmFtYXRlcnMgd2VyZSBhZGRlZCB0byBVUkwNCgkJCVRCX0hFSUdIVCA9IChwYXJhbXNbJ2hlaWdodCddKjEpICsgNDAgfHwgNDQwOyAvL2RlZmF1bHRzIHRvIDQ0MCBpZiBubyBwYXJhbWF0ZXJzIHdlcmUgYWRkZWQgdG8gVVJMDQoJCQlhamF4Q29udGVudFcgPSBUQl9XSURUSCAtIDMwOw0KCQkJYWpheENvbnRlbnRIID0gVEJfSEVJR0hUIC0gNDU7DQoJCQkNCgkJCWlmKHVybC5pbmRleE9mKCdUQl9pZnJhbWUnKSAhPSAtMSl7Ly8gZWl0aGVyIGlmcmFtZSBvciBhamF4IHdpbmRvdwkJDQoJCQkJCXVybE5vUXVlcnkgPSB1cmwuc3BsaXQoJ1RCXycpOw0KCQkJCQkkKCIjVEJfaWZyYW1lQ29udGVudCIpLnJlbW92ZSgpOw0KCQkJCQlpZihwYXJhbXNbJ21vZGFsJ10gIT0gInRydWUiKXsvL2lmcmFtZSBubyBtb2RhbA0KCQkJCQkJJCgiI1RCX3dpbmRvdyIpLmFwcGVuZCgiPGRpdiBpZD0nVEJfdGl0bGUnPjxkaXYgaWQ9J1RCX2FqYXhXaW5kb3dUaXRsZSc+IitjYXB0aW9uKyI8L2Rpdj48ZGl2IGlkPSdUQl9jbG9zZUFqYXhXaW5kb3cnPjxhIGhyZWY9JyMnIGlkPSdUQl9jbG9zZVdpbmRvd0J1dHRvbicgdGl0bGU9J0Nsb3NlJz5jbG9zZTwvYT4gb3IgRXNjIEtleTwvZGl2PjwvZGl2PjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIGhzcGFjZT0nMCcgc3JjPSciK3VybE5vUXVlcnlbMF0rIicgaWQ9J1RCX2lmcmFtZUNvbnRlbnQnIG5hbWU9J1RCX2lmcmFtZUNvbnRlbnQiK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSoxMDAwKSsiJyBvbmxvYWQ9J3RiX3Nob3dJZnJhbWUoKScgc3R5bGU9J3dpZHRoOiIrKGFqYXhDb250ZW50VyArIDI5KSsicHg7aGVpZ2h0OiIrKGFqYXhDb250ZW50SCArIDE3KSsicHg7JyA+IDwvaWZyYW1lPiIpOw0KCQkJCQl9ZWxzZXsvL2lmcmFtZSBtb2RhbA0KCQkJCQkkKCIjVEJfb3ZlcmxheSIpLnVuYmluZCgpOw0KCQkJCQkJJCgiI1RCX3dpbmRvdyIpLmFwcGVuZCgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgaHNwYWNlPScwJyBzcmM9JyIrdXJsTm9RdWVyeVswXSsiJyBpZD0nVEJfaWZyYW1lQ29udGVudCcgbmFtZT0nVEJfaWZyYW1lQ29udGVudCIrTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKjEwMDApKyInIG9ubG9hZD0ndGJfc2hvd0lmcmFtZSgpJyBzdHlsZT0nd2lkdGg6IisoYWpheENvbnRlbnRXICsgMjkpKyJweDtoZWlnaHQ6IisoYWpheENvbnRlbnRIICsgMTcpKyJweDsnPiA8L2lmcmFtZT4iKTsNCgkJCQkJfQ0KCQkJfWVsc2V7Ly8gbm90IGFuIGlmcmFtZSwgYWpheA0KCQkJCQlpZigkKCIjVEJfd2luZG93IikuY3NzKCJkaXNwbGF5IikgIT0gImJsb2NrIil7DQoJCQkJCQlpZihwYXJhbXNbJ21vZGFsJ10gIT0gInRydWUiKXsvL2FqYXggbm8gbW9kYWwNCgkJCQkJCSQoIiNUQl93aW5kb3ciKS5hcHBlbmQoIjxkaXYgaWQ9J1RCX3RpdGxlJz48ZGl2IGlkPSdUQl9hamF4V2luZG93VGl0bGUnPiIrY2FwdGlvbisiPC9kaXY+PGRpdiBpZD0nVEJfY2xvc2VBamF4V2luZG93Jz48YSBocmVmPScjJyBpZD0nVEJfY2xvc2VXaW5kb3dCdXR0b24nPmNsb3NlPC9hPiBvciBFc2MgS2V5PC9kaXY+PC9kaXY+PGRpdiBpZD0nVEJfYWpheENvbnRlbnQnIHN0eWxlPSd3aWR0aDoiK2FqYXhDb250ZW50VysicHg7aGVpZ2h0OiIrYWpheENvbnRlbnRIKyJweCc+PC9kaXY+Iik7DQoJCQkJCQl9ZWxzZXsvL2FqYXggbW9kYWwNCgkJCQkJCSQoIiNUQl9vdmVybGF5IikudW5iaW5kKCk7DQoJCQkJCQkkKCIjVEJfd2luZG93IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9hamF4Q29udGVudCcgY2xhc3M9J1RCX21vZGFsJyBzdHlsZT0nd2lkdGg6IithamF4Q29udGVudFcrInB4O2hlaWdodDoiK2FqYXhDb250ZW50SCsicHg7Jz48L2Rpdj4iKTsJDQoJCQkJCQl9DQoJCQkJCX1lbHNley8vdGhpcyBtZWFucyB0aGUgd2luZG93IGlzIGFscmVhZHkgdXAsIHdlIGFyZSBqdXN0IGxvYWRpbmcgbmV3IGNvbnRlbnQgdmlhIGFqYXgNCgkJCQkJCSQoIiNUQl9hamF4Q29udGVudCIpWzBdLnN0eWxlLndpZHRoID0gYWpheENvbnRlbnRXICsicHgiOw0KCQkJCQkJJCgiI1RCX2FqYXhDb250ZW50IilbMF0uc3R5bGUuaGVpZ2h0ID0gYWpheENvbnRlbnRIICsicHgiOw0KCQkJCQkJJCgiI1RCX2FqYXhDb250ZW50IilbMF0uc2Nyb2xsVG9wID0gMDsNCgkJCQkJCSQoIiNUQl9hamF4V2luZG93VGl0bGUiKS5odG1sKGNhcHRpb24pOw0KCQkJCQl9DQoJCQl9DQoJCQkJCQ0KCQkJJCgiI1RCX2Nsb3NlV2luZG93QnV0dG9uIikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCQ0KCQkJCWlmKHVybC5pbmRleE9mKCdUQl9pbmxpbmUnKSAhPSAtMSl7CQ0KCQkJCQkkKCIjVEJfYWpheENvbnRlbnQiKS5hcHBlbmQoJCgnIycgKyBwYXJhbXNbJ2lubGluZUlkJ10pLmNoaWxkcmVuKCkpOw0KCQkJCQkkKCIjVEJfd2luZG93IikudW5sb2FkKGZ1bmN0aW9uICgpIHsNCgkJCQkJCSQoJyMnICsgcGFyYW1zWydpbmxpbmVJZCddKS5hcHBlbmQoICQoIiNUQl9hamF4Q29udGVudCIpLmNoaWxkcmVuKCkgKTsgLy8gbW92ZSBlbGVtZW50cyBiYWNrIHdoZW4geW91J3JlIGZpbmlzaGVkDQoJCQkJCX0pOw0KCQkJCQl0Yl9wb3NpdGlvbigpOw0KCQkJCQkkKCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCQkJCQkkKCIjVEJfd2luZG93IikuY3NzKHtkaXNwbGF5OiJibG9jayJ9KTsgDQoJCQkJfWVsc2UgaWYodXJsLmluZGV4T2YoJ1RCX2lmcmFtZScpICE9IC0xKXsNCgkJCQkJdGJfcG9zaXRpb24oKTsNCgkJCQkJaWYoJC5icm93c2VyLnNhZmFyaSl7Ly9zYWZhcmkgbmVlZHMgaGVscCBiZWNhdXNlIGl0IHdpbGwgbm90IGZpcmUgaWZyYW1lIG9ubG9hZA0KCQkJCQkJJCgiI1RCX2xvYWQiKS5yZW1vdmUoKTsNCgkJCQkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOw0KCQkJCQl9DQoJCQkJfWVsc2V7DQoJCQkJCSQoIiNUQl9hamF4Q29udGVudCIpLmxvYWQodXJsICs9ICImcmFuZG9tPSIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpLGZ1bmN0aW9uKCl7Ly90byBkbyBhIHBvc3QgY2hhbmdlIHRoaXMgbG9hZCBtZXRob2QNCgkJCQkJCXRiX3Bvc2l0aW9uKCk7DQoJCQkJCQkkKCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCQkJCQkJdGJfaW5pdCgiI1RCX2FqYXhDb250ZW50IGEudGhpY2tib3giKTsNCgkJCQkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOw0KCQkJCQl9KTsNCgkJCQl9DQoJCQkNCgkJfQ0KDQoJCWlmKCFwYXJhbXNbJ21vZGFsJ10pew0KCQkJZG9jdW1lbnQub25rZXl1cCA9IGZ1bmN0aW9uKGUpeyAJDQoJCQkJaWYgKGUgPT0gbnVsbCkgeyAvLyBpZQ0KCQkJCQlrZXljb2RlID0gZXZlbnQua2V5Q29kZTsNCgkJCQl9IGVsc2UgeyAvLyBtb3ppbGxhDQoJCQkJCWtleWNvZGUgPSBlLndoaWNoOw0KCQkJCX0NCgkJCQlpZihrZXljb2RlID09IDI3KXsgLy8gY2xvc2UNCgkJCQkJdGJfcmVtb3ZlKCk7DQoJCQkJfQkNCgkJCX07DQoJCX0NCgkJDQoJfSBjYXRjaChlKSB7DQoJCS8vbm90aGluZyBoZXJlDQoJfQ0KfQ0KDQovL2hlbHBlciBmdW5jdGlvbnMgYmVsb3cNCmZ1bmN0aW9uIHRiX3Nob3dJZnJhbWUoKXsNCgkkKCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOw0KfQ0KDQpmdW5jdGlvbiB0Yl9yZW1vdmUoKSB7DQogCSQoIiNUQl9pbWFnZU9mZiIpLnVuYmluZCgiY2xpY2siKTsNCgkkKCIjVEJfY2xvc2VXaW5kb3dCdXR0b24iKS51bmJpbmQoImNsaWNrIik7DQoJJCgiI1RCX3dpbmRvdyIpLmZhZGVPdXQoImZhc3QiLGZ1bmN0aW9uKCl7JCgnI1RCX3dpbmRvdywjVEJfb3ZlcmxheSwjVEJfSGlkZVNlbGVjdCcpLnRyaWdnZXIoInVubG9hZCIpLnVuYmluZCgpLnJlbW92ZSgpO30pOw0KCSQoIiNUQl9sb2FkIikucmVtb3ZlKCk7DQoJaWYgKHR5cGVvZiBkb2N1bWVudC5ib2R5LnN0eWxlLm1heEhlaWdodCA9PSAidW5kZWZpbmVkIikgey8vaWYgSUUgNg0KCQkkKCJib2R5IiwiaHRtbCIpLmNzcyh7aGVpZ2h0OiAiYXV0byIsIHdpZHRoOiAiYXV0byJ9KTsNCgkJJCgiaHRtbCIpLmNzcygib3ZlcmZsb3ciLCIiKTsNCgl9DQoJZG9jdW1lbnQub25rZXlkb3duID0gIiI7DQoJZG9jdW1lbnQub25rZXl1cCA9ICIiOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24gdGJfcG9zaXRpb24oKSB7DQokKCIjVEJfd2luZG93IikuY3NzKHttYXJnaW5MZWZ0OiAnLScgKyBwYXJzZUludCgoVEJfV0lEVEggLyAyKSwxMCkgKyAncHgnLCB3aWR0aDogVEJfV0lEVEggKyAncHgnfSk7DQoJaWYgKCAhKGpRdWVyeS5icm93c2VyLm1zaWUgJiYgalF1ZXJ5LmJyb3dzZXIudmVyc2lvbiA8IDcpKSB7IC8vIHRha2UgYXdheSBJRTYNCgkJJCgiI1RCX3dpbmRvdyIpLmNzcyh7bWFyZ2luVG9wOiAnLScgKyBwYXJzZUludCgoVEJfSEVJR0hUIC8gMiksMTApICsgJ3B4J30pOw0KCX0NCn0NCg0KZnVuY3Rpb24gdGJfcGFyc2VRdWVyeSAoIHF1ZXJ5ICkgew0KICAgdmFyIFBhcmFtcyA9IHt9Ow0KICAgaWYgKCAhIHF1ZXJ5ICkge3JldHVybiBQYXJhbXM7fS8vIHJldHVybiBlbXB0eSBvYmplY3QNCiAgIHZhciBQYWlycyA9IHF1ZXJ5LnNwbGl0KC9bOyZdLyk7DQogICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBQYWlycy5sZW5ndGg7IGkrKyApIHsNCiAgICAgIHZhciBLZXlWYWwgPSBQYWlyc1tpXS5zcGxpdCgnPScpOw0KICAgICAgaWYgKCAhIEtleVZhbCB8fCBLZXlWYWwubGVuZ3RoICE9IDIgKSB7Y29udGludWU7fQ0KICAgICAgdmFyIGtleSA9IHVuZXNjYXBlKCBLZXlWYWxbMF0gKTsNCiAgICAgIHZhciB2YWwgPSB1bmVzY2FwZSggS2V5VmFsWzFdICk7DQogICAgICB2YWwgPSB2YWwucmVwbGFjZSgvXCsvZywgJyAnKTsNCiAgICAgIFBhcmFtc1trZXldID0gdmFsOw0KICAgfQ0KICAgcmV0dXJuIFBhcmFtczsNCn0NCg0KZnVuY3Rpb24gdGJfZ2V0UGFnZVNpemUoKXsNCgl2YXIgZGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7DQoJdmFyIHcgPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCBzZWxmLmlubmVyV2lkdGggfHwgKGRlJiZkZS5jbGllbnRXaWR0aCkgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsNCgl2YXIgaCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBzZWxmLmlubmVySGVpZ2h0IHx8IChkZSYmZGUuY2xpZW50SGVpZ2h0KSB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsNCglhcnJheVBhZ2VTaXplID0gW3csaF07DQoJcmV0dXJuIGFycmF5UGFnZVNpemU7DQp9DQoNCmZ1bmN0aW9uIHRiX2RldGVjdE1hY1hGRigpIHsNCiAgdmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsNCiAgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCdtYWMnKSAhPSAtMSAmJiB1c2VyQWdlbnQuaW5kZXhPZignZmlyZWZveCcpIT0tMSkgew0KICAgIHJldHVybiB0cnVlOw0KICB9DQp9DQoNCg0K]]></data>
	</file>
	<file>
	  <filename>/templates/thickbox/loadingAnimation.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/templates/thickbox/macFFBgHack.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUANy8xNi8wN1qn/wsAAAAoSURBVEiJ7c1BAQAwCAAhtH+nVVsKf0cBBs+xvQ5KSkpKSkpKSkrAB1nRAPEf/J+FAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/templates/thickbox/thickbox.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qIC0tLS0tLS0tLS0+Pj4gZ2xvYmFsIHNldHRpbmdzIG5lZWRlZCBmb3IgdGhpY2tib3ggPDw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKntwYWRkaW5nOiAwOyBtYXJnaW46IDA7fQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qIC0tLS0tLS0tLS0+Pj4gdGhpY2tib3ggc3BlY2lmaWMgbGluayBhbmQgZm9udCBzZXR0aW5ncyA8PDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KI1RCX3dpbmRvdyB7Cglmb250OiAxMnB4IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cgljb2xvcjogIzMzMzMzMzsKfQoKI1RCX3NlY29uZExpbmUgewoJZm9udDogMTBweCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwoJY29sb3I6IzY2NjY2NjsKfQoKI1RCX3dpbmRvdyBhOmxpbmsge2NvbG9yOiAjNjY2NjY2O30KI1RCX3dpbmRvdyBhOnZpc2l0ZWQge2NvbG9yOiAjNjY2NjY2O30KI1RCX3dpbmRvdyBhOmhvdmVyIHtjb2xvcjogIzAwMDt9CiNUQl93aW5kb3cgYTphY3RpdmUge2NvbG9yOiAjNjY2NjY2O30KI1RCX3dpbmRvdyBhOmZvY3Vze2NvbG9yOiAjNjY2NjY2O30KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiAtLS0tLS0tLS0tPj4+IHRoaWNrYm94IHNldHRpbmdzIDw8PC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiNUQl9vdmVybGF5IHsKCXBvc2l0aW9uOiBmaXhlZDsKCXotaW5kZXg6MTAwOwoJdG9wOiAwcHg7CglsZWZ0OiAwcHg7CgloZWlnaHQ6MTAwJTsKCXdpZHRoOjEwMCU7Cn0KCi5UQl9vdmVybGF5TWFjRkZCR0hhY2sge2JhY2tncm91bmQ6IHVybChtb2R1bGVzL0dhbGxlcnkvdGVtcGxhdGVzL3RoaWNrYm94L21hY0ZGQmdIYWNrLnBuZykgcmVwZWF0O30KLlRCX292ZXJsYXlCRyB7CgliYWNrZ3JvdW5kLWNvbG9yOiMwMDA7CglmaWx0ZXI6YWxwaGEob3BhY2l0eT03NSk7CgktbW96LW9wYWNpdHk6IDAuNzU7CglvcGFjaXR5OiAwLjc1Owp9CgoqIGh0bWwgI1RCX292ZXJsYXkgeyAvKiBpZTYgaGFjayAqLwogICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICBoZWlnaHQ6IGV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCA/IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0IDogZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgKyAncHgnKTsKfQoKI1RCX3dpbmRvdyB7Cglwb3NpdGlvbjogZml4ZWQ7CgliYWNrZ3JvdW5kOiAjZmZmZmZmOwoJei1pbmRleDogMTAyOwoJY29sb3I6IzAwMDAwMDsKCWRpc3BsYXk6bm9uZTsKCWJvcmRlcjogNHB4IHNvbGlkICM1MjUyNTI7Cgl0ZXh0LWFsaWduOmxlZnQ7Cgl0b3A6NTAlOwoJbGVmdDo1MCU7Cn0KCiogaHRtbCAjVEJfd2luZG93IHsgLyogaWU2IGhhY2sgKi8KcG9zaXRpb246IGFic29sdXRlOwptYXJnaW4tdG9wOiBleHByZXNzaW9uKDAgLSBwYXJzZUludCh0aGlzLm9mZnNldEhlaWdodCAvIDIpICsgKFRCV2luZG93TWFyZ2luID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApICsgJ3B4Jyk7Cn0KCiNUQl93aW5kb3cgaW1nI1RCX0ltYWdlIHsKCWRpc3BsYXk6YmxvY2s7CgltYXJnaW46IDE1cHggMCAwIDE1cHg7Cglib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjY2NjOwoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7Cglib3JkZXItdG9wOiAxcHggc29saWQgIzY2NjsKCWJvcmRlci1sZWZ0OiAxcHggc29saWQgIzY2NjsKfQoKI1RCX2NhcHRpb257CgloZWlnaHQ6MjVweDsKCXBhZGRpbmc6N3B4IDMwcHggMTBweCAyNXB4OwoJZmxvYXQ6bGVmdDsKfQoKI1RCX2Nsb3NlV2luZG93ewoJaGVpZ2h0OjI1cHg7CglwYWRkaW5nOjExcHggMjVweCAxMHB4IDA7CglmbG9hdDpyaWdodDsKfQoKI1RCX2Nsb3NlQWpheFdpbmRvd3sKCXBhZGRpbmc6N3B4IDEwcHggNXB4IDA7CgltYXJnaW4tYm90dG9tOjFweDsKCXRleHQtYWxpZ246cmlnaHQ7CglmbG9hdDpyaWdodDsKfQoKI1RCX2FqYXhXaW5kb3dUaXRsZXsKCWZsb2F0OmxlZnQ7CglwYWRkaW5nOjdweCAwIDVweCAxMHB4OwoJbWFyZ2luLWJvdHRvbToxcHg7Cn0KCiNUQl90aXRsZXsKCWJhY2tncm91bmQtY29sb3I6I2U4ZThlODsKCWhlaWdodDoyN3B4Owp9CgojVEJfYWpheENvbnRlbnR7CgljbGVhcjpib3RoOwoJcGFkZGluZzoycHggMTVweCAxNXB4IDE1cHg7CglvdmVyZmxvdzphdXRvOwoJdGV4dC1hbGlnbjpsZWZ0OwoJbGluZS1oZWlnaHQ6MS40ZW07Cn0KCiNUQl9hamF4Q29udGVudC5UQl9tb2RhbHsKCXBhZGRpbmc6MTVweDsKfQoKI1RCX2FqYXhDb250ZW50IHB7CglwYWRkaW5nOjVweCAwcHggNXB4IDBweDsKfQoKI1RCX2xvYWR7Cglwb3NpdGlvbjogZml4ZWQ7CglkaXNwbGF5Om5vbmU7CgloZWlnaHQ6MTNweDsKCXdpZHRoOjIwOHB4OwoJei1pbmRleDoxMDM7Cgl0b3A6IDUwJTsKCWxlZnQ6IDUwJTsKCW1hcmdpbjogLTZweCAwIDAgLTEwNHB4OyAvKiAtaGVpZ2h0LzIgMCAwIC13aWR0aC8yICovCn0KCiogaHRtbCAjVEJfbG9hZCB7IC8qIGllNiBoYWNrICovCnBvc2l0aW9uOiBhYnNvbHV0ZTsKbWFyZ2luLXRvcDogZXhwcmVzc2lvbigwIC0gcGFyc2VJbnQodGhpcy5vZmZzZXRIZWlnaHQgLyAyKSArIChUQldpbmRvd01hcmdpbiA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSArICdweCcpOwp9CgojVEJfSGlkZVNlbGVjdHsKCXotaW5kZXg6OTk7Cglwb3NpdGlvbjpmaXhlZDsKCXRvcDogMDsKCWxlZnQ6IDA7CgliYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Cglib3JkZXI6bm9uZTsKCWZpbHRlcjphbHBoYShvcGFjaXR5PTApOwoJLW1vei1vcGFjaXR5OiAwOwoJb3BhY2l0eTogMDsKCWhlaWdodDoxMDAlOwoJd2lkdGg6MTAwJTsKfQoKKiBodG1sICNUQl9IaWRlU2VsZWN0IHsgLyogaWU2IGhhY2sgKi8KICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgaGVpZ2h0OiBleHByZXNzaW9uKGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgPyBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCA6IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0ICsgJ3B4Jyk7Cn0KCiNUQl9pZnJhbWVDb250ZW50ewoJY2xlYXI6Ym90aDsKCWJvcmRlcjpub25lOwoJbWFyZ2luLWJvdHRvbTotMXB4OwoJbWFyZ2luLXRvcDoxcHg7CglfbWFyZ2luLWJvdHRvbToxcHg7Cn0K]]></data>
	</file>
	<file>
	  <filename>/templates/thickbox/thickbox.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIFRoaWNrYm94IDMuMSAtIE9uZSBCb3ggVG8gUnVsZSBUaGVtIEFsbC4NCiAqIEJ5IENvZHkgTGluZGxleSAoaHR0cDovL3d3dy5jb2R5bGluZGxleS5jb20pDQogKiBDb3B5cmlnaHQgKGMpIDIwMDcgY29keSBsaW5kbGV5DQogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwDQoqLw0KCQkgIA0KdmFyIHRiX3BhdGhUb0ltYWdlID0gIm1vZHVsZXMvR2FsbGVyeS90ZW1wbGF0ZXMvdGhpY2tib3gvbG9hZGluZ0FuaW1hdGlvbi5naWYiOw0KDQovKiEhISEhISEhISEhISEhISEhIGVkaXQgYmVsb3cgdGhpcyBsaW5lIGF0IHlvdXIgb3duIHJpc2sgISEhISEhISEhISEhISEhISEhISEhISEqLw0KDQovL29uIHBhZ2UgbG9hZCBjYWxsIHRiX2luaXQNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7ICAgDQoJdGJfaW5pdCgnYS50aGlja2JveCwgYXJlYS50aGlja2JveCwgaW5wdXQudGhpY2tib3gnKTsvL3Bhc3Mgd2hlcmUgdG8gYXBwbHkgdGhpY2tib3gNCglpbWdMb2FkZXIgPSBuZXcgSW1hZ2UoKTsvLyBwcmVsb2FkIGltYWdlDQoJaW1nTG9hZGVyLnNyYyA9IHRiX3BhdGhUb0ltYWdlOw0KfSk7DQoNCi8vYWRkIHRoaWNrYm94IHRvIGhyZWYgJiBhcmVhIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIGNsYXNzIG9mIC50aGlja2JveA0KZnVuY3Rpb24gdGJfaW5pdChkb21DaHVuayl7DQoJJChkb21DaHVuaykuY2xpY2soZnVuY3Rpb24oKXsNCgl2YXIgdCA9IHRoaXMudGl0bGUgfHwgdGhpcy5uYW1lIHx8IG51bGw7DQoJdmFyIGEgPSB0aGlzLmhyZWYgfHwgdGhpcy5hbHQ7DQoJdmFyIGcgPSB0aGlzLnJlbCB8fCBmYWxzZTsNCgl0Yl9zaG93KHQsYSxnKTsNCgl0aGlzLmJsdXIoKTsNCglyZXR1cm4gZmFsc2U7DQoJfSk7DQp9DQoNCmZ1bmN0aW9uIHRiX3Nob3coY2FwdGlvbiwgdXJsLCBpbWFnZUdyb3VwKSB7Ly9mdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gYSB0aGlja2JveCBsaW5rDQoNCgl0cnkgew0KCQlpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGUubWF4SGVpZ2h0ID09PSAidW5kZWZpbmVkIikgey8vaWYgSUUgNg0KCQkJJCgiYm9keSIsImh0bWwiKS5jc3Moe2hlaWdodDogIjEwMCUiLCB3aWR0aDogIjEwMCUifSk7DQoJCQkkKCJodG1sIikuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpOw0KCQkJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJUQl9IaWRlU2VsZWN0IikgPT09IG51bGwpIHsvL2lmcmFtZSB0byBoaWRlIHNlbGVjdCBlbGVtZW50cyBpbiBpZTYNCgkJCQkkKCJib2R5IikuYXBwZW5kKCI8aWZyYW1lIGlkPSdUQl9IaWRlU2VsZWN0Jz48L2lmcmFtZT48ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5IikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCX0NCgkJfWVsc2V7Ly9hbGwgb3RoZXJzDQoJCQlpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiVEJfb3ZlcmxheSIpID09PSBudWxsKXsNCgkJCQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9vdmVybGF5Jz48L2Rpdj48ZGl2IGlkPSdUQl93aW5kb3cnPjwvZGl2PiIpOw0KCQkJCSQoIiNUQl9vdmVybGF5IikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCX0NCgkJfQ0KCQkNCgkJaWYodGJfZGV0ZWN0TWFjWEZGKCkpew0KCQkJJCgiI1RCX292ZXJsYXkiKS5hZGRDbGFzcygiVEJfb3ZlcmxheU1hY0ZGQkdIYWNrIik7Ly91c2UgcG5nIG92ZXJsYXkgc28gaGlkZSBmbGFzaA0KCQl9ZWxzZXsNCgkJCSQoIiNUQl9vdmVybGF5IikuYWRkQ2xhc3MoIlRCX292ZXJsYXlCRyIpOy8vdXNlIGJhY2tncm91bmQgYW5kIG9wYWNpdHkNCgkJfQ0KCQkNCgkJaWYoY2FwdGlvbj09PW51bGwpe2NhcHRpb249IiI7fQ0KCQkkKCJib2R5IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl9sb2FkJz48aW1nIHNyYz0nIitpbWdMb2FkZXIuc3JjKyInIC8+PC9kaXY+Iik7Ly9hZGQgbG9hZGVyIHRvIHRoZSBwYWdlDQoJCSQoJyNUQl9sb2FkJykuc2hvdygpOy8vc2hvdyBsb2FkZXINCgkJDQoJCXZhciBiYXNlVVJMOw0KCSAgIGlmKHVybC5pbmRleE9mKCI/IikhPT0tMSl7IC8vZmYgdGhlcmUgaXMgYSBxdWVyeSBzdHJpbmcgaW52b2x2ZWQNCgkJCWJhc2VVUkwgPSB1cmwuc3Vic3RyKDAsIHVybC5pbmRleE9mKCI/IikpOw0KCSAgIH1lbHNleyANCgkgICAJCWJhc2VVUkwgPSB1cmw7DQoJICAgfQ0KCSAgIA0KCSAgIHZhciB1cmxTdHJpbmcgPSAvXC5qcGckfFwuanBlZyR8XC5wbmckfFwuZ2lmJHxcLmJtcCQvOw0KCSAgIHZhciB1cmxUeXBlID0gYmFzZVVSTC50b0xvd2VyQ2FzZSgpLm1hdGNoKHVybFN0cmluZyk7DQoNCgkJaWYodXJsVHlwZSA9PSAnLmpwZycgfHwgdXJsVHlwZSA9PSAnLmpwZWcnIHx8IHVybFR5cGUgPT0gJy5wbmcnIHx8IHVybFR5cGUgPT0gJy5naWYnIHx8IHVybFR5cGUgPT0gJy5ibXAnKXsvL2NvZGUgdG8gc2hvdyBpbWFnZXMNCgkJCQkNCgkJCVRCX1ByZXZDYXB0aW9uID0gIiI7DQoJCQlUQl9QcmV2VVJMID0gIiI7DQoJCQlUQl9QcmV2SFRNTCA9ICIiOw0KCQkJVEJfTmV4dENhcHRpb24gPSAiIjsNCgkJCVRCX05leHRVUkwgPSAiIjsNCgkJCVRCX05leHRIVE1MID0gIiI7DQoJCQlUQl9pbWFnZUNvdW50ID0gIiI7DQoJCQlUQl9Gb3VuZFVSTCA9IGZhbHNlOw0KCQkJaWYoaW1hZ2VHcm91cCl7DQoJCQkJVEJfVGVtcEFycmF5ID0gJCgiYVtyZWw9IitpbWFnZUdyb3VwKyJdIikuZ2V0KCk7DQoJCQkJZm9yIChUQl9Db3VudGVyID0gMDsgKChUQl9Db3VudGVyIDwgVEJfVGVtcEFycmF5Lmxlbmd0aCkgJiYgKFRCX05leHRIVE1MID09PSAiIikpOyBUQl9Db3VudGVyKyspIHsNCgkJCQkJdmFyIHVybFR5cGVUZW1wID0gVEJfVGVtcEFycmF5W1RCX0NvdW50ZXJdLmhyZWYudG9Mb3dlckNhc2UoKS5tYXRjaCh1cmxTdHJpbmcpOw0KCQkJCQkJaWYgKCEoVEJfVGVtcEFycmF5W1RCX0NvdW50ZXJdLmhyZWYgPT0gdXJsKSkgewkJCQkJCQ0KCQkJCQkJCWlmIChUQl9Gb3VuZFVSTCkgew0KCQkJCQkJCQlUQl9OZXh0Q2FwdGlvbiA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS50aXRsZTsNCgkJCQkJCQkJVEJfTmV4dFVSTCA9IFRCX1RlbXBBcnJheVtUQl9Db3VudGVyXS5ocmVmOw0KCQkJCQkJCQlUQl9OZXh0SFRNTCA9ICI8c3BhbiBpZD0nVEJfbmV4dCc+Jm5ic3A7Jm5ic3A7PGEgaHJlZj0nIyc+TmV4dCAmZ3Q7PC9hPjwvc3Bhbj4iOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCVRCX1ByZXZDYXB0aW9uID0gVEJfVGVtcEFycmF5W1RCX0NvdW50ZXJdLnRpdGxlOw0KCQkJCQkJCQlUQl9QcmV2VVJMID0gVEJfVGVtcEFycmF5W1RCX0NvdW50ZXJdLmhyZWY7DQoJCQkJCQkJCVRCX1ByZXZIVE1MID0gIjxzcGFuIGlkPSdUQl9wcmV2Jz4mbmJzcDsmbmJzcDs8YSBocmVmPScjJz4mbHQ7IFByZXY8L2E+PC9zcGFuPiI7DQoJCQkJCQkJfQ0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQlUQl9Gb3VuZFVSTCA9IHRydWU7DQoJCQkJCQkJVEJfaW1hZ2VDb3VudCA9ICJJbWFnZSAiICsgKFRCX0NvdW50ZXIgKyAxKSArIiBvZiAiKyAoVEJfVGVtcEFycmF5Lmxlbmd0aCk7CQkJCQkJCQkJCQkNCgkJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCWltZ1ByZWxvYWRlciA9IG5ldyBJbWFnZSgpOw0KCQkJaW1nUHJlbG9hZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCl7CQkNCgkJCWltZ1ByZWxvYWRlci5vbmxvYWQgPSBudWxsOw0KCQkJCQ0KCQkJLy8gUmVzaXppbmcgbGFyZ2UgaW1hZ2VzIC0gb3JnaW5hbCBieSBDaHJpc3RpYW4gTW9udG95YSBlZGl0ZWQgYnkgbWUuDQoJCQl2YXIgcGFnZXNpemUgPSB0Yl9nZXRQYWdlU2l6ZSgpOw0KCQkJdmFyIHggPSBwYWdlc2l6ZVswXSAtIDE1MDsNCgkJCXZhciB5ID0gcGFnZXNpemVbMV0gLSAxNTA7DQoJCQl2YXIgaW1hZ2VXaWR0aCA9IGltZ1ByZWxvYWRlci53aWR0aDsNCgkJCXZhciBpbWFnZUhlaWdodCA9IGltZ1ByZWxvYWRlci5oZWlnaHQ7DQoJCQlpZiAoaW1hZ2VXaWR0aCA+IHgpIHsNCgkJCQlpbWFnZUhlaWdodCA9IGltYWdlSGVpZ2h0ICogKHggLyBpbWFnZVdpZHRoKTsgDQoJCQkJaW1hZ2VXaWR0aCA9IHg7IA0KCQkJCWlmIChpbWFnZUhlaWdodCA+IHkpIHsgDQoJCQkJCWltYWdlV2lkdGggPSBpbWFnZVdpZHRoICogKHkgLyBpbWFnZUhlaWdodCk7IA0KCQkJCQlpbWFnZUhlaWdodCA9IHk7IA0KCQkJCX0NCgkJCX0gZWxzZSBpZiAoaW1hZ2VIZWlnaHQgPiB5KSB7IA0KCQkJCWltYWdlV2lkdGggPSBpbWFnZVdpZHRoICogKHkgLyBpbWFnZUhlaWdodCk7IA0KCQkJCWltYWdlSGVpZ2h0ID0geTsgDQoJCQkJaWYgKGltYWdlV2lkdGggPiB4KSB7IA0KCQkJCQlpbWFnZUhlaWdodCA9IGltYWdlSGVpZ2h0ICogKHggLyBpbWFnZVdpZHRoKTsgDQoJCQkJCWltYWdlV2lkdGggPSB4Ow0KCQkJCX0NCgkJCX0NCgkJCS8vIEVuZCBSZXNpemluZw0KCQkJDQoJCQlUQl9XSURUSCA9IGltYWdlV2lkdGggKyAzMDsNCgkJCVRCX0hFSUdIVCA9IGltYWdlSGVpZ2h0ICsgNjA7DQoJCQkkKCIjVEJfd2luZG93IikuYXBwZW5kKCI8YSBocmVmPScnIGlkPSdUQl9JbWFnZU9mZicgdGl0bGU9J0Nsb3NlJz48aW1nIGlkPSdUQl9JbWFnZScgc3JjPSciK3VybCsiJyB3aWR0aD0nIitpbWFnZVdpZHRoKyInIGhlaWdodD0nIitpbWFnZUhlaWdodCsiJyBhbHQ9JyIrY2FwdGlvbisiJy8+PC9hPiIgKyAiPGRpdiBpZD0nVEJfY2FwdGlvbic+IitjYXB0aW9uKyI8ZGl2IGlkPSdUQl9zZWNvbmRMaW5lJz4iICsgVEJfaW1hZ2VDb3VudCArIFRCX1ByZXZIVE1MICsgVEJfTmV4dEhUTUwgKyAiPC9kaXY+PC9kaXY+PGRpdiBpZD0nVEJfY2xvc2VXaW5kb3cnPjxhIGhyZWY9JyMnIGlkPSdUQl9jbG9zZVdpbmRvd0J1dHRvbicgdGl0bGU9J0Nsb3NlJz5jbG9zZTwvYT4gb3IgRXNjIEtleTwvZGl2PiIpOyAJCQ0KCQkJDQoJCQkkKCIjVEJfY2xvc2VXaW5kb3dCdXR0b24iKS5jbGljayh0Yl9yZW1vdmUpOw0KCQkJDQoJCQlpZiAoIShUQl9QcmV2SFRNTCA9PT0gIiIpKSB7DQoJCQkJZnVuY3Rpb24gZ29QcmV2KCl7DQoJCQkJCWlmKCQoZG9jdW1lbnQpLnVuYmluZCgiY2xpY2siLGdvUHJldikpeyQoZG9jdW1lbnQpLnVuYmluZCgiY2xpY2siLGdvUHJldik7fQ0KCQkJCQkkKCIjVEJfd2luZG93IikucmVtb3ZlKCk7DQoJCQkJCSQoImJvZHkiKS5hcHBlbmQoIjxkaXYgaWQ9J1RCX3dpbmRvdyc+PC9kaXY+Iik7DQoJCQkJCXRiX3Nob3coVEJfUHJldkNhcHRpb24sIFRCX1ByZXZVUkwsIGltYWdlR3JvdXApOw0KCQkJCQlyZXR1cm4gZmFsc2U7CQ0KCQkJCX0NCgkJCQkkKCIjVEJfcHJldiIpLmNsaWNrKGdvUHJldik7DQoJCQl9DQoJCQkNCgkJCWlmICghKFRCX05leHRIVE1MID09PSAiIikpIHsJCQ0KCQkJCWZ1bmN0aW9uIGdvTmV4dCgpew0KCQkJCQkkKCIjVEJfd2luZG93IikucmVtb3ZlKCk7DQoJCQkJCSQoImJvZHkiKS5hcHBlbmQoIjxkaXYgaWQ9J1RCX3dpbmRvdyc+PC9kaXY+Iik7DQoJCQkJCXRiX3Nob3coVEJfTmV4dENhcHRpb24sIFRCX05leHRVUkwsIGltYWdlR3JvdXApOwkJCQkNCgkJCQkJcmV0dXJuIGZhbHNlOwkNCgkJCQl9DQoJCQkJJCgiI1RCX25leHQiKS5jbGljayhnb05leHQpOw0KCQkJCQ0KCQkJfQ0KDQoJCQlkb2N1bWVudC5vbmtleWRvd24gPSBmdW5jdGlvbihlKXsgCQ0KCQkJCWlmIChlID09IG51bGwpIHsgLy8gaWUNCgkJCQkJa2V5Y29kZSA9IGV2ZW50LmtleUNvZGU7DQoJCQkJfSBlbHNlIHsgLy8gbW96aWxsYQ0KCQkJCQlrZXljb2RlID0gZS53aGljaDsNCgkJCQl9DQoJCQkJaWYoa2V5Y29kZSA9PSAyNyl7IC8vIGNsb3NlDQoJCQkJCXRiX3JlbW92ZSgpOw0KCQkJCX0gZWxzZSBpZihrZXljb2RlID09IDE5MCl7IC8vIGRpc3BsYXkgcHJldmlvdXMgaW1hZ2UNCgkJCQkJaWYoIShUQl9OZXh0SFRNTCA9PSAiIikpew0KCQkJCQkJZG9jdW1lbnQub25rZXlkb3duID0gIiI7DQoJCQkJCQlnb05leHQoKTsNCgkJCQkJfQ0KCQkJCX0gZWxzZSBpZihrZXljb2RlID09IDE4OCl7IC8vIGRpc3BsYXkgbmV4dCBpbWFnZQ0KCQkJCQlpZighKFRCX1ByZXZIVE1MID09ICIiKSl7DQoJCQkJCQlkb2N1bWVudC5vbmtleWRvd24gPSAiIjsNCgkJCQkJCWdvUHJldigpOw0KCQkJCQl9DQoJCQkJfQkNCgkJCX07DQoJCQkNCgkJCXRiX3Bvc2l0aW9uKCk7DQoJCQkkKCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCQkJJCgiI1RCX0ltYWdlT2ZmIikuY2xpY2sodGJfcmVtb3ZlKTsNCgkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOyAvL2ZvciBzYWZhcmkgdXNpbmcgY3NzIGluc3RlYWQgb2Ygc2hvdw0KCQkJfTsNCgkJCQ0KCQkJaW1nUHJlbG9hZGVyLnNyYyA9IHVybDsNCgkJfWVsc2V7Ly9jb2RlIHRvIHNob3cgaHRtbA0KCQkJDQoJCQl2YXIgcXVlcnlTdHJpbmcgPSB1cmwucmVwbGFjZSgvXlteXD9dK1w/Py8sJycpOw0KCQkJdmFyIHBhcmFtcyA9IHRiX3BhcnNlUXVlcnkoIHF1ZXJ5U3RyaW5nICk7DQoNCgkJCVRCX1dJRFRIID0gKHBhcmFtc1snd2lkdGgnXSoxKSArIDMwIHx8IDYzMDsgLy9kZWZhdWx0cyB0byA2MzAgaWYgbm8gcGFyYW1hdGVycyB3ZXJlIGFkZGVkIHRvIFVSTA0KCQkJVEJfSEVJR0hUID0gKHBhcmFtc1snaGVpZ2h0J10qMSkgKyA0MCB8fCA0NDA7IC8vZGVmYXVsdHMgdG8gNDQwIGlmIG5vIHBhcmFtYXRlcnMgd2VyZSBhZGRlZCB0byBVUkwNCgkJCWFqYXhDb250ZW50VyA9IFRCX1dJRFRIIC0gMzA7DQoJCQlhamF4Q29udGVudEggPSBUQl9IRUlHSFQgLSA0NTsNCgkJCQ0KCQkJaWYodXJsLmluZGV4T2YoJ1RCX2lmcmFtZScpICE9IC0xKXsvLyBlaXRoZXIgaWZyYW1lIG9yIGFqYXggd2luZG93CQkNCgkJCQkJdXJsTm9RdWVyeSA9IHVybC5zcGxpdCgnVEJfJyk7DQoJCQkJCSQoIiNUQl9pZnJhbWVDb250ZW50IikucmVtb3ZlKCk7DQoJCQkJCWlmKHBhcmFtc1snbW9kYWwnXSAhPSAidHJ1ZSIpey8vaWZyYW1lIG5vIG1vZGFsDQoJCQkJCQkkKCIjVEJfd2luZG93IikuYXBwZW5kKCI8ZGl2IGlkPSdUQl90aXRsZSc+PGRpdiBpZD0nVEJfYWpheFdpbmRvd1RpdGxlJz4iK2NhcHRpb24rIjwvZGl2PjxkaXYgaWQ9J1RCX2Nsb3NlQWpheFdpbmRvdyc+PGEgaHJlZj0nIycgaWQ9J1RCX2Nsb3NlV2luZG93QnV0dG9uJyB0aXRsZT0nQ2xvc2UnPmNsb3NlPC9hPiBvciBFc2MgS2V5PC9kaXY+PC9kaXY+PGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgaHNwYWNlPScwJyBzcmM9JyIrdXJsTm9RdWVyeVswXSsiJyBpZD0nVEJfaWZyYW1lQ29udGVudCcgbmFtZT0nVEJfaWZyYW1lQ29udGVudCIrTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKjEwMDApKyInIG9ubG9hZD0ndGJfc2hvd0lmcmFtZSgpJyBzdHlsZT0nd2lkdGg6IisoYWpheENvbnRlbnRXICsgMjkpKyJweDtoZWlnaHQ6IisoYWpheENvbnRlbnRIICsgMTcpKyJweDsnID4gPC9pZnJhbWU+Iik7DQoJCQkJCX1lbHNley8vaWZyYW1lIG1vZGFsDQoJCQkJCSQoIiNUQl9vdmVybGF5IikudW5iaW5kKCk7DQoJCQkJCQkkKCIjVEJfd2luZG93IikuYXBwZW5kKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyBoc3BhY2U9JzAnIHNyYz0nIit1cmxOb1F1ZXJ5WzBdKyInIGlkPSdUQl9pZnJhbWVDb250ZW50JyBuYW1lPSdUQl9pZnJhbWVDb250ZW50IitNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMTAwMCkrIicgb25sb2FkPSd0Yl9zaG93SWZyYW1lKCknIHN0eWxlPSd3aWR0aDoiKyhhamF4Q29udGVudFcgKyAyOSkrInB4O2hlaWdodDoiKyhhamF4Q29udGVudEggKyAxNykrInB4Oyc+IDwvaWZyYW1lPiIpOw0KCQkJCQl9DQoJCQl9ZWxzZXsvLyBub3QgYW4gaWZyYW1lLCBhamF4DQoJCQkJCWlmKCQoIiNUQl93aW5kb3ciKS5jc3MoImRpc3BsYXkiKSAhPSAiYmxvY2siKXsNCgkJCQkJCWlmKHBhcmFtc1snbW9kYWwnXSAhPSAidHJ1ZSIpey8vYWpheCBubyBtb2RhbA0KCQkJCQkJJCgiI1RCX3dpbmRvdyIpLmFwcGVuZCgiPGRpdiBpZD0nVEJfdGl0bGUnPjxkaXYgaWQ9J1RCX2FqYXhXaW5kb3dUaXRsZSc+IitjYXB0aW9uKyI8L2Rpdj48ZGl2IGlkPSdUQl9jbG9zZUFqYXhXaW5kb3cnPjxhIGhyZWY9JyMnIGlkPSdUQl9jbG9zZVdpbmRvd0J1dHRvbic+Y2xvc2U8L2E+IG9yIEVzYyBLZXk8L2Rpdj48L2Rpdj48ZGl2IGlkPSdUQl9hamF4Q29udGVudCcgc3R5bGU9J3dpZHRoOiIrYWpheENvbnRlbnRXKyJweDtoZWlnaHQ6IithamF4Q29udGVudEgrInB4Jz48L2Rpdj4iKTsNCgkJCQkJCX1lbHNley8vYWpheCBtb2RhbA0KCQkJCQkJJCgiI1RCX292ZXJsYXkiKS51bmJpbmQoKTsNCgkJCQkJCSQoIiNUQl93aW5kb3ciKS5hcHBlbmQoIjxkaXYgaWQ9J1RCX2FqYXhDb250ZW50JyBjbGFzcz0nVEJfbW9kYWwnIHN0eWxlPSd3aWR0aDoiK2FqYXhDb250ZW50VysicHg7aGVpZ2h0OiIrYWpheENvbnRlbnRIKyJweDsnPjwvZGl2PiIpOwkNCgkJCQkJCX0NCgkJCQkJfWVsc2V7Ly90aGlzIG1lYW5zIHRoZSB3aW5kb3cgaXMgYWxyZWFkeSB1cCwgd2UgYXJlIGp1c3QgbG9hZGluZyBuZXcgY29udGVudCB2aWEgYWpheA0KCQkJCQkJJCgiI1RCX2FqYXhDb250ZW50IilbMF0uc3R5bGUud2lkdGggPSBhamF4Q29udGVudFcgKyJweCI7DQoJCQkJCQkkKCIjVEJfYWpheENvbnRlbnQiKVswXS5zdHlsZS5oZWlnaHQgPSBhamF4Q29udGVudEggKyJweCI7DQoJCQkJCQkkKCIjVEJfYWpheENvbnRlbnQiKVswXS5zY3JvbGxUb3AgPSAwOw0KCQkJCQkJJCgiI1RCX2FqYXhXaW5kb3dUaXRsZSIpLmh0bWwoY2FwdGlvbik7DQoJCQkJCX0NCgkJCX0NCgkJCQkJDQoJCQkkKCIjVEJfY2xvc2VXaW5kb3dCdXR0b24iKS5jbGljayh0Yl9yZW1vdmUpOw0KCQkJDQoJCQkJaWYodXJsLmluZGV4T2YoJ1RCX2lubGluZScpICE9IC0xKXsJDQoJCQkJCSQoIiNUQl9hamF4Q29udGVudCIpLmFwcGVuZCgkKCcjJyArIHBhcmFtc1snaW5saW5lSWQnXSkuY2hpbGRyZW4oKSk7DQoJCQkJCSQoIiNUQl93aW5kb3ciKS51bmxvYWQoZnVuY3Rpb24gKCkgew0KCQkJCQkJJCgnIycgKyBwYXJhbXNbJ2lubGluZUlkJ10pLmFwcGVuZCggJCgiI1RCX2FqYXhDb250ZW50IikuY2hpbGRyZW4oKSApOyAvLyBtb3ZlIGVsZW1lbnRzIGJhY2sgd2hlbiB5b3UncmUgZmluaXNoZWQNCgkJCQkJfSk7DQoJCQkJCXRiX3Bvc2l0aW9uKCk7DQoJCQkJCSQoIiNUQl9sb2FkIikucmVtb3ZlKCk7DQoJCQkJCSQoIiNUQl93aW5kb3ciKS5jc3Moe2Rpc3BsYXk6ImJsb2NrIn0pOyANCgkJCQl9ZWxzZSBpZih1cmwuaW5kZXhPZignVEJfaWZyYW1lJykgIT0gLTEpew0KCQkJCQl0Yl9wb3NpdGlvbigpOw0KCQkJCQlpZigkLmJyb3dzZXIuc2FmYXJpKXsvL3NhZmFyaSBuZWVkcyBoZWxwIGJlY2F1c2UgaXQgd2lsbCBub3QgZmlyZSBpZnJhbWUgb25sb2FkDQoJCQkJCQkkKCIjVEJfbG9hZCIpLnJlbW92ZSgpOw0KCQkJCQkJJCgiI1RCX3dpbmRvdyIpLmNzcyh7ZGlzcGxheToiYmxvY2sifSk7DQoJCQkJCX0NCgkJCQl9ZWxzZXsNCgkJCQkJJCgiI1RCX2FqYXhDb250ZW50IikubG9hZCh1cmwgKz0gIiZyYW5kb209IiArIChuZXcgRGF0ZSgpLmdldFRpbWUoKSksZnVuY3Rpb24oKXsvL3RvIGRvIGEgcG9zdCBjaGFuZ2UgdGhpcyBsb2FkIG1ldGhvZA0KCQkJCQkJdGJfcG9zaXRpb24oKTsNCgkJCQkJCSQoIiNUQl9sb2FkIikucmVtb3ZlKCk7DQoJCQkJCQl0Yl9pbml0KCIjVEJfYWpheENvbnRlbnQgYS50aGlja2JveCIpOw0KCQkJCQkJJCgiI1RCX3dpbmRvdyIpLmNzcyh7ZGlzcGxheToiYmxvY2sifSk7DQoJCQkJCX0pOw0KCQkJCX0NCgkJCQ0KCQl9DQoNCgkJaWYoIXBhcmFtc1snbW9kYWwnXSl7DQoJCQlkb2N1bWVudC5vbmtleXVwID0gZnVuY3Rpb24oZSl7IAkNCgkJCQlpZiAoZSA9PSBudWxsKSB7IC8vIGllDQoJCQkJCWtleWNvZGUgPSBldmVudC5rZXlDb2RlOw0KCQkJCX0gZWxzZSB7IC8vIG1vemlsbGENCgkJCQkJa2V5Y29kZSA9IGUud2hpY2g7DQoJCQkJfQ0KCQkJCWlmKGtleWNvZGUgPT0gMjcpeyAvLyBjbG9zZQ0KCQkJCQl0Yl9yZW1vdmUoKTsNCgkJCQl9CQ0KCQkJfTsNCgkJfQ0KCQkNCgl9IGNhdGNoKGUpIHsNCgkJLy9ub3RoaW5nIGhlcmUNCgl9DQp9DQoNCi8vaGVscGVyIGZ1bmN0aW9ucyBiZWxvdw0KZnVuY3Rpb24gdGJfc2hvd0lmcmFtZSgpew0KCSQoIiNUQl9sb2FkIikucmVtb3ZlKCk7DQoJJCgiI1RCX3dpbmRvdyIpLmNzcyh7ZGlzcGxheToiYmxvY2sifSk7DQp9DQoNCmZ1bmN0aW9uIHRiX3JlbW92ZSgpIHsNCiAJJCgiI1RCX2ltYWdlT2ZmIikudW5iaW5kKCJjbGljayIpOw0KCSQoIiNUQl9jbG9zZVdpbmRvd0J1dHRvbiIpLnVuYmluZCgiY2xpY2siKTsNCgkkKCIjVEJfd2luZG93IikuZmFkZU91dCgiZmFzdCIsZnVuY3Rpb24oKXskKCcjVEJfd2luZG93LCNUQl9vdmVybGF5LCNUQl9IaWRlU2VsZWN0JykudHJpZ2dlcigidW5sb2FkIikudW5iaW5kKCkucmVtb3ZlKCk7fSk7DQoJJCgiI1RCX2xvYWQiKS5yZW1vdmUoKTsNCglpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuc3R5bGUubWF4SGVpZ2h0ID09ICJ1bmRlZmluZWQiKSB7Ly9pZiBJRSA2DQoJCSQoImJvZHkiLCJodG1sIikuY3NzKHtoZWlnaHQ6ICJhdXRvIiwgd2lkdGg6ICJhdXRvIn0pOw0KCQkkKCJodG1sIikuY3NzKCJvdmVyZmxvdyIsIiIpOw0KCX0NCglkb2N1bWVudC5vbmtleWRvd24gPSAiIjsNCglkb2N1bWVudC5vbmtleXVwID0gIiI7DQoJcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiB0Yl9wb3NpdGlvbigpIHsNCiQoIiNUQl93aW5kb3ciKS5jc3Moe21hcmdpbkxlZnQ6ICctJyArIHBhcnNlSW50KChUQl9XSURUSCAvIDIpLDEwKSArICdweCcsIHdpZHRoOiBUQl9XSURUSCArICdweCd9KTsNCglpZiAoICEoalF1ZXJ5LmJyb3dzZXIubXNpZSAmJiBqUXVlcnkuYnJvd3Nlci52ZXJzaW9uIDwgNykpIHsgLy8gdGFrZSBhd2F5IElFNg0KCQkkKCIjVEJfd2luZG93IikuY3NzKHttYXJnaW5Ub3A6ICctJyArIHBhcnNlSW50KChUQl9IRUlHSFQgLyAyKSwxMCkgKyAncHgnfSk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiB0Yl9wYXJzZVF1ZXJ5ICggcXVlcnkgKSB7DQogICB2YXIgUGFyYW1zID0ge307DQogICBpZiAoICEgcXVlcnkgKSB7cmV0dXJuIFBhcmFtczt9Ly8gcmV0dXJuIGVtcHR5IG9iamVjdA0KICAgdmFyIFBhaXJzID0gcXVlcnkuc3BsaXQoL1s7Jl0vKTsNCiAgIGZvciAoIHZhciBpID0gMDsgaSA8IFBhaXJzLmxlbmd0aDsgaSsrICkgew0KICAgICAgdmFyIEtleVZhbCA9IFBhaXJzW2ldLnNwbGl0KCc9Jyk7DQogICAgICBpZiAoICEgS2V5VmFsIHx8IEtleVZhbC5sZW5ndGggIT0gMiApIHtjb250aW51ZTt9DQogICAgICB2YXIga2V5ID0gdW5lc2NhcGUoIEtleVZhbFswXSApOw0KICAgICAgdmFyIHZhbCA9IHVuZXNjYXBlKCBLZXlWYWxbMV0gKTsNCiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9cKy9nLCAnICcpOw0KICAgICAgUGFyYW1zW2tleV0gPSB2YWw7DQogICB9DQogICByZXR1cm4gUGFyYW1zOw0KfQ0KDQpmdW5jdGlvbiB0Yl9nZXRQYWdlU2l6ZSgpew0KCXZhciBkZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsNCgl2YXIgdyA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IHNlbGYuaW5uZXJXaWR0aCB8fCAoZGUmJmRlLmNsaWVudFdpZHRoKSB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOw0KCXZhciBoID0gd2luZG93LmlubmVySGVpZ2h0IHx8IHNlbGYuaW5uZXJIZWlnaHQgfHwgKGRlJiZkZS5jbGllbnRIZWlnaHQpIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0Ow0KCWFycmF5UGFnZVNpemUgPSBbdyxoXTsNCglyZXR1cm4gYXJyYXlQYWdlU2l6ZTsNCn0NCg0KZnVuY3Rpb24gdGJfZGV0ZWN0TWFjWEZGKCkgew0KICB2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOw0KICBpZiAodXNlckFnZW50LmluZGV4T2YoJ21hYycpICE9IC0xICYmIHVzZXJBZ2VudC5pbmRleE9mKCdmaXJlZm94JykhPS0xKSB7DQogICAgcmV0dXJuIHRydWU7DQogIH0NCn0NCg0KDQo=]]></data>
	</file>
	<file>
	  <filename>/thumbs/</filename>
	  <isdir>1</isdir>
	</file>
</module>
