<?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>AWSS3</name>
	<version>1.2.0</version>
    <mincmsversion>2.2.1</mincmsversion>
	<help><![CDATA[PGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5BV1NTREsgPSZndDsgMS4xLjA8L2xpPjxsaT5GaWxlTWFuYWdlciA9Jmd0OyAxLjYuMTM8L2xpPjwvdWw+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBhY3Rpb249ImRlZmF1bHQiIC0gDQogICAgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgYWN0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOg0KICAgIDx1bD4NCiAgICAgICAgPGxpPiZxdW90O2RlZmF1bHQmcXVvdDsgLSBkaXNwbGF5cyB0aGUgc3VtbWFyeSB2aWV3LjwvbGk+DQogICAgICAgIDxsaT4mcXVvdDtkZXRhaWwmcXVvdDsgLSBkaXNwbGF5cyBhIHNwZWNpZmllZCBlbnRyeSBpbiBkZXRhaWwgbW9kZS4gKG11c3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIDxpPnByZWZpeDwvaT4pPC9saT4NCiAgICAgICAgPGxpPiZxdW90O3VwbG9hZCZxdW90OyAtIGRpc3BsYXlzIHRoZSB1cGxvYWQgZm9ybSAoY2FuIGJlIHVzZWQgd2l0aCA8aT5wcmVmaXg8L2k+IGZvciB1cGxvYWQgaW4gYSBzcGVjaWZpYyBsb2NhdGlvbik8L2VtPjwvbGk+DQogICAgPC91bD48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHByZWZpeD0iIiAtIEEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdGhlIGNvbXBsZXRlIHBhdGggaW4gZnJvbnQgb2YgdGhlIG9iamVjdCBuYW1lLiBQcm9qZWN0L1dvcmRGaWxlcy8uLi48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHBhZ2VsaW1pdD0iIiAtIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgKHBlciBwYWdlKS4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwbGllZCBhbGwgbWF0Y2hpbmcgaXRlbXMgd2lsbCBiZSBkaXNwbGF5ZWQuICBJZiBpdCBpcywgYW5kIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIGF2YWlsYWJsZSB0aGFuIHNwZWNpZmllZCBpbiB0aGUgcGFyYW1ldGVyLCB0ZXh0IGFuZCBsaW5rcyB3aWxsIGJlIHN1cHBsaWVkIHRvIGFsbG93IHNjcm9sbGluZyB0aHJvdWdoIHRoZSByZXN1bHRzPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBzdW1tYXJ5cGFnZT0iIiAtIFBhZ2UgdG8gZGlzcGxheSBpdGVtIHN1bW1hcnkgaW4uIE11c3QgYmUgYSBwYWdlIGFsaWFzL2lkLiBVc2VkIHRvIGFsbG93IHN1bW1hcmllcyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBkaWZmZXJlbnQgcGFnZSB0aGFuIGluaXRpYXRvci48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHN1bW1hcnl0ZW1wbGF0ZT0iIiAtIFRoZSBzdW1tYXJ5IHRlbXBsYXRlIHlvdSB3aXNoIHRvIHVzZS48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGRldGFpbHBhZ2U9IiIgLSBQYWdlIHRvIGRpc3BsYXkgaXRlbSBkZXRhaWxzIGluLiBNdXN0IGJlIGEgcGFnZSBhbGlhcy9pZC4gVXNlZCB0byBhbGxvdyBkZXRhaWxzIHRvIGJlIGRpc3BsYXllZCBpbiBhIGRpZmZlcmVudCBwYWdlIHRoYW4gc3VtbWFyeS48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGRldGFpbHRlbXBsYXRlPSIiIC0gVGhlIGRldGFpbCB0ZW1wbGF0ZSB5b3Ugd2lzaCB0byB1c2UuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBQaXhlbCBTb2x1dGlvbnMgJmx0O2luZm9AcGl4ZWxzb2x1dGlvbnMuYml6Jmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMi4wPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+IyBDaGFuZ2Vsb2cKCiMjIFZlcnNpb24gMS4yLjAgLSBGZWJydWFyeSAyMCwgMjAyNgotIEFkZGVkIElBTSBSb2xlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBmb3IgRUMyL0VDUyBpbnN0YW5jZXMKLSBVc2VycyBjYW4gbm93IGNob29zZSBiZXR3ZWVuIFNhdmVkIENyZWRlbnRpYWxzIChBY2Nlc3MgS2V5L1NlY3JldCkgb3IgSUFNIFJvbGUgKEVDMi9FQ1MgSW5zdGFuY2UgUHJvZmlsZSkgYXV0aGVudGljYXRpb24gbWV0aG9kcwoKIyMgVmVyc2lvbiAxLjEuMSAtIE5vdmVtYmVyIDE3LCAyMDIzCi0gQWRkZWQgRGV0YWlsIHRlbXBsYXRlCgojIyBWZXJzaW9uIDEuMS4wIC0gTm92ZW1iZXIgMTYsIDIwMjMKLSBJbmNvcnBvcmF0ZWQgY3JlZGVudGlhbHMKCiMjIFZlcnNpb24gMS4wLjAgLSBKdW5lIDIwLCAyMDIzCi0gRmlyc3QgdmVyc2lvbiBvZiB0aGUgcGx1Z2luCjxiciAvPg==]]></about>
	<description><![CDATA[Store uploads in AWS S3]]></description>
	<requires>
	  <requiredname>AWSSDK</requiredname>
	  <requiredversion>1.1.0</requiredversion>
	</requires>
	<requires>
	  <requiredname>FileManager</requiredname>
	  <requiredversion>1.6.13</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_fileview.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCnVzZSBcQVdTU0RLXGVuY3J5cHQ7DQoNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpczo6TUFOQUdFX1BFUk0pICkgcmV0dXJuOw0KDQokYnVja2V0X2lkID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCdidWNrZXRfbmFtZScpOw0KJHRoaXMtPlNldEN1cnJlbnRUYWIoJGJ1Y2tldF9pZCk7DQokRmlsZU1hbmFnZXIgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGaWxlTWFuYWdlcicpOw0KJG5taW51dGVzID0gKGludCkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXhwaXJ5X2ludGVydmFsJywgMTgwKTsNCmlmICgkbm1pbnV0ZXMgPT0gJycpICRubWludXRlcyA9IDA7DQoNCmlmKCBpc3NldCgkcGFyYW1zWyJhamF4Il0pKSB7DQogICRidWNrZXRfaWQgPSAkcGFyYW1zWyJidWNrZXRfaWQiXTsNCiAgJHByZWZpeCA9ICRwYXJhbXNbInByZWZpeCJdOw0KICAkc21hcnR5LT5hc3NpZ24oJ2FqYXgnLCB0cnVlKTsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbImZtbWVzc2FnZSJdKSAmJiAkcGFyYW1zWyJmbW1lc3NhZ2UiXSE9IiIpIHsNCiAgLy8gZ290dGEgZ2V0IHJpZCBvZiB0aGlzIHN0dWZmLg0KICAkY291bnQ9IiI7DQogIGlmIChpc3NldCgkcGFyYW1zWyJmbW1lc3NhZ2Vjb3VudCJdKSAmJiAkcGFyYW1zWyJmbW1lc3NhZ2Vjb3VudCJdIT0iIikgJGNvdW50PSRwYXJhbXNbImZtbWVzc2FnZWNvdW50Il07DQogIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCRwYXJhbXNbImZtbWVzc2FnZSJdLCRjb3VudCkpOw0KfQ0KDQppZiAoaXNzZXQoJHBhcmFtc1siZm1lcnJvciJdKSAmJiAkcGFyYW1zWyJmbWVycm9yIl0hPSIiKSB7DQogIC8vIGdvdHRhIGdldCByaWQgb2YgdGhpcyBzdHVmZg0KICAkY291bnQ9IiI7DQogIGlmIChpc3NldCgkcGFyYW1zWyJmbWVycm9yY291bnQiXSkgJiYgJHBhcmFtc1siZm1lcnJvcmNvdW50Il0hPSIiKSAkY291bnQ9JHBhcmFtc1siZm1lcnJvcmNvdW50Il07DQogIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJEZpbGVNYW5hZ2VyLT5MYW5nKCRwYXJhbXNbImZtZXJyb3IiXSwkY291bnQpKTsNCn0NCg0KJHBhZ2VsaW1pdCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnaXRlbXNkaXNwbGF5ZWQnKT8kdGhpcy0+R2V0T3B0aW9uVmFsdWUoJ2l0ZW1zZGlzcGxheWVkJyk6MTA7DQokcGFnZWNvdW50ID0gLTE7DQokc3RhcnRlbGVtZW50ID0gMDsNCiRwYWdlbnVtYmVyID0gMTsNCg0KaWYoIGlzc2V0KCAkcGFyYW1zWydwYWdlbnVtYmVyJ10gKSAmJiAkcGFyYW1zWydwYWdlbnVtYmVyJ10gIT09ICcnICkgew0KICAkcGFnZW51bWJlciA9IChpbnQpJHBhcmFtc1sncGFnZW51bWJlciddOw0KICAkc3RhcnRlbGVtZW50ID0gKCRwYWdlbnVtYmVyLTEpICogJHBhZ2VsaW1pdDsNCn0NCiRlbmRlbGVtZW50ID0gJHN0YXJ0ZWxlbWVudCArICRwYWdlbGltaXQgLSAxOw0KDQokcXBhcm1zID0gYXJyYXkoKTsNCiRxcGFybXNbJ2J1Y2tldCddID0gJGJ1Y2tldF9pZDsNCiRxcGFybXNbJ3ByZWZpeCddID0gJHBhcmFtc1sicHJlZml4Il07DQokcXBhcm1zWydyZXR1cm5pZCddID0gJHJldHVybmlkOw0KJHNtYXJ0eS0+YXNzaWduKCdxcGFybXMnLCRxcGFybXMpOw0KDQokanNvbl9maWxlX1BhdGggPSAkdGhpcy0+Z2V0Q2FjaGVGaWxlKCRxcGFybXMpOw0KaWYoJG5taW51dGVzID09IDApIHsNCiAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCn0gZWxzZSB7DQoNCiAgaWYgKCFmaWxlX2V4aXN0cygkanNvbl9maWxlX1BhdGgpKSB7DQogICAgICAkZGF0YSA9IGJ1Y2tldF9xdWVyeTo6Y2FjaGVfcXVlcnkoJHFwYXJtcywkanNvbl9maWxlX1BhdGgpOw0KICB9IGVsc2Ugew0KDQogICAgICAkanNvbiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRqc29uX2ZpbGVfUGF0aCk7DQogICAgICAkdG1wID0gZW5jcnlwdDo6ZGVjcnlwdCgkanNvbik7DQogICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCR0bXAsIGZhbHNlKTsNCiAgDQogICAgICAkZW5kZGF0ZSAgPSBzdHJ0b3RpbWUoc3ByaW50ZigiKyVkIG1pbnV0ZXMiLCAkbm1pbnV0ZXMpLCAkZGF0YS0+ZGF0ZSk7DQogICAgICBpZiAodGltZSgpID49ICRlbmRkYXRlKSB7DQogICAgICAgICAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiAgICAgIH0NCg0KICB9DQp9DQoNCiRwcmVmaXggPSAkcGFyYW1zWydwcmVmaXgnXT8kcGFyYW1zWydwcmVmaXgnXTonJzsNCiR0bXBfcGF0aF9wYXJ0cz1leHBsb2RlKCcvJywgJHByZWZpeCk7IA0KDQokcGF0aF9wYXJ0cyA9IFtdOw0KZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRtcF9wYXRoX3BhcnRzKTsgJGkrKyApIHsNCiAgICAkb2JqID0gbmV3IFxTdGRDbGFzczsNCiAgICBpZiggISR0bXBfcGF0aF9wYXJ0c1skaV0gKSBjb250aW51ZTsNCiAgICAkb2JqLT5uYW1lID0gJHRtcF9wYXRoX3BhcnRzWyRpXTsNCiAgICBpZiggJG9iai0+bmFtZSA9PSAnOjp0b3A6OicgKSB7DQogICAgICAgICRvYmotPm5hbWUgPSAncm9vdCc7DQogICAgfQ0KICAgIGlmKCAkaSA8IGNvdW50KCR0bXBfcGF0aF9wYXJ0cykgLSAxICkgew0KICAgICAgICAvLyBub3QgdGhlIGxhc3QgZW50cnkNCiAgICAgICAgJGZ1bGxwYXRoID0gaW1wbG9kZSgnLycsYXJyYXlfc2xpY2UoJHRtcF9wYXRoX3BhcnRzLDAsJGkrMSkpOw0KICAgICAgICBpZiggc3RhcnRzd2l0aCgkZnVsbHBhdGgsJzo6dG9wOjonKSApICRmdWxscGF0aCA9IHN1YnN0cigkZnVsbHBhdGgsNyk7DQogICAgICAgICRvYmotPnVybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCAkaWQsICdkZWZhdWx0YWRtaW4nLCAnJyxbICdwcmVmaXgnID0+ICRmdWxscGF0aC4nLycsJ19fYWN0aXZldGFiJz0+JGJ1Y2tldF9pZF0gKTsNCg0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIHRoZSBsYXN0IGVudHJ5Li4uIG5vIGxpbmsNCiAgICB9DQogICAgJHBhdGhfcGFydHNbXSA9ICRvYmo7DQp9DQoNCiR1cF9ob21lID0gJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluayggJGlkLCAkcmV0dXJuaWQsJ2RlZmF1bHRhZG1pbicsJGJ1Y2tldF9pZCk7DQokc21hcnR5LT5hc3NpZ24oJ3VwX2hvbWUnLCR1cF9ob21lKTsNCg0KJHBhcnRzX2NvdW50ZXIgPSBjb3VudCgkcGF0aF9wYXJ0cyk7DQppZiggJHBhcnRzX2NvdW50ZXIgPj0gMSApIHsNCiAgJHVwZGlyID0gdXRpbHM6OmdldFVwRGlyKCRwYXRoX3BhcnRzKTsNCiAgJGljb24gPSAkRmlsZU1hbmFnZXItPkdldE1vZHVsZVVSTFBhdGgoKS4nL2ljb25zL3RoZW1lcy9kZWZhdWx0L2FjdGlvbnMvZGlyX3VwLmdpZic7DQogICRpbWdfdGFnID0gJzxpbWcgc3JjPSInLiRpY29uLiciIHdpZHRoPSIzMiIgdGl0bGU9IicuJHRoaXMtPkxhbmcoJ3RpdGxlX2NoYW5nZXVwZGlyJykuJyIvPic7DQogIGlmKCRwYXJ0c19jb3VudGVyID4gMSl7DQogICAgJHBhcm1zWydwcmVmaXgnXSA9ICR1cGRpcjsNCiAgfQ0KICB1bnNldCgkcGFyYW1zWydwYWdlbnVtYmVyJ10pOw0KICANCiAgJHVwX2RpcnVybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCAkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywkcGFybXMpOw0KICAkdXBfZGlyaWNvbmxpbmsgPSAkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2RlZmF1bHRhZG1pbicsJGltZ190YWcsJHBhcm1zLCcnLGZhbHNlLHRydWUsImNsYXNzPSdkaXJsaW5rJyIpOw0KICAkdXBfZGlybGluayA9ICI8YSBjbGFzcz1cImNhcmQtbGlua1wiIGhyZWY9XCJ7JHVwX2RpcnVybH1cIiB0aXRsZT1cInskdGhpcy0+TGFuZygndGl0bGVfY2hhbmdldXBkaXInKX1cIj4uLjwvYT4iOw0KDQogICRzbWFydHktPmFzc2lnbigndXBfZGlydXJsJywkdXBfZGlydXJsKTsNCiAgJHNtYXJ0eS0+YXNzaWduKCd1cF9kaXJpY29ubGluaycsJHVwX2Rpcmljb25saW5rKTsNCiAgJHNtYXJ0eS0+YXNzaWduKCd1cF9kaXJsaW5rJywkdXBfZGlybGluayk7DQoNCn0NCg0KJHNtYXJ0eS0+YXNzaWduKCdwYXRoJywkcGFyYW1zWyJwcmVmaXgiXSk7DQokc21hcnR5LT5hc3NpZ24oJ3BhdGhfcGFydHMnLCRwYXRoX3BhcnRzKTsNCg0KJGNvdW50ZmlsZXMgPSBpc3NldCgkZGF0YS0+dG90YWwpID8gJGRhdGEtPnRvdGFsIDogJzAnOw0KJHBhZ2Vjb3VudCA9IChpbnQpKCRjb3VudGZpbGVzIC8gJHBhZ2VsaW1pdCk7DQppZiggKCRjb3VudGZpbGVzICUgJHBhZ2VsaW1pdCkgIT0gMCApICRwYWdlY291bnQrKzsNCg0KLy8gYnVpbGQgZGlzcGxheQ0KJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCAkY291bnRmaWxlcyk7DQokc21hcnR5LT5hc3NpZ24oJ2hpZGRlbnBhdGgnLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAicHJlZml4IiwgJHBhcmFtc1sicHJlZml4Il0pKTsNCiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdmaWxlYWN0aW9uJywgJHJldHVybmlkKSk7DQovLyByb3VuZG93bg0KJHRvdGFsc2l6ZSA9IHV0aWxzOjpzdW1CeXRlcygkZGF0YS0+aXRlbXMpOw0KJGNvdW50cyA9ICR0b3RhbHNpemUgLiAiICIgLiAkRmlsZU1hbmFnZXItPkxhbmcoImluIikgLiAiICIgLiAkY291bnRmaWxlcyAuICIgIjsNCmlmICgkY291bnRmaWxlcyA9PSAxKSAkY291bnRzLj0kRmlsZU1hbmFnZXItPkxhbmcoImZpbGUiKTsgZWxzZSAkY291bnRzLj0kRmlsZU1hbmFnZXItPkxhbmcoImZpbGVzIik7DQokY291bnRzLj0iICIgLiAkRmlsZU1hbmFnZXItPkxhbmcoImFuZCIpIC4gIiAiIC4gJGNvdW50ZGlycyAuICIgIjsNCmlmICgkY291bnRkaXJzID09IDEpICRjb3VudHMuPSRGaWxlTWFuYWdlci0+TGFuZygic3ViZGlyIik7IGVsc2UgJGNvdW50cy49JEZpbGVNYW5hZ2VyLT5MYW5nKCJzdWJkaXJzIik7DQokc21hcnR5LT5hc3NpZ24oJ2NvdW50c3RleHQnLCAkY291bnRzKTsNCg0KJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQokc21hcnR5LT5hc3NpZ24oJ2J1Y2tldF9pZCcsICRidWNrZXRfaWQpOw0KJHNtYXJ0eS0+YXNzaWduKCdjYWNoZWZpbGUnLCRqc29uX2ZpbGVfUGF0aCk7DQokc21hcnR5LT5hc3NpZ24oJ2xhc3R1cGRhdGUnLCAkZGF0YS0+ZGF0ZSk7DQokc21hcnR5LT5hc3NpZ24oJ3BhZ2VudW1iZXInLCRwYWdlbnVtYmVyKTsNCiRzbWFydHktPmFzc2lnbignc3RhcnRlbGVtZW50Jywkc3RhcnRlbGVtZW50KTsNCmlmKCRlbmRlbGVtZW50ID49ICRjb3VudGZpbGVzKSRlbmRlbGVtZW50PSRjb3VudGZpbGVzLTE7DQokc21hcnR5LT5hc3NpZ24oJ2VuZGVsZW1lbnQnLCAkZW5kZWxlbWVudCk7DQokc21hcnR5LT5hc3NpZ24oJ3BhZ2Vjb3VudCcsJHBhZ2Vjb3VudCk7DQokc21hcnR5LT5hc3NpZ24oJ29mdGV4dCcsJHRoaXMtPkxhbmcoJ3Byb21wdF9vZicpKTsNCiRzbWFydHktPmFzc2lnbigncGFnZXRleHQnLCR0aGlzLT5MYW5nKCdwcm9tcHRfcGFnZScpKTsNCg0KaWYgKCRzdGFydGVsZW1lbnQgPCAwIHx8ICRzdGFydGVsZW1lbnQgPiAkZW5kZWxlbWVudCkgew0KICAvL2VjaG8gIkludmFsaWQgaW5kZXhlcyBzdGFydGVsZW1lbnQuIjsNCn0gZWxzZSB7DQogIC8vIFNsaWNlIHRoZSBhcnJheSB0byBleHRyYWN0IGVsZW1lbnRzIGJldHdlZW4gdGhlIGluZGV4ZXMNCiAgDQogICRzZWxlY3RlZEl0ZW1zID0gYXJyYXlfc2xpY2UoJGRhdGEtPml0ZW1zLCAkc3RhcnRlbGVtZW50LCAkZW5kZWxlbWVudCAtICRzdGFydGVsZW1lbnQgKyAxKTsNCg0KICBpZigkdXBfZGlydXJsKXsNCiAgICAkb25lcm93ID0gbmV3IFxzdGRDbGFzcygpOw0KICAgICRvbmVyb3ctPnVybCA9ICR1cF9kaXJ1cmw7DQogICAgJG9uZXJvdy0+dXJsX2xpbmsgPSAkdXBfZGlybGluazsNCiAgICAkb25lcm93LT5pY29uX2xpbmsgPSAkb25lcm93LT5wcmVzaWduZWRfaWNvbl9saW5rID0gJHVwX2Rpcmljb25saW5rOw0KICAgICRvbmVyb3ctPnR5cGUgPSBhcnJheSgnZGlyJyk7DQogICAgJG9uZXJvdy0+bm9DaGVja2JveCA9IDE7DQogICAgJGVudHJ5YXJyYXlbXT0gJG9uZXJvdzsNCiAgfQ0KICBmb3JlYWNoKCAkc2VsZWN0ZWRJdGVtcyBhcyAkcm93ICkgew0KICAgICAgJG9uZXJvdyA9ICRyb3c7DQogICAgICBpZigkb25lcm93LT5kaXIpew0KICAgICAgICAgICRzZW5kdG9kZXRhaWwgPSBhcnJheSgncHJlZml4Jz0+JG9uZXJvdy0+a2V5KTsNCiAgICAgICAgICBpZiggaXNzZXQoICRwYXJhbXNbJ3BhZ2VsaW1pdCddICkgKSB7DQogICAgICAgICAgICAgICRzZW5kdG9kZXRhaWwgPSBhcnJheV9tZXJnZSgkc2VuZHRvZGV0YWlsLGFycmF5KCdwYWdlbGltaXQnPT4kcGFnZWxpbWl0KSk7DQogICAgICAgICAgfQ0KICAgICAgICAgICRvbmVyb3ctPnVybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCdtMV8nLCdkZWZhdWx0YWRtaW4nLCcnLCRzZW5kdG9kZXRhaWwpOw0KICAgICAgICAgIC8vPGEgaHJlZj0ieyRmaWxlLT5wcmVzaWduZWRfdXJsfSIgdGFyZ2V0PSJfYmxhbmsiPnthZG1pbl9pY29uIGljb249J3Blcm1pc3Npb25zLmdpZicgYWx0PSd2aWV3X3BhZ2UnfGxhbmd9PC9hPg0KICAgICAgICAgICRvbmVyb3ctPnByZXNpZ25lZF9saW5rID0gIiI7DQogICAgICAgICAgJG9uZXJvdy0+dXJsX2xpbmsgPSAiPGEgaHJlZj0nIiAuICRvbmVyb3ctPnVybCAuICInIGNsYXNzPVwiZGlybGlua1wiIHRpdGxlPVwieyRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfY2hhbmdlZGlyJyl9XCI+IiAuICRvbmVyb3ctPm5hbWUgLiAiPC9hPiI7DQogICAgICAgICAgJG9uZXJvdy0+aWNvbl9saW5rID0gJG9uZXJvdy0+cHJlc2lnbmVkX2ljb25fbGluayA9ICI8YSBocmVmPSciIC4gJG9uZXJvdy0+dXJsIC4gIicgY2xhc3M9XCJkaXJsaW5rXCIgdGl0bGU9XCJ7JEZpbGVNYW5hZ2VyLT5MYW5nKCd0aXRsZV9jaGFuZ2VkaXInKX1cIj4iLiRyb3ctPmljb24uIjwvYT4iOw0KICAgICAgfQ0KICAgICAgJGVudHJ5YXJyYXlbXT0gJG9uZXJvdzsNCiAgfQ0KfQ0KDQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0ZGF0ZScsICRkYXRhLT5kYXRlKTsNCiRzbWFydHktPmFzc2lnbignZW5kZGF0ZScsICRlbmRkYXRlKTsNCiRzbWFydHktPmFzc2lnbignY2FjaGV0aW1lJywgJG5taW51dGVzKTsNCiRzbWFydHktPmFzc2lnbigncGF0aF9wYXJ0cycsJHBhdGhfcGFydHMpOw0KDQppZiggaXNzZXQoJHBhcmFtc1snbm9mb3JtJ10pICkgJHNtYXJ0eS0+YXNzaWduKCdub2Zvcm0nLDEpOw0KJHNtYXJ0eS0+YXNzaWduKCdyZWZyZXNoX3VybCcsJHRoaXMtPkNyZWF0ZV91cmwoJGlkLCdhZG1pbl9maWxldmlldycsJycsYXJyYXkoJ2FqYXgnPT4xLCdidWNrZXRfaWQnPT4kYnVja2V0X2lkLCdwcmVmaXgnPT4kcHJlZml4KSkpOw0KJHNtYXJ0eS0+YXNzaWduKCdGaWxlTWFuYWdlcicsJEZpbGVNYW5hZ2VyKTsNCiRzbWFydHktPmFzc2lnbignaXRlbXMnLCAkZW50cnlhcnJheSk7DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZmlsZW1hbmFnZXIudHBsJyk7DQoNCg0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KDQp1c2UgXEFXU1MzXGJ1Y2tldF9xdWVyeTsNCg0KICAgICRtb2RfZm0gPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGaWxlTWFuYWdlcicpOw0KDQogICAgJGJ1Y2tldF9pZCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnYnVja2V0X25hbWUnKTsNCiAgICAkbm1pbnV0ZXMgICAgID0gKGludCkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXhwaXJ5X2ludGVydmFsJywgMTgwKTsNCiAgICBpZiAoJG5taW51dGVzID09ICcnKSAkbm1pbnV0ZXMgPSAwOw0KDQogICAgaWYoIWlzc2V0KCRidWNrZXRfaWQpIHx8IGVtcHR5KCRidWNrZXRfaWQpKSB7DQogICAgICAgIC8vdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignbm8gYnVja2V0IHNlbGVjdGVkJyk7DQogICAgICAgICR0aGlzLT5fRGlzcGxheU1lc3NhZ2UoJ25vIGJ1Y2tldCBzZWxlY3RlZCcsNTAwKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICAkdGVtcGxhdGUgPSBudWxsOw0KICAgIGlmIChpc3NldCgkcGFyYW1zWydzdW1tYXJ5dGVtcGxhdGUnXSkpIHsNCiAgICAgICAgJHRlbXBsYXRlID0gdHJpbSgkcGFyYW1zWydzdW1tYXJ5dGVtcGxhdGUnXSk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAkdHBsID0gQ21zTGF5b3V0VGVtcGxhdGU6OmxvYWRfZGZsdF9ieV90eXBlKCdBV1NTMzo6c3VtbWFyeScpOw0KICAgICAgICBpZiggIWlzX29iamVjdCgkdHBsKSApIHsNCiAgICAgICAgICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ05vIGRlZmF1bHQgc3VtbWFyeSB0ZW1wbGF0ZSBmb3VuZCcpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgICR0ZW1wbGF0ZSA9ICR0cGwtPmdldF9uYW1lKCk7DQogICAgfQ0KDQogICAgaWYoaXNzZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKSkgew0KDQogICAgICAgIGlmKGlzX251bWVyaWMoJHBhcmFtc1snZGV0YWlscGFnZSddKSkgew0KICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkcGFyYW1zWydkZXRhaWxwYWdlJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7CQkJDQogICAgICAgICAgICAkaG0gPSBjbXNtcygpLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CQkJCQ0KICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkaG0tPnN1cmVHZXROb2RlQnlBbGlhcygkcGFyYW1zWydkZXRhaWxwYWdlJ10pLT5HZXRJZCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICRkZXRhaWxwYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RldGFpbHBhZ2UnLCAkcmV0dXJuaWQpOw0KICAgIH0NCiAgICBpZiggZW1wdHkoJGRldGFpbHBhZ2UpIHx8ICRkZXRhaWxwYWdlID09IC0xICkgeyAkZGV0YWlscGFnZSA9ICRyZXR1cm5pZDsgfQ0KDQogICAgJGRlYnVnID0gaXNzZXQoJHBhcmFtc1snZGVidWcnXSk7DQogICAgLy8kdGVtcGxhdGUgPSAnb3JpZ19zdW1tYXJ5X3RlbXBsYXRlLnRwbCc7DQogICAgJHRwbF9vYiA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCR0aGlzLT5HZXRUZW1wbGF0ZVJlc291cmNlKCR0ZW1wbGF0ZSksbnVsbCxudWxsLCRzbWFydHkpOw0KDQogICAgJHBhZ2VsaW1pdCA9IDEwOw0KICAgIGlmKCBpc3NldCggJHBhcmFtc1sncGFnZWxpbWl0J10gKSApIHsNCiAgICAgICAgJHBhZ2VsaW1pdCA9IChpbnQpICgkcGFyYW1zWydwYWdlbGltaXQnXSk7DQogICAgfQ0KICAgICRwYWdlbGltaXQgPSBtYXgoMSxtaW4oMTAwMCwkcGFnZWxpbWl0KSk7IC8vIG1heGltdW0gb2YgMTAwMCBlbnRyaWVzLg0KICAgICRwYWdlY291bnQgPSAtMTsNCiAgICAkc3RhcnRlbGVtZW50ID0gMDsNCiAgICAkcGFnZW51bWJlciA9IDE7DQogICAgJHByZWZpeCA9ICRwYXJhbXNbJ3ByZWZpeCddPyRwYXJhbXNbJ3ByZWZpeCddOicnOw0KDQogICAgJGV4cGxvZGVkcHJlZml4PWV4cGxvZGUoJy8nLCAkcHJlZml4KTsgDQogICAgJHBhdGhfcGFydHMgPSBbXTsNCiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkZXhwbG9kZWRwcmVmaXgpOyAkaSsrICkgew0KICAgICAgICAkb2JqID0gbmV3IFxTdGRDbGFzczsNCiAgICAgICAgaWYoICEkZXhwbG9kZWRwcmVmaXhbJGldICkgY29udGludWU7DQogICAgICAgICRvYmotPm5hbWUgPSAkZXhwbG9kZWRwcmVmaXhbJGldOw0KICAgICAgICAkb2JqLT5wcmVmaXggPSBpbXBsb2RlKCcvJyxhcnJheV9zbGljZSgkZXhwbG9kZWRwcmVmaXgsMCwkaSsxKSkuJy8nOw0KICAgICAgICBpZiggJGkgPCBjb3VudCgkZXhwbG9kZWRwcmVmaXgpIC0gMSApIHsNCiAgICAgICAgICAgICRwYXJhbXNbJ3ByZWZpeCddID0gJG9iai0+cHJlZml4Ow0KICAgICAgICAgICAgJG9iai0+dXJsID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJycsJHBhcmFtcywgJycsIHRydWUpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgLy8gdGhlIGxhc3QgZW50cnkuLi4gbm8gbGluaw0KICAgICAgICB9DQogICAgICAgICRwYXRoX3BhcnRzW10gPSAkb2JqOw0KICAgIH0NCg0KDQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydwYWdlbnVtYmVyJ10gKSAmJiAkcGFyYW1zWydwYWdlbnVtYmVyJ10gIT09ICcnICkgew0KICAgICAgICAkcGFnZW51bWJlciA9IChpbnQpJHBhcmFtc1sncGFnZW51bWJlciddOw0KICAgICAgICAkc3RhcnRlbGVtZW50ID0gKCRwYWdlbnVtYmVyLTEpICogJHBhZ2VsaW1pdDsNCiAgICB9DQogICAgJGVuZGVsZW1lbnQgPSAkc3RhcnRlbGVtZW50ICsgJHBhZ2VsaW1pdCAtIDE7DQoNCiAgICAkcGFydHNfY291bnRlciA9IGNvdW50KCRwYXRoX3BhcnRzKTsNCg0KICAgIGlmKCAkcGFydHNfY291bnRlciA+PSAxICkgew0KICAgICAgICANCiAgICAgICAgJHVwZGlyID0gJHBhdGhfcGFydHNbJHBhcnRzX2NvdW50ZXItMl0tPnByZWZpeDsNCiAgICAgICAgJGljb24gPSAkbW9kX2ZtLT5HZXRNb2R1bGVVUkxQYXRoKCkuJy9pY29ucy90aGVtZXMvZGVmYXVsdC9hY3Rpb25zL2Rpcl91cC5naWYnOw0KICAgICAgICAkaW1nX3RhZyA9ICc8aW1nIHNyYz0iJy4kaWNvbi4nIiB3aWR0aD0iMzIiIHRpdGxlPSInLiR0aGlzLT5MYW5nKCd0aXRsZV9jaGFuZ2V1cGRpcicpLiciLz4nOw0KICAgICAgICBpZigkcGFydHNfY291bnRlciA+IDEpew0KICAgICAgICAgICAgJHBhcmFtc1sncHJlZml4J10gPSAkdXBkaXI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB1bnNldCgkcGFyYW1zWydwcmVmaXgnXSk7DQogICAgICAgIH0NCiAgICAgICAgdW5zZXQoJHBhcmFtc1sncGFnZW51bWJlciddKTsNCiAgICAgICAgJHVwX2RpcnVybCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCRpbWdfdGFnLCRwYXJhbXMsJycsdHJ1ZSk7DQogICAgICAgICR1cF9kaXJpY29ubGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCRpbWdfdGFnLCRwYXJhbXMsJycsZmFsc2UsdHJ1ZSwiY2xhc3M9J2NhcmQtbGluayciKTsNCiAgICAgICAgJHVwX2RpcmxpbmsgPSAiPGEgY2xhc3M9XCJjYXJkLWxpbmtcIiBocmVmPVwieyR1cF9kaXJ1cmx9XCIgdGl0bGU9XCJ7JHRoaXMtPkxhbmcoJ3RpdGxlX2NoYW5nZXVwZGlyJyl9XCI+Li48L2E+IjsNCg0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ3VwX2RpcnVybCcsJHVwX2RpcnVybCk7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbigndXBfZGlyaWNvbmxpbmsnLCR1cF9kaXJpY29ubGluayk7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbigndXBfZGlybGluaycsJHVwX2RpcmxpbmspOw0KICAgIH0NCg0KICAgICRxcGFybXMgPSBhcnJheSgpOw0KICAgICRxcGFybXNbJ2J1Y2tldCddID0gJGJ1Y2tldF9pZDsNCiAgICAkcXBhcm1zWydwcmVmaXgnXSA9ICRwcmVmaXg7DQogICAgJHFwYXJtc1sncmV0dXJuaWQnXSA9ICRyZXR1cm5pZDsNCiAgICAkcXBhcm1zWydkZXRhaWxwYWdlJ10gPSAkZGV0YWlscGFnZTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ3FwYXJtcycsJHFwYXJtcyk7DQoNCiAgICAkanNvbl9maWxlX1BhdGggPSAkdGhpcy0+Z2V0Q2FjaGVGaWxlKCRxcGFybXMpOw0KDQogICAgaWYoJG5taW51dGVzID09IDApIHsNCiAgICAgICAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiAgICB9IGVsc2Ugew0KDQogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGpzb25fZmlsZV9QYXRoKSkgew0KICAgICAgICAgICAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgICAgJGpzb24gPSBmaWxlX2dldF9jb250ZW50cygkanNvbl9maWxlX1BhdGgpOw0KICAgICAgICAgICAgJHRtcCA9IFxBV1NTREtcZW5jcnlwdDo6ZGVjcnlwdCgkanNvbik7DQogICAgICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCR0bXAsIGZhbHNlKTsNCiAgICAgICAgDQogICAgICAgICAgICAkZW5kZGF0ZSAgPSBzdHJ0b3RpbWUoc3ByaW50ZigiKyVkIG1pbnV0ZXMiLCAkbm1pbnV0ZXMpLCAkZGF0YS0+ZGF0ZSk7DQogICAgICAgICAgICBpZiAodGltZSgpID49ICRlbmRkYXRlKSB7DQogICAgICAgICAgICAgICAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgfQ0KDQogICAgJGNvdW50ID0gaXNzZXQoJGRhdGEtPnRvdGFsKSA/ICRkYXRhLT50b3RhbCA6ICcwJzsNCiAgICAkcGFnZWNvdW50ID0gKGludCkoJGNvdW50IC8gJHBhZ2VsaW1pdCk7DQogICAgaWYoICgkY291bnQgJSAkcGFnZWxpbWl0KSAhPSAwICkgJHBhZ2Vjb3VudCsrOw0KDQogICAgJHBhcmFtc1sncHJlZml4J10gPSAkcHJlZml4Ow0KICAgIA0KICAgIC8vIEFzc2lnbiBzb21lIHBhZ2luYXRpb24gdmFyaWFibGVzIHRvIHNtYXJ0eQ0KICAgIGlmKCAkcGFnZW51bWJlciA9PSAxICkgew0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ3ByZXZwYWdlJywkdGhpcy0+TGFuZygncHJldnBhZ2UnKSk7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignZmlyc3RwYWdlJywkdGhpcy0+TGFuZygnZmlyc3RwYWdlJykpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgJHBhcmFtc1sncGFnZW51bWJlciddPSRwYWdlbnVtYmVyLTE7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbigncHJldnBhZ2UnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCR0aGlzLT5MYW5nKCdwcmV2cGFnZScpLCRwYXJhbXMpKTsNCiAgICAgICAgJHRwbF9vYi0+YXNzaWduKCdwcmV2dXJsJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwnJywkcGFyYW1zLCAnJywgdHJ1ZSkpOw0KICAgICAgICAkcGFyYW1zWydwYWdlbnVtYmVyJ109MTsNCiAgICAgICAgJHRwbF9vYi0+YXNzaWduKCdmaXJzdHBhZ2UnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCR0aGlzLT5MYW5nKCdmaXJzdHBhZ2UnKSwkcGFyYW1zKSk7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignZmlyc3R1cmwnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCcnLCRwYXJhbXMsICcnLCB0cnVlKSk7DQogICAgfQ0KDQogICAgaWYoICRwYWdlbnVtYmVyID49ICRwYWdlY291bnQgKSB7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignbmV4dHBhZ2UnLCR0aGlzLT5MYW5nKCduZXh0cGFnZScpKTsNCiAgICAgICAgJHRwbF9vYi0+YXNzaWduKCdsYXN0cGFnZScsJHRoaXMtPkxhbmcoJ2xhc3RwYWdlJykpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgJHBhcmFtc1sncGFnZW51bWJlciddPSRwYWdlbnVtYmVyKzE7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignbmV4dHBhZ2UnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCR0aGlzLT5MYW5nKCduZXh0cGFnZScpLCRwYXJhbXMpKTsNCiAgICAgICAgJHRwbF9vYi0+YXNzaWduKCduZXh0dXJsJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwnJywkcGFyYW1zLCAnJywgdHJ1ZSkpOw0KDQogICAgICAgICRwYXJhbXNbJ3BhZ2VudW1iZXInXT0kcGFnZWNvdW50Ow0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ2xhc3RwYWdlJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwkdGhpcy0+TGFuZygnbGFzdHBhZ2UnKSwkcGFyYW1zKSk7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignbGFzdHVybCcsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJycsJHBhcmFtcywgJycsIHRydWUpKTsNCiAgICB9DQoNCiAgICAkdHBsX29iLT5hc3NpZ24oJ2J1Y2tldCcsJGJ1Y2tldF9pZCk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdjYWNoZWZpbGUnLCRqc29uX2ZpbGVfUGF0aCk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdsYXN0dXBkYXRlJywgJGRhdGEtPmRhdGUpOw0KICAgICR0cGxfb2ItPmFzc2lnbignY291bnQnLCAkY291bnQpOw0KICAgICR0cGxfb2ItPmFzc2lnbigncGFnZW51bWJlcicsJHBhZ2VudW1iZXIpOw0KICAgICR0cGxfb2ItPmFzc2lnbignc3RhcnRlbGVtZW50Jywkc3RhcnRlbGVtZW50KTsNCg0KICAgIGlmKCRlbmRlbGVtZW50ID49ICRjb3VudCkkZW5kZWxlbWVudD0kY291bnQtMTsNCg0KICAgICR0cGxfb2ItPmFzc2lnbignZW5kZWxlbWVudCcsICRlbmRlbGVtZW50KTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ3BhZ2Vjb3VudCcsJHBhZ2Vjb3VudCk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdvZnRleHQnLCR0aGlzLT5MYW5nKCdwcm9tcHRfb2YnKSk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdwYWdldGV4dCcsJHRoaXMtPkxhbmcoJ3Byb21wdF9wYWdlJykpOw0KDQogICAgaWYgKCRzdGFydGVsZW1lbnQgPCAwIHx8ICRzdGFydGVsZW1lbnQgPiAkZW5kZWxlbWVudCkgew0KICAgICAgICAvL2VjaG8gIkludmFsaWQgaW5kZXhlcy4iOw0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIFNsaWNlIHRoZSBhcnJheSB0byBleHRyYWN0IGVsZW1lbnRzIGJldHdlZW4gdGhlIGluZGV4ZXMNCiAgICAgICAgJHNlbGVjdGVkSXRlbXMgPSBhcnJheV9zbGljZSgkZGF0YS0+aXRlbXMsICRzdGFydGVsZW1lbnQsICRlbmRlbGVtZW50IC0gJHN0YXJ0ZWxlbWVudCArIDEpOw0KICAgICAgICBmb3JlYWNoKCAkc2VsZWN0ZWRJdGVtcyBhcyAkcm93ICkgew0KICAgICAgICAgICAgJG9uZXJvdyA9ICRyb3c7DQogICAgICAgICAgICBpZigkb25lcm93LT5kaXIpew0KICAgICAgICAgICAgICAgICRzZW5kdG9kZXRhaWwgPSBhcnJheSgncHJlZml4Jz0+JG9uZXJvdy0+a2V5KTsNCiAgICAgICAgICAgICAgICBpZiggaXNzZXQoICRwYXJhbXNbJ3BhZ2VsaW1pdCddICkgKSB7DQogICAgICAgICAgICAgICAgICAgICRzZW5kdG9kZXRhaWwgPSBhcnJheV9tZXJnZSgkc2VuZHRvZGV0YWlsLGFycmF5KCdwYWdlbGltaXQnPT4kcGFnZWxpbWl0KSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRvbmVyb3ctPmxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAnJywgJHNlbmR0b2RldGFpbCwnJywgdHJ1ZSwgZmFsc2UsICcnLCB0cnVlKTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5pY29uX2xpbmsgPSAiPGEgaHJlZj0nIiAuICRvbmVyb3ctPmxpbmsgLiAiJyBjbGFzcz1cImNhcmQtbGlua1wiPiIuJG9uZXJvdy0+aWNvbi4iPC9hPiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkZW50cnlhcnJheVtdPSAkb25lcm93Ow0KICAgICAgICB9DQogICAgfQ0KDQogICAgJHRwbF9vYi0+YXNzaWduKCdpdGVtcycsICRlbnRyeWFycmF5KTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ3N0YXJ0ZGF0ZScsICRkYXRhLT5kYXRlKTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ2VuZGRhdGUnLCAkZW5kZGF0ZSk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdjYWNoZXRpbWUnLCAkbm1pbnV0ZXMpOw0KICAgICR0cGxfb2ItPmFzc2lnbigncGF0aF9wYXJ0cycsJHBhdGhfcGFydHMpOw0KDQogICAgJHRwbF9vYi0+ZGlzcGxheSgpOw0KDQogICAgaWYoJGRlYnVnKSANCgkkdHBsX29iLT5kaXNwbGF5KCdzdHJpbmc6PHByZT57Z2V0X3RlbXBsYXRlX3ZhcnN9PC9wcmU+Jyk7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKEFXU1MzOjpNQU5BR0VfUEVSTSkgKSByZXR1cm47DQoNCnVzZSBcQVdTUzNcaGVscGVyczsNCnVzZSBcQVdTUzNcdXRpbHM7DQoNCiRtb2RfZm0gPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGaWxlTWFuYWdlcicpOw0KJHNka19tb2QgPSB1dGlsczo6Z2V0X3NkaygpOw0KJHNka191dGlscyA9ICRzZGtfbW9kLT5nZXRVdGlscygpOw0KJHMzX3V0aWxzID0gbmV3IHV0aWxzKCk7DQoNCiRyZWFkeSA9IDA7DQoNCmlmKCRzM191dGlscy0+dmFsaWRhdGUoKSl7DQoJJHJlYWR5ID0gMTsNCgkkYnVja2V0X2lkID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCdidWNrZXRfbmFtZScpOw0KfQ0KDQplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsNCglpZigkcmVhZHkgPT0gMSl7DQoJCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigkYnVja2V0X2lkLCRidWNrZXRfaWQpOw0KCQllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3Blcm1pc3Npb25zJywiUGVybWlzc2lvbnMiKTsNCgl9DQoNCgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NldHRpbmdzJywiU2V0dGluZ3MiKTsNCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsNCg0KZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7DQoNCglpZigkcmVhZHkgPT0gMSl7DQoNCgkJZWNobyAkdGhpcy0+U3RhcnRUYWIoJGJ1Y2tldF9pZCk7DQoJCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuIi9hY3Rpb24udXBsb2Fkdmlldy5waHAiKTsNCgkJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4iL2FjdGlvbi5hZG1pbl9maWxldmlldy5waHAiKTsNCgkJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoNCgkJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3Blcm1pc3Npb25zJyk7DQoJCWluY2x1ZGUoX19ESVJfXy4nL2Z1bmN0aW9uLmFkbWluX3Blcm1pc3Npb25zX3RhYi5waHAnKTsNCgkJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoJfQ0KDQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NldHRpbmdzJyk7DQoJCWluY2x1ZGUoX19ESVJfXy4nL2Z1bmN0aW9uLmFkbWluX3NldHRpbmdzX3RhYi5waHAnKTsNCgllY2hvICR0aGlzLT5FbmRUYWIoKTsNCgkNCg0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOw0KDQokdGhpcy0+U2V0Q3VycmVudFRhYigicGl4ZWxzb2x1dGlvbiIpOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0Ow0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzOjpNQU5BR0VfUEVSTSkgKSByZXR1cm47DQoNCiRidWNrZXRfaWQgPSAkdGhpcy0+R2V0T3B0aW9uVmFsdWUoJ2J1Y2tldF9uYW1lJyk7DQoNCiRyZXR1cm5fcGFyYW1zID0gWyAncHJlZml4Jz0+JHBhcmFtc1sncHJlZml4J10sJ19fYWN0aXZldGFiJz0+JGJ1Y2tldF9pZF07DQppZiAoaXNzZXQoJHBhcmFtc1siY2FuY2VsIl0pKSAkdGhpcy0+UmVkaXJlY3QoJGlkLCJkZWZhdWx0YWRtaW4iLCRyZXR1cm5pZCwkcmV0dXJuX3BhcmFtcyk7DQokbW9kX2ZtID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRmlsZU1hbmFnZXInKTsNCg0KJHNlbGFsbCA9ICRwYXJhbXNbJ3NlbGFsbCddOw0KaWYoICFpc19hcnJheSgkc2VsYWxsKSApICRzZWxhbGwgPSB1bnNlcmlhbGl6ZSgkc2VsYWxsKTsNCmlmKCAhaXNfYXJyYXkoJHNlbGFsbCkgKSAkc2VsYWxsID0gdW5zZXJpYWxpemUoJHNlbGFsbCk7DQoNCmlmIChjb3VudCgkc2VsYWxsKT09MCkgew0KICAkcmV0dXJuX3BhcmFtc1siZm1lcnJvciJdPSJub2ZpbGVzc2VsZWN0ZWQiOw0KICAkdGhpcy0+UmVkaXJlY3QoJGlkLCJkZWZhdWx0YWRtaW4iLCRyZXR1cm5pZCwkcmV0dXJuX3BhcmFtcyk7DQp9DQoNCi8vIHByb2Nlc3MgZm9ybQ0KJGVycm9ycyA9IGFycmF5KCk7DQppZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgew0KICANCiAgZm9yZWFjaCggJHNlbGFsbCBhcyAkZmlsZSApIHsNCiAgICAvLyBidWlsZCBjb21wbGV0ZSBwYXRoDQogICAgJGxhc3RjaGFyID0gJGZpbGVbLTFdOw0KDQogICAgaWYgKCBzdHJjbXAoJGxhc3RjaGFyLCAiLyIpID09PSAwICkgew0KICAgICAgdXRpbHM6OmRlbGV0ZU9iamVjdERpcigkZmlsZSk7DQogICAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCAiUmVtb3ZlZCBkaXJlY3Rvcnk6ICIuJGZpbGUpOw0KICAgICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdBV1NTMzo6T25EaXJlY3RvcnlEZWxldGVkJywgJHBhcm1zICk7DQogICAgICBjb250aW51ZTsNCiAgICB9DQogICAgDQogICAgdXRpbHM6OmRlbGV0ZU9iamVjdCgkZmlsZSk7DQogICAgJHBhcm1zID0gYXJyYXkoJ2ZpbGUnPT4kZmlsZSk7DQogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwgIlJlbW92ZWQgZmlsZTogIi4kZmlsZSk7DQogICAgXENNU01TXEhvb2tNYW5hZ2VyOjpkb19ob29rKCdBV1NTMzo6T25GaWxlRGVsZXRlZCcsICRwYXJtcyApOw0KDQogIH0gLy8gZm9yZWFjaA0KDQogIGlmKCBjb3VudCgkZXJyb3JzKSA9PSAwICkgew0KICAgICRyZXR1cm5fcGFyYW1zWyJmbW1lc3NhZ2UiXT0gJG1vZC0+TGFuZygiZGVsZXRlc3VjY2VzcyIpOyAvL3N0cmlwcyB0aGUgZmlsZSBkYXRhDQogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwiZGVmYXVsdGFkbWluIiwkcmV0dXJuaWQsJHJldHVybl9wYXJhbXMpOw0KICB9DQoNCn0gLy8gaWYgc3VibWl0IA0KDQovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Lg0KaWYoIGNvdW50KCRlcnJvcnMpICkgew0KICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcnMpOw0KICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9ycycsJGVycm9ycyk7DQp9DQppZiggaXNfYXJyYXkoJHBhcmFtc1snc2VsYWxsJ10pICkgJHBhcmFtc1snc2VsYWxsJ10gPSBzZXJpYWxpemUoJHBhcmFtc1snc2VsYWxsJ10pOw0KJHNtYXJ0eS0+YXNzaWduKCdzZWxhbGwnLCRzZWxhbGwpOw0KJHNtYXJ0eS0+YXNzaWduKCdtb2RfZm0nLCRtb2RfZm0pOw0KJHNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2ZpbGVhY3Rpb24nLCAkcmV0dXJuaWQsInBvc3QiLCIiLGZhbHNlLCIiLCRwYXJhbXMpKTsNCiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOw0KDQpmb3JlYWNoKCAkc2VsYWxsIGFzICRmaWxlICkgew0KICAkbGFzdGNoYXIgPSAkZmlsZVstMV07DQogIGlmICggc3RyY21wKCRsYXN0Y2hhciwgIi8iKSA9PT0gMCApIHsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ2hhc2RpcicsdHJ1ZSk7DQogIH0NCn0NCg0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdkZWxldGUudHBsJyk7DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/action.detail.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQoNCnVzZSBcQVdTU0RLXEV4Y2VwdGlvbjsNCg0KCS8vIHBhc3MgZGF0YSB0byBoZWFkIHNlY3Rpb24uDQoJJHRlbXBsYXRlX2hlYWQgPSAkdGhpcy0+X291dHB1dF9mcm9udGVuZF9jc3MoKTsNCgkkdGVtcGxhdGV0aXRsZSA9ICc8IS0tIEFXU1MzIC0tPg0KCSc7DQoJaWYgKCFlbXB0eSgkdGVtcGxhdGVfaGVhZCkpDQoJCQkkdGhpcy0+RnJvbnRFbmRDU1MgLj0gJHRlbXBsYXRldGl0bGUgLiAkdGVtcGxhdGVfaGVhZCAuICcNCgknOw0KDQoJJGRlYnVnID0gaXNzZXQoJHBhcmFtc1snZGVidWcnXSk7DQoJJHRlbXBsYXRlID0gbnVsbDsNCglpZiAoaXNzZXQoJHBhcmFtc1snZGV0YWlsdGVtcGxhdGUnXSkpIHsNCgkJJHRlbXBsYXRlID0gdHJpbSgkcGFyYW1zWydkZXRhaWx0ZW1wbGF0ZSddKTsNCgl9DQoJZWxzZSB7DQoJCSR0cGwgPSBcQ21zTGF5b3V0VGVtcGxhdGU6OmxvYWRfZGZsdF9ieV90eXBlKCdBV1NTMzo6ZGV0YWlsJyk7DQoJCWlmKCAhaXNfb2JqZWN0KCR0cGwpICkgew0KCQkJYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnTm8gZGVmYXVsdCBkZXRhaWwgdGVtcGxhdGUgZm91bmQnKTsNCgkJCXJldHVybjsNCgkJfQ0KCQkkdGVtcGxhdGUgPSAkdHBsLT5nZXRfbmFtZSgpOw0KCX0NCg0KCXRyeSB7DQoJCWlmKCAhaXNzZXQoJHBhcmFtc1sncHJlZml4J10pICkgew0KCQkJdGhyb3cgbmV3IFxBV1NTREtcRXhjZXB0aW9uKCdLZXkgaXMgbm90IHNwZWNpZmllZCcsNTAwKTsNCgkJfQ0KDQoJCSRrZXkgPSB1cmxkZWNvZGUoJHBhcmFtc1sncHJlZml4J10pOw0KCQkkZW50cnkgPSB1dGlsczo6Z2V0X2ZpbGVfaW5mbygka2V5KTsNCg0KCX0gY2F0Y2ggKFxBV1NTREtcRXhjZXB0aW9uICRlKSB7DQoJCXV0aWxzOjpnZXRfc2RrKCktPl9EaXNwbGF5TWVzc2FnZSgkZS0+Z2V0VGV4dCgpLCRlLT5nZXRUeXBlKCkpOw0KCX0NCg0KDQogICAgJHRwbF9vYiA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCR0aGlzLT5HZXRUZW1wbGF0ZVJlc291cmNlKCR0ZW1wbGF0ZSksbnVsbCxudWxsLCRzbWFydHkpOw0KICAgICR0cGxfb2ItPmFzc2lnbignZW50cnknLCRlbnRyeSk7DQoJLy8kdHBsX29iLT5hc3NpZ24oJ3NldHRpbmdzJywkdGhpcy0+R2V0U2V0dGluZ3NWYWx1ZXMoKSk7DQogICAgJHRwbF9vYi0+ZGlzcGxheSgpOw0KDQoJaWYoJGRlYnVnKSANCgkkdHBsX29iLT5kaXNwbGF5KCdzdHJpbmc6PHByZT57Z2V0X3RlbXBsYXRlX3ZhcnN9PC9wcmU+Jyk7DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/action.fileaction.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpczo6TUFOQUdFX1BFUk0pICkgcmV0dXJuOw0KLy9pZiAoIWlzc2V0KCRwYXJhbXNbInBhdGgiXSkpICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nKTsNCg0KJGZpbGVhY3Rpb249IiI7DQppZiAoaXNzZXQoJHBhcmFtc1siZmlsZWFjdGlvbiJdKSkgJGZpbGVhY3Rpb249JHBhcmFtc1siZmlsZWFjdGlvbiJdOw0KDQppZiAoaXNzZXQoJHBhcmFtc1siZmlsZWFjdGlvbm5ld2RpciJdKSB8fCAkZmlsZWFjdGlvbj09Im5ld2RpciIpIHsNCiAgaW5jbHVkZV9vbmNlKF9fRElSX18uIi9hY3Rpb24ubmV3ZGlyLnBocCIpOw0KICByZXR1cm47DQp9DQoNCmlmIChpc3NldCgkcGFyYW1zWyJmaWxlYWN0aW9ucmVuYW1lIl0pIHx8ICRmaWxlYWN0aW9uPT0icmVuYW1lIikgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4iL2FjdGlvbi5yZW5hbWUucGhwIik7DQogIHJldHVybjsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbImZpbGVhY3Rpb25kZWxldGUiXSkgfHwgJGZpbGVhY3Rpb249PSJkZWxldGUiKSB7DQogIGluY2x1ZGVfb25jZShfX0RJUl9fLiIvYWN0aW9uLmRlbGV0ZS5waHAiKTsNCiAgcmV0dXJuOw0KfQ0KDQppZiAoaXNzZXQoJHBhcmFtc1siZmlsZWFjdGlvbmNvcHkiXSkgfHwgJGZpbGVhY3Rpb249PSJjb3B5Iikgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4iL2FjdGlvbi5jb3B5LnBocCIpOw0KICByZXR1cm47DQp9DQoNCmlmIChpc3NldCgkcGFyYW1zWyJmaWxlYWN0aW9ubW92ZSJdKSB8fCAkZmlsZWFjdGlvbj09Im1vdmUiKSB7DQogIGluY2x1ZGVfb25jZShfX0RJUl9fLiIvYWN0aW9uLm1vdmUucGhwIik7DQogIHJldHVybjsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbImZpbGVhY3Rpb251bnBhY2siXSkgfHwgJGZpbGVhY3Rpb249PSJ1bnBhY2siKSB7DQogIGluY2x1ZGVfb25jZShfX0RJUl9fLiIvYWN0aW9uLnVucGFjay5waHAiKTsNCiAgcmV0dXJuOw0KfQ0KDQppZiAoaXNzZXQoJHBhcmFtc1siZmlsZWFjdGlvbnRodW1iIl0pIHx8ICRmaWxlYWN0aW9uPT0idGh1bWIiKSB7DQogIGluY2x1ZGVfb25jZShfX0RJUl9fLiIvYWN0aW9uLnRodW1iLnBocCIpOw0KICByZXR1cm47DQp9DQoNCmlmIChpc3NldCgkcGFyYW1zWydmaWxlYWN0aW9ucmVzaXplY3JvcCddKSB8fCAkZmlsZWFjdGlvbiA9PSAncmVzaXplY3JvcCcpIHsNCiAgaW5jbHVkZV9vbmNlKF9fRElSX18uJy9hY3Rpb24ucmVzaXplY3JvcC5waHAnKTsNCiAgcmV0dXJuOw0KfQ0KDQppZiAoaXNzZXQoJHBhcmFtc1snZmlsZWFjdGlvbnJvdGF0ZSddKSB8fCAkZmlsZWFjdGlvbiA9PSAncm90YXRlJykgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4nL2FjdGlvbi5yb3RhdGUucGhwJyk7DQogIHJldHVybjsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbJ2ZpbGVhY3Rpb25yZWZyZXNoJ10pIHx8ICRmaWxlYWN0aW9uID09ICdyZWZyZXNoJykgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4nL2FjdGlvbi5yZWZyZXNoLnBocCcpOw0KICByZXR1cm47DQp9DQoNCiR0aGlzLT5SZWRpcmVjdCgkaWQsImRlZmF1bHRhZG1pbiIsJHJldHVybmlkLGFycmF5KCJwcmVmaXgiPT4kcGFyYW1zWyJwcmVmaXgiXSwiZm1lcnJvciI9PiJ1bmtub3duZmlsZWFjdGlvbiIpKTsNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.refresh.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpczo6TUFOQUdFX1BFUk0pICkgcmV0dXJuOw0KDQokcHJlZml4ID0gJHBhcmFtc1sncHJlZml4J10/JHBhcmFtc1sncHJlZml4J106Jyc7DQokYnVja2V0X2lkID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCdidWNrZXRfbmFtZScpOw0KDQokcXBhcm1zID0gYXJyYXkoKTsNCiRxcGFybXNbJ2J1Y2tldCddID0gJGJ1Y2tldF9pZDsNCiRxcGFybXNbJ3ByZWZpeCddID0gJHByZWZpeDsNCiRxcGFybXNbJ3JldHVybmlkJ10gPSAkcmV0dXJuaWQ7DQokc21hcnR5LT5hc3NpZ24oJ3FwYXJtcycsJHFwYXJtcyk7DQoNCiRqc29uX2ZpbGVfUGF0aCA9ICR0aGlzLT5nZXRDYWNoZUZpbGUoJHFwYXJtcyk7DQokZGF0YSA9IGJ1Y2tldF9xdWVyeTo6Y2FjaGVfcXVlcnkoJHFwYXJtcywkanNvbl9maWxlX1BhdGgpOw0KJHJldHVybl9wYXJhbXMgPSBbJ3ByZWZpeCc9PiRwcmVmaXgsJ19fYWN0aXZldGFiJz0+JGJ1Y2tldF9pZCwiZm1tZXNzYWdlIj0+InJlZnJlc2hzdWNjZXNzIl07DQokdGhpcy0+UmVkaXJlY3QoJGlkLCJkZWZhdWx0YWRtaW4iLCRyZXR1cm5pZCwkcmV0dXJuX3BhcmFtcyk7DQoNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.signed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KdXNlIEFXU1MzXHV0aWxzOw0KDQokbW9kX3NkayA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FXU1NESycpOw0KaWYoIWlzX29iamVjdCgkbW9kX3Nkaykpew0KCXRocm93IG5ldyBcRXhjZXB0aW9uKCdBV1NTREsgbW9kdWxlIGlzIHJlcXVpcmVkJyk7DQp9DQoNCnRyeSB7DQoJaWYoICFpc3NldCgkcGFyYW1zWydrZXknXSkgKSB7DQoJCXRocm93IG5ldyBcQVdTU0RLXEV4Y2VwdGlvbignS2V5IGlzIHJlcXVpcmVkJyk7DQoJfQ0KDQoJJGJ1Y2tldCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgiYnVja2V0X25hbWUiKTsNCgkka2V5ID0gXEFXU1NES1xlbmNyeXB0OjpkZWNvZGVmaWxlbmFtZSgkcGFyYW1zWydrZXknXSk7DQoJJGZpbGUgPSB1dGlsczo6cHJlc2lnbmVkVXJsKCRrZXkpOw0KCWhlYWRlcigiTG9jYXRpb246ICIuJGZpbGUpOw0KCWRpZSgpOw0KCQ0KfSBjYXRjaCAoXEFXU1NES1xFeGNlcHRpb24gJGUpIHsNCgkvLyR0aGlzLT5fRGlzcGxheUFkbWluTWVzc2FnZSgkZS0+R2V0T3B0aW9ucygpLCRlLT5HZXRUeXBlKCkpOw0KCSRtb2Rfc2RrLT5fRGlzcGxheU1lc3NhZ2UoJGUtPmdldFRleHQoKSk7DQp9DQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/action.upload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXM6Ok1BTkFHRV9QRVJNKSApIHJldHVybjsNCg0KdXNlIFxBV1NTM1x1dGlsczsNCg0KJHRwbCA9IFxDbXNMYXlvdXRUZW1wbGF0ZTo6bG9hZF9kZmx0X2J5X3R5cGUoJ0FXU1MzOjp1cGxvYWQnKTsNCmlmKCAhaXNfb2JqZWN0KCR0cGwpICkgew0KICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ05vIGRlZmF1bHQgdXBsb2FkIHRlbXBsYXRlIGZvdW5kJyk7DQogICAgcmV0dXJuOw0KfQ0KJHRlbXBsYXRlID0gJHRwbC0+Z2V0X25hbWUoKTsNCg0KJHRlbXBsYXRlID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3RlbXBsYXRlJywkdGVtcGxhdGUpOw0KJG5vY2FwdGNoYSA9IFx4dF9wYXJhbTo6Z2V0X2Jvb2woJHBhcmFtcywnbm9jYXB0Y2hhJyk7DQokZGVidWcgPSBpc3NldCgkcGFyYW1zWydkZWJ1ZyddKTsNCiRtZXNzYWdlID0gbnVsbDsNCiR1dGlscyA9IG5ldyB1dGlscygpOw0KJHNkayA9IHV0aWxzOjpnZXRfc2RrKCk7DQoNCi8vJHRlbXBsYXRlID0gJ29yaWdfdXBsb2FkZm9ybV90ZW1wbGF0ZS50cGwnOw0KJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCR0aGlzLT5HZXRUZW1wbGF0ZVJlc291cmNlKCR0ZW1wbGF0ZSksbnVsbCxudWxsLCRzbWFydHkpOw0KDQppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfc3VibWl0J10pICkgew0KICAgIHRyeSB7DQoNCiAgICAgICAgJHByZWZpeD0gJHBhcmFtc1sncHJlZml4J10/JHBhcmFtc1sncHJlZml4J106Jyc7DQoNCiAgICAgICAgJHVwbG9hZGZpbGUgPSAkX0ZJTEVTWyRpZC4naW5wdXRfYnJvd3NlJ107DQogICAgICAgICRmaWxlX25hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWyRpZC4naW5wdXRfYnJvd3NlJ11bJ25hbWUnXSk7IA0KICAgICAgICAkZmlsZV90eXBlID0gcGF0aGluZm8oJGZpbGVfbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKTsgDQoNCiAgICAgICAgaWYoZW1wdHkoJGZpbGVfbmFtZSkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX21pc3NpbmcnKSApOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQWxsb3cgY2VydGFpbiBmaWxlIGZvcm1hdHMgDQogICAgICAgIGlmKCAhJHV0aWxzOjppc19maWxlX2FjY2VwdGFibGUoICRmaWxlX3R5cGUgKSApIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX25vdF9hbGxvd2VkJykgKTsNCiAgICAgICAgfSANCg0KICAgICAgICAvL2NoZWNrIGNhcHRjaGENCiAgICAgICAgJGNhcHRjaGEgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NhcHRjaGEnKTsNCiAgICAgICAgaWYoIGlzX29iamVjdCgkY2FwdGNoYSkgJiYgISRub2NhcHRjaGEgJiYgaXNzZXQoJHBhcmFtc1snaW5wdXRfY2FwdGNoYSddKSApIHsNCiAgICAgICAgICAgIGlmKCAhJGNhcHRjaGEtPmNoZWNrQ2FwdGNoYShceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnaW5wdXRfY2FwdGNoYScpKSApIHRocm93IG5ldyBcRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnKSk7DQogICAgICAgIH0NCg0KICAgICAgICAkZmlsZV90ZW1wX3NyYyA9ICRfRklMRVNbJGlkLidpbnB1dF9icm93c2UnXVsidG1wX25hbWUiXTsNCiAgICAgICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkZmlsZV90ZW1wX3NyYykpew0KICAgICAgICAgICAgJHJldCA9ICR1dGlscy0+dXBsb2FkX2ZpbGUoJHByZWZpeC4kZmlsZV9uYW1lLCRmaWxlX3RlbXBfc3JjKTsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICBpZiggJHJldFswXSA9PSBmYWxzZSApIHRocm93IG5ldyBcRXhjZXB0aW9uKCRyZXRbMV0pOw0KICAgICAgICAkZ29vZF91cGxvYWQgPSAkcmV0WzJdOw0KICAgICAgICAvLyByZWRpcmVjdCBvdXRhIGhlcmUsIG9yIGRpc3BsYXkgYSBtZXNzYWdlDQogICAgICAgIGlmKCAoJHRtcCA9ICRwYXJhbXNbJ3JlZGlyZWN0J10pICkgew0KICAgICAgICAgICAgJGRlc3RwYWdlID0gJHNkay0+cmVzb2x2ZV9hbGlhc19vcl9pZCgkdG1wLCRyZXR1cm5pZCk7DQogICAgICAgICAgICAkdGhpcy0+cmVkaXJlY3Rjb250ZW50KCAkZGVzdHBhZ2UgKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsNCiAgICAgICAgJGVycm9ybWVzc2FnZSA9ICRlLT5nZXRtZXNzYWdlKCk7DQogICAgfQ0KDQogICAgaWYoaXNzZXQoJGVycm9ybWVzc2FnZSkpew0KICAgICAgICAkdHlwZSA9ICJhbGVydC1kYW5nZXIiOw0KICAgICAgICAkbWVzc2FnZSA9ICRlcnJvcm1lc3NhZ2U7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJHR5cGUgPSAiYWxlcnQtc3VjY2VzcyI7DQogICAgICAgICRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ3N1Y2Nlc3NmdWxfdXBsb2FkJywkZ29vZF91cGxvYWQpOw0KICAgIH0NCg0KICAgICRtZXNzYWdlID0gJHNkay0+X0Rpc3BsYXlNZXNzYWdlKCRtZXNzYWdlLCR0eXBlLDEpOw0KDQogICAgJHRwbC0+YXNzaWduKCdtZXNzYWdlJywkbWVzc2FnZSk7DQoNCn0NCg0KJHBhcm1zID0gYXJyYXkoJ3ByZWZpeCc9PiRwYXJhbXNbJ3ByZWZpeCddLCdub2NhcHRjaGEnPT4kbm9jYXB0Y2hhLCdyZWRpcmVjdCc9PiRwYXJhbXNbJ3JlZGlyZWN0J10pOw0KLy8gZW5jcnlwdCB0aGVzZSBwYXJhbXMuDQokdHBsLT5hc3NpZ24oJ3N0YXJ0Zm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICd1cGxvYWQnLCAkcmV0dXJuaWQsInBvc3QiLCJtdWx0aXBhcnQvZm9ybS1kYXRhIixmYWxzZSwnJywkcGFyYW1zKSk7DQokdHBsLT5hc3NpZ24oJ2VuZGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOw0KaWYoICEkbm9jYXB0Y2hhICkgew0KICAgICRjYXB0Y2hhID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDYXB0Y2hhJyk7DQogICAgaWYoIGlzX29iamVjdCgkY2FwdGNoYSkgKSB7DQogICAgICAgICR0cGwtPmFzc2lnbignY2FwdGNoYV90aXRsZScsICR0aGlzLT5MYW5nKCdjYXB0Y2hhX3RpdGxlJykpOw0KICAgICAgICAkdHBsLT5hc3NpZ24oJ2NhcHRjaGEnLCAkY2FwdGNoYS0+Z2V0Q2FwdGNoYSgpKTsNCiAgICB9DQp9DQoNCiR0cGwtPmRpc3BsYXkoKTsNCg0KaWYoJGRlYnVnKSANCiR0cGxfb2ItPmRpc3BsYXkoJ3N0cmluZzo8cHJlPntnZXRfdGVtcGxhdGVfdmFyc308L3ByZT4nKQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/action.uploadview.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzOjpNQU5BR0VfUEVSTSkgKSByZXR1cm47DQoNCiRwYXRoPScnOw0KaWYoIGlzc2V0KCRwYXJhbXNbInByZWZpeCJdKSkgew0KICAkcGF0aCA9ICRwYXJhbXNbInByZWZpeCJdOw0KICAkc21hcnR5LT5hc3NpZ24oJ2hpZGRlbnBhdGgnLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAicHJlZml4IiwgJHBhdGgpKTsNCn0NCg0KJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAndXBsb2FkX2FkbWluJywgJHJldHVybmlkLCJwb3N0IiwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpKTsNCiRzbWFydHktPmFzc2lnbignYWN0aW9uaWQnLCRpZCk7DQokc21hcnR5LT5hc3NpZ24oJ21heGZpbGVzaXplJywkY29uZmlnWyJtYXhfdXBsb2FkX3NpemUiXSk7DQokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwic3VibWl0IiwkdGhpcy0+TGFuZygic3VibWl0IiksIiIsIiIpKTsNCiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQoNCiRwb3N0X21heF9zaXplID0gZmlsZW1hbmFnZXJfdXRpbHM6OnN0cl90b19ieXRlcyhpbmlfZ2V0KCdwb3N0X21heF9zaXplJykpOw0KJHVwbG9hZF9tYXhfZmlsZXNpemUgPSBmaWxlbWFuYWdlcl91dGlsczo6c3RyX3RvX2J5dGVzKGluaV9nZXQoJ3VwbG9hZF9tYXhfZmlsZXNpemUnKSk7DQokc21hcnR5LT5hc3NpZ24oJ21heF9jaHVua3NpemUnLG1pbigkdXBsb2FkX21heF9maWxlc2l6ZSwkcG9zdF9tYXhfc2l6ZS0xMDI0KSk7DQppZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSAmJiAoc3RycG9zKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwgJ01TSUUnKSAhPT0gZmFsc2UpKSB7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdpc19pZScsMSk7DQp9DQokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbl91cmxfdXBsb2FkJywkdGhpcy0+Y3JlYXRlX3VybCgnbTFfJywndXBsb2FkJywkcmV0dXJuaWQpKTsNCiRzbWFydHktPmFzc2lnbignRmlsZU1hbmFnZXInLFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0ZpbGVNYW5hZ2VyJykpOw0KDQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3VwbG9hZHZpZXcudHBsJyk7DQo=]]></data>
	</file>
	<file>
	  <filename>/action.upload_admin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXM6Ok1BTkFHRV9QRVJNKSApIHJldHVybjsNCg0KaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsNCnVzZSBBV1NTM1x1dGlsczsNCiR1dGlscyA9IG5ldyB1dGlscygpOw0KJEZpbGVNYW5hZ2VyID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRmlsZU1hbmFnZXInKTsNCiRlcnJvciA9IDA7DQoNCiRkYXRhID0gYXJyYXkoKTsNCg0KdHJ5IHsNCg0KICAgIGlmKGVtcHR5KCRfRklMRVMpKSB7DQogICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX21pc3NpbmcnKSApOw0KICAgIH0NCg0KICAgICRmaWxlcyA9IGFycmF5X2ZpbHRlcigkX0ZJTEVTWyRpZC4nZmlsZXMnXVsnbmFtZSddKTsNCg0KICAgICR0b3RhbF9jb3VudCA9IGNvdW50KCRfRklMRVNbJGlkLidmaWxlcyddWyduYW1lJ10pOw0KICAgIC8vIExvb3AgdGhyb3VnaCBldmVyeSBmaWxlDQogICAgZm9yKCAkaT0wIDsgJGkgPCAkdG90YWxfY291bnQgOyAkaSsrICkgew0KDQogICAgICAgICRmaWxlX25hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWyRpZC4nZmlsZXMnXVsnbmFtZSddWyRpXSk7IA0KICAgICAgICAkZmlsZV90eXBlID0gcGF0aGluZm8oJGZpbGVfbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKTsgDQoNCiAgICAgICAgJHJldHVybl9wYXJhbXNbJ25hbWUnXSA9ICRmaWxlX25hbWU7DQogICAgICAgICRyZXR1cm5fcGFyYW1zWydzaXplJ10gPSAkX0ZJTEVTWyRpZC4nZmlsZXMnXVsnc2l6ZSddWyRpXTsNCiAgICAgICAgDQogICAgICAgIC8vIEFsbG93IGNlcnRhaW4gZmlsZSBmb3JtYXRzIA0KICAgICAgICBpZiggISR1dGlsczo6aXNfZmlsZV9hY2NlcHRhYmxlKCAkZmlsZV90eXBlICkgKSB7DQogICAgICAgICAgICAvL3Rocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX25vdF9hbGxvd2VkJykgKTsNCiAgICAgICAgICAgICRyZXR1cm5fcGFyYW1zWydlcnJvciddID0gIkZpbGV0eXBlIG5vdCBhbGxvd2VkIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vdXBsb2FkIHRvIFMzDQogICAgICAgICAgICAkZmlsZV90ZW1wX3NyYyA9ICRfRklMRVNbJGlkLidmaWxlcyddWyJ0bXBfbmFtZSJdWyRpXTsNCiAgICAgICAgICAgIGlmKGlzX3VwbG9hZGVkX2ZpbGUoJGZpbGVfdGVtcF9zcmMpKXsNCiAgICAgICAgICAgICAgICAkczMgPSAkdXRpbHMtPnVwbG9hZF9maWxlKCRwYXJhbXNbInByZWZpeCJdLiRmaWxlX25hbWUsJGZpbGVfdGVtcF9zcmMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgJGRhdGFbJ2ZpbGVzJ11bXSA9ICRyZXR1cm5fcGFyYW1zOw0KDQogICAgfQ0KDQp9DQpjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsNCgkkZXJyb3IgPSAxOwkNCgkkbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7DQogICAgJGRhdGFbJ2Vycm9yJ10gPSAkbWVzc2FnZTsNCg0KfQ0KDQoNCmVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOw0KDQojDQojIEVPRg0KIw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/AWSS3.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQp1c2UgXEFXU1MzXHV0aWxzOw0KDQpjbGFzcyBBV1NTMyBleHRlbmRzIENNU01vZHVsZQ0Kew0KCWNvbnN0IE1BTkFHRV9QRVJNID0gJ21hbmFnZV9BV1NTMyc7DQoJDQoJcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMS4yLjAnOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2FkbWluZGVzY3JpcHRpb24nKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIFRSVUU7IH0NCglwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiBUUlVFOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKSB7IHJldHVybiAkdGhpcy0+X291dHB1dF9oZWFkZXJfYXNzZXRzKCk7IH0NCglwdWJsaWMgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgeyByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbihzZWxmOjpNQU5BR0VfUEVSTSk7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgeyByZXR1cm4gJ1BpeGVsIFNvbHV0aW9ucyc7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnaW5mb0BwaXhlbHNvbHV0aW9ucy5iaXonOyB9DQoJcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnYXNrX3VuaW5zdGFsbCcpOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdjb250ZW50JzsgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcyLjIuMSc7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkgeyByZXR1cm4gWydBV1NTREsnID0+ICcxLjEuMCcsJ0ZpbGVNYW5hZ2VyJyA9PiAnMS42LjEzJ107IH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpew0KICAgICAgICAvLyBMb2FkIHRoZSB1dGlscyBjbGFzcw0KICAgICAgICBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoWyR0aGlzLCAnX2F1dG9sb2FkZXInXSk7DQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsNCiAgICAgICAgDQogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsNCiAgICAgICAgaWYoISRzbWFydHkpe3JldHVybjt9DQoNCiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdzM19tb2QnLCR0aGlzKTsNCiAgICAgICAgJHNtYXJ0eS0+cmVnaXN0ZXJDbGFzcygnczNfdXRpbHMnLCAnQVdTUzNcdXRpbHMnKTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9hdXRvbG9hZGVyKCRjbGFzc25hbWUpDQogICAgew0KICAgICAgICAkcGFydHMgPSBleHBsb2RlKCdcXCcsICRjbGFzc25hbWUpOw0KICAgICAgICAkY2xhc3NuYW1lID0gZW5kKCRwYXJ0cyk7DQogICAgICAgIA0KICAgICAgICAkZm4gPSBjbXNfam9pbl9wYXRoKA0KICAgICAgICAgICAgJHRoaXMtPkdldE1vZHVsZVBhdGgoKSwNCiAgICAgICAgICAgICdsaWInLA0KICAgICAgICAgICAgJ2NsYXNzLicgLiAkY2xhc3NuYW1lIC4gJy5waHAnDQogICAgICAgICk7DQogICAgICAgIA0KICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZuKSkgew0KICAgICAgICAgICAgcmVxdWlyZV9vbmNlKCRmbik7DQogICAgICAgIH0NCiAgICB9DQoNCglwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkgew0KCQkkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsNCiAgICAgICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOw0KICAgICAgICANCiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FjdGlvbicsIENMRUFOX1NUUklORyk7DQogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwcmVmaXgnLENMRUFOX1NUUklORyk7DQogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwYWdlbnVtJyxDTEVBTl9JTlQpOw0KICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncGFnZWxpbWl0JyxDTEVBTl9JTlQpOw0KICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc3VtbWFyeXRlbXBsYXRlJyxDTEVBTl9TVFJJTkcpOw0KICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGV0YWlscGFnZScsQ0xFQU5fU1RSSU5HKTsNCiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RldGFpbHRlbXBsYXRlJyxDTEVBTl9TVFJJTkcpOw0KICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnanVuaycsQ0xFQU5fU1RSSU5HKTsNCiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ25vY2FwdGNoYScsQ0xFQU5fSU5UKTsNCg0KICAgICAgICAkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL1tTc10zXC9bU3NdXC8oP1A8a2V5Pi4qPykkLycsIGFycmF5KCdhY3Rpb24nPT4nc2lnbmVkJykpOw0KICAgICAgICAkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL1tTc10zXC9bRmZdaWxlXC8oP1A8cHJlZml4Pi4qKVwvKD9QPHJldHVybmlkPlswLTldKykkLycsIGFycmF5KCdhY3Rpb24nPT4nZGV0YWlsJykpOw0KICAgICAgICAkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL1tTc10zXC9bRmZdaWxlXC8oP1A8cHJlZml4Pi4qKVwvKD9QPHJldHVybmlkPlswLTldKylcLyg/UDxqdW5rPi4qPykkLycsIGFycmF5KCdhY3Rpb24nPT4nZGV0YWlsJykpOw0KDQoJfQ0KDQoJIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKSB7DQoJCSAkdGhpcy0+U2V0UGFyYW1ldGVycygpOw0KICAgICAgICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignYWN0aW9uJywnZGVmYXVsdCcsJHRoaXMtPkxhbmcoJ2hlbHBfcGFyYW1fYWN0aW9uJykpOw0KICAgICAgICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigncHJlZml4JyxudWxsLCR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX3ByZWZpeCcpKTsNCiAgICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3BhZ2VsaW1pdCcsbnVsbCwkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9wYWdlbGltaXQnKSk7DQogICAgICAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzdW1tYXJ5cGFnZScsbnVsbCwkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9zdW1tYXJ5cGFnZScpKTsNCiAgICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3N1bW1hcnl0ZW1wbGF0ZScsbnVsbCwkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9zdW1tYXJ5dGVtcGxhdGUnKSk7DQogICAgICAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdkZXRhaWxwYWdlJyxudWxsLCR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX2RldGFpbHBhZ2UnKSk7DQogICAgICAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdkZXRhaWx0ZW1wbGF0ZScsbnVsbCwkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9kZXRhaWx0ZW1wbGF0ZScpKTsNCgkgfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkgeyByZXR1cm4gQGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy9SRUFETUUubWQnKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7IHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL0NIQU5HRUxPRy5tZCcpOyB9DQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gX291dHB1dF9oZWFkZXJfYXNzZXRzKCkNCiAgICB7DQogICAgICAgICRvdXQgPSAnJzsNCiAgICAgICAgJHVybHBhdGggPSAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLiIvanMiOw0KICAgICAgICAkanNmaWxlcyA9IGFycmF5KCdqcXVlcnktZmlsZS11cGxvYWQvanF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMnKTsNCiAgICAgICAgJGpzZmlsZXNbXSA9ICdqcXVlcnktZmlsZS11cGxvYWQvanF1ZXJ5LmZpbGV1cGxvYWQuanMnOw0KICAgICAgICAkanNmaWxlc1tdID0gJ2pxdWVyeXJvdGF0ZS9qUXVlcnlSb3RhdGUtMi4yLm1pbi5qcyc7DQogICAgICAgICRqc2ZpbGVzW10gPSAnanJhYy9qcXVlcnkuanJhYy5qcyc7DQoNCiAgICAgICAgJGZtdCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIlcy8lcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgZm9yZWFjaCggJGpzZmlsZXMgYXMgJG9uZSApIHsNCiAgICAgICAgICAgICRvdXQgLj0gc3ByaW50ZigkZm10LCR1cmxwYXRoLCRvbmUpLiJcbiI7DQogICAgICAgIH0NCg0KICAgICAgICAkdXJscGF0aCA9ICR0aGlzLT5HZXRNb2R1bGVVUkxQYXRoKCk7DQogICAgICAgICRmbXQgPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJXMvJXMiLz4nOw0KICAgICAgICAkY3NzZmlsZXMgPSBhcnJheSgnanMvanJhYy9zdHlsZS5qcmFjLmNzcycpOw0KICAgICAgICAkY3NzZmlsZXNbXSA9ICdjc3Mvc3R5bGUuY3NzJzsNCiAgICAgICAgZm9yZWFjaCggJGNzc2ZpbGVzIGFzICRvbmUgKSB7DQogICAgICAgICAgICAkb3V0IC49IHNwcmludGYoJGZtdCwkdXJscGF0aCwkb25lKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkb3V0Ow0KICAgIH0NCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfb3V0cHV0X2Zyb250ZW5kX2NzcygpDQogICAgew0KICAgICAgICAkb3V0ID0gJyc7DQogICAgICAgICR1cmxwYXRoID0gJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKTsNCiAgICAgICAgJGZtdCA9ICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIlcy8lcyIvPic7DQogICAgICAgICRjc3NmaWxlcyA9IGFycmF5KCdjc3Mvc3R5bGUuY3NzJyk7DQogICAgICAgIC8vJGNzc2ZpbGVzW10gPSAnY3NzL3N0eWxlLmNzcyc7DQogICAgICAgIGZvcmVhY2goICRjc3NmaWxlcyBhcyAkb25lICkgew0KICAgICAgICAgICAgJG91dCAuPSBzcHJpbnRmKCRmbXQsJHVybHBhdGgsJG9uZSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KDQogICAgLyoqDQoJICogRG9FdmVudCBtZXRob2RzDQoJICovDQoJZnVuY3Rpb24gRG9FdmVudCgkb3JpZ2luYXRvciwgJGV2ZW50bmFtZSwgJiRwYXJhbXMpIHsNCgkJaWYgKCRvcmlnaW5hdG9yID09ICdDb3JlJyAmJiAkZXZlbnRuYW1lID09ICdDb250ZW50UG9zdFJlbmRlcicpDQoJCXsNCgkJCSRwb3NfdG9wID0gc3RyaXBvcygkcGFyYW1zWyJjb250ZW50Il0sICI8L2hlYWQiKTsNCgkJCWlmICgkcG9zX3RvcCAhPT0gRkFMU0UgJiYgIWVtcHR5KCR0aGlzLT5Gcm9udEVuZENTUykpDQoJCQl7DQoJCQkJJHBhcmFtc1siY29udGVudCJdID0gc3Vic3RyKCRwYXJhbXNbImNvbnRlbnQiXSwgMCwgJHBvc190b3ApIC4gJHRoaXMtPkZyb250RW5kQ1NTIC4gc3Vic3RyKCRwYXJhbXNbImNvbnRlbnQiXSwgJHBvc190b3ApOw0KCQkJfQ0KCQkJJHBvc19idG0gPSBzdHJyaXBvcygkcGFyYW1zWyJjb250ZW50Il0sICI8L2JvZHkiKTsNCgkJCWlmICgkcG9zX2J0bSAhPT0gRkFMU0UgJiYgIWVtcHR5KCR0aGlzLT5Gcm9udEVuZEpTKSkNCgkJCXsNCgkJCQkkcGFyYW1zWyJjb250ZW50Il0gPSBzdWJzdHIoJHBhcmFtc1siY29udGVudCJdLCAwLCAkcG9zX2J0bSkgLiAkdGhpcy0+RnJvbnRFbmRKUyAuIHN1YnN0cigkcGFyYW1zWyJjb250ZW50Il0sICRwb3NfYnRtKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBHZXRGaWxlSWNvbigkZXh0ZW5zaW9uLCRpc2Rpcj1mYWxzZSkgew0KICAgICAgICBpZiAoZW1wdHkoJGV4dGVuc2lvbikpICRleHRlbnNpb24gPSAnLS0tJzsgLy8gaGFyZGNvZGUgZXh0ZW5zaW9uIHRvIHNvbWV0aGluZy4NCiAgICAgICAgaWYgKCRleHRlbnNpb25bMF0gPT0gIi4iKSAkZXh0ZW5zaW9uID0gc3Vic3RyKCRleHRlbnNpb24sMSk7DQogICAgICAgICRjb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7DQogICAgICAgICRpY29uc2l6ZT0kdGhpcy0+R2V0UHJlZmVyZW5jZSgiaWNvbnNpemUiLCIzMnB4Iik7DQogICAgICAgICRpY29uc2l6ZUhlaWdodD1zdHJfcmVwbGFjZSgicHgiLCIiLCRpY29uc2l6ZSk7DQoNCiAgICAgICAgJHJlc3VsdD0iIjsNCiAgICAgICAgaWYgKCRpc2Rpcikgew0KICAgICAgICAgICAgJHJlc3VsdD0iPGltZyBoZWlnaHQ9XCIiLiRpY29uc2l6ZUhlaWdodC4iXCIgc3R5bGU9XCJib3JkZXI6MDtcIiBzcmM9XCIiLiRjb25maWdbInJvb3RfdXJsIl0uIi9tb2R1bGVzL0ZpbGVNYW5hZ2VyL2ljb25zL3RoZW1lcy9kZWZhdWx0L2V4dGVuc2lvbnMvIi4kaWNvbnNpemUuIi9kaXIucG5nXCIgIi4NCiAgICAgICAgICAgICAgICAiYWx0PVwiZGlyZWN0b3J5XCIgIi4NCiAgICAgICAgICAgICAgICAiYWxpZ249XCJtaWRkbGVcIiAvPiI7DQogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChmaWxlX2V4aXN0cygkY29uZmlnWyJyb290X3BhdGgiXS4iL21vZHVsZXMvRmlsZU1hbmFnZXIvaWNvbnMvdGhlbWVzL2RlZmF1bHQvZXh0ZW5zaW9ucy8iLiRpY29uc2l6ZS4iLyIuc3RydG9sb3dlcigkZXh0ZW5zaW9uKS4iLnBuZyIpKSB7DQogICAgICAgICAgICAkcmVzdWx0PSI8aW1nIGhlaWdodD0nIi4kaWNvbnNpemVIZWlnaHQuIicgc3R5bGU9J2JvcmRlcjowOycgc3JjPSciLiRjb25maWdbInJvb3RfdXJsIl0uIi9tb2R1bGVzL0ZpbGVNYW5hZ2VyL2ljb25zL3RoZW1lcy9kZWZhdWx0L2V4dGVuc2lvbnMvIi4kaWNvbnNpemUuIi8iLnN0cnRvbG93ZXIoJGV4dGVuc2lvbikuIi5wbmcnICIuDQogICAgICAgICAgICAgICAgImFsdD0nIi4kZXh0ZW5zaW9uLiItZmlsZScgIi4NCiAgICAgICAgICAgICAgICAiYWxpZ249J21pZGRsZScgLz4iOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHJlc3VsdD0iPGltZyBoZWlnaHQ9JyIuJGljb25zaXplSGVpZ2h0LiInIHN0eWxlPSdib3JkZXI6MDsnIHNyYz0nIi4kY29uZmlnWyJyb290X3VybCJdLiIvbW9kdWxlcy9GaWxlTWFuYWdlci9pY29ucy90aGVtZXMvZGVmYXVsdC9leHRlbnNpb25zLyIuJGljb25zaXplLiIvMC5wbmcnICIuDQogICAgICAgICAgICAgICAgImFsdD0iLiRleHRlbnNpb24uIi1maWxlJyAiLg0KICAgICAgICAgICAgICAgICJhbGlnbj0nbWlkZGxlJyAvPiI7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KDQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhZ2VfdHlwZV9sYW5nX2NhbGxiYWNrKCRzdHIpDQogICAgew0KICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBV1NTMycpOw0KICAgICAgICBpZiggaXNfb2JqZWN0KCRtb2QpICkgcmV0dXJuICRtb2QtPkxhbmcoJ3R5cGVfJy4kc3RyKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlbXBsYXRlX2hlbHBfY2FsbGJhY2soJHN0cikNCiAgICB7DQogICAgICAgICRzdHIgPSB0cmltKCRzdHIpOw0KICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBV1NTMycpOw0KICAgICAgICBpZiggaXNfb2JqZWN0KCRtb2QpICkgew0KICAgICAgICAgICAgJGZpbGUgPSAkbW9kLT5HZXRNb2R1bGVQYXRoKCkuJy9SRUFETUUubWQnOw0KICAgICAgICAgICAgaWYoIGlzX2ZpbGUoJGZpbGUpICkgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzZXRfcGFnZV90eXBlX2RlZmF1bHRzKENtc0xheW91dFRlbXBsYXRlVHlwZSAkdHlwZSkNCiAgICB7DQogICAgICAgIGlmKCAkdHlwZS0+Z2V0X29yaWdpbmF0b3IoKSAhPSAnQVdTUzMnICkgdGhyb3cgbmV3IENtc0xvZ2ljRXhjZXB0aW9uKCdDYW5ub3QgcmVzZXQgY29udGVudHMgZm9yIHRoaXMgdGVtcGxhdGUgdHlwZScpOw0KDQogICAgICAgICRmbiA9IG51bGw7DQogICAgICAgIHN3aXRjaCggJHR5cGUtPmdldF9uYW1lKCkgKSB7DQogICAgICAgIGNhc2UgJ3N1bW1hcnknOg0KICAgICAgICAgICAgJGZuID0gJ29yaWdfc3VtbWFyeV90ZW1wbGF0ZS50cGwnOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAnZGV0YWlsJzoNCiAgICAgICAgICAgICRmbiA9ICdvcmlnX2RldGFpbF90ZW1wbGF0ZS50cGwnOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAndXBsb2FkJzoNCiAgICAgICAgICAgICRmbiA9ICdvcmlnX3VwbG9hZGZvcm1fdGVtcGxhdGUudHBsJzsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgJ2Zvcm0nOg0KICAgICAgICAgICAgJGZuID0gJ29yaWdfZm9ybV90ZW1wbGF0ZS50cGwnOw0KICAgICAgICB9DQoNCiAgICAgICAgJGZuID0gY21zX2pvaW5fcGF0aChfX0RJUl9fLCd0ZW1wbGF0ZXMnLCRmbik7DQogICAgICAgIGlmKCBmaWxlX2V4aXN0cygkZm4pICkgcmV0dXJuIEBmaWxlX2dldF9jb250ZW50cygkZm4pOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBDcmVhdGVTaWduZWRMaW5rKCRuYW1lKQ0KICAgIHsNCg0KICAgICAgICAkYmFzZV91cmwgPSBDTVNfUk9PVF9VUkw7DQogICAgICAgICRuYW1lID0gXEFXU1NES1xlbmNyeXB0OjplbmNvZGVmaWxlbmFtZSgkbmFtZSk7DQogICAgICAgICRvdXQgPSAkYmFzZV91cmwuIi9TMy9zLyIuJG5hbWU7DQoNCiAgICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIENyZWF0ZVByZXR0eUxpbmsoJHBhZ2UsJHByZWZpeCkNCiAgICB7DQogICAgICAgICRiYXNlX3VybCA9IENNU19ST09UX1VSTDsNCiAgICAgICAgJG91dCA9ICRiYXNlX3VybC4iL1MzLyIuJHBhZ2UuIi8iLiRwcmVmaXg7DQoNCiAgICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIEdldFByZXR0eVVybCgkcHJlZml4PW51bGwpDQogICAgew0KICAgICAgICAkdXNlX2N1c3RvbV91cmwgPSAkdGhpcy0+R2V0T3B0aW9uVmFsdWUoInVzZV9jdXN0b21fdXJsIik7DQogICAgICAgICRjdXN0b21fdXJsID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCJjdXN0b21fdXJsIik7DQogICAgICAgIGlmKCAkdXNlX2N1c3RvbV91cmwgJiYgJGN1c3RvbV91cmwgKSB7DQogICAgICAgICAgICAkdXJsID0gJGN1c3RvbV91cmw7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdXJsID0gImh0dHBzOi8vIi4kdGhpcy0+R2V0T3B0aW9uVmFsdWUoJ2J1Y2tldF9uYW1lJykuIi5zMy4iLiR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnYWNjZXNzX3JlZ2lvbicpLiIuYW1hem9uYXdzLmNvbSI7DQogICAgICAgIH0NCiAgICAgICAgaWYoaXNzZXQoJHByZWZpeCkpew0KICAgICAgICAgICAgcmV0dXJuICR1cmwuJy8nLiRwcmVmaXg7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gJHVybDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2FjaGVGaWxlKCRxcGFybXMpDQogICAgew0KICAgICAgICAkYnVja2V0X2lkID0gJHFwYXJtc1snYnVja2V0J107DQogICAgICAgICRwcmVmaXggPSAkcXBhcm1zWydwcmVmaXgnXTsNCiAgICAgICAgJGNvbmZpZyA9IFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsNCiAgICAgICAgJGpzb25fZmlsZV9uYW1lID0gJ2F3c3MzXycuXEFXU1NES1xlbmNyeXB0OjplbmNvZGVmaWxlbmFtZSgkYnVja2V0X2lkLidfJy5zdHJfcmVwbGFjZSgnLycsICdfJywgJHByZWZpeCkpLicuY21zJzsNCiAgICAgICAgJGpzb25fZmlsZV9QYXRoID0gJGNvbmZpZ1sndG1wX2NhY2hlX2xvY2F0aW9uJ10uJy8nLiRqc29uX2ZpbGVfbmFtZTsNCg0KICAgICAgICByZXR1cm4gJGpzb25fZmlsZV9QYXRoOw0KICAgIH0NCg0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBHZXRPcHRpb25WYWx1ZSgka2V5LCAkZGVmYXVsdCA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHZhbHVlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJGtleSk7DQogICAgICAgIGlmKGlzc2V0KCR2YWx1ZSkgJiYgJHZhbHVlICE9PSAnJykgew0KICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9DQogICAgDQogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIFNldE9wdGlvblZhbHVlKCRrZXksICR2YWx1ZSkgOiB2b2lkDQogICAgew0KICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJGtleSwkdmFsdWUpOw0KICAgIH0NCg0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBHZXRTZXR0aW5nc1ZhbHVlcygpDQogICAgew0KICAgICAgICAkcHJlZml4ID0gJHRoaXMtPkdldE5hbWUoKS4nX21hcGlfcHJlZl8nOw0KICAgICAgICAkbGlzdCA9IGNtc19zaXRlcHJlZnM6Omxpc3RfYnlfcHJlZml4KCRwcmVmaXgpOw0KICAgICAgICBpZiggISRsaXN0IHx8ICFjb3VudCgkbGlzdCkgKSByZXR1cm4gW107DQogICAgICAgICRvdXQgPSBbXTsNCiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJHByZWZuYW1lICkgew0KICAgICAgICAgICAgJHRtcCA9IGNtc19zaXRlcHJlZnM6OmdldCgkcHJlZm5hbWUpOw0KICAgICAgICAgICAgaWYoICEkdG1wICkgY29udGludWU7DQogICAgICAgICAgICAkb3V0W3N1YnN0cigkcHJlZm5hbWUsIHN0cmxlbigkcHJlZml4KSldID0gJHRtcDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKCBjb3VudCgkb3V0KSApIHJldHVybiAkb3V0Ow0KDQogICAgfQ0KDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/CHANGELOG.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDaGFuZ2Vsb2cKCiMjIFZlcnNpb24gMS4yLjAgLSBGZWJydWFyeSAyMCwgMjAyNgotIEFkZGVkIElBTSBSb2xlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBmb3IgRUMyL0VDUyBpbnN0YW5jZXMKLSBVc2VycyBjYW4gbm93IGNob29zZSBiZXR3ZWVuIFNhdmVkIENyZWRlbnRpYWxzIChBY2Nlc3MgS2V5L1NlY3JldCkgb3IgSUFNIFJvbGUgKEVDMi9FQ1MgSW5zdGFuY2UgUHJvZmlsZSkgYXV0aGVudGljYXRpb24gbWV0aG9kcwoKIyMgVmVyc2lvbiAxLjEuMSAtIE5vdmVtYmVyIDE3LCAyMDIzCi0gQWRkZWQgRGV0YWlsIHRlbXBsYXRlCgojIyBWZXJzaW9uIDEuMS4wIC0gTm92ZW1iZXIgMTYsIDIwMjMKLSBJbmNvcnBvcmF0ZWQgY3JlZGVudGlhbHMKCiMjIFZlcnNpb24gMS4wLjAgLSBKdW5lIDIwLCAyMDIzCi0gRmlyc3QgdmVyc2lvbiBvZiB0aGUgcGx1Z2luCg==]]></data>
	</file>
	<file>
	  <filename>/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/style.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnVpLWRpYWxvZyB1bCB7DQogICAgbWFyZ2luLXRvcDogMjBweDsNCn0NCg0KLnVpLXdpZGdldC1jb250ZW50IGEgew0KICAgICBjb2xvcjogIzE0N2ZkYiFpbXBvcnRhbnQ7DQogICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIWltcG9ydGFudDsNCn0NCg0KDQpjb2RlLnVzZXJpbnB1dCB7DQogICAgY29sb3I6ICMxZDgxMDI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1sYXlvdXQtbWFpbi10ZDg1M2EsI2YyZjNmMyk7DQogICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgIHBhZGRpbmc6IDAgM3B4Ow0KICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgZm9udC1zaXplOiAxZW07DQp9DQouYWxlcnQgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW07DQogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItcmFkaXVzOiAwLjI1cmVtOw0KfQ0KLmFsZXJ0LXByaW1hcnkgew0KICAgIGNvbG9yOiAjMDA0MDg1Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2U1ZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjYjhkYWZmOw0KfQ0KLmFsZXJ0LXNlY29uZGFyeSB7DQogICAgY29sb3I6ICMzODNkNDE7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTNlNTsNCiAgICBib3JkZXItY29sb3I6ICNkNmQ4ZGI7DQp9DQouYWxlcnQtc3VjY2VzcyB7DQogICAgY29sb3I6ICMxNTU3MjQ7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsNCiAgICBib3JkZXItY29sb3I6ICNjM2U2Y2I7DQp9DQouYWxlcnQtZGFuZ2VyIHsNCiAgICBjb2xvcjogIzcyMWMyNDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhkN2RhOw0KICAgIGJvcmRlci1jb2xvcjogI2Y1YzZjYjsNCn0NCi5hbGVydC13YXJuaW5nIHsNCiAgICBjb2xvcjogIzg1NjQwNDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmM2NkOw0KICAgIGJvcmRlci1jb2xvcjogI2ZmZWViYTsNCn0NCi5hbGVydC1pbmZvIHsNCiAgICBjb2xvcjogIzBjNTQ2MDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDFlY2YxOw0KICAgIGJvcmRlci1jb2xvcjogI2JlZTVlYjsNCn0NCi5tZXNzYWdlIHAgew0KICAgIG1hcmdpbi10b3A6IDAuNXJlbTsNCiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07DQp9DQouYmQtcGxhY2Vob2xkZXItaW1nIHsNCiAgICBmb250LXNpemU6IDEuMTI1cmVtOw0KICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7DQogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOw0KICAgIHVzZXItc2VsZWN0OiBub25lOw0KfQ0KDQoudXBsb2FkLXdyYXBwZXIgeyBtYXJnaW46IDEwcHggMCB9DQouaGNlbnRlcmVkIHsgdGV4dC1hbGlnbjogY2VudGVyIH0NCi52Y2VudGVyZWQgew0KICBkaXNwbGF5OiB0YWJsZS1jZWxsOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KI2Ryb3B6b25lIHsNCiAgIG1hcmdpbjogMTVweCAwOw0KICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KIGJhY2tncm91bmQ6ICNFRUVFRUU7DQogIH0NCiNkcm9wem9uZS5pbiB7DQogIHdpZHRoOiA2MDBweDsNCiAgaGVpZ2h0OiAyMDBweDsNCiAgbGluZS1oZWlnaHQ6IDIwMHB4Ow0KICBiYWNrZ3JvdW5kOiAjMTQ3ZmRiOw0KICBib3JkZXI6IDJweCBkYXNoZWQgI2ZmZjsNCiAgY29sb3I6ICNmZmY7DQogIGZvbnQtc2l6ZTogbGFyZ2VyOw0KICBjdXJzb3I6IG1vdmU7DQp9DQojZHJvcHpvbmUuZmFkZSB7DQogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7DQogIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7DQogIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsNCiAgLW8tdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0Ow0KICBvcGFjaXR5OiAxOw0KfQ0KI3Byb2dyZXNzYXJlYSB7DQogIG1hcmdpbjogMTVweDsNCiAgaGVpZ2h0OiAyZW07DQogIGxpbmUtaGVpZ2h0OiAyZW07DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsNCiAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICBkaXNwbGF5OiBub25lOw0KfQ0KI25hdkJ1dHRvbnMgew0KICAgIHBhZGRpbmc6MC4zNWVtIDAuNjI1ZW0gMC4zNWVtOw0KfQ==]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/files.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyJmaWxlcyI6IFsNCiAgICB7DQogICAgICAibmFtZSI6ICJwaWN0dXJlMS5qcGciLA0KICAgICAgInNpemUiOiA5MDI2MDQsDQogICAgICAidXJsIjogImh0dHA6XC9cL2V4YW1wbGUub3JnXC9maWxlc1wvcGljdHVyZTEuanBnIiwNCiAgICAgICJ0aHVtYm5haWxVcmwiOiAiaHR0cDpcL1wvZXhhbXBsZS5vcmdcL2ZpbGVzXC90aHVtYm5haWxcL3BpY3R1cmUxLmpwZyIsDQogICAgICAiZGVsZXRlVXJsIjogImh0dHA6XC9cL2V4YW1wbGUub3JnXC9maWxlc1wvcGljdHVyZTEuanBnIiwNCiAgICAgICJkZWxldGVUeXBlIjogIkRFTEVURSINCiAgICB9LA0KICAgIHsNCiAgICAgICJuYW1lIjogInBpY3R1cmUyLmpwZyIsDQogICAgICAic2l6ZSI6IDg0MTk0NiwNCiAgICAgICJ1cmwiOiAiaHR0cDpcL1wvZXhhbXBsZS5vcmdcL2ZpbGVzXC9waWN0dXJlMi5qcGciLA0KICAgICAgInRodW1ibmFpbFVybCI6ICJodHRwOlwvXC9leGFtcGxlLm9yZ1wvZmlsZXNcL3RodW1ibmFpbFwvcGljdHVyZTIuanBnIiwNCiAgICAgICJkZWxldGVVcmwiOiAiaHR0cDpcL1wvZXhhbXBsZS5vcmdcL2ZpbGVzXC9waWN0dXJlMi5qcGciLA0KICAgICAgImRlbGV0ZVR5cGUiOiAiREVMRVRFIg0KICAgIH0sDQogICAgew0KICAgICAgICAibmFtZSI6ICJwaWN0dXJlMzMuanBnIiwNCiAgICAgICAgInNpemUiOiA5MDI2MDQsDQogICAgICAgICJlcnJvciI6ICJGaWxldHlwZSBub3QgYWxsb3dlZCINCiAgICAgIH0sDQogICAgICB7DQogICAgICAgICJuYW1lIjogInBpY3R1cmU0My5qcGciLA0KICAgICAgICAic2l6ZSI6IDg0MTk0NiwNCiAgICAgICAgImVycm9yIjogIkZpbGV0eXBlIG5vdCBhbGxvd2VkIg0KICAgICAgfQ0KICBdfQ==]]></data>
	</file>
	<file>
	  <filename>/function.admin_permissions_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXM6Ok1BTkFHRV9QRVJNKSApIHJldHVybjsNCg0KJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCAkdGhpcy0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnYWRtaW5fcGVybWlzc2lvbnNfdGFiLnRwbCcpLCBudWxsLCBudWxsLCAkc21hcnR5ICk7DQokYnVja2V0X3BvbGljeSA9IHV0aWxzOjpnZXRfaWFtX3BvbGljeSgpOw0KJHNtYXJ0eS0+YXNzaWduKCdidWNrZXRfcG9saWN5JywkYnVja2V0X3BvbGljeSk7DQoNCiR0cGwtPmRpc3BsYXkoKTsNCg0KDQo=]]></data>
	</file>
	<file>
	  <filename>/function.admin_settings_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXM6Ok1BTkFHRV9QRVJNKSApIHJldHVybjsNCg0KJGVycm9yID0gMDsNCg0KaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSApIHsNCg0KICAgICRzZXR0aW5nc19pbnB1dCA9ICRwYXJhbXNbJ3NldHRpbmdzX2lucHV0J107DQogICAgaWYoY291bnQoJHNldHRpbmdzX2lucHV0KSA+IDApDQogICAgew0KICAgICAgICBmb3JlYWNoKCRzZXR0aW5nc19pbnB1dCBhcyAka2V5ID0+ICR2YWx1ZSkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aGlzLT5TZXRPcHRpb25WYWx1ZSgka2V5LCAkdmFsdWUpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gUmUtdmFsaWRhdGUgYWZ0ZXIgc2F2aW5nIHNldHRpbmdzDQogICAgJHMzX3V0aWxzID0gbmV3IHV0aWxzKCk7DQogICAgaWYoJHMzX3V0aWxzLT52YWxpZGF0ZSgpKXsNCiAgICAgICAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ3NldHRpbmdzX3NhdmVkJykpOw0KICAgICAgICAkdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnYnVja2V0X25hbWUnKSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdzZXR0aW5nc192YWxpZGF0aW9uX2ZhaWxlZCcpKTsNCiAgICAgICAgJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc2V0dGluZ3MnKTsNCiAgICB9DQp9DQoNCiRjb250ZW50X29wcyAgICAgICAgID0gY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsNCiRhd3NyZWdpb25uYW1lcyAgICAgID0gJHNka19tb2QtPmdldF9yZWdpb25zX29wdGlvbnMoKTsNCg0KJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCAkdGhpcy0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnYWRtaW5fc2V0dGluZ3NfdGFiLnRwbCcpLCBudWxsLCBudWxsLCAkc21hcnR5ICk7DQokdHBsLT5hc3NpZ24oJ2FjY2Vzc19yZWdpb25fbGlzdCcsJGF3c3JlZ2lvbm5hbWVzKTsNCiR0cGwtPmFzc2lnbignbWVzc2FnZScsJG1lc3NhZ2UpOw0KJHRwbC0+YXNzaWduKCdlcnJvcicsJGVycm9yKTsNCg0KLy8gTW9kdWxlIGRlZmF1bHRzDQokdHBsLT5hc3NpZ24oJ2lucHV0X2RldGFpbHBhZ2UnLCAkY29udGVudF9vcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKCcnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGV0YWlscGFnZScpLCAkaWQuJ3NldHRpbmdzX2lucHV0W2RldGFpbHBhZ2VdJykpOw0KJHRwbC0+YXNzaWduKCdpbnB1dF9zdW1tYXJ5cGFnZScsICRjb250ZW50X29wcy0+Q3JlYXRlSGllcmFyY2h5RHJvcGRvd24oJycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzdW1tYXJ5cGFnZScpLCAkaWQuJ3NldHRpbmdzX2lucHV0W3N1bW1hcnlwYWdlXScpKTsNCg0KJHRwbC0+ZGlzcGxheSgpOw0KLy8kdHBsLT5kaXNwbGF5KCdzdHJpbmc6PHByZT57Z2V0X3RlbXBsYXRlX3ZhcnN9PC9wcmU+Jyk7DQoNCg0K]]></data>
	</file>
	<file>
	  <filename>/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/jquery.fileupload.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW4gNS4zMS42DQogKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMCwgU2ViYXN0aWFuIFRzY2hhbg0KICogaHR0cHM6Ly9ibHVlaW1wLm5ldA0KICoNCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZToNCiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUDQogKi8NCg0KLypqc2xpbnQgbm9tZW46IHRydWUsIHVucGFyYW06IHRydWUsIHJlZ2V4cDogdHJ1ZSAqLw0KLypnbG9iYWwgZGVmaW5lLCB3aW5kb3csIGRvY3VtZW50LCBsb2NhdGlvbiwgRmlsZSwgQmxvYiwgRm9ybURhdGEgKi8NCg0KKGZ1bmN0aW9uIChmYWN0b3J5KSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsNCiAgICAgICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGU6DQogICAgICAgIGRlZmluZShbDQogICAgICAgICAgICAnanF1ZXJ5JywNCiAgICAgICAgICAgICdqcXVlcnkudWkud2lkZ2V0Jw0KICAgICAgICBdLCBmYWN0b3J5KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHM6DQogICAgICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7DQogICAgfQ0KfShmdW5jdGlvbiAoJCkgew0KICAgICd1c2Ugc3RyaWN0JzsNCg0KICAgIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLA0KICAgIC8vIGFzIGUuZy4gU2FmYXJpIHN1cHBvcnRzIFhIUiBmaWxlIHVwbG9hZHMgdmlhIHRoZSBGb3JtRGF0YSBBUEksDQogICAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHM6DQogICAgJC5zdXBwb3J0LnhockZpbGVVcGxvYWQgPSAhISh3aW5kb3cuWE1MSHR0cFJlcXVlc3RVcGxvYWQgJiYgd2luZG93LkZpbGVSZWFkZXIpOw0KICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQgPSAhIXdpbmRvdy5Gb3JtRGF0YTsNCg0KICAgIC8vIERldGVjdCBzdXBwb3J0IGZvciBCbG9iIHNsaWNpbmcgKHJlcXVpcmVkIGZvciBjaHVua2VkIHVwbG9hZHMpOg0KICAgICQuc3VwcG9ydC5ibG9iU2xpY2UgPSB3aW5kb3cuQmxvYiAmJiAoQmxvYi5wcm90b3R5cGUuc2xpY2UgfHwNCiAgICAgICAgQmxvYi5wcm90b3R5cGUud2Via2l0U2xpY2UgfHwgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpOw0KDQogICAgLy8gVGhlIGZpbGV1cGxvYWQgd2lkZ2V0IGxpc3RlbnMgZm9yIGNoYW5nZSBldmVudHMgb24gZmlsZSBpbnB1dCBmaWVsZHMgZGVmaW5lZA0KICAgIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLg0KICAgIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGpRdWVyeSBXaWRnZXQgbWV0aG9kcywgdGhlIGZpbGV1cGxvYWQgd2lkZ2V0DQogICAgLy8gZXhwb3NlcyB0aGUgImFkZCIgYW5kICJzZW5kIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZw0KICAgIC8vIHRoZSBmaWxldXBsb2FkIEFQSS4NCiAgICAvLyBCeSBkZWZhdWx0LCBmaWxlcyBhZGRlZCB2aWEgZmlsZSBpbnB1dCBzZWxlY3Rpb24sIHBhc3RlLCBkcmFnICYgZHJvcCBvcg0KICAgIC8vICJhZGQiIG1ldGhvZCBhcmUgdXBsb2FkZWQgaW1tZWRpYXRlbHksIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBvdmVycmlkZQ0KICAgIC8vIHRoZSAiYWRkIiBjYWxsYmFjayBvcHRpb24gdG8gcXVldWUgZmlsZSB1cGxvYWRzLg0KICAgICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7DQoNCiAgICAgICAgb3B0aW9uczogew0KICAgICAgICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC4NCiAgICAgICAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDoNCiAgICAgICAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSwNCiAgICAgICAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdGhlIGNvbXBsZXRlIGRvY3VtZW50Lg0KICAgICAgICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSBwYXN0ZSBzdXBwb3J0Og0KICAgICAgICAgICAgcGFzdGVab25lOiAkKGRvY3VtZW50KSwNCiAgICAgICAgICAgIC8vIFRoZSBmaWxlIGlucHV0IGZpZWxkKHMpLCB0aGF0IGFyZSBsaXN0ZW5lZCB0byBmb3IgY2hhbmdlIGV2ZW50cy4NCiAgICAgICAgICAgIC8vIElmIHVuZGVmaW5lZCwgaXQgaXMgc2V0IHRvIHRoZSBmaWxlIGlucHV0IGZpZWxkcyBpbnNpZGUNCiAgICAgICAgICAgIC8vIG9mIHRoZSB3aWRnZXQgZWxlbWVudCBvbiBwbHVnaW4gaW5pdGlhbGl6YXRpb24uDQogICAgICAgICAgICAvLyBTZXQgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBjaGFuZ2UgbGlzdGVuZXIuDQogICAgICAgICAgICBmaWxlSW5wdXQ6IHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggYSBjbG9uZSBhZnRlcg0KICAgICAgICAgICAgLy8gZWFjaCBpbnB1dCBmaWVsZCBjaGFuZ2UgZXZlbnQuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGlmcmFtZSB0cmFuc3BvcnQNCiAgICAgICAgICAgIC8vIHF1ZXVlcyBhbmQgYWxsb3dzIGNoYW5nZSBldmVudHMgdG8gYmUgZmlyZWQgZm9yIHRoZSBzYW1lIGZpbGUNCiAgICAgICAgICAgIC8vIHNlbGVjdGlvbiwgYnV0IGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGZhbHNlOg0KICAgICAgICAgICAgcmVwbGFjZUZpbGVJbnB1dDogdHJ1ZSwNCiAgICAgICAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhICh0aGUgcmVxdWVzdCBhcmd1bWVudCBuYW1lKS4NCiAgICAgICAgICAgIC8vIElmIHVuZGVmaW5lZCBvciBlbXB0eSwgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQgaXMNCiAgICAgICAgICAgIC8vIHVzZWQsIG9yICJmaWxlc1tdIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksDQogICAgICAgICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczoNCiAgICAgICAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLA0KICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWwNCiAgICAgICAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZQ0KICAgICAgICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOg0KICAgICAgICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsDQogICAgICAgICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LA0KICAgICAgICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6DQogICAgICAgICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGlzc3VlIGFsbCBmaWxlIHVwbG9hZCByZXF1ZXN0cw0KICAgICAgICAgICAgLy8gaW4gYSBzZXF1ZW50aWFsIG9yZGVyOg0KICAgICAgICAgICAgc2VxdWVudGlhbFVwbG9hZHM6IGZhbHNlLA0KICAgICAgICAgICAgLy8gVG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHVwbG9hZHMsDQogICAgICAgICAgICAvLyBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMDoNCiAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGZvcmNlIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczoNCiAgICAgICAgICAgIGZvcmNlSWZyYW1lVHJhbnNwb3J0OiBmYWxzZSwNCiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSByZWRpcmVjdCB1cmwgb24gdGhlDQogICAgICAgICAgICAvLyBvcmlnaW4gc2VydmVyLCBmb3IgY3Jvc3MtZG9tYWluIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczoNCiAgICAgICAgICAgIHJlZGlyZWN0OiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSByZWRpcmVjdCB1cmwsIHNlbnQgYXMgcGFydCBvZiB0aGUgZm9ybQ0KICAgICAgICAgICAgLy8gZGF0YSBhbmQgc2V0IHRvICdyZWRpcmVjdCcgaWYgdGhpcyBvcHRpb24gaXMgZW1wdHk6DQogICAgICAgICAgICByZWRpcmVjdFBhcmFtTmFtZTogdW5kZWZpbmVkLA0KICAgICAgICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRoZSBsb2NhdGlvbiBvZiBhIHBvc3RNZXNzYWdlIHdpbmRvdywNCiAgICAgICAgICAgIC8vIHRvIGVuYWJsZSBwb3N0TWVzc2FnZSB0cmFuc3BvcnQgdXBsb2FkczoNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlOiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBYSFIgZmlsZSB1cGxvYWRzIGFyZSBzZW50IGFzIG11bHRpcGFydC9mb3JtLWRhdGEuDQogICAgICAgICAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBpcyBhbHdheXMgdXNpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YS4NCiAgICAgICAgICAgIC8vIFNldCB0byBmYWxzZSB0byBlbmFibGUgbm9uLW11bHRpcGFydCBYSFIgdXBsb2FkczoNCiAgICAgICAgICAgIG11bHRpcGFydDogdHJ1ZSwNCiAgICAgICAgICAgIC8vIFRvIHVwbG9hZCBsYXJnZSBmaWxlcyBpbiBzbWFsbGVyIGNodW5rcywgc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uDQogICAgICAgICAgICAvLyB0byBhIHByZWZlcnJlZCBtYXhpbXVtIGNodW5rIHNpemUuIElmIHNldCB0byAwLCBudWxsIG9yIHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIG9yIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEJsb2IgQVBJLCBmaWxlcyB3aWxsDQogICAgICAgICAgICAvLyBiZSB1cGxvYWRlZCBhcyBhIHdob2xlLg0KICAgICAgICAgICAgbWF4Q2h1bmtTaXplOiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBXaGVuIGEgbm9uLW11bHRpcGFydCB1cGxvYWQgb3IgYSBjaHVua2VkIG11bHRpcGFydCB1cGxvYWQgaGFzIGJlZW4NCiAgICAgICAgICAgIC8vIGFib3J0ZWQsIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlc3VtZSB0aGUgdXBsb2FkIGJ5IHNldHRpbmcNCiAgICAgICAgICAgIC8vIGl0IHRvIHRoZSBzaXplIG9mIHRoZSBhbHJlYWR5IHVwbG9hZGVkIGJ5dGVzLiBUaGlzIG9wdGlvbiBpcyBtb3N0DQogICAgICAgICAgICAvLyB1c2VmdWwgd2hlbiBtb2RpZnlpbmcgdGhlIG9wdGlvbnMgb2JqZWN0IGluc2lkZSBvZiB0aGUgImFkZCIgb3INCiAgICAgICAgICAgIC8vICJzZW5kIiBjYWxsYmFja3MsIGFzIHRoZSBvcHRpb25zIGFyZSBjbG9uZWQgZm9yIGVhY2ggZmlsZSB1cGxvYWQuDQogICAgICAgICAgICB1cGxvYWRlZEJ5dGVzOiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBmaWxlIHVwbG9hZHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUNCiAgICAgICAgICAgIC8vIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbi4gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGZhbHNlIHRvDQogICAgICAgICAgICAvLyBwcmV2ZW50IHJlY2FsY3VsYXRpbmcgdGhlIGdsb2JhbCBwcm9ncmVzcyBkYXRhOg0KICAgICAgICAgICAgcmVjYWxjdWxhdGVQcm9ncmVzczogdHJ1ZSwNCiAgICAgICAgICAgIC8vIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byBjYWxjdWxhdGUgYW5kIHRyaWdnZXIgcHJvZ3Jlc3MgZXZlbnRzOg0KICAgICAgICAgICAgcHJvZ3Jlc3NJbnRlcnZhbDogMTAwLA0KICAgICAgICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBwcm9ncmVzcyBiaXRyYXRlOg0KICAgICAgICAgICAgYml0cmF0ZUludGVydmFsOiA1MDAsDQogICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCB1cGxvYWRzIGFyZSBzdGFydGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhZGRpbmcgZmlsZXM6DQogICAgICAgICAgICBhdXRvVXBsb2FkOiB0cnVlLA0KDQogICAgICAgICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczoNCiAgICAgICAgICAgIG1lc3NhZ2VzOiB7DQogICAgICAgICAgICAgICAgdXBsb2FkZWRCeXRlczogJ1VwbG9hZGVkIGJ5dGVzIGV4Y2VlZCBmaWxlIHNpemUnDQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvbiwgZ2V0cyB0aGUgbWVzc2FnZSBrZXkgdG8gYmUgdHJhbnNsYXRlZA0KICAgICAgICAgICAgLy8gYW5kIGFuIG9iamVjdCB3aXRoIGNvbnRleHQgc3BlY2lmaWMgZGF0YSBhcyBhcmd1bWVudHM6DQogICAgICAgICAgICBpMThuOiBmdW5jdGlvbiAobWVzc2FnZSwgY29udGV4dCkgew0KICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTsNCiAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoJ3snICsga2V5ICsgJ30nLCB2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsNCiAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXQNCiAgICAgICAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZA0KICAgICAgICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YQ0KICAgICAgICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC4NCiAgICAgICAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjoNCiAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmb3JtLnNlcmlhbGl6ZUFycmF5KCk7DQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvLyBUaGUgYWRkIGNhbGxiYWNrIGlzIGludm9rZWQgYXMgc29vbiBhcyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIGZpbGV1cGxvYWQNCiAgICAgICAgICAgIC8vIHdpZGdldCAodmlhIGZpbGUgaW5wdXQgc2VsZWN0aW9uLCBkcmFnICYgZHJvcCwgcGFzdGUgb3IgYWRkIEFQSSBjYWxsKS4NCiAgICAgICAgICAgIC8vIElmIHRoZSBzaW5nbGVGaWxlVXBsb2FkcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhpcyBjYWxsYmFjayB3aWxsIGJlDQogICAgICAgICAgICAvLyBjYWxsZWQgb25jZSBmb3IgZWFjaCBmaWxlIGluIHRoZSBzZWxlY3Rpb24gZm9yIFhIUiBmaWxlIHVwbG9hZHMsIGVsc2UNCiAgICAgICAgICAgIC8vIG9uY2UgZm9yIGVhY2ggZmlsZSBzZWxlY3Rpb24uDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gVGhlIHVwbG9hZCBzdGFydHMgd2hlbiB0aGUgc3VibWl0IG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBkYXRhIHBhcmFtZXRlci4NCiAgICAgICAgICAgIC8vIFRoZSBkYXRhIG9iamVjdCBjb250YWlucyBhIGZpbGVzIHByb3BlcnR5IGhvbGRpbmcgdGhlIGFkZGVkIGZpbGVzDQogICAgICAgICAgICAvLyBhbmQgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBwbHVnaW4gb3B0aW9ucyBhcyB3ZWxsIGFzIGRlZmluZSBhamF4IHNldHRpbmdzLg0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIExpc3RlbmVycyBmb3IgdGhpcyBjYWxsYmFjayBjYW4gYWxzbyBiZSBib3VuZCB0aGUgZm9sbG93aW5nIHdheToNCiAgICAgICAgICAgIC8vIC5iaW5kKCdmaWxldXBsb2FkYWRkJywgZnVuYyk7DQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gZGF0YS5zdWJtaXQoKSByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgYW5kIGFsbG93cyB0byBhdHRhY2ggYWRkaXRpb25hbA0KICAgICAgICAgICAgLy8gaGFuZGxlcnMgdXNpbmcgalF1ZXJ5J3MgRGVmZXJyZWQgY2FsbGJhY2tzOg0KICAgICAgICAgICAgLy8gZGF0YS5zdWJtaXQoKS5kb25lKGZ1bmMpLmZhaWwoZnVuYykuYWx3YXlzKGZ1bmMpOw0KICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkgew0KICAgICAgICAgICAgICAgIGlmIChkYXRhLmF1dG9VcGxvYWQgfHwgKGRhdGEuYXV0b1VwbG9hZCAhPT0gZmFsc2UgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmlsZXVwbG9hZCgnb3B0aW9uJywgJ2F1dG9VcGxvYWQnKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5wcm9jZXNzKCkuZG9uZShmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN1Ym1pdCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvLyBPdGhlciBjYWxsYmFja3M6DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3VibWl0IGV2ZW50IG9mIGVhY2ggZmlsZSB1cGxvYWQ6DQogICAgICAgICAgICAvLyBzdWJtaXQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6DQogICAgICAgICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2Fkc2VuZCcsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCB1cGxvYWRzOg0KICAgICAgICAgICAgLy8gZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIHVwbG9hZHM6DQogICAgICAgICAgICAvLyBmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6DQogICAgICAgICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRhbHdheXMnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZCBwcm9ncmVzcyBldmVudHM6DQogICAgICAgICAgICAvLyBwcm9ncmVzczogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBnbG9iYWwgdXBsb2FkIHByb2dyZXNzIGV2ZW50czoNCiAgICAgICAgICAgIC8vIHByb2dyZXNzYWxsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6DQogICAgICAgICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHN0YXJ0JywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWRzIHN0b3AsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RvcCBldmVudDoNCiAgICAgICAgICAgIC8vIHN0b3A6IGZ1bmN0aW9uIChlKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdG9wJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBjaGFuZ2UgZXZlbnRzIG9mIHRoZSBmaWxlSW5wdXQocyk6DQogICAgICAgICAgICAvLyBjaGFuZ2U6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOg0KICAgICAgICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRwYXN0ZScsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgZHJvcCBldmVudHMgb2YgdGhlIGRyb3Bab25lKHMpOg0KICAgICAgICAgICAgLy8gZHJvcDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyb3AnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyYWdvdmVyIGV2ZW50cyBvZiB0aGUgZHJvcFpvbmUocyk6DQogICAgICAgICAgICAvLyBkcmFnb3ZlcjogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDoNCiAgICAgICAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rc2VuZCcsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBjaHVuayB1cGxvYWRzOg0KICAgICAgICAgICAgLy8gY2h1bmtkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtkb25lJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWRzOg0KICAgICAgICAgICAgLy8gY2h1bmtmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6DQogICAgICAgICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rYWx3YXlzJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIFRoZSBwbHVnaW4gb3B0aW9ucyBhcmUgdXNlZCBhcyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoZSBhamF4IGNhbGxzLg0KICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgalF1ZXJ5IGFqYXggc2V0dGluZ3MgcmVxdWlyZWQgZm9yIHRoZSBmaWxlIHVwbG9hZHM6DQogICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsDQogICAgICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsDQogICAgICAgICAgICBjYWNoZTogZmFsc2UNCiAgICAgICAgfSwNCg0KICAgICAgICAvLyBBIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IHJlcXVpcmUgcmVpbml0aWFsaXppbmcgZXZlbnQgbGlzdGVuZXJzIGFuZC9vcg0KICAgICAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6DQogICAgICAgIF9zcGVjaWFsT3B0aW9uczogWw0KICAgICAgICAgICAgJ2ZpbGVJbnB1dCcsDQogICAgICAgICAgICAnZHJvcFpvbmUnLA0KICAgICAgICAgICAgJ3Bhc3RlWm9uZScsDQogICAgICAgICAgICAnbXVsdGlwYXJ0JywNCiAgICAgICAgICAgICdmb3JjZUlmcmFtZVRyYW5zcG9ydCcNCiAgICAgICAgXSwNCg0KICAgICAgICBfYmxvYlNsaWNlOiAkLnN1cHBvcnQuYmxvYlNsaWNlICYmIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzbGljZSA9IHRoaXMuc2xpY2UgfHwgdGhpcy53ZWJraXRTbGljZSB8fCB0aGlzLm1velNsaWNlOw0KICAgICAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSAoKERhdGUubm93KSA/IERhdGUubm93KCkgOiAobmV3IERhdGUoKSkuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gMDsNCiAgICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IDA7DQogICAgICAgICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7DQogICAgICAgICAgICAgICAgdmFyIHRpbWVEaWZmID0gbm93IC0gdGhpcy50aW1lc3RhbXA7DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJpdHJhdGUgfHwgIWludGVydmFsIHx8IHRpbWVEaWZmID4gaW50ZXJ2YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaXRyYXRlID0gKGxvYWRlZCAtIHRoaXMubG9hZGVkKSAqICgxMDAwIC8gdGltZURpZmYpICogODsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gbm93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iaXRyYXRlOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfaXNYSFJVcGxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICByZXR1cm4gIW9wdGlvbnMuZm9yY2VJZnJhbWVUcmFuc3BvcnQgJiYNCiAgICAgICAgICAgICAgICAoKCFvcHRpb25zLm11bHRpcGFydCAmJiAkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCkgfHwNCiAgICAgICAgICAgICAgICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgZm9ybURhdGE7DQogICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZm9ybURhdGEgPT09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mb3JtRGF0YShvcHRpb25zLmZvcm0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCQuaXNBcnJheShvcHRpb25zLmZvcm1EYXRhKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHsNCiAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IFtdOw0KICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1EYXRhOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIFtdOw0KICAgICAgICB9LA0KDQogICAgICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7DQogICAgICAgICAgICB2YXIgdG90YWwgPSAwOw0KICAgICAgICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHsNCiAgICAgICAgICAgICAgICB0b3RhbCArPSBmaWxlLnNpemUgfHwgMTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIHRvdGFsOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0UHJvZ3Jlc3NPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHsNCiAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHsNCiAgICAgICAgICAgICAgICBsb2FkZWQ6IDAsDQogICAgICAgICAgICAgICAgdG90YWw6IDAsDQogICAgICAgICAgICAgICAgYml0cmF0ZTogMA0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGlmIChvYmouX3Byb2dyZXNzKSB7DQogICAgICAgICAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBvYmouX3Byb2dyZXNzID0gcHJvZ3Jlc3M7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2luaXRSZXNwb25zZU9iamVjdDogZnVuY3Rpb24gKG9iaikgew0KICAgICAgICAgICAgdmFyIHByb3A7DQogICAgICAgICAgICBpZiAob2JqLl9yZXNwb25zZSkgew0KICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChvYmouX3Jlc3BvbnNlLmhhc093blByb3BlcnR5KHByb3ApKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqLl9yZXNwb25zZVtwcm9wXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgb2JqLl9yZXNwb25zZSA9IHt9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkgew0KICAgICAgICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkgew0KICAgICAgICAgICAgICAgIHZhciBub3cgPSAoKERhdGUubm93KSA/IERhdGUubm93KCkgOiAobmV3IERhdGUoKSkuZ2V0VGltZSgpKSwNCiAgICAgICAgICAgICAgICAgICAgbG9hZGVkOw0KICAgICAgICAgICAgICAgIGlmIChkYXRhLl90aW1lICYmIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgKG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwpICYmDQogICAgICAgICAgICAgICAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGRhdGEuX3RpbWUgPSBub3c7DQogICAgICAgICAgICAgICAgbG9hZGVkID0gTWF0aC5mbG9vcigNCiAgICAgICAgICAgICAgICAgICAgZS5sb2FkZWQgLyBlLnRvdGFsICogKGRhdGEuY2h1bmtTaXplIHx8IGRhdGEuX3Byb2dyZXNzLnRvdGFsKQ0KICAgICAgICAgICAgICAgICkgKyAoZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDApOw0KICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZQ0KICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBnbG9iYWwgbG9hZGVkIGNvdW50ZXI6DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkICs9IChsb2FkZWQgLSBkYXRhLl9wcm9ncmVzcy5sb2FkZWQpOw0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmJpdHJhdGUgPSB0aGlzLl9iaXRyYXRlVGltZXIuZ2V0Qml0cmF0ZSgNCiAgICAgICAgICAgICAgICAgICAgbm93LA0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQsDQogICAgICAgICAgICAgICAgICAgIGRhdGEuYml0cmF0ZUludGVydmFsDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDsNCiAgICAgICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5iaXRyYXRlID0gZGF0YS5iaXRyYXRlID0gZGF0YS5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoDQogICAgICAgICAgICAgICAgICAgIG5vdywNCiAgICAgICAgICAgICAgICAgICAgbG9hZGVkLA0KICAgICAgICAgICAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbA0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXQNCiAgICAgICAgICAgICAgICAvLyB0byB0aGUgZmlsZSBzaXplKHMpIG9mIHRoZSBjdXJyZW50IHVwbG9hZCBhbmQgYSBsb2FkZWQgZGF0YQ0KICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5IGNhbGN1bGF0ZWQgYWNjb3JkaW5nbHk6DQogICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcigncHJvZ3Jlc3MnLCBlLCBkYXRhKTsNCiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgZ2xvYmFsIHByb2dyZXNzIGV2ZW50IGZvciBhbGwgY3VycmVudCBmaWxlIHVwbG9hZHMsDQogICAgICAgICAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczoNCiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKCdwcm9ncmVzc2FsbCcsIGUsIHRoaXMuX3Byb2dyZXNzKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsDQogICAgICAgICAgICAgICAgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7DQogICAgICAgICAgICAvLyBBY2Nlc3NzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzDQogICAgICAgICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDoNCiAgICAgICAgICAgIGlmICh4aHIudXBsb2FkKSB7DQogICAgICAgICAgICAgICAgJCh4aHIudXBsb2FkKS5iaW5kKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBvZSA9IGUub3JpZ2luYWxFdmVudDsNCiAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjoNCiAgICAgICAgICAgICAgICAgICAgZS5sZW5ndGhDb21wdXRhYmxlID0gb2UubGVuZ3RoQ29tcHV0YWJsZTsNCiAgICAgICAgICAgICAgICAgICAgZS5sb2FkZWQgPSBvZS5sb2FkZWQ7DQogICAgICAgICAgICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25Qcm9ncmVzcyhlLCBvcHRpb25zKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBvcHRpb25zLnhociA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhocjsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9pc0luc3RhbmNlT2Y6IGZ1bmN0aW9uICh0eXBlLCBvYmopIHsNCiAgICAgICAgICAgIC8vIENyb3NzLWZyYW1lIGluc3RhbmNlb2YgY2hlY2sNCiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIHR5cGUgKyAnXSc7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2luaXRYSFJEYXRhOiBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGZvcm1EYXRhLA0KICAgICAgICAgICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLA0KICAgICAgICAgICAgICAgIC8vIElnbm9yZSBub24tbXVsdGlwYXJ0IHNldHRpbmcgaWYgbm90IHN1cHBvcnRlZDoNCiAgICAgICAgICAgICAgICBtdWx0aXBhcnQgPSBvcHRpb25zLm11bHRpcGFydCB8fCAhJC5zdXBwb3J0LnhockZpbGVVcGxvYWQsDQogICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gb3B0aW9ucy5wYXJhbU5hbWVbMF07DQogICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307DQogICAgICAgICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtUmFuZ2UnXSA9IG9wdGlvbnMuY29udGVudFJhbmdlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCFtdWx0aXBhcnQgfHwgb3B0aW9ucy5ibG9iIHx8ICF0aGlzLl9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1EaXNwb3NpdGlvbiddID0gJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSInICsNCiAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKGZpbGUubmFtZSkgKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoIW11bHRpcGFydCkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGU7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gb3B0aW9ucy5ibG9iIHx8IGZpbGU7DQogICAgICAgICAgICB9IGVsc2UgaWYgKCQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpIHsNCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wb3N0TWVzc2FnZSkgew0KICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cucG9zdE1lc3NhZ2UgZG9lcyBub3QgYWxsb3cgc2VuZGluZyBGb3JtRGF0YQ0KICAgICAgICAgICAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG8NCiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZvcm1EYXRhIGFycmF5IGFuZCBsZXQgdGhlIHBvc3RNZXNzYWdlIHdpbmRvdw0KICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIEZvcm1EYXRhIG9iamVjdCBvdXQgb2YgdGhpcyBhcnJheToNCiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmxvYikgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLmJsb2INCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLnBhcmFtTmFtZVtpbmRleF0gfHwgcGFyYW1OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5faXNJbnN0YW5jZU9mKCdGb3JtRGF0YScsIG9wdGlvbnMuZm9ybURhdGEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHRoaXMuX2dldEZvcm1EYXRhKG9wdGlvbnMpLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpZWxkLm5hbWUsIGZpZWxkLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJhbU5hbWUsIG9wdGlvbnMuYmxvYiwgZmlsZS5uYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrIGFsbG93cyB0aGUgdGVzdHMgdG8gcnVuIHdpdGgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkdW1teSBvYmplY3RzOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5faXNJbnN0YW5jZU9mKCdCbG9iJywgZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdIHx8IHBhcmFtTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGEgPSBmb3JtRGF0YTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIEJsb2IgcmVmZXJlbmNlIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgZnJlZSBtZW1vcnk6DQogICAgICAgICAgICBvcHRpb25zLmJsb2IgPSBudWxsOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTsNCiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0Og0KICAgICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTsNCiAgICAgICAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YToNCiAgICAgICAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTsNCiAgICAgICAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOg0KICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JtRGF0YS5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5yZWRpcmVjdA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0RGF0YVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICAgICAgaWYgKHRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpKSB7DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaHVua2VkVXBsb2FkKG9wdGlvbnMsIHRydWUpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5kYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0WEhSRGF0YShvcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvcHRpb25zKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucG9zdE1lc3NhZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGUNCiAgICAgICAgICAgICAgICAgICAgLy8gcG9zdE1lc3NhZ2UgdHJhbnNwb3J0Og0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlID0gJ3Bvc3RtZXNzYWdlICcgKyAob3B0aW9ucy5kYXRhVHlwZSB8fCAnJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldFBhcmFtTmFtZTogZnVuY3Rpb24gKG9wdGlvbnMpIHsNCiAgICAgICAgICAgIHZhciBmaWxlSW5wdXQgPSAkKG9wdGlvbnMuZmlsZUlucHV0KSwNCiAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBvcHRpb25zLnBhcmFtTmFtZTsNCiAgICAgICAgICAgIGlmICghcGFyYW1OYW1lKSB7DQogICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gW107DQogICAgICAgICAgICAgICAgZmlsZUlucHV0LmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsDQogICAgICAgICAgICAgICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUucHVzaChuYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBbZmlsZUlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXSddOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7DQogICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gW3BhcmFtTmFtZV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gcGFyYW1OYW1lOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0Rm9ybVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICAgICAgLy8gUmV0cmlldmUgbWlzc2luZyBvcHRpb25zIGZyb20gdGhlIGlucHV0IGZpZWxkIGFuZCB0aGUNCiAgICAgICAgICAgIC8vIGFzc29jaWF0ZWQgZm9ybSwgaWYgYXZhaWxhYmxlOg0KICAgICAgICAgICAgaWYgKCFvcHRpb25zLmZvcm0gfHwgIW9wdGlvbnMuZm9ybS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7DQogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdpdmVuIGZpbGUgaW5wdXQgZG9lc24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9ybSwNCiAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIGRlZmF1bHQgd2lkZ2V0IGZpbGUgaW5wdXQncyBmb3JtOg0KICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm0gPSAkKHRoaXMub3B0aW9ucy5maWxlSW5wdXQucHJvcCgnZm9ybScpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTsNCiAgICAgICAgICAgIGlmICghb3B0aW9ucy51cmwpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMuZm9ybS5wcm9wKCdhY3Rpb24nKSB8fCBsb2NhdGlvbi5ocmVmOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gVGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgbXVzdCBiZSAiUE9TVCIgb3IgIlBVVCI6DQogICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAob3B0aW9ucy50eXBlIHx8IG9wdGlvbnMuZm9ybS5wcm9wKCdtZXRob2QnKSB8fCAnJykNCiAgICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnR5cGUgIT09ICdQT1NUJyAmJiBvcHRpb25zLnR5cGUgIT09ICdQVVQnICYmDQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BBVENIJykgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghb3B0aW9ucy5mb3JtQWNjZXB0Q2hhcnNldCkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBfZ2V0QUpBWFNldHRpbmdzOiBmdW5jdGlvbiAoZGF0YSkgew0KICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKTsNCiAgICAgICAgICAgIHRoaXMuX2luaXRGb3JtU2V0dGluZ3Mob3B0aW9ucyk7DQogICAgICAgICAgICB0aGlzLl9pbml0RGF0YVNldHRpbmdzKG9wdGlvbnMpOw0KICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8galF1ZXJ5IDEuNiBkb2Vzbid0IHByb3ZpZGUgLnN0YXRlKCksDQogICAgICAgIC8vIHdoaWxlIGpRdWVyeSAxLjgrIHJlbW92ZWQgLmlzUmVqZWN0ZWQoKSBhbmQgLmlzUmVzb2x2ZWQoKToNCiAgICAgICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkgew0KICAgICAgICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnN0YXRlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGVmZXJyZWQuaXNSZXNvbHZlZCgpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICdyZXNvbHZlZCc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGVmZXJyZWQuaXNSZWplY3RlZCgpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJ3BlbmRpbmcnOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIE1hcHMganFYSFIgY2FsbGJhY2tzIHRvIHRoZSBlcXVpdmFsZW50DQogICAgICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0Og0KICAgICAgICBfZW5oYW5jZVByb21pc2U6IGZ1bmN0aW9uIChwcm9taXNlKSB7DQogICAgICAgICAgICBwcm9taXNlLnN1Y2Nlc3MgPSBwcm9taXNlLmRvbmU7DQogICAgICAgICAgICBwcm9taXNlLmVycm9yID0gcHJvbWlzZS5mYWlsOw0KICAgICAgICAgICAgcHJvbWlzZS5jb21wbGV0ZSA9IHByb21pc2UuYWx3YXlzOw0KICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGgNCiAgICAgICAgLy8gdGhlIGpxWEhSIG1ldGhvZHMgYWJvcnQsIHN1Y2Nlc3MsIGVycm9yIGFuZCBjb21wbGV0ZToNCiAgICAgICAgX2dldFhIUlByb21pc2U6IGZ1bmN0aW9uIChyZXNvbHZlT3JSZWplY3QsIGNvbnRleHQsIGFyZ3MpIHsNCiAgICAgICAgICAgIHZhciBkZmQgPSAkLkRlZmVycmVkKCksDQogICAgICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCk7DQogICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLm9wdGlvbnMuY29udGV4dCB8fCBwcm9taXNlOw0KICAgICAgICAgICAgaWYgKHJlc29sdmVPclJlamVjdCA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlV2l0aChjb250ZXh0LCBhcmdzKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZU9yUmVqZWN0ID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlOw0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIEFkZHMgY29udmVuaWVuY2UgbWV0aG9kcyB0byB0aGUgZGF0YSBjYWxsYmFjayBhcmd1bWVudDoNCiAgICAgICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywNCiAgICAgICAgICAgICAgICBnZXRQcm9taXNlID0gZnVuY3Rpb24gKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBbZGF0YV0pLnByb21pc2UoKTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgZGF0YS5wcm9jZXNzID0gZnVuY3Rpb24gKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKSB7DQogICAgICAgICAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5fcHJvY2Vzc1F1ZXVlID0gdGhpcy5fcHJvY2Vzc1F1ZXVlID0NCiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLl9wcm9jZXNzUXVldWUgfHwgZ2V0UHJvbWlzZSh0aGlzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShyZXNvbHZlRnVuYywgcmVqZWN0RnVuYyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzUXVldWUgfHwgZ2V0UHJvbWlzZSh0aGlzKTsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSgpICE9PSAncGVuZGluZycpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ3N1Ym1pdCcsIGUsIHRoaXMpICE9PSBmYWxzZSkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX29uU2VuZChlLCB0aGlzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuanFYSFIgfHwgdGhhdC5fZ2V0WEhSUHJvbWlzZSgpOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGRhdGEuYWJvcnQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuanFYSFIpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuanFYSFIuYWJvcnQoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuX2dldFhIUlByb21pc2UoKTsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmpxWEhSKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc1F1ZXVlKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuX3Byb2Nlc3NRdWV1ZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGRhdGEucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGRhdGEucmVzcG9uc2UgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSwNCg0KICAgICAgICAvLyBQYXJzZXMgdGhlIFJhbmdlIGhlYWRlciBmcm9tIHRoZSBzZXJ2ZXIgcmVzcG9uc2UNCiAgICAgICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOg0KICAgICAgICBfZ2V0VXBsb2FkZWRCeXRlczogZnVuY3Rpb24gKGpxWEhSKSB7DQogICAgICAgICAgICB2YXIgcmFuZ2UgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcignUmFuZ2UnKSwNCiAgICAgICAgICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksDQogICAgICAgICAgICAgICAgdXBwZXJCeXRlc1BvcyA9IHBhcnRzICYmIHBhcnRzLmxlbmd0aCA+IDEgJiYNCiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQocGFydHNbMV0sIDEwKTsNCiAgICAgICAgICAgIHJldHVybiB1cHBlckJ5dGVzUG9zICYmIHVwcGVyQnl0ZXNQb3MgKyAxOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIFVwbG9hZHMgYSBmaWxlIGluIG11bHRpcGxlLCBzZXF1ZW50aWFsIHJlcXVlc3RzDQogICAgICAgIC8vIGJ5IHNwbGl0dGluZyB0aGUgZmlsZSB1cCBpbiBtdWx0aXBsZSBibG9iIGNodW5rcy4NCiAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZQ0KICAgICAgICAvLyBzaG91bGQgYmUgdXBsb2FkZWQgaW4gY2h1bmtzLCBidXQgZG9lcyBub3QgaW52b2tlIGFueQ0KICAgICAgICAvLyB1cGxvYWQgcmVxdWVzdHM6DQogICAgICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHsNCiAgICAgICAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwOw0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLA0KICAgICAgICAgICAgICAgIGZzID0gZmlsZS5zaXplLA0KICAgICAgICAgICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLA0KICAgICAgICAgICAgICAgIG1jcyA9IG9wdGlvbnMubWF4Q2h1bmtTaXplIHx8IGZzLA0KICAgICAgICAgICAgICAgIHNsaWNlID0gdGhpcy5fYmxvYlNsaWNlLA0KICAgICAgICAgICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSwNCiAgICAgICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSwNCiAgICAgICAgICAgICAgICBqcVhIUiwNCiAgICAgICAgICAgICAgICB1cGxvYWQ7DQogICAgICAgICAgICBpZiAoISh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSAmJiBzbGljZSAmJiAodWIgfHwgbWNzIDwgZnMpKSB8fA0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGEpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodGVzdE9ubHkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh1YiA+PSBmcykgew0KICAgICAgICAgICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WEhSUHJvbWlzZSgNCiAgICAgICAgICAgICAgICAgICAgZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dCwNCiAgICAgICAgICAgICAgICAgICAgW251bGwsICdlcnJvcicsIGZpbGUuZXJyb3JdDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIFRoZSBjaHVuayB1cGxvYWQgbWV0aG9kOg0KICAgICAgICAgICAgdXBsb2FkID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6DQogICAgICAgICAgICAgICAgdmFyIG8gPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyksDQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7DQogICAgICAgICAgICAgICAgby5ibG9iID0gc2xpY2UuY2FsbCgNCiAgICAgICAgICAgICAgICAgICAgZmlsZSwNCiAgICAgICAgICAgICAgICAgICAgdWIsDQogICAgICAgICAgICAgICAgICAgIHViICsgbWNzLA0KICAgICAgICAgICAgICAgICAgICBmaWxlLnR5cGUNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZg0KICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIGRhdGEgcHJvY2Vzc2luZzoNCiAgICAgICAgICAgICAgICBvLmNodW5rU2l6ZSA9IG8uYmxvYi5zaXplOw0KICAgICAgICAgICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6DQogICAgICAgICAgICAgICAgby5jb250ZW50UmFuZ2UgPSAnYnl0ZXMgJyArIHViICsgJy0nICsNCiAgICAgICAgICAgICAgICAgICAgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzOw0KICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIHVwbG9hZCBkYXRhICh0aGUgYmxvYiBhbmQgcG90ZW50aWFsIGZvcm0gZGF0YSk6DQogICAgICAgICAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7DQogICAgICAgICAgICAgICAgLy8gQWRkIHByb2dyZXNzIGxpc3RlbmVycyBmb3IgdGhpcyBjaHVuayB1cGxvYWQ6DQogICAgICAgICAgICAgICAgdGhhdC5faW5pdFByb2dyZXNzTGlzdGVuZXIobyk7DQogICAgICAgICAgICAgICAganFYSFIgPSAoKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlLCBvLmNvbnRleHQpKQ0KICAgICAgICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikgew0KICAgICAgICAgICAgICAgICAgICAgICAgdWIgPSB0aGF0Ll9nZXRVcGxvYWRlZEJ5dGVzKGpxWEhSKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1YiArIG8uY2h1bmtTaXplKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50DQogICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWQNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX29uUHJvZ3Jlc3MoJC5FdmVudCgncHJvZ3Jlc3MnLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiB1YiAtIG8udXBsb2FkZWRCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBvKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG8udXBsb2FkZWRCeXRlcyA9IHViOw0KICAgICAgICAgICAgICAgICAgICAgICAgby5yZXN1bHQgPSByZXN1bHQ7DQogICAgICAgICAgICAgICAgICAgICAgICBvLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgby5qcVhIUiA9IGpxWEhSOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtkb25lJywgbnVsbCwgbyk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2Fsd2F5cycsIG51bGwsIG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHViIDwgZnMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlIHVwbG9hZCBub3QgeWV0IGNvbXBsZXRlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlV2l0aCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUl0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBvLmpxWEhSID0ganFYSFI7DQogICAgICAgICAgICAgICAgICAgICAgICBvLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgby5lcnJvclRocm93biA9IGVycm9yVGhyb3duOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtmYWlsJywgbnVsbCwgbyk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2Fsd2F5cycsIG51bGwsIG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGZkLnJlamVjdFdpdGgoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dDQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTsNCiAgICAgICAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdXBsb2FkKCk7DQogICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfYmVmb3JlU2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDApIHsNCiAgICAgICAgICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0cw0KICAgICAgICAgICAgICAgIC8vIGFuZCBubyBvdGhlciB1cGxvYWRzIGFyZSBjdXJyZW50bHkgcnVubmluZywNCiAgICAgICAgICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0YXJ0IGV2ZW50Og0KICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7DQogICAgICAgICAgICAgICAgLy8gU2V0IHRpbWVyIGZvciBnbG9iYWwgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjoNCiAgICAgICAgICAgICAgICB0aGlzLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhpcy5fQml0cmF0ZVRpbWVyKCk7DQogICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkID0gdGhpcy5fcHJvZ3Jlc3MudG90YWwgPSAwOw0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmJpdHJhdGUgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250YWluZXIgb2JqZWN0cyBmb3IgdGhlIC5yZXNwb25zZSgpIGFuZA0KICAgICAgICAgICAgLy8gLnByb2dyZXNzKCkgbWV0aG9kcyBvbiB0aGUgZGF0YSBvYmplY3QgYXJlIGF2YWlsYWJsZQ0KICAgICAgICAgICAgLy8gYW5kIHJlc2V0IHRvIHRoZWlyIGluaXRpYWwgc3RhdGU6DQogICAgICAgICAgICB0aGlzLl9pbml0UmVzcG9uc2VPYmplY3QoZGF0YSk7DQogICAgICAgICAgICB0aGlzLl9pbml0UHJvZ3Jlc3NPYmplY3QoZGF0YSk7DQogICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGRhdGEudXBsb2FkZWRCeXRlcyB8fCAwOw0KICAgICAgICAgICAgZGF0YS5fcHJvZ3Jlc3MudG90YWwgPSBkYXRhLnRvdGFsID0gdGhpcy5fZ2V0VG90YWwoZGF0YS5maWxlcykgfHwgMTsNCiAgICAgICAgICAgIGRhdGEuX3Byb2dyZXNzLmJpdHJhdGUgPSBkYXRhLmJpdHJhdGUgPSAwOw0KICAgICAgICAgICAgdGhpcy5fYWN0aXZlICs9IDE7DQogICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgdmFsdWVzOg0KICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkICs9IGRhdGEubG9hZGVkOw0KICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgKz0gZGF0YS50b3RhbDsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykgew0KICAgICAgICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsDQogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBvcHRpb25zLl9yZXNwb25zZTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLl9wcm9ncmVzcy5sb2FkZWQgPCB0b3RhbCkgew0KICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50DQogICAgICAgICAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOg0KICAgICAgICAgICAgICAgIHRoaXMuX29uUHJvZ3Jlc3MoJC5FdmVudCgncHJvZ3Jlc3MnLCB7DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsDQogICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdG90YWwsDQogICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0b3RhbA0KICAgICAgICAgICAgICAgIH0pLCBvcHRpb25zKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdCA9IG9wdGlvbnMucmVzdWx0ID0gcmVzdWx0Ow0KICAgICAgICAgICAgcmVzcG9uc2UudGV4dFN0YXR1cyA9IG9wdGlvbnMudGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7DQogICAgICAgICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjsNCiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ2RvbmUnLCBudWxsLCBvcHRpb25zKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25GYWlsOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duLCBvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBvcHRpb25zLl9yZXNwb25zZTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlY2FsY3VsYXRlUHJvZ3Jlc3MpIHsNCiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb20NCiAgICAgICAgICAgICAgICAvLyB0aGUgZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uOg0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCAtPSBvcHRpb25zLl9wcm9ncmVzcy5sb2FkZWQ7DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjsNCiAgICAgICAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOw0KICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247DQogICAgICAgICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX29uQWx3YXlzOiBmdW5jdGlvbiAoanFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cywganFYSFJvckVycm9yLCBvcHRpb25zKSB7DQogICAgICAgICAgICAvLyBqcVhIUm9yUmVzdWx0LCB0ZXh0U3RhdHVzIGFuZCBqcVhIUm9yRXJyb3IgYXJlIGFkZGVkIHRvIHRoZQ0KICAgICAgICAgICAgLy8gb3B0aW9ucyBvYmplY3QgdmlhIGRvbmUgYW5kIGZhaWwgY2FsbGJhY2tzDQogICAgICAgICAgICB0aGlzLl90cmlnZ2VyKCdhbHdheXMnLCBudWxsLCBvcHRpb25zKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25TZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkgew0KICAgICAgICAgICAgaWYgKCFkYXRhLnN1Ym1pdCkgew0KICAgICAgICAgICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywNCiAgICAgICAgICAgICAgICBqcVhIUiwNCiAgICAgICAgICAgICAgICBhYm9ydGVkLA0KICAgICAgICAgICAgICAgIHNsb3QsDQogICAgICAgICAgICAgICAgcGlwZSwNCiAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhhdC5fZ2V0QUpBWFNldHRpbmdzKGRhdGEpLA0KICAgICAgICAgICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRpbWVyIGZvciBiaXRyYXRlIHByb2dyZXNzIGNhbGN1bGF0aW9uOg0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7DQogICAgICAgICAgICAgICAgICAgIGpxWEhSID0ganFYSFIgfHwgKA0KICAgICAgICAgICAgICAgICAgICAgICAgKChhYm9ydGVkIHx8IHRoYXQuX3RyaWdnZXIoJ3NlbmQnLCBlLCBvcHRpb25zKSA9PT0gZmFsc2UpICYmDQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlLCBvcHRpb25zLmNvbnRleHQsIGFib3J0ZWQpKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fY2h1bmtlZFVwbG9hZChvcHRpb25zKSB8fCAkLmFqYXgob3B0aW9ucykNCiAgICAgICAgICAgICAgICAgICAgKS5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkRvbmUocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucyk7DQogICAgICAgICAgICAgICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7DQogICAgICAgICAgICAgICAgICAgIH0pLmFsd2F5cyhmdW5jdGlvbiAoanFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cywganFYSFJvckVycm9yKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkFsd2F5cygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0dXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFJvckVycm9yLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zZW5kaW5nIC09IDE7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzID4gdGhhdC5fc2VuZGluZykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXMgbm90IGJlZW4gYWJvcnRlZDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QucmVzb2x2ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3RvcCBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgd2hlbiBhbGwgdXBsb2FkcyBoYXZlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVlbiBjb21wbGV0ZWQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RvcCBldmVudDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHRoaXMuX2JlZm9yZVNlbmQoZSwgb3B0aW9ucyk7DQogICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcXVlbnRpYWxVcGxvYWRzIHx8DQogICAgICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyAmJg0KICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA8PSB0aGlzLl9zZW5kaW5nKSkgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2xvdHMucHVzaChzbG90KTsNCiAgICAgICAgICAgICAgICAgICAgcGlwZSA9IHNsb3QucGlwZShzZW5kKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlLnBpcGUoc2VuZCwgc2VuZCk7DQogICAgICAgICAgICAgICAgICAgIHBpcGUgPSB0aGlzLl9zZXF1ZW5jZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsDQogICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMgZGVsZWdhdGVkIHRvIHRoZSBqcVhIUiBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgdXBsb2FkLA0KICAgICAgICAgICAgICAgIC8vIGFuZCBqcVhIUiBjYWxsYmFja3MgbWFwcGVkIHRvIHRoZSBlcXVpdmFsZW50IFByb21pc2UgbWV0aG9kczoNCiAgICAgICAgICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICBhYm9ydGVkID0gW3VuZGVmaW5lZCwgJ2Fib3J0JywgJ2Fib3J0J107DQogICAgICAgICAgICAgICAgICAgIGlmICghanFYSFIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC5yZWplY3RXaXRoKG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VuZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpOw0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHBpcGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHNlbmQoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZSwNCiAgICAgICAgICAgICAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSksDQogICAgICAgICAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcywNCiAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSB0aGlzLl9nZXRQYXJhbU5hbWUob3B0aW9ucyksDQogICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0LA0KICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlLA0KICAgICAgICAgICAgICAgIGZpbGVTZXQsDQogICAgICAgICAgICAgICAgaTsNCiAgICAgICAgICAgIGlmICghKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQpIHx8DQogICAgICAgICAgICAgICAgICAgICF0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkgew0KICAgICAgICAgICAgICAgIGZpbGVTZXQgPSBbZGF0YS5maWxlc107DQogICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07DQogICAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0KSB7DQogICAgICAgICAgICAgICAgZmlsZVNldCA9IFtdOw0KICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldCA9IFtdOw0KICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmZpbGVzLmxlbmd0aDsgaSArPSBsaW1pdCkgew0KICAgICAgICAgICAgICAgICAgICBmaWxlU2V0LnB1c2goZGF0YS5maWxlcy5zbGljZShpLCBpICsgbGltaXQpKTsNCiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWUuc2xpY2UoaSwgaSArIGxpbWl0KTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbU5hbWVTbGljZS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlID0gcGFyYW1OYW1lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldCA9IHBhcmFtTmFtZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGRhdGEub3JpZ2luYWxGaWxlcyA9IGRhdGEuZmlsZXM7DQogICAgICAgICAgICAkLmVhY2goZmlsZVNldCB8fCBkYXRhLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICB2YXIgbmV3RGF0YSA9ICQuZXh0ZW5kKHt9LCBkYXRhKTsNCiAgICAgICAgICAgICAgICBuZXdEYXRhLmZpbGVzID0gZmlsZVNldCA/IGVsZW1lbnQgOiBbZWxlbWVudF07DQogICAgICAgICAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdOw0KICAgICAgICAgICAgICAgIHRoYXQuX2luaXRSZXNwb25zZU9iamVjdChuZXdEYXRhKTsNCiAgICAgICAgICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NPYmplY3QobmV3RGF0YSk7DQogICAgICAgICAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpOw0KICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoYXQuX3RyaWdnZXIoJ2FkZCcsIGUsIG5ld0RhdGEpOw0KICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgIH0sDQoNCiAgICAgICAgX3JlcGxhY2VGaWxlSW5wdXQ6IGZ1bmN0aW9uIChpbnB1dCkgew0KICAgICAgICAgICAgdmFyIGlucHV0Q2xvbmUgPSBpbnB1dC5jbG9uZSh0cnVlKTsNCiAgICAgICAgICAgICQoJzxmb3JtPjwvZm9ybT4nKS5hcHBlbmQoaW5wdXRDbG9uZSlbMF0ucmVzZXQoKTsNCiAgICAgICAgICAgIC8vIERldGFjaGluZyBhbGxvd3MgdG8gaW5zZXJ0IHRoZSBmaWxlSW5wdXQgb24gYW5vdGhlciBmb3JtDQogICAgICAgICAgICAvLyB3aXRob3V0IGxvb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6DQogICAgICAgICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTsNCiAgICAgICAgICAgIC8vIEF2b2lkIG1lbW9yeSBsZWFrcyB3aXRoIHRoZSBkZXRhY2hlZCBmaWxlIGlucHV0Og0KICAgICAgICAgICAgJC5jbGVhbkRhdGEoaW5wdXQudW5iaW5kKCdyZW1vdmUnKSk7DQogICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBvcmlnaW5hbCBmaWxlIGlucHV0IGVsZW1lbnQgaW4gdGhlIGZpbGVJbnB1dA0KICAgICAgICAgICAgLy8gZWxlbWVudHMgc2V0IHdpdGggdGhlIGNsb25lLCB3aGljaCBoYXMgYmVlbiBjb3BpZWQgaW5jbHVkaW5nDQogICAgICAgICAgICAvLyBldmVudCBoYW5kbGVyczoNCiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5maWxlSW5wdXQgPSB0aGlzLm9wdGlvbnMuZmlsZUlucHV0Lm1hcChmdW5jdGlvbiAoaSwgZWwpIHsNCiAgICAgICAgICAgICAgICBpZiAoZWwgPT09IGlucHV0WzBdKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dENsb25lWzBdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gZWw7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLA0KICAgICAgICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6DQogICAgICAgICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkgew0KICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGlucHV0Q2xvbmU7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2hhbmRsZUZpbGVUcmVlRW50cnk6IGZ1bmN0aW9uIChlbnRyeSwgcGF0aCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSwNCiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiAhZS5lbnRyeSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZS5lbnRyeSA9IGVudHJ5Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlICQud2hlbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIG9uZQ0KICAgICAgICAgICAgICAgICAgICAvLyBEZWZlcnJlZCBpcyByZWplY3RlZCwgd2UgdXNlIHJlc29sdmUgaW5zdGVhZC4NCiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXMNCiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgcmV0dXJuZWQgdG9nZXRoZXIgaW4gb25lIHNldDoNCiAgICAgICAgICAgICAgICAgICAgZGZkLnJlc29sdmUoW2VdKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIGRpclJlYWRlcjsNCiAgICAgICAgICAgIHBhdGggPSBwYXRoIHx8ICcnOw0KICAgICAgICAgICAgaWYgKGVudHJ5LmlzRmlsZSkgew0KICAgICAgICAgICAgICAgIGlmIChlbnRyeS5fZmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzUNCiAgICAgICAgICAgICAgICAgICAgZW50cnkuX2ZpbGUucmVsYXRpdmVQYXRoID0gcGF0aDsNCiAgICAgICAgICAgICAgICAgICAgZGZkLnJlc29sdmUoZW50cnkuX2ZpbGUpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUucmVsYXRpdmVQYXRoID0gcGF0aDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHsNCiAgICAgICAgICAgICAgICBkaXJSZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTsNCiAgICAgICAgICAgICAgICBkaXJSZWFkZXIucmVhZEVudHJpZXMoZnVuY3Rpb24gKGVudHJpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKA0KICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKyBlbnRyeS5uYW1lICsgJy8nDQogICAgICAgICAgICAgICAgICAgICkuZG9uZShmdW5jdGlvbiAoZmlsZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKGZpbGVzKTsNCiAgICAgICAgICAgICAgICAgICAgfSkuZmFpbChlcnJvckhhbmRsZXIpOw0KICAgICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIC8vIFJldHVybiBhbiBlbXB5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zDQogICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhhbiBmaWxlcyBvciBkaXJlY3RvcmllczoNCiAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShbXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZGZkLnByb21pc2UoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgcmV0dXJuICQud2hlbi5hcHBseSgNCiAgICAgICAgICAgICAgICAkLA0KICAgICAgICAgICAgICAgICQubWFwKGVudHJpZXMsIGZ1bmN0aW9uIChlbnRyeSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5faGFuZGxlRmlsZVRyZWVFbnRyeShlbnRyeSwgcGF0aCk7DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICkucGlwZShmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoDQogICAgICAgICAgICAgICAgICAgIFtdLA0KICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikgew0KICAgICAgICAgICAgZGF0YVRyYW5zZmVyID0gZGF0YVRyYW5zZmVyIHx8IHt9Ow0KICAgICAgICAgICAgdmFyIGl0ZW1zID0gZGF0YVRyYW5zZmVyLml0ZW1zOw0KICAgICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fA0KICAgICAgICAgICAgICAgICAgICBpdGVtc1swXS5nZXRBc0VudHJ5KSkgew0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoDQogICAgICAgICAgICAgICAgICAgICQubWFwKGl0ZW1zLCBmdW5jdGlvbiAoaXRlbSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ud2Via2l0R2V0QXNFbnRyeSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuX2ZpbGUgPSBpdGVtLmdldEFzRmlsZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBc0VudHJ5KCk7DQogICAgICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZSgNCiAgICAgICAgICAgICAgICAkLm1ha2VBcnJheShkYXRhVHJhbnNmZXIuZmlsZXMpDQogICAgICAgICAgICApLnByb21pc2UoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHsNCiAgICAgICAgICAgIGZpbGVJbnB1dCA9ICQoZmlsZUlucHV0KTsNCiAgICAgICAgICAgIHZhciBlbnRyaWVzID0gZmlsZUlucHV0LnByb3AoJ3dlYmtpdEVudHJpZXMnKSB8fA0KICAgICAgICAgICAgICAgICAgICBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLA0KICAgICAgICAgICAgICAgIGZpbGVzLA0KICAgICAgICAgICAgICAgIHZhbHVlOw0KICAgICAgICAgICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7DQogICAgICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsZUlucHV0LnByb3AoJ3ZhbHVlJyk7DQogICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoW10pLnByb21pc2UoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90DQogICAgICAgICAgICAgICAgLy8gc3VwcG9ydCB0aGUgRmlsZSBBUEkgYW5kIHdlIGFkZCBhIHBzZXVkbyBGaWxlIG9iamVjdCB3aXRoDQogICAgICAgICAgICAgICAgLy8gdGhlIGlucHV0IHZhbHVlIGFzIG5hbWUgd2l0aCBwYXRoIGluZm9ybWF0aW9uIHJlbW92ZWQ6DQogICAgICAgICAgICAgICAgZmlsZXMgPSBbe25hbWU6IHZhbHVlLnJlcGxhY2UoL14uKlxcLywgJycpfV07DQogICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVzWzBdLm5hbWUgPT09IHVuZGVmaW5lZCAmJiBmaWxlc1swXS5maWxlTmFtZSkgew0KICAgICAgICAgICAgICAgIC8vIEZpbGUgbm9ybWFsaXphdGlvbiBmb3IgU2FmYXJpIDQgYW5kIEZpcmVmb3ggMzoNCiAgICAgICAgICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkgew0KICAgICAgICAgICAgICAgICAgICBmaWxlLm5hbWUgPSBmaWxlLmZpbGVOYW1lOw0KICAgICAgICAgICAgICAgICAgICBmaWxlLnNpemUgPSBmaWxlLmZpbGVTaXplOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKGZpbGVzKS5wcm9taXNlKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7DQogICAgICAgICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzKGZpbGVJbnB1dCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJC53aGVuLmFwcGx5KA0KICAgICAgICAgICAgICAgICQsDQogICAgICAgICAgICAgICAgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykNCiAgICAgICAgICAgICkucGlwZShmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoDQogICAgICAgICAgICAgICAgICAgIFtdLA0KICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGRhdGEgPSB7DQogICAgICAgICAgICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksDQogICAgICAgICAgICAgICAgICAgIGZvcm06ICQoZS50YXJnZXQuZm9ybSkNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHsNCiAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7DQogICAgICAgICAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5yZXBsYWNlRmlsZUlucHV0KSB7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX3JlcGxhY2VGaWxlSW5wdXQoZGF0YS5maWxlSW5wdXQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGhhdC5fdHJpZ2dlcignY2hhbmdlJywgZSwgZGF0YSkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9LA0KDQogICAgICAgIF9vblBhc3RlOiBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgdmFyIGl0ZW1zID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmDQogICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLml0ZW1zLA0KICAgICAgICAgICAgICAgIGRhdGEgPSB7ZmlsZXM6IFtdfTsNCiAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlICYmIGl0ZW0uZ2V0QXNGaWxlKCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzLnB1c2goZmlsZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcigncGFzdGUnLCBlLCBkYXRhKSA9PT0gZmFsc2UgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQWRkKGUsIGRhdGEpID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9vbkRyb3A6IGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICBlLmRhdGFUcmFuc2ZlciA9IGUub3JpZ2luYWxFdmVudCAmJiBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyOw0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyLA0KICAgICAgICAgICAgICAgIGRhdGEgPSB7fTsNCiAgICAgICAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgdGhpcy5fZ2V0RHJvcHBlZEZpbGVzKGRhdGFUcmFuc2ZlcikuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykgew0KICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll90cmlnZ2VyKCdkcm9wJywgZSwgZGF0YSkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9vbkRyYWdPdmVyOiBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsNCiAgICAgICAgICAgIHZhciBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjsNCiAgICAgICAgICAgIGlmIChkYXRhVHJhbnNmZXIpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcignZHJhZ292ZXInLCBlKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KCdGaWxlcycsIGRhdGFUcmFuc2Zlci50eXBlcykgIT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknOw0KICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuX2lzWEhSVXBsb2FkKHRoaXMub3B0aW9ucykpIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHsNCiAgICAgICAgICAgICAgICAgICAgZHJhZ292ZXI6IHRoaXMuX29uRHJhZ092ZXIsDQogICAgICAgICAgICAgICAgICAgIGRyb3A6IHRoaXMuX29uRHJvcA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsIHsNCiAgICAgICAgICAgICAgICAgICAgcGFzdGU6IHRoaXMuX29uUGFzdGUNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsIHsNCiAgICAgICAgICAgICAgICBjaGFuZ2U6IHRoaXMuX29uQ2hhbmdlDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfZGVzdHJveUV2ZW50SGFuZGxlcnM6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsICdkcmFnb3ZlciBkcm9wJyk7DQogICAgICAgICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLnBhc3RlWm9uZSwgJ3Bhc3RlJyk7DQogICAgICAgICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLmZpbGVJbnB1dCwgJ2NoYW5nZScpOw0KICAgICAgICB9LA0KDQogICAgICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7DQogICAgICAgICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTsNCiAgICAgICAgICAgIGlmIChyZWluaXQpIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95RXZlbnRIYW5kbGVycygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5fc3VwZXIoa2V5LCB2YWx1ZSk7DQogICAgICAgICAgICBpZiAocmVpbml0KSB7DQogICAgICAgICAgICAgICAgdGhpcy5faW5pdFNwZWNpYWxPcHRpb25zKCk7DQogICAgICAgICAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBfaW5pdFNwZWNpYWxPcHRpb25zOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGVJbnB1dCA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgPSB0aGlzLmVsZW1lbnQuaXMoJ2lucHV0W3R5cGU9ImZpbGUiXScpID8NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudCA6IHRoaXMuZWxlbWVudC5maW5kKCdpbnB1dFt0eXBlPSJmaWxlIl0nKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgPSAkKG9wdGlvbnMuZmlsZUlucHV0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghKG9wdGlvbnMuZHJvcFpvbmUgaW5zdGFuY2VvZiAkKSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuZHJvcFpvbmUgPSAkKG9wdGlvbnMuZHJvcFpvbmUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCEob3B0aW9ucy5wYXN0ZVpvbmUgaW5zdGFuY2VvZiAkKSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldFJlZ0V4cDogZnVuY3Rpb24gKHN0cikgew0KICAgICAgICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcvJyksDQogICAgICAgICAgICAgICAgbW9kaWZpZXJzID0gcGFydHMucG9wKCk7DQogICAgICAgICAgICBwYXJ0cy5zaGlmdCgpOw0KICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGFydHMuam9pbignLycpLCBtb2RpZmllcnMpOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsNCiAgICAgICAgICAgIHJldHVybiBrZXkgIT09ICd1cmwnICYmICQudHlwZSh2YWx1ZSkgPT09ICdzdHJpbmcnICYmDQogICAgICAgICAgICAgICAgL15cLy4qXC9baWdtXXswLDN9JC8udGVzdCh2YWx1ZSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7DQogICAgICAgICAgICAvLyBJbml0aWFsaXplIG9wdGlvbnMgc2V0IHZpYSBIVE1MNSBkYXRhLWF0dHJpYnV0ZXM6DQogICAgICAgICAgICAkLmVhY2goDQogICAgICAgICAgICAgICAgJCh0aGlzLmVsZW1lbnRbMF0uY2xvbmVOb2RlKGZhbHNlKSkuZGF0YSgpLA0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9pc1JlZ0V4cE9wdGlvbihrZXksIHZhbHVlKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGF0Ll9nZXRSZWdFeHAodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7DQogICAgICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTsNCiAgICAgICAgICAgIHRoaXMuX3Nsb3RzID0gW107DQogICAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7DQogICAgICAgICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDsNCiAgICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTsNCiAgICAgICAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHRvIHF1ZXJ5DQogICAgICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6DQogICAgICAgIGFjdGl2ZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTsNCiAgICAgICAgfSwNCg0KICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnkNCiAgICAgICAgLy8gdGhlIHdpZGdldCB1cGxvYWQgcHJvZ3Jlc3MuDQogICAgICAgIC8vIEl0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggbG9hZGVkLCB0b3RhbCBhbmQgYml0cmF0ZSBwcm9wZXJ0aWVzDQogICAgICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOg0KICAgICAgICBwcm9ncmVzczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXMNCiAgICAgICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2gNCiAgICAgICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgcHJvcGVydHkgYW5kIGNhbiBjb250YWluIGFkZGl0aW9uYWwgb3B0aW9uczoNCiAgICAgICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7DQogICAgICAgIGFkZDogZnVuY3Rpb24gKGRhdGEpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsNCiAgICAgICAgICAgIGlmICghZGF0YSB8fCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9nZXRGaWxlSW5wdXRGaWxlcyhkYXRhLmZpbGVJbnB1dCkuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykgew0KICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKG51bGwsIGRhdGEpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7DQogICAgICAgICAgICAgICAgdGhpcy5fb25BZGQobnVsbCwgZGF0YSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXMNCiAgICAgICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2gNCiAgICAgICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgb3IgZmlsZUlucHV0IHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6DQogICAgICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTsNCiAgICAgICAgLy8gVGhlIG1ldGhvZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgZm9yIHRoZSBmaWxlIHVwbG9hZCBjYWxsLg0KICAgICAgICBzZW5kOiBmdW5jdGlvbiAoZGF0YSkgew0KICAgICAgICAgICAgaWYgKGRhdGEgJiYgIXRoaXMub3B0aW9ucy5kaXNhYmxlZCkgew0KICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpbGVJbnB1dCAmJiAhZGF0YS5maWxlcykgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsDQogICAgICAgICAgICAgICAgICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksDQogICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLA0KICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZDsNCiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpxWEhSKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVqZWN0KG51bGwsICdhYm9ydCcsICdhYm9ydCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7DQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldEZpbGVJbnB1dEZpbGVzKGRhdGEuZmlsZUlucHV0KS5hbHdheXMoDQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZmlsZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlczsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUiA9IHRoYXQuX29uU2VuZChudWxsLCBkYXRhKS50aGVuKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZkLnJlc29sdmUocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZWplY3QoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpOw0KICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb25TZW5kKG51bGwsIGRhdGEpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7DQogICAgICAgIH0NCg0KICAgIH0pOw0KDQp9KSk7DQo=]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/jquery.iframe-transport.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpbiAxLjcNCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZA0KICoNCiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuDQogKiBodHRwczovL2JsdWVpbXAubmV0DQogKg0KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOg0KICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQNCiAqLw0KDQovKmpzbGludCB1bnBhcmFtOiB0cnVlLCBub21lbjogdHJ1ZSAqLw0KLypnbG9iYWwgZGVmaW5lLCB3aW5kb3csIGRvY3VtZW50ICovDQoNCihmdW5jdGlvbiAoZmFjdG9yeSkgew0KICAgICd1c2Ugc3RyaWN0JzsNCiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7DQogICAgICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOg0KICAgICAgICBkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzOg0KICAgICAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpOw0KICAgIH0NCn0oZnVuY3Rpb24gKCQpIHsNCiAgICAndXNlIHN0cmljdCc7DQoNCiAgICAvLyBIZWxwZXIgdmFyaWFibGUgdG8gY3JlYXRlIHVuaXF1ZSBuYW1lcyBmb3IgdGhlIHRyYW5zcG9ydCBpZnJhbWVzOg0KICAgIHZhciBjb3VudGVyID0gMDsNCg0KICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgdGhyZWUgYWRkaXRpb25hbCBvcHRpb25zOg0KICAgIC8vIG9wdGlvbnMuZmlsZUlucHV0OiBhIGpRdWVyeSBjb2xsZWN0aW9uIG9mIGZpbGUgaW5wdXQgZmllbGRzDQogICAgLy8gb3B0aW9ucy5wYXJhbU5hbWU6IHRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhLA0KICAgIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksDQogICAgLy8gIGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLg0KICAgIC8vIG9wdGlvbnMuZm9ybURhdGE6IGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZCB2YWx1ZSBwcm9wZXJ0aWVzLA0KICAgIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjoNCiAgICAvLyAgW3tuYW1lOiAnYScsIHZhbHVlOiAxfSwge25hbWU6ICdiJywgdmFsdWU6IDJ9XQ0KICAgICQuYWpheFRyYW5zcG9ydCgnaWZyYW1lJywgZnVuY3Rpb24gKG9wdGlvbnMpIHsNCiAgICAgICAgaWYgKG9wdGlvbnMuYXN5bmMpIHsNCiAgICAgICAgICAgIHZhciBmb3JtLA0KICAgICAgICAgICAgICAgIGlmcmFtZSwNCiAgICAgICAgICAgICAgICBhZGRQYXJhbUNoYXI7DQogICAgICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uIChfLCBjb21wbGV0ZUNhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcm0gPSAkKCc8Zm9ybSBzdHlsZT0iZGlzcGxheTpub25lOyI+PC9mb3JtPicpOw0KICAgICAgICAgICAgICAgICAgICBmb3JtLmF0dHIoJ2FjY2VwdC1jaGFyc2V0Jywgb3B0aW9ucy5mb3JtQWNjZXB0Q2hhcnNldCk7DQogICAgICAgICAgICAgICAgICAgIGFkZFBhcmFtQ2hhciA9IC9cPy8udGVzdChvcHRpb25zLnVybCkgPyAnJicgOiAnPyc7DQogICAgICAgICAgICAgICAgICAgIC8vIFhEb21haW5SZXF1ZXN0IG9ubHkgc3VwcG9ydHMgR0VUIGFuZCBQT1NUOg0KICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7DQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUFVUJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBVVCc7DQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUEFUQ0gnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UEFUQ0gnOw0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vIGphdmFzY3JpcHQ6ZmFsc2UgYXMgaW5pdGlhbCBpZnJhbWUgc3JjDQogICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnRzIHdhcm5pbmcgcG9wdXBzIG9uIEhUVFBTIGluIElFNi4NCiAgICAgICAgICAgICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2YNCiAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgRE9NLA0KICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzZXQgdGhlIG5hbWUgYWxvbmcgd2l0aCB0aGUgaWZyYW1lIEhUTUwgbWFya3VwOg0KICAgICAgICAgICAgICAgICAgICBjb3VudGVyICs9IDE7DQogICAgICAgICAgICAgICAgICAgIGlmcmFtZSA9ICQoDQogICAgICAgICAgICAgICAgICAgICAgICAnPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7IiBuYW1lPSJpZnJhbWUtdHJhbnNwb3J0LScgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgKyAnIj48L2lmcmFtZT4nDQogICAgICAgICAgICAgICAgICAgICkuYmluZCgnbG9hZCcsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlSW5wdXRDbG9uZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSkgPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWUgOiBbb3B0aW9ucy5wYXJhbU5hbWVdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVuYmluZCgnbG9hZCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JhcCBpbiBhIHRyeS9jYXRjaCBibG9jayB0byBjYXRjaCBleGNlcHRpb25zIHRocm93bg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBhY2Nlc3MgY3Jvc3MtZG9tYWluIGlmcmFtZSBjb250ZW50czoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gaWZyYW1lLmNvbnRlbnRzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBpZnJhbWUuY29udGVudHMoKSBvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzbyB3ZSB1bmlmeSB0aGUgcmVzcG9uc2U6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY29tcGxldGUgY2FsbGJhY2sgcmV0dXJucyB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZyYW1lIGNvbnRlbnQgZG9jdW1lbnQgYXMgcmVzcG9uc2Ugb2JqZWN0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZUNhbGxiYWNrKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydpZnJhbWUnOiByZXNwb25zZX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBJRSBlbmRsZXNzIHByb2dyZXNzIGJhciBhY3Rpdml0eSBidWcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGhhcHBlbnMgb24gZm9ybSBzdWJtaXRzIHRvIGlmcmFtZSB0YXJnZXRzKToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7Ij48L2lmcmFtZT4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGZvcm0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGUgZm9ybSBpbiBhIHNldFRpbWVvdXQgY2FsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcmVzcG9uc2UgcmVzdWx0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgndGFyZ2V0JywgaWZyYW1lLnByb3AoJ25hbWUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ21ldGhvZCcsIG9wdGlvbnMudHlwZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtRGF0YSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iLz4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGVJbnB1dCAmJiBvcHRpb25zLmZpbGVJbnB1dC5sZW5ndGggJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID09PSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlSW5wdXRDbG9uZXMgPSBvcHRpb25zLmZpbGVJbnB1dC5jbG9uZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuYWZ0ZXIoZnVuY3Rpb24gKGluZGV4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmFtTmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uIChpbmRleCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVzW2luZGV4XSB8fCBvcHRpb25zLnBhcmFtTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZGluZyB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgdG8gdGhlIGhpZGRlbiBmb3JtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlcyB0aGVtIGZyb20gdGhlaXIgb3JpZ2luYWwgbG9jYXRpb246DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKG9wdGlvbnMuZmlsZUlucHV0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnZW5jdHlwZScsICdtdWx0aXBhcnQvZm9ybS1kYXRhJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdlbmNvZGluZycsICdtdWx0aXBhcnQvZm9ybS1kYXRhJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBmaWxlIGlucHV0IGZpZWxkcyBhdCB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgcmVwbGFjaW5nIHRoZSBjbG9uZXMgd2l0aCB0aGUgb3JpZ2luYWxzOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9uZSA9ICQoZmlsZUlucHV0Q2xvbmVzW2luZGV4XSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXQpLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS5yZXBsYWNlV2l0aChpbnB1dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZChpZnJhbWUpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlmcmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gamF2YXNjcmlwdDpmYWxzZSBhcyBpZnJhbWUgc3JjIGFib3J0cyB0aGUgcmVxdWVzdA0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHByZXZlbnRzIHdhcm5pbmcgcG9wdXBzIG9uIEhUVFBTIGluIElFNi4NCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmNhdCBpcyB1c2VkIHRvIGF2b2lkIHRoZSAiU2NyaXB0IFVSTCIgSlNMaW50IGVycm9yOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVuYmluZCgnbG9hZCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ3NyYycsICdqYXZhc2NyaXB0Jy5jb25jYXQoJzpmYWxzZTsnKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS4NCiAgICAvLyBUaGUgZm9sbG93aW5nIGFkZHMgY29udmVydGVycyBmcm9tIGlmcmFtZSB0byB0ZXh0LCBqc29uLCBodG1sLCB4bWwNCiAgICAvLyBhbmQgc2NyaXB0Lg0KICAgIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW4NCiAgICAvLyBvciB0ZXh0L2h0bWwsIGlmIHRoZSBicm93c2VyIGRvZXNuJ3QgaW5jbHVkZSBhcHBsaWNhdGlvbi9qc29uIGluIHRoZQ0KICAgIC8vIEFjY2VwdCBoZWFkZXIsIGVsc2UgSUUgd2lsbCBzaG93IGEgZG93bmxvYWQgZGlhbG9nLg0KICAgIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5cw0KICAgIC8vIGFwcGxpY2F0aW9uL3htbCBvciB0ZXh0L3htbCwgc28gSUUgcHJvcGVybHkgcGFyc2VzIHRoZSBYTUwgcmVzcG9uc2UuDQogICAgLy8gU2VlIGFsc28NCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb24NCiAgICAkLmFqYXhTZXR1cCh7DQogICAgICAgIGNvbnZlcnRlcnM6IHsNCiAgICAgICAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lICYmICQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAnaWZyYW1lIGpzb24nOiBmdW5jdGlvbiAoaWZyYW1lKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkLnBhcnNlSlNPTigkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lICYmICQoaWZyYW1lWzBdLmJvZHkpLmh0bWwoKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAnaWZyYW1lIHhtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHsNCiAgICAgICAgICAgICAgICB2YXIgeG1sRG9jID0gaWZyYW1lICYmIGlmcmFtZVswXTsNCiAgICAgICAgICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKSA/IHhtbERvYyA6DQogICAgICAgICAgICAgICAgICAgICAgICAkLnBhcnNlWE1MKCh4bWxEb2MuWE1MRG9jdW1lbnQgJiYgeG1sRG9jLlhNTERvY3VtZW50LnhtbCkgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHhtbERvYy5ib2R5KS5odG1sKCkpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBpZnJhbWUgJiYgJC5nbG9iYWxFdmFsKCQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9KTsNCg0KfSkpOw0K]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/package.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ew0KICAgICJuYW1lIjogImJsdWVpbXAtZmlsZS11cGxvYWQiLA0KICAgICJ2ZXJzaW9uIjogIjguMy4yIiwNCiAgICAidGl0bGUiOiAialF1ZXJ5IEZpbGUgVXBsb2FkIiwNCiAgICAiZGVzY3JpcHRpb24iOiAiRmlsZSBVcGxvYWQgd2lkZ2V0IHdpdGggbXVsdGlwbGUgZmlsZSBzZWxlY3Rpb24sIGRyYWcmYW1wO2Ryb3Agc3VwcG9ydCwgcHJvZ3Jlc3MgYmFyLCB2YWxpZGF0aW9uIGFuZCBwcmV2aWV3IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZvciBqUXVlcnkuIFN1cHBvcnRzIGNyb3NzLWRvbWFpbiwgY2h1bmtlZCBhbmQgcmVzdW1hYmxlIGZpbGUgdXBsb2Fkcy4gV29ya3Mgd2l0aCBhbnkgc2VydmVyLXNpZGUgcGxhdGZvcm0gKEdvb2dsZSBBcHAgRW5naW5lLCBQSFAsIFB5dGhvbiwgUnVieSBvbiBSYWlscywgSmF2YSwgZXRjLikgdGhhdCBzdXBwb3J0cyBzdGFuZGFyZCBIVE1MIGZvcm0gZmlsZSB1cGxvYWRzLiIsDQogICAgImtleXdvcmRzIjogWw0KICAgICAgICAianF1ZXJ5IiwNCiAgICAgICAgImZpbGUiLA0KICAgICAgICAidXBsb2FkIiwNCiAgICAgICAgIndpZGdldCIsDQogICAgICAgICJtdWx0aXBsZSIsDQogICAgICAgICJzZWxlY3Rpb24iLA0KICAgICAgICAiZHJhZyIsDQogICAgICAgICJkcm9wIiwNCiAgICAgICAgInByb2dyZXNzIiwNCiAgICAgICAgInByZXZpZXciLA0KICAgICAgICAiY3Jvc3MtZG9tYWluIiwNCiAgICAgICAgImNyb3NzLXNpdGUiLA0KICAgICAgICAiY2h1bmsiLA0KICAgICAgICAicmVzdW1lIiwNCiAgICAgICAgImdhZSIsDQogICAgICAgICJnbyIsDQogICAgICAgICJweXRob24iLA0KICAgICAgICAicGhwIiwNCiAgICAgICAgImJvb3RzdHJhcCINCiAgICBdLA0KICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQiLA0KICAgICJhdXRob3IiOiB7DQogICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBUc2NoYW4iLA0KICAgICAgICAidXJsIjogImh0dHBzOi8vYmx1ZWltcC5uZXQiDQogICAgfSwNCiAgICAibWFpbnRhaW5lcnMiOiBbDQogICAgICAgIHsNCiAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBUc2NoYW4iLA0KICAgICAgICAgICAgInVybCI6ICJodHRwczovL2JsdWVpbXAubmV0Ig0KICAgICAgICB9DQogICAgXSwNCiAgICAicmVwb3NpdG9yeSI6IHsNCiAgICAgICAgInR5cGUiOiAiZ2l0IiwNCiAgICAgICAgInVybCI6ICJnaXQ6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkLmdpdCINCiAgICB9LA0KICAgICJidWdzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMiLA0KICAgICJsaWNlbnNlcyI6IFsNCiAgICAgICAgew0KICAgICAgICAgICAgInR5cGUiOiAiTUlUIiwNCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQiDQogICAgICAgIH0NCiAgICBdLA0KICAgICJkZXBlbmRlbmNpZXMiOiB7DQogICAgICAgICJqcXVlcnkiOiAiPj0xLjYiLA0KICAgICAgICAianF1ZXJ5LnVpLndpZGdldCI6ICI+PTEuOSIsDQogICAgICAgICJibHVlaW1wLXRtcGwiOiAiPj0yLjEuMCIsDQogICAgICAgICJibHVlaW1wLWxvYWQtaW1hZ2UiOiAiPj0xLjcuMCIsDQogICAgICAgICJibHVlaW1wLWNhbnZhcy10by1ibG9iIjogIj49Mi4wLjUiDQogICAgfQ0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/progressbar.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBqUXVlcnkgRmlsZSBVcGxvYWQgUGx1Z2luDQoNCiMjIERlbW8NCltEZW1vIEZpbGUgVXBsb2FkXShodHRwOi8vYmx1ZWltcC5naXRodWIuY29tL2pRdWVyeS1GaWxlLVVwbG9hZC8pDQoNCiMjIFNldHVwIGluc3RydWN0aW9ucw0KKiBbSG93IHRvIHNldHVwIHRoZSBwbHVnaW4gb24geW91ciB3ZWJzaXRlXShodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCkNCiogW0hvdyB0byB1c2Ugb25seSB0aGUgYmFzaWMgcGx1Z2luIChtaW5pbWFsIHNldHVwIGd1aWRlKS5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC93aWtpL0Jhc2ljLXBsdWdpbikNCg0KIyMgRmVhdHVyZXMNCiogKipNdWx0aXBsZSBmaWxlIHVwbG9hZDoqKiAgDQogIEFsbG93cyB0byBzZWxlY3QgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSBhbmQgdXBsb2FkIHRoZW0gc2ltdWx0YW5lb3VzbHkuDQoqICoqRHJhZyAmIERyb3Agc3VwcG9ydDoqKiAgDQogIEFsbG93cyB0byB1cGxvYWQgZmlsZXMgYnkgZHJhZ2dpbmcgdGhlbSBmcm9tIHlvdXIgZGVza3RvcCBvciBmaWxlbWFuYWdlciBhbmQgZHJvcHBpbmcgdGhlbSBvbiB5b3VyIGJyb3dzZXIgd2luZG93Lg0KKiAqKlVwbG9hZCBwcm9ncmVzcyBiYXI6KiogIA0KICBTaG93cyBhIHByb2dyZXNzIGJhciBpbmRpY2F0aW5nIHRoZSB1cGxvYWQgcHJvZ3Jlc3MgZm9yIGluZGl2aWR1YWwgZmlsZXMgYW5kIGZvciBhbGwgdXBsb2FkcyBjb21iaW5lZC4NCiogKipDYW5jZWxhYmxlIHVwbG9hZHM6KiogIA0KICBJbmRpdmlkdWFsIGZpbGUgdXBsb2FkcyBjYW4gYmUgY2FuY2VsZWQgdG8gc3RvcCB0aGUgdXBsb2FkIHByb2dyZXNzLg0KKiAqKlJlc3VtYWJsZSB1cGxvYWRzOioqICANCiAgQWJvcnRlZCB1cGxvYWRzIGNhbiBiZSByZXN1bWVkIHdpdGggYnJvd3NlcnMgc3VwcG9ydGluZyB0aGUgQmxvYiBBUEkuDQoqICoqQ2h1bmtlZCB1cGxvYWRzOioqICANCiAgTGFyZ2UgZmlsZXMgY2FuIGJlIHVwbG9hZGVkIGluIHNtYWxsZXIgY2h1bmtzIHdpdGggYnJvd3NlcnMgc3VwcG9ydGluZyB0aGUgQmxvYiBBUEkuDQoqICoqUHJldmlldyBpbWFnZXM6KiogIA0KICBBIHByZXZpZXcgb2YgaW1hZ2UgZmlsZXMgY2FuIGJlIGRpc3BsYXllZCBiZWZvcmUgdXBsb2FkaW5nIHdpdGggYnJvd3NlcnMgc3VwcG9ydGluZyB0aGUgcmVxdWlyZWQgSFRNTDUgQVBJcy4NCiogKipObyBicm93c2VyIHBsdWdpbnMgKGUuZy4gQWRvYmUgRmxhc2gpIHJlcXVpcmVkOioqICANCiAgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIG9wZW4gc3RhbmRhcmRzIGxpa2UgSFRNTDUgYW5kIEphdmFTY3JpcHQgYW5kIHJlcXVpcmVzIG5vIGFkZGl0aW9uYWwgYnJvd3NlciBwbHVnaW5zLg0KKiAqKkdyYWNlZnVsIGZhbGxiYWNrIGZvciBsZWdhY3kgYnJvd3NlcnM6KiogIA0KICBVcGxvYWRzIGZpbGVzIHZpYSBYTUxIdHRwUmVxdWVzdHMgaWYgc3VwcG9ydGVkIGFuZCB1c2VzIGlmcmFtZXMgYXMgZmFsbGJhY2sgZm9yIGxlZ2FjeSBicm93c2Vycy4NCiogKipIVE1MIGZpbGUgdXBsb2FkIGZvcm0gZmFsbGJhY2s6KiogIA0KICBTaG93cyBhIHN0YW5kYXJkIEhUTUwgZmlsZSB1cGxvYWQgZm9ybSBpZiBKYXZhU2NyaXB0IGlzIGRpc2FibGVkLg0KKiAqKkNyb3NzLXNpdGUgZmlsZSB1cGxvYWRzOioqICANCiAgU3VwcG9ydHMgdXBsb2FkaW5nIGZpbGVzIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB3aXRoIENyb3NzLXNpdGUgWE1MSHR0cFJlcXVlc3RzLg0KKiAqKk11bHRpcGxlIHBsdWdpbiBpbnN0YW5jZXM6KiogIA0KICBBbGxvd3MgdG8gdXNlIG11bHRpcGxlIHBsdWdpbiBpbnN0YW5jZXMgb24gdGhlIHNhbWUgd2VicGFnZS4NCiogKipDdXN0b21pemFibGUgYW5kIGV4dGVuc2libGU6KiogIA0KICBQcm92aWRlcyBhbiBBUEkgdG8gc2V0IGluZGl2aWR1YWwgb3B0aW9ucyBhbmQgZGVmaW5lIGNhbGxCYWNrIG1ldGhvZHMgZm9yIHZhcmlvdXMgdXBsb2FkIGV2ZW50cy4NCiogKipNdWx0aXBhcnQgYW5kIGZpbGUgY29udGVudHMgc3RyZWFtIHVwbG9hZHM6KiogIA0KICBGaWxlcyBjYW4gYmUgdXBsb2FkZWQgYXMgc3RhbmRhcmQgIm11bHRpcGFydC9mb3JtLWRhdGEiIG9yIGZpbGUgY29udGVudHMgc3RyZWFtIChIVFRQIFBVVCBmaWxlIHVwbG9hZCkuDQoqICoqQ29tcGF0aWJsZSB3aXRoIGFueSBzZXJ2ZXItc2lkZSBhcHBsaWNhdGlvbiBwbGF0Zm9ybToqKiAgDQogIFdvcmtzIHdpdGggR29vZ2xlIEFwcCBFbmdpbmUgKFB5dGhvbiwgSmF2YSksIFJ1Ynkgb24gUmFpbHMsIFBIUCBhbmQgYW55IG90aGVyIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgSFRUUCBmaWxlIHVwbG9hZHMuDQoNCiMjIFJlcXVpcmVtZW50cw0KKiBbalF1ZXJ5XShodHRwOi8vanF1ZXJ5LmNvbS8pIHYuIDEuNisNCiogW2pRdWVyeSBVSSB3aWRnZXQgZmFjdG9yeV0oaHR0cDovL3dpa2kuanF1ZXJ5dWkuY29tL3cvcGFnZS8xMjEzODEzNS9XaWRnZXQlMjBmYWN0b3J5KSB2LiAxLjguMTYrDQoqIFtqUXVlcnkgSWZyYW1lIFRyYW5zcG9ydCBwbHVnaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9qcXVlcnkuaWZyYW1lLXRyYW5zcG9ydC5qcykgKGluY2x1ZGVkKQ0KKiBbSmF2YVNjcmlwdCBMb2FkIEltYWdlIGZ1bmN0aW9uXShodHRwOi8vYmx1ZWltcC5naXRodWIuY29tL0phdmFTY3JpcHQtTG9hZC1JbWFnZSkgdi4gMS4xLjMrIChvcHRpb25hbCkNCiogW0phdmFTY3JpcHQgVGVtcGxhdGVzIGVuZ2luZV0oaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvSmF2YVNjcmlwdC1UZW1wbGF0ZXMpIHYuIDEuMC4yKyAob3B0aW9uYWwpDQoNClRoZSBqUXVlcnkgVUkgd2lkZ2V0IGZhY3RvcnkgaXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIGJhc2ljIEZpbGUgVXBsb2FkIHBsdWdpbiwgYnV0IHZlcnkgbGlnaHR3ZWlnaHQgd2l0aG91dCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiANClRoZSBVSSB2ZXJzaW9uIG9mIHRoZSBGaWxlIFVwbG9hZCBwbHVnaW4gYWxzbyByZXF1aXJlcyB0aGUgSmF2YVNjcmlwdCBUZW1wbGF0ZXMgZW5naW5lIGFuZCB0aGUgSmF2YVNjcmlwdCBMb2FkIEltYWdlIGZ1bmN0aW9uIChmb3IgdGhlIHVwbG9hZCBpbWFnZSBwcmV2aWV3cykuIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgbWFya2VkIGFzIG9wdGlvbmFsLCBhcyB0aGUgYmFzaWMgRmlsZSBVcGxvYWQgcGx1Z2luIGNhbiBiZSB1c2VkIHdpdGhvdXQgdGhlbSBhbmQgdGhlIFVJIHZlcnNpb24gb2YgdGhlIHBsdWdpbiBjYW4gYmUgZXh0ZW5kZWQgdG8gb3ZlcnJpZGUgdGhlc2UgZGVwZW5kZW5jaWVzIHdpdGggYWx0ZXJuYXRpdmUgc29sdXRpb25zLg0KDQpUaGUgcmVwb3NpdG9yeSBhbHNvIGluY2x1ZGVzIHRoZSBbalF1ZXJ5IFhEb21haW5SZXF1ZXN0IFRyYW5zcG9ydCBQbHVnaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9jb3JzL2pxdWVyeS54ZHItdHJhbnNwb3J0LmpzKSwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIENyb3NzLWRvbWFpbiBBSkFYIHJlcXVlc3RzIGluIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciA+PSA4LiBJdCBpcyBvbmx5IGluY2x1ZGVkIGZvciB0aGUgW0RlbW9dKGh0dHA6Ly9ibHVlaW1wLmdpdGh1Yi5jb20valF1ZXJ5LUZpbGUtVXBsb2FkLyksIHdoaWNoIG1ha2VzIHVzZSBvZiBDcm9zcy1kb21haW4gREVMRVRFIHJlcXVlc3RzIChHRVQgcmVxdWVzdHMgZm9yIElFKSB0byBkZWxldGUgdXBsb2FkZWQgZmlsZXMgZnJvbSB0aGUgRGVtbyBGaWxlIFVwbG9hZCBzZXJ2aWNlLg0KDQpbQ3Jvc3MtZG9tYWluIEZpbGUgVXBsb2Fkc10oaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkL3dpa2kvQ3Jvc3MtZG9tYWluLXVwbG9hZHMpIHVzaW5nIHRoZSBbSWZyYW1lIFRyYW5zcG9ydCBwbHVnaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9qcXVlcnkuaWZyYW1lLXRyYW5zcG9ydC5qcykgcmVxdWlyZSBhIHJlZGlyZWN0IGJhY2sgdG8gdGhlIG9yaWdpbiBzZXJ2ZXIgdG8gcmV0cmlldmUgdGhlIHVwbG9hZCByZXN1bHRzLiBUaGUgZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBtYWtlcyB1c2Ugb2YgW3Jlc3VsdC5odG1sXShodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvYmxvYi9tYXN0ZXIvY29ycy9yZXN1bHQuaHRtbCkgYXMgcmVkaXJlY3QgcGFnZS4gU2VlIGFsc28gdGhlIGV4YW1wbGUgY29kZSBpbiBbYXBwbGljYXRpb24uanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9hcHBsaWNhdGlvbi5qcykgYXMgd2VsbCBhcyB0aGUgZXhwbGFuYXRpb24gb2YgYWxsIFtmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkL3dpa2kvUGx1Z2luLWZpbGVzKS4NCg0KIyMgQnJvd3NlciBTdXBwb3J0ICh0ZXN0ZWQgdmVyc2lvbnMpDQoqIEdvb2dsZSBDaHJvbWUgLSA3LjArDQoqIEFwcGxlIFNhZmFyaSAtIDQuMCsNCiogTW96aWxsYSBGaXJlZm94IC0gMy4wKw0KKiBPcGVyYSAtIDEwLjArDQoqIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciA2LjArDQoNCkRyYWcgJiBEcm9wIGlzIG9ubHkgc3VwcG9ydGVkIG9uIEdvb2dsZSBDaHJvbWUsIEZpcmVmb3ggNC4wKyBhbmQgU2FmYXJpIDUuMCsuICANCk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciBoYXMgbm8gc3VwcG9ydCBmb3IgbXVsdGlwbGUgZmlsZSBzZWxlY3Rpb24gb3IgdXBsb2FkIHByb2dyZXNzLiAgDQpbRXh0ZW5kZWQgYnJvd3NlciBzdXBwb3J0IGluZm9ybWF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9Ccm93c2VyLXN1cHBvcnQpLg0KDQojIyBMaWNlbnNlDQpSZWxlYXNlZCB1bmRlciB0aGUgW01JVCBsaWNlbnNlXShodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCkuDQo=]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/vendor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/vendor/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/vendor/jquery.ui.widget.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBVSSBXaWRnZXQgMS4xMC4zK2FtZA0KICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkDQogKg0KICogQ29weXJpZ2h0IDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycw0KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2pRdWVyeS53aWRnZXQvDQogKi8NCg0KKGZ1bmN0aW9uIChmYWN0b3J5KSB7DQogICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgew0KICAgICAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZToNCiAgICAgICAgZGVmaW5lKFsianF1ZXJ5Il0sIGZhY3RvcnkpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsczoNCiAgICAgICAgZmFjdG9yeShqUXVlcnkpOw0KICAgIH0NCn0oZnVuY3Rpb24oICQsIHVuZGVmaW5lZCApIHsNCg0KdmFyIHV1aWQgPSAwLA0KCXNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLA0KCV9jbGVhbkRhdGEgPSAkLmNsZWFuRGF0YTsNCiQuY2xlYW5EYXRhID0gZnVuY3Rpb24oIGVsZW1zICkgew0KCWZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgew0KCQl0cnkgew0KCQkJJCggZWxlbSApLnRyaWdnZXJIYW5kbGVyKCAicmVtb3ZlIiApOw0KCQkvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC84MjM1DQoJCX0gY2F0Y2goIGUgKSB7fQ0KCX0NCglfY2xlYW5EYXRhKCBlbGVtcyApOw0KfTsNCg0KJC53aWRnZXQgPSBmdW5jdGlvbiggbmFtZSwgYmFzZSwgcHJvdG90eXBlICkgew0KCXZhciBmdWxsTmFtZSwgZXhpc3RpbmdDb25zdHJ1Y3RvciwgY29uc3RydWN0b3IsIGJhc2VQcm90b3R5cGUsDQoJCS8vIHByb3hpZWRQcm90b3R5cGUgYWxsb3dzIHRoZSBwcm92aWRlZCBwcm90b3R5cGUgdG8gcmVtYWluIHVubW9kaWZpZWQNCgkJLy8gc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhcyBhIG1peGluIGZvciBtdWx0aXBsZSB3aWRnZXRzICgjODg3NikNCgkJcHJveGllZFByb3RvdHlwZSA9IHt9LA0KCQluYW1lc3BhY2UgPSBuYW1lLnNwbGl0KCAiLiIgKVsgMCBdOw0KDQoJbmFtZSA9IG5hbWUuc3BsaXQoICIuIiApWyAxIF07DQoJZnVsbE5hbWUgPSBuYW1lc3BhY2UgKyAiLSIgKyBuYW1lOw0KDQoJaWYgKCAhcHJvdG90eXBlICkgew0KCQlwcm90b3R5cGUgPSBiYXNlOw0KCQliYXNlID0gJC5XaWRnZXQ7DQoJfQ0KDQoJLy8gY3JlYXRlIHNlbGVjdG9yIGZvciBwbHVnaW4NCgkkLmV4cHJbICI6IiBdWyBmdWxsTmFtZS50b0xvd2VyQ2FzZSgpIF0gPSBmdW5jdGlvbiggZWxlbSApIHsNCgkJcmV0dXJuICEhJC5kYXRhKCBlbGVtLCBmdWxsTmFtZSApOw0KCX07DQoNCgkkWyBuYW1lc3BhY2UgXSA9ICRbIG5hbWVzcGFjZSBdIHx8IHt9Ow0KCWV4aXN0aW5nQ29uc3RydWN0b3IgPSAkWyBuYW1lc3BhY2UgXVsgbmFtZSBdOw0KCWNvbnN0cnVjdG9yID0gJFsgbmFtZXNwYWNlIF1bIG5hbWUgXSA9IGZ1bmN0aW9uKCBvcHRpb25zLCBlbGVtZW50ICkgew0KCQkvLyBhbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgIm5ldyIga2V5d29yZA0KCQlpZiAoICF0aGlzLl9jcmVhdGVXaWRnZXQgKSB7DQoJCQlyZXR1cm4gbmV3IGNvbnN0cnVjdG9yKCBvcHRpb25zLCBlbGVtZW50ICk7DQoJCX0NCg0KCQkvLyBhbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGZvciBzaW1wbGUgaW5oZXJpdGFuY2UNCgkJLy8gbXVzdCB1c2UgIm5ldyIga2V5d29yZCAodGhlIGNvZGUgYWJvdmUgYWx3YXlzIHBhc3NlcyBhcmdzKQ0KCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7DQoJCQl0aGlzLl9jcmVhdGVXaWRnZXQoIG9wdGlvbnMsIGVsZW1lbnQgKTsNCgkJfQ0KCX07DQoJLy8gZXh0ZW5kIHdpdGggdGhlIGV4aXN0aW5nIGNvbnN0cnVjdG9yIHRvIGNhcnJ5IG92ZXIgYW55IHN0YXRpYyBwcm9wZXJ0aWVzDQoJJC5leHRlbmQoIGNvbnN0cnVjdG9yLCBleGlzdGluZ0NvbnN0cnVjdG9yLCB7DQoJCXZlcnNpb246IHByb3RvdHlwZS52ZXJzaW9uLA0KCQkvLyBjb3B5IHRoZSBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIHByb3RvdHlwZSBpbiBjYXNlIHdlIG5lZWQgdG8NCgkJLy8gcmVkZWZpbmUgdGhlIHdpZGdldCBsYXRlcg0KCQlfcHJvdG86ICQuZXh0ZW5kKCB7fSwgcHJvdG90eXBlICksDQoJCS8vIHRyYWNrIHdpZGdldHMgdGhhdCBpbmhlcml0IGZyb20gdGhpcyB3aWRnZXQgaW4gY2FzZSB0aGlzIHdpZGdldCBpcw0KCQkvLyByZWRlZmluZWQgYWZ0ZXIgYSB3aWRnZXQgaW5oZXJpdHMgZnJvbSBpdA0KCQlfY2hpbGRDb25zdHJ1Y3RvcnM6IFtdDQoJfSk7DQoNCgliYXNlUHJvdG90eXBlID0gbmV3IGJhc2UoKTsNCgkvLyB3ZSBuZWVkIHRvIG1ha2UgdGhlIG9wdGlvbnMgaGFzaCBhIHByb3BlcnR5IGRpcmVjdGx5IG9uIHRoZSBuZXcgaW5zdGFuY2UNCgkvLyBvdGhlcndpc2Ugd2UnbGwgbW9kaWZ5IHRoZSBvcHRpb25zIGhhc2ggb24gdGhlIHByb3RvdHlwZSB0aGF0IHdlJ3JlDQoJLy8gaW5oZXJpdGluZyBmcm9tDQoJYmFzZVByb3RvdHlwZS5vcHRpb25zID0gJC53aWRnZXQuZXh0ZW5kKCB7fSwgYmFzZVByb3RvdHlwZS5vcHRpb25zICk7DQoJJC5lYWNoKCBwcm90b3R5cGUsIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsNCgkJaWYgKCAhJC5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgew0KCQkJcHJveGllZFByb3RvdHlwZVsgcHJvcCBdID0gdmFsdWU7DQoJCQlyZXR1cm47DQoJCX0NCgkJcHJveGllZFByb3RvdHlwZVsgcHJvcCBdID0gKGZ1bmN0aW9uKCkgew0KCQkJdmFyIF9zdXBlciA9IGZ1bmN0aW9uKCkgew0KCQkJCQlyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7DQoJCQkJfSwNCgkJCQlfc3VwZXJBcHBseSA9IGZ1bmN0aW9uKCBhcmdzICkgew0KCQkJCQlyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJncyApOw0KCQkJCX07DQoJCQlyZXR1cm4gZnVuY3Rpb24oKSB7DQoJCQkJdmFyIF9fc3VwZXIgPSB0aGlzLl9zdXBlciwNCgkJCQkJX19zdXBlckFwcGx5ID0gdGhpcy5fc3VwZXJBcHBseSwNCgkJCQkJcmV0dXJuVmFsdWU7DQoNCgkJCQl0aGlzLl9zdXBlciA9IF9zdXBlcjsNCgkJCQl0aGlzLl9zdXBlckFwcGx5ID0gX3N1cGVyQXBwbHk7DQoNCgkJCQlyZXR1cm5WYWx1ZSA9IHZhbHVlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsNCg0KCQkJCXRoaXMuX3N1cGVyID0gX19zdXBlcjsNCgkJCQl0aGlzLl9zdXBlckFwcGx5ID0gX19zdXBlckFwcGx5Ow0KDQoJCQkJcmV0dXJuIHJldHVyblZhbHVlOw0KCQkJfTsNCgkJfSkoKTsNCgl9KTsNCgljb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLndpZGdldC5leHRlbmQoIGJhc2VQcm90b3R5cGUsIHsNCgkJLy8gVE9ETzogcmVtb3ZlIHN1cHBvcnQgZm9yIHdpZGdldEV2ZW50UHJlZml4DQoJCS8vIGFsd2F5cyB1c2UgdGhlIG5hbWUgKyBhIGNvbG9uIGFzIHRoZSBwcmVmaXgsIGUuZy4sIGRyYWdnYWJsZTpzdGFydA0KCQkvLyBkb24ndCBwcmVmaXggZm9yIHdpZGdldHMgdGhhdCBhcmVuJ3QgRE9NLWJhc2VkDQoJCXdpZGdldEV2ZW50UHJlZml4OiBleGlzdGluZ0NvbnN0cnVjdG9yID8gYmFzZVByb3RvdHlwZS53aWRnZXRFdmVudFByZWZpeCA6IG5hbWUNCgl9LCBwcm94aWVkUHJvdG90eXBlLCB7DQoJCWNvbnN0cnVjdG9yOiBjb25zdHJ1Y3RvciwNCgkJbmFtZXNwYWNlOiBuYW1lc3BhY2UsDQoJCXdpZGdldE5hbWU6IG5hbWUsDQoJCXdpZGdldEZ1bGxOYW1lOiBmdWxsTmFtZQ0KCX0pOw0KDQoJLy8gSWYgdGhpcyB3aWRnZXQgaXMgYmVpbmcgcmVkZWZpbmVkIHRoZW4gd2UgbmVlZCB0byBmaW5kIGFsbCB3aWRnZXRzIHRoYXQNCgkvLyBhcmUgaW5oZXJpdGluZyBmcm9tIGl0IGFuZCByZWRlZmluZSBhbGwgb2YgdGhlbSBzbyB0aGF0IHRoZXkgaW5oZXJpdCBmcm9tDQoJLy8gdGhlIG5ldyB2ZXJzaW9uIG9mIHRoaXMgd2lkZ2V0LiBXZSdyZSBlc3NlbnRpYWxseSB0cnlpbmcgdG8gcmVwbGFjZSBvbmUNCgkvLyBsZXZlbCBpbiB0aGUgcHJvdG90eXBlIGNoYWluLg0KCWlmICggZXhpc3RpbmdDb25zdHJ1Y3RvciApIHsNCgkJJC5lYWNoKCBleGlzdGluZ0NvbnN0cnVjdG9yLl9jaGlsZENvbnN0cnVjdG9ycywgZnVuY3Rpb24oIGksIGNoaWxkICkgew0KCQkJdmFyIGNoaWxkUHJvdG90eXBlID0gY2hpbGQucHJvdG90eXBlOw0KDQoJCQkvLyByZWRlZmluZSB0aGUgY2hpbGQgd2lkZ2V0IHVzaW5nIHRoZSBzYW1lIHByb3RvdHlwZSB0aGF0IHdhcw0KCQkJLy8gb3JpZ2luYWxseSB1c2VkLCBidXQgaW5oZXJpdCBmcm9tIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgYmFzZQ0KCQkJJC53aWRnZXQoIGNoaWxkUHJvdG90eXBlLm5hbWVzcGFjZSArICIuIiArIGNoaWxkUHJvdG90eXBlLndpZGdldE5hbWUsIGNvbnN0cnVjdG9yLCBjaGlsZC5fcHJvdG8gKTsNCgkJfSk7DQoJCS8vIHJlbW92ZSB0aGUgbGlzdCBvZiBleGlzdGluZyBjaGlsZCBjb25zdHJ1Y3RvcnMgZnJvbSB0aGUgb2xkIGNvbnN0cnVjdG9yDQoJCS8vIHNvIHRoZSBvbGQgY2hpbGQgY29uc3RydWN0b3JzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZA0KCQlkZWxldGUgZXhpc3RpbmdDb25zdHJ1Y3Rvci5fY2hpbGRDb25zdHJ1Y3RvcnM7DQoJfSBlbHNlIHsNCgkJYmFzZS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaCggY29uc3RydWN0b3IgKTsNCgl9DQoNCgkkLndpZGdldC5icmlkZ2UoIG5hbWUsIGNvbnN0cnVjdG9yICk7DQp9Ow0KDQokLndpZGdldC5leHRlbmQgPSBmdW5jdGlvbiggdGFyZ2V0ICkgew0KCXZhciBpbnB1dCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApLA0KCQlpbnB1dEluZGV4ID0gMCwNCgkJaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsDQoJCWtleSwNCgkJdmFsdWU7DQoJZm9yICggOyBpbnB1dEluZGV4IDwgaW5wdXRMZW5ndGg7IGlucHV0SW5kZXgrKyApIHsNCgkJZm9yICgga2V5IGluIGlucHV0WyBpbnB1dEluZGV4IF0gKSB7DQoJCQl2YWx1ZSA9IGlucHV0WyBpbnB1dEluZGV4IF1bIGtleSBdOw0KCQkJaWYgKCBpbnB1dFsgaW5wdXRJbmRleCBdLmhhc093blByb3BlcnR5KCBrZXkgKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgew0KCQkJCS8vIENsb25lIG9iamVjdHMNCgkJCQlpZiAoICQuaXNQbGFpbk9iamVjdCggdmFsdWUgKSApIHsNCgkJCQkJdGFyZ2V0WyBrZXkgXSA9ICQuaXNQbGFpbk9iamVjdCggdGFyZ2V0WyBrZXkgXSApID8NCgkJCQkJCSQud2lkZ2V0LmV4dGVuZCgge30sIHRhcmdldFsga2V5IF0sIHZhbHVlICkgOg0KCQkJCQkJLy8gRG9uJ3QgZXh0ZW5kIHN0cmluZ3MsIGFycmF5cywgZXRjLiB3aXRoIG9iamVjdHMNCgkJCQkJCSQud2lkZ2V0LmV4dGVuZCgge30sIHZhbHVlICk7DQoJCQkJLy8gQ29weSBldmVyeXRoaW5nIGVsc2UgYnkgcmVmZXJlbmNlDQoJCQkJfSBlbHNlIHsNCgkJCQkJdGFyZ2V0WyBrZXkgXSA9IHZhbHVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gdGFyZ2V0Ow0KfTsNCg0KJC53aWRnZXQuYnJpZGdlID0gZnVuY3Rpb24oIG5hbWUsIG9iamVjdCApIHsNCgl2YXIgZnVsbE5hbWUgPSBvYmplY3QucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lIHx8IG5hbWU7DQoJJC5mblsgbmFtZSBdID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7DQoJCXZhciBpc01ldGhvZENhbGwgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIsDQoJCQlhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICksDQoJCQlyZXR1cm5WYWx1ZSA9IHRoaXM7DQoNCgkJLy8gYWxsb3cgbXVsdGlwbGUgaGFzaGVzIHRvIGJlIHBhc3NlZCBvbiBpbml0DQoJCW9wdGlvbnMgPSAhaXNNZXRob2RDYWxsICYmIGFyZ3MubGVuZ3RoID8NCgkJCSQud2lkZ2V0LmV4dGVuZC5hcHBseSggbnVsbCwgWyBvcHRpb25zIF0uY29uY2F0KGFyZ3MpICkgOg0KCQkJb3B0aW9uczsNCg0KCQlpZiAoIGlzTWV0aG9kQ2FsbCApIHsNCgkJCXRoaXMuZWFjaChmdW5jdGlvbigpIHsNCgkJCQl2YXIgbWV0aG9kVmFsdWUsDQoJCQkJCWluc3RhbmNlID0gJC5kYXRhKCB0aGlzLCBmdWxsTmFtZSApOw0KCQkJCWlmICggIWluc3RhbmNlICkgew0KCQkJCQlyZXR1cm4gJC5lcnJvciggImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gIiArIG5hbWUgKyAiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyAiICsNCgkJCQkJCSJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJyIgKyBvcHRpb25zICsgIiciICk7DQoJCQkJfQ0KCQkJCWlmICggISQuaXNGdW5jdGlvbiggaW5zdGFuY2Vbb3B0aW9uc10gKSB8fCBvcHRpb25zLmNoYXJBdCggMCApID09PSAiXyIgKSB7DQoJCQkJCXJldHVybiAkLmVycm9yKCAibm8gc3VjaCBtZXRob2QgJyIgKyBvcHRpb25zICsgIicgZm9yICIgKyBuYW1lICsgIiB3aWRnZXQgaW5zdGFuY2UiICk7DQoJCQkJfQ0KCQkJCW1ldGhvZFZhbHVlID0gaW5zdGFuY2VbIG9wdGlvbnMgXS5hcHBseSggaW5zdGFuY2UsIGFyZ3MgKTsNCgkJCQlpZiAoIG1ldGhvZFZhbHVlICE9PSBpbnN0YW5jZSAmJiBtZXRob2RWYWx1ZSAhPT0gdW5kZWZpbmVkICkgew0KCQkJCQlyZXR1cm5WYWx1ZSA9IG1ldGhvZFZhbHVlICYmIG1ldGhvZFZhbHVlLmpxdWVyeSA/DQoJCQkJCQlyZXR1cm5WYWx1ZS5wdXNoU3RhY2soIG1ldGhvZFZhbHVlLmdldCgpICkgOg0KCQkJCQkJbWV0aG9kVmFsdWU7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9KTsNCgkJfSBlbHNlIHsNCgkJCXRoaXMuZWFjaChmdW5jdGlvbigpIHsNCgkJCQl2YXIgaW5zdGFuY2UgPSAkLmRhdGEoIHRoaXMsIGZ1bGxOYW1lICk7DQoJCQkJaWYgKCBpbnN0YW5jZSApIHsNCgkJCQkJaW5zdGFuY2Uub3B0aW9uKCBvcHRpb25zIHx8IHt9ICkuX2luaXQoKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkLmRhdGEoIHRoaXMsIGZ1bGxOYW1lLCBuZXcgb2JqZWN0KCBvcHRpb25zLCB0aGlzICkgKTsNCgkJCQl9DQoJCQl9KTsNCgkJfQ0KDQoJCXJldHVybiByZXR1cm5WYWx1ZTsNCgl9Ow0KfTsNCg0KJC5XaWRnZXQgPSBmdW5jdGlvbiggLyogb3B0aW9ucywgZWxlbWVudCAqLyApIHt9Ow0KJC5XaWRnZXQuX2NoaWxkQ29uc3RydWN0b3JzID0gW107DQoNCiQuV2lkZ2V0LnByb3RvdHlwZSA9IHsNCgl3aWRnZXROYW1lOiAid2lkZ2V0IiwNCgl3aWRnZXRFdmVudFByZWZpeDogIiIsDQoJZGVmYXVsdEVsZW1lbnQ6ICI8ZGl2PiIsDQoJb3B0aW9uczogew0KCQlkaXNhYmxlZDogZmFsc2UsDQoNCgkJLy8gY2FsbGJhY2tzDQoJCWNyZWF0ZTogbnVsbA0KCX0sDQoJX2NyZWF0ZVdpZGdldDogZnVuY3Rpb24oIG9wdGlvbnMsIGVsZW1lbnQgKSB7DQoJCWVsZW1lbnQgPSAkKCBlbGVtZW50IHx8IHRoaXMuZGVmYXVsdEVsZW1lbnQgfHwgdGhpcyApWyAwIF07DQoJCXRoaXMuZWxlbWVudCA9ICQoIGVsZW1lbnQgKTsNCgkJdGhpcy51dWlkID0gdXVpZCsrOw0KCQl0aGlzLmV2ZW50TmFtZXNwYWNlID0gIi4iICsgdGhpcy53aWRnZXROYW1lICsgdGhpcy51dWlkOw0KCQl0aGlzLm9wdGlvbnMgPSAkLndpZGdldC5leHRlbmQoIHt9LA0KCQkJdGhpcy5vcHRpb25zLA0KCQkJdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLA0KCQkJb3B0aW9ucyApOw0KDQoJCXRoaXMuYmluZGluZ3MgPSAkKCk7DQoJCXRoaXMuaG92ZXJhYmxlID0gJCgpOw0KCQl0aGlzLmZvY3VzYWJsZSA9ICQoKTsNCg0KCQlpZiAoIGVsZW1lbnQgIT09IHRoaXMgKSB7DQoJCQkkLmRhdGEoIGVsZW1lbnQsIHRoaXMud2lkZ2V0RnVsbE5hbWUsIHRoaXMgKTsNCgkJCXRoaXMuX29uKCB0cnVlLCB0aGlzLmVsZW1lbnQsIHsNCgkJCQlyZW1vdmU6IGZ1bmN0aW9uKCBldmVudCApIHsNCgkJCQkJaWYgKCBldmVudC50YXJnZXQgPT09IGVsZW1lbnQgKSB7DQoJCQkJCQl0aGlzLmRlc3Ryb3koKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0pOw0KCQkJdGhpcy5kb2N1bWVudCA9ICQoIGVsZW1lbnQuc3R5bGUgPw0KCQkJCS8vIGVsZW1lbnQgd2l0aGluIHRoZSBkb2N1bWVudA0KCQkJCWVsZW1lbnQub3duZXJEb2N1bWVudCA6DQoJCQkJLy8gZWxlbWVudCBpcyB3aW5kb3cgb3IgZG9jdW1lbnQNCgkJCQllbGVtZW50LmRvY3VtZW50IHx8IGVsZW1lbnQgKTsNCgkJCXRoaXMud2luZG93ID0gJCggdGhpcy5kb2N1bWVudFswXS5kZWZhdWx0VmlldyB8fCB0aGlzLmRvY3VtZW50WzBdLnBhcmVudFdpbmRvdyApOw0KCQl9DQoNCgkJdGhpcy5fY3JlYXRlKCk7DQoJCXRoaXMuX3RyaWdnZXIoICJjcmVhdGUiLCBudWxsLCB0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSApOw0KCQl0aGlzLl9pbml0KCk7DQoJfSwNCglfZ2V0Q3JlYXRlT3B0aW9uczogJC5ub29wLA0KCV9nZXRDcmVhdGVFdmVudERhdGE6ICQubm9vcCwNCglfY3JlYXRlOiAkLm5vb3AsDQoJX2luaXQ6ICQubm9vcCwNCg0KCWRlc3Ryb3k6IGZ1bmN0aW9uKCkgew0KCQl0aGlzLl9kZXN0cm95KCk7DQoJCS8vIHdlIGNhbiBwcm9iYWJseSByZW1vdmUgdGhlIHVuYmluZCBjYWxscyBpbiAyLjANCgkJLy8gYWxsIGV2ZW50IGJpbmRpbmdzIHNob3VsZCBnbyB0aHJvdWdoIHRoaXMuX29uKCkNCgkJdGhpcy5lbGVtZW50DQoJCQkudW5iaW5kKCB0aGlzLmV2ZW50TmFtZXNwYWNlICkNCgkJCS8vIDEuOSBCQyBmb3IgIzc4MTANCgkJCS8vIFRPRE8gcmVtb3ZlIGR1YWwgc3RvcmFnZQ0KCQkJLnJlbW92ZURhdGEoIHRoaXMud2lkZ2V0TmFtZSApDQoJCQkucmVtb3ZlRGF0YSggdGhpcy53aWRnZXRGdWxsTmFtZSApDQoJCQkvLyBzdXBwb3J0OiBqcXVlcnkgPDEuNi4zDQoJCQkvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC85NDEzDQoJCQkucmVtb3ZlRGF0YSggJC5jYW1lbENhc2UoIHRoaXMud2lkZ2V0RnVsbE5hbWUgKSApOw0KCQl0aGlzLndpZGdldCgpDQoJCQkudW5iaW5kKCB0aGlzLmV2ZW50TmFtZXNwYWNlICkNCgkJCS5yZW1vdmVBdHRyKCAiYXJpYS1kaXNhYmxlZCIgKQ0KCQkJLnJlbW92ZUNsYXNzKA0KCQkJCXRoaXMud2lkZ2V0RnVsbE5hbWUgKyAiLWRpc2FibGVkICIgKw0KCQkJCSJ1aS1zdGF0ZS1kaXNhYmxlZCIgKTsNCg0KCQkvLyBjbGVhbiB1cCBldmVudHMgYW5kIHN0YXRlcw0KCQl0aGlzLmJpbmRpbmdzLnVuYmluZCggdGhpcy5ldmVudE5hbWVzcGFjZSApOw0KCQl0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWhvdmVyIiApOw0KCQl0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWZvY3VzIiApOw0KCX0sDQoJX2Rlc3Ryb3k6ICQubm9vcCwNCg0KCXdpZGdldDogZnVuY3Rpb24oKSB7DQoJCXJldHVybiB0aGlzLmVsZW1lbnQ7DQoJfSwNCg0KCW9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7DQoJCXZhciBvcHRpb25zID0ga2V5LA0KCQkJcGFydHMsDQoJCQljdXJPcHRpb24sDQoJCQlpOw0KDQoJCWlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMCApIHsNCgkJCS8vIGRvbid0IHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgaGFzaA0KCQkJcmV0dXJuICQud2lkZ2V0LmV4dGVuZCgge30sIHRoaXMub3B0aW9ucyApOw0KCQl9DQoNCgkJaWYgKCB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApIHsNCgkJCS8vIGhhbmRsZSBuZXN0ZWQga2V5cywgZS5nLiwgImZvby5iYXIiID0+IHsgZm9vOiB7IGJhcjogX19fIH0gfQ0KCQkJb3B0aW9ucyA9IHt9Ow0KCQkJcGFydHMgPSBrZXkuc3BsaXQoICIuIiApOw0KCQkJa2V5ID0gcGFydHMuc2hpZnQoKTsNCgkJCWlmICggcGFydHMubGVuZ3RoICkgew0KCQkJCWN1ck9wdGlvbiA9IG9wdGlvbnNbIGtleSBdID0gJC53aWRnZXQuZXh0ZW5kKCB7fSwgdGhpcy5vcHRpb25zWyBrZXkgXSApOw0KCQkJCWZvciAoIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrICkgew0KCQkJCQljdXJPcHRpb25bIHBhcnRzWyBpIF0gXSA9IGN1ck9wdGlvblsgcGFydHNbIGkgXSBdIHx8IHt9Ow0KCQkJCQljdXJPcHRpb24gPSBjdXJPcHRpb25bIHBhcnRzWyBpIF0gXTsNCgkJCQl9DQoJCQkJa2V5ID0gcGFydHMucG9wKCk7DQoJCQkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgew0KCQkJCQlyZXR1cm4gY3VyT3B0aW9uWyBrZXkgXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGN1ck9wdGlvblsga2V5IF07DQoJCQkJfQ0KCQkJCWN1ck9wdGlvblsga2V5IF0gPSB2YWx1ZTsNCgkJCX0gZWxzZSB7DQoJCQkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgew0KCQkJCQlyZXR1cm4gdGhpcy5vcHRpb25zWyBrZXkgXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHRoaXMub3B0aW9uc1sga2V5IF07DQoJCQkJfQ0KCQkJCW9wdGlvbnNbIGtleSBdID0gdmFsdWU7DQoJCQl9DQoJCX0NCg0KCQl0aGlzLl9zZXRPcHRpb25zKCBvcHRpb25zICk7DQoNCgkJcmV0dXJuIHRoaXM7DQoJfSwNCglfc2V0T3B0aW9uczogZnVuY3Rpb24oIG9wdGlvbnMgKSB7DQoJCXZhciBrZXk7DQoNCgkJZm9yICgga2V5IGluIG9wdGlvbnMgKSB7DQoJCQl0aGlzLl9zZXRPcHRpb24oIGtleSwgb3B0aW9uc1sga2V5IF0gKTsNCgkJfQ0KDQoJCXJldHVybiB0aGlzOw0KCX0sDQoJX3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7DQoJCXRoaXMub3B0aW9uc1sga2V5IF0gPSB2YWx1ZTsNCg0KCQlpZiAoIGtleSA9PT0gImRpc2FibGVkIiApIHsNCgkJCXRoaXMud2lkZ2V0KCkNCgkJCQkudG9nZ2xlQ2xhc3MoIHRoaXMud2lkZ2V0RnVsbE5hbWUgKyAiLWRpc2FibGVkIHVpLXN0YXRlLWRpc2FibGVkIiwgISF2YWx1ZSApDQoJCQkJLmF0dHIoICJhcmlhLWRpc2FibGVkIiwgdmFsdWUgKTsNCgkJCXRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCAidWktc3RhdGUtaG92ZXIiICk7DQoJCQl0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWZvY3VzIiApOw0KCQl9DQoNCgkJcmV0dXJuIHRoaXM7DQoJfSwNCg0KCWVuYWJsZTogZnVuY3Rpb24oKSB7DQoJCXJldHVybiB0aGlzLl9zZXRPcHRpb24oICJkaXNhYmxlZCIsIGZhbHNlICk7DQoJfSwNCglkaXNhYmxlOiBmdW5jdGlvbigpIHsNCgkJcmV0dXJuIHRoaXMuX3NldE9wdGlvbiggImRpc2FibGVkIiwgdHJ1ZSApOw0KCX0sDQoNCglfb246IGZ1bmN0aW9uKCBzdXBwcmVzc0Rpc2FibGVkQ2hlY2ssIGVsZW1lbnQsIGhhbmRsZXJzICkgew0KCQl2YXIgZGVsZWdhdGVFbGVtZW50LA0KCQkJaW5zdGFuY2UgPSB0aGlzOw0KDQoJCS8vIG5vIHN1cHByZXNzRGlzYWJsZWRDaGVjayBmbGFnLCBzaHVmZmxlIGFyZ3VtZW50cw0KCQlpZiAoIHR5cGVvZiBzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgIT09ICJib29sZWFuIiApIHsNCgkJCWhhbmRsZXJzID0gZWxlbWVudDsNCgkJCWVsZW1lbnQgPSBzdXBwcmVzc0Rpc2FibGVkQ2hlY2s7DQoJCQlzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgPSBmYWxzZTsNCgkJfQ0KDQoJCS8vIG5vIGVsZW1lbnQgYXJndW1lbnQsIHNodWZmbGUgYW5kIHVzZSB0aGlzLmVsZW1lbnQNCgkJaWYgKCAhaGFuZGxlcnMgKSB7DQoJCQloYW5kbGVycyA9IGVsZW1lbnQ7DQoJCQllbGVtZW50ID0gdGhpcy5lbGVtZW50Ow0KCQkJZGVsZWdhdGVFbGVtZW50ID0gdGhpcy53aWRnZXQoKTsNCgkJfSBlbHNlIHsNCgkJCS8vIGFjY2VwdCBzZWxlY3RvcnMsIERPTSBlbGVtZW50cw0KCQkJZWxlbWVudCA9IGRlbGVnYXRlRWxlbWVudCA9ICQoIGVsZW1lbnQgKTsNCgkJCXRoaXMuYmluZGluZ3MgPSB0aGlzLmJpbmRpbmdzLmFkZCggZWxlbWVudCApOw0KCQl9DQoNCgkJJC5lYWNoKCBoYW5kbGVycywgZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVyICkgew0KCQkJZnVuY3Rpb24gaGFuZGxlclByb3h5KCkgew0KCQkJCS8vIGFsbG93IHdpZGdldHMgdG8gY3VzdG9taXplIHRoZSBkaXNhYmxlZCBoYW5kbGluZw0KCQkJCS8vIC0gZGlzYWJsZWQgYXMgYW4gYXJyYXkgaW5zdGVhZCBvZiBib29sZWFuDQoJCQkJLy8gLSBkaXNhYmxlZCBjbGFzcyBhcyBtZXRob2QgZm9yIGRpc2FibGluZyBpbmRpdmlkdWFsIHBhcnRzDQoJCQkJaWYgKCAhc3VwcHJlc3NEaXNhYmxlZENoZWNrICYmDQoJCQkJCQkoIGluc3RhbmNlLm9wdGlvbnMuZGlzYWJsZWQgPT09IHRydWUgfHwNCgkJCQkJCQkkKCB0aGlzICkuaGFzQ2xhc3MoICJ1aS1zdGF0ZS1kaXNhYmxlZCIgKSApICkgew0KCQkJCQlyZXR1cm47DQoJCQkJfQ0KCQkJCXJldHVybiAoIHR5cGVvZiBoYW5kbGVyID09PSAic3RyaW5nIiA/IGluc3RhbmNlWyBoYW5kbGVyIF0gOiBoYW5kbGVyICkNCgkJCQkJLmFwcGx5KCBpbnN0YW5jZSwgYXJndW1lbnRzICk7DQoJCQl9DQoNCgkJCS8vIGNvcHkgdGhlIGd1aWQgc28gZGlyZWN0IHVuYmluZGluZyB3b3Jrcw0KCQkJaWYgKCB0eXBlb2YgaGFuZGxlciAhPT0gInN0cmluZyIgKSB7DQoJCQkJaGFuZGxlclByb3h5Lmd1aWQgPSBoYW5kbGVyLmd1aWQgPQ0KCQkJCQloYW5kbGVyLmd1aWQgfHwgaGFuZGxlclByb3h5Lmd1aWQgfHwgJC5ndWlkKys7DQoJCQl9DQoNCgkJCXZhciBtYXRjaCA9IGV2ZW50Lm1hdGNoKCAvXihcdyspXHMqKC4qKSQvICksDQoJCQkJZXZlbnROYW1lID0gbWF0Y2hbMV0gKyBpbnN0YW5jZS5ldmVudE5hbWVzcGFjZSwNCgkJCQlzZWxlY3RvciA9IG1hdGNoWzJdOw0KCQkJaWYgKCBzZWxlY3RvciApIHsNCgkJCQlkZWxlZ2F0ZUVsZW1lbnQuZGVsZWdhdGUoIHNlbGVjdG9yLCBldmVudE5hbWUsIGhhbmRsZXJQcm94eSApOw0KCQkJfSBlbHNlIHsNCgkJCQllbGVtZW50LmJpbmQoIGV2ZW50TmFtZSwgaGFuZGxlclByb3h5ICk7DQoJCQl9DQoJCX0pOw0KCX0sDQoNCglfb2ZmOiBmdW5jdGlvbiggZWxlbWVudCwgZXZlbnROYW1lICkgew0KCQlldmVudE5hbWUgPSAoZXZlbnROYW1lIHx8ICIiKS5zcGxpdCggIiAiICkuam9pbiggdGhpcy5ldmVudE5hbWVzcGFjZSArICIgIiApICsgdGhpcy5ldmVudE5hbWVzcGFjZTsNCgkJZWxlbWVudC51bmJpbmQoIGV2ZW50TmFtZSApLnVuZGVsZWdhdGUoIGV2ZW50TmFtZSApOw0KCX0sDQoNCglfZGVsYXk6IGZ1bmN0aW9uKCBoYW5kbGVyLCBkZWxheSApIHsNCgkJZnVuY3Rpb24gaGFuZGxlclByb3h5KCkgew0KCQkJcmV0dXJuICggdHlwZW9mIGhhbmRsZXIgPT09ICJzdHJpbmciID8gaW5zdGFuY2VbIGhhbmRsZXIgXSA6IGhhbmRsZXIgKQ0KCQkJCS5hcHBseSggaW5zdGFuY2UsIGFyZ3VtZW50cyApOw0KCQl9DQoJCXZhciBpbnN0YW5jZSA9IHRoaXM7DQoJCXJldHVybiBzZXRUaW1lb3V0KCBoYW5kbGVyUHJveHksIGRlbGF5IHx8IDAgKTsNCgl9LA0KDQoJX2hvdmVyYWJsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7DQoJCXRoaXMuaG92ZXJhYmxlID0gdGhpcy5ob3ZlcmFibGUuYWRkKCBlbGVtZW50ICk7DQoJCXRoaXMuX29uKCBlbGVtZW50LCB7DQoJCQltb3VzZWVudGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7DQoJCQkJJCggZXZlbnQuY3VycmVudFRhcmdldCApLmFkZENsYXNzKCAidWktc3RhdGUtaG92ZXIiICk7DQoJCQl9LA0KCQkJbW91c2VsZWF2ZTogZnVuY3Rpb24oIGV2ZW50ICkgew0KCQkJCSQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWhvdmVyIiApOw0KCQkJfQ0KCQl9KTsNCgl9LA0KDQoJX2ZvY3VzYWJsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7DQoJCXRoaXMuZm9jdXNhYmxlID0gdGhpcy5mb2N1c2FibGUuYWRkKCBlbGVtZW50ICk7DQoJCXRoaXMuX29uKCBlbGVtZW50LCB7DQoJCQlmb2N1c2luOiBmdW5jdGlvbiggZXZlbnQgKSB7DQoJCQkJJCggZXZlbnQuY3VycmVudFRhcmdldCApLmFkZENsYXNzKCAidWktc3RhdGUtZm9jdXMiICk7DQoJCQl9LA0KCQkJZm9jdXNvdXQ6IGZ1bmN0aW9uKCBldmVudCApIHsNCgkJCQkkKCBldmVudC5jdXJyZW50VGFyZ2V0ICkucmVtb3ZlQ2xhc3MoICJ1aS1zdGF0ZS1mb2N1cyIgKTsNCgkJCX0NCgkJfSk7DQoJfSwNCg0KCV90cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZXZlbnQsIGRhdGEgKSB7DQoJCXZhciBwcm9wLCBvcmlnLA0KCQkJY2FsbGJhY2sgPSB0aGlzLm9wdGlvbnNbIHR5cGUgXTsNCg0KCQlkYXRhID0gZGF0YSB8fCB7fTsNCgkJZXZlbnQgPSAkLkV2ZW50KCBldmVudCApOw0KCQlldmVudC50eXBlID0gKCB0eXBlID09PSB0aGlzLndpZGdldEV2ZW50UHJlZml4ID8NCgkJCXR5cGUgOg0KCQkJdGhpcy53aWRnZXRFdmVudFByZWZpeCArIHR5cGUgKS50b0xvd2VyQ2FzZSgpOw0KCQkvLyB0aGUgb3JpZ2luYWwgZXZlbnQgbWF5IGNvbWUgZnJvbSBhbnkgZWxlbWVudA0KCQkvLyBzbyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSB0YXJnZXQgb24gdGhlIG5ldyBldmVudA0KCQlldmVudC50YXJnZXQgPSB0aGlzLmVsZW1lbnRbIDAgXTsNCg0KCQkvLyBjb3B5IG9yaWdpbmFsIGV2ZW50IHByb3BlcnRpZXMgb3ZlciB0byB0aGUgbmV3IGV2ZW50DQoJCW9yaWcgPSBldmVudC5vcmlnaW5hbEV2ZW50Ow0KCQlpZiAoIG9yaWcgKSB7DQoJCQlmb3IgKCBwcm9wIGluIG9yaWcgKSB7DQoJCQkJaWYgKCAhKCBwcm9wIGluIGV2ZW50ICkgKSB7DQoJCQkJCWV2ZW50WyBwcm9wIF0gPSBvcmlnWyBwcm9wIF07DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJdGhpcy5lbGVtZW50LnRyaWdnZXIoIGV2ZW50LCBkYXRhICk7DQoJCXJldHVybiAhKCAkLmlzRnVuY3Rpb24oIGNhbGxiYWNrICkgJiYNCgkJCWNhbGxiYWNrLmFwcGx5KCB0aGlzLmVsZW1lbnRbMF0sIFsgZXZlbnQgXS5jb25jYXQoIGRhdGEgKSApID09PSBmYWxzZSB8fA0KCQkJZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKTsNCgl9DQp9Ow0KDQokLmVhY2goIHsgc2hvdzogImZhZGVJbiIsIGhpZGU6ICJmYWRlT3V0IiB9LCBmdW5jdGlvbiggbWV0aG9kLCBkZWZhdWx0RWZmZWN0ICkgew0KCSQuV2lkZ2V0LnByb3RvdHlwZVsgIl8iICsgbWV0aG9kIF0gPSBmdW5jdGlvbiggZWxlbWVudCwgb3B0aW9ucywgY2FsbGJhY2sgKSB7DQoJCWlmICggdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciICkgew0KCQkJb3B0aW9ucyA9IHsgZWZmZWN0OiBvcHRpb25zIH07DQoJCX0NCgkJdmFyIGhhc09wdGlvbnMsDQoJCQllZmZlY3ROYW1lID0gIW9wdGlvbnMgPw0KCQkJCW1ldGhvZCA6DQoJCQkJb3B0aW9ucyA9PT0gdHJ1ZSB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gIm51bWJlciIgPw0KCQkJCQlkZWZhdWx0RWZmZWN0IDoNCgkJCQkJb3B0aW9ucy5lZmZlY3QgfHwgZGVmYXVsdEVmZmVjdDsNCgkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307DQoJCWlmICggdHlwZW9mIG9wdGlvbnMgPT09ICJudW1iZXIiICkgew0KCQkJb3B0aW9ucyA9IHsgZHVyYXRpb246IG9wdGlvbnMgfTsNCgkJfQ0KCQloYXNPcHRpb25zID0gISQuaXNFbXB0eU9iamVjdCggb3B0aW9ucyApOw0KCQlvcHRpb25zLmNvbXBsZXRlID0gY2FsbGJhY2s7DQoJCWlmICggb3B0aW9ucy5kZWxheSApIHsNCgkJCWVsZW1lbnQuZGVsYXkoIG9wdGlvbnMuZGVsYXkgKTsNCgkJfQ0KCQlpZiAoIGhhc09wdGlvbnMgJiYgJC5lZmZlY3RzICYmICQuZWZmZWN0cy5lZmZlY3RbIGVmZmVjdE5hbWUgXSApIHsNCgkJCWVsZW1lbnRbIG1ldGhvZCBdKCBvcHRpb25zICk7DQoJCX0gZWxzZSBpZiAoIGVmZmVjdE5hbWUgIT09IG1ldGhvZCAmJiBlbGVtZW50WyBlZmZlY3ROYW1lIF0gKSB7DQoJCQllbGVtZW50WyBlZmZlY3ROYW1lIF0oIG9wdGlvbnMuZHVyYXRpb24sIG9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayApOw0KCQl9IGVsc2Ugew0KCQkJZWxlbWVudC5xdWV1ZShmdW5jdGlvbiggbmV4dCApIHsNCgkJCQkkKCB0aGlzIClbIG1ldGhvZCBdKCk7DQoJCQkJaWYgKCBjYWxsYmFjayApIHsNCgkJCQkJY2FsbGJhY2suY2FsbCggZWxlbWVudFsgMCBdICk7DQoJCQkJfQ0KCQkJCW5leHQoKTsNCgkJCX0pOw0KCQl9DQoJfTsNCn0pOw0KDQp9KSk7DQo=]]></data>
	</file>
	<file>
	  <filename>/js/jqueryrotate/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jqueryrotate/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jqueryrotate/jQueryRotate-2.2.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVkVSU0lPTjogMi4yIExBU1QgVVBEQVRFOiAxMy4wMy4yMDEyDQovKiANCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHANCiAqIA0KICogTWFkZSBieSBXaWxxMzIsIHdpbHEzMkBnbWFpbC5jb20sIFdyb2NsYXcsIFBvbGFuZCwgMDEuMjAwOQ0KICogV2Vic2l0ZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pxdWVyeXJvdGF0ZS8gDQogKi8NCihmdW5jdGlvbihqKXtmb3IodmFyIGQsaz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLnN0eWxlLGg9WyJ0cmFuc2Zvcm1Qcm9wZXJ0eSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSIsIk1velRyYW5zZm9ybSJdLGc9MDtnPGgubGVuZ3RoO2crKyl2b2lkIDAhPT1rW2hbZ11dJiYoZD1oW2ddKTt2YXIgaT0idiI9PSJcdiI7alF1ZXJ5LmZuLmV4dGVuZCh7cm90YXRlOmZ1bmN0aW9uKGEpe2lmKCEoMD09PXRoaXMubGVuZ3RofHwidW5kZWZpbmVkIj09dHlwZW9mIGEpKXsibnVtYmVyIj09dHlwZW9mIGEmJihhPXthbmdsZTphfSk7Zm9yKHZhciBiPVtdLGM9MCxmPXRoaXMubGVuZ3RoO2M8ZjtjKyspe3ZhciBlPXRoaXMuZ2V0KGMpO2lmKCFlLldpbHEzMnx8IWUuV2lscTMyLlBob3RvRWZmZWN0KXt2YXIgZD1qLmV4dGVuZCghMCx7fSxhKSxlPShuZXcgV2lscTMyLlBob3RvRWZmZWN0KGUsZCkpLl9yb290T2JqOw0KYi5wdXNoKGooZSkpfWVsc2UgZS5XaWxxMzIuUGhvdG9FZmZlY3QuX2hhbmRsZVJvdGF0aW9uKGEpfXJldHVybiBifX0sZ2V0Um90YXRlQW5nbGU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYj0wLGM9dGhpcy5sZW5ndGg7YjxjO2IrKyl7dmFyIGY9dGhpcy5nZXQoYik7Zi5XaWxxMzImJmYuV2lscTMyLlBob3RvRWZmZWN0JiYoYVtiXT1mLldpbHEzMi5QaG90b0VmZmVjdC5fYW5nbGUpfXJldHVybiBhfSxzdG9wUm90YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYj10aGlzLmxlbmd0aDthPGI7YSsrKXt2YXIgYz10aGlzLmdldChhKTtjLldpbHEzMiYmYy5XaWxxMzIuUGhvdG9FZmZlY3QmJmNsZWFyVGltZW91dChjLldpbHEzMi5QaG90b0VmZmVjdC5fdGltZXIpfX19KTtXaWxxMzI9d2luZG93LldpbHEzMnx8e307V2lscTMyLlBob3RvRWZmZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGQ/ZnVuY3Rpb24oYSxiKXthLldpbHEzMj17UGhvdG9FZmZlY3Q6dGhpc307dGhpcy5faW1nPXRoaXMuX3Jvb3RPYmo9DQp0aGlzLl9ldmVudE9iaj1hO3RoaXMuX2hhbmRsZVJvdGF0aW9uKGIpfTpmdW5jdGlvbihhLGIpe3RoaXMuX2ltZz1hO3RoaXMuX3Jvb3RPYmo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3RoaXMuX3Jvb3RPYmouc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjt0aGlzLl9yb290T2JqLldpbHEzMj17UGhvdG9FZmZlY3Q6dGhpc307YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9yb290T2JqLGEpO2lmKGEuY29tcGxldGUpdGhpcy5fTG9hZGVyKGIpO2Vsc2V7dmFyIGM9dGhpcztqUXVlcnkodGhpcy5faW1nKS5iaW5kKCJsb2FkIixmdW5jdGlvbigpe2MuX0xvYWRlcihiKX0pfX19KCk7V2lscTMyLlBob3RvRWZmZWN0LnByb3RvdHlwZT17X3NldHVwUGFyYW1ldGVyczpmdW5jdGlvbihhKXt0aGlzLl9wYXJhbWV0ZXJzPXRoaXMuX3BhcmFtZXRlcnN8fHt9OyJudW1iZXIiIT09dHlwZW9mIHRoaXMuX2FuZ2xlJiYodGhpcy5fYW5nbGU9MCk7Im51bWJlciI9PT0NCnR5cGVvZiBhLmFuZ2xlJiYodGhpcy5fYW5nbGU9YS5hbmdsZSk7dGhpcy5fcGFyYW1ldGVycy5hbmltYXRlVG89Im51bWJlciI9PT10eXBlb2YgYS5hbmltYXRlVG8/YS5hbmltYXRlVG86dGhpcy5fYW5nbGU7dGhpcy5fcGFyYW1ldGVycy5zdGVwPWEuc3RlcHx8dGhpcy5fcGFyYW1ldGVycy5zdGVwfHxudWxsO3RoaXMuX3BhcmFtZXRlcnMuZWFzaW5nPWEuZWFzaW5nfHx0aGlzLl9wYXJhbWV0ZXJzLmVhc2luZ3x8ZnVuY3Rpb24oYSxjLGYsZSxkKXtyZXR1cm4tZSooKGM9Yy9kLTEpKmMqYypjLTEpK2Z9O3RoaXMuX3BhcmFtZXRlcnMuZHVyYXRpb249YS5kdXJhdGlvbnx8dGhpcy5fcGFyYW1ldGVycy5kdXJhdGlvbnx8MUUzO3RoaXMuX3BhcmFtZXRlcnMuY2FsbGJhY2s9YS5jYWxsYmFja3x8dGhpcy5fcGFyYW1ldGVycy5jYWxsYmFja3x8ZnVuY3Rpb24oKXt9O2EuYmluZCYmYS5iaW5kIT10aGlzLl9wYXJhbWV0ZXJzLmJpbmQmJnRoaXMuX0JpbmRFdmVudHMoYS5iaW5kKX0sX2hhbmRsZVJvdGF0aW9uOmZ1bmN0aW9uKGEpe3RoaXMuX3NldHVwUGFyYW1ldGVycyhhKTsNCnRoaXMuX2FuZ2xlPT10aGlzLl9wYXJhbWV0ZXJzLmFuaW1hdGVUbz90aGlzLl9yb3RhdGUodGhpcy5fYW5nbGUpOnRoaXMuX2FuaW1hdGVTdGFydCgpfSxfQmluZEV2ZW50czpmdW5jdGlvbihhKXtpZihhJiZ0aGlzLl9ldmVudE9iail7aWYodGhpcy5fcGFyYW1ldGVycy5iaW5kKXt2YXIgYj10aGlzLl9wYXJhbWV0ZXJzLmJpbmQsYztmb3IoYyBpbiBiKWIuaGFzT3duUHJvcGVydHkoYykmJmpRdWVyeSh0aGlzLl9ldmVudE9iaikudW5iaW5kKGMsYltjXSl9dGhpcy5fcGFyYW1ldGVycy5iaW5kPWE7Zm9yKGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiZqUXVlcnkodGhpcy5fZXZlbnRPYmopLmJpbmQoYyxhW2NdKX19LF9Mb2FkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gaT9mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pbWcud2lkdGgsYz10aGlzLl9pbWcuaGVpZ2h0O3RoaXMuX2ltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2ltZyk7dGhpcy5fdmltYWdlPXRoaXMuY3JlYXRlVk1MTm9kZSgiaW1hZ2UiKTsNCnRoaXMuX3ZpbWFnZS5zcmM9dGhpcy5faW1nLnNyYzt0aGlzLl92aW1hZ2Uuc3R5bGUuaGVpZ2h0PWMrInB4Ijt0aGlzLl92aW1hZ2Uuc3R5bGUud2lkdGg9YisicHgiO3RoaXMuX3ZpbWFnZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3RoaXMuX3ZpbWFnZS5zdHlsZS50b3A9IjBweCI7dGhpcy5fdmltYWdlLnN0eWxlLmxlZnQ9IjBweCI7dGhpcy5fY29udGFpbmVyPXRoaXMuY3JlYXRlVk1MTm9kZSgiZ3JvdXAiKTt0aGlzLl9jb250YWluZXIuc3R5bGUud2lkdGg9Yjt0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PWM7dGhpcy5fY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7dGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiY29vcmRzaXplIixiLTErIiwiKyhjLTEpKTt0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fdmltYWdlKTt0aGlzLl9yb290T2JqLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7dGhpcy5fcm9vdE9iai5zdHlsZS5wb3NpdGlvbj0NCiJyZWxhdGl2ZSI7dGhpcy5fcm9vdE9iai5zdHlsZS53aWR0aD1iKyJweCI7dGhpcy5fcm9vdE9iai5zdHlsZS5oZWlnaHQ9YysicHgiO3RoaXMuX3Jvb3RPYmouc2V0QXR0cmlidXRlKCJpZCIsdGhpcy5faW1nLmdldEF0dHJpYnV0ZSgiaWQiKSk7dGhpcy5fcm9vdE9iai5jbGFzc05hbWU9dGhpcy5faW1nLmNsYXNzTmFtZTt0aGlzLl9ldmVudE9iaj10aGlzLl9yb290T2JqO3RoaXMuX2hhbmRsZVJvdGF0aW9uKGEpfTpmdW5jdGlvbihhKXt0aGlzLl9yb290T2JqLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuX2ltZy5nZXRBdHRyaWJ1dGUoImlkIikpO3RoaXMuX3Jvb3RPYmouY2xhc3NOYW1lPXRoaXMuX2ltZy5jbGFzc05hbWU7dGhpcy5fd2lkdGg9dGhpcy5faW1nLndpZHRoO3RoaXMuX2hlaWdodD10aGlzLl9pbWcuaGVpZ2h0O3RoaXMuX3dpZHRoSGFsZj10aGlzLl93aWR0aC8yO3RoaXMuX2hlaWdodEhhbGY9dGhpcy5faGVpZ2h0LzI7dmFyIGI9TWF0aC5zcXJ0KHRoaXMuX2hlaWdodCoNCnRoaXMuX2hlaWdodCt0aGlzLl93aWR0aCp0aGlzLl93aWR0aCk7dGhpcy5fd2lkdGhBZGQ9Yi10aGlzLl93aWR0aDt0aGlzLl9oZWlnaHRBZGQ9Yi10aGlzLl9oZWlnaHQ7dGhpcy5fd2lkdGhBZGRIYWxmPXRoaXMuX3dpZHRoQWRkLzI7dGhpcy5faGVpZ2h0QWRkSGFsZj10aGlzLl9oZWlnaHRBZGQvMjt0aGlzLl9pbWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9pbWcpO3RoaXMuX2FzcGVjdFc9KHBhcnNlSW50KHRoaXMuX2ltZy5zdHlsZS53aWR0aCwxMCl8fHRoaXMuX3dpZHRoKS90aGlzLl9pbWcud2lkdGg7dGhpcy5fYXNwZWN0SD0ocGFyc2VJbnQodGhpcy5faW1nLnN0eWxlLmhlaWdodCwxMCl8fHRoaXMuX2hlaWdodCkvdGhpcy5faW1nLmhlaWdodDt0aGlzLl9jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgid2lkdGgiLHRoaXMuX3dpZHRoKTt0aGlzLl9jYW52YXMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjsNCnRoaXMuX2NhbnZhcy5zdHlsZS5sZWZ0PS10aGlzLl93aWR0aEFkZEhhbGYrInB4Ijt0aGlzLl9jYW52YXMuc3R5bGUudG9wPS10aGlzLl9oZWlnaHRBZGRIYWxmKyJweCI7dGhpcy5fY2FudmFzLldpbHEzMj10aGlzLl9yb290T2JqLldpbHEzMjt0aGlzLl9yb290T2JqLmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcyk7dGhpcy5fcm9vdE9iai5zdHlsZS53aWR0aD10aGlzLl93aWR0aCsicHgiO3RoaXMuX3Jvb3RPYmouc3R5bGUuaGVpZ2h0PXRoaXMuX2hlaWdodCsicHgiO3RoaXMuX2V2ZW50T2JqPXRoaXMuX2NhbnZhczt0aGlzLl9jbnY9dGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7dGhpcy5faGFuZGxlUm90YXRpb24oYSl9fSgpLF9hbmltYXRlU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl90aW1lciYmY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTt0aGlzLl9hbmltYXRlU3RhcnRUaW1lPStuZXcgRGF0ZTt0aGlzLl9hbmltYXRlU3RhcnRBbmdsZT10aGlzLl9hbmdsZTt0aGlzLl9hbmltYXRlKCl9LA0KX2FuaW1hdGU6ZnVuY3Rpb24oKXt2YXIgYT0rbmV3IERhdGUsYj1hLXRoaXMuX2FuaW1hdGVTdGFydFRpbWU+dGhpcy5fcGFyYW1ldGVycy5kdXJhdGlvbjtpZihiJiYhdGhpcy5fcGFyYW1ldGVycy5hbmltYXRlZEdpZiljbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO2Vsc2V7KHRoaXMuX2NhbnZhc3x8dGhpcy5fdmltYWdlfHx0aGlzLl9pbWcpJiZ0aGlzLl9yb3RhdGUofn4oMTAqdGhpcy5fcGFyYW1ldGVycy5lYXNpbmcoMCxhLXRoaXMuX2FuaW1hdGVTdGFydFRpbWUsdGhpcy5fYW5pbWF0ZVN0YXJ0QW5nbGUsdGhpcy5fcGFyYW1ldGVycy5hbmltYXRlVG8tdGhpcy5fYW5pbWF0ZVN0YXJ0QW5nbGUsdGhpcy5fcGFyYW1ldGVycy5kdXJhdGlvbikpLzEwKTt0aGlzLl9wYXJhbWV0ZXJzLnN0ZXAmJnRoaXMuX3BhcmFtZXRlcnMuc3RlcCh0aGlzLl9hbmdsZSk7dmFyIGM9dGhpczt0aGlzLl90aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5fYW5pbWF0ZS5jYWxsKGMpfSwxMCl9dGhpcy5fcGFyYW1ldGVycy5jYWxsYmFjayYmDQpiJiYodGhpcy5fYW5nbGU9dGhpcy5fcGFyYW1ldGVycy5hbmltYXRlVG8sdGhpcy5fcm90YXRlKHRoaXMuX2FuZ2xlKSx0aGlzLl9wYXJhbWV0ZXJzLmNhbGxiYWNrLmNhbGwodGhpcy5fcm9vdE9iaikpfSxfcm90YXRlOmZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5QSS8xODA7cmV0dXJuIGk/ZnVuY3Rpb24oYSl7dGhpcy5fYW5nbGU9YTt0aGlzLl9jb250YWluZXIuc3R5bGUucm90YXRpb249YSUzNjArImRlZyJ9OmQ/ZnVuY3Rpb24oYSl7dGhpcy5fYW5nbGU9YTt0aGlzLl9pbWcuc3R5bGVbZF09InJvdGF0ZSgiK2ElMzYwKyJkZWcpIn06ZnVuY3Rpb24oYil7dGhpcy5fYW5nbGU9YjtiPWIlMzYwKmE7dGhpcy5fY2FudmFzLndpZHRoPXRoaXMuX3dpZHRoK3RoaXMuX3dpZHRoQWRkO3RoaXMuX2NhbnZhcy5oZWlnaHQ9dGhpcy5faGVpZ2h0K3RoaXMuX2hlaWdodEFkZDt0aGlzLl9jbnYudHJhbnNsYXRlKHRoaXMuX3dpZHRoQWRkSGFsZix0aGlzLl9oZWlnaHRBZGRIYWxmKTt0aGlzLl9jbnYudHJhbnNsYXRlKHRoaXMuX3dpZHRoSGFsZiwNCnRoaXMuX2hlaWdodEhhbGYpO3RoaXMuX2Nudi5yb3RhdGUoYik7dGhpcy5fY252LnRyYW5zbGF0ZSgtdGhpcy5fd2lkdGhIYWxmLC10aGlzLl9oZWlnaHRIYWxmKTt0aGlzLl9jbnYuc2NhbGUodGhpcy5fYXNwZWN0Vyx0aGlzLl9hc3BlY3RIKTt0aGlzLl9jbnYuZHJhd0ltYWdlKHRoaXMuX2ltZywwLDApfX0oKX07aSYmKFdpbHEzMi5QaG90b0VmZmVjdC5wcm90b3R5cGUuY3JlYXRlVk1MTm9kZT1mdW5jdGlvbigpe2RvY3VtZW50LmNyZWF0ZVN0eWxlU2hlZXQoKS5hZGRSdWxlKCIucnZtbCIsImJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpIik7dHJ5e3JldHVybiFkb2N1bWVudC5uYW1lc3BhY2VzLnJ2bWwmJmRvY3VtZW50Lm5hbWVzcGFjZXMuYWRkKCJydm1sIiwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiKSxmdW5jdGlvbihhKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiPHJ2bWw6IithKycgY2xhc3M9InJ2bWwiPicpfX1jYXRjaChhKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjwiKw0KYSsnIHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQuY29tOnZtbCIgY2xhc3M9InJ2bWwiPicpfX19KCkpfSkoalF1ZXJ5KTsNCg==]]></data>
	</file>
	<file>
	  <filename>/js/jrac/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jrac/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jrac/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jrac/images/loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/jrac/images/viewport_background.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAIAAAN/f3////yH5BAAHAP8ALAAAAAAQABAAAAIfhG+hq4jM3IFLJhoswNly/XkcBpIiVaInlLJr9FZWAQA7]]></data>
	</file>
	<file>
	  <filename>/js/jrac/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jrac/jquery.jrac.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogalF1ZXJ5IFJlc2l6ZSBBbmQgQ3JvcCAoanJhYykNCiAqIEEgalF1ZXJ5IDEuNCsgYW5kIGpRdWVyeVVpIDEuOCsgcGx1Z2luIHVuZGVyIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIHZlcnNpb24gMiBsaXNlbnNlLg0KICogQ29weXJpZ2h0IChjKSAyMDExIENlZHJpYyBHYW1wZXJ0IC0gY2dhbXBlcnRAZ21haWwuY29tDQogKi8NCg0KKGZ1bmN0aW9uKCAkICl7DQoNCiAgJC5mbi5qcmFjID0gZnVuY3Rpb24ob3B0aW9ucykgew0KDQogICAgLy8gRGVmYXVsdCBzZXR0aW5ncw0KICAgIHZhciBzZXR0aW5ncyA9IHsNCiAgICAgICdjcm9wX3dpZHRoJzogMjAwLA0KICAgICAgJ2Nyb3BfaGVpZ2h0JzogMTAwLA0KICAgICAgLy8gVGhlIHR3byBmb2xsb3dpbmcgcHJvcGVydGllcyBkZWZpbmUgdGhlIGNyb3AgcG9zaXRpb24gKHJlbGF0aXZlIHRvIHRoZQ0KICAgICAgLy8gaW1hZ2UpLg0KICAgICAgJ2Nyb3BfeCc6IDAsDQogICAgICAnY3JvcF95JzogMCwNCiAgICAgICdjcm9wX3Jlc2l6ZSc6IHRydWUsDQogICAgICAnY3JvcF9hc3BlY3RfcmF0aW8nOiBudWxsLA0KICAgICAgJ2ltYWdlX3dpZHRoJzogbnVsbCwNCiAgICAgICdpbWFnZV9oZWlnaHQnOiBudWxsLA0KICAgICAgJ3pvb21fbWluJzogMTAwLA0KICAgICAgJ3pvb21fbWF4JzogMzAwMCwNCiAgICAgICd2aWV3cG9ydF9pbWFnZV9zdXJyb3VuZGluZyc6IGZhbHNlLCAvLyBTZXQgdGhlIHZpZXdwb3J0IHRvIHN1cnJvdW5kIHRoZSBpbWFnZSBvbiBsb2FkDQogICAgICAndmlld3BvcnRfd2lkdGgnOiBudWxsLA0KICAgICAgJ3ZpZXdwb3J0X2hlaWdodCc6IG51bGwsDQogICAgICAndmlld3BvcnRfcmVzaXplJzogdHJ1ZSwNCiAgICAgIC8vIFRoZSB0d28gZm9sbG93aW5nIHByb3BlcnRpZXMgYWxsb3cgdG8gcG9zaXRpb24gdGhlIGNvbnRlbnQgKG5lZ2F0aXZlDQogICAgICAvLyB2YWx1ZSBhbGxvd2VkKS4gSXQgY2FuIGJlIHVzZSB0byBmb2N1cyB0aGUgdmlld3BvcnQgb24gdGhlIGNyb3BwZWQNCiAgICAgIC8vIHBhcnQgb2YgdGhlIGltYWdlLg0KICAgICAgJ3ZpZXdwb3J0X2NvbnRlbnRfbGVmdCc6IDAsDQogICAgICAndmlld3BvcnRfY29udGVudF90b3AnOiAwLA0KICAgICAgLy8gU3VibWl0IGhlcmUgYSBjYWxsYmFjayBmdW5jdGlvbiAoY29udGV4dCBpcyB0aGUgdmlld3BvcnQpLg0KICAgICAgJ3ZpZXdwb3J0X29ubG9hZCc6IG51bGwNCiAgICB9Ow0KDQogICAgLy8gQXBwbHkgdGhlIHJlc2l6ZSBhbmQgY3JvcCB0b29scyB0byBlYWNoIGltYWdlcw0KICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7DQoNCiAgICAgIGlmICghJCh0aGlzKS5pcygnaW1nJykpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KDQogICAgICAvLyBSZWFkIG9wdGlvbnMNCiAgICAgIHZhciBkZXN0cm95ID0gZmFsc2U7DQogICAgICBpZiAoIHR5cGVvZihvcHRpb25zKSA9PSAnb2JqZWN0JyApIHsNCiAgICAgICAgJC5leHRlbmQoIHNldHRpbmdzLCBvcHRpb25zICk7DQogICAgICB9DQogICAgICBlbHNlIGlmIChvcHRpb25zID09ICdkZXN0cm95Jykgew0KICAgICAgICBkZXN0cm95ID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgdmFyICRpbWFnZSA9ICQodGhpcyk7ICAgICAgDQogICAgICANCiAgICAgIC8vIFRlc3QgaWYganJhYyB3YXMgcHJldmlvdXNseSBydW4NCiAgICAgIHZhciBqcmFjX2xvYWRlZCA9IGZhbHNlOyAgICAgIA0KICAgICAgaWYgKCRpbWFnZS5wYXJlbnQoKS5oYXNDbGFzcygnanJhY192aWV3cG9ydCcpKSB7DQogICAgICAgIGpyYWNfbG9hZGVkID0gdHJ1ZTsgICAgICAgIA0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiAoanJhY19sb2FkZWQgJiYgZGVzdHJveSkgew0KICAgICAgICAvLyBVbmxvYWQganJhYyBpZiBhc2tlZA0KICAgICAgICAkaW1hZ2UuZHJhZ2dhYmxlKCJkZXN0cm95Iik7DQogICAgICAgICRpbWFnZS5wYXJlbnQoKS5maW5kKCcuanJhY19jcm9wJykucmVtb3ZlKCk7DQogICAgICAgICRpbWFnZS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcuanJhY196b29tX3NsaWRlcicpLnJlbW92ZSgpOw0KICAgICAgICAkaW1hZ2UucGFyZW50KCkuYXBwZW5kKCRpbWFnZS5kYXRhKCdvcmlnaW5hbCcpKTsgLy8gcmVzdG9yZSBvcmlnaW5hbCBpbWFnZQ0KICAgICAgICAkaW1hZ2UucGFyZW50KCkudW53cmFwKCk7IC8vIHJlbW92ZSBjb250YWluZXINCiAgICAgICAgJGltYWdlLnVud3JhcCgpOyAvLyByZW1vdmUgdmlld3BvcnQNCiAgICAgICAgJGltYWdlLnJlbW92ZSgpOyAvLyByZW1vdmUgaW1hZ2Ugd2hpY2ggd2FzIGFsdGVyZWQgKGluIGl0cyBjc3MgYXR0cmlidXRlcykNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICAvLyBSZWNvcmQgaW1hZ2UgYmVmb3JlIHNvbWUgb2YgaXRzIGF0dHJpYnV0ZXMgZ2V0IGFsdGVyZWQgYnkgc29tZSANCiAgICAgICAgLy8ganJhYyBjc3Mgb3Igc29tZSB1c2VyIHNpemUgb3IgcHJvcG9ydGlvbiBjaGFuZ2VzLg0KICAgICAgICAkaW1hZ2UuZGF0YSgnb3JpZ2luYWwnLCAkaW1hZ2UuY2xvbmUoKSk7DQogICAgICB9DQoNCiAgICAgIC8vIERvIG5vdGhpbmcgbW9yZSBpZiBkZXN0cm95IGlzIGFza2VkDQogICAgICBpZiAoZGVzdHJveSkgew0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICANCiAgICAgIC8vIFByZXBhcmUgaW1hZ2UNCiAgICAgIGlmICghanJhY19sb2FkZWQpIHsNCiAgICAgICAgJGltYWdlLmhpZGUoKS5jc3MoJ3Bvc2l0aW9uJywnYWJzb2x1dGUnKS53cmFwKCc8ZGl2IGNsYXNzPSJqcmFjX2NvbnRhaW5lciI+PGRpdiBjbGFzcz0ianJhY192aWV3cG9ydCI+PC9kaXY+PC9kaXY+Jyk7DQogICAgICB9DQoNCiAgICAgIC8vIEdldCB2aWV3cG9ydCBhbmQgY29udGFpbmVyIHJlZmVyZW5jZXMNCiAgICAgIHZhciAkdmlld3BvcnQgPSAkaW1hZ2UucGFyZW50KCk7DQogICAgICB2YXIgJGNvbnRhaW5lciA9ICR2aWV3cG9ydC5wYXJlbnQoKTsNCg0KICAgICAgLy8gQWRkIGEgd2FpdGluZyBvbiBsb2FkIGlucHV0IGltYWdlDQogICAgICB2YXIgJGxvYWRpbmcgPSAkKCc8ZGl2IGNsYXNzPSJqcmFjX2xvYWRpbmciIC8+Jyk7DQogICAgICAkdmlld3BvcnQuYXBwZW5kKCRsb2FkaW5nKTsNCg0KICAgICAgLy8gVGhlIGZvbGxvd2luZyBwcm9jZWR1cmUgaG9sZCBidXNpbmVzcyBpbnRlbmQgdG8gYmUgcnVuIG9uY2UgdGhlIGltYWdlDQogICAgICAvLyBpcyBsb2FkZWQgKGxvYWQgZXZlbnQpLg0KICAgICAgdmFyIGltYWdlX2xvYWRfaGFuZGxlciA9IGZ1bmN0aW9uKCl7DQoNCiAgICAgICAgLy8gQWRkIHNvbWUgY3VzdG9tIHByb3BlcnRpZXMgdG8gJGltYWdlDQogICAgICAgICQuZXh0ZW5kKCRpbWFnZSwgew0KICAgICAgICAgIHNjYWxlX3Byb3BvcnRpb25fbG9ja2VkOiB0cnVlLA0KICAgICAgICAgIG9yaWdpbmFsV2lkdGg6ICRpbWFnZS53aWR0aCgpLA0KICAgICAgICAgIG9yaWdpbmFsSGVpZ2h0OiAkaW1hZ2UuaGVpZ2h0KCkNCiAgICAgICAgfSk7DQoNCiAgICAgICAgLy8gU2V0IGdpdmVuIG9wdGlvbmFsIGltYWdlIHNpemUNCiAgICAgICAgJGltYWdlLndpZHRoKHNldHRpbmdzLmltYWdlX3dpZHRoKS5oZWlnaHQoc2V0dGluZ3MuaW1hZ2VfaGVpZ2h0KTsNCg0KICAgICAgICAvLyBBcHBseSB0aGUgdmlld3BvcnQgaW1hZ2Ugc3Vycm91bmRpbmcgaXMgYXNrZWQNCiAgICAgICAgaWYgKHNldHRpbmdzLnZpZXdwb3J0X2ltYWdlX3N1cnJvdW5kaW5nKSB7DQogICAgICAgICAgJHZpZXdwb3J0LndpZHRoKCRpbWFnZS53aWR0aCgpKS5oZWlnaHQoJGltYWdlLmhlaWdodCgpKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAkdmlld3BvcnQud2lkdGgoc2V0dGluZ3Mudmlld3BvcnRfd2lkdGgpLmhlaWdodChzZXR0aW5ncy52aWV3cG9ydF9oZWlnaHQpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU2V0IHRoZSB2aWV3cG9ydCBjb250ZW50IHBvc2l0aW9uIGZvciB0aGUgaW1hZ2UNCiAgICAgICAgJGltYWdlLmNzcyh7J2xlZnQnOiBzZXR0aW5ncy52aWV3cG9ydF9jb250ZW50X2xlZnQsICd0b3AnOiBzZXR0aW5ncy52aWV3cG9ydF9jb250ZW50X3RvcH0pOw0KDQogICAgICAgIC8vIENyZWF0ZSB0aGUgem9vbSB3aWRnZXQgd2hpY2ggcGVybWl0IHRvIHJlc2l6ZSB0aGUgaW1hZ2UNCiAgICAgICAgaWYgKCFqcmFjX2xvYWRlZCkgew0KICAgICAgICAgIHZhciAkem9vbV93aWRnZXQgPSAkKCc8ZGl2IGNsYXNzPSJqcmFjX3pvb21fc2xpZGVyIj48ZGl2IGNsYXNzPSJ1aS1zbGlkZXItaGFuZGxlIj48L2Rpdj48L2Rpdj4nKQ0KICAgICAgICAgIC53aWR0aCgkdmlld3BvcnQud2lkdGgoKSkNCiAgICAgICAgICAuc2xpZGVyKHsNCiAgICAgICAgICAgIHZhbHVlOiAkaW1hZ2Uud2lkdGgoKSwNCiAgICAgICAgICAgIG1pbjogc2V0dGluZ3Muem9vbV9taW4sDQogICAgICAgICAgICBtYXg6IHNldHRpbmdzLnpvb21fbWF4LA0KICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAkLmV4dGVuZCgkem9vbV93aWRnZXQsew0KICAgICAgICAgICAgICAgIG9uX3N0YXJ0X3dpZHRoX3ZhbHVlOiB1aS52YWx1ZSwNCiAgICAgICAgICAgICAgICBvbl9zdGFydF9oZWlnaHRfdmFsdWU6ICRpbWFnZS5oZWlnaHQoKQ0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHNsaWRlOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IE1hdGgucm91bmQoJHpvb21fd2lkZ2V0Lm9uX3N0YXJ0X2hlaWdodF92YWx1ZSAqIHVpLnZhbHVlIC8gJHpvb21fd2lkZ2V0Lm9uX3N0YXJ0X3dpZHRoX3ZhbHVlKTsNCiAgICAgICAgICAgICAgJGltYWdlLmhlaWdodChoZWlnaHQpOw0KICAgICAgICAgICAgICAkaW1hZ2Uud2lkdGgodWkudmFsdWUpOw0KICAgICAgICAgICAgICAkdmlld3BvcnQub2JzZXJ2YXRvci5ub3RpZnkoJ2pyYWNfaW1hZ2VfaGVpZ2h0JywgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5KCdqcmFjX2ltYWdlX3dpZHRoJywgdWkudmFsdWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICAgICRjb250YWluZXIuYXBwZW5kKCR6b29tX3dpZGdldCk7DQogICAgICAgIA0KICAgICAgICAgIC8vIE1ha2UgdGhlIHZpZXdwb3J0IHJlc2l6ZWFibGUNCiAgICAgICAgICBpZiAoc2V0dGluZ3Mudmlld3BvcnRfcmVzaXplKSB7DQogICAgICAgICAgICAkdmlld3BvcnQucmVzaXphYmxlKHsNCiAgICAgICAgICAgICAgcmVzaXplOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICAkem9vbV93aWRnZXQud2lkdGgodWkuc2l6ZS53aWR0aCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIEVuYWJsZSB0aGUgaW1hZ2UgZHJhZ2dhYmxlIGludGVyYWN0aW9uDQogICAgICAgICAgJGltYWdlLmRyYWdnYWJsZSh7DQogICAgICAgICAgICBkcmFnOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgaWYgKHVpLnBvc2l0aW9uLmxlZnQgIT0gdWkub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KSB7DQogICAgICAgICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5KCdqcmFjX2Nyb3BfeCcsICR2aWV3cG9ydC5vYnNlcnZhdG9yLmNyb3BfcG9zaXRpb25feCgpKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAodWkucG9zaXRpb24udG9wICE9IHVpLm9yaWdpbmFsUG9zaXRpb24udG9wKSB7DQogICAgICAgICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5KCdqcmFjX2Nyb3BfeScsICR2aWV3cG9ydC5vYnNlcnZhdG9yLmNyb3BfcG9zaXRpb25feSgpKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgLy8gQnVpbGQgdGhlIGNyb3AgZWxlbWVudA0KICAgICAgICAgIHZhciAkY3JvcCA9ICQoJzxkaXYgY2xhc3M9ImpyYWNfY3JvcCI+PGRpdiBjbGFzcz0ianJhY19jcm9wX2RyYWdfaGFuZGxlciI+PC9kaXY+PC9kaXY+JykNCiAgICAgICAgICAuY3NzKHsNCiAgICAgICAgICAgICd3aWR0aCc6IHNldHRpbmdzLmNyb3Bfd2lkdGgsDQogICAgICAgICAgICAnaGVpZ2h0Jzogc2V0dGluZ3MuY3JvcF9oZWlnaHQsDQogICAgICAgICAgICAnbGVmdCc6c2V0dGluZ3MuY3JvcF94K3NldHRpbmdzLnZpZXdwb3J0X2NvbnRlbnRfbGVmdCwNCiAgICAgICAgICAgICd0b3AnOnNldHRpbmdzLmNyb3BfeStzZXR0aW5ncy52aWV3cG9ydF9jb250ZW50X3RvcA0KICAgICAgICAgIH0pLmRyYWdnYWJsZSh7DQogICAgICAgICAgICBjb250YWlubWVudDogJHZpZXdwb3J0LA0KICAgICAgICAgICAgaGFuZGxlOiAnZGl2LmpyYWNfY3JvcF9kcmFnX2hhbmRsZXInLA0KICAgICAgICAgICAgZHJhZzogZnVuY3Rpb24oZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgIGlmICh1aS5wb3NpdGlvbi5sZWZ0ICE9IHVpLm9yaWdpbmFsUG9zaXRpb24ubGVmdCkgew0KICAgICAgICAgICAgICAgICR2aWV3cG9ydC5vYnNlcnZhdG9yLm5vdGlmeSgnanJhY19jcm9wX3gnLCAkdmlld3BvcnQub2JzZXJ2YXRvci5jcm9wX3Bvc2l0aW9uX3goKSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKHVpLnBvc2l0aW9uLnRvcCAhPSB1aS5vcmlnaW5hbFBvc2l0aW9uLnRvcCkgew0KICAgICAgICAgICAgICAgICR2aWV3cG9ydC5vYnNlcnZhdG9yLm5vdGlmeSgnanJhY19jcm9wX3knLCAkdmlld3BvcnQub2JzZXJ2YXRvci5jcm9wX3Bvc2l0aW9uX3koKSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgICBpZiAoc2V0dGluZ3MuY3JvcF9yZXNpemUpIHsNCiAgICAgICAgICAgICRjcm9wLnJlc2l6YWJsZSh7DQogICAgICAgICAgICAgIGNvbnRhaW5tZW50OiAkdmlld3BvcnQsDQogICAgICAgICAgICAgIGFzcGVjdFJhdGlvOiBzZXR0aW5ncy5jcm9wX2FzcGVjdF9yYXRpbywNCiAgICAgICAgICAgICAgcmVzaXplOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICBpZiAodWkuc2l6ZS53aWR0aCAhPSB1aS5vcmlnaW5hbFNpemUud2lkdGgpIHsNCiAgICAgICAgICAgICAgICAgICR2aWV3cG9ydC5vYnNlcnZhdG9yLm5vdGlmeSgnanJhY19jcm9wX3dpZHRoJywgJGNyb3Aud2lkdGgoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh1aS5zaXplLmhlaWdodCAhPSB1aS5vcmlnaW5hbFNpemUuaGVpZ2h0KSB7DQogICAgICAgICAgICAgICAgICAkdmlld3BvcnQub2JzZXJ2YXRvci5ub3RpZnkoJ2pyYWNfY3JvcF9oZWlnaHQnLCAkY3JvcC5oZWlnaHQoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICAgIH0NCiAgICAgICAgICAkdmlld3BvcnQuYXBwZW5kKCRjcm9wKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEV4dGVuZCB2aWV3cG9ydCB3aXRjaCB1c2VmdWxsIG9iamVjdHMgYXMgaXQgd2lsbCBiZSBleHBvc2VkIHRvIHVzZXINCiAgICAgICAgLy8gZnVuY3Rpb25zIGludGVyZmFjZQ0KICAgICAgICAkLmV4dGVuZCgkdmlld3BvcnQsIHsNCiAgICAgICAgICAkY29udGFpbmVyOiAkY29udGFpbmVyLA0KICAgICAgICAgICRpbWFnZTogJGltYWdlLA0KICAgICAgICAgICRjcm9wOiAkY3JvcCwNCiAgICAgICAgICAkem9vbV93aWRnZXQ6ICR6b29tX3dpZGdldCwNCiAgICAgICAgICAvLyBMZXQgbWUgaW50cm9kdWNlIHRoZSBmb2xsb3dpbmcgVGVybWluYXRvcidzIGZyaWVuZCB3aGljaCBoYW5kbGUgdGhlDQogICAgICAgICAgLy8gY3JlYXRpb24gb2YgdGhlIHZpZXdwb3J0IGV2ZW50cy4NCiAgICAgICAgICBvYnNlcnZhdG9yOiB7DQogICAgICAgICAgICBpdGVtczoge30sDQogICAgICAgICAgICAvLyBSZWdpc3RlciBhbiBldmVudCB3aXRoIGEgZ2l2ZW4gZWxlbWVudA0KICAgICAgICAgICAgcmVnaXN0ZXI6IGZ1bmN0aW9uKGV2ZW50X25hbWUsIGVsZW1lbnQsIG9uZXZlbnRfY2FsbGJhY2spIHsNCiAgICAgICAgICAgICAgaWYgKGV2ZW50X25hbWUgJiYgZWxlbWVudCkgew0KICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbZXZlbnRfbmFtZV0gPSB7DQogICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LA0KICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IG9uZXZlbnRfY2FsbGJhY2sNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgLy8gVW5yZWdpc3RlciBhbiBldmVudA0KICAgICAgICAgICAgdW5yZWdpc3RlcjogZnVuY3Rpb24oZXZlbnRfbmFtZSkgew0KICAgICAgICAgICAgICBkZWxldGUgdGhpcy5pdGVtc1tldmVudF9uYW1lXTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBUcmlnZ2VyIGFuIGV2ZW50IGFuZCBvcHRpb25hbGx5IHN1cHBseSBhIHZhbHVlDQogICAgICAgICAgICBub3RpZnk6IGZ1bmN0aW9uKGV2ZW50X25hbWUsIHZhbHVlKSB7DQogICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zW2V2ZW50X25hbWVdKSB7DQogICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLml0ZW1zW2V2ZW50X25hbWVdLmVsZW1lbnQ7DQogICAgICAgICAgICAgICAgdmFyIG9uZXZlbnRfY2FsbGJhY2sgPSB0aGlzLml0ZW1zW2V2ZW50X25hbWVdLmNhbGxiYWNrOw0KICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlcihldmVudF9uYW1lLFskdmlld3BvcnQsIHZhbHVlXSk7DQogICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvbmV2ZW50X2NhbGxiYWNrKSkgew0KICAgICAgICAgICAgICAgICAgb25ldmVudF9jYWxsYmFjay5jYWxsKCR2aWV3cG9ydCwgZXZlbnRfbmFtZSwgZWxlbWVudCwgdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAkaW1hZ2UudHJpZ2dlcignanJhY19ldmVudHMnLFskdmlld3BvcnRdKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBub3RpZnlfYWxsOiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2pyYWNfY3JvcF94JywgdGhpcy5jcm9wX3Bvc2l0aW9uX3goKSk7DQogICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2Nyb3BfeScsIHRoaXMuY3JvcF9wb3NpdGlvbl95KCkpOw0KICAgICAgICAgICAgICB0aGlzLm5vdGlmeSgnanJhY19jcm9wX3dpZHRoJywgJGNyb3Aud2lkdGgoKSk7DQogICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2Nyb3BfaGVpZ2h0JywgJGNyb3AuaGVpZ2h0KCkpOw0KICAgICAgICAgICAgICB0aGlzLm5vdGlmeSgnanJhY19pbWFnZV93aWR0aCcsICRpbWFnZS53aWR0aCgpKTsNCiAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2pyYWNfaW1hZ2VfaGVpZ2h0JywgJGltYWdlLmhlaWdodCgpKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBSZXR1cm4gY3JvcCB4IHBvc2l0aW9uIHJlbGF0aXZlIHRvICRpbWFnZQ0KICAgICAgICAgICAgY3JvcF9wb3NpdGlvbl94OiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgcmV0dXJuICRjcm9wLnBvc2l0aW9uKCkubGVmdCAtICRpbWFnZS5wb3NpdGlvbigpLmxlZnQ7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgLy8gUmV0dXJuIGNyb3AgeSBwb3NpdGlvbiByZWxhdGl2ZSB0byAkaW1hZ2UNCiAgICAgICAgICAgIGNyb3BfcG9zaXRpb25feTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgIHJldHVybiAkY3JvcC5wb3NpdGlvbigpLnRvcCAtICRpbWFnZS5wb3NpdGlvbigpLnRvcDsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBEb2VzIHRoZSBjcm9wIGlzIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSBpbWFnZT8NCiAgICAgICAgICAgIGNyb3BfY29uc2lzdGVudDogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyb3BfcG9zaXRpb25feCgpPj0wICYmIHRoaXMuY3JvcF9wb3NpdGlvbl95KCk+PTANCiAgICAgICAgICAgICAgJiYgdGhpcy5jcm9wX3Bvc2l0aW9uX3goKSArICRjcm9wLndpZHRoKCk8PSRpbWFnZS53aWR0aCgpDQogICAgICAgICAgICAgICYmIHRoaXMuY3JvcF9wb3NpdGlvbl95KCkgKyAkY3JvcC5oZWlnaHQoKTw9JGltYWdlLmhlaWdodCgpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIC8vIFNldCBhIHByb3BlcnR5ICh3aGljaCBoaXMgbmFtZSBpcyBvbmUgb2YgdGhlIGV2ZW50KSB3aXRoIGEgZ2l2ZW4NCiAgICAgICAgICAgIC8vIHZhbHVlIHRoZW4gbm90aWZ5IHRoaXMgb3BlcmF0aW9uDQogICAgICAgICAgICBzZXRfcHJvcGVydHk6IGZ1bmN0aW9uKHRoYXQsIHZhbHVlKSB7DQogICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpOw0KICAgICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHN3aXRjaCAodGhhdCkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ2pyYWNfY3JvcF94JzoNCiAgICAgICAgICAgICAgICAgICRjcm9wLmNzcygnbGVmdCcsdmFsdWUgKyAkaW1hZ2UucG9zaXRpb24oKS5sZWZ0KTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2pyYWNfY3JvcF95JzoNCiAgICAgICAgICAgICAgICAgICRjcm9wLmNzcygndG9wJyx2YWx1ZSArICRpbWFnZS5wb3NpdGlvbigpLnRvcCk7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdqcmFjX2Nyb3Bfd2lkdGgnOg0KICAgICAgICAgICAgICAgICAgJGNyb3Aud2lkdGgodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnanJhY19jcm9wX2hlaWdodCc6DQogICAgICAgICAgICAgICAgICAkY3JvcC5oZWlnaHQodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnanJhY19pbWFnZV93aWR0aCc6DQogICAgICAgICAgICAgICAgICBpZiAoJGltYWdlLnNjYWxlX3Byb3BvcnRpb25fbG9ja2VkKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZV9oZWlnaHQgPSBNYXRoLnJvdW5kKCRpbWFnZS5oZWlnaHQoKSAqIHZhbHVlIC8gJGltYWdlLndpZHRoKCkpOw0KICAgICAgICAgICAgICAgICAgICAkaW1hZ2UuaGVpZ2h0KGltYWdlX2hlaWdodCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2ltYWdlX2hlaWdodCcsIGltYWdlX2hlaWdodCk7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAkaW1hZ2Uud2lkdGgodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgJHpvb21fd2lkZ2V0LnNsaWRlcigndmFsdWUnLCB2YWx1ZSk7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdqcmFjX2ltYWdlX2hlaWdodCc6DQogICAgICAgICAgICAgICAgICBpZiAoJGltYWdlLnNjYWxlX3Byb3BvcnRpb25fbG9ja2VkKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZV93aWR0aCA9IE1hdGgucm91bmQoJGltYWdlLndpZHRoKCkgKiB2YWx1ZSAvICRpbWFnZS5oZWlnaHQoKSk7DQogICAgICAgICAgICAgICAgICAgICRpbWFnZS53aWR0aChpbWFnZV93aWR0aCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2ltYWdlX3dpZHRoJywgaW1hZ2Vfd2lkdGgpOw0KICAgICAgICAgICAgICAgICAgICAkem9vbV93aWRnZXQuc2xpZGVyKCd2YWx1ZScsIGltYWdlX3dpZHRoKTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICRpbWFnZS5oZWlnaHQodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgdGhpcy5ub3RpZnkodGhhdCwgdmFsdWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgLy8gSGlkZSB0aGUgbG9hZGluZyBub3RpY2UNCiAgICAgICAgJGxvYWRpbmcuaGlkZSgpOw0KICAgICAgICAkbG9hZGluZy5yZW1vdmUoKTsNCg0KICAgICAgICAvLyBGaW5hbGx5IGRpc3BsYXkgdGhlIGltYWdlDQogICAgICAgICRpbWFnZS5zaG93KCk7DQoNCiAgICAgICAgLy8gVHJpZ2dlciB0aGUgdmlld3BvcnRfb25sb2FkIGNhbGxiYWNrDQogICAgICAgIGlmICgkLmlzRnVuY3Rpb24oc2V0dGluZ3Mudmlld3BvcnRfb25sb2FkKSkgew0KICAgICAgICAgIHNldHRpbmdzLnZpZXdwb3J0X29ubG9hZC5jYWxsKCR2aWV3cG9ydCk7DQogICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5X2FsbCgpOw0KICAgICAgICB9DQogICAgICB9Ow0KDQogICAgICAvLyBXaGVuIGFuIGltYWdlIGlzIHVzaW5nIGFuIHNyYyBpbWFnZSAiZGF0YSIgVVJMIHNjaGVtZSB0aGVuIGl0IGFwcGVhciANCiAgICAgIC8vIHRoYXQgdGhlIGltYWdlIGxvYWQgZXZlbnQgbmV2ZXIgZ2V0IGZpcmVkLiBUaGVuIGZpcmUgZGlyZWN0bHkNCiAgICAgIC8vIGltYWdlX2xvYWRfaGFuZGxlcigpIGluIHRoYXQgY2FzZS4NCiAgICAgIHZhciBzcmMgPSAkaW1hZ2UuYXR0cignc3JjJyk7DQogICAgICBpZiAoL15kYXRhOmltYWdlLy50ZXN0KHNyYykpIHsNCiAgICAgICAgIGltYWdlX2xvYWRfaGFuZGxlcigpOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIHNyYyA9IHNyYyArIChzcmMuc2VhcmNoKC9cPy8pPDA/Jz8nOicmJykgKyAnanJhY3JhbmRvbT0nICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsNCiAgICAgICAgJCgnPGltZz4nKS5hdHRyKCdzcmMnLCBzcmMpLmxvYWQoaW1hZ2VfbG9hZF9oYW5kbGVyKTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfTsNCn0pKCBqUXVlcnkgKTsNCg==]]></data>
	</file>
	<file>
	  <filename>/js/jrac/style.jrac.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogalF1ZXJ5IFJlc2l6ZSBBbmQgQ3JvcCAoanJhYykgKi8NCg0KLmpyYWNfY29udGFpbmVyIHt9DQoNCi5qcmFjX3ZpZXdwb3J0IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBib3JkZXI6MXB4IHNvbGlkICNjY2M7DQogIHdpZHRoOjY0MHB4Ow0KICBoZWlnaHQ6NDgwcHg7DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnaW1hZ2VzL3ZpZXdwb3J0X2JhY2tncm91bmQuZ2lmJyk7DQp9DQoNCi5qcmFjX2xvYWRpbmcgew0KICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2ltYWdlcy9sb2FkaW5nLmdpZicpOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7DQogIGJhY2tncm91bmQtcG9zaXRpb246Y2VudGVyOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowOw0KfQ0KDQouanJhY19jcm9wIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBib3JkZXI6IDFweCBzb2xpZCB5ZWxsb3c7DQp9DQoNCi5qcmFjX2Nyb3BfZHJhZ19oYW5kbGVyIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgb3BhY2l0eTogLjE7IC8qIEZYL09wZXJhL1NhZmFyaS9DaHJvbWUgKi8NCiAgLW1zLWZpbHRlcjogImFscGhhKG9wYWNpdHk9MTApIjsgLyogSUU4ICovDQogIGZpbHRlcjogYWxwaGEob3BhY2l0eSA9IDEwKTsgLyogSUU2L0lFNyAqLw0KfQ0KDQouanJhY192aWV3cG9ydCBpbWcsIC5qcmFjX2Nyb3BfZHJhZ19oYW5kbGVyIHsNCiAgY3Vyc29yOiBwb2ludGVyOw0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNBDQokbGFuZ1snYWRtaW5kZXNjcmlwdGlvbiddID0gJ1N0b3JlIHVwbG9hZHMgaW4gQVdTIFMzJzsNCiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGUgQVdTIFMzIFVwbG9hZHMgbW9kdWxlPyc7DQokbGFuZ1snYWRtaW5fc2F2ZSddID0gIlNhdmUiOw0KJGxhbmdbJ2FjY2Vzc19rZXknXSA9ICdBY2Nlc3Mga2V5cyc7DQokbGFuZ1snYWxsb3dlZCddID0gJ0FsbG93ZWQnOw0KJGxhbmdbJ2F1dGhvcl9sYWJlbCddID0gJ1Bvc3RlZCBieTonOw0KJGxhbmdbJ2FjY2Vzc19yZWdpb24nXSA9ICdSZWdpb24nOw0KJGxhbmdbJ2FjY2Vzc19rZXknXSA9ICdBV1MgQWNjZXNzIEtleSBJRCc7DQokbGFuZ1snYWNjZXNzX3NlY3JldF9rZXknXSA9ICdBV1MgU2VjcmV0IEFjY2VzcyBLZXknOw0KJGxhbmdbJ2F1dGhfbWV0aG9kJ10gPSAnQXV0aGVudGljYXRpb24gTWV0aG9kJzsNCiRsYW5nWydhdXRoX2NyZWRlbnRpYWxzJ10gPSAnU2F2ZWQgQ3JlZGVudGlhbHMgKEFjY2VzcyBLZXkvU2VjcmV0KSc7DQokbGFuZ1snYXV0aF9pYW1fcm9sZSddID0gJ0lBTSBSb2xlIChFQzIvRUNTIEluc3RhbmNlIFByb2ZpbGUpJzsNCiRsYW5nWydoZWxwX2F1dGhfbWV0aG9kJ10gPSAnQ2hvb3NlIGhvdyB0byBhdXRoZW50aWNhdGUgd2l0aCBBV1MuIFVzZSBJQU0gUm9sZSBpZiBydW5uaW5nIG9uIEVDMi9FQ1Mgd2l0aCBhbiBhdHRhY2hlZCByb2xlLCBvdGhlcndpc2UgdXNlIFNhdmVkIENyZWRlbnRpYWxzLic7DQokbGFuZ1snaGVscF9hdXRoX2NyZWRlbnRpYWxzX29ubHknXSA9ICdPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgU2F2ZWQgQ3JlZGVudGlhbHMgYXV0aGVudGljYXRpb24gbWV0aG9kLic7DQojQg0KJGxhbmdbJ2J1Y2tldF9uYW1lJ10gPSAnQnVja2V0IE5hbWUnOw0KI0MNCiRsYW5nWydjYXRlZ29yeV9sYWJlbCddID0gJ0NhdGVnb3J5Oic7DQokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsJzsNCiRsYW5nWydjaG9vc2VfZmlsZSddID0gJ0Nob29zZSBmaWxlJzsNCiRsYW5nWydjb25maWcnXSA9ICdBV1MgUzMgTW9kdWxlIENvbmZpZ3VyYXRpb24nOw0KJGxhbmdbJ2N1c3RvbV91cmwnXSA9ICdDdXN0b20gVVJMJzsNCiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnRW50ZXIgdGhlIHRleHQgZGlzcGxheWVkIGluIHRoaXMgaW1hZ2UnOw0KI0QNCiRsYW5nWydkYXRlJ10gPSAnRGF0ZSc7DQokbGFuZ1snZGVsZXRlJ10gPSAnRGVsZXRlJzsNCiRsYW5nWydkZWZhdWx0X29wdGlvbnMnXSA9ICdNb2R1bGUgZGVmYXVsdHMnOw0KJGxhbmdbJ2RlbGV0ZXNlbGVjdGVkJ10gPSAnRGVsZXRlIHRoZSBzZWxlY3RlZCBmaWxlcy9kaXJlY3Rvcmllcyc7DQokbGFuZ1snZGVsZXRlc2VsZWN0ZWRjYW5jZWxsZWQnXSA9ICdEZWxldGlvbiBvZiBzZWxlY3RlZCBmaWxlcyBjYW5jZWxlZCc7DQokbGFuZ1snZGVsZXRlc3VjY2VzcyddID0gJ0l0ZW1zIHN1Y2Nlc3NmdWxseSBkZWxldGVkJzsNCiRsYW5nWydkZXNjX2ZpbGVtYW5hZ2VyX3NldHRpbmdzJ10gPSAnRWRpdCBGaWxlIE1hbmFnZXIgU2V0dGluZ3MnOw0KJGxhbmdbJ2RpcmNobW9kZmFpbG11bHRpJ10gPSAnQ2hhbmdpbmcgcGVybWlzc2lvbnMgb24gdGhlIGRpcmVjdG9yeSBmYWlsZWQsIHNvbWUgb2YgaXRcJ3MgY29udGVudCBtYXkgaGF2ZSBnb3R0ZW4gbmV3IHBlcm1pc3Npb25zLCB0aG91Z2guJzsNCiRsYW5nWydkaXJjaG1vZGZhaWx1cmUnXSA9ICdDaGFuZ2luZyBwZXJtaXNzaW9ucyBvZiB0aGUgZGlyZWN0b3J5IGZhaWxlZCc7DQokbGFuZ1snZGlyY2htb2RzdWNjZXNzJ10gPSAnVGhlIGRpcmVjdG9yeSBzdWNjZXNzZnVsbHkgZ290IG5ldyBwZXJtaXNzaW9ucyc7DQokbGFuZ1snZGlyY2htb2RzdWNjZXNzbXVsdGknXSA9ICdDaGFuZ2luZyBwZXJtaXNzaW9ucyBvbiB0aGUgZGlyZWN0b3J5IGFuZCBpdFwncyBjb250ZW50IHdhcyBzdWNjZXNzZnVsJzsNCiRsYW5nWydkaXJleGlzdHMnXSA9ICdUaGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzJzsNCiRsYW5nWydkaXJub3RlbXB0eWNvbmZpcm0nXSA9ICdUaGUgZGlyZWN0b3J5IGlzblwndCBlbXB0eSEgRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSBpdCwgaW5jbHVkaW5nIGFsbCBjb250ZW50IGFuZCBzdWJkaXJlY3Rvcmllcz8nOw0KJGxhbmdbJ2RpcnRyZWVkZWxldGVjYW5jZWxsZWQnXSA9ICdEZWxldGlvbiBvZiBkaXJlY3RvcnkgY2FuY2VsZWQnOw0KJGxhbmdbJ2RpcnRyZWVkZWxldGVmYWlsJ10gPSAnQW4gZXJyb3Igb2NjdXJyZWQgd2hlbiBkZWxldGluZyB0aGlzIGRpcmVjdG9yeS4gU29tZSBvZiB0aGUgY29udGVudHMgbWF5IGhhdmUgYmVlbiBkZWxldGVkLCBob3dldmVyLic7DQokbGFuZ1snZGlydHJlZWRlbGV0ZXN1Y2Nlc3MnXSA9ICdUaGUgZGlyZWN0b3J5IGluY2x1ZGluZyBjb250ZW50IHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZC4nOw0KI0UNCiRsYW5nWydlcnJvciddID0gJ0Vycm9yJzsNCiRsYW5nWydlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnXSA9ICdDYXB0Y2ggdGV4dCBlbnRlcmVkIGRpZCBub3QgbWF0Y2ggdGhlIGltYWdlIGRpc3BsYXllZCc7DQokbGFuZ1snZXJyb3Jfc2V0dXAnXSA9ICdQbGVhc2UgY29tcGxldGUgdGhlIEFXUyBTREsgTW9kdWxlIFNldHVwIDxhIGhyZWY9IiVzIj5oZXJlPC9hPic7DQokbGFuZ1snZXhwaXJ5X2ludGVydmFsJ10gPSAnUmVtb3ZlIGNhY2hlIGZpbGVzIHRoYXQgYXJlIG9sZGVyIHRoYW4gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgbWludXRlcyc7DQojRg0KJGxhbmdbJ2ZpbGUnXSA9ICdGaWxlJzsNCiRsYW5nWydmaWVsZGRlZl9hbGxvd19oZWxwJ10gPSAnU3BlY2lmeSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGUgZXh0ZW5zaW9ucyB0aGF0IGFyZSBhbGxvd2VkLiBGb3IgZXhhbXBsZTogcGRmLGdpZixqcGVnLGpwZyAoa2VlcCBsb3dlcmNhc2UpJzsNCiRsYW5nWydmaXJzdHBhZ2UnXSA9ICcmbHQ7Jmx0Oyc7DQokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnQVdTIFMzJzsNCiNHDQokbGFuZ1snZ2V0c3RhcnRlZCddID0gJ0dldCBTdGFydGVkIHdpdGggQVdTIFMzIE1vZHVsZSc7DQojSA0KJGxhbmdbJ2hlbHBfcGFyYW1fYWN0aW9uJ10gPSAnDQogICAgT3ZlcnJpZGUgdGhlIGRlZmF1bHQgYWN0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOg0KICAgIDx1bD4NCiAgICAgICAgPGxpPiZxdW90O2RlZmF1bHQmcXVvdDsgLSBkaXNwbGF5cyB0aGUgc3VtbWFyeSB2aWV3LjwvbGk+DQogICAgICAgIDxsaT4mcXVvdDtkZXRhaWwmcXVvdDsgLSBkaXNwbGF5cyBhIHNwZWNpZmllZCBlbnRyeSBpbiBkZXRhaWwgbW9kZS4gKG11c3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIDxpPnByZWZpeDwvaT4pPC9saT4NCiAgICAgICAgPGxpPiZxdW90O3VwbG9hZCZxdW90OyAtIGRpc3BsYXlzIHRoZSB1cGxvYWQgZm9ybSAoY2FuIGJlIHVzZWQgd2l0aCA8aT5wcmVmaXg8L2k+IGZvciB1cGxvYWQgaW4gYSBzcGVjaWZpYyBsb2NhdGlvbik8L2VtPjwvbGk+DQogICAgPC91bD4nOw0KJGxhbmdbJ2hlbHBfcGFyYW1fcHJlZml4J10gPSAnQSBzdHJpbmcgb2YgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB0aGUgY29tcGxldGUgcGF0aCBpbiBmcm9udCBvZiB0aGUgb2JqZWN0IG5hbWUuIFByb2plY3QvV29yZEZpbGVzLy4uLic7DQokbGFuZ1snaGVscF9wYXJhbV9kZXRhaWx0ZW1wbGF0ZSddID0gJ1RoZSBkZXRhaWwgdGVtcGxhdGUgeW91IHdpc2ggdG8gdXNlLic7DQokbGFuZ1snaGVscF9wYXJhbV9zdW1tYXJ5dGVtcGxhdGUnXSA9ICdUaGUgc3VtbWFyeSB0ZW1wbGF0ZSB5b3Ugd2lzaCB0byB1c2UuJzsNCiRsYW5nWydoZWxwX3BhcmFtX3BhZ2VsaW1pdCddID0gJ01heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgKHBlciBwYWdlKS4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwbGllZCBhbGwgbWF0Y2hpbmcgaXRlbXMgd2lsbCBiZSBkaXNwbGF5ZWQuICBJZiBpdCBpcywgYW5kIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIGF2YWlsYWJsZSB0aGFuIHNwZWNpZmllZCBpbiB0aGUgcGFyYW1ldGVyLCB0ZXh0IGFuZCBsaW5rcyB3aWxsIGJlIHN1cHBsaWVkIHRvIGFsbG93IHNjcm9sbGluZyB0aHJvdWdoIHRoZSByZXN1bHRzJzsNCiRsYW5nWydoZWxwX3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdQYWdlIHRvIGRpc3BsYXkgaXRlbSBkZXRhaWxzIGluLiBNdXN0IGJlIGEgcGFnZSBhbGlhcy9pZC4gVXNlZCB0byBhbGxvdyBkZXRhaWxzIHRvIGJlIGRpc3BsYXllZCBpbiBhIGRpZmZlcmVudCBwYWdlIHRoYW4gc3VtbWFyeS4nOw0KJGxhbmdbJ2hlbHBfcGFyYW1fc3VtbWFyeXBhZ2UnXSA9ICdQYWdlIHRvIGRpc3BsYXkgaXRlbSBzdW1tYXJ5IGluLiBNdXN0IGJlIGEgcGFnZSBhbGlhcy9pZC4gVXNlZCB0byBhbGxvdyBzdW1tYXJpZXMgdG8gYmUgZGlzcGxheWVkIGluIGEgZGlmZmVyZW50IHBhZ2UgdGhhbiBpbml0aWF0b3IuJzsNCg0KJGxhbmdbJ2hlbHBfYWNjZXNzX2tleSddID0gPDw8RU9UDQo8aDM+TWFuYWdpbmcgYWNjZXNzIGtleXMgKGNvbnNvbGUpPC9oMz4NCjxwPllvdSBjYW4gdXNlIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIHRvIG1hbmFnZSB0aGUgYWNjZXNzIGtleXMgb2YgYW4gSUFNIHVzZXIuPGJyPjwvcD4NCjx1bD4NCjxsaT48YSBocmVmPSJodHRwczovL2NvbnNvbGUuYXdzLmFtYXpvbi5jb20vaWFtIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj48c3Bhbj5JQU0gY29uc29sZTwvc3Bhbj48L2E+PC9zcGFuPg0KPGxpPlVzZSB5b3VyIEFXUyBhY2NvdW50IElEIG9yIGFjY291bnQgYWxpYXMsIHlvdXIgSUFNIHVzZXIgbmFtZSwgYW5kIHlvdXIgcGFzc3dvcmQgdG8gc2lnbiBpbiB0byB0aGUgSUFNIGNvbnNvbGUuPC9saT4NCjxsaT5JbiB0aGUgbmF2aWdhdGlvbiBiYXIgb24gdGhlIHVwcGVyIHJpZ2h0LCBjaG9vc2UgeW91ciB1c2VyIG5hbWUsIGFuZCB0aGVuIGNob29zZSBTZWN1cml0eSBjcmVkZW50aWFscy48L2xpPg0KPC91bD4NCg0KPGgzPlRvIGNyZWF0ZSBhbiBhY2Nlc3Mga2V5PC9oMz4NCjx1bD4NCjxsaT5JbiB0aGUgQWNjZXNzIGtleXMgc2VjdGlvbiwgY2hvb3NlIENyZWF0ZSBhY2Nlc3Mga2V5LiBJZiB5b3UgYWxyZWFkeSBoYXZlIHR3byBhY2Nlc3Mga2V5cywgdGhpcyBidXR0b24gaXMgZGVhY3RpdmF0ZWQgYW5kIHlvdSBtdXN0IGRlbGV0ZSBhbiBhY2Nlc3Mga2V5IGJlZm9yZSB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvbmUuPC9saT4NCjxsaT5PbiB0aGUgQWNjZXNzIGtleSBiZXN0IHByYWN0aWNlcyAmIGFsdGVybmF0aXZlcyBwYWdlLCBjaG9vc2UgeW91ciB1c2UgY2FzZSB0byBsZWFybiBhYm91dCBhZGRpdGlvbmFsIG9wdGlvbnMgd2hpY2ggY2FuIGhlbHAgeW91IGF2b2lkIGNyZWF0aW5nIGEgbG9uZy10ZXJtIGFjY2VzcyBrZXkuIElmIHlvdSBkZXRlcm1pbmUgdGhhdCB5b3VyIHVzZSBjYXNlIHN0aWxsIHJlcXVpcmVzIGFuIGFjY2VzcyBrZXksIGNob29zZSBPdGhlciBhbmQgdGhlbiBjaG9vc2UgTmV4dC48L2xpPg0KPGxpPihPcHRpb25hbCkgU2V0IGEgZGVzY3JpcHRpb24gdGFnIHZhbHVlIGZvciB0aGUgYWNjZXNzIGtleS4gVGhpcyBhZGRzIGEgdGFnIGtleS12YWx1ZSBwYWlyIHRvIHlvdXIgSUFNIHVzZXIuIFRoaXMgY2FuIGhlbHAgeW91IGlkZW50aWZ5IGFuZCB1cGRhdGUgYWNjZXNzIGtleXMgbGF0ZXIuIFRoZSB0YWcga2V5IGlzIHNldCB0byB0aGUgYWNjZXNzIGtleSBpZC4gVGhlIHRhZyB2YWx1ZSBpcyBzZXQgdG8gdGhlIGFjY2VzcyBrZXkgZGVzY3JpcHRpb24gdGhhdCB5b3Ugc3BlY2lmeS4gV2hlbiB5b3UgYXJlIGZpbmlzaGVkLCBjaG9vc2UgQ3JlYXRlIGFjY2VzcyBrZXkuPC9saT4NCjxsaT5PbiB0aGUgUmV0cmlldmUgYWNjZXNzIGtleXMgcGFnZSwgY2hvb3NlIGVpdGhlciBTaG93IHRvIHJldmVhbCB0aGUgdmFsdWUgb2YgeW91ciB1c2VyJ3Mgc2VjcmV0IGFjY2VzcyBrZXksIG9yIERvd25sb2FkIC5jc3YgZmlsZS4gVGhpcyBpcyB5b3VyIG9ubHkgb3Bwb3J0dW5pdHkgdG8gc2F2ZSB5b3VyIHNlY3JldCBhY2Nlc3Mga2V5LiBBZnRlciB5b3UndmUgc2F2ZWQgeW91ciBzZWNyZXQgYWNjZXNzIGtleSBpbiBhIHNlY3VyZSBsb2NhdGlvbiwgY2hvb3NlIERvbmUuPC9saT4NCjwvdWw+DQpFT1Q7DQoNCiRsYW5nWydoZWxwX29wdF9leHBpcnlfaW50ZXJ2YWwnXSA9ICdTcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSAoaW4gbWludXRlcykgdGhhdCBicm93c2VycyBzaG91bGQgY2FjaGUgcXVlcmllcyBmb3IuIFNldHRpbmcgdGhpcyB2YWx1ZSB0byAwIGRpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5LiBJbiBtb3N0IGNpcmN1bXN0YW5jZXMgeW91IHNob3VsZCBzcGVjaWZ5IGEgdmFsdWUgZ3JlYXRlciB0aGFuIDMwJzsNCiRsYW5nWydoZWxwX2J1Y2tldF9uYW1lJ10gPSAnVGhpcyBtb2R1bGUgd2lsbCBub3QgY3JlYXRlIGFueSBTMyBidWNrZXRzLiBZb3UgaGF2ZSB0byBjcmVhdGUgdGhlIGJ1Y2tldCB3aXRoIHB1YmxpYyByZWFkIGFjY2Vzcy4nOw0KJGxhbmdbJ2hlbHBfdXNlX2N1c3RvbV91cmwnXSA9ICdFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgY3VzdG9tIFVSTCc7DQokbGFuZ1snaGVscF9jdXN0b21fdXJsJ10gPSAnQ3VzdG9tIFVSTCBjYW4gYmUgYSBDbG91ZGZyb250IFVSTCBvciBpZiBhbnkgdXJsIG1hcHBlZCBvbiB5b3VyIGJ1Y2tldC4nOw0KI0wNCiRsYW5nWydsYXN0X3JlZnJlc2hlZCddID0gJ0xhc3QgcmVmcmVzaGVkJzsNCiRsYW5nWydsb2dmaWxlcGF0aCddID0gJ1BsZWFzZSBwcm92aWRlIHlvdXIgZnVsbCBMb2cgRmlsZSBwYXRoLCBpbmNsdWRpbmcgZmlsZW5hbWUnOw0KJGxhbmdbJ2xpbmUnXSA9ICdMaW5lJzsNCiRsYW5nWydsYWJlbF9zaXplJ10gPSAnU2l6ZSc7DQokbGFuZ1snbGFiZWxfdXJsX29yaWdpbmFsJ10gPSAnT3JpZ2luYWwgVXJsJzsNCiRsYW5nWydsYWJlbF91cmwnXSA9ICdVcmwnOw0KJGxhbmdbJ2xhYmVsX3VybF9wcmVzaWduZWQnXSA9ICdQcmVzaWduZWQgVXJsJzsNCiRsYW5nWydsYWJlbF9taW1lJ10gPSAnTWltZSc7DQokbGFuZ1snbGFzdHBhZ2UnXSA9ICcmZ3Q7Jmd0Oyc7DQojTQ0KJGxhbmdbJ21lc3NhZ2UnXSA9ICdNZXNzYWdlJzsNCiRsYW5nWydtc2dfdnJmeV9pbnRlZ3JpdHl2ZXJpZmllZCddID0gJ0Nvbm5lY3Rpb24gRXN0YWJsaXNoZWQnOw0KJGxhbmdbJ21zZ192cmZ5X25vY29ubiddID0gJ0Nvbm5lY3Rpb24gTm90IEVzdGFibGlzaGVkJzsNCiNODQokbGFuZ1snbmV4dHBhZ2UnXSA9ICcmZ3Q7JzsNCiNQDQokbGFuZ1sncGFnZSddID0gJ1BhZ2UnOw0KJGxhbmdbJ3Byb21wdF9lbWFpbCddID0gJ0VtYWlsIEFkZHJlc3MnOw0KJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQVdTIFMzIE1vZHVsZSB3YXMgaW5zdGFsbGVkJzsNCiRsYW5nWydwb3N0cm90YXRlJ10gPSAnQWN0aW9uIGZvciBhZnRlciBpbWFnZSByb3RhdGlvbic7DQokbGFuZ1sncHJlZGVmaW5lZCddID0gJ1ByZWRlZmluZWQgQW5nbGVzJzsNCiRsYW5nWydwcm9tcHRfY29weSddID0gJ0NvcHkgb25lIG9yIG1vcmUgSXRlbXMnOw0KJGxhbmdbJ3Byb21wdF9kcm9wZmlsZXMnXSA9ICdEcm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkJzsNCiRsYW5nWydwcm9tcHRfbW92ZSddID0gJ01vdmUgSXRlbXMgdG8gQW5vdGhlciBEaXJlY3RvcnknOw0KJGxhbmdbJ3Byb21wdF91c2VfY3VzdG9tX3VybCddID0gJ1VzZSBDdXN0b20gVVJMJzsNCiRsYW5nWydwcm9tcHRfY3VzdG9tX3VybCddID0gJ0N1c3RvbSBVUkwnOw0KJGxhbmdbJ3Byb21wdF9kZXRhaWxwYWdlJ10gPSAnRGV0YWlsIHBhZ2UnOw0KJGxhbmdbJ3Byb21wdF9zdW1tYXJ5cGFnZSddID0gJ1N1bW1hcnkgcGFnZSc7DQokbGFuZ1sncHJvbXB0X2l0ZW1zZGlzcGxheWVkJ10gPSAnTnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIGFkbWluIHBhZ2UnOw0KJGxhbmdbJ3Byb21wdF9nbyddID0gJ0dvJzsNCiRsYW5nWydwcmV2cGFnZSddID0gJyZsdDsnOw0KJGxhbmdbJ3Byb21wdF9vZiddID0gJ29mJzsNCiRsYW5nWydwcm9tcHRfcGFnZSddID0gJ1BhZ2UnOw0KJGxhbmdbJ3Byb21wdF9wYWdlbGltaXQnXSA9ICdQYWdlIExpbWl0JzsNCiNSDQokbGFuZ1sncmV2aWV3cyddID0gJ1Jldmlld3MnOw0KJGxhbmdbJ3JlZ2lvbiddID0gJ1JlZ2lvbic7DQokbGFuZ1sncmV0dXJudG9tb2R1bGUnXSA9ICdSZXR1cm4gdG8gTW9kdWxlJzsNCiRsYW5nWydyZXF1aXJlZCddID0gJ1JlcXVpcmVkJzsNCiRsYW5nWydyZWZyZXNoc3VjY2VzcyddID0gJ0l0ZW1zIHN1Y2Nlc3NmdWxseSByZWZyZXNoZWQnOw0KJGxhbmdbJ3NldHRpbmdzX3NhdmVkJ10gPSAnU2V0dGluZ3Mgc2F2ZWQgc3VjY2Vzc2Z1bGx5JzsNCiRsYW5nWydzZXR0aW5nc192YWxpZGF0aW9uX2ZhaWxlZCddID0gJ1NldHRpbmdzIHNhdmVkIGJ1dCBjb25uZWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkLiBQbGVhc2UgY2hlY2sgeW91ciBjcmVkZW50aWFscyBhbmQgYnVja2V0IGNvbmZpZ3VyYXRpb24uJzsNCiNTDQokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsNCiRsYW5nWydzb3JyeV9ub2ZpbGVzJ10gPSAnU29ycnksIHdlIGNvdWxkIG5vdCBmaW5kIGFueSBmaWxlcyc7DQokbGFuZ1snc3VjY2Vzc2Z1bF91cGxvYWQnXSA9ICdZb3VyIGZpbGUgd2FzIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4gIEluIHRoZSBlbmQsIHRoZSBmaWxlbmFtZSB3ZSB1c2VkIHdhcyAlcyc7DQojVA0KJGxhbmdbJ3R5cGUnXSA9ICdUeXBlJzsNCiRsYW5nWyd0eXBlX0FXU1MzJ10gPSAnQVdTUzMnOw0KJGxhbmdbJ3R5cGVfZGV0YWlsJ10gPSAnRGV0YWlsJzsNCiRsYW5nWyd0eXBlX3N1bW1hcnknXSA9ICdTdW1tYXJ5JzsNCiRsYW5nWyd0eXBlX1Jldmlld3MnXSA9ICdSZXZpZXdzJzsNCiRsYW5nWyd0eXBlX3VwbG9hZCddID0gJ1VwbG9hZCc7DQokbGFuZ1sndGl0bGVfY2hhbmdlZGlyJ10gPSAnQ2hhbmdlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoaXMgZGlyZWN0b3J5JzsNCiRsYW5nWyd0aXRsZV9jaGFuZ2V1cGRpciddID0gJ0dvIHRvIHRoZSBwYXJlbnQgZm9sZGVyJzsNCiRsYW5nWyd0aXRsZV9kcm9wem9uZSddID0gJ1lvdSBjYW4gZHJvcCBmaWxlcyBoZXJlIGZyb20geW91ciBmaWxlIG1hbmFnZXIgdG8gYXV0b21hdGljYWxseSBiZWdpbiB1cGxvYWRpbmcnOw0KJGxhbmdbJ3RpdGxlX3JlZnJlc2gnXSA9ICdSZWZyZXNoIENhY2hlZCBEYXRhJzsNCiNVDQokbGFuZ1sndXBsb2FkJ10gPSAnVXBsb2FkJzsNCiNWDQokbGFuZ1snVkFMSURBVElPTl9FUlJPUiddID0gJ1BsZWFzZSBwcm92aWRlIHlvdXIgTG9nIEZpbGUgcGF0aCc7DQojVw0KJGxhbmdbJ3dhcm5fZGVsZXRlX2RpcmVjdG9yeSddID0gJ0EgZm9sZGVyIGlzIHNlbGVjdGVkIGZvciBkZWxldGlvbiwgYWxsIG9iamVjdHMgaW4gdGhlIGZvbGRlciB3aWxsIGJlIGRlbGV0ZWQsIGFuZCBhbnkgbmV3IG9iamVjdHMgYWRkZWQgd2hpbGUgdGhlIGRlbGV0ZSBhY3Rpb24gaXMgaW4gcHJvZ3Jlc3MgbWlnaHQgYWxzbyBiZSBkZWxldGVkLiBJZiBhbiBvYmplY3QgaXMgc2VsZWN0ZWQgZm9yIGRlbGV0aW9uLCBhbnkgbmV3IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBuYW1lIHRoYXQgYXJlIHVwbG9hZGVkIGJlZm9yZSB0aGUgZGVsZXRlIGFjdGlvbiBpcyBjb21wbGV0ZWQgd2lsbCBhbHNvIGJlIGRlbGV0ZWQuJzsNCiRsYW5nWyd3YXJuX2ZpbGVfbm90X2FsbG93ZWQnXSA9ICdGaWxldHlwZSBub3QgYWxsb3dlZCc7DQokbGFuZ1snd2Fybl9maWxlX21pc3NpbmcnXSA9ICdTZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCc7DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.bucket_query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCnVzZSBBV1NTM1x1dGlsczsNCnVzZSBBV1NTM1xoZWxwZXJzOw0KdXNlIEFXU1NES1xlbmNyeXB0Ow0KDQpmaW5hbCBjbGFzcyBidWNrZXRfcXVlcnkNCnsNCiAgICBwcml2YXRlICRzM0NsaWVudCA9IG51bGw7DQogICAgcHJpdmF0ZSAkX2RhdGEgPSBbIA0KICAgICAgICAncHJlZml4Jz0+bnVsbCwgDQogICAgICAgICdidWNrZXQnPT5udWxsLCANCiAgICAgICAgJ2RlbGltaXRlcic9Pm51bGwsIA0KICAgICAgICAnbWF4a2V5cyc9PjEwMDAsIA0KICAgICAgICAnc3RhcnRhZnRlcic9PjAsDQogICAgICAgICdyZXR1cm5pZCcgPT4gbnVsbCwNCiAgICAgICAgJ2RldGFpbHBhZ2UnID0+IG51bGwNCiAgICBdOw0KDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJhbXMgPSBhcnJheSgpKQ0KICAgIHsNCiAgICAgICAgLy9wcmludF9yKCRwYXJhbXMpOw0KICAgICAgICAkdGhpcy0+czNDbGllbnQgPSB1dGlsczo6Z2V0UzNDbGllbnQoKTsNCg0KICAgICAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApIHsNCiAgICAgICAgICAgIGlmKCAhYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fZGF0YSkgKSBjb250aW51ZTsNCiAgICAgICAgICAgIC8vICR0aGlzWyRrZXldID0gJHZhbDsNCiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkNCiAgICB7DQogICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2RhdGFbJGtleV0pICkgcmV0dXJuICR0aGlzLT5fZGF0YVska2V5XTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJGtleSwkdmFsKQ0KICAgIHsNCiAgICAgICAgc3dpdGNoKCAka2V5ICkgew0KICAgICAgICBjYXNlICdQcmVmaXgnOg0KICAgICAgICBjYXNlICdCdWNrZXQnOg0KICAgICAgICBjYXNlICdEZWxpbWl0ZXInOg0KICAgICAgICBjYXNlICdNYXJrZXInOg0KICAgICAgICBjYXNlICdDb250aW51YXRpb25Ub2tlbic6DQogICAgICAgICAgICBpZiggIWlzX251bGwoJHZhbCkgKSAkdmFsID0gdHJpbSgkdmFsKTsNCiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnTWF4S2V5cyc6DQogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAoaW50KSBtYXgoMSxtaW4oMTAwMCwoaW50KSAkdmFsKSk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnU3RhcnRBZnRlcic6DQogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAoaW50KSBtYXgoMCxtaW4oMTAwMDAwLChpbnQpICR2YWwpKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdwYWdlY291bnQnOg0KICAgICAgICBjYXNlICdwYWdlbnVtJzoNCiAgICAgICAgY2FzZSAncmV0dXJuaWQnOg0KICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gKGludCkgJHZhbDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uICZleGVjdXRlX2J5X3BhZ2VzKCl7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRyZXN1bHRQYWdpbmF0b3IgPSAkdGhpcy0+czNDbGllbnQtPmdldFBhZ2luYXRvcignTGlzdE9iamVjdHNWMicsICR0aGlzLT5fZGF0YSk7DQogICAgICAgICAgICAkbGlzdGluZyA9ICR0aGlzLT5fZGF0YTsNCiAgICAgICAgICAgICRsaXN0aW5nWydkYXRlJ10gPSB0aW1lKCk7DQogICAgICAgICAgICAkaSA9IDE7DQogICAgICAgICAgICAkaXRlbXMgPSAwOw0KICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdFBhZ2luYXRvciBhcyAkcmVzdWx0KSB7DQogICAgICAgICAgICAgICAgLy9wcmludF9yKCRyZXN1bHQpOw0KICAgICAgICAgICAgICAgICRsaXN0aW5nWydwYWdlcyddWyRpXVsnaXRlbWNvdW50J10gPSAkcmVzdWx0WydLZXlDb3VudCddOw0KICAgICAgICAgICAgICAgICRsaXN0aW5nWydwYWdlcyddWyRpXVsnaXRlbXMnXSA9ICR0aGlzLT5GZXRjaEFsbCgkcmVzdWx0KTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICRpdGVtcysrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmb3JlYWNoKCRsaXN0aW5nWydwYWdlcyddIGFzICRwYWdlKXsNCiAgICAgICAgICAgICAgICAkbGlzdGluZ1sndG90YWwnXSArPSAkcGFnZVsnaXRlbWNvdW50J107DQogICAgICAgICAgICB9DQogICAgICAgIH0gY2F0Y2ggKEF3c0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgaWYoJGUtPmdldFN0YXR1c0NvZGUoKSA9PSA0MDQpew0KICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlID0gJGJ1Y2tldF9pZC4iICIuJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkZXJyb3JfbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICRlcnJvcl9tZXNzYWdlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICRsaXN0aW5nOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiAmZXhlY3V0ZSgpDQogICAgew0KDQogICAgICAgIHRyeSB7DQoNCiAgICAgICAgICAgICRxcGFybXMgPSBhcnJheSgpOw0KICAgICAgICAgICAgJHFwYXJtc1snQnVja2V0J10gPSAkdGhpcy0+YnVja2V0Ow0KICAgICAgICAgICAgJHFwYXJtc1snRGVsaW1pdGVyJ10gPSAnLyc7DQogICAgICAgICAgICAkcXBhcm1zWydQcmVmaXgnXSA9ICR0aGlzLT5wcmVmaXg7DQoNCiAgICAgICAgICAgICRyZXN1bHRQYWdpbmF0b3IgPSAkdGhpcy0+czNDbGllbnQtPmdldFBhZ2luYXRvcignTGlzdE9iamVjdHNWMicsICRxcGFybXMpOw0KICAgICAgICAgICAgJGxpc3RpbmcgPSAkdGhpcy0+X2RhdGE7DQogICAgICAgICAgICAkbGlzdGluZ1snZGF0ZSddID0gdGltZSgpOw0KICAgICAgICAgICAgJGxpc3RpbmdbJ2l0ZW1zJ10gPSBbXTsNCiAgICAgICAgICAgICRpdGVtcyA9IDA7DQogICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0UGFnaW5hdG9yIGFzICRyZXN1bHQpIHsNCiAgICAgICAgICAgICAgICAkbGlzdGluZ1snaXRlbXMnXSA9IGFycmF5X21lcmdlKCRsaXN0aW5nWydpdGVtcyddLCAkdGhpcy0+RmV0Y2hBbGwoJHJlc3VsdCkpOw0KICAgICAgICAgICAgICAgICRpdGVtcysrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdXRpbHM6OnNvcnRCeVByb3BlcnR5KCRsaXN0aW5nWydpdGVtcyddLCAnbmFtZScpOw0KDQogICAgICAgICAgICAkaW5kaWNlc1RvTW92ZSA9IFtdOw0KICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGxpc3RpbmdbJ2l0ZW1zJ10pOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYoJGxpc3RpbmdbJ2l0ZW1zJ11bJGldLT5kaXIgPT0gdHJ1ZSkkaW5kaWNlc1RvTW92ZVtdID0gJGk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoY291bnQoJGluZGljZXNUb01vdmUpID4gMCkgew0KICAgICAgICAgICAgICAgIHV0aWxzOjptb3ZlSXRlbXNUb0JlZ2lubmluZ0J5SW5kZXgoJGxpc3RpbmdbJ2l0ZW1zJ10sICRpbmRpY2VzVG9Nb3ZlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRsaXN0aW5nWyd0b3RhbCddID0gY291bnQoJGxpc3RpbmdbJ2l0ZW1zJ10pOyAgDQogICAgICAgICAgICANCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICBpZigkZS0+Z2V0U3RhdHVzQ29kZSgpID09IDQwNCl7DQogICAgICAgICAgICAgICAgJGVycm9yX21lc3NhZ2UgPSAkYnVja2V0X2lkLiIgIi4kZS0+Z2V0QXdzRXJyb3JNZXNzYWdlKCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJGVycm9yX21lc3NhZ2U7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGxpc3Rpbmc7ICAgICAgICANCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBGZXRjaCBhbGwgb2YgdGhlIHJlY29yZHMgaW4gdGhpcyByZXN1bHRzZXQgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gb2JqZWN0W10NCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gRmV0Y2hBbGwoJHJzKQ0KICAgIHsNCg0KICAgICAgICAkX19tb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBV1NTMycpOw0KICAgICAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgICAgICR0aGVtZU9iamVjdCA9IFxjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsNCiAgICAgICAgJGRldGFpbHNwYWdlID0gJHRoaXMtPmRldGFpbHBhZ2U7DQogICAgICAgICRlbnRyeWFycmF5ID0gW107DQogICAgICAgICRidWNrZXRfaWQgPSAkdGhpcy0+YnVja2V0Ow0KDQogICAgICAgIC8vRGlyZWN0b3JpZXMNCiAgICAgICAgZm9yZWFjaCAoJHJzWydDb21tb25QcmVmaXhlcyddIGFzICRkaXIpIHsNCg0KICAgICAgICAgICAgJG9uZXJvdyA9IG5ldyBcc3RkQ2xhc3MoKTsNCiAgICAgICAgICAgICRvbmVyb3ctPmtleSA9ICRkaXJbJ1ByZWZpeCddOw0KICAgICAgICAgICAgJG9uZXJvdy0+bmFtZSA9IGJhc2VuYW1lKCRvbmVyb3ctPmtleSk7DQogICAgICAgICAgICAkb25lcm93LT5kaXIgPSB0cnVlOw0KICAgICAgICAgICAgJG9uZXJvdy0+bWltZSA9ICdkaXJlY3RvcnknOw0KICAgICAgICAgICAgJG9uZXJvdy0+dHlwZSA9IGFycmF5KCdkaXInKTsNCiAgICAgICAgICAgICRvbmVyb3ctPmV4dCA9ICcnOw0KICAgICAgICAgICAgJG9uZXJvdy0+aWNvbiA9ICRfX21vZC0+R2V0RmlsZUljb24oJG9uZXJvdy0+ZXh0LHRydWUpOw0KICAgICAgICAgICAgJGVudHJ5YXJyYXlbXT0gJG9uZXJvdzsNCg0KICAgICAgICB9DQoNCiAgICAgICAgZm9yZWFjaCggJHJzWydDb250ZW50cyddIGFzICRyb3cgKSB7DQoNCiAgICAgICAgICAgICAgICAvLyBTa2lwIGZvbGRlciBtYXJrZXIgb2JqZWN0cyAodGhleSBlbmQgd2l0aCAvIGFuZCBoYXZlIHNpemUgMCkNCiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRyb3dbJ0tleSddLCAtMSkgPT09ICcvJyAmJiAkcm93WydTaXplJ10gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkb25lcm93ID0gbmV3IFxzdGRDbGFzcygpOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPmtleSA9ICRyb3dbJ0tleSddOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPmtleV9lbmNvZGVkID0gdXJsZW5jb2RlKCRvbmVyb3ctPmtleSk7Ow0KICAgICAgICAgICAgICAgICRvbmVyb3ctPm5hbWUgPSBiYXNlbmFtZSgkb25lcm93LT5rZXkpOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPnNpemUgPSAkcm93WydTaXplJ107DQogICAgICAgICAgICAgICAgJG9uZXJvdy0+ZGF0ZSA9IHN0cnRvdGltZSggJHJvd1snTGFzdE1vZGlmaWVkJ10gKTsNCiAgICAgICAgDQogICAgICAgICAgICAgICAgJGV4cGxvZGVkZmlsZSA9IGV4cGxvZGUoJy4nLCAkb25lcm93LT5uYW1lKTsgDQogICAgICAgICAgICAgICAgJG9uZXJvdy0+ZXh0ID0gYXJyYXlfcG9wKCRleHBsb2RlZGZpbGUpOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPnR5cGUgPSBhcnJheSgnZmlsZScpOw0KDQogICAgICAgICAgICAgICAgJGhlYWQgPSAkdGhpcy0+czNDbGllbnQtPmhlYWRPYmplY3QoWw0KICAgICAgICAgICAgICAgICAgICAnQnVja2V0JyA9PiAkYnVja2V0X2lkLA0KICAgICAgICAgICAgICAgICAgICAnS2V5JyA9PiAkb25lcm93LT5rZXkNCiAgICAgICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgICAgICRvbmVyb3ctPm1pbWUgPSAkaGVhZFsnQ29udGVudFR5cGUnXTsNCg0KICAgICAgICAgICAgICAgIGlmKCBzdHJwb3MoJG9uZXJvdy0+bWltZSwndGV4dCcpICE9PSBGQUxTRSApIHsNCiAgICAgICAgICAgICAgICAgICAgJG9uZXJvdy0+dHlwZVtdID0gJ3RleHQnOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKCRfX21vZC0+R2V0T3B0aW9uVmFsdWUoImN1c3RvbV91cmwiKSAhPT0gJycgJiYgJF9fbW9kLT5HZXRPcHRpb25WYWx1ZSgidXNlX2N1c3RvbV91cmwiKSA9PSB0cnVlICl7DQogICAgICAgICAgICAgICAgICAgICRiYXNlX3VybCA9ICRfX21vZC0+R2V0T3B0aW9uVmFsdWUoImN1c3RvbV91cmwiKS4nLyc7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGJhc2VfdXJsID0gImh0dHBzOi8vIi4kYnVja2V0X2lkLiIuczMuIi4kX19tb2QtPkdldFByZWZlcmVuY2UoJ2FjY2Vzc19yZWdpb24nKS4iLmFtYXpvbmF3cy5jb20vIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJG9uZXJvdy0+dXJsID0gJGJhc2VfdXJsLiRvbmVyb3ctPmtleTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT51cmxfbGluayA9ICI8YSBocmVmPSciIC4gJG9uZXJvdy0+dXJsIC4gIicgdGFyZ2V0PSdfYmxhbmsnIGNsYXNzPVwiY2FyZC1saW5rXCI+IiAuICRvbmVyb3ctPm5hbWUgLiAiPC9hPiI7DQogICAgICAgICAgICAgICAgJG9uZXJvdy0+aWNvbiA9ICRfX21vZC0+R2V0RmlsZUljb24oJG9uZXJvdy0+ZXh0KTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5pY29uX2xpbmsgPSAiPGEgaHJlZj0nIiAuICRvbmVyb3ctPnVybCAuICInIHRhcmdldD0nX2JsYW5rJyBjbGFzcz1cImNhcmQtbGlua1wiPiIuJG9uZXJvdy0+aWNvbi4iPC9hPiI7DQogICAgICAgICAgICAgICAgJG9uZXJvdy0+cHJlc2lnbmVkX3VybCA9ICRfX21vZC0+Q3JlYXRlU2lnbmVkTGluaygkb25lcm93LT5rZXkpOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPnByZXNpZ25lZF9saW5rID0gIjxhIGhyZWY9JyIgLiAkb25lcm93LT5wcmVzaWduZWRfdXJsIC4gIicgY2xhc3M9XCJjYXJkLWxpbmtcIj4iIC4gJG9uZXJvdy0+bmFtZSAuICI8L2E+IjsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5wcmVzaWduZWRfaWNvbl9saW5rID0gIjxhIGhyZWY9JyIgLiAkb25lcm93LT5wcmVzaWduZWRfdXJsIC4gIicgY2xhc3M9XCJjYXJkLWxpbmtcIj4iIC4gJG9uZXJvdy0+aWNvbiAuICI8L2E+IjsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5kZXRhaWxfbGluayA9ICRfX21vZC0+Y3JlYXRlX3VybCgnY250bnQwMScsICdkZXRhaWwnLCAkZGV0YWlsc3BhZ2UsIGFycmF5KCdwcmVmaXgnID0+ICRvbmVyb3ctPmtleV9lbmNvZGVkKSk7DQoNCiAgICAgICAgICAgICAgICBpZiggJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddID09ICdtb2RfcmV3cml0ZScpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkc3RyaW5nX2FycmF5ICAgPSBbXTsNCiAgICAgICAgICAgICAgICAgICAgJHN0cmluZ19hcnJheVtdID0gJ1MzJzsNCiAgICAgICAgICAgICAgICAgICAgJHN0cmluZ19hcnJheVtdID0gJ2ZpbGUnOw0KICAgICAgICAgICAgICAgICAgICAkc3RyaW5nX2FycmF5W10gPSAkb25lcm93LT5rZXlfZW5jb2RlZDsNCiAgICAgICAgICAgICAgICAgICAgJHN0cmluZ19hcnJheVtdID0gJGRldGFpbHNwYWdlOw0KICAgICAgICAgICAgICAgICAgICAkcHJldHR5dXJsID0gaW1wbG9kZSgnLycsICRzdHJpbmdfYXJyYXkpOyAgICANCiAgICAgICAgICAgICAgICAgICAgJGl0ZW1fZGV0YWlsdXJsID0gJF9fbW9kLT5jcmVhdGVfdXJsKCRpZCwgJ2RldGFpbCcsICRkZXRhaWxzcGFnZSwgYXJyYXkoJ3ByZWZpeCcgPT4gJG9uZXJvdy0+a2V5X2VuY29kZWQpLCBmYWxzZSwgZmFsc2UsICRwcmV0dHl1cmwpOw0KICAgICAgICAgICAgICAgICAgICAvL25lZWRzIGZpeA0KICAgICAgICAgICAgICAgICAgICAvLyRvbmVyb3ctPmRldGFpbF9saW5rID0gJGl0ZW1fZGV0YWlsdXJsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkZW50cnlhcnJheVtdID0gJG9uZXJvdzsNCiAgICAgICAgDQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRlbnRyeWFycmF5Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBvYmplY3RDb3VudCgpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnMzQ2xpZW50LT5saXN0T2JqZWN0c1YyKFsNCiAgICAgICAgICAgICdCdWNrZXQnID0+ICR0aGlzLT5CdWNrZXQsDQogICAgICAgICAgICAnUHJlZml4JyA9PiAkdGhpcy0+UHJlZml4LA0KICAgICAgICBdKTsNCiAgICAgICAgDQogICAgICAgICRvYmplY3RDb3VudCA9IGNvdW50KCRyZXN1bHRbJ0NvbnRlbnRzJ10pOw0KICAgICAgICByZXR1cm4gJG9iamVjdENvdW50Ow0KDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWNoZV9xdWVyeSgkcXBhcm1zLCRqc29uX2ZpbGVfUGF0aCl7DQoNCiAgICAgICAgJHF1ZXJ5ID0gbmV3IGJ1Y2tldF9xdWVyeSgkcXBhcm1zKTsNCiAgICAgICAgJGRhdGEgPSAkcXVlcnktPmV4ZWN1dGUoKTsNCiAgICAgICAgJGpzb24gPSBqc29uX2VuY29kZSgkZGF0YSk7DQogICAgICAgICR0bXAgPSBlbmNyeXB0OjplbmNyeXB0KCRqc29uKTsNCiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJGpzb25fZmlsZV9QYXRoLCAkdG1wKTsNCg0KICAgICAgICAvLyRqc29uID0gZmlsZV9nZXRfY29udGVudHMoJGpzb25fZmlsZV9QYXRoKTsNCiAgICAgICAgLy8kdG1wID0gZW5jcnlwdDo6ZGVjcnlwdCgkanNvbik7DQogICAgICAgICRkYXRhID0ganNvbl9kZWNvZGUoJGpzb24sIGZhbHNlKTsNCg0KICAgICAgICAvL3ByaW50X3IoJGRhdGEpOw0KDQogICAgICAgIHJldHVybiAkZGF0YTsNCg0KICAgIH0NCg0KICAgIC8qKiBpbnRlcm5hbCAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWxsX2Zyb21fYXJyYXkoJHJvdykNCiAgICB7DQogICAgICAgIGZvcmVhY2goICRyb3cgYXMgJGtleSA9PiAkdmFsICkgew0KICAgICAgICAgICAgaWYoIGFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X2RhdGEpICkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9ICR2YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCg0KDQp9IC8vIGVuZCBvZiBjbGFzcw0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.helpers.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCmZpbmFsIGNsYXNzIGhlbHBlcnMNCnsNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkNCiAgICB7DQogICAgICAgIHN0YXRpYyAkaW5zdGFuY2UgPSBudWxsOw0KICAgICAgICBpZiAoISRpbnN0YW5jZSkgew0KICAgICAgICAgICAgJGluc3RhbmNlID0gbmV3IHNlbGYoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkaW5zdGFuY2U7DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaW5kX2xheW91dF90ZW1wbGF0ZSgkcGFyYW1zLCAkcGFyYW1uYW1lLCAkdHlwZW5hbWUpDQogICAgew0KICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgiQVdTUzMiKTsNCiAgICAgICAgJHBhcmFtbmFtZSA9IChzdHJpbmcpICRwYXJhbW5hbWU7DQogICAgICAgICR0eXBlbmFtZSA9IChzdHJpbmcpICR0eXBlbmFtZTsNCiAgICAgICAgaWYgKCAhaXNfYXJyYXkoJHBhcmFtcykgfHwgISgkdGhldGVtcGxhdGUgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywkcGFyYW1uYW1lKSkgKSB7DQogICAgICAgICAgICAkdHBsID0gXENtc0xheW91dFRlbXBsYXRlOjpsb2FkX2RmbHRfYnlfdHlwZSgkdHlwZW5hbWUpOw0KICAgICAgICAgICAgaWYgKCAhaXNfb2JqZWN0KCR0cGwpICkgew0KICAgICAgICAgICAgICAgICRtb2QtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJ05vIGRlZmF1bHQgJy4kdHlwZW5hbWUuJyB0ZW1wbGF0ZSBmb3VuZCcpOw0KICAgICAgICAgICAgICAgIGF1ZGl0KCcnLCAnQVdTUzMnLCAnTm8gZGVmYXVsdCAnLiR0eXBlbmFtZS4nIHRlbXBsYXRlIGZvdW5kJyk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRoZXRlbXBsYXRlID0gJHRwbC0+Z2V0X25hbWUoKTsNCiAgICAgICAgICAgIHVuc2V0KCR0cGwpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkdGhldGVtcGxhdGU7DQogICAgfQ0KICAgIA0KICANCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ModuleTracker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKbmFtZXNwYWNlIEFXU1MzOwoKY2xhc3MgTW9kdWxlVHJhY2tlciB7CiAgICBwcml2YXRlIHN0YXRpYyAkYXBpX3VybCA9ICdodHRwczovL2FwaS5waXhlbHNvbHV0aW9ucy5iaXovY21zbXMvbW9kdWxlLWNvdW50ZXInOwogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyYWNrKCRtb2R1bGUsICRhY3Rpb24pIHsKICAgICAgICAkZGF0YSA9IGpzb25fZW5jb2RlKFsnbW9kdWxlJyA9PiAkbW9kdWxlLCAnYWN0aW9uJyA9PiAkYWN0aW9uXSk7CiAgICAgICAgCiAgICAgICAgJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoWwogICAgICAgICAgICAnaHR0cCcgPT4gWwogICAgICAgICAgICAgICAgJ21ldGhvZCcgPT4gJ1BPU1QnLAogICAgICAgICAgICAgICAgJ2hlYWRlcicgPT4gJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgICAgICAgICAnY29udGVudCcgPT4gJGRhdGEsCiAgICAgICAgICAgICAgICAndGltZW91dCcgPT4gNQogICAgICAgICAgICBdCiAgICAgICAgXSk7CiAgICAgICAgCiAgICAgICAgQGZpbGVfZ2V0X2NvbnRlbnRzKHNlbGY6OiRhcGlfdXJsLCBmYWxzZSwgJGNvbnRleHQpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpuYW1lc3BhY2UgQVdTUzM7DQoNCnVzZSBBd3NcU3RzXFN0c0NsaWVudDsNCnVzZSBcQXdzXENyZWRlbnRpYWxzXENyZWRlbnRpYWxzOw0KdXNlIFxBd3NcUzNcUzNDbGllbnQ7ICANCnVzZSBcQXdzXEV4Y2VwdGlvblxBd3NFeGNlcHRpb247DQp1c2UgXEF3c1xFeGNlcHRpb25cVW5yZXNvbHZlZEVuZHBvaW50RXhjZXB0aW9uOw0KdXNlIFxBV1NTREtcRXhjZXB0aW9uOw0KdXNlIFxBV1NTM1xoZWxwZXJzOw0KDQpmaW5hbCBjbGFzcyB1dGlscw0Kew0KDQogICAgcHJpdmF0ZSAkczNDbGllbnQgPSBudWxsOw0KICAgIHByaXZhdGUgc3RhdGljICRfX21vZDsNCiAgICBwcml2YXRlIHN0YXRpYyAkX19zZGs7DQoNCiAgICBwdWJsaWMgc3RhdGljICRwcm9wZXJ0eSA9ICJoZWxsbyB3b3JsZCI7DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCl7DQoNCiAgICAgICAgJHRoaXMtPmF3c3NkayA9IHNlbGY6OmdldF9zZGsoKTsNCiAgICAgICAgJHRoaXMtPm1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJHRoaXMtPnMzQ2xpZW50ID0gbnVsbDsNCiAgICAgICAgJHRoaXMtPmJ1Y2tldF9uYW1lID0gJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnYnVja2V0X25hbWUnKTsNCiAgICAgICAgJHRoaXMtPmFjY2Vzc19yZWdpb24gPSAkdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdhY2Nlc3NfcmVnaW9uJyk7DQogICAgICAgICR0aGlzLT51c2VfY3VzdG9tX3VybCA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ3VzZV9jdXN0b21fdXJsJyk7DQogICAgICAgICR0aGlzLT5jdXN0b21fdXJsID0gJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnY3VzdG9tX3VybCcpOw0KICAgICAgICAkdGhpcy0+YWxsb3dlZCA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ2FsbG93ZWQnKTsNCiAgICAgICAgJHRoaXMtPmVycm9ycyA9IGFycmF5KCk7DQoNCiAgICB9DQoNCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBsYW5nKCkNCiAgICB7DQogICAgICAgIGlmKCAhc2VsZjo6JF9fbW9kICkgc2VsZjo6JF9fbW9kID0gc2VsZjo6Z2V0X21vZCgpOw0KICAgICAgICAkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KHNlbGY6OiRfX21vZCwnTGFuZycpLCRhcmdzKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKSB7DQoNCiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOw0KICAgICAgICAkc2V0dGluZ3MgPSAkdGhpcy0+bW9kLT5HZXRTZXR0aW5nc1ZhbHVlcygpOw0KICAgICAgICBpZihlbXB0eSgkc2V0dGluZ3MpKSByZXR1cm4gZmFsc2U7DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRhdXRoX21ldGhvZCA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ2F1dGhfbWV0aG9kJyk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIE9ubHkgdmFsaWRhdGUgY3JlZGVudGlhbHMgaWYgbm90IHVzaW5nIElBTSByb2xlDQogICAgICAgICAgICBpZiAoJGF1dGhfbWV0aG9kICE9PSAnaWFtX3JvbGUnKSB7DQogICAgICAgICAgICAgICAgJGRhdGEgPSBhcnJheSgnYWNjZXNzX2tleScsJ2FjY2Vzc19zZWNyZXRfa2V5JywnYnVja2V0X25hbWUnLCdhY2Nlc3NfcmVnaW9uJyk7DQoNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZGF0YSBhcyAka2V5KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJGl0ZW0gPSAkdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCRrZXkpOw0KICAgICAgICAgICAgICAgICAgICBpZigkaXRlbT09IiIgb3IgJGl0ZW09PW51bGwpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5lcnJvcnNbXSA9ICR0aGlzLT5sYW5nKCRrZXkpLiAiICIuJHRoaXMtPmxhbmcoInJlcXVpcmVkIikgOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5lcnJvcnMpKXsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50KCR0aGlzLT5lcnJvcnMpID09IDQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEFXU1NES1xFeGNlcHRpb24oJHRoaXMtPmVycm9ycywic2xpZGUtZGFuZ2VyIik7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAvLyBGb3IgSUFNIHJvbGUsIG9ubHkgdmFsaWRhdGUgYnVja2V0X25hbWUgYW5kIHJlZ2lvbg0KICAgICAgICAgICAgICAgICRkYXRhID0gYXJyYXkoJ2J1Y2tldF9uYW1lJywnYWNjZXNzX3JlZ2lvbicpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkYXRhIGFzICRrZXkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJGtleSk7DQogICAgICAgICAgICAgICAgICAgIGlmKCRpdGVtPT0iIiBvciAkaXRlbT09bnVsbCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmVycm9yc1tdID0gJHRoaXMtPmxhbmcoJGtleSkuICIgIi4kdGhpcy0+bGFuZygicmVxdWlyZWQiKSA7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5lcnJvcnMpKXsNCiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxBV1NTREtcRXhjZXB0aW9uKCR0aGlzLT5lcnJvcnMsInNsaWRlLWRhbmdlciIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHMzID0gc2VsZjo6Z2V0UzNDbGllbnQoKTsNCiAgICAgICAgICAgIGlmIChpc19hcnJheSgkczMpICYmICEkczNbJ2Nvbm4nXSl7DQogICAgICAgICAgICAgICAgJHRoaXMtPmVycm9yc1tdID0gJHMzWydtZXNzYWdlJ107DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxBV1NTREtcRXhjZXB0aW9uKCR0aGlzLT5lcnJvcnMsInNsaWRlLWRhbmdlciIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRoaXMtPnMzQ2xpZW50ID0gJHMzOw0KDQogICAgICAgICAgICBpZighJHRoaXMtPnMzQ2xpZW50LT5kb2VzQnVja2V0RXhpc3QoJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnYnVja2V0X25hbWUnKSkpew0KICAgICAgICAgICAgICAgICR0aGlzLT5lcnJvcnNbXSA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ2J1Y2tldF9uYW1lJykuIiBkb2VzIG5vdCBleGlzdCI7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxBV1NTREtcRXhjZXB0aW9uKCR0aGlzLT5lcnJvcnMsInNsaWRlLWRhbmdlciIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oImJ1Y2tldF9uYW1lIiwkdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdidWNrZXRfbmFtZScpKTsNCiAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigiYnVja2V0X3VybCIsImh0dHBzOi8vIi4kdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdidWNrZXRfbmFtZScpLiIuczMuIi4kdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdhY2Nlc3NfcmVnaW9uJykuIi5hbWF6b25hd3MuY29tLyIpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvL2hlbHBlcnM6Ol9EaXNwbGF5QWRtaW5NZXNzYWdlKG51bGwsYXJyYXkoc2VsZjo6bGFuZygnbXNnX3ZyZnlfaW50ZWdyaXR5dmVyaWZpZWQnKSkpOw0KDQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKFxBV1NTREtcRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAkdGhpcy0+YXdzc2RrLT5fRGlzcGxheU1lc3NhZ2UoJGUtPmdldFRleHQoKSwkZS0+Z2V0VHlwZSgpKTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgICRtZXNzYWdlID0gJHRoaXMtPmF3c3Nkay0+X0Rpc3BsYXlNZXNzYWdlKCR0aGlzLT5sYW5nKCdtc2dfdnJmeV9pbnRlZ3JpdHl2ZXJpZmllZCcpLCJzdWNjZXNzIiwxKTsNCiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJtZXNzYWdlIiwkbWVzc2FnZSk7DQogICAgICAgIHJldHVybiB0cnVlOw0KCX0NCiAgICANCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UzNDbGllbnQoKXsNCg0KICAgICAgICAkcmVzdWx0ID0gYXJyYXkoKTsNCiAgICAgICAgJHJlc3VsdFsnY29ubiddID0gdHJ1ZTsNCg0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJGNvbmZpZyA9IFsNCiAgICAgICAgICAgICAgICAncmVnaW9uJyA9PiBzZWxmOjpnZXRfbW9kKCktPkdldFByZWZlcmVuY2UoJ2FjY2Vzc19yZWdpb24nKSwNCiAgICAgICAgICAgICAgICAndmVyc2lvbicgPT4gJ2xhdGVzdCcNCiAgICAgICAgICAgIF07DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIE9ubHkgYWRkIGNyZWRlbnRpYWxzIGlmIG5vdCB1c2luZyBFQzIgSUFNIHJvbGUNCiAgICAgICAgICAgICRjcmVkZW50aWFscyA9IHNlbGY6OmdldF9jcmVkZW50aWFscygpOw0KICAgICAgICAgICAgaWYgKCRjcmVkZW50aWFscyAhPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICRjb25maWdbJ2NyZWRlbnRpYWxzJ10gPSAkY3JlZGVudGlhbHM7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRzM0NsaWVudCA9IG5ldyBTM0NsaWVudCgkY29uZmlnKTsNCiAgICAgICAgICAgIA0KICAgICAgICB9IGNhdGNoIChcQXdzXEV4Y2VwdGlvblxDcmVkZW50aWFsc0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgJHJlc3VsdFsnY29ubiddID0gZmFsc2U7DQogICAgICAgICAgICAkcmVzdWx0WydtZXNzYWdlJ10gPSAnSUFNIFJvbGUgYXV0aGVudGljYXRpb24gZmFpbGVkLiBFbnN1cmUgeW91IGFyZSBydW5uaW5nIG9uIEVDMi9FQ1Mgd2l0aCBhbiBhdHRhY2hlZCBJQU0gcm9sZSwgb3Igc3dpdGNoIHRvIFNhdmVkIENyZWRlbnRpYWxzIG1ldGhvZC4nOw0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0gY2F0Y2ggKEF3c0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgJHJlc3VsdFsnY29ubiddID0gZmFsc2U7DQogICAgICAgICAgICAkcmVzdWx0WydtZXNzYWdlJ10gPSAkZS0+Z2V0QXdzRXJyb3JNZXNzYWdlKCk7DQogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkczNDbGllbnQ7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHVwbG9hZF9maWxlKCRmaWxlX25hbWUsJGZpbGVfdGVtcF9zcmMpew0KDQogICAgICAgICR0aGlzLT5zM0NsaWVudCA9ICR0aGlzOjpnZXRTM0NsaWVudCgpOw0KICAgICAgICAkcmV0ID0gYXJyYXkoKTsNCiAgICAgICAgdHJ5IHsgDQogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnMzQ2xpZW50LT5wdXRPYmplY3QoWyANCiAgICAgICAgICAgICAgICAnQnVja2V0JyA9PiAkdGhpcy0+YnVja2V0X25hbWUsIA0KICAgICAgICAgICAgICAgICdLZXknICAgID0+ICRmaWxlX25hbWUsDQogICAgICAgICAgICAgICAgJ1NvdXJjZUZpbGUnID0+ICRmaWxlX3RlbXBfc3JjLA0KICAgICAgICAgICAgICAgICdUYWdnaW5nJyA9PiAiTW9kdWxlPUNNU01TOjpBV1NTMyINCiAgICAgICAgICAgIF0pOyANCiAgICAgICAgICAgIC8vJHJlc3VsdF9hcnIgPSAkcmVzdWx0LT50b0FycmF5KCk7IA0KDQogICAgICAgICAgICAkcmV0WzBdID0gdHJ1ZTsNCiAgICAgICAgICAgICRyZXRbMl0gPSAkZmlsZV9uYW1lOyAgDQoNCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7IA0KICAgICAgICAgICAgJHJldFswXSA9IGZhbHNlOw0KICAgICAgICAgICAgJHJldFsxXSA9ICRlLT5nZXRBd3NFcnJvck1lc3NhZ2UoKTsNCiAgICAgICAgICAgIC8vZWNobyAkZS0+Z2V0Q29kZSgpIC4gIiAiIC4kZS0+Z2V0TWVzc2FnZSgpOw0KICAgICAgICB9IA0KDQogICAgICAgIHJldHVybiAkcmV0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0X215X2J1Y2tldHMoKXsNCiAgICAgICAgJGJ1Y2tldHMgPSAkdGhpcy0+czNDbGllbnQtPmxpc3RCdWNrZXRzKCk7DQogICAgICAgIHJldHVybiAkYnVja2V0c1snQnVja2V0cyddOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBidWNrZXRzRXhpc3RzKCRidWNrZXRfaWQpew0KICAgICAgIGlmKCR0aGlzLT5zM0NsaWVudC0+ZG9lc0J1Y2tldEV4aXN0KCRidWNrZXRfaWQpKXsNCiAgICAgICAgZWNobyAiYnVja2V0IGV4aXN0cyI7DQogICAgICAgfSBlbHNlIHsNCiAgICAgICAgZWNobyAiYnVja2V0IGRvZXMgbm90IGV4aXN0IjsNCiAgICAgICB9DQoNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlUGF0aCgkbGluaywkcGF0aCl7DQogICAgICAgICRuZXdwaHJhc2UgPSBzdHJfcmVwbGFjZSgkcGF0aCwgIiIsICRsaW5rKTsNCiAgICAgICAgcmV0dXJuICRuZXdwaHJhc2U7DQogICAgIH0NCg0KICAgIA0KICAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdF9teV9maWxlcygpew0KICAgICAgICAkYnVja2V0cyA9ICR0aGlzLT5zM0NsaWVudC0+bGlzdEJ1Y2tldHMoKTsNCiAgICAgICAgcmV0dXJuICRidWNrZXRzWydCdWNrZXRzJ107DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldF9maWxlKCRwcmVmaXgpew0KDQogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBV1NTMycpOw0KICAgICAgICAkdGhpcy0+czNDbGllbnQgPSBzZWxmOjpnZXRTM0NsaWVudCgpOw0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5zM0NsaWVudC0+Z2V0T2JqZWN0KFsNCiAgICAgICAgICAgICAgICAnQnVja2V0JyA9PiAkbW9kLT5HZXRPcHRpb25WYWx1ZSgiYnVja2V0X25hbWUiKSwNCiAgICAgICAgICAgICAgICAnS2V5JyA9PiAkcHJlZml4LA0KICAgICAgICAgICAgXSk7DQogICAgICAgICAgICAkYm9keSA9ICRmaWxlLT5nZXQoJ0JvZHknKTsNCiAgICAgICAgICAgICRib2R5LT5yZXdpbmQoKTsNCiAgICAgICAgICAgIA0KICAgICAgICB9IGNhdGNoIChBd3NFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICRlcnJvcnNbXSA9ICJGYWlsZWQgdG8gZG93bmxvYWQgJGZpbGVfbmFtZSBmcm9tICRidWNrZXRfbmFtZSB3aXRoIGVycm9yOiAiIC4gJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpOw0KICAgICAgICAgICAgJGVycm9yc1tdID0gIlBsZWFzZSBmaXggZXJyb3Igd2l0aCBmaWxlIGRvd25sb2FkaW5nIGJlZm9yZSBjb250aW51aW5nLiI7DQogICAgICAgIA0KICAgICAgICAgICAgJG1vZC0+RGlzcGxheUVycm9yTWVzc2FnZSgkZXJyb3JzKTsNCg0KICAgICAgICB9DQoNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9maWxlX2luZm8oJHByZWZpeCl7DQoNCiAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FXU1MzJyk7DQogICAgICAgICRzM0NsaWVudCA9IHNlbGY6OmdldFMzQ2xpZW50KCk7DQoNCiAgICAgICAgJGJ1Y2tldF9pZCA9ICRtb2QtPkdldE9wdGlvblZhbHVlKCJidWNrZXRfbmFtZSIpOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJGZpbGUgPSAkczNDbGllbnQtPmdldE9iamVjdChbDQogICAgICAgICAgICAgICAgJ0J1Y2tldCcgPT4gJGJ1Y2tldF9pZCwNCiAgICAgICAgICAgICAgICAnS2V5JyA9PiAkcHJlZml4LA0KICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICRoZWFkID0gJHMzQ2xpZW50LT5oZWFkT2JqZWN0KFsNCiAgICAgICAgICAgICAgICAnQnVja2V0JyA9PiAkYnVja2V0X2lkLA0KICAgICAgICAgICAgICAgICdLZXknID0+ICRwcmVmaXgNCiAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAkb25lcm93ID0gbmV3IFxzdGRDbGFzcygpOw0KICAgICAgICAgICAgJG9uZXJvdy0+bmFtZSA9ICRwcmVmaXg7DQogICAgICAgICAgICAkb25lcm93LT5idWNrZXQgPSAkYnVja2V0X2lkOw0KICAgICAgICAgICAgJG9uZXJvdy0+bWltZSA9ICRoZWFkWydDb250ZW50VHlwZSddOw0KICAgICAgICAgICAgJG9uZXJvdy0+c2l6ZT1zZWxmOjpmb3JtYXRCeXRlcygkZmlsZVsnQ29udGVudExlbmd0aCddKTsNCiAgICAgICAgICAgICRvbmVyb3ctPnBvc3RkYXRlPXN0cnRvdGltZSggJGZpbGVbJ0xhc3RNb2RpZmllZCddICk7DQogICAgICAgICAgICAkb25lcm93LT51cmxfb3JpZ2luYWwgPSBzZWxmOjpnZXRVcmwoJHByZWZpeCk7DQogICAgICAgICAgICAkb25lcm93LT51cmwgPSAkbW9kLT5HZXRQcmV0dHlVcmwoJHByZWZpeCk7DQogICAgICAgICAgICAkb25lcm93LT51cmxfcHJlc2lnbmVkID0gc2VsZjo6cHJlc2lnbmVkVXJsKCRwcmVmaXgpOw0KICAgICAgICAgICAgJG9uZXJvdy0+dXJsID0gc3RyX3JlcGxhY2UoJ1xcJywnLycsJG9uZXJvdy0+dXJsKTsgLy8gd2luZG96ZSBib3RoIHN1Y2tzLCBhbmQgYmxvd3MuDQogICAgICAgICAgICBpZihzZWxmOjppc19maWxlX2ltYWdlKCRvbmVyb3ctPm5hbWUpKSAkb25lcm93LT5pc2ltYWdlID0gdHJ1ZTsNCg0KICAgICAgICAgICAgcmV0dXJuICRvbmVyb3c7DQoNCiAgICAgICAgICAgIA0KICAgICAgICB9IGNhdGNoIChBd3NFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICRlcnJvcnNbXSA9ICJGYWlsZWQgdG8gZG93bmxvYWQgJGZpbGVfbmFtZSBmcm9tICRidWNrZXRfbmFtZSB3aXRoIGVycm9yOiAiIC4gJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpOw0KICAgICAgICAgICAgJGVycm9yc1tdID0gIlBsZWFzZSBmaXggZXJyb3Igd2l0aCBmaWxlIGRvd25sb2FkaW5nIGJlZm9yZSBjb250aW51aW5nLiI7DQogICAgICAgIA0KICAgICAgICAgICAgJG1vZC0+RGlzcGxheUVycm9yTWVzc2FnZSgkZXJyb3JzKTsNCg0KICAgICAgICB9DQoNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlbGV0ZU9iamVjdCgka2V5bmFtZSl7DQoNCiAgICAgICAgJGluc3RhbmNlID0gbmV3IHNlbGYoKTsNCiAgICAgICAgJHMzID0gc2VsZjo6Z2V0UzNDbGllbnQoKTsNCiAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRzMy0+ZGVsZXRlT2JqZWN0KFsNCiAgICAgICAgICAgICAgICAgICAgJ0J1Y2tldCcgPT4gJGluc3RhbmNlLT5idWNrZXRfbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgJ0tleScgICAgPT4gJGtleW5hbWUNCiAgICAgICAgICAgICAgICBdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChBd3NFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICAgICBlY2hvICJFcnJvciBkZWxldGluZyBvYmplY3Q6ICIgLiAkZS0+Z2V0QXdzRXJyb3JNZXNzYWdlKCkgLiAiXG4iOw0KICAgICAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWxldGVPYmplY3REaXIoJGRpcil7DQogICAgICAgICRpbnN0YW5jZSA9IG5ldyBzZWxmKCk7DQogICAgICAgICRzMyA9IHNlbGY6OmdldFMzQ2xpZW50KCk7DQogICAgDQogICAgICAgICRrZXlzID0gJHMzLT5saXN0T2JqZWN0cyhbDQogICAgICAgICAgICAnQnVja2V0JyA9PiAkaW5zdGFuY2UtPmJ1Y2tldF9uYW1lLA0KICAgICAgICAgICAgJ1ByZWZpeCcgPT4gJGRpcg0KICAgICAgICBdKTsNCg0KICAgICAgICAvLyAzLiBEZWxldGUgdGhlIG9iamVjdHMuDQogICAgICAgIGZvcmVhY2ggKCRrZXlzWydDb250ZW50cyddIGFzICRrZXkpDQogICAgICAgIHsNCiAgICAgICAgICAgICRzMy0+ZGVsZXRlT2JqZWN0cyhbDQogICAgICAgICAgICAgICAgJ0J1Y2tldCcgID0+ICRpbnN0YW5jZS0+YnVja2V0X25hbWUsDQogICAgICAgICAgICAgICAgJ0RlbGV0ZScgPT4gWw0KICAgICAgICAgICAgICAgICAgICAnT2JqZWN0cycgPT4gWw0KICAgICAgICAgICAgICAgICAgICAgICAgWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLZXknID0+ICRrZXlbJ0tleSddDQogICAgICAgICAgICAgICAgICAgICAgICBdDQogICAgICAgICAgICAgICAgICAgIF0NCiAgICAgICAgICAgICAgICBdDQogICAgICAgICAgICBdKTsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICANCiAgICB9DQogICAgDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfbW9kKCl7DQogICAgICAgIGlmKCAhc2VsZjo6JF9fbW9kICkgc2VsZjo6JF9fbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQVdTUzMnKTsNCiAgICAgICAgcmV0dXJuIHNlbGY6OiRfX21vZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9zZGsoKXsNCiAgICAgICAgaWYoICFzZWxmOjokX19zZGsgKSBzZWxmOjokX19zZGsgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBV1NTREsnKTsNCiAgICAgICAgcmV0dXJuIHNlbGY6OiRfX3NkazsNCiAgICB9DQoNCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRfY3JlZGVudGlhbHMoKXsNCiAgICAgICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJGF1dGhfbWV0aG9kID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnYXV0aF9tZXRob2QnKTsNCiAgICAgICAgDQogICAgICAgIC8vIElmIHVzaW5nIElBTSByb2xlLCByZXR1cm4gbnVsbCB0byB1c2UgaW5zdGFuY2UgcHJvZmlsZQ0KICAgICAgICBpZiAoJGF1dGhfbWV0aG9kID09PSAnaWFtX3JvbGUnKSB7DQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBzYXZlZCBjcmVkZW50aWFscw0KICAgICAgICAkc3RzQ2xpZW50ID0gbmV3IFN0c0NsaWVudChbDQogICAgICAgICAgICAndmVyc2lvbicgPT4gJ2xhdGVzdCcsDQogICAgICAgICAgICAncmVnaW9uJyA9PiAkbW9kLT5HZXRQcmVmZXJlbmNlKCdhY2Nlc3NfcmVnaW9uJyksDQogICAgICAgICAgICAnY3JlZGVudGlhbHMnID0+IFsNCiAgICAgICAgICAgICAgICAna2V5JyA9PiAkbW9kLT5HZXRQcmVmZXJlbmNlKCdhY2Nlc3Nfa2V5JyksDQogICAgICAgICAgICAgICAgJ3NlY3JldCcgPT4gJG1vZC0+R2V0UHJlZmVyZW5jZSgnYWNjZXNzX3NlY3JldF9rZXknKSwNCiAgICAgICAgICAgIF0sDQogICAgICAgIF0pOw0KDQogICAgICAgICRyZXN1bHQgPSAkc3RzQ2xpZW50LT5nZXRTZXNzaW9uVG9rZW4oKTsNCiAgICAgICAgJGNyZWRlbnRpYWxzID0gJHN0c0NsaWVudC0+Y3JlYXRlQ3JlZGVudGlhbHMoJHJlc3VsdCk7DQoNCiAgICAgICAgcmV0dXJuICRjcmVkZW50aWFsczsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVybCgka2V5KXsNCiAgICAgICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJGJ1Y2tldF9pZCA9ICRtb2QtPkdldE9wdGlvblZhbHVlKCJidWNrZXRfbmFtZSIpOw0KDQogICAgICAgICRzM0NsaWVudCA9IHNlbGY6OmdldFMzQ2xpZW50KCk7DQogICAgICAgICR1cmwgPSAkczNDbGllbnQtPmdldE9iamVjdFVybCgkYnVja2V0X2lkLCAka2V5KTsNCiAgICAgICANCiAgICAgICAgcmV0dXJuICR1cmw7DQoNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByZXNpZ25lZFVybCgka2V5KXsNCg0KICAgICAgICAkbW9kID0gc2VsZjo6Z2V0X21vZCgpOw0KICAgICAgICAkYnVja2V0X2lkID0gJG1vZC0+R2V0T3B0aW9uVmFsdWUoImJ1Y2tldF9uYW1lIik7DQogICAgICAgICR1c2VfY3VzdG9tX3VybCA9ICRtb2QtPkdldE9wdGlvblZhbHVlKCJ1c2VfY3VzdG9tX3VybCIpOw0KICAgICAgICAkY3VzdG9tX3VybCA9ICRtb2QtPkdldE9wdGlvblZhbHVlKCJjdXN0b21fdXJsIik7DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRzM0NsaWVudCA9IHNlbGY6OmdldFMzQ2xpZW50KCk7DQogICAgICAgICAgICAkY21kID0gJHMzQ2xpZW50LT5nZXRDb21tYW5kKCdHZXRPYmplY3QnLCBbDQogICAgICAgICAgICAgICAgJ0J1Y2tldCcgPT4gJGJ1Y2tldF9pZCwNCiAgICAgICAgICAgICAgICAnS2V5JyA9PiAka2V5DQogICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgJHJlcXVlc3QgPSAkczNDbGllbnQtPmNyZWF0ZVByZXNpZ25lZFJlcXVlc3QoJGNtZCwgJysxIGhvdXInKTsNCiAgICAgICAgICAgICRwcmVzaWduZWRVcmwgPSAoc3RyaW5nKSRyZXF1ZXN0LT5nZXRVcmkoKTsNCg0KICAgICAgICAgICAgaWYoICR1c2VfY3VzdG9tX3VybCAmJiAkY3VzdG9tX3VybCApIHsNCiAgICAgICAgICAgICAgICAkdXJsUGFydHMgPSBwYXJzZV91cmwoJHByZXNpZ25lZFVybCk7DQogICAgICAgICAgICAgICAgaWYgKCR1cmxQYXJ0cyA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAiRXJyb3IgcGFyc2luZyB0aGUgVVJMIjsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkdXJsUGFydHNbJ3NjaGVtZSddID0gcGFyc2VfdXJsKCRjdXN0b21fdXJsLCBQSFBfVVJMX1NDSEVNRSk7DQogICAgICAgICAgICAgICAgICAgICR1cmxQYXJ0c1snaG9zdCddID0gcGFyc2VfdXJsKCRjdXN0b21fdXJsLCBQSFBfVVJMX0hPU1QpOw0KICAgICAgICAgICAgICAgICAgICAkbmV3VXJsID0gJHVybFBhcnRzWydzY2hlbWUnXSAuICc6Ly8nIC4gJHVybFBhcnRzWydob3N0J107DQogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdXJsUGFydHNbJ3BhdGgnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdVcmwgLj0gJHVybFBhcnRzWydwYXRoJ107DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR1cmxQYXJ0c1sncXVlcnknXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdVcmwgLj0gJz8nLiR1cmxQYXJ0c1sncXVlcnknXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkcHJlc2lnbmVkVXJsID0gJG5ld1VybDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIHJldHVybiAkcHJlc2lnbmVkVXJsOw0KDQogICAgICAgIH0gY2F0Y2ggKFxBd3NFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZXJyb3INCiAgICAgICAgICAgICRtZS0+c2V0RXJyb3IoYXJyYXkoDQogICAgICAgICAgICAgICAgJ2Vycm9yJyA9PiAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQVdTIHNlcnZlciIsDQogICAgICAgICAgICAgICAgJ2Vycm5vJyA9PiAkZS0+Z2V0QXdzRXJyb3JDb2RlKCksDQogICAgICAgICAgICAgICAgJ2VycnN0cicgPT4gJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpDQogICAgICAgICAgICApKTsNCg0KICAgICAgICB9DQogICAgICAgDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRCeXRlcygkYnl0ZXMpIHsNCiAgICAgICAgaWYgKCRieXRlcyA+IDApIHsNCiAgICAgICAgICAgICRpID0gZmxvb3IobG9nKCRieXRlcykgLyBsb2coMTAyNCkpOw0KICAgICAgICAgICAgJHNpemVzID0gYXJyYXkoJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInKTsNCiAgICAgICAgICAgIHJldHVybiBzcHJpbnRmKCclLjAyRicsIHJvdW5kKCRieXRlcyAvIHBvdygxMDI0LCAkaSksMSkpICogMSAuICcgJyAuIEAkc2l6ZXNbJGldOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIDA7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1bUJ5dGVzKCRpdGVtcykgew0KICAgICAgICAkc3VtID0gMDsNCiAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGl0ZW0tPnNpemUpKSB7DQogICAgICAgICAgICAgICAgJHN1bSArPSAkaXRlbS0+c2l6ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIA0KICAgICAgICByZXR1cm4gc2VsZjo6Zm9ybWF0Qnl0ZXMoJHN1bSk7DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc19maWxlX2FjY2VwdGFibGUoICRmaWxlX3R5cGUgKQ0KICAgIHsNCiAgICAgICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJGZpbGVfdHlwZSA9IHN0cnRvbG93ZXIoJGZpbGVfdHlwZSk7DQogICAgICAgICRhbGxvd1R5cGVzID0gZXhwbG9kZSgnLCcsJG1vZC0+R2V0UHJlZmVyZW5jZSgnYWxsb3dlZCcpKTsNCiAgICAgICAgaWYoIWluX2FycmF5KCRmaWxlX3R5cGUsICRhbGxvd1R5cGVzKSkgcmV0dXJuIEZBTFNFOw0KICAgICAgICByZXR1cm4gVFJVRTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzX2ZpbGVfaW1hZ2UoICRzcmNfZmlsZV9uYW1lICkNCiAgICB7DQogICAgICAgICRzdXBwb3J0ZWRfaW1hZ2UgPSBhcnJheSgNCiAgICAgICAgICAgICdnaWYnLA0KICAgICAgICAgICAgJ2pwZycsDQogICAgICAgICAgICAnanBlZycsDQogICAgICAgICAgICAncG5nJw0KICAgICAgICApOw0KICAgICAgICANCiAgICAgICAgJGV4dCA9IHN0cnRvbG93ZXIocGF0aGluZm8oJHNyY19maWxlX25hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOw0KICAgICAgICBpZiAoIWluX2FycmF5KCRleHQsICRzdXBwb3J0ZWRfaW1hZ2UpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIGNoZWNrX2lhbV9wb2xpY3koKSB7DQogICAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsNCiAgICAgICAgJGVycm9yID0gbnVsbDsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRyZXNwID0gJHRoaXMtPnMzQ2xpZW50LT5nZXRCdWNrZXRQb2xpY3koWw0KICAgICAgICAgICAgICAgICdCdWNrZXQnID0+ICR0aGlzLT5idWNrZXRfbmFtZQ0KICAgICAgICAgICAgXSk7DQogICAgICAgICAgICAkbWVzc2FnZSA9ICJTdWNjZWVkIGluIHJlY2VpdmluZyBidWNrZXQgcG9saWN5OiI7DQoNCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICBpZigkZS0+Z2V0U3RhdHVzQ29kZSgpID09IDQwNCl7DQogICAgICAgICAgICAgICAgJGVycm9yID0gMTsNCiAgICAgICAgICAgICAgICAkbWVzc2FnZSA9ICR0aGlzLT5idWNrZXRfbmFtZS4iICIuJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpOw0KICAgICAgICAgICAgICAgIC8vJHRoaXMtPnB1dF9pYW1fcG9saWN5KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCRtZXNzYWdlKTsNCiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdlcnJvcicsJGVycm9yKTsNCiAgICAgICAgDQoNCiAgICB9DQoNCiAgICANCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gcHV0X2lhbV9wb2xpY3koKSB7DQoNCiAgICAgICAgJHBvbGljeSA9ICR0aGlzLT5nZXRfaWFtX3BvbGljeSgpOw0KICAgICAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRyZXNwID0gJHRoaXMtPnMzQ2xpZW50LT5wdXRCdWNrZXRQb2xpY3koWw0KICAgICAgICAgICAgICAgICdCdWNrZXQnID0+ICR0aGlzLT5idWNrZXRfbmFtZSwNCiAgICAgICAgICAgICAgICAnUG9saWN5JyA9PiAkcG9saWN5LA0KICAgICAgICAgICAgXSk7DQogICAgICAgICAgICBlY2hvICJTdWNjZWVkIGluIHB1dCBhIHBvbGljeSBvbiBidWNrZXQ6ICIgLiAkdGhpcy0+YnVja2V0X25hbWUgLiAiXG48YnI+IjsNCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2UNCiAgICAgICAgICAgICRzbWFydHktPmFzc2lnbignbWVzc2FnZScsJHRoaXMtPmJ1Y2tldF9uYW1lLiIgIi4kZS0+Z2V0QXdzRXJyb3JNZXNzYWdlKCkpOw0KDQogICAgICAgIH0NCg0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3BvbGljeSgpew0KICAgICAgICAkbW9kID0gc2VsZjo6Z2V0X21vZCgpOw0KICAgICAgICAkczNDbGllbnQgPSBzZWxmOjpnZXRTM0NsaWVudCgpOw0KICAgICAgICAkYnVja2V0ID0gJG1vZC0+R2V0T3B0aW9uVmFsdWUoImJ1Y2tldF9uYW1lIik7DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRyZXNwID0gJHMzQ2xpZW50LT5nZXRCdWNrZXRBY2woWw0KICAgICAgICAgICAgICAgICdCdWNrZXQnID0+ICRidWNrZXQNCiAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgLy9wcmludF9yKCRyZXNwKTsNCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAvLyBvdXRwdXQgZXJyb3IgbWVzc2FnZSBpZiBmYWlscw0KICAgICAgICAgICAgZWNobyAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgICAgICAgICAgZWNobyAiXG4iOw0KICAgICAgICB9DQoNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNpZ25lZExpbmsgKCRwcmVmaXgpIHsNCg0KICAgICAgICAkYmFzZV91cmwgPSBDTVNfUk9PVF9VUkw7DQogICAgICAgICRuYW1lID0gXEFXU1NES1xlbmNyeXB0OjplbmNvZGVmaWxlbmFtZSgkcHJlZml4KTsNCiAgICAgICAgJG91dCA9ICRiYXNlX3VybC4iL1MzL3MvIi4kbmFtZTsNCg0KICAgICAgICByZXR1cm4gJG91dDsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkNCiAgICB7DQogICAgICAgIHN0YXRpYyAkaW5zdGFuY2UgPSBudWxsOw0KICAgICAgICBpZiAoISRpbnN0YW5jZSkgew0KICAgICAgICAgICAgJGluc3RhbmNlID0gbmV3IHNlbGYoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkaW5zdGFuY2U7DQogICAgfQ0KICAgIA0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfaWFtX3BvbGljeSgpIDogc3RyaW5nIHsNCiAgICAgICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJGJ1Y2tldF9pZCA9ICRtb2QtPkdldE9wdGlvblZhbHVlKCJidWNrZXRfbmFtZSIpOw0KCQkkYnVja2V0ID0gc3RydG9rKCAkYnVja2V0X2lkLCAnLycgKTsNCg0KCQkkcGF0aCA9IG51bGw7DQoNCgkJaWYgKCBzdHJwb3MoICRidWNrZXRfaWQsICcvJyApICkgew0KCQkJJHBhdGggPSBzdHJfcmVwbGFjZSggc3RydG9rKCAkYnVja2V0X2lkLCAnLycgKSAuICcvJywgJycsICRidWNrZXRfaWQgKTsNCgkJfQ0KDQoJCXJldHVybiAnew0KICAgICAgICAgICAgIlZlcnNpb24iOiAiMjAxMi0xMC0xNyIsDQogICAgICAgICAgICAiU3RhdGVtZW50IjogWw0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgIlNpZCI6ICJCYXNpY0FjY2VzcyIsDQogICAgICAgICAgICAgICAgICAgICJQcmluY2lwYWwiOiAiKiIsDQogICAgICAgICAgICAgICAgICAgICJFZmZlY3QiOiAiQWxsb3ciLA0KICAgICAgICAgICAgICAgICAgICAiQWN0aW9uIjogWw0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOkFib3J0TXVsdGlwYXJ0VXBsb2FkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzMzpEZWxldGVPYmplY3QiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOkdldE9iamVjdCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiczM6R2V0T2JqZWN0QWNsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzMzpQdXRPYmplY3QiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOlB1dE9iamVjdEFjbCINCiAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlIjogWw0KICAgICAgICAgICAgICAgICAgICAgICAgImFybjphd3M6czM6OjonLiRidWNrZXRfaWQuJy8qIg0KICAgICAgICAgICAgICAgICAgICBdDQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICJTaWQiOiAiQWxsb3dSb290QW5kSG9tZUxpc3RpbmdPZkJ1Y2tldCIsDQogICAgICAgICAgICAgICAgICAgICJQcmluY2lwYWwiOiAiKiIsDQogICAgICAgICAgICAgICAgICAgICJFZmZlY3QiOiAiQWxsb3ciLA0KICAgICAgICAgICAgICAgICAgICAiQWN0aW9uIjogWw0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOkdldEJ1Y2tldEFjbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiczM6R2V0QnVja2V0TG9jYXRpb24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOkdldEJ1Y2tldFBvbGljeSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiczM6TGlzdEJ1Y2tldCINCiAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAgICAgIlJlc291cmNlIjogWyJhcm46YXdzOnMzOjo6JyAuICRidWNrZXRfaWQgLiAnIl0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICBdDQogICAgICAgIH0nOw0KDQogICAgICAgIA0KCX0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc29ydF9ieV9rZXkoJGFycmF5LCAka2V5KSB7DQogICAgICAgIHVzb3J0KCRhcnJheSwgZnVuY3Rpb24oJGEsICRiKSB1c2UgKCRrZXkpIHsNCiAgICAgICAgICAgIHJldHVybiAkYVska2V5XSAtICRiWyRrZXldOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0dXJuICRhcnJheTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnRCeVByb3BlcnR5KCRhcnJheSwgJHByb3BlcnR5KSB7DQogICAgICAgIHVzb3J0KCRhcnJheSwgZnVuY3Rpb24oJGEsICRiKSB1c2UgKCRwcm9wZXJ0eSkgew0KICAgICAgICAgICAgcmV0dXJuIHN0cmNtcCgkYS0+JHByb3BlcnR5LCAkYi0+JHByb3BlcnR5KTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldHVybiAkYXJyYXk7DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtb3ZlSXRlbXNUb0JlZ2lubmluZ0J5SW5kZXgoJiRhcnJheSwgJGluZGljZXNUb01vdmUpIHsNCiAgICAgICAgJGl0ZW1zVG9Nb3ZlID0gYXJyYXkoKTsNCiAgICANCiAgICAgICAgLy8gRXh0cmFjdCB0aGUgaXRlbXMgdG8gbW92ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5kaWNlcw0KICAgICAgICBmb3JlYWNoICgkaW5kaWNlc1RvTW92ZSBhcyAkaW5kZXgpIHsNCiAgICAgICAgICAgIGlmIChpc3NldCgkYXJyYXlbJGluZGV4XSkpIHsNCiAgICAgICAgICAgICAgICAkaXRlbXNUb01vdmVbXSA9ICRhcnJheVskaW5kZXhdOw0KICAgICAgICAgICAgICAgIHVuc2V0KCRhcnJheVskaW5kZXhdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIA0KICAgICAgICAvLyBNZXJnZSB0aGUgaXRlbXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkNCiAgICAgICAgJGFycmF5ID0gYXJyYXlfbWVyZ2UoJGl0ZW1zVG9Nb3ZlLCAkYXJyYXkpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VXBEaXIoJG15QXJyYXkpew0KDQogICAgICAgICRjb21iaW5lZFN0cmluZyA9ICcnOw0KDQogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRteUFycmF5KSAtIDE7ICRpKyspIHsNCiAgICAgICAgICAgICRjb21iaW5lZFN0cmluZyAuPSAkbXlBcnJheVskaV0tPm5hbWU7DQogICAgICAgICAgICAkY29tYmluZWRTdHJpbmcgLj0gJy8nOyAvLyBBZGQgYSBzZXBhcmF0b3IgKGUuZy4sIGNvbW1hIGFuZCBzcGFjZSkNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkY29tYmluZWRTdHJpbmc7DQoNCiAgICB9DQogIA0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNhdGNoV2FybmluZygkZXJybm8sICRlcnJzdHIsICRlcnJmaWxlLCAkZXJybGluZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5zZXRFcnJvcihhcnJheSgNCiAgICAgICAgICAgICdlcnJvcicgPT4gIkNvbm5lY3RpbmcgdG8gdGhlIEFXUyBzZXJ2ZXIgcmFpc2VkIGEgUEhQIHdhcm5pbmc6ICIsDQogICAgICAgICAgICAnZXJybm8nID0+ICRlcnJubywNCiAgICAgICAgICAgICdlcnJzdHInID0+ICRlcnJzdHIsDQogICAgICAgICAgICAnZXJyZmlsZScgPT4gJGVycmZpbGUsDQogICAgICAgICAgICAnZXJybGluZScgPT4gJGVycmxpbmUNCiAgICAgICAgKSk7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEVycm9yKCRlcnJvciwkZGVidWc9MSkNCiAgICB7DQogICAgICAgICR0aGlzLT5lcnJvcnNbXSA9ICRlcnJvcjsNCiAgICAgICAgaWYgKCRkZWJ1ZyA+PSAxKSB7DQogICAgICAgICAgICBlY2hvICc8cHJlPic7DQogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZXJyb3JzIGFzICRlcnJvcikgew0KICAgICAgICAgICAgICAgIHByaW50X3IoJGVycm9yKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJzwvcHJlPic7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBzdGF0aWMgZmluYWwgcHVibGljIGZ1bmN0aW9uIGxvYWRlcigkcGFyYW1zLCAkc21hcnR5KQ0KICAgIHsNCiAgICAgICAgaWYoZW1wdHkoJHBhcmFtc1siZm9ybWF0Il0pKSB7DQogICAgICAgICAgICAkZm9ybWF0ID0gIiViICVlLCAlWSI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkZm9ybWF0ID0gJHBhcmFtc1siZm9ybWF0Il07DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHN0cmZ0aW1lKCRmb3JtYXQsdGltZSgpKTsNCiAgICB9DQoNCg0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKCkNvcHlyaWdodCAoQykgMjAyMyBNYWdhbCBIZXppLCBoX21hZ2FsQGhvdG1haWwuY29tCgpUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgoKQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcwo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KDQokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbihBV1NTMzo6TUFOQUdFX1BFUk0sJ01hbmFnZSBBV1NTMycpOw0KDQokdWlkID0gbnVsbDsNCmlmKCBjbXNtcygpLT50ZXN0X3N0YXRlKENtc0FwcDo6U1RBVEVfSU5TVEFMTCkgKSB7DQogICR1aWQgPSAxOyAvLyBoYXJkY29kZSB0byBmaXJzdCB1c2VyDQp9IGVsc2Ugew0KICAkdWlkID0gZ2V0X3VzZXJpZCgpOw0KfQ0KIyBTZXR1cCBzdW1tYXJ5IHRlbXBsYXRlDQp0cnkgew0KICAgICRzdW1tYXJ5X3RlbXBsYXRlX3R5cGUgPSBuZXcgQ21zTGF5b3V0VGVtcGxhdGVUeXBlKCk7DQogICAgJHN1bW1hcnlfdGVtcGxhdGVfdHlwZS0+c2V0X29yaWdpbmF0b3IoJHRoaXMtPkdldE5hbWUoKSk7DQogICAgJHN1bW1hcnlfdGVtcGxhdGVfdHlwZS0+c2V0X25hbWUoJ3N1bW1hcnknKTsNCiAgICAkc3VtbWFyeV90ZW1wbGF0ZV90eXBlLT5zZXRfZGZsdF9mbGFnKFRSVUUpOw0KICAgICRzdW1tYXJ5X3RlbXBsYXRlX3R5cGUtPnNldF9sYW5nX2NhbGxiYWNrKCdBV1NTMzo6cGFnZV90eXBlX2xhbmdfY2FsbGJhY2snKTsNCiAgICAkc3VtbWFyeV90ZW1wbGF0ZV90eXBlLT5zZXRfY29udGVudF9jYWxsYmFjaygnQVdTUzM6OnJlc2V0X3BhZ2VfdHlwZV9kZWZhdWx0cycpOw0KICAgICRzdW1tYXJ5X3RlbXBsYXRlX3R5cGUtPnNldF9oZWxwX2NhbGxiYWNrKCdBV1NTMzo6dGVtcGxhdGVfaGVscF9jYWxsYmFjaycpOw0KICAgICRzdW1tYXJ5X3RlbXBsYXRlX3R5cGUtPnJlc2V0X2NvbnRlbnRfdG9fZmFjdG9yeSgpOw0KICAgICRzdW1tYXJ5X3RlbXBsYXRlX3R5cGUtPnNhdmUoKTsNCiAgfQ0KICBjYXRjaCggQ21zRXhjZXB0aW9uICRlICkgew0KICAgIC8vIGxvZyBpdA0KICAgIGRlYnVnX3RvX2xvZyhfX0ZJTEVfXy4nOicuX19MSU5FX18uJyAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0luc3RhbGxhdGlvbiBFcnJvcjogJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgfQ0KDQp0cnkgew0KICAgICRmbiA9IGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nb3JpZ19zdW1tYXJ5X3RlbXBsYXRlLnRwbCc7DQogICAgaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApIHsNCiAgICAgICR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOw0KICAgICAgJHRwbCA9IG5ldyBDbXNMYXlvdXRUZW1wbGF0ZSgpOw0KICAgICAgJHRwbC0+c2V0X25hbWUoJ0FXU1MzIFN1bW1hcnkgU2FtcGxlJyk7DQogICAgICAkdHBsLT5zZXRfb3duZXIoJHVpZCk7DQogICAgICAkdHBsLT5zZXRfY29udGVudCgkdGVtcGxhdGUpOw0KICAgICAgJHRwbC0+c2V0X3R5cGUoJHN1bW1hcnlfdGVtcGxhdGVfdHlwZSk7DQogICAgICAkdHBsLT5zZXRfdHlwZV9kZmx0KFRSVUUpOw0KICAgICAgJHRwbC0+c2F2ZSgpOw0KICAgIH0NCiAgfQ0KICBjYXRjaCggQ21zRXhjZXB0aW9uICRlICkgew0KICAgIC8vIGxvZyBpdA0KICAgIGRlYnVnX3RvX2xvZyhfX0ZJTEVfXy4nOicuX19MSU5FX18uJyAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0luc3RhbGxhdGlvbiBFcnJvcjogJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgfQ0KDQogICMgU2V0dXAgZGV0YWlsIHRlbXBsYXRlDQogIHRyeSB7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlID0gbmV3IENtc0xheW91dFRlbXBsYXRlVHlwZSgpOw0KICAgICRkZXRhaWxfdGVtcGxhdGVfdHlwZS0+c2V0X29yaWdpbmF0b3IoJHRoaXMtPkdldE5hbWUoKSk7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlLT5zZXRfbmFtZSgnZGV0YWlsJyk7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlLT5zZXRfZGZsdF9mbGFnKFRSVUUpOw0KICAgICRkZXRhaWxfdGVtcGxhdGVfdHlwZS0+c2V0X2xhbmdfY2FsbGJhY2soJ0FXU1MzOjpwYWdlX3R5cGVfbGFuZ19jYWxsYmFjaycpOw0KICAgICRkZXRhaWxfdGVtcGxhdGVfdHlwZS0+c2V0X2NvbnRlbnRfY2FsbGJhY2soJ0FXU1MzOjpyZXNldF9wYWdlX3R5cGVfZGVmYXVsdHMnKTsNCiAgICAkZGV0YWlsX3RlbXBsYXRlX3R5cGUtPnJlc2V0X2NvbnRlbnRfdG9fZmFjdG9yeSgpOw0KICAgICRkZXRhaWxfdGVtcGxhdGVfdHlwZS0+c2V0X2hlbHBfY2FsbGJhY2soJ0FXU1MzOjp0ZW1wbGF0ZV9oZWxwX2NhbGxiYWNrJyk7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlLT5zYXZlKCk7DQogIH0NCiAgY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsNCiAgICAvLyBsb2cgaXQNCiAgICBkZWJ1Z190b19sb2coX19GSUxFX18uJzonLl9fTElORV9fLicgJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCdJbnN0YWxsYXRpb24gRXJyb3I6ICcuJGUtPkdldE1lc3NhZ2UoKSk7DQogIH0NCiAgDQogIHRyeSB7DQogICAgJGZuID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcGxhdGVzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidvcmlnX2RldGFpbF90ZW1wbGF0ZS50cGwnOw0KICAgIGlmKCBmaWxlX2V4aXN0cyggJGZuICkgKSB7DQogICAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsNCiAgICAgICR0cGwgPSBuZXcgQ21zTGF5b3V0VGVtcGxhdGUoKTsNCiAgICAgICR0cGwtPnNldF9uYW1lKCdBV1NTMyBEZXRhaWwgU2FtcGxlJyk7DQogICAgICAkdHBsLT5zZXRfb3duZXIoJHVpZCk7DQogICAgICAkdHBsLT5zZXRfY29udGVudCgkdGVtcGxhdGUpOw0KICAgICAgJHRwbC0+c2V0X3R5cGUoJGRldGFpbF90ZW1wbGF0ZV90eXBlKTsNCiAgICAgICR0cGwtPnNldF90eXBlX2RmbHQoVFJVRSk7DQogICAgICAkdHBsLT5zYXZlKCk7DQogICAgfQ0KICB9DQogIGNhdGNoKCBDbXNFeGNlcHRpb24gJGUgKSB7DQogICAgLy8gbG9nIGl0DQogICAgZGVidWdfdG9fbG9nKF9fRklMRV9fLic6Jy5fX0xJTkVfXy4nICcuJGUtPkdldE1lc3NhZ2UoKSk7DQogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnSW5zdGFsbGF0aW9uIEVycm9yOiAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICB9DQoNCiAgIyBTZXR1cCB1cGxvYWQgdGVtcGxhdGUNCiAgdHJ5IHsNCiAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUgPSBuZXcgQ21zTGF5b3V0VGVtcGxhdGVUeXBlKCk7DQogICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfb3JpZ2luYXRvcigkdGhpcy0+R2V0TmFtZSgpKTsNCiAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUtPnNldF9uYW1lKCd1cGxvYWQnKTsNCiAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUtPnNldF9kZmx0X2ZsYWcoVFJVRSk7DQogICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfbGFuZ19jYWxsYmFjaygnQVdTUzM6OnBhZ2VfdHlwZV9sYW5nX2NhbGxiYWNrJyk7DQogICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfY29udGVudF9jYWxsYmFjaygnQVdTUzM6OnJlc2V0X3BhZ2VfdHlwZV9kZWZhdWx0cycpOw0KICAgICR1cGxvYWRfdGVtcGxhdGVfdHlwZS0+cmVzZXRfY29udGVudF90b19mYWN0b3J5KCk7DQogICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfaGVscF9jYWxsYmFjaygnQVdTUzM6OnRlbXBsYXRlX2hlbHBfY2FsbGJhY2snKTsNCiAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUtPnNhdmUoKTsNCiAgfQ0KICBjYXRjaCggQ21zRXhjZXB0aW9uICRlICkgew0KICAgIC8vIGxvZyBpdA0KICAgIGRlYnVnX3RvX2xvZyhfX0ZJTEVfXy4nOicuX19MSU5FX18uJyAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0luc3RhbGxhdGlvbiBFcnJvcjogJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgfQ0KICANCiAgdHJ5IHsNCiAgICAkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ29yaWdfdXBsb2FkZm9ybV90ZW1wbGF0ZS50cGwnOw0KICAgIGlmKCBmaWxlX2V4aXN0cyggJGZuICkgKSB7DQogICAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsNCiAgICAgICR0cGwgPSBuZXcgQ21zTGF5b3V0VGVtcGxhdGUoKTsNCiAgICAgICR0cGwtPnNldF9uYW1lKCdBV1NTMyBVcGxvYWQgRm9ybSBTYW1wbGUnKTsNCiAgICAgICR0cGwtPnNldF9vd25lcigkdWlkKTsNCiAgICAgICR0cGwtPnNldF9jb250ZW50KCR0ZW1wbGF0ZSk7DQogICAgICAkdHBsLT5zZXRfdHlwZSgkdXBsb2FkX3RlbXBsYXRlX3R5cGUpOw0KICAgICAgJHRwbC0+c2V0X3R5cGVfZGZsdChUUlVFKTsNCiAgICAgICR0cGwtPnNhdmUoKTsNCiAgICB9DQogIH0NCiAgY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsNCiAgICAvLyBsb2cgaXQNCiAgICBkZWJ1Z190b19sb2coX19GSUxFX18uJzonLl9fTElORV9fLicgJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCdJbnN0YWxsYXRpb24gRXJyb3I6ICcuJGUtPkdldE1lc3NhZ2UoKSk7DQogIH0NCg0KDQogIC8vIGNyZWF0ZSBwcmVmZXJlbmNlcw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FsbG93ZWQnLCAnanBnLGpwZWcsZ2lmLHBuZycpOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2l0ZW1zZGlzcGxheWVkJywgJzI1Jyk7DQokdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdDb3JlJywgJ0NvbnRlbnRQb3N0UmVuZGVyJywgZmFsc2UpOw0KDQppbmNsdWRlX29uY2UoZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9jbGFzcy5Nb2R1bGVUcmFja2VyLnBocCcpOw0KQVdTUzNcTW9kdWxlVHJhY2tlcjo6dHJhY2soJ0FXU1MzJywgJ2luc3RhbGwnKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgQW1hem9uIFdlYiBTZXJ2aWNlcywgQVdTLCBhbmQgdGhlIFBvd2VyZWQgYnkgQVdTIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KDQokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbihBV1NTMzo6TUFOQUdFX1BFUk0pOw0KDQokdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2Rpc3BsYXlzdW1tYXJ5Jyk7DQokdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2Rpc3BsYXlkZXRhaWwnKTsNCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7DQoNCi8vIHJlbW92ZSB0ZW1wbGF0ZXMNCi8vIGFuZCB0ZW1wbGF0ZSB0eXBlcy4NCnRyeSB7DQogICAgJHR5cGVzID0gQ21zTGF5b3V0VGVtcGxhdGVUeXBlOjpsb2FkX2FsbF9ieV9vcmlnaW5hdG9yKCR0aGlzLT5HZXROYW1lKCkpOw0KICAgIGlmKCBpc19hcnJheSgkdHlwZXMpICYmIGNvdW50KCR0eXBlcykgKSB7DQogICAgICBmb3JlYWNoKCAkdHlwZXMgYXMgJHR5cGUgKSB7DQogICAgICAgICR0ZW1wbGF0ZXMgPSAkdHlwZS0+Z2V0X3RlbXBsYXRlX2xpc3QoKTsNCiAgICAgICAgaWYoIGlzX2FycmF5KCR0ZW1wbGF0ZXMpICYmIGNvdW50KCR0ZW1wbGF0ZXMpICkgew0KICAgICAgZm9yZWFjaCggJHRlbXBsYXRlcyBhcyAkdGVtcGxhdGUgKSB7DQogICAgICAgICR0ZW1wbGF0ZS0+ZGVsZXRlKCk7DQogICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHR5cGUtPmRlbGV0ZSgpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICBjYXRjaCggRXhjZXB0aW9uICRlICkgew0KICAgIC8vIGxvZyBpdA0KICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ1VuaW5zdGFsbCBFcnJvcjogJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgfQ0KDQogICR0aGlzLT5SZW1vdmVFdmVudEhhbmRsZXIoJ0NvcmUnLCAnQ29udGVudFBvc3RSZW5kZXInKTsNCiAgDQogIGluY2x1ZGVfb25jZShkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL2NsYXNzLk1vZHVsZVRyYWNrZXIucGhwJyk7DQogIEFXU1MzXE1vZHVsZVRyYWNrZXI6OnRyYWNrKCdBV1NTMycsICd1bmluc3RhbGwnKTsNCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiR1aWQgPSAxOyAvLyBoYXJkY29kZSB0byBmaXJzdCB1c2VyCgppZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjEuMScpIDw9IDAgKSB7CiAgICAjIFNldHVwIHVwbG9hZCB0ZW1wbGF0ZQogICAgJG1lc3NhZ2UgPSBudWxsOwogICAgdHJ5IHsKICAgICAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUgPSBuZXcgQ21zTGF5b3V0VGVtcGxhdGVUeXBlKCk7CiAgICAgICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfb3JpZ2luYXRvcigkdGhpcy0+R2V0TmFtZSgpKTsKICAgICAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUtPnNldF9uYW1lKCd1cGxvYWQnKTsKICAgICAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUtPnNldF9kZmx0X2ZsYWcoVFJVRSk7CiAgICAgICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfbGFuZ19jYWxsYmFjaygnQVdTUzM6OnBhZ2VfdHlwZV9sYW5nX2NhbGxiYWNrJyk7CiAgICAgICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfY29udGVudF9jYWxsYmFjaygnQVdTUzM6OnJlc2V0X3BhZ2VfdHlwZV9kZWZhdWx0cycpOwogICAgICAgICR1cGxvYWRfdGVtcGxhdGVfdHlwZS0+cmVzZXRfY29udGVudF90b19mYWN0b3J5KCk7CiAgICAgICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlLT5zZXRfaGVscF9jYWxsYmFjaygnQVdTUzM6OnRlbXBsYXRlX2hlbHBfY2FsbGJhY2snKTsKICAgICAgICAkdXBsb2FkX3RlbXBsYXRlX3R5cGUtPnNhdmUoKTsKICAgICAgfQogICAgICBjYXRjaCggQ21zRXhjZXB0aW9uICRlICkgewogICAgICAgIC8vIGxvZyBpdAogICAgICAgICRtZXNzYWdlID0gJGUtPkdldE1lc3NhZ2UoKTsKICAgICAgICBkZWJ1Z190b19sb2coX19GSUxFX18uJzonLl9fTElORV9fLicgJy4kbWVzc2FnZSk7CiAgICAgICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnVXBncmFkZSBFcnJvcjogJy4kbWVzc2FnZSk7CiAgICAgIH0KCiAgICAgIHRyeSB7CgogICAgICAgIGlmKCRtZXNzYWdlID09ICJUZW1wbGF0ZSBUeXBlIHdpdGggdGhlIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKXsKICAgICAgICAgICAgJHVwbG9hZF90ZW1wbGF0ZV90eXBlID0gQ21zTGF5b3V0VGVtcGxhdGVUeXBlOjpsb2FkKCR0aGlzLT5HZXROYW1lKCkgLiAnOjp1cGxvYWQnKTsKICAgICAgICB9CiAgICAKICAgICAgICAkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ29yaWdfdXBsb2FkZm9ybV90ZW1wbGF0ZS50cGwnOwogICAgICAgIGlmKCBmaWxlX2V4aXN0cyggJGZuICkgKSB7CiAgICAgICAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgICAgICAgICR0cGwgPSBuZXcgQ21zTGF5b3V0VGVtcGxhdGUoKTsKICAgICAgICAgICR0cGwtPnNldF9uYW1lKCdBV1NTMyBVcGxvYWQgRm9ybSBTYW1wbGUnKTsKICAgICAgICAgICR0cGwtPnNldF9vd25lcigkdWlkKTsKICAgICAgICAgICR0cGwtPnNldF9jb250ZW50KCR0ZW1wbGF0ZSk7CiAgICAgICAgICAkdHBsLT5zZXRfdHlwZSgkdXBsb2FkX3RlbXBsYXRlX3R5cGUpOwogICAgICAgICAgJHRwbC0+c2V0X3R5cGVfZGZsdChUUlVFKTsKICAgICAgICAgICR0cGwtPnNhdmUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsKICAgICAgICAvLyBsb2cgaXQKICAgICAgICBkZWJ1Z190b19sb2coX19GSUxFX18uJzonLl9fTElORV9fLicgJy4kZS0+R2V0TWVzc2FnZSgpKTsKICAgICAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCdVcGdyYWRlIEVycm9yOiAnLiRlLT5HZXRNZXNzYWdlKCkpOwogICAgICB9Cgp9CgppbmNsdWRlX29uY2UoZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9jbGFzcy5Nb2R1bGVUcmFja2VyLnBocCcpOwpBV1NTM1xNb2R1bGVUcmFja2VyOjp0cmFjaygnQVdTUzMnLCAndXBncmFkZScpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJBV1NTMyIKdmVyc2lvbiA9ICIxLjIuMCIKYXV0aG9yID0gIlBpeGVsIFNvbHV0aW9ucyIKYXV0aG9yZW1haWwgPSAiaW5mb0BwaXhlbHNvbHV0aW9ucy5iaXoiCm1pbmNtc3ZlcnNpb24gPSAiMi4yLjEiCmxhenlsb2FkYWRtaW4gPSAwCmxhenlsb2FkZnJvbnRlbmQgPSAwCltkZXBlbmRzXQpBV1NTREsgPSAiMS4xLjAiCkZpbGVNYW5hZ2VyID0gIjEuNi4xMyIK]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_permissions_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0iYWJvdXRfYyI+DQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICA8aDM+UGVybWlzc2lvbnMgb3ZlcnZpZXc8L2gzPg0KICAgIDxwPlRoZSBwbHVnaW4gd2lsbCBub3Qgd29yayB1bnRpbCBhbGwgdGhlIGNvbmZpZ3MgYXJlIGNvbXBsZXRlZDwvcD48YnI+DQogICAgDQogICAgPGgzPkNvbmZpZ3VyaW5nIGJsb2NrIHB1YmxpYyBhY2Nlc3Mgc2V0dGluZ3MgZm9yIHlvdXIgUzMgYnVja2V0czwvaDM+DQogICAgPHA+Rm9sbG93IHRoZXNlIHN0ZXBzIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgcHVibGljIGFjY2VzcyBzZXR0aW5ncyBmb3IgYSBzaW5nbGUgUzMgYnVja2V0LjwvcD4NCiAgICA8ZGl2IGNsYXNzPSJwcm9jZWR1cmUiPg0KICA8b2w+PGxpPjxwPlNpZ24gaW4gdG8gdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIG9wZW4gdGhlIEFtYXpvbiBTMyBjb25zb2xlIGF0DQogICAgICAgICA8YSBocmVmPSJodHRwczovL2NvbnNvbGUuYXdzLmFtYXpvbi5jb20vczMvIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj48c3Bhbj5odHRwczovL2NvbnNvbGUuYXdzLmFtYXpvbi5jb20vczMvPC9zcGFuPjwvYT4uPC9wPjwvbGk+PGxpPg0KICAgICAgICA8cD5JbiB0aGUgPGI+QnVja2V0IG5hbWU8L2I+IGxpc3QsIGNob29zZSB0aGUgbmFtZSBvZiB0aGUgYnVja2V0IHRoYXQgeW91DQogICAgICAgICAgd2FudC48L3A+DQogICAgICA8L2xpPjxsaT4NCiAgICAgICAgPHA+Q2hvb3NlIDxiPlBlcm1pc3Npb25zPC9iPi48L3A+DQogICAgICA8L2xpPjxsaT4NCiAgICAgICAgPHA+Q2hvb3NlIDxiPkVkaXQ8L2I+IHRvIGNoYW5nZSB0aGUgcHVibGljIGFjY2VzcyBzZXR0aW5ncyBmb3IgdGhlIGJ1Y2tldC4NCiAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm91ciBBbWF6b24gUzMgQmxvY2sgUHVibGljIEFjY2VzcyBTZXR0aW5ncywgc2VlIDxhIGhyZWY9Imh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2FjY2Vzcy1jb250cm9sLWJsb2NrLXB1YmxpYy1hY2Nlc3MuaHRtbCNhY2Nlc3MtY29udHJvbC1ibG9jay1wdWJsaWMtYWNjZXNzLW9wdGlvbnMiPkJsb2NrIHB1YmxpYyBhY2Nlc3MNCgkJCQlzZXR0aW5nczwvYT4uPC9wPg0KICAgICAgPC9saT48bGk+DQogICAgICAgIDxwPkNob29zZSB0aGUgc2V0dGluZyB0aGF0IHlvdSB3YW50IHRvIGNoYW5nZSwgYW5kIHRoZW4gY2hvb3NlDQogICAgICAgICAgPGI+U2F2ZTwvYj4uPC9wPg0KICAgICAgPC9saT48bGk+DQogICAgICAgIDxwPldoZW4geW91J3JlIGFza2VkIGZvciBjb25maXJtYXRpb24sIGVudGVyIDxjb2RlIGNsYXNzPSJ1c2VyaW5wdXQiPmNvbmZpcm08L2NvZGU+LiBUaGVuIGNob29zZQ0KICAgICAgICAgICAgPGI+Q29uZmlybTwvYj4gdG8gc2F2ZSB5b3VyIGNoYW5nZXMuPC9wPg0KICAgICAgPC9saT48L29sPjwvZGl2Pg0KICAgIDxicj4NCiAgICANCiAgICA8aDM+QnVja2V0IHBvbGljeTwvaDM+DQogICAgPHA+VGhlIGJ1Y2tldCBwb2xpY3ksIHdyaXR0ZW4gaW4gSlNPTiwgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBvYmplY3RzIHN0b3JlZCBpbiB0aGUgYnVja2V0LiBCdWNrZXQgcG9saWNpZXMgZG9uJ3QgYXBwbHkgdG8gb2JqZWN0cyBvd25lZCBieSBvdGhlciBhY2NvdW50czwvcD4NCiAgICA8cD5QbGVhc2UgYXR0YWNoIHRoZSBwcm92aWRlZCBwb2xpY3kgdG8geW91ciBCdWNrZXQgcG9saWN5IG9yIGlmIHlvdSBhbHJlYWR5IGhhdmUgYSBwb2xpY3kgZm9yIHRoaXMgYnVja2V0LCB1c2UgdGhlIHBvbGljeSBwcm92aWRlZCBhcyBhbiBleGFtcGxlIHRvIGJlIG1lcmdlZCB3aXRoIHlvdXIgZXhpc3Rpbmcgc2V0dXAuPC9wPg0KICAgIDxicj4NCiAgICANCiAgICA8cHJlPnskYnVja2V0X3BvbGljeX08L3ByZT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settings_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjBweDsiPg0KICA8aDMgc3R5bGU9Im1hcmdpbjowOyI+eyRtb2QtPkxhbmcoJ2dldHN0YXJ0ZWQnKX08L2gzPg0KICA8YSBocmVmPSJodHRwczovL3BpeGVsc29sdXRpb25zLmJpeiIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+DQogICAgPGltZyBzcmM9Imh0dHBzOi8vcGl4ZWxzb2x1dGlvbi5zMy5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20vbG9nb3MvTE9HT18zX0NPTE9SXzMwMC5wbmciIGFsdD0iUGl4ZWwgU29sdXRpb25zIiBzdHlsZT0iaGVpZ2h0OjQwcHg7IiAvPg0KICA8L2E+DQo8L2Rpdj4NCg0Ke2lmIGlzc2V0KCRtZXNzYWdlKX17JG1lc3NhZ2V9ey9pZn0NCg0Ke2Zvcm1fc3RhcnR9DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2F1dGhfbWV0aG9kJyl9OjwvcD4NCiA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9c2V0dGluZ3NfaW5wdXRbYXV0aF9tZXRob2RdIj4NCiAgICAgIDxvcHRpb24gdmFsdWU9ImNyZWRlbnRpYWxzIiB7aWYgJG1vZC0+R2V0T3B0aW9uVmFsdWUoImF1dGhfbWV0aG9kIikgPT0gImNyZWRlbnRpYWxzIn1zZWxlY3RlZHsvaWZ9PnskbW9kLT5MYW5nKCdhdXRoX2NyZWRlbnRpYWxzJyl9PC9vcHRpb24+DQogICAgICA8b3B0aW9uIHZhbHVlPSJpYW1fcm9sZSIge2lmICRtb2QtPkdldE9wdGlvblZhbHVlKCJhdXRoX21ldGhvZCIpID09ICJpYW1fcm9sZSJ9c2VsZWN0ZWR7L2lmfT57JG1vZC0+TGFuZygnYXV0aF9pYW1fcm9sZScpfTwvb3B0aW9uPg0KICAgIDwvc2VsZWN0Pg0KICAgIDxici8+DQogICAgPHNtYWxsPnskbW9kLT5MYW5nKCdoZWxwX2F1dGhfbWV0aG9kJyl9PC9zbWFsbD4NCiA8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnYWNjZXNzX2tleScpfTombmJzcDt7Y21zX2hlbHAga2V5Mj0naGVscF9hY2Nlc3Nfa2V5JyB0aXRsZT0kbW9kLT5MYW5nKCdhY2Nlc3Nfa2V5Jyl9PC9wPg0KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXNldHRpbmdzX2lucHV0W2FjY2Vzc19rZXldIiB2YWx1ZT0ieyRtb2QtPkdldE9wdGlvblZhbHVlKCJhY2Nlc3Nfa2V5Iil9IiBzaXplPSI1MCIgbWF4bGVuZ3RoPSI1MCIvPg0KICAgIDxici8+DQogICAgPHNtYWxsPnskbW9kLT5MYW5nKCdoZWxwX2F1dGhfY3JlZGVudGlhbHNfb25seScpfTwvc21hbGw+DQogPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2FjY2Vzc19zZWNyZXRfa2V5Jyl9OjwvcD4NCiA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1zZXR0aW5nc19pbnB1dFthY2Nlc3Nfc2VjcmV0X2tleV0iIHZhbHVlPSJ7JG1vZC0+R2V0T3B0aW9uVmFsdWUoImFjY2Vzc19zZWNyZXRfa2V5Iil9IiBzaXplPSI1MCIgbWF4bGVuZ3RoPSI1MCIvPg0KICAgIDxici8+DQogICAgPHNtYWxsPnskbW9kLT5MYW5nKCdoZWxwX2F1dGhfY3JlZGVudGlhbHNfb25seScpfTwvc21hbGw+DQogPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2J1Y2tldF9uYW1lJyl9OiZuYnNwO3tjbXNfaGVscCBrZXkyPSdoZWxwX2J1Y2tldF9uYW1lJyB0aXRsZT0kbW9kLT5MYW5nKCdidWNrZXRfbmFtZScpfTwvcD4NCiA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1zZXR0aW5nc19pbnB1dFtidWNrZXRfbmFtZV0iIHZhbHVlPSJ7JG1vZC0+R2V0T3B0aW9uVmFsdWUoImJ1Y2tldF9uYW1lIil9IiBzaXplPSI1MCIgbWF4bGVuZ3RoPSI1MCIvPg0KIDwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCjxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3JlZ2lvbicpfTo8L3A+DQogIDxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfXNldHRpbmdzX2lucHV0W2FjY2Vzc19yZWdpb25dIj4NCiAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kYWNjZXNzX3JlZ2lvbl9saXN0IHNlbGVjdGVkPSRtb2QtPkdldE9wdGlvblZhbHVlKCJhY2Nlc3NfcmVnaW9uIil9DQogICAgPC9zZWxlY3Q+DQogIDwvZGl2Pg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2FsbG93ZWQnKX06Jm5ic3A7e2Ntc19oZWxwIGtleTI9J2ZpZWxkZGVmX2FsbG93X2hlbHAnIHRpdGxlPSRtb2QtPkxhbmcoJ2FsbG93ZWQnKX08L3A+DQogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQoJICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1zZXR0aW5nc19pbnB1dFthbGxvd2VkXSIgdmFsdWU9InskbW9kLT5HZXRPcHRpb25WYWx1ZSgnYWxsb3dlZCcsICdwZGYsZG9jLGRvY3gseGxzLHhsc3gsanBnLHBuZyxqcGVnLGdpZicpfSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjAwIi8+DQogIDwvcD4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij48bGFiZWwgZm9yPSJmbGQ1Ij57JG1vZC0+TGFuZygnZXhwaXJ5X2ludGVydmFsJyl9OjwvbGFiZWw+IHtjbXNfaGVscCBrZXk9J2hlbHBfb3B0X2V4cGlyeV9pbnRlcnZhbCcgdGl0bGU9JG1vZC0+TGFuZygnZXhwaXJ5X2ludGVydmFsJyl9PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9c2V0dGluZ3NfaW5wdXRbZXhwaXJ5X2ludGVydmFsXSIgdmFsdWU9InskbW9kLT5HZXRPcHRpb25WYWx1ZSgiZXhwaXJ5X2ludGVydmFsIil8ZGVmYXVsdDo2MH0iIHNpemU9IjQiIG1heGxlbmd0aD0iNCIvPg0KICAgICAgPC9wPg0KCTwvZGl2Pg0KPGZpZWxkc2V0Pg0KICA8bGVnZW5kPnskbW9kLT5MYW5nKCdwcm9tcHRfY3VzdG9tX3VybCcpfTwvbGVnZW5kPg0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfXNldHRpbmdzX2lucHV0W3VzZV9jdXN0b21fdXJsXSI+DQogICAgICAgICAgICB7Y21zX3llc25vIHNlbGVjdGVkPSRtb2QtPkdldE9wdGlvblZhbHVlKCJ1c2VfY3VzdG9tX3VybCIpfQ0KICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPGJyLz4NCiAgICAgICAgeyRtb2QtPkxhbmcoJ2hlbHBfdXNlX2N1c3RvbV91cmwnKX0NCiAgICA8L3A+DQogIDwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY3VzdG9tX3VybCcpfTombmJzcDt7Y21zX2hlbHAga2V5Mj0naGVscF9jdXN0b21fdXJsJyB0aXRsZT0kbW9kLT5MYW5nKCdjdXN0b21fdXJsJyl9PC9wPg0KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXNldHRpbmdzX2lucHV0W2N1c3RvbV91cmxdIiB2YWx1ZT0ieyRtb2QtPkdldE9wdGlvblZhbHVlKCJjdXN0b21fdXJsIil9IiBzaXplPSI1MCIgbWF4bGVuZ3RoPSIyMDAiLz4NCiAgPC9wPg0KICA8L2Rpdj4NCjwvZmllbGRzZXQ+DQoNCjxmaWVsZHNldD4NCgk8bGVnZW5kPnskbW9kLT5MYW5nKCdkZWZhdWx0X29wdGlvbnMnKX08L2xlZ2VuZD4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGV0YWlscGFnZScpfTo8L3A+DQogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGV0YWlscGFnZX08L3A+DQogICAgPC9kaXY+IA0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9zdW1tYXJ5cGFnZScpfTo8L3A+DQogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc3VtbWFyeXBhZ2V9PC9wPg0KICAgIDwvZGl2PiAJDQogIAk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfaXRlbXNkaXNwbGF5ZWQnKX06PC9wPg0KDQogICAgICAgIHskb3B0cz1bMTA9PjEwLDI1PT4yNSw1MD0+NTAsMTAwPT4xMDAsMTAwMD0+MTAwMF19DQogICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9c2V0dGluZ3NfaW5wdXRbaXRlbXNkaXNwbGF5ZWRdIj4NCiAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRvcHRzIHNlbGVjdGVkPSRtb2QtPkdldE9wdGlvblZhbHVlKCJpdGVtc2Rpc3BsYXllZCIpfQ0KICAgICAgPC9zZWxlY3Q+DQogICAgPC9kaXY+IAkNCjwvZmllbGRzZXQ+DQoNCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdhZG1pbl9zYXZlJyl9Ii8+DQogPC9wPg0KPC9kaXY+DQp7Zm9ybV9lbmR9DQp7aWYgJHNka19tb2QtPmlzX2RldmVsb3Blcl9tb2RlKCl9DQogIHsqZ2V0X3RlbXBsYXRlX3ZhcnMqfQ0Key9pZn0NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/default.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iaG9saWRheVdyYXBwZXIiPg0KIHtmb3JlYWNoICRpdGVtcyBhcyAkaXRlbX0NCiA8ZGl2IGNsYXNzPSJob2xpZGF5Ij4NCiA8ZGl2IGNsYXNzPSJyb3ciPg0KIDxkaXYgY2xhc3M9ImNvbC1zbS02Ij4NCiA8YSBocmVmPSJ7Y21zX2FjdGlvbl91cmwgYWN0aW9uPSdkZXRhaWwnIGhpZD0kaXRlbS0+aWR9Ij57JGl0ZW0tPm5hbWV9PC9hPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJjb2wtc20tNiB0ZXh0LXJpZ2h0Ij57JGl0ZW0tPnRoZV9kYXRlfGRhdGVfZm9ybWF0OicleCd9PC9kaXY+DQogPC9kaXY+DQogPC9kaXY+DQoge2ZvcmVhY2hlbHNlfQ0KIDxkaXYgY2xhc3M94oCdYWxlcnQgYWxlcnQtZGFuZ2Vy4oCdPnskbW9kLT5MYW5nKCdzb3JyeV9ub2ZpbGVzJyl9PC9kaXY+DQogey9mb3JlYWNofQ0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/delete.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kX2ZtLT5MYW5nKCdhY3Rpb25kZWxldGUnKX06PC9oMz4NCnthc3NpZ24gdmFyPSdjYW5jZWxsYWJlbCcgdmFsdWU9JG1vZF9mbS0+TGFuZygnY2FuY2VsJyl9DQp7aWYgaXNzZXQoJGVycm9ycyl9DQp7YXNzaWduIHZhcj0nY2FuY2VsbGFiZWwnIHZhbHVlPSRtb2RfZm0tPkxhbmcoJ3JldHVybicpfQ0Key9pZn0NCg0KDQp7KmNtc19oZWxwIGtleTI9J3NldHRpbmdzX25vc2VmdXJsJyB0aXRsZT1sYW5nKCd3YXJuX25vc2VmdXJsJykqfQ0KDQp7aWYgJGhhc2Rpcn0NCiAgPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyI+eyRtb2QtPmxhbmcoJ3dhcm5fZGVsZXRlX2RpcmVjdG9yeScpfTwvZGl2Pg0Key9pZn0NCg0KeyRzdGFydGZvcm19DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kX2ZtLT5MYW5nKCdkZWxldGVzZWxlY3RlZCcpfTo8L3A+DQogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgIHsnPGJyLz4nfGltcGxvZGU6JHNlbGFsbH0NCiAgPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPjwvcD4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAge2lmICFpc3NldCgkZXJyb3JzKX0NCiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kX2ZtLT5MYW5nKCdkZWxldGUnKX0iLz4NCiAgICB7L2lmfQ0KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9Y2FuY2VsIiB2YWx1ZT0ieyRjYW5jZWxsYWJlbH0iLz4NCiAgPC9wPg0KPC9kaXY+DQp7JGVuZGZvcm19DQoNCntpZiAkbW9kLT5pc19kZXZlbG9wZXJfbW9kZSgpfQ0KICB7Z2V0X3RlbXBsYXRlX3ZhcnN9DQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/filemanager.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFpc3NldCgkYWpheCl9DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KYS5maWxlbGluazp2aXNpdGVkIHsNCiAgIGNvbG9yOiAjMDAwOw0KfQ0KPC9zdHlsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCnZhciByZWZyZXNoX3VybCA9ICd7JHJlZnJlc2hfdXJsfScrJyZzaG93dGVtcGxhdGU9ZmFsc2UnOw0KcmVmcmVzaF91cmwgPSByZWZyZXNoX3VybC5yZXBsYWNlKC9hbXA7L2csJycpOw0KDQovLyA8IVtDREFUQVsNCmZ1bmN0aW9uIGVuYWJsZV9idXR0b24oaWRsaXN0KSB7DQogICQoaWRsaXN0KS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1kaXNhYmxlZCB1aS1idXR0b24tZGlzYWJsZWQnKTsNCn0NCmZ1bmN0aW9uIGRpc2FibGVfYnV0dG9uKGlkbGlzdCkgew0KICAkKGlkbGlzdCkuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpLmFkZENsYXNzKCd1aS1zdGF0ZS1kaXNhYmxlZCB1aS1idXR0b24tZGlzYWJsZWQnKTsNCn0NCg0KZnVuY3Rpb24gZW5hYmxlX2FjdGlvbl9idXR0b25zKCkgew0KDQogICAgdmFyIGZpbGVzID0gJCgiI2ZpbGVzYXJlYSBpbnB1dFt0eXBlPSdjaGVja2JveCddLmZpbGVzZWxlY3QiKS5maWx0ZXIoJzpjaGVja2VkJykubGVuZ3RoLA0KICAgICAgICBkaXJzID0gJCgiI2ZpbGVzYXJlYSBpbnB1dFt0eXBlPSdjaGVja2JveCddLmRpciIpLmZpbHRlcignOmNoZWNrZWQnKS5sZW5ndGgsDQogICAgICAgIGFyY2ggPSAkKCIjZmlsZXNhcmVhIGlucHV0W3R5cGU9J2NoZWNrYm94J10uYXJjaGl2ZSIpLmZpbHRlcignOmNoZWNrZWQnKS5sZW5ndGgsDQogICAgICAgIHRleHQgPSAkKCIjZmlsZXNhcmVhIGlucHV0W3R5cGU9J2NoZWNrYm94J10udGV4dCIpLmZpbHRlcignOmNoZWNrZWQnKS5sZW5ndGgsDQogICAgICAgIGltZ3MgPSAkKCIjZmlsZXNhcmVhIGlucHV0W3R5cGU9J2NoZWNrYm94J10uaW1hZ2UiKS5maWx0ZXIoJzpjaGVja2VkJykubGVuZ3RoOw0KDQogICAgZGlzYWJsZV9idXR0b24oJ2J1dHRvbi5maWxlYnRuJyk7DQogICAgJCgnYnV0dG9uLmZpbGVidG4nKS5hdHRyKCdkaXNhYmxlZCcsJ2Rpc2FibGVkJyk7DQogICAgaWYgKGZpbGVzID09IDAgJiYgZGlycyA9PSAwKSB7DQogICAgICAgIC8vIG5vdGhpbmcgc2VsZWN0ZWQsIGVuYWJsZSBhbnl0aGluZyB3aXRoIHNlbGVjdF9ub25lDQogICAgICAgIGVuYWJsZV9idXR0b24oJyNidG5fcmVmcmVzaCcpOw0KICAgIH0gZWxzZSBpZiAoZmlsZXMgPT0gMSkgew0KICAgICAgICAvLyAxIHNlbGVjdGVkLCBlbmFibGUgYW55dGhpbmcgd2l0aCBzZWxlY3Rfb25lDQogICAgICAgIGVuYWJsZV9idXR0b24oJyNidG5fZGVsZXRlJyk7DQoNCiAgICAgICAgaWYgKGRpcnMgPT0gMCkgZW5hYmxlX2J1dHRvbignI2J0bl9jb3B5Jyk7DQogICAgICAgIGlmIChhcmNoID09IDEpIGVuYWJsZV9idXR0b24oJyNidG5fdW5wYWNrJyk7DQogICAgICAgIGlmIChpbWdzID09IDEpIGVuYWJsZV9idXR0b24oJyNidG5fdmlldywjYnRuX3RodW1iLCNidG5fcmVzaXplY3JvcCwjYnRuX3JvdGF0ZScpOw0KICAgICAgICBpZiAodGV4dCA9PSAxKSBlbmFibGVfYnV0dG9uKCcjYnRuX3ZpZXcnKTsNCiAgICB9IGVsc2UgaWYgKGZpbGVzID4gMSAmJiBkaXJzID09IDApIHsNCiAgICAgICAgLy8gbXVsdGlwbGUgZmlsZXMgc2VsZWN0ZWQNCiAgICAgICAgZW5hYmxlX2J1dHRvbignI2J0bl9kZWxldGUsI2J0bl9jb3B5LCNidG5fbW92ZScpOw0KICAgIH0gZWxzZSBpZiAoZmlsZXMgPiAxICYmIGRpcnMgPiAwKSB7DQogICAgICAgIC8vIG11bHRpcGxlIHNlbGVjdGVkLCBhdCBsZWFzdCBvbmUgZGlyLg0KICAgICAgICBlbmFibGVfYnV0dG9uKCcjYnRuX2RlbGV0ZSwjYnRuX21vdmUnKTsNCiAgICB9DQp9DQoNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICBlbmFibGVfYWN0aW9uX2J1dHRvbnMoKTsNCg0KICAgICQoJyNyZWZyZXNoJykudW5iaW5kKCdjbGljaycpOw0KICAgICQoJyNyZWZyZXNoJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIC8vIGFqYXh5IHJlbG9hZCBmb3IgdGhlIGZpbGVzIGFyZWEuDQogICAgICAgICQoJyNmaWxlc2FyZWEnKS5sb2FkKHJlZnJlc2hfdXJsKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KDQogICAgJChkb2N1bWVudCkub24oJ2Ryb3B6b25lX2NoZGlyJywgJCh0aGlzKSwgZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgLy8gaWYgY2hhbmdlIGRpciB2aWEgdGhlIGRyb3B6b25lLCBtYWtlIHN1cmUgZmlsZW1hbmFnZXIgcmVmcmVzaGVzLg0KICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICB9KTsNCiAgICAkKGRvY3VtZW50KS5vbignZHJvcHpvbmVfc3RvcCcsICQodGhpcyksIGZ1bmN0aW9uIChlLCBkYXRhKSB7DQogICAgICAgIC8vIGlmIGNoYW5nZSBkaXIgdmlhIHRoZSBkcm9wem9uZSwgbWFrZSBzdXJlIGZpbGVtYW5hZ2VyIHJlZnJlc2hlcy4NCiAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgfSk7DQoNCiAgICAkKGRvY3VtZW50KS5vbignY2hhbmdlJywgJyNmaWxlc2FyZWEgaW5wdXRbdHlwZT0iY2hlY2tib3giXS5maWxlc2VsZWN0JywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgLy8gZmluZCB0aGUgcGFyZW50IHJvdw0KICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICB2YXIgdCA9ICQodGhpcykuYXR0cignY2hlY2tlZCcpOw0KICAgICAgICBpZiAodCkgew0KICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLmFkZENsYXNzKCdzZWxlY3RlZCcpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOw0KICAgICAgICB9DQogICAgICAgIGVuYWJsZV9hY3Rpb25fYnV0dG9ucygpOw0KICAgIH0pOw0KDQogICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcjdGFnYWxsJywgZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgICAgIGlmICgkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKSB7DQogICAgICAgICAgICAkKCcjZmlsZXNhcmVhIGlucHV0OmNoZWNrYm94LmZpbGVzZWxlY3QnKS5hdHRyKCdjaGVja2VkJywgdHJ1ZSkudHJpZ2dlcignY2hhbmdlJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkKCcjZmlsZXNhcmVhIGlucHV0OmNoZWNrYm94LmZpbGVzZWxlY3QnKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpLnRyaWdnZXIoJ2NoYW5nZScpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI2J0bl92aWV3JywgZnVuY3Rpb24gKCkgew0KICAgICAgICAvLyBmaW5kIHRoZSBzZWxlY3RlZCBpdGVtLg0KICAgICAgICB2YXIgdG1wID0gJCgiI2ZpbGVzYXJlYSBpbnB1dFt0eXBlPSdjaGVja2JveCddIikuZmlsdGVyKCc6Y2hlY2tlZCcpLnZhbCgpOw0KICAgICAgICB2YXIgdXJsID0gJ3skdmlld2ZpbGVfdXJsfSZzaG93dGVtcGxhdGU9ZmFsc2UmeyRhY3Rpb25pZH12aWV3ZmlsZT0nICsgdG1wOw0KICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvYW1wOy9nLCAnJyk7DQogICAgICAgICQoJyNwb3B1cF9jb250ZW50cycpLmxvYWQodXJsKTsNCiAgICAgICAgJCgnI3BvcHVwJykuZGlhbG9nKHsNCiAgICAgICAJICBtaW5XaWR0aDogMzgwLA0KICAgICAgICAgIG1heEhlaWdodDogNjAwDQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQoNCiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAndGQuY2xpY2thYmxlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgdCA9ICQodGhpcykucGFyZW50KCkuZmluZCgnOmNoZWNrYm94JykuYXR0cignY2hlY2tlZCcpOw0KICAgICAgICBpZiAodCAhPSAnY2hlY2tlZCcpIHsNCiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgnOmNoZWNrYm94JykuYXR0cignY2hlY2tlZCcsIHRydWUpLnRyaWdnZXIoJ2NoYW5nZScpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKCc6Y2hlY2tib3gnKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpLnRyaWdnZXIoJ2NoYW5nZScpOw0KICAgICAgICB9DQogICAgfSk7DQp9KTsNCi8vIF1dPg0KPC9zY3JpcHQ+DQo8aDM+eyRGaWxlTWFuYWdlci0+TGFuZygnY3VycmVudHBhdGgnKX0NCiAgIDxzcGFuIGNsYXNzPSJwYXRoc2VsZWN0b3IiPnskdXBfaG9tZX0gLyANCiAgIHtmb3JlYWNoICRwYXRoX3BhcnRzIGFzICRwYXJ0fQ0KICAgICB7aWYgIWVtcHR5KCRwYXJ0LT51cmwpfQ0KICAgICAgIDxhIGhyZWY9InskcGFydC0+dXJsfSI+eyRwYXJ0LT5uYW1lfTwvYT4NCiAgICAge2Vsc2V9DQogICAgICAgeyRwYXJ0LT5uYW1lfQ0KICAgICB7L2lmfQ0KICAgICB7aWYgISRwYXJ0QGxhc3R9PHNwYW4gY2xhc3M9ImRzIj4vPC9zcGFuPnsvaWZ9DQogICB7L2ZvcmVhY2h9DQogICA8L3NwYW4+DQo8L2gzPg0KDQp7ZnVuY3Rpb24gZmlsZWJ0biBpY29uPSd1aS1pY29uLWNpcmNsZS1jaGVjayd9DQp7JGFkZGNsYXNzPSd1aS1idXR0b24taWNvbi1wcmltYXJ5J30NCntpZiBpc3NldCgkdGV4dCkgJiYgJHRleHQgIT0gJyd9DQogIHskYWRkY2xhc3M9J3VpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSd9DQogIHtpZiAhaXNzZXQoJHRpdGxlKSB8fCAkdGl0bGUgPT0gJyd9eyR0aXRsZT0kdGV4dH17L2lmfQ0Key9pZn0NCjxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGluYW1lfSIgaWQ9InskaWR9IiB0aXRsZT0ieyR0aXRsZXxkZWZhdWx0OicnfSIgY2xhc3M9ImZpbGVidG4gdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgeyRhZGRjbGFzc30iPg0KICA8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1idXR0b24taWNvbi1wcmltYXJ5IHskaWNvbn0iPjwvc3Bhbj4NCiAge2lmIGlzc2V0KCR0ZXh0KSAmJiAkdGV4dCAhPSAnJ308c3BhbiBjbGFzcz0idWktYnV0dG9uLXRleHQiPnskdGV4dH08L3NwYW4+ey9pZn0NCjwvYnV0dG9uPg0Key9mdW5jdGlvbn0NCg0KPGRpdj4NCiAgeyRmb3Jtc3RhcnR9DQo8ZGl2Pg0KCTxmaWVsZHNldCBpZD0ibmF2QnV0dG9ucyI+DQogICAgICB7KmZpbGVidG4gaWQ9J2J0bl9uZXdkaXInIGluYW1lPSJ7JGFjdGlvbmlkfWZpbGVhY3Rpb25uZXdkaXIiIGljb249J3VpLWljb24tY2lyY2xlLXBsdXMnIHRleHQ9JEZpbGVNYW5hZ2VyLT5MYW5nKCduZXdkaXInKSB0aXRsZT0kRmlsZU1hbmFnZXItPkxhbmcoJ3RpdGxlX25ld2RpcicpKn0NCiAgICAgIHsqZmlsZWJ0biBpZD0nYnRuX3ZpZXcnIGluYW1lPSJ7JGFjdGlvbmlkfWZpbGVhY3Rpb252aWV3IiBpY29uPSd1aS1pY29uLWNpcmNsZS16b29taW4nIHRleHQ9JEZpbGVNYW5hZ2VyLT5MYW5nKCd2aWV3JykgdGl0bGU9JEZpbGVNYW5hZ2VyLT5MYW5nKCd0aXRsZV92aWV3JykqfQ0KCQl7ZmlsZWJ0biBpZD0nYnRuX2RlbGV0ZScgaW5hbWU9InskYWN0aW9uaWR9ZmlsZWFjdGlvbmRlbGV0ZSIgaWNvbj0ndWktaWNvbi10cmFzaCcgdGV4dD0kRmlsZU1hbmFnZXItPkxhbmcoJ2RlbGV0ZScpIHRpdGxlPSRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfZGVsZXRlJyl9DQogICAge2ZpbGVidG4gaWQ9J2J0bl9yZWZyZXNoJyBpbmFtZT0ieyRhY3Rpb25pZH1maWxlYWN0aW9ucmVmcmVzaCIgaWNvbj0ndWktaWNvbi1yZWZyZXNoJyB0ZXh0PSRGaWxlTWFuYWdlci0+TGFuZygncmVmcmVzaCcpIHRpdGxlPSRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfcmVmcmVzaCcpfQ0KICAgICZuYnNwO3skbW9kLT5MYW5nKCdsYXN0X3JlZnJlc2hlZCcpfSZuYnNwO3skbGFzdHVwZGF0ZXxsb2NhbGVkYXRlX2Zvcm1hdDonaiAlaCBZIEg6aTpzJ30NCgk8L2ZpZWxkc2V0Pg0KPC9kaXY+DQp7JGhpZGRlbnBhdGh9DQp7L2lmfQ0KDQo8ZGl2IGlkPSJmaWxlc2FyZWEiPg0KCTx0YWJsZSB3aWR0aD0iMTAwJSIgY2xhc3M9InBhZ2V0YWJsZSBzY3JvbGxhYmxlIj4NCgkJPHRoZWFkPg0KCQkJPHRyPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQogICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCQkJPHRoPnskRmlsZU1hbmFnZXItPkxhbmcoImZpbGVuYW1lIil9PC90aD4NCgkJCQk8dGg+eyRGaWxlTWFuYWdlci0+TGFuZygnbWltZXR5cGUnKX08L3RoPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iIHRpdGxlPSJ7JEZpbGVNYW5hZ2VyLT5MYW5nKCd0aXRsZV9jb2xfZmlsZXNpemUnKX0iIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+eyRGaWxlTWFuYWdlci0+TGFuZygiZmlsZXNpemUiKX08L3RoPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iIHRpdGxlPSJ7JEZpbGVNYW5hZ2VyLT5MYW5nKCd0aXRsZV9jb2xfZmlsZWRhdGUnKX0iPnskRmlsZU1hbmFnZXItPkxhbmcoImZpbGVkYXRlIil9PC90aD4NCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj48L3RoPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPg0KCQkJCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InRhZ2FsbCIgdmFsdWU9InRhZ2FsbCIgaWQ9InRhZ2FsbCIgdGl0bGU9InskRmlsZU1hbmFnZXItPkxhbmcoJ3RpdGxlX3RhZ2FsbCcpfSIvPg0KCQkJCTwvdGg+DQoJCQk8L3RyPg0KCQk8L3RoZWFkPg0KCQk8dGJvZHk+DQoJCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZmlsZX0NCgkJCXtjeWNsZSB2YWx1ZXM9InJvdzEscm93MiIgYXNzaWduPXJvd2NsYXNzfQ0KCQkJPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSI+DQoJCQkJPHRkIHZhbGlnbj0ibWlkZGxlIj57JGZpbGUtPmljb25fbGlua308L3RkPg0KICAgIDx0ZCBjbGFzcz0iY2xpY2thYmxlIiB2YWxpZ249Im1pZGRsZSI+e2lmICEkZmlsZS0+ZGlyICYmICFpc3NldCgkZmlsZS0+bm9DaGVja2JveCl9PGEgaHJlZj0ieyRmaWxlLT5wcmVzaWduZWRfdXJsfSIgdGFyZ2V0PSJfYmxhbmsiPnthZG1pbl9pY29uIGljb249J3Blcm1pc3Npb25zLmdpZicgYWx0PSd2aWV3X3BhZ2UnfGxhbmd9PC9hPnsvaWZ9PC90ZD4NCgkJCQk8dGQgY2xhc3M9ImNsaWNrYWJsZSIgdmFsaWduPSJtaWRkbGUiPnskZmlsZS0+dXJsX2xpbmt9PC90ZD4NCgkJCQk8dGQgY2xhc3M9ImNsaWNrYWJsZSIgdmFsaWduPSJtaWRkbGUiPnskZmlsZS0+bWltZX08L3RkPg0KCQkJCTx0ZCBjbGFzcz0iY2xpY2thYmxlIiBzdHlsZT0icGFkZGluZy1yaWdodDo4cHg7d2hpdGUtc3BhY2U6cHJlO3RleHQtYWxpZ246cmlnaHQ7IiB2YWxpZ249Im1pZGRsZSI+eypzM191dGlsczo6Zm9ybWF0Qnl0ZXMoJGZpbGUtPnNpemUpKn08L3RkPg0KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2xpY2thYmxlIiBzdHlsZT0icGFkZGluZy1yaWdodDo4cHg7d2hpdGUtc3BhY2U6cHJlOyIgdmFsaWduPSJtaWRkbGUiPnskZmlsZS0+ZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9PC90ZD4NCgkJCQk8dGQ+eyRmaWxlLT5vcGVubGlua30geyphZG1pbl9pY29uIGljb249J3ZpZXcuZ2lmJyBhbHQ9Ik9wZW4iKn08L3RkPg0KCQkJCTx0ZD4NCgkJCQl7aWYgIWlzc2V0KCRmaWxlLT5ub0NoZWNrYm94KX0NCgkJCQkJPGxhYmVsIGZvcj0ieF97JGZpbGUtPnVybG5hbWV9IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPnskRmlsZU1hbmFnZXItPkxhbmcoJ3RvZ2dsZScpfTwvbGFiZWw+DQoJCQkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgdGl0bGU9InskRmlsZU1hbmFnZXItPkxhbmcoJ3RvZ2dsZScpfSIgaWQ9InhfeyRmaWxlLT5uYW1lfSIgbmFtZT0ieyRhY3Rpb25pZH1zZWxhbGxbXSIgdmFsdWU9InskZmlsZS0+a2V5fSIgY2xhc3M9ImZpbGVzZWxlY3Qge2ltcGxvZGUoJyAnLCRmaWxlLT50eXBlKX0iIHtpZiBpc3NldCgkZmlsZS0+Y2hlY2tlZCl9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+DQoJCQkJey9pZn0NCgkJCQk8L3RkPg0KCQkJPC90cj4NCgkJey9mb3JlYWNofQ0KCQk8L3Rib2R5Pg0KCQk8dGZvb3Q+DQoJCQk8dHI+DQoJCQkJPHRkIGNvbHNwYW49IjYiPiZuYnNwO3skY291bnRzdGV4dH08L3RkPg0KCQkJPC90cj4NCgkJPC90Zm9vdD4NCgk8L3RhYmxlPg0KPC9kaXY+DQp7aWYgIWlzc2V0KCRhamF4KX0NCgl7KnskYWN0aW9uZHJvcGRvd259eyR0YXJnZXRkaXJ9eyRva2lucHV0fSp9DQoJeyRmb3JtZW5kfQ0KPC9kaXY+DQp7L2lmfQ0KDQo8ZGl2IGNsYXNzPSJyb3cgY19mdWxsIj4NCiAge2lmICRpdGVtY291bnQgPiAwICYmICRwYWdlY291bnQgPiAxfQ0KICAgIDxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIGdyaWRfMTIiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPg0KICAgICAge2Zvcm1fc3RhcnR9DQogICAgICB7JG1vZC0+TGFuZygncHJvbXB0X3BhZ2UnKX0mbmJzcDsNCiAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1wYWdlbnVtYmVyIj4NCiAgICAgICAge2Ntc19wYWdlb3B0aW9ucyBudW1wYWdlcz0kcGFnZWNvdW50IGN1cnBhZ2U9JHBhZ2VudW1iZXJ9DQogICAgICA8L3NlbGVjdD4mbmJzcDsNCiAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9cGFnaW5hdGUiIHZhbHVlPSJ7JG1vZC0+TGFuZygncHJvbXB0X2dvJyl9Ii8+DQogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXByZWZpeCIgdmFsdWU9InskcGF0aH0iLz4NCiAgICAgIHtmb3JtX2VuZH0NCiAgICA8L2Rpdj4NCiAgey9pZn0NCjwvZGl2PnsqIC5yb3cgKn0NCg0KeypnZXRfdGVtcGxhdGVfdmFycyp9]]></data>
	</file>
	<file>
	  <filename>/templates/orig_detail_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRlbnRyeX0KICA8ZGl2IGNsYXNzPSJyb3cgbWItMiI+CiAgPGRpdiBjbGFzcz0iY29sLW1kLTYiPgogICAgPGRpdiBjbGFzcz0icm93IGctMCBib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW4gZmxleC1tZC1yb3cgbWItNCBzaGFkb3ctc20gaC1tZC0yNTAgcG9zaXRpb24tcmVsYXRpdmUiPgogICAgICA8ZGl2IGNsYXNzPSJjb2wgcC00IGQtZmxleCBmbGV4LWNvbHVtbiBwb3NpdGlvbi1zdGF0aWMiPgogICAgICB7aWYgaXNzZXQoJGVudHJ5LT5idWNrZXQpfQogICAgICAgIDxzdHJvbmcgY2xhc3M9ImQtaW5saW5lLWJsb2NrIG1iLTIgdGV4dC1wcmltYXJ5Ij57JGVudHJ5LT5idWNrZXR9PC9zdHJvbmc+CiAgICAgIHsvaWZ9CiAgICAgICAgPGgzIGNsYXNzPSJtYi0wIj57JGVudHJ5LT5uYW1lfGNtc19lc2NhcGU6aHRtbGFsbH08L2gzPgogICAgICAgIHtpZiAkZW50cnktPnBvc3RkYXRlfTxkaXYgY2xhc3M9Im1iLTEgdGV4dC1tdXRlZCI+eyRlbnRyeS0+cG9zdGRhdGV8Y21zX2RhdGVfZm9ybWF0fTwvZGl2PnsvaWZ9CiAgICAgICAgPHAgY2xhc3M9ImNhcmQtdGV4dCBtYi1hdXRvIj57JG1vZC0+TGFuZygnbGFiZWxfbWltZScpfSB7JGVudHJ5LT5taW1lfSwgeyRtb2QtPkxhbmcoJ2xhYmVsX3NpemUnKX0geyRlbnRyeS0+c2l6ZX08L3A+CiAgICAgICAgPG9sIGNsYXNzPSJsaXN0LXVuc3R5bGVkIG1iLTAiPgogICAgICAgICAge2lmICRlbnRyeS0+dXJsX29yaWdpbmFsfTxsaT48YSBocmVmPSJ7JGVudHJ5LT51cmxfb3JpZ2luYWx9Ij57JG1vZC0+TGFuZygnbGFiZWxfdXJsX29yaWdpbmFsJyl9PC9hPjwvbGk+ey9pZn0KICAgICAgICAgIHtpZiAkZW50cnktPnVybH08bGk+PGEgaHJlZj0ieyRlbnRyeS0+dXJsfSI+eyRtb2QtPkxhbmcoJ2xhYmVsX3VybCcpfTwvYT48L2xpPnsvaWZ9CiAgICAgICAgICB7aWYgJGVudHJ5LT51cmxfcHJlc2lnbmVkfTxsaT48YSBocmVmPSJ7JGVudHJ5LT51cmxfcHJlc2lnbmVkfSI+eyRtb2QtPkxhbmcoJ2xhYmVsX3VybF9wcmVzaWduZWQnKX08L2E+PC9saT57L2lmfQogICAgICAgICAgPC9vbD4KICAgICAgPC9kaXY+CiAgICAgIHtpZiAkZW50cnktPmlzaW1hZ2V9CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1hdXRvIGQtbm9uZSBkLWxnLWJsb2NrIHAtMCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJiZC1wbGFjZWhvbGRlci1pbWciIHdpZHRoPSIyMDAiPgogICAgICAgICAgICA8aW1nIHNyYz0ieyRlbnRyeS0+dXJsX3ByZXNpZ25lZH0iIHdpZHRoPSIyMDAiLz4KICAgICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgey9pZn0KICAgIDwvZGl2PgogIDwvZGl2PgogIDwvZGl2PgogIHsvaWZ9ICA=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_summary_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iZC1tZC1mbGV4IGZsZXgtbWQtcm93LXJldmVyc2UgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIj4KICA8ZGl2IGNsYXNzPSJtYi0zIG1iLW1kLTAgZC1mbGV4IHRleHQtbm93cmFwIj4KICA8c21hbGwgY2xhc3M9ImQtaW5saW5lLWZsZXggcHgtMiBweS0xIGZ3LXNlbWlib2xkIHRleHQtc3VjY2Vzcy1lbXBoYXNpcyBiZy1zdWNjZXNzLXN1YnRsZSBib3JkZXIgYm9yZGVyLXN1Y2Nlc3Mtc3VidGxlIHJvdW5kZWQtMiBtZS0yIj5MYXN0IFJlZnJlc2hlZCB7JHN0YXJ0ZGF0ZXxsb2NhbGVkYXRlX2Zvcm1hdDonaiAlaCBZIEg6aTpzJ308L3NtYWxsPgogIDwvZGl2PgogIDxoMSBjbGFzcz0iYmQtdGl0bGUgbWItMCIgaWQ9ImNvbnRlbnQiPnskYnVja2V0fTwvaDE+CjwvZGl2PgogICAgICAgICAKICA8bmF2IGFyaWEtbGFiZWw9ImJyZWFkY3J1bWIiPgogIDxvbCBjbGFzcz0iYnJlYWRjcnVtYiI+CiAgPGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gYWN0aXZlIiBhcmlhLWN1cnJlbnQ9InBhZ2UiPkhvbWU8L2xpPgogIHtmb3JlYWNoICRwYXRoX3BhcnRzIGFzICRwYXJ0fQogICAgPGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPgogICAge2lmICFlbXB0eSgkcGFydC0+dXJsKX0KICAgICAgPGEgaHJlZj0ieyRwYXJ0LT51cmx9Ij57JHBhcnQtPm5hbWV9PC9hPgogICAge2Vsc2V9CiAgICAgIHskcGFydC0+bmFtZX0KICAgIHsvaWZ9CiAgICA8L2xpPgogIHsvZm9yZWFjaH0KICA8L29sPgo8L25hdj4KCjxkaXYgY2xhc3M9ImNhcmQiPgo8dWwgY2xhc3M9Imxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaCI+CntpZiAkdXBfZGlydXJsfQogIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIGJhY2t1cCI+eyR1cF9kaXJpY29ubGlua30geyR1cF9kaXJsaW5rfTwvbGk+CnsvaWZ9Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAge2lmICRlbnRyeS0+ZGlyfQogICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxhIGhyZWY9InskZW50cnktPmxpbmt9IiBjbGFzcz0iY2FyZC1saW5rIj57JGVudHJ5LT5pY29ufSB7JGVudHJ5LT5uYW1lfTwvYT48L2xpPgogIHtlbHNlfQogICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPgogICAgPGEgaHJlZj0ieyRlbnRyeS0+ZGV0YWlsX2xpbmt9IiBjbGFzcz0iY2FyZC1saW5rIj57JGVudHJ5LT5pY29ufTwvYT4gCiAgICB7JGVudHJ5LT5wcmVzaWduZWRfbGlua30KICAgIDwvbGk+CiAgey9pZn0Key9mb3JlYWNofQo8L3VsPgo8L2Rpdj4KCntpZiAkcGFnZWNvdW50ID4gMX0KICA8cD4Ke2lmICRwYWdlbnVtYmVyID4gMX0KeyRmaXJzdHBhZ2V9Jm5ic3A7eyRwcmV2cGFnZX0mbmJzcDsKey9pZn0KeyRwYWdldGV4dH0mbmJzcDt7JHBhZ2VudW1iZXJ9Jm5ic3A7eyRvZnRleHR9Jm5ic3A7eyRwYWdlY291bnR9CntpZiAkcGFnZW51bWJlciA8ICRwYWdlY291bnR9CiZuYnNwO3skbmV4dHBhZ2V9Jm5ic3A7eyRsYXN0cGFnZX0Key9pZn0KPC9wPgp7L2lmfQo8IS0tIEVuZCBBV1NTMyBEaXNwbGF5IFRlbXBsYXRlIC0tPg==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_uploadform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iYmQtZXhhbXBsZSI+DQp7JHN0YXJ0Zm9ybX0NCntpZiAkbWVzc2FnZX17JG1lc3NhZ2V9ey9pZn0NCg0KPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogIDxkaXYgY2xhc3M9ImN1c3RvbS1maWxlIj4NCiAgICA8aW5wdXQgdHlwZT0iZmlsZSIgY2xhc3M9ImN1c3RvbS1maWxlLWlucHV0IiBpZD0ieyRhY3Rpb25pZH1jdXN0b21GaWxlIiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2Jyb3dzZSI+DQogICAgPGxhYmVsIGNsYXNzPSJjdXN0b20tZmlsZS1sYWJlbCIgZm9yPSJ7JGFjdGlvbmlkfWN1c3RvbUZpbGUiPnskbW9kLT5MYW5nKCdjaG9vc2VfZmlsZScpfTwvbGFiZWw+DQogIDwvZGl2Pg0KPC9kaXY+DQp7KiBjYXB0Y2hhID8/ICp9DQp7aWYgaXNzZXQoJGNhcHRjaGEpfQ0KICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICB7JGNhcHRjaGF9PGJyLz4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCBtdC0zIiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2NhcHRjaGEiIHNpemU9IjEwIiBtYXhsZW5ndGg9IjEwIi8+DQogICAgPHNtYWxsIGlkPSJjYXB0Y2hhSGVscCIgY2xhc3M9ImZvcm0tdGV4dCB0ZXh0LW11dGVkIj57JG1vZC0+TGFuZygnY2FwdGNoYV90aXRsZScpfTwvc21hbGw+DQogIDwvZGl2Pg0Key9pZn0NCjxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X3N1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+eyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfTwvYnV0dG9uPg0KeyRlbmRmb3JtfQ0KPC9kaXY+DQoNCjwhLS0gcmVtb3ZlIHRoaXMgaWYgbm90IHVzaW5nIGJvb3RzdHJhcCAtLT4NCjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2JzLWN1c3RvbS1maWxlLWlucHV0L2Rpc3QvYnMtY3VzdG9tLWZpbGUtaW5wdXQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgYnNDdXN0b21GaWxlSW5wdXQuaW5pdCgpDQp9KQ0KPC9zY3JpcHQ+IA0KPCEtLSBlbmQgcmVtb3ZlIC0tPg==]]></data>
	</file>
	<file>
	  <filename>/templates/uploadview.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdD57bGl0ZXJhbH0NCiQoZnVuY3Rpb24gKCkgew0KICAgICQoJyNmaWxldXBsb2FkJykuZmlsZXVwbG9hZCh7DQogICAgICAgIGRhdGFUeXBlOiAnanNvbicsDQogICAgICAgIHN0YXJ0OiBmdW5jdGlvbihlLGRhdGEpIHsNCiAgICAgICAgICAkKCcjcHJvZ3Jlc3NhcmVhJykuc2hvdygpOw0KICAgICAgICB9LA0KICAgICAgICBwcm9ncmVzc2FsbDogZnVuY3Rpb24oZSwgZGF0YSkgew0KICAgICAgICAgIC8vIG92ZXJhbGwgcHJvZ3Jlc3MgY2FsbGJhY2sNCiAgICAgICAgICB2YXIgcGVyYyA9IChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwgKiAxMDApLnRvRml4ZWQoMik7DQogICAgICAgICAgdmFyIHRvdGFsID0gbnVsbDsNCiAgICAgICAgICB0b3RhbCA9IChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwgKiAxMDApLnRvRml4ZWQoMCk7DQogICAgICAgICAgdmFyIHN0ciA9IHBlcmMgKyAnICUnOw0KICAgICAgICAgIC8vY29uc29sZS5sb2codG90YWwpOw0KICAgICAgICAgIGJhclZhbHVlKHRvdGFsKTsNCiAgICAgICAgICANCiAgICAgICAgICBmdW5jdGlvbiBiYXJWYWx1ZSh0b3RhbCkgew0KICAgICAgICAgICAgJCgiI3Byb2dyZXNzYXJlYSIpLnByb2dyZXNzYmFyKCB7DQogICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCh0b3RhbCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgJCgiLnVpLXByb2dyZXNzYmFyLXZhbHVlIikuaHRtbChzdHIpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgICAgIHZhciBmaWxlc2xvb3A9W107DQogICAgICAgICAgICBpZihkYXRhLnJlc3VsdC5maWxlcyAhPSB1bmRlZmluZWQpew0KICAgICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkgew0KICAgICAgICAgICAgICAgIGlmKGZpbGUuZXJyb3Ipew0KICAgICAgICAgICAgICAgICAgZmlsZXNsb29wLnB1c2goJzxwPicrZmlsZS5uYW1lICsgIiAtICIgKyBmaWxlLmVycm9yKyc8L3A+Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGZpbGVzbG9vcC5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgdmFyICRyZXNwb25zZSA9ICQoJzxhc2lkZS8+JykuYWRkQ2xhc3MoJ21lc3NhZ2UnKTsNCg0KICAgICAgICAgICAgICAgICRyZXNwb25zZS5hZGRDbGFzcygncGFnZWVycm9yY29udGFpbmVyJykNCiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8c3Bhbj4nKS50ZXh0KCdDbG9zZScpLmFkZENsYXNzKCdjbG9zZS13YXJuaW5nJykpDQogICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoZmlsZXNsb29wLmpvaW4oJycpKTsNCiAgICAgICAgICAgDQogICAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQoJHJlc3BvbnNlKS5zbGlkZURvd24oMTAwMCwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2Uuc2xpZGVVcCgpOw0KICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgIH0sIDEwMDAwKTsNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSwNCiAgICAgICAgc3RvcDogZnVuY3Rpb24oZSwgZGF0YSkgew0KICAgICAgICAgICQoJyNmaWxlc2FyZWEnKS5sb2FkKHJlZnJlc2hfdXJsKTsNCiAgICAgICAgICAkKCcjcHJvZ3Jlc3NhcmVhJykuZmFkZU91dCgpOw0KICAgICAgICB9DQogICAgfSk7DQp9KTsNCnsvbGl0ZXJhbH08L3NjcmlwdD4NCnskZm9ybXN0YXJ0fQ0KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkaXNhYmxlX2J1ZmZlciIgdmFsdWU9IjEiIC8+DQogIHskaGlkZGVucGF0aH0NCiAgPGZpZWxkc2V0Pg0KICAgIDxkaXYgY2xhc3M9InVwbG9hZC13cmFwcGVyIj4NCiAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MCU7IGZsb2F0OiBsZWZ0OyI+DQogICAgICAgIHsqPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTUFYX0ZJTEVfU0laRSIgdmFsdWU9InskbWF4ZmlsZXNpemV9IiAvPip9eyogcmVjb21tZW5kYXRpb24gZm9yIGJyb3dzZXIgKn0NCiAgICAgICAgPGlucHV0IGlkPSJmaWxldXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJ7JGFjdGlvbmlkfWZpbGVzW10iIHNpemU9IjUwIiB0aXRsZT0ieyRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfZmlsZWZpZWxkJyl9IiBtdWx0aXBsZS8+DQogICAgICAgIDxkaXYgaWQ9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+DQogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImNhbmNlbCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ2NhbmNlbCcpfSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ii8+DQogICAgICAgICAgICB7KjxpbnB1dCBuYW1lPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4qfQ0KICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgaWQ9ImxlZnRjb2wiIHN0eWxlPSJoZWlnaHQ6IDRlbTsgd2lkdGg6IDQwJTsgZmxvYXQ6IGxlZnQ7IGRpc3BsYXk6IHRhYmxlOyI+DQogICAgICAgIHtpZiAhaXNzZXQoJGlzX2llKX0NCiAgICAgICAgICA8ZGl2IGlkPSJkcm9wem9uZSIgY2xhc3M9InZjZW50ZXJlZCBoY2VudGVyZWQgZmFkZSIgdGl0bGU9InskbW9kLT5MYW5nKCd0aXRsZV9kcm9wem9uZScpfSI+PHAgaWQ9ImRyb3B6b25ldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9kcm9wZmlsZXMnKX08L3A+PC9kaXY+DQogICAgICAgIHsvaWZ9DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+DQogICAgICA8ZGl2IGlkPSJwcm9ncmVzc2FyZWEiPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2ZpZWxkc2V0Pg0KeyRmb3JtZW5kfQ0KDQo=]]></data>
	</file>
</module>
