<?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>JQueryTools</name>
	<version>1.0.2</version>
  <mincmsversion>1.5.1</mincmsversion>
	<help>PGgzPldoYXQgaXMgdGhpcz88L2gzPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyA8YSBocmVmPSJodHRwOi8vd3d3LmpxdWVyeS5jb20iPmpRdWVyeTwvYT4gZnVuY3Rpb25hbGl0eSB0byBDTVMgTWFkZSBTaW1wbGUgcGFnZSwgYW5kIG1vZHVsZXMgKGV2ZW4gaW4gdGhlIGFkbWluIHNlY3Rpb24pLCBjb252ZW5pZW50bHkgYW5kIGVhc2lseS4gIEl0IHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgbGlrZSBhamF4LCB0b29sdGlwcywgc29ydGFibGUgdGFibGVzLCBhbmQgYW55dGhpbmcgZWxzZSB5b3UgY2FuIGRvIHdpdGgganF1ZXJ5IGluIG9uZSBuaWNlLCBlYXN5IHRvIHVzZSBwYWNrYWdlLjwvcD4KPGgzPkhvdyBkbyBJIHVzZSBpdD88L2gzPgo8cD5UbyBlbmFibGUgSlF1ZXJ5VG9vbHMgeW91IG11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgdGFnIGluIHRoZSBoZWFkIHNlY3Rpb24gb2YgeW91ciBwYWdlIHRlbXBsYXRlLCBvciBpbiB0aGUgbWV0YWRhdGEgc2VjdGlvbiBvZiBlYWNoIHJlcXVpcmVkIHBhZ2UuICBVc2UgdGhpcyB0YWc6IDxjb2RlPntKUXVlcnlUb29scyBhY3Rpb249aW5janN9PC9jb2RlPjwvcD4KPHA+QWRkaXRpb25hbGx5LCB5b3UgY2FuIGluY2x1ZGUgYSBzZWNvbmQgdGFnIHRvIGluY2x1ZGUgdGhlIGphdmFzY3JpcHQgdGhhdCBwcm92aWRlcyB0aGUgZGVmYXVsdCByZWFkeSBmdW5jdGlvbi4gPGNvZGU+e0pRdWVyeVRvb2xzIGFjdGlvbj1yZWFkeX08L2NvZGU+PC9wPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBwcm92aWRlIHNhbXBsZXMgYW5kIGluc3RydWN0aW9ucyBhcyB0byBob3cgdG8gdXNlIGpxdWVyeSBvciB0aGUgdmFyaW91cyBhZGRvbiBsaWJyYXJpZXMgdGhhdCB3ZSBpbmNsdWRlLiAgdG8gbGVhcm4gaG93IHRvIHVzZSB0aGVzZSBsaWJyYXJpZXMgeW91IHdpbGwgbmVlZCB0byByZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgcGx1Z2lucyBhdCB0aGVpciByZXNwZWN0aXZlIGhvbWUgcGFnZS48L3A+CjxoMz5XaGF0IGpxdWVyeSB2ZXJzaW9uIGlzIGluY2x1ZGVkPzwvaDM+CjxwPkN1cnJlbnRseSBKUXVlcnlUb29scyB1c2VzIGpxdWVyeSAxLjIuNTwvcD4KPGgzPldoYXQgSlF1ZXJ5IHBsdWdpbnMgYXJlIGluY2x1ZGVkPC9oMz4KPHVsPgogIDxsaT5kaW1lbnNpb25zPC9saT4KICA8bGk+aG92ZXJJbnRlbnQ8L2xpPgogIDxsaT5tZXRhZGF0YTwvbGk+CiAgPGxpPnRhYmxlc29ydGVyCjxwPi0tIFRvIGFsbG93IHNvcnRpbmcgeW91ciB0YWJsZXMsIGdpdmUgdGhlIGZvbGx3aW5nIGNsYXNzZXMgdG8gdGhlIHRhYmxlIGRlZmluaXRpb246IGNtc19zb3J0YWJsZSB0YWJsZXNvcnRlci4gaS5lOiA8Y29kZT4mbHQ7dGFibGUgY2xhc3M9ImNtc19zb3J0YWJsZSB0YWJsZXNvcnRlciImZ3Q7Li4uJmx0Oy90YWJsZSZndDs8L2NvZGU+PC9wPgogIDwvbGk+CiAgPGxpPmNsdWV0aXA8L2xpPgogIDxsaT5mb3JtPC9saT4KICA8bGk+bGlnaHRib3g8L2xpPgo8L3VsPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2NhbGd1eTEwMDAuY29tIj5jYWxndXkxMDAwLmNvbTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD48aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNHRXh0ZW5zaW9ucyA9Jmd0OyAxLjE0PC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGluY2x1ZGU9IiIgLSBBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGluY2pzIGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGV4cGxpY2l0bHkgaW5jbHVkaW5nIGNlcnRhaW4ganF1ZXJ5IHBsdWdpbnMgd2hpbHN0IGV4Y2x1ZGluZyBhbGwgb3RoZXJzLiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCB0aGUgZXhjbHVkZSBwYXJhbWV0ZXIgd2lsbCBiZSBpZ25vcmVkLiAgUG9zc2libGUgdmFsdWVzIGFyZSB0YWJsZXNvcnRlcixjbHVldGlwLGZvcm0uPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBleGNsdWRlPSIiIC0gQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBpbmNqcyBhY3Rpb24sIHRoaXMgcGFyYW1ldGVyIGFsbG93cyBleGNsdWRpbmcgY2VydGFpbiBqcXVlcnkgcGx1Z2lucyBmcm9tIHRoZSBvdXRwdXQgZ2VuZXJhdGVkLiAgUG9zc2libGUgdmFsdWVzIGFyZTogdGFibGVzb3J0ZXIsY2x1ZXRpcCxmb3JtLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gYWN0aW9uPSIiIC0gU3BlY2lmeSB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZC4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5pbmNqcyAtIEluY2x1ZGUgcmVxdWlyZWQgamF2YXNjcmlwdCBmaWxlcy48L2xpPjxsaT5yZWFkeSAtIE91dHB1dCBkZWZhdWx0IHJlYWR5IGZ1bmN0aW9uLjwvbGk+PC91bD48L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC4yPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+VE9ETzxiciAvPg==</about>
	<description>A toolbox of Jquery utilities to aide in creating dynamic and fancy CMS Made Simple modules and websites</description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.14</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.incjs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEpRdWVyeVRvb2xzIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBIHRvb2xib3ggb2YgY29udmVuaWVuY2VzIHRvIHByb3ZpZGUgZHluYW1pYyBqYXZhc2NyaXB0eSBmdW5jdGlvbmFsaXR5CiMgIGZvciBDTVMgbW9kdWxlcyBhbmQgd2Vic2l0ZSBkZXNpZ25lcnMuCiMgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCiRjb25maWcgPSYgJGdDbXMtPkdldENvbmZpZygpOwoKJGJhc2V1cmwgPSAkY29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy8nLiR0aGlzLT5HZXROYW1lKCkuJy9saWIvJzsKJGZtdCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIlcyI+PC9zY3JpcHQ+Jy4iXG4iOwoKJGFsbF9saWJzID0gYXJyYXkoJ2Jhc2UnLCd0YWJsZXNvcnRlcicsJ2NsdWV0aXAnLCdmb3JtJywnbGlnaHRib3gnKTsKJGJhc2VfZmlsZXMgPSBhcnJheSgnZGVwcyc9PidqcXVlcnktMS4yLjUubWluLmpzJywKCQkgICAgJ2Nzcyc9PiR0aGlzLT5HZXROYW1lKCkuJy5jc3MnKTsKCi8vIGFsbCB0aGUgZXh0cmEgbGlicmFyaWVzLgokdGFibGVzb3J0ZXJfZmlsZXMgPSBhcnJheSgnbWFpbic9PidqcXVlcnkudGFibGVzb3J0ZXIuanMnLAoJCQkgICAnZGVwcyc9PidqcXVlcnkubWV0YWRhdGEuanMnKTsKJGNsdWV0aXBfZmlsZXMgPSBhcnJheSgnbWFpbic9PidqcXVlcnkuY2x1ZXRpcC5qcycsCgkJICAgICAgICdkZXBzJz0+J2pxdWVyeS5kaW1lbnNpb25zLmpzLGpxdWVyeS5ob3ZlckludGVudC5qcycsCgkJICAgICAgICdjc3MnPT4nanF1ZXJ5LmNsdWV0aXAuY3NzJyk7CiRsaWdodGJveF9maWxlcyA9IGFycmF5KCdtYWluJz0+J2pxdWVyeS5saWdodGJveC0wLjUuanMnLAoJCQknY3NzJz0+J2pxdWVyeS5saWdodGJveC0wLjUuY3NzJyk7CiRmb3JtX2ZpbGVzID0gYXJyYXkoJ21haW4nPT4nanF1ZXJ5LmZvcm0uanMnKTsKCgovLyBhc3NlbWJsZSB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgYW5kIGNzcyBmaWxlcy4KJHRoaXMtPl9saWJzID0gYXJyYXkoKTsKJGxpYnMgPSBhcnJheSgpOwokY3NzID0gYXJyYXkoKTsKZm9yKCAkcGFzcyA9IDA7ICRwYXNzIDwgMjsgJHBhc3MrKyApCiAgewogICAgZm9yZWFjaCggJGFsbF9saWJzIGFzICRvbmUgKQogICAgICB7CgkkdG1wMiA9ICJ7JG9uZX1fZmlsZXMiOwoJJGFyciA9ICQkdG1wMjsKCWlmKCAhaXNfYXJyYXkoJGFycikgKQoJICB7CgkgICAgZGllKCdjb3VsZCBub3QgZmluZCBhcnJheSAkdG1wMicpOwoJICB9CgoJaWYoIGlzc2V0KCRwYXJhbXNbJ2luY2x1ZGUnXSkgKQoJICB7CgkgICAgJGluY2x1ZGUgPSBleHBsb2RlKCcsJywkcGFyYW1zWydpbmNsdWRlJ10pOwoJICAgIGlmKCAkb25lICE9ICdiYXNlJyAmJiAhaW5fYXJyYXkoJG9uZSwkaW5jbHVkZSkgKSBjb250aW51ZTsKCSAgfQoJZWxzZSBpZiggaXNzZXQoJHBhcmFtc1snZXhjbHVkZSddKSApCgkgIHsKCSAgICAkZXhjbHVkZSA9IGV4cGxvZGUoJywnLCRwYXJhbXNbJ2V4Y2x1ZGUnXSk7CgkgICAgaWYoICRvbmUgIT0gJ2Jhc2UnICYmIGluX2FycmF5KCRvbmUsJGV4Y2x1ZGUpICkgY29udGludWU7CgkgIH0KCglpZiggIWluX2FycmF5KCRvbmUsJHRoaXMtPl9saWJzKSApCgkgIHsKCSAgICAkdGhpcy0+X2xpYnNbXSA9ICRvbmU7CgkgIH0KCglpZiggJHBhc3MgPT0gMCAmJiBpc3NldCgkYXJyWydkZXBzJ10pICkKCSAgewoJICAgICRsaWJzID0gYXJyYXlfbWVyZ2UoJGxpYnMsZXhwbG9kZSgnLCcsJGFyclsnZGVwcyddKSk7CgkgIH0KCglpZiggJHBhc3MgPT0gMSAmJiBpc3NldCgkYXJyWydtYWluJ10pICkKCSAgewoJICAgICRsaWJzID0gYXJyYXlfbWVyZ2UoJGxpYnMsZXhwbG9kZSgnLCcsJGFyclsnbWFpbiddKSk7CgkgIH0KCglpZiggJHBhc3MgPT0gMSAmJiBpc3NldCgkYXJyWydjc3MnXSkgKQoJICB7CgkgICAgJGNzcyA9IGFycmF5X21lcmdlKCRjc3MsZXhwbG9kZSgnLCcsJGFyclsnY3NzJ10pKTsKCSAgfQogICAgICB9CgogICAgJGxpYnMgPSBhcnJheV91bmlxdWUoJGxpYnMpOwogICAgJGNzcyA9IGFycmF5X3VuaXF1ZSgkY3NzKTsKfQoKJHNtYXJ0eS0+YXNzaWduKCdiYXNlX3VybCcsJGJhc2V1cmwpOwppZiggY291bnQoJGxpYnMpICkKICB7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2xpYnMnLCRsaWJzKTsKICB9CmlmKCBjb3VudCgkY3NzKSApCiAgewogICAgJHNtYXJ0eS0+YXNzaWduKCdjc3MnLCRjc3MpOwogIH0KCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnaW5janMudHBsJyk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.ready.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEpRdWVyeVRvb2xzIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBIHRvb2xib3ggb2YgY29udmVuaWVuY2VzIHRvIHByb3ZpZGUgZHluYW1pYyBqYXZhc2NyaXB0eSBmdW5jdGlvbmFsaXR5CiMgIGZvciBDTVMgbW9kdWxlcyBhbmQgd2Vic2l0ZSBkZXNpZ25lcnMuCiMgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCiR0X2xpYnMgPSBhcnJheSgpOwppZiggaXNfYXJyYXkoJHRoaXMtPl9saWJzKSApCiAgewogICAgZm9yZWFjaCgkdGhpcy0+X2xpYnMgYXMgJG9uZSkKICAgICAgewoJJHRfbGlic1skb25lXSA9IDE7CiAgICAgIH0KICB9CiRzbWFydHktPmFzc2lnbignanF1ZXJ5X2xpYnMnLCR0X2xpYnMpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdyZWFkeS50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/JQueryTools.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEpRdWVyeVRvb2xzIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBIHRvb2xib3ggb2YgY29udmVuaWVuY2VzIHRvIHByb3ZpZGUgZHluYW1pYyBqYXZhc2NyaXB0eSBmdW5jdGlvbmFsaXR5CiMgIGZvciBDTVMgbW9kdWxlcyBhbmQgd2Vic2l0ZSBkZXNpZ25lcnMuCiMgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KJGNnZXh0ZW5zaW9ucyA9IGNtc19qb2luX3BhdGgoJGdDbXMtPmNvbmZpZ1sncm9vdF9wYXRoJ10sJ21vZHVsZXMnLAoJCQkgICAgICAnQ0dFeHRlbnNpb25zJywnQ0dFeHRlbnNpb25zLm1vZHVsZS5waHAnKTsKaWYoICFpc19yZWFkYWJsZSggJGNnZXh0ZW5zaW9ucyApICkKewogIGVjaG8gJzxoMT48Zm9udCBjb2xvcj0icmVkIj5FUlJPUjogVGhlIENHRXh0ZW5zaW9ucyBtb2R1bGUgY291bGQgbm90IGJlIGZvdW5kLjwvZm9udD48L2gxPic7CiAgcmV0dXJuOwp9CnJlcXVpcmVfb25jZSgkY2dleHRlbnNpb25zKTsKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgpjbGFzcyBKUXVlcnlUb29scyBleHRlbmRzIENHRXh0ZW5zaW9ucwp7CiAgdmFyICRsaWJzID0gJyc7CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEpRdWVyeVRvb2xzKCkKICAgY29uc3RydWN0b3IKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBKUXVlcnlUb29scygpCiAgewogICAgcGFyZW50OjpDTVNNb2R1bGUoKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXROYW1lKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXROYW1lKCkKICB7CiAgICByZXR1cm4gJ0pRdWVyeVRvb2xzJzsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEZyaWVuZGx5TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRWZXJzaW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzEuMC4yJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRIZWxwKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3IoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgewogICAgcmV0dXJuICdjYWxndXkxMDAwJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3JFbWFpbCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0Q2hhbmdlTG9nKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfQogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIElzUGx1Z2luTW9kdWxlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSGFzQWRtaW4oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEhhc0FkbWluKCkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5TZWN0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQogIHsKICAgIHJldHVybiAnZXh0ZW5zaW9ucyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFZpc2libGVUb0FkbWluVXNlcigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSgnQ0dFeHRlbnNpb25zJz0+JzEuMTQnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNaW5pbXVtQ01TVmVyc2lvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMS41LjEiOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFNldFBhcmFtZXRlcnMoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKQogIHsKICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOwogICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbmNsdWRlJyxDTEVBTl9TVFJJTkcpOwogICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaW5jbHVkZScsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX2luY2x1ZGUnKSk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZXhjbHVkZScsQ0xFQU5fU1RSSU5HKTsKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2V4Y2x1ZGUnLCcnLCR0aGlzLT5MYW5nKCdwYXJhbV9leGNsdWRlJykpOwogICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignYWN0aW9uJywnJywkdGhpcy0+TGFuZygncGFyYW1fYWN0aW9uJykpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEluc3RhbGxQb3N0TWVzc2FnZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBVbmluc3RhbGxQcmVNZXNzYWdlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3ByZXVuaW5zdGFsbCcpOwogIH0JCgoKfSAvLyBjbGFzcwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKCgojQgoKCiNDCiRsYW5nWydjaGFuZ2Vsb2cnXSA9IDw8PEVPVApUT0RPCkVPVDsKCiNECgoKI0UKCgojRgokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnSlF1ZXJ5IFRvb2xib3gnOwoKCiNHCgoKI0gKJGxhbmdbJ2hlbHAnXSA9IDw8PEVPVAo8aDM+V2hhdCBpcyB0aGlzPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIDxhIGhyZWY9Imh0dHA6Ly93d3cuanF1ZXJ5LmNvbSI+alF1ZXJ5PC9hPiBmdW5jdGlvbmFsaXR5IHRvIENNUyBNYWRlIFNpbXBsZSBwYWdlLCBhbmQgbW9kdWxlcyAoZXZlbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiksIGNvbnZlbmllbnRseSBhbmQgZWFzaWx5LiAgSXQgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBsaWtlIGFqYXgsIHRvb2x0aXBzLCBzb3J0YWJsZSB0YWJsZXMsIGFuZCBhbnl0aGluZyBlbHNlIHlvdSBjYW4gZG8gd2l0aCBqcXVlcnkgaW4gb25lIG5pY2UsIGVhc3kgdG8gdXNlIHBhY2thZ2UuPC9wPgo8aDM+SG93IGRvIEkgdXNlIGl0PzwvaDM+CjxwPlRvIGVuYWJsZSBKUXVlcnlUb29scyB5b3UgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IG9uZSB0YWcgaW4gdGhlIGhlYWQgc2VjdGlvbiBvZiB5b3VyIHBhZ2UgdGVtcGxhdGUsIG9yIGluIHRoZSBtZXRhZGF0YSBzZWN0aW9uIG9mIGVhY2ggcmVxdWlyZWQgcGFnZS4gIFVzZSB0aGlzIHRhZzogPGNvZGU+e0pRdWVyeVRvb2xzIGFjdGlvbj1pbmNqc308L2NvZGU+PC9wPgo8cD5BZGRpdGlvbmFsbHksIHlvdSBjYW4gaW5jbHVkZSBhIHNlY29uZCB0YWcgdG8gaW5jbHVkZSB0aGUgamF2YXNjcmlwdCB0aGF0IHByb3ZpZGVzIHRoZSBkZWZhdWx0IHJlYWR5IGZ1bmN0aW9uLiA8Y29kZT57SlF1ZXJ5VG9vbHMgYWN0aW9uPXJlYWR5fTwvY29kZT48L3A+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgc2FtcGxlcyBhbmQgaW5zdHJ1Y3Rpb25zIGFzIHRvIGhvdyB0byB1c2UganF1ZXJ5IG9yIHRoZSB2YXJpb3VzIGFkZG9uIGxpYnJhcmllcyB0aGF0IHdlIGluY2x1ZGUuICB0byBsZWFybiBob3cgdG8gdXNlIHRoZXNlIGxpYnJhcmllcyB5b3Ugd2lsbCBuZWVkIHRvIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBwbHVnaW5zIGF0IHRoZWlyIHJlc3BlY3RpdmUgaG9tZSBwYWdlLjwvcD4KPGgzPldoYXQganF1ZXJ5IHZlcnNpb24gaXMgaW5jbHVkZWQ/PC9oMz4KPHA+Q3VycmVudGx5IEpRdWVyeVRvb2xzIHVzZXMganF1ZXJ5IDEuMi41PC9wPgo8aDM+V2hhdCBKUXVlcnkgcGx1Z2lucyBhcmUgaW5jbHVkZWQ8L2gzPgo8dWw+CiAgPGxpPmRpbWVuc2lvbnM8L2xpPgogIDxsaT5ob3ZlckludGVudDwvbGk+CiAgPGxpPm1ldGFkYXRhPC9saT4KICA8bGk+dGFibGVzb3J0ZXIKPHA+LS0gVG8gYWxsb3cgc29ydGluZyB5b3VyIHRhYmxlcywgZ2l2ZSB0aGUgZm9sbHdpbmcgY2xhc3NlcyB0byB0aGUgdGFibGUgZGVmaW5pdGlvbjogY21zX3NvcnRhYmxlIHRhYmxlc29ydGVyLiBpLmU6IDxjb2RlPiZsdDt0YWJsZSBjbGFzcz0iY21zX3NvcnRhYmxlIHRhYmxlc29ydGVyIiZndDsuLi4mbHQ7L3RhYmxlJmd0OzwvY29kZT48L3A+CiAgPC9saT4KICA8bGk+Y2x1ZXRpcDwvbGk+CiAgPGxpPmZvcm08L2xpPgogIDxsaT5saWdodGJveDwvbGk+CjwvdWw+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgY2FsZ3V5XCdzCm1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vY2FsZ3V5MTAwMC5jb20iPmNhbGd1eTEwMDAuY29tPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgpFT1Q7CgoKI0kKCgojSgoKCiNLCgoKI0wKCgojTQokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdBIHRvb2xib3ggb2YgSnF1ZXJ5IHV0aWxpdGllcyB0byBhaWRlIGluIGNyZWF0aW5nIGR5bmFtaWMgYW5kIGZhbmN5IENNUyBNYWRlIFNpbXBsZSBtb2R1bGVzIGFuZCB3ZWJzaXRlcyc7CgojTgoKCiNPCgoKI1AKJGxhbmdbJ3BhcmFtX2FjdGlvbiddID0gJ1NwZWNpZnkgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWQuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOjx1bD48bGk+aW5janMgLSBJbmNsdWRlIHJlcXVpcmVkIGphdmFzY3JpcHQgZmlsZXMuPC9saT48bGk+cmVhZHkgLSBPdXRwdXQgZGVmYXVsdCByZWFkeSBmdW5jdGlvbi48L2xpPjwvdWw+JzsKJGxhbmdbJ3BhcmFtX2V4Y2x1ZGUnXSA9ICdBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGluY2pzIGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGV4Y2x1ZGluZyBjZXJ0YWluIGpxdWVyeSBwbHVnaW5zIGZyb20gdGhlIG91dHB1dCBnZW5lcmF0ZWQuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOiB0YWJsZXNvcnRlcixjbHVldGlwLGZvcm0uJzsKJGxhbmdbJ3BhcmFtX2luY2x1ZGUnXSA9ICdBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGluY2pzIGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGV4cGxpY2l0bHkgaW5jbHVkaW5nIGNlcnRhaW4ganF1ZXJ5IHBsdWdpbnMgd2hpbHN0IGV4Y2x1ZGluZyBhbGwgb3RoZXJzLiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCB0aGUgZXhjbHVkZSBwYXJhbWV0ZXIgd2lsbCBiZSBpZ25vcmVkLiAgUG9zc2libGUgdmFsdWVzIGFyZSB0YWJsZXNvcnRlcixjbHVldGlwLGZvcm0uJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVGhlIEpRdWVyeVRvb2xzIG1vZHVsZSBoYXMgYmVlbiBpbnN0YWxsZWQuLi4uIGdldCBjcmFja2luJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdUaGUgSlF1ZXJ5VG9vbHMgbW9kdWxlIGhhcyBiZWVuIHVuaW5zdGFsbGVkJzsKJGxhbmdbJ3ByZXVuaW5zdGFsbCddID0gJ1JlbW92aW5nIHRoaXMgbW9kdWxlIGNvdWxkIGRhbWFnZSB0aGUgYXBwZWFyYW5jZSBhbmQgZnVuY3Rpb25hbGl0eSBvZiB5b3VyIHdlYnNpdGUuICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/JzsKCiNRCgoKI1IKCgojUwoKCiNUCgoKI1UKCgojVgoKCiNXCgoKI1gKCgojWQoKCiNaCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2NoYW5nZWxvZyddID0gJ1RPRE8gJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0pRdWVyeSBUb29sYm94ICc7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgaXMgdGhpcz88L2gzPg0KPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5qcXVlcnkuY29tIj5qUXVlcnk8L2E+IGZ1bmN0aW9uYWxpdHkgdG8gQ01TIE1hZGUgU2ltcGxlIHBhZ2UsIGFuZCBtb2R1bGVzIChldmVuIGluIHRoZSBhZG1pbiBzZWN0aW9uKSwgY29udmVuaWVudGx5IGFuZCBlYXNpbHkuICBJdCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGxpa2UgYWpheCwgdG9vbHRpcHMsIHNvcnRhYmxlIHRhYmxlcywgYW5kIGFueXRoaW5nIGVsc2UgeW91IGNhbiBkbyB3aXRoIGpxdWVyeSBpbiBvbmUgbmljZSwgZWFzeSB0byB1c2UgcGFja2FnZS48L3A+DQo8aDM+SG93IGRvIEkgdXNlIGl0PzwvaDM+DQo8cD5UbyBlbmFibGUgSlF1ZXJ5VG9vbHMgeW91IG11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgdGFnIGluIHRoZSBoZWFkIHNlY3Rpb24gb2YgeW91ciBwYWdlIHRlbXBsYXRlLCBvciBpbiB0aGUgbWV0YWRhdGEgc2VjdGlvbiBvZiBlYWNoIHJlcXVpcmVkIHBhZ2UuICBVc2UgdGhpcyB0YWc6IDxjb2RlPntKUXVlcnlUb29scyBhY3Rpb249aW5janN9PC9jb2RlPjwvcD4NCjxwPkFkZGl0aW9uYWxseSwgeW91IGNhbiBpbmNsdWRlIGEgc2Vjb25kIHRhZyB0byBpbmNsdWRlIHRoZSBqYXZhc2NyaXB0IHRoYXQgcHJvdmlkZXMgdGhlIGRlZmF1bHQgcmVhZHkgZnVuY3Rpb24uIDxjb2RlPntKUXVlcnlUb29scyBhY3Rpb249cmVhZHl9PC9jb2RlPg0KPGgzPldoYXQganF1ZXJ5IHZlcnNpb24gaXMgaW5jbHVkZWQ/PC9oMz4NCjxwPkN1cnJlbnRseSBKUXVlcnlUb29scyB1c2VzIGpxdWVyeSAxLjIuNTwvcD4NCjxoMz5XaGF0IHBsdWdpbnMgYXJlIGluY2x1ZGVkPC9oMz4NCjx1bD4NCiAgPGxpPmRpbWVuc2lvbnM8L2xpPg0KICA8bGk+aG92ZXJJbnRlbnQ8L2xpPg0KICA8bGk+bWV0YWRhdGE8L2xpPg0KICA8bGk+dGFibGVzb3J0ZXINCjxwPi0tIFRvIGFsbG93IHNvcnRpbmcgeW91ciB0YWJsZXMsIGdpdmUgdGhlIGZvbGx3aW5nIGNsYXNzZXMgdG8gdGhlIHRhYmxlIGRlZmluaXRpb246IGNtc19zb3J0YWJsZSB0YWJsZXNvcnRlci4gaS5lOiA8Y29kZT48dGFibGUgY2xhc3M9JnF1b3Q7Y21zX3NvcnRhYmxlIHRhYmxlc29ydGVyJnF1b3Q7Pi4uLjwvdGFibGU+PC9jb2RlPjwvcD4NCiAgPC9saT4NCiAgPGxpPmNsdWV0aXA8L2xpPg0KICA8bGk+Zm9ybTwvbGk+DQo8L3VsPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBjYWxndXlcJiMwMzk7cw0KbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9jYWxndXkxMDAwLmNvbSI+Y2FsZ3V5MTAwMC5jb208L2E+LjwvbGk+DQo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj48Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZz48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4NCjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZA0KYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TDQpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gDQpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4NCjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4nOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdFbiB2ZXJrdCZvc2xhc2g7eWthc3NlIG1lZCBKcXVlcnkgdmVya3Qmb3NsYXNoO3kgc29tIGJpc3QmYXJpbmc7ciBpIG9wcHJldHRlbHNlIGF2IGR5bmFtaXNrZSBvZyBmYW5jeSBDTVMgTWFkZSBTaW1wbGUgbW9kdWxlciBnbyBuZXR0c3RlZGVyJzsKJGxhbmdbJ3BhcmFtX2FjdGlvbiddID0gJ1NwZXNpZmlzZXIgaGFuZGxpbmdlbiBzb20gc2thbCBrYWxsZXMuIE11bGlnZSB2ZXJkaWVyIGVyOjx1bD48bGk+aW5janMgLSBJbmNsdWRlIHJlcXVpcmVkIGphdmFzY3JpcHQgZmlsZXMuPC9saT48bGk+cmVhZHkgLSBPdXRwdXQgZGVmYXVsdCByZWFkeSBmdW5jdGlvbi48L2xpPjwvdWw+JzsKJGxhbmdbJ3BhcmFtX2V4Y2x1ZGUnXSA9ICdLdW4gZ3lsZGlnIHRpbCBpbmNqcyBoYW5kbGluZ2VuLiBEZW5uZSBwYXJhbWV0ZXJlbiB0aWxsYXRlciAmYXJpbmc7IHV0ZWx1a2tlIGJlc3RlbXRlIGpxdWVyeSBwcm9ncmFtdGlsbGVnZyBmcmEgdmlzbmluZ2VuIHNvbSBnZW5lcmVyZXMuIE11bGlnZSB2ZXJkaWVyIGVyOiB0YWJsZXNvcnRlcixjbHVldGlwLGZvcm0uJzsKJGxhbmdbJ3BhcmFtX2luY2x1ZGUnXSA9ICdLdW4gZ3lsZGlnIHRpbCBpbmNqcyBoYW5kbGluZ2VuLiBEZW5uZSBwYXJhbWV0ZXJlbiB0aWxhbHRlciAmYXJpbmc7IGVrc3BsaXNpdHQgaW5rbHVkZXJlIGJlc3RlbXRlIGpxdWVyeSBwcm9ncmFtdGlsbGVnZyBvZyB1dGVsdWtrZSBhbGxlIGFuZHJlLiBPbSBkZW5uZSBwYXJhbWV0ZXJlbiBlciBzcGVzaWZpc2VydCwgdmlsIGVrc2x1ZGVyIHBhcmFtZXRlcmVuIGJsaSBpZ25vcmVydC4gIE11bGlnZSB2ZXJkaWVyIGVyIHRhYmxlc29ydGVyLGNsdWV0aXAsZm9ybS4nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdKUXVlcnlUb29scyBtb2R1bGVuIGFociBibGl0dCBpbnN0YWxsZXJ0Li4uLiBwciZvc2xhc2g7diBkZW4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0pRdWVyeVRvb2xzIG1vZHVsZW4gaGFyIGJsaXR0IGF2aW5zdGFsbGVydCc7CiRsYW5nWydwcmV1bmluc3RhbGwnXSA9ICcmQXJpbmc7IGZqZXJuZSBkZW5uZSBtb2R1bGVuIGthbiBza2FkZSBvcHBmJm9zbGFzaDtyc2VsZW4gb2cgZnVua3Nqb25hbGl0ZXRlbiBwJmFyaW5nOyBkaXR0IG5ldHRzdGVkLiBFciBkdSBzaWtrZXIgcCZhcmluZzsgYXQgZHUgdmlsIGZvcnRzZXR0ZSBhdmluc3RhbGxhc2pvbmVuPyc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE3OTA1MjYyMzA4NDExMDEwMC4xMjEwNDIzNTc3LjEyMzM1MTQ4MzYuMTIzMzUyMDUyMy44NzknOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjMyODMxNjk5Ljg0OC4yNS51dG1jc3I9Zm9ydW0uY21zbWFkZXNpbXBsZS5vcmd8dXRtY2NuPShyZWZlcnJhbCl8dXRtY21kPXJlZmVycmFsfHV0bWNjdD0vaW5kZXgucGhwJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4yLjEwLjEyMzM1MjA1MjMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2NoYW5nZWxvZyddID0gJ1RFIERPRU4nOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnSlF1ZXJ5IFRvb2xib3ggJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBpcyB0aGlzPzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyA8YSBocmVmPSJodHRwOi8vd3d3LmpxdWVyeS5jb20iPmpRdWVyeTwvYT4gZnVuY3Rpb25hbGl0eSB0byBDTVMgTWFkZSBTaW1wbGUgcGFnZSwgYW5kIG1vZHVsZXMgKGV2ZW4gaW4gdGhlIGFkbWluIHNlY3Rpb24pLCBjb252ZW5pZW50bHkgYW5kIGVhc2lseS4gIEl0IHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgbGlrZSBhamF4LCB0b29sdGlwcywgc29ydGFibGUgdGFibGVzLCBhbmQgYW55dGhpbmcgZWxzZSB5b3UgY2FuIGRvIHdpdGgganF1ZXJ5IGluIG9uZSBuaWNlLCBlYXN5IHRvIHVzZSBwYWNrYWdlLjwvcD4NCjxoMz5Ib3cgZG8gSSB1c2UgaXQ/PC9oMz4NCjxwPlRvIGVuYWJsZSBKUXVlcnlUb29scyB5b3UgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IG9uZSB0YWcgaW4gdGhlIGhlYWQgc2VjdGlvbiBvZiB5b3VyIHBhZ2UgdGVtcGxhdGUsIG9yIGluIHRoZSBtZXRhZGF0YSBzZWN0aW9uIG9mIGVhY2ggcmVxdWlyZWQgcGFnZS4gIFVzZSB0aGlzIHRhZzogPGNvZGU+e0pRdWVyeVRvb2xzIGFjdGlvbj1pbmNqc308L2NvZGU+PC9wPg0KPHA+QWRkaXRpb25hbGx5LCB5b3UgY2FuIGluY2x1ZGUgYSBzZWNvbmQgdGFnIHRvIGluY2x1ZGUgdGhlIGphdmFzY3JpcHQgdGhhdCBwcm92aWRlcyB0aGUgZGVmYXVsdCByZWFkeSBmdW5jdGlvbi4gPGNvZGU+e0pRdWVyeVRvb2xzIGFjdGlvbj1yZWFkeX08L2NvZGU+DQo8aDM+V2hhdCBqcXVlcnkgdmVyc2lvbiBpcyBpbmNsdWRlZD88L2gzPg0KPHA+Q3VycmVudGx5IEpRdWVyeVRvb2xzIHVzZXMganF1ZXJ5IDEuMi41PC9wPg0KPGgzPldoYXQgcGx1Z2lucyBhcmUgaW5jbHVkZWQ8L2gzPg0KPHVsPg0KICA8bGk+ZGltZW5zaW9uczwvbGk+DQogIDxsaT5ob3ZlckludGVudDwvbGk+DQogIDxsaT5tZXRhZGF0YTwvbGk+DQogIDxsaT50YWJsZXNvcnRlcg0KPHA+LS0gVG8gYWxsb3cgc29ydGluZyB5b3VyIHRhYmxlcywgZ2l2ZSB0aGUgZm9sbHdpbmcgY2xhc3NlcyB0byB0aGUgdGFibGUgZGVmaW5pdGlvbjogY21zX3NvcnRhYmxlIHRhYmxlc29ydGVyLiBpLmU6IDxjb2RlPjx0YWJsZSBjbGFzcz0mcXVvdDtjbXNfc29ydGFibGUgdGFibGVzb3J0ZXImcXVvdDs+Li4uPC90YWJsZT48L2NvZGU+PC9wPg0KICA8L2xpPg0KICA8bGk+Y2x1ZXRpcDwvbGk+DQogIDxsaT5mb3JtPC9saT4NCjwvdWw+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwmIzAzOTtzDQptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2NhbGd1eTEwMDAuY29tIj5jYWxndXkxMDAwLmNvbTwvYT4uPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4NCjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPg0KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICANCjwvdWw+DQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPjxjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnPjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPg0KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkDQphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUNCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiANCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPg0KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQpidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0ENCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0EgdG9vbGJveCBvZiBKcXVlcnkgdXRpbGl0aWVzIHRvIGFpZGUgaW4gY3JlYXRpbmcgZHluYW1pYyBhbmQgZmFuY3kgQ01TIE1hZGUgU2ltcGxlIG1vZHVsZXMgYW5kIHdlYnNpdGVzJzsKJGxhbmdbJ3BhcmFtX2FjdGlvbiddID0gJ1NwZWNpZnkgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWQuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOjx1bD48bGk+aW5janMgLSBJbmNsdWRlIHJlcXVpcmVkIGphdmFzY3JpcHQgZmlsZXMuPC9saT48bGk+cmVhZHkgLSBPdXRwdXQgZGVmYXVsdCByZWFkeSBmdW5jdGlvbi48L2xpPjwvdWw+JzsKJGxhbmdbJ3BhcmFtX2V4Y2x1ZGUnXSA9ICdBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGluY2pzIGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGV4Y2x1ZGluZyBjZXJ0YWluIGpxdWVyeSBwbHVnaW5zIGZyb20gdGhlIG91dHB1dCBnZW5lcmF0ZWQuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOiB0YWJsZXNvcnRlcixjbHVldGlwLGZvcm0uJzsKJGxhbmdbJ3BhcmFtX2luY2x1ZGUnXSA9ICdBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGluY2pzIGFjdGlvbiwgdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIGV4cGxpY2l0bHkgaW5jbHVkaW5nIGNlcnRhaW4ganF1ZXJ5IHBsdWdpbnMgd2hpbHN0IGV4Y2x1ZGluZyBhbGwgb3RoZXJzLiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCB0aGUgZXhjbHVkZSBwYXJhbWV0ZXIgd2lsbCBiZSBpZ25vcmVkLiAgUG9zc2libGUgdmFsdWVzIGFyZSB0YWJsZXNvcnRlcixjbHVldGlwLGZvcm0uJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnRGUgSlF1ZXJ5VG9vbHMgbW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnRGUgSlF1ZXJ5VG9vbHMgbW9kdWxlIGlzIHZlcndpamRlcmQnOwokbGFuZ1sncHJldW5pbnN0YWxsJ10gPSAnSGV0IHZlcndpamRlcmVuIHZhbiBkZXplIG1vZHVsZSBrYW4gZGUgdmVydG9uaW5nIGVuIGRlIGZ1bmN0aW9uYWxpdGVpdCB2YW4gdXcgd2Vic2l0ZSBzY2hhZGUgdG9lIGJyZW5nZW4uIFdpbHQgdSB6ZWtlciBkYXQgdSB3aWx0IGRvb3JnYWFuPyc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjc5OTk2OTA1MC4xMjI1MDI0MDU2LjEyMzQ4NzMwNzMuMTIzNDg3NTA2Mi4xMyc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyMzIzNTU3ODkuNS4zLnV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY249KHJlZmVycmFsKXx1dG1jbWQ9cmVmZXJyYWx8dXRtY2N0PS9pbmRleC5waHAvdG9waWMsMjk4NjYuMC5odG1sJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2NoYW5nZWxvZyddID0gJ0F0dCBnJm91bWw7cmEnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnSlF1ZXJ5LVRvb2xib3gnOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IGlzIHRoaXM/PC9oMz4NCjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIDxhIGhyZWY9Imh0dHA6Ly93d3cuanF1ZXJ5LmNvbSI+alF1ZXJ5PC9hPiBmdW5jdGlvbmFsaXR5IHRvIENNUyBNYWRlIFNpbXBsZSBwYWdlLCBhbmQgbW9kdWxlcyAoZXZlbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiksIGNvbnZlbmllbnRseSBhbmQgZWFzaWx5LiAgSXQgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBsaWtlIGFqYXgsIHRvb2x0aXBzLCBzb3J0YWJsZSB0YWJsZXMsIGFuZCBhbnl0aGluZyBlbHNlIHlvdSBjYW4gZG8gd2l0aCBqcXVlcnkgaW4gb25lIG5pY2UsIGVhc3kgdG8gdXNlIHBhY2thZ2UuPC9wPg0KPGgzPkhvdyBkbyBJIHVzZSBpdD88L2gzPg0KPHA+VG8gZW5hYmxlIEpRdWVyeVRvb2xzIHlvdSBtdXN0IGluY2x1ZGUgYXQgbGVhc3Qgb25lIHRhZyBpbiB0aGUgaGVhZCBzZWN0aW9uIG9mIHlvdXIgcGFnZSB0ZW1wbGF0ZSwgb3IgaW4gdGhlIG1ldGFkYXRhIHNlY3Rpb24gb2YgZWFjaCByZXF1aXJlZCBwYWdlLiAgVXNlIHRoaXMgdGFnOiA8Y29kZT57SlF1ZXJ5VG9vbHMgYWN0aW9uPWluY2pzfTwvY29kZT48L3A+DQo8cD5BZGRpdGlvbmFsbHksIHlvdSBjYW4gaW5jbHVkZSBhIHNlY29uZCB0YWcgdG8gaW5jbHVkZSB0aGUgamF2YXNjcmlwdCB0aGF0IHByb3ZpZGVzIHRoZSBkZWZhdWx0IHJlYWR5IGZ1bmN0aW9uLiA8Y29kZT57SlF1ZXJ5VG9vbHMgYWN0aW9uPXJlYWR5fTwvY29kZT4NCjxoMz5XaGF0IGpxdWVyeSB2ZXJzaW9uIGlzIGluY2x1ZGVkPzwvaDM+DQo8cD5DdXJyZW50bHkgSlF1ZXJ5VG9vbHMgdXNlcyBqcXVlcnkgMS4yLjU8L3A+DQo8aDM+V2hhdCBwbHVnaW5zIGFyZSBpbmNsdWRlZDwvaDM+DQo8dWw+DQogIDxsaT5kaW1lbnNpb25zPC9saT4NCiAgPGxpPmhvdmVySW50ZW50PC9saT4NCiAgPGxpPm1ldGFkYXRhPC9saT4NCiAgPGxpPnRhYmxlc29ydGVyDQo8cD4tLSBUbyBhbGxvdyBzb3J0aW5nIHlvdXIgdGFibGVzLCBnaXZlIHRoZSBmb2xsd2luZyBjbGFzc2VzIHRvIHRoZSB0YWJsZSBkZWZpbml0aW9uOiBjbXNfc29ydGFibGUgdGFibGVzb3J0ZXIuIGkuZTogPGNvZGU+PHRhYmxlIGNsYXNzPSZxdW90O2Ntc19zb3J0YWJsZSB0YWJsZXNvcnRlciZxdW90Oz4uLi48L3RhYmxlPjwvY29kZT48L3A+DQogIDwvbGk+DQogIDxsaT5jbHVldGlwPC9saT4NCiAgPGxpPmZvcm08L2xpPg0KPC91bD4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCjx1bD4NCjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgY2FsZ3V5XCYjMDM5O3MNCm1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vY2FsZ3V5MTAwMC5jb20iPmNhbGd1eTEwMDAuY29tPC9hPi48L2xpPg0KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+PGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmc+PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQ0KaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUw0KTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIA0Kc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+DQo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQ0KT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+JzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnRW4gdmVya3R5Z3NsJmFyaW5nO2RhIHRpbGwgSnF1ZXJ5IGYmb3VtbDtyIGF0dCBza2FwYSBkeW5hbWlza2Egb2NoIHZhY2tyYSBDTVMgTWFkZSBTaW1wbGUgbW9kdWxlciBvY2ggd2ViYnBsYXRzZXInOwokbGFuZ1sncGFyYW1fYWN0aW9uJ10gPSAnU3BlY2lmeSB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZC4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5pbmNqcyAtIEluY2x1ZGUgcmVxdWlyZWQgamF2YXNjcmlwdCBmaWxlcy48L2xpPjxsaT5yZWFkeSAtIE91dHB1dCBkZWZhdWx0IHJlYWR5IGZ1bmN0aW9uLjwvbGk+PC91bD4nOwokbGFuZ1sncGFyYW1fZXhjbHVkZSddID0gJ0FwcGxpY2FibGUgb25seSB0byB0aGUgaW5janMgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3MgZXhjbHVkaW5nIGNlcnRhaW4ganF1ZXJ5IHBsdWdpbnMgZnJvbSB0aGUgb3V0cHV0IGdlbmVyYXRlZC4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6IHRhYmxlc29ydGVyLGNsdWV0aXAsZm9ybS4nOwokbGFuZ1sncGFyYW1faW5jbHVkZSddID0gJ0FwcGxpY2FibGUgb25seSB0byB0aGUgaW5janMgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhbGxvd3MgZXhwbGljaXRseSBpbmNsdWRpbmcgY2VydGFpbiBqcXVlcnkgcGx1Z2lucyB3aGlsc3QgZXhjbHVkaW5nIGFsbCBvdGhlcnMuICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQsIHRoZSBleGNsdWRlIHBhcmFtZXRlciB3aWxsIGJlIGlnbm9yZWQuICBQb3NzaWJsZSB2YWx1ZXMgYXJlIHRhYmxlc29ydGVyLGNsdWV0aXAsZm9ybS4nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdKUXVlcnlUb29scyBtb2R1bGVuICZhdW1sO3IgbnUgaW5zdGFsbGVyYWQhJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdKUXVlcnlUb29scyBtb2R1bGVuICZhdW1sO3IgbnUgYXZpbnN0YWxsZXJhZCEnOwokbGFuZ1sncHJldW5pbnN0YWxsJ10gPSAnQm9ydHRhZ25pbmcgYXYgZGVuIGgmYXVtbDtyIG1vZHVsZW4ga2FuIHNrYWRhIHV0c2VlbmRldCBvY2ggZnVua3Rpb25hbGl0ZXRlbiBwJmFyaW5nOyBkaW4gd2ViYnBsYXRzLiAmQXVtbDtyIGR1IHMmYXVtbDtrZXIgcCZhcmluZzsgYXR0IGR1IHZpbGwgZm9ydHMmYXVtbDt0dGE/JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTg0NDg1NDMyNjU1NzM3ODAwMC4xMjIwNzEyMDE2LjEyMzM1MDUzMDMuMTIzMzUxMDkwNi4zMTQnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjMzNTA1MzAzLjMxMy4zMC51dG1jY249KHJlZmVycmFsKXx1dG1jc3I9Zm9ydW0uY21zbWFkZXNpbXBsZS5vcmd8dXRtY2N0PS98dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/jquery.cluetip.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogZ2xvYmFsICovCiNjbHVldGlwLWNsb3NlIGltZyB7CiAgYm9yZGVyOiAwOwp9CiNjbHVldGlwLXRpdGxlIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9CiNjbHVldGlwLXRpdGxlICNjbHVldGlwLWNsb3NlIHsKICBmbG9hdDogcmlnaHQ7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CiNjbHVldGlwLXdhaXRpbWFnZSB7CiAgd2lkdGg6IDQzcHg7CiAgaGVpZ2h0OiAxMXB4OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1ncy93YWl0LmdpZik7Cn0KLmNsdWV0aXAtYXJyb3dzIHsKICBkaXNwbGF5OiBub25lOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgbGVmdDogLTExcHg7CiAgaGVpZ2h0OiAyMnB4OwogIHdpZHRoOiAxMXB4OwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwp9CiNjbHVldGlwLWV4dHJhIHsKICBkaXNwbGF5OiBub25lOwp9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgPWNsdWV0aXBDbGFzczogJ2RlZmF1bHQnIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLmNsdWV0aXAtZGVmYXVsdCB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZDljMjsKfQouY2x1ZXRpcC1kZWZhdWx0ICNjbHVldGlwLW91dGVyIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWFyZ2luOiAwOwogIGJhY2tncm91bmQtY29sb3I6ICNkOWQ5YzI7Cn0KLmNsdWV0aXAtZGVmYXVsdCBoMyNjbHVldGlwLXRpdGxlIHsKICBtYXJnaW46IDAgMCA1cHg7CiAgcGFkZGluZzogOHB4IDEwcHggNHB4OwogIGZvbnQtc2l6ZTogMS4xZW07CiAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjODc4NzZhOwogIGNvbG9yOiAjZmZmOwp9Ci5jbHVldGlwLWRlZmF1bHQgI2NsdWV0aXAtdGl0bGUgYSB7CiAgY29sb3I6ICNkOWQ5YzI7CiAgZm9udC1zaXplOiAwLjk1ZW07Cn0gIAouY2x1ZXRpcC1kZWZhdWx0ICNjbHVldGlwLWlubmVyIHsKICBwYWRkaW5nOiAxMHB4Owp9Ci5jbHVldGlwLWRlZmF1bHQgZGl2I2NsdWV0aXAtY2xvc2UgeyAKICB0ZXh0LWFsaWduOiByaWdodDsKICBtYXJnaW46IDAgNXB4IDVweDsKICBjb2xvcjogIzkwMDsKfQoKLyogZGVmYXVsdCBhcnJvd3MgKi8KCi5jbHVlLXJpZ2h0LWRlZmF1bHQgLmNsdWV0aXAtYXJyb3dzIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1ncy9jbHVldGlwL2RhcnJvd2xlZnQuZ2lmKTsKfQouY2x1ZS1sZWZ0LWRlZmF1bHQgLmNsdWV0aXAtYXJyb3dzIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1ncy9jbHVldGlwL2RhcnJvd3JpZ2h0LmdpZik7CiAgbGVmdDogMTAwJTsKICBtYXJnaW4tcmlnaHQ6IC0xMXB4Owp9Ci5jbHVlLXRvcC1kZWZhdWx0IC5jbHVldGlwLWFycm93cyB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvY2x1ZXRpcC9kYXJyb3dkb3duLmdpZik7CiAgdG9wOiAxMDAlOwogIGxlZnQ6IDUwJTsKICBtYXJnaW4tbGVmdDogLTExcHg7CiAgaGVpZ2h0OiAxMXB4OwogIHdpZHRoOiAyMnB4OyAgCn0gIAouY2x1ZS1ib3R0b20tZGVmYXVsdCAuY2x1ZXRpcC1hcnJvd3MgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWdzL2NsdWV0aXAvZGFycm93dXAuZ2lmKTsKICB0b3A6IC0xMXB4OwogIGxlZnQ6IDUwJTsKICBtYXJnaW4tbGVmdDogLTExcHg7CiAgaGVpZ2h0OiAxMXB4OwogIHdpZHRoOiAyMnB4Owp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgID1jbHVldGlwQ2xhc3M6ICdqdGlwJwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwouY2x1ZXRpcC1qdGlwIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKfQouY2x1ZXRpcC1qdGlwICNjbHVldGlwLW91dGVyIHsKICBib3JkZXI6IDJweCBzb2xpZCAjY2NjOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwp9CgouY2x1ZXRpcC1qdGlwIGgzI2NsdWV0aXAtdGl0bGUgewogIG1hcmdpbjogMCAwIDVweDsKICBwYWRkaW5nOiAycHggNXB4OwogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LXdlaWdodDogbm9ybWFsOwogIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgY29sb3I6ICMzMzM7Cn0KCi5jbHVldGlwLWp0aXAgI2NsdWV0aXAtaW5uZXIgewogIHBhZGRpbmc6IDAgNXB4IDVweDsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cn0KLmNsdWV0aXAtanRpcCBkaXYjY2x1ZXRpcC1jbG9zZSB7IAogIHRleHQtYWxpZ246IHJpZ2h0OwogIG1hcmdpbjogMCA1cHggNXB4OwogIGNvbG9yOiAjOTAwOwp9CgovKiBqdGlwIGFycm93cyAqLwoKLmNsdWUtcmlnaHQtanRpcCAuY2x1ZXRpcC1hcnJvd3MgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWdzL2NsdWV0aXAvYXJyb3dsZWZ0LmdpZik7Cn0KLmNsdWUtbGVmdC1qdGlwIC5jbHVldGlwLWFycm93cyB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvY2x1ZXRpcC9hcnJvd3JpZ2h0LmdpZik7CiAgbGVmdDogMTAwJTsKICBtYXJnaW4tcmlnaHQ6IC0xMXB4Owp9Ci5jbHVlLXRvcC1qdGlwIC5jbHVldGlwLWFycm93cyB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvY2x1ZXRpcC9hcnJvd2Rvd24uZ2lmKTsKICB0b3A6IDEwMCU7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtMTFweDsKICBoZWlnaHQ6IDExcHg7CiAgd2lkdGg6IDIycHg7ICAKfSAgCi5jbHVlLWJvdHRvbS1qdGlwIC5jbHVldGlwLWFycm93cyB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvY2x1ZXRpcC9hcnJvd3VwLmdpZik7CiAgdG9wOiAtMTFweDsKICBsZWZ0OiA1MCU7CiAgbWFyZ2luLWxlZnQ6IC0xMXB4OwogIGhlaWdodDogMTFweDsKICB3aWR0aDogMjJweDsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICA9Y2x1ZXRpcENsYXNzOiAncm91bmRlZCcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi5jbHVldGlwLXJvdW5kZWQgewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWdzL2NsdWV0aXAvYmwuZ2lmKSBuby1yZXBlYXQgMCAxMDAlOwogIG1hcmdpbi10b3A6IDEwcHg7CiAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KCi5jbHVldGlwLXJvdW5kZWQgI2NsdWV0aXAtb3V0ZXIgewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHVybCguLi9pbWdzL2NsdWV0aXAvdGwuZ2lmKSBuby1yZXBlYXQgMCAwOwogIG1hcmdpbi10b3A6IC0xMnB4Owp9CgouY2x1ZXRpcC1yb3VuZGVkICNjbHVldGlwLXRpdGxlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBwYWRkaW5nOiAxMnB4IDEycHggMDsKICBtYXJnaW46IDAgLTEycHggMCAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQouY2x1ZXRpcC1yb3VuZGVkICNjbHVldGlwLWV4dHJhIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgZGlzcGxheTogYmxvY2s7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKC4uL2ltZ3MvY2x1ZXRpcC90ci5naWYpIG5vLXJlcGVhdCAxMDAlIDA7CiAgdG9wOiAwOwogIHJpZ2h0OiAwOwogIHdpZHRoOiAxMnB4OwogIGhlaWdodDogMzBweDsKICBtYXJnaW46IC0xMnB4IC0xMnB4IDAgMDsKfQouY2x1ZXRpcC1yb3VuZGVkICNjbHVldGlwLWlubmVyIHsKICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1ncy9jbHVldGlwL2JyLmdpZikgbm8tcmVwZWF0IDEwMCUgMTAwJTsKICBwYWRkaW5nOiA1cHggMTJweCAxMnB4OwogIG1hcmdpbjogLTE4cHggLTEycHggMCAwOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLmNsdWV0aXAtcm91bmRlZCBkaXYjY2x1ZXRpcC1jbG9zZSB7IAogIHRleHQtYWxpZ246IHJpZ2h0OwogIG1hcmdpbjogMCA1cHggNXB4OwogIGNvbG9yOiAjMDA5OwogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9Ci5jbHVldGlwLXJvdW5kZWQgZGl2I2NsdWV0aXAtY2xvc2UgYSB7CiAgY29sb3I6ICM3Nzc7Cn0KCi8qIHJvdW5kZWQgYXJyb3dzICovCgouY2x1ZS1yaWdodC1yb3VuZGVkIC5jbHVldGlwLWFycm93cyB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvY2x1ZXRpcC9yYXJyb3dsZWZ0LmdpZik7Cn0KLmNsdWUtbGVmdC1yb3VuZGVkIC5jbHVldGlwLWFycm93cyB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvY2x1ZXRpcC9yYXJyb3dyaWdodC5naWYpOwogIGxlZnQ6IDEwMCU7CiAgbWFyZ2luLWxlZnQ6IDEycHg7Cn0KLmNsdWUtdG9wLXJvdW5kZWQgLmNsdWV0aXAtYXJyb3dzIHsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1ncy9jbHVldGlwL3JhcnJvd2Rvd24uZ2lmKTsKICB0b3A6IDEwMCU7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtMTFweDsKICBoZWlnaHQ6IDExcHg7CiAgd2lkdGg6IDIycHg7ICAKfSAgCi5jbHVlLWJvdHRvbS1yb3VuZGVkIC5jbHVldGlwLWFycm93cyB7CiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvY2x1ZXRpcC9yYXJyb3d1cC5naWYpOwogIHRvcDogLTIzcHg7CiAgbGVmdDogNTAlOwogIG1hcmdpbi1sZWZ0OiAtMTFweDsKICBoZWlnaHQ6IDExcHg7CiAgd2lkdGg6IDIycHg7Cn0KCgoKLyogc3R1cGlkIElFNiBIYXNMYXlvdXQgaGFjayAqLwouY2x1ZXRpcC1yb3VuZGVkICNjbHVldGlwLXRpdGxlLAouY2x1ZXRpcC1yb3VuZGVkICNjbHVldGlwLWlubmVyIHsKICB6b29tOiAxOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/css/jquery.lightbox-0.5.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqDQogKiBqUXVlcnkgbGlnaHRCb3ggcGx1Z2luDQogKiBUaGlzIGpRdWVyeSBwbHVnaW4gd2FzIGluc3BpcmVkIGFuZCBiYXNlZCBvbiBMaWdodGJveCAyIGJ5IExva2VzaCBEaGFrYXIgKGh0dHA6Ly93d3cuaHVkZGxldG9nZXRoZXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Mi8pDQogKiBhbmQgYWRhcHRlZCB0byBtZSBmb3IgdXNlIGxpa2UgYSBwbHVnaW4gZnJvbSBqUXVlcnkuDQogKiBAbmFtZSBqcXVlcnktbGlnaHRib3gtMC41LmNzcw0KICogQGF1dGhvciBMZWFuZHJvIFZpZWlyYSBQaW5obyAtIGh0dHA6Ly9sZWFuZHJvdmllaXJhLmNvbQ0KICogQHZlcnNpb24gMC41DQogKiBAZGF0ZSBBcHJpbCAxMSwgMjAwOA0KICogQGNhdGVnb3J5IGpRdWVyeSBwbHVnaW4NCiAqIEBjb3B5cmlnaHQgKGMpIDIwMDggTGVhbmRybyBWaWVpcmEgUGluaG8gKGxlYW5kcm92aWVpcmEuY29tKQ0KICogQGxpY2Vuc2UgQ0MgQXR0cmlidXRpb24tTm8gRGVyaXZhdGl2ZSBXb3JrcyAyLjUgQnJhemlsIC0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmQvMi41L2JyL2RlZWQuZW5fVVMNCiAqIEBleGFtcGxlIFZpc2l0IGh0dHA6Ly9sZWFuZHJvdmllaXJhLmNvbS9wcm9qZWN0cy9qcXVlcnkvbGlnaHRib3gvIGZvciBtb3JlIGluZm9ybWF0aW9ucyBhYm91dCB0aGlzIGpRdWVyeSBwbHVnaW4NCiAqLw0KI2pxdWVyeS1vdmVybGF5IHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJdG9wOiAwOw0KCWxlZnQ6IDA7DQoJei1pbmRleDogOTA7DQoJd2lkdGg6IDEwMCU7DQoJaGVpZ2h0OiA1MDBweDsNCn0NCiNqcXVlcnktbGlnaHRib3ggew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDA7DQoJbGVmdDogMDsNCgl3aWR0aDogMTAwJTsNCgl6LWluZGV4OiAxMDA7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KCWxpbmUtaGVpZ2h0OiAwOw0KfQ0KI2pxdWVyeS1saWdodGJveCBhIGltZyB7IGJvcmRlcjogbm9uZTsgfQ0KI2xpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZS1ib3ggew0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KCXdpZHRoOiAyNTBweDsNCgloZWlnaHQ6IDI1MHB4Ow0KCW1hcmdpbjogMCBhdXRvOw0KfQ0KI2xpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZSB7IHBhZGRpbmc6IDEwcHg7IH0NCiNsaWdodGJveC1sb2FkaW5nIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJdG9wOiA0MCU7DQoJbGVmdDogMCU7DQoJaGVpZ2h0OiAyNSU7DQoJd2lkdGg6IDEwMCU7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KCWxpbmUtaGVpZ2h0OiAwOw0KfQ0KI2xpZ2h0Ym94LW5hdiB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCXRvcDogMDsNCglsZWZ0OiAwOw0KCWhlaWdodDogMTAwJTsNCgl3aWR0aDogMTAwJTsNCgl6LWluZGV4OiAxMDsNCn0NCiNsaWdodGJveC1jb250YWluZXItaW1hZ2UtYm94ID4gI2xpZ2h0Ym94LW5hdiB7IGxlZnQ6IDA7IH0NCiNsaWdodGJveC1uYXYgYSB7IG91dGxpbmU6IG5vbmU7fQ0KI2xpZ2h0Ym94LW5hdi1idG5QcmV2LCAjbGlnaHRib3gtbmF2LWJ0bk5leHQgew0KCXdpZHRoOiA0OSU7DQoJaGVpZ2h0OiAxMDAlOw0KCXpvb206IDE7DQoJZGlzcGxheTogYmxvY2s7DQp9DQojbGlnaHRib3gtbmF2LWJ0blByZXYgeyANCglsZWZ0OiAwOyANCglmbG9hdDogbGVmdDsNCn0NCiNsaWdodGJveC1uYXYtYnRuTmV4dCB7IA0KCXJpZ2h0OiAwOyANCglmbG9hdDogcmlnaHQ7DQp9DQojbGlnaHRib3gtY29udGFpbmVyLWltYWdlLWRhdGEtYm94IHsNCglmb250OiAxMHB4IFZlcmRhbmEsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KCW1hcmdpbjogMCBhdXRvOw0KCWxpbmUtaGVpZ2h0OiAxLjRlbTsNCglvdmVyZmxvdzogYXV0bzsNCgl3aWR0aDogMTAwJTsNCglwYWRkaW5nOiAwIDEwcHggMDsNCn0NCiNsaWdodGJveC1jb250YWluZXItaW1hZ2UtZGF0YSB7DQoJcGFkZGluZzogMCAxMHB4OyANCgljb2xvcjogIzY2NjsgDQp9DQojbGlnaHRib3gtY29udGFpbmVyLWltYWdlLWRhdGEgI2xpZ2h0Ym94LWltYWdlLWRldGFpbHMgeyANCgl3aWR0aDogNzAlOyANCglmbG9hdDogbGVmdDsgDQoJdGV4dC1hbGlnbjogbGVmdDsgDQp9CQ0KI2xpZ2h0Ym94LWltYWdlLWRldGFpbHMtY2FwdGlvbiB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9DQojbGlnaHRib3gtaW1hZ2UtZGV0YWlscy1jdXJyZW50TnVtYmVyIHsNCglkaXNwbGF5OiBibG9jazsgDQoJY2xlYXI6IGxlZnQ7IA0KCXBhZGRpbmctYm90dG9tOiAxLjBlbTsJDQp9CQkJDQojbGlnaHRib3gtc2VjTmF2LWJ0bkNsb3NlIHsNCgl3aWR0aDogNjZweDsgDQoJZmxvYXQ6IHJpZ2h0Ow0KCXBhZGRpbmctYm90dG9tOiAwLjdlbTsJDQp9]]></data>
	</file>
	<file>
	  <filename>/lib/css/JQueryTools.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHRhYmxlc29ydGVyICoqKioqKioqKioqKioqKiovDQoNCnRhYmxlLnRhYmxlc29ydGVyIHRoZWFkIHRyIHRoLCB0YWJsZS50YWJsZXNvcnRlciB0Zm9vdCB0ciB0aCB7DQoJcGFkZGluZzogNXB4IDBweCA1cHggMjBweDsNCiAJYmFja2dyb3VuZDogIzI0MzEzNTsNCgl0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQp0YWJsZS50YWJsZXNvcnRlciB0aGVhZCB0ciAuaGVhZGVyIHsNCg0KCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWdzL2JnLmdpZik7DQoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgbGVmdDsNCgljb2xvcjojZmZmOw0KCWN1cnNvcjogcG9pbnRlcjsNCn0NCnRhYmxlLnRhYmxlc29ydGVyIHRib2R5IHRyLm9kZCB0ZCB7DQoJLyoqDQoJICogYmFja2dyb3VuZDogI0RCRTZFODsNCgkgKi8NCgl9DQoNCnRhYmxlLnRhYmxlc29ydGVyIHRoZWFkIHRyIC5oZWFkZXJTb3J0VXAgew0KDQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltZ3MvYXNjLmdpZik7DQp9DQoNCnRhYmxlLnRhYmxlc29ydGVyIHRoZWFkIHRyIC5oZWFkZXJTb3J0RG93biB7DQoNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1ncy9kZXNjLmdpZik7DQp9DQovKioNCnRhYmxlLnRhYmxlc29ydGVyIHRoZWFkIHRyIC5oZWFkZXJTb3J0RG93biwgdGFibGUudGFibGVzb3J0ZXIgdGhlYWQgdHIgLmhlYWRlclNvcnRVcCB7DQoJDQoJICogYmFja2dyb3VuZC1jb2xvcjogIzMzNDU0QTsNCgkNCgkNCn0gKi8NCg0KDQp0YWJsZS50YWJsZXNvcnRlciB0Ym9keSB0ZCBpbWcgew0KICAgIG1hcmdpbi1sZWZ0OiAtMTVweDsNCn0NCg0KDQp0YWJsZS50YWJsZXNvcnRlciB0Ym9keSB0ci5vZGQgdGQsIHRhYmxlLnRhYmxlc29ydGVyIHRib2R5IHRyLmV2ZW4gdGQgIHsNCglwYWRkaW5nLWxlZnQ6MjBweDsNCgkNCn0NCnRhYmxlLnRhYmxlc29ydGVyIHRoLnBhZ2VpY29uICB7DQoJDQoJd2lkdGg6IDEwcHg7DQp9DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIG5leHQgY3NzIHRvb2wgKioqKioqKioqKioqKioqKi8=]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/imgs/asc.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFQAEAIAAAP///////yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAwNy0wMS0wNFQyMjoxMDozMVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAwOS0wMS0xN1QxODozMjoxOFo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQBBwABACwAAAAAFQAEAAACDYwfoAvoz9qbZ9FrJC0AOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/bg.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFQAJAIAAAP///////yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAwNy0wMS0wNFQyMjoxMDozMVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAwOS0wMS0xN1QxODozMjoyMVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQBBwABACwAAAAAFQAJAAACF4yPgMsJ2mJ4VDKKrd4GVz5lYPeMiVUAADs=]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/arrowdown.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFgALAIABAMzMzP///yH5BAEAAAEALAAAAAAWAAsAAAIchI+pEOsZ4nuxTlXzPbnvDk7g6IwmZp5cmhpsAQA7]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/arrowleft.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCwAWAIABAMzMzP///yH5BAEAAAEALAAAAAALABYAAAIjjI+AC7rWHIsvtmmTvXBzT4HiKAZkBx6l6mGUK2lcNdNPUgAAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/arrowright.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCwAWAIABAMzMzP///yH5BAEAAAEALAAAAAALABYAAAIkRI4JlrqN1oNyutqqvDrqHXyYSJZkeKKf17Ggy3CQOqN1eAcFADs=]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/arrowup.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFgALAPcBAMzMzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAWAAsAAAgyAAMIHEgQAACCCBMWNHhQocMADBk+TBgx4sSBFStezJjxIUeOCj9+RChSJMaSJlGiDAgAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/bl.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhzwPJA/eVAKzG16zI2qm3vaa7xqa2vq3J26nBzazI2avE06/K27XO3ejv8rnR38TY4rHM3L7V4KS3wMnb46zJ2qW3wMrc5K3I2b/V4bLN3K/L26vD07rS38TZ4rjQ3rbP3qq4vazF067K27XP3cXZ46rBzbDL3LLM3Ke7x+jv8ePp666/yLTL2fT296zI2K/J2rrM1LXHz8HV3rjL1bPGz6i3vrLCyPj5+rHL2rLJ1aq5v8jZ4MrW2q28w8fW3LbN2bXDyK/I2Ke3vrfQ3qq3vb7Q19bc3rrGy8rb4rHJ2LPN3crb4a+7wPP19qvBzrDH1efu8ai8x7S/w7nO2qW4wK7I2bHFz6y/yKa4wai/zMXQ1Ke5wbXK1sTY4avF1rzP2LvT37DAyP7+/qi5wam4vsDT3LnQ3LzM0q7Dzsvc5L3L0MbY4fX4+K3CzrTO3aa3vr3S3bbO26a6xqW2vbnHzcDJzarD0q3F067H16i6wrTM28PU2+rv8ay6wK3K263F1Kq+x63H17rGysDQ1sDW4bK/xK67wOft8MXX38XT2bvS3+bt773T3s3V2MHW4au4vau7w/Hz9LfHzqi9x6nAza++xKvI2v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJUALAAAAADPA8kDAAj/ABecEWFBQ4cLGAoEoMSwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzZscFFDZYYBCiRIICNoMKHUq0qNGjSJMqXcq0qdOnUKN+xNngAQMFDn5K3cq1q9evYMOKHUu2rNmzERdEqHo1K1C0cOPKnUu3rt27ePOaVcsWq1a9gAMLHky4sOHDiI3yter3beLHkCNLnky5suWli9v+vcy5s+fPoEOLBpy58ejTqFOrXs26NcnSbl3Lnk27tu3bg2Fvxs27t+/fwIPH1O1YuPHjyJMr9018ufPn0KNLh9x8uvXr2LNrl1p9u/fv4MOL/x/Zfbz58+jTay+vvr379/Bts49Pv779+5Ln49/Pv7//s/r9J+CABBZYVIAGJqjgggyGhGCDEEYoIYQPTmjhhRjeV2GGHHboIXgbfijiiCQmF2KJKKaoomwnrujiizBe1mKMNNZoY2Az3qjjjjySlWOPQAYpJGZrMRbbkEgmqSSRfR255JNQRgnTj1JWaeWVEFGJ5ZZcLqlll2CGueOXYpZp5opknqnmmh2myeabcDboZpx01vnfnHbmqWd8eO7p55/j9QnooIReJ2ihiCZqYpGaFafoo5B6d2iklFba2qSWZqopaJhu6umn+TFqGqiklupap6amqmpdqK7q6qs+iv/qJKy01lpYq7bmqmtSuO7q66819QrssMSuJGyxyCbroKy7Kevss0MdC+201DokbbXYPnttttwWu2234Pr6bbjk1jpuueiuem667JK6brvwavpuvPRGOm+9+CJ6b778/rlvvwDb+W/ABL85cMEIm3lwwgx3uXDDEFv5cMQUPzlxxRgPeXHGHPO4cccg1/hxyCS7OHLJKJd4csose7hyyzBf+HLMNFPIrKM15yzmzDr3PCDPPgfNH9BCF10f0UYn7R7SSjd9HtNORw3izVJX7THVVmctMtZad20y116HrTLYYpftMtlmpy0z2mq3bXOTzbot94JQz203a3Xfrfdpee//7fdnff8tuGWBD254ZIUfrvhhiS/uuGCNPy45XpFPbvlclV+uOYBsb+75cpl/LrpXoY9uelSln646U6mv7vpRrb8uu1Cxz277TLXfrrtLue/ue0q9/y78a50Pb3yocON8/PLUFc/884QFD/30E0lP/fXWOo/99nJZzz313n8PffjiM09++cefj/7w6q//e/vu7w5//LfPT//s9t//ev76r85//6f7HwBHJ8ABfq6ABtwcAhN4uQUycHIOfODjIijBxVGwgoe7IAYHp8EN/q2DHtwbCEN4txGScG4mPKHbUqhCtbGwhWZ7IQzFJsMZeq2GNtQaDnNotR3yUGo+/KHT/4IoRKURsYhGOyIShabEJfqsiU7UGRSjWLMpUjFmVrxiy7KoxZRxsYsl+yIYQybGMXasjGbMGBrTWLE1sjFibnxjw+Iox4TRsY4FuyMeA6bHPfarj37MFyADWa9BEjJehjxkuxKpyHQxspHleiQkwyXJSXarkpbMFiYzWa1NcnJanvyktrQnyvuFspTJOiUqvUXKVa5Pla4EFixjKa5W0vJ7s7xlrnKpS3PZspfX4yUwXyXMYarrl8Z8XjGTaaplMtNdyHym8ZwpTU9Rs5ryiiY2fXfNbVaqm960lzbDaTtwklNR5jynvsapTtels52Deic8/cXOeZpOnvbUEz7zKf+wevLTc/v8Z5wCKlCD+bOgliMoQtWk0IUq7KAOdVxDIxqmiVLUYRC9qOEsqlEscbSjEssoSP320ZFGqaQmtZhIU2o3lLI0SS59qcZWKtO2xbSmQLopTq+WvJ0ClKY+pSFQg3rDoRJVh0Y9ag+TqlQgMrWpQ3wqVI0o1akmsapWZSJWs/rErXJVil79ahXDKlYskrWsWzwrWr2o1rWGsa1uJSNc43rGudJVjXa9axvzqlc48rWvc/wrYO0o2MHmsbCG5SNiE/vHxTJWkI59bCEjK1lEUrayi7wsZh2p2c1GsrOepSRoQ3vJ0ZJWk6Y9bSdTq1pQsra1o+wpbJum09n/+qe2th3aa3PLStnyVqu+/W1XgytcsBK3uGM9LnLNqtzlprW5zmUrdKP71ulSV67WvW5ds6tdvHK3u3v9Lnj9Kt7xBra85iUsetN72PWyV7HufW9j4ytfyNK3vpO9L34tq9/9Zra//uUsgAP82QETWLQGPnBpE6xg1DK4wat9MIRdK+EJx9ZIcbPwfDGsPA3bl8Mebi+IQwzfEZN4w406McBwq+LjsLjFwnkxjIEj4xkzZ7c23lONc4ybHfNYPjj+cZ18LOTZELnIpwoykg1a4SW76shOVg2Uo4yaKVN5NFa+cmiyrGXAKbnLFf0ymDHa5DFbU8xm9iia0xzSMrPZ/1JcfvNk4ixnxK25zip1M54fRec9I6bPfjYMoAMdvTsTWkiDPjSODK3oHiW60Xl5NKTvIulJs4rRlrZRpTPdPUxzOkab/jRaQi3qvXi61Gg6NapTROpVi6XVrgYLrGNNOlXTWkSzvvVWcq1r1Nm61xziNbCdIuxhs+7XxrZQsZPNK2QzO0LLfrZinC1tBkW72tGiNrYTdO1t26Tb3qYJuMMtk3GTe0raPved0q3u/pi73Sx5N7xVIu95o6Te9jYJvvNNPD3zO0j7/vey/C1wnpq44HQKOMJvwu6Ft0fhDtcIxCOOkYlT3CIWvzhFMq5xiXC841lqOMjD8/GRN6TkJv+nBMpNvvKRtxzkL+94zDU+84vXnOI3j3jOHb7zhfcc4T8veNAFPvR/F53fR8930u299Hk3Hd5Pb3fU1T31c1ed3FcPd9a9vfVtdx3bX6922KU99meXndlnT3bajb32Ybcd2G/vddx1Pfdb153Wd4913l2991X3HdV/L3XgRT34Txee04fPdOItvfhJNx7Sj2905BU9+UNXntCXD3Tm/bz5PXcez5+vc+jlPPo3l57Np09z6s28+jG3Hsyv73LstTz7K9eeyrePcu6dvPsl9x7Jvy9y8IU8/B8Xn8fHz3Hybbz8GTcfxs9vcfRVPP0TV5/E1w9x9j28fQ1338Lfn3D/+CE8/gaXX8HnP3D6Cbz+ALffv+/fb/zxO//61l++939v/tm7//T237z/N14BCF4D2F0FqF0HeF0JSF0LGF0N6FwPuFwRiFwTWFwVKFwX+FsZyFsbmFsdaFsfOFshCFsj2FolqFoneFopSForGFot6FkvuFkxiFkzWFk1KFk3+Fg5yFg7mFg9aFg/OFhBCFhD2FdFqFdHeFdJSFdLGFdN6FZPuFZRiFZTWFZVKFZX+FVZyFVbmFVdaFVfOFVhCFVj2FRlqFRneFRpSFRrGFRt6FNvuFNxiFNzWFN1KFN3+FJ5yFJ7mFJ9aFJ/OFKBCFKD2FGFqFGHeFGJSFGLGFGN/+hQj7hQkYhQk1hQlShQl/hPmchPm5hPnWhPnzhPoQhPo9hOpahOp3hOqUhOqxhOrehNr7hNsYhNs1hNtShNt/hMuchMu5hMvWhMvzhMwQhMw9hLxahLx3hLyUhLyxhLzehKz7hK0YhK01hK1ShK1/hJ2chJ25hJ3WhJ3zhJ4QhJ49hI5ahI53hI6UhI6xhI7ehH77hH8YhH81hH9ShH9/hG+chG+5hG/WhG/zhGAQlGA9lFBalFB3lFCUlFCxlFDelED7lEEYlEE1lEFSlEF/lDGclDG5lDHWlDHzlDIQlDI9lCJalCJ3lCKUlCKxlCLelBL7lBMYlBM1lBNSlBN//5QDnJQDuZQD1pQD85QEEJQEPZP0WpP0dpSiKXctuRlPTjlPEDle4jla+0lEyZHVSJPllZPlspPl2JS1Z5lYYSlmI5HV/JPWe5PWmJPWsZTGRZltHRluDzlnD5HHI5PXc5PnRZl6Czl3y5KAT3l8Hml4JpHHmpTIRZmMFxmOaTmIr5G4y5PJGZPo75mL0xmdNUmZbZY5q5mUAWmJ75NgcXmojWmaTJIqZ5mpeSmqq5GpjJPqzZmqnxmsJDm+8Tm7LJN7iZm6Jhm9y0m7zJKcAZnJ7hm/IznMTJGcapO8tZP8iZnITznNBJGc1ZTtI5ncgzmtj5NaC5nfhRnfhznd7/mRjgKTvluT/iOZ6Mk57qeSvs2Z658Z7wuWjdOZ/vcZ7uJJ/2GWn6uZ+U1p/+eWn1GaDogZ/+A6AE2mkDmqCBgqAMOmoO+qCmtqAS+h0GqjoXGkARWqFjkaH3tKEcGhYeSkAgGqJfMaKig6IHVKIm2hUq+lMU2qJjGaMyapYsWqO+RqM4Ch0vqkA3uqPE9qNAemw6OqTK0aOag6QNJKRG2mxF2qQuxqRQOm1POqWLKaVWmm1VmqU3tqVcyhtKmlBY+qXBMqZkijtmeqbDkaZq+hJhCkFs2qYt8aaSQ6cTFKdyaix4mqfAs6d8ehJ2KlF++qclEagWNKiESh6ImqgD/6edjJoehqo4kZpBi/qoHjGpG1WplsoRmMpBmrqpEvepoFpxojqqGFeqprpxqJqqHreqrBpyXvqqndGpgkOrH+SqsnpyuJqrKreruWqrJOWrsgqsIiSsr0qseoOsJWSsrKqsLcWsqeqsKAStpiqtcmOtK0Sto4qtNqWtoMqtLuStmwquaUOuMSSulmquZaOuQhWrvFoZ7Bo28VpU7vquc4aujzqvXaOvSFWv9mpn/vqvj8GvWUOwSxWwAvtn+MqoBls1DetUCJuwgrawifqwUWOxURWxEltoGruxkEOxhIqxtAWyfyqyVNWxHksaJMunJps0LXtVKJuy/BmzMvufNP9bswLqqDiLHC9bND0LXDq7s4a5snn6s0FjtMMVtEJ7pTe7tHCBtD0DtcaltE7bpVRbtWBKtHIqtTnDtcl1tVh7G15LM2PLXGAbtrVRtjCjts91tmhrZFrbpmzLMnMrXW77tknWtHgronGrpnWLMn9bXXe7t67Zt2cauCSDuNg1uIQ7m4ZLpooLMpG7XYzbuLqpt5bLFZPLMZvrXZWbuVv2uF/auRhDuuH1uaDrZZibulBhuhTjuuSFuqyrnKLLpbALMbd7XrI7u9G5urxLpLv7u/fqu8LrpMFbvM1DvMhLpce7vAqrvM6rpc0bve4JvdT7bbWbpbnLMNurXtN7vR//a73gi6biO75rWr7m66bZa6XdizDtK2Iplr6hi77yG2/rO6XvSzD5W2LxW7/Feb9QShXf6791cQI5wRg+0WEELBknEAEEoQEhgBAKscCc4QRG0AAFcRAJsRAUbBmFkARbIAheEARIQAJ8IAEdbBmJkANpwAiIwAFs4AAgMMEpPBl6wAOGAAOKwAEKcAEkMMMSEMQSEABEXMRGfMRInMRKvMRM3MRO/MRQHMVSPMVUXMVWfMVYnMVavMVc3MVe/MVgHMZiPMZkXMZmfMZonMZqvMZs3MZNLMRqcAh5MAZuQAZvgAc20AJTUAF8fAB+/MeAHMiCPMiEXMiGfMiInMiK/7zIjNzIjvzIkBzJkjzJlFzJlnzJmJzJmrzJnNzJnvzJoBzKojzKpFzKpnzKiVwBLFAJOhAIQ9AFUdADKnAEP2AHfwAAuJzLurzLvNzLvvzLwBzMwjzMxFzMxnzMyJzMyrzMzNzMzvzM0BzN0jzN1FzN1nzN2JzN2rzN3NzN3vzN4BzOxswFlYACaFAGLhADWnADTdAHdfABH4AA8jzP9FzP9nzP+JzP+rzP/NzP/vzPAB3QAj3QBF3QBn3QCJ3QCr3QDN3QDv3QEB3REj3RFF3RFn3RGJ3RGr3R/JwBHk0HlQAGWCAHkPACMkAFZrAGTDACI2AALv3SMB3TMj3TNP9d0zZ90zid0zq90zzd0z7900Ad1EI91ERd1EZ91Eid1Eq91Ezd1E791FAd1VI91VRd1VZ91TotCVdQCZWwAkXgAzTwBSlQBX4QCU9gAiYwAGq91mzd1m791nAd13I913Rd13Z913id13q913zd137914Ad2II92IRd2IZ92Iid2Iq92Izd2I792JAd2ZI92XYNB1xdCY8ACIMwCTvgCHcQBllgBRMw2hMAAaZ92qid2qq92qzd2q792rAd27I927Rd27Z927id27q927zd277928Ad3MI93MRd3MZ93Mid3Mq93Mzd3M793KtN2hMgBZddCTWwCEpACHuAA2IwA0Ca0AYEEN7iPd7kXd7mfd7ond7qvd7s3d7u/d7wHd/yPd/0Xd/2fd/4nd/6vd/83d/+/d8AHuACPuAEXuAGfuAInuAKzt5xQADVzdVLQARzAAWN4AEeIAAYnuEavuEc3uEe/uEgHuIiPuIkXuImfuIonuIqvuIs3uIu/uIwHuMyPuM0XuM2fuM4nuM6vuM83uM+/uNAHuQlLgQBAQA7]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/bl.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAA88AAAPJCAMAAAAbDOrsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcJQTFRFrMbXrMjaqbe9prvGpra+rcnbqcHNrMjZq8TTr8rbtc7d6O/yudHfxNjisczcvtXgpLfAydvjrMnapbfAytzkrcjZv9Xhss3cr8vbq8PTutLfxNniuNDets/eqri9rMXTrsrbtc/dxdnjqsHNsMvcsszcp7vH6O/x4+nrrr/ItMvZ9Pb3rMjYr8nauszUtcfPwdXeuMvVs8bPqLe+ssLI+Pn6scvassnVqrm/yNngytbarbzDx9bcts3ZtcPIr8jYp7e+t9Deqre9vtDX1tzeusbLytviscnYs83dytvhr7vA8/X2q8HOsMfV5+7xqLzHtL/Duc7apbjArsjZscXPrL/IprjBqL/MxdDUp7nBtcrWxNjhq8XWvM/Yu9PfsMDI/v7+qLnBqbi+wNPcudDcvMzSrsPOy9zkvcvQxtjh9fj4rcLOtM7dpre+vdLdts7bprrGpba9ucfNwMnNqsPSrcXTrsfXqLrCtMzbw9Tb6u/xrLrArcrbrcXUqr7HrcfXusbKwNDWwNbhsr/ErrvA5+3wxdffxdPZu9Lf5u3vvdPezdXYwdbhq7i9q7vD8fP0t8fOqL3HqcDNr77Eq8ja////LL4G4QAAAJZ0Uk5T//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AaRLOegAACStJREFUeNrs1QVyFFEARdEeyCAxSBjJTFxxd3d3d5fg7i7BXf5+6bAKftc5S3hVt15SN9hTqraXW/K5P0DckrpCa6m+u39s3haQgZ4bxtXXNuoZstBzk55Bz4CeAT0DegY9A3oG9AzoGdAz6BnQM6BnQM+gZ0DPgJ4BPQN6Bj0Degb0DOgZ9Kxn0DOgZ0DPgJ5Bz4CeAT0Degb0DHoG9AzoGdAz6BnQM6BnQM+AnkHPgJ4BPQN6BvQMegb0DOgZ0DPoGdAzoGdAz4CeQc+AngE9A3oGPesZ9AzoGdAzoGfQM6BnQM+AngE9g54BPQN6BvQMegb0DOgZ0DOgZ9AzoGdAz4CeQc96Bj0Degb0DOgZ9AzoGdAzoGdAz6BnQM+AngE9g54BPQN6BvQM6Bn0DOgZ0DOgZ9CznkHPgJ4BPQN6Bj0Degb0DOgZ0DPoGdAzoGdAz6BnQM+AngE9A3oGPQN6BvQM6Bn0rGfQM6BnQM+AnkHPgJ4BPQN6BvQMegb0DOgZ0DPoGdAzoGdAz4CeQc+AngE9A3oGPesZ9AzoGdAzoGfQM6BnQM+AngE9g54BPQN6BvQMegb0DOgZ0DOgZ9AzoGdAz4CeAT2DngE9A3oG9Ax6BvQM6BnQM6Bn0DOgZ0DPgJ5Bz3oGPQN6BvQM6Bn0DOgZ0DOgZ0DPoGdAz4CeAT2DngE9A3oG9AzoGfQM6BnQM6Bn0LOeQc+AngE9A3oGPQN6BvQM6BnQM+gZ0DOgZ0DPoGdAz4CeAT0DegY9A3oG9AzoGfSsZ9AzoGdAz4CeQc+AngE9A3oG9Ax6BvQM6BnQM+gZ0DOgZ0DPgJ5Bz4CeAT0DegY96xn0DOgZ0DOgZ9AzoGdAz4CeAT2DngE9A3oG9Ax6BvQM6BnQM6Bn0DOgZ0DPgJ5Bz3oGPQN6BvQM6Bn0DOgZ0DOgZ0DPoGdAz4CeAT2DngE9A3oG9AzoGfQM6BnQM6BnQM+gZ0DPgJ4BPYOeAT0Degb0DOgZ9AzoGdAzoGfQs55Bz4CeAT0DegY9A3oG9AzoGdAz6BnQM6BnQM+gZ0DPgJ4BPQN6Bj0Degb0DOgZ9Kxn0DOgZ0DPgJ5Bz4CeAT0Degb0DHoG9AzoGdAz6BnQM6BnQM+AnkHPgJ4BPQN6Bj3rGfQM6BnQM6Bn0DOgZ0DPgJ4BPYOeAT0Degb0DHoG9AzoGdAzoGfQM6BnQM+AnkHPegY9A3oG9AzoGfQM6BnQM6BnQM+gZ0DPgJ4BPYOeAT0Degb0DOgZ9AzoGdAzoGfQs55Bz4CeAT0DegY9A3oG9AzoGdAz6BnQM6BnQM+gZ0DPgJ4BPQN6Bj0Degb0DOgZ0DPoGdAzoGdAz6BnQM+AngE9A3oGPQN6BvQM6Bn0rGfQM6BnQM+AnkHPgJ4BPQN6BvQMegb0DOgZ0DPoGdAzoGdAz4CeQc+AngE9A3oGPesZ9AzoGdAzoGfQM6BnQM+AngE9g54BPQN6BvQMegb0DOgZ0DOgZ9AzoGdAz4CeQc96Bj0Degb0DOgZ9AzoGdAzoGdAz6BnQM+AngE9g54BPQN6BvQM6Bn0DOgZ0DOgZ9CznkHPgJ4BPQN6Bj0Degb0DOgZ0DPoGdAzoGdAz6BnQM+AngE9A3oGPQN6BvQM6Bn0rGfQM6BnQM+AnkHPgJ4BPQN6BvQMegb0DOgZ0DPoGdAzoGdAz4CeQc+AngE9A3oG9Ax6BvQM6BnQM+gZ0DOgZ0DPgJ5Bz4CeAT0DegY96xn0DOgZ0DOgZ9AzoGdAz4CeAT2DngE9A3oG9Ax6BvQM6BnQM6Bn0DOgZ0DPgJ5Bz3oGPQN6BvQM6Bn0DOgZ0DOgZ0DPoGdAz4CeAT2DngE9A3oG9AzoGfQM6BnQM6Bn0LOeQc+AngE9A3oGPQN6BvQM6BnQM+gZ0DOgZ0DPoGdAz4CeAT0DegY9A3oG9AzoGfSsZ9AzoGdAz4CeQc+AngE9A3oG9Ax6BvQM6BnQM+gZ0DOgZ0DPgJ5Bz4CeAT0DegY96xn0DOgZ0DOgZ9AzoGdAz4CeAT2DngE9A3oG9Ax6BvQM6BnQM6Bn0DOgZ0DPgJ4BPYOeAT0Degb0DHoG9AzoGdAzoGfQM6BnQM+AnkHPegY9A3oG9AzoGfQM6BnQM6BnQM+gZ0DPgJ4BPYOeAT0Degb0DOgZ9AzoGdAzoGfQs55Bz4CeAT0DegY9A3oG9AzoGdAz6BnQM6BnQM+gZ0DPgJ4BPQN6Bj0Degb0DOgZ9Kxn0DOgZ0DPgJ5Bz4CeAT0Degb0DHoG9AzoGdAz6BnQM6BnQM+AnkHPgJ4BPQN6Bj3rGfQM6BnQM6Bn0DOgZ0DPgJ4BPYOeAT0Degb0DHoG9AzoGdAzoGfQM6BnQM+AnkHPegY9A3oG9AzoGfQM6BnQM6BnQM+gZ0DPgJ4BPYOeAT0Degb0DOgZ9AzoGdAzoGdAz6BnQM+AngE9g54BPQN6BvQM6Bn0DOgZ0DOgZ9CznkHPgJ4BPQN6Bj0Degb0DOgZ0DPoGdAzoGdAz6BnQM+AngE9A3oGPQN6BvQM6Bn0rGfQM6BnQM+AnkHPgJ4BPQN6BvQMegb0DOgZ0DPoGdAzoGdAz4CeQc+AngE9A3oGPesZ9AzoGdAzoGfQM6BnQM+AngE9g54BPQN6BvQMegb0DOgZ0DOgZ9AzoGdAz4CeQc96Bj0Degb0DOgZ9AzoGdAzoGdAz6BnQM+AngE9g54BPQN6BvQM6Bn0DOgZ0DOgZ9CznkHPgJ4BPQN6Bj0Degb0DOgZ0DPoGdAzoGdAz6BnQM+AngE9A3oGPQN6BvQM6BnQM+gZ+C97LugZstLzxEJr2nO/niELPTf1lKrd5ZZ8zhgQe887NjSUqu16hiz0/Hbz0dcnVm/qe9psDIi954+LL3350Ha1sctBQ/Q9P172btanttpyX1e+OZUD4pT2m1x+/+js9XM3Hi6YvrdYLI4GYlWcloQlr9Ye3718ysaV918kQMSOJWHSxfMzZh9ZuP3Zvc7OMUCkKpXK3SScOnT7x8w5+y5c2dbbOwqI1q+DSQhT16+Yd3Ly/uc/dw4MjASidTPtOXx/+eb30m8PTh8+MCE1HojPcLx7hnsO8z9vGXqy6MzcVddqgFjdqvnXcwhb193Z9bWjYwQQrzV/BRgAKUYs9eGcDMIAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/br.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhDADJA/eAAKzJ2qu+x6u4vKe2vaq4va7J2a7G1K7K26S2v67Dz6vI2aW1vaq3vKm3vau5v/7+/qzG16rE06W3wKW2v6q7wqW5w6a2vqrD0aW5xa3J2qzCzqa8yKzD0LzGyqe5w6rD0qq9xq7H167F06m/y6a8x6i5wazH16a4wK27wK3F0qnC0am3vLDH1LC7wKrBz8nR1OHm56zE06a6xKe+zKW4wKO2v6q4vKW1vq7H1azH2avG1azCzaq9x6y5v6W5xKS4wbjDxqi4v6u7w9bc3+Lm6KW4wrbBxazI2K3I2Ku4vbvFyaa2vam5wKi9yKi3va3H1qvI2Ke2vNDX2qjAzaa7x6rAzanBz6rF1ae9yazBzaq/y/Hz9Ky/yOPn6am5v6vBzqi+y63H16e9yqzG1KvF1P39/avD0am7xa26vqy5vqi6w6zI2ai/zae3vrDJ2Ki2vKa1vKm4vqi7xsbP0qm+yKe9yKq+x63Dzq/H1Ky6wKzI2q3K26q6wq/I2K/J2qvI2v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAIAALAAAAAAMAMkDAAj/AP8IBHDAjxsWCbgIQSHwD0E/ffAkCEAhT0MAeyDiuROAj0WBejJG5OixYUiNJD/+OTnSTkmQIje6VMlS5suVMe/MNJlzJ0yUPnECvVlTJ9GeR4fSRLpUKU+nP1smldqU6lOrUW1W1XqVa1ajW8F2Ffs1aFGzTMeihSoUa1uvb8nGXev27FS4dsPSxZu27F25edX+3Qu479zBiPUmFqy4MePHfh1HhnxYcmXKgSdrvrw5M+fPnkMbFs2WdN3RqEunPq26NevXfF3Hhl1Ydm3ahHMv7rx6tu/bv3VbNh18N+jewJMLx4x8OW/bzo9DN05cOfXm16cPx75dO3Pvz3Fn/xffnfx38+GLl1d/nn166+vht5f/Pnp1+9zn4wcvHX1/9//RF+B+/t03HoAGxkcggvnVd6CACer34IIQNjjghBgqmKGEGnbI4YcOehgiiBeKWCKJEY6o4okrpsjiiy7GaKGM/NFY4Iw41pjjjTr2yOOPDPoYJJAVClkkkRQmuWGLOw7p5JFPKmmijVEuCWOTUGYpJYpYbsmkkV5eCaaVVGpJZpdnjjklmmuqyaWbXyKZppxt0vmmnXFWWaeed/KZp5l7AtqnoH+GWaahbA6KKJxi4tmon48SGumijh46J6SWBkoppokWeqmkmSr66aagdjrpqKhqmqqoqrbK6queuv8aK6ynylorraHOquutu+bK66++BmuqsIwSW+mwyBab7LHKNsvss5w6Gy20pUpbLbWkZrtqr8tO6+2132prq7Hhbgtst+CmKy6u6K7LrbXunguvueSqS2+79847Lr776suuv+9im6/A/RL8r8EBl1uwwgcznLC9C0PcsMQPx1uvxfxOTKkBKV1lgAYdqYQRRB935MBFBxQQggg78EDByQNlUMATKWQBAh89XCQzDhxocQYTaZiERBgxfEGHGl4ksZICa5gwhhkjyFFCHC0okAMUEJBxQRVNeBAEAUAcAcEVEajARh0ynNAGAS/oEMEHVsywgQ80WOCEADBc4MIUYlBNUYEEEwxAgBFlgIEFCRj8UMMNAzQgABGAYFBBEQggsAAcjksBCCASIDDBAktEwQAaQzywuQUDDPDGCgJ0sMXmmzNggwBKzNGF6bADEhAAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/br.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAwAAAPJCAMAAAARZjlPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYNQTFRFrMnaq77Hq7i8p7a9qri9rsnZrsbUrsrbpLa/rsPPq8jZpbW9qre8qbe9q7m//v7+rMbXqsTTpbfApba/qrvCpbnDpra+qsPRpbnFrcnarMLOprzIrMPQvMbKp7nDqsPSqr3GrsfXrsXTqb/LprzHqLnBrMfXprjArbvArcXSqcLRqbe8sMfUsLvAqsHPydHU4ebnrMTTprrEp77MpbjAo7a/qri8pbW+rsfVrMfZq8bVrMLNqr3HrLm/pbnEpLjBuMPGqLi/q7vD1tzf4ubopbjCtsHFrMjYrcjYq7i9u8XJpra9qbnAqL3IqLe9rcfWq8jYp7a80NfaqMDNprvHqsDNqcHPqsXVp73JrMHNqr/L8fP0rL/I4+fpqbm/q8HOqL7LrcfXp73KrMbUq8XU/f39q8PRqbvFrbq+rLm+qLrDrMjZqL/Np7e+sMnYqLa8prW8qbi+qLvGxs/Sqb7Ip73Iqr7HrcPOr8fUrLrArMjarcrbqrrCr8jYr8naq8ja////7sj6uQAAAIF0Uk5T//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AksjjTwAAAQtJREFUeNrs28VaQgEYhOGfcwBJ6bC7u1vs7u7u7kD0nEsXgYU71z7PN6t5N3MHI5qmSdrXTbV1a6Bckvh8sxr87wl8xPFqiCUQ/QMvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4nzD//giYM1OQFNKTjwNTQWFXtz+JDNNsxXp+rCeF9uyN06nzxMDYfsPu08XOuGhR22Xp4UnRQ8l9jdg65txHoeXp3H5jn4y6Vz2VV8+NZdfGOun05K00ZfU2B2eUegnVLh4sBbw+1ThyLHtrxeFIS5vqVIZ0CQeGLRb7nVNZ0HXxWnz2yXnH2aArjqCq3lYpOZt6POJoVSYet10/Xf8WYACiIq1QmLEJbAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/darrowdown.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFgALAIABAIeHav///yH5BAEAAAEALAAAAAAWAAsAAAIchI+pEOsZ4nuxTlXzPbnvDk7g6IwmZp5cmhpsAQA7]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/darrowleft.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCwAWAIABAIeHav///yH5BAEAAAEALAAAAAALABYAAAIjjI+AC7rWHIsvtmmTvXBzT4HiKAZkBx6l6mGUK2lcNdNPUgAAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/darrowright.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCwAWAIABAIeHav///yH5BAEAAAEALAAAAAALABYAAAIkRI4JlrqN1oNyutqqvDrqHXyYSJZkeKKf17Ggy3CQOqN1eAcFADs=]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/darrowup.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFgALAIABAIeHav///yH5BAEAAAEALAAAAAAWAAsAAAIcjI8AyJ26nAwQzlbrPTnv3k0g6IwjY5pcqrJsAQA7]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/rarrowdown.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFgALAMQeAM/f5q7K28jb5NDg5rnR377V4MPY4rTO3cXZ47jQ3rfQ3sHW4bLM3KzI2tHh56/L29Lh58fb473U4LPN3bbP3q3J27XO3bvT37DL3MTY4r/V4c7f5sze5dTj6P///wAAACH5BAEAAB4ALAAAAAAWAAsAAAVuYCd2zsadaLo5Y+eJgGAsWm3XiyEAoud3G0SBoKBYjhaKglBAbFw+HyRSSEwwj0DggZkkChFIdLzJXA6YSqNRwRwumc14Xj5jtG64fE43WxgMFnp8hAAIEgQEEggAhI4DMjoDjpQdAwNQlI49lCEAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/rarrowleft.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCwAWAMQeAM/f5q7K28jb5NDg5rnR377V4MPY4rTO3cXZ47jQ3rfQ3sHW4bLM3KzI2tHh56/L29Lh58fb473U4LPN3bbP3q3J27XO3bvT37DL3MTY4r/V4c7f5sze5dTj6P///wAAACH5BAEAAB4ALAAAAAALABYAAAVooCeOZEeenXmKqXpCG+COW4QIzrllRWFspN0lQVhwRoDM5TBRaI6eAWKJwVCeno5AYsFUHpZnZ2AgMAKNQJgzLp/T6+y2+41Hp4fqFepJLptYNEpERjo8PkA6NjgrHjAyjVkpkZKUWSEAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/rarrowright.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCwAWAMQeAM/f5q7K28jb5NDg5rnR377V4MPY4rTO3cXZ47jQ3rfQ3sHW4bLM3KzI2tHh56/L29Lh58fb473U4LPN3bbP3q3J27XO3bvT37DL3MTY4r/V4c7f5sze5dTj6P///wAAACH5BAEAAB4ALAAAAAALABYAAAVlYOeNZNmJpXmmZAdsEOs5AhJt7GYURYaXnAUhcfEBNYrJoQggcTQUDGaJGIyelkcFY5EIRNhAI8AgGAad8Lh8Tmuy2+7X84xOL9UrUsl0ColGJDo8gSQ0Nj8mLzEsJyiNj40yJCEAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/rarrowup.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFgALAMQeAM/f5q7K28jb5NDg5rnR377V4MPY4rTO3cXZ47jQ3rfQ3sHW4bLM3KzI2tHh56/L29Lh58fb473U4LPN3bbP3q3J27XO3bvT37DL3MTY4r/V4c7f5sze5dTj6P///wAAACH5BAEAAB4ALAAAAAAWAAsAAAVuoCeOZNeRaFoOw6m+3iAYhjDAKYBIBCEhANxok7lYGAzLJbMREi8HTCCAOSybr2e00mhUqlcVJFJITDCP6QMzSRQiEFRngygQFBSL3kJREAoIGy4eJgAzCxqJiokLNQAmhCYdDhsclpeYGw6SHSEAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/tl.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhzwMMAOZCAMXZ47/V4a/L27bP3rPN3brS373U4LLN3KzI2s7f5qzJ2sHW4bXP3bfQ3sbZ463K27HM3LvS37DL3NLh59Dg5sjb5NHh58LX4q7K28rc5MPY4sDW4ejv8szd5c/f5s3e5cnb5Mfa49Pi6LzT4P3+/vL298ba47vT3+Pt8NPh58vd5NTi6Pn7/Ozy9P7+/vj6+8ze5fH2+Ozy9eHr7+Ls8Orx9M7f5enw88TZ4r7V4LXO3a/K27LM3LnR363J28vd5e3z9avI2v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEIALAAAAADPAwwAAAf/gEKCg0IuMUCIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGZMoRCLDQrExQJHzAdP8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6cwdhDciFgk/ICEmAPY4+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQwq0NwjFBA8/KgDQsGBDgJc5YsqcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rd+VJQjQkJMji4EMDAiAgFCvRYy7at27dw/+PKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnkzZblohL0R4yABggYEIPRoMGM2AgY7TqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0F+XHiBkhoUfDjyH1kGAwIEDPMKLH0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4IAEFmjggQgmqGB7B5CQQgIVXGBADwMQAIEEEgggwA4cdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWeaKGJVDwA8wAAUTQgIUCYPCAD1RWaeWVWGap5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPY5Zgs2gKDBhDpAIMADCiiAAAJBNOroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWaiumi3LwQQgLnPCkBBgocOuwxBZr7LHIJqvsssw26+yz0EYr7bSfcqCCAxsUMMABhwpL7bfghivuuOSWa+656Kar7rqQBgIAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/tl.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAA88AAAAMCAMAAABrwX92AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMlQTFRFxdnjv9Xhr8vbts/es83dutLfvdTgss3crMjazt/mrMnawdbhtc/dt9Dextnjrcrbsczcu9LfsMvc0uHn0ODmyNvk0eHnwtfirsrbytzkw9jiwNbh6O/yzN3lz9/mzd7lydvkx9rj0+LovNPg/f7+8vb3xtrju9Pf4+3w0+Hny93k1OLo+fv87PL0/v7++Pr7zN7l8fb47PL14evv4uzw6vH0zt/l6fDzxNnivtXgtc7dr8rbsszcudHfrcnby93l7fP1q8ja////pkJuwAAAAEN0Uk5T////////////////////////////////////////////////////////////////////////////////////////AEFiBO8AAADcSURBVHja7NUHTsNAFITht9XdcUnvCZ0UejMsC77/obDCKZ403xFG+jXU/js+/AAAb490qnn/vKv70ep+4QGArcWp57ftMPLrzSURvQMAU13AXc7X9dIPaJrMhBAfAMCUEF3PL3U0yUfCnpXGOADgyhhq77bLCSW2dJlSKk0bAGApTRW1T0OfJ9ZljdZB8AUAbAV0fhMNRtYpXVSVlJ8AwJWUdNH3JMpMF3Lc+wYAzujwup5a1xSyF8dh+AsAXIUhzVeb5CrT1TjGHADM0fw2nxkVdPeMMQCY+xNgAGxG2LimrQDhAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/tr.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhDAAyAOZsAK7K26zJ2qu+x7DL3LLN3K3J26+8wbrS37bP3rjQ3rDJ2K7Dz8DW4bHJ2LrR3cjb5MXY4Mnb48nb4bjK0rDFz7TAxb3S3rHCyrbI0bvT37zT4LfO3LHM3LrO17fO2rC/xbfM1rvS38ze5bTK1c3d5LfQ3rTH0bLG0L7N0sDR2MHO1MnZ37TO3bbFy7LL28DV4LHK2q/AybPJ1a/Ez6u7w8nX3ay/yKq7wrDI1LvQ3LXM2sTY4b7S3K27wL7V4L3Q17O/xa2/yMLU3c/e5LTM27vM0q67wK/K28PX4bPN3bDK2q6+xLjFyr3Kz7XO3bPDysTU26/L26y8w83c4rjGy8fa48LR1628w66/yMHV3rLK2bHI1cLX4rPAxcbV2rDH1MbZ48zd5Kq+x63Dzqq6wq3K26y6wKzI2q/I2K/H1K/J2qvI2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAGwALAAAAAAMADIAAAf9gGyCg4SCImEkQ1M1hWxgVQ8REiteKoQMDFxIOxBQVk2DBxkaPi9ZQikoTIIIJQkHIRY8P0VUQGwESSwICQ45HRMtFWxRAxwEThseIBhPXWwFAAADBEQ6IyYXHwZnAdEDLloyJzFLBmtrZwVHMA1bFFhX5+gBAEoKODNBUkboa/VqFHxZYINGD38A0aRZIOCGGYRl1CgcI4DMQ3RnIk6seDGdxjQULfrLKBGkGJEYP4452ZHkRJYjVcJMWXIlSo81Z+J8edOlyZ4ygeYUyrNlUKNDkRaNmZTpUppPd/5UOtVpVahXpdqkutVqV6xfter0GZbs2KNezzYFq7ZoIAA7]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/cluetip/tr.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAwAAAAyCAMAAABf28oIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUdQTFRFrsrbrMnaq77HsMvcss3crcnbr7zButLfts/euNDesMnYrsPPwNbhscnYutHdyNvkxdjgydvjydvhuMrSsMXPtMDFvdLescLKtsjRu9PfvNPgt87csczcus7Xt87asL/Ft8zWu9LfzN7ltMrVzd3kt9DetMfRssbQvs3SwNHYwc7UydnftM7dtsXLssvbwNXgscrar8DJs8nVr8TPq7vDydfdrL/IqrvCsMjUu9DctczaxNjhvtLcrbvAvtXgvdDXs7/Frb/IwtTdz97ktMzbu8zSrrvAr8rbw9fhs83dsMrarr7EuMXKvcrPtc7ds8PKxNTbr8vbrLzDzdziuMbLx9rjwtHXrbzDrr/IwdXessrZscjVwtfis8DFxtXasMfUxtnjzN3kqr7HrcPOqrrCrcrbrLrArMjar8jYr8fUr8naq8jaAAAAZmJJ4wAAAG10Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AC221EsAAACxSURBVHjaYshBAgxKiSrOwaZQTkIov6CQdpwWmMPDE+NhLRAQ5gvisEtK2elHOmlq+AA5HKqc7IpiNvauIQ45DCyeOhycfJaywrqiOQyBzDIsftJyChL+sTkMrAwMzCwuVspq4vJsDOmMrAzMelFG6obebAzZ2ems7ga80SIR4SBONiODF5eFsWOQG4STxRXPbWZiC+VkZHIzmaeBOalATjJTCpiTToCTNMoZ7ByAAAMAMXnTwpvpjk4AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/desc.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFQAEAIAAAP///////yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAwNy0wMS0wNFQyMjoxMDozMVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAwOS0wMS0xN1QxODozMjoyMFo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQBBwABACwAAAAAFQAEAAACDYyPAcmtsJyDVDKKWQEAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/lightbox-blank.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/lightbox-btn-close.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhQgAWANUAAP////39/fr6+vj4+PX19fDw8Ovr6+np6ebm5uTk5N/f39zc3Nra2tfX19XV1dLS0svLy8jIyL6+vre3t7S0tLKysq+vr6ioqKOjo56enpubm5aWlpGRkY+Pj4yMjIeHh4KCgoCAgH19fXZ2dnNzc3FxcW5ubmlpaWdnZ2RkZGJiYl9fX11dXVpaWlVVVVNTU1BQUE5OTktLS0lJSUZGRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAHAP8ALAAAAABCABYAAAb/QIBwSCwaj8ikcslsOp/QqLQZmFqvRAHngYxsBEaCw3EYHhwE5IFykZSLZ7RQPK4PBxzaimGEtGgcaXMZL4UvH0IXLw5HEoaFF0MEIo8RAA6PhUMWNC8xKw1EES0xLzQYQ5QfY2yJi0YRh2UKlBRCHC8XDhEZZZgcdYxCBiQzLzIqC0KjpTMhBUIULxlHisJEKCiCAAQoLEIvJEaYkUcGIzKeKAt+pTQgA0Pe20TWRQrTRYSMLyjjuUnOGYOBgtQxENsOHEJij4g0S6IA4gpEBJOICxjfEDmXDgaMYx/iDSHH8FU9kyMBTnrBguKlTNeIFCjx0ZMGMBUBVkPpKubL2XKXKLFQ8HNJgRM1Y3Qwgo9DSZ+ObBFxJKGIIxFFkywwUcrjMQ1ViLDwt9OnQkREcGkcQuJF1iMLUKSLkWLFRxlgTwK91NMIJaJC8GE14u1tkQUr0skgkSCCV7xhubUF5gCXJUUcMGJkpIAFCwkOKHgGnCHDmA/5LGoGyiCxCxkjDAiZ8DjvHEqFWFADoChTOQcoDKEADAC1od2YMglhwEIxCdlDKsjwSKMCnDFQFJAxEqdJgQ4yZjw3UiGGjBN8sKjP4mH8EQsnEKyfP0QAvSIB5NPfz7+/+iAAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/lightbox-btn-next.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAOYAAP////39/fv7+/n5+ff39/X19fPz8/Hx8e/v7+3t7evr6+np6efn5+bm5uTk5OLi4uDg4N7e3tzc3NjY2NbW1tLS0tDQ0M7OzsrKysjIyMbGxsLCwsDAwLy8vLq6ura2trS0tLOzs7Gxsa+vr62traurq6mpqaenp6WlpaOjo52dnZubm5mZmZGRkY+Pj42NjYuLi4eHh4WFhYODg4GBgYCAgH5+fnp6enh4eHZ2dnR0dHBwcG5ubmxsbGpqamhoaGZmZmRkZGJiYmBgYF5eXlxcXFpaWlhYWFZWVlRUVFJSUlBQUE5OTk1NTUtLS0lJSUdHR0VFRUNDQ////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAFMALAAAAAA/ACAAAAf/gFNTAISFhoeIiYqLjIiDjZCRkpOUlZaXmJmam5ydnp+goaKjpKWmp6igARomF4UCHCIABiAlJrcnDxQoroQKJRsOKSYlIyUnIASeAS5PQxGEAzZFAAxCSUFCQkUXDD1GEADMTRgWSEJGSkNDOAfLLUlMMsoDNUQAC0UzCQz9yhhNYATIwGRFgAENFqh4UmHBggDLXPx4wQQEAAE07i0w8iIRCyUhdvBAYKgElAWhmPlogOOIAwAZ8Q3hUQJFChIFCBG4scRIhUMmoDRIKZHAhCTzYi4IYkSHyBruxM14UiScoaBDVUk8ECBFkxIxhuArIgNBAgUKIAIQoeSEkBtRiQlhJfqDZIEeRYIAwWekBaIIR2oA+PDkxFWhdEkCMLfkBz4iOTpI9vBgAA0kEgAMuJFkQqG5qlrsiJtCSQ98QJpAWS3lhAgnhglRODJabpSsoAgQUCtOt7gDCMwmSFDgQFpDBxYIIFRAwfJU0CkFEBCgunXr0TXxzs69u/fv4MOLdzRekqDykAIBADs=]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/lightbox-btn-prev.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhPwAgAOYAAP////39/fv7+/n5+fj4+Pb29vT09PLy8vDw8O7u7urq6unp6efn5+Xl5ePj4+Hh4d/f393d3dvb29ra2tjY2NbW1tTU1NDQ0M7OzszMzMvLy8nJycfHx8XFxcPDw8HBwb+/v729vby8vLq6uri4uLa2trKysq6urq2traurq6mpqaenp6Ojo6GhoZ+fn56enpycnJqampiYmJSUlJCQkI+Pj42NjYWFhYODg4GBgYCAgHx8fHp6enh4eHZ2dnR0dHJycnFxcW9vb21tbWtra2lpaWVlZWNjY2JiYmBgYF5eXlxcXFpaWlhYWFZWVlRUVFNTU1FRUU9PT01NTUtLS0lJSUdHR0JCQkBAQP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAFkALAAAAAA/ACAAAAf/gACCg4SFhoeIiYqGWVmLj5CRj46SlZaXmJmam5ydnp+goaKjpKWmp6ipmwMYICAfFQSCE64hGQuCBx4fvLwMGhwBgwMbG6IFOVFJyzsQAC1QSkpIRikAEUtOS0xMShc1URKDE0o2xzpCBQclVDYCLUsSAxFBTRQOUjQQFPwBH1MuBqmoguEcEAEAAjDxYYCFkgaCVkT5wGDKikIIiAwpAKCAjyDCQhXQEQRBgRJWbARgsUTEhBBHkkBw8ARHiBEkPCCM8UQDAAtVRIwqgCOKkiVJekwAwAKKkSVPgHQAIGGJkiJGjuAYAGDCFBkAZCRhMDSHEQ8dKMh6tkQDCiojnQRJiDLDAYQIDkLuEALhyAyE534YcpFEgQAfSA5QnWLNEIcpN5IUHKoDCFdCLpQ4ACCCyotrUWhUGG0hgaAEQ6rwCHmMB5HLg2A8cWagR5UND55YucIbiwlBAWBcOVEqwIIGrAUpkLBWQYUFAyRMmD4dwaADFDiq2n6JwIABAsIL+E4gOfdEAgKoX7/+vPv38OPLn0+//iVK9hU1CgQAOw==]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/lightbox-ico-loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAOYAAP////39/fr6+vj4+PX19fPz8/Dw8O7u7uvr6+np6ebm5uTk5OHh4d/f39zc3Nra2tfX19XV1dLS0s3NzcvLy8jIyMbGxsPDw8HBwb6+vry8vLm5ube3t7S0tLKysq+vr62traqqqqioqKWlpZ6enpaWlpSUlJGRkY+Pj4yMjIqKioeHh4WFhYKCgoCAgH19fXt7e3h4eHZ2dnNzc3FxcWxsbGlpaWJiYl9fX1paWlhYWFVVVU5OTktLS0REREFBQT8/Pzw8PDc3NzIyMjAwMC0tLSsrKygoKCYmJiMjIyEhIR4eHhwcHBkZGRcXFxISEg8PDw0NDQoKCggICAUFBf4BAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgBVACwAAAAAIAAgAAAH/4AAgoOEhYaHiImKi4yNjQGGBAgCjoYIEhcRCIMCGywSlYQPKzxAPCsQkAQnPxuhgggwSlS0STAIAQEQHJuECA0EiZ1BtMVCG5AAub4uOR/BhwQkR8W1JNCGEkJQNQeIBCNF1VRHIZSHCM3PiAESPFHVPBTJ6A/YhwciPk1PTD4jBV4VClDgAYgVMlJo8CZwEAELKmSo2MDgwDlHyzht6NEEir8KryCQIMFgEIMa42bcW4TgxZIkKRhK8DHOR69GDHLQqtErAo9xPG4yKlACiA8RAQEcWLGkGJMTFxsdoECBoTIINYQkESKjZMOBDDaE2ADB4tdoFUic4EUvUUZ2FpV2IFkSxIRQQwEokLiQFJ0MJ8V+YHC7AQgTIdcQNdghpdgREckIFMB2QAYUWjYcIEJQ4zKtIBoACJiA4kWIXgVWOJkCxcbdQQE2NmlChAUDXTmcQCFCwlu7HEBydIhaiIAnGCQaBACHpFiOB4ICPMgQYaUhAQgQQAOXhBaU54TahpKQezeJvmdFX2Axg2T6QgIOaHcUCAAh+QQFCgBVACwAAAAAHwAgAAAH/4BVgoOEhAgODgiFi4yMBBYvOzsuFQSNl4sXOU1UVE05FpiiVQguS52dSy+Ko4USCAIQOVOonTkQrYQ7PDEZFDm1VFC3uQyETTsfL6eoTKuDCAG5VUsqVTtOnU86GIQvDACNI4syCBMtPDwsEpakNjYQ4YweQoRKJ5YECAjtgrEQAuQtYjCDUxUnPCwIZASg4SUCFV7w6FFjQ4GF06oUiICBAgQJrwhgnFbgQw4fO0jAGpkRQw8onYSEkDbtURUJAQmYYFYFigyR0xrkOFIDAQACJ3j6BJrrgQ0kMsBVydCzShQhIAKwvHSBBE55H3CgVLn1EgCtAjdikHDAYcZGAJEEBBBQoN9bRgc2oLhpt5G+voU++BBkYwLNRghIyBCBqcagJCUAE/JABAqQDFttDFqCogChgIMCiEhSZUgHlgVOFDnoYwPoCCNGRAANoMGMHi6kMkJw4t2HtoSTKLHhQB4ABK/KBijAYGWVAByICCLC4XBDt2bdAsAQRFAQDNbvCuI98YRR8YvMTTiPftH1VoEAACH5BAUKAFUALAAAAAAeAB8AAAf/gFWCg4SEAAABAIWLjIuICBMXEASKjZaEARAuPkA5IgiXoQAML0qCUD8gBIIEBauWBAxVsgIaP4RNMAwFFCQnIRCNBR81OjUcCCBDhTZVITpFSUI1FQOFtT5QUFU8Gxk9iyM9UFTlTDUOhQcrTYQnECtJgz0fKknl+D4bhggvToNNVFRBQCJHFRgXELhogq+cEBCFCIRYJijIhwBVMA4iUOIevig/NBQCgGCFDyI9TshidGHHE3xJYDQYSQBBBhAYEGhcNCwHkSNCZlB4VeVQq0QBEl0iEOHDCA4rBQEoIGHEiAgCQhEiQHSQgAw6jiDJYUHryAAErAFY165KkxZmmA09KPGhKAIZ2wTViDsIQMuNJIbkJcFXKoINQ+2eMDircKMACB445ntocqNDBQ4oFVX5sQQULjR0ZURSwoKdhhrYaOJEXygCJ4DMiGrIgpBBJUIhqOGkxwTSEHQ4gWKxbyxQXj/YKIF8EYG6OUisnCrCxgsJWxEU0ArhQF8I4JKc2G65bwQeUMSTL1/0wAjr2Nn3LSBr9KJAACH5BAUKAFUALAAAAQAgAB4AAAf/gFWCg4SFVR0ZDIaLjIUEIzpCPy4SjZaFARQ8UFVURioIggCjl1UABAYEowQgRoNQNhACCBMWEKqNAAwgKiOyBB9FhhIrPD42IAgAjAgrQk1ELw0BDzdOVVBCJBUxSYJQPR0EiwATPoNAG6cZNT48JA8cQIRNL6GGABXzgkIeowEIGjAgIAAEEUKwHpBDUCMJlCQ2KokiBSCDD06CkrC4ZyhAhRU5XGQYt4hBi4NVnOzYQBIfQAgIWhoSAOFEDh41fMXEt6yUqAIQLnw44ULFB0WiDAiUWSqAhRpEmCT5geIegxM6coA44FMQAhlMqIilImREFQEdgqTkIaFnKQlAsMaKdVKjCgESR/hpcHtJAhG5VKDgqBLgwo4lSWpA6FoFQo8ocusN4rDiBAWmlgicICJlLg8MgwggOBCAsaAHKXwQEWLjA1fTzIR2kFCAEUXYlgAgiKCg9CUAAnznauDCRw2JuSCgYGkpwIchVYyQ+L3Bx4rXjAJo6NFkEYLahHZREJAbAQgZIzgK+EiCo6ngpU7tHHRgRZIeF4TjdkQCSES++w2iywYVgBcgPsEByEggACH5BAUKAFUALAAAAAAgAB8AAAf/gFWCg4SFhoeIiYMUEASKj4YcNj01HAWQmBE5TlVONhMBmIehVQEaQoM/HAJVBA0TmBAjJBSOARU9UFVQPBcCBxs1PJANMURINhahCCY/Rj4kCAQYOk2dPooYg0QkjgAIGyQZCAAFJkiDSiyKuVVCId5VAAEA9QcnSYNMLwyJJDs9VjQgZYgABx+6oAQZcQkRAgoXGNBD9I0EDyE9UgxUFIAeAEUCEFTwwEECgwIERR2aB04QCQmOBs2bqJIAiB35itSQQIoABRIeyKlskEOXoCQqEAiCUMPIwpiYLBAhBCVHg1IWsDFZoVQUBVSDoNhwIOjBCyA8OkCFxMCGNUFGqFA0FNBAQ4UDH1VuwDHkSJAXEQgGEJAS0gEIFkCUMAECgoC8KgcRkHDCxo4aJCCghBx5aYwiVKg48TGiK6IGFRQRICFkSmjRNiRAQmG60IEWTV6HDuIhkQQdS2o04DwIgYvcuoF0SIRgxAxLnFG2IjFEd5McsCgSkEb85UcIL4g8gdKkR2lF9Tiv3vGBVITKOWqEqK2yQmbICCBEONl5kAACNPUnoCGBAAAh+QQFCgBVACwCAAEAHgAfAAAH/4BVgoOEggABBAMAhYyNjAAFFSMdDAKOl4wBFzlEPycMmI0Ai4MEJUlVUDoUhocBpKIBAqOCBCRIgjkSVYcMFRQIAaIHFx8QllUCEzRBPIYBEjM+PSwQwoUCGzpBLw+kBBAdFoYIKLhVQiMFjAUrS1U+GtePDDVQhAiMBCA9RDW7jgAgWIGqyhAS+Rp9IHGBACYCFmxUARIDYCMC60JVIWCRACyNmAKIJEBgFshLo8B9CFHhAK8ABRA4PMlLQMQhRHiQqBIAwQgWGWjyYvDi3SALBDDsQAID1EkAEnbcq0KFSAioNaqUSAgSAAQbU6cE4bAxQhWnT33+aOKkCIwGQrAJHSLwgIQNGykmzBQKQAADDSJAXKgigWvcABBU+CASZEbDgK9QIiAhZNCRF3AfIeAgYa+BCL8YDIhgwwmhHhgaCcDAQ0UCQQxM8BgSpMaGDFILBc0EAcWgyUKoCF+SY8QMJYQkOppXxYJU4cKRqACBI0mTuByAQBfuJEYVDClqvOhAM0OPKdubsJCJoIFhjRBmMIEuJQiIvXEJZMiRBIqTICtkFlcpFahgwwwjCHhJIAAh+QQFCgBVACwCAAEAHgAfAAAH/4BVgoOEhACHhYmKigIIDQgBi5KLESo1JAgAk5uDJEJNOxaRnJxFUD4Xo1UFDAwEkgAFCq+ELzklmYIIJDY1H5CKBx8tHAWEDBEIAoIBFzxOTDkUy4UAEjlJNRCTBCJHgkActIYMKz0oDJPNPExJNhOqhAIQG9uTAMIyL8WSAdSbAAi0IqCJlMEqiA7eE8jggCoAAQoqRDDChg0TDyIRgGAh10ECH344qSKkxAEADFLYyBCPEwIVTARBseGgCoIQKSS03HTAxLcqTGYgQFgAwTiDASrYIFJkBwhjCqsRsGDiBAePghhoEPFBwoF7AAQIIIDAaCEIK3wMEWLjw1dFAL8QTNjQMWIhBCiIQKFCpUmOC3ARiMgBhMeJBi0v7ODL+MgJSAYWGA24ocdIKEIwESLQAYgUxn1jQLiwIsclCAhK/KzSZEaDQhh4gKaixEUHbFCgDFlBgQQRQjBeE3rwIskUvqdIqEBCyAeIDUChOPmhiAAGG0OWHOlRAoOMJoSKkGDQwcaOHOMVFejN4kSHViyUEBIC4pWECxKGSipqlgAHH3tVoYQNEkgUVVwk6CAEEDVgcFRURFHwwQYNPKhIIAAh+QQFCgBVACwAAAIAIAAeAAAH/4BVgoOEhQEDAYWKi4yCBBIaDYmNlIoAEC87JQiVnYMAFDtHMAyFBwQAnYeTgggkLxwFhCArIAipjQINGgysVQgMsoVJPBuojQckOiDCjR9DVUIjx4wEGSkUBJURNT0yEr6LBQjalY8aEtSL5Z6DAgG4hQUQGh4Xpe2UBBgxPT87KR7kExSgQIF3gijYUEKFCpQiJzi1e0TihAZOrog03NiDQrtLMYok0WGMAQwmGxsO2dAuAAYfgoyYOIBgRZKUVIJkaCkhRxMoQaYR+NADykYnNQS2QyDCxg4VEBI1QAFkiRMkPDo06wQAAYULDdg1CLEixgoSGiIgEPAxALxCBMg4hYChw8YJCWwZCUDQYG0jAhVsJIHiZEiLBtUopKihIhsjBCduDvrRQRuAy6kCQIgxOEmNCOGqdH3RhFAREggQQJDgAJUADTAF+eDAjhACFZIFCREBYYRTGBkK7CtaBYoPDbUHEdjAo3QVzxlE+HDy3EYFAg1WCEkixMWD0KIRgLDRg4eMDRIKDSFxKgIJFyTSNQqAQMKGDBBUz3BehUiJA6kA41clAhSYSEZTFNcDbQOtE4ELP1TBAwkMxNNgIQ18MMIv4BUSCAA7]]></data>
	</file>
	<file>
	  <filename>/lib/imgs/wait.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhKwALAPEAADc8QP///5ianP///yH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJRiBNb3ZpZSBHZWFyIDQuMAAh/hVNYWRlIGJ5IEFqYXhMb2FkLmluZm8AIfkECQoAAAAsAAAAACsACwAAAjKEjgjLltnYg/PFChveVvPLheA2hlhZoWYnfd6avqcMZy1J14fKLvrEs/k+uKAgMkwVAAAh+QQJCgAAACwAAAAAKwALAAACPcSOCMsgD2FjsZqEx6x885hh3veMZJiYn8qhSkNKcCy4B2vNsa3pJA6yAWUUGm9Y8n2Oyk7T4posYlLHrwAAIfkECQoAAAAsAAAAACsACwAAAj2EjgjLMA9hY6maalvcb+IPChO3eeF5jKTUoKi6DqYLwutMYzaJ58nO6flSmpisNcwwjEfK6fKZLGJSqK4AACH5BAkKAAAALAAAAAArAAsAAAJAhI4Iy5bZ2JiUugcbfrH6uWVMqDSfRx5RKnQnxa6p+w6xNpu1nY/9suORZENd7eYrSnbIRRMQvGAizhAV+gIUAAA7AAAAAAAAAAAA]]></data>
	</file>
	<file>
	  <filename>/lib/jquery-1.2.3.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IDEuMi4zIC0gTmV3IFdhdmUgSmF2YXNjcmlwdAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDggSm9obiBSZXNpZyAoanF1ZXJ5LmNvbSkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpCiAqIGFuZCBHUEwgKEdQTC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuCiAqCiAqICREYXRlOiAyMDA4LTAyLTA2IDAwOjIxOjI1IC0wNTAwIChXZWQsIDA2IEZlYiAyMDA4KSAkCiAqICRSZXY6IDQ2NjMgJAogKi8KKGZ1bmN0aW9uKCl7aWYod2luZG93LmpRdWVyeSl2YXIgX2pRdWVyeT13aW5kb3cualF1ZXJ5O3ZhciBqUXVlcnk9d2luZG93LmpRdWVyeT1mdW5jdGlvbihzZWxlY3Rvcixjb250ZXh0KXtyZXR1cm4gbmV3IGpRdWVyeS5wcm90b3R5cGUuaW5pdChzZWxlY3Rvcixjb250ZXh0KTt9O2lmKHdpbmRvdy4kKXZhciBfJD13aW5kb3cuJDt3aW5kb3cuJD1qUXVlcnk7dmFyIHF1aWNrRXhwcj0vXltePF0qKDwoLnxccykrPilbXj5dKiR8XiMoXHcrKSQvO3ZhciBpc1NpbXBsZT0vXi5bXjojXFtcLl0qJC87alF1ZXJ5LmZuPWpRdWVyeS5wcm90b3R5cGU9e2luaXQ6ZnVuY3Rpb24oc2VsZWN0b3IsY29udGV4dCl7c2VsZWN0b3I9c2VsZWN0b3J8fGRvY3VtZW50O2lmKHNlbGVjdG9yLm5vZGVUeXBlKXt0aGlzWzBdPXNlbGVjdG9yO3RoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXM7fWVsc2UgaWYodHlwZW9mIHNlbGVjdG9yPT0ic3RyaW5nIil7dmFyIG1hdGNoPXF1aWNrRXhwci5leGVjKHNlbGVjdG9yKTtpZihtYXRjaCYmKG1hdGNoWzFdfHwhY29udGV4dCkpe2lmKG1hdGNoWzFdKXNlbGVjdG9yPWpRdWVyeS5jbGVhbihbbWF0Y2hbMV1dLGNvbnRleHQpO2Vsc2V7dmFyIGVsZW09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbM10pO2lmKGVsZW0paWYoZWxlbS5pZCE9bWF0Y2hbM10pcmV0dXJuIGpRdWVyeSgpLmZpbmQoc2VsZWN0b3IpO2Vsc2V7dGhpc1swXT1lbGVtO3RoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXM7fWVsc2UKc2VsZWN0b3I9W107fX1lbHNlCnJldHVybiBuZXcgalF1ZXJ5KGNvbnRleHQpLmZpbmQoc2VsZWN0b3IpO31lbHNlIGlmKGpRdWVyeS5pc0Z1bmN0aW9uKHNlbGVjdG9yKSlyZXR1cm4gbmV3IGpRdWVyeShkb2N1bWVudClbalF1ZXJ5LmZuLnJlYWR5PyJyZWFkeSI6ImxvYWQiXShzZWxlY3Rvcik7cmV0dXJuIHRoaXMuc2V0QXJyYXkoc2VsZWN0b3IuY29uc3RydWN0b3I9PUFycmF5JiZzZWxlY3Rvcnx8KHNlbGVjdG9yLmpxdWVyeXx8c2VsZWN0b3IubGVuZ3RoJiZzZWxlY3RvciE9d2luZG93JiYhc2VsZWN0b3Iubm9kZVR5cGUmJnNlbGVjdG9yWzBdIT11bmRlZmluZWQmJnNlbGVjdG9yWzBdLm5vZGVUeXBlKSYmalF1ZXJ5Lm1ha2VBcnJheShzZWxlY3Rvcil8fFtzZWxlY3Rvcl0pO30sanF1ZXJ5OiIxLjIuMyIsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aDt9LGxlbmd0aDowLGdldDpmdW5jdGlvbihudW0pe3JldHVybiBudW09PXVuZGVmaW5lZD9qUXVlcnkubWFrZUFycmF5KHRoaXMpOnRoaXNbbnVtXTt9LHB1c2hTdGFjazpmdW5jdGlvbihlbGVtcyl7dmFyIHJldD1qUXVlcnkoZWxlbXMpO3JldC5wcmV2T2JqZWN0PXRoaXM7cmV0dXJuIHJldDt9LHNldEFycmF5OmZ1bmN0aW9uKGVsZW1zKXt0aGlzLmxlbmd0aD0wO0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMsZWxlbXMpO3JldHVybiB0aGlzO30sZWFjaDpmdW5jdGlvbihjYWxsYmFjayxhcmdzKXtyZXR1cm4galF1ZXJ5LmVhY2godGhpcyxjYWxsYmFjayxhcmdzKTt9LGluZGV4OmZ1bmN0aW9uKGVsZW0pe3ZhciByZXQ9LTE7dGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2lmKHRoaXM9PWVsZW0pcmV0PWk7fSk7cmV0dXJuIHJldDt9LGF0dHI6ZnVuY3Rpb24obmFtZSx2YWx1ZSx0eXBlKXt2YXIgb3B0aW9ucz1uYW1lO2lmKG5hbWUuY29uc3RydWN0b3I9PVN0cmluZylpZih2YWx1ZT09dW5kZWZpbmVkKXJldHVybiB0aGlzLmxlbmd0aCYmalF1ZXJ5W3R5cGV8fCJhdHRyIl0odGhpc1swXSxuYW1lKXx8dW5kZWZpbmVkO2Vsc2V7b3B0aW9ucz17fTtvcHRpb25zW25hbWVdPXZhbHVlO31yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2ZvcihuYW1lIGluIG9wdGlvbnMpalF1ZXJ5LmF0dHIodHlwZT90aGlzLnN0eWxlOnRoaXMsbmFtZSxqUXVlcnkucHJvcCh0aGlzLG9wdGlvbnNbbmFtZV0sdHlwZSxpLG5hbWUpKTt9KTt9LGNzczpmdW5jdGlvbihrZXksdmFsdWUpe2lmKChrZXk9PSd3aWR0aCd8fGtleT09J2hlaWdodCcpJiZwYXJzZUZsb2F0KHZhbHVlKTwwKXZhbHVlPXVuZGVmaW5lZDtyZXR1cm4gdGhpcy5hdHRyKGtleSx2YWx1ZSwiY3VyQ1NTIik7fSx0ZXh0OmZ1bmN0aW9uKHRleHQpe2lmKHR5cGVvZiB0ZXh0IT0ib2JqZWN0IiYmdGV4dCE9bnVsbClyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCkpO3ZhciByZXQ9IiI7alF1ZXJ5LmVhY2godGV4dHx8dGhpcyxmdW5jdGlvbigpe2pRdWVyeS5lYWNoKHRoaXMuY2hpbGROb2RlcyxmdW5jdGlvbigpe2lmKHRoaXMubm9kZVR5cGUhPTgpcmV0Kz10aGlzLm5vZGVUeXBlIT0xP3RoaXMubm9kZVZhbHVlOmpRdWVyeS5mbi50ZXh0KFt0aGlzXSk7fSk7fSk7cmV0dXJuIHJldDt9LHdyYXBBbGw6ZnVuY3Rpb24oaHRtbCl7aWYodGhpc1swXSlqUXVlcnkoaHRtbCx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmNsb25lKCkuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLm1hcChmdW5jdGlvbigpe3ZhciBlbGVtPXRoaXM7d2hpbGUoZWxlbS5maXJzdENoaWxkKWVsZW09ZWxlbS5maXJzdENoaWxkO3JldHVybiBlbGVtO30pLmFwcGVuZCh0aGlzKTtyZXR1cm4gdGhpczt9LHdyYXBJbm5lcjpmdW5jdGlvbihodG1sKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkud3JhcEFsbChodG1sKTt9KTt9LHdyYXA6ZnVuY3Rpb24oaHRtbCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeSh0aGlzKS53cmFwQWxsKGh0bWwpO30pO30sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZmFsc2UsZnVuY3Rpb24oZWxlbSl7aWYodGhpcy5ub2RlVHlwZT09MSl0aGlzLmFwcGVuZENoaWxkKGVsZW0pO30pO30scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLHRydWUsZnVuY3Rpb24oZWxlbSl7aWYodGhpcy5ub2RlVHlwZT09MSl0aGlzLmluc2VydEJlZm9yZShlbGVtLHRoaXMuZmlyc3RDaGlsZCk7fSk7fSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsZmFsc2UsZnVuY3Rpb24oZWxlbSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtLHRoaXMpO30pO30sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsdHJ1ZSxmdW5jdGlvbihlbGVtKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW0sdGhpcy5uZXh0U2libGluZyk7fSk7fSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHxqUXVlcnkoW10pO30sZmluZDpmdW5jdGlvbihzZWxlY3Rvcil7dmFyIGVsZW1zPWpRdWVyeS5tYXAodGhpcyxmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmZpbmQoc2VsZWN0b3IsZWxlbSk7fSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKC9bXis+XSBbXis+XS8udGVzdChzZWxlY3Rvcil8fHNlbGVjdG9yLmluZGV4T2YoIi4uIik+LTE/alF1ZXJ5LnVuaXF1ZShlbGVtcyk6ZWxlbXMpO30sY2xvbmU6ZnVuY3Rpb24oZXZlbnRzKXt2YXIgcmV0PXRoaXMubWFwKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5LmJyb3dzZXIubXNpZSYmIWpRdWVyeS5pc1hNTERvYyh0aGlzKSl7dmFyIGNsb25lPXRoaXMuY2xvbmVOb2RlKHRydWUpLGNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjb250YWluZXIuYXBwZW5kQ2hpbGQoY2xvbmUpO3JldHVybiBqUXVlcnkuY2xlYW4oW2NvbnRhaW5lci5pbm5lckhUTUxdKVswXTt9ZWxzZQpyZXR1cm4gdGhpcy5jbG9uZU5vZGUodHJ1ZSk7fSk7dmFyIGNsb25lPXJldC5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzW2V4cGFuZG9dIT11bmRlZmluZWQpdGhpc1tleHBhbmRvXT1udWxsO30pO2lmKGV2ZW50cz09PXRydWUpdGhpcy5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oaSl7aWYodGhpcy5ub2RlVHlwZT09MylyZXR1cm47dmFyIGV2ZW50cz1qUXVlcnkuZGF0YSh0aGlzLCJldmVudHMiKTtmb3IodmFyIHR5cGUgaW4gZXZlbnRzKWZvcih2YXIgaGFuZGxlciBpbiBldmVudHNbdHlwZV0palF1ZXJ5LmV2ZW50LmFkZChjbG9uZVtpXSx0eXBlLGV2ZW50c1t0eXBlXVtoYW5kbGVyXSxldmVudHNbdHlwZV1baGFuZGxlcl0uZGF0YSk7fSk7cmV0dXJuIHJldDt9LGZpbHRlcjpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS5pc0Z1bmN0aW9uKHNlbGVjdG9yKSYmalF1ZXJ5LmdyZXAodGhpcyxmdW5jdGlvbihlbGVtLGkpe3JldHVybiBzZWxlY3Rvci5jYWxsKGVsZW0saSk7fSl8fGpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3Rvcix0aGlzKSk7fSxub3Q6ZnVuY3Rpb24oc2VsZWN0b3Ipe2lmKHNlbGVjdG9yLmNvbnN0cnVjdG9yPT1TdHJpbmcpaWYoaXNTaW1wbGUudGVzdChzZWxlY3RvcikpcmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3Rvcix0aGlzLHRydWUpKTtlbHNlCnNlbGVjdG9yPWpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3Rvcix0aGlzKTt2YXIgaXNBcnJheUxpa2U9c2VsZWN0b3IubGVuZ3RoJiZzZWxlY3RvcltzZWxlY3Rvci5sZW5ndGgtMV0hPT11bmRlZmluZWQmJiFzZWxlY3Rvci5ub2RlVHlwZTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gaXNBcnJheUxpa2U/alF1ZXJ5LmluQXJyYXkodGhpcyxzZWxlY3Rvcik8MDp0aGlzIT1zZWxlY3Rvcjt9KTt9LGFkZDpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIXNlbGVjdG9yP3RoaXM6dGhpcy5wdXNoU3RhY2soalF1ZXJ5Lm1lcmdlKHRoaXMuZ2V0KCksc2VsZWN0b3IuY29uc3RydWN0b3I9PVN0cmluZz9qUXVlcnkoc2VsZWN0b3IpLmdldCgpOnNlbGVjdG9yLmxlbmd0aCE9dW5kZWZpbmVkJiYoIXNlbGVjdG9yLm5vZGVOYW1lfHxqUXVlcnkubm9kZU5hbWUoc2VsZWN0b3IsImZvcm0iKSk/c2VsZWN0b3I6W3NlbGVjdG9yXSkpO30saXM6ZnVuY3Rpb24oc2VsZWN0b3Ipe3JldHVybiBzZWxlY3Rvcj9qUXVlcnkubXVsdGlGaWx0ZXIoc2VsZWN0b3IsdGhpcykubGVuZ3RoPjA6ZmFsc2U7fSxoYXNDbGFzczpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMuaXMoIi4iK3NlbGVjdG9yKTt9LHZhbDpmdW5jdGlvbih2YWx1ZSl7aWYodmFsdWU9PXVuZGVmaW5lZCl7aWYodGhpcy5sZW5ndGgpe3ZhciBlbGVtPXRoaXNbMF07aWYoalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sInNlbGVjdCIpKXt2YXIgaW5kZXg9ZWxlbS5zZWxlY3RlZEluZGV4LHZhbHVlcz1bXSxvcHRpb25zPWVsZW0ub3B0aW9ucyxvbmU9ZWxlbS50eXBlPT0ic2VsZWN0LW9uZSI7aWYoaW5kZXg8MClyZXR1cm4gbnVsbDtmb3IodmFyIGk9b25lP2luZGV4OjAsbWF4PW9uZT9pbmRleCsxOm9wdGlvbnMubGVuZ3RoO2k8bWF4O2krKyl7dmFyIG9wdGlvbj1vcHRpb25zW2ldO2lmKG9wdGlvbi5zZWxlY3RlZCl7dmFsdWU9alF1ZXJ5LmJyb3dzZXIubXNpZSYmIW9wdGlvbi5hdHRyaWJ1dGVzLnZhbHVlLnNwZWNpZmllZD9vcHRpb24udGV4dDpvcHRpb24udmFsdWU7aWYob25lKXJldHVybiB2YWx1ZTt2YWx1ZXMucHVzaCh2YWx1ZSk7fX1yZXR1cm4gdmFsdWVzO31lbHNlCnJldHVybih0aGlzWzBdLnZhbHVlfHwiIikucmVwbGFjZSgvXHIvZywiIik7fXJldHVybiB1bmRlZmluZWQ7fXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzLm5vZGVUeXBlIT0xKXJldHVybjtpZih2YWx1ZS5jb25zdHJ1Y3Rvcj09QXJyYXkmJi9yYWRpb3xjaGVja2JveC8udGVzdCh0aGlzLnR5cGUpKXRoaXMuY2hlY2tlZD0oalF1ZXJ5LmluQXJyYXkodGhpcy52YWx1ZSx2YWx1ZSk+PTB8fGpRdWVyeS5pbkFycmF5KHRoaXMubmFtZSx2YWx1ZSk+PTApO2Vsc2UgaWYoalF1ZXJ5Lm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2YXIgdmFsdWVzPXZhbHVlLmNvbnN0cnVjdG9yPT1BcnJheT92YWx1ZTpbdmFsdWVdO2pRdWVyeSgib3B0aW9uIix0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD0oalF1ZXJ5LmluQXJyYXkodGhpcy52YWx1ZSx2YWx1ZXMpPj0wfHxqUXVlcnkuaW5BcnJheSh0aGlzLnRleHQsdmFsdWVzKT49MCk7fSk7aWYoIXZhbHVlcy5sZW5ndGgpdGhpcy5zZWxlY3RlZEluZGV4PS0xO31lbHNlCnRoaXMudmFsdWU9dmFsdWU7fSk7fSxodG1sOmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdmFsdWU9PXVuZGVmaW5lZD8odGhpcy5sZW5ndGg/dGhpc1swXS5pbm5lckhUTUw6bnVsbCk6dGhpcy5lbXB0eSgpLmFwcGVuZCh2YWx1ZSk7fSxyZXBsYWNlV2l0aDpmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHRoaXMuYWZ0ZXIodmFsdWUpLnJlbW92ZSgpO30sZXE6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuc2xpY2UoaSxpKzEpO30sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7fSxtYXA6ZnVuY3Rpb24oY2FsbGJhY2spe3JldHVybiB0aGlzLnB1c2hTdGFjayhqUXVlcnkubWFwKHRoaXMsZnVuY3Rpb24oZWxlbSxpKXtyZXR1cm4gY2FsbGJhY2suY2FsbChlbGVtLGksZWxlbSk7fSkpO30sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpO30sZGF0YTpmdW5jdGlvbihrZXksdmFsdWUpe3ZhciBwYXJ0cz1rZXkuc3BsaXQoIi4iKTtwYXJ0c1sxXT1wYXJ0c1sxXT8iLiIrcGFydHNbMV06IiI7aWYodmFsdWU9PW51bGwpe3ZhciBkYXRhPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK3BhcnRzWzFdKyIhIixbcGFydHNbMF1dKTtpZihkYXRhPT11bmRlZmluZWQmJnRoaXMubGVuZ3RoKWRhdGE9alF1ZXJ5LmRhdGEodGhpc1swXSxrZXkpO3JldHVybiBkYXRhPT1udWxsJiZwYXJ0c1sxXT90aGlzLmRhdGEocGFydHNbMF0pOmRhdGE7fWVsc2UKcmV0dXJuIHRoaXMudHJpZ2dlcigic2V0RGF0YSIrcGFydHNbMV0rIiEiLFtwYXJ0c1swXSx2YWx1ZV0pLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZGF0YSh0aGlzLGtleSx2YWx1ZSk7fSk7fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGtleSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5yZW1vdmVEYXRhKHRoaXMsa2V5KTt9KTt9LGRvbU1hbmlwOmZ1bmN0aW9uKGFyZ3MsdGFibGUscmV2ZXJzZSxjYWxsYmFjayl7dmFyIGNsb25lPXRoaXMubGVuZ3RoPjEsZWxlbXM7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCFlbGVtcyl7ZWxlbXM9alF1ZXJ5LmNsZWFuKGFyZ3MsdGhpcy5vd25lckRvY3VtZW50KTtpZihyZXZlcnNlKWVsZW1zLnJldmVyc2UoKTt9dmFyIG9iaj10aGlzO2lmKHRhYmxlJiZqUXVlcnkubm9kZU5hbWUodGhpcywidGFibGUiKSYmalF1ZXJ5Lm5vZGVOYW1lKGVsZW1zWzBdLCJ0ciIpKW9iaj10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHx0aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTt2YXIgc2NyaXB0cz1qUXVlcnkoW10pO2pRdWVyeS5lYWNoKGVsZW1zLGZ1bmN0aW9uKCl7dmFyIGVsZW09Y2xvbmU/alF1ZXJ5KHRoaXMpLmNsb25lKHRydWUpWzBdOnRoaXM7aWYoalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sInNjcmlwdCIpKXtzY3JpcHRzPXNjcmlwdHMuYWRkKGVsZW0pO31lbHNle2lmKGVsZW0ubm9kZVR5cGU9PTEpc2NyaXB0cz1zY3JpcHRzLmFkZChqUXVlcnkoInNjcmlwdCIsZWxlbSkucmVtb3ZlKCkpO2NhbGxiYWNrLmNhbGwob2JqLGVsZW0pO319KTtzY3JpcHRzLmVhY2goZXZhbFNjcmlwdCk7fSk7fX07alF1ZXJ5LnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1qUXVlcnkucHJvdG90eXBlO2Z1bmN0aW9uIGV2YWxTY3JpcHQoaSxlbGVtKXtpZihlbGVtLnNyYylqUXVlcnkuYWpheCh7dXJsOmVsZW0uc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSk7ZWxzZQpqUXVlcnkuZ2xvYmFsRXZhbChlbGVtLnRleHR8fGVsZW0udGV4dENvbnRlbnR8fGVsZW0uaW5uZXJIVE1MfHwiIik7aWYoZWxlbS5wYXJlbnROb2RlKWVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtKTt9alF1ZXJ5LmV4dGVuZD1qUXVlcnkuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIHRhcmdldD1hcmd1bWVudHNbMF18fHt9LGk9MSxsZW5ndGg9YXJndW1lbnRzLmxlbmd0aCxkZWVwPWZhbHNlLG9wdGlvbnM7aWYodGFyZ2V0LmNvbnN0cnVjdG9yPT1Cb29sZWFuKXtkZWVwPXRhcmdldDt0YXJnZXQ9YXJndW1lbnRzWzFdfHx7fTtpPTI7fWlmKHR5cGVvZiB0YXJnZXQhPSJvYmplY3QiJiZ0eXBlb2YgdGFyZ2V0IT0iZnVuY3Rpb24iKXRhcmdldD17fTtpZihsZW5ndGg9PTEpe3RhcmdldD10aGlzO2k9MDt9Zm9yKDtpPGxlbmd0aDtpKyspaWYoKG9wdGlvbnM9YXJndW1lbnRzW2ldKSE9bnVsbClmb3IodmFyIG5hbWUgaW4gb3B0aW9ucyl7aWYodGFyZ2V0PT09b3B0aW9uc1tuYW1lXSljb250aW51ZTtpZihkZWVwJiZvcHRpb25zW25hbWVdJiZ0eXBlb2Ygb3B0aW9uc1tuYW1lXT09Im9iamVjdCImJnRhcmdldFtuYW1lXSYmIW9wdGlvbnNbbmFtZV0ubm9kZVR5cGUpdGFyZ2V0W25hbWVdPWpRdWVyeS5leHRlbmQodGFyZ2V0W25hbWVdLG9wdGlvbnNbbmFtZV0pO2Vsc2UgaWYob3B0aW9uc1tuYW1lXSE9dW5kZWZpbmVkKXRhcmdldFtuYW1lXT1vcHRpb25zW25hbWVdO31yZXR1cm4gdGFyZ2V0O307dmFyIGV4cGFuZG89ImpRdWVyeSIrKG5ldyBEYXRlKCkpLmdldFRpbWUoKSx1dWlkPTAsd2luZG93RGF0YT17fTt2YXIgZXhjbHVkZT0vei0/aW5kZXh8Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaTtqUXVlcnkuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGRlZXApe3dpbmRvdy4kPV8kO2lmKGRlZXApd2luZG93LmpRdWVyeT1falF1ZXJ5O3JldHVybiBqUXVlcnk7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGZuKXtyZXR1cm4hIWZuJiZ0eXBlb2YgZm4hPSJzdHJpbmciJiYhZm4ubm9kZU5hbWUmJmZuLmNvbnN0cnVjdG9yIT1BcnJheSYmL2Z1bmN0aW9uL2kudGVzdChmbisiIik7fSxpc1hNTERvYzpmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5kb2N1bWVudEVsZW1lbnQmJiFlbGVtLmJvZHl8fGVsZW0udGFnTmFtZSYmZWxlbS5vd25lckRvY3VtZW50JiYhZWxlbS5vd25lckRvY3VtZW50LmJvZHk7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGRhdGEpe2RhdGE9alF1ZXJ5LnRyaW0oZGF0YSk7aWYoZGF0YSl7dmFyIGhlYWQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHNjcmlwdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzY3JpcHQudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtpZihqUXVlcnkuYnJvd3Nlci5tc2llKXNjcmlwdC50ZXh0PWRhdGE7ZWxzZQpzY3JpcHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YSkpO2hlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtoZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7fX0sbm9kZU5hbWU6ZnVuY3Rpb24oZWxlbSxuYW1lKXtyZXR1cm4gZWxlbS5ub2RlTmFtZSYmZWxlbS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT1uYW1lLnRvVXBwZXJDYXNlKCk7fSxjYWNoZTp7fSxkYXRhOmZ1bmN0aW9uKGVsZW0sbmFtZSxkYXRhKXtlbGVtPWVsZW09PXdpbmRvdz93aW5kb3dEYXRhOmVsZW07dmFyIGlkPWVsZW1bZXhwYW5kb107aWYoIWlkKWlkPWVsZW1bZXhwYW5kb109Kyt1dWlkO2lmKG5hbWUmJiFqUXVlcnkuY2FjaGVbaWRdKWpRdWVyeS5jYWNoZVtpZF09e307aWYoZGF0YSE9dW5kZWZpbmVkKWpRdWVyeS5jYWNoZVtpZF1bbmFtZV09ZGF0YTtyZXR1cm4gbmFtZT9qUXVlcnkuY2FjaGVbaWRdW25hbWVdOmlkO30scmVtb3ZlRGF0YTpmdW5jdGlvbihlbGVtLG5hbWUpe2VsZW09ZWxlbT09d2luZG93P3dpbmRvd0RhdGE6ZWxlbTt2YXIgaWQ9ZWxlbVtleHBhbmRvXTtpZihuYW1lKXtpZihqUXVlcnkuY2FjaGVbaWRdKXtkZWxldGUgalF1ZXJ5LmNhY2hlW2lkXVtuYW1lXTtuYW1lPSIiO2ZvcihuYW1lIGluIGpRdWVyeS5jYWNoZVtpZF0pYnJlYWs7aWYoIW5hbWUpalF1ZXJ5LnJlbW92ZURhdGEoZWxlbSk7fX1lbHNle3RyeXtkZWxldGUgZWxlbVtleHBhbmRvXTt9Y2F0Y2goZSl7aWYoZWxlbS5yZW1vdmVBdHRyaWJ1dGUpZWxlbS5yZW1vdmVBdHRyaWJ1dGUoZXhwYW5kbyk7fWRlbGV0ZSBqUXVlcnkuY2FjaGVbaWRdO319LGVhY2g6ZnVuY3Rpb24ob2JqZWN0LGNhbGxiYWNrLGFyZ3Mpe2lmKGFyZ3Mpe2lmKG9iamVjdC5sZW5ndGg9PXVuZGVmaW5lZCl7Zm9yKHZhciBuYW1lIGluIG9iamVjdClpZihjYWxsYmFjay5hcHBseShvYmplY3RbbmFtZV0sYXJncyk9PT1mYWxzZSlicmVhazt9ZWxzZQpmb3IodmFyIGk9MCxsZW5ndGg9b2JqZWN0Lmxlbmd0aDtpPGxlbmd0aDtpKyspaWYoY2FsbGJhY2suYXBwbHkob2JqZWN0W2ldLGFyZ3MpPT09ZmFsc2UpYnJlYWs7fWVsc2V7aWYob2JqZWN0Lmxlbmd0aD09dW5kZWZpbmVkKXtmb3IodmFyIG5hbWUgaW4gb2JqZWN0KWlmKGNhbGxiYWNrLmNhbGwob2JqZWN0W25hbWVdLG5hbWUsb2JqZWN0W25hbWVdKT09PWZhbHNlKWJyZWFrO31lbHNlCmZvcih2YXIgaT0wLGxlbmd0aD1vYmplY3QubGVuZ3RoLHZhbHVlPW9iamVjdFswXTtpPGxlbmd0aCYmY2FsbGJhY2suY2FsbCh2YWx1ZSxpLHZhbHVlKSE9PWZhbHNlO3ZhbHVlPW9iamVjdFsrK2ldKXt9fXJldHVybiBvYmplY3Q7fSxwcm9wOmZ1bmN0aW9uKGVsZW0sdmFsdWUsdHlwZSxpLG5hbWUpe2lmKGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSl2YWx1ZT12YWx1ZS5jYWxsKGVsZW0saSk7cmV0dXJuIHZhbHVlJiZ2YWx1ZS5jb25zdHJ1Y3Rvcj09TnVtYmVyJiZ0eXBlPT0iY3VyQ1NTIiYmIWV4Y2x1ZGUudGVzdChuYW1lKT92YWx1ZSsicHgiOnZhbHVlO30sY2xhc3NOYW1lOnthZGQ6ZnVuY3Rpb24oZWxlbSxjbGFzc05hbWVzKXtqUXVlcnkuZWFjaCgoY2xhc3NOYW1lc3x8IiIpLnNwbGl0KC9ccysvKSxmdW5jdGlvbihpLGNsYXNzTmFtZSl7aWYoZWxlbS5ub2RlVHlwZT09MSYmIWpRdWVyeS5jbGFzc05hbWUuaGFzKGVsZW0uY2xhc3NOYW1lLGNsYXNzTmFtZSkpZWxlbS5jbGFzc05hbWUrPShlbGVtLmNsYXNzTmFtZT8iICI6IiIpK2NsYXNzTmFtZTt9KTt9LHJlbW92ZTpmdW5jdGlvbihlbGVtLGNsYXNzTmFtZXMpe2lmKGVsZW0ubm9kZVR5cGU9PTEpZWxlbS5jbGFzc05hbWU9Y2xhc3NOYW1lcyE9dW5kZWZpbmVkP2pRdWVyeS5ncmVwKGVsZW0uY2xhc3NOYW1lLnNwbGl0KC9ccysvKSxmdW5jdGlvbihjbGFzc05hbWUpe3JldHVybiFqUXVlcnkuY2xhc3NOYW1lLmhhcyhjbGFzc05hbWVzLGNsYXNzTmFtZSk7fSkuam9pbigiICIpOiIiO30saGFzOmZ1bmN0aW9uKGVsZW0sY2xhc3NOYW1lKXtyZXR1cm4galF1ZXJ5LmluQXJyYXkoY2xhc3NOYW1lLChlbGVtLmNsYXNzTmFtZXx8ZWxlbSkudG9TdHJpbmcoKS5zcGxpdCgvXHMrLykpPi0xO319LHN3YXA6ZnVuY3Rpb24oZWxlbSxvcHRpb25zLGNhbGxiYWNrKXt2YXIgb2xkPXt9O2Zvcih2YXIgbmFtZSBpbiBvcHRpb25zKXtvbGRbbmFtZV09ZWxlbS5zdHlsZVtuYW1lXTtlbGVtLnN0eWxlW25hbWVdPW9wdGlvbnNbbmFtZV07fWNhbGxiYWNrLmNhbGwoZWxlbSk7Zm9yKHZhciBuYW1lIGluIG9wdGlvbnMpZWxlbS5zdHlsZVtuYW1lXT1vbGRbbmFtZV07fSxjc3M6ZnVuY3Rpb24oZWxlbSxuYW1lLGZvcmNlKXtpZihuYW1lPT0id2lkdGgifHxuYW1lPT0iaGVpZ2h0Iil7dmFyIHZhbCxwcm9wcz17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sd2hpY2g9bmFtZT09IndpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl07ZnVuY3Rpb24gZ2V0V0goKXt2YWw9bmFtZT09IndpZHRoIj9lbGVtLm9mZnNldFdpZHRoOmVsZW0ub2Zmc2V0SGVpZ2h0O3ZhciBwYWRkaW5nPTAsYm9yZGVyPTA7alF1ZXJ5LmVhY2god2hpY2gsZnVuY3Rpb24oKXtwYWRkaW5nKz1wYXJzZUZsb2F0KGpRdWVyeS5jdXJDU1MoZWxlbSwicGFkZGluZyIrdGhpcyx0cnVlKSl8fDA7Ym9yZGVyKz1wYXJzZUZsb2F0KGpRdWVyeS5jdXJDU1MoZWxlbSwiYm9yZGVyIit0aGlzKyJXaWR0aCIsdHJ1ZSkpfHwwO30pO3ZhbC09TWF0aC5yb3VuZChwYWRkaW5nK2JvcmRlcik7fWlmKGpRdWVyeShlbGVtKS5pcygiOnZpc2libGUiKSlnZXRXSCgpO2Vsc2UKalF1ZXJ5LnN3YXAoZWxlbSxwcm9wcyxnZXRXSCk7cmV0dXJuIE1hdGgubWF4KDAsdmFsKTt9cmV0dXJuIGpRdWVyeS5jdXJDU1MoZWxlbSxuYW1lLGZvcmNlKTt9LGN1ckNTUzpmdW5jdGlvbihlbGVtLG5hbWUsZm9yY2Upe3ZhciByZXQ7ZnVuY3Rpb24gY29sb3IoZWxlbSl7aWYoIWpRdWVyeS5icm93c2VyLnNhZmFyaSlyZXR1cm4gZmFsc2U7dmFyIHJldD1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sbnVsbCk7cmV0dXJuIXJldHx8cmV0LmdldFByb3BlcnR5VmFsdWUoImNvbG9yIik9PSIiO31pZihuYW1lPT0ib3BhY2l0eSImJmpRdWVyeS5icm93c2VyLm1zaWUpe3JldD1qUXVlcnkuYXR0cihlbGVtLnN0eWxlLCJvcGFjaXR5Iik7cmV0dXJuIHJldD09IiI/IjEiOnJldDt9aWYoalF1ZXJ5LmJyb3dzZXIub3BlcmEmJm5hbWU9PSJkaXNwbGF5Iil7dmFyIHNhdmU9ZWxlbS5zdHlsZS5vdXRsaW5lO2VsZW0uc3R5bGUub3V0bGluZT0iMCBzb2xpZCBibGFjayI7ZWxlbS5zdHlsZS5vdXRsaW5lPXNhdmU7fWlmKG5hbWUubWF0Y2goL2Zsb2F0L2kpKW5hbWU9c3R5bGVGbG9hdDtpZighZm9yY2UmJmVsZW0uc3R5bGUmJmVsZW0uc3R5bGVbbmFtZV0pcmV0PWVsZW0uc3R5bGVbbmFtZV07ZWxzZSBpZihkb2N1bWVudC5kZWZhdWx0VmlldyYmZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl7aWYobmFtZS5tYXRjaCgvZmxvYXQvaSkpbmFtZT0iZmxvYXQiO25hbWU9bmFtZS5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnRvTG93ZXJDYXNlKCk7dmFyIGdldENvbXB1dGVkU3R5bGU9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLG51bGwpO2lmKGdldENvbXB1dGVkU3R5bGUmJiFjb2xvcihlbGVtKSlyZXQ9Z2V0Q29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO2Vsc2V7dmFyIHN3YXA9W10sc3RhY2s9W107Zm9yKHZhciBhPWVsZW07YSYmY29sb3IoYSk7YT1hLnBhcmVudE5vZGUpc3RhY2sudW5zaGlmdChhKTtmb3IodmFyIGk9MDtpPHN0YWNrLmxlbmd0aDtpKyspaWYoY29sb3Ioc3RhY2tbaV0pKXtzd2FwW2ldPXN0YWNrW2ldLnN0eWxlLmRpc3BsYXk7c3RhY2tbaV0uc3R5bGUuZGlzcGxheT0iYmxvY2siO31yZXQ9bmFtZT09ImRpc3BsYXkiJiZzd2FwW3N0YWNrLmxlbmd0aC0xXSE9bnVsbD8ibm9uZSI6KGdldENvbXB1dGVkU3R5bGUmJmdldENvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSl8fCIiO2Zvcih2YXIgaT0wO2k8c3dhcC5sZW5ndGg7aSsrKWlmKHN3YXBbaV0hPW51bGwpc3RhY2tbaV0uc3R5bGUuZGlzcGxheT1zd2FwW2ldO31pZihuYW1lPT0ib3BhY2l0eSImJnJldD09IiIpcmV0PSIxIjt9ZWxzZSBpZihlbGVtLmN1cnJlbnRTdHlsZSl7dmFyIGNhbWVsQ2FzZT1uYW1lLnJlcGxhY2UoL1wtKFx3KS9nLGZ1bmN0aW9uKGFsbCxsZXR0ZXIpe3JldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTt9KTtyZXQ9ZWxlbS5jdXJyZW50U3R5bGVbbmFtZV18fGVsZW0uY3VycmVudFN0eWxlW2NhbWVsQ2FzZV07aWYoIS9eXGQrKHB4KT8kL2kudGVzdChyZXQpJiYvXlxkLy50ZXN0KHJldCkpe3ZhciBzdHlsZT1lbGVtLnN0eWxlLmxlZnQscnVudGltZVN0eWxlPWVsZW0ucnVudGltZVN0eWxlLmxlZnQ7ZWxlbS5ydW50aW1lU3R5bGUubGVmdD1lbGVtLmN1cnJlbnRTdHlsZS5sZWZ0O2VsZW0uc3R5bGUubGVmdD1yZXR8fDA7cmV0PWVsZW0uc3R5bGUucGl4ZWxMZWZ0KyJweCI7ZWxlbS5zdHlsZS5sZWZ0PXN0eWxlO2VsZW0ucnVudGltZVN0eWxlLmxlZnQ9cnVudGltZVN0eWxlO319cmV0dXJuIHJldDt9LGNsZWFuOmZ1bmN0aW9uKGVsZW1zLGNvbnRleHQpe3ZhciByZXQ9W107Y29udGV4dD1jb250ZXh0fHxkb2N1bWVudDtpZih0eXBlb2YgY29udGV4dC5jcmVhdGVFbGVtZW50PT0ndW5kZWZpbmVkJyljb250ZXh0PWNvbnRleHQub3duZXJEb2N1bWVudHx8Y29udGV4dFswXSYmY29udGV4dFswXS5vd25lckRvY3VtZW50fHxkb2N1bWVudDtqUXVlcnkuZWFjaChlbGVtcyxmdW5jdGlvbihpLGVsZW0pe2lmKCFlbGVtKXJldHVybjtpZihlbGVtLmNvbnN0cnVjdG9yPT1OdW1iZXIpZWxlbT1lbGVtLnRvU3RyaW5nKCk7aWYodHlwZW9mIGVsZW09PSJzdHJpbmciKXtlbGVtPWVsZW0ucmVwbGFjZSgvKDwoXHcrKVtePl0qPylcLz4vZyxmdW5jdGlvbihhbGwsZnJvbnQsdGFnKXtyZXR1cm4gdGFnLm1hdGNoKC9eKGFiYnJ8YnJ8Y29sfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW18aHJ8YXJlYXxlbWJlZCkkL2kpP2FsbDpmcm9udCsiPjwvIit0YWcrIj4iO30pO3ZhciB0YWdzPWpRdWVyeS50cmltKGVsZW0pLnRvTG93ZXJDYXNlKCksZGl2PWNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIHdyYXA9IXRhZ3MuaW5kZXhPZigiPG9wdCIpJiZbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdfHwhdGFncy5pbmRleE9mKCI8bGVnIikmJlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXXx8dGFncy5tYXRjaCgvXjwodGhlYWR8dGJvZHl8dGZvb3R8Y29sZ3xjYXApLykmJlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXXx8IXRhZ3MuaW5kZXhPZigiPHRyIikmJlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXXx8KCF0YWdzLmluZGV4T2YoIjx0ZCIpfHwhdGFncy5pbmRleE9mKCI8dGgiKSkmJlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXXx8IXRhZ3MuaW5kZXhPZigiPGNvbCIpJiZbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il18fGpRdWVyeS5icm93c2VyLm1zaWUmJlsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdfHxbMCwiIiwiIl07ZGl2LmlubmVySFRNTD13cmFwWzFdK2VsZW0rd3JhcFsyXTt3aGlsZSh3cmFwWzBdLS0pZGl2PWRpdi5sYXN0Q2hpbGQ7aWYoalF1ZXJ5LmJyb3dzZXIubXNpZSl7dmFyIHRib2R5PSF0YWdzLmluZGV4T2YoIjx0YWJsZSIpJiZ0YWdzLmluZGV4T2YoIjx0Ym9keSIpPDA/ZGl2LmZpcnN0Q2hpbGQmJmRpdi5maXJzdENoaWxkLmNoaWxkTm9kZXM6d3JhcFsxXT09Ijx0YWJsZT4iJiZ0YWdzLmluZGV4T2YoIjx0Ym9keSIpPDA/ZGl2LmNoaWxkTm9kZXM6W107Zm9yKHZhciBqPXRib2R5Lmxlbmd0aC0xO2o+PTA7LS1qKWlmKGpRdWVyeS5ub2RlTmFtZSh0Ym9keVtqXSwidGJvZHkiKSYmIXRib2R5W2pdLmNoaWxkTm9kZXMubGVuZ3RoKXRib2R5W2pdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGJvZHlbal0pO2lmKC9eXHMvLnRlc3QoZWxlbSkpZGl2Lmluc2VydEJlZm9yZShjb250ZXh0LmNyZWF0ZVRleHROb2RlKGVsZW0ubWF0Y2goL15ccyovKVswXSksZGl2LmZpcnN0Q2hpbGQpO31lbGVtPWpRdWVyeS5tYWtlQXJyYXkoZGl2LmNoaWxkTm9kZXMpO31pZihlbGVtLmxlbmd0aD09PTAmJighalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sImZvcm0iKSYmIWpRdWVyeS5ub2RlTmFtZShlbGVtLCJzZWxlY3QiKSkpcmV0dXJuO2lmKGVsZW1bMF09PXVuZGVmaW5lZHx8alF1ZXJ5Lm5vZGVOYW1lKGVsZW0sImZvcm0iKXx8ZWxlbS5vcHRpb25zKXJldC5wdXNoKGVsZW0pO2Vsc2UKcmV0PWpRdWVyeS5tZXJnZShyZXQsZWxlbSk7fSk7cmV0dXJuIHJldDt9LGF0dHI6ZnVuY3Rpb24oZWxlbSxuYW1lLHZhbHVlKXtpZighZWxlbXx8ZWxlbS5ub2RlVHlwZT09M3x8ZWxlbS5ub2RlVHlwZT09OClyZXR1cm4gdW5kZWZpbmVkO3ZhciBmaXg9alF1ZXJ5LmlzWE1MRG9jKGVsZW0pP3t9OmpRdWVyeS5wcm9wcztpZihuYW1lPT0ic2VsZWN0ZWQiJiZqUXVlcnkuYnJvd3Nlci5zYWZhcmkpZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7aWYoZml4W25hbWVdKXtpZih2YWx1ZSE9dW5kZWZpbmVkKWVsZW1bZml4W25hbWVdXT12YWx1ZTtyZXR1cm4gZWxlbVtmaXhbbmFtZV1dO31lbHNlIGlmKGpRdWVyeS5icm93c2VyLm1zaWUmJm5hbWU9PSJzdHlsZSIpcmV0dXJuIGpRdWVyeS5hdHRyKGVsZW0uc3R5bGUsImNzc1RleHQiLHZhbHVlKTtlbHNlIGlmKHZhbHVlPT11bmRlZmluZWQmJmpRdWVyeS5icm93c2VyLm1zaWUmJmpRdWVyeS5ub2RlTmFtZShlbGVtLCJmb3JtIikmJihuYW1lPT0iYWN0aW9uInx8bmFtZT09Im1ldGhvZCIpKXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkubm9kZVZhbHVlO2Vsc2UgaWYoZWxlbS50YWdOYW1lKXtpZih2YWx1ZSE9dW5kZWZpbmVkKXtpZihuYW1lPT0idHlwZSImJmpRdWVyeS5ub2RlTmFtZShlbGVtLCJpbnB1dCIpJiZlbGVtLnBhcmVudE5vZGUpdGhyb3cidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIjtlbGVtLnNldEF0dHJpYnV0ZShuYW1lLCIiK3ZhbHVlKTt9aWYoalF1ZXJ5LmJyb3dzZXIubXNpZSYmL2hyZWZ8c3JjLy50ZXN0KG5hbWUpJiYhalF1ZXJ5LmlzWE1MRG9jKGVsZW0pKXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShuYW1lLDIpO3JldHVybiBlbGVtLmdldEF0dHJpYnV0ZShuYW1lKTt9ZWxzZXtpZihuYW1lPT0ib3BhY2l0eSImJmpRdWVyeS5icm93c2VyLm1zaWUpe2lmKHZhbHVlIT11bmRlZmluZWQpe2VsZW0uem9vbT0xO2VsZW0uZmlsdGVyPShlbGVtLmZpbHRlcnx8IiIpLnJlcGxhY2UoL2FscGhhXChbXildKlwpLywiIikrKHBhcnNlRmxvYXQodmFsdWUpLnRvU3RyaW5nKCk9PSJOYU4iPyIiOiJhbHBoYShvcGFjaXR5PSIrdmFsdWUqMTAwKyIpIik7fXJldHVybiBlbGVtLmZpbHRlciYmZWxlbS5maWx0ZXIuaW5kZXhPZigib3BhY2l0eT0iKT49MD8ocGFyc2VGbG9hdChlbGVtLmZpbHRlci5tYXRjaCgvb3BhY2l0eT0oW14pXSopLylbMV0pLzEwMCkudG9TdHJpbmcoKToiIjt9bmFtZT1uYW1lLnJlcGxhY2UoLy0oW2Etel0pL2lnLGZ1bmN0aW9uKGFsbCxsZXR0ZXIpe3JldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTt9KTtpZih2YWx1ZSE9dW5kZWZpbmVkKWVsZW1bbmFtZV09dmFsdWU7cmV0dXJuIGVsZW1bbmFtZV07fX0sdHJpbTpmdW5jdGlvbih0ZXh0KXtyZXR1cm4odGV4dHx8IiIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTt9LG1ha2VBcnJheTpmdW5jdGlvbihhcnJheSl7dmFyIHJldD1bXTtpZih0eXBlb2YgYXJyYXkhPSJhcnJheSIpZm9yKHZhciBpPTAsbGVuZ3RoPWFycmF5Lmxlbmd0aDtpPGxlbmd0aDtpKyspcmV0LnB1c2goYXJyYXlbaV0pO2Vsc2UKcmV0PWFycmF5LnNsaWNlKDApO3JldHVybiByZXQ7fSxpbkFycmF5OmZ1bmN0aW9uKGVsZW0sYXJyYXkpe2Zvcih2YXIgaT0wLGxlbmd0aD1hcnJheS5sZW5ndGg7aTxsZW5ndGg7aSsrKWlmKGFycmF5W2ldPT1lbGVtKXJldHVybiBpO3JldHVybi0xO30sbWVyZ2U6ZnVuY3Rpb24oZmlyc3Qsc2Vjb25kKXtpZihqUXVlcnkuYnJvd3Nlci5tc2llKXtmb3IodmFyIGk9MDtzZWNvbmRbaV07aSsrKWlmKHNlY29uZFtpXS5ub2RlVHlwZSE9OClmaXJzdC5wdXNoKHNlY29uZFtpXSk7fWVsc2UKZm9yKHZhciBpPTA7c2Vjb25kW2ldO2krKylmaXJzdC5wdXNoKHNlY29uZFtpXSk7cmV0dXJuIGZpcnN0O30sdW5pcXVlOmZ1bmN0aW9uKGFycmF5KXt2YXIgcmV0PVtdLGRvbmU9e307dHJ5e2Zvcih2YXIgaT0wLGxlbmd0aD1hcnJheS5sZW5ndGg7aTxsZW5ndGg7aSsrKXt2YXIgaWQ9alF1ZXJ5LmRhdGEoYXJyYXlbaV0pO2lmKCFkb25lW2lkXSl7ZG9uZVtpZF09dHJ1ZTtyZXQucHVzaChhcnJheVtpXSk7fX19Y2F0Y2goZSl7cmV0PWFycmF5O31yZXR1cm4gcmV0O30sZ3JlcDpmdW5jdGlvbihlbGVtcyxjYWxsYmFjayxpbnYpe3ZhciByZXQ9W107Zm9yKHZhciBpPTAsbGVuZ3RoPWVsZW1zLmxlbmd0aDtpPGxlbmd0aDtpKyspaWYoIWludiYmY2FsbGJhY2soZWxlbXNbaV0saSl8fGludiYmIWNhbGxiYWNrKGVsZW1zW2ldLGkpKXJldC5wdXNoKGVsZW1zW2ldKTtyZXR1cm4gcmV0O30sbWFwOmZ1bmN0aW9uKGVsZW1zLGNhbGxiYWNrKXt2YXIgcmV0PVtdO2Zvcih2YXIgaT0wLGxlbmd0aD1lbGVtcy5sZW5ndGg7aTxsZW5ndGg7aSsrKXt2YXIgdmFsdWU9Y2FsbGJhY2soZWxlbXNbaV0saSk7aWYodmFsdWUhPT1udWxsJiZ2YWx1ZSE9dW5kZWZpbmVkKXtpZih2YWx1ZS5jb25zdHJ1Y3RvciE9QXJyYXkpdmFsdWU9W3ZhbHVlXTtyZXQ9cmV0LmNvbmNhdCh2YWx1ZSk7fX1yZXR1cm4gcmV0O319KTt2YXIgdXNlckFnZW50PW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtqUXVlcnkuYnJvd3Nlcj17dmVyc2lvbjoodXNlckFnZW50Lm1hdGNoKC8uKyg/OnJ2fGl0fHJhfGllKVtcLzogXShbXGQuXSspLyl8fFtdKVsxXSxzYWZhcmk6L3dlYmtpdC8udGVzdCh1c2VyQWdlbnQpLG9wZXJhOi9vcGVyYS8udGVzdCh1c2VyQWdlbnQpLG1zaWU6L21zaWUvLnRlc3QodXNlckFnZW50KSYmIS9vcGVyYS8udGVzdCh1c2VyQWdlbnQpLG1vemlsbGE6L21vemlsbGEvLnRlc3QodXNlckFnZW50KSYmIS8oY29tcGF0aWJsZXx3ZWJraXQpLy50ZXN0KHVzZXJBZ2VudCl9O3ZhciBzdHlsZUZsb2F0PWpRdWVyeS5icm93c2VyLm1zaWU/InN0eWxlRmxvYXQiOiJjc3NGbG9hdCI7alF1ZXJ5LmV4dGVuZCh7Ym94TW9kZWw6IWpRdWVyeS5icm93c2VyLm1zaWV8fGRvY3VtZW50LmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iixwcm9wczp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsImZsb2F0IjpzdHlsZUZsb2F0LGNzc0Zsb2F0OnN0eWxlRmxvYXQsc3R5bGVGbG9hdDpzdHlsZUZsb2F0LGlubmVySFRNTDoiaW5uZXJIVE1MIixjbGFzc05hbWU6ImNsYXNzTmFtZSIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLGNoZWNrZWQ6ImNoZWNrZWQiLHJlYWRvbmx5OiJyZWFkT25seSIsc2VsZWN0ZWQ6InNlbGVjdGVkIixtYXhsZW5ndGg6Im1heExlbmd0aCIsc2VsZWN0ZWRJbmRleDoic2VsZWN0ZWRJbmRleCIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUiLHRhZ05hbWU6InRhZ05hbWUiLG5vZGVOYW1lOiJub2RlTmFtZSJ9fSk7alF1ZXJ5LmVhY2goe3BhcmVudDpmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5wYXJlbnROb2RlO30scGFyZW50czpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmRpcihlbGVtLCJwYXJlbnROb2RlIik7fSxuZXh0OmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkubnRoKGVsZW0sMiwibmV4dFNpYmxpbmciKTt9LHByZXY6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5udGgoZWxlbSwyLCJwcmV2aW91c1NpYmxpbmciKTt9LG5leHRBbGw6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwibmV4dFNpYmxpbmciKTt9LHByZXZBbGw6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicHJldmlvdXNTaWJsaW5nIik7fSxzaWJsaW5nczpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmcoZWxlbS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsZWxlbSk7fSxjaGlsZHJlbjpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmcoZWxlbS5maXJzdENoaWxkKTt9LGNvbnRlbnRzOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkubm9kZU5hbWUoZWxlbSwiaWZyYW1lIik/ZWxlbS5jb250ZW50RG9jdW1lbnR8fGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVudDpqUXVlcnkubWFrZUFycmF5KGVsZW0uY2hpbGROb2Rlcyk7fX0sZnVuY3Rpb24obmFtZSxmbil7alF1ZXJ5LmZuW25hbWVdPWZ1bmN0aW9uKHNlbGVjdG9yKXt2YXIgcmV0PWpRdWVyeS5tYXAodGhpcyxmbik7aWYoc2VsZWN0b3ImJnR5cGVvZiBzZWxlY3Rvcj09InN0cmluZyIpcmV0PWpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3RvcixyZXQpO3JldHVybiB0aGlzLnB1c2hTdGFjayhqUXVlcnkudW5pcXVlKHJldCkpO307fSk7alF1ZXJ5LmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihuYW1lLG9yaWdpbmFsKXtqUXVlcnkuZm5bbmFtZV09ZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHM7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2YXIgaT0wLGxlbmd0aD1hcmdzLmxlbmd0aDtpPGxlbmd0aDtpKyspalF1ZXJ5KGFyZ3NbaV0pW29yaWdpbmFsXSh0aGlzKTt9KTt9O30pO2pRdWVyeS5lYWNoKHtyZW1vdmVBdHRyOmZ1bmN0aW9uKG5hbWUpe2pRdWVyeS5hdHRyKHRoaXMsbmFtZSwiIik7aWYodGhpcy5ub2RlVHlwZT09MSl0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTt9LGFkZENsYXNzOmZ1bmN0aW9uKGNsYXNzTmFtZXMpe2pRdWVyeS5jbGFzc05hbWUuYWRkKHRoaXMsY2xhc3NOYW1lcyk7fSxyZW1vdmVDbGFzczpmdW5jdGlvbihjbGFzc05hbWVzKXtqUXVlcnkuY2xhc3NOYW1lLnJlbW92ZSh0aGlzLGNsYXNzTmFtZXMpO30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oY2xhc3NOYW1lcyl7alF1ZXJ5LmNsYXNzTmFtZVtqUXVlcnkuY2xhc3NOYW1lLmhhcyh0aGlzLGNsYXNzTmFtZXMpPyJyZW1vdmUiOiJhZGQiXSh0aGlzLGNsYXNzTmFtZXMpO30scmVtb3ZlOmZ1bmN0aW9uKHNlbGVjdG9yKXtpZighc2VsZWN0b3J8fGpRdWVyeS5maWx0ZXIoc2VsZWN0b3IsW3RoaXNdKS5yLmxlbmd0aCl7alF1ZXJ5KCIqIix0aGlzKS5hZGQodGhpcykuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5yZW1vdmUodGhpcyk7alF1ZXJ5LnJlbW92ZURhdGEodGhpcyk7fSk7aWYodGhpcy5wYXJlbnROb2RlKXRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTt9fSxlbXB0eTpmdW5jdGlvbigpe2pRdWVyeSgiPioiLHRoaXMpLnJlbW92ZSgpO3doaWxlKHRoaXMuZmlyc3RDaGlsZCl0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZmlyc3RDaGlsZCk7fX0sZnVuY3Rpb24obmFtZSxmbil7alF1ZXJ5LmZuW25hbWVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmbixhcmd1bWVudHMpO307fSk7alF1ZXJ5LmVhY2goWyJIZWlnaHQiLCJXaWR0aCJdLGZ1bmN0aW9uKGksbmFtZSl7dmFyIHR5cGU9bmFtZS50b0xvd2VyQ2FzZSgpO2pRdWVyeS5mblt0eXBlXT1mdW5jdGlvbihzaXplKXtyZXR1cm4gdGhpc1swXT09d2luZG93P2pRdWVyeS5icm93c2VyLm9wZXJhJiZkb2N1bWVudC5ib2R5WyJjbGllbnQiK25hbWVdfHxqUXVlcnkuYnJvd3Nlci5zYWZhcmkmJndpbmRvd1siaW5uZXIiK25hbWVdfHxkb2N1bWVudC5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCImJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IituYW1lXXx8ZG9jdW1lbnQuYm9keVsiY2xpZW50IituYW1lXTp0aGlzWzBdPT1kb2N1bWVudD9NYXRoLm1heChNYXRoLm1heChkb2N1bWVudC5ib2R5WyJzY3JvbGwiK25hbWVdLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIituYW1lXSksTWF0aC5tYXgoZG9jdW1lbnQuYm9keVsib2Zmc2V0IituYW1lXSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIm9mZnNldCIrbmFtZV0pKTpzaXplPT11bmRlZmluZWQ/KHRoaXMubGVuZ3RoP2pRdWVyeS5jc3ModGhpc1swXSx0eXBlKTpudWxsKTp0aGlzLmNzcyh0eXBlLHNpemUuY29uc3RydWN0b3I9PVN0cmluZz9zaXplOnNpemUrInB4Iik7fTt9KTt2YXIgY2hhcnM9alF1ZXJ5LmJyb3dzZXIuc2FmYXJpJiZwYXJzZUludChqUXVlcnkuYnJvd3Nlci52ZXJzaW9uKTw0MTc/Iig/OltcXHcqXy1dfFxcXFwuKSI6Iig/OltcXHdcdTAxMjgtXHVGRkZGKl8tXXxcXFxcLikiLHF1aWNrQ2hpbGQ9bmV3IFJlZ0V4cCgiXj5cXHMqKCIrY2hhcnMrIispIikscXVpY2tJRD1uZXcgUmVnRXhwKCJeKCIrY2hhcnMrIispKCMpKCIrY2hhcnMrIispIikscXVpY2tDbGFzcz1uZXcgUmVnRXhwKCJeKFsjLl0/KSgiK2NoYXJzKyIqKSIpO2pRdWVyeS5leHRlbmQoe2V4cHI6eyIiOmZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gbVsyXT09IioifHxqUXVlcnkubm9kZU5hbWUoYSxtWzJdKTt9LCIjIjpmdW5jdGlvbihhLGksbSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJpZCIpPT1tWzJdO30sIjoiOntsdDpmdW5jdGlvbihhLGksbSl7cmV0dXJuIGk8bVszXS0wO30sZ3Q6ZnVuY3Rpb24oYSxpLG0pe3JldHVybiBpPm1bM10tMDt9LG50aDpmdW5jdGlvbihhLGksbSl7cmV0dXJuIG1bM10tMD09aTt9LGVxOmZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gbVszXS0wPT1pO30sZmlyc3Q6ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaT09MDt9LGxhc3Q6ZnVuY3Rpb24oYSxpLG0scil7cmV0dXJuIGk9PXIubGVuZ3RoLTE7fSxldmVuOmZ1bmN0aW9uKGEsaSl7cmV0dXJuIGklMj09MDt9LG9kZDpmdW5jdGlvbihhLGkpe3JldHVybiBpJTI7fSwiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKVswXT09YTt9LCJsYXN0LWNoaWxkIjpmdW5jdGlvbihhKXtyZXR1cm4galF1ZXJ5Lm50aChhLnBhcmVudE5vZGUubGFzdENoaWxkLDEsInByZXZpb3VzU2libGluZyIpPT1hO30sIm9ubHktY2hpbGQiOmZ1bmN0aW9uKGEpe3JldHVybiFqUXVlcnkubnRoKGEucGFyZW50Tm9kZS5sYXN0Q2hpbGQsMiwicHJldmlvdXNTaWJsaW5nIik7fSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlyc3RDaGlsZDt9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGQ7fSxjb250YWluczpmdW5jdGlvbihhLGksbSl7cmV0dXJuKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0fHxqUXVlcnkoYSkudGV4dCgpfHwiIikuaW5kZXhPZihtWzNdKT49MDt9LHZpc2libGU6ZnVuY3Rpb24oYSl7cmV0dXJuImhpZGRlbiIhPWEudHlwZSYmalF1ZXJ5LmNzcyhhLCJkaXNwbGF5IikhPSJub25lIiYmalF1ZXJ5LmNzcyhhLCJ2aXNpYmlsaXR5IikhPSJoaWRkZW4iO30saGlkZGVuOmZ1bmN0aW9uKGEpe3JldHVybiJoaWRkZW4iPT1hLnR5cGV8fGpRdWVyeS5jc3MoYSwiZGlzcGxheSIpPT0ibm9uZSJ8fGpRdWVyeS5jc3MoYSwidmlzaWJpbGl0eSIpPT0iaGlkZGVuIjt9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWEuZGlzYWJsZWQ7fSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZDt9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZDt9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnNlbGVjdGVkfHxqUXVlcnkuYXR0cihhLCJzZWxlY3RlZCIpO30sdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4idGV4dCI9PWEudHlwZTt9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiJyYWRpbyI9PWEudHlwZTt9LGNoZWNrYm94OmZ1bmN0aW9uKGEpe3JldHVybiJjaGVja2JveCI9PWEudHlwZTt9LGZpbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImZpbGUiPT1hLnR5cGU7fSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4icGFzc3dvcmQiPT1hLnR5cGU7fSxzdWJtaXQ6ZnVuY3Rpb24oYSl7cmV0dXJuInN1Ym1pdCI9PWEudHlwZTt9LGltYWdlOmZ1bmN0aW9uKGEpe3JldHVybiJpbWFnZSI9PWEudHlwZTt9LHJlc2V0OmZ1bmN0aW9uKGEpe3JldHVybiJyZXNldCI9PWEudHlwZTt9LGJ1dHRvbjpmdW5jdGlvbihhKXtyZXR1cm4iYnV0dG9uIj09YS50eXBlfHxqUXVlcnkubm9kZU5hbWUoYSwiYnV0dG9uIik7fSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3QoYS5ub2RlTmFtZSk7fSxoYXM6ZnVuY3Rpb24oYSxpLG0pe3JldHVybiBqUXVlcnkuZmluZChtWzNdLGEpLmxlbmd0aDt9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4vaFxkL2kudGVzdChhLm5vZGVOYW1lKTt9LGFuaW1hdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLGZ1bmN0aW9uKGZuKXtyZXR1cm4gYT09Zm4uZWxlbTt9KS5sZW5ndGg7fX19LHBhcnNlOlsvXihcWykgKkA/KFtcdy1dKykgKihbISokXn49XSopICooJz8iPykoLio/KVw0ICpcXS8sL14oOikoW1x3LV0rKVwoIj8nPyguKj8oXCguKj9cKSk/W14oXSo/KSI/Jz9cKS8sbmV3IFJlZ0V4cCgiXihbOi4jXSopKCIrY2hhcnMrIispIildLG11bHRpRmlsdGVyOmZ1bmN0aW9uKGV4cHIsZWxlbXMsbm90KXt2YXIgb2xkLGN1cj1bXTt3aGlsZShleHByJiZleHByIT1vbGQpe29sZD1leHByO3ZhciBmPWpRdWVyeS5maWx0ZXIoZXhwcixlbGVtcyxub3QpO2V4cHI9Zi50LnJlcGxhY2UoL15ccyosXHMqLywiIik7Y3VyPW5vdD9lbGVtcz1mLnI6alF1ZXJ5Lm1lcmdlKGN1cixmLnIpO31yZXR1cm4gY3VyO30sZmluZDpmdW5jdGlvbih0LGNvbnRleHQpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm5bdF07aWYoY29udGV4dCYmY29udGV4dC5ub2RlVHlwZSE9MSYmY29udGV4dC5ub2RlVHlwZSE9OSlyZXR1cm5bXTtjb250ZXh0PWNvbnRleHR8fGRvY3VtZW50O3ZhciByZXQ9W2NvbnRleHRdLGRvbmU9W10sbGFzdCxub2RlTmFtZTt3aGlsZSh0JiZsYXN0IT10KXt2YXIgcj1bXTtsYXN0PXQ7dD1qUXVlcnkudHJpbSh0KTt2YXIgZm91bmRUb2tlbj1mYWxzZTt2YXIgcmU9cXVpY2tDaGlsZDt2YXIgbT1yZS5leGVjKHQpO2lmKG0pe25vZGVOYW1lPW1bMV0udG9VcHBlckNhc2UoKTtmb3IodmFyIGk9MDtyZXRbaV07aSsrKWZvcih2YXIgYz1yZXRbaV0uZmlyc3RDaGlsZDtjO2M9Yy5uZXh0U2libGluZylpZihjLm5vZGVUeXBlPT0xJiYobm9kZU5hbWU9PSIqInx8Yy5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT1ub2RlTmFtZSkpci5wdXNoKGMpO3JldD1yO3Q9dC5yZXBsYWNlKHJlLCIiKTtpZih0LmluZGV4T2YoIiAiKT09MCljb250aW51ZTtmb3VuZFRva2VuPXRydWU7fWVsc2V7cmU9L14oWz4rfl0pXHMqKFx3KikvaTtpZigobT1yZS5leGVjKHQpKSE9bnVsbCl7cj1bXTt2YXIgbWVyZ2U9e307bm9kZU5hbWU9bVsyXS50b1VwcGVyQ2FzZSgpO209bVsxXTtmb3IodmFyIGo9MCxybD1yZXQubGVuZ3RoO2o8cmw7aisrKXt2YXIgbj1tPT0ifiJ8fG09PSIrIj9yZXRbal0ubmV4dFNpYmxpbmc6cmV0W2pdLmZpcnN0Q2hpbGQ7Zm9yKDtuO249bi5uZXh0U2libGluZylpZihuLm5vZGVUeXBlPT0xKXt2YXIgaWQ9alF1ZXJ5LmRhdGEobik7aWYobT09In4iJiZtZXJnZVtpZF0pYnJlYWs7aWYoIW5vZGVOYW1lfHxuLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PW5vZGVOYW1lKXtpZihtPT0ifiIpbWVyZ2VbaWRdPXRydWU7ci5wdXNoKG4pO31pZihtPT0iKyIpYnJlYWs7fX1yZXQ9cjt0PWpRdWVyeS50cmltKHQucmVwbGFjZShyZSwiIikpO2ZvdW5kVG9rZW49dHJ1ZTt9fWlmKHQmJiFmb3VuZFRva2VuKXtpZighdC5pbmRleE9mKCIsIikpe2lmKGNvbnRleHQ9PXJldFswXSlyZXQuc2hpZnQoKTtkb25lPWpRdWVyeS5tZXJnZShkb25lLHJldCk7cj1yZXQ9W2NvbnRleHRdO3Q9IiAiK3Quc3Vic3RyKDEsdC5sZW5ndGgpO31lbHNle3ZhciByZTI9cXVpY2tJRDt2YXIgbT1yZTIuZXhlYyh0KTtpZihtKXttPVswLG1bMl0sbVszXSxtWzFdXTt9ZWxzZXtyZTI9cXVpY2tDbGFzczttPXJlMi5leGVjKHQpO31tWzJdPW1bMl0ucmVwbGFjZSgvXFwvZywiIik7dmFyIGVsZW09cmV0W3JldC5sZW5ndGgtMV07aWYobVsxXT09IiMiJiZlbGVtJiZlbGVtLmdldEVsZW1lbnRCeUlkJiYhalF1ZXJ5LmlzWE1MRG9jKGVsZW0pKXt2YXIgb2lkPWVsZW0uZ2V0RWxlbWVudEJ5SWQobVsyXSk7aWYoKGpRdWVyeS5icm93c2VyLm1zaWV8fGpRdWVyeS5icm93c2VyLm9wZXJhKSYmb2lkJiZ0eXBlb2Ygb2lkLmlkPT0ic3RyaW5nIiYmb2lkLmlkIT1tWzJdKW9pZD1qUXVlcnkoJ1tAaWQ9IicrbVsyXSsnIl0nLGVsZW0pWzBdO3JldD1yPW9pZCYmKCFtWzNdfHxqUXVlcnkubm9kZU5hbWUob2lkLG1bM10pKT9bb2lkXTpbXTt9ZWxzZXtmb3IodmFyIGk9MDtyZXRbaV07aSsrKXt2YXIgdGFnPW1bMV09PSIjIiYmbVszXT9tWzNdOm1bMV0hPSIifHxtWzBdPT0iIj8iKiI6bVsyXTtpZih0YWc9PSIqIiYmcmV0W2ldLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJvYmplY3QiKXRhZz0icGFyYW0iO3I9alF1ZXJ5Lm1lcmdlKHIscmV0W2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZykpO31pZihtWzFdPT0iLiIpcj1qUXVlcnkuY2xhc3NGaWx0ZXIocixtWzJdKTtpZihtWzFdPT0iIyIpe3ZhciB0bXA9W107Zm9yKHZhciBpPTA7cltpXTtpKyspaWYocltpXS5nZXRBdHRyaWJ1dGUoImlkIik9PW1bMl0pe3RtcD1bcltpXV07YnJlYWs7fXI9dG1wO31yZXQ9cjt9dD10LnJlcGxhY2UocmUyLCIiKTt9fWlmKHQpe3ZhciB2YWw9alF1ZXJ5LmZpbHRlcih0LHIpO3JldD1yPXZhbC5yO3Q9alF1ZXJ5LnRyaW0odmFsLnQpO319aWYodClyZXQ9W107aWYocmV0JiZjb250ZXh0PT1yZXRbMF0pcmV0LnNoaWZ0KCk7ZG9uZT1qUXVlcnkubWVyZ2UoZG9uZSxyZXQpO3JldHVybiBkb25lO30sY2xhc3NGaWx0ZXI6ZnVuY3Rpb24ocixtLG5vdCl7bT0iICIrbSsiICI7dmFyIHRtcD1bXTtmb3IodmFyIGk9MDtyW2ldO2krKyl7dmFyIHBhc3M9KCIgIityW2ldLmNsYXNzTmFtZSsiICIpLmluZGV4T2YobSk+PTA7aWYoIW5vdCYmcGFzc3x8bm90JiYhcGFzcyl0bXAucHVzaChyW2ldKTt9cmV0dXJuIHRtcDt9LGZpbHRlcjpmdW5jdGlvbih0LHIsbm90KXt2YXIgbGFzdDt3aGlsZSh0JiZ0IT1sYXN0KXtsYXN0PXQ7dmFyIHA9alF1ZXJ5LnBhcnNlLG07Zm9yKHZhciBpPTA7cFtpXTtpKyspe209cFtpXS5leGVjKHQpO2lmKG0pe3Q9dC5zdWJzdHJpbmcobVswXS5sZW5ndGgpO21bMl09bVsyXS5yZXBsYWNlKC9cXC9nLCIiKTticmVhazt9fWlmKCFtKWJyZWFrO2lmKG1bMV09PSI6IiYmbVsyXT09Im5vdCIpcj1pc1NpbXBsZS50ZXN0KG1bM10pP2pRdWVyeS5maWx0ZXIobVszXSxyLHRydWUpLnI6alF1ZXJ5KHIpLm5vdChtWzNdKTtlbHNlIGlmKG1bMV09PSIuIilyPWpRdWVyeS5jbGFzc0ZpbHRlcihyLG1bMl0sbm90KTtlbHNlIGlmKG1bMV09PSJbIil7dmFyIHRtcD1bXSx0eXBlPW1bM107Zm9yKHZhciBpPTAscmw9ci5sZW5ndGg7aTxybDtpKyspe3ZhciBhPXJbaV0sej1hW2pRdWVyeS5wcm9wc1ttWzJdXXx8bVsyXV07aWYoej09bnVsbHx8L2hyZWZ8c3JjfHNlbGVjdGVkLy50ZXN0KG1bMl0pKXo9alF1ZXJ5LmF0dHIoYSxtWzJdKXx8Jyc7aWYoKHR5cGU9PSIiJiYhIXp8fHR5cGU9PSI9IiYmej09bVs1XXx8dHlwZT09IiE9IiYmeiE9bVs1XXx8dHlwZT09Il49IiYmeiYmIXouaW5kZXhPZihtWzVdKXx8dHlwZT09IiQ9IiYmei5zdWJzdHIoei5sZW5ndGgtbVs1XS5sZW5ndGgpPT1tWzVdfHwodHlwZT09Iio9Inx8dHlwZT09In49IikmJnouaW5kZXhPZihtWzVdKT49MClebm90KXRtcC5wdXNoKGEpO31yPXRtcDt9ZWxzZSBpZihtWzFdPT0iOiImJm1bMl09PSJudGgtY2hpbGQiKXt2YXIgbWVyZ2U9e30sdG1wPVtdLHRlc3Q9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhtWzNdPT0iZXZlbiImJiIybiJ8fG1bM109PSJvZGQiJiYiMm4rMSJ8fCEvXEQvLnRlc3QobVszXSkmJiIwbisiK21bM118fG1bM10pLGZpcnN0PSh0ZXN0WzFdKyh0ZXN0WzJdfHwxKSktMCxsYXN0PXRlc3RbM10tMDtmb3IodmFyIGk9MCxybD1yLmxlbmd0aDtpPHJsO2krKyl7dmFyIG5vZGU9cltpXSxwYXJlbnROb2RlPW5vZGUucGFyZW50Tm9kZSxpZD1qUXVlcnkuZGF0YShwYXJlbnROb2RlKTtpZighbWVyZ2VbaWRdKXt2YXIgYz0xO2Zvcih2YXIgbj1wYXJlbnROb2RlLmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpaWYobi5ub2RlVHlwZT09MSluLm5vZGVJbmRleD1jKys7bWVyZ2VbaWRdPXRydWU7fXZhciBhZGQ9ZmFsc2U7aWYoZmlyc3Q9PTApe2lmKG5vZGUubm9kZUluZGV4PT1sYXN0KWFkZD10cnVlO31lbHNlIGlmKChub2RlLm5vZGVJbmRleC1sYXN0KSVmaXJzdD09MCYmKG5vZGUubm9kZUluZGV4LWxhc3QpL2ZpcnN0Pj0wKWFkZD10cnVlO2lmKGFkZF5ub3QpdG1wLnB1c2gobm9kZSk7fXI9dG1wO31lbHNle3ZhciBmbj1qUXVlcnkuZXhwclttWzFdXTtpZih0eXBlb2YgZm49PSJvYmplY3QiKWZuPWZuW21bMl1dO2lmKHR5cGVvZiBmbj09InN0cmluZyIpZm49ZXZhbCgiZmFsc2V8fGZ1bmN0aW9uKGEsaSl7cmV0dXJuICIrZm4rIjt9Iik7cj1qUXVlcnkuZ3JlcChyLGZ1bmN0aW9uKGVsZW0saSl7cmV0dXJuIGZuKGVsZW0saSxtLHIpO30sbm90KTt9fXJldHVybntyOnIsdDp0fTt9LGRpcjpmdW5jdGlvbihlbGVtLGRpcil7dmFyIG1hdGNoZWQ9W107dmFyIGN1cj1lbGVtW2Rpcl07d2hpbGUoY3VyJiZjdXIhPWRvY3VtZW50KXtpZihjdXIubm9kZVR5cGU9PTEpbWF0Y2hlZC5wdXNoKGN1cik7Y3VyPWN1cltkaXJdO31yZXR1cm4gbWF0Y2hlZDt9LG50aDpmdW5jdGlvbihjdXIscmVzdWx0LGRpcixlbGVtKXtyZXN1bHQ9cmVzdWx0fHwxO3ZhciBudW09MDtmb3IoO2N1cjtjdXI9Y3VyW2Rpcl0paWYoY3VyLm5vZGVUeXBlPT0xJiYrK251bT09cmVzdWx0KWJyZWFrO3JldHVybiBjdXI7fSxzaWJsaW5nOmZ1bmN0aW9uKG4sZWxlbSl7dmFyIHI9W107Zm9yKDtuO249bi5uZXh0U2libGluZyl7aWYobi5ub2RlVHlwZT09MSYmKCFlbGVtfHxuIT1lbGVtKSlyLnB1c2gobik7fXJldHVybiByO319KTtqUXVlcnkuZXZlbnQ9e2FkZDpmdW5jdGlvbihlbGVtLHR5cGVzLGhhbmRsZXIsZGF0YSl7aWYoZWxlbS5ub2RlVHlwZT09M3x8ZWxlbS5ub2RlVHlwZT09OClyZXR1cm47aWYoalF1ZXJ5LmJyb3dzZXIubXNpZSYmZWxlbS5zZXRJbnRlcnZhbCE9dW5kZWZpbmVkKWVsZW09d2luZG93O2lmKCFoYW5kbGVyLmd1aWQpaGFuZGxlci5ndWlkPXRoaXMuZ3VpZCsrO2lmKGRhdGEhPXVuZGVmaW5lZCl7dmFyIGZuPWhhbmRsZXI7aGFuZGxlcj1mdW5jdGlvbigpe3JldHVybiBmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fTtoYW5kbGVyLmRhdGE9ZGF0YTtoYW5kbGVyLmd1aWQ9Zm4uZ3VpZDt9dmFyIGV2ZW50cz1qUXVlcnkuZGF0YShlbGVtLCJldmVudHMiKXx8alF1ZXJ5LmRhdGEoZWxlbSwiZXZlbnRzIix7fSksaGFuZGxlPWpRdWVyeS5kYXRhKGVsZW0sImhhbmRsZSIpfHxqUXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiLGZ1bmN0aW9uKCl7dmFyIHZhbDtpZih0eXBlb2YgalF1ZXJ5PT0idW5kZWZpbmVkInx8alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZClyZXR1cm4gdmFsO3ZhbD1qUXVlcnkuZXZlbnQuaGFuZGxlLmFwcGx5KGFyZ3VtZW50cy5jYWxsZWUuZWxlbSxhcmd1bWVudHMpO3JldHVybiB2YWw7fSk7aGFuZGxlLmVsZW09ZWxlbTtqUXVlcnkuZWFjaCh0eXBlcy5zcGxpdCgvXHMrLyksZnVuY3Rpb24oaW5kZXgsdHlwZSl7dmFyIHBhcnRzPXR5cGUuc3BsaXQoIi4iKTt0eXBlPXBhcnRzWzBdO2hhbmRsZXIudHlwZT1wYXJ0c1sxXTt2YXIgaGFuZGxlcnM9ZXZlbnRzW3R5cGVdO2lmKCFoYW5kbGVycyl7aGFuZGxlcnM9ZXZlbnRzW3R5cGVdPXt9O2lmKCFqUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXXx8alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0uc2V0dXAuY2FsbChlbGVtKT09PWZhbHNlKXtpZihlbGVtLmFkZEV2ZW50TGlzdGVuZXIpZWxlbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsaGFuZGxlLGZhbHNlKTtlbHNlIGlmKGVsZW0uYXR0YWNoRXZlbnQpZWxlbS5hdHRhY2hFdmVudCgib24iK3R5cGUsaGFuZGxlKTt9fWhhbmRsZXJzW2hhbmRsZXIuZ3VpZF09aGFuZGxlcjtqUXVlcnkuZXZlbnQuZ2xvYmFsW3R5cGVdPXRydWU7fSk7ZWxlbT1udWxsO30sZ3VpZDoxLGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oZWxlbSx0eXBlcyxoYW5kbGVyKXtpZihlbGVtLm5vZGVUeXBlPT0zfHxlbGVtLm5vZGVUeXBlPT04KXJldHVybjt2YXIgZXZlbnRzPWpRdWVyeS5kYXRhKGVsZW0sImV2ZW50cyIpLHJldCxpbmRleDtpZihldmVudHMpe2lmKHR5cGVzPT11bmRlZmluZWR8fCh0eXBlb2YgdHlwZXM9PSJzdHJpbmciJiZ0eXBlcy5jaGFyQXQoMCk9PSIuIikpZm9yKHZhciB0eXBlIGluIGV2ZW50cyl0aGlzLnJlbW92ZShlbGVtLHR5cGUrKHR5cGVzfHwiIikpO2Vsc2V7aWYodHlwZXMudHlwZSl7aGFuZGxlcj10eXBlcy5oYW5kbGVyO3R5cGVzPXR5cGVzLnR5cGU7fWpRdWVyeS5lYWNoKHR5cGVzLnNwbGl0KC9ccysvKSxmdW5jdGlvbihpbmRleCx0eXBlKXt2YXIgcGFydHM9dHlwZS5zcGxpdCgiLiIpO3R5cGU9cGFydHNbMF07aWYoZXZlbnRzW3R5cGVdKXtpZihoYW5kbGVyKWRlbGV0ZSBldmVudHNbdHlwZV1baGFuZGxlci5ndWlkXTtlbHNlCmZvcihoYW5kbGVyIGluIGV2ZW50c1t0eXBlXSlpZighcGFydHNbMV18fGV2ZW50c1t0eXBlXVtoYW5kbGVyXS50eXBlPT1wYXJ0c1sxXSlkZWxldGUgZXZlbnRzW3R5cGVdW2hhbmRsZXJdO2ZvcihyZXQgaW4gZXZlbnRzW3R5cGVdKWJyZWFrO2lmKCFyZXQpe2lmKCFqUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXXx8alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0udGVhcmRvd24uY2FsbChlbGVtKT09PWZhbHNlKXtpZihlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIpZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsalF1ZXJ5LmRhdGEoZWxlbSwiaGFuZGxlIiksZmFsc2UpO2Vsc2UgaWYoZWxlbS5kZXRhY2hFdmVudCllbGVtLmRldGFjaEV2ZW50KCJvbiIrdHlwZSxqUXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiKSk7fXJldD1udWxsO2RlbGV0ZSBldmVudHNbdHlwZV07fX19KTt9Zm9yKHJldCBpbiBldmVudHMpYnJlYWs7aWYoIXJldCl7dmFyIGhhbmRsZT1qUXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiKTtpZihoYW5kbGUpaGFuZGxlLmVsZW09bnVsbDtqUXVlcnkucmVtb3ZlRGF0YShlbGVtLCJldmVudHMiKTtqUXVlcnkucmVtb3ZlRGF0YShlbGVtLCJoYW5kbGUiKTt9fX0sdHJpZ2dlcjpmdW5jdGlvbih0eXBlLGRhdGEsZWxlbSxkb25hdGl2ZSxleHRyYSl7ZGF0YT1qUXVlcnkubWFrZUFycmF5KGRhdGF8fFtdKTtpZih0eXBlLmluZGV4T2YoIiEiKT49MCl7dHlwZT10eXBlLnNsaWNlKDAsLTEpO3ZhciBleGNsdXNpdmU9dHJ1ZTt9aWYoIWVsZW0pe2lmKHRoaXMuZ2xvYmFsW3R5cGVdKWpRdWVyeSgiKiIpLmFkZChbd2luZG93LGRvY3VtZW50XSkudHJpZ2dlcih0eXBlLGRhdGEpO31lbHNle2lmKGVsZW0ubm9kZVR5cGU9PTN8fGVsZW0ubm9kZVR5cGU9PTgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgdmFsLHJldCxmbj1qUXVlcnkuaXNGdW5jdGlvbihlbGVtW3R5cGVdfHxudWxsKSxldmVudD0hZGF0YVswXXx8IWRhdGFbMF0ucHJldmVudERlZmF1bHQ7aWYoZXZlbnQpZGF0YS51bnNoaWZ0KHRoaXMuZml4KHt0eXBlOnR5cGUsdGFyZ2V0OmVsZW19KSk7ZGF0YVswXS50eXBlPXR5cGU7aWYoZXhjbHVzaXZlKWRhdGFbMF0uZXhjbHVzaXZlPXRydWU7aWYoalF1ZXJ5LmlzRnVuY3Rpb24oalF1ZXJ5LmRhdGEoZWxlbSwiaGFuZGxlIikpKXZhbD1qUXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiKS5hcHBseShlbGVtLGRhdGEpO2lmKCFmbiYmZWxlbVsib24iK3R5cGVdJiZlbGVtWyJvbiIrdHlwZV0uYXBwbHkoZWxlbSxkYXRhKT09PWZhbHNlKXZhbD1mYWxzZTtpZihldmVudClkYXRhLnNoaWZ0KCk7aWYoZXh0cmEmJmpRdWVyeS5pc0Z1bmN0aW9uKGV4dHJhKSl7cmV0PWV4dHJhLmFwcGx5KGVsZW0sdmFsPT1udWxsP2RhdGE6ZGF0YS5jb25jYXQodmFsKSk7aWYocmV0IT09dW5kZWZpbmVkKXZhbD1yZXQ7fWlmKGZuJiZkb25hdGl2ZSE9PWZhbHNlJiZ2YWwhPT1mYWxzZSYmIShqUXVlcnkubm9kZU5hbWUoZWxlbSwnYScpJiZ0eXBlPT0iY2xpY2siKSl7dGhpcy50cmlnZ2VyZWQ9dHJ1ZTt0cnl7ZWxlbVt0eXBlXSgpO31jYXRjaChlKXt9fXRoaXMudHJpZ2dlcmVkPWZhbHNlO31yZXR1cm4gdmFsO30saGFuZGxlOmZ1bmN0aW9uKGV2ZW50KXt2YXIgdmFsO2V2ZW50PWpRdWVyeS5ldmVudC5maXgoZXZlbnR8fHdpbmRvdy5ldmVudHx8e30pO3ZhciBwYXJ0cz1ldmVudC50eXBlLnNwbGl0KCIuIik7ZXZlbnQudHlwZT1wYXJ0c1swXTt2YXIgaGFuZGxlcnM9alF1ZXJ5LmRhdGEodGhpcywiZXZlbnRzIikmJmpRdWVyeS5kYXRhKHRoaXMsImV2ZW50cyIpW2V2ZW50LnR5cGVdLGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2FyZ3MudW5zaGlmdChldmVudCk7Zm9yKHZhciBqIGluIGhhbmRsZXJzKXt2YXIgaGFuZGxlcj1oYW5kbGVyc1tqXTthcmdzWzBdLmhhbmRsZXI9aGFuZGxlcjthcmdzWzBdLmRhdGE9aGFuZGxlci5kYXRhO2lmKCFwYXJ0c1sxXSYmIWV2ZW50LmV4Y2x1c2l2ZXx8aGFuZGxlci50eXBlPT1wYXJ0c1sxXSl7dmFyIHJldD1oYW5kbGVyLmFwcGx5KHRoaXMsYXJncyk7aWYodmFsIT09ZmFsc2UpdmFsPXJldDtpZihyZXQ9PT1mYWxzZSl7ZXZlbnQucHJldmVudERlZmF1bHQoKTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9fX1pZihqUXVlcnkuYnJvd3Nlci5tc2llKWV2ZW50LnRhcmdldD1ldmVudC5wcmV2ZW50RGVmYXVsdD1ldmVudC5zdG9wUHJvcGFnYXRpb249ZXZlbnQuaGFuZGxlcj1ldmVudC5kYXRhPW51bGw7cmV0dXJuIHZhbDt9LGZpeDpmdW5jdGlvbihldmVudCl7dmFyIG9yaWdpbmFsRXZlbnQ9ZXZlbnQ7ZXZlbnQ9alF1ZXJ5LmV4dGVuZCh7fSxvcmlnaW5hbEV2ZW50KTtldmVudC5wcmV2ZW50RGVmYXVsdD1mdW5jdGlvbigpe2lmKG9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQpb3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO29yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZmFsc2U7fTtldmVudC5zdG9wUHJvcGFnYXRpb249ZnVuY3Rpb24oKXtpZihvcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbilvcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO29yaWdpbmFsRXZlbnQuY2FuY2VsQnViYmxlPXRydWU7fTtpZighZXZlbnQudGFyZ2V0KWV2ZW50LnRhcmdldD1ldmVudC5zcmNFbGVtZW50fHxkb2N1bWVudDtpZihldmVudC50YXJnZXQubm9kZVR5cGU9PTMpZXZlbnQudGFyZ2V0PW9yaWdpbmFsRXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7aWYoIWV2ZW50LnJlbGF0ZWRUYXJnZXQmJmV2ZW50LmZyb21FbGVtZW50KWV2ZW50LnJlbGF0ZWRUYXJnZXQ9ZXZlbnQuZnJvbUVsZW1lbnQ9PWV2ZW50LnRhcmdldD9ldmVudC50b0VsZW1lbnQ6ZXZlbnQuZnJvbUVsZW1lbnQ7aWYoZXZlbnQucGFnZVg9PW51bGwmJmV2ZW50LmNsaWVudFghPW51bGwpe3ZhciBkb2M9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGJvZHk9ZG9jdW1lbnQuYm9keTtldmVudC5wYWdlWD1ldmVudC5jbGllbnRYKyhkb2MmJmRvYy5zY3JvbGxMZWZ0fHxib2R5JiZib2R5LnNjcm9sbExlZnR8fDApLShkb2MuY2xpZW50TGVmdHx8MCk7ZXZlbnQucGFnZVk9ZXZlbnQuY2xpZW50WSsoZG9jJiZkb2Muc2Nyb2xsVG9wfHxib2R5JiZib2R5LnNjcm9sbFRvcHx8MCktKGRvYy5jbGllbnRUb3B8fDApO31pZighZXZlbnQud2hpY2gmJigoZXZlbnQuY2hhckNvZGV8fGV2ZW50LmNoYXJDb2RlPT09MCk/ZXZlbnQuY2hhckNvZGU6ZXZlbnQua2V5Q29kZSkpZXZlbnQud2hpY2g9ZXZlbnQuY2hhckNvZGV8fGV2ZW50LmtleUNvZGU7aWYoIWV2ZW50Lm1ldGFLZXkmJmV2ZW50LmN0cmxLZXkpZXZlbnQubWV0YUtleT1ldmVudC5jdHJsS2V5O2lmKCFldmVudC53aGljaCYmZXZlbnQuYnV0dG9uKWV2ZW50LndoaWNoPShldmVudC5idXR0b24mMT8xOihldmVudC5idXR0b24mMj8zOihldmVudC5idXR0b24mND8yOjApKSk7cmV0dXJuIGV2ZW50O30sc3BlY2lhbDp7cmVhZHk6e3NldHVwOmZ1bmN0aW9uKCl7YmluZFJlYWR5KCk7cmV0dXJuO30sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm47fX0sbW91c2VlbnRlcjp7c2V0dXA6ZnVuY3Rpb24oKXtpZihqUXVlcnkuYnJvd3Nlci5tc2llKXJldHVybiBmYWxzZTtqUXVlcnkodGhpcykuYmluZCgibW91c2VvdmVyIixqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVyLmhhbmRsZXIpO3JldHVybiB0cnVlO30sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihqUXVlcnkuYnJvd3Nlci5tc2llKXJldHVybiBmYWxzZTtqUXVlcnkodGhpcykudW5iaW5kKCJtb3VzZW92ZXIiLGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlZW50ZXIuaGFuZGxlcik7cmV0dXJuIHRydWU7fSxoYW5kbGVyOmZ1bmN0aW9uKGV2ZW50KXtpZih3aXRoaW5FbGVtZW50KGV2ZW50LHRoaXMpKXJldHVybiB0cnVlO2FyZ3VtZW50c1swXS50eXBlPSJtb3VzZWVudGVyIjtyZXR1cm4galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fX0sbW91c2VsZWF2ZTp7c2V0dXA6ZnVuY3Rpb24oKXtpZihqUXVlcnkuYnJvd3Nlci5tc2llKXJldHVybiBmYWxzZTtqUXVlcnkodGhpcykuYmluZCgibW91c2VvdXQiLGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlbGVhdmUuaGFuZGxlcik7cmV0dXJuIHRydWU7fSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGpRdWVyeS5icm93c2VyLm1zaWUpcmV0dXJuIGZhbHNlO2pRdWVyeSh0aGlzKS51bmJpbmQoIm1vdXNlb3V0IixqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWxlYXZlLmhhbmRsZXIpO3JldHVybiB0cnVlO30saGFuZGxlcjpmdW5jdGlvbihldmVudCl7aWYod2l0aGluRWxlbWVudChldmVudCx0aGlzKSlyZXR1cm4gdHJ1ZTthcmd1bWVudHNbMF0udHlwZT0ibW91c2VsZWF2ZSI7cmV0dXJuIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO319fX07alF1ZXJ5LmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbih0eXBlLGRhdGEsZm4pe3JldHVybiB0eXBlPT0idW5sb2FkIj90aGlzLm9uZSh0eXBlLGRhdGEsZm4pOnRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5hZGQodGhpcyx0eXBlLGZufHxkYXRhLGZuJiZkYXRhKTt9KTt9LG9uZTpmdW5jdGlvbih0eXBlLGRhdGEsZm4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQuYWRkKHRoaXMsdHlwZSxmdW5jdGlvbihldmVudCl7alF1ZXJ5KHRoaXMpLnVuYmluZChldmVudCk7cmV0dXJuKGZufHxkYXRhKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSxmbiYmZGF0YSk7fSk7fSx1bmJpbmQ6ZnVuY3Rpb24odHlwZSxmbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5yZW1vdmUodGhpcyx0eXBlLGZuKTt9KTt9LHRyaWdnZXI6ZnVuY3Rpb24odHlwZSxkYXRhLGZuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnRyaWdnZXIodHlwZSxkYXRhLHRoaXMsdHJ1ZSxmbik7fSk7fSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbih0eXBlLGRhdGEsZm4pe2lmKHRoaXNbMF0pcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKHR5cGUsZGF0YSx0aGlzWzBdLGZhbHNlLGZuKTtyZXR1cm4gdW5kZWZpbmVkO30sdG9nZ2xlOmZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzO3JldHVybiB0aGlzLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KXt0aGlzLmxhc3RUb2dnbGU9MD09dGhpcy5sYXN0VG9nZ2xlPzE6MDtldmVudC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBhcmdzW3RoaXMubGFzdFRvZ2dsZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxmYWxzZTt9KTt9LGhvdmVyOmZ1bmN0aW9uKGZuT3Zlcixmbk91dCl7cmV0dXJuIHRoaXMuYmluZCgnbW91c2VlbnRlcicsZm5PdmVyKS5iaW5kKCdtb3VzZWxlYXZlJyxmbk91dCk7fSxyZWFkeTpmdW5jdGlvbihmbil7YmluZFJlYWR5KCk7aWYoalF1ZXJ5LmlzUmVhZHkpZm4uY2FsbChkb2N1bWVudCxqUXVlcnkpO2Vsc2UKalF1ZXJ5LnJlYWR5TGlzdC5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuIGZuLmNhbGwodGhpcyxqUXVlcnkpO30pO3JldHVybiB0aGlzO319KTtqUXVlcnkuZXh0ZW5kKHtpc1JlYWR5OmZhbHNlLHJlYWR5TGlzdDpbXSxyZWFkeTpmdW5jdGlvbigpe2lmKCFqUXVlcnkuaXNSZWFkeSl7alF1ZXJ5LmlzUmVhZHk9dHJ1ZTtpZihqUXVlcnkucmVhZHlMaXN0KXtqUXVlcnkuZWFjaChqUXVlcnkucmVhZHlMaXN0LGZ1bmN0aW9uKCl7dGhpcy5hcHBseShkb2N1bWVudCk7fSk7alF1ZXJ5LnJlYWR5TGlzdD1udWxsO31qUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpO319fSk7dmFyIHJlYWR5Qm91bmQ9ZmFsc2U7ZnVuY3Rpb24gYmluZFJlYWR5KCl7aWYocmVhZHlCb3VuZClyZXR1cm47cmVhZHlCb3VuZD10cnVlO2lmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXImJiFqUXVlcnkuYnJvd3Nlci5vcGVyYSlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixqUXVlcnkucmVhZHksZmFsc2UpO2lmKGpRdWVyeS5icm93c2VyLm1zaWUmJndpbmRvdz09dG9wKShmdW5jdGlvbigpe2lmKGpRdWVyeS5pc1JlYWR5KXJldHVybjt0cnl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7fWNhdGNoKGVycm9yKXtzZXRUaW1lb3V0KGFyZ3VtZW50cy5jYWxsZWUsMCk7cmV0dXJuO31qUXVlcnkucmVhZHkoKTt9KSgpO2lmKGpRdWVyeS5icm93c2VyLm9wZXJhKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGZ1bmN0aW9uKCl7aWYoalF1ZXJ5LmlzUmVhZHkpcmV0dXJuO2Zvcih2YXIgaT0wO2k8ZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoO2krKylpZihkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5kaXNhYmxlZCl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybjt9alF1ZXJ5LnJlYWR5KCk7fSxmYWxzZSk7aWYoalF1ZXJ5LmJyb3dzZXIuc2FmYXJpKXt2YXIgbnVtU3R5bGVzOyhmdW5jdGlvbigpe2lmKGpRdWVyeS5pc1JlYWR5KXJldHVybjtpZihkb2N1bWVudC5yZWFkeVN0YXRlIT0ibG9hZGVkIiYmZG9jdW1lbnQucmVhZHlTdGF0ZSE9ImNvbXBsZXRlIil7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybjt9aWYobnVtU3R5bGVzPT09dW5kZWZpbmVkKW51bVN0eWxlcz1qUXVlcnkoInN0eWxlLCBsaW5rW3JlbD1zdHlsZXNoZWV0XSIpLmxlbmd0aDtpZihkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGghPW51bVN0eWxlcyl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybjt9alF1ZXJ5LnJlYWR5KCk7fSkoKTt9alF1ZXJ5LmV2ZW50LmFkZCh3aW5kb3csImxvYWQiLGpRdWVyeS5yZWFkeSk7fWpRdWVyeS5lYWNoKCgiYmx1cixmb2N1cyxsb2FkLHJlc2l6ZSxzY3JvbGwsdW5sb2FkLGNsaWNrLGRibGNsaWNrLCIrIm1vdXNlZG93bixtb3VzZXVwLG1vdXNlbW92ZSxtb3VzZW92ZXIsbW91c2VvdXQsY2hhbmdlLHNlbGVjdCwiKyJzdWJtaXQsa2V5ZG93bixrZXlwcmVzcyxrZXl1cCxlcnJvciIpLnNwbGl0KCIsIiksZnVuY3Rpb24oaSxuYW1lKXtqUXVlcnkuZm5bbmFtZV09ZnVuY3Rpb24oZm4pe3JldHVybiBmbj90aGlzLmJpbmQobmFtZSxmbik6dGhpcy50cmlnZ2VyKG5hbWUpO307fSk7dmFyIHdpdGhpbkVsZW1lbnQ9ZnVuY3Rpb24oZXZlbnQsZWxlbSl7dmFyIHBhcmVudD1ldmVudC5yZWxhdGVkVGFyZ2V0O3doaWxlKHBhcmVudCYmcGFyZW50IT1lbGVtKXRyeXtwYXJlbnQ9cGFyZW50LnBhcmVudE5vZGU7fWNhdGNoKGVycm9yKXtwYXJlbnQ9ZWxlbTt9cmV0dXJuIHBhcmVudD09ZWxlbTt9O2pRdWVyeSh3aW5kb3cpLmJpbmQoInVubG9hZCIsZnVuY3Rpb24oKXtqUXVlcnkoIioiKS5hZGQoZG9jdW1lbnQpLnVuYmluZCgpO30pO2pRdWVyeS5mbi5leHRlbmQoe2xvYWQ6ZnVuY3Rpb24odXJsLHBhcmFtcyxjYWxsYmFjayl7aWYoalF1ZXJ5LmlzRnVuY3Rpb24odXJsKSlyZXR1cm4gdGhpcy5iaW5kKCJsb2FkIix1cmwpO3ZhciBvZmY9dXJsLmluZGV4T2YoIiAiKTtpZihvZmY+PTApe3ZhciBzZWxlY3Rvcj11cmwuc2xpY2Uob2ZmLHVybC5sZW5ndGgpO3VybD11cmwuc2xpY2UoMCxvZmYpO31jYWxsYmFjaz1jYWxsYmFja3x8ZnVuY3Rpb24oKXt9O3ZhciB0eXBlPSJHRVQiO2lmKHBhcmFtcylpZihqUXVlcnkuaXNGdW5jdGlvbihwYXJhbXMpKXtjYWxsYmFjaz1wYXJhbXM7cGFyYW1zPW51bGw7fWVsc2V7cGFyYW1zPWpRdWVyeS5wYXJhbShwYXJhbXMpO3R5cGU9IlBPU1QiO312YXIgc2VsZj10aGlzO2pRdWVyeS5hamF4KHt1cmw6dXJsLHR5cGU6dHlwZSxkYXRhVHlwZToiaHRtbCIsZGF0YTpwYXJhbXMsY29tcGxldGU6ZnVuY3Rpb24ocmVzLHN0YXR1cyl7aWYoc3RhdHVzPT0ic3VjY2VzcyJ8fHN0YXR1cz09Im5vdG1vZGlmaWVkIilzZWxmLmh0bWwoc2VsZWN0b3I/alF1ZXJ5KCI8ZGl2Lz4iKS5hcHBlbmQocmVzLnJlc3BvbnNlVGV4dC5yZXBsYWNlKC88c2NyaXB0KC58XHMpKj9cL3NjcmlwdD4vZywiIikpLmZpbmQoc2VsZWN0b3IpOnJlcy5yZXNwb25zZVRleHQpO3NlbGYuZWFjaChjYWxsYmFjayxbcmVzLnJlc3BvbnNlVGV4dCxzdGF0dXMscmVzXSk7fX0pO3JldHVybiB0aGlzO30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGpRdWVyeS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpO30sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKHRoaXMsImZvcm0iKT9qUXVlcnkubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXM7fSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fC9zZWxlY3R8dGV4dGFyZWEvaS50ZXN0KHRoaXMubm9kZU5hbWUpfHwvdGV4dHxoaWRkZW58cGFzc3dvcmQvaS50ZXN0KHRoaXMudHlwZSkpO30pLm1hcChmdW5jdGlvbihpLGVsZW0pe3ZhciB2YWw9alF1ZXJ5KHRoaXMpLnZhbCgpO3JldHVybiB2YWw9PW51bGw/bnVsbDp2YWwuY29uc3RydWN0b3I9PUFycmF5P2pRdWVyeS5tYXAodmFsLGZ1bmN0aW9uKHZhbCxpKXtyZXR1cm57bmFtZTplbGVtLm5hbWUsdmFsdWU6dmFsfTt9KTp7bmFtZTplbGVtLm5hbWUsdmFsdWU6dmFsfTt9KS5nZXQoKTt9fSk7alF1ZXJ5LmVhY2goImFqYXhTdGFydCxhamF4U3RvcCxhamF4Q29tcGxldGUsYWpheEVycm9yLGFqYXhTdWNjZXNzLGFqYXhTZW5kIi5zcGxpdCgiLCIpLGZ1bmN0aW9uKGksbyl7alF1ZXJ5LmZuW29dPWZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLmJpbmQobyxmKTt9O30pO3ZhciBqc2M9KG5ldyBEYXRlKS5nZXRUaW1lKCk7alF1ZXJ5LmV4dGVuZCh7Z2V0OmZ1bmN0aW9uKHVybCxkYXRhLGNhbGxiYWNrLHR5cGUpe2lmKGpRdWVyeS5pc0Z1bmN0aW9uKGRhdGEpKXtjYWxsYmFjaz1kYXRhO2RhdGE9bnVsbDt9cmV0dXJuIGpRdWVyeS5hamF4KHt0eXBlOiJHRVQiLHVybDp1cmwsZGF0YTpkYXRhLHN1Y2Nlc3M6Y2FsbGJhY2ssZGF0YVR5cGU6dHlwZX0pO30sZ2V0U2NyaXB0OmZ1bmN0aW9uKHVybCxjYWxsYmFjayl7cmV0dXJuIGpRdWVyeS5nZXQodXJsLG51bGwsY2FsbGJhY2ssInNjcmlwdCIpO30sZ2V0SlNPTjpmdW5jdGlvbih1cmwsZGF0YSxjYWxsYmFjayl7cmV0dXJuIGpRdWVyeS5nZXQodXJsLGRhdGEsY2FsbGJhY2ssImpzb24iKTt9LHBvc3Q6ZnVuY3Rpb24odXJsLGRhdGEsY2FsbGJhY2ssdHlwZSl7aWYoalF1ZXJ5LmlzRnVuY3Rpb24oZGF0YSkpe2NhbGxiYWNrPWRhdGE7ZGF0YT17fTt9cmV0dXJuIGpRdWVyeS5hamF4KHt0eXBlOiJQT1NUIix1cmw6dXJsLGRhdGE6ZGF0YSxzdWNjZXNzOmNhbGxiYWNrLGRhdGFUeXBlOnR5cGV9KTt9LGFqYXhTZXR1cDpmdW5jdGlvbihzZXR0aW5ncyl7alF1ZXJ5LmV4dGVuZChqUXVlcnkuYWpheFNldHRpbmdzLHNldHRpbmdzKTt9LGFqYXhTZXR0aW5nczp7Z2xvYmFsOnRydWUsdHlwZToiR0VUIix0aW1lb3V0OjAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6dHJ1ZSxhc3luYzp0cnVlLGRhdGE6bnVsbCx1c2VybmFtZTpudWxsLHBhc3N3b3JkOm51bGwsYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHNjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLHRleHQ6InRleHQvcGxhaW4iLF9kZWZhdWx0OiIqLyoifX0sbGFzdE1vZGlmaWVkOnt9LGFqYXg6ZnVuY3Rpb24ocyl7dmFyIGpzb25wLGpzcmU9Lz1cPygmfCQpL2csc3RhdHVzLGRhdGE7cz1qUXVlcnkuZXh0ZW5kKHRydWUscyxqUXVlcnkuZXh0ZW5kKHRydWUse30salF1ZXJ5LmFqYXhTZXR0aW5ncyxzKSk7aWYocy5kYXRhJiZzLnByb2Nlc3NEYXRhJiZ0eXBlb2Ygcy5kYXRhIT0ic3RyaW5nIilzLmRhdGE9alF1ZXJ5LnBhcmFtKHMuZGF0YSk7aWYocy5kYXRhVHlwZT09Impzb25wIil7aWYocy50eXBlLnRvTG93ZXJDYXNlKCk9PSJnZXQiKXtpZighcy51cmwubWF0Y2goanNyZSkpcy51cmwrPShzLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsocy5qc29ucHx8ImNhbGxiYWNrIikrIj0/Ijt9ZWxzZSBpZighcy5kYXRhfHwhcy5kYXRhLm1hdGNoKGpzcmUpKXMuZGF0YT0ocy5kYXRhP3MuZGF0YSsiJiI6IiIpKyhzLmpzb25wfHwiY2FsbGJhY2siKSsiPT8iO3MuZGF0YVR5cGU9Impzb24iO31pZihzLmRhdGFUeXBlPT0ianNvbiImJihzLmRhdGEmJnMuZGF0YS5tYXRjaChqc3JlKXx8cy51cmwubWF0Y2goanNyZSkpKXtqc29ucD0ianNvbnAiK2pzYysrO2lmKHMuZGF0YSlzLmRhdGE9KHMuZGF0YSsiIikucmVwbGFjZShqc3JlLCI9Iitqc29ucCsiJDEiKTtzLnVybD1zLnVybC5yZXBsYWNlKGpzcmUsIj0iK2pzb25wKyIkMSIpO3MuZGF0YVR5cGU9InNjcmlwdCI7d2luZG93W2pzb25wXT1mdW5jdGlvbih0bXApe2RhdGE9dG1wO3N1Y2Nlc3MoKTtjb21wbGV0ZSgpO3dpbmRvd1tqc29ucF09dW5kZWZpbmVkO3RyeXtkZWxldGUgd2luZG93W2pzb25wXTt9Y2F0Y2goZSl7fWlmKGhlYWQpaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO307fWlmKHMuZGF0YVR5cGU9PSJzY3JpcHQiJiZzLmNhY2hlPT1udWxsKXMuY2FjaGU9ZmFsc2U7aWYocy5jYWNoZT09PWZhbHNlJiZzLnR5cGUudG9Mb3dlckNhc2UoKT09ImdldCIpe3ZhciB0cz0obmV3IERhdGUoKSkuZ2V0VGltZSgpO3ZhciByZXQ9cy51cmwucmVwbGFjZSgvKFw/fCYpXz0uKj8oJnwkKS8sIiQxXz0iK3RzKyIkMiIpO3MudXJsPXJldCsoKHJldD09cy51cmwpPyhzLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsiXz0iK3RzOiIiKTt9aWYocy5kYXRhJiZzLnR5cGUudG9Mb3dlckNhc2UoKT09ImdldCIpe3MudXJsKz0ocy51cmwubWF0Y2goL1w/Lyk/IiYiOiI/Iikrcy5kYXRhO3MuZGF0YT1udWxsO31pZihzLmdsb2JhbCYmIWpRdWVyeS5hY3RpdmUrKylqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoKCFzLnVybC5pbmRleE9mKCJodHRwIil8fCFzLnVybC5pbmRleE9mKCIvLyIpKSYmcy5kYXRhVHlwZT09InNjcmlwdCImJnMudHlwZS50b0xvd2VyQ2FzZSgpPT0iZ2V0Iil7dmFyIGhlYWQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTt2YXIgc2NyaXB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3NjcmlwdC5zcmM9cy51cmw7aWYocy5zY3JpcHRDaGFyc2V0KXNjcmlwdC5jaGFyc2V0PXMuc2NyaXB0Q2hhcnNldDtpZighanNvbnApe3ZhciBkb25lPWZhbHNlO3NjcmlwdC5vbmxvYWQ9c2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKCFkb25lJiYoIXRoaXMucmVhZHlTdGF0ZXx8dGhpcy5yZWFkeVN0YXRlPT0ibG9hZGVkInx8dGhpcy5yZWFkeVN0YXRlPT0iY29tcGxldGUiKSl7ZG9uZT10cnVlO3N1Y2Nlc3MoKTtjb21wbGV0ZSgpO2hlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTt9fTt9aGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO3JldHVybiB1bmRlZmluZWQ7fXZhciByZXF1ZXN0RG9uZT1mYWxzZTt2YXIgeG1sPXdpbmRvdy5BY3RpdmVYT2JqZWN0P25ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOm5ldyBYTUxIdHRwUmVxdWVzdCgpO3htbC5vcGVuKHMudHlwZSxzLnVybCxzLmFzeW5jLHMudXNlcm5hbWUscy5wYXNzd29yZCk7dHJ5e2lmKHMuZGF0YSl4bWwuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixzLmNvbnRlbnRUeXBlKTtpZihzLmlmTW9kaWZpZWQpeG1sLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixqUXVlcnkubGFzdE1vZGlmaWVkW3MudXJsXXx8IlRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UIik7eG1sLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCJYTUxIdHRwUmVxdWVzdCIpO3htbC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLHMuZGF0YVR5cGUmJnMuYWNjZXB0c1tzLmRhdGFUeXBlXT9zLmFjY2VwdHNbcy5kYXRhVHlwZV0rIiwgKi8qIjpzLmFjY2VwdHMuX2RlZmF1bHQpO31jYXRjaChlKXt9aWYocy5iZWZvcmVTZW5kKXMuYmVmb3JlU2VuZCh4bWwpO2lmKHMuZ2xvYmFsKWpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW3htbCxzXSk7dmFyIG9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihpc1RpbWVvdXQpe2lmKCFyZXF1ZXN0RG9uZSYmeG1sJiYoeG1sLnJlYWR5U3RhdGU9PTR8fGlzVGltZW91dD09InRpbWVvdXQiKSl7cmVxdWVzdERvbmU9dHJ1ZTtpZihpdmFsKXtjbGVhckludGVydmFsKGl2YWwpO2l2YWw9bnVsbDt9c3RhdHVzPWlzVGltZW91dD09InRpbWVvdXQiJiYidGltZW91dCJ8fCFqUXVlcnkuaHR0cFN1Y2Nlc3MoeG1sKSYmImVycm9yInx8cy5pZk1vZGlmaWVkJiZqUXVlcnkuaHR0cE5vdE1vZGlmaWVkKHhtbCxzLnVybCkmJiJub3Rtb2RpZmllZCJ8fCJzdWNjZXNzIjtpZihzdGF0dXM9PSJzdWNjZXNzIil7dHJ5e2RhdGE9alF1ZXJ5Lmh0dHBEYXRhKHhtbCxzLmRhdGFUeXBlKTt9Y2F0Y2goZSl7c3RhdHVzPSJwYXJzZXJlcnJvciI7fX1pZihzdGF0dXM9PSJzdWNjZXNzIil7dmFyIG1vZFJlczt0cnl7bW9kUmVzPXhtbC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpO31jYXRjaChlKXt9aWYocy5pZk1vZGlmaWVkJiZtb2RSZXMpalF1ZXJ5Lmxhc3RNb2RpZmllZFtzLnVybF09bW9kUmVzO2lmKCFqc29ucClzdWNjZXNzKCk7fWVsc2UKalF1ZXJ5LmhhbmRsZUVycm9yKHMseG1sLHN0YXR1cyk7Y29tcGxldGUoKTtpZihzLmFzeW5jKXhtbD1udWxsO319O2lmKHMuYXN5bmMpe3ZhciBpdmFsPXNldEludGVydmFsKG9ucmVhZHlzdGF0ZWNoYW5nZSwxMyk7aWYocy50aW1lb3V0PjApc2V0VGltZW91dChmdW5jdGlvbigpe2lmKHhtbCl7eG1sLmFib3J0KCk7aWYoIXJlcXVlc3REb25lKW9ucmVhZHlzdGF0ZWNoYW5nZSgidGltZW91dCIpO319LHMudGltZW91dCk7fXRyeXt4bWwuc2VuZChzLmRhdGEpO31jYXRjaChlKXtqUXVlcnkuaGFuZGxlRXJyb3Iocyx4bWwsbnVsbCxlKTt9aWYoIXMuYXN5bmMpb25yZWFkeXN0YXRlY2hhbmdlKCk7ZnVuY3Rpb24gc3VjY2Vzcygpe2lmKHMuc3VjY2VzcylzLnN1Y2Nlc3MoZGF0YSxzdGF0dXMpO2lmKHMuZ2xvYmFsKWpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3VjY2VzcyIsW3htbCxzXSk7fWZ1bmN0aW9uIGNvbXBsZXRlKCl7aWYocy5jb21wbGV0ZSlzLmNvbXBsZXRlKHhtbCxzdGF0dXMpO2lmKHMuZ2xvYmFsKWpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt4bWwsc10pO2lmKHMuZ2xvYmFsJiYhLS1qUXVlcnkuYWN0aXZlKWpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpO31yZXR1cm4geG1sO30saGFuZGxlRXJyb3I6ZnVuY3Rpb24ocyx4bWwsc3RhdHVzLGUpe2lmKHMuZXJyb3Ipcy5lcnJvcih4bWwsc3RhdHVzLGUpO2lmKHMuZ2xvYmFsKWpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4RXJyb3IiLFt4bWwscyxlXSk7fSxhY3RpdmU6MCxodHRwU3VjY2VzczpmdW5jdGlvbihyKXt0cnl7cmV0dXJuIXIuc3RhdHVzJiZsb2NhdGlvbi5wcm90b2NvbD09ImZpbGU6Inx8KHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMCl8fHIuc3RhdHVzPT0zMDR8fHIuc3RhdHVzPT0xMjIzfHxqUXVlcnkuYnJvd3Nlci5zYWZhcmkmJnIuc3RhdHVzPT11bmRlZmluZWQ7fWNhdGNoKGUpe31yZXR1cm4gZmFsc2U7fSxodHRwTm90TW9kaWZpZWQ6ZnVuY3Rpb24oeG1sLHVybCl7dHJ5e3ZhciB4bWxSZXM9eG1sLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7cmV0dXJuIHhtbC5zdGF0dXM9PTMwNHx8eG1sUmVzPT1qUXVlcnkubGFzdE1vZGlmaWVkW3VybF18fGpRdWVyeS5icm93c2VyLnNhZmFyaSYmeG1sLnN0YXR1cz09dW5kZWZpbmVkO31jYXRjaChlKXt9cmV0dXJuIGZhbHNlO30saHR0cERhdGE6ZnVuY3Rpb24ocix0eXBlKXt2YXIgY3Q9ci5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIik7dmFyIHhtbD10eXBlPT0ieG1sInx8IXR5cGUmJmN0JiZjdC5pbmRleE9mKCJ4bWwiKT49MDt2YXIgZGF0YT14bWw/ci5yZXNwb25zZVhNTDpyLnJlc3BvbnNlVGV4dDtpZih4bWwmJmRhdGEuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWU9PSJwYXJzZXJlcnJvciIpdGhyb3cicGFyc2VyZXJyb3IiO2lmKHR5cGU9PSJzY3JpcHQiKWpRdWVyeS5nbG9iYWxFdmFsKGRhdGEpO2lmKHR5cGU9PSJqc29uIilkYXRhPWV2YWwoIigiK2RhdGErIikiKTtyZXR1cm4gZGF0YTt9LHBhcmFtOmZ1bmN0aW9uKGEpe3ZhciBzPVtdO2lmKGEuY29uc3RydWN0b3I9PUFycmF5fHxhLmpxdWVyeSlqUXVlcnkuZWFjaChhLGZ1bmN0aW9uKCl7cy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5hbWUpKyI9IitlbmNvZGVVUklDb21wb25lbnQodGhpcy52YWx1ZSkpO30pO2Vsc2UKZm9yKHZhciBqIGluIGEpaWYoYVtqXSYmYVtqXS5jb25zdHJ1Y3Rvcj09QXJyYXkpalF1ZXJ5LmVhY2goYVtqXSxmdW5jdGlvbigpe3MucHVzaChlbmNvZGVVUklDb21wb25lbnQoaikrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0aGlzKSk7fSk7ZWxzZQpzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGopKyI9IitlbmNvZGVVUklDb21wb25lbnQoYVtqXSkpO3JldHVybiBzLmpvaW4oIiYiKS5yZXBsYWNlKC8lMjAvZywiKyIpO319KTtqUXVlcnkuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXtyZXR1cm4gc3BlZWQ/dGhpcy5hbmltYXRlKHtoZWlnaHQ6InNob3ciLHdpZHRoOiJzaG93IixvcGFjaXR5OiJzaG93In0sc3BlZWQsY2FsbGJhY2spOnRoaXMuZmlsdGVyKCI6aGlkZGVuIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT10aGlzLm9sZGJsb2NrfHwiIjtpZihqUXVlcnkuY3NzKHRoaXMsImRpc3BsYXkiKT09Im5vbmUiKXt2YXIgZWxlbT1qUXVlcnkoIjwiK3RoaXMudGFnTmFtZSsiIC8+IikuYXBwZW5kVG8oImJvZHkiKTt0aGlzLnN0eWxlLmRpc3BsYXk9ZWxlbS5jc3MoImRpc3BsYXkiKTtpZih0aGlzLnN0eWxlLmRpc3BsYXk9PSJub25lIil0aGlzLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtlbGVtLnJlbW92ZSgpO319KS5lbmQoKTt9LGhpZGU6ZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spe3JldHVybiBzcGVlZD90aGlzLmFuaW1hdGUoe2hlaWdodDoiaGlkZSIsd2lkdGg6ImhpZGUiLG9wYWNpdHk6ImhpZGUifSxzcGVlZCxjYWxsYmFjayk6dGhpcy5maWx0ZXIoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpe3RoaXMub2xkYmxvY2s9dGhpcy5vbGRibG9ja3x8alF1ZXJ5LmNzcyh0aGlzLCJkaXNwbGF5Iik7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIjt9KS5lbmQoKTt9LF90b2dnbGU6alF1ZXJ5LmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24oZm4sZm4yKXtyZXR1cm4galF1ZXJ5LmlzRnVuY3Rpb24oZm4pJiZqUXVlcnkuaXNGdW5jdGlvbihmbjIpP3RoaXMuX3RvZ2dsZShmbixmbjIpOmZuP3RoaXMuYW5pbWF0ZSh7aGVpZ2h0OiJ0b2dnbGUiLHdpZHRoOiJ0b2dnbGUiLG9wYWNpdHk6InRvZ2dsZSJ9LGZuLGZuMik6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5KHRoaXMpW2pRdWVyeSh0aGlzKS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSJdKCk7fSk7fSxzbGlkZURvd246ZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spe3JldHVybiB0aGlzLmFuaW1hdGUoe2hlaWdodDoic2hvdyJ9LHNwZWVkLGNhbGxiYWNrKTt9LHNsaWRlVXA6ZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spe3JldHVybiB0aGlzLmFuaW1hdGUoe2hlaWdodDoiaGlkZSJ9LHNwZWVkLGNhbGxiYWNrKTt9LHNsaWRlVG9nZ2xlOmZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXtyZXR1cm4gdGhpcy5hbmltYXRlKHtoZWlnaHQ6InRvZ2dsZSJ9LHNwZWVkLGNhbGxiYWNrKTt9LGZhZGVJbjpmdW5jdGlvbihzcGVlZCxjYWxsYmFjayl7cmV0dXJuIHRoaXMuYW5pbWF0ZSh7b3BhY2l0eToic2hvdyJ9LHNwZWVkLGNhbGxiYWNrKTt9LGZhZGVPdXQ6ZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spe3JldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6ImhpZGUifSxzcGVlZCxjYWxsYmFjayk7fSxmYWRlVG86ZnVuY3Rpb24oc3BlZWQsdG8sY2FsbGJhY2spe3JldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6dG99LHNwZWVkLGNhbGxiYWNrKTt9LGFuaW1hdGU6ZnVuY3Rpb24ocHJvcCxzcGVlZCxlYXNpbmcsY2FsbGJhY2spe3ZhciBvcHRhbGw9alF1ZXJ5LnNwZWVkKHNwZWVkLGVhc2luZyxjYWxsYmFjayk7cmV0dXJuIHRoaXNbb3B0YWxsLnF1ZXVlPT09ZmFsc2U/ImVhY2giOiJxdWV1ZSJdKGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlVHlwZSE9MSlyZXR1cm4gZmFsc2U7dmFyIG9wdD1qUXVlcnkuZXh0ZW5kKHt9LG9wdGFsbCk7dmFyIGhpZGRlbj1qUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKSxzZWxmPXRoaXM7Zm9yKHZhciBwIGluIHByb3Ape2lmKHByb3BbcF09PSJoaWRlIiYmaGlkZGVufHxwcm9wW3BdPT0ic2hvdyImJiFoaWRkZW4pcmV0dXJuIGpRdWVyeS5pc0Z1bmN0aW9uKG9wdC5jb21wbGV0ZSkmJm9wdC5jb21wbGV0ZS5hcHBseSh0aGlzKTtpZihwPT0iaGVpZ2h0Inx8cD09IndpZHRoIil7b3B0LmRpc3BsYXk9alF1ZXJ5LmNzcyh0aGlzLCJkaXNwbGF5Iik7b3B0Lm92ZXJmbG93PXRoaXMuc3R5bGUub3ZlcmZsb3c7fX1pZihvcHQub3ZlcmZsb3chPW51bGwpdGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtvcHQuY3VyQW5pbT1qUXVlcnkuZXh0ZW5kKHt9LHByb3ApO2pRdWVyeS5lYWNoKHByb3AsZnVuY3Rpb24obmFtZSx2YWwpe3ZhciBlPW5ldyBqUXVlcnkuZngoc2VsZixvcHQsbmFtZSk7aWYoL3RvZ2dsZXxzaG93fGhpZGUvLnRlc3QodmFsKSllW3ZhbD09InRvZ2dsZSI/aGlkZGVuPyJzaG93IjoiaGlkZSI6dmFsXShwcm9wKTtlbHNle3ZhciBwYXJ0cz12YWwudG9TdHJpbmcoKS5tYXRjaCgvXihbKy1dPSk/KFtcZCstLl0rKSguKikkLyksc3RhcnQ9ZS5jdXIodHJ1ZSl8fDA7aWYocGFydHMpe3ZhciBlbmQ9cGFyc2VGbG9hdChwYXJ0c1syXSksdW5pdD1wYXJ0c1szXXx8InB4IjtpZih1bml0IT0icHgiKXtzZWxmLnN0eWxlW25hbWVdPShlbmR8fDEpK3VuaXQ7c3RhcnQ9KChlbmR8fDEpL2UuY3VyKHRydWUpKSpzdGFydDtzZWxmLnN0eWxlW25hbWVdPXN0YXJ0K3VuaXQ7fWlmKHBhcnRzWzFdKWVuZD0oKHBhcnRzWzFdPT0iLT0iPy0xOjEpKmVuZCkrc3RhcnQ7ZS5jdXN0b20oc3RhcnQsZW5kLHVuaXQpO31lbHNlCmUuY3VzdG9tKHN0YXJ0LHZhbCwiIik7fX0pO3JldHVybiB0cnVlO30pO30scXVldWU6ZnVuY3Rpb24odHlwZSxmbil7aWYoalF1ZXJ5LmlzRnVuY3Rpb24odHlwZSl8fCh0eXBlJiZ0eXBlLmNvbnN0cnVjdG9yPT1BcnJheSkpe2ZuPXR5cGU7dHlwZT0iZngiO31pZighdHlwZXx8KHR5cGVvZiB0eXBlPT0ic3RyaW5nIiYmIWZuKSlyZXR1cm4gcXVldWUodGhpc1swXSx0eXBlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZm4uY29uc3RydWN0b3I9PUFycmF5KXF1ZXVlKHRoaXMsdHlwZSxmbik7ZWxzZXtxdWV1ZSh0aGlzLHR5cGUpLnB1c2goZm4pO2lmKHF1ZXVlKHRoaXMsdHlwZSkubGVuZ3RoPT0xKWZuLmFwcGx5KHRoaXMpO319KTt9LHN0b3A6ZnVuY3Rpb24oY2xlYXJRdWV1ZSxnb3RvRW5kKXt2YXIgdGltZXJzPWpRdWVyeS50aW1lcnM7aWYoY2xlYXJRdWV1ZSl0aGlzLnF1ZXVlKFtdKTt0aGlzLmVhY2goZnVuY3Rpb24oKXtmb3IodmFyIGk9dGltZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKHRpbWVyc1tpXS5lbGVtPT10aGlzKXtpZihnb3RvRW5kKXRpbWVyc1tpXSh0cnVlKTt0aW1lcnMuc3BsaWNlKGksMSk7fX0pO2lmKCFnb3RvRW5kKXRoaXMuZGVxdWV1ZSgpO3JldHVybiB0aGlzO319KTt2YXIgcXVldWU9ZnVuY3Rpb24oZWxlbSx0eXBlLGFycmF5KXtpZighZWxlbSlyZXR1cm4gdW5kZWZpbmVkO3R5cGU9dHlwZXx8ImZ4Ijt2YXIgcT1qUXVlcnkuZGF0YShlbGVtLHR5cGUrInF1ZXVlIik7aWYoIXF8fGFycmF5KXE9alF1ZXJ5LmRhdGEoZWxlbSx0eXBlKyJxdWV1ZSIsYXJyYXk/alF1ZXJ5Lm1ha2VBcnJheShhcnJheSk6W10pO3JldHVybiBxO307alF1ZXJ5LmZuLmRlcXVldWU9ZnVuY3Rpb24odHlwZSl7dHlwZT10eXBlfHwiZngiO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcT1xdWV1ZSh0aGlzLHR5cGUpO3Euc2hpZnQoKTtpZihxLmxlbmd0aClxWzBdLmFwcGx5KHRoaXMpO30pO307alF1ZXJ5LmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oc3BlZWQsZWFzaW5nLGZuKXt2YXIgb3B0PXNwZWVkJiZzcGVlZC5jb25zdHJ1Y3Rvcj09T2JqZWN0P3NwZWVkOntjb21wbGV0ZTpmbnx8IWZuJiZlYXNpbmd8fGpRdWVyeS5pc0Z1bmN0aW9uKHNwZWVkKSYmc3BlZWQsZHVyYXRpb246c3BlZWQsZWFzaW5nOmZuJiZlYXNpbmd8fGVhc2luZyYmZWFzaW5nLmNvbnN0cnVjdG9yIT1GdW5jdGlvbiYmZWFzaW5nfTtvcHQuZHVyYXRpb249KG9wdC5kdXJhdGlvbiYmb3B0LmR1cmF0aW9uLmNvbnN0cnVjdG9yPT1OdW1iZXI/b3B0LmR1cmF0aW9uOntzbG93OjYwMCxmYXN0OjIwMH1bb3B0LmR1cmF0aW9uXSl8fDQwMDtvcHQub2xkPW9wdC5jb21wbGV0ZTtvcHQuY29tcGxldGU9ZnVuY3Rpb24oKXtpZihvcHQucXVldWUhPT1mYWxzZSlqUXVlcnkodGhpcykuZGVxdWV1ZSgpO2lmKGpRdWVyeS5pc0Z1bmN0aW9uKG9wdC5vbGQpKW9wdC5vbGQuYXBwbHkodGhpcyk7fTtyZXR1cm4gb3B0O30sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24ocCxuLGZpcnN0TnVtLGRpZmYpe3JldHVybiBmaXJzdE51bStkaWZmKnA7fSxzd2luZzpmdW5jdGlvbihwLG4sZmlyc3ROdW0sZGlmZil7cmV0dXJuKCgtTWF0aC5jb3MocCpNYXRoLlBJKS8yKSswLjUpKmRpZmYrZmlyc3ROdW07fX0sdGltZXJzOltdLHRpbWVySWQ6bnVsbCxmeDpmdW5jdGlvbihlbGVtLG9wdGlvbnMscHJvcCl7dGhpcy5vcHRpb25zPW9wdGlvbnM7dGhpcy5lbGVtPWVsZW07dGhpcy5wcm9wPXByb3A7aWYoIW9wdGlvbnMub3JpZylvcHRpb25zLm9yaWc9e307fX0pO2pRdWVyeS5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5zdGVwKXRoaXMub3B0aW9ucy5zdGVwLmFwcGx5KHRoaXMuZWxlbSxbdGhpcy5ub3csdGhpc10pOyhqUXVlcnkuZnguc3RlcFt0aGlzLnByb3BdfHxqUXVlcnkuZnguc3RlcC5fZGVmYXVsdCkodGhpcyk7aWYodGhpcy5wcm9wPT0iaGVpZ2h0Inx8dGhpcy5wcm9wPT0id2lkdGgiKXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayI7fSxjdXI6ZnVuY3Rpb24oZm9yY2Upe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiZ0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbClyZXR1cm4gdGhpcy5lbGVtW3RoaXMucHJvcF07dmFyIHI9cGFyc2VGbG9hdChqUXVlcnkuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3AsZm9yY2UpKTtyZXR1cm4gciYmcj4tMTAwMDA/cjpwYXJzZUZsb2F0KGpRdWVyeS5jdXJDU1ModGhpcy5lbGVtLHRoaXMucHJvcCkpfHwwO30sY3VzdG9tOmZ1bmN0aW9uKGZyb20sdG8sdW5pdCl7dGhpcy5zdGFydFRpbWU9KG5ldyBEYXRlKCkpLmdldFRpbWUoKTt0aGlzLnN0YXJ0PWZyb207dGhpcy5lbmQ9dG87dGhpcy51bml0PXVuaXR8fHRoaXMudW5pdHx8InB4Ijt0aGlzLm5vdz10aGlzLnN0YXJ0O3RoaXMucG9zPXRoaXMuc3RhdGU9MDt0aGlzLnVwZGF0ZSgpO3ZhciBzZWxmPXRoaXM7ZnVuY3Rpb24gdChnb3RvRW5kKXtyZXR1cm4gc2VsZi5zdGVwKGdvdG9FbmQpO310LmVsZW09dGhpcy5lbGVtO2pRdWVyeS50aW1lcnMucHVzaCh0KTtpZihqUXVlcnkudGltZXJJZD09bnVsbCl7alF1ZXJ5LnRpbWVySWQ9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt2YXIgdGltZXJzPWpRdWVyeS50aW1lcnM7Zm9yKHZhciBpPTA7aTx0aW1lcnMubGVuZ3RoO2krKylpZighdGltZXJzW2ldKCkpdGltZXJzLnNwbGljZShpLS0sMSk7aWYoIXRpbWVycy5sZW5ndGgpe2NsZWFySW50ZXJ2YWwoalF1ZXJ5LnRpbWVySWQpO2pRdWVyeS50aW1lcklkPW51bGw7fX0sMTMpO319LHNob3c6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWpRdWVyeS5hdHRyKHRoaXMuZWxlbS5zdHlsZSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5zaG93PXRydWU7dGhpcy5jdXN0b20oMCx0aGlzLmN1cigpKTtpZih0aGlzLnByb3A9PSJ3aWR0aCJ8fHRoaXMucHJvcD09ImhlaWdodCIpdGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09IjFweCI7alF1ZXJ5KHRoaXMuZWxlbSkuc2hvdygpO30saGlkZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09alF1ZXJ5LmF0dHIodGhpcy5lbGVtLnN0eWxlLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLmhpZGU9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApO30sc3RlcDpmdW5jdGlvbihnb3RvRW5kKXt2YXIgdD0obmV3IERhdGUoKSkuZ2V0VGltZSgpO2lmKGdvdG9FbmR8fHQ+dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZDt0aGlzLnBvcz10aGlzLnN0YXRlPTE7dGhpcy51cGRhdGUoKTt0aGlzLm9wdGlvbnMuY3VyQW5pbVt0aGlzLnByb3BdPXRydWU7dmFyIGRvbmU9dHJ1ZTtmb3IodmFyIGkgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0paWYodGhpcy5vcHRpb25zLmN1ckFuaW1baV0hPT10cnVlKWRvbmU9ZmFsc2U7aWYoZG9uZSl7aWYodGhpcy5vcHRpb25zLmRpc3BsYXkhPW51bGwpe3RoaXMuZWxlbS5zdHlsZS5vdmVyZmxvdz10aGlzLm9wdGlvbnMub3ZlcmZsb3c7dGhpcy5lbGVtLnN0eWxlLmRpc3BsYXk9dGhpcy5vcHRpb25zLmRpc3BsYXk7aWYoalF1ZXJ5LmNzcyh0aGlzLmVsZW0sImRpc3BsYXkiKT09Im5vbmUiKXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayI7fWlmKHRoaXMub3B0aW9ucy5oaWRlKXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJub25lIjtpZih0aGlzLm9wdGlvbnMuaGlkZXx8dGhpcy5vcHRpb25zLnNob3cpZm9yKHZhciBwIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKWpRdWVyeS5hdHRyKHRoaXMuZWxlbS5zdHlsZSxwLHRoaXMub3B0aW9ucy5vcmlnW3BdKTt9aWYoZG9uZSYmalF1ZXJ5LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmNvbXBsZXRlKSl0aGlzLm9wdGlvbnMuY29tcGxldGUuYXBwbHkodGhpcy5lbGVtKTtyZXR1cm4gZmFsc2U7fWVsc2V7dmFyIG49dC10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPW4vdGhpcy5vcHRpb25zLmR1cmF0aW9uO3RoaXMucG9zPWpRdWVyeS5lYXNpbmdbdGhpcy5vcHRpb25zLmVhc2luZ3x8KGpRdWVyeS5lYXNpbmcuc3dpbmc/InN3aW5nIjoibGluZWFyIildKHRoaXMuc3RhdGUsbiwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTt0aGlzLm5vdz10aGlzLnN0YXJ0KygodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpO3RoaXMudXBkYXRlKCk7fXJldHVybiB0cnVlO319O2pRdWVyeS5meC5zdGVwPXtzY3JvbGxMZWZ0OmZ1bmN0aW9uKGZ4KXtmeC5lbGVtLnNjcm9sbExlZnQ9Zngubm93O30sc2Nyb2xsVG9wOmZ1bmN0aW9uKGZ4KXtmeC5lbGVtLnNjcm9sbFRvcD1meC5ub3c7fSxvcGFjaXR5OmZ1bmN0aW9uKGZ4KXtqUXVlcnkuYXR0cihmeC5lbGVtLnN0eWxlLCJvcGFjaXR5IixmeC5ub3cpO30sX2RlZmF1bHQ6ZnVuY3Rpb24oZngpe2Z4LmVsZW0uc3R5bGVbZngucHJvcF09Zngubm93K2Z4LnVuaXQ7fX07alF1ZXJ5LmZuLm9mZnNldD1mdW5jdGlvbigpe3ZhciBsZWZ0PTAsdG9wPTAsZWxlbT10aGlzWzBdLHJlc3VsdHM7aWYoZWxlbSl3aXRoKGpRdWVyeS5icm93c2VyKXt2YXIgcGFyZW50PWVsZW0ucGFyZW50Tm9kZSxvZmZzZXRDaGlsZD1lbGVtLG9mZnNldFBhcmVudD1lbGVtLm9mZnNldFBhcmVudCxkb2M9ZWxlbS5vd25lckRvY3VtZW50LHNhZmFyaTI9c2FmYXJpJiZwYXJzZUludCh2ZXJzaW9uKTw1MjImJiEvYWRvYmVhaXIvaS50ZXN0KHVzZXJBZ2VudCksZml4ZWQ9alF1ZXJ5LmNzcyhlbGVtLCJwb3NpdGlvbiIpPT0iZml4ZWQiO2lmKGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgYm94PWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YWRkKGJveC5sZWZ0K01hdGgubWF4KGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxkb2MuYm9keS5zY3JvbGxMZWZ0KSxib3gudG9wK01hdGgubWF4KGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLGRvYy5ib2R5LnNjcm9sbFRvcCkpO2FkZCgtZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRMZWZ0LC1kb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFRvcCk7fWVsc2V7YWRkKGVsZW0ub2Zmc2V0TGVmdCxlbGVtLm9mZnNldFRvcCk7d2hpbGUob2Zmc2V0UGFyZW50KXthZGQob2Zmc2V0UGFyZW50Lm9mZnNldExlZnQsb2Zmc2V0UGFyZW50Lm9mZnNldFRvcCk7aWYobW96aWxsYSYmIS9edChhYmxlfGR8aCkkL2kudGVzdChvZmZzZXRQYXJlbnQudGFnTmFtZSl8fHNhZmFyaSYmIXNhZmFyaTIpYm9yZGVyKG9mZnNldFBhcmVudCk7aWYoIWZpeGVkJiZqUXVlcnkuY3NzKG9mZnNldFBhcmVudCwicG9zaXRpb24iKT09ImZpeGVkIilmaXhlZD10cnVlO29mZnNldENoaWxkPS9eYm9keSQvaS50ZXN0KG9mZnNldFBhcmVudC50YWdOYW1lKT9vZmZzZXRDaGlsZDpvZmZzZXRQYXJlbnQ7b2Zmc2V0UGFyZW50PW9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7fXdoaWxlKHBhcmVudCYmcGFyZW50LnRhZ05hbWUmJiEvXmJvZHl8aHRtbCQvaS50ZXN0KHBhcmVudC50YWdOYW1lKSl7aWYoIS9eaW5saW5lfHRhYmxlLiokL2kudGVzdChqUXVlcnkuY3NzKHBhcmVudCwiZGlzcGxheSIpKSlhZGQoLXBhcmVudC5zY3JvbGxMZWZ0LC1wYXJlbnQuc2Nyb2xsVG9wKTtpZihtb3ppbGxhJiZqUXVlcnkuY3NzKHBhcmVudCwib3ZlcmZsb3ciKSE9InZpc2libGUiKWJvcmRlcihwYXJlbnQpO3BhcmVudD1wYXJlbnQucGFyZW50Tm9kZTt9aWYoKHNhZmFyaTImJihmaXhlZHx8alF1ZXJ5LmNzcyhvZmZzZXRDaGlsZCwicG9zaXRpb24iKT09ImFic29sdXRlIikpfHwobW96aWxsYSYmalF1ZXJ5LmNzcyhvZmZzZXRDaGlsZCwicG9zaXRpb24iKSE9ImFic29sdXRlIikpYWRkKC1kb2MuYm9keS5vZmZzZXRMZWZ0LC1kb2MuYm9keS5vZmZzZXRUb3ApO2lmKGZpeGVkKWFkZChNYXRoLm1heChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsZG9jLmJvZHkuc2Nyb2xsTGVmdCksTWF0aC5tYXgoZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jLmJvZHkuc2Nyb2xsVG9wKSk7fXJlc3VsdHM9e3RvcDp0b3AsbGVmdDpsZWZ0fTt9ZnVuY3Rpb24gYm9yZGVyKGVsZW0pe2FkZChqUXVlcnkuY3VyQ1NTKGVsZW0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSksalF1ZXJ5LmN1ckNTUyhlbGVtLCJib3JkZXJUb3BXaWR0aCIsdHJ1ZSkpO31mdW5jdGlvbiBhZGQobCx0KXtsZWZ0Kz1wYXJzZUludChsKXx8MDt0b3ArPXBhcnNlSW50KHQpfHwwO31yZXR1cm4gcmVzdWx0czt9O30pKCk7]]></data>
	</file>
	<file>
	  <filename>/lib/jquery-1.2.5.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IDEuMi41IC0gTmV3IFdhdmUgSmF2YXNjcmlwdAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDggSm9obiBSZXNpZyAoanF1ZXJ5LmNvbSkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIChNSVQtTElDRU5TRS50eHQpCiAqIGFuZCBHUEwgKEdQTC1MSUNFTlNFLnR4dCkgbGljZW5zZXMuCiAqCiAqICREYXRlOiAyMDA4LTA1LTIwIDIzOjE0OjU0IC0wNDAwIChUdWUsIDIwIE1heSAyMDA4KSAkCiAqICRSZXY6IDU2NTEgJAogKi8KKGZ1bmN0aW9uKCl7dmFyIF9qUXVlcnk9d2luZG93LmpRdWVyeSxfJD13aW5kb3cuJDt2YXIgalF1ZXJ5PXdpbmRvdy5qUXVlcnk9d2luZG93LiQ9ZnVuY3Rpb24oc2VsZWN0b3IsY29udGV4dCl7cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdChzZWxlY3Rvcixjb250ZXh0KTt9O3ZhciBxdWlja0V4cHI9L15bXjxdKig8KC58XHMpKz4pW14+XSokfF4jKFx3KykkLyxpc1NpbXBsZT0vXi5bXjojXFtcLl0qJC8sdW5kZWZpbmVkO2pRdWVyeS5mbj1qUXVlcnkucHJvdG90eXBlPXtpbml0OmZ1bmN0aW9uKHNlbGVjdG9yLGNvbnRleHQpe3NlbGVjdG9yPXNlbGVjdG9yfHxkb2N1bWVudDtpZihzZWxlY3Rvci5ub2RlVHlwZSl7dGhpc1swXT1zZWxlY3Rvcjt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzO31pZih0eXBlb2Ygc2VsZWN0b3I9PSJzdHJpbmciKXt2YXIgbWF0Y2g9cXVpY2tFeHByLmV4ZWMoc2VsZWN0b3IpO2lmKG1hdGNoJiYobWF0Y2hbMV18fCFjb250ZXh0KSl7aWYobWF0Y2hbMV0pc2VsZWN0b3I9alF1ZXJ5LmNsZWFuKFttYXRjaFsxXV0sY29udGV4dCk7ZWxzZXt2YXIgZWxlbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChtYXRjaFszXSk7aWYoZWxlbSl7aWYoZWxlbS5pZCE9bWF0Y2hbM10pcmV0dXJuIGpRdWVyeSgpLmZpbmQoc2VsZWN0b3IpO3JldHVybiBqUXVlcnkoZWxlbSk7fXNlbGVjdG9yPVtdO319ZWxzZQpyZXR1cm4galF1ZXJ5KGNvbnRleHQpLmZpbmQoc2VsZWN0b3IpO31lbHNlIGlmKGpRdWVyeS5pc0Z1bmN0aW9uKHNlbGVjdG9yKSlyZXR1cm4galF1ZXJ5KGRvY3VtZW50KVtqUXVlcnkuZm4ucmVhZHk/InJlYWR5IjoibG9hZCJdKHNlbGVjdG9yKTtyZXR1cm4gdGhpcy5zZXRBcnJheShqUXVlcnkubWFrZUFycmF5KHNlbGVjdG9yKSk7fSxqcXVlcnk6IjEuMi41IixzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoO30sbGVuZ3RoOjAsZ2V0OmZ1bmN0aW9uKG51bSl7cmV0dXJuIG51bT09dW5kZWZpbmVkP2pRdWVyeS5tYWtlQXJyYXkodGhpcyk6dGhpc1tudW1dO30scHVzaFN0YWNrOmZ1bmN0aW9uKGVsZW1zKXt2YXIgcmV0PWpRdWVyeShlbGVtcyk7cmV0LnByZXZPYmplY3Q9dGhpcztyZXR1cm4gcmV0O30sc2V0QXJyYXk6ZnVuY3Rpb24oZWxlbXMpe3RoaXMubGVuZ3RoPTA7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcyxlbGVtcyk7cmV0dXJuIHRoaXM7fSxlYWNoOmZ1bmN0aW9uKGNhbGxiYWNrLGFyZ3Mpe3JldHVybiBqUXVlcnkuZWFjaCh0aGlzLGNhbGxiYWNrLGFyZ3MpO30saW5kZXg6ZnVuY3Rpb24oZWxlbSl7dmFyIHJldD0tMTtyZXR1cm4galF1ZXJ5LmluQXJyYXkoZWxlbSYmZWxlbS5qcXVlcnk/ZWxlbVswXTplbGVtLHRoaXMpO30sYXR0cjpmdW5jdGlvbihuYW1lLHZhbHVlLHR5cGUpe3ZhciBvcHRpb25zPW5hbWU7aWYobmFtZS5jb25zdHJ1Y3Rvcj09U3RyaW5nKWlmKHZhbHVlPT09dW5kZWZpbmVkKXJldHVybiB0aGlzWzBdJiZqUXVlcnlbdHlwZXx8ImF0dHIiXSh0aGlzWzBdLG5hbWUpO2Vsc2V7b3B0aW9ucz17fTtvcHRpb25zW25hbWVdPXZhbHVlO31yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2ZvcihuYW1lIGluIG9wdGlvbnMpalF1ZXJ5LmF0dHIodHlwZT90aGlzLnN0eWxlOnRoaXMsbmFtZSxqUXVlcnkucHJvcCh0aGlzLG9wdGlvbnNbbmFtZV0sdHlwZSxpLG5hbWUpKTt9KTt9LGNzczpmdW5jdGlvbihrZXksdmFsdWUpe2lmKChrZXk9PSd3aWR0aCd8fGtleT09J2hlaWdodCcpJiZwYXJzZUZsb2F0KHZhbHVlKTwwKXZhbHVlPXVuZGVmaW5lZDtyZXR1cm4gdGhpcy5hdHRyKGtleSx2YWx1ZSwiY3VyQ1NTIik7fSx0ZXh0OmZ1bmN0aW9uKHRleHQpe2lmKHR5cGVvZiB0ZXh0IT0ib2JqZWN0IiYmdGV4dCE9bnVsbClyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCkpO3ZhciByZXQ9IiI7alF1ZXJ5LmVhY2godGV4dHx8dGhpcyxmdW5jdGlvbigpe2pRdWVyeS5lYWNoKHRoaXMuY2hpbGROb2RlcyxmdW5jdGlvbigpe2lmKHRoaXMubm9kZVR5cGUhPTgpcmV0Kz10aGlzLm5vZGVUeXBlIT0xP3RoaXMubm9kZVZhbHVlOmpRdWVyeS5mbi50ZXh0KFt0aGlzXSk7fSk7fSk7cmV0dXJuIHJldDt9LHdyYXBBbGw6ZnVuY3Rpb24oaHRtbCl7aWYodGhpc1swXSlqUXVlcnkoaHRtbCx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmNsb25lKCkuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLm1hcChmdW5jdGlvbigpe3ZhciBlbGVtPXRoaXM7d2hpbGUoZWxlbS5maXJzdENoaWxkKWVsZW09ZWxlbS5maXJzdENoaWxkO3JldHVybiBlbGVtO30pLmFwcGVuZCh0aGlzKTtyZXR1cm4gdGhpczt9LHdyYXBJbm5lcjpmdW5jdGlvbihodG1sKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkud3JhcEFsbChodG1sKTt9KTt9LHdyYXA6ZnVuY3Rpb24oaHRtbCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeSh0aGlzKS53cmFwQWxsKGh0bWwpO30pO30sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZmFsc2UsZnVuY3Rpb24oZWxlbSl7aWYodGhpcy5ub2RlVHlwZT09MSl0aGlzLmFwcGVuZENoaWxkKGVsZW0pO30pO30scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLHRydWUsZnVuY3Rpb24oZWxlbSl7aWYodGhpcy5ub2RlVHlwZT09MSl0aGlzLmluc2VydEJlZm9yZShlbGVtLHRoaXMuZmlyc3RDaGlsZCk7fSk7fSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsZmFsc2UsZnVuY3Rpb24oZWxlbSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtLHRoaXMpO30pO30sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsdHJ1ZSxmdW5jdGlvbihlbGVtKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW0sdGhpcy5uZXh0U2libGluZyk7fSk7fSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHxqUXVlcnkoW10pO30sZmluZDpmdW5jdGlvbihzZWxlY3Rvcil7dmFyIGVsZW1zPWpRdWVyeS5tYXAodGhpcyxmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmZpbmQoc2VsZWN0b3IsZWxlbSk7fSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKC9bXis+XSBbXis+XS8udGVzdChzZWxlY3Rvcil8fHNlbGVjdG9yLmluZGV4T2YoIi4uIik+LTE/alF1ZXJ5LnVuaXF1ZShlbGVtcyk6ZWxlbXMpO30sY2xvbmU6ZnVuY3Rpb24oZXZlbnRzKXt2YXIgcmV0PXRoaXMubWFwKGZ1bmN0aW9uKCl7aWYoalF1ZXJ5LmJyb3dzZXIubXNpZSYmIWpRdWVyeS5pc1hNTERvYyh0aGlzKSl7dmFyIGNsb25lPXRoaXMuY2xvbmVOb2RlKHRydWUpLGNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjb250YWluZXIuYXBwZW5kQ2hpbGQoY2xvbmUpO3JldHVybiBqUXVlcnkuY2xlYW4oW2NvbnRhaW5lci5pbm5lckhUTUxdKVswXTt9ZWxzZQpyZXR1cm4gdGhpcy5jbG9uZU5vZGUodHJ1ZSk7fSk7dmFyIGNsb25lPXJldC5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXtpZih0aGlzW2V4cGFuZG9dIT11bmRlZmluZWQpdGhpc1tleHBhbmRvXT1udWxsO30pO2lmKGV2ZW50cz09PXRydWUpdGhpcy5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oaSl7aWYodGhpcy5ub2RlVHlwZT09MylyZXR1cm47dmFyIGV2ZW50cz1qUXVlcnkuZGF0YSh0aGlzLCJldmVudHMiKTtmb3IodmFyIHR5cGUgaW4gZXZlbnRzKWZvcih2YXIgaGFuZGxlciBpbiBldmVudHNbdHlwZV0palF1ZXJ5LmV2ZW50LmFkZChjbG9uZVtpXSx0eXBlLGV2ZW50c1t0eXBlXVtoYW5kbGVyXSxldmVudHNbdHlwZV1baGFuZGxlcl0uZGF0YSk7fSk7cmV0dXJuIHJldDt9LGZpbHRlcjpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS5pc0Z1bmN0aW9uKHNlbGVjdG9yKSYmalF1ZXJ5LmdyZXAodGhpcyxmdW5jdGlvbihlbGVtLGkpe3JldHVybiBzZWxlY3Rvci5jYWxsKGVsZW0saSk7fSl8fGpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3Rvcix0aGlzKSk7fSxub3Q6ZnVuY3Rpb24oc2VsZWN0b3Ipe2lmKHNlbGVjdG9yLmNvbnN0cnVjdG9yPT1TdHJpbmcpaWYoaXNTaW1wbGUudGVzdChzZWxlY3RvcikpcmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3Rvcix0aGlzLHRydWUpKTtlbHNlCnNlbGVjdG9yPWpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3Rvcix0aGlzKTt2YXIgaXNBcnJheUxpa2U9c2VsZWN0b3IubGVuZ3RoJiZzZWxlY3RvcltzZWxlY3Rvci5sZW5ndGgtMV0hPT11bmRlZmluZWQmJiFzZWxlY3Rvci5ub2RlVHlwZTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gaXNBcnJheUxpa2U/alF1ZXJ5LmluQXJyYXkodGhpcyxzZWxlY3Rvcik8MDp0aGlzIT1zZWxlY3Rvcjt9KTt9LGFkZDpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS51bmlxdWUoalF1ZXJ5Lm1lcmdlKHRoaXMuZ2V0KCksdHlwZW9mIHNlbGVjdG9yPT0nc3RyaW5nJz9qUXVlcnkoc2VsZWN0b3IpOmpRdWVyeS5tYWtlQXJyYXkoc2VsZWN0b3IpKSkpO30saXM6ZnVuY3Rpb24oc2VsZWN0b3Ipe3JldHVybiEhc2VsZWN0b3ImJmpRdWVyeS5tdWx0aUZpbHRlcihzZWxlY3Rvcix0aGlzKS5sZW5ndGg+MDt9LGhhc0NsYXNzOmZ1bmN0aW9uKHNlbGVjdG9yKXtyZXR1cm4gdGhpcy5pcygiLiIrc2VsZWN0b3IpO30sdmFsOmZ1bmN0aW9uKHZhbHVlKXtpZih2YWx1ZT09dW5kZWZpbmVkKXtpZih0aGlzLmxlbmd0aCl7dmFyIGVsZW09dGhpc1swXTtpZihqUXVlcnkubm9kZU5hbWUoZWxlbSwic2VsZWN0Iikpe3ZhciBpbmRleD1lbGVtLnNlbGVjdGVkSW5kZXgsdmFsdWVzPVtdLG9wdGlvbnM9ZWxlbS5vcHRpb25zLG9uZT1lbGVtLnR5cGU9PSJzZWxlY3Qtb25lIjtpZihpbmRleDwwKXJldHVybiBudWxsO2Zvcih2YXIgaT1vbmU/aW5kZXg6MCxtYXg9b25lP2luZGV4KzE6b3B0aW9ucy5sZW5ndGg7aTxtYXg7aSsrKXt2YXIgb3B0aW9uPW9wdGlvbnNbaV07aWYob3B0aW9uLnNlbGVjdGVkKXt2YWx1ZT1qUXVlcnkuYnJvd3Nlci5tc2llJiYhb3B0aW9uLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lmaWVkP29wdGlvbi50ZXh0Om9wdGlvbi52YWx1ZTtpZihvbmUpcmV0dXJuIHZhbHVlO3ZhbHVlcy5wdXNoKHZhbHVlKTt9fXJldHVybiB2YWx1ZXM7fWVsc2UKcmV0dXJuKHRoaXNbMF0udmFsdWV8fCIiKS5yZXBsYWNlKC9cci9nLCIiKTt9cmV0dXJuIHVuZGVmaW5lZDt9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKHRoaXMubm9kZVR5cGUhPTEpcmV0dXJuO2lmKHZhbHVlLmNvbnN0cnVjdG9yPT1BcnJheSYmL3JhZGlvfGNoZWNrYm94Ly50ZXN0KHRoaXMudHlwZSkpdGhpcy5jaGVja2VkPShqUXVlcnkuaW5BcnJheSh0aGlzLnZhbHVlLHZhbHVlKT49MHx8alF1ZXJ5LmluQXJyYXkodGhpcy5uYW1lLHZhbHVlKT49MCk7ZWxzZSBpZihqUXVlcnkubm9kZU5hbWUodGhpcywic2VsZWN0Iikpe3ZhciB2YWx1ZXM9alF1ZXJ5Lm1ha2VBcnJheSh2YWx1ZSk7alF1ZXJ5KCJvcHRpb24iLHRoaXMpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPShqUXVlcnkuaW5BcnJheSh0aGlzLnZhbHVlLHZhbHVlcyk+PTB8fGpRdWVyeS5pbkFycmF5KHRoaXMudGV4dCx2YWx1ZXMpPj0wKTt9KTtpZighdmFsdWVzLmxlbmd0aCl0aGlzLnNlbGVjdGVkSW5kZXg9LTE7fWVsc2UKdGhpcy52YWx1ZT12YWx1ZTt9KTt9LGh0bWw6ZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT09dW5kZWZpbmVkPyh0aGlzLmxlbmd0aD90aGlzWzBdLmlubmVySFRNTDpudWxsKTp0aGlzLmVtcHR5KCkuYXBwZW5kKHZhbHVlKTt9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdGhpcy5hZnRlcih2YWx1ZSkucmVtb3ZlKCk7fSxlcTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5zbGljZShpLGkrMSk7fSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKTt9LG1hcDpmdW5jdGlvbihjYWxsYmFjayl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS5tYXAodGhpcyxmdW5jdGlvbihlbGVtLGkpe3JldHVybiBjYWxsYmFjay5jYWxsKGVsZW0saSxlbGVtKTt9KSk7fSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCk7fSxkYXRhOmZ1bmN0aW9uKGtleSx2YWx1ZSl7dmFyIHBhcnRzPWtleS5zcGxpdCgiLiIpO3BhcnRzWzFdPXBhcnRzWzFdPyIuIitwYXJ0c1sxXToiIjtpZih2YWx1ZT09PXVuZGVmaW5lZCl7dmFyIGRhdGE9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIrcGFydHNbMV0rIiEiLFtwYXJ0c1swXV0pO2lmKGRhdGE9PT11bmRlZmluZWQmJnRoaXMubGVuZ3RoKWRhdGE9alF1ZXJ5LmRhdGEodGhpc1swXSxrZXkpO3JldHVybiBkYXRhPT09dW5kZWZpbmVkJiZwYXJ0c1sxXT90aGlzLmRhdGEocGFydHNbMF0pOmRhdGE7fWVsc2UKcmV0dXJuIHRoaXMudHJpZ2dlcigic2V0RGF0YSIrcGFydHNbMV0rIiEiLFtwYXJ0c1swXSx2YWx1ZV0pLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZGF0YSh0aGlzLGtleSx2YWx1ZSk7fSk7fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGtleSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5yZW1vdmVEYXRhKHRoaXMsa2V5KTt9KTt9LGRvbU1hbmlwOmZ1bmN0aW9uKGFyZ3MsdGFibGUscmV2ZXJzZSxjYWxsYmFjayl7dmFyIGNsb25lPXRoaXMubGVuZ3RoPjEsZWxlbXM7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCFlbGVtcyl7ZWxlbXM9alF1ZXJ5LmNsZWFuKGFyZ3MsdGhpcy5vd25lckRvY3VtZW50KTtpZihyZXZlcnNlKWVsZW1zLnJldmVyc2UoKTt9dmFyIG9iaj10aGlzO2lmKHRhYmxlJiZqUXVlcnkubm9kZU5hbWUodGhpcywidGFibGUiKSYmalF1ZXJ5Lm5vZGVOYW1lKGVsZW1zWzBdLCJ0ciIpKW9iaj10aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHx0aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTt2YXIgc2NyaXB0cz1qUXVlcnkoW10pO2pRdWVyeS5lYWNoKGVsZW1zLGZ1bmN0aW9uKCl7dmFyIGVsZW09Y2xvbmU/alF1ZXJ5KHRoaXMpLmNsb25lKHRydWUpWzBdOnRoaXM7aWYoalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sInNjcmlwdCIpKXtzY3JpcHRzPXNjcmlwdHMuYWRkKGVsZW0pO31lbHNle2lmKGVsZW0ubm9kZVR5cGU9PTEpc2NyaXB0cz1zY3JpcHRzLmFkZChqUXVlcnkoInNjcmlwdCIsZWxlbSkucmVtb3ZlKCkpO2NhbGxiYWNrLmNhbGwob2JqLGVsZW0pO319KTtzY3JpcHRzLmVhY2goZXZhbFNjcmlwdCk7fSk7fX07alF1ZXJ5LmZuLmluaXQucHJvdG90eXBlPWpRdWVyeS5mbjtmdW5jdGlvbiBldmFsU2NyaXB0KGksZWxlbSl7aWYoZWxlbS5zcmMpalF1ZXJ5LmFqYXgoe3VybDplbGVtLnNyYyxhc3luYzpmYWxzZSxkYXRhVHlwZToic2NyaXB0In0pO2Vsc2UKalF1ZXJ5Lmdsb2JhbEV2YWwoZWxlbS50ZXh0fHxlbGVtLnRleHRDb250ZW50fHxlbGVtLmlubmVySFRNTHx8IiIpO2lmKGVsZW0ucGFyZW50Tm9kZSllbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbSk7fWZ1bmN0aW9uIG5vdygpe3JldHVybituZXcgRGF0ZTt9alF1ZXJ5LmV4dGVuZD1qUXVlcnkuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIHRhcmdldD1hcmd1bWVudHNbMF18fHt9LGk9MSxsZW5ndGg9YXJndW1lbnRzLmxlbmd0aCxkZWVwPWZhbHNlLG9wdGlvbnM7aWYodGFyZ2V0LmNvbnN0cnVjdG9yPT1Cb29sZWFuKXtkZWVwPXRhcmdldDt0YXJnZXQ9YXJndW1lbnRzWzFdfHx7fTtpPTI7fWlmKHR5cGVvZiB0YXJnZXQhPSJvYmplY3QiJiZ0eXBlb2YgdGFyZ2V0IT0iZnVuY3Rpb24iKXRhcmdldD17fTtpZihsZW5ndGg9PWkpe3RhcmdldD10aGlzOy0taTt9Zm9yKDtpPGxlbmd0aDtpKyspaWYoKG9wdGlvbnM9YXJndW1lbnRzW2ldKSE9bnVsbClmb3IodmFyIG5hbWUgaW4gb3B0aW9ucyl7dmFyIHNyYz10YXJnZXRbbmFtZV0sY29weT1vcHRpb25zW25hbWVdO2lmKHRhcmdldD09PWNvcHkpY29udGludWU7aWYoZGVlcCYmY29weSYmdHlwZW9mIGNvcHk9PSJvYmplY3QiJiYhY29weS5ub2RlVHlwZSl0YXJnZXRbbmFtZV09alF1ZXJ5LmV4dGVuZChkZWVwLHNyY3x8KGNvcHkubGVuZ3RoIT1udWxsP1tdOnt9KSxjb3B5KTtlbHNlIGlmKGNvcHkhPT11bmRlZmluZWQpdGFyZ2V0W25hbWVdPWNvcHk7fXJldHVybiB0YXJnZXQ7fTt2YXIgZXhwYW5kbz0ialF1ZXJ5Iitub3coKSx1dWlkPTAsd2luZG93RGF0YT17fSxleGNsdWRlPS96LT9pbmRleHxmb250LT93ZWlnaHR8b3BhY2l0eXx6b29tfGxpbmUtP2hlaWdodC9pLGRlZmF1bHRWaWV3PWRvY3VtZW50LmRlZmF1bHRWaWV3fHx7fTtqUXVlcnkuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGRlZXApe3dpbmRvdy4kPV8kO2lmKGRlZXApd2luZG93LmpRdWVyeT1falF1ZXJ5O3JldHVybiBqUXVlcnk7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGZuKXtyZXR1cm4hIWZuJiZ0eXBlb2YgZm4hPSJzdHJpbmciJiYhZm4ubm9kZU5hbWUmJmZuLmNvbnN0cnVjdG9yIT1BcnJheSYmL15bXHNbXT9mdW5jdGlvbi8udGVzdChmbisiIik7fSxpc1hNTERvYzpmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5kb2N1bWVudEVsZW1lbnQmJiFlbGVtLmJvZHl8fGVsZW0udGFnTmFtZSYmZWxlbS5vd25lckRvY3VtZW50JiYhZWxlbS5vd25lckRvY3VtZW50LmJvZHk7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGRhdGEpe2RhdGE9alF1ZXJ5LnRyaW0oZGF0YSk7aWYoZGF0YSl7dmFyIGhlYWQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHNjcmlwdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzY3JpcHQudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtpZihqUXVlcnkuYnJvd3Nlci5tc2llKXNjcmlwdC50ZXh0PWRhdGE7ZWxzZQpzY3JpcHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YSkpO2hlYWQuaW5zZXJ0QmVmb3JlKHNjcmlwdCxoZWFkLmZpcnN0Q2hpbGQpO2hlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTt9fSxub2RlTmFtZTpmdW5jdGlvbihlbGVtLG5hbWUpe3JldHVybiBlbGVtLm5vZGVOYW1lJiZlbGVtLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PW5hbWUudG9VcHBlckNhc2UoKTt9LGNhY2hlOnt9LGRhdGE6ZnVuY3Rpb24oZWxlbSxuYW1lLGRhdGEpe2VsZW09ZWxlbT09d2luZG93P3dpbmRvd0RhdGE6ZWxlbTt2YXIgaWQ9ZWxlbVtleHBhbmRvXTtpZighaWQpaWQ9ZWxlbVtleHBhbmRvXT0rK3V1aWQ7aWYobmFtZSYmIWpRdWVyeS5jYWNoZVtpZF0palF1ZXJ5LmNhY2hlW2lkXT17fTtpZihkYXRhIT09dW5kZWZpbmVkKWpRdWVyeS5jYWNoZVtpZF1bbmFtZV09ZGF0YTtyZXR1cm4gbmFtZT9qUXVlcnkuY2FjaGVbaWRdW25hbWVdOmlkO30scmVtb3ZlRGF0YTpmdW5jdGlvbihlbGVtLG5hbWUpe2VsZW09ZWxlbT09d2luZG93P3dpbmRvd0RhdGE6ZWxlbTt2YXIgaWQ9ZWxlbVtleHBhbmRvXTtpZihuYW1lKXtpZihqUXVlcnkuY2FjaGVbaWRdKXtkZWxldGUgalF1ZXJ5LmNhY2hlW2lkXVtuYW1lXTtuYW1lPSIiO2ZvcihuYW1lIGluIGpRdWVyeS5jYWNoZVtpZF0pYnJlYWs7aWYoIW5hbWUpalF1ZXJ5LnJlbW92ZURhdGEoZWxlbSk7fX1lbHNle3RyeXtkZWxldGUgZWxlbVtleHBhbmRvXTt9Y2F0Y2goZSl7aWYoZWxlbS5yZW1vdmVBdHRyaWJ1dGUpZWxlbS5yZW1vdmVBdHRyaWJ1dGUoZXhwYW5kbyk7fWRlbGV0ZSBqUXVlcnkuY2FjaGVbaWRdO319LGVhY2g6ZnVuY3Rpb24ob2JqZWN0LGNhbGxiYWNrLGFyZ3Mpe3ZhciBuYW1lLGk9MCxsZW5ndGg9b2JqZWN0Lmxlbmd0aDtpZihhcmdzKXtpZihsZW5ndGg9PXVuZGVmaW5lZCl7Zm9yKG5hbWUgaW4gb2JqZWN0KWlmKGNhbGxiYWNrLmFwcGx5KG9iamVjdFtuYW1lXSxhcmdzKT09PWZhbHNlKWJyZWFrO31lbHNlCmZvcig7aTxsZW5ndGg7KWlmKGNhbGxiYWNrLmFwcGx5KG9iamVjdFtpKytdLGFyZ3MpPT09ZmFsc2UpYnJlYWs7fWVsc2V7aWYobGVuZ3RoPT11bmRlZmluZWQpe2ZvcihuYW1lIGluIG9iamVjdClpZihjYWxsYmFjay5jYWxsKG9iamVjdFtuYW1lXSxuYW1lLG9iamVjdFtuYW1lXSk9PT1mYWxzZSlicmVhazt9ZWxzZQpmb3IodmFyIHZhbHVlPW9iamVjdFswXTtpPGxlbmd0aCYmY2FsbGJhY2suY2FsbCh2YWx1ZSxpLHZhbHVlKSE9PWZhbHNlO3ZhbHVlPW9iamVjdFsrK2ldKXt9fXJldHVybiBvYmplY3Q7fSxwcm9wOmZ1bmN0aW9uKGVsZW0sdmFsdWUsdHlwZSxpLG5hbWUpe2lmKGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSl2YWx1ZT12YWx1ZS5jYWxsKGVsZW0saSk7cmV0dXJuIHZhbHVlJiZ2YWx1ZS5jb25zdHJ1Y3Rvcj09TnVtYmVyJiZ0eXBlPT0iY3VyQ1NTIiYmIWV4Y2x1ZGUudGVzdChuYW1lKT92YWx1ZSsicHgiOnZhbHVlO30sY2xhc3NOYW1lOnthZGQ6ZnVuY3Rpb24oZWxlbSxjbGFzc05hbWVzKXtqUXVlcnkuZWFjaCgoY2xhc3NOYW1lc3x8IiIpLnNwbGl0KC9ccysvKSxmdW5jdGlvbihpLGNsYXNzTmFtZSl7aWYoZWxlbS5ub2RlVHlwZT09MSYmIWpRdWVyeS5jbGFzc05hbWUuaGFzKGVsZW0uY2xhc3NOYW1lLGNsYXNzTmFtZSkpZWxlbS5jbGFzc05hbWUrPShlbGVtLmNsYXNzTmFtZT8iICI6IiIpK2NsYXNzTmFtZTt9KTt9LHJlbW92ZTpmdW5jdGlvbihlbGVtLGNsYXNzTmFtZXMpe2lmKGVsZW0ubm9kZVR5cGU9PTEpZWxlbS5jbGFzc05hbWU9Y2xhc3NOYW1lcyE9dW5kZWZpbmVkP2pRdWVyeS5ncmVwKGVsZW0uY2xhc3NOYW1lLnNwbGl0KC9ccysvKSxmdW5jdGlvbihjbGFzc05hbWUpe3JldHVybiFqUXVlcnkuY2xhc3NOYW1lLmhhcyhjbGFzc05hbWVzLGNsYXNzTmFtZSk7fSkuam9pbigiICIpOiIiO30saGFzOmZ1bmN0aW9uKGVsZW0sY2xhc3NOYW1lKXtyZXR1cm4galF1ZXJ5LmluQXJyYXkoY2xhc3NOYW1lLChlbGVtLmNsYXNzTmFtZXx8ZWxlbSkudG9TdHJpbmcoKS5zcGxpdCgvXHMrLykpPi0xO319LHN3YXA6ZnVuY3Rpb24oZWxlbSxvcHRpb25zLGNhbGxiYWNrKXt2YXIgb2xkPXt9O2Zvcih2YXIgbmFtZSBpbiBvcHRpb25zKXtvbGRbbmFtZV09ZWxlbS5zdHlsZVtuYW1lXTtlbGVtLnN0eWxlW25hbWVdPW9wdGlvbnNbbmFtZV07fWNhbGxiYWNrLmNhbGwoZWxlbSk7Zm9yKHZhciBuYW1lIGluIG9wdGlvbnMpZWxlbS5zdHlsZVtuYW1lXT1vbGRbbmFtZV07fSxjc3M6ZnVuY3Rpb24oZWxlbSxuYW1lLGZvcmNlKXtpZihuYW1lPT0id2lkdGgifHxuYW1lPT0iaGVpZ2h0Iil7dmFyIHZhbCxwcm9wcz17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sd2hpY2g9bmFtZT09IndpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl07ZnVuY3Rpb24gZ2V0V0goKXt2YWw9bmFtZT09IndpZHRoIj9lbGVtLm9mZnNldFdpZHRoOmVsZW0ub2Zmc2V0SGVpZ2h0O3ZhciBwYWRkaW5nPTAsYm9yZGVyPTA7alF1ZXJ5LmVhY2god2hpY2gsZnVuY3Rpb24oKXtwYWRkaW5nKz1wYXJzZUZsb2F0KGpRdWVyeS5jdXJDU1MoZWxlbSwicGFkZGluZyIrdGhpcyx0cnVlKSl8fDA7Ym9yZGVyKz1wYXJzZUZsb2F0KGpRdWVyeS5jdXJDU1MoZWxlbSwiYm9yZGVyIit0aGlzKyJXaWR0aCIsdHJ1ZSkpfHwwO30pO3ZhbC09TWF0aC5yb3VuZChwYWRkaW5nK2JvcmRlcik7fWlmKGpRdWVyeShlbGVtKS5pcygiOnZpc2libGUiKSlnZXRXSCgpO2Vsc2UKalF1ZXJ5LnN3YXAoZWxlbSxwcm9wcyxnZXRXSCk7cmV0dXJuIE1hdGgubWF4KDAsdmFsKTt9cmV0dXJuIGpRdWVyeS5jdXJDU1MoZWxlbSxuYW1lLGZvcmNlKTt9LGN1ckNTUzpmdW5jdGlvbihlbGVtLG5hbWUsZm9yY2Upe3ZhciByZXQsc3R5bGU9ZWxlbS5zdHlsZTtmdW5jdGlvbiBjb2xvcihlbGVtKXtpZighalF1ZXJ5LmJyb3dzZXIuc2FmYXJpKXJldHVybiBmYWxzZTt2YXIgcmV0PWRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSxudWxsKTtyZXR1cm4hcmV0fHxyZXQuZ2V0UHJvcGVydHlWYWx1ZSgiY29sb3IiKT09IiI7fWlmKG5hbWU9PSJvcGFjaXR5IiYmalF1ZXJ5LmJyb3dzZXIubXNpZSl7cmV0PWpRdWVyeS5hdHRyKHN0eWxlLCJvcGFjaXR5Iik7cmV0dXJuIHJldD09IiI/IjEiOnJldDt9aWYoalF1ZXJ5LmJyb3dzZXIub3BlcmEmJm5hbWU9PSJkaXNwbGF5Iil7dmFyIHNhdmU9c3R5bGUub3V0bGluZTtzdHlsZS5vdXRsaW5lPSIwIHNvbGlkIGJsYWNrIjtzdHlsZS5vdXRsaW5lPXNhdmU7fWlmKG5hbWUubWF0Y2goL2Zsb2F0L2kpKW5hbWU9c3R5bGVGbG9hdDtpZighZm9yY2UmJnN0eWxlJiZzdHlsZVtuYW1lXSlyZXQ9c3R5bGVbbmFtZV07ZWxzZSBpZihkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKXtpZihuYW1lLm1hdGNoKC9mbG9hdC9pKSluYW1lPSJmbG9hdCI7bmFtZT1uYW1lLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKTt2YXIgY29tcHV0ZWRTdHlsZT1kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sbnVsbCk7aWYoY29tcHV0ZWRTdHlsZSYmIWNvbG9yKGVsZW0pKXJldD1jb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7ZWxzZXt2YXIgc3dhcD1bXSxzdGFjaz1bXSxhPWVsZW0saT0wO2Zvcig7YSYmY29sb3IoYSk7YT1hLnBhcmVudE5vZGUpc3RhY2sudW5zaGlmdChhKTtmb3IoO2k8c3RhY2subGVuZ3RoO2krKylpZihjb2xvcihzdGFja1tpXSkpe3N3YXBbaV09c3RhY2tbaV0uc3R5bGUuZGlzcGxheTtzdGFja1tpXS5zdHlsZS5kaXNwbGF5PSJibG9jayI7fXJldD1uYW1lPT0iZGlzcGxheSImJnN3YXBbc3RhY2subGVuZ3RoLTFdIT1udWxsPyJub25lIjooY29tcHV0ZWRTdHlsZSYmY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpKXx8IiI7Zm9yKGk9MDtpPHN3YXAubGVuZ3RoO2krKylpZihzd2FwW2ldIT1udWxsKXN0YWNrW2ldLnN0eWxlLmRpc3BsYXk9c3dhcFtpXTt9aWYobmFtZT09Im9wYWNpdHkiJiZyZXQ9PSIiKXJldD0iMSI7fWVsc2UgaWYoZWxlbS5jdXJyZW50U3R5bGUpe3ZhciBjYW1lbENhc2U9bmFtZS5yZXBsYWNlKC9cLShcdykvZyxmdW5jdGlvbihhbGwsbGV0dGVyKXtyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7fSk7cmV0PWVsZW0uY3VycmVudFN0eWxlW25hbWVdfHxlbGVtLmN1cnJlbnRTdHlsZVtjYW1lbENhc2VdO2lmKCEvXlxkKyhweCk/JC9pLnRlc3QocmV0KSYmL15cZC8udGVzdChyZXQpKXt2YXIgbGVmdD1zdHlsZS5sZWZ0LHJzTGVmdD1lbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0O2VsZW0ucnVudGltZVN0eWxlLmxlZnQ9ZWxlbS5jdXJyZW50U3R5bGUubGVmdDtzdHlsZS5sZWZ0PXJldHx8MDtyZXQ9c3R5bGUucGl4ZWxMZWZ0KyJweCI7c3R5bGUubGVmdD1sZWZ0O2VsZW0ucnVudGltZVN0eWxlLmxlZnQ9cnNMZWZ0O319cmV0dXJuIHJldDt9LGNsZWFuOmZ1bmN0aW9uKGVsZW1zLGNvbnRleHQpe3ZhciByZXQ9W107Y29udGV4dD1jb250ZXh0fHxkb2N1bWVudDtpZih0eXBlb2YgY29udGV4dC5jcmVhdGVFbGVtZW50PT0ndW5kZWZpbmVkJyljb250ZXh0PWNvbnRleHQub3duZXJEb2N1bWVudHx8Y29udGV4dFswXSYmY29udGV4dFswXS5vd25lckRvY3VtZW50fHxkb2N1bWVudDtqUXVlcnkuZWFjaChlbGVtcyxmdW5jdGlvbihpLGVsZW0pe2lmKCFlbGVtKXJldHVybjtpZihlbGVtLmNvbnN0cnVjdG9yPT1OdW1iZXIpZWxlbSs9Jyc7aWYodHlwZW9mIGVsZW09PSJzdHJpbmciKXtlbGVtPWVsZW0ucmVwbGFjZSgvKDwoXHcrKVtePl0qPylcLz4vZyxmdW5jdGlvbihhbGwsZnJvbnQsdGFnKXtyZXR1cm4gdGFnLm1hdGNoKC9eKGFiYnJ8YnJ8Y29sfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW18aHJ8YXJlYXxlbWJlZCkkL2kpP2FsbDpmcm9udCsiPjwvIit0YWcrIj4iO30pO3ZhciB0YWdzPWpRdWVyeS50cmltKGVsZW0pLnRvTG93ZXJDYXNlKCksZGl2PWNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIHdyYXA9IXRhZ3MuaW5kZXhPZigiPG9wdCIpJiZbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdfHwhdGFncy5pbmRleE9mKCI8bGVnIikmJlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXXx8dGFncy5tYXRjaCgvXjwodGhlYWR8dGJvZHl8dGZvb3R8Y29sZ3xjYXApLykmJlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXXx8IXRhZ3MuaW5kZXhPZigiPHRyIikmJlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXXx8KCF0YWdzLmluZGV4T2YoIjx0ZCIpfHwhdGFncy5pbmRleE9mKCI8dGgiKSkmJlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXXx8IXRhZ3MuaW5kZXhPZigiPGNvbCIpJiZbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il18fGpRdWVyeS5icm93c2VyLm1zaWUmJlsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdfHxbMCwiIiwiIl07ZGl2LmlubmVySFRNTD13cmFwWzFdK2VsZW0rd3JhcFsyXTt3aGlsZSh3cmFwWzBdLS0pZGl2PWRpdi5sYXN0Q2hpbGQ7aWYoalF1ZXJ5LmJyb3dzZXIubXNpZSl7dmFyIHRib2R5PSF0YWdzLmluZGV4T2YoIjx0YWJsZSIpJiZ0YWdzLmluZGV4T2YoIjx0Ym9keSIpPDA/ZGl2LmZpcnN0Q2hpbGQmJmRpdi5maXJzdENoaWxkLmNoaWxkTm9kZXM6d3JhcFsxXT09Ijx0YWJsZT4iJiZ0YWdzLmluZGV4T2YoIjx0Ym9keSIpPDA/ZGl2LmNoaWxkTm9kZXM6W107Zm9yKHZhciBqPXRib2R5Lmxlbmd0aC0xO2o+PTA7LS1qKWlmKGpRdWVyeS5ub2RlTmFtZSh0Ym9keVtqXSwidGJvZHkiKSYmIXRib2R5W2pdLmNoaWxkTm9kZXMubGVuZ3RoKXRib2R5W2pdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGJvZHlbal0pO2lmKC9eXHMvLnRlc3QoZWxlbSkpZGl2Lmluc2VydEJlZm9yZShjb250ZXh0LmNyZWF0ZVRleHROb2RlKGVsZW0ubWF0Y2goL15ccyovKVswXSksZGl2LmZpcnN0Q2hpbGQpO31lbGVtPWpRdWVyeS5tYWtlQXJyYXkoZGl2LmNoaWxkTm9kZXMpO31pZihlbGVtLmxlbmd0aD09PTAmJighalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sImZvcm0iKSYmIWpRdWVyeS5ub2RlTmFtZShlbGVtLCJzZWxlY3QiKSkpcmV0dXJuO2lmKGVsZW1bMF09PXVuZGVmaW5lZHx8alF1ZXJ5Lm5vZGVOYW1lKGVsZW0sImZvcm0iKXx8ZWxlbS5vcHRpb25zKXJldC5wdXNoKGVsZW0pO2Vsc2UKcmV0PWpRdWVyeS5tZXJnZShyZXQsZWxlbSk7fSk7cmV0dXJuIHJldDt9LGF0dHI6ZnVuY3Rpb24oZWxlbSxuYW1lLHZhbHVlKXtpZighZWxlbXx8ZWxlbS5ub2RlVHlwZT09M3x8ZWxlbS5ub2RlVHlwZT09OClyZXR1cm4gdW5kZWZpbmVkO3ZhciBub3R4bWw9IWpRdWVyeS5pc1hNTERvYyhlbGVtKSxzZXQ9dmFsdWUhPT11bmRlZmluZWQsbXNpZT1qUXVlcnkuYnJvd3Nlci5tc2llO25hbWU9bm90eG1sJiZqUXVlcnkucHJvcHNbbmFtZV18fG5hbWU7aWYoZWxlbS50YWdOYW1lKXt2YXIgc3BlY2lhbD0vaHJlZnxzcmN8c3R5bGUvLnRlc3QobmFtZSk7aWYobmFtZT09InNlbGVjdGVkIiYmalF1ZXJ5LmJyb3dzZXIuc2FmYXJpKWVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O2lmKG5vdHhtbCYmIXNwZWNpYWwmJm5hbWUgaW4gZWxlbSl7aWYoc2V0KXtpZihuYW1lPT0idHlwZSImJmpRdWVyeS5ub2RlTmFtZShlbGVtLCJpbnB1dCIpJiZlbGVtLnBhcmVudE5vZGUpdGhyb3cidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIjtlbGVtW25hbWVdPXZhbHVlO31pZihqUXVlcnkubm9kZU5hbWUoZWxlbSwiZm9ybSIpJiZlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKS5ub2RlVmFsdWU7cmV0dXJuIGVsZW1bbmFtZV07fWlmKG1zaWUmJm5vdHhtbCYmbmFtZT09InN0eWxlIilyZXR1cm4galF1ZXJ5LmF0dHIoZWxlbS5zdHlsZSwiY3NzVGV4dCIsdmFsdWUpO2lmKHNldCllbGVtLnNldEF0dHJpYnV0ZShuYW1lLCIiK3ZhbHVlKTtpZihtc2llJiZzcGVjaWFsJiZub3R4bWwpcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKG5hbWUsMik7cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKG5hbWUpO31pZihtc2llJiZuYW1lPT0ib3BhY2l0eSIpe2lmKHNldCl7ZWxlbS56b29tPTE7ZWxlbS5maWx0ZXI9KGVsZW0uZmlsdGVyfHwiIikucmVwbGFjZSgvYWxwaGFcKFteKV0qXCkvLCIiKSsocGFyc2VJbnQodmFsdWUpKycnPT0iTmFOIj8iIjoiYWxwaGEob3BhY2l0eT0iK3ZhbHVlKjEwMCsiKSIpO31yZXR1cm4gZWxlbS5maWx0ZXImJmVsZW0uZmlsdGVyLmluZGV4T2YoIm9wYWNpdHk9Iik+PTA/KHBhcnNlRmxvYXQoZWxlbS5maWx0ZXIubWF0Y2goL29wYWNpdHk9KFteKV0qKS8pWzFdKS8xMDApKycnOiIiO31uYW1lPW5hbWUucmVwbGFjZSgvLShbYS16XSkvaWcsZnVuY3Rpb24oYWxsLGxldHRlcil7cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO30pO2lmKHNldCllbGVtW25hbWVdPXZhbHVlO3JldHVybiBlbGVtW25hbWVdO30sdHJpbTpmdW5jdGlvbih0ZXh0KXtyZXR1cm4odGV4dHx8IiIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTt9LG1ha2VBcnJheTpmdW5jdGlvbihhcnJheSl7dmFyIHJldD1bXTtpZihhcnJheSE9bnVsbCl7dmFyIGk9YXJyYXkubGVuZ3RoO2lmKGk9PW51bGx8fGFycmF5LnNwbGl0fHxhcnJheS5zZXRJbnRlcnZhbHx8YXJyYXkuY2FsbClyZXRbMF09YXJyYXk7ZWxzZQp3aGlsZShpKXJldFstLWldPWFycmF5W2ldO31yZXR1cm4gcmV0O30saW5BcnJheTpmdW5jdGlvbihlbGVtLGFycmF5KXtmb3IodmFyIGk9MCxsZW5ndGg9YXJyYXkubGVuZ3RoO2k8bGVuZ3RoO2krKylpZihhcnJheVtpXT09PWVsZW0pcmV0dXJuIGk7cmV0dXJuLTE7fSxtZXJnZTpmdW5jdGlvbihmaXJzdCxzZWNvbmQpe3ZhciBpPTAsZWxlbSxwb3M9Zmlyc3QubGVuZ3RoO2lmKGpRdWVyeS5icm93c2VyLm1zaWUpe3doaWxlKGVsZW09c2Vjb25kW2krK10paWYoZWxlbS5ub2RlVHlwZSE9OClmaXJzdFtwb3MrK109ZWxlbTt9ZWxzZQp3aGlsZShlbGVtPXNlY29uZFtpKytdKWZpcnN0W3BvcysrXT1lbGVtO3JldHVybiBmaXJzdDt9LHVuaXF1ZTpmdW5jdGlvbihhcnJheSl7dmFyIHJldD1bXSxkb25lPXt9O3RyeXtmb3IodmFyIGk9MCxsZW5ndGg9YXJyYXkubGVuZ3RoO2k8bGVuZ3RoO2krKyl7dmFyIGlkPWpRdWVyeS5kYXRhKGFycmF5W2ldKTtpZighZG9uZVtpZF0pe2RvbmVbaWRdPXRydWU7cmV0LnB1c2goYXJyYXlbaV0pO319fWNhdGNoKGUpe3JldD1hcnJheTt9cmV0dXJuIHJldDt9LGdyZXA6ZnVuY3Rpb24oZWxlbXMsY2FsbGJhY2ssaW52KXt2YXIgcmV0PVtdO2Zvcih2YXIgaT0wLGxlbmd0aD1lbGVtcy5sZW5ndGg7aTxsZW5ndGg7aSsrKWlmKCFpbnYhPSFjYWxsYmFjayhlbGVtc1tpXSxpKSlyZXQucHVzaChlbGVtc1tpXSk7cmV0dXJuIHJldDt9LG1hcDpmdW5jdGlvbihlbGVtcyxjYWxsYmFjayl7dmFyIHJldD1bXTtmb3IodmFyIGk9MCxsZW5ndGg9ZWxlbXMubGVuZ3RoO2k8bGVuZ3RoO2krKyl7dmFyIHZhbHVlPWNhbGxiYWNrKGVsZW1zW2ldLGkpO2lmKHZhbHVlIT1udWxsKXJldFtyZXQubGVuZ3RoXT12YWx1ZTt9cmV0dXJuIHJldC5jb25jYXQuYXBwbHkoW10scmV0KTt9fSk7dmFyIHVzZXJBZ2VudD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7alF1ZXJ5LmJyb3dzZXI9e3ZlcnNpb246KHVzZXJBZ2VudC5tYXRjaCgvLisoPzpydnxpdHxyYXxpZSlbXC86IF0oW1xkLl0rKS8pfHxbXSlbMV0sc2FmYXJpOi93ZWJraXQvLnRlc3QodXNlckFnZW50KSxvcGVyYTovb3BlcmEvLnRlc3QodXNlckFnZW50KSxtc2llOi9tc2llLy50ZXN0KHVzZXJBZ2VudCkmJiEvb3BlcmEvLnRlc3QodXNlckFnZW50KSxtb3ppbGxhOi9tb3ppbGxhLy50ZXN0KHVzZXJBZ2VudCkmJiEvKGNvbXBhdGlibGV8d2Via2l0KS8udGVzdCh1c2VyQWdlbnQpfTt2YXIgc3R5bGVGbG9hdD1qUXVlcnkuYnJvd3Nlci5tc2llPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQiO2pRdWVyeS5leHRlbmQoe2JveE1vZGVsOiFqUXVlcnkuYnJvd3Nlci5tc2llfHxkb2N1bWVudC5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCIscHJvcHM6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLCJmbG9hdCI6c3R5bGVGbG9hdCxjc3NGbG9hdDpzdHlsZUZsb2F0LHN0eWxlRmxvYXQ6c3R5bGVGbG9hdCxyZWFkb25seToicmVhZE9ubHkiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmcifX0pO2pRdWVyeS5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGVsZW0ucGFyZW50Tm9kZTt9LHBhcmVudHM6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicGFyZW50Tm9kZSIpO30sbmV4dDpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5Lm50aChlbGVtLDIsIm5leHRTaWJsaW5nIik7fSxwcmV2OmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkubnRoKGVsZW0sMiwicHJldmlvdXNTaWJsaW5nIik7fSxuZXh0QWxsOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkuZGlyKGVsZW0sIm5leHRTaWJsaW5nIik7fSxwcmV2QWxsOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkuZGlyKGVsZW0sInByZXZpb3VzU2libGluZyIpO30sc2libGluZ3M6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5zaWJsaW5nKGVsZW0ucGFyZW50Tm9kZS5maXJzdENoaWxkLGVsZW0pO30sY2hpbGRyZW46ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5zaWJsaW5nKGVsZW0uZmlyc3RDaGlsZCk7fSxjb250ZW50czpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKGVsZW0sImlmcmFtZSIpP2VsZW0uY29udGVudERvY3VtZW50fHxlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6alF1ZXJ5Lm1ha2VBcnJheShlbGVtLmNoaWxkTm9kZXMpO319LGZ1bmN0aW9uKG5hbWUsZm4pe2pRdWVyeS5mbltuYW1lXT1mdW5jdGlvbihzZWxlY3Rvcil7dmFyIHJldD1qUXVlcnkubWFwKHRoaXMsZm4pO2lmKHNlbGVjdG9yJiZ0eXBlb2Ygc2VsZWN0b3I9PSJzdHJpbmciKXJldD1qUXVlcnkubXVsdGlGaWx0ZXIoc2VsZWN0b3IscmV0KTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soalF1ZXJ5LnVuaXF1ZShyZXQpKTt9O30pO2pRdWVyeS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24obmFtZSxvcmlnaW5hbCl7alF1ZXJ5LmZuW25hbWVdPWZ1bmN0aW9uKCl7dmFyIGFyZ3M9YXJndW1lbnRzO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxsZW5ndGg9YXJncy5sZW5ndGg7aTxsZW5ndGg7aSsrKWpRdWVyeShhcmdzW2ldKVtvcmlnaW5hbF0odGhpcyk7fSk7fTt9KTtqUXVlcnkuZWFjaCh7cmVtb3ZlQXR0cjpmdW5jdGlvbihuYW1lKXtqUXVlcnkuYXR0cih0aGlzLG5hbWUsIiIpO2lmKHRoaXMubm9kZVR5cGU9PTEpdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fSxhZGRDbGFzczpmdW5jdGlvbihjbGFzc05hbWVzKXtqUXVlcnkuY2xhc3NOYW1lLmFkZCh0aGlzLGNsYXNzTmFtZXMpO30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oY2xhc3NOYW1lcyl7alF1ZXJ5LmNsYXNzTmFtZS5yZW1vdmUodGhpcyxjbGFzc05hbWVzKTt9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGNsYXNzTmFtZXMpe2pRdWVyeS5jbGFzc05hbWVbalF1ZXJ5LmNsYXNzTmFtZS5oYXModGhpcyxjbGFzc05hbWVzKT8icmVtb3ZlIjoiYWRkIl0odGhpcyxjbGFzc05hbWVzKTt9LHJlbW92ZTpmdW5jdGlvbihzZWxlY3Rvcil7aWYoIXNlbGVjdG9yfHxqUXVlcnkuZmlsdGVyKHNlbGVjdG9yLFt0aGlzXSkuci5sZW5ndGgpe2pRdWVyeSgiKiIsdGhpcykuYWRkKHRoaXMpLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQucmVtb3ZlKHRoaXMpO2pRdWVyeS5yZW1vdmVEYXRhKHRoaXMpO30pO2lmKHRoaXMucGFyZW50Tm9kZSl0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7fX0sZW1wdHk6ZnVuY3Rpb24oKXtqUXVlcnkoIj4qIix0aGlzKS5yZW1vdmUoKTt3aGlsZSh0aGlzLmZpcnN0Q2hpbGQpdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmZpcnN0Q2hpbGQpO319LGZ1bmN0aW9uKG5hbWUsZm4pe2pRdWVyeS5mbltuYW1lXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZm4sYXJndW1lbnRzKTt9O30pO2pRdWVyeS5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihpLG5hbWUpe3ZhciB0eXBlPW5hbWUudG9Mb3dlckNhc2UoKTtqUXVlcnkuZm5bdHlwZV09ZnVuY3Rpb24oc2l6ZSl7cmV0dXJuIHRoaXNbMF09PXdpbmRvdz9qUXVlcnkuYnJvd3Nlci5vcGVyYSYmZG9jdW1lbnQuYm9keVsiY2xpZW50IituYW1lXXx8alF1ZXJ5LmJyb3dzZXIuc2FmYXJpJiZ3aW5kb3dbImlubmVyIituYW1lXXx8ZG9jdW1lbnQuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrbmFtZV18fGRvY3VtZW50LmJvZHlbImNsaWVudCIrbmFtZV06dGhpc1swXT09ZG9jdW1lbnQ/TWF0aC5tYXgoTWF0aC5tYXgoZG9jdW1lbnQuYm9keVsic2Nyb2xsIituYW1lXSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIrbmFtZV0pLE1hdGgubWF4KGRvY3VtZW50LmJvZHlbIm9mZnNldCIrbmFtZV0sZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK25hbWVdKSk6c2l6ZT09dW5kZWZpbmVkPyh0aGlzLmxlbmd0aD9qUXVlcnkuY3NzKHRoaXNbMF0sdHlwZSk6bnVsbCk6dGhpcy5jc3ModHlwZSxzaXplLmNvbnN0cnVjdG9yPT1TdHJpbmc/c2l6ZTpzaXplKyJweCIpO307fSk7ZnVuY3Rpb24gbnVtKGVsZW0scHJvcCl7cmV0dXJuIGVsZW1bMF0mJnBhcnNlSW50KGpRdWVyeS5jdXJDU1MoZWxlbVswXSxwcm9wLHRydWUpLDEwKXx8MDt9dmFyIGNoYXJzPWpRdWVyeS5icm93c2VyLnNhZmFyaSYmcGFyc2VJbnQoalF1ZXJ5LmJyb3dzZXIudmVyc2lvbik8NDE3PyIoPzpbXFx3Kl8tXXxcXFxcLikiOiIoPzpbXFx3XHUwMTI4LVx1RkZGRipfLV18XFxcXC4pIixxdWlja0NoaWxkPW5ldyBSZWdFeHAoIl4+XFxzKigiK2NoYXJzKyIrKSIpLHF1aWNrSUQ9bmV3IFJlZ0V4cCgiXigiK2NoYXJzKyIrKSgjKSgiK2NoYXJzKyIrKSIpLHF1aWNrQ2xhc3M9bmV3IFJlZ0V4cCgiXihbIy5dPykoIitjaGFycysiKikiKTtqUXVlcnkuZXh0ZW5kKHtleHByOnsiIjpmdW5jdGlvbihhLGksbSl7cmV0dXJuIG1bMl09PSIqInx8alF1ZXJ5Lm5vZGVOYW1lKGEsbVsyXSk7fSwiIyI6ZnVuY3Rpb24oYSxpLG0pe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09bVsyXTt9LCI6Ijp7bHQ6ZnVuY3Rpb24oYSxpLG0pe3JldHVybiBpPG1bM10tMDt9LGd0OmZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gaT5tWzNdLTA7fSxudGg6ZnVuY3Rpb24oYSxpLG0pe3JldHVybiBtWzNdLTA9PWk7fSxlcTpmdW5jdGlvbihhLGksbSl7cmV0dXJuIG1bM10tMD09aTt9LGZpcnN0OmZ1bmN0aW9uKGEsaSl7cmV0dXJuIGk9PTA7fSxsYXN0OmZ1bmN0aW9uKGEsaSxtLHIpe3JldHVybiBpPT1yLmxlbmd0aC0xO30sZXZlbjpmdW5jdGlvbihhLGkpe3JldHVybiBpJTI9PTA7fSxvZGQ6ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaSUyO30sImZpcnN0LWNoaWxkIjpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIilbMF09PWE7fSwibGFzdC1jaGlsZCI6ZnVuY3Rpb24oYSl7cmV0dXJuIGpRdWVyeS5udGgoYS5wYXJlbnROb2RlLmxhc3RDaGlsZCwxLCJwcmV2aW91c1NpYmxpbmciKT09YTt9LCJvbmx5LWNoaWxkIjpmdW5jdGlvbihhKXtyZXR1cm4halF1ZXJ5Lm50aChhLnBhcmVudE5vZGUubGFzdENoaWxkLDIsInByZXZpb3VzU2libGluZyIpO30scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhLmZpcnN0Q2hpbGQ7fSxlbXB0eTpmdW5jdGlvbihhKXtyZXR1cm4hYS5maXJzdENoaWxkO30sY29udGFpbnM6ZnVuY3Rpb24oYSxpLG0pe3JldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8alF1ZXJ5KGEpLnRleHQoKXx8IiIpLmluZGV4T2YobVszXSk+PTA7fSx2aXNpYmxlOmZ1bmN0aW9uKGEpe3JldHVybiJoaWRkZW4iIT1hLnR5cGUmJmpRdWVyeS5jc3MoYSwiZGlzcGxheSIpIT0ibm9uZSImJmpRdWVyeS5jc3MoYSwidmlzaWJpbGl0eSIpIT0iaGlkZGVuIjt9LGhpZGRlbjpmdW5jdGlvbihhKXtyZXR1cm4iaGlkZGVuIj09YS50eXBlfHxqUXVlcnkuY3NzKGEsImRpc3BsYXkiKT09Im5vbmUifHxqUXVlcnkuY3NzKGEsInZpc2liaWxpdHkiKT09ImhpZGRlbiI7fSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiFhLmRpc2FibGVkO30sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ7fSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ7fSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zZWxlY3RlZHx8alF1ZXJ5LmF0dHIoYSwic2VsZWN0ZWQiKTt9LHRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuInRleHQiPT1hLnR5cGU7fSxyYWRpbzpmdW5jdGlvbihhKXtyZXR1cm4icmFkaW8iPT1hLnR5cGU7fSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4iY2hlY2tib3giPT1hLnR5cGU7fSxmaWxlOmZ1bmN0aW9uKGEpe3JldHVybiJmaWxlIj09YS50eXBlO30scGFzc3dvcmQ6ZnVuY3Rpb24oYSl7cmV0dXJuInBhc3N3b3JkIj09YS50eXBlO30sc3VibWl0OmZ1bmN0aW9uKGEpe3JldHVybiJzdWJtaXQiPT1hLnR5cGU7fSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4iaW1hZ2UiPT1hLnR5cGU7fSxyZXNldDpmdW5jdGlvbihhKXtyZXR1cm4icmVzZXQiPT1hLnR5cGU7fSxidXR0b246ZnVuY3Rpb24oYSl7cmV0dXJuImJ1dHRvbiI9PWEudHlwZXx8alF1ZXJ5Lm5vZGVOYW1lKGEsImJ1dHRvbiIpO30saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGEubm9kZU5hbWUpO30saGFzOmZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4galF1ZXJ5LmZpbmQobVszXSxhKS5sZW5ndGg7fSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSk7fSxhbmltYXRlZDpmdW5jdGlvbihhKXtyZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycyxmdW5jdGlvbihmbil7cmV0dXJuIGE9PWZuLmVsZW07fSkubGVuZ3RoO319fSxwYXJzZTpbL14oXFspICpAPyhbXHctXSspICooWyEqJF5+PV0qKSAqKCc/Ij8pKC4qPylcNCAqXF0vLC9eKDopKFtcdy1dKylcKCI/Jz8oLio/KFwoLio/XCkpP1teKF0qPykiPyc/XCkvLG5ldyBSZWdFeHAoIl4oWzouI10qKSgiK2NoYXJzKyIrKSIpXSxtdWx0aUZpbHRlcjpmdW5jdGlvbihleHByLGVsZW1zLG5vdCl7dmFyIG9sZCxjdXI9W107d2hpbGUoZXhwciYmZXhwciE9b2xkKXtvbGQ9ZXhwcjt2YXIgZj1qUXVlcnkuZmlsdGVyKGV4cHIsZWxlbXMsbm90KTtleHByPWYudC5yZXBsYWNlKC9eXHMqLFxzKi8sIiIpO2N1cj1ub3Q/ZWxlbXM9Zi5yOmpRdWVyeS5tZXJnZShjdXIsZi5yKTt9cmV0dXJuIGN1cjt9LGZpbmQ6ZnVuY3Rpb24odCxjb250ZXh0KXtpZih0eXBlb2YgdCE9InN0cmluZyIpcmV0dXJuW3RdO2lmKGNvbnRleHQmJmNvbnRleHQubm9kZVR5cGUhPTEmJmNvbnRleHQubm9kZVR5cGUhPTkpcmV0dXJuW107Y29udGV4dD1jb250ZXh0fHxkb2N1bWVudDt2YXIgcmV0PVtjb250ZXh0XSxkb25lPVtdLGxhc3Qsbm9kZU5hbWU7d2hpbGUodCYmbGFzdCE9dCl7dmFyIHI9W107bGFzdD10O3Q9alF1ZXJ5LnRyaW0odCk7dmFyIGZvdW5kVG9rZW49ZmFsc2UscmU9cXVpY2tDaGlsZCxtPXJlLmV4ZWModCk7aWYobSl7bm9kZU5hbWU9bVsxXS50b1VwcGVyQ2FzZSgpO2Zvcih2YXIgaT0wO3JldFtpXTtpKyspZm9yKHZhciBjPXJldFtpXS5maXJzdENoaWxkO2M7Yz1jLm5leHRTaWJsaW5nKWlmKGMubm9kZVR5cGU9PTEmJihub2RlTmFtZT09IioifHxjLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PW5vZGVOYW1lKSlyLnB1c2goYyk7cmV0PXI7dD10LnJlcGxhY2UocmUsIiIpO2lmKHQuaW5kZXhPZigiICIpPT0wKWNvbnRpbnVlO2ZvdW5kVG9rZW49dHJ1ZTt9ZWxzZXtyZT0vXihbPit+XSlccyooXHcqKS9pO2lmKChtPXJlLmV4ZWModCkpIT1udWxsKXtyPVtdO3ZhciBtZXJnZT17fTtub2RlTmFtZT1tWzJdLnRvVXBwZXJDYXNlKCk7bT1tWzFdO2Zvcih2YXIgaj0wLHJsPXJldC5sZW5ndGg7ajxybDtqKyspe3ZhciBuPW09PSJ+Inx8bT09IisiP3JldFtqXS5uZXh0U2libGluZzpyZXRbal0uZmlyc3RDaGlsZDtmb3IoO247bj1uLm5leHRTaWJsaW5nKWlmKG4ubm9kZVR5cGU9PTEpe3ZhciBpZD1qUXVlcnkuZGF0YShuKTtpZihtPT0ifiImJm1lcmdlW2lkXSlicmVhaztpZighbm9kZU5hbWV8fG4ubm9kZU5hbWUudG9VcHBlckNhc2UoKT09bm9kZU5hbWUpe2lmKG09PSJ+IiltZXJnZVtpZF09dHJ1ZTtyLnB1c2gobik7fWlmKG09PSIrIilicmVhazt9fXJldD1yO3Q9alF1ZXJ5LnRyaW0odC5yZXBsYWNlKHJlLCIiKSk7Zm91bmRUb2tlbj10cnVlO319aWYodCYmIWZvdW5kVG9rZW4pe2lmKCF0LmluZGV4T2YoIiwiKSl7aWYoY29udGV4dD09cmV0WzBdKXJldC5zaGlmdCgpO2RvbmU9alF1ZXJ5Lm1lcmdlKGRvbmUscmV0KTtyPXJldD1bY29udGV4dF07dD0iICIrdC5zdWJzdHIoMSx0Lmxlbmd0aCk7fWVsc2V7dmFyIHJlMj1xdWlja0lEO3ZhciBtPXJlMi5leGVjKHQpO2lmKG0pe209WzAsbVsyXSxtWzNdLG1bMV1dO31lbHNle3JlMj1xdWlja0NsYXNzO209cmUyLmV4ZWModCk7fW1bMl09bVsyXS5yZXBsYWNlKC9cXC9nLCIiKTt2YXIgZWxlbT1yZXRbcmV0Lmxlbmd0aC0xXTtpZihtWzFdPT0iIyImJmVsZW0mJmVsZW0uZ2V0RWxlbWVudEJ5SWQmJiFqUXVlcnkuaXNYTUxEb2MoZWxlbSkpe3ZhciBvaWQ9ZWxlbS5nZXRFbGVtZW50QnlJZChtWzJdKTtpZigoalF1ZXJ5LmJyb3dzZXIubXNpZXx8alF1ZXJ5LmJyb3dzZXIub3BlcmEpJiZvaWQmJnR5cGVvZiBvaWQuaWQ9PSJzdHJpbmciJiZvaWQuaWQhPW1bMl0pb2lkPWpRdWVyeSgnW0BpZD0iJyttWzJdKyciXScsZWxlbSlbMF07cmV0PXI9b2lkJiYoIW1bM118fGpRdWVyeS5ub2RlTmFtZShvaWQsbVszXSkpP1tvaWRdOltdO31lbHNle2Zvcih2YXIgaT0wO3JldFtpXTtpKyspe3ZhciB0YWc9bVsxXT09IiMiJiZtWzNdP21bM106bVsxXSE9IiJ8fG1bMF09PSIiPyIqIjptWzJdO2lmKHRhZz09IioiJiZyZXRbaV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09Im9iamVjdCIpdGFnPSJwYXJhbSI7cj1qUXVlcnkubWVyZ2UocixyZXRbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKSk7fWlmKG1bMV09PSIuIilyPWpRdWVyeS5jbGFzc0ZpbHRlcihyLG1bMl0pO2lmKG1bMV09PSIjIil7dmFyIHRtcD1bXTtmb3IodmFyIGk9MDtyW2ldO2krKylpZihyW2ldLmdldEF0dHJpYnV0ZSgiaWQiKT09bVsyXSl7dG1wPVtyW2ldXTticmVhazt9cj10bXA7fXJldD1yO310PXQucmVwbGFjZShyZTIsIiIpO319aWYodCl7dmFyIHZhbD1qUXVlcnkuZmlsdGVyKHQscik7cmV0PXI9dmFsLnI7dD1qUXVlcnkudHJpbSh2YWwudCk7fX1pZih0KXJldD1bXTtpZihyZXQmJmNvbnRleHQ9PXJldFswXSlyZXQuc2hpZnQoKTtkb25lPWpRdWVyeS5tZXJnZShkb25lLHJldCk7cmV0dXJuIGRvbmU7fSxjbGFzc0ZpbHRlcjpmdW5jdGlvbihyLG0sbm90KXttPSIgIittKyIgIjt2YXIgdG1wPVtdO2Zvcih2YXIgaT0wO3JbaV07aSsrKXt2YXIgcGFzcz0oIiAiK3JbaV0uY2xhc3NOYW1lKyIgIikuaW5kZXhPZihtKT49MDtpZighbm90JiZwYXNzfHxub3QmJiFwYXNzKXRtcC5wdXNoKHJbaV0pO31yZXR1cm4gdG1wO30sZmlsdGVyOmZ1bmN0aW9uKHQscixub3Qpe3ZhciBsYXN0O3doaWxlKHQmJnQhPWxhc3Qpe2xhc3Q9dDt2YXIgcD1qUXVlcnkucGFyc2UsbTtmb3IodmFyIGk9MDtwW2ldO2krKyl7bT1wW2ldLmV4ZWModCk7aWYobSl7dD10LnN1YnN0cmluZyhtWzBdLmxlbmd0aCk7bVsyXT1tWzJdLnJlcGxhY2UoL1xcL2csIiIpO2JyZWFrO319aWYoIW0pYnJlYWs7aWYobVsxXT09IjoiJiZtWzJdPT0ibm90IilyPWlzU2ltcGxlLnRlc3QobVszXSk/alF1ZXJ5LmZpbHRlcihtWzNdLHIsdHJ1ZSkucjpqUXVlcnkocikubm90KG1bM10pO2Vsc2UgaWYobVsxXT09Ii4iKXI9alF1ZXJ5LmNsYXNzRmlsdGVyKHIsbVsyXSxub3QpO2Vsc2UgaWYobVsxXT09IlsiKXt2YXIgdG1wPVtdLHR5cGU9bVszXTtmb3IodmFyIGk9MCxybD1yLmxlbmd0aDtpPHJsO2krKyl7dmFyIGE9cltpXSx6PWFbalF1ZXJ5LnByb3BzW21bMl1dfHxtWzJdXTtpZih6PT1udWxsfHwvaHJlZnxzcmN8c2VsZWN0ZWQvLnRlc3QobVsyXSkpej1qUXVlcnkuYXR0cihhLG1bMl0pfHwnJztpZigodHlwZT09IiImJiEhenx8dHlwZT09Ij0iJiZ6PT1tWzVdfHx0eXBlPT0iIT0iJiZ6IT1tWzVdfHx0eXBlPT0iXj0iJiZ6JiYhei5pbmRleE9mKG1bNV0pfHx0eXBlPT0iJD0iJiZ6LnN1YnN0cih6Lmxlbmd0aC1tWzVdLmxlbmd0aCk9PW1bNV18fCh0eXBlPT0iKj0ifHx0eXBlPT0ifj0iKSYmei5pbmRleE9mKG1bNV0pPj0wKV5ub3QpdG1wLnB1c2goYSk7fXI9dG1wO31lbHNlIGlmKG1bMV09PSI6IiYmbVsyXT09Im50aC1jaGlsZCIpe3ZhciBtZXJnZT17fSx0bXA9W10sdGVzdD0vKC0/KShcZCopbigoPzpcK3wtKT9cZCopLy5leGVjKG1bM109PSJldmVuIiYmIjJuInx8bVszXT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChtWzNdKSYmIjBuKyIrbVszXXx8bVszXSksZmlyc3Q9KHRlc3RbMV0rKHRlc3RbMl18fDEpKS0wLGxhc3Q9dGVzdFszXS0wO2Zvcih2YXIgaT0wLHJsPXIubGVuZ3RoO2k8cmw7aSsrKXt2YXIgbm9kZT1yW2ldLHBhcmVudE5vZGU9bm9kZS5wYXJlbnROb2RlLGlkPWpRdWVyeS5kYXRhKHBhcmVudE5vZGUpO2lmKCFtZXJnZVtpZF0pe3ZhciBjPTE7Zm9yKHZhciBuPXBhcmVudE5vZGUuZmlyc3RDaGlsZDtuO249bi5uZXh0U2libGluZylpZihuLm5vZGVUeXBlPT0xKW4ubm9kZUluZGV4PWMrKzttZXJnZVtpZF09dHJ1ZTt9dmFyIGFkZD1mYWxzZTtpZihmaXJzdD09MCl7aWYobm9kZS5ub2RlSW5kZXg9PWxhc3QpYWRkPXRydWU7fWVsc2UgaWYoKG5vZGUubm9kZUluZGV4LWxhc3QpJWZpcnN0PT0wJiYobm9kZS5ub2RlSW5kZXgtbGFzdCkvZmlyc3Q+PTApYWRkPXRydWU7aWYoYWRkXm5vdCl0bXAucHVzaChub2RlKTt9cj10bXA7fWVsc2V7dmFyIGZuPWpRdWVyeS5leHByW21bMV1dO2lmKHR5cGVvZiBmbj09Im9iamVjdCIpZm49Zm5bbVsyXV07aWYodHlwZW9mIGZuPT0ic3RyaW5nIilmbj1ldmFsKCJmYWxzZXx8ZnVuY3Rpb24oYSxpKXtyZXR1cm4gIitmbisiO30iKTtyPWpRdWVyeS5ncmVwKHIsZnVuY3Rpb24oZWxlbSxpKXtyZXR1cm4gZm4oZWxlbSxpLG0scik7fSxub3QpO319cmV0dXJue3I6cix0OnR9O30sZGlyOmZ1bmN0aW9uKGVsZW0sZGlyKXt2YXIgbWF0Y2hlZD1bXSxjdXI9ZWxlbVtkaXJdO3doaWxlKGN1ciYmY3VyIT1kb2N1bWVudCl7aWYoY3VyLm5vZGVUeXBlPT0xKW1hdGNoZWQucHVzaChjdXIpO2N1cj1jdXJbZGlyXTt9cmV0dXJuIG1hdGNoZWQ7fSxudGg6ZnVuY3Rpb24oY3VyLHJlc3VsdCxkaXIsZWxlbSl7cmVzdWx0PXJlc3VsdHx8MTt2YXIgbnVtPTA7Zm9yKDtjdXI7Y3VyPWN1cltkaXJdKWlmKGN1ci5ub2RlVHlwZT09MSYmKytudW09PXJlc3VsdClicmVhaztyZXR1cm4gY3VyO30sc2libGluZzpmdW5jdGlvbihuLGVsZW0pe3ZhciByPVtdO2Zvcig7bjtuPW4ubmV4dFNpYmxpbmcpe2lmKG4ubm9kZVR5cGU9PTEmJm4hPWVsZW0pci5wdXNoKG4pO31yZXR1cm4gcjt9fSk7alF1ZXJ5LmV2ZW50PXthZGQ6ZnVuY3Rpb24oZWxlbSx0eXBlcyxoYW5kbGVyLGRhdGEpe2lmKGVsZW0ubm9kZVR5cGU9PTN8fGVsZW0ubm9kZVR5cGU9PTgpcmV0dXJuO2lmKGpRdWVyeS5icm93c2VyLm1zaWUmJmVsZW0uc2V0SW50ZXJ2YWwpZWxlbT13aW5kb3c7aWYoIWhhbmRsZXIuZ3VpZCloYW5kbGVyLmd1aWQ9dGhpcy5ndWlkKys7aWYoZGF0YSE9dW5kZWZpbmVkKXt2YXIgZm49aGFuZGxlcjtoYW5kbGVyPXRoaXMucHJveHkoZm4sZnVuY3Rpb24oKXtyZXR1cm4gZm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO30pO2hhbmRsZXIuZGF0YT1kYXRhO312YXIgZXZlbnRzPWpRdWVyeS5kYXRhKGVsZW0sImV2ZW50cyIpfHxqUXVlcnkuZGF0YShlbGVtLCJldmVudHMiLHt9KSxoYW5kbGU9alF1ZXJ5LmRhdGEoZWxlbSwiaGFuZGxlIil8fGpRdWVyeS5kYXRhKGVsZW0sImhhbmRsZSIsZnVuY3Rpb24oKXtpZih0eXBlb2YgalF1ZXJ5IT0idW5kZWZpbmVkIiYmIWpRdWVyeS5ldmVudC50cmlnZ2VyZWQpcmV0dXJuIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBwbHkoYXJndW1lbnRzLmNhbGxlZS5lbGVtLGFyZ3VtZW50cyk7fSk7aGFuZGxlLmVsZW09ZWxlbTtqUXVlcnkuZWFjaCh0eXBlcy5zcGxpdCgvXHMrLyksZnVuY3Rpb24oaW5kZXgsdHlwZSl7dmFyIHBhcnRzPXR5cGUuc3BsaXQoIi4iKTt0eXBlPXBhcnRzWzBdO2hhbmRsZXIudHlwZT1wYXJ0c1sxXTt2YXIgaGFuZGxlcnM9ZXZlbnRzW3R5cGVdO2lmKCFoYW5kbGVycyl7aGFuZGxlcnM9ZXZlbnRzW3R5cGVdPXt9O2lmKCFqUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXXx8alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0uc2V0dXAuY2FsbChlbGVtKT09PWZhbHNlKXtpZihlbGVtLmFkZEV2ZW50TGlzdGVuZXIpZWxlbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsaGFuZGxlLGZhbHNlKTtlbHNlIGlmKGVsZW0uYXR0YWNoRXZlbnQpZWxlbS5hdHRhY2hFdmVudCgib24iK3R5cGUsaGFuZGxlKTt9fWhhbmRsZXJzW2hhbmRsZXIuZ3VpZF09aGFuZGxlcjtqUXVlcnkuZXZlbnQuZ2xvYmFsW3R5cGVdPXRydWU7fSk7ZWxlbT1udWxsO30sZ3VpZDoxLGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oZWxlbSx0eXBlcyxoYW5kbGVyKXtpZihlbGVtLm5vZGVUeXBlPT0zfHxlbGVtLm5vZGVUeXBlPT04KXJldHVybjt2YXIgZXZlbnRzPWpRdWVyeS5kYXRhKGVsZW0sImV2ZW50cyIpLHJldCxpbmRleDtpZihldmVudHMpe2lmKHR5cGVzPT11bmRlZmluZWR8fCh0eXBlb2YgdHlwZXM9PSJzdHJpbmciJiZ0eXBlcy5jaGFyQXQoMCk9PSIuIikpZm9yKHZhciB0eXBlIGluIGV2ZW50cyl0aGlzLnJlbW92ZShlbGVtLHR5cGUrKHR5cGVzfHwiIikpO2Vsc2V7aWYodHlwZXMudHlwZSl7aGFuZGxlcj10eXBlcy5oYW5kbGVyO3R5cGVzPXR5cGVzLnR5cGU7fWpRdWVyeS5lYWNoKHR5cGVzLnNwbGl0KC9ccysvKSxmdW5jdGlvbihpbmRleCx0eXBlKXt2YXIgcGFydHM9dHlwZS5zcGxpdCgiLiIpO3R5cGU9cGFydHNbMF07aWYoZXZlbnRzW3R5cGVdKXtpZihoYW5kbGVyKWRlbGV0ZSBldmVudHNbdHlwZV1baGFuZGxlci5ndWlkXTtlbHNlCmZvcihoYW5kbGVyIGluIGV2ZW50c1t0eXBlXSlpZighcGFydHNbMV18fGV2ZW50c1t0eXBlXVtoYW5kbGVyXS50eXBlPT1wYXJ0c1sxXSlkZWxldGUgZXZlbnRzW3R5cGVdW2hhbmRsZXJdO2ZvcihyZXQgaW4gZXZlbnRzW3R5cGVdKWJyZWFrO2lmKCFyZXQpe2lmKCFqUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXXx8alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV0udGVhcmRvd24uY2FsbChlbGVtKT09PWZhbHNlKXtpZihlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIpZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsalF1ZXJ5LmRhdGEoZWxlbSwiaGFuZGxlIiksZmFsc2UpO2Vsc2UgaWYoZWxlbS5kZXRhY2hFdmVudCllbGVtLmRldGFjaEV2ZW50KCJvbiIrdHlwZSxqUXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiKSk7fXJldD1udWxsO2RlbGV0ZSBldmVudHNbdHlwZV07fX19KTt9Zm9yKHJldCBpbiBldmVudHMpYnJlYWs7aWYoIXJldCl7dmFyIGhhbmRsZT1qUXVlcnkuZGF0YShlbGVtLCJoYW5kbGUiKTtpZihoYW5kbGUpaGFuZGxlLmVsZW09bnVsbDtqUXVlcnkucmVtb3ZlRGF0YShlbGVtLCJldmVudHMiKTtqUXVlcnkucmVtb3ZlRGF0YShlbGVtLCJoYW5kbGUiKTt9fX0sdHJpZ2dlcjpmdW5jdGlvbih0eXBlLGRhdGEsZWxlbSxkb25hdGl2ZSxleHRyYSl7ZGF0YT1qUXVlcnkubWFrZUFycmF5KGRhdGEpO2lmKHR5cGUuaW5kZXhPZigiISIpPj0wKXt0eXBlPXR5cGUuc2xpY2UoMCwtMSk7dmFyIGV4Y2x1c2l2ZT10cnVlO31pZighZWxlbSl7aWYodGhpcy5nbG9iYWxbdHlwZV0palF1ZXJ5KCIqIikuYWRkKFt3aW5kb3csZG9jdW1lbnRdKS50cmlnZ2VyKHR5cGUsZGF0YSk7fWVsc2V7aWYoZWxlbS5ub2RlVHlwZT09M3x8ZWxlbS5ub2RlVHlwZT09OClyZXR1cm4gdW5kZWZpbmVkO3ZhciB2YWwscmV0LGZuPWpRdWVyeS5pc0Z1bmN0aW9uKGVsZW1bdHlwZV18fG51bGwpLGV2ZW50PSFkYXRhWzBdfHwhZGF0YVswXS5wcmV2ZW50RGVmYXVsdDtpZihldmVudCl7ZGF0YS51bnNoaWZ0KHt0eXBlOnR5cGUsdGFyZ2V0OmVsZW0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe30sdGltZVN0YW1wOm5vdygpfSk7ZGF0YVswXVtleHBhbmRvXT10cnVlO31kYXRhWzBdLnR5cGU9dHlwZTtpZihleGNsdXNpdmUpZGF0YVswXS5leGNsdXNpdmU9dHJ1ZTt2YXIgaGFuZGxlPWpRdWVyeS5kYXRhKGVsZW0sImhhbmRsZSIpO2lmKGhhbmRsZSl2YWw9aGFuZGxlLmFwcGx5KGVsZW0sZGF0YSk7aWYoKCFmbnx8KGpRdWVyeS5ub2RlTmFtZShlbGVtLCdhJykmJnR5cGU9PSJjbGljayIpKSYmZWxlbVsib24iK3R5cGVdJiZlbGVtWyJvbiIrdHlwZV0uYXBwbHkoZWxlbSxkYXRhKT09PWZhbHNlKXZhbD1mYWxzZTtpZihldmVudClkYXRhLnNoaWZ0KCk7aWYoZXh0cmEmJmpRdWVyeS5pc0Z1bmN0aW9uKGV4dHJhKSl7cmV0PWV4dHJhLmFwcGx5KGVsZW0sdmFsPT1udWxsP2RhdGE6ZGF0YS5jb25jYXQodmFsKSk7aWYocmV0IT09dW5kZWZpbmVkKXZhbD1yZXQ7fWlmKGZuJiZkb25hdGl2ZSE9PWZhbHNlJiZ2YWwhPT1mYWxzZSYmIShqUXVlcnkubm9kZU5hbWUoZWxlbSwnYScpJiZ0eXBlPT0iY2xpY2siKSl7dGhpcy50cmlnZ2VyZWQ9dHJ1ZTt0cnl7ZWxlbVt0eXBlXSgpO31jYXRjaChlKXt9fXRoaXMudHJpZ2dlcmVkPWZhbHNlO31yZXR1cm4gdmFsO30saGFuZGxlOmZ1bmN0aW9uKGV2ZW50KXt2YXIgdmFsLHJldCxuYW1lc3BhY2UsYWxsLGhhbmRsZXJzO2V2ZW50PWFyZ3VtZW50c1swXT1qUXVlcnkuZXZlbnQuZml4KGV2ZW50fHx3aW5kb3cuZXZlbnQpO25hbWVzcGFjZT1ldmVudC50eXBlLnNwbGl0KCIuIik7ZXZlbnQudHlwZT1uYW1lc3BhY2VbMF07bmFtZXNwYWNlPW5hbWVzcGFjZVsxXTthbGw9IW5hbWVzcGFjZSYmIWV2ZW50LmV4Y2x1c2l2ZTtoYW5kbGVycz0oalF1ZXJ5LmRhdGEodGhpcywiZXZlbnRzIil8fHt9KVtldmVudC50eXBlXTtmb3IodmFyIGogaW4gaGFuZGxlcnMpe3ZhciBoYW5kbGVyPWhhbmRsZXJzW2pdO2lmKGFsbHx8aGFuZGxlci50eXBlPT1uYW1lc3BhY2Upe2V2ZW50LmhhbmRsZXI9aGFuZGxlcjtldmVudC5kYXRhPWhhbmRsZXIuZGF0YTtyZXQ9aGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodmFsIT09ZmFsc2UpdmFsPXJldDtpZihyZXQ9PT1mYWxzZSl7ZXZlbnQucHJldmVudERlZmF1bHQoKTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9fX1yZXR1cm4gdmFsO30sZml4OmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudFtleHBhbmRvXT09dHJ1ZSlyZXR1cm4gZXZlbnQ7dmFyIG9yaWdpbmFsRXZlbnQ9ZXZlbnQ7ZXZlbnQ9e29yaWdpbmFsRXZlbnQ6b3JpZ2luYWxFdmVudH07dmFyIHByb3BzPSJhbHRLZXkgYXR0ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBjYW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbWV0YUtleSBuZXdWYWx1ZSBvcmlnaW5hbFRhcmdldCBwYWdlWCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3JlZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdGltZVN0YW1wIHRvRWxlbWVudCB0eXBlIHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAiKTtmb3IodmFyIGk9cHJvcHMubGVuZ3RoO2k7aS0tKWV2ZW50W3Byb3BzW2ldXT1vcmlnaW5hbEV2ZW50W3Byb3BzW2ldXTtldmVudFtleHBhbmRvXT10cnVlO2V2ZW50LnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7aWYob3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdClvcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7b3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1mYWxzZTt9O2V2ZW50LnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2lmKG9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKW9yaWdpbmFsRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7b3JpZ2luYWxFdmVudC5jYW5jZWxCdWJibGU9dHJ1ZTt9O2V2ZW50LnRpbWVTdGFtcD1ldmVudC50aW1lU3RhbXB8fG5vdygpO2lmKCFldmVudC50YXJnZXQpZXZlbnQudGFyZ2V0PWV2ZW50LnNyY0VsZW1lbnR8fGRvY3VtZW50O2lmKGV2ZW50LnRhcmdldC5ub2RlVHlwZT09MylldmVudC50YXJnZXQ9ZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7aWYoIWV2ZW50LnJlbGF0ZWRUYXJnZXQmJmV2ZW50LmZyb21FbGVtZW50KWV2ZW50LnJlbGF0ZWRUYXJnZXQ9ZXZlbnQuZnJvbUVsZW1lbnQ9PWV2ZW50LnRhcmdldD9ldmVudC50b0VsZW1lbnQ6ZXZlbnQuZnJvbUVsZW1lbnQ7aWYoZXZlbnQucGFnZVg9PW51bGwmJmV2ZW50LmNsaWVudFghPW51bGwpe3ZhciBkb2M9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGJvZHk9ZG9jdW1lbnQuYm9keTtldmVudC5wYWdlWD1ldmVudC5jbGllbnRYKyhkb2MmJmRvYy5zY3JvbGxMZWZ0fHxib2R5JiZib2R5LnNjcm9sbExlZnR8fDApLShkb2MuY2xpZW50TGVmdHx8MCk7ZXZlbnQucGFnZVk9ZXZlbnQuY2xpZW50WSsoZG9jJiZkb2Muc2Nyb2xsVG9wfHxib2R5JiZib2R5LnNjcm9sbFRvcHx8MCktKGRvYy5jbGllbnRUb3B8fDApO31pZighZXZlbnQud2hpY2gmJigoZXZlbnQuY2hhckNvZGV8fGV2ZW50LmNoYXJDb2RlPT09MCk/ZXZlbnQuY2hhckNvZGU6ZXZlbnQua2V5Q29kZSkpZXZlbnQud2hpY2g9ZXZlbnQuY2hhckNvZGV8fGV2ZW50LmtleUNvZGU7aWYoIWV2ZW50Lm1ldGFLZXkmJmV2ZW50LmN0cmxLZXkpZXZlbnQubWV0YUtleT1ldmVudC5jdHJsS2V5O2lmKCFldmVudC53aGljaCYmZXZlbnQuYnV0dG9uKWV2ZW50LndoaWNoPShldmVudC5idXR0b24mMT8xOihldmVudC5idXR0b24mMj8zOihldmVudC5idXR0b24mND8yOjApKSk7cmV0dXJuIGV2ZW50O30scHJveHk6ZnVuY3Rpb24oZm4scHJveHkpe3Byb3h5Lmd1aWQ9Zm4uZ3VpZD1mbi5ndWlkfHxwcm94eS5ndWlkfHx0aGlzLmd1aWQrKztyZXR1cm4gcHJveHk7fSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6ZnVuY3Rpb24oKXtiaW5kUmVhZHkoKTtyZXR1cm47fSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybjt9fSxtb3VzZWVudGVyOntzZXR1cDpmdW5jdGlvbigpe2lmKGpRdWVyeS5icm93c2VyLm1zaWUpcmV0dXJuIGZhbHNlO2pRdWVyeSh0aGlzKS5iaW5kKCJtb3VzZW92ZXIiLGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlZW50ZXIuaGFuZGxlcik7cmV0dXJuIHRydWU7fSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGpRdWVyeS5icm93c2VyLm1zaWUpcmV0dXJuIGZhbHNlO2pRdWVyeSh0aGlzKS51bmJpbmQoIm1vdXNlb3ZlciIsalF1ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2VlbnRlci5oYW5kbGVyKTtyZXR1cm4gdHJ1ZTt9LGhhbmRsZXI6ZnVuY3Rpb24oZXZlbnQpe2lmKHdpdGhpbkVsZW1lbnQoZXZlbnQsdGhpcykpcmV0dXJuIHRydWU7ZXZlbnQudHlwZT0ibW91c2VlbnRlciI7cmV0dXJuIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO319LG1vdXNlbGVhdmU6e3NldHVwOmZ1bmN0aW9uKCl7aWYoalF1ZXJ5LmJyb3dzZXIubXNpZSlyZXR1cm4gZmFsc2U7alF1ZXJ5KHRoaXMpLmJpbmQoIm1vdXNlb3V0IixqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3VzZWxlYXZlLmhhbmRsZXIpO3JldHVybiB0cnVlO30sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihqUXVlcnkuYnJvd3Nlci5tc2llKXJldHVybiBmYWxzZTtqUXVlcnkodGhpcykudW5iaW5kKCJtb3VzZW91dCIsalF1ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2VsZWF2ZS5oYW5kbGVyKTtyZXR1cm4gdHJ1ZTt9LGhhbmRsZXI6ZnVuY3Rpb24oZXZlbnQpe2lmKHdpdGhpbkVsZW1lbnQoZXZlbnQsdGhpcykpcmV0dXJuIHRydWU7ZXZlbnQudHlwZT0ibW91c2VsZWF2ZSI7cmV0dXJuIGpRdWVyeS5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO319fX07alF1ZXJ5LmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbih0eXBlLGRhdGEsZm4pe3JldHVybiB0eXBlPT0idW5sb2FkIj90aGlzLm9uZSh0eXBlLGRhdGEsZm4pOnRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5hZGQodGhpcyx0eXBlLGZufHxkYXRhLGZuJiZkYXRhKTt9KTt9LG9uZTpmdW5jdGlvbih0eXBlLGRhdGEsZm4pe3ZhciBvbmU9alF1ZXJ5LmV2ZW50LnByb3h5KGZufHxkYXRhLGZ1bmN0aW9uKGV2ZW50KXtqUXVlcnkodGhpcykudW5iaW5kKGV2ZW50LG9uZSk7cmV0dXJuKGZufHxkYXRhKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5hZGQodGhpcyx0eXBlLG9uZSxmbiYmZGF0YSk7fSk7fSx1bmJpbmQ6ZnVuY3Rpb24odHlwZSxmbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5yZW1vdmUodGhpcyx0eXBlLGZuKTt9KTt9LHRyaWdnZXI6ZnVuY3Rpb24odHlwZSxkYXRhLGZuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5LmV2ZW50LnRyaWdnZXIodHlwZSxkYXRhLHRoaXMsdHJ1ZSxmbik7fSk7fSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbih0eXBlLGRhdGEsZm4pe3JldHVybiB0aGlzWzBdJiZqUXVlcnkuZXZlbnQudHJpZ2dlcih0eXBlLGRhdGEsdGhpc1swXSxmYWxzZSxmbik7fSx0b2dnbGU6ZnVuY3Rpb24oZm4pe3ZhciBhcmdzPWFyZ3VtZW50cyxpPTE7d2hpbGUoaTxhcmdzLmxlbmd0aClqUXVlcnkuZXZlbnQucHJveHkoZm4sYXJnc1tpKytdKTtyZXR1cm4gdGhpcy5jbGljayhqUXVlcnkuZXZlbnQucHJveHkoZm4sZnVuY3Rpb24oZXZlbnQpe3RoaXMubGFzdFRvZ2dsZT0odGhpcy5sYXN0VG9nZ2xlfHwwKSVpO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGFyZ3NbdGhpcy5sYXN0VG9nZ2xlKytdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ZmFsc2U7fSkpO30saG92ZXI6ZnVuY3Rpb24oZm5PdmVyLGZuT3V0KXtyZXR1cm4gdGhpcy5iaW5kKCdtb3VzZWVudGVyJyxmbk92ZXIpLmJpbmQoJ21vdXNlbGVhdmUnLGZuT3V0KTt9LHJlYWR5OmZ1bmN0aW9uKGZuKXtiaW5kUmVhZHkoKTtpZihqUXVlcnkuaXNSZWFkeSlmbi5jYWxsKGRvY3VtZW50LGpRdWVyeSk7ZWxzZQpqUXVlcnkucmVhZHlMaXN0LnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gZm4uY2FsbCh0aGlzLGpRdWVyeSk7fSk7cmV0dXJuIHRoaXM7fX0pO2pRdWVyeS5leHRlbmQoe2lzUmVhZHk6ZmFsc2UscmVhZHlMaXN0OltdLHJlYWR5OmZ1bmN0aW9uKCl7aWYoIWpRdWVyeS5pc1JlYWR5KXtqUXVlcnkuaXNSZWFkeT10cnVlO2lmKGpRdWVyeS5yZWFkeUxpc3Qpe2pRdWVyeS5lYWNoKGpRdWVyeS5yZWFkeUxpc3QsZnVuY3Rpb24oKXt0aGlzLmNhbGwoZG9jdW1lbnQpO30pO2pRdWVyeS5yZWFkeUxpc3Q9bnVsbDt9alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VySGFuZGxlcigicmVhZHkiKTt9fX0pO3ZhciByZWFkeUJvdW5kPWZhbHNlO2Z1bmN0aW9uIGJpbmRSZWFkeSgpe2lmKHJlYWR5Qm91bmQpcmV0dXJuO3JlYWR5Qm91bmQ9dHJ1ZTtpZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiYhalF1ZXJ5LmJyb3dzZXIub3BlcmEpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsalF1ZXJ5LnJlYWR5LGZhbHNlKTtpZihqUXVlcnkuYnJvd3Nlci5tc2llJiZ3aW5kb3c9PXRvcCkoZnVuY3Rpb24oKXtpZihqUXVlcnkuaXNSZWFkeSlyZXR1cm47dHJ5e2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpO31jYXRjaChlcnJvcil7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybjt9alF1ZXJ5LnJlYWR5KCk7fSkoKTtpZihqUXVlcnkuYnJvd3Nlci5vcGVyYSlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixmdW5jdGlvbigpe2lmKGpRdWVyeS5pc1JlYWR5KXJldHVybjtmb3IodmFyIGk9MDtpPGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDtpKyspaWYoZG9jdW1lbnQuc3R5bGVTaGVldHNbaV0uZGlzYWJsZWQpe3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTtyZXR1cm47fWpRdWVyeS5yZWFkeSgpO30sZmFsc2UpO2lmKGpRdWVyeS5icm93c2VyLnNhZmFyaSl7dmFyIG51bVN0eWxlczsoZnVuY3Rpb24oKXtpZihqUXVlcnkuaXNSZWFkeSlyZXR1cm47aWYoZG9jdW1lbnQucmVhZHlTdGF0ZSE9ImxvYWRlZCImJmRvY3VtZW50LnJlYWR5U3RhdGUhPSJjb21wbGV0ZSIpe3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTtyZXR1cm47fWlmKG51bVN0eWxlcz09PXVuZGVmaW5lZCludW1TdHlsZXM9alF1ZXJ5KCJzdHlsZSwgbGlua1tyZWw9c3R5bGVzaGVldF0iKS5sZW5ndGg7aWYoZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoIT1udW1TdHlsZXMpe3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTtyZXR1cm47fWpRdWVyeS5yZWFkeSgpO30pKCk7fWpRdWVyeS5ldmVudC5hZGQod2luZG93LCJsb2FkIixqUXVlcnkucmVhZHkpO31qUXVlcnkuZWFjaCgoImJsdXIsZm9jdXMsbG9hZCxyZXNpemUsc2Nyb2xsLHVubG9hZCxjbGljayxkYmxjbGljaywiKyJtb3VzZWRvd24sbW91c2V1cCxtb3VzZW1vdmUsbW91c2VvdmVyLG1vdXNlb3V0LGNoYW5nZSxzZWxlY3QsIisic3VibWl0LGtleWRvd24sa2V5cHJlc3Msa2V5dXAsZXJyb3IiKS5zcGxpdCgiLCIpLGZ1bmN0aW9uKGksbmFtZSl7alF1ZXJ5LmZuW25hbWVdPWZ1bmN0aW9uKGZuKXtyZXR1cm4gZm4/dGhpcy5iaW5kKG5hbWUsZm4pOnRoaXMudHJpZ2dlcihuYW1lKTt9O30pO3ZhciB3aXRoaW5FbGVtZW50PWZ1bmN0aW9uKGV2ZW50LGVsZW0pe3ZhciBwYXJlbnQ9ZXZlbnQucmVsYXRlZFRhcmdldDt3aGlsZShwYXJlbnQmJnBhcmVudCE9ZWxlbSl0cnl7cGFyZW50PXBhcmVudC5wYXJlbnROb2RlO31jYXRjaChlcnJvcil7cGFyZW50PWVsZW07fXJldHVybiBwYXJlbnQ9PWVsZW07fTtqUXVlcnkod2luZG93KS5iaW5kKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7alF1ZXJ5KCIqIikuYWRkKGRvY3VtZW50KS51bmJpbmQoKTt9KTtqUXVlcnkuZm4uZXh0ZW5kKHtfbG9hZDpqUXVlcnkuZm4ubG9hZCxsb2FkOmZ1bmN0aW9uKHVybCxwYXJhbXMsY2FsbGJhY2spe2lmKHR5cGVvZiB1cmwhPSdzdHJpbmcnKXJldHVybiB0aGlzLl9sb2FkKHVybCk7dmFyIG9mZj11cmwuaW5kZXhPZigiICIpO2lmKG9mZj49MCl7dmFyIHNlbGVjdG9yPXVybC5zbGljZShvZmYsdXJsLmxlbmd0aCk7dXJsPXVybC5zbGljZSgwLG9mZik7fWNhbGxiYWNrPWNhbGxiYWNrfHxmdW5jdGlvbigpe307dmFyIHR5cGU9IkdFVCI7aWYocGFyYW1zKWlmKGpRdWVyeS5pc0Z1bmN0aW9uKHBhcmFtcykpe2NhbGxiYWNrPXBhcmFtcztwYXJhbXM9bnVsbDt9ZWxzZXtwYXJhbXM9alF1ZXJ5LnBhcmFtKHBhcmFtcyk7dHlwZT0iUE9TVCI7fXZhciBzZWxmPXRoaXM7alF1ZXJ5LmFqYXgoe3VybDp1cmwsdHlwZTp0eXBlLGRhdGFUeXBlOiJodG1sIixkYXRhOnBhcmFtcyxjb21wbGV0ZTpmdW5jdGlvbihyZXMsc3RhdHVzKXtpZihzdGF0dXM9PSJzdWNjZXNzInx8c3RhdHVzPT0ibm90bW9kaWZpZWQiKXNlbGYuaHRtbChzZWxlY3Rvcj9qUXVlcnkoIjxkaXYvPiIpLmFwcGVuZChyZXMucmVzcG9uc2VUZXh0LnJlcGxhY2UoLzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9nLCIiKSkuZmluZChzZWxlY3Rvcik6cmVzLnJlc3BvbnNlVGV4dCk7c2VsZi5lYWNoKGNhbGxiYWNrLFtyZXMucmVzcG9uc2VUZXh0LHN0YXR1cyxyZXNdKTt9fSk7cmV0dXJuIHRoaXM7fSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4galF1ZXJ5LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSk7fSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBqUXVlcnkubm9kZU5hbWUodGhpcywiZm9ybSIpP2pRdWVyeS5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpczt9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8L3NlbGVjdHx0ZXh0YXJlYS9pLnRlc3QodGhpcy5ub2RlTmFtZSl8fC90ZXh0fGhpZGRlbnxwYXNzd29yZC9pLnRlc3QodGhpcy50eXBlKSk7fSkubWFwKGZ1bmN0aW9uKGksZWxlbSl7dmFyIHZhbD1qUXVlcnkodGhpcykudmFsKCk7cmV0dXJuIHZhbD09bnVsbD9udWxsOnZhbC5jb25zdHJ1Y3Rvcj09QXJyYXk/alF1ZXJ5Lm1hcCh2YWwsZnVuY3Rpb24odmFsLGkpe3JldHVybntuYW1lOmVsZW0ubmFtZSx2YWx1ZTp2YWx9O30pOntuYW1lOmVsZW0ubmFtZSx2YWx1ZTp2YWx9O30pLmdldCgpO319KTtqUXVlcnkuZWFjaCgiYWpheFN0YXJ0LGFqYXhTdG9wLGFqYXhDb21wbGV0ZSxhamF4RXJyb3IsYWpheFN1Y2Nlc3MsYWpheFNlbmQiLnNwbGl0KCIsIiksZnVuY3Rpb24oaSxvKXtqUXVlcnkuZm5bb109ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuYmluZChvLGYpO307fSk7dmFyIGpzYz1ub3coKTtqUXVlcnkuZXh0ZW5kKHtnZXQ6ZnVuY3Rpb24odXJsLGRhdGEsY2FsbGJhY2ssdHlwZSl7aWYoalF1ZXJ5LmlzRnVuY3Rpb24oZGF0YSkpe2NhbGxiYWNrPWRhdGE7ZGF0YT1udWxsO31yZXR1cm4galF1ZXJ5LmFqYXgoe3R5cGU6IkdFVCIsdXJsOnVybCxkYXRhOmRhdGEsc3VjY2VzczpjYWxsYmFjayxkYXRhVHlwZTp0eXBlfSk7fSxnZXRTY3JpcHQ6ZnVuY3Rpb24odXJsLGNhbGxiYWNrKXtyZXR1cm4galF1ZXJ5LmdldCh1cmwsbnVsbCxjYWxsYmFjaywic2NyaXB0Iik7fSxnZXRKU09OOmZ1bmN0aW9uKHVybCxkYXRhLGNhbGxiYWNrKXtyZXR1cm4galF1ZXJ5LmdldCh1cmwsZGF0YSxjYWxsYmFjaywianNvbiIpO30scG9zdDpmdW5jdGlvbih1cmwsZGF0YSxjYWxsYmFjayx0eXBlKXtpZihqUXVlcnkuaXNGdW5jdGlvbihkYXRhKSl7Y2FsbGJhY2s9ZGF0YTtkYXRhPXt9O31yZXR1cm4galF1ZXJ5LmFqYXgoe3R5cGU6IlBPU1QiLHVybDp1cmwsZGF0YTpkYXRhLHN1Y2Nlc3M6Y2FsbGJhY2ssZGF0YVR5cGU6dHlwZX0pO30sYWpheFNldHVwOmZ1bmN0aW9uKHNldHRpbmdzKXtqUXVlcnkuZXh0ZW5kKGpRdWVyeS5hamF4U2V0dGluZ3Msc2V0dGluZ3MpO30sYWpheFNldHRpbmdzOnt1cmw6bG9jYXRpb24uaHJlZixnbG9iYWw6dHJ1ZSx0eXBlOiJHRVQiLHRpbWVvdXQ6MCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTp0cnVlLGFzeW5jOnRydWUsZGF0YTpudWxsLHVzZXJuYW1lOm51bGwscGFzc3dvcmQ6bnVsbCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsc2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsdGV4dDoidGV4dC9wbGFpbiIsX2RlZmF1bHQ6IiovKiJ9fSxsYXN0TW9kaWZpZWQ6e30sYWpheDpmdW5jdGlvbihzKXtzPWpRdWVyeS5leHRlbmQodHJ1ZSxzLGpRdWVyeS5leHRlbmQodHJ1ZSx7fSxqUXVlcnkuYWpheFNldHRpbmdzLHMpKTt2YXIganNvbnAsanNyZT0vPVw/KCZ8JCkvZyxzdGF0dXMsZGF0YSx0eXBlPXMudHlwZS50b1VwcGVyQ2FzZSgpO2lmKHMuZGF0YSYmcy5wcm9jZXNzRGF0YSYmdHlwZW9mIHMuZGF0YSE9InN0cmluZyIpcy5kYXRhPWpRdWVyeS5wYXJhbShzLmRhdGEpO2lmKHMuZGF0YVR5cGU9PSJqc29ucCIpe2lmKHR5cGU9PSJHRVQiKXtpZighcy51cmwubWF0Y2goanNyZSkpcy51cmwrPShzLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsocy5qc29ucHx8ImNhbGxiYWNrIikrIj0/Ijt9ZWxzZSBpZighcy5kYXRhfHwhcy5kYXRhLm1hdGNoKGpzcmUpKXMuZGF0YT0ocy5kYXRhP3MuZGF0YSsiJiI6IiIpKyhzLmpzb25wfHwiY2FsbGJhY2siKSsiPT8iO3MuZGF0YVR5cGU9Impzb24iO31pZihzLmRhdGFUeXBlPT0ianNvbiImJihzLmRhdGEmJnMuZGF0YS5tYXRjaChqc3JlKXx8cy51cmwubWF0Y2goanNyZSkpKXtqc29ucD0ianNvbnAiK2pzYysrO2lmKHMuZGF0YSlzLmRhdGE9KHMuZGF0YSsiIikucmVwbGFjZShqc3JlLCI9Iitqc29ucCsiJDEiKTtzLnVybD1zLnVybC5yZXBsYWNlKGpzcmUsIj0iK2pzb25wKyIkMSIpO3MuZGF0YVR5cGU9InNjcmlwdCI7d2luZG93W2pzb25wXT1mdW5jdGlvbih0bXApe2RhdGE9dG1wO3N1Y2Nlc3MoKTtjb21wbGV0ZSgpO3dpbmRvd1tqc29ucF09dW5kZWZpbmVkO3RyeXtkZWxldGUgd2luZG93W2pzb25wXTt9Y2F0Y2goZSl7fWlmKGhlYWQpaGVhZC5yZW1vdmVDaGlsZChzY3JpcHQpO307fWlmKHMuZGF0YVR5cGU9PSJzY3JpcHQiJiZzLmNhY2hlPT1udWxsKXMuY2FjaGU9ZmFsc2U7aWYocy5jYWNoZT09PWZhbHNlJiZ0eXBlPT0iR0VUIil7dmFyIHRzPW5vdygpO3ZhciByZXQ9cy51cmwucmVwbGFjZSgvKFw/fCYpXz0uKj8oJnwkKS8sIiQxXz0iK3RzKyIkMiIpO3MudXJsPXJldCsoKHJldD09cy51cmwpPyhzLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKSsiXz0iK3RzOiIiKTt9aWYocy5kYXRhJiZ0eXBlPT0iR0VUIil7cy51cmwrPShzLnVybC5tYXRjaCgvXD8vKT8iJiI6Ij8iKStzLmRhdGE7cy5kYXRhPW51bGw7fWlmKHMuZ2xvYmFsJiYhalF1ZXJ5LmFjdGl2ZSsrKWpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTt2YXIgcmVtb3RlPS9eKD86XHcrOik/XC9cLyhbXlwvPyNdKykvO2lmKHMuZGF0YVR5cGU9PSJzY3JpcHQiJiZ0eXBlPT0iR0VUIiYmcmVtb3RlLnRlc3Qocy51cmwpJiZyZW1vdGUuZXhlYyhzLnVybClbMV0hPWxvY2F0aW9uLmhvc3Qpe3ZhciBoZWFkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07dmFyIHNjcmlwdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzY3JpcHQuc3JjPXMudXJsO2lmKHMuc2NyaXB0Q2hhcnNldClzY3JpcHQuY2hhcnNldD1zLnNjcmlwdENoYXJzZXQ7aWYoIWpzb25wKXt2YXIgZG9uZT1mYWxzZTtzY3JpcHQub25sb2FkPXNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZighZG9uZSYmKCF0aGlzLnJlYWR5U3RhdGV8fHRoaXMucmVhZHlTdGF0ZT09ImxvYWRlZCJ8fHRoaXMucmVhZHlTdGF0ZT09ImNvbXBsZXRlIikpe2RvbmU9dHJ1ZTtzdWNjZXNzKCk7Y29tcGxldGUoKTtoZWFkLnJlbW92ZUNoaWxkKHNjcmlwdCk7fX07fWhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtyZXR1cm4gdW5kZWZpbmVkO312YXIgcmVxdWVzdERvbmU9ZmFsc2U7dmFyIHhocj13aW5kb3cuQWN0aXZlWE9iamVjdD9uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTpuZXcgWE1MSHR0cFJlcXVlc3QoKTtpZihzLnVzZXJuYW1lKXhoci5vcGVuKHR5cGUscy51cmwscy5hc3luYyxzLnVzZXJuYW1lLHMucGFzc3dvcmQpO2Vsc2UKeGhyLm9wZW4odHlwZSxzLnVybCxzLmFzeW5jKTt0cnl7aWYocy5kYXRhKXhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHMuY29udGVudFR5cGUpO2lmKHMuaWZNb2RpZmllZCl4aHIuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGpRdWVyeS5sYXN0TW9kaWZpZWRbcy51cmxdfHwiVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQiKTt4aHIuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7eGhyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIscy5kYXRhVHlwZSYmcy5hY2NlcHRzW3MuZGF0YVR5cGVdP3MuYWNjZXB0c1tzLmRhdGFUeXBlXSsiLCAqLyoiOnMuYWNjZXB0cy5fZGVmYXVsdCk7fWNhdGNoKGUpe31pZihzLmJlZm9yZVNlbmQmJnMuYmVmb3JlU2VuZCh4aHIscyk9PT1mYWxzZSl7cy5nbG9iYWwmJmpRdWVyeS5hY3RpdmUtLTt4aHIuYWJvcnQoKTtyZXR1cm4gZmFsc2U7fWlmKHMuZ2xvYmFsKWpRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsW3hocixzXSk7dmFyIG9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihpc1RpbWVvdXQpe2lmKCFyZXF1ZXN0RG9uZSYmeGhyJiYoeGhyLnJlYWR5U3RhdGU9PTR8fGlzVGltZW91dD09InRpbWVvdXQiKSl7cmVxdWVzdERvbmU9dHJ1ZTtpZihpdmFsKXtjbGVhckludGVydmFsKGl2YWwpO2l2YWw9bnVsbDt9c3RhdHVzPWlzVGltZW91dD09InRpbWVvdXQiJiYidGltZW91dCJ8fCFqUXVlcnkuaHR0cFN1Y2Nlc3MoeGhyKSYmImVycm9yInx8cy5pZk1vZGlmaWVkJiZqUXVlcnkuaHR0cE5vdE1vZGlmaWVkKHhocixzLnVybCkmJiJub3Rtb2RpZmllZCJ8fCJzdWNjZXNzIjtpZihzdGF0dXM9PSJzdWNjZXNzIil7dHJ5e2RhdGE9alF1ZXJ5Lmh0dHBEYXRhKHhocixzLmRhdGFUeXBlLHMuZGF0YUZpbHRlcik7fWNhdGNoKGUpe3N0YXR1cz0icGFyc2VyZXJyb3IiO319aWYoc3RhdHVzPT0ic3VjY2VzcyIpe3ZhciBtb2RSZXM7dHJ5e21vZFJlcz14aHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTt9Y2F0Y2goZSl7fWlmKHMuaWZNb2RpZmllZCYmbW9kUmVzKWpRdWVyeS5sYXN0TW9kaWZpZWRbcy51cmxdPW1vZFJlcztpZighanNvbnApc3VjY2VzcygpO31lbHNlCmpRdWVyeS5oYW5kbGVFcnJvcihzLHhocixzdGF0dXMpO2NvbXBsZXRlKCk7aWYocy5hc3luYyl4aHI9bnVsbDt9fTtpZihzLmFzeW5jKXt2YXIgaXZhbD1zZXRJbnRlcnZhbChvbnJlYWR5c3RhdGVjaGFuZ2UsMTMpO2lmKHMudGltZW91dD4wKXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZih4aHIpe3hoci5hYm9ydCgpO2lmKCFyZXF1ZXN0RG9uZSlvbnJlYWR5c3RhdGVjaGFuZ2UoInRpbWVvdXQiKTt9fSxzLnRpbWVvdXQpO310cnl7eGhyLnNlbmQocy5kYXRhKTt9Y2F0Y2goZSl7alF1ZXJ5LmhhbmRsZUVycm9yKHMseGhyLG51bGwsZSk7fWlmKCFzLmFzeW5jKW9ucmVhZHlzdGF0ZWNoYW5nZSgpO2Z1bmN0aW9uIHN1Y2Nlc3MoKXtpZihzLnN1Y2Nlc3Mpcy5zdWNjZXNzKGRhdGEsc3RhdHVzKTtpZihzLmdsb2JhbClqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLFt4aHIsc10pO31mdW5jdGlvbiBjb21wbGV0ZSgpe2lmKHMuY29tcGxldGUpcy5jb21wbGV0ZSh4aHIsc3RhdHVzKTtpZihzLmdsb2JhbClqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbeGhyLHNdKTtpZihzLmdsb2JhbCYmIS0talF1ZXJ5LmFjdGl2ZSlqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKTt9cmV0dXJuIHhocjt9LGhhbmRsZUVycm9yOmZ1bmN0aW9uKHMseGhyLHN0YXR1cyxlKXtpZihzLmVycm9yKXMuZXJyb3IoeGhyLHN0YXR1cyxlKTtpZihzLmdsb2JhbClqUXVlcnkuZXZlbnQudHJpZ2dlcigiYWpheEVycm9yIixbeGhyLHMsZV0pO30sYWN0aXZlOjAsaHR0cFN1Y2Nlc3M6ZnVuY3Rpb24oeGhyKXt0cnl7cmV0dXJuIXhoci5zdGF0dXMmJmxvY2F0aW9uLnByb3RvY29sPT0iZmlsZToifHwoeGhyLnN0YXR1cz49MjAwJiZ4aHIuc3RhdHVzPDMwMCl8fHhoci5zdGF0dXM9PTMwNHx8eGhyLnN0YXR1cz09MTIyM3x8alF1ZXJ5LmJyb3dzZXIuc2FmYXJpJiZ4aHIuc3RhdHVzPT11bmRlZmluZWQ7fWNhdGNoKGUpe31yZXR1cm4gZmFsc2U7fSxodHRwTm90TW9kaWZpZWQ6ZnVuY3Rpb24oeGhyLHVybCl7dHJ5e3ZhciB4aHJSZXM9eGhyLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7cmV0dXJuIHhoci5zdGF0dXM9PTMwNHx8eGhyUmVzPT1qUXVlcnkubGFzdE1vZGlmaWVkW3VybF18fGpRdWVyeS5icm93c2VyLnNhZmFyaSYmeGhyLnN0YXR1cz09dW5kZWZpbmVkO31jYXRjaChlKXt9cmV0dXJuIGZhbHNlO30saHR0cERhdGE6ZnVuY3Rpb24oeGhyLHR5cGUsZmlsdGVyKXt2YXIgY3Q9eGhyLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSx4bWw9dHlwZT09InhtbCJ8fCF0eXBlJiZjdCYmY3QuaW5kZXhPZigieG1sIik+PTAsZGF0YT14bWw/eGhyLnJlc3BvbnNlWE1MOnhoci5yZXNwb25zZVRleHQ7aWYoeG1sJiZkYXRhLmRvY3VtZW50RWxlbWVudC50YWdOYW1lPT0icGFyc2VyZXJyb3IiKXRocm93InBhcnNlcmVycm9yIjtpZihmaWx0ZXIpZGF0YT1maWx0ZXIoZGF0YSx0eXBlKTtpZih0eXBlPT0ic2NyaXB0IilqUXVlcnkuZ2xvYmFsRXZhbChkYXRhKTtpZih0eXBlPT0ianNvbiIpZGF0YT1ldmFsKCIoIitkYXRhKyIpIik7cmV0dXJuIGRhdGE7fSxwYXJhbTpmdW5jdGlvbihhKXt2YXIgcz1bXTtpZihhLmNvbnN0cnVjdG9yPT1BcnJheXx8YS5qcXVlcnkpalF1ZXJ5LmVhY2goYSxmdW5jdGlvbigpe3MucHVzaChlbmNvZGVVUklDb21wb25lbnQodGhpcy5uYW1lKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudmFsdWUpKTt9KTtlbHNlCmZvcih2YXIgaiBpbiBhKWlmKGFbal0mJmFbal0uY29uc3RydWN0b3I9PUFycmF5KWpRdWVyeS5lYWNoKGFbal0sZnVuY3Rpb24oKXtzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGopKyI9IitlbmNvZGVVUklDb21wb25lbnQodGhpcykpO30pO2Vsc2UKcy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChqKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGpRdWVyeS5pc0Z1bmN0aW9uKGFbal0pP2Fbal0oKTphW2pdKSk7cmV0dXJuIHMuam9pbigiJiIpLnJlcGxhY2UoLyUyMC9nLCIrIik7fX0pO2pRdWVyeS5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spe3JldHVybiBzcGVlZD90aGlzLmFuaW1hdGUoe2hlaWdodDoic2hvdyIsd2lkdGg6InNob3ciLG9wYWNpdHk6InNob3cifSxzcGVlZCxjYWxsYmFjayk6dGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PXRoaXMub2xkYmxvY2t8fCIiO2lmKGpRdWVyeS5jc3ModGhpcywiZGlzcGxheSIpPT0ibm9uZSIpe3ZhciBlbGVtPWpRdWVyeSgiPCIrdGhpcy50YWdOYW1lKyIgLz4iKS5hcHBlbmRUbygiYm9keSIpO3RoaXMuc3R5bGUuZGlzcGxheT1lbGVtLmNzcygiZGlzcGxheSIpO2lmKHRoaXMuc3R5bGUuZGlzcGxheT09Im5vbmUiKXRoaXMuc3R5bGUuZGlzcGxheT0iYmxvY2siO2VsZW0ucmVtb3ZlKCk7fX0pLmVuZCgpO30saGlkZTpmdW5jdGlvbihzcGVlZCxjYWxsYmFjayl7cmV0dXJuIHNwZWVkP3RoaXMuYW5pbWF0ZSh7aGVpZ2h0OiJoaWRlIix3aWR0aDoiaGlkZSIsb3BhY2l0eToiaGlkZSJ9LHNwZWVkLGNhbGxiYWNrKTp0aGlzLmZpbHRlcigiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5vbGRibG9jaz10aGlzLm9sZGJsb2NrfHxqUXVlcnkuY3NzKHRoaXMsImRpc3BsYXkiKTt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiO30pLmVuZCgpO30sX3RvZ2dsZTpqUXVlcnkuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihmbixmbjIpe3JldHVybiBqUXVlcnkuaXNGdW5jdGlvbihmbikmJmpRdWVyeS5pc0Z1bmN0aW9uKGZuMik/dGhpcy5fdG9nZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpmbj90aGlzLmFuaW1hdGUoe2hlaWdodDoidG9nZ2xlIix3aWR0aDoidG9nZ2xlIixvcGFjaXR5OiJ0b2dnbGUifSxmbixmbjIpOnRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeSh0aGlzKVtqUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKT8ic2hvdyI6ImhpZGUiXSgpO30pO30sc2xpZGVEb3duOmZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXtyZXR1cm4gdGhpcy5hbmltYXRlKHtoZWlnaHQ6InNob3cifSxzcGVlZCxjYWxsYmFjayk7fSxzbGlkZVVwOmZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXtyZXR1cm4gdGhpcy5hbmltYXRlKHtoZWlnaHQ6ImhpZGUifSxzcGVlZCxjYWxsYmFjayk7fSxzbGlkZVRvZ2dsZTpmdW5jdGlvbihzcGVlZCxjYWxsYmFjayl7cmV0dXJuIHRoaXMuYW5pbWF0ZSh7aGVpZ2h0OiJ0b2dnbGUifSxzcGVlZCxjYWxsYmFjayk7fSxmYWRlSW46ZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spe3JldHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6InNob3cifSxzcGVlZCxjYWxsYmFjayk7fSxmYWRlT3V0OmZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXtyZXR1cm4gdGhpcy5hbmltYXRlKHtvcGFjaXR5OiJoaWRlIn0sc3BlZWQsY2FsbGJhY2spO30sZmFkZVRvOmZ1bmN0aW9uKHNwZWVkLHRvLGNhbGxiYWNrKXtyZXR1cm4gdGhpcy5hbmltYXRlKHtvcGFjaXR5OnRvfSxzcGVlZCxjYWxsYmFjayk7fSxhbmltYXRlOmZ1bmN0aW9uKHByb3Asc3BlZWQsZWFzaW5nLGNhbGxiYWNrKXt2YXIgb3B0YWxsPWpRdWVyeS5zcGVlZChzcGVlZCxlYXNpbmcsY2FsbGJhY2spO3JldHVybiB0aGlzW29wdGFsbC5xdWV1ZT09PWZhbHNlPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe2lmKHRoaXMubm9kZVR5cGUhPTEpcmV0dXJuIGZhbHNlO3ZhciBvcHQ9alF1ZXJ5LmV4dGVuZCh7fSxvcHRhbGwpLHAsaGlkZGVuPWpRdWVyeSh0aGlzKS5pcygiOmhpZGRlbiIpLHNlbGY9dGhpcztmb3IocCBpbiBwcm9wKXtpZihwcm9wW3BdPT0iaGlkZSImJmhpZGRlbnx8cHJvcFtwXT09InNob3ciJiYhaGlkZGVuKXJldHVybiBvcHQuY29tcGxldGUuY2FsbCh0aGlzKTtpZihwPT0iaGVpZ2h0Inx8cD09IndpZHRoIil7b3B0LmRpc3BsYXk9alF1ZXJ5LmNzcyh0aGlzLCJkaXNwbGF5Iik7b3B0Lm92ZXJmbG93PXRoaXMuc3R5bGUub3ZlcmZsb3c7fX1pZihvcHQub3ZlcmZsb3chPW51bGwpdGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIjtvcHQuY3VyQW5pbT1qUXVlcnkuZXh0ZW5kKHt9LHByb3ApO2pRdWVyeS5lYWNoKHByb3AsZnVuY3Rpb24obmFtZSx2YWwpe3ZhciBlPW5ldyBqUXVlcnkuZngoc2VsZixvcHQsbmFtZSk7aWYoL3RvZ2dsZXxzaG93fGhpZGUvLnRlc3QodmFsKSllW3ZhbD09InRvZ2dsZSI/aGlkZGVuPyJzaG93IjoiaGlkZSI6dmFsXShwcm9wKTtlbHNle3ZhciBwYXJ0cz12YWwudG9TdHJpbmcoKS5tYXRjaCgvXihbKy1dPSk/KFtcZCstLl0rKSguKikkLyksc3RhcnQ9ZS5jdXIodHJ1ZSl8fDA7aWYocGFydHMpe3ZhciBlbmQ9cGFyc2VGbG9hdChwYXJ0c1syXSksdW5pdD1wYXJ0c1szXXx8InB4IjtpZih1bml0IT0icHgiKXtzZWxmLnN0eWxlW25hbWVdPShlbmR8fDEpK3VuaXQ7c3RhcnQ9KChlbmR8fDEpL2UuY3VyKHRydWUpKSpzdGFydDtzZWxmLnN0eWxlW25hbWVdPXN0YXJ0K3VuaXQ7fWlmKHBhcnRzWzFdKWVuZD0oKHBhcnRzWzFdPT0iLT0iPy0xOjEpKmVuZCkrc3RhcnQ7ZS5jdXN0b20oc3RhcnQsZW5kLHVuaXQpO31lbHNlCmUuY3VzdG9tKHN0YXJ0LHZhbCwiIik7fX0pO3JldHVybiB0cnVlO30pO30scXVldWU6ZnVuY3Rpb24odHlwZSxmbil7aWYoalF1ZXJ5LmlzRnVuY3Rpb24odHlwZSl8fCh0eXBlJiZ0eXBlLmNvbnN0cnVjdG9yPT1BcnJheSkpe2ZuPXR5cGU7dHlwZT0iZngiO31pZighdHlwZXx8KHR5cGVvZiB0eXBlPT0ic3RyaW5nIiYmIWZuKSlyZXR1cm4gcXVldWUodGhpc1swXSx0eXBlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoZm4uY29uc3RydWN0b3I9PUFycmF5KXF1ZXVlKHRoaXMsdHlwZSxmbik7ZWxzZXtxdWV1ZSh0aGlzLHR5cGUpLnB1c2goZm4pO2lmKHF1ZXVlKHRoaXMsdHlwZSkubGVuZ3RoPT0xKWZuLmNhbGwodGhpcyk7fX0pO30sc3RvcDpmdW5jdGlvbihjbGVhclF1ZXVlLGdvdG9FbmQpe3ZhciB0aW1lcnM9alF1ZXJ5LnRpbWVycztpZihjbGVhclF1ZXVlKXRoaXMucXVldWUoW10pO3RoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2YXIgaT10aW1lcnMubGVuZ3RoLTE7aT49MDtpLS0paWYodGltZXJzW2ldLmVsZW09PXRoaXMpe2lmKGdvdG9FbmQpdGltZXJzW2ldKHRydWUpO3RpbWVycy5zcGxpY2UoaSwxKTt9fSk7aWYoIWdvdG9FbmQpdGhpcy5kZXF1ZXVlKCk7cmV0dXJuIHRoaXM7fX0pO3ZhciBxdWV1ZT1mdW5jdGlvbihlbGVtLHR5cGUsYXJyYXkpe2lmKGVsZW0pe3R5cGU9dHlwZXx8ImZ4Ijt2YXIgcT1qUXVlcnkuZGF0YShlbGVtLHR5cGUrInF1ZXVlIik7aWYoIXF8fGFycmF5KXE9alF1ZXJ5LmRhdGEoZWxlbSx0eXBlKyJxdWV1ZSIsalF1ZXJ5Lm1ha2VBcnJheShhcnJheSkpO31yZXR1cm4gcTt9O2pRdWVyeS5mbi5kZXF1ZXVlPWZ1bmN0aW9uKHR5cGUpe3R5cGU9dHlwZXx8ImZ4IjtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHE9cXVldWUodGhpcyx0eXBlKTtxLnNoaWZ0KCk7aWYocS5sZW5ndGgpcVswXS5jYWxsKHRoaXMpO30pO307alF1ZXJ5LmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oc3BlZWQsZWFzaW5nLGZuKXt2YXIgb3B0PXNwZWVkJiZzcGVlZC5jb25zdHJ1Y3Rvcj09T2JqZWN0P3NwZWVkOntjb21wbGV0ZTpmbnx8IWZuJiZlYXNpbmd8fGpRdWVyeS5pc0Z1bmN0aW9uKHNwZWVkKSYmc3BlZWQsZHVyYXRpb246c3BlZWQsZWFzaW5nOmZuJiZlYXNpbmd8fGVhc2luZyYmZWFzaW5nLmNvbnN0cnVjdG9yIT1GdW5jdGlvbiYmZWFzaW5nfTtvcHQuZHVyYXRpb249KG9wdC5kdXJhdGlvbiYmb3B0LmR1cmF0aW9uLmNvbnN0cnVjdG9yPT1OdW1iZXI/b3B0LmR1cmF0aW9uOmpRdWVyeS5meC5zcGVlZHNbb3B0LmR1cmF0aW9uXSl8fGpRdWVyeS5meC5zcGVlZHMuZGVmO29wdC5vbGQ9b3B0LmNvbXBsZXRlO29wdC5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKG9wdC5xdWV1ZSE9PWZhbHNlKWpRdWVyeSh0aGlzKS5kZXF1ZXVlKCk7aWYoalF1ZXJ5LmlzRnVuY3Rpb24ob3B0Lm9sZCkpb3B0Lm9sZC5jYWxsKHRoaXMpO307cmV0dXJuIG9wdDt9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKHAsbixmaXJzdE51bSxkaWZmKXtyZXR1cm4gZmlyc3ROdW0rZGlmZipwO30sc3dpbmc6ZnVuY3Rpb24ocCxuLGZpcnN0TnVtLGRpZmYpe3JldHVybigoLU1hdGguY29zKHAqTWF0aC5QSSkvMikrMC41KSpkaWZmK2ZpcnN0TnVtO319LHRpbWVyczpbXSx0aW1lcklkOm51bGwsZng6ZnVuY3Rpb24oZWxlbSxvcHRpb25zLHByb3Ape3RoaXMub3B0aW9ucz1vcHRpb25zO3RoaXMuZWxlbT1lbGVtO3RoaXMucHJvcD1wcm9wO2lmKCFvcHRpb25zLm9yaWcpb3B0aW9ucy5vcmlnPXt9O319KTtqUXVlcnkuZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuc3RlcCl0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKTsoalF1ZXJ5LmZ4LnN0ZXBbdGhpcy5wcm9wXXx8alF1ZXJ5LmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKHRoaXMucHJvcD09ImhlaWdodCJ8fHRoaXMucHJvcD09IndpZHRoIil0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT0iYmxvY2siO30sY3VyOmZ1bmN0aW9uKGZvcmNlKXtpZih0aGlzLmVsZW1bdGhpcy5wcm9wXSE9bnVsbCYmdGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciByPXBhcnNlRmxvYXQoalF1ZXJ5LmNzcyh0aGlzLmVsZW0sdGhpcy5wcm9wLGZvcmNlKSk7cmV0dXJuIHImJnI+LTEwMDAwP3I6cGFyc2VGbG9hdChqUXVlcnkuY3VyQ1NTKHRoaXMuZWxlbSx0aGlzLnByb3ApKXx8MDt9LGN1c3RvbTpmdW5jdGlvbihmcm9tLHRvLHVuaXQpe3RoaXMuc3RhcnRUaW1lPW5vdygpO3RoaXMuc3RhcnQ9ZnJvbTt0aGlzLmVuZD10bzt0aGlzLnVuaXQ9dW5pdHx8dGhpcy51bml0fHwicHgiO3RoaXMubm93PXRoaXMuc3RhcnQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0wO3RoaXMudXBkYXRlKCk7dmFyIHNlbGY9dGhpcztmdW5jdGlvbiB0KGdvdG9FbmQpe3JldHVybiBzZWxmLnN0ZXAoZ290b0VuZCk7fXQuZWxlbT10aGlzLmVsZW07alF1ZXJ5LnRpbWVycy5wdXNoKHQpO2lmKGpRdWVyeS50aW1lcklkPT1udWxsKXtqUXVlcnkudGltZXJJZD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3ZhciB0aW1lcnM9alF1ZXJ5LnRpbWVycztmb3IodmFyIGk9MDtpPHRpbWVycy5sZW5ndGg7aSsrKWlmKCF0aW1lcnNbaV0oKSl0aW1lcnMuc3BsaWNlKGktLSwxKTtpZighdGltZXJzLmxlbmd0aCl7Y2xlYXJJbnRlcnZhbChqUXVlcnkudGltZXJJZCk7alF1ZXJ5LnRpbWVySWQ9bnVsbDt9fSwxMyk7fX0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09alF1ZXJ5LmF0dHIodGhpcy5lbGVtLnN0eWxlLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLnNob3c9dHJ1ZTt0aGlzLmN1c3RvbSgwLHRoaXMuY3VyKCkpO2lmKHRoaXMucHJvcD09IndpZHRoInx8dGhpcy5wcm9wPT0iaGVpZ2h0Iil0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT0iMXB4IjtqUXVlcnkodGhpcy5lbGVtKS5zaG93KCk7fSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1qUXVlcnkuYXR0cih0aGlzLmVsZW0uc3R5bGUsdGhpcy5wcm9wKTt0aGlzLm9wdGlvbnMuaGlkZT10cnVlO3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCk7fSxzdGVwOmZ1bmN0aW9uKGdvdG9FbmQpe3ZhciB0PW5vdygpO2lmKGdvdG9FbmR8fHQ+dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZDt0aGlzLnBvcz10aGlzLnN0YXRlPTE7dGhpcy51cGRhdGUoKTt0aGlzLm9wdGlvbnMuY3VyQW5pbVt0aGlzLnByb3BdPXRydWU7dmFyIGRvbmU9dHJ1ZTtmb3IodmFyIGkgaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0paWYodGhpcy5vcHRpb25zLmN1ckFuaW1baV0hPT10cnVlKWRvbmU9ZmFsc2U7aWYoZG9uZSl7aWYodGhpcy5vcHRpb25zLmRpc3BsYXkhPW51bGwpe3RoaXMuZWxlbS5zdHlsZS5vdmVyZmxvdz10aGlzLm9wdGlvbnMub3ZlcmZsb3c7dGhpcy5lbGVtLnN0eWxlLmRpc3BsYXk9dGhpcy5vcHRpb25zLmRpc3BsYXk7aWYoalF1ZXJ5LmNzcyh0aGlzLmVsZW0sImRpc3BsYXkiKT09Im5vbmUiKXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJibG9jayI7fWlmKHRoaXMub3B0aW9ucy5oaWRlKXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5PSJub25lIjtpZih0aGlzLm9wdGlvbnMuaGlkZXx8dGhpcy5vcHRpb25zLnNob3cpZm9yKHZhciBwIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKWpRdWVyeS5hdHRyKHRoaXMuZWxlbS5zdHlsZSxwLHRoaXMub3B0aW9ucy5vcmlnW3BdKTt9aWYoZG9uZSl0aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pO3JldHVybiBmYWxzZTt9ZWxzZXt2YXIgbj10LXRoaXMuc3RhcnRUaW1lO3RoaXMuc3RhdGU9bi90aGlzLm9wdGlvbnMuZHVyYXRpb247dGhpcy5wb3M9alF1ZXJ5LmVhc2luZ1t0aGlzLm9wdGlvbnMuZWFzaW5nfHwoalF1ZXJ5LmVhc2luZy5zd2luZz8ic3dpbmciOiJsaW5lYXIiKV0odGhpcy5zdGF0ZSxuLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pO3RoaXMubm93PXRoaXMuc3RhcnQrKCh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyk7dGhpcy51cGRhdGUoKTt9cmV0dXJuIHRydWU7fX07alF1ZXJ5LmV4dGVuZChqUXVlcnkuZngse3NwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsZGVmOjQwMH0sc3RlcDp7c2Nyb2xsTGVmdDpmdW5jdGlvbihmeCl7ZnguZWxlbS5zY3JvbGxMZWZ0PWZ4Lm5vdzt9LHNjcm9sbFRvcDpmdW5jdGlvbihmeCl7ZnguZWxlbS5zY3JvbGxUb3A9Zngubm93O30sb3BhY2l0eTpmdW5jdGlvbihmeCl7alF1ZXJ5LmF0dHIoZnguZWxlbS5zdHlsZSwib3BhY2l0eSIsZngubm93KTt9LF9kZWZhdWx0OmZ1bmN0aW9uKGZ4KXtmeC5lbGVtLnN0eWxlW2Z4LnByb3BdPWZ4Lm5vdytmeC51bml0O319fSk7alF1ZXJ5LmZuLm9mZnNldD1mdW5jdGlvbigpe3ZhciBsZWZ0PTAsdG9wPTAsZWxlbT10aGlzWzBdLHJlc3VsdHM7aWYoZWxlbSl3aXRoKGpRdWVyeS5icm93c2VyKXt2YXIgcGFyZW50PWVsZW0ucGFyZW50Tm9kZSxvZmZzZXRDaGlsZD1lbGVtLG9mZnNldFBhcmVudD1lbGVtLm9mZnNldFBhcmVudCxkb2M9ZWxlbS5vd25lckRvY3VtZW50LHNhZmFyaTI9c2FmYXJpJiZwYXJzZUludCh2ZXJzaW9uKTw1MjImJiEvYWRvYmVhaXIvaS50ZXN0KHVzZXJBZ2VudCksY3NzPWpRdWVyeS5jdXJDU1MsZml4ZWQ9Y3NzKGVsZW0sInBvc2l0aW9uIik9PSJmaXhlZCI7aWYoZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBib3g9ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthZGQoYm94LmxlZnQrTWF0aC5tYXgoZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvYy5ib2R5LnNjcm9sbExlZnQpLGJveC50b3ArTWF0aC5tYXgoZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jLmJvZHkuc2Nyb2xsVG9wKSk7YWRkKC1kb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudExlZnQsLWRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50VG9wKTt9ZWxzZXthZGQoZWxlbS5vZmZzZXRMZWZ0LGVsZW0ub2Zmc2V0VG9wKTt3aGlsZShvZmZzZXRQYXJlbnQpe2FkZChvZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCxvZmZzZXRQYXJlbnQub2Zmc2V0VG9wKTtpZihtb3ppbGxhJiYhL150KGFibGV8ZHxoKSQvaS50ZXN0KG9mZnNldFBhcmVudC50YWdOYW1lKXx8c2FmYXJpJiYhc2FmYXJpMilib3JkZXIob2Zmc2V0UGFyZW50KTtpZighZml4ZWQmJmNzcyhvZmZzZXRQYXJlbnQsInBvc2l0aW9uIik9PSJmaXhlZCIpZml4ZWQ9dHJ1ZTtvZmZzZXRDaGlsZD0vXmJvZHkkL2kudGVzdChvZmZzZXRQYXJlbnQudGFnTmFtZSk/b2Zmc2V0Q2hpbGQ6b2Zmc2V0UGFyZW50O29mZnNldFBhcmVudD1vZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O313aGlsZShwYXJlbnQmJnBhcmVudC50YWdOYW1lJiYhL15ib2R5fGh0bWwkL2kudGVzdChwYXJlbnQudGFnTmFtZSkpe2lmKCEvXmlubGluZXx0YWJsZS4qJC9pLnRlc3QoY3NzKHBhcmVudCwiZGlzcGxheSIpKSlhZGQoLXBhcmVudC5zY3JvbGxMZWZ0LC1wYXJlbnQuc2Nyb2xsVG9wKTtpZihtb3ppbGxhJiZjc3MocGFyZW50LCJvdmVyZmxvdyIpIT0idmlzaWJsZSIpYm9yZGVyKHBhcmVudCk7cGFyZW50PXBhcmVudC5wYXJlbnROb2RlO31pZigoc2FmYXJpMiYmKGZpeGVkfHxjc3Mob2Zmc2V0Q2hpbGQsInBvc2l0aW9uIik9PSJhYnNvbHV0ZSIpKXx8KG1vemlsbGEmJmNzcyhvZmZzZXRDaGlsZCwicG9zaXRpb24iKSE9ImFic29sdXRlIikpYWRkKC1kb2MuYm9keS5vZmZzZXRMZWZ0LC1kb2MuYm9keS5vZmZzZXRUb3ApO2lmKGZpeGVkKWFkZChNYXRoLm1heChkb2MuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsZG9jLmJvZHkuc2Nyb2xsTGVmdCksTWF0aC5tYXgoZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jLmJvZHkuc2Nyb2xsVG9wKSk7fXJlc3VsdHM9e3RvcDp0b3AsbGVmdDpsZWZ0fTt9ZnVuY3Rpb24gYm9yZGVyKGVsZW0pe2FkZChqUXVlcnkuY3VyQ1NTKGVsZW0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSksalF1ZXJ5LmN1ckNTUyhlbGVtLCJib3JkZXJUb3BXaWR0aCIsdHJ1ZSkpO31mdW5jdGlvbiBhZGQobCx0KXtsZWZ0Kz1wYXJzZUludChsLDEwKXx8MDt0b3ArPXBhcnNlSW50KHQsMTApfHwwO31yZXR1cm4gcmVzdWx0czt9O2pRdWVyeS5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGxlZnQ9MCx0b3A9MCxyZXN1bHRzO2lmKHRoaXNbMF0pe3ZhciBvZmZzZXRQYXJlbnQ9dGhpcy5vZmZzZXRQYXJlbnQoKSxvZmZzZXQ9dGhpcy5vZmZzZXQoKSxwYXJlbnRPZmZzZXQ9L15ib2R5fGh0bWwkL2kudGVzdChvZmZzZXRQYXJlbnRbMF0udGFnTmFtZSk/e3RvcDowLGxlZnQ6MH06b2Zmc2V0UGFyZW50Lm9mZnNldCgpO29mZnNldC50b3AtPW51bSh0aGlzLCdtYXJnaW5Ub3AnKTtvZmZzZXQubGVmdC09bnVtKHRoaXMsJ21hcmdpbkxlZnQnKTtwYXJlbnRPZmZzZXQudG9wKz1udW0ob2Zmc2V0UGFyZW50LCdib3JkZXJUb3BXaWR0aCcpO3BhcmVudE9mZnNldC5sZWZ0Kz1udW0ob2Zmc2V0UGFyZW50LCdib3JkZXJMZWZ0V2lkdGgnKTtyZXN1bHRzPXt0b3A6b2Zmc2V0LnRvcC1wYXJlbnRPZmZzZXQudG9wLGxlZnQ6b2Zmc2V0LmxlZnQtcGFyZW50T2Zmc2V0LmxlZnR9O31yZXR1cm4gcmVzdWx0czt9LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3ZhciBvZmZzZXRQYXJlbnQ9dGhpc1swXS5vZmZzZXRQYXJlbnQ7d2hpbGUob2Zmc2V0UGFyZW50JiYoIS9eYm9keXxodG1sJC9pLnRlc3Qob2Zmc2V0UGFyZW50LnRhZ05hbWUpJiZqUXVlcnkuY3NzKG9mZnNldFBhcmVudCwncG9zaXRpb24nKT09J3N0YXRpYycpKW9mZnNldFBhcmVudD1vZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O3JldHVybiBqUXVlcnkob2Zmc2V0UGFyZW50KTt9fSk7alF1ZXJ5LmVhY2goWydMZWZ0JywnVG9wJ10sZnVuY3Rpb24oaSxuYW1lKXt2YXIgbWV0aG9kPSdzY3JvbGwnK25hbWU7alF1ZXJ5LmZuW21ldGhvZF09ZnVuY3Rpb24odmFsKXtpZighdGhpc1swXSlyZXR1cm47cmV0dXJuIHZhbCE9dW5kZWZpbmVkP3RoaXMuZWFjaChmdW5jdGlvbigpe3RoaXM9PXdpbmRvd3x8dGhpcz09ZG9jdW1lbnQ/d2luZG93LnNjcm9sbFRvKCFpP3ZhbDpqUXVlcnkod2luZG93KS5zY3JvbGxMZWZ0KCksaT92YWw6alF1ZXJ5KHdpbmRvdykuc2Nyb2xsVG9wKCkpOnRoaXNbbWV0aG9kXT12YWw7fSk6dGhpc1swXT09d2luZG93fHx0aGlzWzBdPT1kb2N1bWVudD9zZWxmW2k/J3BhZ2VZT2Zmc2V0JzoncGFnZVhPZmZzZXQnXXx8alF1ZXJ5LmJveE1vZGVsJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbbWV0aG9kXXx8ZG9jdW1lbnQuYm9keVttZXRob2RdOnRoaXNbMF1bbWV0aG9kXTt9O30pO2pRdWVyeS5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihpLG5hbWUpe3ZhciB0bD1pPyJMZWZ0IjoiVG9wIixicj1pPyJSaWdodCI6IkJvdHRvbSI7alF1ZXJ5LmZuWyJpbm5lciIrbmFtZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuYW1lLnRvTG93ZXJDYXNlKCldKCkrbnVtKHRoaXMsInBhZGRpbmciK3RsKStudW0odGhpcywicGFkZGluZyIrYnIpO307alF1ZXJ5LmZuWyJvdXRlciIrbmFtZV09ZnVuY3Rpb24obWFyZ2luKXtyZXR1cm4gdGhpc1siaW5uZXIiK25hbWVdKCkrbnVtKHRoaXMsImJvcmRlciIrdGwrIldpZHRoIikrbnVtKHRoaXMsImJvcmRlciIrYnIrIldpZHRoIikrKG1hcmdpbj9udW0odGhpcywibWFyZ2luIit0bCkrbnVtKHRoaXMsIm1hcmdpbiIrYnIpOjApO307fSk7fSkoKTs=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.cluetip.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IGNsdWVUaXAgcGx1Z2luCiAqIFZlcnNpb24gMC45LjggICgwNS8yMi8yMDA4KQogKiBAcmVxdWlyZXMgalF1ZXJ5IHYxLjEuNCsKICogQHJlcXVpcmVzIERpbWVuc2lvbnMgcGx1Z2luIChmb3IgalF1ZXJ5IHZlcnNpb25zIDwgMS4yLjUpCiAqCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzOgogKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKICoKICovCjsoZnVuY3Rpb24oJCkgeyAKLyoKICogQG5hbWUgY2x1ZVRpcAogKiBAdHlwZSBqUXVlcnkKICogQGNhdCBQbHVnaW5zL3Rvb2x0aXAKICogQHJldHVybiBqUXVlcnkKICogQGF1dGhvciBLYXJsIFN3ZWRiZXJnCiAqCiAqIEBjcmVkaXQgSW5zcGlyZWQgYnkgQ29keSBMaW5kbGV5J3MgalRpcCAoaHR0cDovL3d3dy5jb2R5bGluZGxleS5jb20pCiAqIEBjcmVkaXQgVGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBtYW55IGFuZCB2YXJpZWQgY29udHJpYnV0aW9uczoKICAgICAgU2hlbGFuZSBFbm9zLCBHbGVuIExpcGthLCBIZWN0b3IgU2FudG9zLCBUb3JiZW4gU2NocmVpdGVyLCBEYW4gRy4gU3dpdHplciwgSsO2cm4gWmFlZmZlcmVyIAogKiBAY3JlZGl0IFRoYW5rcyB0byBKb25hdGhhbiBDaGFmZmVyLCBhcyBhbHdheXMsIGZvciBoZWxwIHdpdGggdGhlIGhhcmQgcGFydHMuIDotKQogKi8KCiAvKioKICogCiAqIERpc3BsYXlzIGEgaGlnaGx5IGN1c3RvbWl6YWJsZSB0b29sdGlwIHdoZW4gdGhlIHVzZXIgaG92ZXJzIChkZWZhdWx0KSBvciBjbGlja3MgKG9wdGlvbmFsKSB0aGUgbWF0Y2hlZCBlbGVtZW50LiAKICogQnkgZGVmYXVsdCwgdGhlIGNsdWVUaXAgcGx1Z2luIGxvYWRzIGEgcGFnZSBpbmRpY2F0ZWQgYnkgdGhlICJyZWwiIGF0dHJpYnV0ZSB2aWEgYWpheCBhbmQgZGlzcGxheXMgaXRzIGNvbnRlbnRzLgogKiBJZiBhICJ0aXRsZSIgYXR0cmlidXRlIGlzIHNwZWNpZmllZCwgaXRzIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGNsdWVUaXAncyBoZWFkaW5nLgogKiBUaGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgZm9yIGJvdGggdGhlIGJvZHkgYW5kIHRoZSBoZWFkaW5nIG9mIHRoZSBjbHVlVGlwIGlzIHVzZXItY29uZmlndXJhYmxlLiAKICogT3B0aW9uYWxseSwgdGhlIGNsdWVUaXAncyBib2R5IGNhbiBkaXNwbGF5IGNvbnRlbnQgZnJvbSBhbiBlbGVtZW50IG9uIHRoZSBzYW1lIHBhZ2UuCiAqICogSnVzdCBpbmRpY2F0ZSB0aGUgZWxlbWVudCdzIGlkIChlLmcuICIjc29tZS1pZCIpIGluIHRoZSByZWwgYXR0cmlidXRlLgogKiBPcHRpb25hbGx5LCB0aGUgY2x1ZVRpcCdzIGJvZHkgY2FuIGRpc3BsYXkgY29udGVudCBmcm9tIHRoZSB0aXRsZSBhdHRyaWJ1dGUsIHdoZW4gYSBkZWxpbWl0ZXIgaXMgaW5kaWNhdGVkLiAKICogKiBUaGUgc3RyaW5nIGJlZm9yZSB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhlIGRlbGltaXRlciBpcyBzZXQgYXMgdGhlIGNsdWVUaXAncyBoZWFkaW5nLgogKiAqIEFsbCBzdWJzZXF1ZW50IHN0cmluZ3MgYXJlIHdyYXBwZWQgaW4gc2VwYXJhdGUgRElWcyBhbmQgcGxhY2VkIGluIHRoZSBjbHVlVGlwJ3MgYm9keS4KICogVGhlIGNsdWVUaXAgcGx1Z2luIGFsbG93cyBmb3IgbWFueSwgbWFueSBtb3JlIG9wdGlvbnMuIFBsZWFzZWUgc2VlIHRoZSBleGFtcGxlcyBhbmQgdGhlIG9wdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cuLi4KICogCiAqIAogKiBAZXhhbXBsZSAkKCcjdGlwKS5jbHVldGlwKCk7CiAqIEBkZXNjIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgY2x1ZVRpcC4gSXQgZGlzcGxheXMgYSAyNzVweC13aWRlIGNsdWVUaXAgb24gbW91c2VvdmVyIG9mIHRoZSBlbGVtZW50IHdpdGggYW4gSUQgb2YgInRpcC4iIE9uIG1vdXNlb3V0IG9mIHRoZSBlbGVtZW50LCB0aGUgY2x1ZVRpcCBpcyBoaWRkZW4uCiAqCiAqCiAqIEBleGFtcGxlICQoJ2EuY2x1ZScpLmNsdWV0aXAoewogKiAgaG92ZXJDbGFzczogJ2hpZ2hsaWdodCcsCiAqICBzdGlja3k6IHRydWUsCiAqICBjbG9zZVBvc2l0aW9uOiAnYm90dG9tJywKICogIGNsb3NlVGV4dDogJzxpbWcgc3JjPSJjcm9zcy5wbmciIGFsdD0iY2xvc2UiIC8+JywKICogIHRydW5jYXRlOiA2MCwKICogIGFqYXhTZXR0aW5nczogewogKiAgICB0eXBlOiAnUE9TVCcKICogIH0KICogfSk7CiAqIEBkZXNjIERpc3BsYXlzIGEgY2x1ZVRpcCBvbiBtb3VzZW92ZXIgb2YgYWxsIDxhPiBlbGVtZW50cyB3aXRoIGNsYXNzPSJjbHVlIi4gVGhlIGhvdmVyZWQgZWxlbWVudCBnZXRzIGEgY2xhc3Mgb2YgImhpZ2hsaWdodCIgYWRkZWQgdG8gaXQgKHNvIHRoYXQgaXQgY2FuIGJlIHN0eWxlZCBhcHByb3ByaWF0ZWx5LiBUaGlzIGlzIGVzcC4gdXNlZnVsIGZvciBub24tYW5jaG9yIGVsZW1lbnRzLikuIFRoZSBjbHVlVGlwIGlzICJzdGlja3ksIiB3aGljaCBtZWFucyB0aGF0IGl0IHdpbGwgbm90IGJlIGhpZGRlbiB1bnRpbCB0aGUgdXNlciBlaXRoZXIgY2xpY2tzIG9uIGl0cyAiY2xvc2UiIHRleHQvZ3JhcGhpYyBvciBkaXNwbGF5cyBhbm90aGVyIGNsdWVUaXAuIFRoZSAiY2xvc2UiIHRleHQvZ3JhcGhpYyBpcyBzZXQgdG8gZGlwbGF5IGF0IHRoZSBib3R0b20gb2YgdGhlIGNsdWVUaXAgKGRlZmF1bHQgaXMgdG9wKSBhbmQgZGlzcGxheSBhbiBpbWFnZSByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCAiQ2xvc2UiIHRleHQuIE1vcmVvdmVyLCB0aGUgYm9keSBvZiB0aGUgY2x1ZVRpcCBpcyB0cnVuY2F0ZWQgdG8gdGhlIGZpcnN0IDYwIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSBmb2xsb3dlZCBieSBhbiBlbGxpcHNpcyAoLi4uKS4gRmluYWxseSwgdGhlIGNsdWVUaXAgcmV0cmlldmVzIHRoZSBjb250ZW50IHVzaW5nIFBPU1QgcmF0aGVyIHRoYW4gdGhlICQuYWpheCBtZXRob2QncyBkZWZhdWx0ICJHRVQuIgogKiAKICogTW9yZSBleGFtcGxlcyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3BsdWdpbnMubGVhcm5pbmdqcXVlcnkuY29tL2NsdWV0aXAvZGVtby8KICogCiAqIEZ1bGwgbGlzdCBvZiBvcHRpb25zL3NldHRpbmdzIGNhbiBiZSBmb3VuZCBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZmlsZSBhbmQgYXQgaHR0cDovL3BsdWdpbnMubGVhcm5pbmdqcXVlcnkuY29tL2NsdWV0aXAvCiAqLwoKICB2YXIgJGNsdWV0aXAsICRjbHVldGlwSW5uZXIsICRjbHVldGlwT3V0ZXIsICRjbHVldGlwVGl0bGUsICRjbHVldGlwQXJyb3dzLCAkZHJvcFNoYWRvdywgaW1nQ291bnQ7CiAgJC5mbi5jbHVldGlwID0gZnVuY3Rpb24oanMsIG9wdGlvbnMpIHsKICAgIGlmICh0eXBlb2YganMgPT0gJ29iamVjdCcpIHsKICAgICAgb3B0aW9ucyA9IGpzOwogICAgICBqcyA9IG51bGw7CiAgICB9CiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7CiAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7ICAgICAgCiAgICAgIAogICAgICAvLyBzdXBwb3J0IG1ldGFkYXRhIHBsdWdpbiAodjEuMCBhbmQgMi4wKQogICAgICB2YXIgb3B0cyA9ICQuZXh0ZW5kKGZhbHNlLCB7fSwgJC5mbi5jbHVldGlwLmRlZmF1bHRzLCBvcHRpb25zIHx8IHt9LCAkLm1ldGFkYXRhID8gJHRoaXMubWV0YWRhdGEoKSA6ICQubWV0YSA/ICR0aGlzLmRhdGEoKSA6IHt9KTsKCiAgICAgIC8vIHN0YXJ0IG91dCB3aXRoIG5vIGNvbnRlbnRzIChmb3IgYWpheCBhY3RpdmF0aW9uKQogICAgICB2YXIgY2x1ZXRpcENvbnRlbnRzID0gZmFsc2U7CiAgICAgIHZhciBjbHVlekluZGV4ID0gcGFyc2VJbnQob3B0cy5jbHVlekluZGV4LCAxMCktMTsKICAgICAgdmFyIGlzQWN0aXZlID0gZmFsc2UsIGNsb3NlT25EZWxheSA9IDA7CgogICAgICAvLyBjcmVhdGUgdGhlIGNsdWV0aXAgZGl2cwogICAgICBpZiAoISQoJyNjbHVldGlwJykubGVuZ3RoKSB7CiAgICAgICAgJGNsdWV0aXBJbm5lciA9ICQoJzxkaXYgaWQ9ImNsdWV0aXAtaW5uZXIiPjwvZGl2PicpOwogICAgICAgICRjbHVldGlwVGl0bGUgPSAkKCc8aDMgaWQ9ImNsdWV0aXAtdGl0bGUiPjwvaDM+Jyk7ICAgICAgICAKICAgICAgICAkY2x1ZXRpcE91dGVyID0gJCgnPGRpdiBpZD0iY2x1ZXRpcC1vdXRlciI+PC9kaXY+JykuYXBwZW5kKCRjbHVldGlwSW5uZXIpLnByZXBlbmQoJGNsdWV0aXBUaXRsZSk7CiAgICAgICAgJGNsdWV0aXAgPSAkKCc8ZGl2IGlkPSJjbHVldGlwIj48L2Rpdj4nKS5jc3Moe3pJbmRleDogb3B0cy5jbHVlekluZGV4fSkKICAgICAgICAuYXBwZW5kKCRjbHVldGlwT3V0ZXIpLmFwcGVuZCgnPGRpdiBpZD0iY2x1ZXRpcC1leHRyYSI+PC9kaXY+JylbaW5zZXJ0aW9uVHlwZV0oaW5zZXJ0aW9uRWxlbWVudCkuaGlkZSgpOwogICAgICAgICQoJzxkaXYgaWQ9ImNsdWV0aXAtd2FpdGltYWdlIj48L2Rpdj4nKS5jc3Moe3Bvc2l0aW9uOiAnYWJzb2x1dGUnLCB6SW5kZXg6IGNsdWV6SW5kZXgtMX0pCiAgICAgICAgLmluc2VydEJlZm9yZSgnI2NsdWV0aXAnKS5oaWRlKCk7CiAgICAgICAgJGNsdWV0aXAuY3NzKHtwb3NpdGlvbjogJ2Fic29sdXRlJywgekluZGV4OiBjbHVlekluZGV4fSk7CiAgICAgICAgJGNsdWV0aXBPdXRlci5jc3Moe3Bvc2l0aW9uOiAncmVsYXRpdmUnLCB6SW5kZXg6IGNsdWV6SW5kZXgrMX0pOwogICAgICAgICRjbHVldGlwQXJyb3dzID0gJCgnPGRpdiBpZD0iY2x1ZXRpcC1hcnJvd3MiIGNsYXNzPSJjbHVldGlwLWFycm93cyI+PC9kaXY+JykuY3NzKHt6SW5kZXg6IGNsdWV6SW5kZXgrMX0pLmFwcGVuZFRvKCcjY2x1ZXRpcCcpOwogICAgICB9CiAgICAgIHZhciBkcm9wU2hhZG93U3RlcHMgPSAob3B0cy5kcm9wU2hhZG93KSA/ICtvcHRzLmRyb3BTaGFkb3dTdGVwcyA6IDA7CiAgICAgIGlmICghJGRyb3BTaGFkb3cpIHsKICAgICAgICAkZHJvcFNoYWRvdyA9ICQoW10pOwogICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGRyb3BTaGFkb3dTdGVwczsgaSsrKSB7CiAgICAgICAgICAkZHJvcFNoYWRvdyA9ICRkcm9wU2hhZG93LmFkZCgkKCc8ZGl2PjwvZGl2PicpLmNzcyh7ekluZGV4OiBjbHVlekluZGV4LWktMSwgb3BhY2l0eTouMSwgdG9wOiAxK2ksIGxlZnQ6IDEraX0pKTsKICAgICAgICB9OwogICAgICAgICRkcm9wU2hhZG93LmNzcyh7cG9zaXRpb246ICdhYnNvbHV0ZScsIGJhY2tncm91bmRDb2xvcjogJyMwMDAnfSkKICAgICAgICAucHJlcGVuZFRvKCRjbHVldGlwKTsKICAgICAgfQogICAgICB2YXIgdGlwQXR0cmlidXRlID0gJHRoaXMuYXR0cihvcHRzLmF0dHJpYnV0ZSksIGN0Q2xhc3MgPSBvcHRzLmNsdWV0aXBDbGFzczsKICAgICAgaWYgKCF0aXBBdHRyaWJ1dGUgJiYgIW9wdHMuc3BsaXRUaXRsZSAmJiAhanMpIHJldHVybiB0cnVlOwogICAgICAvLyBpZiBoaWRlTG9jYWwgaXMgc2V0IHRvIHRydWUsIG9uIERPTSByZWFkeSBoaWRlIHRoZSBsb2NhbCBjb250ZW50IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNsdWVUaXAgICAgICAKICAgICAgaWYgKG9wdHMubG9jYWwgJiYgb3B0cy5oaWRlTG9jYWwpIHsgJCh0aXBBdHRyaWJ1dGUgKyAnOmZpcnN0JykuaGlkZSgpOyB9CiAgICAgIHZhciB0T2Zmc2V0ID0gcGFyc2VJbnQob3B0cy50b3BPZmZzZXQsIDEwKSwgbE9mZnNldCA9IHBhcnNlSW50KG9wdHMubGVmdE9mZnNldCwgMTApOwogICAgICAvLyB2ZXJ0aWNhbCBtZWFzdXJlbWVudCB2YXJpYWJsZXMKICAgICAgdmFyIHRpcEhlaWdodCwgd0hlaWdodDsKICAgICAgdmFyIGRlZkhlaWdodCA9IGlzTmFOKHBhcnNlSW50KG9wdHMuaGVpZ2h0LCAxMCkpID8gJ2F1dG8nIDogKC9cRC9nKS50ZXN0KG9wdHMuaGVpZ2h0KSA/IG9wdHMuaGVpZ2h0IDogb3B0cy5oZWlnaHQgKyAncHgnOwogICAgICB2YXIgc1RvcCwgbGlua1RvcCwgcG9zWSwgdGlwWSwgbW91c2VZLCBiYXNlbGluZTsKICAgICAgLy8gaG9yaXpvbnRhbCBtZWFzdXJlbWVudCB2YXJpYWJsZXMKICAgICAgdmFyIHRpcElubmVyV2lkdGggPSBpc05hTihwYXJzZUludChvcHRzLndpZHRoLCAxMCkpID8gMjc1IDogcGFyc2VJbnQob3B0cy53aWR0aCwgMTApOwogICAgICB2YXIgdGlwV2lkdGggPSB0aXBJbm5lcldpZHRoICsgKHBhcnNlSW50KCRjbHVldGlwLmNzcygncGFkZGluZ0xlZnQnKSl8fDApICsgKHBhcnNlSW50KCRjbHVldGlwLmNzcygncGFkZGluZ1JpZ2h0JykpfHwwKSArIGRyb3BTaGFkb3dTdGVwczsKICAgICAgdmFyIGxpbmtXaWR0aCA9IHRoaXMub2Zmc2V0V2lkdGg7CiAgICAgIHZhciBsaW5rTGVmdCwgcG9zWCwgdGlwWCwgbW91c2VYLCB3aW5XaWR0aDsKICAgICAgICAgICAgCiAgICAgIC8vIHBhcnNlIHRoZSB0aXRsZQogICAgICB2YXIgdGlwUGFydHM7CiAgICAgIHZhciB0aXBUaXRsZSA9IChvcHRzLmF0dHJpYnV0ZSAhPSAndGl0bGUnKSA/ICR0aGlzLmF0dHIob3B0cy50aXRsZUF0dHJpYnV0ZSkgOiAnJzsKICAgICAgaWYgKG9wdHMuc3BsaXRUaXRsZSkgewogICAgICAgIGlmKHRpcFRpdGxlID09IHVuZGVmaW5lZCkge3RpcFRpdGxlID0gJyc7fQogICAgICAgIHRpcFBhcnRzID0gdGlwVGl0bGUuc3BsaXQob3B0cy5zcGxpdFRpdGxlKTsKICAgICAgICB0aXBUaXRsZSA9IHRpcFBhcnRzLnNoaWZ0KCk7CiAgICAgIH0KICAgICAgdmFyIGxvY2FsQ29udGVudDsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAKKiBBQ1RJVkFUSU9OCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAKLy9hY3RpdmF0ZSBjbHVlVGlwCiAgICB2YXIgYWN0aXZhdGUgPSBmdW5jdGlvbihldmVudCkgewogICAgICBpZiAoIW9wdHMub25BY3RpdmF0ZSgkdGhpcykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaXNBY3RpdmUgPSB0cnVlOwogICAgICAkY2x1ZXRpcC5yZW1vdmVDbGFzcygpLmNzcyh7d2lkdGg6IHRpcElubmVyV2lkdGh9KTsKICAgICAgaWYgKHRpcEF0dHJpYnV0ZSA9PSAkdGhpcy5hdHRyKCdocmVmJykpIHsKICAgICAgICAkdGhpcy5jc3MoJ2N1cnNvcicsIG9wdHMuY3Vyc29yKTsKICAgICAgfQogICAgICAkdGhpcy5hdHRyKCd0aXRsZScsJycpOwogICAgICBpZiAob3B0cy5ob3ZlckNsYXNzKSB7CiAgICAgICAgJHRoaXMuYWRkQ2xhc3Mob3B0cy5ob3ZlckNsYXNzKTsKICAgICAgfQogICAgICBsaW5rVG9wID0gcG9zWSA9ICR0aGlzLm9mZnNldCgpLnRvcDsKICAgICAgbGlua0xlZnQgPSAkdGhpcy5vZmZzZXQoKS5sZWZ0OwogICAgICBtb3VzZVggPSBldmVudC5wYWdlWDsKICAgICAgbW91c2VZID0gZXZlbnQucGFnZVk7CiAgICAgIGlmICgkdGhpc1swXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ2FyZWEnKSB7CiAgICAgICAgc1RvcCA9ICQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOwogICAgICAgIHdpbldpZHRoID0gJCh3aW5kb3cpLndpZHRoKCk7CiAgICAgIH0KLy8gcG9zaXRpb24gY2x1ZVRpcCBob3Jpem9udGFsbHkKICAgICAgaWYgKG9wdHMucG9zaXRpb25CeSA9PSAnZml4ZWQnKSB7CiAgICAgICAgcG9zWCA9IGxpbmtXaWR0aCArIGxpbmtMZWZ0ICsgbE9mZnNldDsKICAgICAgICAkY2x1ZXRpcC5jc3Moe2xlZnQ6IHBvc1h9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwb3NYID0gKGxpbmtXaWR0aCA+IGxpbmtMZWZ0ICYmIGxpbmtMZWZ0ID4gdGlwV2lkdGgpCiAgICAgICAgICB8fCBsaW5rTGVmdCArIGxpbmtXaWR0aCArIHRpcFdpZHRoICsgbE9mZnNldCA+IHdpbldpZHRoIAogICAgICAgICAgPyBsaW5rTGVmdCAtIHRpcFdpZHRoIC0gbE9mZnNldCAKICAgICAgICAgIDogbGlua1dpZHRoICsgbGlua0xlZnQgKyBsT2Zmc2V0OwogICAgICAgIGlmICgkdGhpc1swXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2FyZWEnIHx8IG9wdHMucG9zaXRpb25CeSA9PSAnbW91c2UnIHx8IGxpbmtXaWR0aCArIHRpcFdpZHRoID4gd2luV2lkdGgpIHsgLy8gcG9zaXRpb24gYnkgbW91c2UKICAgICAgICAgIGlmIChtb3VzZVggKyAyMCArIHRpcFdpZHRoID4gd2luV2lkdGgpIHsgIAogICAgICAgICAgICAkY2x1ZXRpcC5hZGRDbGFzcygnIGNsdWV0aXAtJyArIGN0Q2xhc3MpOwogICAgICAgICAgICBwb3NYID0gKG1vdXNlWCAtIHRpcFdpZHRoIC0gbE9mZnNldCkgPj0gMCA/IG1vdXNlWCAtIHRpcFdpZHRoIC0gbE9mZnNldCAtIHBhcnNlSW50KCRjbHVldGlwLmNzcygnbWFyZ2luTGVmdCcpLDEwKSArIHBhcnNlSW50KCRjbHVldGlwSW5uZXIuY3NzKCdtYXJnaW5SaWdodCcpLDEwKSA6ICBtb3VzZVggLSAodGlwV2lkdGgvMik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwb3NYID0gbW91c2VYICsgbE9mZnNldDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHBZID0gcG9zWCA8IDAgPyBldmVudC5wYWdlWSArIHRPZmZzZXQgOiBldmVudC5wYWdlWTsKICAgICAgICAkY2x1ZXRpcC5jc3Moe2xlZnQ6IChwb3NYID4gMCAmJiBvcHRzLnBvc2l0aW9uQnkgIT0gJ2JvdHRvbVRvcCcpID8gcG9zWCA6IChtb3VzZVggKyAodGlwV2lkdGgvMikgPiB3aW5XaWR0aCkgPyB3aW5XaWR0aC8yIC0gdGlwV2lkdGgvMiA6IE1hdGgubWF4KG1vdXNlWCAtICh0aXBXaWR0aC8yKSwwKX0pOwogICAgICB9CiAgICAgICAgd0hlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBsb2FkIGEgc3RyaW5nIGZyb20gY2x1ZXRpcCBtZXRob2QncyBmaXJzdCBhcmd1bWVudAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgIGlmIChqcykgewogICAgICAgICRjbHVldGlwSW5uZXIuaHRtbChqcyk7CiAgICAgICAgY2x1ZXRpcFNob3cocFkpOwogICAgICB9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBsb2FkIHRoZSB0aXRsZSBhdHRyaWJ1dGUgb25seSAob3IgdXNlci1zZWxlY3RlZCBhdHRyaWJ1dGUpLiAKKiBjbHVlVGlwIHRpdGxlIGlzIHRoZSBzdHJpbmcgYmVmb3JlIHRoZSBmaXJzdCBkZWxpbWl0ZXIKKiBzdWJzZXF1ZW50IGRlbGltaXRlcnMgcGxhY2UgY2x1ZVRpcCBib2R5IHRleHQgb24gc2VwYXJhdGUgbGluZXMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICAgICAgZWxzZSBpZiAodGlwUGFydHMpIHsKICAgICAgICB2YXIgdHBsID0gdGlwUGFydHMubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGk9MDsgaSA8IHRwbDsgaSsrKXsKICAgICAgICAgIGlmIChpID09IDApIHsKICAgICAgICAgICAgJGNsdWV0aXBJbm5lci5odG1sKHRpcFBhcnRzW2ldKTsKICAgICAgICAgIH0gZWxzZSB7IAogICAgICAgICAgICAkY2x1ZXRpcElubmVyLmFwcGVuZCgnPGRpdiBjbGFzcz0ic3BsaXQtYm9keSI+JyArIHRpcFBhcnRzW2ldICsgJzwvZGl2PicpOwogICAgICAgICAgfSAgICAgICAgICAgIAogICAgICAgIH07CiAgICAgICAgY2x1ZXRpcFNob3cocFkpOwogICAgICB9Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBsb2FkIGV4dGVybmFsIGZpbGUgdmlhIGFqYXggICAgICAgICAgCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAgIGVsc2UgaWYgKCFvcHRzLmxvY2FsICYmIHRpcEF0dHJpYnV0ZS5pbmRleE9mKCcjJykgIT0gMCkgewogICAgICAgIGlmIChjbHVldGlwQ29udGVudHMgJiYgb3B0cy5hamF4Q2FjaGUpIHsKICAgICAgICAgICRjbHVldGlwSW5uZXIuaHRtbChjbHVldGlwQ29udGVudHMpOwogICAgICAgICAgY2x1ZXRpcFNob3cocFkpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHZhciBhamF4U2V0dGluZ3MgPSBvcHRzLmFqYXhTZXR0aW5nczsKICAgICAgICAgIGFqYXhTZXR0aW5ncy51cmwgPSB0aXBBdHRyaWJ1dGU7CiAgICAgICAgICBhamF4U2V0dGluZ3MuYmVmb3JlU2VuZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkY2x1ZXRpcE91dGVyLmNoaWxkcmVuKCkuZW1wdHkoKTsKICAgICAgICAgICAgaWYgKG9wdHMud2FpdEltYWdlKSB7CiAgICAgICAgICAgICAgJCgnI2NsdWV0aXAtd2FpdGltYWdlJykKICAgICAgICAgICAgICAuY3NzKHt0b3A6IG1vdXNlWSsyMCwgbGVmdDogbW91c2VYKzIwfSkKICAgICAgICAgICAgICAuc2hvdygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICBhamF4U2V0dGluZ3MuZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGlzQWN0aXZlKSB7CiAgICAgICAgICAgICAgJGNsdWV0aXBJbm5lci5odG1sKCc8aT5zb3JyeSwgdGhlIGNvbnRlbnRzIGNvdWxkIG5vdCBiZSBsb2FkZWQ8L2k+Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBhamF4U2V0dGluZ3Muc3VjY2VzcyA9IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgY2x1ZXRpcENvbnRlbnRzID0gb3B0cy5hamF4UHJvY2VzcyhkYXRhKTsKICAgICAgICAgICAgaWYgKGlzQWN0aXZlKSB7CiAgICAgICAgICAgICAgJGNsdWV0aXBJbm5lci5odG1sKGNsdWV0aXBDb250ZW50cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBhamF4U2V0dGluZ3MuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIAlpbWdDb3VudCA9ICQoJyNjbHVldGlwLWlubmVyIGltZycpLmxlbmd0aDsKICAgICAgICAJCWlmIChpbWdDb3VudCAmJiAhJC5icm93c2VyLm9wZXJhKSB7CiAgICAgICAgCQkgICQoJyNjbHVldGlwLWlubmVyIGltZycpLmxvYWQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAJCQlpbWdDb3VudC0tOwogICAgICAgICAgCQkJaWYgKGltZ0NvdW50PDEpIHsKICAgICAgICAgIAkJCQkkKCcjY2x1ZXRpcC13YWl0aW1hZ2UnKS5oaWRlKCk7CiAgICAgICAgICAJCQkgIGlmIChpc0FjdGl2ZSkgY2x1ZXRpcFNob3cocFkpOwogICAgICAgICAgCQkJfQogICAgICAgIAkJICB9KTsgCiAgICAgICAgCQl9IGVsc2UgewogICAgICAJCQkJJCgnI2NsdWV0aXAtd2FpdGltYWdlJykuaGlkZSgpOwogICAgICAgIAkJICBpZiAoaXNBY3RpdmUpIGNsdWV0aXBTaG93KHBZKTsgICAgCiAgICAgICAgCQl9IAogICAgICAgICAgfTsKICAgICAgICAgICQuYWpheChhamF4U2V0dGluZ3MpOwogICAgICAgIH0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBsb2FkIGFuIGVsZW1lbnQgZnJvbSB0aGUgc2FtZSBwYWdlCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgfSBlbHNlIGlmIChvcHRzLmxvY2FsKXsKICAgICAgICB2YXIgJGxvY2FsQ29udGVudCA9ICQodGlwQXR0cmlidXRlICsgJzpmaXJzdCcpOwogICAgICAgIHZhciBsb2NhbENsdWV0aXAgPSAkLmZuLndyYXBJbm5lciA/ICRsb2NhbENvbnRlbnQud3JhcElubmVyKCc8ZGl2PjwvZGl2PicpLmNoaWxkcmVuKCkuY2xvbmUodHJ1ZSkgOiAkbG9jYWxDb250ZW50Lmh0bWwoKTsKICAgICAgICAkLmZuLndyYXBJbm5lciA/ICRjbHVldGlwSW5uZXIuZW1wdHkoKS5hcHBlbmQobG9jYWxDbHVldGlwKSA6ICRjbHVldGlwSW5uZXIuaHRtbChsb2NhbENsdWV0aXApOwogICAgICAgIGNsdWV0aXBTaG93KHBZKTsKICAgICAgfQogICAgfTsKCi8vIGdldCBkaW1lbnNpb25zIGFuZCBvcHRpb25zIGZvciBjbHVldGlwIGFuZCBwcmVwYXJlIGl0IHRvIGJlIHNob3duCiAgICB2YXIgY2x1ZXRpcFNob3cgPSBmdW5jdGlvbihicFkpIHsKICAgICAgJGNsdWV0aXAuYWRkQ2xhc3MoJ2NsdWV0aXAtJyArIGN0Q2xhc3MpOwogICAgICAKICAgICAgaWYgKG9wdHMudHJ1bmNhdGUpIHsgCiAgICAgICAgdmFyICR0cnVuY2xvYWRlZCA9ICRjbHVldGlwSW5uZXIudGV4dCgpLnNsaWNlKDAsb3B0cy50cnVuY2F0ZSkgKyAnLi4uJzsKICAgICAgICAkY2x1ZXRpcElubmVyLmh0bWwoJHRydW5jbG9hZGVkKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBkb05vdGhpbmcoKSB7fTsgLy9lbXB0eSBmdW5jdGlvbgogICAgICB0aXBUaXRsZSA/ICRjbHVldGlwVGl0bGUuc2hvdygpLmh0bWwodGlwVGl0bGUpIDogKG9wdHMuc2hvd1RpdGxlKSA/ICRjbHVldGlwVGl0bGUuc2hvdygpLmh0bWwoJyZuYnNwOycpIDogJGNsdWV0aXBUaXRsZS5oaWRlKCk7CiAgICAgIGlmIChvcHRzLnN0aWNreSkgewogICAgICAgIHZhciAkY2xvc2VMaW5rID0gJCgnPGRpdiBpZD0iY2x1ZXRpcC1jbG9zZSI+PGEgaHJlZj0iIyI+JyArIG9wdHMuY2xvc2VUZXh0ICsgJzwvYT48L2Rpdj4nKTsKICAgICAgICAob3B0cy5jbG9zZVBvc2l0aW9uID09ICdib3R0b20nKSA/ICRjbG9zZUxpbmsuYXBwZW5kVG8oJGNsdWV0aXBJbm5lcikgOiAob3B0cy5jbG9zZVBvc2l0aW9uID09ICd0aXRsZScpID8gJGNsb3NlTGluay5wcmVwZW5kVG8oJGNsdWV0aXBUaXRsZSkgOiAkY2xvc2VMaW5rLnByZXBlbmRUbygkY2x1ZXRpcElubmVyKTsKICAgICAgICAkY2xvc2VMaW5rLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgY2x1ZXRpcENsb3NlKCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKG9wdHMubW91c2VPdXRDbG9zZSkgewogICAgICAgICAgaWYgKCQuZm4uaG92ZXJJbnRlbnQgJiYgb3B0cy5ob3ZlckludGVudCkgeyAKICAgICAgICAgICAgJGNsdWV0aXAuaG92ZXJJbnRlbnQoewogICAgICAgICAgICAgIG92ZXI6IGRvTm90aGluZywgCiAgICAgICAgICAgICAgdGltZW91dDogb3B0cy5ob3ZlckludGVudC50aW1lb3V0LCAgCiAgICAgICAgICAgICAgb3V0OiBmdW5jdGlvbigpIHsgJGNsb3NlTGluay50cmlnZ2VyKCdjbGljaycpOyB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNsdWV0aXAuaG92ZXIoZG9Ob3RoaW5nLCAKICAgICAgICAgICAgZnVuY3Rpb24oKSB7JGNsb3NlTGluay50cmlnZ2VyKCdjbGljaycpOyB9KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgJGNsdWV0aXAudW5iaW5kKCdtb3VzZW91dCcpOwogICAgICAgIH0KICAgICAgfQovLyBub3cgdGhhdCBjb250ZW50IGlzIGxvYWRlZCwgZmluaXNoIHRoZSBwb3NpdGlvbmluZyAKICAgICAgdmFyIGRpcmVjdGlvbiA9ICcnOwogICAgICAkY2x1ZXRpcE91dGVyLmNzcyh7b3ZlcmZsb3c6IGRlZkhlaWdodCA9PSAnYXV0bycgPyAndmlzaWJsZScgOiAnYXV0bycsIGhlaWdodDogZGVmSGVpZ2h0fSk7CiAgICAgIHRpcEhlaWdodCA9IGRlZkhlaWdodCA9PSAnYXV0bycgPyBNYXRoLm1heCgkY2x1ZXRpcC5vdXRlckhlaWdodCgpLCRjbHVldGlwLmhlaWdodCgpKSA6IHBhcnNlSW50KGRlZkhlaWdodCwxMCk7ICAgCiAgICAgIHRpcFkgPSBwb3NZOwogICAgICBiYXNlbGluZSA9IHNUb3AgKyB3SGVpZ2h0OwogICAgICBpZiAob3B0cy5wb3NpdGlvbkJ5ID09ICdmaXhlZCcpIHsKICAgICAgICB0aXBZID0gcG9zWSAtIG9wdHMuZHJvcFNoYWRvd1N0ZXBzICsgdE9mZnNldDsKICAgICAgfSBlbHNlIGlmICggKHBvc1ggPCBtb3VzZVggJiYgTWF0aC5tYXgocG9zWCwgMCkgKyB0aXBXaWR0aCA+IG1vdXNlWCkgfHwgb3B0cy5wb3NpdGlvbkJ5ID09ICdib3R0b21Ub3AnKSB7CiAgICAgICAgaWYgKHBvc1kgKyB0aXBIZWlnaHQgKyB0T2Zmc2V0ID4gYmFzZWxpbmUgJiYgbW91c2VZIC0gc1RvcCA+IHRpcEhlaWdodCArIHRPZmZzZXQpIHsgCiAgICAgICAgICB0aXBZID0gbW91c2VZIC0gdGlwSGVpZ2h0IC0gdE9mZnNldDsKICAgICAgICAgIGRpcmVjdGlvbiA9ICd0b3AnOwogICAgICAgIH0gZWxzZSB7IAogICAgICAgICAgdGlwWSA9IG1vdXNlWSArIHRPZmZzZXQ7CiAgICAgICAgICBkaXJlY3Rpb24gPSAnYm90dG9tJzsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIHBvc1kgKyB0aXBIZWlnaHQgKyB0T2Zmc2V0ID4gYmFzZWxpbmUgKSB7CiAgICAgICAgdGlwWSA9ICh0aXBIZWlnaHQgPj0gd0hlaWdodCkgPyBzVG9wIDogYmFzZWxpbmUgLSB0aXBIZWlnaHQgLSB0T2Zmc2V0OwogICAgICB9IGVsc2UgaWYgKCR0aGlzLmNzcygnZGlzcGxheScpID09ICdibG9jaycgfHwgJHRoaXNbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdhcmVhJyB8fCBvcHRzLnBvc2l0aW9uQnkgPT0gIm1vdXNlIikgewogICAgICAgIHRpcFkgPSBicFkgLSB0T2Zmc2V0OwogICAgICB9IGVsc2UgewogICAgICAgIHRpcFkgPSBwb3NZIC0gb3B0cy5kcm9wU2hhZG93U3RlcHM7CiAgICAgIH0KICAgICAgaWYgKGRpcmVjdGlvbiA9PSAnJykgewogICAgICAgIHBvc1ggPCBsaW5rTGVmdCA/IGRpcmVjdGlvbiA9ICdsZWZ0JyA6IGRpcmVjdGlvbiA9ICdyaWdodCc7CiAgICAgIH0KICAgICAgJGNsdWV0aXAuY3NzKHt0b3A6IHRpcFkgKyAncHgnfSkucmVtb3ZlQ2xhc3MoKS5hZGRDbGFzcygnY2x1ZS0nICsgZGlyZWN0aW9uICsgJy0nICsgY3RDbGFzcykuYWRkQ2xhc3MoJyBjbHVldGlwLScgKyBjdENsYXNzKTsKICAgICAgaWYgKG9wdHMuYXJyb3dzKSB7IC8vIHNldCB1cCBhcnJvdyBwb3NpdGlvbmluZyB0byBhbGlnbiB3aXRoIGVsZW1lbnQKICAgICAgICB2YXIgYmdZID0gKHBvc1kgLSB0aXBZIC0gb3B0cy5kcm9wU2hhZG93U3RlcHMpOwogICAgICAgICRjbHVldGlwQXJyb3dzLmNzcyh7dG9wOiAoLyhsZWZ0fHJpZ2h0KS8udGVzdChkaXJlY3Rpb24pICYmIHBvc1ggPj0wICYmIGJnWSA+IDApID8gYmdZICsgJ3B4JyA6IC8obGVmdHxyaWdodCkvLnRlc3QoZGlyZWN0aW9uKSA/IDAgOiAnJ30pLnNob3coKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAkY2x1ZXRpcEFycm93cy5oaWRlKCk7CiAgICAgIH0KCi8vIChmaXJzdCBoaWRlLCB0aGVuKSAqKipTSE9XIFRIRSBDTFVFVElQKioqCiAgICAgICRkcm9wU2hhZG93LmhpZGUoKTsKICAgICAgJGNsdWV0aXAuaGlkZSgpW29wdHMuZngub3Blbl0ob3B0cy5meC5vcGVuICE9ICdzaG93JyAmJiBvcHRzLmZ4Lm9wZW5TcGVlZCk7CiAgICAgIGlmIChvcHRzLmRyb3BTaGFkb3cpICRkcm9wU2hhZG93LmNzcyh7aGVpZ2h0OiB0aXBIZWlnaHQsIHdpZHRoOiB0aXBJbm5lcldpZHRofSkuc2hvdygpOwogICAgICBpZiAoJC5mbi5iZ2lmcmFtZSkgeyAkY2x1ZXRpcC5iZ2lmcmFtZSgpOyB9CiAgICAgIC8vIHRyaWdnZXIgdGhlIG9wdGlvbmFsIG9uU2hvdyBmdW5jdGlvbgogICAgICBpZiAob3B0cy5kZWxheWVkQ2xvc2UgPiAwKSB7CiAgICAgICAgY2xvc2VPbkRlbGF5ID0gc2V0VGltZW91dChjbHVldGlwQ2xvc2UsIG9wdHMuZGVsYXllZENsb3NlKTsKICAgICAgfQogICAgICBvcHRzLm9uU2hvdygkY2x1ZXRpcCwgJGNsdWV0aXBJbm5lcik7CiAgICAgIAogICAgfTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgPUlOQUNUSVZBVElPTgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogICAgdmFyIGluYWN0aXZhdGUgPSBmdW5jdGlvbigpIHsKICAgICAgaXNBY3RpdmUgPSBmYWxzZTsKICAgICAgJCgnI2NsdWV0aXAtd2FpdGltYWdlJykuaGlkZSgpOwogICAgICBpZiAoIW9wdHMuc3RpY2t5IHx8ICgvY2xpY2t8dG9nZ2xlLykudGVzdChvcHRzLmFjdGl2YXRpb24pICkgewogICAgICAgIGNsdWV0aXBDbG9zZSgpOwpjbGVhclRpbWVvdXQoY2xvc2VPbkRlbGF5KTsgICAgICAgIAogICAgICB9OwogICAgICBpZiAob3B0cy5ob3ZlckNsYXNzKSB7CiAgICAgICAgJHRoaXMucmVtb3ZlQ2xhc3Mob3B0cy5ob3ZlckNsYXNzKTsKICAgICAgfQogICAgICAkKCcuY2x1ZXRpcC1jbGlja2VkJykucmVtb3ZlQ2xhc3MoJ2NsdWV0aXAtY2xpY2tlZCcpOwogICAgfTsKLy8gY2xvc2UgY2x1ZXRpcCBhbmQgcmVzZXQgc29tZSB0aGluZ3MKICAgIHZhciBjbHVldGlwQ2xvc2UgPSBmdW5jdGlvbigpIHsKICAgICAgJGNsdWV0aXBPdXRlciAKICAgICAgLnBhcmVudCgpLmhpZGUoKS5yZW1vdmVDbGFzcygpLmVuZCgpCiAgICAgIC5jaGlsZHJlbigpLmVtcHR5KCk7CiAgICAgIGlmICh0aXBUaXRsZSkgewogICAgICAgICR0aGlzLmF0dHIob3B0cy50aXRsZUF0dHJpYnV0ZSwgdGlwVGl0bGUpOwogICAgICB9CiAgICAgICR0aGlzLmNzcygnY3Vyc29yJywnJyk7CiAgICAgIGlmIChvcHRzLmFycm93cykgJGNsdWV0aXBBcnJvd3MuY3NzKHt0b3A6ICcnfSk7CiAgICB9OwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICA9QklORCBFVkVOVFMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAvLyBhY3RpdmF0ZSBieSBjbGljawogICAgICBpZiAoICgvY2xpY2t8dG9nZ2xlLykudGVzdChvcHRzLmFjdGl2YXRpb24pICkgewogICAgICAgICR0aGlzLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICBpZiAoJGNsdWV0aXAuaXMoJzpoaWRkZW4nKSB8fCAhJHRoaXMuaXMoJy5jbHVldGlwLWNsaWNrZWQnKSkgewogICAgICAgICAgICBhY3RpdmF0ZShldmVudCk7CiAgICAgICAgICAgICQoJy5jbHVldGlwLWNsaWNrZWQnKS5yZW1vdmVDbGFzcygnY2x1ZXRpcC1jbGlja2VkJyk7CiAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKCdjbHVldGlwLWNsaWNrZWQnKTsKCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbmFjdGl2YXRlKGV2ZW50KTsKCiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmJsdXIoKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKICAvLyBhY3RpdmF0ZSBieSBmb2N1czsgaW5hY3RpdmF0ZSBieSBibHVyICAgIAogICAgICB9IGVsc2UgaWYgKG9wdHMuYWN0aXZhdGlvbiA9PSAnZm9jdXMnKSB7CiAgICAgICAgJHRoaXMuZm9jdXMoZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgIGFjdGl2YXRlKGV2ZW50KTsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy5ibHVyKGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICBpbmFjdGl2YXRlKGV2ZW50KTsKICAgICAgICB9KTsKICAvLyBhY3RpdmF0ZSBieSBob3ZlcgogICAgLy8gY2xpY2tpbmcgaXMgcmV0dXJuZWQgZmFsc2UgaWYgY2x1ZXRpcCB1cmwgaXMgc2FtZSBhcyBocmVmIHVybAogICAgICB9IGVsc2UgewogICAgICAgICR0aGlzLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgaWYgKCR0aGlzLmF0dHIoJ2hyZWYnKSAmJiAkdGhpcy5hdHRyKCdocmVmJykgPT0gdGlwQXR0cmlidXRlICYmICFvcHRzLmNsaWNrVGhyb3VnaCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy9zZXQgdXAgbW91c2UgdHJhY2tpbmcKICAgICAgICB2YXIgbW91c2VUcmFja3MgPSBmdW5jdGlvbihldnQpIHsKICAgICAgICAgIGlmIChvcHRzLnRyYWNraW5nID09IHRydWUpIHsKICAgICAgICAgICAgdmFyIHRyYWNrWCA9IHBvc1ggLSBldnQucGFnZVg7CiAgICAgICAgICAgIHZhciB0cmFja1kgPSB0aXBZID8gdGlwWSAtIGV2dC5wYWdlWSA6IHBvc1kgLSBldnQucGFnZVk7CiAgICAgICAgICAgICR0aGlzLm1vdXNlbW92ZShmdW5jdGlvbihldnQpIHsKICAgICAgICAgICAgICAkY2x1ZXRpcC5jc3Moe2xlZnQ6IGV2dC5wYWdlWCArIHRyYWNrWCwgdG9wOiBldnQucGFnZVkgKyB0cmFja1kgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgaWYgKCQuZm4uaG92ZXJJbnRlbnQgJiYgb3B0cy5ob3ZlckludGVudCkgewogICAgICAgICAgJHRoaXMubW91c2VvdmVyKGZ1bmN0aW9uKCkgeyR0aGlzLmF0dHIoJ3RpdGxlJywnJyk7IH0pCiAgICAgICAgICAuaG92ZXJJbnRlbnQoewogICAgICAgICAgICBzZW5zaXRpdml0eTogb3B0cy5ob3ZlckludGVudC5zZW5zaXRpdml0eSwKICAgICAgICAgICAgaW50ZXJ2YWw6IG9wdHMuaG92ZXJJbnRlbnQuaW50ZXJ2YWwsICAKICAgICAgICAgICAgb3ZlcjogZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICAgICAgICBhY3RpdmF0ZShldmVudCk7CiAgICAgICAgICAgICAgbW91c2VUcmFja3MoZXZlbnQpOwogICAgICAgICAgICB9LCAKICAgICAgICAgICAgdGltZW91dDogb3B0cy5ob3ZlckludGVudC50aW1lb3V0LCAgCiAgICAgICAgICAgIG91dDogZnVuY3Rpb24oZXZlbnQpIHtpbmFjdGl2YXRlKGV2ZW50KTsgJHRoaXMudW5iaW5kKCdtb3VzZW1vdmUnKTt9CiAgICAgICAgICB9KTsgICAgICAgICAgIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkdGhpcy5ob3ZlcihmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICBhY3RpdmF0ZShldmVudCk7CiAgICAgICAgICAgIG1vdXNlVHJhY2tzKGV2ZW50KTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgIGluYWN0aXZhdGUoZXZlbnQpOwogICAgICAgICAgICAkdGhpcy51bmJpbmQoJ21vdXNlbW92ZScpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9OwogIAovKgogKiBvcHRpb25zIGZvciBjbHVlVGlwCiAqCiAqIGVhY2ggb25lIGNhbiBiZSBleHBsaWNpdGx5IG92ZXJyaWRkZW4gYnkgY2hhbmdpbmcgaXRzIHZhbHVlLiAKICogZm9yIGV4YW1wbGU6ICQuZm4uY2x1ZXRpcC5kZWZhdWx0cy53aWR0aCA9IDIwMDsgCiAqIHdvdWxkIGNoYW5nZSB0aGUgZGVmYXVsdCB3aWR0aCBmb3IgYWxsIGNsdWVUaXBzIHRvIDIwMC4gCiAqCiAqIGVhY2ggb25lIGNhbiBhbHNvIGJlIG92ZXJyaWRkZW4gYnkgcGFzc2luZyBhbiBvcHRpb25zIG1hcCB0byB0aGUgY2x1ZXRpcCBtZXRob2QuCiAqIGZvciBleGFtcGxlOiAkKCdhLmV4YW1wbGUnKS5jbHVldGlwKHt3aWR0aDogMjAwfSk7IAogKiB3b3VsZCBjaGFuZ2UgdGhlIGRlZmF1bHQgd2lkdGggdG8gMjAwIGZvciBjbHVlVGlwcyBpbnZva2VkIGJ5IGEgbGluayB3aXRoIGNsYXNzIG9mICJleGFtcGxlIgogKgogKi8KICAKICAkLmZuLmNsdWV0aXAuZGVmYXVsdHMgPSB7ICAvLyBzZXQgdXAgZGVmYXVsdCBvcHRpb25zCiAgICB3aWR0aDogICAgICAgICAgICAyNzUsICAgICAgLy8gVGhlIHdpZHRoIG9mIHRoZSBjbHVlVGlwCiAgICBoZWlnaHQ6ICAgICAgICAgICAnYXV0bycsICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgY2x1ZVRpcAogICAgY2x1ZXpJbmRleDogICAgICAgOTcsICAgICAgIC8vIFNldHMgdGhlIHotaW5kZXggc3R5bGUgcHJvcGVydHkgb2YgdGhlIGNsdWVUaXAKICAgIHBvc2l0aW9uQnk6ICAgICAgICdhdXRvJywgICAvLyBTZXRzIHRoZSB0eXBlIG9mIHBvc2l0aW9uaW5nOiAnYXV0bycsICdtb3VzZScsJ2JvdHRvbVRvcCcsICdmaXhlZCcKICAgIHRvcE9mZnNldDogICAgICAgIDE1LCAgICAgICAvLyBOdW1iZXIgb2YgcHggdG8gb2Zmc2V0IGNsdWVUaXAgZnJvbSB0b3Agb2YgaW52b2tpbmcgZWxlbWVudAogICAgbGVmdE9mZnNldDogICAgICAgMTUsICAgICAgIC8vIE51bWJlciBvZiBweCB0byBvZmZzZXQgY2x1ZVRpcCBmcm9tIGxlZnQgb2YgaW52b2tpbmcgZWxlbWVudAogICAgbG9jYWw6ICAgICAgICAgICAgZmFsc2UsICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNvbnRlbnQgZnJvbSB0aGUgc2FtZSBwYWdlIGZvciB0aGUgY2x1ZVRpcCdzIGJvZHkKICAgIGhpZGVMb2NhbDogICAgICAgIHRydWUsICAgICAvLyBJZiBsb2NhbCBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIGxvY2FsIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSBzaG93biBpbiBjbHVlVGlwIHNob3VsZCBiZSBoaWRkZW4gYXQgaXRzIG9yaWdpbmFsIGxvY2F0aW9uCiAgICBhdHRyaWJ1dGU6ICAgICAgICAncmVsJywgICAgLy8gdGhlIGF0dHJpYnV0ZSB0byBiZSB1c2VkIGZvciBmZXRjaGluZyB0aGUgY2x1ZVRpcCdzIGJvZHkgY29udGVudAogICAgdGl0bGVBdHRyaWJ1dGU6ICAgJ3RpdGxlJywgIC8vIHRoZSBhdHRyaWJ1dGUgdG8gYmUgdXNlZCBmb3IgZmV0Y2hpbmcgdGhlIGNsdWVUaXAncyB0aXRsZQogICAgc3BsaXRUaXRsZTogICAgICAgJycsICAgICAgIC8vIEEgY2hhcmFjdGVyIHVzZWQgdG8gc3BsaXQgdGhlIHRpdGxlIGF0dHJpYnV0ZSBpbnRvIHRoZSBjbHVlVGlwIHRpdGxlIGFuZCBkaXZzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aGluIHRoZSBjbHVlVGlwIGJvZHkuIG1vcmUgaW5mbyBiZWxvdyBbNl0KICAgIHNob3dUaXRsZTogICAgICAgIHRydWUsICAgICAvLyBzaG93IHRpdGxlIGJhciBvZiB0aGUgY2x1ZVRpcCwgZXZlbiBpZiB0aXRsZSBhdHRyaWJ1dGUgbm90IHNldAogICAgY2x1ZXRpcENsYXNzOiAgICAgJ2RlZmF1bHQnLC8vIGNsYXNzIGFkZGVkIHRvIG91dGVybW9zdCBjbHVlVGlwIGRpdiBpbiB0aGUgZm9ybSBvZiAnY2x1ZXRpcC0nICsgY2x1ZVRpcENsYXNzLgogICAgaG92ZXJDbGFzczogICAgICAgJycsICAgICAgIC8vIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGludm9raW5nIGVsZW1lbnQgb25tb3VzZW92ZXIgYW5kIHJlbW92ZWQgb25tb3VzZW91dAogICAgd2FpdEltYWdlOiAgICAgICAgdHJ1ZSwgICAgIC8vIHdoZXRoZXIgdG8gc2hvdyBhICJsb2FkaW5nIiBpbWcsIHdoaWNoIGlzIHNldCBpbiBqcXVlcnkuY2x1ZXRpcC5jc3MKICAgIGN1cnNvcjogICAgICAgICAgICdoZWxwJywKICAgIGFycm93czogICAgICAgICAgIGZhbHNlLCAgICAvLyBpZiB0cnVlLCBkaXNwbGF5cyBhcnJvdyBvbiBhcHByb3ByaWF0ZSBzaWRlIG9mIGNsdWVUaXAKICAgIGRyb3BTaGFkb3c6ICAgICAgIHRydWUsICAgICAvLyBzZXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRyb3Atc2hhZG93IGVmZmVjdCBvbiB0aGUgY2x1ZVRpcAogICAgZHJvcFNoYWRvd1N0ZXBzOiAgNiwgICAgICAgIC8vIGFkanVzdHMgdGhlIHNpemUgb2YgdGhlIGRyb3Agc2hhZG93CiAgICBzdGlja3k6ICAgICAgICAgICBmYWxzZSwgICAgLy8ga2VlcCB2aXNpYmxlIHVudGlsIG1hbnVhbGx5IGNsb3NlZAogICAgbW91c2VPdXRDbG9zZTogICAgZmFsc2UsICAgIC8vIGNsb3NlIHdoZW4gY2x1ZVRpcCBpcyBtb3VzZWQgb3V0CiAgICBhY3RpdmF0aW9uOiAgICAgICAnaG92ZXInLCAgLy8gc2V0IHRvICdjbGljaycgdG8gZm9yY2UgdXNlciB0byBjbGljayB0byBzaG93IGNsdWVUaXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gJ2ZvY3VzJyB0byBzaG93IG9uIGZvY3VzIG9mIGEgZm9ybSBlbGVtZW50IGFuZCBoaWRlIG9uIGJsdXIKICAgIGNsaWNrVGhyb3VnaDogICAgIGZhbHNlLCAgICAvLyBpZiB0cnVlLCBhbmQgYWN0aXZhdGlvbiBpcyBub3QgJ2NsaWNrJywgdGhlbiBjbGlja2luZyBvbiBsaW5rIHdpbGwgdGFrZSB1c2VyIHRvIHRoZSBsaW5rJ3MgaHJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVuIGlmIGhyZWYgYW5kIHRpcEF0dHJpYnV0ZSBhcmUgZXF1YWwKICAgIHRyYWNraW5nOiAgICAgICAgIGZhbHNlLCAgICAvLyBpZiB0cnVlLCBjbHVlVGlwIHdpbGwgdHJhY2sgbW91c2UgbW92ZW1lbnQgKGV4cGVyaW1lbnRhbCkKICAgIGRlbGF5ZWRDbG9zZTogICAgIDAsICAgICAgICAvLyBjbG9zZSBjbHVlVGlwIG9uIGEgdGltZWQgZGVsYXkgKGV4cGVyaW1lbnRhbCkKICAgIGNsb3NlUG9zaXRpb246ICAgICd0b3AnLCAgICAvLyBsb2NhdGlvbiBvZiBjbG9zZSB0ZXh0IGZvciBzdGlja3kgY2x1ZXRpcHM7IGNhbiBiZSAndG9wJyBvciAnYm90dG9tJyBvciAndGl0bGUnCiAgICBjbG9zZVRleHQ6ICAgICAgICAnQ2xvc2UnLCAgLy8gdGV4dCAob3IgSFRNTCkgdG8gdG8gYmUgY2xpY2tlZCB0byBjbG9zZSBzdGlja3kgY2x1ZVRpcHMKICAgIHRydW5jYXRlOiAgICAgICAgIDAsICAgICAgICAvLyBudW1iZXIgb2YgY2hhcmFjdGVycyB0byB0cnVuY2F0ZSBjbHVlVGlwJ3MgY29udGVudHMuIGlmIDAsIG5vIHRydW5jYXRpb24gb2NjdXJzCgogICAgLy8gZWZmZWN0IGFuZCBzcGVlZCBmb3Igb3BlbmluZyBjbHVlVGlwcwogICAgZng6IHsgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICBvcGVuOiAgICAgICAnc2hvdycsIC8vIGNhbiBiZSAnc2hvdycgb3IgJ3NsaWRlRG93bicgb3IgJ2ZhZGVJbicKICAgICAgICAgICAgICAgICAgICAgIG9wZW5TcGVlZDogICcnCiAgICB9LCAgICAgCgogICAgLy8gc2V0dGluZ3MgZm9yIHdoZW4gaG92ZXJJbnRlbnQgcGx1Z2luIGlzIHVzZWQgICAgICAgICAgICAgCiAgICBob3ZlckludGVudDogeyAgICAKICAgICAgICAgICAgICAgICAgICAgIHNlbnNpdGl2aXR5OiAgMywKICAgICAgICAgICAgICAJCQkgIGludGVydmFsOiAgICAgNTAsCiAgICAgICAgICAgICAgCQkJICB0aW1lb3V0OiAgICAgIDAKICAgIH0sCgogICAgLy8gZnVuY3Rpb24gdG8gcnVuIGp1c3QgYmVmb3JlIGNsdWVUaXAgaXMgc2hvd24uICAgICAgICAgICAKICAgIG9uQWN0aXZhdGU6ICAgICAgIGZ1bmN0aW9uKGUpIHtyZXR1cm4gdHJ1ZTt9LAoKICAgIC8vIGZ1bmN0aW9uIHRvIHJ1biBqdXN0IGFmdGVyIGNsdWVUaXAgaXMgc2hvd24uCiAgICBvblNob3c6ICAgICAgICAgICBmdW5jdGlvbihjdCwgYyl7fSwKICAgIAogICAgLy8gd2hldGhlciB0byBjYWNoZSByZXN1bHRzIG9mIGFqYXggcmVxdWVzdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBoaXRzIHRvIHNlcnZlciAgICAKICAgIGFqYXhDYWNoZTogICAgICAgIHRydWUsICAKCiAgICAvLyBwcm9jZXNzIGRhdGEgcmV0cmlldmVkIHZpYSB4aHIgYmVmb3JlIGl0J3MgZGlzcGxheWVkCiAgICBhamF4UHJvY2VzczogICAgICBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLzxzKGNyaXB0fHR5bGUpKC58XHMpKj9cL3MoY3JpcHR8dHlsZSk+L2csICcnKS5yZXBsYWNlKC88KGxpbmt8dGl0bGUpKC58XHMpKj9cLyhsaW5rfHRpdGxlKT4vZywnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgfSwgICAgICAgICAgICAgICAgCgogICAgLy8gY2FuIHBhc3MgaW4gc3RhbmRhcmQgJC5hamF4KCkgcGFyYW1ldGVycywgbm90IGluY2x1ZGluZyBlcnJvciwgY29tcGxldGUsIHN1Y2Nlc3MsIGFuZCB1cmwKICAgIGFqYXhTZXR0aW5nczogeyAgIAogICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJwogICAgfSwKICAgIGRlYnVnOiBmYWxzZQogIH07CgoKLyoKICogR2xvYmFsIGRlZmF1bHRzIGZvciBjbHVlVGlwcy4gQXBwbHkgdG8gYWxsIGNhbGxzIHRvIHRoZSBjbHVlVGlwIHBsdWdpbi4KICoKICogQGV4YW1wbGUgJC5jbHVldGlwLnNldHVwKHsKICogICBpbnNlcnRpb25UeXBlOiAncHJlcGVuZFRvJywKICogICBpbnNlcnRpb25FbGVtZW50OiAnI2NvbnRhaW5lcicKICogfSk7CiAqIAogKiBAcHJvcGVydHkKICogQG5hbWUgJC5jbHVldGlwLnNldHVwCiAqIEB0eXBlIE1hcAogKiBAY2F0IFBsdWdpbnMvdG9vbHRpcAogKiBAb3B0aW9uIFN0cmluZyBpbnNlcnRpb25UeXBlOiBEZWZhdWx0IGlzICdhcHBlbmRUbycuIERldGVybWluZXMgdGhlIG1ldGhvZCB0byBiZSB1c2VkIGZvciBpbnNlcnRpbmcgdGhlIGNsdWVUaXAgaW50byB0aGUgRE9NLiBQZXJtaXR0ZWQgdmFsdWVzIGFyZSAnYXBwZW5kVG8nLCAncHJlcGVuZFRvJywgJ2luc2VydEJlZm9yZScsIGFuZCAnaW5zZXJ0QWZ0ZXInCiAqIEBvcHRpb24gU3RyaW5nIGluc2VydGlvbkVsZW1lbnQ6IERlZmF1bHQgaXMgJ2JvZHknLiBEZXRlcm1pbmVzIHdoaWNoIGVsZW1lbnQgaW4gdGhlIERPTSB0aGUgcGx1Z2luIHdpbGwgcmVmZXJlbmNlIHdoZW4gaW5zZXJ0aW5nIHRoZSBjbHVlVGlwLgogKgogKi8KICAgCiAgdmFyIGluc2VydGlvblR5cGUgPSAnYXBwZW5kVG8nLCBpbnNlcnRpb25FbGVtZW50ID0gJ2JvZHknOwogICQuY2x1ZXRpcCA9IHt9OwogICQuY2x1ZXRpcC5zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaW5zZXJ0aW9uVHlwZSAmJiAob3B0aW9ucy5pbnNlcnRpb25UeXBlKS5tYXRjaCgvYXBwZW5kVG98cHJlcGVuZFRvfGluc2VydEJlZm9yZXxpbnNlcnRBZnRlci8pKSB7CiAgICAgIGluc2VydGlvblR5cGUgPSBvcHRpb25zLmluc2VydGlvblR5cGU7CiAgICB9CiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmluc2VydGlvbkVsZW1lbnQpIHsKICAgICAgaW5zZXJ0aW9uRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0aW9uRWxlbWVudDsKICAgIH0KICB9OwogIAp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.dimensions-1.2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgQmFrYXVzIChwYXVsLmJha2F1c0Bnb29nbGVtYWlsLmNvbSkgYW5kIEJyYW5kb24gQWFyb24gKGJyYW5kb24uYWFyb25AZ21haWwuY29tIHx8IGh0dHA6Ly9icmFuZG9uYWFyb24ubmV0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQogKiBhbmQgR1BMIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocCkgbGljZW5zZXMuCiAqCiAqICRMYXN0Q2hhbmdlZERhdGU6IDIwMDgtMDItMjggMDU6NDk6NTUgLTA1MDAgKFRodSwgMjggRmViIDIwMDgpICQKICogJFJldjogNDg0MSAkCiAqCiAqIFZlcnNpb246IEBWRVJTSU9OCiAqCiAqIFJlcXVpcmVzOiBqUXVlcnkgMS4yKwogKi8KCihmdW5jdGlvbigkKXsKCQokLmRpbWVuc2lvbnMgPSB7Cgl2ZXJzaW9uOiAnQFZFUlNJT04nCn07CgovLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKJC5lYWNoKCBbICdIZWlnaHQnLCAnV2lkdGgnIF0sIGZ1bmN0aW9uKGksIG5hbWUpewoJCgkvLyBpbm5lckhlaWdodCBhbmQgaW5uZXJXaWR0aAoJJC5mblsgJ2lubmVyJyArIG5hbWUgXSA9IGZ1bmN0aW9uKCkgewoJCWlmICghdGhpc1swXSkgcmV0dXJuOwoJCQoJCXZhciB0b3JsID0gbmFtZSA9PSAnSGVpZ2h0JyA/ICdUb3AnICAgIDogJ0xlZnQnLCAgLy8gdG9wIG9yIGxlZnQKCQkgICAgYm9yciA9IG5hbWUgPT0gJ0hlaWdodCcgPyAnQm90dG9tJyA6ICdSaWdodCc7IC8vIGJvdHRvbSBvciByaWdodAoKICAgIHJldHVybiB0aGlzLmNzcygnZGlzcGxheScpICE9ICdub25lJyA/IHRoaXNbMF1bJ2NsaWVudCcgKyBuYW1lXSA6IG51bSggdGhpcywgbmFtZS50b0xvd2VyQ2FzZSgpICkgKyBudW0odGhpcywgJ3BhZGRpbmcnICsgdG9ybCkgKyBudW0odGhpcywgJ3BhZGRpbmcnICsgYm9ycik7Cgl9OwoJCgkvLyBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aAoJJC5mblsgJ291dGVyJyArIG5hbWUgXSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCQlpZiAoIXRoaXNbMF0pIHJldHVybjsKCQkKCQl2YXIgdG9ybCA9IG5hbWUgPT0gJ0hlaWdodCcgPyAnVG9wJyAgICA6ICdMZWZ0JywgIC8vIHRvcCBvciBsZWZ0CgkJICAgIGJvcnIgPSBuYW1lID09ICdIZWlnaHQnID8gJ0JvdHRvbScgOiAnUmlnaHQnOyAvLyBib3R0b20gb3IgcmlnaHQKCQkKCQlvcHRpb25zID0gJC5leHRlbmQoeyBtYXJnaW46IGZhbHNlIH0sIG9wdGlvbnMgfHwge30pOwoJCXZhciB2YWwgPSB0aGlzLmNzcygnZGlzcGxheScpICE9ICdub25lJyA/IAoJCQkJdGhpc1swXVsnb2Zmc2V0JyArIG5hbWVdIDogCgkJCQludW0oIHRoaXMsIG5hbWUudG9Mb3dlckNhc2UoKSApCgkJCQkJKyBudW0odGhpcywgJ2JvcmRlcicgKyB0b3JsICsgJ1dpZHRoJykgKyBudW0odGhpcywgJ2JvcmRlcicgKyBib3JyICsgJ1dpZHRoJykKCQkJCQkrIG51bSh0aGlzLCAncGFkZGluZycgKyB0b3JsKSArIG51bSh0aGlzLCAncGFkZGluZycgKyBib3JyKTsKCQlyZXR1cm4gdmFsICsgKG9wdGlvbnMubWFyZ2luID8gKG51bSh0aGlzLCAnbWFyZ2luJyArIHRvcmwpICsgbnVtKHRoaXMsICdtYXJnaW4nICsgYm9ycikpIDogMCk7Cgl9Owp9KTsKCi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcwokLmVhY2goIFsnTGVmdCcsICdUb3AnXSwgZnVuY3Rpb24oaSwgbmFtZSkgewoJJC5mblsgJ3Njcm9sbCcgKyBuYW1lIF0gPSBmdW5jdGlvbih2YWwpIHsKCQlpZiAoIXRoaXNbMF0pIHJldHVybjsKCQkKCQlyZXR1cm4gdmFsICE9IHVuZGVmaW5lZCA/CgkJCgkJCS8vIFNldCB0aGUgc2Nyb2xsIG9mZnNldAoJCQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQl0aGlzID09IHdpbmRvdyB8fCB0aGlzID09IGRvY3VtZW50ID8KCQkJCQl3aW5kb3cuc2Nyb2xsVG8oIAoJCQkJCQluYW1lID09ICdMZWZ0JyA/IHZhbCA6ICQod2luZG93KVsgJ3Njcm9sbExlZnQnIF0oKSwKCQkJCQkJbmFtZSA9PSAnVG9wJyAgPyB2YWwgOiAkKHdpbmRvdylbICdzY3JvbGxUb3AnICBdKCkKCQkJCQkpIDoKCQkJCQl0aGlzWyAnc2Nyb2xsJyArIG5hbWUgXSA9IHZhbDsKCQkJfSkgOgoJCQkKCQkJLy8gUmV0dXJuIHRoZSBzY3JvbGwgb2Zmc2V0CgkJCXRoaXNbMF0gPT0gd2luZG93IHx8IHRoaXNbMF0gPT0gZG9jdW1lbnQgPwoJCQkJc2VsZlsgKG5hbWUgPT0gJ0xlZnQnID8gJ3BhZ2VYT2Zmc2V0JyA6ICdwYWdlWU9mZnNldCcpIF0gfHwKCQkJCQkkLmJveE1vZGVsICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgJ3Njcm9sbCcgKyBuYW1lIF0gfHwKCQkJCQlkb2N1bWVudC5ib2R5WyAnc2Nyb2xsJyArIG5hbWUgXSA6CgkJCQl0aGlzWzBdWyAnc2Nyb2xsJyArIG5hbWUgXTsKCX07Cn0pOwoKJC5mbi5leHRlbmQoewoJcG9zaXRpb246IGZ1bmN0aW9uKCkgewoJCXZhciBsZWZ0ID0gMCwgdG9wID0gMCwgZWxlbSA9IHRoaXNbMF0sIG9mZnNldCwgcGFyZW50T2Zmc2V0LCBvZmZzZXRQYXJlbnQsIHJlc3VsdHM7CgkJCgkJaWYgKGVsZW0pIHsKCQkJLy8gR2V0ICpyZWFsKiBvZmZzZXRQYXJlbnQKCQkJb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQoKTsKCQkJCgkJCS8vIEdldCBjb3JyZWN0IG9mZnNldHMKCQkJb2Zmc2V0ICAgICAgID0gdGhpcy5vZmZzZXQoKTsKCQkJcGFyZW50T2Zmc2V0ID0gb2Zmc2V0UGFyZW50Lm9mZnNldCgpOwoJCQkKCQkJLy8gU3VidHJhY3QgZWxlbWVudCBtYXJnaW5zCgkJCW9mZnNldC50b3AgIC09IG51bShlbGVtLCAnbWFyZ2luVG9wJyk7CgkJCW9mZnNldC5sZWZ0IC09IG51bShlbGVtLCAnbWFyZ2luTGVmdCcpOwoJCQkKCQkJLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCgkJCXBhcmVudE9mZnNldC50b3AgICs9IG51bShvZmZzZXRQYXJlbnQsICdib3JkZXJUb3BXaWR0aCcpOwoJCQlwYXJlbnRPZmZzZXQubGVmdCArPSBudW0ob2Zmc2V0UGFyZW50LCAnYm9yZGVyTGVmdFdpZHRoJyk7CgkJCQoJCQkvLyBTdWJ0cmFjdCB0aGUgdHdvIG9mZnNldHMKCQkJcmVzdWx0cyA9IHsKCQkJCXRvcDogIG9mZnNldC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCwKCQkJCWxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQKCQkJfTsKCQl9CgkJCgkJcmV0dXJuIHJlc3VsdHM7Cgl9LAoJCglvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkgewoJCXZhciBvZmZzZXRQYXJlbnQgPSB0aGlzWzBdLm9mZnNldFBhcmVudDsKCQl3aGlsZSAoIG9mZnNldFBhcmVudCAmJiAoIS9eYm9keXxodG1sJC9pLnRlc3Qob2Zmc2V0UGFyZW50LnRhZ05hbWUpICYmICQuY3NzKG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT0gJ3N0YXRpYycpICkKCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDsKCQlyZXR1cm4gJChvZmZzZXRQYXJlbnQpOwoJfQp9KTsKCmZ1bmN0aW9uIG51bShlbCwgcHJvcCkgewoJcmV0dXJuIHBhcnNlSW50KCQuY3VyQ1NTKGVsLmpxdWVyeT9lbFswXTplbCxwcm9wLHRydWUpKXx8MDsKfTsKCn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.dimensions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQ29weXJpZ2h0IChjKSAyMDA3IFBhdWwgQmFrYXVzIChwYXVsLmJha2F1c0Bnb29nbGVtYWlsLmNvbSkgYW5kIEJyYW5kb24gQWFyb24gKGJyYW5kb24uYWFyb25AZ21haWwuY29tIHx8IGh0dHA6Ly9icmFuZG9uYWFyb24ubmV0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKQogKiBhbmQgR1BMIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLnBocCkgbGljZW5zZXMuCiAqCiAqICRMYXN0Q2hhbmdlZERhdGU6IDIwMDctMDgtMTcgMTQ6MTQ6MTEgLTA0MDAgKEZyaSwgMTcgQXVnIDIwMDcpICQKICogJFJldjogMjc1OSAkCiAqCiAqIFZlcnNpb246IDEuMS4yCiAqCiAqIFJlcXVpcmVzOiBqUXVlcnkgMS4xLjMrCiAqLwoKKGZ1bmN0aW9uKCQpewoKLy8gc3RvcmUgYSBjb3B5IG9mIHRoZSBjb3JlIGhlaWdodCBhbmQgd2lkdGggbWV0aG9kcwp2YXIgaGVpZ2h0ID0gJC5mbi5oZWlnaHQsCiAgICB3aWR0aCAgPSAkLmZuLndpZHRoOwoKJC5mbi5leHRlbmQoewoJLyoqCgkgKiBJZiB1c2VkIG9uIGRvY3VtZW50LCByZXR1cm5zIHRoZSBkb2N1bWVudCdzIGhlaWdodCAoaW5uZXJIZWlnaHQpLgoJICogSWYgdXNlZCBvbiB3aW5kb3csIHJldHVybnMgdGhlIHZpZXdwb3J0J3MgKHdpbmRvdykgaGVpZ2h0LgoJICogU2VlIGNvcmUgZG9jcyBvbiBoZWlnaHQoKSB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gdXNlZCBvbiBhbiBlbGVtZW50LgoJICoKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2IikuaGVpZ2h0KCkKCSAqIEByZXN1bHQgMjAwCgkgKgoJICogQGV4YW1wbGUgJChkb2N1bWVudCkuaGVpZ2h0KCkKCSAqIEByZXN1bHQgODAwCgkgKgoJICogQGV4YW1wbGUgJCh3aW5kb3cpLmhlaWdodCgpCgkgKiBAcmVzdWx0IDQwMAoJICoKCSAqIEBuYW1lIGhlaWdodAoJICogQHR5cGUgTnVtYmVyCgkgKiBAY2F0IFBsdWdpbnMvRGltZW5zaW9ucwoJICovCgloZWlnaHQ6IGZ1bmN0aW9uKCkgewoJCWlmICggIXRoaXNbMF0gKSBlcnJvcigpOwoJCWlmICggdGhpc1swXSA9PSB3aW5kb3cgKQoJCQlpZiAoICQuYnJvd3Nlci5vcGVyYSB8fCAoJC5icm93c2VyLnNhZmFyaSAmJiBwYXJzZUludCgkLmJyb3dzZXIudmVyc2lvbikgPiA1MjApICkKCQkJCXJldHVybiBzZWxmLmlubmVySGVpZ2h0IC0gKCgkKGRvY3VtZW50KS5oZWlnaHQoKSA+IHNlbGYuaW5uZXJIZWlnaHQpID8gZ2V0U2Nyb2xsYmFyV2lkdGgoKSA6IDApOwoKCQkJZWxzZSBpZiAoICQuYnJvd3Nlci5zYWZhcmkgKQoJCQkJcmV0dXJuIHNlbGYuaW5uZXJIZWlnaHQ7CgkJCWVsc2UKICAgICAgICAgIC8vcmV0dXJuICQuYm94TW9kZWwgJiYgTWF0aC5taW4oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCk7CiAgICAgIAkJcmV0dXJuICQuYm94TW9kZWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsKCQlpZiAoIHRoaXNbMF0gPT0gZG9jdW1lbnQgKSAKCQkJcmV0dXJuIE1hdGgubWF4KCAoJC5ib3hNb2RlbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KSwgZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQgKTsKCQkKCQlyZXR1cm4gaGVpZ2h0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cgl9LAoJCgkvKioKCSAqIElmIHVzZWQgb24gZG9jdW1lbnQsIHJldHVybnMgdGhlIGRvY3VtZW50J3Mgd2lkdGggKGlubmVyV2lkdGgpLgoJICogSWYgdXNlZCBvbiB3aW5kb3csIHJldHVybnMgdGhlIHZpZXdwb3J0J3MgKHdpbmRvdykgd2lkdGguCgkgKiBTZWUgY29yZSBkb2NzIG9uIHdpZHRoKCkgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIHVzZWQgb24gYW4gZWxlbWVudC4KCSAqCgkgKiBAZXhhbXBsZSAkKCIjdGVzdGRpdiIpLndpZHRoKCkKCSAqIEByZXN1bHQgMjAwCgkgKgoJICogQGV4YW1wbGUgJChkb2N1bWVudCkud2lkdGgoKQoJICogQHJlc3VsdCA4MDAKCSAqCgkgKiBAZXhhbXBsZSAkKHdpbmRvdykud2lkdGgoKQoJICogQHJlc3VsdCA0MDAKCSAqCgkgKiBAbmFtZSB3aWR0aAoJICogQHR5cGUgTnVtYmVyCgkgKiBAY2F0IFBsdWdpbnMvRGltZW5zaW9ucwoJICovCgl3aWR0aDogZnVuY3Rpb24oKSB7CgkJaWYgKCF0aGlzWzBdKSBlcnJvcigpOwoJCWlmICggdGhpc1swXSA9PSB3aW5kb3cgKQoJCQlpZiAoICQuYnJvd3Nlci5vcGVyYSB8fCAoJC5icm93c2VyLnNhZmFyaSAmJiBwYXJzZUludCgkLmJyb3dzZXIudmVyc2lvbikgPiA1MjApICkKCQkJCXJldHVybiBzZWxmLmlubmVyV2lkdGggLSAoKCQoZG9jdW1lbnQpLndpZHRoKCkgPiBzZWxmLmlubmVyV2lkdGgpID8gZ2V0U2Nyb2xsYmFyV2lkdGgoKSA6IDApOwoJCQllbHNlIGlmICggJC5icm93c2VyLnNhZmFyaSApCgkJCQlyZXR1cm4gc2VsZi5pbm5lcldpZHRoOwoJCQllbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gJC5ib3hNb2RlbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsKCgkJaWYgKCB0aGlzWzBdID09IGRvY3VtZW50ICkKCQkJaWYgKCQuYnJvd3Nlci5tb3ppbGxhKSB7CgkJCQkvLyBtb3ppbGxhIHJlcG9ydHMgc2Nyb2xsV2lkdGggYW5kIG9mZnNldFdpZHRoIGFzIHRoZSBzYW1lCgkJCQl2YXIgc2Nyb2xsTGVmdCA9IHNlbGYucGFnZVhPZmZzZXQ7CgkJCQlzZWxmLnNjcm9sbFRvKDk5OTk5OTk5LCBzZWxmLnBhZ2VZT2Zmc2V0KTsKCQkJCXZhciBzY3JvbGxXaWR0aCA9IHNlbGYucGFnZVhPZmZzZXQ7CgkJCQlzZWxmLnNjcm9sbFRvKHNjcm9sbExlZnQsIHNlbGYucGFnZVlPZmZzZXQpOwoJCQkJcmV0dXJuIGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggKyBzY3JvbGxXaWR0aDsKCQkJfQoJCQllbHNlIAoJCQkJcmV0dXJuIE1hdGgubWF4KCAoKCQuYm94TW9kZWwgJiYgISQuYnJvd3Nlci5zYWZhcmkpICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoKSwgZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCApOwoKCQlyZXR1cm4gd2lkdGguYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCX0sCgkKCS8qKgoJICogR2V0cyB0aGUgaW5uZXIgaGVpZ2h0IChleGNsdWRlcyB0aGUgYm9yZGVyIGFuZCBpbmNsdWRlcyB0aGUgcGFkZGluZykgZm9yIHRoZSBmaXJzdCBtYXRjaGVkIGVsZW1lbnQuCgkgKiBJZiB1c2VkIG9uIGRvY3VtZW50LCByZXR1cm5zIHRoZSBkb2N1bWVudCdzIGhlaWdodCAoaW5uZXJIZWlnaHQpLgoJICogSWYgdXNlZCBvbiB3aW5kb3csIHJldHVybnMgdGhlIHZpZXdwb3J0J3MgKHdpbmRvdykgaGVpZ2h0LgoJICoKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2IikuaW5uZXJIZWlnaHQoKQoJICogQHJlc3VsdCAyMTAKCSAqCgkgKiBAbmFtZSBpbm5lckhlaWdodAoJICogQHR5cGUgTnVtYmVyCgkgKiBAY2F0IFBsdWdpbnMvRGltZW5zaW9ucwoJICovCglpbm5lckhlaWdodDogZnVuY3Rpb24oKSB7CgkJaWYgKCF0aGlzWzBdKSBlcnJvcigpOwoJCXJldHVybiB0aGlzWzBdID09IHdpbmRvdyB8fCB0aGlzWzBdID09IGRvY3VtZW50ID8KCQkJdGhpcy5oZWlnaHQoKSA6CgkJCXRoaXMuaXMoJzp2aXNpYmxlJykgPwoJCQkJdGhpc1swXS5vZmZzZXRIZWlnaHQgLSBudW0odGhpcywgJ2JvcmRlclRvcFdpZHRoJykgLSBudW0odGhpcywgJ2JvcmRlckJvdHRvbVdpZHRoJykgOgoJCQkJdGhpcy5oZWlnaHQoKSArIG51bSh0aGlzLCAncGFkZGluZ1RvcCcpICsgbnVtKHRoaXMsICdwYWRkaW5nQm90dG9tJyk7Cgl9LAoJCgkvKioKCSAqIEdldHMgdGhlIGlubmVyIHdpZHRoIChleGNsdWRlcyB0aGUgYm9yZGVyIGFuZCBpbmNsdWRlcyB0aGUgcGFkZGluZykgZm9yIHRoZSBmaXJzdCBtYXRjaGVkIGVsZW1lbnQuCgkgKiBJZiB1c2VkIG9uIGRvY3VtZW50LCByZXR1cm5zIHRoZSBkb2N1bWVudCdzIHdpZHRoIChpbm5lcldpZHRoKS4KCSAqIElmIHVzZWQgb24gd2luZG93LCByZXR1cm5zIHRoZSB2aWV3cG9ydCdzICh3aW5kb3cpIHdpZHRoLgoJICoKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2IikuaW5uZXJXaWR0aCgpCgkgKiBAcmVzdWx0IDIxMAoJICoKCSAqIEBuYW1lIGlubmVyV2lkdGgKCSAqIEB0eXBlIE51bWJlcgoJICogQGNhdCBQbHVnaW5zL0RpbWVuc2lvbnMKCSAqLwoJaW5uZXJXaWR0aDogZnVuY3Rpb24oKSB7CgkJaWYgKCF0aGlzWzBdKSBlcnJvcigpOwoJCXJldHVybiB0aGlzWzBdID09IHdpbmRvdyB8fCB0aGlzWzBdID09IGRvY3VtZW50ID8KCQkJdGhpcy53aWR0aCgpIDoKCQkJdGhpcy5pcygnOnZpc2libGUnKSA/CgkJCQl0aGlzWzBdLm9mZnNldFdpZHRoIC0gbnVtKHRoaXMsICdib3JkZXJMZWZ0V2lkdGgnKSAtIG51bSh0aGlzLCAnYm9yZGVyUmlnaHRXaWR0aCcpIDoKCQkJCXRoaXMud2lkdGgoKSArIG51bSh0aGlzLCAncGFkZGluZ0xlZnQnKSArIG51bSh0aGlzLCAncGFkZGluZ1JpZ2h0Jyk7Cgl9LAoJCgkvKioKCSAqIEdldHMgdGhlIG91dGVyIGhlaWdodCAoaW5jbHVkZXMgdGhlIGJvcmRlciBhbmQgcGFkZGluZykgZm9yIHRoZSBmaXJzdCBtYXRjaGVkIGVsZW1lbnQuCgkgKiBJZiB1c2VkIG9uIGRvY3VtZW50LCByZXR1cm5zIHRoZSBkb2N1bWVudCdzIGhlaWdodCAoaW5uZXJIZWlnaHQpLgoJICogSWYgdXNlZCBvbiB3aW5kb3csIHJldHVybnMgdGhlIHZpZXdwb3J0J3MgKHdpbmRvdykgaGVpZ2h0LgoJICoKCSAqIFRoZSBtYXJnaW4gY2FuIGJlIGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbiBieSBwYXNzaW5nIGFuIG9wdGlvbnMgbWFwIHdpdGggbWFyZ2luCgkgKiBzZXQgdG8gdHJ1ZS4KCSAqCgkgKiBAZXhhbXBsZSAkKCIjdGVzdGRpdiIpLm91dGVySGVpZ2h0KCkKCSAqIEByZXN1bHQgMjIwCgkgKgoJICogQGV4YW1wbGUgJCgiI3Rlc3RkaXYiKS5vdXRlckhlaWdodCh7IG1hcmdpbjogdHJ1ZSB9KQoJICogQHJlc3VsdCAyNDAKCSAqCgkgKiBAbmFtZSBvdXRlckhlaWdodAoJICogQHR5cGUgTnVtYmVyCgkgKiBAcGFyYW0gTWFwIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgdG8gY29uZmlndXJlIHRoZSB3YXkgdGhlIG91dGVyIGhlaWdodCBpcyBjYWxjdWxhdGVkLgoJICogQGNhdCBQbHVnaW5zL0RpbWVuc2lvbnMKCSAqLwoJb3V0ZXJIZWlnaHQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCQlpZiAoIXRoaXNbMF0pIGVycm9yKCk7CgkJb3B0aW9ucyA9ICQuZXh0ZW5kKHsgbWFyZ2luOiBmYWxzZSB9LCBvcHRpb25zIHx8IHt9KTsKCQlyZXR1cm4gdGhpc1swXSA9PSB3aW5kb3cgfHwgdGhpc1swXSA9PSBkb2N1bWVudCA/CgkJCXRoaXMuaGVpZ2h0KCkgOgoJCQl0aGlzLmlzKCc6dmlzaWJsZScpID8KCQkJCXRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgKG9wdGlvbnMubWFyZ2luID8gKG51bSh0aGlzLCAnbWFyZ2luVG9wJykgKyBudW0odGhpcywgJ21hcmdpbkJvdHRvbScpKSA6IDApIDoKCQkJCXRoaXMuaGVpZ2h0KCkgCgkJCQkJKyBudW0odGhpcywnYm9yZGVyVG9wV2lkdGgnKSArIG51bSh0aGlzLCAnYm9yZGVyQm90dG9tV2lkdGgnKSAKCQkJCQkrIG51bSh0aGlzLCAncGFkZGluZ1RvcCcpICsgbnVtKHRoaXMsICdwYWRkaW5nQm90dG9tJykKCQkJCQkrIChvcHRpb25zLm1hcmdpbiA/IChudW0odGhpcywgJ21hcmdpblRvcCcpICsgbnVtKHRoaXMsICdtYXJnaW5Cb3R0b20nKSkgOiAwKTsKCX0sCgkKCS8qKgoJICogR2V0cyB0aGUgb3V0ZXIgd2lkdGggKGluY2x1ZGluZyB0aGUgYm9yZGVyIGFuZCBwYWRkaW5nKSBmb3IgdGhlIGZpcnN0IG1hdGNoZWQgZWxlbWVudC4KCSAqIElmIHVzZWQgb24gZG9jdW1lbnQsIHJldHVybnMgdGhlIGRvY3VtZW50J3Mgd2lkdGggKGlubmVyV2lkdGgpLgoJICogSWYgdXNlZCBvbiB3aW5kb3csIHJldHVybnMgdGhlIHZpZXdwb3J0J3MgKHdpbmRvdykgd2lkdGguCgkgKgoJICogVGhlIG1hcmdpbiBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9uIGJ5IHBhc3NpbmcgYW4gb3B0aW9ucyBtYXAgd2l0aCBtYXJnaW4KCSAqIHNldCB0byB0cnVlLgoJICoKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2Iikub3V0ZXJXaWR0aCgpCgkgKiBAcmVzdWx0IDEwMDAKCSAqCgkgKiBAZXhhbXBsZSAkKCIjdGVzdGRpdiIpLm91dGVyV2lkdGgoeyBtYXJnaW46IHRydWUgfSkKCSAqIEByZXN1bHQgMTAyMAoJICogCgkgKiBAbmFtZSBvdXRlckhlaWdodAoJICogQHR5cGUgTnVtYmVyCgkgKiBAcGFyYW0gTWFwIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgdG8gY29uZmlndXJlIHRoZSB3YXkgdGhlIG91dGVyIHdpZHRoIGlzIGNhbGN1bGF0ZWQuCgkgKiBAY2F0IFBsdWdpbnMvRGltZW5zaW9ucwoJICovCglvdXRlcldpZHRoOiBmdW5jdGlvbihvcHRpb25zKSB7CgkJaWYgKCF0aGlzWzBdKSBlcnJvcigpOwoJCW9wdGlvbnMgPSAkLmV4dGVuZCh7IG1hcmdpbjogZmFsc2UgfSwgb3B0aW9ucyB8fCB7fSk7CgkJcmV0dXJuIHRoaXNbMF0gPT0gd2luZG93IHx8IHRoaXNbMF0gPT0gZG9jdW1lbnQgPwoJCQl0aGlzLndpZHRoKCkgOgoJCQl0aGlzLmlzKCc6dmlzaWJsZScpID8KCQkJCXRoaXNbMF0ub2Zmc2V0V2lkdGggKyAob3B0aW9ucy5tYXJnaW4gPyAobnVtKHRoaXMsICdtYXJnaW5MZWZ0JykgKyBudW0odGhpcywgJ21hcmdpblJpZ2h0JykpIDogMCkgOgoJCQkJdGhpcy53aWR0aCgpIAoJCQkJCSsgbnVtKHRoaXMsICdib3JkZXJMZWZ0V2lkdGgnKSArIG51bSh0aGlzLCAnYm9yZGVyUmlnaHRXaWR0aCcpIAoJCQkJCSsgbnVtKHRoaXMsICdwYWRkaW5nTGVmdCcpICsgbnVtKHRoaXMsICdwYWRkaW5nUmlnaHQnKQoJCQkJCSsgKG9wdGlvbnMubWFyZ2luID8gKG51bSh0aGlzLCAnbWFyZ2luTGVmdCcpICsgbnVtKHRoaXMsICdtYXJnaW5SaWdodCcpKSA6IDApOwoJfSwKCQoJLyoqCgkgKiBHZXRzIGhvdyBtYW55IHBpeGVscyB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIHJpZ2h0IChzY3JvbGxMZWZ0KS4KCSAqIFdvcmtzIG9uIGNvbnRhaW5lcnMgd2l0aCBvdmVyZmxvdzogYXV0byBhbmQgd2luZG93L2RvY3VtZW50LgoJICoKCSAqIEBleGFtcGxlICQod2luZG93KS5zY3JvbGxMZWZ0KCkKCSAqIEByZXN1bHQgMTAwCgkgKgoJICogQGV4YW1wbGUgJChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpCgkgKiBAcmVzdWx0IDEwMAoJICogCgkgKiBAZXhhbXBsZSAkKCIjdGVzdGRpdiIpLnNjcm9sbExlZnQoKQoJICogQHJlc3VsdCAxMDAKCSAqCgkgKiBAbmFtZSBzY3JvbGxMZWZ0CgkgKiBAdHlwZSBOdW1iZXIKCSAqIEBjYXQgUGx1Z2lucy9EaW1lbnNpb25zCgkgKi8KCS8qKgoJICogU2V0cyB0aGUgc2Nyb2xsTGVmdCBwcm9wZXJ0eSBmb3IgZWFjaCBlbGVtZW50IGFuZCBjb250aW51ZXMgdGhlIGNoYWluLgoJICogV29ya3Mgb24gY29udGFpbmVycyB3aXRoIG92ZXJmbG93OiBhdXRvIGFuZCB3aW5kb3cvZG9jdW1lbnQuCgkgKgoJICogQGV4YW1wbGUgJCh3aW5kb3cpLnNjcm9sbExlZnQoMTAwKS5zY3JvbGxMZWZ0KCkKCSAqIEByZXN1bHQgMTAwCgkgKiAKCSAqIEBleGFtcGxlICQoZG9jdW1lbnQpLnNjcm9sbExlZnQoMTAwKS5zY3JvbGxMZWZ0KCkKCSAqIEByZXN1bHQgMTAwCgkgKgoJICogQGV4YW1wbGUgJCgiI3Rlc3RkaXYiKS5zY3JvbGxMZWZ0KDEwMCkuc2Nyb2xsTGVmdCgpCgkgKiBAcmVzdWx0IDEwMAoJICoKCSAqIEBuYW1lIHNjcm9sbExlZnQKCSAqIEBwYXJhbSBOdW1iZXIgdmFsdWUgQSBwb3NpdGl2ZSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBkZXNpcmVkIHNjcm9sbExlZnQuCgkgKiBAdHlwZSBqUXVlcnkKCSAqIEBjYXQgUGx1Z2lucy9EaW1lbnNpb25zCgkgKi8KCXNjcm9sbExlZnQ6IGZ1bmN0aW9uKHZhbCkgewoJCWlmICghdGhpc1swXSkgZXJyb3IoKTsKCQlpZiAoIHZhbCAhPSB1bmRlZmluZWQgKQoJCQkvLyBzZXQgdGhlIHNjcm9sbCBsZWZ0CgkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQlpZiAodGhpcyA9PSB3aW5kb3cgfHwgdGhpcyA9PSBkb2N1bWVudCkKCQkJCQl3aW5kb3cuc2Nyb2xsVG8oIHZhbCwgJCh3aW5kb3cpLnNjcm9sbFRvcCgpICk7CgkJCQllbHNlCgkJCQkJdGhpcy5zY3JvbGxMZWZ0ID0gdmFsOwoJCQl9KTsKCQkKCQkvLyByZXR1cm4gdGhlIHNjcm9sbCBsZWZ0IG9mZmVzdCBpbiBwaXhlbHMKCQlpZiAoIHRoaXNbMF0gPT0gd2luZG93IHx8IHRoaXNbMF0gPT0gZG9jdW1lbnQgKQoJCQlyZXR1cm4gc2VsZi5wYWdlWE9mZnNldCB8fAoJCQkJJC5ib3hNb2RlbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fAoJCQkJZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OwoJCQkJCgkJcmV0dXJuIHRoaXNbMF0uc2Nyb2xsTGVmdDsKCX0sCgkKCS8qKgoJICogR2V0cyBob3cgbWFueSBwaXhlbHMgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gKHNjcm9sbFRvcCkuCgkgKiBXb3JrcyBvbiBjb250YWluZXJzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHdpbmRvdy9kb2N1bWVudC4KCSAqCgkgKiBAZXhhbXBsZSAkKHdpbmRvdykuc2Nyb2xsVG9wKCkKCSAqIEByZXN1bHQgMTAwCgkgKgoJICogQGV4YW1wbGUgJChkb2N1bWVudCkuc2Nyb2xsVG9wKCkKCSAqIEByZXN1bHQgMTAwCgkgKiAKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2Iikuc2Nyb2xsVG9wKCkKCSAqIEByZXN1bHQgMTAwCgkgKgoJICogQG5hbWUgc2Nyb2xsVG9wCgkgKiBAdHlwZSBOdW1iZXIKCSAqIEBjYXQgUGx1Z2lucy9EaW1lbnNpb25zCgkgKi8KCS8qKgoJICogU2V0cyB0aGUgc2Nyb2xsVG9wIHByb3BlcnR5IGZvciBlYWNoIGVsZW1lbnQgYW5kIGNvbnRpbnVlcyB0aGUgY2hhaW4uCgkgKiBXb3JrcyBvbiBjb250YWluZXJzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHdpbmRvdy9kb2N1bWVudC4KCSAqCgkgKiBAZXhhbXBsZSAkKHdpbmRvdykuc2Nyb2xsVG9wKDEwMCkuc2Nyb2xsVG9wKCkKCSAqIEByZXN1bHQgMTAwCgkgKiAKCSAqIEBleGFtcGxlICQoZG9jdW1lbnQpLnNjcm9sbFRvcCgxMDApLnNjcm9sbFRvcCgpCgkgKiBAcmVzdWx0IDEwMAoJICoKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2Iikuc2Nyb2xsVG9wKDEwMCkuc2Nyb2xsVG9wKCkKCSAqIEByZXN1bHQgMTAwCgkgKgoJICogQG5hbWUgc2Nyb2xsVG9wCgkgKiBAcGFyYW0gTnVtYmVyIHZhbHVlIEEgcG9zaXRpdmUgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgZGVzaXJlZCBzY3JvbGxUb3AuCgkgKiBAdHlwZSBqUXVlcnkKCSAqIEBjYXQgUGx1Z2lucy9EaW1lbnNpb25zCgkgKi8KCXNjcm9sbFRvcDogZnVuY3Rpb24odmFsKSB7CgkJaWYgKCF0aGlzWzBdKSBlcnJvcigpOwoJCWlmICggdmFsICE9IHVuZGVmaW5lZCApCgkJCS8vIHNldCB0aGUgc2Nyb2xsIHRvcAoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJaWYgKHRoaXMgPT0gd2luZG93IHx8IHRoaXMgPT0gZG9jdW1lbnQpCgkJCQkJd2luZG93LnNjcm9sbFRvKCAkKHdpbmRvdykuc2Nyb2xsTGVmdCgpLCB2YWwgKTsKCQkJCWVsc2UKCQkJCQl0aGlzLnNjcm9sbFRvcCA9IHZhbDsKCQkJfSk7CgkJCgkJLy8gcmV0dXJuIHRoZSBzY3JvbGwgdG9wIG9mZnNldCBpbiBwaXhlbHMKCQlpZiAoIHRoaXNbMF0gPT0gd2luZG93IHx8IHRoaXNbMF0gPT0gZG9jdW1lbnQgKQoJCQlyZXR1cm4gc2VsZi5wYWdlWU9mZnNldCB8fAoJCQkJJC5ib3hNb2RlbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8CgkJCQlkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKCgkJcmV0dXJuIHRoaXNbMF0uc2Nyb2xsVG9wOwoJfSwKCQoJLyoqIAoJICogR2V0cyB0aGUgdG9wIGFuZCBsZWZ0IHBvc2l0aW9uZWQgb2Zmc2V0IGluIHBpeGVscy4KCSAqIFRoZSBwb3NpdGlvbmVkIG9mZnNldCBpcyB0aGUgb2Zmc2V0IGJldHdlZW4gYSBwb3NpdGlvbmVkCgkgKiBwYXJlbnQgYW5kIHRoZSBlbGVtZW50IGl0c2VsZi4KCSAqCgkgKiBGb3IgYWNjdXJhdGUgY2FsY3VsYXRpb25zIG1ha2Ugc3VyZSB0byB1c2UgcGl4ZWwgdmFsdWVzIGZvciBtYXJnaW5zLCBib3JkZXJzIGFuZCBwYWRkaW5nLgoJICoKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2IikucG9zaXRpb24oKQoJICogQHJlc3VsdCB7IHRvcDogMTAwLCBsZWZ0OiAxMDAgfQoJICoKCSAqIEBleGFtcGxlIHZhciBwb3NpdGlvbiA9IHt9OwoJICogJCgiI3Rlc3RkaXYiKS5wb3NpdGlvbihwb3NpdGlvbikKCSAqIEByZXN1bHQgcG9zaXRpb24gPSB7IHRvcDogMTAwLCBsZWZ0OiAxMDAgfQoJICogCgkgKiBAbmFtZSBwb3NpdGlvbgoJICogQHBhcmFtIE9iamVjdCByZXR1cm5PYmplY3QgT3B0aW9uYWwgQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUgaW4sIHNvIGFzIG5vdCB0byBicmVhayB0aGUgY2hhaW4uIElmIHBhc3NlZCBpbiB0aGUKCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWluIHdpbGwgbm90IGJlIGJyb2tlbiBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgb2JqZWN0LgoJICogQHR5cGUgT2JqZWN0CgkgKiBAY2F0IFBsdWdpbnMvRGltZW5zaW9ucwoJICovCglwb3NpdGlvbjogZnVuY3Rpb24ocmV0dXJuT2JqZWN0KSB7CgkJcmV0dXJuIHRoaXMub2Zmc2V0KHsgbWFyZ2luOiBmYWxzZSwgc2Nyb2xsOiBmYWxzZSwgcmVsYXRpdmVUbzogdGhpcy5vZmZzZXRQYXJlbnQoKSB9LCByZXR1cm5PYmplY3QpOwoJfSwKCQoJLyoqCgkgKiBHZXRzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWxlbWVudCBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSB2aWV3cG9ydC4KCSAqIFRoZSBvZmZzZXQgbWV0aG9kIHRha2VzIGFuIG9wdGlvbmFsIG1hcCBvZiBrZXkgdmFsdWUgcGFpcnMgdG8gY29uZmlndXJlIHRoZSB3YXkKCSAqIHRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZC4gSGVyZSBhcmUgdGhlIGRpZmZlcmVudCBvcHRpb25zLgoJICoKCSAqIChCb29sZWFuKSBtYXJnaW4gLSBTaG91bGQgdGhlIG1hcmdpbiBvZiB0aGUgZWxlbWVudCBiZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zPyBUcnVlIGJ5IGRlZmF1bHQuCgkgKiAoQm9vbGVhbikgYm9yZGVyIC0gU2hvdWxkIHRoZSBib3JkZXIgb2YgdGhlIGVsZW1lbnQgYmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucz8gRmFsc2UgYnkgZGVmYXVsdC4gCgkgKiAoQm9vbGVhbikgcGFkZGluZyAtIFNob3VsZCB0aGUgcGFkZGluZyBvZiB0aGUgZWxlbWVudCBiZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zPyBGYWxzZSBieSBkZWZhdWx0LiAKCSAqIChCb29sZWFuKSBzY3JvbGwgLSBTaG91bGQgdGhlIHNjcm9sbCBvZmZzZXRzIG9mIHRoZSBwYXJlbnQgZWxlbWVudHMgYmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucz8gVHJ1ZSBieSBkZWZhdWx0LgoJICogICAgICAgICAgICAgICAgICAgIFdoZW4gdHJ1ZSBpdCBhZGRzIHRoZSB0b3RhbCBzY3JvbGwgb2Zmc2V0cyBvZiBhbGwgcGFyZW50cyB0byB0aGUgdG90YWwgb2Zmc2V0IGFuZCBhbHNvIGFkZHMgdHdvCgkgKiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyB0byB0aGUgcmV0dXJuZWQgb2JqZWN0LCBzY3JvbGxUb3AgYW5kIHNjcm9sbExlZnQuCgkgKiAoQm9vbGVhbikgbGl0ZSAtIFdoZW4gdHJ1ZSBpdCB3aWxsIHVzZSB0aGUgb2Zmc2V0TGl0ZSBtZXRob2QgaW5zdGVhZCBvZiB0aGUgZnVsbC1ibG93biwgc2xvd2VyIG9mZnNldCBtZXRob2QuIEZhbHNlIGJ5IGRlZmF1bHQuCgkgKiAgICAgICAgICAgICAgICAgIE9ubHkgdXNlIHRoaXMgd2hlbiBtYXJnaW5zLCBib3JkZXJzIGFuZCBwYWRkaW5nIGNhbGN1bGF0aW9ucyBkb24ndCBtYXR0ZXIuCgkgKiAoSFRNTCBFbGVtZW50KSByZWxhdGl2ZVRvIC0gVGhpcyBzaG91bGQgYmUgYSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgYW5kIHNob3VsZCBoYXZlIHBvc2l0aW9uIChsaWtlIGFic29sdXRlIG9yIHJlbGF0aXZlKS4KCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCB3aWxsIHJldHJlaXZlIHRoZSBvZmZzZXQgcmVsYXRpdmUgdG8gdGhpcyBwYXJlbnQgZWxlbWVudC4gQnkgZGVmYXVsdCBpdCBpcyB0aGUgYm9keSBlbGVtZW50LgoJICoKCSAqIEFsc28gYW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBwYXJhbWF0ZXIgdG8KCSAqIGNhdGNoIHRoZSB2YWx1ZSBvZiB0aGUgcmV0dXJuIGFuZCBjb250aW51ZSB0aGUgY2hhaW4uCgkgKgoJICogRm9yIGFjY3VyYXRlIGNhbGN1bGF0aW9ucyBtYWtlIHN1cmUgdG8gdXNlIHBpeGVsIHZhbHVlcyBmb3IgbWFyZ2lucywgYm9yZGVycyBhbmQgcGFkZGluZy4KCSAqIAoJICogS25vd24gaXNzdWVzOgoJICogIC0gSXNzdWU6IEEgZGl2IHBvc2l0aW9uZWQgcmVsYXRpdmUgb3Igc3RhdGljIHdpdGhvdXQgYW55IGNvbnRlbnQgYmVmb3JlIGl0IGFuZCBpdHMgcGFyZW50IHdpbGwgcmVwb3J0IGFuIG9mZnNldFRvcCBvZiAwIGluIFNhZmFyaQoJICogICAgV29ya2Fyb3VuZDogUGxhY2UgY29udGVudCBiZWZvcmUgdGhlIHJlbGF0aXZlIGRpdiAuLi4gYW5kIHNldCBoZWlnaHQgYW5kIHdpZHRoIHRvIDAgYW5kIG92ZXJmbG93IHRvIGhpZGRlbgoJICoKCSAqIEBleGFtcGxlICQoIiN0ZXN0ZGl2Iikub2Zmc2V0KCkKCSAqIEByZXN1bHQgeyB0b3A6IDEwMCwgbGVmdDogMTAwLCBzY3JvbGxUb3A6IDEwLCBzY3JvbGxMZWZ0OiAxMCB9CgkgKgoJICogQGV4YW1wbGUgJCgiI3Rlc3RkaXYiKS5vZmZzZXQoeyBzY3JvbGw6IGZhbHNlIH0pCgkgKiBAcmVzdWx0IHsgdG9wOiA5MCwgbGVmdDogOTAgfQoJICoKCSAqIEBleGFtcGxlIHZhciBvZmZzZXQgPSB7fQoJICogJCgiI3Rlc3RkaXYiKS5vZmZzZXQoeyBzY3JvbGw6IGZhbHNlIH0sIG9mZnNldCkKCSAqIEByZXN1bHQgb2Zmc2V0ID0geyB0b3A6IDkwLCBsZWZ0OiA5MCB9CgkgKgoJICogQG5hbWUgb2Zmc2V0CgkgKiBAcGFyYW0gTWFwIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgdG8gY29uZmlndXJlIHRoZSB3YXkgdGhlIG9mZnNldCBpcyBjYWxjdWxhdGVkLgoJICogQHBhcmFtIE9iamVjdCByZXR1cm5PYmplY3QgQW4gb2JqZWN0IHRvIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUgaW4sIHNvIGFzIG5vdCB0byBicmVhayB0aGUgY2hhaW4uIElmIHBhc3NlZCBpbiB0aGUKCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWluIHdpbGwgbm90IGJlIGJyb2tlbiBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoaXMgb2JqZWN0LgoJICogQHR5cGUgT2JqZWN0CgkgKiBAY2F0IFBsdWdpbnMvRGltZW5zaW9ucwoJICovCglvZmZzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMsIHJldHVybk9iamVjdCkgewoJCWlmICghdGhpc1swXSkgZXJyb3IoKTsKCQl2YXIgeCA9IDAsIHkgPSAwLCBzbCA9IDAsIHN0ID0gMCwKCQkgICAgZWxlbSA9IHRoaXNbMF0sIHBhcmVudCA9IHRoaXNbMF0sIG9wLCBwYXJQb3MsIGVsZW1Qb3MgPSAkLmNzcyhlbGVtLCAncG9zaXRpb24nKSwKCQkgICAgbW8gPSAkLmJyb3dzZXIubW96aWxsYSwgaWUgPSAkLmJyb3dzZXIubXNpZSwgb2EgPSAkLmJyb3dzZXIub3BlcmEsCgkJICAgIHNmID0gJC5icm93c2VyLnNhZmFyaSwgc2YzID0gJC5icm93c2VyLnNhZmFyaSAmJiBwYXJzZUludCgkLmJyb3dzZXIudmVyc2lvbikgPiA1MjAsCgkJICAgIGFic3BhcmVudCA9IGZhbHNlLCByZWxwYXJlbnQgPSBmYWxzZSwgCgkJICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7IG1hcmdpbjogdHJ1ZSwgYm9yZGVyOiBmYWxzZSwgcGFkZGluZzogZmFsc2UsIHNjcm9sbDogdHJ1ZSwgbGl0ZTogZmFsc2UsIHJlbGF0aXZlVG86IGRvY3VtZW50LmJvZHkgfSwgb3B0aW9ucyB8fCB7fSk7CgkJCgkJLy8gVXNlIG9mZnNldExpdGUgaWYgbGl0ZSBvcHRpb24gaXMgdHJ1ZQoJCWlmIChvcHRpb25zLmxpdGUpIHJldHVybiB0aGlzLm9mZnNldExpdGUob3B0aW9ucywgcmV0dXJuT2JqZWN0KTsKCQkvLyBHZXQgdGhlIEhUTUxFbGVtZW50IGlmIHJlbGF0aXZlVG8gaXMgYSBqcXVlcnkgY29sbGVjdGlvbgoJCWlmIChvcHRpb25zLnJlbGF0aXZlVG8uanF1ZXJ5KSBvcHRpb25zLnJlbGF0aXZlVG8gPSBvcHRpb25zLnJlbGF0aXZlVG9bMF07CgkJCgkJaWYgKGVsZW0udGFnTmFtZSA9PSAnQk9EWScpIHsKCQkJLy8gU2FmYXJpIDIgaXMgdGhlIG9ubHkgb25lIHRvIGdldCBvZmZzZXRMZWZ0IGFuZCBvZmZzZXRUb3AgcHJvcGVydGllcyBvZiB0aGUgYm9keSAiY29ycmVjdCIKCQkJLy8gRXhjZXB0IHRoZXkgYWxsIG1lc3MgdXAgd2hlbiB0aGUgYm9keSBpcyBwb3NpdGlvbmVkIGFic29sdXRlIG9yIHJlbGF0aXZlCgkJCXggPSBlbGVtLm9mZnNldExlZnQ7CgkJCXkgPSBlbGVtLm9mZnNldFRvcDsKCQkJLy8gTW96aWxsYSBpZ25vcmVzIG1hcmdpbiBhbmQgc3VidHJhY3RzIGJvcmRlciBmcm9tIGJvZHkgZWxlbWVudAoJCQlpZiAobW8pIHsKCQkJCXggKz0gbnVtKGVsZW0sICdtYXJnaW5MZWZ0JykgKyAobnVtKGVsZW0sICdib3JkZXJMZWZ0V2lkdGgnKSoyKTsKCQkJCXkgKz0gbnVtKGVsZW0sICdtYXJnaW5Ub3AnKSAgKyAobnVtKGVsZW0sICdib3JkZXJUb3BXaWR0aCcpICoyKTsKCQkJfSBlbHNlCgkJCS8vIE9wZXJhIGlnbm9yZXMgbWFyZ2luCgkJCWlmIChvYSkgewoJCQkJeCArPSBudW0oZWxlbSwgJ21hcmdpbkxlZnQnKTsKCQkJCXkgKz0gbnVtKGVsZW0sICdtYXJnaW5Ub3AnKTsKCQkJfSBlbHNlCgkJCS8vIElFIGRvZXMgbm90IGFkZCB0aGUgYm9yZGVyIGluIFN0YW5kYXJkcyBNb2RlCgkJCWlmICgoaWUgJiYgalF1ZXJ5LmJveE1vZGVsKSkgewoJCQkJeCArPSBudW0oZWxlbSwgJ2JvcmRlckxlZnRXaWR0aCcpOwoJCQkJeSArPSBudW0oZWxlbSwgJ2JvcmRlclRvcFdpZHRoJyk7CgkJCX0gZWxzZQoJCQkvLyBTYWZhcmkgMyBkb2Vzbid0IG5vdCBpbmNsdWRlIGJvcmRlciBvciBtYXJnaW4KCQkJaWYgKHNmMykgewoJCQkJeCArPSBudW0oZWxlbSwgJ21hcmdpbkxlZnQnKSArIG51bShlbGVtLCAnYm9yZGVyTGVmdFdpZHRoJyk7CgkJCQl5ICs9IG51bShlbGVtLCAnbWFyZ2luVG9wJykgICsgbnVtKGVsZW0sICdib3JkZXJUb3BXaWR0aCcpOwoJCQl9CgkJfSBlbHNlIHsKCQkJZG8gewoJCQkJcGFyUG9zID0gJC5jc3MocGFyZW50LCAncG9zaXRpb24nKTsKCQkJCgkJCQl4ICs9IHBhcmVudC5vZmZzZXRMZWZ0OwoJCQkJeSArPSBwYXJlbnQub2Zmc2V0VG9wOwoKCQkJCS8vIE1vemlsbGEgYW5kIElFIGRvIG5vdCBhZGQgdGhlIGJvcmRlcgoJCQkJLy8gTW96aWxsYSBhZGRzIHRoZSBib3JkZXIgZm9yIHRhYmxlIGNlbGxzCgkJCQlpZiAoKG1vICYmICFwYXJlbnQudGFnTmFtZS5tYXRjaCgvXnRbZHxoXSQvaSkpIHx8IGllIHx8IHNmMykgewoJCQkJCS8vIGFkZCBib3JkZXJzIHRvIG9mZnNldAoJCQkJCXggKz0gbnVtKHBhcmVudCwgJ2JvcmRlckxlZnRXaWR0aCcpOwoJCQkJCXkgKz0gbnVtKHBhcmVudCwgJ2JvcmRlclRvcFdpZHRoJyk7CgoJCQkJCS8vIE1vemlsbGEgZG9lcyBub3QgaW5jbHVkZSB0aGUgYm9yZGVyIG9uIGJvZHkgaWYgYW4gZWxlbWVudCBpc24ndCBwb3NpdGlvbmVkIGFic29sdXRlIGFuZCBpcyB3aXRob3V0IGFuIGFic29sdXRlIHBhcmVudAoJCQkJCWlmIChtbyAmJiBwYXJQb3MgPT0gJ2Fic29sdXRlJykgYWJzcGFyZW50ID0gdHJ1ZTsKCQkJCQkvLyBJRSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBib3JkZXIgb24gdGhlIGJvZHkgaWYgYW4gZWxlbWVudCBpcyBwb3NpdGlvbiBzdGF0aWMgYW5kIHdpdGhvdXQgYW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGFyZW50CgkJCQkJaWYgKGllICYmIHBhclBvcyA9PSAncmVsYXRpdmUnKSByZWxwYXJlbnQgPSB0cnVlOwoJCQkJfQoKCQkJCW9wID0gcGFyZW50Lm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5OwoJCQkJaWYgKG9wdGlvbnMuc2Nyb2xsIHx8IG1vKSB7CgkJCQkJZG8gewoJCQkJCQlpZiAob3B0aW9ucy5zY3JvbGwpIHsKCQkJCQkJCS8vIGdldCBzY3JvbGwgb2Zmc2V0cwoJCQkJCQkJc2wgKz0gcGFyZW50LnNjcm9sbExlZnQ7CgkJCQkJCQlzdCArPSBwYXJlbnQuc2Nyb2xsVG9wOwoJCQkJCQl9CgkJCQkJCQoJCQkJCQkvLyBPcGVyYSBzb21ldGltZXMgaW5jb3JyZWN0bHkgcmVwb3J0cyBzY3JvbGwgb2Zmc2V0IGZvciBlbGVtZW50cyB3aXRoIGRpc3BsYXkgc2V0IHRvIHRhYmxlLXJvdyBvciBpbmxpbmUKCQkJCQkJaWYgKG9hICYmICgkLmNzcyhwYXJlbnQsICdkaXNwbGF5JykgfHwgJycpLm1hdGNoKC90YWJsZS1yb3d8aW5saW5lLykpIHsKCQkJCQkJCXNsID0gc2wgLSAoKHBhcmVudC5zY3JvbGxMZWZ0ID09IHBhcmVudC5vZmZzZXRMZWZ0KSA/IHBhcmVudC5zY3JvbGxMZWZ0IDogMCk7CgkJCQkJCQlzdCA9IHN0IC0gKChwYXJlbnQuc2Nyb2xsVG9wID09IHBhcmVudC5vZmZzZXRUb3ApID8gcGFyZW50LnNjcm9sbFRvcCA6IDApOwoJCQkJCQl9CgkJCQkKCQkJCQkJLy8gTW96aWxsYSBkb2VzIG5vdCBhZGQgdGhlIGJvcmRlciBmb3IgYSBwYXJlbnQgdGhhdCBoYXMgb3ZlcmZsb3cgc2V0IHRvIGFueXRoaW5nIGJ1dCB2aXNpYmxlCgkJCQkJCWlmIChtbyAmJiBwYXJlbnQgIT0gZWxlbSAmJiAkLmNzcyhwYXJlbnQsICdvdmVyZmxvdycpICE9ICd2aXNpYmxlJykgewoJCQkJCQkJeCArPSBudW0ocGFyZW50LCAnYm9yZGVyTGVmdFdpZHRoJyk7CgkJCQkJCQl5ICs9IG51bShwYXJlbnQsICdib3JkZXJUb3BXaWR0aCcpOwoJCQkJCQl9CgkJCQkKCQkJCQkJcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7CgkJCQkJfSB3aGlsZSAocGFyZW50ICE9IG9wKTsKCQkJCX0KCQkJCXBhcmVudCA9IG9wOwoJCQkJCgkJCQkvLyBleGl0IHRoZSBsb29wIGlmIHdlIGFyZSBhdCB0aGUgcmVsYXRpdmVUbyBvcHRpb24gYnV0IG5vdCBpZiBpdCBpcyB0aGUgYm9keSBvciBodG1sIHRhZwoJCQkJaWYgKHBhcmVudCA9PSBvcHRpb25zLnJlbGF0aXZlVG8gJiYgIShwYXJlbnQudGFnTmFtZSA9PSAnQk9EWScgfHwgcGFyZW50LnRhZ05hbWUgPT0gJ0hUTUwnKSkgIHsKCQkJCQkvLyBNb3ppbGxhIGRvZXMgbm90IGFkZCB0aGUgYm9yZGVyIGZvciBhIHBhcmVudCB0aGF0IGhhcyBvdmVyZmxvdyBzZXQgdG8gYW55dGhpbmcgYnV0IHZpc2libGUKCQkJCQlpZiAobW8gJiYgcGFyZW50ICE9IGVsZW0gJiYgJC5jc3MocGFyZW50LCAnb3ZlcmZsb3cnKSAhPSAndmlzaWJsZScpIHsKCQkJCQkJeCArPSBudW0ocGFyZW50LCAnYm9yZGVyTGVmdFdpZHRoJyk7CgkJCQkJCXkgKz0gbnVtKHBhcmVudCwgJ2JvcmRlclRvcFdpZHRoJyk7CgkJCQkJfQoJCQkJCS8vIFNhZmFyaSAyIGFuZCBvcGVyYSBpbmNsdWRlcyBib3JkZXIgb24gcG9zaXRpb25lZCBwYXJlbnRzCgkJCQkJaWYgKCAoKHNmICYmICFzZjMpIHx8IG9hKSAmJiBwYXJQb3MgIT0gJ3N0YXRpYycgKSB7CgkJCQkJCXggLT0gbnVtKG9wLCAnYm9yZGVyTGVmdFdpZHRoJyk7CgkJCQkJCXkgLT0gbnVtKG9wLCAnYm9yZGVyVG9wV2lkdGgnKTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlpZiAocGFyZW50LnRhZ05hbWUgPT0gJ0JPRFknIHx8IHBhcmVudC50YWdOYW1lID09ICdIVE1MJykgewoJCQkJCS8vIFNhZmFyaSAyIGFuZCBJRSBTdGFuZGFyZHMgTW9kZSBkb2Vzbid0IGFkZCB0aGUgYm9keSBtYXJnaW4gZm9yIGVsbWVudHMgcG9zaXRpb25lZCB3aXRoIHN0YXRpYyBvciByZWxhdGl2ZQoJCQkJCWlmICgoKHNmICYmICFzZjMpIHx8IChpZSAmJiAkLmJveE1vZGVsKSkgJiYgZWxlbVBvcyAhPSAnYWJzb2x1dGUnICYmIGVsZW1Qb3MgIT0gJ2ZpeGVkJykgewoJCQkJCQl4ICs9IG51bShwYXJlbnQsICdtYXJnaW5MZWZ0Jyk7CgkJCQkJCXkgKz0gbnVtKHBhcmVudCwgJ21hcmdpblRvcCcpOwoJCQkJCX0KCQkJCQkvLyBTYWZhcmkgMyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBib3JkZXIgb24gYm9keQoJCQkJCS8vIE1vemlsbGEgZG9lcyBub3QgaW5jbHVkZSB0aGUgYm9yZGVyIG9uIGJvZHkgaWYgYW4gZWxlbWVudCBpc24ndCBwb3NpdGlvbmVkIGFic29sdXRlIGFuZCBpcyB3aXRob3V0IGFuIGFic29sdXRlIHBhcmVudAoJCQkJCS8vIElFIGRvZXMgbm90IGluY2x1ZGUgdGhlIGJvcmRlciBvbiB0aGUgYm9keSBpZiBhbiBlbGVtZW50IGlzIHBvc2l0aW9uZWQgc3RhdGljIGFuZCB3aXRob3V0IGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhcmVudAoJCQkJCWlmICggc2YzIHx8IChtbyAmJiAhYWJzcGFyZW50ICYmIGVsZW1Qb3MgIT0gJ2ZpeGVkJykgfHwgCgkJCQkJICAgICAoaWUgJiYgZWxlbVBvcyA9PSAnc3RhdGljJyAmJiAhcmVscGFyZW50KSApIHsKCQkJCQkJeCArPSBudW0ocGFyZW50LCAnYm9yZGVyTGVmdFdpZHRoJyk7CgkJCQkJCXkgKz0gbnVtKHBhcmVudCwgJ2JvcmRlclRvcFdpZHRoJyk7CgkJCQkJfQoJCQkJCWJyZWFrOyAvLyBFeGl0IHRoZSBsb29wCgkJCQl9CgkJCX0gd2hpbGUgKHBhcmVudCk7CgkJfQoKCQl2YXIgcmV0dXJuVmFsdWUgPSBoYW5kbGVPZmZzZXRSZXR1cm4oZWxlbSwgb3B0aW9ucywgeCwgeSwgc2wsIHN0KTsKCgkJaWYgKHJldHVybk9iamVjdCkgeyAkLmV4dGVuZChyZXR1cm5PYmplY3QsIHJldHVyblZhbHVlKTsgcmV0dXJuIHRoaXM7IH0KCQllbHNlICAgICAgICAgICAgICB7IHJldHVybiByZXR1cm5WYWx1ZTsgfQoJfSwKCQoJLyoqCgkgKiBHZXRzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWxlbWVudCBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSB2aWV3cG9ydC4KCSAqIFRoaXMgbWV0aG9kIGlzIG11Y2ggZmFzdGVyIHRoYW4gb2Zmc2V0IGJ1dCBub3QgYXMgYWNjdXJhdGUgd2hlbiBib3JkZXJzIGFuZCBtYXJnaW5zIGFyZQoJICogb24gdGhlIGVsZW1lbnQgYW5kL29yIGl0cyBwYXJlbnRzLiBUaGlzIG1ldGhvZCBjYW4gYmUgaW52b2tlZAoJICogYnkgc2V0dGluZyB0aGUgbGl0ZSBvcHRpb24gdG8gdHJ1ZSBpbiB0aGUgb2Zmc2V0IG1ldGhvZC4KCSAqIFRoZSBvZmZzZXRMaXRlIG1ldGhvZCB0YWtlcyBhbiBvcHRpb25hbCBtYXAgb2Yga2V5IHZhbHVlIHBhaXJzIHRvIGNvbmZpZ3VyZSB0aGUgd2F5CgkgKiB0aGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQuIEhlcmUgYXJlIHRoZSBkaWZmZXJlbnQgb3B0aW9ucy4KCSAqCgkgKiAoQm9vbGVhbikgbWFyZ2luIC0gU2hvdWxkIHRoZSBtYXJnaW4gb2YgdGhlIGVsZW1lbnQgYmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucz8gVHJ1ZSBieSBkZWZhdWx0LgoJICogKEJvb2xlYW4pIGJvcmRlciAtIFNob3VsZCB0aGUgYm9yZGVyIG9mIHRoZSBlbGVtZW50IGJlIGluY2x1ZGVkIGluIHRoZSBjYWxjdWxhdGlvbnM/IEZhbHNlIGJ5IGRlZmF1bHQuIAoJICogKEJvb2xlYW4pIHBhZGRpbmcgLSBTaG91bGQgdGhlIHBhZGRpbmcgb2YgdGhlIGVsZW1lbnQgYmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1YXRpb25zPyBGYWxzZSBieSBkZWZhdWx0LiAKCSAqIChCb29sZWFuKSBzY3JvbGwgLSBTb3VsZCB0aGUgc2Nyb2xsIG9mZnNldHMgb2YgdGhlIHBhcmVudCBlbGVtZW50cyBiZSBpbmNsdWRlZCBpbnQgaGUgY2FsY3VsYXRpb25zPyBUcnVlIGJ5IGRlZmF1bHQuCgkgKiAgICAgICAgICAgICAgICAgICAgV2hlbiB0cnVlIGl0IGFkZHMgdGhlIHRvdGFsIHNjcm9sbCBvZmZzZXRzIG9mIGFsbCBwYXJlbnRzIHRvIHRoZSB0b3RhbCBvZmZzZXQgYW5kIGFsc28gYWRkcyB0d28KCSAqICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIHRvIHRoZSByZXR1cm5lZCBvYmplY3QsIHNjcm9sbFRvcCBhbmQgc2Nyb2xsTGVmdC4KCSAqIChIVE1MIEVsZW1lbnQpIHJlbGF0aXZlVG8gLSBUaGlzIHNob3VsZCBiZSBhIHBhcmVudCBvZiB0aGUgZWxlbWVudCBhbmQgc2hvdWxkIGhhdmUgcG9zaXRpb24gKGxpa2UgYWJzb2x1dGUgb3IgcmVsYXRpdmUpLgoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHdpbGwgcmV0cmVpdmUgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0aGlzIHBhcmVudCBlbGVtZW50LiBCeSBkZWZhdWx0IGl0IGlzIHRoZSBib2R5IGVsZW1lbnQuCgkgKgoJICogQG5hbWUgb2Zmc2V0TGl0ZQoJICogQHBhcmFtIE1hcCBvcHRpb25zIE9wdGlvbmFsIHNldHRpbmdzIHRvIGNvbmZpZ3VyZSB0aGUgd2F5IHRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZC4KCSAqIEBwYXJhbSBPYmplY3QgcmV0dXJuT2JqZWN0IEFuIG9iamVjdCB0byBzdG9yZSB0aGUgcmV0dXJuIHZhbHVlIGluLCBzbyBhcyBub3QgdG8gYnJlYWsgdGhlIGNoYWluLiBJZiBwYXNzZWQgaW4gdGhlCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFpbiB3aWxsIG5vdCBiZSBicm9rZW4gYW5kIHRoZSByZXN1bHQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGlzIG9iamVjdC4KCSAqIEB0eXBlIE9iamVjdAoJICogQGNhdCBQbHVnaW5zL0RpbWVuc2lvbnMKCSAqLwoJb2Zmc2V0TGl0ZTogZnVuY3Rpb24ob3B0aW9ucywgcmV0dXJuT2JqZWN0KSB7CgkJaWYgKCF0aGlzWzBdKSBlcnJvcigpOwoJCXZhciB4ID0gMCwgeSA9IDAsIHNsID0gMCwgc3QgPSAwLCBwYXJlbnQgPSB0aGlzWzBdLCBvZmZzZXRQYXJlbnQsIAoJCSAgICBvcHRpb25zID0gJC5leHRlbmQoeyBtYXJnaW46IHRydWUsIGJvcmRlcjogZmFsc2UsIHBhZGRpbmc6IGZhbHNlLCBzY3JvbGw6IHRydWUsIHJlbGF0aXZlVG86IGRvY3VtZW50LmJvZHkgfSwgb3B0aW9ucyB8fCB7fSk7CgkJCQkKCQkvLyBHZXQgdGhlIEhUTUxFbGVtZW50IGlmIHJlbGF0aXZlVG8gaXMgYSBqcXVlcnkgY29sbGVjdGlvbgoJCWlmIChvcHRpb25zLnJlbGF0aXZlVG8uanF1ZXJ5KSBvcHRpb25zLnJlbGF0aXZlVG8gPSBvcHRpb25zLnJlbGF0aXZlVG9bMF07CgkJCgkJZG8gewoJCQl4ICs9IHBhcmVudC5vZmZzZXRMZWZ0OwoJCQl5ICs9IHBhcmVudC5vZmZzZXRUb3A7CgoJCQlvZmZzZXRQYXJlbnQgPSBwYXJlbnQub2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7CgkJCWlmIChvcHRpb25zLnNjcm9sbCkgewoJCQkJLy8gZ2V0IHNjcm9sbCBvZmZzZXRzCgkJCQlkbyB7CgkJCQkJc2wgKz0gcGFyZW50LnNjcm9sbExlZnQ7CgkJCQkJc3QgKz0gcGFyZW50LnNjcm9sbFRvcDsKCQkJCQlwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTsKCQkJCX0gd2hpbGUocGFyZW50ICE9IG9mZnNldFBhcmVudCk7CgkJCX0KCQkJcGFyZW50ID0gb2Zmc2V0UGFyZW50OwoJCX0gd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAhPSAnQk9EWScgJiYgcGFyZW50LnRhZ05hbWUgIT0gJ0hUTUwnICYmIHBhcmVudCAhPSBvcHRpb25zLnJlbGF0aXZlVG8pOwoKCQl2YXIgcmV0dXJuVmFsdWUgPSBoYW5kbGVPZmZzZXRSZXR1cm4odGhpc1swXSwgb3B0aW9ucywgeCwgeSwgc2wsIHN0KTsKCgkJaWYgKHJldHVybk9iamVjdCkgeyAkLmV4dGVuZChyZXR1cm5PYmplY3QsIHJldHVyblZhbHVlKTsgcmV0dXJuIHRoaXM7IH0KCQllbHNlICAgICAgICAgICAgICB7IHJldHVybiByZXR1cm5WYWx1ZTsgfQoJfSwKCQoJLyoqCgkgKiBSZXR1cm5zIGEgalF1ZXJ5IGNvbGxlY3Rpb24gd2l0aCB0aGUgcG9zaXRpb25lZCBwYXJlbnQgb2YgCgkgKiB0aGUgZmlyc3QgbWF0Y2hlZCBlbGVtZW50LiBUaGlzIGlzIHRoZSBmaXJzdCBwYXJlbnQgb2YgCgkgKiB0aGUgZWxlbWVudCB0aGF0IGhhcyBwb3NpdGlvbiAoYXMgaW4gcmVsYXRpdmUgb3IgYWJzb2x1dGUpLgoJICoKCSAqIEBuYW1lIG9mZnNldFBhcmVudAoJICogQHR5cGUgalF1ZXJ5CgkgKiBAY2F0IFBsdWdpbnMvRGltZW5zaW9ucwoJICovCglvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkgewoJCWlmICghdGhpc1swXSkgZXJyb3IoKTsKCQl2YXIgb2Zmc2V0UGFyZW50ID0gdGhpc1swXS5vZmZzZXRQYXJlbnQ7CgkJd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgKG9mZnNldFBhcmVudC50YWdOYW1lICE9ICdCT0RZJyAmJiAkLmNzcyhvZmZzZXRQYXJlbnQsICdwb3NpdGlvbicpID09ICdzdGF0aWMnKSApCgkJCW9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7CgkJcmV0dXJuICQob2Zmc2V0UGFyZW50KTsKCX0KfSk7CgovKioKICogVGhyb3dzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBubyBlbGVtZW50cyBhcmUgaW4gdGhlIGpRdWVyeSBjb2xsZWN0aW9uCiAqIEBwcml2YXRlCiAqLwp2YXIgZXJyb3IgPSBmdW5jdGlvbigpIHsKCXRocm93ICJEaW1lbnNpb25zOiBqUXVlcnkgY29sbGVjdGlvbiBpcyBlbXB0eSI7Cn07CgovKioKICogSGFuZGxlcyBjb252ZXJ0aW5nIGEgQ1NTIFN0eWxlIGludG8gYW4gSW50ZWdlci4KICogQHByaXZhdGUKICovCnZhciBudW0gPSBmdW5jdGlvbihlbCwgcHJvcCkgewoJcmV0dXJuIHBhcnNlSW50KCQuY3NzKGVsLmpxdWVyeT9lbFswXTplbCxwcm9wKSl8fDA7Cn07CgovKioKICogSGFuZGxlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBvZmZzZXQgYW5kIG9mZnNldExpdGUgbWV0aG9kcy4KICogQHByaXZhdGUKICovCnZhciBoYW5kbGVPZmZzZXRSZXR1cm4gPSBmdW5jdGlvbihlbGVtLCBvcHRpb25zLCB4LCB5LCBzbCwgc3QpIHsKCWlmICggIW9wdGlvbnMubWFyZ2luICkgewoJCXggLT0gbnVtKGVsZW0sICdtYXJnaW5MZWZ0Jyk7CgkJeSAtPSBudW0oZWxlbSwgJ21hcmdpblRvcCcpOwoJfQoKCS8vIFNhZmFyaSBhbmQgT3BlcmEgZG8gbm90IGFkZCB0aGUgYm9yZGVyIGZvciB0aGUgZWxlbWVudAoJaWYgKCBvcHRpb25zLmJvcmRlciAmJiAoKCQuYnJvd3Nlci5zYWZhcmkgJiYgcGFyc2VJbnQoJC5icm93c2VyLnZlcnNpb24pIDwgNTIwKSB8fCAkLmJyb3dzZXIub3BlcmEpICkgewoJCXggKz0gbnVtKGVsZW0sICdib3JkZXJMZWZ0V2lkdGgnKTsKCQl5ICs9IG51bShlbGVtLCAnYm9yZGVyVG9wV2lkdGgnKTsKCX0gZWxzZSBpZiAoICFvcHRpb25zLmJvcmRlciAmJiAhKCgkLmJyb3dzZXIuc2FmYXJpICYmIHBhcnNlSW50KCQuYnJvd3Nlci52ZXJzaW9uKSA8IDUyMCkgfHwgJC5icm93c2VyLm9wZXJhKSApIHsKCQl4IC09IG51bShlbGVtLCAnYm9yZGVyTGVmdFdpZHRoJyk7CgkJeSAtPSBudW0oZWxlbSwgJ2JvcmRlclRvcFdpZHRoJyk7Cgl9CgoJaWYgKCBvcHRpb25zLnBhZGRpbmcgKSB7CgkJeCArPSBudW0oZWxlbSwgJ3BhZGRpbmdMZWZ0Jyk7CgkJeSArPSBudW0oZWxlbSwgJ3BhZGRpbmdUb3AnKTsKCX0KCQoJLy8gZG8gbm90IGluY2x1ZGUgc2Nyb2xsIG9mZnNldCBvbiB0aGUgZWxlbWVudCAuLi4gb3BlcmEgc29tZXRpbWVzIHJlcG9ydHMgc2Nyb2xsIG9mZnNldCBhcyBhY3R1YWwgb2Zmc2V0CglpZiAoIG9wdGlvbnMuc2Nyb2xsICYmICghJC5icm93c2VyLm9wZXJhIHx8IGVsZW0ub2Zmc2V0TGVmdCAhPSBlbGVtLnNjcm9sbExlZnQgJiYgZWxlbS5vZmZzZXRUb3AgIT0gZWxlbS5zY3JvbGxMZWZ0KSApIHsKCQlzbCAtPSBlbGVtLnNjcm9sbExlZnQ7CgkJc3QgLT0gZWxlbS5zY3JvbGxUb3A7Cgl9CgoJcmV0dXJuIG9wdGlvbnMuc2Nyb2xsID8geyB0b3A6IHkgLSBzdCwgbGVmdDogeCAtIHNsLCBzY3JvbGxUb3A6ICBzdCwgc2Nyb2xsTGVmdDogc2wgfQoJICAgICAgICAgICAgICAgICAgICAgIDogeyB0b3A6IHksIGxlZnQ6IHggfTsKfTsKCi8qKgogKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgT1Mgc2Nyb2xsYmFyCiAqIEBwcml2YXRlCiAqLwp2YXIgc2Nyb2xsYmFyV2lkdGggPSAwOwp2YXIgZ2V0U2Nyb2xsYmFyV2lkdGggPSBmdW5jdGlvbigpIHsKCWlmICghc2Nyb2xsYmFyV2lkdGgpIHsKCQl2YXIgdGVzdEVsID0gJCgnPGRpdj4nKQoJCQkJLmNzcyh7CgkJCQkJd2lkdGg6IDEwMCwKCQkJCQloZWlnaHQ6IDEwMCwKCQkJCQlvdmVyZmxvdzogJ2F1dG8nLAoJCQkJCXBvc2l0aW9uOiAnYWJzb2x1dGUnLAoJCQkJCXRvcDogLTEwMDAsCgkJCQkJbGVmdDogLTEwMDAKCQkJCX0pCgkJCQkuYXBwZW5kVG8oJ2JvZHknKTsKCQlzY3JvbGxiYXJXaWR0aCA9IDEwMCAtIHRlc3RFbAoJCQkuYXBwZW5kKCc8ZGl2PicpCgkJCS5maW5kKCdkaXYnKQoJCQkJLmNzcyh7CgkJCQkJd2lkdGg6ICcxMDAlJywKCQkJCQloZWlnaHQ6IDIwMAoJCQkJfSkKCQkJCS53aWR0aCgpOwoJCXRlc3RFbC5yZW1vdmUoKTsKCX0KCXJldHVybiBzY3JvbGxiYXJXaWR0aDsKfTsKCn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.form.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBGb3JtIFBsdWdpbg0KICogdmVyc2lvbjogMi4xOCAoMDYtSkFOLTIwMDkpDQogKiBAcmVxdWlyZXMgalF1ZXJ5IHYxLjIuMiBvciBsYXRlcg0KICoNCiAqIEV4YW1wbGVzIGFuZCBkb2N1bWVudGF0aW9uIGF0OiBodHRwOi8vbWFsc3VwLmNvbS9qcXVlcnkvZm9ybS8NCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzOg0KICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocA0KICogICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwNCiAqDQogKiBSZXZpc2lvbjogJElkJA0KICovDQo7KGZ1bmN0aW9uKCQpIHsNCg0KLyoNCiAgICBVc2FnZSBOb3RlOiAgDQogICAgLS0tLS0tLS0tLS0NCiAgICBEbyBub3QgdXNlIGJvdGggYWpheFN1Ym1pdCBhbmQgYWpheEZvcm0gb24gdGhlIHNhbWUgZm9ybS4gIFRoZXNlDQogICAgZnVuY3Rpb25zIGFyZSBpbnRlbmRlZCB0byBiZSBleGNsdXNpdmUuICBVc2UgYWpheFN1Ym1pdCBpZiB5b3Ugd2FudA0KICAgIHRvIGJpbmQgeW91ciBvd24gc3VibWl0IGhhbmRsZXIgdG8gdGhlIGZvcm0uICBGb3IgZXhhbXBsZSwNCg0KICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KICAgICAgICAkKCcjbXlGb3JtJykuYmluZCgnc3VibWl0JywgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAkKHRoaXMpLmFqYXhTdWJtaXQoew0KICAgICAgICAgICAgICAgIHRhcmdldDogJyNvdXRwdXQnDQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gPC0tIGltcG9ydGFudCENCiAgICAgICAgfSk7DQogICAgfSk7DQoNCiAgICBVc2UgYWpheEZvcm0gd2hlbiB5b3Ugd2FudCB0aGUgcGx1Z2luIHRvIG1hbmFnZSBhbGwgdGhlIGV2ZW50IGJpbmRpbmcNCiAgICBmb3IgeW91LiAgRm9yIGV4YW1wbGUsDQoNCiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCiAgICAgICAgJCgnI215Rm9ybScpLmFqYXhGb3JtKHsNCiAgICAgICAgICAgIHRhcmdldDogJyNvdXRwdXQnDQogICAgICAgIH0pOw0KICAgIH0pOw0KICAgICAgICANCiAgICBXaGVuIHVzaW5nIGFqYXhGb3JtLCB0aGUgYWpheFN1Ym1pdCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgZm9yIHlvdQ0KICAgIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lLiAgDQoqLw0KDQovKioNCiAqIGFqYXhTdWJtaXQoKSBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgaW1tZWRpYXRlbHkgc3VibWl0dGluZyANCiAqIGFuIEhUTUwgZm9ybSB1c2luZyBBSkFYLg0KICovDQokLmZuLmFqYXhTdWJtaXQgPSBmdW5jdGlvbihvcHRpb25zKSB7DQogICAgLy8gZmFzdCBmYWlsIGlmIG5vdGhpbmcgc2VsZWN0ZWQgKGh0dHA6Ly9kZXYuanF1ZXJ5LmNvbS90aWNrZXQvMjc1MikNCiAgICBpZiAoIXRoaXMubGVuZ3RoKSB7DQogICAgICAgIGxvZygnYWpheFN1Ym1pdDogc2tpcHBpbmcgc3VibWl0IHByb2Nlc3MgLSBubyBlbGVtZW50IHNlbGVjdGVkJyk7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0NCg0KICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnZnVuY3Rpb24nKQ0KICAgICAgICBvcHRpb25zID0geyBzdWNjZXNzOiBvcHRpb25zIH07DQoNCiAgICBvcHRpb25zID0gJC5leHRlbmQoew0KICAgICAgICB1cmw6ICB0aGlzLmF0dHIoJ2FjdGlvbicpIHx8IHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpLA0KICAgICAgICB0eXBlOiB0aGlzLmF0dHIoJ21ldGhvZCcpIHx8ICdHRVQnDQogICAgfSwgb3B0aW9ucyB8fCB7fSk7DQoNCiAgICAvLyBob29rIGZvciBtYW5pcHVsYXRpbmcgdGhlIGZvcm0gZGF0YSBiZWZvcmUgaXQgaXMgZXh0cmFjdGVkOw0KICAgIC8vIGNvbnZlbmllbnQgZm9yIHVzZSB3aXRoIHJpY2ggZWRpdG9ycyBsaWtlIHRpbnlNQ0Ugb3IgRkNLRWRpdG9yDQogICAgdmFyIHZldG8gPSB7fTsNCiAgICB0aGlzLnRyaWdnZXIoJ2Zvcm0tcHJlLXNlcmlhbGl6ZScsIFt0aGlzLCBvcHRpb25zLCB2ZXRvXSk7DQogICAgaWYgKHZldG8udmV0bykgew0KICAgICAgICBsb2coJ2FqYXhTdWJtaXQ6IHN1Ym1pdCB2ZXRvZWQgdmlhIGZvcm0tcHJlLXNlcmlhbGl6ZSB0cmlnZ2VyJyk7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0NCg0KICAgIC8vIHByb3ZpZGUgb3Bwb3J0dW5pdHkgdG8gYWx0ZXIgZm9ybSBkYXRhIGJlZm9yZSBpdCBpcyBzZXJpYWxpemVkDQogICAgaWYgKG9wdGlvbnMuYmVmb3JlU2VyaWFsaXplICYmIG9wdGlvbnMuYmVmb3JlU2VyaWFsaXplKHRoaXMsIG9wdGlvbnMpID09PSBmYWxzZSkgew0KICAgICAgICBsb2coJ2FqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTZXJpYWxpemUgY2FsbGJhY2snKTsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfSAgICANCiAgIA0KICAgIHZhciBhID0gdGhpcy5mb3JtVG9BcnJheShvcHRpb25zLnNlbWFudGljKTsNCiAgICBpZiAob3B0aW9ucy5kYXRhKSB7DQogICAgICAgIG9wdGlvbnMuZXh0cmFEYXRhID0gb3B0aW9ucy5kYXRhOw0KICAgICAgICBmb3IgKHZhciBuIGluIG9wdGlvbnMuZGF0YSkgew0KICAgICAgICAgIGlmKG9wdGlvbnMuZGF0YVtuXSBpbnN0YW5jZW9mIEFycmF5KSB7DQogICAgICAgICAgICBmb3IgKHZhciBrIGluIG9wdGlvbnMuZGF0YVtuXSkNCiAgICAgICAgICAgICAgYS5wdXNoKCB7IG5hbWU6IG4sIHZhbHVlOiBvcHRpb25zLmRhdGFbbl1ba10gfSApDQogICAgICAgICAgfSAgDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIGEucHVzaCggeyBuYW1lOiBuLCB2YWx1ZTogb3B0aW9ucy5kYXRhW25dIH0gKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIGdpdmUgcHJlLXN1Ym1pdCBjYWxsYmFjayBhbiBvcHBvcnR1bml0eSB0byBhYm9ydCB0aGUgc3VibWl0DQogICAgaWYgKG9wdGlvbnMuYmVmb3JlU3VibWl0ICYmIG9wdGlvbnMuYmVmb3JlU3VibWl0KGEsIHRoaXMsIG9wdGlvbnMpID09PSBmYWxzZSkgew0KICAgICAgICBsb2coJ2FqYXhTdWJtaXQ6IHN1Ym1pdCBhYm9ydGVkIHZpYSBiZWZvcmVTdWJtaXQgY2FsbGJhY2snKTsNCiAgICAgICAgcmV0dXJuIHRoaXM7DQogICAgfSAgICANCg0KICAgIC8vIGZpcmUgdmV0b2FibGUgJ3ZhbGlkYXRlJyBldmVudA0KICAgIHRoaXMudHJpZ2dlcignZm9ybS1zdWJtaXQtdmFsaWRhdGUnLCBbYSwgdGhpcywgb3B0aW9ucywgdmV0b10pOw0KICAgIGlmICh2ZXRvLnZldG8pIHsNCiAgICAgICAgbG9nKCdhamF4U3VibWl0OiBzdWJtaXQgdmV0b2VkIHZpYSBmb3JtLXN1Ym1pdC12YWxpZGF0ZSB0cmlnZ2VyJyk7DQogICAgICAgIHJldHVybiB0aGlzOw0KICAgIH0gICAgDQoNCiAgICB2YXIgcSA9ICQucGFyYW0oYSk7DQoNCiAgICBpZiAob3B0aW9ucy50eXBlLnRvVXBwZXJDYXNlKCkgPT0gJ0dFVCcpIHsNCiAgICAgICAgb3B0aW9ucy51cmwgKz0gKG9wdGlvbnMudXJsLmluZGV4T2YoJz8nKSA+PSAwID8gJyYnIDogJz8nKSArIHE7DQogICAgICAgIG9wdGlvbnMuZGF0YSA9IG51bGw7ICAvLyBkYXRhIGlzIG51bGwgZm9yICdnZXQnDQogICAgfQ0KICAgIGVsc2UNCiAgICAgICAgb3B0aW9ucy5kYXRhID0gcTsgLy8gZGF0YSBpcyB0aGUgcXVlcnkgc3RyaW5nIGZvciAncG9zdCcNCg0KICAgIHZhciAkZm9ybSA9IHRoaXMsIGNhbGxiYWNrcyA9IFtdOw0KICAgIGlmIChvcHRpb25zLnJlc2V0Rm9ybSkgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKSB7ICRmb3JtLnJlc2V0Rm9ybSgpOyB9KTsNCiAgICBpZiAob3B0aW9ucy5jbGVhckZvcm0pIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uKCkgeyAkZm9ybS5jbGVhckZvcm0oKTsgfSk7DQoNCiAgICAvLyBwZXJmb3JtIGEgbG9hZCBvbiB0aGUgdGFyZ2V0IG9ubHkgaWYgZGF0YVR5cGUgaXMgbm90IHByb3ZpZGVkDQogICAgaWYgKCFvcHRpb25zLmRhdGFUeXBlICYmIG9wdGlvbnMudGFyZ2V0KSB7DQogICAgICAgIHZhciBvbGRTdWNjZXNzID0gb3B0aW9ucy5zdWNjZXNzIHx8IGZ1bmN0aW9uKCl7fTsNCiAgICAgICAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oZGF0YSkgew0KICAgICAgICAgICAgJChvcHRpb25zLnRhcmdldCkuaHRtbChkYXRhKS5lYWNoKG9sZFN1Y2Nlc3MsIGFyZ3VtZW50cyk7DQogICAgICAgIH0pOw0KICAgIH0NCiAgICBlbHNlIGlmIChvcHRpb25zLnN1Y2Nlc3MpDQogICAgICAgIGNhbGxiYWNrcy5wdXNoKG9wdGlvbnMuc3VjY2Vzcyk7DQoNCiAgICBvcHRpb25zLnN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhLCBzdGF0dXMpIHsNCiAgICAgICAgZm9yICh2YXIgaT0wLCBtYXg9Y2FsbGJhY2tzLmxlbmd0aDsgaSA8IG1heDsgaSsrKQ0KICAgICAgICAgICAgY2FsbGJhY2tzW2ldLmFwcGx5KG9wdGlvbnMsIFtkYXRhLCBzdGF0dXMsICRmb3JtXSk7DQogICAgfTsNCg0KICAgIC8vIGFyZSB0aGVyZSBmaWxlcyB0byB1cGxvYWQ/DQogICAgdmFyIGZpbGVzID0gJCgnaW5wdXQ6ZmlsZScsIHRoaXMpLmZpZWxkVmFsdWUoKTsNCiAgICB2YXIgZm91bmQgPSBmYWxzZTsNCiAgICBmb3IgKHZhciBqPTA7IGogPCBmaWxlcy5sZW5ndGg7IGorKykNCiAgICAgICAgaWYgKGZpbGVzW2pdKQ0KICAgICAgICAgICAgZm91bmQgPSB0cnVlOw0KDQogICAgLy8gb3B0aW9ucy5pZnJhbWUgYWxsb3dzIHVzZXIgdG8gZm9yY2UgaWZyYW1lIG1vZGUNCiAgIGlmIChvcHRpb25zLmlmcmFtZSB8fCBmb3VuZCkgeyANCiAgICAgICAvLyBoYWNrIHRvIGZpeCBTYWZhcmkgaGFuZyAodGhhbmtzIHRvIFRpbSBNb2xlbmRpamsgZm9yIHRoaXMpDQogICAgICAgLy8gc2VlOiAgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2pxdWVyeS1kZXYvYnJvd3NlX3RocmVhZC90aHJlYWQvMzYzOTViN2FiNTEwZGQ1ZA0KICAgICAgIGlmICgkLmJyb3dzZXIuc2FmYXJpICYmIG9wdGlvbnMuY2xvc2VLZWVwQWxpdmUpDQogICAgICAgICAgICQuZ2V0KG9wdGlvbnMuY2xvc2VLZWVwQWxpdmUsIGZpbGVVcGxvYWQpOw0KICAgICAgIGVsc2UNCiAgICAgICAgICAgZmlsZVVwbG9hZCgpOw0KICAgICAgIH0NCiAgIGVsc2UNCiAgICAgICAkLmFqYXgob3B0aW9ucyk7DQoNCiAgICAvLyBmaXJlICdub3RpZnknIGV2ZW50DQogICAgdGhpcy50cmlnZ2VyKCdmb3JtLXN1Ym1pdC1ub3RpZnknLCBbdGhpcywgb3B0aW9uc10pOw0KICAgIHJldHVybiB0aGlzOw0KDQoNCiAgICAvLyBwcml2YXRlIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBmaWxlIHVwbG9hZHMgKGhhdCB0aXAgdG8gWUFIT08hKQ0KICAgIGZ1bmN0aW9uIGZpbGVVcGxvYWQoKSB7DQogICAgICAgIHZhciBmb3JtID0gJGZvcm1bMF07DQogICAgICAgIA0KICAgICAgICBpZiAoJCgnOmlucHV0W25hbWU9c3VibWl0XScsIGZvcm0pLmxlbmd0aCkgew0KICAgICAgICAgICAgYWxlcnQoJ0Vycm9yOiBGb3JtIGVsZW1lbnRzIG11c3Qgbm90IGJlIG5hbWVkICJzdWJtaXQiLicpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICB2YXIgb3B0cyA9ICQuZXh0ZW5kKHt9LCAkLmFqYXhTZXR0aW5ncywgb3B0aW9ucyk7DQoJCXZhciBzID0galF1ZXJ5LmV4dGVuZCh0cnVlLCB7fSwgJC5leHRlbmQodHJ1ZSwge30sICQuYWpheFNldHRpbmdzKSwgb3B0cyk7DQoNCiAgICAgICAgdmFyIGlkID0gJ2pxRm9ybUlPJyArIChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7DQogICAgICAgIHZhciAkaW8gPSAkKCc8aWZyYW1lIGlkPSInICsgaWQgKyAnIiBuYW1lPSInICsgaWQgKyAnIiAvPicpOw0KICAgICAgICB2YXIgaW8gPSAkaW9bMF07DQoNCiAgICAgICAgaWYgKCQuYnJvd3Nlci5tc2llIHx8ICQuYnJvd3Nlci5vcGVyYSkgDQogICAgICAgICAgICBpby5zcmMgPSAnamF2YXNjcmlwdDpmYWxzZTtkb2N1bWVudC53cml0ZSgiIik7JzsNCiAgICAgICAgJGlvLmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6ICctMTAwMHB4JywgbGVmdDogJy0xMDAwcHgnIH0pOw0KDQogICAgICAgIHZhciB4aHIgPSB7IC8vIG1vY2sgb2JqZWN0DQogICAgICAgICAgICBhYm9ydGVkOiAwLA0KICAgICAgICAgICAgcmVzcG9uc2VUZXh0OiBudWxsLA0KICAgICAgICAgICAgcmVzcG9uc2VYTUw6IG51bGwsDQogICAgICAgICAgICBzdGF0dXM6IDAsDQogICAgICAgICAgICBzdGF0dXNUZXh0OiAnbi9hJywNCiAgICAgICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7fSwNCiAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigpIHt9LA0KICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oKSB7fSwNCiAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsgDQogICAgICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gMTsgDQogICAgICAgICAgICAgICAgJGlvLmF0dHIoJ3NyYycsJ2Fib3V0OmJsYW5rJyk7IC8vIGFib3J0IG9wIGluIHByb2dyZXNzDQogICAgICAgICAgICB9DQogICAgICAgIH07DQoNCiAgICAgICAgdmFyIGcgPSBvcHRzLmdsb2JhbDsNCiAgICAgICAgLy8gdHJpZ2dlciBhamF4IGdsb2JhbCBldmVudHMgc28gdGhhdCBhY3Rpdml0eS9ibG9jayBpbmRpY2F0b3JzIHdvcmsgbGlrZSBub3JtYWwNCiAgICAgICAgaWYgKGcgJiYgISAkLmFjdGl2ZSsrKSAkLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpOw0KICAgICAgICBpZiAoZykgJC5ldmVudC50cmlnZ2VyKCJhamF4U2VuZCIsIFt4aHIsIG9wdHNdKTsNCg0KCQlpZiAocy5iZWZvcmVTZW5kICYmIHMuYmVmb3JlU2VuZCh4aHIsIHMpID09PSBmYWxzZSkgew0KCQkJcy5nbG9iYWwgJiYgalF1ZXJ5LmFjdGl2ZS0tOw0KCQkJcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGlmICh4aHIuYWJvcnRlZCkNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgDQogICAgICAgIHZhciBjYkludm9rZWQgPSAwOw0KICAgICAgICB2YXIgdGltZWRPdXQgPSAwOw0KDQogICAgICAgIC8vIGFkZCBzdWJtaXR0aW5nIGVsZW1lbnQgdG8gZGF0YSBpZiB3ZSBrbm93IGl0DQogICAgICAgIHZhciBzdWIgPSBmb3JtLmNsazsNCiAgICAgICAgaWYgKHN1Yikgew0KICAgICAgICAgICAgdmFyIG4gPSBzdWIubmFtZTsNCiAgICAgICAgICAgIGlmIChuICYmICFzdWIuZGlzYWJsZWQpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLmV4dHJhRGF0YSA9IG9wdGlvbnMuZXh0cmFEYXRhIHx8IHt9Ow0KICAgICAgICAgICAgICAgIG9wdGlvbnMuZXh0cmFEYXRhW25dID0gc3ViLnZhbHVlOw0KICAgICAgICAgICAgICAgIGlmIChzdWIudHlwZSA9PSAiaW1hZ2UiKSB7DQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXh0cmFEYXRhW25hbWUrJy54J10gPSBmb3JtLmNsa194Ow0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmV4dHJhRGF0YVtuYW1lKycueSddID0gZm9ybS5jbGtfeTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyB0YWtlIGEgYnJlYXRoIHNvIHRoYXQgcGVuZGluZyByZXBhaW50cyBnZXQgc29tZSBjcHUgdGltZSBiZWZvcmUgdGhlIHVwbG9hZCBzdGFydHMNCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBmb3JtIGF0dHJzIGFyZSBzZXQNCiAgICAgICAgICAgIHZhciB0ID0gJGZvcm0uYXR0cigndGFyZ2V0JyksIGEgPSAkZm9ybS5hdHRyKCdhY3Rpb24nKTsNCiAgICAgICAgICAgICRmb3JtLmF0dHIoew0KICAgICAgICAgICAgICAgIHRhcmdldDogICBpZCwNCiAgICAgICAgICAgICAgICBtZXRob2Q6ICAgJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGFjdGlvbjogICBvcHRzLnVybA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIGllIGJvcmtzIGluIHNvbWUgY2FzZXMgd2hlbiBzZXR0aW5nIGVuY29kaW5nDQogICAgICAgICAgICBpZiAoISBvcHRpb25zLnNraXBFbmNvZGluZ092ZXJyaWRlKSB7DQogICAgICAgICAgICAgICAgJGZvcm0uYXR0cih7DQogICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsDQogICAgICAgICAgICAgICAgICAgIGVuY3R5cGU6ICAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gc3VwcG9ydCB0aW1vdXQNCiAgICAgICAgICAgIGlmIChvcHRzLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdGltZWRPdXQgPSB0cnVlOyBjYigpOyB9LCBvcHRzLnRpbWVvdXQpOw0KDQogICAgICAgICAgICAvLyBhZGQgImV4dHJhIiBkYXRhIHRvIGZvcm0gaWYgcHJvdmlkZWQgaW4gb3B0aW9ucw0KICAgICAgICAgICAgdmFyIGV4dHJhSW5wdXRzID0gW107DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV4dHJhRGF0YSkNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiBpbiBvcHRpb25zLmV4dHJhRGF0YSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5wdXRzLnB1c2goDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJytuKyciIHZhbHVlPSInK29wdGlvbnMuZXh0cmFEYXRhW25dKyciIC8+JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGZvcm0pWzBdKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIC8vIGFkZCBpZnJhbWUgdG8gZG9jIGFuZCBzdWJtaXQgdGhlIGZvcm0NCiAgICAgICAgICAgICAgICAkaW8uYXBwZW5kVG8oJ2JvZHknKTsNCiAgICAgICAgICAgICAgICBpby5hdHRhY2hFdmVudCA/IGlvLmF0dGFjaEV2ZW50KCdvbmxvYWQnLCBjYikgOiBpby5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY2IsIGZhbHNlKTsNCiAgICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZmluYWxseSB7DQogICAgICAgICAgICAgICAgLy8gcmVzZXQgYXR0cnMgYW5kIHJlbW92ZSAiZXh0cmEiIGlucHV0IGVsZW1lbnRzDQogICAgICAgICAgICAgICAgJGZvcm0uYXR0cignYWN0aW9uJywgYSk7DQogICAgICAgICAgICAgICAgdCA/ICRmb3JtLmF0dHIoJ3RhcmdldCcsIHQpIDogJGZvcm0ucmVtb3ZlQXR0cigndGFyZ2V0Jyk7DQogICAgICAgICAgICAgICAgJChleHRyYUlucHV0cykucmVtb3ZlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sIDEwKTsNCg0KICAgICAgICBmdW5jdGlvbiBjYigpIHsNCiAgICAgICAgICAgIGlmIChjYkludm9rZWQrKykgcmV0dXJuOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpby5kZXRhY2hFdmVudCA/IGlvLmRldGFjaEV2ZW50KCdvbmxvYWQnLCBjYikgOiBpby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgY2IsIGZhbHNlKTsNCg0KICAgICAgICAgICAgdmFyIG9wZXJhSGFjayA9IDA7DQogICAgICAgICAgICB2YXIgb2sgPSB0cnVlOw0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICBpZiAodGltZWRPdXQpIHRocm93ICd0aW1lb3V0JzsNCiAgICAgICAgICAgICAgICAvLyBleHRyYWN0IHRoZSBzZXJ2ZXIgcmVzcG9uc2UgZnJvbSB0aGUgaWZyYW1lDQogICAgICAgICAgICAgICAgdmFyIGRhdGEsIGRvYzsNCg0KICAgICAgICAgICAgICAgIGRvYyA9IGlvLmNvbnRlbnRXaW5kb3cgPyBpby5jb250ZW50V2luZG93LmRvY3VtZW50IDogaW8uY29udGVudERvY3VtZW50ID8gaW8uY29udGVudERvY3VtZW50IDogaW8uZG9jdW1lbnQ7DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKGRvYy5ib2R5ID09IG51bGwgJiYgIW9wZXJhSGFjayAmJiAkLmJyb3dzZXIub3BlcmEpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gSW4gT3BlcmEgOS4yLnggdGhlIGlmcmFtZSBET00gaXMgbm90IGFsd2F5cyB0cmF2ZXJzYWJsZSB3aGVuDQogICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvbmxvYWQgY2FsbGJhY2sgZmlyZXMgc28gd2UgZ2l2ZSBPcGVyYSAxMDBtcyB0byByaWdodCBpdHNlbGYNCiAgICAgICAgICAgICAgICAgICAgb3BlcmFIYWNrID0gMTsNCiAgICAgICAgICAgICAgICAgICAgY2JJbnZva2VkLS07DQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2IsIDEwMCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVGV4dCA9IGRvYy5ib2R5ID8gZG9jLmJvZHkuaW5uZXJIVE1MIDogbnVsbDsNCiAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VYTUwgPSBkb2MuWE1MRG9jdW1lbnQgPyBkb2MuWE1MRG9jdW1lbnQgOiBkb2M7DQogICAgICAgICAgICAgICAgeGhyLmdldFJlc3BvbnNlSGVhZGVyID0gZnVuY3Rpb24oaGVhZGVyKXsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSB7J2NvbnRlbnQtdHlwZSc6IG9wdHMuZGF0YVR5cGV9Ow0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVhZGVyc1toZWFkZXJdOw0KICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICBpZiAob3B0cy5kYXRhVHlwZSA9PSAnanNvbicgfHwgb3B0cy5kYXRhVHlwZSA9PSAnc2NyaXB0Jykgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdGEgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RleHRhcmVhJylbMF07DQogICAgICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVRleHQgPSB0YSA/IHRhLnZhbHVlIDogeGhyLnJlc3BvbnNlVGV4dDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0cy5kYXRhVHlwZSA9PSAneG1sJyAmJiAheGhyLnJlc3BvbnNlWE1MICYmIHhoci5yZXNwb25zZVRleHQgIT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VYTUwgPSB0b1htbCh4aHIucmVzcG9uc2VUZXh0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZGF0YSA9ICQuaHR0cERhdGEoeGhyLCBvcHRzLmRhdGFUeXBlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoKGUpew0KICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7DQogICAgICAgICAgICAgICAgJC5oYW5kbGVFcnJvcihvcHRzLCB4aHIsICdlcnJvcicsIGUpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBvcmRlcmluZyBvZiB0aGVzZSBjYWxsYmFja3MvdHJpZ2dlcnMgaXMgb2RkLCBidXQgdGhhdCdzIGhvdyAkLmFqYXggZG9lcyBpdA0KICAgICAgICAgICAgaWYgKG9rKSB7DQogICAgICAgICAgICAgICAgb3B0cy5zdWNjZXNzKGRhdGEsICdzdWNjZXNzJyk7DQogICAgICAgICAgICAgICAgaWYgKGcpICQuZXZlbnQudHJpZ2dlcigiYWpheFN1Y2Nlc3MiLCBbeGhyLCBvcHRzXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZykgJC5ldmVudC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLCBbeGhyLCBvcHRzXSk7DQogICAgICAgICAgICBpZiAoZyAmJiAhIC0tJC5hY3RpdmUpICQuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKTsNCiAgICAgICAgICAgIGlmIChvcHRzLmNvbXBsZXRlKSBvcHRzLmNvbXBsZXRlKHhociwgb2sgPyAnc3VjY2VzcycgOiAnZXJyb3InKTsNCg0KICAgICAgICAgICAgLy8gY2xlYW4gdXANCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgJGlvLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVhNTCA9IG51bGw7DQogICAgICAgICAgICB9LCAxMDApOw0KICAgICAgICB9Ow0KDQogICAgICAgIGZ1bmN0aW9uIHRvWG1sKHMsIGRvYykgew0KICAgICAgICAgICAgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0KSB7DQogICAgICAgICAgICAgICAgZG9jID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxET00nKTsNCiAgICAgICAgICAgICAgICBkb2MuYXN5bmMgPSAnZmFsc2UnOw0KICAgICAgICAgICAgICAgIGRvYy5sb2FkWE1MKHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGRvYyA9IChuZXcgRE9NUGFyc2VyKCkpLnBhcnNlRnJvbVN0cmluZyhzLCAndGV4dC94bWwnKTsNCiAgICAgICAgICAgIHJldHVybiAoZG9jICYmIGRvYy5kb2N1bWVudEVsZW1lbnQgJiYgZG9jLmRvY3VtZW50RWxlbWVudC50YWdOYW1lICE9ICdwYXJzZXJlcnJvcicpID8gZG9jIDogbnVsbDsNCiAgICAgICAgfTsNCiAgICB9Ow0KfTsNCg0KLyoqDQogKiBhamF4Rm9ybSgpIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciBmdWxseSBhdXRvbWF0aW5nIGZvcm0gc3VibWlzc2lvbi4NCiAqDQogKiBUaGUgYWR2YW50YWdlcyBvZiB1c2luZyB0aGlzIG1ldGhvZCBpbnN0ZWFkIG9mIGFqYXhTdWJtaXQoKSBhcmU6DQogKg0KICogMTogVGhpcyBtZXRob2Qgd2lsbCBpbmNsdWRlIGNvb3JkaW5hdGVzIGZvciA8aW5wdXQgdHlwZT0iaW1hZ2UiIC8+IGVsZW1lbnRzIChpZiB0aGUgZWxlbWVudA0KICogICAgaXMgdXNlZCB0byBzdWJtaXQgdGhlIGZvcm0pLg0KICogMi4gVGhpcyBtZXRob2Qgd2lsbCBpbmNsdWRlIHRoZSBzdWJtaXQgZWxlbWVudCdzIG5hbWUvdmFsdWUgZGF0YSAoZm9yIHRoZSBlbGVtZW50IHRoYXQgd2FzDQogKiAgICB1c2VkIHRvIHN1Ym1pdCB0aGUgZm9ybSkuDQogKiAzLiBUaGlzIG1ldGhvZCBiaW5kcyB0aGUgc3VibWl0KCkgbWV0aG9kIHRvIHRoZSBmb3JtIGZvciB5b3UuDQogKg0KICogVGhlIG9wdGlvbnMgYXJndW1lbnQgZm9yIGFqYXhGb3JtIHdvcmtzIGV4YWN0bHkgYXMgaXQgZG9lcyBmb3IgYWpheFN1Ym1pdC4gIGFqYXhGb3JtIG1lcmVseQ0KICogcGFzc2VzIHRoZSBvcHRpb25zIGFyZ3VtZW50IGFsb25nIGFmdGVyIHByb3Blcmx5IGJpbmRpbmcgZXZlbnRzIGZvciBzdWJtaXQgZWxlbWVudHMgYW5kDQogKiB0aGUgZm9ybSBpdHNlbGYuDQogKi8gDQokLmZuLmFqYXhGb3JtID0gZnVuY3Rpb24ob3B0aW9ucykgew0KICAgIHJldHVybiB0aGlzLmFqYXhGb3JtVW5iaW5kKCkuYmluZCgnc3VibWl0LmZvcm0tcGx1Z2luJyxmdW5jdGlvbigpIHsNCiAgICAgICAgJCh0aGlzKS5hamF4U3VibWl0KG9wdGlvbnMpOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSkuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgLy8gc3RvcmUgb3B0aW9ucyBpbiBoYXNoDQogICAgICAgICQoIjpzdWJtaXQsaW5wdXQ6aW1hZ2UiLCB0aGlzKS5iaW5kKCdjbGljay5mb3JtLXBsdWdpbicsZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgdmFyIGZvcm0gPSB0aGlzLmZvcm07DQogICAgICAgICAgICBmb3JtLmNsayA9IHRoaXM7DQogICAgICAgICAgICBpZiAodGhpcy50eXBlID09ICdpbWFnZScpIHsNCiAgICAgICAgICAgICAgICBpZiAoZS5vZmZzZXRYICE9IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgICAgICBmb3JtLmNsa194ID0gZS5vZmZzZXRYOw0KICAgICAgICAgICAgICAgICAgICBmb3JtLmNsa195ID0gZS5vZmZzZXRZOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICQuZm4ub2Zmc2V0ID09ICdmdW5jdGlvbicpIHsgLy8gdHJ5IHRvIHVzZSBkaW1lbnNpb25zIHBsdWdpbg0KICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gJCh0aGlzKS5vZmZzZXQoKTsNCiAgICAgICAgICAgICAgICAgICAgZm9ybS5jbGtfeCA9IGUucGFnZVggLSBvZmZzZXQubGVmdDsNCiAgICAgICAgICAgICAgICAgICAgZm9ybS5jbGtfeSA9IGUucGFnZVkgLSBvZmZzZXQudG9wOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGZvcm0uY2xrX3ggPSBlLnBhZ2VYIC0gdGhpcy5vZmZzZXRMZWZ0Ow0KICAgICAgICAgICAgICAgICAgICBmb3JtLmNsa195ID0gZS5wYWdlWSAtIHRoaXMub2Zmc2V0VG9wOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIGNsZWFyIGZvcm0gdmFycw0KICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZm9ybS5jbGsgPSBmb3JtLmNsa194ID0gZm9ybS5jbGtfeSA9IG51bGw7IH0sIDEwKTsNCiAgICAgICAgfSk7DQogICAgfSk7DQp9Ow0KDQovLyBhamF4Rm9ybVVuYmluZCB1bmJpbmRzIHRoZSBldmVudCBoYW5kbGVycyB0aGF0IHdlcmUgYm91bmQgYnkgYWpheEZvcm0NCiQuZm4uYWpheEZvcm1VbmJpbmQgPSBmdW5jdGlvbigpIHsNCiAgICB0aGlzLnVuYmluZCgnc3VibWl0LmZvcm0tcGx1Z2luJyk7DQogICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgJCgiOnN1Ym1pdCxpbnB1dDppbWFnZSIsIHRoaXMpLnVuYmluZCgnY2xpY2suZm9ybS1wbHVnaW4nKTsNCiAgICB9KTsNCg0KfTsNCg0KLyoqDQogKiBmb3JtVG9BcnJheSgpIGdhdGhlcnMgZm9ybSBlbGVtZW50IGRhdGEgaW50byBhbiBhcnJheSBvZiBvYmplY3RzIHRoYXQgY2FuDQogKiBiZSBwYXNzZWQgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgYWpheCBmdW5jdGlvbnM6ICQuZ2V0LCAkLnBvc3QsIG9yIGxvYWQuDQogKiBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkgaGFzIGJvdGggYSAnbmFtZScgYW5kICd2YWx1ZScgcHJvcGVydHkuICBBbiBleGFtcGxlIG9mDQogKiBhbiBhcnJheSBmb3IgYSBzaW1wbGUgbG9naW4gZm9ybSBtaWdodCBiZToNCiAqDQogKiBbIHsgbmFtZTogJ3VzZXJuYW1lJywgdmFsdWU6ICdqcmVzaWcnIH0sIHsgbmFtZTogJ3Bhc3N3b3JkJywgdmFsdWU6ICdzZWNyZXQnIH0gXQ0KICoNCiAqIEl0IGlzIHRoaXMgYXJyYXkgdGhhdCBpcyBwYXNzZWQgdG8gcHJlLXN1Ym1pdCBjYWxsYmFjayBmdW5jdGlvbnMgcHJvdmlkZWQgdG8gdGhlDQogKiBhamF4U3VibWl0KCkgYW5kIGFqYXhGb3JtKCkgbWV0aG9kcy4NCiAqLw0KJC5mbi5mb3JtVG9BcnJheSA9IGZ1bmN0aW9uKHNlbWFudGljKSB7DQogICAgdmFyIGEgPSBbXTsNCiAgICBpZiAodGhpcy5sZW5ndGggPT0gMCkgcmV0dXJuIGE7DQoNCiAgICB2YXIgZm9ybSA9IHRoaXNbMF07DQogICAgdmFyIGVscyA9IHNlbWFudGljID8gZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpIDogZm9ybS5lbGVtZW50czsNCiAgICBpZiAoIWVscykgcmV0dXJuIGE7DQogICAgZm9yKHZhciBpPTAsIG1heD1lbHMubGVuZ3RoOyBpIDwgbWF4OyBpKyspIHsNCiAgICAgICAgdmFyIGVsID0gZWxzW2ldOw0KICAgICAgICB2YXIgbiA9IGVsLm5hbWU7DQogICAgICAgIGlmICghbikgY29udGludWU7DQoNCiAgICAgICAgaWYgKHNlbWFudGljICYmIGZvcm0uY2xrICYmIGVsLnR5cGUgPT0gImltYWdlIikgew0KICAgICAgICAgICAgLy8gaGFuZGxlIGltYWdlIGlucHV0cyBvbiB0aGUgZmx5IHdoZW4gc2VtYW50aWMgPT0gdHJ1ZQ0KICAgICAgICAgICAgaWYoIWVsLmRpc2FibGVkICYmIGZvcm0uY2xrID09IGVsKQ0KICAgICAgICAgICAgICAgIGEucHVzaCh7bmFtZTogbisnLngnLCB2YWx1ZTogZm9ybS5jbGtfeH0sIHtuYW1lOiBuKycueScsIHZhbHVlOiBmb3JtLmNsa195fSk7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZhciB2ID0gJC5maWVsZFZhbHVlKGVsLCB0cnVlKTsNCiAgICAgICAgaWYgKHYgJiYgdi5jb25zdHJ1Y3RvciA9PSBBcnJheSkgew0KICAgICAgICAgICAgZm9yKHZhciBqPTAsIGptYXg9di5sZW5ndGg7IGogPCBqbWF4OyBqKyspDQogICAgICAgICAgICAgICAgYS5wdXNoKHtuYW1lOiBuLCB2YWx1ZTogdltqXX0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKHYgIT09IG51bGwgJiYgdHlwZW9mIHYgIT0gJ3VuZGVmaW5lZCcpDQogICAgICAgICAgICBhLnB1c2goe25hbWU6IG4sIHZhbHVlOiB2fSk7DQogICAgfQ0KDQogICAgaWYgKCFzZW1hbnRpYyAmJiBmb3JtLmNsaykgew0KICAgICAgICAvLyBpbnB1dCB0eXBlPT0naW1hZ2UnIGFyZSBub3QgZm91bmQgaW4gZWxlbWVudHMgYXJyYXkhIGhhbmRsZSB0aGVtIGhlcmUNCiAgICAgICAgdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iik7DQogICAgICAgIGZvcih2YXIgaT0wLCBtYXg9aW5wdXRzLmxlbmd0aDsgaSA8IG1heDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgaW5wdXQgPSBpbnB1dHNbaV07DQogICAgICAgICAgICB2YXIgbiA9IGlucHV0Lm5hbWU7DQogICAgICAgICAgICBpZihuICYmICFpbnB1dC5kaXNhYmxlZCAmJiBpbnB1dC50eXBlID09ICJpbWFnZSIgJiYgZm9ybS5jbGsgPT0gaW5wdXQpDQogICAgICAgICAgICAgICAgYS5wdXNoKHtuYW1lOiBuKycueCcsIHZhbHVlOiBmb3JtLmNsa194fSwge25hbWU6IG4rJy55JywgdmFsdWU6IGZvcm0uY2xrX3l9KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gYTsNCn07DQoNCi8qKg0KICogU2VyaWFsaXplcyBmb3JtIGRhdGEgaW50byBhICdzdWJtaXR0YWJsZScgc3RyaW5nLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBhIHN0cmluZw0KICogaW4gdGhlIGZvcm1hdDogbmFtZTE9dmFsdWUxJmFtcDtuYW1lMj12YWx1ZTINCiAqLw0KJC5mbi5mb3JtU2VyaWFsaXplID0gZnVuY3Rpb24oc2VtYW50aWMpIHsNCiAgICAvL2hhbmQgb2ZmIHRvIGpRdWVyeS5wYXJhbSBmb3IgcHJvcGVyIGVuY29kaW5nDQogICAgcmV0dXJuICQucGFyYW0odGhpcy5mb3JtVG9BcnJheShzZW1hbnRpYykpOw0KfTsNCg0KLyoqDQogKiBTZXJpYWxpemVzIGFsbCBmaWVsZCBlbGVtZW50cyBpbiB0aGUgalF1ZXJ5IG9iamVjdCBpbnRvIGEgcXVlcnkgc3RyaW5nLg0KICogVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYSBzdHJpbmcgaW4gdGhlIGZvcm1hdDogbmFtZTE9dmFsdWUxJmFtcDtuYW1lMj12YWx1ZTINCiAqLw0KJC5mbi5maWVsZFNlcmlhbGl6ZSA9IGZ1bmN0aW9uKHN1Y2Nlc3NmdWwpIHsNCiAgICB2YXIgYSA9IFtdOw0KICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIG4gPSB0aGlzLm5hbWU7DQogICAgICAgIGlmICghbikgcmV0dXJuOw0KICAgICAgICB2YXIgdiA9ICQuZmllbGRWYWx1ZSh0aGlzLCBzdWNjZXNzZnVsKTsNCiAgICAgICAgaWYgKHYgJiYgdi5jb25zdHJ1Y3RvciA9PSBBcnJheSkgew0KICAgICAgICAgICAgZm9yICh2YXIgaT0wLG1heD12Lmxlbmd0aDsgaSA8IG1heDsgaSsrKQ0KICAgICAgICAgICAgICAgIGEucHVzaCh7bmFtZTogbiwgdmFsdWU6IHZbaV19KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICh2ICE9PSBudWxsICYmIHR5cGVvZiB2ICE9ICd1bmRlZmluZWQnKQ0KICAgICAgICAgICAgYS5wdXNoKHtuYW1lOiB0aGlzLm5hbWUsIHZhbHVlOiB2fSk7DQogICAgfSk7DQogICAgLy9oYW5kIG9mZiB0byBqUXVlcnkucGFyYW0gZm9yIHByb3BlciBlbmNvZGluZw0KICAgIHJldHVybiAkLnBhcmFtKGEpOw0KfTsNCg0KLyoqDQogKiBSZXR1cm5zIHRoZSB2YWx1ZShzKSBvZiB0aGUgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBmb3JtOg0KICoNCiAqICA8Zm9ybT48ZmllbGRzZXQ+DQogKiAgICAgIDxpbnB1dCBuYW1lPSJBIiB0eXBlPSJ0ZXh0IiAvPg0KICogICAgICA8aW5wdXQgbmFtZT0iQSIgdHlwZT0idGV4dCIgLz4NCiAqICAgICAgPGlucHV0IG5hbWU9IkIiIHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iQjEiIC8+DQogKiAgICAgIDxpbnB1dCBuYW1lPSJCIiB0eXBlPSJjaGVja2JveCIgdmFsdWU9IkIyIi8+DQogKiAgICAgIDxpbnB1dCBuYW1lPSJDIiB0eXBlPSJyYWRpbyIgdmFsdWU9IkMxIiAvPg0KICogICAgICA8aW5wdXQgbmFtZT0iQyIgdHlwZT0icmFkaW8iIHZhbHVlPSJDMiIgLz4NCiAqICA8L2ZpZWxkc2V0PjwvZm9ybT4NCiAqDQogKiAgdmFyIHYgPSAkKCc6dGV4dCcpLmZpZWxkVmFsdWUoKTsNCiAqICAvLyBpZiBubyB2YWx1ZXMgYXJlIGVudGVyZWQgaW50byB0aGUgdGV4dCBpbnB1dHMNCiAqICB2ID09IFsnJywnJ10NCiAqICAvLyBpZiB2YWx1ZXMgZW50ZXJlZCBpbnRvIHRoZSB0ZXh0IGlucHV0cyBhcmUgJ2ZvbycgYW5kICdiYXInDQogKiAgdiA9PSBbJ2ZvbycsJ2JhciddDQogKg0KICogIHZhciB2ID0gJCgnOmNoZWNrYm94JykuZmllbGRWYWx1ZSgpOw0KICogIC8vIGlmIG5laXRoZXIgY2hlY2tib3ggaXMgY2hlY2tlZA0KICogIHYgPT09IHVuZGVmaW5lZA0KICogIC8vIGlmIGJvdGggY2hlY2tib3hlcyBhcmUgY2hlY2tlZA0KICogIHYgPT0gWydCMScsICdCMiddDQogKg0KICogIHZhciB2ID0gJCgnOnJhZGlvJykuZmllbGRWYWx1ZSgpOw0KICogIC8vIGlmIG5laXRoZXIgcmFkaW8gaXMgY2hlY2tlZA0KICogIHYgPT09IHVuZGVmaW5lZA0KICogIC8vIGlmIGZpcnN0IHJhZGlvIGlzIGNoZWNrZWQNCiAqICB2ID09IFsnQzEnXQ0KICoNCiAqIFRoZSBzdWNjZXNzZnVsIGFyZ3VtZW50IGNvbnRyb2xzIHdoZXRoZXIgb3Igbm90IHRoZSBmaWVsZCBlbGVtZW50IG11c3QgYmUgJ3N1Y2Nlc3NmdWwnDQogKiAocGVyIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2ludGVyYWN0L2Zvcm1zLmh0bWwjc3VjY2Vzc2Z1bC1jb250cm9scykuDQogKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgc3VjY2Vzc2Z1bCBhcmd1bWVudCBpcyB0cnVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBmYWxzZSB0aGUgdmFsdWUocykNCiAqIGZvciBlYWNoIGVsZW1lbnQgaXMgcmV0dXJuZWQuDQogKg0KICogTm90ZTogVGhpcyBtZXRob2QgKmFsd2F5cyogcmV0dXJucyBhbiBhcnJheS4gIElmIG5vIHZhbGlkIHZhbHVlIGNhbiBiZSBkZXRlcm1pbmVkIHRoZQ0KICogICAgICAgYXJyYXkgd2lsbCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGl0IHdpbGwgY29udGFpbiBvbmUgb3IgbW9yZSB2YWx1ZXMuDQogKi8NCiQuZm4uZmllbGRWYWx1ZSA9IGZ1bmN0aW9uKHN1Y2Nlc3NmdWwpIHsNCiAgICBmb3IgKHZhciB2YWw9W10sIGk9MCwgbWF4PXRoaXMubGVuZ3RoOyBpIDwgbWF4OyBpKyspIHsNCiAgICAgICAgdmFyIGVsID0gdGhpc1tpXTsNCiAgICAgICAgdmFyIHYgPSAkLmZpZWxkVmFsdWUoZWwsIHN1Y2Nlc3NmdWwpOw0KICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB0eXBlb2YgdiA9PSAndW5kZWZpbmVkJyB8fCAodi5jb25zdHJ1Y3RvciA9PSBBcnJheSAmJiAhdi5sZW5ndGgpKQ0KICAgICAgICAgICAgY29udGludWU7DQogICAgICAgIHYuY29uc3RydWN0b3IgPT0gQXJyYXkgPyAkLm1lcmdlKHZhbCwgdikgOiB2YWwucHVzaCh2KTsNCiAgICB9DQogICAgcmV0dXJuIHZhbDsNCn07DQoNCi8qKg0KICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGVsZW1lbnQuDQogKi8NCiQuZmllbGRWYWx1ZSA9IGZ1bmN0aW9uKGVsLCBzdWNjZXNzZnVsKSB7DQogICAgdmFyIG4gPSBlbC5uYW1lLCB0ID0gZWwudHlwZSwgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpOw0KICAgIGlmICh0eXBlb2Ygc3VjY2Vzc2Z1bCA9PSAndW5kZWZpbmVkJykgc3VjY2Vzc2Z1bCA9IHRydWU7DQoNCiAgICBpZiAoc3VjY2Vzc2Z1bCAmJiAoIW4gfHwgZWwuZGlzYWJsZWQgfHwgdCA9PSAncmVzZXQnIHx8IHQgPT0gJ2J1dHRvbicgfHwNCiAgICAgICAgKHQgPT0gJ2NoZWNrYm94JyB8fCB0ID09ICdyYWRpbycpICYmICFlbC5jaGVja2VkIHx8DQogICAgICAgICh0ID09ICdzdWJtaXQnIHx8IHQgPT0gJ2ltYWdlJykgJiYgZWwuZm9ybSAmJiBlbC5mb3JtLmNsayAhPSBlbCB8fA0KICAgICAgICB0YWcgPT0gJ3NlbGVjdCcgJiYgZWwuc2VsZWN0ZWRJbmRleCA9PSAtMSkpDQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCg0KICAgIGlmICh0YWcgPT0gJ3NlbGVjdCcpIHsNCiAgICAgICAgdmFyIGluZGV4ID0gZWwuc2VsZWN0ZWRJbmRleDsNCiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIG51bGw7DQogICAgICAgIHZhciBhID0gW10sIG9wcyA9IGVsLm9wdGlvbnM7DQogICAgICAgIHZhciBvbmUgPSAodCA9PSAnc2VsZWN0LW9uZScpOw0KICAgICAgICB2YXIgbWF4ID0gKG9uZSA/IGluZGV4KzEgOiBvcHMubGVuZ3RoKTsNCiAgICAgICAgZm9yKHZhciBpPShvbmUgPyBpbmRleCA6IDApOyBpIDwgbWF4OyBpKyspIHsNCiAgICAgICAgICAgIHZhciBvcCA9IG9wc1tpXTsNCiAgICAgICAgICAgIGlmIChvcC5zZWxlY3RlZCkgew0KICAgICAgICAgICAgICAgIC8vIGV4dHJhIHBhaW4gZm9yIElFLi4uDQogICAgICAgICAgICAgICAgdmFyIHYgPSAkLmJyb3dzZXIubXNpZSAmJiAhKG9wLmF0dHJpYnV0ZXNbJ3ZhbHVlJ10uc3BlY2lmaWVkKSA/IG9wLnRleHQgOiBvcC52YWx1ZTsNCiAgICAgICAgICAgICAgICBpZiAob25lKSByZXR1cm4gdjsNCiAgICAgICAgICAgICAgICBhLnB1c2godik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGE7DQogICAgfQ0KICAgIHJldHVybiBlbC52YWx1ZTsNCn07DQoNCi8qKg0KICogQ2xlYXJzIHRoZSBmb3JtIGRhdGEuICBUYWtlcyB0aGUgZm9sbG93aW5nIGFjdGlvbnMgb24gdGhlIGZvcm0ncyBpbnB1dCBmaWVsZHM6DQogKiAgLSBpbnB1dCB0ZXh0IGZpZWxkcyB3aWxsIGhhdmUgdGhlaXIgJ3ZhbHVlJyBwcm9wZXJ0eSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZw0KICogIC0gc2VsZWN0IGVsZW1lbnRzIHdpbGwgaGF2ZSB0aGVpciAnc2VsZWN0ZWRJbmRleCcgcHJvcGVydHkgc2V0IHRvIC0xDQogKiAgLSBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzIHdpbGwgaGF2ZSB0aGVpciAnY2hlY2tlZCcgcHJvcGVydHkgc2V0IHRvIGZhbHNlDQogKiAgLSBpbnB1dHMgb2YgdHlwZSBzdWJtaXQsIGJ1dHRvbiwgcmVzZXQsIGFuZCBoaWRkZW4gd2lsbCAqbm90KiBiZSBlZmZlY3RlZA0KICogIC0gYnV0dG9uIGVsZW1lbnRzIHdpbGwgKm5vdCogYmUgZWZmZWN0ZWQNCiAqLw0KJC5mbi5jbGVhckZvcm0gPSBmdW5jdGlvbigpIHsNCiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICAkKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEnLCB0aGlzKS5jbGVhckZpZWxkcygpOw0KICAgIH0pOw0KfTsNCg0KLyoqDQogKiBDbGVhcnMgdGhlIHNlbGVjdGVkIGZvcm0gZWxlbWVudHMuDQogKi8NCiQuZm4uY2xlYXJGaWVsZHMgPSAkLmZuLmNsZWFySW5wdXRzID0gZnVuY3Rpb24oKSB7DQogICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIHQgPSB0aGlzLnR5cGUsIHRhZyA9IHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpOw0KICAgICAgICBpZiAodCA9PSAndGV4dCcgfHwgdCA9PSAncGFzc3dvcmQnIHx8IHRhZyA9PSAndGV4dGFyZWEnKQ0KICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICcnOw0KICAgICAgICBlbHNlIGlmICh0ID09ICdjaGVja2JveCcgfHwgdCA9PSAncmFkaW8nKQ0KICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gZmFsc2U7DQogICAgICAgIGVsc2UgaWYgKHRhZyA9PSAnc2VsZWN0JykNCiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xOw0KICAgIH0pOw0KfTsNCg0KLyoqDQogKiBSZXNldHMgdGhlIGZvcm0gZGF0YS4gIENhdXNlcyBhbGwgZm9ybSBlbGVtZW50cyB0byBiZSByZXNldCB0byB0aGVpciBvcmlnaW5hbCB2YWx1ZS4NCiAqLw0KJC5mbi5yZXNldEZvcm0gPSBmdW5jdGlvbigpIHsNCiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICAvLyBndWFyZCBhZ2FpbnN0IGFuIGlucHV0IHdpdGggdGhlIG5hbWUgb2YgJ3Jlc2V0Jw0KICAgICAgICAvLyBub3RlIHRoYXQgSUUgcmVwb3J0cyB0aGUgcmVzZXQgZnVuY3Rpb24gYXMgYW4gJ29iamVjdCcNCiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc2V0ID09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiB0aGlzLnJlc2V0ID09ICdvYmplY3QnICYmICF0aGlzLnJlc2V0Lm5vZGVUeXBlKSkNCiAgICAgICAgICAgIHRoaXMucmVzZXQoKTsNCiAgICB9KTsNCn07DQoNCi8qKg0KICogRW5hYmxlcyBvciBkaXNhYmxlcyBhbnkgbWF0Y2hpbmcgZWxlbWVudHMuDQogKi8NCiQuZm4uZW5hYmxlID0gZnVuY3Rpb24oYikgeyANCiAgICBpZiAoYiA9PSB1bmRlZmluZWQpIGIgPSB0cnVlOw0KICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IA0KICAgICAgICB0aGlzLmRpc2FibGVkID0gIWIgDQogICAgfSk7DQp9Ow0KDQovKioNCiAqIENoZWNrcy91bmNoZWNrcyBhbnkgbWF0Y2hpbmcgY2hlY2tib3hlcyBvciByYWRpbyBidXR0b25zIGFuZA0KICogc2VsZWN0cy9kZXNlbGVjdHMgYW5kIG1hdGNoaW5nIG9wdGlvbiBlbGVtZW50cy4NCiAqLw0KJC5mbi5zZWxlY3RlZCA9IGZ1bmN0aW9uKHNlbGVjdCkgew0KICAgIGlmIChzZWxlY3QgPT0gdW5kZWZpbmVkKSBzZWxlY3QgPSB0cnVlOw0KICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IA0KICAgICAgICB2YXIgdCA9IHRoaXMudHlwZTsNCiAgICAgICAgaWYgKHQgPT0gJ2NoZWNrYm94JyB8fCB0ID09ICdyYWRpbycpDQogICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSBzZWxlY3Q7DQogICAgICAgIGVsc2UgaWYgKHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdvcHRpb24nKSB7DQogICAgICAgICAgICB2YXIgJHNlbCA9ICQodGhpcykucGFyZW50KCdzZWxlY3QnKTsNCiAgICAgICAgICAgIGlmIChzZWxlY3QgJiYgJHNlbFswXSAmJiAkc2VsWzBdLnR5cGUgPT0gJ3NlbGVjdC1vbmUnKSB7DQogICAgICAgICAgICAgICAgLy8gZGVzZWxlY3QgYWxsIG90aGVyIG9wdGlvbnMNCiAgICAgICAgICAgICAgICAkc2VsLmZpbmQoJ29wdGlvbicpLnNlbGVjdGVkKGZhbHNlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3Q7DQogICAgICAgIH0NCiAgICB9KTsNCn07DQoNCi8vIGhlbHBlciBmbiBmb3IgY29uc29sZSBsb2dnaW5nDQovLyBzZXQgJC5mbi5hamF4U3VibWl0LmRlYnVnIHRvIHRydWUgdG8gZW5hYmxlIGRlYnVnIGxvZ2dpbmcNCmZ1bmN0aW9uIGxvZygpIHsNCiAgICBpZiAoJC5mbi5hamF4U3VibWl0LmRlYnVnICYmIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZykNCiAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCdbanF1ZXJ5LmZvcm1dICcgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3VtZW50cywnJykpOw0KfTsNCg0KfSkoalF1ZXJ5KTsNCg==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.hoverIntent.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/LyoqCiogaG92ZXJJbnRlbnQgaXMgc2ltaWxhciB0byBqUXVlcnkncyBidWlsdC1pbiAiaG92ZXIiIGZ1bmN0aW9uIGV4Y2VwdCB0aGF0CiogaW5zdGVhZCBvZiBmaXJpbmcgdGhlIG9uTW91c2VPdmVyIGV2ZW50IGltbWVkaWF0ZWx5LCBob3ZlckludGVudCBjaGVja3MKKiB0byBzZWUgaWYgdGhlIHVzZXIncyBtb3VzZSBoYXMgc2xvd2VkIGRvd24gKGJlbmVhdGggdGhlIHNlbnNpdGl2aXR5CiogdGhyZXNob2xkKSBiZWZvcmUgZmlyaW5nIHRoZSBvbk1vdXNlT3ZlciBldmVudC4KKiAKKiBob3ZlckludGVudCByNSAvLyAyMDA3LjAzLjI3IC8vIGpRdWVyeSAxLjEuMgoqIDxodHRwOi8vY2hlcm5lLm5ldC9icmlhbi9yZXNvdXJjZXMvanF1ZXJ5LmhvdmVySW50ZW50Lmh0bWw+CiogCiogaG92ZXJJbnRlbnQgaXMgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgdXNlIGluIGFsbCBwZXJzb25hbCBvciBjb21tZXJjaWFsIAoqIHByb2plY3RzIHVuZGVyIGJvdGggTUlUIGFuZCBHUEwgbGljZW5zZXMuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGNob29zZSAKKiB0aGUgbGljZW5zZSB0aGF0IGJlc3Qgc3VpdHMgeW91ciBwcm9qZWN0LCBhbmQgdXNlIGl0IGFjY29yZGluZ2x5LgoqIAoqIC8vIGJhc2ljIHVzYWdlIChqdXN0IGxpa2UgLmhvdmVyKSByZWNlaXZlcyBvbk1vdXNlT3ZlciBhbmQgb25Nb3VzZU91dCBmdW5jdGlvbnMKKiAkKCJ1bCBsaSIpLmhvdmVySW50ZW50KCBzaG93TmF2ICwgaGlkZU5hdiApOwoqIAoqIC8vIGFkdmFuY2VkIHVzYWdlIHJlY2VpdmVzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9ubHkKKiAkKCJ1bCBsaSIpLmhvdmVySW50ZW50KHsKKglzZW5zaXRpdml0eTogMiwgLy8gbnVtYmVyID0gc2Vuc2l0aXZpdHkgdGhyZXNob2xkIChtdXN0IGJlIDEgb3IgaGlnaGVyKQoqCWludGVydmFsOiA1MCwgICAvLyBudW1iZXIgPSBtaWxsaXNlY29uZHMgb2YgcG9sbGluZyBpbnRlcnZhbAoqCW92ZXI6IHNob3dOYXYsICAvLyBmdW5jdGlvbiA9IG9uTW91c2VPdmVyIGNhbGxiYWNrIChyZXF1aXJlZCkKKgl0aW1lb3V0OiAxMDAsICAgLy8gbnVtYmVyID0gbWlsbGlzZWNvbmRzIGRlbGF5IGJlZm9yZSBvbk1vdXNlT3V0IGZ1bmN0aW9uIGNhbGwKKglvdXQ6IGhpZGVOYXYgICAgLy8gZnVuY3Rpb24gPSBvbk1vdXNlT3V0IGNhbGxiYWNrIChyZXF1aXJlZCkKKiB9KTsKKiAKKiBAcGFyYW0gIGYgIG9uTW91c2VPdmVyIGZ1bmN0aW9uIHx8IEFuIG9iamVjdCB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwoqIEBwYXJhbSAgZyAgb25Nb3VzZU91dCBmdW5jdGlvbiAgfHwgTm90aGluZyAodXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvYmplY3QpCiogQHJldHVybiAgICBUaGUgb2JqZWN0IChha2EgInRoaXMiKSB0aGF0IGNhbGxlZCBob3ZlckludGVudCwgYW5kIHRoZSBldmVudCBvYmplY3QKKiBAYXV0aG9yICAgIEJyaWFuIENoZXJuZSA8YnJpYW5AY2hlcm5lLm5ldD4KKi8KKGZ1bmN0aW9uKCQpIHsKCSQuZm4uaG92ZXJJbnRlbnQgPSBmdW5jdGlvbihmLGcpIHsKCQkvLyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucwoJCXZhciBjZmcgPSB7CgkJCXNlbnNpdGl2aXR5OiA3LAoJCQlpbnRlcnZhbDogMTAwLAoJCQl0aW1lb3V0OiAwCgkJfTsKCQkvLyBvdmVycmlkZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aCB1c2VyIHN1cHBsaWVkIG9iamVjdAoJCWNmZyA9ICQuZXh0ZW5kKGNmZywgZyA/IHsgb3ZlcjogZiwgb3V0OiBnIH0gOiBmICk7CgoJCS8vIGluc3RhbnRpYXRlIHZhcmlhYmxlcwoJCS8vIGNYLCBjWSA9IGN1cnJlbnQgWCBhbmQgWSBwb3NpdGlvbiBvZiBtb3VzZSwgdXBkYXRlZCBieSBtb3VzZW1vdmUgZXZlbnQKCQkvLyBwWCwgcFkgPSBwcmV2aW91cyBYIGFuZCBZIHBvc2l0aW9uIG9mIG1vdXNlLCBzZXQgYnkgbW91c2VvdmVyIGFuZCBwb2xsaW5nIGludGVydmFsCgkJdmFyIGNYLCBjWSwgcFgsIHBZOwoKCQkvLyBBIHByaXZhdGUgZnVuY3Rpb24gZm9yIGdldHRpbmcgbW91c2UgcG9zaXRpb24KCQl2YXIgdHJhY2sgPSBmdW5jdGlvbihldikgewoJCQljWCA9IGV2LnBhZ2VYOwoJCQljWSA9IGV2LnBhZ2VZOwoJCX07CgoJCS8vIEEgcHJpdmF0ZSBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIGN1cnJlbnQgYW5kIHByZXZpb3VzIG1vdXNlIHBvc2l0aW9uCgkJdmFyIGNvbXBhcmUgPSBmdW5jdGlvbihldixvYikgewoJCQlvYi5ob3ZlckludGVudF90ID0gY2xlYXJUaW1lb3V0KG9iLmhvdmVySW50ZW50X3QpOwoJCQkvLyBjb21wYXJlIG1vdXNlIHBvc2l0aW9ucyB0byBzZWUgaWYgdGhleSd2ZSBjcm9zc2VkIHRoZSB0aHJlc2hvbGQKCQkJaWYgKCAoIE1hdGguYWJzKHBYLWNYKSArIE1hdGguYWJzKHBZLWNZKSApIDwgY2ZnLnNlbnNpdGl2aXR5ICkgewoJCQkJJChvYikudW5iaW5kKCJtb3VzZW1vdmUiLHRyYWNrKTsKCQkJCS8vIHNldCBob3ZlckludGVudCBzdGF0ZSB0byB0cnVlIChzbyBtb3VzZU91dCBjYW4gYmUgY2FsbGVkKQoJCQkJb2IuaG92ZXJJbnRlbnRfcyA9IDE7CgkJCQlyZXR1cm4gY2ZnLm92ZXIuYXBwbHkob2IsW2V2XSk7CgkJCX0gZWxzZSB7CgkJCQkvLyBzZXQgcHJldmlvdXMgY29vcmRpbmF0ZXMgZm9yIG5leHQgdGltZQoJCQkJcFggPSBjWDsgcFkgPSBjWTsKCQkJCS8vIHVzZSBzZWxmLWNhbGxpbmcgdGltZW91dCwgZ3VhcmFudGVlcyBpbnRlcnZhbHMgYXJlIHNwYWNlZCBvdXQgcHJvcGVybHkgKGF2b2lkcyBKYXZhU2NyaXB0IHRpbWVyIGJ1Z3MpCgkJCQlvYi5ob3ZlckludGVudF90ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXtjb21wYXJlKGV2LCBvYik7fSAsIGNmZy5pbnRlcnZhbCApOwoJCQl9CgkJfTsKCgkJLy8gQSBwcml2YXRlIGZ1bmN0aW9uIGZvciBkZWxheWluZyB0aGUgbW91c2VPdXQgZnVuY3Rpb24KCQl2YXIgZGVsYXkgPSBmdW5jdGlvbihldixvYikgewoJCQlvYi5ob3ZlckludGVudF90ID0gY2xlYXJUaW1lb3V0KG9iLmhvdmVySW50ZW50X3QpOwoJCQlvYi5ob3ZlckludGVudF9zID0gMDsKCQkJcmV0dXJuIGNmZy5vdXQuYXBwbHkob2IsW2V2XSk7CgkJfTsKCgkJLy8gQSBwcml2YXRlIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBtb3VzZSAnaG92ZXJpbmcnCgkJdmFyIGhhbmRsZUhvdmVyID0gZnVuY3Rpb24oZSkgewoJCQkvLyBuZXh0IHRocmVlIGxpbmVzIGNvcGllZCBmcm9tIGpRdWVyeS5ob3ZlciwgaWdub3JlIGNoaWxkcmVuIG9uTW91c2VPdmVyL29uTW91c2VPdXQKCQkJdmFyIHAgPSAoZS50eXBlID09ICJtb3VzZW92ZXIiID8gZS5mcm9tRWxlbWVudCA6IGUudG9FbGVtZW50KSB8fCBlLnJlbGF0ZWRUYXJnZXQ7CgkJCXdoaWxlICggcCAmJiBwICE9IHRoaXMgKSB7IHRyeSB7IHAgPSBwLnBhcmVudE5vZGU7IH0gY2F0Y2goZSkgeyBwID0gdGhpczsgfSB9CgkJCWlmICggcCA9PSB0aGlzICkgeyByZXR1cm4gZmFsc2U7IH0KCgkJCS8vIGNvcHkgb2JqZWN0cyB0byBiZSBwYXNzZWQgaW50byB0IChyZXF1aXJlZCBmb3IgZXZlbnQgb2JqZWN0IHRvIGJlIHBhc3NlZCBpbiBJRSkKCQkJdmFyIGV2ID0galF1ZXJ5LmV4dGVuZCh7fSxlKTsKCQkJdmFyIG9iID0gdGhpczsKCgkJCS8vIGNhbmNlbCBob3ZlckludGVudCB0aW1lciBpZiBpdCBleGlzdHMKCQkJaWYgKG9iLmhvdmVySW50ZW50X3QpIHsgb2IuaG92ZXJJbnRlbnRfdCA9IGNsZWFyVGltZW91dChvYi5ob3ZlckludGVudF90KTsgfQoKCQkJLy8gZWxzZSBlLnR5cGUgPT0gIm9ubW91c2VvdmVyIgoJCQlpZiAoZS50eXBlID09ICJtb3VzZW92ZXIiKSB7CgkJCQkvLyBzZXQgInByZXZpb3VzIiBYIGFuZCBZIHBvc2l0aW9uIGJhc2VkIG9uIGluaXRpYWwgZW50cnkgcG9pbnQKCQkJCXBYID0gZXYucGFnZVg7IHBZID0gZXYucGFnZVk7CgkJCQkvLyB1cGRhdGUgImN1cnJlbnQiIFggYW5kIFkgcG9zaXRpb24gYmFzZWQgb24gbW91c2Vtb3ZlCgkJCQkkKG9iKS5iaW5kKCJtb3VzZW1vdmUiLHRyYWNrKTsKCQkJCS8vIHN0YXJ0IHBvbGxpbmcgaW50ZXJ2YWwgKHNlbGYtY2FsbGluZyB0aW1lb3V0KSB0byBjb21wYXJlIG1vdXNlIGNvb3JkaW5hdGVzIG92ZXIgdGltZQoJCQkJaWYgKG9iLmhvdmVySW50ZW50X3MgIT0gMSkgeyBvYi5ob3ZlckludGVudF90ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXtjb21wYXJlKGV2LG9iKTt9ICwgY2ZnLmludGVydmFsICk7fQoKCQkJLy8gZWxzZSBlLnR5cGUgPT0gIm9ubW91c2VvdXQiCgkJCX0gZWxzZSB7CgkJCQkvLyB1bmJpbmQgZXhwZW5zaXZlIG1vdXNlbW92ZSBldmVudAoJCQkJJChvYikudW5iaW5kKCJtb3VzZW1vdmUiLHRyYWNrKTsKCQkJCS8vIGlmIGhvdmVySW50ZW50IHN0YXRlIGlzIHRydWUsIHRoZW4gY2FsbCB0aGUgbW91c2VPdXQgZnVuY3Rpb24gYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheQoJCQkJaWYgKG9iLmhvdmVySW50ZW50X3MgPT0gMSkgeyBvYi5ob3ZlckludGVudF90ID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXtkZWxheShldixvYik7fSAsIGNmZy50aW1lb3V0ICk7fQoJCQl9CgkJfTsKCgkJLy8gYmluZCB0aGUgZnVuY3Rpb24gdG8gdGhlIHR3byBldmVudCBsaXN0ZW5lcnMKCQlyZXR1cm4gdGhpcy5tb3VzZW92ZXIoaGFuZGxlSG92ZXIpLm1vdXNlb3V0KGhhbmRsZUhvdmVyKTsKCX07Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.lightbox-0.5.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqDQogKiBqUXVlcnkgbGlnaHRCb3ggcGx1Z2luDQogKiBUaGlzIGpRdWVyeSBwbHVnaW4gd2FzIGluc3BpcmVkIGFuZCBiYXNlZCBvbiBMaWdodGJveCAyIGJ5IExva2VzaCBEaGFrYXIgKGh0dHA6Ly93d3cuaHVkZGxldG9nZXRoZXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Mi8pDQogKiBhbmQgYWRhcHRlZCB0byBtZSBmb3IgdXNlIGxpa2UgYSBwbHVnaW4gZnJvbSBqUXVlcnkuDQogKiBAbmFtZSBqcXVlcnktbGlnaHRib3gtMC41LmpzDQogKiBAYXV0aG9yIExlYW5kcm8gVmllaXJhIFBpbmhvIC0gaHR0cDovL2xlYW5kcm92aWVpcmEuY29tDQogKiBAdmVyc2lvbiAwLjUNCiAqIEBkYXRlIEFwcmlsIDExLCAyMDA4DQogKiBAY2F0ZWdvcnkgalF1ZXJ5IHBsdWdpbg0KICogQGNvcHlyaWdodCAoYykgMjAwOCBMZWFuZHJvIFZpZWlyYSBQaW5obyAobGVhbmRyb3ZpZWlyYS5jb20pDQogKiBAbGljZW5zZSBDQyBBdHRyaWJ1dGlvbi1ObyBEZXJpdmF0aXZlIFdvcmtzIDIuNSBCcmF6aWwgLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1uZC8yLjUvYnIvZGVlZC5lbl9VUw0KICogQGV4YW1wbGUgVmlzaXQgaHR0cDovL2xlYW5kcm92aWVpcmEuY29tL3Byb2plY3RzL2pxdWVyeS9saWdodGJveC8gZm9yIG1vcmUgaW5mb3JtYXRpb25zIGFib3V0IHRoaXMgalF1ZXJ5IHBsdWdpbg0KICovDQoNCi8vIE9mZmVyaW5nIGEgQ3VzdG9tIEFsaWFzIHN1cG9ydCAtIE1vcmUgaW5mbzogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9QbHVnaW5zL0F1dGhvcmluZyNDdXN0b21fQWxpYXMNCihmdW5jdGlvbigkKSB7DQoJLyoqDQoJICogJCBpcyBhbiBhbGlhcyB0byBqUXVlcnkgb2JqZWN0DQoJICoNCgkgKi8NCgkkLmZuLmxpZ2h0Qm94ID0gZnVuY3Rpb24oc2V0dGluZ3MpIHsNCgkJLy8gU2V0dGluZ3MgdG8gY29uZmlndXJlIHRoZSBqUXVlcnkgbGlnaHRCb3ggcGx1Z2luIGhvdyB5b3UgbGlrZQ0KCQlzZXR0aW5ncyA9IGpRdWVyeS5leHRlbmQoew0KCQkJLy8gQ29uZmlndXJhdGlvbiByZWxhdGVkIHRvIG92ZXJsYXkNCgkJCW92ZXJsYXlCZ0NvbG9yOiAJCScjMDAwJywJCS8vIChzdHJpbmcpIEJhY2tncm91bmQgY29sb3IgdG8gb3ZlcmxheTsgaW5mb3JtIGEgaGV4YWRlY2ltYWwgdmFsdWUgbGlrZTogI1JSR0dCQi4gV2hlcmUgUlIsIEdHLCBhbmQgQkIgYXJlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgZm9yIHRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSB2YWx1ZXMgb2YgdGhlIGNvbG9yLg0KCQkJb3ZlcmxheU9wYWNpdHk6CQkJMC44LAkJLy8gKGludGVnZXIpIE9wYWNpdHkgdmFsdWUgdG8gb3ZlcmxheTsgaW5mb3JtOiAwLlguIFdoZXJlIFggYXJlIG51bWJlciBmcm9tIDAgdG8gOQ0KCQkJLy8gQ29uZmlndXJhdGlvbiByZWxhdGVkIHRvIG5hdmlnYXRpb24NCgkJCWZpeGVkTmF2aWdhdGlvbjoJCWZhbHNlLAkJLy8gKGJvb2xlYW4pIEJvb2xlYW4gdGhhdCBpbmZvcm1zIGlmIHRoZSBuYXZpZ2F0aW9uIChuZXh0IGFuZCBwcmV2IGJ1dHRvbikgd2lsbCBiZSBmaXhlZCBvciBub3QgaW4gdGhlIGludGVyZmFjZS4NCgkJCS8vIENvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBpbWFnZXMNCgkJCWltYWdlTG9hZGluZzoJCQknbW9kdWxlcy9KUXVlcnlUb29scy9saWIvaW1ncy9saWdodGJveC1pY28tbG9hZGluZy5naWYnLAkJLy8gKHN0cmluZykgUGF0aCBhbmQgdGhlIG5hbWUgb2YgdGhlIGxvYWRpbmcgaWNvbg0KCQkJaW1hZ2VCdG5QcmV2OgkJCSdtb2R1bGVzL0pRdWVyeVRvb2xzL2xpYi9pbWdzL2xpZ2h0Ym94LWJ0bi1wcmV2LmdpZicsCQkJLy8gKHN0cmluZykgUGF0aCBhbmQgdGhlIG5hbWUgb2YgdGhlIHByZXYgYnV0dG9uIGltYWdlDQoJCQlpbWFnZUJ0bk5leHQ6CQkJJ21vZHVsZXMvSlF1ZXJ5VG9vbHMvbGliL2ltZ3MvbGlnaHRib3gtYnRuLW5leHQuZ2lmJywJCQkvLyAoc3RyaW5nKSBQYXRoIGFuZCB0aGUgbmFtZSBvZiB0aGUgbmV4dCBidXR0b24gaW1hZ2UNCgkJCWltYWdlQnRuQ2xvc2U6CQkJJ21vZHVsZXMvSlF1ZXJ5VG9vbHMvbGliL2ltZ3MvbGlnaHRib3gtYnRuLWNsb3NlLmdpZicsCQkvLyAoc3RyaW5nKSBQYXRoIGFuZCB0aGUgbmFtZSBvZiB0aGUgY2xvc2UgYnRuDQoJCQlpbWFnZUJsYW5rOgkJCQknbW9kdWxlcy9KUXVlcnlUb29scy9saWIvaW1ncy9saWdodGJveC1ibGFuay5naWYnLAkJCS8vIChzdHJpbmcpIFBhdGggYW5kIHRoZSBuYW1lIG9mIGEgYmxhbmsgaW1hZ2UgKG9uZSBwaXhlbCkNCgkJCS8vIENvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBjb250YWluZXIgaW1hZ2UgYm94DQoJCQljb250YWluZXJCb3JkZXJTaXplOgkxMCwJCQkvLyAoaW50ZWdlcikgSWYgeW91IGFkanVzdCB0aGUgcGFkZGluZyBpbiB0aGUgQ1NTIGZvciB0aGUgY29udGFpbmVyLCAjbGlnaHRib3gtY29udGFpbmVyLWltYWdlLWJveCwgeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhpcyB2YWx1ZQ0KCQkJY29udGFpbmVyUmVzaXplU3BlZWQ6CTQwMCwJCS8vIChpbnRlZ2VyKSBTcGVjaWZ5IHRoZSByZXNpemUgZHVyYXRpb24gb2YgY29udGFpbmVyIGltYWdlLiBUaGVzZSBudW1iZXIgYXJlIG1pbGlzZWNvbmRzLiA0MDAgaXMgZGVmYXVsdC4NCgkJCS8vIENvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byB0ZXh0cyBpbiBjYXB0aW9uLiBGb3IgZXhhbXBsZTogSW1hZ2UgMiBvZiA4LiBZb3UgY2FuIGFsdGVyIGVpdGhlciAiSW1hZ2UiIGFuZCAib2YiIHRleHRzLg0KCQkJdHh0SW1hZ2U6CQkJCSdJbWFnZScsCS8vIChzdHJpbmcpIFNwZWNpZnkgdGV4dCAiSW1hZ2UiDQoJCQl0eHRPZjoJCQkJCSdvZicsCQkvLyAoc3RyaW5nKSBTcGVjaWZ5IHRleHQgIm9mIg0KCQkJLy8gQ29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGtleWJvYXJkIG5hdmlnYXRpb24NCgkJCWtleVRvQ2xvc2U6CQkJCSdjJywJCS8vIChzdHJpbmcpIChjID0gY2xvc2UpIExldHRlciB0byBjbG9zZSB0aGUgalF1ZXJ5IGxpZ2h0Qm94IGludGVyZmFjZS4gQmV5b25kIHRoaXMgbGV0dGVyLCB0aGUgbGV0dGVyIFggYW5kIHRoZSBTQ0FQRSBrZXkgaXMgdXNlZCB0by4NCgkJCWtleVRvUHJldjoJCQkJJ3AnLAkJLy8gKHN0cmluZykgKHAgPSBwcmV2aW91cykgTGV0dGVyIHRvIHNob3cgdGhlIHByZXZpb3VzIGltYWdlDQoJCQlrZXlUb05leHQ6CQkJCSduJywJCS8vIChzdHJpbmcpIChuID0gbmV4dCkgTGV0dGVyIHRvIHNob3cgdGhlIG5leHQgaW1hZ2UuDQoJCQkvLyBEb260dCBhbHRlciB0aGVzZSB2YXJpYWJsZXMgaW4gYW55IHdheQ0KCQkJaW1hZ2VBcnJheToJCQkJW10sDQoJCQlhY3RpdmVJbWFnZToJCQkwDQoJCX0sc2V0dGluZ3MpOw0KCQkvLyBDYWNoaW5nIHRoZSBqUXVlcnkgb2JqZWN0IHdpdGggYWxsIGVsZW1lbnRzIG1hdGNoZWQNCgkJdmFyIGpRdWVyeU1hdGNoZWRPYmogPSB0aGlzOyAvLyBUaGlzLCBpbiB0aGlzIGNvbnRleHQsIHJlZmVyIHRvIGpRdWVyeSBvYmplY3QNCgkJLyoqDQoJCSAqIEluaXRpYWxpemluZyB0aGUgcGx1Z2luIGNhbGxpbmcgdGhlIHN0YXJ0IGZ1bmN0aW9uDQoJCSAqDQoJCSAqIEByZXR1cm4gYm9vbGVhbiBmYWxzZQ0KCQkgKi8NCgkJZnVuY3Rpb24gX2luaXRpYWxpemUoKSB7DQoJCQlfc3RhcnQodGhpcyxqUXVlcnlNYXRjaGVkT2JqKTsgLy8gVGhpcywgaW4gdGhpcyBjb250ZXh0LCByZWZlciB0byBvYmplY3QgKGxpbmspIHdoaWNoIHRoZSB1c2VyIGhhdmUgY2xpY2tlZA0KCQkJcmV0dXJuIGZhbHNlOyAvLyBBdm9pZCB0aGUgYnJvd3NlciBmb2xsb3dpbmcgdGhlIGxpbmsNCgkJfQ0KCQkvKioNCgkJICogU3RhcnQgdGhlIGpRdWVyeSBsaWdodEJveCBwbHVnaW4NCgkJICoNCgkJICogQHBhcmFtIG9iamVjdCBvYmpDbGlja2VkIFRoZSBvYmplY3QgKGxpbmspIHdoaWNrIHRoZSB1c2VyIGhhdmUgY2xpY2tlZA0KCQkgKiBAcGFyYW0gb2JqZWN0IGpRdWVyeU1hdGNoZWRPYmogVGhlIGpRdWVyeSBvYmplY3Qgd2l0aCBhbGwgZWxlbWVudHMgbWF0Y2hlZA0KCQkgKi8NCgkJZnVuY3Rpb24gX3N0YXJ0KG9iakNsaWNrZWQsalF1ZXJ5TWF0Y2hlZE9iaikgew0KCQkJLy8gSGltZSBzb21lIGVsZW1lbnRzIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggb3ZlcmxheSBpbiBJRS4gVGhlc2UgZWxlbWVudHMgYXBwZWFyIGFib3ZlIHRoZSBvdmVybGF5Lg0KCQkJJCgnZW1iZWQsIG9iamVjdCwgc2VsZWN0JykuY3NzKHsgJ3Zpc2liaWxpdHknIDogJ2hpZGRlbicgfSk7DQoJCQkvLyBDYWxsIHRoZSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIG1hcmt1cCBzdHJ1Y3R1cmU7IHN0eWxlIHNvbWUgZWxlbWVudHM7IGFzc2lnbiBldmVudHMgaW4gc29tZSBlbGVtZW50cy4NCgkJCV9zZXRfaW50ZXJmYWNlKCk7DQoJCQkvLyBVbnNldCB0b3RhbCBpbWFnZXMgaW4gaW1hZ2VBcnJheQ0KCQkJc2V0dGluZ3MuaW1hZ2VBcnJheS5sZW5ndGggPSAwOw0KCQkJLy8gVW5zZXQgaW1hZ2UgYWN0aXZlIGluZm9ybWF0aW9uDQoJCQlzZXR0aW5ncy5hY3RpdmVJbWFnZSA9IDA7DQoJCQkvLyBXZSBoYXZlIGFuIGltYWdlIHNldD8gT3IganVzdCBhbiBpbWFnZT8gTGV0tHMgc2VlIGl0Lg0KCQkJaWYgKCBqUXVlcnlNYXRjaGVkT2JqLmxlbmd0aCA9PSAxICkgew0KCQkJCXNldHRpbmdzLmltYWdlQXJyYXkucHVzaChuZXcgQXJyYXkob2JqQ2xpY2tlZC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxvYmpDbGlja2VkLmdldEF0dHJpYnV0ZSgndGl0bGUnKSkpOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBBZGQgYW4gQXJyYXkgKGFzIG1hbnkgYXMgd2UgaGF2ZSksIHdpdGggaHJlZiBhbmQgdGl0bGUgYXRyaWJ1dGVzLCBpbnNpZGUgdGhlIEFycmF5IHRoYXQgc3RvcmFnZSB0aGUgaW1hZ2VzIHJlZmVyZW5jZXMJCQ0KCQkJCWZvciAoIHZhciBpID0gMDsgaSA8IGpRdWVyeU1hdGNoZWRPYmoubGVuZ3RoOyBpKysgKSB7DQoJCQkJCXNldHRpbmdzLmltYWdlQXJyYXkucHVzaChuZXcgQXJyYXkoalF1ZXJ5TWF0Y2hlZE9ialtpXS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxqUXVlcnlNYXRjaGVkT2JqW2ldLmdldEF0dHJpYnV0ZSgndGl0bGUnKSkpOw0KCQkJCX0NCgkJCX0NCgkJCXdoaWxlICggc2V0dGluZ3MuaW1hZ2VBcnJheVtzZXR0aW5ncy5hY3RpdmVJbWFnZV1bMF0gIT0gb2JqQ2xpY2tlZC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSApIHsNCgkJCQlzZXR0aW5ncy5hY3RpdmVJbWFnZSsrOw0KCQkJfQ0KCQkJLy8gQ2FsbCB0aGUgZnVuY3Rpb24gdGhhdCBwcmVwYXJlcyBpbWFnZSBleGliaXRpb24NCgkJCV9zZXRfaW1hZ2VfdG9fdmlldygpOw0KCQl9DQoJCS8qKg0KCQkgKiBDcmVhdGUgdGhlIGpRdWVyeSBsaWdodEJveCBwbHVnaW4gaW50ZXJmYWNlDQoJCSAqDQoJCSAqIFRoZSBIVE1MIG1hcmt1cCB3aWxsIGJlIGxpa2UgdGhhdDoNCgkJCTxkaXYgaWQ9ImpxdWVyeS1vdmVybGF5Ij48L2Rpdj4NCgkJCTxkaXYgaWQ9ImpxdWVyeS1saWdodGJveCI+DQoJCQkJPGRpdiBpZD0ibGlnaHRib3gtY29udGFpbmVyLWltYWdlLWJveCI+DQoJCQkJCTxkaXYgaWQ9ImxpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZSI+DQoJCQkJCQk8aW1nIHNyYz0iLi4vZm90b3MvWFguanBnIiBpZD0ibGlnaHRib3gtaW1hZ2UiPg0KCQkJCQkJPGRpdiBpZD0ibGlnaHRib3gtbmF2Ij4NCgkJCQkJCQk8YSBocmVmPSIjIiBpZD0ibGlnaHRib3gtbmF2LWJ0blByZXYiPjwvYT4NCgkJCQkJCQk8YSBocmVmPSIjIiBpZD0ibGlnaHRib3gtbmF2LWJ0bk5leHQiPjwvYT4NCgkJCQkJCTwvZGl2Pg0KCQkJCQkJPGRpdiBpZD0ibGlnaHRib3gtbG9hZGluZyI+DQoJCQkJCQkJPGEgaHJlZj0iIyIgaWQ9ImxpZ2h0Ym94LWxvYWRpbmctbGluayI+DQoJCQkJCQkJCTxpbWcgc3JjPSIuLi9pbWFnZXMvbGlnaHRib3gtaWNvLWxvYWRpbmcuZ2lmIj4NCgkJCQkJCQk8L2E+DQoJCQkJCQk8L2Rpdj4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBpZD0ibGlnaHRib3gtY29udGFpbmVyLWltYWdlLWRhdGEtYm94Ij4NCgkJCQkJPGRpdiBpZD0ibGlnaHRib3gtY29udGFpbmVyLWltYWdlLWRhdGEiPg0KCQkJCQkJPGRpdiBpZD0ibGlnaHRib3gtaW1hZ2UtZGV0YWlscyI+DQoJCQkJCQkJPHNwYW4gaWQ9ImxpZ2h0Ym94LWltYWdlLWRldGFpbHMtY2FwdGlvbiI+PC9zcGFuPg0KCQkJCQkJCTxzcGFuIGlkPSJsaWdodGJveC1pbWFnZS1kZXRhaWxzLWN1cnJlbnROdW1iZXIiPjwvc3Bhbj4NCgkJCQkJCTwvZGl2Pg0KCQkJCQkJPGRpdiBpZD0ibGlnaHRib3gtc2VjTmF2Ij4NCgkJCQkJCQk8YSBocmVmPSIjIiBpZD0ibGlnaHRib3gtc2VjTmF2LWJ0bkNsb3NlIj4NCgkJCQkJCQkJPGltZyBzcmM9Ii4uL2ltYWdlcy9saWdodGJveC1idG4tY2xvc2UuZ2lmIj4NCgkJCQkJCQk8L2E+DQoJCQkJCQk8L2Rpdj4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj4NCgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIF9zZXRfaW50ZXJmYWNlKCkgew0KCQkJLy8gQXBwbHkgdGhlIEhUTUwgbWFya3VwIGludG8gYm9keSB0YWcNCgkJCSQoJ2JvZHknKS5hcHBlbmQoJzxkaXYgaWQ9ImpxdWVyeS1vdmVybGF5Ij48L2Rpdj48ZGl2IGlkPSJqcXVlcnktbGlnaHRib3giPjxkaXYgaWQ9ImxpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZS1ib3giPjxkaXYgaWQ9ImxpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZSI+PGltZyBpZD0ibGlnaHRib3gtaW1hZ2UiPjxkaXYgc3R5bGU9IiIgaWQ9ImxpZ2h0Ym94LW5hdiI+PGEgaHJlZj0iIyIgaWQ9ImxpZ2h0Ym94LW5hdi1idG5QcmV2Ij48L2E+PGEgaHJlZj0iIyIgaWQ9ImxpZ2h0Ym94LW5hdi1idG5OZXh0Ij48L2E+PC9kaXY+PGRpdiBpZD0ibGlnaHRib3gtbG9hZGluZyI+PGEgaHJlZj0iIyIgaWQ9ImxpZ2h0Ym94LWxvYWRpbmctbGluayI+PGltZyBzcmM9IicgKyBzZXR0aW5ncy5pbWFnZUxvYWRpbmcgKyAnIj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBpZD0ibGlnaHRib3gtY29udGFpbmVyLWltYWdlLWRhdGEtYm94Ij48ZGl2IGlkPSJsaWdodGJveC1jb250YWluZXItaW1hZ2UtZGF0YSI+PGRpdiBpZD0ibGlnaHRib3gtaW1hZ2UtZGV0YWlscyI+PHNwYW4gaWQ9ImxpZ2h0Ym94LWltYWdlLWRldGFpbHMtY2FwdGlvbiI+PC9zcGFuPjxzcGFuIGlkPSJsaWdodGJveC1pbWFnZS1kZXRhaWxzLWN1cnJlbnROdW1iZXIiPjwvc3Bhbj48L2Rpdj48ZGl2IGlkPSJsaWdodGJveC1zZWNOYXYiPjxhIGhyZWY9IiMiIGlkPSJsaWdodGJveC1zZWNOYXYtYnRuQ2xvc2UiPjxpbWcgc3JjPSInICsgc2V0dGluZ3MuaW1hZ2VCdG5DbG9zZSArICciPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nKTsJDQoJCQkvLyBHZXQgcGFnZSBzaXplcw0KCQkJdmFyIGFyclBhZ2VTaXplcyA9IF9fX2dldFBhZ2VTaXplKCk7DQoJCQkvLyBTdHlsZSBvdmVybGF5IGFuZCBzaG93IGl0DQoJCQkkKCcjanF1ZXJ5LW92ZXJsYXknKS5jc3Moew0KCQkJCWJhY2tncm91bmRDb2xvcjoJc2V0dGluZ3Mub3ZlcmxheUJnQ29sb3IsDQoJCQkJb3BhY2l0eToJCQlzZXR0aW5ncy5vdmVybGF5T3BhY2l0eSwNCgkJCQl3aWR0aDoJCQkJYXJyUGFnZVNpemVzWzBdLA0KCQkJCWhlaWdodDoJCQkJYXJyUGFnZVNpemVzWzFdDQoJCQl9KS5mYWRlSW4oKTsNCgkJCS8vIEdldCBwYWdlIHNjcm9sbA0KCQkJdmFyIGFyclBhZ2VTY3JvbGwgPSBfX19nZXRQYWdlU2Nyb2xsKCk7DQoJCQkvLyBDYWxjdWxhdGUgdG9wIGFuZCBsZWZ0IG9mZnNldCBmb3IgdGhlIGpxdWVyeS1saWdodGJveCBkaXYgb2JqZWN0IGFuZCBzaG93IGl0DQoJCQkkKCcjanF1ZXJ5LWxpZ2h0Ym94JykuY3NzKHsNCgkJCQl0b3A6CWFyclBhZ2VTY3JvbGxbMV0gKyAoYXJyUGFnZVNpemVzWzNdIC8gMTApLA0KCQkJCWxlZnQ6CWFyclBhZ2VTY3JvbGxbMF0NCgkJCX0pLnNob3coKTsNCgkJCS8vIEFzc2lnbmluZyBjbGljayBldmVudHMgaW4gZWxlbWVudHMgdG8gY2xvc2Ugb3ZlcmxheQ0KCQkJJCgnI2pxdWVyeS1vdmVybGF5LCNqcXVlcnktbGlnaHRib3gnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQlfZmluaXNoKCk7CQkJCQkJCQkJDQoJCQl9KTsNCgkJCS8vIEFzc2lnbiB0aGUgX2ZpbmlzaCBmdW5jdGlvbiB0byBsaWdodGJveC1sb2FkaW5nLWxpbmsgYW5kIGxpZ2h0Ym94LXNlY05hdi1idG5DbG9zZSBvYmplY3RzDQoJCQkkKCcjbGlnaHRib3gtbG9hZGluZy1saW5rLCNsaWdodGJveC1zZWNOYXYtYnRuQ2xvc2UnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQlfZmluaXNoKCk7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfSk7DQoJCQkvLyBJZiB3aW5kb3cgd2FzIHJlc2l6ZWQsIGNhbGN1bGF0ZSB0aGUgbmV3IG92ZXJsYXkgZGltZW5zaW9ucw0KCQkJJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpIHsNCgkJCQkvLyBHZXQgcGFnZSBzaXplcw0KCQkJCXZhciBhcnJQYWdlU2l6ZXMgPSBfX19nZXRQYWdlU2l6ZSgpOw0KCQkJCS8vIFN0eWxlIG92ZXJsYXkgYW5kIHNob3cgaXQNCgkJCQkkKCcjanF1ZXJ5LW92ZXJsYXknKS5jc3Moew0KCQkJCQl3aWR0aDoJCWFyclBhZ2VTaXplc1swXSwNCgkJCQkJaGVpZ2h0OgkJYXJyUGFnZVNpemVzWzFdDQoJCQkJfSk7DQoJCQkJLy8gR2V0IHBhZ2Ugc2Nyb2xsDQoJCQkJdmFyIGFyclBhZ2VTY3JvbGwgPSBfX19nZXRQYWdlU2Nyb2xsKCk7DQoJCQkJLy8gQ2FsY3VsYXRlIHRvcCBhbmQgbGVmdCBvZmZzZXQgZm9yIHRoZSBqcXVlcnktbGlnaHRib3ggZGl2IG9iamVjdCBhbmQgc2hvdyBpdA0KCQkJCSQoJyNqcXVlcnktbGlnaHRib3gnKS5jc3Moew0KCQkJCQl0b3A6CWFyclBhZ2VTY3JvbGxbMV0gKyAoYXJyUGFnZVNpemVzWzNdIC8gMTApLA0KCQkJCQlsZWZ0OglhcnJQYWdlU2Nyb2xsWzBdDQoJCQkJfSk7DQoJCQl9KTsNCgkJfQ0KCQkvKioNCgkJICogUHJlcGFyZXMgaW1hZ2UgZXhpYml0aW9uOyBkb2luZyBhIGltYWdltHMgcHJlbG9hZGVyIHRvIGNhbGN1bGF0ZSBpdLRzIHNpemUNCgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIF9zZXRfaW1hZ2VfdG9fdmlldygpIHsgLy8gc2hvdyB0aGUgbG9hZGluZw0KCQkJLy8gU2hvdyB0aGUgbG9hZGluZw0KCQkJJCgnI2xpZ2h0Ym94LWxvYWRpbmcnKS5zaG93KCk7DQoJCQlpZiAoIHNldHRpbmdzLmZpeGVkTmF2aWdhdGlvbiApIHsNCgkJCQkkKCcjbGlnaHRib3gtaW1hZ2UsI2xpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZS1kYXRhLWJveCwjbGlnaHRib3gtaW1hZ2UtZGV0YWlscy1jdXJyZW50TnVtYmVyJykuaGlkZSgpOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBIaWRlIHNvbWUgZWxlbWVudHMNCgkJCQkkKCcjbGlnaHRib3gtaW1hZ2UsI2xpZ2h0Ym94LW5hdiwjbGlnaHRib3gtbmF2LWJ0blByZXYsI2xpZ2h0Ym94LW5hdi1idG5OZXh0LCNsaWdodGJveC1jb250YWluZXItaW1hZ2UtZGF0YS1ib3gsI2xpZ2h0Ym94LWltYWdlLWRldGFpbHMtY3VycmVudE51bWJlcicpLmhpZGUoKTsNCgkJCX0NCgkJCS8vIEltYWdlIHByZWxvYWQgcHJvY2Vzcw0KCQkJdmFyIG9iakltYWdlUHJlbG9hZGVyID0gbmV3IEltYWdlKCk7DQoJCQlvYmpJbWFnZVByZWxvYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHsNCgkJCQkkKCcjbGlnaHRib3gtaW1hZ2UnKS5hdHRyKCdzcmMnLHNldHRpbmdzLmltYWdlQXJyYXlbc2V0dGluZ3MuYWN0aXZlSW1hZ2VdWzBdKTsNCgkJCQkvLyBQZXJmb21hbmNlIGFuIGVmZmVjdCBpbiB0aGUgaW1hZ2UgY29udGFpbmVyIHJlc2l6aW5nIGl0DQoJCQkJX3Jlc2l6ZV9jb250YWluZXJfaW1hZ2VfYm94KG9iakltYWdlUHJlbG9hZGVyLndpZHRoLG9iakltYWdlUHJlbG9hZGVyLmhlaWdodCk7DQoJCQkJLy8JY2xlYXIgb25Mb2FkLCBJRSBiZWhhdmVzIGlycmF0aWNhbGx5IHdpdGggYW5pbWF0ZWQgZ2lmcyBvdGhlcndpc2UNCgkJCQlvYmpJbWFnZVByZWxvYWRlci5vbmxvYWQ9ZnVuY3Rpb24oKXt9Ow0KCQkJfTsNCgkJCW9iakltYWdlUHJlbG9hZGVyLnNyYyA9IHNldHRpbmdzLmltYWdlQXJyYXlbc2V0dGluZ3MuYWN0aXZlSW1hZ2VdWzBdOw0KCQl9Ow0KCQkvKioNCgkJICogUGVyZm9tYW5jZSBhbiBlZmZlY3QgaW4gdGhlIGltYWdlIGNvbnRhaW5lciByZXNpemluZyBpdA0KCQkgKg0KCQkgKiBAcGFyYW0gaW50ZWdlciBpbnRJbWFnZVdpZHRoIFRoZSBpbWFnZbRzIHdpZHRoIHRoYXQgd2lsbCBiZSBzaG93ZWQNCgkJICogQHBhcmFtIGludGVnZXIgaW50SW1hZ2VIZWlnaHQgVGhlIGltYWdltHMgaGVpZ2h0IHRoYXQgd2lsbCBiZSBzaG93ZWQNCgkJICovDQoJCWZ1bmN0aW9uIF9yZXNpemVfY29udGFpbmVyX2ltYWdlX2JveChpbnRJbWFnZVdpZHRoLGludEltYWdlSGVpZ2h0KSB7DQoJCQkvLyBHZXQgY3VycmVudCB3aWR0aCBhbmQgaGVpZ2h0DQoJCQl2YXIgaW50Q3VycmVudFdpZHRoID0gJCgnI2xpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZS1ib3gnKS53aWR0aCgpOw0KCQkJdmFyIGludEN1cnJlbnRIZWlnaHQgPSAkKCcjbGlnaHRib3gtY29udGFpbmVyLWltYWdlLWJveCcpLmhlaWdodCgpOw0KCQkJLy8gR2V0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzZWxlY3RlZCBpbWFnZSBwbHVzIHRoZSBwYWRkaW5nDQoJCQl2YXIgaW50V2lkdGggPSAoaW50SW1hZ2VXaWR0aCArIChzZXR0aW5ncy5jb250YWluZXJCb3JkZXJTaXplICogMikpOyAvLyBQbHVzIHRoZSBpbWFnZbRzIHdpZHRoIGFuZCB0aGUgbGVmdCBhbmQgcmlnaHQgcGFkZGluZyB2YWx1ZQ0KCQkJdmFyIGludEhlaWdodCA9IChpbnRJbWFnZUhlaWdodCArIChzZXR0aW5ncy5jb250YWluZXJCb3JkZXJTaXplICogMikpOyAvLyBQbHVzIHRoZSBpbWFnZbRzIGhlaWdodCBhbmQgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgdmFsdWUNCgkJCS8vIERpZmVyZW5jZXMNCgkJCXZhciBpbnREaWZmVyA9IGludEN1cnJlbnRXaWR0aCAtIGludFdpZHRoOw0KCQkJdmFyIGludERpZmZIID0gaW50Q3VycmVudEhlaWdodCAtIGludEhlaWdodDsNCgkJCS8vIFBlcmZvbWFuY2UgdGhlIGVmZmVjdA0KCQkJJCgnI2xpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZS1ib3gnKS5hbmltYXRlKHsgd2lkdGg6IGludFdpZHRoLCBoZWlnaHQ6IGludEhlaWdodCB9LHNldHRpbmdzLmNvbnRhaW5lclJlc2l6ZVNwZWVkLGZ1bmN0aW9uKCkgeyBfc2hvd19pbWFnZSgpOyB9KTsNCgkJCWlmICggKCBpbnREaWZmVyA9PSAwICkgJiYgKCBpbnREaWZmSCA9PSAwICkgKSB7DQoJCQkJaWYgKCAkLmJyb3dzZXIubXNpZSApIHsNCgkJCQkJX19fcGF1c2UoMjUwKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlfX19wYXVzZSgxMDApOwkNCgkJCQl9DQoJCQl9IA0KCQkJJCgnI2xpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZS1kYXRhLWJveCcpLmNzcyh7IHdpZHRoOiBpbnRJbWFnZVdpZHRoIH0pOw0KCQkJJCgnI2xpZ2h0Ym94LW5hdi1idG5QcmV2LCNsaWdodGJveC1uYXYtYnRuTmV4dCcpLmNzcyh7IGhlaWdodDogaW50SW1hZ2VIZWlnaHQgKyAoc2V0dGluZ3MuY29udGFpbmVyQm9yZGVyU2l6ZSAqIDIpIH0pOw0KCQl9Ow0KCQkvKioNCgkJICogU2hvdyB0aGUgcHJlcGFyZWQgaW1hZ2UNCgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIF9zaG93X2ltYWdlKCkgew0KCQkJJCgnI2xpZ2h0Ym94LWxvYWRpbmcnKS5oaWRlKCk7DQoJCQkkKCcjbGlnaHRib3gtaW1hZ2UnKS5mYWRlSW4oZnVuY3Rpb24oKSB7DQoJCQkJX3Nob3dfaW1hZ2VfZGF0YSgpOw0KCQkJCV9zZXRfbmF2aWdhdGlvbigpOw0KCQkJfSk7DQoJCQlfcHJlbG9hZF9uZWlnaGJvcl9pbWFnZXMoKTsNCgkJfTsNCgkJLyoqDQoJCSAqIFNob3cgdGhlIGltYWdlIGluZm9ybWF0aW9uDQoJCSAqDQoJCSAqLw0KCQlmdW5jdGlvbiBfc2hvd19pbWFnZV9kYXRhKCkgew0KCQkJJCgnI2xpZ2h0Ym94LWNvbnRhaW5lci1pbWFnZS1kYXRhLWJveCcpLnNsaWRlRG93bignZmFzdCcpOw0KCQkJJCgnI2xpZ2h0Ym94LWltYWdlLWRldGFpbHMtY2FwdGlvbicpLmhpZGUoKTsNCgkJCWlmICggc2V0dGluZ3MuaW1hZ2VBcnJheVtzZXR0aW5ncy5hY3RpdmVJbWFnZV1bMV0gKSB7DQoJCQkJJCgnI2xpZ2h0Ym94LWltYWdlLWRldGFpbHMtY2FwdGlvbicpLmh0bWwoc2V0dGluZ3MuaW1hZ2VBcnJheVtzZXR0aW5ncy5hY3RpdmVJbWFnZV1bMV0pLnNob3coKTsNCgkJCX0NCgkJCS8vIElmIHdlIGhhdmUgYSBpbWFnZSBzZXQsIGRpc3BsYXkgJ0ltYWdlIFggb2YgWCcNCgkJCWlmICggc2V0dGluZ3MuaW1hZ2VBcnJheS5sZW5ndGggPiAxICkgew0KCQkJCSQoJyNsaWdodGJveC1pbWFnZS1kZXRhaWxzLWN1cnJlbnROdW1iZXInKS5odG1sKHNldHRpbmdzLnR4dEltYWdlICsgJyAnICsgKCBzZXR0aW5ncy5hY3RpdmVJbWFnZSArIDEgKSArICcgJyArIHNldHRpbmdzLnR4dE9mICsgJyAnICsgc2V0dGluZ3MuaW1hZ2VBcnJheS5sZW5ndGgpLnNob3coKTsNCgkJCX0JCQ0KCQl9DQoJCS8qKg0KCQkgKiBEaXNwbGF5IHRoZSBidXR0b24gbmF2aWdhdGlvbnMNCgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIF9zZXRfbmF2aWdhdGlvbigpIHsNCgkJCSQoJyNsaWdodGJveC1uYXYnKS5zaG93KCk7DQoNCgkJCS8vIEluc3RlYWQgdG8gZGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBpbiBDU1MgZmlsZSwgd2UgZGVmaW5lIGhlcmUuIEFuZCBpdLRzIG5lZWQgdG8gSUUuIEp1c3QuDQoJCQkkKCcjbGlnaHRib3gtbmF2LWJ0blByZXYsI2xpZ2h0Ym94LW5hdi1idG5OZXh0JykuY3NzKHsgJ2JhY2tncm91bmQnIDogJ3RyYW5zcGFyZW50IHVybCgnICsgc2V0dGluZ3MuaW1hZ2VCbGFuayArICcpIG5vLXJlcGVhdCcgfSk7DQoJCQkNCgkJCS8vIFNob3cgdGhlIHByZXYgYnV0dG9uLCBpZiBub3QgdGhlIGZpcnN0IGltYWdlIGluIHNldA0KCQkJaWYgKCBzZXR0aW5ncy5hY3RpdmVJbWFnZSAhPSAwICkgew0KCQkJCWlmICggc2V0dGluZ3MuZml4ZWROYXZpZ2F0aW9uICkgew0KCQkJCQkkKCcjbGlnaHRib3gtbmF2LWJ0blByZXYnKS5jc3MoeyAnYmFja2dyb3VuZCcgOiAndXJsKCcgKyBzZXR0aW5ncy5pbWFnZUJ0blByZXYgKyAnKSBsZWZ0IDE1JSBuby1yZXBlYXQnIH0pDQoJCQkJCQkudW5iaW5kKCkNCgkJCQkJCS5iaW5kKCdjbGljaycsZnVuY3Rpb24oKSB7DQoJCQkJCQkJc2V0dGluZ3MuYWN0aXZlSW1hZ2UgPSBzZXR0aW5ncy5hY3RpdmVJbWFnZSAtIDE7DQoJCQkJCQkJX3NldF9pbWFnZV90b192aWV3KCk7DQoJCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQkJfSk7DQoJCQkJfSBlbHNlIHsNCgkJCQkJLy8gU2hvdyB0aGUgaW1hZ2VzIGJ1dHRvbiBmb3IgTmV4dCBidXR0b25zDQoJCQkJCSQoJyNsaWdodGJveC1uYXYtYnRuUHJldicpLnVuYmluZCgpLmhvdmVyKGZ1bmN0aW9uKCkgew0KCQkJCQkJJCh0aGlzKS5jc3MoeyAnYmFja2dyb3VuZCcgOiAndXJsKCcgKyBzZXR0aW5ncy5pbWFnZUJ0blByZXYgKyAnKSBsZWZ0IDE1JSBuby1yZXBlYXQnIH0pOw0KCQkJCQl9LGZ1bmN0aW9uKCkgew0KCQkJCQkJJCh0aGlzKS5jc3MoeyAnYmFja2dyb3VuZCcgOiAndHJhbnNwYXJlbnQgdXJsKCcgKyBzZXR0aW5ncy5pbWFnZUJsYW5rICsgJykgbm8tcmVwZWF0JyB9KTsNCgkJCQkJfSkuc2hvdygpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbigpIHsNCgkJCQkJCXNldHRpbmdzLmFjdGl2ZUltYWdlID0gc2V0dGluZ3MuYWN0aXZlSW1hZ2UgLSAxOw0KCQkJCQkJX3NldF9pbWFnZV90b192aWV3KCk7DQoJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX0pOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJLy8gU2hvdyB0aGUgbmV4dCBidXR0b24sIGlmIG5vdCB0aGUgbGFzdCBpbWFnZSBpbiBzZXQNCgkJCWlmICggc2V0dGluZ3MuYWN0aXZlSW1hZ2UgIT0gKCBzZXR0aW5ncy5pbWFnZUFycmF5Lmxlbmd0aCAtMSApICkgew0KCQkJCWlmICggc2V0dGluZ3MuZml4ZWROYXZpZ2F0aW9uICkgew0KCQkJCQkkKCcjbGlnaHRib3gtbmF2LWJ0bk5leHQnKS5jc3MoeyAnYmFja2dyb3VuZCcgOiAndXJsKCcgKyBzZXR0aW5ncy5pbWFnZUJ0bk5leHQgKyAnKSByaWdodCAxNSUgbm8tcmVwZWF0JyB9KQ0KCQkJCQkJLnVuYmluZCgpDQoJCQkJCQkuYmluZCgnY2xpY2snLGZ1bmN0aW9uKCkgew0KCQkJCQkJCXNldHRpbmdzLmFjdGl2ZUltYWdlID0gc2V0dGluZ3MuYWN0aXZlSW1hZ2UgKyAxOw0KCQkJCQkJCV9zZXRfaW1hZ2VfdG9fdmlldygpOw0KCQkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJCX0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCS8vIFNob3cgdGhlIGltYWdlcyBidXR0b24gZm9yIE5leHQgYnV0dG9ucw0KCQkJCQkkKCcjbGlnaHRib3gtbmF2LWJ0bk5leHQnKS51bmJpbmQoKS5ob3ZlcihmdW5jdGlvbigpIHsNCgkJCQkJCSQodGhpcykuY3NzKHsgJ2JhY2tncm91bmQnIDogJ3VybCgnICsgc2V0dGluZ3MuaW1hZ2VCdG5OZXh0ICsgJykgcmlnaHQgMTUlIG5vLXJlcGVhdCcgfSk7DQoJCQkJCX0sZnVuY3Rpb24oKSB7DQoJCQkJCQkkKHRoaXMpLmNzcyh7ICdiYWNrZ3JvdW5kJyA6ICd0cmFuc3BhcmVudCB1cmwoJyArIHNldHRpbmdzLmltYWdlQmxhbmsgKyAnKSBuby1yZXBlYXQnIH0pOw0KCQkJCQl9KS5zaG93KCkuYmluZCgnY2xpY2snLGZ1bmN0aW9uKCkgew0KCQkJCQkJc2V0dGluZ3MuYWN0aXZlSW1hZ2UgPSBzZXR0aW5ncy5hY3RpdmVJbWFnZSArIDE7DQoJCQkJCQlfc2V0X2ltYWdlX3RvX3ZpZXcoKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfSk7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gRW5hYmxlIGtleWJvYXJkIG5hdmlnYXRpb24NCgkJCV9lbmFibGVfa2V5Ym9hcmRfbmF2aWdhdGlvbigpOw0KCQl9DQoJCS8qKg0KCQkgKiBFbmFibGUgYSBzdXBwb3J0IHRvIGtleWJvYXJkIG5hdmlnYXRpb24NCgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIF9lbmFibGVfa2V5Ym9hcmRfbmF2aWdhdGlvbigpIHsNCgkJCSQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24ob2JqRXZlbnQpIHsNCgkJCQlfa2V5Ym9hcmRfYWN0aW9uKG9iakV2ZW50KTsNCgkJCX0pOw0KCQl9DQoJCS8qKg0KCQkgKiBEaXNhYmxlIHRoZSBzdXBwb3J0IHRvIGtleWJvYXJkIG5hdmlnYXRpb24NCgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIF9kaXNhYmxlX2tleWJvYXJkX25hdmlnYXRpb24oKSB7DQoJCQkkKGRvY3VtZW50KS51bmJpbmQoKTsNCgkJfQ0KCQkvKioNCgkJICogUGVyZm9ybSB0aGUga2V5Ym9hcmQgYWN0aW9ucw0KCQkgKg0KCQkgKi8NCgkJZnVuY3Rpb24gX2tleWJvYXJkX2FjdGlvbihvYmpFdmVudCkgew0KCQkJLy8gVG8gaWUNCgkJCWlmICggb2JqRXZlbnQgPT0gbnVsbCApIHsNCgkJCQlrZXljb2RlID0gZXZlbnQua2V5Q29kZTsNCgkJCQllc2NhcGVLZXkgPSAyNzsNCgkJCS8vIFRvIE1vemlsbGENCgkJCX0gZWxzZSB7DQoJCQkJa2V5Y29kZSA9IG9iakV2ZW50LmtleUNvZGU7DQoJCQkJZXNjYXBlS2V5ID0gb2JqRXZlbnQuRE9NX1ZLX0VTQ0FQRTsNCgkJCX0NCgkJCS8vIEdldCB0aGUga2V5IGluIGxvd2VyIGNhc2UgZm9ybQ0KCQkJa2V5ID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXljb2RlKS50b0xvd2VyQ2FzZSgpOw0KCQkJLy8gVmVyaWZ5IHRoZSBrZXlzIHRvIGNsb3NlIHRoZSBsaWd0aEJveA0KCQkJaWYgKCAoIGtleSA9PSBzZXR0aW5ncy5rZXlUb0Nsb3NlICkgfHwgKCBrZXkgPT0gJ3gnICkgfHwgKCBrZXljb2RlID09IGVzY2FwZUtleSApICkgew0KCQkJCV9maW5pc2goKTsNCgkJCX0NCgkJCS8vIFZlcmlmeSB0aGUga2V5IHRvIHNob3cgdGhlIHByZXZpb3VzIGltYWdlDQoJCQlpZiAoICgga2V5ID09IHNldHRpbmdzLmtleVRvUHJldiApIHx8ICgga2V5Y29kZSA9PSAzNyApICkgew0KCQkJCS8vIElmIHdltHJlIG5vdCBzaG93aW5nIHRoZSBmaXJzdCBpbWFnZSwgY2FsbCB0aGUgcHJldmlvdXMNCgkJCQlpZiAoIHNldHRpbmdzLmFjdGl2ZUltYWdlICE9IDAgKSB7DQoJCQkJCXNldHRpbmdzLmFjdGl2ZUltYWdlID0gc2V0dGluZ3MuYWN0aXZlSW1hZ2UgLSAxOw0KCQkJCQlfc2V0X2ltYWdlX3RvX3ZpZXcoKTsNCgkJCQkJX2Rpc2FibGVfa2V5Ym9hcmRfbmF2aWdhdGlvbigpOw0KCQkJCX0NCgkJCX0NCgkJCS8vIFZlcmlmeSB0aGUga2V5IHRvIHNob3cgdGhlIG5leHQgaW1hZ2UNCgkJCWlmICggKCBrZXkgPT0gc2V0dGluZ3Mua2V5VG9OZXh0ICkgfHwgKCBrZXljb2RlID09IDM5ICkgKSB7DQoJCQkJLy8gSWYgd2W0cmUgbm90IHNob3dpbmcgdGhlIGxhc3QgaW1hZ2UsIGNhbGwgdGhlIG5leHQNCgkJCQlpZiAoIHNldHRpbmdzLmFjdGl2ZUltYWdlICE9ICggc2V0dGluZ3MuaW1hZ2VBcnJheS5sZW5ndGggLSAxICkgKSB7DQoJCQkJCXNldHRpbmdzLmFjdGl2ZUltYWdlID0gc2V0dGluZ3MuYWN0aXZlSW1hZ2UgKyAxOw0KCQkJCQlfc2V0X2ltYWdlX3RvX3ZpZXcoKTsNCgkJCQkJX2Rpc2FibGVfa2V5Ym9hcmRfbmF2aWdhdGlvbigpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvKioNCgkJICogUHJlbG9hZCBwcmV2IGFuZCBuZXh0IGltYWdlcyBiZWluZyBzaG93ZWQNCgkJICoNCgkJICovDQoJCWZ1bmN0aW9uIF9wcmVsb2FkX25laWdoYm9yX2ltYWdlcygpIHsNCgkJCWlmICggKHNldHRpbmdzLmltYWdlQXJyYXkubGVuZ3RoIC0xKSA+IHNldHRpbmdzLmFjdGl2ZUltYWdlICkgew0KCQkJCW9iak5leHQgPSBuZXcgSW1hZ2UoKTsNCgkJCQlvYmpOZXh0LnNyYyA9IHNldHRpbmdzLmltYWdlQXJyYXlbc2V0dGluZ3MuYWN0aXZlSW1hZ2UgKyAxXVswXTsNCgkJCX0NCgkJCWlmICggc2V0dGluZ3MuYWN0aXZlSW1hZ2UgPiAwICkgew0KCQkJCW9ialByZXYgPSBuZXcgSW1hZ2UoKTsNCgkJCQlvYmpQcmV2LnNyYyA9IHNldHRpbmdzLmltYWdlQXJyYXlbc2V0dGluZ3MuYWN0aXZlSW1hZ2UgLTFdWzBdOw0KCQkJfQ0KCQl9DQoJCS8qKg0KCQkgKiBSZW1vdmUgalF1ZXJ5IGxpZ2h0Qm94IHBsdWdpbiBIVE1MIG1hcmt1cA0KCQkgKg0KCQkgKi8NCgkJZnVuY3Rpb24gX2ZpbmlzaCgpIHsNCgkJCSQoJyNqcXVlcnktbGlnaHRib3gnKS5yZW1vdmUoKTsNCgkJCSQoJyNqcXVlcnktb3ZlcmxheScpLmZhZGVPdXQoZnVuY3Rpb24oKSB7ICQoJyNqcXVlcnktb3ZlcmxheScpLnJlbW92ZSgpOyB9KTsNCgkJCS8vIFNob3cgc29tZSBlbGVtZW50cyB0byBhdm9pZCBjb25mbGljdCB3aXRoIG92ZXJsYXkgaW4gSUUuIFRoZXNlIGVsZW1lbnRzIGFwcGVhciBhYm92ZSB0aGUgb3ZlcmxheS4NCgkJCSQoJ2VtYmVkLCBvYmplY3QsIHNlbGVjdCcpLmNzcyh7ICd2aXNpYmlsaXR5JyA6ICd2aXNpYmxlJyB9KTsNCgkJfQ0KCQkvKioNCgkJIC8gVEhJUkQgRlVOQ1RJT04NCgkJICogZ2V0UGFnZVNpemUoKSBieSBxdWlya3Ntb2RlLmNvbQ0KCQkgKg0KCQkgKiBAcmV0dXJuIEFycmF5IFJldHVybiBhbiBhcnJheSB3aXRoIHBhZ2Ugd2lkdGgsIGhlaWdodCBhbmQgd2luZG93IHdpZHRoLCBoZWlnaHQNCgkJICovDQoJCWZ1bmN0aW9uIF9fX2dldFBhZ2VTaXplKCkgew0KCQkJdmFyIHhTY3JvbGwsIHlTY3JvbGw7DQoJCQlpZiAod2luZG93LmlubmVySGVpZ2h0ICYmIHdpbmRvdy5zY3JvbGxNYXhZKSB7CQ0KCQkJCXhTY3JvbGwgPSB3aW5kb3cuaW5uZXJXaWR0aCArIHdpbmRvdy5zY3JvbGxNYXhYOw0KCQkJCXlTY3JvbGwgPSB3aW5kb3cuaW5uZXJIZWlnaHQgKyB3aW5kb3cuc2Nyb2xsTWF4WTsNCgkJCX0gZWxzZSBpZiAoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCl7IC8vIGFsbCBidXQgRXhwbG9yZXIgTWFjDQoJCQkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7DQoJCQkJeVNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0Ow0KCQkJfSBlbHNlIHsgLy8gRXhwbG9yZXIgTWFjLi4ud291bGQgYWxzbyB3b3JrIGluIEV4cGxvcmVyIDYgU3RyaWN0LCBNb3ppbGxhIGFuZCBTYWZhcmkNCgkJCQl4U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDsNCgkJCQl5U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQ7DQoJCQl9DQoJCQl2YXIgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodDsNCgkJCWlmIChzZWxmLmlubmVySGVpZ2h0KSB7CS8vIGFsbCBleGNlcHQgRXhwbG9yZXINCgkJCQlpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpew0KCQkJCQl3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsgDQoJCQkJfSBlbHNlIHsNCgkJCQkJd2luZG93V2lkdGggPSBzZWxmLmlubmVyV2lkdGg7DQoJCQkJfQ0KCQkJCXdpbmRvd0hlaWdodCA9IHNlbGYuaW5uZXJIZWlnaHQ7DQoJCQl9IGVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7IC8vIEV4cGxvcmVyIDYgU3RyaWN0IE1vZGUNCgkJCQl3aW5kb3dXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsNCgkJCQl3aW5kb3dIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0Ow0KCQkJfSBlbHNlIGlmIChkb2N1bWVudC5ib2R5KSB7IC8vIG90aGVyIEV4cGxvcmVycw0KCQkJCXdpbmRvd1dpZHRoID0gZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsNCgkJCQl3aW5kb3dIZWlnaHQgPSBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsNCgkJCX0JDQoJCQkvLyBmb3Igc21hbGwgcGFnZXMgd2l0aCB0b3RhbCBoZWlnaHQgbGVzcyB0aGVuIGhlaWdodCBvZiB0aGUgdmlld3BvcnQNCgkJCWlmKHlTY3JvbGwgPCB3aW5kb3dIZWlnaHQpew0KCQkJCXBhZ2VIZWlnaHQgPSB3aW5kb3dIZWlnaHQ7DQoJCQl9IGVsc2UgeyANCgkJCQlwYWdlSGVpZ2h0ID0geVNjcm9sbDsNCgkJCX0NCgkJCS8vIGZvciBzbWFsbCBwYWdlcyB3aXRoIHRvdGFsIHdpZHRoIGxlc3MgdGhlbiB3aWR0aCBvZiB0aGUgdmlld3BvcnQNCgkJCWlmKHhTY3JvbGwgPCB3aW5kb3dXaWR0aCl7CQ0KCQkJCXBhZ2VXaWR0aCA9IHhTY3JvbGw7CQkNCgkJCX0gZWxzZSB7DQoJCQkJcGFnZVdpZHRoID0gd2luZG93V2lkdGg7DQoJCQl9DQoJCQlhcnJheVBhZ2VTaXplID0gbmV3IEFycmF5KHBhZ2VXaWR0aCxwYWdlSGVpZ2h0LHdpbmRvd1dpZHRoLHdpbmRvd0hlaWdodCk7DQoJCQlyZXR1cm4gYXJyYXlQYWdlU2l6ZTsNCgkJfTsNCgkJLyoqDQoJCSAvIFRISVJEIEZVTkNUSU9ODQoJCSAqIGdldFBhZ2VTY3JvbGwoKSBieSBxdWlya3Ntb2RlLmNvbQ0KCQkgKg0KCQkgKiBAcmV0dXJuIEFycmF5IFJldHVybiBhbiBhcnJheSB3aXRoIHgseSBwYWdlIHNjcm9sbCB2YWx1ZXMuDQoJCSAqLw0KCQlmdW5jdGlvbiBfX19nZXRQYWdlU2Nyb2xsKCkgew0KCQkJdmFyIHhTY3JvbGwsIHlTY3JvbGw7DQoJCQlpZiAoc2VsZi5wYWdlWU9mZnNldCkgew0KCQkJCXlTY3JvbGwgPSBzZWxmLnBhZ2VZT2Zmc2V0Ow0KCQkJCXhTY3JvbGwgPSBzZWxmLnBhZ2VYT2Zmc2V0Ow0KCQkJfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkgewkgLy8gRXhwbG9yZXIgNiBTdHJpY3QNCgkJCQl5U2Nyb2xsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDsNCgkJCQl4U2Nyb2xsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7DQoJCQl9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkpIHsvLyBhbGwgb3RoZXIgRXhwbG9yZXJzDQoJCQkJeVNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOw0KCQkJCXhTY3JvbGwgPSBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7CQ0KCQkJfQ0KCQkJYXJyYXlQYWdlU2Nyb2xsID0gbmV3IEFycmF5KHhTY3JvbGwseVNjcm9sbCk7DQoJCQlyZXR1cm4gYXJyYXlQYWdlU2Nyb2xsOw0KCQl9Ow0KCQkgLyoqDQoJCSAgKiBTdG9wIHRoZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIGEgZXNjaWZpZWQgdGltZSBpbiBtaWxpc2Vjb25kDQoJCSAgKg0KCQkgICovDQoJCSBmdW5jdGlvbiBfX19wYXVzZShtcykgew0KCQkJdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOyANCgkJCWN1ckRhdGUgPSBudWxsOw0KCQkJZG8geyB2YXIgY3VyRGF0ZSA9IG5ldyBEYXRlKCk7IH0NCgkJCXdoaWxlICggY3VyRGF0ZSAtIGRhdGUgPCBtcyk7DQoJCSB9Ow0KCQkvLyBSZXR1cm4gdGhlIGpRdWVyeSBvYmplY3QgZm9yIGNoYWluaW5nLiBUaGUgdW5iaW5kIG1ldGhvZCBpcyB1c2VkIHRvIGF2b2lkIGNsaWNrIGNvbmZsaWN0IHdoZW4gdGhlIHBsdWdpbiBpcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UNCgkJcmV0dXJuIHRoaXMudW5iaW5kKCdjbGljaycpLmNsaWNrKF9pbml0aWFsaXplKTsNCgl9Ow0KfSkoalF1ZXJ5KTsgLy8gQ2FsbCBhbmQgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcGFzc2luZyB0aGUgalF1ZXJ5IG9iamVjdA0K]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.metadata.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogTWV0YWRhdGEgLSBqUXVlcnkgcGx1Z2luIGZvciBwYXJzaW5nIG1ldGFkYXRhIGZyb20gZWxlbWVudHMKICoKICogQ29weXJpZ2h0IChjKSAyMDA2IEpvaG4gUmVzaWcsIFllaHVkYSBLYXR6LCBK77+9w7ZybiBaYWVmZmVyZXIsIFBhdWwgTWNMYW5haGFuCiAqCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBhbmQgR1BMIGxpY2Vuc2VzOgogKiAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqICAgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sCiAqCiAqIFJldmlzaW9uOiAkSWQkCiAqCiAqLwoKLyoqCiAqIFNldHMgdGhlIHR5cGUgb2YgbWV0YWRhdGEgdG8gdXNlLiBNZXRhZGF0YSBpcyBlbmNvZGVkIGluIEpTT04sIGFuZCBlYWNoIHByb3BlcnR5CiAqIGluIHRoZSBKU09OIHdpbGwgYmVjb21lIGEgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgaXRzZWxmLgogKgogKiBUaGVyZSBhcmUgdGhyZWUgc3VwcG9ydGVkIHR5cGVzIG9mIG1ldGFkYXRhIHN0b3JhZ2U6CiAqCiAqICAgYXR0cjogIEluc2lkZSBhbiBhdHRyaWJ1dGUuIFRoZSBuYW1lIHBhcmFtZXRlciBpbmRpY2F0ZXMgKndoaWNoKiBhdHRyaWJ1dGUuCiAqICAgICAgICAgIAogKiAgIGNsYXNzOiBJbnNpZGUgdGhlIGNsYXNzIGF0dHJpYnV0ZSwgd3JhcHBlZCBpbiBjdXJseSBicmFjZXM6IHsgfQogKiAgIAogKiAgIGVsZW06ICBJbnNpZGUgYSBjaGlsZCBlbGVtZW50IChlLmcuIGEgc2NyaXB0IHRhZykuIFRoZQogKiAgICAgICAgICBuYW1lIHBhcmFtZXRlciBpbmRpY2F0ZXMgKndoaWNoKiBlbGVtZW50LgogKiAgICAgICAgICAKICogVGhlIG1ldGFkYXRhIGZvciBhbiBlbGVtZW50IGlzIGxvYWRlZCB0aGUgZmlyc3QgdGltZSB0aGUgZWxlbWVudCBpcyBhY2Nlc3NlZCB2aWEgalF1ZXJ5LgogKgogKiBBcyBhIHJlc3VsdCwgeW91IGNhbiBkZWZpbmUgdGhlIG1ldGFkYXRhIHR5cGUsIHVzZSAkKGV4cHIpIHRvIGxvYWQgdGhlIG1ldGFkYXRhIGludG8gdGhlIGVsZW1lbnRzCiAqIG1hdGNoZWQgYnkgZXhwciwgdGhlbiByZWRlZmluZSB0aGUgbWV0YWRhdGEgdHlwZSBhbmQgcnVuIGFub3RoZXIgJChleHByKSBmb3Igb3RoZXIgZWxlbWVudHMuCiAqIAogKiBAbmFtZSAkLm1ldGFkYXRhLnNldFR5cGUKICoKICogQGV4YW1wbGUgPHAgaWQ9Im9uZSIgY2xhc3M9InNvbWVfY2xhc3Mge2l0ZW1faWQ6IDEsIGl0ZW1fbGFiZWw6ICdMYWJlbCd9Ij5UaGlzIGlzIGEgcDwvcD4KICogQGJlZm9yZSAkLm1ldGFkYXRhLnNldFR5cGUoImNsYXNzIikKICogQGFmdGVyICQoIiNvbmUiKS5tZXRhZGF0YSgpLml0ZW1faWQgPT0gMTsgJCgiI29uZSIpLm1ldGFkYXRhKCkuaXRlbV9sYWJlbCA9PSAiTGFiZWwiCiAqIEBkZXNjIFJlYWRzIG1ldGFkYXRhIGZyb20gdGhlIGNsYXNzIGF0dHJpYnV0ZQogKiAKICogQGV4YW1wbGUgPHAgaWQ9Im9uZSIgY2xhc3M9InNvbWVfY2xhc3MiIGRhdGE9IntpdGVtX2lkOiAxLCBpdGVtX2xhYmVsOiAnTGFiZWwnfSI+VGhpcyBpcyBhIHA8L3A+CiAqIEBiZWZvcmUgJC5tZXRhZGF0YS5zZXRUeXBlKCJhdHRyIiwgImRhdGEiKQogKiBAYWZ0ZXIgJCgiI29uZSIpLm1ldGFkYXRhKCkuaXRlbV9pZCA9PSAxOyAkKCIjb25lIikubWV0YWRhdGEoKS5pdGVtX2xhYmVsID09ICJMYWJlbCIKICogQGRlc2MgUmVhZHMgbWV0YWRhdGEgZnJvbSBhICJkYXRhIiBhdHRyaWJ1dGUKICogCiAqIEBleGFtcGxlIDxwIGlkPSJvbmUiIGNsYXNzPSJzb21lX2NsYXNzIj48c2NyaXB0PntpdGVtX2lkOiAxLCBpdGVtX2xhYmVsOiAnTGFiZWwnfTwvc2NyaXB0PlRoaXMgaXMgYSBwPC9wPgogKiBAYmVmb3JlICQubWV0YWRhdGEuc2V0VHlwZSgiZWxlbSIsICJzY3JpcHQiKQogKiBAYWZ0ZXIgJCgiI29uZSIpLm1ldGFkYXRhKCkuaXRlbV9pZCA9PSAxOyAkKCIjb25lIikubWV0YWRhdGEoKS5pdGVtX2xhYmVsID09ICJMYWJlbCIKICogQGRlc2MgUmVhZHMgbWV0YWRhdGEgZnJvbSBhIG5lc3RlZCBzY3JpcHQgZWxlbWVudAogKiAKICogQHBhcmFtIFN0cmluZyB0eXBlIFRoZSBlbmNvZGluZyB0eXBlCiAqIEBwYXJhbSBTdHJpbmcgbmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGJlIHVzZWQgdG8gZ2V0IG1ldGFkYXRhIChvcHRpb25hbCkKICogQGNhdCBQbHVnaW5zL01ldGFkYXRhCiAqIEBkZXNjciBTZXRzIHRoZSB0eXBlIG9mIGVuY29kaW5nIHRvIGJlIHVzZWQgd2hlbiBsb2FkaW5nIG1ldGFkYXRhIGZvciB0aGUgZmlyc3QgdGltZQogKiBAdHlwZSB1bmRlZmluZWQKICogQHNlZSBtZXRhZGF0YSgpCiAqLwoKKGZ1bmN0aW9uKCQpIHsKCiQuZXh0ZW5kKHsKCW1ldGFkYXRhIDogewoJCWRlZmF1bHRzIDogewoJCQl0eXBlOiAnY2xhc3MnLAoJCQluYW1lOiAnbWV0YWRhdGEnLAoJCQljcmU6IC8oey4qfSkvLAoJCQlzaW5nbGU6ICdtZXRhZGF0YScKCQl9LAoJCXNldFR5cGU6IGZ1bmN0aW9uKCB0eXBlLCBuYW1lICl7CgkJCXRoaXMuZGVmYXVsdHMudHlwZSA9IHR5cGU7CgkJCXRoaXMuZGVmYXVsdHMubmFtZSA9IG5hbWU7CgkJfSwKCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRzICl7CgkJCXZhciBzZXR0aW5ncyA9ICQuZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdHMsb3B0cyk7CgkJCS8vIGNoZWNrIGZvciBlbXB0eSBzdHJpbmcgaW4gc2luZ2xlIHByb3BlcnR5CgkJCWlmICggIXNldHRpbmdzLnNpbmdsZS5sZW5ndGggKSBzZXR0aW5ncy5zaW5nbGUgPSAnbWV0YWRhdGEnOwoJCQkKCQkJdmFyIGRhdGEgPSAkLmRhdGEoZWxlbSwgc2V0dGluZ3Muc2luZ2xlKTsKCQkJLy8gcmV0dXJuZWQgY2FjaGVkIGRhdGEgaWYgaXQgYWxyZWFkeSBleGlzdHMKCQkJaWYgKCBkYXRhICkgcmV0dXJuIGRhdGE7CgkJCQoJCQlkYXRhID0gInt9IjsKCQkJCgkJCWlmICggc2V0dGluZ3MudHlwZSA9PSAiY2xhc3MiICkgewoJCQkJdmFyIG0gPSBzZXR0aW5ncy5jcmUuZXhlYyggZWxlbS5jbGFzc05hbWUgKTsKCQkJCWlmICggbSApCgkJCQkJZGF0YSA9IG1bMV07CgkJCX0gZWxzZSBpZiAoIHNldHRpbmdzLnR5cGUgPT0gImVsZW0iICkgewoJCQkJaWYoICFlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICkKCQkJCQlyZXR1cm4gdW5kZWZpbmVkOwoJCQkJdmFyIGUgPSBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKHNldHRpbmdzLm5hbWUpOwoJCQkJaWYgKCBlLmxlbmd0aCApCgkJCQkJZGF0YSA9ICQudHJpbShlWzBdLmlubmVySFRNTCk7CgkJCX0gZWxzZSBpZiAoIGVsZW0uZ2V0QXR0cmlidXRlICE9IHVuZGVmaW5lZCApIHsKCQkJCXZhciBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIHNldHRpbmdzLm5hbWUgKTsKCQkJCWlmICggYXR0ciApCgkJCQkJZGF0YSA9IGF0dHI7CgkJCX0KCQkJCgkJCWlmICggZGF0YS5pbmRleE9mKCAneycgKSA8MCApCgkJCWRhdGEgPSAieyIgKyBkYXRhICsgIn0iOwoJCQkKCQkJZGF0YSA9IGV2YWwoIigiICsgZGF0YSArICIpIik7CgkJCQoJCQkkLmRhdGEoIGVsZW0sIHNldHRpbmdzLnNpbmdsZSwgZGF0YSApOwoJCQlyZXR1cm4gZGF0YTsKCQl9Cgl9Cn0pOwoKLyoqCiAqIFJldHVybnMgdGhlIG1ldGFkYXRhIG9iamVjdCBmb3IgdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgalF1ZXJ5IG9iamVjdC4KICoKICogQG5hbWUgbWV0YWRhdGEKICogQGRlc2NyIFJldHVybnMgZWxlbWVudCdzIG1ldGFkYXRhIG9iamVjdAogKiBAcGFyYW0gT2JqZWN0IG9wdHMgQW4gb2JqZWN0IGNvbnRpYW5pbmcgc2V0dGluZ3MgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzCiAqIEB0eXBlIGpRdWVyeQogKiBAY2F0IFBsdWdpbnMvTWV0YWRhdGEKICovCiQuZm4ubWV0YWRhdGEgPSBmdW5jdGlvbiggb3B0cyApewoJcmV0dXJuICQubWV0YWRhdGEuZ2V0KCB0aGlzWzBdLCBvcHRzICk7Cn07Cgp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery.tablesorter.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogCiAqIFRhYmxlU29ydGVyIDIuMCAtIENsaWVudC1zaWRlIHRhYmxlIHNvcnRpbmcgd2l0aCBlYXNlIQogKiBWZXJzaW9uIDIuMC4zCiAqIEByZXF1aXJlcyBqUXVlcnkgdjEuMi4zCiAqIAogKiBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hyaXN0aWFuIEJhY2gKICogRXhhbXBsZXMgYW5kIGRvY3MgYXQ6IGh0dHA6Ly90YWJsZXNvcnRlci5jb20KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGFuZCBHUEwgbGljZW5zZXM6CiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwCiAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAogKiAKICovCi8qKgogKgogKiBAZGVzY3JpcHRpb24gQ3JlYXRlIGEgc29ydGFibGUgdGFibGUgd2l0aCBtdWx0aS1jb2x1bW4gc29ydGluZyBjYXBhYmlsaXR5cwogKiAKICogQGV4YW1wbGUgJCgndGFibGUnKS50YWJsZXNvcnRlcigpOwogKiBAZGVzYyBDcmVhdGUgYSBzaW1wbGUgdGFibGVzb3J0ZXIgaW50ZXJmYWNlLgogKgogKiBAZXhhbXBsZSAkKCd0YWJsZScpLnRhYmxlc29ydGVyKHsgc29ydExpc3Q6W1swLDBdLFsxLDBdXSB9KTsKICogQGRlc2MgQ3JlYXRlIGEgdGFibGVzb3J0ZXIgaW50ZXJmYWNlIGFuZCBzb3J0IG9uIHRoZSBmaXJzdCBhbmQgc2Vjb3VuZCBjb2x1bW4gaW4gYXNjZW5kaW5nIG9yZGVyLgogKiAKICogQGV4YW1wbGUgJCgndGFibGUnKS50YWJsZXNvcnRlcih7IGhlYWRlcnM6IHsgMDogeyBzb3J0ZXI6IGZhbHNlfSwgMToge3NvcnRlcjogZmFsc2V9IH0gfSk7CiAqIEBkZXNjIENyZWF0ZSBhIHRhYmxlc29ydGVyIGludGVyZmFjZSBhbmQgZGlzYWJsZWluZyB0aGUgZmlyc3QgYW5kIHNlY291bmQgY29sdW1uIGhlYWRlcnMuCiAqIAogKiBAZXhhbXBsZSAkKCd0YWJsZScpLnRhYmxlc29ydGVyKHsgMDoge3NvcnRlcjoiaW50ZWdlciJ9LCAxOiB7c29ydGVyOiJjdXJyZW5jeSJ9IH0pOwogKiBAZGVzYyBDcmVhdGUgYSB0YWJsZXNvcnRlciBpbnRlcmZhY2UgYW5kIHNldCBhIGNvbHVtbiBwYXJzZXIgZm9yIHRoZSBmaXJzdCBhbmQgc2Vjb3VuZCBjb2x1bW4uCiAqIAogKiAKICogQHBhcmFtIE9iamVjdCBzZXR0aW5ncyBBbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycyB0byBwcm92aWRlIG9wdGlvbmFsIHNldHRpbmdzLgogKiAKICogQG9wdGlvbiBTdHJpbmcgY3NzSGVhZGVyIChvcHRpb25hbCkgCQkJQSBzdHJpbmcgb2YgdGhlIGNsYXNzIG5hbWUgdG8gYmUgYXBwZW5kZWQgdG8gc29ydGFibGUgdHIgZWxlbWVudHMgaW4gdGhlIHRoZWFkIG9mIHRoZSB0YWJsZS4gCiAqIAkJCQkJCQkJCQkJCURlZmF1bHQgdmFsdWU6ICJoZWFkZXIiCiAqIAogKiBAb3B0aW9uIFN0cmluZyBjc3NBc2MgKG9wdGlvbmFsKSAJCQlBIHN0cmluZyBvZiB0aGUgY2xhc3MgbmFtZSB0byBiZSBhcHBlbmRlZCB0byBzb3J0YWJsZSB0ciBlbGVtZW50cyBpbiB0aGUgdGhlYWQgb24gYSBhc2NlbmRpbmcgc29ydC4gCiAqIAkJCQkJCQkJCQkJCURlZmF1bHQgdmFsdWU6ICJoZWFkZXJTb3J0VXAiCiAqIAogKiBAb3B0aW9uIFN0cmluZyBjc3NEZXNjIChvcHRpb25hbCkgCQkJQSBzdHJpbmcgb2YgdGhlIGNsYXNzIG5hbWUgdG8gYmUgYXBwZW5kZWQgdG8gc29ydGFibGUgdHIgZWxlbWVudHMgaW4gdGhlIHRoZWFkIG9uIGEgZGVzY2VuZGluZyBzb3J0LiAKICogCQkJCQkJCQkJCQkJRGVmYXVsdCB2YWx1ZTogImhlYWRlclNvcnREb3duIgogKiAKICogQG9wdGlvbiBTdHJpbmcgc29ydEluaXRpYWxPcmRlciAob3B0aW9uYWwpIAlBIHN0cmluZyBvZiB0aGUgaW5pdGFsIHNvcnRpbmcgb3JkZXIgY2FuIGJlIGFzYyBvciBkZXNjLiAKICogCQkJCQkJCQkJCQkJRGVmYXVsdCB2YWx1ZTogImFzYyIKICogCiAqIEBvcHRpb24gU3RyaW5nIHNvcnRNdWx0aXNvcnRLZXkgKG9wdGlvbmFsKSAJQSBzdHJpbmcgb2YgdGhlIG11bHRpLWNvbHVtbiBzb3J0IGtleS4gCiAqIAkJCQkJCQkJCQkJCURlZmF1bHQgdmFsdWU6ICJzaGlmdEtleSIKICogCiAqIEBvcHRpb24gU3RyaW5nIHRleHRFeHRyYWN0aW9uIChvcHRpb25hbCkgCUEgc3RyaW5nIG9mIHRoZSB0ZXh0LWV4dHJhY3Rpb24gbWV0aG9kIHRvIHVzZS4gCiAqIAkJCQkJCQkJCQkJCUZvciBjb21wbGV4IGh0bWwgc3RydWN0dXJlcyBpbnNpZGUgdGQgY2VsbCBzZXQgdGhpcyBvcHRpb24gdG8gImNvbXBsZXgiLCAKICogCQkJCQkJCQkJCQkJb24gbGFyZ2UgdGFibGVzIHRoZSBjb21wbGV4IG9wdGlvbiBjYW4gYmUgc2xvdy4gCiAqIAkJCQkJCQkJCQkJCURlZmF1bHQgdmFsdWU6ICJzaW1wbGUiCiAqIAogKiBAb3B0aW9uIE9iamVjdCBoZWFkZXJzIChvcHRpb25hbCkgCQkJQW4gYXJyYXkgY29udGFpbmluZyB0aGUgZm9yY2VzIHNvcnRpbmcgcnVsZXMuIAogKiAJCQkJCQkJCQkJCQlUaGlzIG9wdGlvbiBsZXQncyB5b3Ugc3BlY2lmeSBhIGRlZmF1bHQgc29ydGluZyBydWxlLiAKICogCQkJCQkJCQkJCQkJRGVmYXVsdCB2YWx1ZTogbnVsbAogKiAKICogQG9wdGlvbiBBcnJheSBzb3J0TGlzdCAob3B0aW9uYWwpIAkJCUFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGZvcmNlcyBzb3J0aW5nIHJ1bGVzLiAKICogCQkJCQkJCQkJCQkJVGhpcyBvcHRpb24gbGV0J3MgeW91IHNwZWNpZnkgYSBkZWZhdWx0IHNvcnRpbmcgcnVsZS4gCiAqIAkJCQkJCQkJCQkJCURlZmF1bHQgdmFsdWU6IG51bGwKICogCiAqIEBvcHRpb24gQXJyYXkgc29ydEZvcmNlIChvcHRpb25hbCkgCQkJQW4gYXJyYXkgY29udGFpbmluZyBmb3JjZWQgc29ydGluZyBydWxlcy4gCiAqIAkJCQkJCQkJCQkJCVRoaXMgb3B0aW9uIGxldCdzIHlvdSBzcGVjaWZ5IGEgZGVmYXVsdCBzb3J0aW5nIHJ1bGUsIHdoaWNoIGlzIHByZXBlbmRlZCB0byB1c2VyLXNlbGVjdGVkIHJ1bGVzLgogKiAJCQkJCQkJCQkJCQlEZWZhdWx0IHZhbHVlOiBudWxsCiAqICAKICAqIEBvcHRpb24gQXJyYXkgc29ydEFwcGVuZCAob3B0aW9uYWwpIAkJCUFuIGFycmF5IGNvbnRhaW5pbmcgZm9yY2VkIHNvcnRpbmcgcnVsZXMuIAogKiAJCQkJCQkJCQkJCQlUaGlzIG9wdGlvbiBsZXQncyB5b3Ugc3BlY2lmeSBhIGRlZmF1bHQgc29ydGluZyBydWxlLCB3aGljaCBpcyBhcHBlbmRlZCB0byB1c2VyLXNlbGVjdGVkIHJ1bGVzLgogKiAJCQkJCQkJCQkJCQlEZWZhdWx0IHZhbHVlOiBudWxsCiAqIAogKiBAb3B0aW9uIEJvb2xlYW4gd2lkdGhGaXhlZCAob3B0aW9uYWwpIAkJQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgaWYgdGFibGVzb3J0ZXIgc2hvdWxkIGFwcGx5IGZpeGVkIHdpZHRocyB0byB0aGUgdGFibGUgY29sdW1ucy4KICogCQkJCQkJCQkJCQkJVGhpcyBpcyB1c2VmdWxsIHdoZW4gdXNpbmcgdGhlIHBhZ2VyIGNvbXBhbmlvbiBwbHVnaW4uCiAqIAkJCQkJCQkJCQkJCVRoaXMgb3B0aW9ucyByZXF1aXJlcyB0aGUgZGltZW5zaW9uIGpxdWVyeSBwbHVnaW4uCiAqIAkJCQkJCQkJCQkJCURlZmF1bHQgdmFsdWU6IGZhbHNlCiAqCiAqIEBvcHRpb24gQm9vbGVhbiBjYW5jZWxTZWxlY3Rpb24gKG9wdGlvbmFsKSAJQm9vbGVhbiBmbGFnIGluZGljYXRpbmcgaWYgdGFibGVzb3J0ZXIgc2hvdWxkIGNhbmNlbCBzZWxlY3Rpb24gb2YgdGhlIHRhYmxlIGhlYWRlcnMgdGV4dC4KICogCQkJCQkJCQkJCQkJRGVmYXVsdCB2YWx1ZTogdHJ1ZQogKgogKiBAb3B0aW9uIEJvb2xlYW4gZGVidWcgKG9wdGlvbmFsKSAJCQlCb29sZWFuIGZsYWcgaW5kaWNhdGluZyBpZiB0YWJsZXNvcnRlciBzaG91bGQgZGlzcGxheSBkZWJ1Z2luZyBpbmZvcm1hdGlvbiB1c2VmdWxsIGZvciBkZXZlbG9wbWVudC4KICoKICogQHR5cGUgalF1ZXJ5CiAqCiAqIEBuYW1lIHRhYmxlc29ydGVyCiAqIAogKiBAY2F0IFBsdWdpbnMvVGFibGVzb3J0ZXIKICogCiAqIEBhdXRob3IgQ2hyaXN0aWFuIEJhY2gvY2hyaXN0aWFuLmJhY2hAcG9seWVzdGVyLnNlCiAqLwoKKGZ1bmN0aW9uKCQpIHsKCSQuZXh0ZW5kKHsKCQl0YWJsZXNvcnRlcjogbmV3IGZ1bmN0aW9uKCkgewoJCQkKCQkJdmFyIHBhcnNlcnMgPSBbXSwgd2lkZ2V0cyA9IFtdOwoJCQkKCQkJdGhpcy5kZWZhdWx0cyA9IHsKCQkJCWNzc0hlYWRlcjogImhlYWRlciIsCgkJCQljc3NBc2M6ICJoZWFkZXJTb3J0VXAiLAoJCQkJY3NzRGVzYzogImhlYWRlclNvcnREb3duIiwKCQkJCXNvcnRJbml0aWFsT3JkZXI6ICJhc2MiLAoJCQkJc29ydE11bHRpU29ydEtleTogInNoaWZ0S2V5IiwKCQkJCXNvcnRGb3JjZTogbnVsbCwKCQkJCXNvcnRBcHBlbmQ6IG51bGwsCgkJCQl0ZXh0RXh0cmFjdGlvbjogInNpbXBsZSIsCgkJCQlwYXJzZXJzOiB7fSwgCgkJCQl3aWRnZXRzOiBbXSwJCQoJCQkJd2lkZ2V0WmVicmE6IHtjc3M6IFsiZXZlbiIsIm9kZCJdfSwKCQkJCWhlYWRlcnM6IHt9LAoJCQkJd2lkdGhGaXhlZDogZmFsc2UsCgkJCQljYW5jZWxTZWxlY3Rpb246IHRydWUsCgkJCQlzb3J0TGlzdDogW10sCgkJCQloZWFkZXJMaXN0OiBbXSwKCQkJCWRhdGVGb3JtYXQ6ICJ1cyIsCgkJCQlkZWNpbWFsOiAnLicsCgkJCQlkZWJ1ZzogZmFsc2UKCQkJfTsKCQkJCgkJCS8qIGRlYnVnaW5nIHV0aWxzICovCgkJCWZ1bmN0aW9uIGJlbmNobWFyayhzLGQpIHsKCQkJCWxvZyhzICsgIiwiICsgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gZC5nZXRUaW1lKCkpICsgIm1zIik7CgkJCX0KCQkJCgkJCXRoaXMuYmVuY2htYXJrID0gYmVuY2htYXJrOwoJCQkKCQkJZnVuY3Rpb24gbG9nKHMpIHsKCQkJCWlmICh0eXBlb2YgY29uc29sZSAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgY29uc29sZS5kZWJ1ZyAhPSAidW5kZWZpbmVkIikgewoJCQkJCWNvbnNvbGUubG9nKHMpOwoJCQkJfSBlbHNlIHsKCQkJCQlhbGVydChzKTsKCQkJCX0KCQkJfQoJCQkJCQkKCQkJLyogcGFyc2VycyB1dGlscyAqLwoJCQlmdW5jdGlvbiBidWlsZFBhcnNlckNhY2hlKHRhYmxlLCRoZWFkZXJzKSB7CgkJCQkKCQkJCWlmKHRhYmxlLmNvbmZpZy5kZWJ1ZykgeyB2YXIgcGFyc2Vyc0RlYnVnID0gIiI7IH0KCQkJCQoJCQkJdmFyIHJvd3MgPSB0YWJsZS50Qm9kaWVzWzBdLnJvd3M7CgkJCQkKCQkJCWlmKHRhYmxlLnRCb2RpZXNbMF0ucm93c1swXSkgewoKCQkJCQl2YXIgbGlzdCA9IFtdLCBjZWxscyA9IHJvd3NbMF0uY2VsbHMsIGwgPSBjZWxscy5sZW5ndGg7CgkJCQkJCgkJCQkJZm9yICh2YXIgaT0wO2kgPCBsOyBpKyspIHsKCQkJCQkJdmFyIHAgPSBmYWxzZTsKCQkJCQkJCgkJCQkJCWlmKCQubWV0YWRhdGEgJiYgKCQoJGhlYWRlcnNbaV0pLm1ldGFkYXRhKCkgJiYgJCgkaGVhZGVyc1tpXSkubWV0YWRhdGEoKS5zb3J0ZXIpICApIHsKCQkJCQkJCgkJCQkJCQlwID0gZ2V0UGFyc2VyQnlJZCgkKCRoZWFkZXJzW2ldKS5tZXRhZGF0YSgpLnNvcnRlcik7CQoJCQkJCQkKCQkJCQkJfSBlbHNlIGlmKCh0YWJsZS5jb25maWcuaGVhZGVyc1tpXSAmJiB0YWJsZS5jb25maWcuaGVhZGVyc1tpXS5zb3J0ZXIpKSB7CgkKCQkJCQkJCXAgPSBnZXRQYXJzZXJCeUlkKHRhYmxlLmNvbmZpZy5oZWFkZXJzW2ldLnNvcnRlcik7CgkJCQkJCX0KCQkJCQkJaWYoIXApIHsKCQkJCQkJCXAgPSBkZXRlY3RQYXJzZXJGb3JDb2x1bW4odGFibGUsY2VsbHNbaV0pOwoJCQkJCQl9CgkKCQkJCQkJaWYodGFibGUuY29uZmlnLmRlYnVnKSB7IHBhcnNlcnNEZWJ1ZyArPSAiY29sdW1uOiIgKyBpICsgIiBwYXJzZXI6IiArcC5pZCArICJcbiI7IH0KCQoJCQkJCQlsaXN0LnB1c2gocCk7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlpZih0YWJsZS5jb25maWcuZGVidWcpIHsgbG9nKHBhcnNlcnNEZWJ1Zyk7IH0KCgkJCQlyZXR1cm4gbGlzdDsKCQkJfTsKCQkJCgkJCWZ1bmN0aW9uIGRldGVjdFBhcnNlckZvckNvbHVtbih0YWJsZSxub2RlKSB7CgkJCQl2YXIgbCA9IHBhcnNlcnMubGVuZ3RoOwoJCQkJZm9yKHZhciBpPTE7IGkgPCBsOyBpKyspIHsKCQkJCQlpZihwYXJzZXJzW2ldLmlzKCQudHJpbShnZXRFbGVtZW50VGV4dCh0YWJsZS5jb25maWcsbm9kZSkpLHRhYmxlLG5vZGUpKSB7CgkJCQkJCXJldHVybiBwYXJzZXJzW2ldOwoJCQkJCX0KCQkJCX0KCQkJCS8vIDAgaXMgYWx3YXlzIHRoZSBnZW5lcmljIHBhcnNlciAodGV4dCkKCQkJCXJldHVybiBwYXJzZXJzWzBdOwoJCQl9CgkJCQoJCQlmdW5jdGlvbiBnZXRQYXJzZXJCeUlkKG5hbWUpIHsKCQkJCXZhciBsID0gcGFyc2Vycy5sZW5ndGg7CgkJCQlmb3IodmFyIGk9MDsgaSA8IGw7IGkrKykgewoJCQkJCWlmKHBhcnNlcnNbaV0uaWQudG9Mb3dlckNhc2UoKSA9PSBuYW1lLnRvTG93ZXJDYXNlKCkpIHsJCgkJCQkJCXJldHVybiBwYXJzZXJzW2ldOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkKCQkJLyogdXRpbHMgKi8KCQkJZnVuY3Rpb24gYnVpbGRDYWNoZSh0YWJsZSkgewoJCQkJCgkJCQlpZih0YWJsZS5jb25maWcuZGVidWcpIHsgdmFyIGNhY2hlVGltZSA9IG5ldyBEYXRlKCk7IH0KCQkJCQoJCQkJCgkJCQl2YXIgdG90YWxSb3dzID0gKHRhYmxlLnRCb2RpZXNbMF0gJiYgdGFibGUudEJvZGllc1swXS5yb3dzLmxlbmd0aCkgfHwgMCwKCQkJCQl0b3RhbENlbGxzID0gKHRhYmxlLnRCb2RpZXNbMF0ucm93c1swXSAmJiB0YWJsZS50Qm9kaWVzWzBdLnJvd3NbMF0uY2VsbHMubGVuZ3RoKSB8fCAwLAoJCQkJCXBhcnNlcnMgPSB0YWJsZS5jb25maWcucGFyc2VycywgCgkJCQkJY2FjaGUgPSB7cm93OiBbXSwgbm9ybWFsaXplZDogW119OwoJCQkJCgkJCQkJZm9yICh2YXIgaT0wO2kgPCB0b3RhbFJvd3M7ICsraSkgewoJCQkJCQoJCQkJCQkvKiogQWRkIHRoZSB0YWJsZSBkYXRhIHRvIG1haW4gZGF0YSBhcnJheSAqLwoJCQkJCQl2YXIgYyA9IHRhYmxlLnRCb2RpZXNbMF0ucm93c1tpXSwgY29scyA9IFtdOwoJCQkJCQoJCQkJCQljYWNoZS5yb3cucHVzaCgkKGMpKTsKCQkJCQkJCgkJCQkJCWZvcih2YXIgaj0wOyBqIDwgdG90YWxDZWxsczsgKytqKSB7CgkJCQkJCQljb2xzLnB1c2gocGFyc2Vyc1tqXS5mb3JtYXQoZ2V0RWxlbWVudFRleHQodGFibGUuY29uZmlnLGMuY2VsbHNbal0pLHRhYmxlLGMuY2VsbHNbal0pKTsJCgkJCQkJCX0KCQkJCQkJCQkJCQkJCgkJCQkJCWNvbHMucHVzaChpKTsgLy8gYWRkIHBvc2l0aW9uIGZvciByb3dDYWNoZQoJCQkJCQljYWNoZS5ub3JtYWxpemVkLnB1c2goY29scyk7CgkJCQkJCWNvbHMgPSBudWxsOwoJCQkJCX07CgkJCQkKCQkJCWlmKHRhYmxlLmNvbmZpZy5kZWJ1ZykgeyBiZW5jaG1hcmsoIkJ1aWxkaW5nIGNhY2hlIGZvciAiICsgdG90YWxSb3dzICsgIiByb3dzOiIsIGNhY2hlVGltZSk7IH0KCQkJCQoJCQkJcmV0dXJuIGNhY2hlOwoJCQl9OwoJCQkKCQkJZnVuY3Rpb24gZ2V0RWxlbWVudFRleHQoY29uZmlnLG5vZGUpIHsKCQkJCQoJCQkJaWYoIW5vZGUpIHJldHVybiAiIjsKCQkJCQkJCQkKCQkJCXZhciB0ID0gIiI7CgkJCQkKCQkJCWlmKGNvbmZpZy50ZXh0RXh0cmFjdGlvbiA9PSAic2ltcGxlIikgewoJCQkJCWlmKG5vZGUuY2hpbGROb2Rlc1swXSAmJiBub2RlLmNoaWxkTm9kZXNbMF0uaGFzQ2hpbGROb2RlcygpKSB7CgkJCQkJCXQgPSBub2RlLmNoaWxkTm9kZXNbMF0uaW5uZXJIVE1MOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXQgPSBub2RlLmlubmVySFRNTDsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWlmKHR5cGVvZihjb25maWcudGV4dEV4dHJhY3Rpb24pID09ICJmdW5jdGlvbiIpIHsKCQkJCQkJdCA9IGNvbmZpZy50ZXh0RXh0cmFjdGlvbihub2RlKTsKCQkJCQl9IGVsc2UgeyAKCQkJCQkJdCA9ICQobm9kZSkudGV4dCgpOwoJCQkJCX0JCgkJCQl9CgkJCQlyZXR1cm4gdDsKCQkJfQoJCQkKCQkJZnVuY3Rpb24gYXBwZW5kVG9UYWJsZSh0YWJsZSxjYWNoZSkgewoJCQkJCgkJCQlpZih0YWJsZS5jb25maWcuZGVidWcpIHt2YXIgYXBwZW5kVGltZSA9IG5ldyBEYXRlKCl9CgkJCQkKCQkJCXZhciBjID0gY2FjaGUsIAoJCQkJCXIgPSBjLnJvdywgCgkJCQkJbj0gYy5ub3JtYWxpemVkLCAKCQkJCQl0b3RhbFJvd3MgPSBuLmxlbmd0aCwgCgkJCQkJY2hlY2tDZWxsID0gKG5bMF0ubGVuZ3RoLTEpLCAKCQkJCQl0YWJsZUJvZHkgPSAkKHRhYmxlLnRCb2RpZXNbMF0pLAoJCQkJCXJvd3MgPSBbXTsKCQkJCQoJCQkJZm9yICh2YXIgaT0wO2kgPCB0b3RhbFJvd3M7IGkrKykgewoJCQkJCXJvd3MucHVzaChyW25baV1bY2hlY2tDZWxsXV0pOwkKCQkJCQlpZighdGFibGUuY29uZmlnLmFwcGVuZGVyKSB7CgkJCQkJCQoJCQkJCQl2YXIgbyA9IHJbbltpXVtjaGVja0NlbGxdXTsKCQkJCQkJdmFyIGwgPSBvLmxlbmd0aDsKCQkJCQkJZm9yKHZhciBqPTA7IGogPCBsOyBqKyspIHsKCQkJCQkJCQoJCQkJCQkJdGFibGVCb2R5WzBdLmFwcGVuZENoaWxkKG9bal0pOwoJCQkJCQkKCQkJCQkJfQoJCQkJCQkKCQkJCQkJLy90YWJsZUJvZHkuYXBwZW5kKHJbbltpXVtjaGVja0NlbGxdXSk7CgkJCQkJfQoJCQkJfQkKCQkJCQoJCQkJaWYodGFibGUuY29uZmlnLmFwcGVuZGVyKSB7CgkJCQkKCQkJCQl0YWJsZS5jb25maWcuYXBwZW5kZXIodGFibGUscm93cyk7CQoJCQkJfQoJCQkJCgkJCQlyb3dzID0gbnVsbDsKCQkJCQoJCQkJaWYodGFibGUuY29uZmlnLmRlYnVnKSB7IGJlbmNobWFyaygiUmVidWlsdCB0YWJsZToiLCBhcHBlbmRUaW1lKTsgfQoJCQkJCQkJCQoJCQkJLy9hcHBseSB0YWJsZSB3aWRnZXRzCgkJCQlhcHBseVdpZGdldCh0YWJsZSk7CgkJCQkKCQkJCS8vIHRyaWdnZXIgc29ydGVuZAoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQkkKHRhYmxlKS50cmlnZ2VyKCJzb3J0RW5kIik7CQoJCQkJfSwwKTsKCQkJCQoJCQl9OwoJCQkKCQkJZnVuY3Rpb24gYnVpbGRIZWFkZXJzKHRhYmxlKSB7CgkJCQkKCQkJCWlmKHRhYmxlLmNvbmZpZy5kZWJ1ZykgeyB2YXIgdGltZSA9IG5ldyBEYXRlKCk7IH0KCQkJCQoJCQkJdmFyIG1ldGEgPSAoJC5tZXRhZGF0YSkgPyB0cnVlIDogZmFsc2UsIHRhYmxlSGVhZGVyc1Jvd3MgPSBbXTsKCQkJCgkJCQlmb3IodmFyIGkgPSAwOyBpIDwgdGFibGUudEhlYWQucm93cy5sZW5ndGg7IGkrKykgeyB0YWJsZUhlYWRlcnNSb3dzW2ldPTA7IH07CgkJCQkKCQkJCSR0YWJsZUhlYWRlcnMgPSAkKCJ0aGVhZCB0aCIsdGFibGUpOwoJCQoJCQkJJHRhYmxlSGVhZGVycy5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7CgkJCQkJCQkKCQkJCQl0aGlzLmNvdW50ID0gMDsKCQkJCQl0aGlzLmNvbHVtbiA9IGluZGV4OwoJCQkJCXRoaXMub3JkZXIgPSBmb3JtYXRTb3J0aW5nT3JkZXIodGFibGUuY29uZmlnLnNvcnRJbml0aWFsT3JkZXIpOwoJCQkJCQoJCQkJCWlmKGNoZWNrSGVhZGVyTWV0YWRhdGEodGhpcykgfHwgY2hlY2tIZWFkZXJPcHRpb25zKHRhYmxlLGluZGV4KSkgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlOwoJCQkJCQoJCQkJCWlmKCF0aGlzLnNvcnREaXNhYmxlZCkgewoJCQkJCQkkKHRoaXMpLmFkZENsYXNzKHRhYmxlLmNvbmZpZy5jc3NIZWFkZXIpOwoJCQkJCX0KCQkJCQkKCQkJCQkvLyBhZGQgY2VsbCB0byBoZWFkZXJMaXN0CgkJCQkJdGFibGUuY29uZmlnLmhlYWRlckxpc3RbaW5kZXhdPSB0aGlzOwoJCQkJfSk7CgkJCQkKCQkJCWlmKHRhYmxlLmNvbmZpZy5kZWJ1ZykgeyBiZW5jaG1hcmsoIkJ1aWx0IGhlYWRlcnM6IiwgdGltZSk7IGxvZygkdGFibGVIZWFkZXJzKTsgfQoJCQkJCgkJCQlyZXR1cm4gJHRhYmxlSGVhZGVyczsKCQkJCQoJCQl9OwoJCQkJCQkKCQkgICAJZnVuY3Rpb24gY2hlY2tDZWxsQ29sU3Bhbih0YWJsZSwgcm93cywgcm93KSB7CiAgICAgICAgICAgICAgICB2YXIgYXJyID0gW10sIHIgPSB0YWJsZS50SGVhZC5yb3dzLCBjID0gcltyb3ddLmNlbGxzOwoJCQkJCgkJCQlmb3IodmFyIGk9MDsgaSA8IGMubGVuZ3RoOyBpKyspIHsKCQkJCQl2YXIgY2VsbCA9IGNbaV07CgkJCQkJCgkJCQkJaWYgKCBjZWxsLmNvbFNwYW4gPiAxKSB7IAoJCQkJCQlhcnIgPSBhcnIuY29uY2F0KGNoZWNrQ2VsbENvbFNwYW4odGFibGUsIGhlYWRlckFycixyb3crKykpOwoJCQkJCX0gZWxzZSAgewoJCQkJCQlpZih0YWJsZS50SGVhZC5sZW5ndGggPT0gMSB8fCAoY2VsbC5yb3dTcGFuID4gMSB8fCAhcltyb3crMV0pKSB7CgkJCQkJCQlhcnIucHVzaChjZWxsKTsKCQkJCQkJfQoJCQkJCQkvL2hlYWRlckFycltyb3ddID0gKGkrcm93KTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gYXJyOwoJCQl9OwoJCQkKCQkJZnVuY3Rpb24gY2hlY2tIZWFkZXJNZXRhZGF0YShjZWxsKSB7CgkJCQlpZigoJC5tZXRhZGF0YSkgJiYgKCQoY2VsbCkubWV0YWRhdGEoKS5zb3J0ZXIgPT09IGZhbHNlKSkgeyByZXR1cm4gdHJ1ZTsgfTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkKCQkJZnVuY3Rpb24gY2hlY2tIZWFkZXJPcHRpb25zKHRhYmxlLGkpIHsJCgkJCQlpZigodGFibGUuY29uZmlnLmhlYWRlcnNbaV0pICYmICh0YWJsZS5jb25maWcuaGVhZGVyc1tpXS5zb3J0ZXIgPT09IGZhbHNlKSkgeyByZXR1cm4gdHJ1ZTsgfTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkKCQkJZnVuY3Rpb24gYXBwbHlXaWRnZXQodGFibGUpIHsKCQkJCXZhciBjID0gdGFibGUuY29uZmlnLndpZGdldHM7CgkJCQl2YXIgbCA9IGMubGVuZ3RoOwoJCQkJZm9yKHZhciBpPTA7IGkgPCBsOyBpKyspIHsKCQkJCQkKCQkJCQlnZXRXaWRnZXRCeUlkKGNbaV0pLmZvcm1hdCh0YWJsZSk7CgkJCQl9CgkJCQkKCQkJfQoJCQkKCQkJZnVuY3Rpb24gZ2V0V2lkZ2V0QnlJZChuYW1lKSB7CgkJCQl2YXIgbCA9IHdpZGdldHMubGVuZ3RoOwoJCQkJZm9yKHZhciBpPTA7IGkgPCBsOyBpKyspIHsKCQkJCQlpZih3aWRnZXRzW2ldLmlkLnRvTG93ZXJDYXNlKCkgPT0gbmFtZS50b0xvd2VyQ2FzZSgpICkgewoJCQkJCQlyZXR1cm4gd2lkZ2V0c1tpXTsgCgkJCQkJfQoJCQkJfQoJCQl9OwoJCQkKCQkJZnVuY3Rpb24gZm9ybWF0U29ydGluZ09yZGVyKHYpIHsKCQkJCQoJCQkJaWYodHlwZW9mKHYpICE9ICJOdW1iZXIiKSB7CgkJCQkJaSA9ICh2LnRvTG93ZXJDYXNlKCkgPT0gImRlc2MiKSA/IDEgOiAwOwoJCQkJfSBlbHNlIHsKCQkJCQlpID0gKHYgPT0gKDAgfHwgMSkpID8gdiA6IDA7CgkJCQl9CgkJCQlyZXR1cm4gaTsKCQkJfQoJCQkKCQkJZnVuY3Rpb24gaXNWYWx1ZUluQXJyYXkodiwgYSkgewoJCQkJdmFyIGwgPSBhLmxlbmd0aDsKCQkJCWZvcih2YXIgaT0wOyBpIDwgbDsgaSsrKSB7CgkJCQkJaWYoYVtpXVswXSA9PSB2KSB7CgkJCQkJCXJldHVybiB0cnVlOwkKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJCQoJCQlmdW5jdGlvbiBzZXRIZWFkZXJzQ3NzKHRhYmxlLCRoZWFkZXJzLCBsaXN0LCBjc3MpIHsKCQkJCS8vIHJlbW92ZSBhbGwgaGVhZGVyIGluZm9ybWF0aW9uCgkJCQkkaGVhZGVycy5yZW1vdmVDbGFzcyhjc3NbMF0pLnJlbW92ZUNsYXNzKGNzc1sxXSk7CgkJCQkKCQkJCXZhciBoID0gW107CgkJCQkkaGVhZGVycy5lYWNoKGZ1bmN0aW9uKG9mZnNldCkgewoJCQkJCQlpZighdGhpcy5zb3J0RGlzYWJsZWQpIHsKCQkJCQkJCWhbdGhpcy5jb2x1bW5dID0gJCh0aGlzKTsJCQkJCQoJCQkJCQl9CgkJCQl9KTsKCQkJCQoJCQkJdmFyIGwgPSBsaXN0Lmxlbmd0aDsgCgkJCQlmb3IodmFyIGk9MDsgaSA8IGw7IGkrKykgewoJCQkJCWhbbGlzdFtpXVswXV0uYWRkQ2xhc3MoY3NzW2xpc3RbaV1bMV1dKTsKCQkJCX0KCQkJfQoJCQkKCQkJZnVuY3Rpb24gZml4Q29sdW1uV2lkdGgodGFibGUsJGhlYWRlcnMpIHsKCQkJCXZhciBjID0gdGFibGUuY29uZmlnOwoJCQkJaWYoYy53aWR0aEZpeGVkKSB7CgkJCQkJdmFyIGNvbGdyb3VwID0gJCgnPGNvbGdyb3VwPicpOwoJCQkJCSQoInRyOmZpcnN0IHRkIix0YWJsZS50Qm9kaWVzWzBdKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJCQljb2xncm91cC5hcHBlbmQoJCgnPGNvbD4nKS5jc3MoJ3dpZHRoJywkKHRoaXMpLndpZHRoKCkpKTsKCQkJCQl9KTsKCQkJCQkkKHRhYmxlKS5wcmVwZW5kKGNvbGdyb3VwKTsKCQkJCX07CgkJCX0KCQkJCgkJCWZ1bmN0aW9uIHVwZGF0ZUhlYWRlclNvcnRDb3VudCh0YWJsZSxzb3J0TGlzdCkgewoJCQkJdmFyIGMgPSB0YWJsZS5jb25maWcsIGwgPSBzb3J0TGlzdC5sZW5ndGg7CgkJCQlmb3IodmFyIGk9MDsgaSA8IGw7IGkrKykgewoJCQkJCXZhciBzID0gc29ydExpc3RbaV0sIG8gPSBjLmhlYWRlckxpc3Rbc1swXV07CgkJCQkJby5jb3VudCA9IHNbMV07CgkJCQkJby5jb3VudCsrOwoJCQkJfQoJCQl9CgkJCQoJCQkvKiBzb3J0aW5nIG1ldGhvZHMgKi8KCQkJZnVuY3Rpb24gbXVsdGlzb3J0KHRhYmxlLHNvcnRMaXN0LGNhY2hlKSB7CgkJCQkKCQkJCWlmKHRhYmxlLmNvbmZpZy5kZWJ1ZykgeyB2YXIgc29ydFRpbWUgPSBuZXcgRGF0ZSgpOyB9CgkJCQkKCQkJCXZhciBkeW5hbWljRXhwID0gInZhciBzb3J0V3JhcHBlciA9IGZ1bmN0aW9uKGEsYikgeyIsIGwgPSBzb3J0TGlzdC5sZW5ndGg7CgkJCQkJCgkJCQlmb3IodmFyIGk9MDsgaSA8IGw7IGkrKykgewoJCQkJCQoJCQkJCXZhciBjID0gc29ydExpc3RbaV1bMF07CgkJCQkJdmFyIG9yZGVyID0gc29ydExpc3RbaV1bMV07CgkJCQkJdmFyIHMgPSAoZ2V0Q2FjaGVkU29ydFR5cGUodGFibGUuY29uZmlnLnBhcnNlcnMsYykgPT0gInRleHQiKSA/ICgob3JkZXIgPT0gMCkgPyAic29ydFRleHQiIDogInNvcnRUZXh0RGVzYyIpIDogKChvcmRlciA9PSAwKSA/ICJzb3J0TnVtZXJpYyIgOiAic29ydE51bWVyaWNEZXNjIik7CgkJCQkJCgkJCQkJdmFyIGUgPSAiZSIgKyBpOwoJCQkJCQoJCQkJCWR5bmFtaWNFeHAgKz0gInZhciAiICsgZSArICIgPSAiICsgcyArICIoYVsiICsgYyArICJdLGJbIiArIGMgKyAiXSk7ICI7CgkJCQkJZHluYW1pY0V4cCArPSAiaWYoIiArIGUgKyAiKSB7IHJldHVybiAiICsgZSArICI7IH0gIjsKCQkJCQlkeW5hbWljRXhwICs9ICJlbHNlIHsgIjsKCQkJCX0KCQkJCQoJCQkJLy8gaWYgdmFsdWUgaXMgdGhlIHNhbWUga2VlcCBvcmlnbmFsIG9yZGVyCQoJCQkJdmFyIG9yZ09yZGVyQ29sID0gY2FjaGUubm9ybWFsaXplZFswXS5sZW5ndGggLSAxOwoJCQkJZHluYW1pY0V4cCArPSAicmV0dXJuIGFbIiArIG9yZ09yZGVyQ29sICsgIl0tYlsiICsgb3JnT3JkZXJDb2wgKyAiXTsiOwoJCQkJCQkKCQkJCWZvcih2YXIgaT0wOyBpIDwgbDsgaSsrKSB7CgkJCQkJZHluYW1pY0V4cCArPSAifTsgIjsKCQkJCX0KCQkJCQoJCQkJZHluYW1pY0V4cCArPSAicmV0dXJuIDA7ICI7CQoJCQkJZHluYW1pY0V4cCArPSAifTsgIjsJCgkJCQkKCQkJCWV2YWwoZHluYW1pY0V4cCk7CgkJCQkKCQkJCWNhY2hlLm5vcm1hbGl6ZWQuc29ydChzb3J0V3JhcHBlcik7CgkJCQkKCQkJCWlmKHRhYmxlLmNvbmZpZy5kZWJ1ZykgeyBiZW5jaG1hcmsoIlNvcnRpbmcgb24gIiArIHNvcnRMaXN0LnRvU3RyaW5nKCkgKyAiIGFuZCBkaXIgIiArIG9yZGVyKyAiIHRpbWU6Iiwgc29ydFRpbWUpOyB9CgkJCQkKCQkJCXJldHVybiBjYWNoZTsKCQkJfTsKCQkJCgkJCWZ1bmN0aW9uIHNvcnRUZXh0KGEsYikgewoJCQkJcmV0dXJuICgoYSA8IGIpID8gLTEgOiAoKGEgPiBiKSA/IDEgOiAwKSk7CgkJCX07CgkJCQoJCQlmdW5jdGlvbiBzb3J0VGV4dERlc2MoYSxiKSB7CgkJCQlyZXR1cm4gKChiIDwgYSkgPyAtMSA6ICgoYiA+IGEpID8gMSA6IDApKTsKCQkJfTsJCgkJCQoJIAkJZnVuY3Rpb24gc29ydE51bWVyaWMoYSxiKSB7CgkJCQlyZXR1cm4gYS1iOwoJCQl9OwoJCQkKCQkJZnVuY3Rpb24gc29ydE51bWVyaWNEZXNjKGEsYikgewoJCQkJcmV0dXJuIGItYTsKCQkJfTsKCQkJCgkJCWZ1bmN0aW9uIGdldENhY2hlZFNvcnRUeXBlKHBhcnNlcnMsaSkgewoJCQkJcmV0dXJuIHBhcnNlcnNbaV0udHlwZTsKCQkJfTsKCQkJCgkJCS8qIHB1YmxpYyBtZXRob2RzICovCgkJCXRoaXMuY29uc3RydWN0ID0gZnVuY3Rpb24oc2V0dGluZ3MpIHsKCgkJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJCQoJCQkJCWlmKCF0aGlzLnRIZWFkIHx8ICF0aGlzLnRCb2RpZXMpIHJldHVybjsKCQkJCQkKCQkJCQl2YXIgJHRoaXMsICRkb2N1bWVudCwkaGVhZGVycywgY2FjaGUsIGNvbmZpZywgc2hpZnREb3duID0gMCwgc29ydE9yZGVyOwoJCQkJCQoJCQkJCXRoaXMuY29uZmlnID0ge307CgkJCQkJCgkJCQkJY29uZmlnID0gJC5leHRlbmQodGhpcy5jb25maWcsICQudGFibGVzb3J0ZXIuZGVmYXVsdHMsIHNldHRpbmdzKTsKCQkJCQkKCQkJCQkvLyBzdG9yZSBjb21tb24gZXhwcmVzc2lvbiBmb3Igc3BlZWQJCQkJCQoJCQkJCSR0aGlzID0gJCh0aGlzKTsKCQkJCQkKCQkJCQkvLyBidWlsZCBoZWFkZXJzCgkJCQkJJGhlYWRlcnMgPSBidWlsZEhlYWRlcnModGhpcyk7CgkJCQkJCgkJCQkJLy8gdHJ5IHRvIGF1dG8gZGV0ZWN0IGNvbHVtbiB0eXBlLCBhbmQgc3RvcmUgaW4gdGFibGVzIGNvbmZpZwoJCQkJCXRoaXMuY29uZmlnLnBhcnNlcnMgPSBidWlsZFBhcnNlckNhY2hlKHRoaXMsJGhlYWRlcnMpOwoJCQkJCQoJCQkJCQoJCQkJCS8vIGJ1aWxkIHRoZSBjYWNoZSBmb3IgdGhlIHRib2R5IGNlbGxzCgkJCQkJY2FjaGUgPSBidWlsZENhY2hlKHRoaXMpOwoJCQkJCQoJCQkJCS8vIGdldCB0aGUgY3NzIGNsYXNzIG5hbWVzLCBjb3VsZCBiZSBkb25lIGVsc2Ugd2hlcmUuCgkJCQkJdmFyIHNvcnRDU1MgPSBbY29uZmlnLmNzc0Rlc2MsY29uZmlnLmNzc0FzY107CgkJCQkJCgkJCQkJLy8gZml4YXRlIGNvbHVtbnMgaWYgdGhlIHVzZXJzIHN1cHBsaWVzIHRoZSBmaXhlZFdpZHRoIG9wdGlvbgoJCQkJCWZpeENvbHVtbldpZHRoKHRoaXMpOwoJCQkJCQoJCQkJCS8vIGFwcGx5IGV2ZW50IGhhbmRsaW5nIHRvIGhlYWRlcnMKCQkJCQkvLyB0aGlzIGlzIHRvIGJpZywgcGVyaGFwcyBicmVhayBpdCBvdXQ/CgkJCQkJJGhlYWRlcnMuY2xpY2soZnVuY3Rpb24oZSkgewoJCQkJCQkKCQkJCQkJJHRoaXMudHJpZ2dlcigic29ydFN0YXJ0Iik7CgkJCQkJCQoJCQkJCQl2YXIgdG90YWxSb3dzID0gKCR0aGlzWzBdLnRCb2RpZXNbMF0gJiYgJHRoaXNbMF0udEJvZGllc1swXS5yb3dzLmxlbmd0aCkgfHwgMDsKCQkJCQkJCgkJCQkJCWlmKCF0aGlzLnNvcnREaXNhYmxlZCAmJiB0b3RhbFJvd3MgPiAwKSB7CgkJCQkJCQkKCQkJCQkJCQoJCQkJCQkJLy8gc3RvcmUgZXhwLCBmb3Igc3BlZWQKCQkJCQkJCXZhciAkY2VsbCA9ICQodGhpcyk7CgkKCQkJCQkJCS8vIGdldCBjdXJyZW50IGNvbHVtbiBpbmRleAoJCQkJCQkJdmFyIGkgPSB0aGlzLmNvbHVtbjsKCQkJCQkJCQoJCQkJCQkJLy8gZ2V0IGN1cnJlbnQgY29sdW1uIHNvcnQgb3JkZXIKCQkJCQkJCXRoaXMub3JkZXIgPSB0aGlzLmNvdW50KysgJSAyOwoJCQkJCQkJCgkJCQkJCQkvLyB1c2VyIG9ubHkgd2hhbnRzIHRvIHNvcnQgb24gb25lIGNvbHVtbgoJCQkJCQkJaWYoIWVbY29uZmlnLnNvcnRNdWx0aVNvcnRLZXldKSB7CgkJCQkJCQkJCgkJCQkJCQkJLy8gZmx1c2ggdGhlIHNvcnQgbGlzdAoJCQkJCQkJCWNvbmZpZy5zb3J0TGlzdCA9IFtdOwoJCQkJCQkJCQoJCQkJCQkJCWlmKGNvbmZpZy5zb3J0Rm9yY2UgIT0gbnVsbCkgewoJCQkJCQkJCQl2YXIgYSA9IGNvbmZpZy5zb3J0Rm9yY2U7IAoJCQkJCQkJCQlmb3IodmFyIGo9MDsgaiA8IGEubGVuZ3RoOyBqKyspIHsKCQkJCQkJCQkJCWlmKGFbal1bMF0gIT0gaSkgewoJCQkJCQkJCQkJCWNvbmZpZy5zb3J0TGlzdC5wdXNoKGFbal0pOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCQoJCQkJCQkJCS8vIGFkZCBjb2x1bW4gdG8gc29ydCBsaXN0CgkJCQkJCQkJY29uZmlnLnNvcnRMaXN0LnB1c2goW2ksdGhpcy5vcmRlcl0pOwoJCQkJCQkJCgkJCQkJCQkvLyBtdWx0aSBjb2x1bW4gc29ydGluZwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkvLyB0aGUgdXNlciBoYXMgY2xpY2tlZCBvbiBhbiBhbGwgcmVhZHkgc29ydGV0IGNvbHVtbi4KCQkJCQkJCQlpZihpc1ZhbHVlSW5BcnJheShpLGNvbmZpZy5zb3J0TGlzdCkpIHsJIAoJCQkJCQkJCQkKCQkJCQkJCQkJLy8gcmV2ZXJzIHRoZSBzb3J0aW5nIGRpcmVjdGlvbiBmb3IgYWxsIHRhYmxlcy4KCQkJCQkJCQkJZm9yKHZhciBqPTA7IGogPCBjb25maWcuc29ydExpc3QubGVuZ3RoOyBqKyspIHsKCQkJCQkJCQkJCXZhciBzID0gY29uZmlnLnNvcnRMaXN0W2pdLCBvID0gY29uZmlnLmhlYWRlckxpc3Rbc1swXV07CgkJCQkJCQkJCQlpZihzWzBdID09IGkpIHsKCQkJCQkJCQkJCQlvLmNvdW50ID0gc1sxXTsKCQkJCQkJCQkJCQlvLmNvdW50Kys7CgkJCQkJCQkJCQkJc1sxXSA9IG8uY291bnQgJSAyOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9CQoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCS8vIGFkZCBjb2x1bW4gdG8gc29ydCBsaXN0IGFycmF5CgkJCQkJCQkJCWNvbmZpZy5zb3J0TGlzdC5wdXNoKFtpLHRoaXMub3JkZXJdKTsKCQkJCQkJCQl9CgkJCQkJCQl9OwoJCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQkJCQkvL3NldCBjc3MgZm9yIGhlYWRlcnMKCQkJCQkJCQlzZXRIZWFkZXJzQ3NzKCR0aGlzWzBdLCRoZWFkZXJzLGNvbmZpZy5zb3J0TGlzdCxzb3J0Q1NTKTsKCQkJCQkJCQlhcHBlbmRUb1RhYmxlKCR0aGlzWzBdLG11bHRpc29ydCgkdGhpc1swXSxjb25maWcuc29ydExpc3QsY2FjaGUpKTsKCQkJCQkJCX0sMSk7CgkJCQkJCQkvLyBzdG9wIG5vcm1hbCBldmVudCBieSByZXR1cm5pbmcgZmFsc2UKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJfQoJCQkJCS8vIGNhbmNlbCBzZWxlY3Rpb24JCgkJCQkJfSkubW91c2Vkb3duKGZ1bmN0aW9uKCkgewoJCQkJCQlpZihjb25maWcuY2FuY2VsU2VsZWN0aW9uKSB7CgkJCQkJCQl0aGlzLm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbigpIHtyZXR1cm4gZmFsc2V9OwoJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQkJCgkJCQkJLy8gYXBwbHkgZWFzeSBtZXRob2RzIHRoYXQgdHJpZ2dlciBiaW5kZWQgZXZlbnRzCgkJCQkJJHRoaXMuYmluZCgidXBkYXRlIixmdW5jdGlvbigpIHsKCQkJCQkJCgkJCQkJCS8vIHJlYnVpbGQgcGFyc2Vycy4KCQkJCQkJdGhpcy5jb25maWcucGFyc2VycyA9IGJ1aWxkUGFyc2VyQ2FjaGUodGhpcywkaGVhZGVycyk7CgkJCQkJCQoJCQkJCQkvLyByZWJ1aWxkIHRoZSBjYWNoZSBtYXAKCQkJCQkJY2FjaGUgPSBidWlsZENhY2hlKHRoaXMpOwoJCQkJCQkKCQkJCQl9KS5iaW5kKCJzb3J0b24iLGZ1bmN0aW9uKGUsbGlzdCkgewoJCQkJCQkKCQkJCQkJJCh0aGlzKS50cmlnZ2VyKCJzb3J0U3RhcnQiKTsKCQkJCQkJCgkJCQkJCWNvbmZpZy5zb3J0TGlzdCA9IGxpc3Q7CgkJCQkJCQoJCQkJCQkvLyB1cGRhdGUgYW5kIHN0b3JlIHRoZSBzb3J0bGlzdAoJCQkJCQl2YXIgc29ydExpc3QgPSBjb25maWcuc29ydExpc3Q7CgkJCQkJCQoJCQkJCQkvLyB1cGRhdGUgaGVhZGVyIGNvdW50IGluZGV4CgkJCQkJCXVwZGF0ZUhlYWRlclNvcnRDb3VudCh0aGlzLHNvcnRMaXN0KTsKCQkJCQkJCgkJCQkJCS8vc2V0IGNzcyBmb3IgaGVhZGVycwoJCQkJCQlzZXRIZWFkZXJzQ3NzKHRoaXMsJGhlYWRlcnMsc29ydExpc3Qsc29ydENTUyk7CgkJCQkJCQoJCQkJCQkKCQkJCQkJLy8gc29ydCB0aGUgdGFibGUgYW5kIGFwcGVuZCBpdCB0byB0aGUgZG9tCgkJCQkJCWFwcGVuZFRvVGFibGUodGhpcyxtdWx0aXNvcnQodGhpcyxzb3J0TGlzdCxjYWNoZSkpOwoKCQkJCQl9KS5iaW5kKCJhcHBlbmRDYWNoZSIsZnVuY3Rpb24oKSB7CgkJCQkJCQoJCQkJCQlhcHBlbmRUb1RhYmxlKHRoaXMsY2FjaGUpOwoJCQkJCQoJCQkJCX0pLmJpbmQoImFwcGx5V2lkZ2V0SWQiLGZ1bmN0aW9uKGUsaWQpIHsKCQkJCQkJCgkJCQkJCWdldFdpZGdldEJ5SWQoaWQpLmZvcm1hdCh0aGlzKTsKCQkJCQkJCgkJCQkJfSkuYmluZCgiYXBwbHlXaWRnZXRzIixmdW5jdGlvbigpIHsKCQkJCQkJLy8gYXBwbHkgd2lkZ2V0cwoJCQkJCQlhcHBseVdpZGdldCh0aGlzKTsKCQkJCQl9KTsKCQkJCQkKCQkJCQlpZigkLm1ldGFkYXRhICYmICgkKHRoaXMpLm1ldGFkYXRhKCkgJiYgJCh0aGlzKS5tZXRhZGF0YSgpLnNvcnRsaXN0KSkgewoJCQkJCQljb25maWcuc29ydExpc3QgPSAkKHRoaXMpLm1ldGFkYXRhKCkuc29ydGxpc3Q7CgkJCQkJfQoJCQkJCS8vIGlmIHVzZXIgaGFzIHN1cHBsaWVkIGEgc29ydCBsaXN0IHRvIGNvbnN0cnVjdG9yLgoJCQkJCWlmKGNvbmZpZy5zb3J0TGlzdC5sZW5ndGggPiAwKSB7CgkJCQkJCSR0aGlzLnRyaWdnZXIoInNvcnRvbiIsW2NvbmZpZy5zb3J0TGlzdF0pOwkKCQkJCQl9CgkJCQkJCgkJCQkJLy8gYXBwbHkgd2lkZ2V0cwoJCQkJCWFwcGx5V2lkZ2V0KHRoaXMpOwoJCQkJfSk7CgkJCX07CgkJCQoJCQl0aGlzLmFkZFBhcnNlciA9IGZ1bmN0aW9uKHBhcnNlcikgewoJCQkJdmFyIGwgPSBwYXJzZXJzLmxlbmd0aCwgYSA9IHRydWU7CgkJCQlmb3IodmFyIGk9MDsgaSA8IGw7IGkrKykgewoJCQkJCWlmKHBhcnNlcnNbaV0uaWQudG9Mb3dlckNhc2UoKSA9PSBwYXJzZXIuaWQudG9Mb3dlckNhc2UoKSkgewoJCQkJCQlhID0gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQkJaWYoYSkgeyBwYXJzZXJzLnB1c2gocGFyc2VyKTsgfTsKCQkJfTsKCQkJCgkJCXRoaXMuYWRkV2lkZ2V0ID0gZnVuY3Rpb24od2lkZ2V0KSB7CgkJCQl3aWRnZXRzLnB1c2god2lkZ2V0KTsKCQkJfTsKCQkJCgkJCXRoaXMuZm9ybWF0RmxvYXQgPSBmdW5jdGlvbihzKSB7CgkJCQl2YXIgaSA9IHBhcnNlRmxvYXQocyk7CgkJCQlyZXR1cm4gKGlzTmFOKGkpKSA/IDAgOiBpOwoJCQl9OwoJCQl0aGlzLmZvcm1hdEludCA9IGZ1bmN0aW9uKHMpIHsKCQkJCXZhciBpID0gcGFyc2VJbnQocyk7CgkJCQlyZXR1cm4gKGlzTmFOKGkpKSA/IDAgOiBpOwoJCQl9OwoJCQkKCQkJdGhpcy5pc0RpZ2l0ID0gZnVuY3Rpb24ocyxjb25maWcpIHsKCQkJCXZhciBERUNJTUFMID0gJ1xcJyArIGNvbmZpZy5kZWNpbWFsOwoJCQkJdmFyIGV4cCA9ICcvKF5bK10/MCgnICsgREVDSU1BTCArJzArKT8kKXwoXihbLStdP1sxLTldWzAtOV0qKSQpfCheKFstK10/KCgwP3xbMS05XVswLTldKiknICsgREVDSU1BTCArJygwKlsxLTldWzAtOV0qKSkpJCl8KF5bLStdP1sxLTldK1swLTldKicgKyBERUNJTUFMICsnMCskKS8nOwoJCQkJcmV0dXJuIFJlZ0V4cChleHApLnRlc3QoJC50cmltKHMpKTsKCQkJfTsKCQkJCgkJCXRoaXMuY2xlYXJUYWJsZUJvZHkgPSBmdW5jdGlvbih0YWJsZSkgewoJCQkJaWYoJC5icm93c2VyLm1zaWUpIHsKCQkJCQlmdW5jdGlvbiBlbXB0eSgpIHsKCQkJCQkJd2hpbGUgKCB0aGlzLmZpcnN0Q2hpbGQgKSB0aGlzLnJlbW92ZUNoaWxkKCB0aGlzLmZpcnN0Q2hpbGQgKTsKCQkJCQl9CgkJCQkJZW1wdHkuYXBwbHkodGFibGUudEJvZGllc1swXSk7CgkJCQl9IGVsc2UgewoJCQkJCXRhYmxlLnRCb2RpZXNbMF0uaW5uZXJIVE1MID0gIiI7CgkJCQl9CgkJCX07CgkJfQoJfSk7CgkKCS8vIGV4dGVuZCBwbHVnaW4gc2NvcGUKCSQuZm4uZXh0ZW5kKHsKICAgICAgICB0YWJsZXNvcnRlcjogJC50YWJsZXNvcnRlci5jb25zdHJ1Y3QKCX0pOwoJCgl2YXIgdHMgPSAkLnRhYmxlc29ydGVyOwoJCgkvLyBhZGQgZGVmYXVsdCBwYXJzZXJzCgl0cy5hZGRQYXJzZXIoewoJCWlkOiAidGV4dCIsCgkJaXM6IGZ1bmN0aW9uKHMpIHsKCQkJcmV0dXJuIHRydWU7CgkJfSwKCQlmb3JtYXQ6IGZ1bmN0aW9uKHMpIHsKCQkJcmV0dXJuICQudHJpbShzLnRvTG93ZXJDYXNlKCkpOwoJCX0sCgkJdHlwZTogInRleHQiCgl9KTsKCQoJdHMuYWRkUGFyc2VyKHsKCQlpZDogImRpZ2l0IiwKCQlpczogZnVuY3Rpb24ocyx0YWJsZSkgewoJCQl2YXIgYyA9IHRhYmxlLmNvbmZpZzsKCQkJcmV0dXJuICQudGFibGVzb3J0ZXIuaXNEaWdpdChzLGMpOwoJCX0sCgkJZm9ybWF0OiBmdW5jdGlvbihzKSB7CgkJCXJldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KHMpOwoJCX0sCgkJdHlwZTogIm51bWVyaWMiCgl9KTsKCQoJdHMuYWRkUGFyc2VyKHsKCQlpZDogImN1cnJlbmN5IiwKCQlpczogZnVuY3Rpb24ocykgewoJCQlyZXR1cm4gL15bwqMk4oKsPy5dLy50ZXN0KHMpOwoJCX0sCgkJZm9ybWF0OiBmdW5jdGlvbihzKSB7CgkJCXJldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KHMucmVwbGFjZShuZXcgUmVnRXhwKC9bXjAtOS5dL2cpLCIiKSk7CgkJfSwKCQl0eXBlOiAibnVtZXJpYyIKCX0pOwoJCgl0cy5hZGRQYXJzZXIoewoJCWlkOiAiaXBBZGRyZXNzIiwKCQlpczogZnVuY3Rpb24ocykgewoJCQlyZXR1cm4gL15cZHsyLDN9W1wuXVxkezIsM31bXC5dXGR7MiwzfVtcLl1cZHsyLDN9JC8udGVzdChzKTsKCQl9LAoJCWZvcm1hdDogZnVuY3Rpb24ocykgewoJCQl2YXIgYSA9IHMuc3BsaXQoIi4iKSwgciA9ICIiLCBsID0gYS5sZW5ndGg7CgkJCWZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHsKCQkJCXZhciBpdGVtID0gYVtpXTsKCQkJICAgCWlmKGl0ZW0ubGVuZ3RoID09IDIpIHsKCQkJCQlyICs9ICIwIiArIGl0ZW07CgkJCSAgIAl9IGVsc2UgewoJCQkJCXIgKz0gaXRlbTsKCQkJICAgCX0KCQkJfQoJCQlyZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChyKTsKCQl9LAoJCXR5cGU6ICJudW1lcmljIgoJfSk7CgkKCXRzLmFkZFBhcnNlcih7CgkJaWQ6ICJ1cmwiLAoJCWlzOiBmdW5jdGlvbihzKSB7CgkJCXJldHVybiAvXihodHRwcz98ZnRwfGZpbGUpOlwvXC8kLy50ZXN0KHMpOwoJCX0sCgkJZm9ybWF0OiBmdW5jdGlvbihzKSB7CgkJCXJldHVybiBqUXVlcnkudHJpbShzLnJlcGxhY2UobmV3IFJlZ0V4cCgvKGh0dHBzP3xmdHB8ZmlsZSk6XC9cLy8pLCcnKSk7CgkJfSwKCQl0eXBlOiAidGV4dCIKCX0pOwoJCgl0cy5hZGRQYXJzZXIoewoJCWlkOiAiaXNvRGF0ZSIsCgkJaXM6IGZ1bmN0aW9uKHMpIHsKCQkJcmV0dXJuIC9eXGR7NH1bXC8tXVxkezEsMn1bXC8tXVxkezEsMn0kLy50ZXN0KHMpOwoJCX0sCgkJZm9ybWF0OiBmdW5jdGlvbihzKSB7CgkJCXJldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KChzICE9ICIiKSA/IG5ldyBEYXRlKHMucmVwbGFjZShuZXcgUmVnRXhwKC8tL2cpLCIvIikpLmdldFRpbWUoKSA6ICIwIik7CgkJfSwKCQl0eXBlOiAibnVtZXJpYyIKCX0pOwoJCQoJdHMuYWRkUGFyc2VyKHsKCQlpZDogInBlcmNlbnQiLAoJCWlzOiBmdW5jdGlvbihzKSB7IAoJCQlyZXR1cm4gL1wlJC8udGVzdCgkLnRyaW0ocykpOwoJCX0sCgkJZm9ybWF0OiBmdW5jdGlvbihzKSB7CgkJCXJldHVybiAkLnRhYmxlc29ydGVyLmZvcm1hdEZsb2F0KHMucmVwbGFjZShuZXcgUmVnRXhwKC8lL2cpLCIiKSk7CgkJfSwKCQl0eXBlOiAibnVtZXJpYyIKCX0pOwoKCXRzLmFkZFBhcnNlcih7CgkJaWQ6ICJ1c0xvbmdEYXRlIiwKCQlpczogZnVuY3Rpb24ocykgewoJCQlyZXR1cm4gcy5tYXRjaChuZXcgUmVnRXhwKC9eW0EtWmEtel17MywxMH1cLj8gWzAtOV17MSwyfSwgKFswLTldezR9fCc/WzAtOV17Mn0pICgoWzAtMl0/WzAtOV06WzAtNV1bMC05XSl8KFswLTFdP1swLTldOlswLTVdWzAtOV1ccyhBTXxQTSkpKSQvKSk7CgkJfSwKCQlmb3JtYXQ6IGZ1bmN0aW9uKHMpIHsKCQkJcmV0dXJuICQudGFibGVzb3J0ZXIuZm9ybWF0RmxvYXQobmV3IERhdGUocykuZ2V0VGltZSgpKTsKCQl9LAoJCXR5cGU6ICJudW1lcmljIgoJfSk7CgoJdHMuYWRkUGFyc2VyKHsKCQlpZDogInNob3J0RGF0ZSIsCgkJaXM6IGZ1bmN0aW9uKHMpIHsKCQkJcmV0dXJuIC9cZHsxLDJ9W1wvXC1dXGR7MSwyfVtcL1wtXVxkezIsNH0vLnRlc3Qocyk7CgkJfSwKCQlmb3JtYXQ6IGZ1bmN0aW9uKHMsdGFibGUpIHsKCQkJdmFyIGMgPSB0YWJsZS5jb25maWc7CgkJCXMgPSBzLnJlcGxhY2UoL1wtL2csIi8iKTsKCQkJaWYoYy5kYXRlRm9ybWF0ID09ICJ1cyIpIHsKCQkJCS8vIHJlZm9ybWF0IHRoZSBzdHJpbmcgaW4gSVNPIGZvcm1hdAoJCQkJcyA9IHMucmVwbGFjZSgvKFxkezEsMn0pW1wvXC1dKFxkezEsMn0pW1wvXC1dKFxkezR9KS8sICIkMy8kMS8kMiIpOwoJCQl9IGVsc2UgaWYoYy5kYXRlRm9ybWF0ID09ICJ1ayIpIHsKCQkJCS8vcmVmb3JtYXQgdGhlIHN0cmluZyBpbiBJU08gZm9ybWF0CgkJCQlzID0gcy5yZXBsYWNlKC8oXGR7MSwyfSlbXC9cLV0oXGR7MSwyfSlbXC9cLV0oXGR7NH0pLywgIiQzLyQyLyQxIik7CgkJCX0gZWxzZSBpZihjLmRhdGVGb3JtYXQgPT0gImRkL21tL3l5IiB8fCBjLmRhdGVGb3JtYXQgPT0gImRkLW1tLXl5IikgewoJCQkJcyA9IHMucmVwbGFjZSgvKFxkezEsMn0pW1wvXC1dKFxkezEsMn0pW1wvXC1dKFxkezJ9KS8sICIkMS8kMi8kMyIpOwkKCQkJfQoJCQlyZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChuZXcgRGF0ZShzKS5nZXRUaW1lKCkpOwoJCX0sCgkJdHlwZTogIm51bWVyaWMiCgl9KTsKCgl0cy5hZGRQYXJzZXIoewoJICAgIGlkOiAidGltZSIsCgkgICAgaXM6IGZ1bmN0aW9uKHMpIHsKCSAgICAgICAgcmV0dXJuIC9eKChbMC0yXT9bMC05XTpbMC01XVswLTldKXwoWzAtMV0/WzAtOV06WzAtNV1bMC05XVxzKGFtfHBtKSkpJC8udGVzdChzKTsKCSAgICB9LAoJICAgIGZvcm1hdDogZnVuY3Rpb24ocykgewoJICAgICAgICByZXR1cm4gJC50YWJsZXNvcnRlci5mb3JtYXRGbG9hdChuZXcgRGF0ZSgiMjAwMC8wMS8wMSAiICsgcykuZ2V0VGltZSgpKTsKCSAgICB9LAoJICB0eXBlOiAibnVtZXJpYyIKCX0pOwoJCgkKCXRzLmFkZFBhcnNlcih7CgkgICAgaWQ6ICJtZXRhZGF0YSIsCgkgICAgaXM6IGZ1bmN0aW9uKHMpIHsKCSAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0sCgkgICAgZm9ybWF0OiBmdW5jdGlvbihzLHRhYmxlLGNlbGwpIHsKCQkJdmFyIGMgPSB0YWJsZS5jb25maWcsIHAgPSAoIWMucGFyc2VyTWV0YWRhdGFOYW1lKSA/ICdzb3J0VmFsdWUnIDogYy5wYXJzZXJNZXRhZGF0YU5hbWU7CgkgICAgICAgIHJldHVybiAkKGNlbGwpLm1ldGFkYXRhKClbcF07CgkgICAgfSwKCSAgdHlwZTogIm51bWVyaWMiCgl9KTsKCQoJLy8gYWRkIGRlZmF1bHQgd2lkZ2V0cwoJdHMuYWRkV2lkZ2V0KHsKCQlpZDogInplYnJhIiwKCQlmb3JtYXQ6IGZ1bmN0aW9uKHRhYmxlKSB7CgkJCWlmKHRhYmxlLmNvbmZpZy5kZWJ1ZykgeyB2YXIgdGltZSA9IG5ldyBEYXRlKCk7IH0KCQkJJCgidHI6dmlzaWJsZSIsdGFibGUudEJvZGllc1swXSkKCSAgICAgICAgLmZpbHRlcignOmV2ZW4nKQoJICAgICAgICAucmVtb3ZlQ2xhc3ModGFibGUuY29uZmlnLndpZGdldFplYnJhLmNzc1sxXSkuYWRkQ2xhc3ModGFibGUuY29uZmlnLndpZGdldFplYnJhLmNzc1swXSkKCSAgICAgICAgLmVuZCgpLmZpbHRlcignOm9kZCcpCgkgICAgICAgIC5yZW1vdmVDbGFzcyh0YWJsZS5jb25maWcud2lkZ2V0WmVicmEuY3NzWzBdKS5hZGRDbGFzcyh0YWJsZS5jb25maWcud2lkZ2V0WmVicmEuY3NzWzFdKTsKCQkJaWYodGFibGUuY29uZmlnLmRlYnVnKSB7ICQudGFibGVzb3J0ZXIuYmVuY2htYXJrKCJBcHBseWluZyBaZWJyYSB3aWRnZXQiLCB0aW1lKTsgfQoJCX0KCX0pOwkKfSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/skeleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEpRdWVyeVRvb2xzIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBIHRvb2xib3ggb2YgY29udmVuaWVuY2VzIHRvIHByb3ZpZGUgZHluYW1pYyBqYXZhc2NyaXB0eSBmdW5jdGlvbmFsaXR5CiMgIGZvciBDTVMgbW9kdWxlcyBhbmQgd2Vic2l0ZSBkZXNpZ25lcnMuCiMgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbiAKIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/incjs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CjwhLS0gSlF1ZXJ5VG9vbHMgLS0+CntpZiBpc3NldCgkbGlicyl9Cntmb3JlYWNoIGZyb209JGxpYnMgaXRlbT0nb25lJ30KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ieyRiYXNlX3VybH17JG9uZX0iPjwvc2NyaXB0Pgp7L2ZvcmVhY2h9CnsvaWZ9Cgp7aWYgaXNzZXQoJGNzcyl9Cntmb3JlYWNoIGZyb209JGNzcyBpdGVtPSdvbmUnfQo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJ7JGJhc2VfdXJsfWNzcy97JG9uZX0iIG1lZGlhPSJzY3JlZW4iIC8+CnsvZm9yZWFjaH0Key9pZn0K]]></data>
	</file>
	<file>
	  <filename>/templates/ready.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogaGVyZSB3ZSBzZXQgZGVmYXVsdCB2YWx1ZXMgYW5kIGF0dHJpYnV0ZXMgZm9yIHRoZSBsaWJzIHRoYXQgYXJlIGxvYWRlZC4gKn0KCntsaXRlcmFsfQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oJCkKICAgIHsKCXsvbGl0ZXJhbH17aWYgaXNzZXQoJGpxdWVyeV9saWJzLnRhYmxlc29ydGVyKX17bGl0ZXJhbH0KICAgICAgICAvLyBjYWxsIHRoZSB0YWJsZXNvcnRlciBwbHVnaW4sIHRoZSBtYWdpYyBoYXBwZW5zIGluIHRoZSBtYXJrdXAKICAgICAgICBqUXVlcnkoIi5jbXNfc29ydGFibGUiKQogICAgICAgICAgICAgICAgLnRhYmxlc29ydGVyKHt3aWR0aEZpeGVkOiB0cnVlLCB3aWRnZXRzOiBbJ3plYnJhJ119KQogICAgICAgIHsvbGl0ZXJhbH17L2lmfXtsaXRlcmFsfQoKCXsvbGl0ZXJhbH17aWYgaXNzZXQoJGpxdWVyeV9saWJzLmxpZ2h0Ym94KX17bGl0ZXJhbH0KICAgICAgICBqUXVlcnkoJ2FbQHJlbCo9bGlnaHRib3hdJykubGlnaHRCb3goKTsKCXsvbGl0ZXJhbH17L2lmfXtsaXRlcmFsfQp9KTsgIC8vZW5kCjwvc2NyaXB0Pgp7L2xpdGVyYWx9Cg==]]></data>
	</file>
</module>
