<?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>Outsourcer</name>
	<version>1.0</version>
  <mincmsversion>2.0</mincmsversion>
	<help><![CDATA[CiAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgcG9zc2liaWxpdHkgdG8gZXhwb3J0IGFuZCByZS1pbXBvcnQuPGJyLz4KICAgIFNvIHlvdSBjYW4gZWRpdCB0aGVtIHdpdGggYSBlZGl0b3Igb2YgeW91ciBjaG9pY2Ugb3V0c2lkZSB0aGUgQ01TPGJyIC8+CiAgICBBbmQgdGhpcyBpcyB0aGUgc2NvcGU6PGJyIC8+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDstIHBhZ2UgY29udGVudCAoaW5jbC4gc2lkZWJhcik8YnIvPgogICAgJm5ic3A7Jm5ic3A7Jm5ic3A7LSB1c2VyIHBsdWdpbnM8YnIvPgogICAgJm5ic3A7Jm5ic3A7Jm5ic3A7LSBjb250ZW50IHRlbXBsYXRlcyBvZiBDTVM8YnIvPgogICAgJm5ic3A7Jm5ic3A7Jm5ic3A7LSBjc3MgdGVtcGxhdGVzIG9mIENNUzxici8+CiAgICA8YnIvPgogICAgVGhlcmUgYXJlIHR3byBtb2Rlczo8YnIvPgogICAgPGJyLz4KICAgIDxiPjEpIG1hbnVhbCBleHBvcnQvaW1wb3J0PC9iPjxiciAvPgogICAgaW1wb3J0IGFuZCBleHBvcnQgaXMgdHJpZ2dlcmVkIGJ5IGJ1dHRvbjxici8+CiAgICA8YnIvPgogICAgPGI+MikgYXV0b21hdGljIGltcG9ydDwvYj48YnIgLz4KICAgIGFsbG93cyB5b3UgdG8gbG9hZCBtb2RpZmllZCBmaWxlcyBmcm9tIHRtcC1kaXIgb24gZXZlcnkgcmVxdWVzdC48YnIgLz4K]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBPbGl2ZXIgSm9vJnN6bGlnOzxiciAvPjxiciAvPlZlcnNpb246IDEuMDxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPgogICAgVmVyc2lvbiAxLjAgLSBOb3YgMjAxNQo8YnIgLz4=]]></about>
	<description><![CDATA[Module to export and import content, userplugins, design and css templates]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgICBpZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgIGlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKICAgZWNobyAnPGgxPicuX19DTEFTU19fLic8L2gxPic7CgogICBpZiAoISAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCJPdXRzb3VyY2VyX1ZpZXciKSkgewogICAgICBlY2hvICc8aDM+Jy4kdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykuJzwvaDM+JzsKICAgICAgcmV0dXJuIGZhbHNlOwogICB9CgogICAvLyB0b2dnbGUgYXV0b21hdGljIGltcG9ydCBzdGF0dXMKICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgaWYgKGlzc2V0KCRfUE9TVFsnT3V0c291cmNlclN0YXR1cyddKSkgewogICAgICBzd2l0Y2goJF9QT1NUWydPdXRzb3VyY2VyU3RhdHVzJ10pIHsKICAgICAgICAgY2FzZSAnZGlzYWJsZSc6CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzdGF0dXMnLCAnb2ZmJyk7CiAgICAgICAgICAgIGVjaG8gJzxoNCBzdHlsZT0iY29sb3I6IGxpZ2h0Z3JlZW47Ij5hdXRvbWF0aWMgaW1wb3J0IGhhcyBiZWVuIGRpc2FibGVkPC9oND4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnZW5hYmxlJzoKICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3N0YXR1cycsICdvbicpOwogICAgICAgICAgICAkdGhpcy0+ZXhwb3J0KCk7CiAgICAgICAgICAgIGVjaG8gJzxoNCBzdHlsZT0iY29sb3I6IGxpZ2h0Z3JlZW47Ij5hdXRvbWF0aWMgaW1wb3J0IGhhcyBiZWVuIGVuYWJsZWQ8L2g0Pic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgIH0KCgogICAvLyBydW4gbWFudWFsIGltcG9ydCAvIGV4cG9ydAogICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICB0cnkgewogICAgICBpZiAoaXNzZXQoJF9QT1NUWydPdXRzb3VyY2VyJ10pICYmICRfUE9TVFsnT3V0c291cmNlciddID09ICdleHBvcnQnKSB7CiAgICAgICAgIGVjaG8gIjxoMj5ydW5uaW5nIE91dHNvdXJjZXI6OmV4cG9ydDwvaDI+IjsKICAgICAgICAgJGFyclJldHVybiA9ICR0aGlzLT5leHBvcnQoKTsKICAgICAgICAgZWNobyAiPHVsPiI7CiAgICAgICAgIGZvcmVhY2goJGFyclJldHVybiBhcyAkc3RyTWVzc2FnZSkgewogICAgICAgICAgICBlY2hvICc8bGk+Jy4kc3RyTWVzc2FnZS4nPC9saT4nOwogICAgICAgICB9CiAgICAgICAgIGVjaG8gIjwvdWw+IjsKICAgICAgICAgZWNobyAiPHA+Jm5ic3A7PC9wPiI7CiAgICAgIH0KCiAgICAgIGlmIChpc3NldCgkX1BPU1RbJ091dHNvdXJjZXInXSkgJiYgJF9QT1NUWydPdXRzb3VyY2VyJ10gPT0gJ2ltcG9ydCcpIHsKICAgICAgICAgZWNobyAiPGgyPnJ1bm5pbmcgT3V0c291cmNlcjo6aW1wb3J0PC9oMj4iOwogICAgICAgICAkYXJyUmV0dXJuID0gJHRoaXMtPmltcG9ydCgpOwogICAgICAgICBmb3JlYWNoKCRhcnJSZXR1cm4gYXMgJHN0ck1lc3NhZ2UpIHsKICAgICAgICAgICAgZWNobyAkc3RyTWVzc2FnZS4nPGJyIC8+JzsKICAgICAgICAgfQogICAgICAgICBlY2hvICI8cD4mbmJzcDs8L3A+IjsKICAgICAgfQogICB9CiAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgZWNobyAiPGgyPkV4Y2VwdGlvbiBmcm9tIE91dHNvdXJjZXI8L2gyPiIuJGUtPmdldE1lc3NhZ2UoKTsKICAgfQoKLy8gc2hvdyBhZG1pbiBwYWdlCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmVjaG8gJwogICAgPGZpZWxkc2V0PgogICAgICAgIDxsZWdlbmQ+bW9kdWxlIGhlbHA8L2xlZ2VuZD4nLgogICAgICAgICR0aGlzLT5MYW5nKCdoZWxwJykuCiAgICAnPC9maWVsZHNldD4nOwoKZWNobyAnPGZpZWxkc2V0PjxsZWdlbmQ+YXV0b21hdGljIGltcG9ydDwvbGVnZW5kPic7CmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3RhdHVzJywgJ29mZicpID09ICdvbicpIHsKICAgZWNobyAnCiAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+CiAgICAgICAgIGF1dG9tYXRpYyBpbXBvcnQgPGI+aXMgZW5hYmxlZDwvYj4gIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9Ik91dHNvdXJjZXJTdGF0dXMiIHZhbHVlPSJkaXNhYmxlIj4KICAgICAgPC9mb3JtPgogICAnOwp9CmVsc2UgewogICBlY2hvICcKICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgYXV0b21hdGljIGltcG9ydDogPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iT3V0c291cmNlclN0YXR1cyIgdmFsdWU9ImVuYWJsZSI+PGJyIC8+CiAgICAgICAgIChhbiBpbml0aWFsIGV4cG9ydCB3aWxsIGJlIGRvbmUpCiAgICAgIDwvZm9ybT4KICAgJzsKfQplY2hvICc8L2ZpZWxkc2V0Pic7CgplY2hvICcKICAgPGZpZWxkc2V0PgogICAgICA8bGVnZW5kPm1hbnVhbCBleHBvcnQvaW1wb3J0PC9sZWdlbmQ+CiAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+CiAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgdmFsdWU9ImV4cG9ydCIgbmFtZT0iT3V0c291cmNlciIgY2hlY2tlZD0iY2hlY2tlZCIvPm1hbnVhbCBleHBvcnQ8YnIvPgogICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIHZhbHVlPSJpbXBvcnQiIG5hbWU9Ik91dHNvdXJjZXIiLz5tYW51YWwgaW1wb3J0PGJyLz4KICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9InJ1biI+CiAgICAgIDwvZm9ybT4KICAgPC9maWVsZHNldD4KJzsKCj8+]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgZGVuaWVkISc7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnTW9kdWxlIHRvIGV4cG9ydCBhbmQgaW1wb3J0IGNvbnRlbnQsIHVzZXJwbHVnaW5zLCBkZXNpZ24gYW5kIGNzcyB0ZW1wbGF0ZXMnOwoKJGxhbmdbJ2hlbHAnXSA9ICcKICAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBwb3NzaWJpbGl0eSB0byBleHBvcnQgYW5kIHJlLWltcG9ydC48YnIvPgogICAgU28geW91IGNhbiBlZGl0IHRoZW0gd2l0aCBhIGVkaXRvciBvZiB5b3VyIGNob2ljZSBvdXRzaWRlIHRoZSBDTVM8YnIgLz4KICAgIEFuZCB0aGlzIGlzIHRoZSBzY29wZTo8YnIgLz4KICAgICZuYnNwOyZuYnNwOyZuYnNwOy0gcGFnZSBjb250ZW50IChpbmNsLiBzaWRlYmFyKTxici8+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDstIHVzZXIgcGx1Z2luczxici8+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDstIGNvbnRlbnQgdGVtcGxhdGVzIG9mIENNUzxici8+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDstIGNzcyB0ZW1wbGF0ZXMgb2YgQ01TPGJyLz4KICAgIDxici8+CiAgICBUaGVyZSBhcmUgdHdvIG1vZGVzOjxici8+CiAgICA8YnIvPgogICAgPGI+MSkgbWFudWFsIGV4cG9ydC9pbXBvcnQ8L2I+PGJyIC8+CiAgICBpbXBvcnQgYW5kIGV4cG9ydCBpcyB0cmlnZ2VyZWQgYnkgYnV0dG9uPGJyLz4KICAgIDxici8+CiAgICA8Yj4yKSBhdXRvbWF0aWMgaW1wb3J0PC9iPjxiciAvPgogICAgYWxsb3dzIHlvdSB0byBsb2FkIG1vZGlmaWVkIGZpbGVzIGZyb20gdG1wLWRpciBvbiBldmVyeSByZXF1ZXN0LjxiciAvPgonOwoKJGxhbmdbJ2NoYW5nZWxvZyddID0gJwogICAgVmVyc2lvbiAxLjAgLSBOb3YgMjAxNQonOw==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIHBlcm1pc3Npb25zCiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdPdXRzb3VyY2VyJywnT3V0c291cmNlcicpOwoKLy8gcHJlZmVyZW5jZQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnc3RhdHVzJywgJ29mZicpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbGFzdF9ydW4nLCAnJyk7CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+R2V0RnJpZW5kbHlOYW1lKCksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIHJlbW92ZSB0aGUgcGVybWlzc2lvbnMKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ091dHNvdXJjZXInKTsKCi8vIHJlbW92ZSBwcmVmZXJlbmNlcwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwoKLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkdldEZyaWVuZGx5TmFtZSgpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IE91dHNvdXJjZXIKdmVyc2lvbiA9IDEuMApkZXNjcmlwdGlvbiA9IAphdXRob3IgPSBPbGl2ZXIgSm9vJnN6bGlnOwphdXRob3JlbWFpbCA9IAptaW5jbXN2ZXJzaW9uID0gMi4wCjEx]]></data>
	</file>
	<file>
	  <filename>/Outsourcer.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KY2xhc3MgT3V0c291cmNlciBleHRlbmRzIENNU01vZHVsZSB7DQoNCiAgICBwcml2YXRlICRzdHJUbXBEaXIgPSBudWxsOw0KICAgIHByaXZhdGUgJHN0clRtcERpcl9Db250ZW50ID0gbnVsbDsNCiAgICBwcml2YXRlICRzdHJUbXBEaXJfU3R5bGVzaGVldHMgPSBudWxsOw0KICAgIHByaXZhdGUgJHN0clRtcERpcl9UZW1wbGF0ZXMgPSBudWxsOw0KICAgIHByaXZhdGUgJHN0clRtcERpcl9Vc2VycGx1Z2lucyA9IG51bGw7DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsgcmV0dXJuICdPdXRzb3VyY2VyJzsgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAnT3V0c291cmNlcic7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjAnOyB9DQogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOyB9DQogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdPbGl2ZXIgSm9vJnN6bGlnOyc7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnJzsgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7IHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7IHJldHVybiBmYWxzZTsgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBIYXNBZG1pbigpIHsgcmV0dXJuIHRydWU7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgeyByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigiT3V0c291cmNlciIpOyB9DQogICAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdsYXlvdXQnOyB9DQogICAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnYWRtaW5kZXNjcmlwdGlvbicpOyB9DQogICAgcHVibGljIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgeyByZXR1cm4gIjIuMCI7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkgeyByZXR1cm4gYXJyYXkoKTsgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKSB7ICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7ICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsgfQ0KDQogICAgLyoqDQogICAgICogQHJldHVybiBPdXRzb3VyY2VyDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KDQogICAgICAgICR0aGlzLT5zdHJUbXBEaXIgPSBDTVNfUk9PVF9QQVRIIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICd0bXAnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdPdXRzb3VyY2VyJzsNCiAgICAgICAgJHRoaXMtPnN0clRtcERpcl9Db250ZW50ID0gJHRoaXMtPnN0clRtcERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY29udGVudCc7DQogICAgICAgICR0aGlzLT5zdHJUbXBEaXJfU3R5bGVzaGVldHMgPSAkdGhpcy0+c3RyVG1wRGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdsYXlvdXRfc3R5bGVzaGVldHMnOw0KICAgICAgICAkdGhpcy0+c3RyVG1wRGlyX1RlbXBsYXRlcyA9ICR0aGlzLT5zdHJUbXBEaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2xheW91dF90ZW1wbGF0ZXMnOw0KICAgICAgICAkdGhpcy0+c3RyVG1wRGlyX1VzZXJwbHVnaW5zID0gJHRoaXMtPnN0clRtcERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndXNlcnBsdWdpbnMnOw0KDQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsNCg0KICAgICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N0YXR1cycsICdvZmYnKSA9PSAnb24nKSB7DQogICAgICAgICAgICAkdGhpcy0+aW1wb3J0KCk7DQogICAgICAgIH0NCiAgICB9DQoNCg0KICAgIC8qKg0KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uDQogICAgICovDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0RpcmVjdG9yaWVzKCkgew0KICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0aGlzLT5zdHJUbXBEaXIpKSB7DQogICAgICAgICAgICBpZiAoIW1rZGlyKCR0aGlzLT5zdHJUbXBEaXIpKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRElSLUVSUk9SOiBjYW4gbm90IG1ha2UgZGlyOiAnIC4gJHRoaXMtPnN0clRtcERpcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdGhpcy0+c3RyVG1wRGlyX0NvbnRlbnQpKSB7DQogICAgICAgICAgICBpZiAoIW1rZGlyKCR0aGlzLT5zdHJUbXBEaXJfQ29udGVudCkpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdESVItRVJST1I6IGNhbiBub3QgbWFrZSBkaXI6ICcgLiAkdGhpcy0+c3RyVG1wRGlyX0NvbnRlbnQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICghZmlsZV9leGlzdHMoJHRoaXMtPnN0clRtcERpcl9TdHlsZXNoZWV0cykpIHsNCiAgICAgICAgICAgIGlmICghbWtkaXIoJHRoaXMtPnN0clRtcERpcl9TdHlsZXNoZWV0cykpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdESVItRVJST1I6IGNhbiBub3QgbWFrZSBkaXI6ICcgLiAkdGhpcy0+c3RyVG1wRGlyX1N0eWxlc2hlZXRzKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0aGlzLT5zdHJUbXBEaXJfVGVtcGxhdGVzKSkgew0KICAgICAgICAgICAgaWYgKCFta2RpcigkdGhpcy0+c3RyVG1wRGlyX1RlbXBsYXRlcykpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdESVItRVJST1I6IGNhbiBub3QgbWFrZSBkaXI6ICcgLiAkdGhpcy0+c3RyVG1wRGlyX1RlbXBsYXRlcyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdGhpcy0+c3RyVG1wRGlyX1RlbXBsYXRlcykpIHsNCiAgICAgICAgICAgIGlmICghbWtkaXIoJHRoaXMtPnN0clRtcERpcl9UZW1wbGF0ZXMpKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRElSLUVSUk9SOiBjYW4gbm90IG1ha2UgZGlyOiAnIC4gJHRoaXMtPnN0clRtcERpcl9UZW1wbGF0ZXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICghZmlsZV9leGlzdHMoJHRoaXMtPnN0clRtcERpcl9Vc2VycGx1Z2lucykpIHsNCiAgICAgICAgICAgIGlmICghbWtkaXIoJHRoaXMtPnN0clRtcERpcl9Vc2VycGx1Z2lucykpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdESVItRVJST1I6IGNhbiBub3QgbWFrZSBkaXI6ICcgLiAkdGhpcy0+c3RyVG1wRGlyX1VzZXJwbHVnaW5zKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEByZXR1cm4gYXJyYXkgb2YgbWVzc2FnZXMNCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBvcnQoKSB7DQoNCiAgICAgICAgJHRoaXMtPmNoZWNrRGlyZWN0b3JpZXMoKTsNCg0KICAgICAgICAkYXJyUmV0dXJuID0gYXJyYXkoKTsNCg0KICAgICAgICAkb2JqQ01TID0gY21zbXMoKTsNCiAgICAgICAgJG9iakFET0Nvbm5lY3Rpb24gPSAkb2JqQ01TLT5HZXREYigpOw0KDQogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgY3AuY29udGVudF9pZCwgYy5jb250ZW50X25hbWUsIGNwLnByb3BfbmFtZSwgY3AuY29udGVudCwgY3AubW9kaWZpZWRfZGF0ZQ0KICAgICAgICAgICAgICAgICAgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gImNvbnRlbnRfcHJvcHMgY3ANCiAgICAgICAgICAgICAgICAgIEpPSU4gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJjb250ZW50IGMgT04gKGNwLmNvbnRlbnRfaWQgPSBjLmNvbnRlbnRfaWQpDQogICAgICAgICAgICAgICAgIFdIRVJFIGNwLnByb3BfbmFtZSBJTiAoJ1NpZGViYXInLCdjb250ZW50X2VuJykiOw0KICAgICAgICAkZGJyZXN1bHQgPSAkb2JqQURPQ29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICAgICBpZiAoJGRicmVzdWx0ID09PSBmYWxzZSkgew0KICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignREItRVJST1IgKCcgLiBiYXNlbmFtZShfX0ZJTEVfXykgLiAnOicgLiBfX0xJTkVfXyAuICcpOiAnIC4gJG9iakFET0Nvbm5lY3Rpb24tPkVycm9yTXNnKCkgLiAnPGJyIC8+UXVlcnk6ICcgLiAkcXVlcnkpOw0KICAgICAgICB9DQogICAgICAgIHdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7DQogICAgICAgICAgICAkYXJyRGF0YVtdID0gJHJvdzsNCiAgICAgICAgICAgICRyb3dbJ2NvbnRlbnRfbmFtZSddID0gc3RyX3JlcGxhY2UoJyAnLCdfJywgJHJvd1snY29udGVudF9uYW1lJ10pOw0KICAgICAgICAgICAgJHJvd1snY29udGVudF9uYW1lJ10gPSBwcmVnX3JlcGxhY2UoJ35bXmEtekEtWjAtOV9dficsJycsICRyb3dbJ2NvbnRlbnRfbmFtZSddKTsNCiAgICAgICAgICAgICRzdHJUZW1wRmlsZSA9ICR0aGlzLT5zdHJUbXBEaXJfQ29udGVudCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkcm93Wydjb250ZW50X2lkJ10gLiAnIycgLiAkcm93Wydwcm9wX25hbWUnXSAuICcjJyAuICRyb3dbJ2NvbnRlbnRfbmFtZSddIC4gJy50cGwnOw0KICAgICAgICAgICAgaWYgKGZpbGVfcHV0X2NvbnRlbnRzKCRzdHJUZW1wRmlsZSwgJHJvd1snY29udGVudCddKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdFUlJPUjogY2FuIG5vdCB3cml0ZSBjb250ZW50ZmlsZTogJyAuICRzdHJUZW1wRmlsZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJGFyclJldHVybltdID0gInNpdGUgY29udGVudCBoYXMgYmVlbiBleHBvcnRlZCB0bzogIiAuICR0aGlzLT5zdHJUbXBEaXJfQ29udGVudDsNCg0KDQogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgaWQsIG5hbWUsIGNvbnRlbnQsIG1vZGlmaWVkIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJsYXlvdXRfc3R5bGVzaGVldHMiOw0KICAgICAgICAkZGJyZXN1bHQgPSAkb2JqQURPQ29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICAgICBpZiAoJGRicmVzdWx0ID09PSBmYWxzZSkgew0KICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignREItRVJST1IgKCcgLiBiYXNlbmFtZShfX0ZJTEVfXykgLiAnOicgLiBfX0xJTkVfXyAuICcpOiAnIC4gJG9iakFET0Nvbm5lY3Rpb24tPkVycm9yTXNnKCkgLiAnPGJyIC8+UXVlcnk6ICcgLiAkcXVlcnkpOw0KICAgICAgICB9DQogICAgICAgIHdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7DQogICAgICAgICAgICAkYXJyRGF0YVtdID0gJHJvdzsNCiAgICAgICAgICAgICRyb3dbJ25hbWUnXSA9IHN0cl9yZXBsYWNlKCcgJywnXycsICRyb3dbJ25hbWUnXSk7DQogICAgICAgICAgICAkcm93WyduYW1lJ10gPSBwcmVnX3JlcGxhY2UoJ35bXmEtekEtWjAtOV9dficsJycsICRyb3dbJ25hbWUnXSk7DQogICAgICAgICAgICAkc3RyVGVtcEZpbGUgPSAkdGhpcy0+c3RyVG1wRGlyX1N0eWxlc2hlZXRzIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRyb3dbJ2lkJ10gLiAnIycgLiAkcm93WyduYW1lJ10gLiAnLmNzcyc7DQogICAgICAgICAgICBpZiAoZmlsZV9wdXRfY29udGVudHMoJHN0clRlbXBGaWxlLCAkcm93Wydjb250ZW50J10pID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0VSUk9SOiBjYW4gbm90IHdyaXRlIGNvbnRlbnRmaWxlOiAnIC4gJHN0clRlbXBGaWxlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkYXJyUmV0dXJuW10gPSAibGF5b3V0IHN0eWxlc2hlZXRzIGhhcyBiZWVuIGV4cG9ydGVkIHRvOiAiIC4gJHRoaXMtPnN0clRtcERpcl9TdHlsZXNoZWV0czsNCg0KDQogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgaWQsIG5hbWUsIGNvbnRlbnQsIG1vZGlmaWVkIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJsYXlvdXRfdGVtcGxhdGVzIjsNCiAgICAgICAgJGRicmVzdWx0ID0gJG9iakFET0Nvbm5lY3Rpb24tPkV4ZWN1dGUoJHF1ZXJ5KTsNCiAgICAgICAgaWYgKCRkYnJlc3VsdCA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0RCLUVSUk9SICgnIC4gYmFzZW5hbWUoX19GSUxFX18pIC4gJzonIC4gX19MSU5FX18gLiAnKTogJyAuICRvYmpBRE9Db25uZWN0aW9uLT5FcnJvck1zZygpIC4gJzxiciAvPlF1ZXJ5OiAnIC4gJHF1ZXJ5KTsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgew0KICAgICAgICAgICAgJGFyckRhdGFbXSA9ICRyb3c7DQogICAgICAgICAgICAkcm93WyduYW1lJ10gPSBzdHJfcmVwbGFjZSgnICcsJ18nLCAkcm93WyduYW1lJ10pOw0KICAgICAgICAgICAgJHJvd1snbmFtZSddID0gcHJlZ19yZXBsYWNlKCd+W15hLXpBLVowLTlfXX4nLCcnLCAkcm93WyduYW1lJ10pOw0KICAgICAgICAgICAgJHN0clRlbXBGaWxlID0gJHRoaXMtPnN0clRtcERpcl9UZW1wbGF0ZXMgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHJvd1snaWQnXSAuICcjJyAuICRyb3dbJ25hbWUnXSAuICcudHBsJzsNCiAgICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkc3RyVGVtcEZpbGUsICRyb3dbJ2NvbnRlbnQnXSkgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignRVJST1I6IGNhbiBub3Qgd3JpdGUgY29udGVudGZpbGU6ICcgLiAkc3RyVGVtcEZpbGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICRhcnJSZXR1cm5bXSA9ICJsYXlvdXQgdGVtcGxhdGVzIGhhcyBiZWVuIGV4cG9ydGVkIHRvOiAiIC4gJHRoaXMtPnN0clRtcERpcl9UZW1wbGF0ZXM7DQoNCg0KICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIHVzZXJwbHVnaW5faWQsIHVzZXJwbHVnaW5fbmFtZSwgY29kZSwgbW9kaWZpZWRfZGF0ZSBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAidXNlcnBsdWdpbnMiOw0KICAgICAgICAkZGJyZXN1bHQgPSAkb2JqQURPQ29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICAgICBpZiAoJGRicmVzdWx0ID09PSBmYWxzZSkgew0KICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignREItRVJST1IgKCcgLiBiYXNlbmFtZShfX0ZJTEVfXykgLiAnOicgLiBfX0xJTkVfXyAuICcpOiAnIC4gJG9iakFET0Nvbm5lY3Rpb24tPkVycm9yTXNnKCkgLiAnPGJyIC8+UXVlcnk6ICcgLiAkcXVlcnkpOw0KICAgICAgICB9DQogICAgICAgIHdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7DQogICAgICAgICAgICAkYXJyRGF0YVtdID0gJHJvdzsNCiAgICAgICAgICAgICRzdHJUZW1wRmlsZSA9ICR0aGlzLT5zdHJUbXBEaXJfVXNlcnBsdWdpbnMgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHJvd1sndXNlcnBsdWdpbl9pZCddIC4gJyMnIC4gJHJvd1sndXNlcnBsdWdpbl9uYW1lJ10gLiAnLnBocCc7DQogICAgICAgICAgICBpZiAoZmlsZV9wdXRfY29udGVudHMoJHN0clRlbXBGaWxlLCAkcm93Wydjb2RlJ10pID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0VSUk9SOiBjYW4gbm90IHdyaXRlIHVzZXJwbHVnaW4gZmlsZTogJyAuICRzdHJUZW1wRmlsZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJGFyclJldHVybltdID0gInVzZXIgcGx1Z2lucyBoYXMgYmVlbiBleHBvcnRlZCB0bzogIiAuICR0aGlzLT5zdHJUbXBEaXJfVXNlcnBsdWdpbnM7DQoNCg0KICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbGFzdF9ydW4nLCB0aW1lKCkpOw0KDQogICAgICAgIHJldHVybiAkYXJyUmV0dXJuOw0KICAgIH0NCg0KDQogICAgLyoqDQogICAgICogQHJldHVybiBhcnJheSBvZiBtZXNzYWdlcw0KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGltcG9ydCgpIHsNCg0KICAgICAgICAkdGhpcy0+Y2hlY2tEaXJlY3RvcmllcygpOw0KDQogICAgICAgICRhcnJSZXR1cm4gPSBhcnJheSgpOw0KDQogICAgICAgICRvYmpDTVMgPSBjbXNtcygpOw0KICAgICAgICAkb2JqQURPQ29ubmVjdGlvbiA9ICRvYmpDTVMtPkdldERiKCk7DQogICAgICAgICR0c0xhc3RSdW4gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbGFzdF9ydW4nLCB0aW1lKCkpOw0KDQogICAgICAgICRhcnJGaWxlcyA9IGdsb2IoJHRoaXMtPnN0clRtcERpcl9Db250ZW50IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICcqJyk7DQogICAgICAgIGZvcmVhY2goJGFyckZpbGVzIGFzICRzdHJGaWxlcGF0aCkgew0KICAgICAgICAgICAgJHN0ckZpbGVuYW1lID0gYmFzZW5hbWUoJHN0ckZpbGVwYXRoKTsNCiAgICAgICAgICAgIGlmIChmaWxlbXRpbWUoJHN0ckZpbGVwYXRoKSA8PSAkdHNMYXN0UnVuKSB7DQogICAgICAgICAgICAgICAgJGFyclJldHVybltdID0gJ2NvbnRlbnQgZWxlbWVudCBbJyAuICRzdHJGaWxlbmFtZSAuICddIGhhcyBubyBjaGFuZ2VzIGFuZCB3aWxsIGJlIGlnbm9yZWQnOw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkYXJyUmV0dXJuW10gPSAnPGI+TkVXIFZFUlNJT048L2I+IG9mIGNvbnRlbnQgZWxlbWVudCBbJyAuICRzdHJGaWxlbmFtZSAuICddIGhhcyBiZWVuIGltcG9ydGVkJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRzdHJGaWxlbmFtZSA9IHN0cl9yZXBsYWNlKCcudHBsJywgJycsICRzdHJGaWxlbmFtZSk7DQogICAgICAgICAgICAkYXJyVG1wID0gZXhwbG9kZSgnIycsICRzdHJGaWxlbmFtZSk7DQogICAgICAgICAgICBpZiAoY291bnQoJGFyclRtcCkgIT0gMykgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oImludmFsaWRlIGZpbGVuYW1lOiAiIC4gJHN0ckZpbGVuYW1lKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRpbnRJZCA9ICRhcnJUbXBbMF07DQogICAgICAgICAgICAkc3RyUHJvcE5hbWUgPSAkYXJyVG1wWzFdOw0KICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkc3RyRmlsZXBhdGgpOw0KICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoJ357LionIC4gX19DTEFTU19fIC4gJy4qfVtcbl0qficsICcnLCAkc3RyQ29udGVudCk7IC8vcmVtb3ZlIGVhcmx5ZXIgdGltZXN0YW1wDQogICAgICAgICAgICAkc3RyQ29udGVudCA9ICd7KiBpbXBvcnRlZCB3aXRoICcgLiBfX0NMQVNTX18gLiAnIGF0ICcgLiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gJyAqfScgLiBQSFBfRU9MIC4gJHN0ckNvbnRlbnQ7DQoNCiAgICAgICAgICAgIC8vc2F2ZSBuZXcgdmFsdWVzIHRvIGRhdGFiYXNlDQogICAgICAgICAgICAkb2JqQ29udGVudE9wZXJhdGlvbnMgPSBDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7DQogICAgICAgICAgICAkb2JqQ29udGVudCA9ICRvYmpDb250ZW50T3BlcmF0aW9ucy0+TG9hZENvbnRlbnRGcm9tSWQoJGludElkLCB0cnVlKTsNCiAgICAgICAgICAgIGlmICgkb2JqQ29udGVudCBpbnN0YW5jZW9mIENvbnRlbnQpIHsNCiAgICAgICAgICAgICAgICAkb2JqQ29udGVudC0+U2V0UHJvcGVydHlWYWx1ZSgkc3RyUHJvcE5hbWUsJHN0ckNvbnRlbnQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJG9iakNvbnRlbnQtPlNhdmUoKTsNCg0KICAgICAgICB9DQogICAgICAgICRhcnJSZXR1cm5bXSA9ICcnOw0KDQoNCg0KICAgICAgICAkYXJyRmlsZXMgPSBnbG9iKCR0aGlzLT5zdHJUbXBEaXJfU3R5bGVzaGVldHMgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJyonKTsNCiAgICAgICAgZm9yZWFjaCgkYXJyRmlsZXMgYXMgJHN0ckZpbGVwYXRoKSB7DQogICAgICAgICAgICAkc3RyRmlsZW5hbWUgPSBiYXNlbmFtZSgkc3RyRmlsZXBhdGgpOw0KICAgICAgICAgICAgaWYgKGZpbGVtdGltZSgkc3RyRmlsZXBhdGgpIDw9ICR0c0xhc3RSdW4pIHsNCiAgICAgICAgICAgICAgICAkYXJyUmV0dXJuW10gPSAnc3R5bGVzaGVldCBbJy4kc3RyRmlsZW5hbWUuJ10gaGFzIG5vIGNoYW5nZWQgYW5kIHdpbGwgYmUgaWdub3JlZCc7DQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICAkYXJyUmV0dXJuW10gPSAnPGI+TkVXIFZFUlNJT048L2I+IG9mIHN0eWxlc2hlZXQgWycuJHN0ckZpbGVuYW1lLiddIGhhcyBiZWVuIGltcG9ydGVkJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRzdHJGaWxlbmFtZSA9IHN0cl9yZXBsYWNlKCcuY3NzJywnJywkc3RyRmlsZW5hbWUpOw0KICAgICAgICAgICAgJGFyclRtcCA9IGV4cGxvZGUoJyMnLCAkc3RyRmlsZW5hbWUpOw0KICAgICAgICAgICAgaWYgKGNvdW50KCRhcnJUbXApICE9IDIpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCAiaW52YWxpZGUgZmlsZW5hbWU6ICIgLiAgJHN0ckZpbGVuYW1lKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRpbnRJZCA9ICRhcnJUbXBbMF07DQogICAgICAgICAgICAkc3RyQ29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRzdHJGaWxlcGF0aCk7DQogICAgICAgICAgICAkc3RyQ29udGVudCA9IHByZWdfcmVwbGFjZSgnfi8uKicuX19DTEFTU19fLicuKi9bXG5dKn4nLCcnLCRzdHJDb250ZW50KTsgLy9yZW1vdmUgZWFybHllciB0aW1lc3RhbXANCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gJy8qIGltcG9ydGVkIHdpdGggJy5fX0NMQVNTX18uJyBhdCAnLmRhdGUoJ1ktbS1kIEg6aTpzJykuJyAqLycuUEhQX0VPTC4kc3RyQ29udGVudDsNCg0KICAgICAgICAgICAgLy9zYXZlIG5ldyB2YWx1ZXMgdG8gZGF0YWJhc2UNCiAgICAgICAgICAgICRvYmpDbXNMYXlvdXRTdHlsZXNoZWV0ID0gQ21zTGF5b3V0U3R5bGVzaGVldDo6bG9hZCgkaW50SWQpOw0KICAgICAgICAgICAgJG9iakNtc0xheW91dFN0eWxlc2hlZXQtPnNldF9jb250ZW50KCRzdHJDb250ZW50KTsNCiAgICAgICAgICAgICRvYmpDbXNMYXlvdXRTdHlsZXNoZWV0LT5zYXZlKCk7DQoNCiAgICAgICAgfQ0KICAgICAgICAkYXJyUmV0dXJuW10gPSAnJzsNCg0KDQogICAgICAgICRhcnJGaWxlcyA9IGdsb2IoJHRoaXMtPnN0clRtcERpcl9UZW1wbGF0ZXMgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJyonKTsNCiAgICAgICAgZm9yZWFjaCgkYXJyRmlsZXMgYXMgJHN0ckZpbGVwYXRoKSB7DQogICAgICAgICAgICAkc3RyRmlsZW5hbWUgPSBiYXNlbmFtZSgkc3RyRmlsZXBhdGgpOw0KICAgICAgICAgICAgaWYgKGZpbGVtdGltZSgkc3RyRmlsZXBhdGgpIDw9ICR0c0xhc3RSdW4pIHsNCiAgICAgICAgICAgICAgICAkYXJyUmV0dXJuW10gPSAndGVtcGxhdGUgWycuJHN0ckZpbGVuYW1lLiddIGhhcyBubyBjaGFuZ2VkIGFuZCB3aWxsIGJlIGlnbm9yZWQnOw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgJGFyclJldHVybltdID0gJzxiPk5FVyBWRVJTSU9OPC9iPiBvZiB0ZW1wbGF0ZSBbJy4kc3RyRmlsZW5hbWUuJ10gaGFzIGJlZW4gaW1wb3J0ZWQnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHN0ckZpbGVuYW1lID0gc3RyX3JlcGxhY2UoJy50cGwnLCcnLCRzdHJGaWxlbmFtZSk7DQogICAgICAgICAgICAkYXJyVG1wID0gZXhwbG9kZSgnIycsICRzdHJGaWxlbmFtZSk7DQogICAgICAgICAgICBpZiAoY291bnQoJGFyclRtcCkgIT0gMikgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oICJpbnZhbGlkZSBmaWxlbmFtZTogIiAuICAkc3RyRmlsZW5hbWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGludElkID0gJGFyclRtcFswXTsNCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHN0ckZpbGVwYXRoKTsNCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gcHJlZ19yZXBsYWNlKCd+ey4qJy5fX0NMQVNTX18uJy4qfVtcbl0qficsJycsJHN0ckNvbnRlbnQpOyAvL3JlbW92ZSBlYXJseWVyIHRpbWVzdGFtcA0KICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSAneyogaW1wb3J0ZWQgd2l0aCAnLl9fQ0xBU1NfXy4nIGF0ICcuZGF0ZSgnWS1tLWQgSDppOnMnKS4nICp9Jy5QSFBfRU9MLiRzdHJDb250ZW50Ow0KDQogICAgICAgICAgICAvL3NhdmUgbmV3IHZhbHVlcyB0byBkYXRhYmFzZQ0KICAgICAgICAgICAgJG9iakNtc0xheW91dFRlbXBsYXRlID0gQ21zTGF5b3V0VGVtcGxhdGU6OmxvYWQoJGludElkKTsNCiAgICAgICAgICAgICRvYmpDbXNMYXlvdXRUZW1wbGF0ZS0+c2V0X2NvbnRlbnQoJHN0ckNvbnRlbnQpOw0KICAgICAgICAgICAgJG9iakNtc0xheW91dFRlbXBsYXRlLT5zYXZlKCk7DQoNCiAgICAgICAgfQ0KICAgICAgICAkYXJyUmV0dXJuW10gPSAnJzsNCg0KDQogICAgICAgICRhcnJGaWxlcyA9IGdsb2IoJHRoaXMtPnN0clRtcERpcl9Vc2VycGx1Z2lucyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnKicpOw0KICAgICAgICBmb3JlYWNoKCRhcnJGaWxlcyBhcyAkc3RyRmlsZXBhdGgpIHsNCiAgICAgICAgICAgICRzdHJGaWxlbmFtZSA9IGJhc2VuYW1lKCRzdHJGaWxlcGF0aCk7DQogICAgICAgICAgICBpZiAoZmlsZW10aW1lKCRzdHJGaWxlcGF0aCkgPD0gJHRzTGFzdFJ1bikgew0KICAgICAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9ICd1c2VycGx1Z2luIFsnLiRzdHJGaWxlbmFtZS4nXSBoYXMgbm8gY2hhbmdlZCBhbmQgd2lsbCBiZSBpZ25vcmVkJzsNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9ICc8Yj5ORVcgVkVSU0lPTjwvYj4gb2YgdXNlcnBsdWdpbiBbJy4kc3RyRmlsZW5hbWUuJ10gaGFzIGJlZW4gaW1wb3J0ZWQnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHN0ckZpbGVuYW1lID0gc3RyX3JlcGxhY2UoJy5waHAnLCcnLCRzdHJGaWxlbmFtZSk7DQogICAgICAgICAgICAkYXJyVG1wID0gZXhwbG9kZSgnIycsICRzdHJGaWxlbmFtZSk7DQogICAgICAgICAgICBpZiAoY291bnQoJGFyclRtcCkgIT0gMikgew0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oICJpbnZhbGlkZSBmaWxlbmFtZTogIiAuICAkc3RyRmlsZW5hbWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGludElkID0gJGFyclRtcFswXTsNCiAgICAgICAgICAgICRzdHJUYWdOYW1lID0gJGFyclRtcFsxXTsNCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHN0ckZpbGVwYXRoKTsNCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gcHJlZ19yZXBsYWNlKCd+Ly4qJy5fX0NMQVNTX18uJy4qL1tcbl0qficsJycsJHN0ckNvbnRlbnQpOyAvL3JlbW92ZSBlYXJseWVyIHRpbWVzdGFtcA0KICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSAnLyogaW1wb3J0ZWQgd2l0aCAnLl9fQ0xBU1NfXy4nIGF0ICcuZGF0ZSgnWS1tLWQgSDppOnMnKS4nICovJy5QSFBfRU9MLiRzdHJDb250ZW50Ow0KDQogICAgICAgICAgICAvL3NhdmUgbmV3IHZhbHVlcyB0byBkYXRhYmFzZQ0KICAgICAgICAgICAgJG9ialVzZXJUYWdPcGVyYXRpb25zID0gVXNlclRhZ09wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOw0KICAgICAgICAgICAgJG9ialVzZXJUYWdPcGVyYXRpb25zLT5TZXRVc2VyVGFnKCAkc3RyVGFnTmFtZSwgJHN0ckNvbnRlbnQsIGZhbHNlICk7DQoNCiAgICAgICAgfQ0KICAgICAgICAkYXJyUmV0dXJuW10gPSAnJzsNCg0KICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbGFzdF9ydW4nLCB0aW1lKCkpOw0KDQogICAgICAgIHJldHVybiAkYXJyUmV0dXJuOw0KICAgIH0NCg0KfQ==]]></data>
	</file>
</module>
