<?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.1</version>
  <mincmsversion>2.0</mincmsversion>
	<help><![CDATA[DQogICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIHBvc3NpYmlsaXR5IHRvIGV4cG9ydCBhbmQgcmUtaW1wb3J0Ljxici8+DQogICAgU28geW91IGNhbiBlZGl0IHRoZW0gd2l0aCBhIGVkaXRvciBvZiB5b3VyIGNob2ljZSBvdXRzaWRlIHRoZSBDTVM8YnIgLz4NCiAgICBBbmQgdGhpcyBpcyB0aGUgc2NvcGU6PGJyIC8+DQogICAgJm5ic3A7Jm5ic3A7Jm5ic3A7LSBwYWdlIGNvbnRlbnQgKGluY2wuIGluZGl2aWR1YWwgcHJvcGVydGllcyk8YnIvPg0KICAgICZuYnNwOyZuYnNwOyZuYnNwOy0gZGVzaWducyAgb2YgQ01TICh0ZW1wbGF0ZXMgYW5kIGNzcyk8YnIvPg0KICAgICZuYnNwOyZuYnNwOyZuYnNwOy0gdXNlciBwbHVnaW5zPGJyLz4NCiAgICA8YnIvPg0KICAgIFRoZXJlIGFyZSB0d28gbW9kZXM6PGJyLz4NCiAgICA8YnIvPg0KICAgIDxiPjEpIG1hbnVhbCBleHBvcnQvaW1wb3J0PC9iPjxiciAvPg0KICAgIGltcG9ydCBhbmQgZXhwb3J0IGlzIHRyaWdnZXJlZCBieSBidXR0b248YnIvPg0KICAgIDxici8+DQogICAgPGI+MikgYXV0b21hdGljIGltcG9ydDwvYj48YnIgLz4NCiAgICBhbGxvd3MgeW91IHRvIGxvYWQgbW9kaWZpZWQgZmlsZXMgZnJvbSB0bXAtZGlyIG9uIGV2ZXJ5IHJlcXVlc3QuPGJyIC8+DQo=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBPbGl2ZXIgSm9vJnN6bGlnOzxiciAvPjxiciAvPlZlcnNpb246IDEuMTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPg0KICAgIDxwPg0KICAgICAgICA8Yj5WZXJzaW9uIDEuMCAtIE5vdiAyMDE1PC9iPjxiciAvPg0KICAgICAgICBJbml0aWFsIFZlcnNpb24NCiAgICA8L3A+DQogICAgPHA+DQogICAgICAgIDxiPlZlcnNpb24gMS4xIC0gRGV6IDIwMTU8L2I+PGJyIC8+DQogICAgICAgIC0gZml4ZWQgYnVnIG9uIGxvc2luZyBkZXNpZ24gYXNzaWdubWVudDxiciAvPg0KICAgICAgICAtIGNoYW5nZWQgZXhwb3J0IHN0cnVjdHVyZTxiciAvPg0KICAgICAgICAtIGFkZGVkIGZlYXR1cmUgdG8gZGVmaW5lIDxpPmNvbnRlbnQgcHJvcHM8L2k+IGFuZCA8aT5kZXNpZ25zPC9pPiB0byBiZSBleHBvcnRlZA0KICAgIDwvcD4NCjxiciAvPg==]]></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[PD9waHANCg0KICAgaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KICAgaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCiAgIGVjaG8gJzxoMT4nLl9fQ0xBU1NfXy4nPC9oMT4nOw0KDQogICBpZiAoISAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCJPdXRzb3VyY2VyX1ZpZXciKSkgew0KICAgICAgZWNobyAnPGgzPicuJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpLic8L2gzPic7DQogICAgICByZXR1cm4gZmFsc2U7DQogICB9DQoNCiAgIC8vIHRvZ2dsZSBhdXRvbWF0aWMgaW1wb3J0IHN0YXR1cw0KICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIGlmIChpc3NldCgkX1BPU1RbJ091dHNvdXJjZXJTdGF0dXMnXSkpIHsNCiAgICAgIGVjaG8gJzxmaWVsZHNldCBzdHlsZT0icGFkZGluZy1sZWZ0OiAxNXB4OyI+PGxlZ2VuZD5tZXNzYWdlczwvbGVnZW5kPic7DQogICAgICBzd2l0Y2goJF9QT1NUWydPdXRzb3VyY2VyU3RhdHVzJ10pIHsNCiAgICAgICAgIGNhc2UgJ2Rpc2FibGUnOg0KICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3N0YXR1cycsICdvZmYnKTsNCiAgICAgICAgICAgIGVjaG8gJzxoNCBzdHlsZT0iY29sb3I6ICMxRThBMDA7Ij5hdXRvbWF0aWMgaW1wb3J0IGhhcyBiZWVuIGRpc2FibGVkPC9oND4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICBjYXNlICdlbmFibGUnOg0KICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3N0YXR1cycsICdvbicpOw0KICAgICAgICAgICAgJHRoaXMtPmV4cG9ydCgpOw0KICAgICAgICAgICAgZWNobyAnPGg0IHN0eWxlPSJjb2xvcjogIzFFOEEwMDsiPmF1dG9tYXRpYyBpbXBvcnQgaGFzIGJlZW4gZW5hYmxlZDwvaDQ+JzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICAgICAgZWNobyAnPC9maWVsZHNldD4nOw0KICAgfQ0KDQogICAvLyBzZXQgc2V0dGluZ3MNCiAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICBpZiAoaXNzZXQoJF9QT1NUWydPdXRzb3VyY2VyU2V0dGluZ3MnXSkpIHsNCiAgICAgIGVjaG8gJzxmaWVsZHNldCBzdHlsZT0icGFkZGluZy1sZWZ0OiAxNXB4OyI+PGxlZ2VuZD5tZXNzYWdlczwvbGVnZW5kPic7DQogICAgICAkYXJyRGVzaWducyA9IChhcnJheSlAJF9QT1NUWydPdXRzb3VyY2VyRGVzaWducyddOw0KICAgICAgaWYgKCFlbXB0eSgkYXJyRGVzaWducykpIHsNCiAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZXNpZ25fbmFtZXMnLCBpbXBsb2RlKCd8JywgJGFyckRlc2lnbnMpKTsNCiAgICAgICAgIGVjaG8gJzxwIHN0eWxlPSJjb2xvcjogIzFFOEEwMDsiPjxpPmRlc2lnbnM8L2k+IHRvIGV4cG9ydCBoYXZlIGJlZW4gc2V0PC9wPic7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgIGVjaG8gJzxwIHN0eWxlPSJjb2xvcjogI2NjMDAwMDsiPjxpPmRlc2lnbnM8L2k+IHRvIGV4cG9ydCBtYXkgbm90IGJlIGVtcHR5PC9wPic7DQogICAgICB9DQogICAgICAkYXJyQ29udGVudFByb3BzID0gKGFycmF5KUAkX1BPU1RbJ091dHNvdXJjZXJDb250ZW50UHJvcHMnXTsNCiAgICAgIGlmICghZW1wdHkoJGFyckNvbnRlbnRQcm9wcykpIHsNCiAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb250ZW50X3Byb3BfbmFtZXMnLCBpbXBsb2RlKCd8JywgJGFyckNvbnRlbnRQcm9wcykpOw0KICAgICAgICAgZWNobyAnPHAgc3R5bGU9ImNvbG9yOiAjMUU4QTAwOyI+PGk+Y29udGVudCBwcm9wczwvaT4gdG8gZXhwb3J0IGhhdmUgYmVlbiBzZXQ8L3A+JzsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICAgZWNobyAnPHAgc3R5bGU9ImNvbG9yOiAjY2MwMDAwOyI+PGk+Y29udGVudCBwcm9wczwvaT4gdG8gZXhwb3J0IG1heSBub3QgYmUgZW1wdHk8L3A+JzsNCiAgICAgIH0NCg0KICAgICAgaWYgKGlzc2V0KCRfUE9TVFsnT3V0c291cmNlckRlYnVnJ10pKSB7DQogICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWVzc2FnZXNfZGVidWcnLCAnb24nKTsNCiAgICAgICAgIGVjaG8gJzxwIHN0eWxlPSJjb2xvcjogIzFFOEEwMDsiPjxpPmRlYnVnIG1lc3NhZ2VzPC9pPiBoYXMgYmVlbiBlbmFibGVkPC9wPic7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXNzYWdlc19kZWJ1ZycsICdvZmYnKTsNCiAgICAgICAgIGVjaG8gJzxwIHN0eWxlPSJjb2xvcjogIzFFOEEwMDsiPjxpPmRlYnVnIG1lc3NhZ2VzPC9pPiBoYXMgYmVlbiBkaXNhYmxlZDwvcD4nOw0KICAgICAgfQ0KDQogICAgICBlY2hvICc8L2ZpZWxkc2V0Pic7DQogICB9DQoNCiAgIC8vIHJ1biBtYW51YWwgaW1wb3J0IC8gZXhwb3J0DQogICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgdHJ5IHsNCiAgICAgIGlmIChpc3NldCgkX1BPU1RbJ091dHNvdXJjZXInXSkpIHsNCiAgICAgICAgIGVjaG8gJzxmaWVsZHNldCBzdHlsZT0icGFkZGluZy1sZWZ0OiAxNXB4OyI+PGxlZ2VuZD5tZXNzYWdlczwvbGVnZW5kPic7DQoNCiAgICAgICAgIGlmICgkX1BPU1RbJ091dHNvdXJjZXInXSA9PSAnZXhwb3J0Jykgew0KICAgICAgICAgICAgZWNobyAnPGg0IHN0eWxlPSJjb2xvcjogIzFFOEEwMDsiPnJ1bm5pbmcgbWFudWFsIGV4cG9ydDwvaDQ+JzsNCiAgICAgICAgICAgICRhcnJSZXR1cm4gPSAkdGhpcy0+ZXhwb3J0KCk7DQogICAgICAgICAgICBlY2hvICc8dWwgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogbm9uZTsiPic7DQogICAgICAgICAgICBmb3JlYWNoICgkYXJyUmV0dXJuIGFzICRhcnJNZXNzYWdlKSB7DQogICAgICAgICAgICAgICBzd2l0Y2ggKCRhcnJNZXNzYWdlWyd0eXBlJ10pIHsNCiAgICAgICAgICAgICAgICAgIGNhc2UgT3V0c291cmNlcjo6TUVTU0FHRV9ISU5UOg0KICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIHN0eWxlPSJjb2xvcjogIzFFOEEwMDsiPicgLiAkYXJyTWVzc2FnZVsnbWVzc2FnZSddIC4gJzwvbGk+JzsNCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgY2FzZSBPdXRzb3VyY2VyOjpNRVNTQUdFX1dBUk46DQogICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgc3R5bGU9ImNvbG9yOiAjZWU5OTAwOyI+JyAuICRhcnJNZXNzYWdlWydtZXNzYWdlJ10gLiAnPC9saT4nOw0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICBjYXNlIE91dHNvdXJjZXI6Ok1FU1NBR0VfRVJST1I6DQogICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgc3R5bGU9ImNvbG9yOiAjY2MwMDAwOyI+JyAuICRhcnJNZXNzYWdlWydtZXNzYWdlJ10gLiAnPC9saT4nOw0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICBjYXNlIE91dHNvdXJjZXI6Ok1FU1NBR0VfREVCVUc6DQogICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21lc3NhZ2VzX2RlYnVnJywgJ29mZicpID09ICdvbicpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxsaSBzdHlsZT0iY29sb3I6ICM5RTlFOUU7Ij4nIC4gJGFyck1lc3NhZ2VbJ21lc3NhZ2UnXSAuICc8L2xpPic7DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGk+Jm5ic3A7PC9saT4nOw0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICI8L3VsPiI7DQogICAgICAgICB9DQogICAgICAgICBlbHNlaWYgKCRfUE9TVFsnT3V0c291cmNlciddID09ICdpbXBvcnQnKSB7DQogICAgICAgICAgICBlY2hvICc8aDQgc3R5bGU9ImNvbG9yOiAjMUU4QTAwOyI+cnVubmluZyBtYW51YWwgaW1wb3J0PC9oND4nOw0KICAgICAgICAgICAgJGFyclJldHVybiA9ICR0aGlzLT5pbXBvcnQoKTsNCiAgICAgICAgICAgIGVjaG8gJzx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOiBub25lOyI+JzsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRhcnJSZXR1cm4gYXMgJGFyck1lc3NhZ2UpIHsNCiAgICAgICAgICAgICAgIHN3aXRjaCAoJGFyck1lc3NhZ2VbJ3R5cGUnXSkgew0KICAgICAgICAgICAgICAgICAgY2FzZSBPdXRzb3VyY2VyOjpNRVNTQUdFX0hJTlQ6DQogICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgc3R5bGU9ImNvbG9yOiAjMUU4QTAwOyI+JyAuICRhcnJNZXNzYWdlWydtZXNzYWdlJ10gLiAnPC9saT4nOw0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICBjYXNlIE91dHNvdXJjZXI6Ok1FU1NBR0VfV0FSTjoNCiAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxsaSBzdHlsZT0iY29sb3I6ICNlZTk5MDA7Ij4nIC4gJGFyck1lc3NhZ2VbJ21lc3NhZ2UnXSAuICc8L2xpPic7DQogICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIGNhc2UgT3V0c291cmNlcjo6TUVTU0FHRV9FUlJPUjoNCiAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxsaSBzdHlsZT0iY29sb3I6ICNjYzAwMDA7Ij4nIC4gJGFyck1lc3NhZ2VbJ21lc3NhZ2UnXSAuICc8L2xpPic7DQogICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIGNhc2UgT3V0c291cmNlcjo6TUVTU0FHRV9ERUJVRzoNCiAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWVzc2FnZXNfZGVidWcnLCAnb2ZmJykgPT0gJ29uJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIHN0eWxlPSJjb2xvcjogIzlFOUU5RTsiPicgLiAkYXJyTWVzc2FnZVsnbWVzc2FnZSddIC4gJzwvbGk+JzsNCiAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxsaT4mbmJzcDs8L2xpPic7DQogICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gIjwvdWw+IjsNCiAgICAgICAgIH0NCiAgICAgICAgIGVjaG8gJzwvZmllbGRzZXQ+JzsNCiAgICAgIH0NCiAgIH0NCiAgIGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgIGVjaG8gIjxoMj5FeGNlcHRpb24gZnJvbSBPdXRzb3VyY2VyPC9oMj4iLiRlLT5nZXRNZXNzYWdlKCk7DQogICB9DQoNCi8vIHNob3cgYWRtaW4gcGFnZQ0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmVjaG8gJw0KICAgIDxmaWVsZHNldCBzdHlsZT0icGFkZGluZy1sZWZ0OiAxNXB4OyI+DQogICAgICAgIDxsZWdlbmQ+bW9kdWxlIGhlbHA8L2xlZ2VuZD4nLg0KICAgICAgICAkdGhpcy0+TGFuZygnaGVscCcpLg0KICAgICc8L2ZpZWxkc2V0Pic7DQoNCiRhcnJQb3NzaWJsZUNvbnRlbnRQcm9wZXJ0aWVzID0gJHRoaXMtPmdldEFsbFBvc3NpYmxlQ29udGVudFByb3BlcnRpZXMoKTsNCiRhcnJVc2VkQ29udGVudFByb3BlcnRpZXMgPSBleHBsb2RlKCd8JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbnRlbnRfcHJvcF9uYW1lcycsICdjb250ZW50X2VuJykpOw0KJGFyckxheW91dENvbGxlY3Rpb25zID0gQ21zTGF5b3V0Q29sbGVjdGlvbjo6Z2V0X2FsbCgpOw0KJGFyclBvc3NpYmxlRGVzaWducyA9IGFycmF5KCk7DQpmb3JlYWNoICgkYXJyTGF5b3V0Q29sbGVjdGlvbnMgYXMgJG9iakNtc0xheW91dENvbGxlY3Rpb24pIHsNCiAgICRhcnJQb3NzaWJsZURlc2lnbnNbXSA9ICRvYmpDbXNMYXlvdXRDb2xsZWN0aW9uLT5nZXRfbmFtZSgpOw0KfQ0KJGFyclVzZWREZXNpZ25zID0gZXhwbG9kZSgnfCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNpZ25fbmFtZXMnKSk7DQplY2hvICcNCiAgIDxmaWVsZHNldCBzdHlsZT0icGFkZGluZy1sZWZ0OiAxNXB4OyI+DQogICAgICA8bGVnZW5kPnNldHRpbmdzPC9sZWdlbmQ+DQogICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiPg0KICAgICAgICAgPHA+DQogICAgICAgICAgICBEZXNpZ25zIHRvIGJlIGV4cG9ydGVkOjxiciAvPg0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJPdXRzb3VyY2VyRGVzaWduc1tdIiBzaXplPSIzIiBtdWx0aXBsZSByZXF1aXJlZD4NCiAgICAgICAgICAgICc7DQogICAgICAgICAgICBmb3JlYWNoKCRhcnJQb3NzaWJsZURlc2lnbnMgYXMgJHN0ckRlc2lnbk5hbWUpIHsNCiAgICAgICAgICAgICAgICBlY2hvICc8b3B0aW9uIHZhbHVlPSInLiRzdHJEZXNpZ25OYW1lLiciJy4oaW5fYXJyYXkoJHN0ckRlc2lnbk5hbWUsICRhcnJVc2VkRGVzaWducyk/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpLic+Jy4kc3RyRGVzaWduTmFtZS4nPC9vcHRpb24+Jy5QSFBfRU9MOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnDQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgIDwvcD4NCg0KICAgICAgICAgPHA+DQogICAgICAgICAgICBDb250ZW50UHJvcHMgdG8gYmUgZXhwb3J0ZWQ6PGJyIC8+DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9Ik91dHNvdXJjZXJDb250ZW50UHJvcHNbXSIgc2l6ZT0iNyIgbXVsdGlwbGUgcmVxdWlyZWQ+DQogICAgICAgICAgICAnOw0KICAgICAgICAgICAgZm9yZWFjaCgkYXJyUG9zc2libGVDb250ZW50UHJvcGVydGllcyBhcyAkc3RyUHJvcE5hbWUpIHsNCiAgICAgICAgICAgICAgICBlY2hvICc8b3B0aW9uIHZhbHVlPSInLiRzdHJQcm9wTmFtZS4nIicuKGluX2FycmF5KCRzdHJQcm9wTmFtZSwgJGFyclVzZWRDb250ZW50UHJvcGVydGllcyk/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic6JycpLic+Jy4kc3RyUHJvcE5hbWUuJzwvb3B0aW9uPicuUEhQX0VPTDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJw0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICA8L3A+DQoNCiAgICAgICAgIDxwPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJPdXRzb3VyY2VyRGVidWciJy4oJHRoaXMtPkdldFByZWZlcmVuY2UoJ21lc3NhZ2VzX2RlYnVnJywgJ29mZicpID09ICdvbic/JyBjaGVja2VkPSJjaGVja2VkIic6JycpLic+IHNob3cgZGVidWcgbWVzc2FnZXMNCiAgICAgICAgIDwvcD4NCg0KICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iT3V0c291cmNlclNldHRpbmdzIiB2YWx1ZT0ic2F2ZSI+DQogICAgICA8L2Zvcm0+DQogICA8L2ZpZWxkc2V0Pg0KJzsNCg0KDQplY2hvICc8ZmllbGRzZXQgc3R5bGU9InBhZGRpbmctbGVmdDogMTVweDsiPjxsZWdlbmQ+YXV0b21hdGljIGltcG9ydDwvbGVnZW5kPic7DQppZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N0YXR1cycsICdvZmYnKSA9PSAnb24nKSB7DQogICBlY2hvICcNCiAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICBhdXRvbWF0aWMgaW1wb3J0IDxiPmlzIGVuYWJsZWQ8L2I+ICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJPdXRzb3VyY2VyU3RhdHVzIiB2YWx1ZT0iZGlzYWJsZSI+DQogICAgICA8L2Zvcm0+DQogICAnOw0KfQ0KZWxzZSB7DQogICBlY2hvICcNCiAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICBhdXRvbWF0aWMgaW1wb3J0OiA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJPdXRzb3VyY2VyU3RhdHVzIiB2YWx1ZT0iZW5hYmxlIj48YnIgLz4NCiAgICAgICAgIChhbiBpbml0aWFsIGV4cG9ydCB3aWxsIGJlIGRvbmUpDQogICAgICA8L2Zvcm0+DQogICAnOw0KfQ0KZWNobyAnPC9maWVsZHNldD4nOw0KDQoNCmVjaG8gJw0KICAgPGZpZWxkc2V0IHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDE1cHg7Ij4NCiAgICAgIDxsZWdlbmQ+bWFudWFsIGV4cG9ydC9pbXBvcnQ8L2xlZ2VuZD4NCiAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIHZhbHVlPSJleHBvcnQiIG5hbWU9Ik91dHNvdXJjZXIiIGNoZWNrZWQ9ImNoZWNrZWQiLz5tYW51YWwgZXhwb3J0PGJyLz4NCiAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgdmFsdWU9ImltcG9ydCIgbmFtZT0iT3V0c291cmNlciIvPm1hbnVhbCBpbXBvcnQ8YnIvPg0KICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9InJ1biI+DQogICAgICA8L2Zvcm0+DQogICA8L2ZpZWxkc2V0Pg0KJzsNCg0KPz4=]]></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[PD9waHANCg0KJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBkZW5pZWQhJzsNCiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnTW9kdWxlIHRvIGV4cG9ydCBhbmQgaW1wb3J0IGNvbnRlbnQsIHVzZXJwbHVnaW5zLCBkZXNpZ24gYW5kIGNzcyB0ZW1wbGF0ZXMnOw0KDQokbGFuZ1snaGVscCddID0gJw0KICAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBwb3NzaWJpbGl0eSB0byBleHBvcnQgYW5kIHJlLWltcG9ydC48YnIvPg0KICAgIFNvIHlvdSBjYW4gZWRpdCB0aGVtIHdpdGggYSBlZGl0b3Igb2YgeW91ciBjaG9pY2Ugb3V0c2lkZSB0aGUgQ01TPGJyIC8+DQogICAgQW5kIHRoaXMgaXMgdGhlIHNjb3BlOjxiciAvPg0KICAgICZuYnNwOyZuYnNwOyZuYnNwOy0gcGFnZSBjb250ZW50IChpbmNsLiBpbmRpdmlkdWFsIHByb3BlcnRpZXMpPGJyLz4NCiAgICAmbmJzcDsmbmJzcDsmbmJzcDstIGRlc2lnbnMgIG9mIENNUyAodGVtcGxhdGVzIGFuZCBjc3MpPGJyLz4NCiAgICAmbmJzcDsmbmJzcDsmbmJzcDstIHVzZXIgcGx1Z2luczxici8+DQogICAgPGJyLz4NCiAgICBUaGVyZSBhcmUgdHdvIG1vZGVzOjxici8+DQogICAgPGJyLz4NCiAgICA8Yj4xKSBtYW51YWwgZXhwb3J0L2ltcG9ydDwvYj48YnIgLz4NCiAgICBpbXBvcnQgYW5kIGV4cG9ydCBpcyB0cmlnZ2VyZWQgYnkgYnV0dG9uPGJyLz4NCiAgICA8YnIvPg0KICAgIDxiPjIpIGF1dG9tYXRpYyBpbXBvcnQ8L2I+PGJyIC8+DQogICAgYWxsb3dzIHlvdSB0byBsb2FkIG1vZGlmaWVkIGZpbGVzIGZyb20gdG1wLWRpciBvbiBldmVyeSByZXF1ZXN0LjxiciAvPg0KJzsNCg0KJGxhbmdbJ2NoYW5nZWxvZyddID0gJw0KICAgIDxwPg0KICAgICAgICA8Yj5WZXJzaW9uIDEuMCAtIE5vdiAyMDE1PC9iPjxiciAvPg0KICAgICAgICBJbml0aWFsIFZlcnNpb24NCiAgICA8L3A+DQogICAgPHA+DQogICAgICAgIDxiPlZlcnNpb24gMS4xIC0gRGV6IDIwMTU8L2I+PGJyIC8+DQogICAgICAgIC0gZml4ZWQgYnVnIG9uIGxvc2luZyBkZXNpZ24gYXNzaWdubWVudDxiciAvPg0KICAgICAgICAtIGNoYW5nZWQgZXhwb3J0IHN0cnVjdHVyZTxiciAvPg0KICAgICAgICAtIGFkZGVkIGZlYXR1cmUgdG8gZGVmaW5lIDxpPmNvbnRlbnQgcHJvcHM8L2k+IGFuZCA8aT5kZXNpZ25zPC9pPiB0byBiZSBleHBvcnRlZA0KICAgIDwvcD4NCic7]]></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>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KICAgc3dpdGNoKCRvbGR2ZXJzaW9uKSB7DQogICAgICBjYXNlICIxLjAiOg0KICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3N0YXR1cycsICdvZmYnKTsNCiAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZXNpZ25fbmFtZXMnLCAnJyk7DQogICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWVzc2FnZXNfZGVidWcnLCAnb24nKTsNCiAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb250ZW50X3Byb3BfbmFtZXMnLCAnY29udGVudF9lbicpOw0KICAgfQ0KDQogICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cNCiAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkdldEZyaWVuZGx5TmFtZSgpLCAkdGhpcy0+TGFuZygndXBncmFkZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IE91dHNvdXJjZXIKdmVyc2lvbiA9IDEuMQpkZXNjcmlwdGlvbiA9IAphdXRob3IgPSBPbGl2ZXIgSm9vJnN6bGlnOwphdXRob3JlbWFpbCA9IAptaW5jbXN2ZXJzaW9uID0gMi4wCjEx]]></data>
	</file>
	<file>
	  <filename>/Outsourcer.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIE91dHNvdXJjZXIgZXh0ZW5kcyBDTVNNb2R1bGUgewoKICAgY29uc3QgTUVTU0FHRV9ISU5UICA9ICdoaW50JzsKICAgY29uc3QgTUVTU0FHRV9XQVJOICA9ICd3YXJuJzsKICAgY29uc3QgTUVTU0FHRV9FUlJPUiA9ICdlcnJvcic7CiAgIGNvbnN0IE1FU1NBR0VfREVCVUcgPSAnZGVidWcnOwoKICAgcHJpdmF0ZSAkc3RyVG1wRGlyID0gbnVsbDsKICAgcHJpdmF0ZSAkc3RyVG1wRGlyX0Rlc2lnbnMgPSBudWxsOwogICBwcml2YXRlICRzdHJUbXBEaXJfQ29udGVudCA9IG51bGw7CiAgIHByaXZhdGUgJHN0clRtcERpcl9Vc2VycGx1Z2lucyA9IG51bGw7CgogICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsKICAgICAgcmV0dXJuICdPdXRzb3VyY2VyJzsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsKICAgICAgcmV0dXJuICdPdXRzb3VyY2VyJzsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7CiAgICAgIHJldHVybiAnMS4xJzsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSB7CiAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgewogICAgICByZXR1cm4gJ09saXZlciBKb28mc3psaWc7JzsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgewogICAgICByZXR1cm4gJyc7CiAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7CiAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7CiAgICAgIHJldHVybiB0cnVlOwogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgewogICAgICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigiT3V0c291cmNlciIpOwogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgewogICAgICByZXR1cm4gJ2xheW91dCc7CiAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgewogICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2FkbWluZGVzY3JpcHRpb24nKTsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgewogICAgICByZXR1cm4gIjIuMCI7CiAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKSB7CiAgICAgIHJldHVybiBhcnJheSgpOwogICB9CgogICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkgewogICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CiAgIH0KCiAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7CiAgICAgICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsKICAgfQoKICAgLyoqCiAgICAqIEByZXR1cm4gT3V0c291cmNlcgogICAgKi8KICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgewoKICAgICAgJHRoaXMtPnN0clRtcERpciA9IENNU19ST09UX1BBVEggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3RtcCcgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ091dHNvdXJjZXInOwogICAgICAkdGhpcy0+Y2hlY2tEaXJlY3RvcnkoJHRoaXMtPnN0clRtcERpcik7CgogICAgICAkdGhpcy0+c3RyVG1wRGlyX0Rlc2lnbnMgPSAkdGhpcy0+c3RyVG1wRGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdkZXNpZ25zJzsKICAgICAgJHRoaXMtPmNoZWNrRGlyZWN0b3J5KCR0aGlzLT5zdHJUbXBEaXJfRGVzaWducyk7CgogICAgICAkdGhpcy0+c3RyVG1wRGlyX0NvbnRlbnQgPSAkdGhpcy0+c3RyVG1wRGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjb250ZW50JzsKICAgICAgJHRoaXMtPmNoZWNrRGlyZWN0b3J5KCR0aGlzLT5zdHJUbXBEaXJfQ29udGVudCk7CgogICAgICAkdGhpcy0+c3RyVG1wRGlyX1VzZXJwbHVnaW5zID0gJHRoaXMtPnN0clRtcERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndXNlcnBsdWdpbnMnOwogICAgICAkdGhpcy0+Y2hlY2tEaXJlY3RvcnkoJHRoaXMtPnN0clRtcERpcl9Vc2VycGx1Z2lucyk7CgogICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CgogICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N0YXR1cycsICdvZmYnKSA9PSAnb24nKSB7CiAgICAgICAgICR0aGlzLT5pbXBvcnQoKTsKICAgICAgfQogICB9CgogICAvKioKICAgICogQHJldHVybiBhcnJheSBvZiBtZXNzYWdlcwogICAgKi8KICAgcHVibGljIGZ1bmN0aW9uIGV4cG9ydCgpIHsKCiAgICAgICRhcnJSZXR1cm4gPSBhcnJheSgpOwoKICAgICAgJGFyclJldHVybiA9IGFycmF5X21lcmdlKCRhcnJSZXR1cm4sICR0aGlzLT5leHBvcnREZXNpZ25zKCkpOwoKICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+ICdocicpOwoKICAgICAgJGFyclJldHVybiA9IGFycmF5X21lcmdlKCRhcnJSZXR1cm4sICR0aGlzLT5leHBvcnRDb250ZW50KCkpOwoKICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+ICdocicpOwoKICAgICAgJGFyclJldHVybiA9IGFycmF5X21lcmdlKCRhcnJSZXR1cm4sICR0aGlzLT5leHBvcnRVc2VycGx1Z2lucygpKTsKCiAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiAnaHInKTsKCiAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdsYXN0X3J1bicsIHRpbWUoKSk7CiAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0hJTlQsICdtZXNzYWdlJyA9PiAnbGFzdCBydW4gaXMgc2V0IHRvOiAnIC4gZGF0ZSgiWS1tLWQgSDppOnMiKSk7CgogICAgICByZXR1cm4gJGFyclJldHVybjsKICAgfQoKICAgLyoqCiAgICAqIEByZXR1cm4gYXJyYXkgb2YgbWVzc2FnZXMKICAgICovCiAgIHB1YmxpYyBmdW5jdGlvbiBpbXBvcnQoKSB7CgogICAgICAkYXJyUmV0dXJuID0gYXJyYXkoKTsKCiAgICAgICRhcnJSZXR1cm4gPSBhcnJheV9tZXJnZSgkYXJyUmV0dXJuLCAgJHRoaXMtPmltcG9ydERlc2lnbnMoKSk7CgogICAgICAkYXJyUmV0dXJuW10gPSBhcnJheSgndHlwZScgPT4gJ2hyJyk7CgogICAgICAkYXJyUmV0dXJuID0gYXJyYXlfbWVyZ2UoJGFyclJldHVybiwgJHRoaXMtPmltcG9ydENvbnRlbnQoKSk7CgogICAgICAkYXJyUmV0dXJuW10gPSBhcnJheSgndHlwZScgPT4gJ2hyJyk7CgogICAgICAkYXJyUmV0dXJuID0gYXJyYXlfbWVyZ2UoJGFyclJldHVybiwgJHRoaXMtPmltcG9ydFVzZXJwbHVnaW5zKCkpOwoKICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+ICdocicpOwoKICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xhc3RfcnVuJywgdGltZSgpKTsKICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfSElOVCwgJ21lc3NhZ2UnID0+ICdsYXN0IHJ1biBpcyBzZXQgdG86ICcgLiBkYXRlKCJZLW0tZCBIOmk6cyIpKTsKCiAgICAgIHJldHVybiAkYXJyUmV0dXJuOwogICB9CgogICAvKioKICAgICogdGhlcmUgaXMgbm8gZnVuY3Rpb24gdG8gZ2V0IGFsbCBwb3NzaWJseSBwcm9wX25hbWVzIG9mIGFsbCBDb250ZW50VHlwZXMsIHNvIGRvIFNRTAogICAgKgogICAgKiBAcmV0dXJuIEFycmF5IG9mIHByb3BfbmFtZQogICAgKi8KICAgcHVibGljIGZ1bmN0aW9uIGdldEFsbFBvc3NpYmxlQ29udGVudFByb3BlcnRpZXMoKSB7CiAgICAgICRhcnJSZXR1cm4gPSBhcnJheSgpOwogICAgICAkb2JqQ01TID0gY21zbXMoKTsKICAgICAgJG9iakFET0Nvbm5lY3Rpb24gPSAkb2JqQ01TLT5HZXREYigpOwogICAgICAkcXVlcnkgPSAiU0VMRUNUIHByb3BfbmFtZSBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudF9wcm9wcyBHUk9VUCBCWSAgcHJvcF9uYW1lIE9SREVSIEJZICBwcm9wX25hbWUiOwogICAgICAkZGJyZXN1bHQgPSAkb2JqQURPQ29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICBpZiAoJGRicmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdEQi1FUlJPUiAoJyAuIGJhc2VuYW1lKF9fRklMRV9fKSAuICc6JyAuIF9fTElORV9fIC4gJyk6ICcgLiAkb2JqQURPQ29ubmVjdGlvbi0+RXJyb3JNc2coKSAuICc8YnIgLz5RdWVyeTogJyAuICRxdWVyeSk7CiAgICAgIH0KICAgICAgd2hpbGUgKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAgJGFyclJldHVybltdID0gJHJvd1sncHJvcF9uYW1lJ107CiAgICAgIH0KICAgICAgcmV0dXJuICRhcnJSZXR1cm47CiAgIH0KCiAgIC8qKgogICAgKiBjaGVjayBhbmQgY3JlYXRlIGRpcgogICAgKiBAcGFyYW0gJHN0ckRpcgogICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgKi8KICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0RpcmVjdG9yeSgkc3RyRGlyKSB7CiAgICAgICRzdHJEaXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRzdHJEaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SKTsKICAgICAgaWYgKCFmaWxlX2V4aXN0cygkc3RyRGlyKSkgewogICAgICAgICBpZiAoIW1rZGlyKCRzdHJEaXIsIDA3NzcsIHRydWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0RJUi1FUlJPUjogY2FuIG5vdCBtYWtlIGRpcjogJyAuICRzdHJEaXIpOwogICAgICAgICB9CiAgICAgIH0KICAgfQoKICAgLyoqCiAgICAqIHJlbW92ZSB1bndhbnRlZCBjaGFyCiAgICAqIEBwYXJhbSAkc3RyTmFtZQogICAgKiBAcmV0dXJuIHN0cmluZwogICAgKi8KICAgcHJpdmF0ZSBmdW5jdGlvbiBuYW1lVG9EaXJuYW1lKCRzdHJOYW1lKSB7CiAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoJ35bXmEtekEtWjAtOV9dficsICcnLCAkc3RyTmFtZSk7CiAgIH0KCiAgIHByaXZhdGUgZnVuY3Rpb24gZXhwb3J0RGVzaWducygpIHsKCiAgICAgICRhcnJSZXR1cm4gPSBhcnJheSgpOwogICAgICAkYXJyVXNlZERlc2lnbnMgPSBleHBsb2RlKCd8Jywgc3RydG9sb3dlcigkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzaWduX25hbWVzJykpKTsKCiAgICAgICRhcnJMYXlvdXRDb2xsZWN0aW9ucyA9IENtc0xheW91dENvbGxlY3Rpb246OmdldF9hbGwoKTsKICAgICAgZm9yZWFjaCAoJGFyckxheW91dENvbGxlY3Rpb25zIGFzICRvYmpDbXNMYXlvdXRDb2xsZWN0aW9uKSB7CgogICAgICAgICAkaW50RGVzaWduSWQgPSAkb2JqQ21zTGF5b3V0Q29sbGVjdGlvbi0+Z2V0X2lkKCk7CiAgICAgICAgICRzdHJEZXNpZ25OYW1lID0gJG9iakNtc0xheW91dENvbGxlY3Rpb24tPmdldF9uYW1lKCk7CgogICAgICAgICAvL2NoZWNrIGlmIGRlc2lnbiBpcyBpbnRlcmVzdGluZwogICAgICAgICBpZiAoIWluX2FycmF5KHN0cnRvbG93ZXIoJHN0ckRlc2lnbk5hbWUpLCAkYXJyVXNlZERlc2lnbnMpKSB7CiAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0RFQlVHLCAnbWVzc2FnZScgPT4gJ3NraXBwaW5nIGRlc2lnbjogJyAuICRzdHJEZXNpZ25OYW1lKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KCiAgICAgICAgIC8vY2hlY2sgZGlyCiAgICAgICAgICRzdHJEZXNpZ25FeHBvcnREaXIgPSAkdGhpcy0+c3RyVG1wRGlyX0Rlc2lnbnMgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGludERlc2lnbklkIC4gJyMnIC4gJHRoaXMtPm5hbWVUb0Rpcm5hbWUoJHN0ckRlc2lnbk5hbWUpOwogICAgICAgICAkdGhpcy0+Y2hlY2tEaXJlY3RvcnkoJHN0ckRlc2lnbkV4cG9ydERpcik7CgogICAgICAgICAkYXJyVGVtcGxhdGVzID0gJG9iakNtc0xheW91dENvbGxlY3Rpb24tPmdldF90ZW1wbGF0ZXMoKTsKICAgICAgICAgJHN0clRlbXBsYXRlRXhwb3J0RGlyID0gJHN0ckRlc2lnbkV4cG9ydERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndGVtcGxhdGVzJzsKICAgICAgICAgJHRoaXMtPmNoZWNrRGlyZWN0b3J5KCRzdHJUZW1wbGF0ZUV4cG9ydERpcik7CiAgICAgICAgIGZvcmVhY2ggKCRhcnJUZW1wbGF0ZXMgYXMgJGludFRlbXBsYXRlSWQpIHsKICAgICAgICAgICAgJG9iakNtc0xheW91dFRlbXBsYXRlID0gQ21zTGF5b3V0VGVtcGxhdGU6OmxvYWQoJGludFRlbXBsYXRlSWQpOwogICAgICAgICAgICAkaW50SWQgPSAkb2JqQ21zTGF5b3V0VGVtcGxhdGUtPmdldF9pZCgpOwogICAgICAgICAgICAkc3RyTmFtZSA9ICRvYmpDbXNMYXlvdXRUZW1wbGF0ZS0+Z2V0X25hbWUoKTsKICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSAkb2JqQ21zTGF5b3V0VGVtcGxhdGUtPmdldF9jb250ZW50KCk7CiAgICAgICAgICAgICRzdHJUZW1wRmlsZSA9ICRzdHJUZW1wbGF0ZUV4cG9ydERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaW50SWQgLiAnIycgLiAkdGhpcy0+bmFtZVRvRGlybmFtZSgkc3RyTmFtZSkgLiAnLnRwbCc7CiAgICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkc3RyVGVtcEZpbGUsICRzdHJDb250ZW50KSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfRVJST1IsICdtZXNzYWdlJyA9PiAnY2FuIG5vdCB3cml0ZSB0ZW1wbGF0ZTogJyAuICRzdHJUZW1wRmlsZSk7CiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0hJTlQsICdtZXNzYWdlJyA9PiAnRGVzaWduIC0gZXhwb3J0IGRvbmU6ICcgLiAkc3RyRGVzaWduTmFtZSAuICcgfCAnIC4gJHN0ck5hbWUgLiAnIHwgJyAuIGJhc2VuYW1lKCRzdHJUZW1wRmlsZSkpOwogICAgICAgICB9CgogICAgICAgICAkYXJyU3R5bHNoZWV0cyA9ICRvYmpDbXNMYXlvdXRDb2xsZWN0aW9uLT5nZXRfc3R5bGVzaGVldHMoKTsKICAgICAgICAgJHN0clN0eWxlc2hlZXRFeHBvcnREaXIgPSAkc3RyRGVzaWduRXhwb3J0RGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdzdHlsZXNoZWV0cyc7CiAgICAgICAgICR0aGlzLT5jaGVja0RpcmVjdG9yeSgkc3RyVGVtcGxhdGVFeHBvcnREaXIpOwogICAgICAgICBmb3JlYWNoICgkYXJyU3R5bHNoZWV0cyBhcyAkaW50U3R5bGVzaGVldElkKSB7CiAgICAgICAgICAgICRvYmpDbXNMYXlvdXRTdHlsZXNoZWV0ID0gQ21zTGF5b3V0U3R5bGVzaGVldDo6bG9hZCgkaW50U3R5bGVzaGVldElkKTsKICAgICAgICAgICAgJGludElkID0gJG9iakNtc0xheW91dFN0eWxlc2hlZXQtPmdldF9pZCgpOwogICAgICAgICAgICAkc3RyTmFtZSA9ICRvYmpDbXNMYXlvdXRTdHlsZXNoZWV0LT5nZXRfbmFtZSgpOwogICAgICAgICAgICAkc3RyQ29udGVudCA9ICRvYmpDbXNMYXlvdXRTdHlsZXNoZWV0LT5nZXRfY29udGVudCgpOwogICAgICAgICAgICAkc3RyVGVtcEZpbGUgPSAkc3RyU3R5bGVzaGVldEV4cG9ydERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaW50SWQgLiAnIycgLiAkdGhpcy0+bmFtZVRvRGlybmFtZSgkc3RyTmFtZSkgLiAnLmNzcyc7CiAgICAgICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkc3RyVGVtcEZpbGUsICRzdHJDb250ZW50KSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfRVJST1IsICdtZXNzYWdlJyA9PiAnY2FuIG5vdCB3cml0ZSBzdHlsZXNoZWV0OiAnIC4gJHN0clRlbXBGaWxlKTsKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfSElOVCwgJ21lc3NhZ2UnID0+ICdEZXNpZ24gLSBleHBvcnQgZG9uZTogJyAuICRzdHJEZXNpZ25OYW1lIC4gJyB8ICcgLiAkc3RyTmFtZSAuICcgfCAnIC4gYmFzZW5hbWUoJHN0clRlbXBGaWxlKSk7CiAgICAgICAgIH0KCiAgICAgIH0KCiAgICAgIHJldHVybiAkYXJyUmV0dXJuOwogICB9CgogICBwcml2YXRlIGZ1bmN0aW9uIGV4cG9ydENvbnRlbnQoKSB7CgogICAgICAkYXJyUmV0dXJuID0gYXJyYXkoKTsKCiAgICAgICRhcnJVc2VkQ29udGVudFByb3BlcnRpZXMgPSBleHBsb2RlKCd8Jywgc3RydG9sb3dlcigkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29udGVudF9wcm9wX25hbWVzJywgJ2NvbnRlbnRfZW4nKSkpOwoKICAgICAgJG9iakNNUyA9IGNtc21zKCk7CiAgICAgICRvYmpBRE9Db25uZWN0aW9uID0gJG9iakNNUy0+R2V0RGIoKTsKCiAgICAgICRxdWVyeSA9ICJTRUxFQ1QgY3AuY29udGVudF9pZCwgYy5jb250ZW50X25hbWUsIGNwLnByb3BfbmFtZSwgY3AuY29udGVudCwgY3AubW9kaWZpZWRfZGF0ZQogICAgICAgICAgICBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudF9wcm9wcyBjcAogICAgICAgICAgICBKT0lOICIgLiBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudCBjIE9OIChjcC5jb250ZW50X2lkID0gYy5jb250ZW50X2lkKSI7CiAgICAgICRkYnJlc3VsdCA9ICRvYmpBRE9Db25uZWN0aW9uLT5FeGVjdXRlKCRxdWVyeSk7CiAgICAgIGlmICgkZGJyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0RCLUVSUk9SICgnIC4gYmFzZW5hbWUoX19GSUxFX18pIC4gJzonIC4gX19MSU5FX18gLiAnKTogJyAuICRvYmpBRE9Db25uZWN0aW9uLT5FcnJvck1zZygpIC4gJzxiciAvPlF1ZXJ5OiAnIC4gJHF1ZXJ5KTsKICAgICAgfQogICAgICB3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgewogICAgICAgICAvL2NoZWNrIG9mIHByb3BlcnR5IGlzIGludGVyZXN0aW5nCiAgICAgICAgIGlmICghaW5fYXJyYXkoc3RydG9sb3dlcigkcm93Wydwcm9wX25hbWUnXSksICRhcnJVc2VkQ29udGVudFByb3BlcnRpZXMpKSB7CiAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0RFQlVHLCAnbWVzc2FnZScgPT4gJ3NraXBwaW5nIGNvbnRlbnQgcHJvcGVydHk6ICcgLiAkcm93Wydwcm9wX25hbWUnXSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CgogICAgICAgICAkc3RyQ29udGVudE5hbWUgPSAkdGhpcy0+bmFtZVRvRGlybmFtZSgkcm93Wydjb250ZW50X25hbWUnXSk7CiAgICAgICAgICRzdHJUZW1wRmlsZSA9ICR0aGlzLT5zdHJUbXBEaXJfQ29udGVudCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkcm93Wydjb250ZW50X2lkJ10gLiAnIycgLiAkc3RyQ29udGVudE5hbWUgLiAnIycgLiAkcm93Wydwcm9wX25hbWUnXSAuICcudHBsJzsKICAgICAgICAgaWYgKGZpbGVfcHV0X2NvbnRlbnRzKCRzdHJUZW1wRmlsZSwgJHJvd1snY29udGVudCddKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfRVJST1IsICdtZXNzYWdlJyA9PiAnY2FuIG5vdCB3cml0ZSBjb250ZW50ZmlsZTogJyAuICRzdHJUZW1wRmlsZSk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0hJTlQsICdtZXNzYWdlJyA9PiAnQ29udGVudCAtIGV4cG9ydCBkb25lOiAnIC4gJHJvd1snY29udGVudF9pZCddIC4gJyB8ICcgLiAkcm93Wydjb250ZW50X25hbWUnXSAuICcgfCAnIC4gJHJvd1sncHJvcF9uYW1lJ10gLiAgJyB8ICcgLiBiYXNlbmFtZSgkc3RyVGVtcEZpbGUpKTsKICAgICAgfQoKICAgICAgcmV0dXJuICRhcnJSZXR1cm47CiAgIH0KCiAgIHByaXZhdGUgZnVuY3Rpb24gZXhwb3J0VXNlcnBsdWdpbnMoKSB7CgogICAgICAkYXJyUmV0dXJuID0gYXJyYXkoKTsKCiAgICAgICRvYmpDTVMgPSBjbXNtcygpOwogICAgICAkb2JqQURPQ29ubmVjdGlvbiA9ICRvYmpDTVMtPkdldERiKCk7CgogICAgICAkcXVlcnkgPSAiU0VMRUNUIHVzZXJwbHVnaW5faWQsIHVzZXJwbHVnaW5fbmFtZSwgY29kZSwgbW9kaWZpZWRfZGF0ZSBGUk9NICIgLiBjbXNfZGJfcHJlZml4KCkgLiAidXNlcnBsdWdpbnMiOwogICAgICAkZGJyZXN1bHQgPSAkb2JqQURPQ29ubmVjdGlvbi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICBpZiAoJGRicmVzdWx0ID09PSBmYWxzZSkgewogICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdEQi1FUlJPUiAoJyAuIGJhc2VuYW1lKF9fRklMRV9fKSAuICc6JyAuIF9fTElORV9fIC4gJyk6ICcgLiAkb2JqQURPQ29ubmVjdGlvbi0+RXJyb3JNc2coKSAuICc8YnIgLz5RdWVyeTogJyAuICRxdWVyeSk7CiAgICAgIH0KICAgICAgd2hpbGUgKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAgJHN0clRlbXBGaWxlID0gJHRoaXMtPnN0clRtcERpcl9Vc2VycGx1Z2lucyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkcm93Wyd1c2VycGx1Z2luX2lkJ10gLiAnIycgLiAkcm93Wyd1c2VycGx1Z2luX25hbWUnXSAuICcucGhwJzsKICAgICAgICAgaWYgKGZpbGVfcHV0X2NvbnRlbnRzKCRzdHJUZW1wRmlsZSwgJHJvd1snY29kZSddKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfRVJST1IsICdtZXNzYWdlJyA9PiAnY2FuIG5vdCB3cml0ZSB1c2VycGx1Z2luOiAnIC4gJHN0clRlbXBGaWxlKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfSElOVCwgJ21lc3NhZ2UnID0+ICdVc2VycGx1Z2luIC0gZXhwb3J0IGRvbmU6ICcgLiAkcm93Wyd1c2VycGx1Z2luX25hbWUnXSAuICAnIHwgJyAuIGJhc2VuYW1lKCRzdHJUZW1wRmlsZSkpOwogICAgICB9CgogICAgICByZXR1cm4gJGFyclJldHVybjsKICAgfQoKICAgcHJpdmF0ZSBmdW5jdGlvbiBpbXBvcnREZXNpZ25zKCkgewoKICAgICAgJGFyclJldHVybiA9IGFycmF5KCk7CiAgICAgICR0c0xhc3RSdW4gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbGFzdF9ydW4nLCB0aW1lKCkpOwogICAgICAkYXJyVXNlZERlc2lnbnMgPSBleHBsb2RlKCd8Jywgc3RydG9sb3dlcigkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzaWduX25hbWVzJykpKTsKCiAgICAgICRhcnJMYXlvdXRDb2xsZWN0aW9ucyA9IENtc0xheW91dENvbGxlY3Rpb246OmdldF9hbGwoKTsKICAgICAgZm9yZWFjaCAoJGFyckxheW91dENvbGxlY3Rpb25zIGFzICRvYmpDbXNMYXlvdXRDb2xsZWN0aW9uKSB7CgogICAgICAgICAkaW50RGVzaWduSWQgPSAkb2JqQ21zTGF5b3V0Q29sbGVjdGlvbi0+Z2V0X2lkKCk7CiAgICAgICAgICRzdHJEZXNpZ25OYW1lID0gJG9iakNtc0xheW91dENvbGxlY3Rpb24tPmdldF9uYW1lKCk7CgogICAgICAgICAvL2NoZWNrIGlmIGRlc2lnbiBpcyBpbnRlcmVzdGluZwogICAgICAgICBpZiAoIWluX2FycmF5KHN0cnRvbG93ZXIoJHN0ckRlc2lnbk5hbWUpLCAkYXJyVXNlZERlc2lnbnMpKSB7CiAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0RFQlVHLCAnbWVzc2FnZScgPT4gJ3NraXBwaW5nIGRlc2lnbjogJyAuICRzdHJEZXNpZ25OYW1lKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KCiAgICAgICAgIC8vY2hlY2sgZGlyCiAgICAgICAgICRzdHJEZXNpZ25FeHBvcnREaXIgPSAkdGhpcy0+c3RyVG1wRGlyX0Rlc2lnbnMgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGludERlc2lnbklkIC4gJyMnIC4gJHRoaXMtPm5hbWVUb0Rpcm5hbWUoJHN0ckRlc2lnbk5hbWUpOwogICAgICAgICAkdGhpcy0+Y2hlY2tEaXJlY3RvcnkoJHN0ckRlc2lnbkV4cG9ydERpcik7CgogICAgICAgICAkYXJyVGVtcGxhdGVzID0gJG9iakNtc0xheW91dENvbGxlY3Rpb24tPmdldF90ZW1wbGF0ZXMoKTsKICAgICAgICAgJHN0clRlbXBsYXRlRXhwb3J0RGlyID0gJHN0ckRlc2lnbkV4cG9ydERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndGVtcGxhdGVzJzsKICAgICAgICAgJHRoaXMtPmNoZWNrRGlyZWN0b3J5KCRzdHJUZW1wbGF0ZUV4cG9ydERpcik7CiAgICAgICAgIGZvcmVhY2ggKCRhcnJUZW1wbGF0ZXMgYXMgJGludFRlbXBsYXRlSWQpIHsKICAgICAgICAgICAgJG9iakNtc0xheW91dFRlbXBsYXRlID0gQ21zTGF5b3V0VGVtcGxhdGU6OmxvYWQoJGludFRlbXBsYXRlSWQpOwogICAgICAgICAgICAkaW50SWQgPSAkb2JqQ21zTGF5b3V0VGVtcGxhdGUtPmdldF9pZCgpOwogICAgICAgICAgICAkc3RyTmFtZSA9ICRvYmpDbXNMYXlvdXRUZW1wbGF0ZS0+Z2V0X25hbWUoKTsKCiAgICAgICAgICAgICRzdHJUZW1wRmlsZSA9ICRzdHJUZW1wbGF0ZUV4cG9ydERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkaW50SWQgLiAnIycgLiAkdGhpcy0+bmFtZVRvRGlybmFtZSgkc3RyTmFtZSkgLiAnLnRwbCc7CiAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJHN0clRlbXBGaWxlKSkgewogICAgICAgICAgICAgICAkYXJyUmV0dXJuW10gPSBhcnJheSgndHlwZScgPT4gc2VsZjo6TUVTU0FHRV9XQVJOLCAnbWVzc2FnZScgPT4gJ25vIGV4cG9ydCBmb3VuZCBmb3IgdGVtcGxhdGU6ICcgLiAkaW50SWQuJyAtICcuJHN0ck5hbWUgLiAnIG9uICcgLiAkc3RyVGVtcEZpbGUgKTsKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChmaWxlbXRpbWUoJHN0clRlbXBGaWxlKSA8PSAkdHNMYXN0UnVuKSB7CiAgICAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0RFQlVHLCAnbWVzc2FnZScgPT4gJ2ZpbGUgbm90IGNoYW5nZWQ6ICcgLiAkc3RyRGVzaWduTmFtZSAuICcgfCAnIC4gJHN0ck5hbWUgLiAnIHwgJyAuIGJhc2VuYW1lKCRzdHJUZW1wRmlsZSkgKTsKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHN0clRlbXBGaWxlKTsKICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoJ357LionIC4gX19DTEFTU19fIC4gJy4qfVtcbl0qficsICcnLCAkc3RyQ29udGVudCk7IC8vcmVtb3ZlIGVhcmx5ZXIgdGltZXN0YW1wCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gJ3sqIGltcG9ydGVkIHdpdGggJyAuIF9fQ0xBU1NfXyAuICcgYXQgJyAuIGRhdGUoJ1ktbS1kIEg6aTpzJykgLiAnICp9JyAuIFBIUF9FT0wgLiAkc3RyQ29udGVudDsKCiAgICAgICAgICAgICRvYmpDbXNMYXlvdXRUZW1wbGF0ZS0+c2V0X2NvbnRlbnQoJHN0ckNvbnRlbnQpOwogICAgICAgICAgICAvLyBwcmV2ZW50IGxvb3NpbmcgYXNzb2MKICAgICAgICAgICAgJG9iakNtc0xheW91dFRlbXBsYXRlLT5nZXRfZGVzaWducygpOwogICAgICAgICAgICAkb2JqQ21zTGF5b3V0VGVtcGxhdGUtPmdldF9hZGRpdGlvbmFsX2VkaXRvcnMoKTsKICAgICAgICAgICAgLy9zYXZlCiAgICAgICAgICAgICRvYmpDbXNMYXlvdXRUZW1wbGF0ZS0+c2F2ZSgpOwogICAgICAgICAgICAkYXJyUmV0dXJuW10gPSBhcnJheSgndHlwZScgPT4gc2VsZjo6TUVTU0FHRV9ISU5ULCAnbWVzc2FnZScgPT4gJ25ldyB2ZXJzaW9uOiAnIC4gJHN0ckRlc2lnbk5hbWUgLiAnIHwgJyAuICRzdHJOYW1lIC4gJyB8ICcgLiBiYXNlbmFtZSgkc3RyVGVtcEZpbGUpKTsKICAgICAgICAgfQoKICAgICAgICAgJGFyclN0eWxzaGVldHMgPSAkb2JqQ21zTGF5b3V0Q29sbGVjdGlvbi0+Z2V0X3N0eWxlc2hlZXRzKCk7CiAgICAgICAgICRzdHJTdHlsZXNoZWV0RXhwb3J0RGlyID0gJHN0ckRlc2lnbkV4cG9ydERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnc3R5bGVzaGVldHMnOwogICAgICAgICAkdGhpcy0+Y2hlY2tEaXJlY3RvcnkoJHN0clRlbXBsYXRlRXhwb3J0RGlyKTsKICAgICAgICAgZm9yZWFjaCAoJGFyclN0eWxzaGVldHMgYXMgJGludFN0eWxlc2hlZXRJZCkgewogICAgICAgICAgICAkb2JqQ21zTGF5b3V0U3R5bGVzaGVldCA9IENtc0xheW91dFN0eWxlc2hlZXQ6OmxvYWQoJGludFN0eWxlc2hlZXRJZCk7CiAgICAgICAgICAgICRpbnRJZCA9ICRvYmpDbXNMYXlvdXRTdHlsZXNoZWV0LT5nZXRfaWQoKTsKICAgICAgICAgICAgJHN0ck5hbWUgPSAkb2JqQ21zTGF5b3V0U3R5bGVzaGVldC0+Z2V0X25hbWUoKTsKCiAgICAgICAgICAgICRzdHJUZW1wRmlsZSA9ICRzdHJTdHlsZXNoZWV0RXhwb3J0RGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRpbnRJZCAuICcjJyAuICR0aGlzLT5uYW1lVG9EaXJuYW1lKCRzdHJOYW1lKSAuICcuY3NzJzsKICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkc3RyVGVtcEZpbGUpKSB7CiAgICAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX1dBUk4sICdtZXNzYWdlJyA9PiAnbm8gZXhwb3J0IGZvdW5kIGZvciBzdHlsZXNoZWV0OiAnIC4gJGludElkLicgLSAnLiRzdHJOYW1lICk7CiAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoZmlsZW10aW1lKCRzdHJUZW1wRmlsZSkgPD0gJHRzTGFzdFJ1bikgewogICAgICAgICAgICAgICAkYXJyUmV0dXJuW10gPSBhcnJheSgndHlwZScgPT4gc2VsZjo6TUVTU0FHRV9ERUJVRywgJ21lc3NhZ2UnID0+ICdmaWxlIG5vdCBjaGFuZ2VkOiAnIC4gJHN0ckRlc2lnbk5hbWUgLiAnIHwgJyAuICRzdHJOYW1lIC4gJyB8ICcgLiBiYXNlbmFtZSgkc3RyVGVtcEZpbGUpKTsKICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRzdHJDb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHN0clRlbXBGaWxlKTsKICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSBwcmVnX3JlcGxhY2UoJ34vKi4qJyAuIF9fQ0xBU1NfXyAuICcuKi9bXG5dKn4nLCAnJywgJHN0ckNvbnRlbnQpOyAvL3JlbW92ZSBlYXJseWVyIHRpbWVzdGFtcAogICAgICAgICAgICAkc3RyQ29udGVudCA9ICcvKiBpbXBvcnRlZCB3aXRoICcgLiBfX0NMQVNTX18gLiAnIGF0ICcgLiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gJyAqLycgLiBQSFBfRU9MIC4gJHN0ckNvbnRlbnQ7CgogICAgICAgICAgICAkb2JqQ21zTGF5b3V0U3R5bGVzaGVldC0+c2V0X2NvbnRlbnQoJHN0ckNvbnRlbnQpOwogICAgICAgICAgICAvLyBwcmV2ZW50IGxvb3NpbmcgYXNzb2MKICAgICAgICAgICAgJG9iakNtc0xheW91dFN0eWxlc2hlZXQtPmdldF9kZXNpZ25zKCk7CiAgICAgICAgICAgIC8vc2F2ZQogICAgICAgICAgICAkb2JqQ21zTGF5b3V0U3R5bGVzaGVldC0+c2F2ZSgpOwogICAgICAgICAgICAkYXJyUmV0dXJuW10gPSBhcnJheSgndHlwZScgPT4gc2VsZjo6TUVTU0FHRV9ISU5ULCAnbWVzc2FnZScgPT4gJ25ldyB2ZXJzaW9uOiAnIC4gJHN0ckRlc2lnbk5hbWUgLiAnIHwgJyAuICRzdHJOYW1lIC4gJyB8ICcgLiBiYXNlbmFtZSgkc3RyVGVtcEZpbGUpKTsKICAgICAgICAgfQoKICAgICAgfQoKICAgICAgcmV0dXJuICRhcnJSZXR1cm47CiAgIH0KCiAgIHByaXZhdGUgZnVuY3Rpb24gaW1wb3J0Q29udGVudCgpIHsKCiAgICAgICRhcnJSZXR1cm4gPSBhcnJheSgpOwoKICAgICAgJHRzTGFzdFJ1biA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsYXN0X3J1bicsIHRpbWUoKSk7CiAgICAgICRhcnJVc2VkQ29udGVudFByb3BlcnRpZXMgPSBleHBsb2RlKCd8Jywgc3RydG9sb3dlcigkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29udGVudF9wcm9wX25hbWVzJywgJ2NvbnRlbnRfZW4nKSkpOwoKICAgICAgJGFyckZpbGVzID0gZ2xvYigkdGhpcy0+c3RyVG1wRGlyX0NvbnRlbnQgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJyonKTsKICAgICAgZm9yZWFjaCAoJGFyckZpbGVzIGFzICRzdHJGaWxlcGF0aCkgewogICAgICAgICAkc3RyRmlsZW5hbWUgPSBiYXNlbmFtZSgkc3RyRmlsZXBhdGgpOwoKICAgICAgICAgJGFyclRtcCA9IGV4cGxvZGUoJyMnLCBzdHJfcmVwbGFjZSgnLnRwbCcsICcnLCAkc3RyRmlsZW5hbWUpKTsKICAgICAgICAgaWYgKGNvdW50KCRhcnJUbXApICE9IDMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiaW52YWxpZGUgZmlsZW5hbWU6ICIgLiAkc3RyRmlsZW5hbWUpOwogICAgICAgICB9CiAgICAgICAgICRpbnRJZCA9ICRhcnJUbXBbMF07CiAgICAgICAgICRzdHJDb250ZW50TmFtZSA9ICRhcnJUbXBbMV07CiAgICAgICAgICRzdHJQcm9wTmFtZSA9ICRhcnJUbXBbMl07CgogICAgICAgICAvL2NoZWNrIGlmIHByb3BlcnR5IGlzIGludGVyZXN0aW5nCiAgICAgICAgIGlmICghaW5fYXJyYXkoc3RydG9sb3dlcigkc3RyUHJvcE5hbWUpLCAkYXJyVXNlZENvbnRlbnRQcm9wZXJ0aWVzKSkgewogICAgICAgICAgICAkYXJyUmV0dXJuW10gPSBhcnJheSgndHlwZScgPT4gc2VsZjo6TUVTU0FHRV9ERUJVRywgJ21lc3NhZ2UnID0+ICdza2lwcGluZyBjb250ZW50IHByb3BlcnR5OiAnIC4gJHN0clByb3BOYW1lKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KCiAgICAgICAgIGlmIChmaWxlbXRpbWUoJHN0ckZpbGVwYXRoKSA8PSAkdHNMYXN0UnVuKSB7CiAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0RFQlVHLCAnbWVzc2FnZScgPT4gJ2ZpbGUgbm90IGNoYW5nZWQ6ICcgLiAkc3RyQ29udGVudE5hbWUgLiAnIHwgJyAuICRzdHJQcm9wTmFtZSAuICcgfCAnIC4gJHN0ckZpbGVuYW1lKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KCiAgICAgICAgIC8vbG9hZCBDb250ZW50T2JqZWN0CiAgICAgICAgICRvYmpDb250ZW50T3BlcmF0aW9ucyA9IENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAgJG9iakNvbnRlbnQgPSAkb2JqQ29udGVudE9wZXJhdGlvbnMtPkxvYWRDb250ZW50RnJvbUlkKCRpbnRJZCwgdHJ1ZSk7CiAgICAgICAgIGlmICgkb2JqQ29udGVudCBpbnN0YW5jZW9mIENvbnRlbnQpIHsKICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkc3RyRmlsZXBhdGgpOwogICAgICAgICAgICAkc3RyQ29udGVudCA9IHByZWdfcmVwbGFjZSgnfnsuKicgLiBfX0NMQVNTX18gLiAnLip9W1xuXSp+JywgJycsICRzdHJDb250ZW50KTsgLy9yZW1vdmUgZWFybHllciB0aW1lc3RhbXAKICAgICAgICAgICAgJHN0ckNvbnRlbnQgPSAneyogaW1wb3J0ZWQgd2l0aCAnIC4gX19DTEFTU19fIC4gJyBhdCAnIC4gZGF0ZSgnWS1tLWQgSDppOnMnKSAuICcgKn0nIC4gUEhQX0VPTCAuICRzdHJDb250ZW50OwogICAgICAgICAgICAkb2JqQ29udGVudC0+U2V0UHJvcGVydHlWYWx1ZSgkc3RyUHJvcE5hbWUsICRzdHJDb250ZW50KTsKICAgICAgICAgICAgJG9iakNvbnRlbnQtPlNhdmUoKTsKICAgICAgICAgICAgJGFyclJldHVybltdID0gYXJyYXkoJ3R5cGUnID0+IHNlbGY6Ok1FU1NBR0VfSElOVCwgJ21lc3NhZ2UnID0+ICduZXcgdmVyc2lvbjogJyAuICRzdHJDb250ZW50TmFtZSAuICcgfCAnIC4gJHN0clByb3BOYW1lIC4gJyB8ICcgLiAkc3RyRmlsZW5hbWUpOwogICAgICAgICB9CgogICAgICB9CgogICAgICByZXR1cm4gJGFyclJldHVybjsKICAgfQoKICAgcHJpdmF0ZSBmdW5jdGlvbiBpbXBvcnRVc2VycGx1Z2lucygpIHsKCiAgICAgICRhcnJSZXR1cm4gPSBhcnJheSgpOwoKICAgICAgJHRzTGFzdFJ1biA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsYXN0X3J1bicsIHRpbWUoKSk7CgogICAgICAkYXJyRmlsZXMgPSBnbG9iKCR0aGlzLT5zdHJUbXBEaXJfVXNlcnBsdWdpbnMgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJyonKTsKICAgICAgZm9yZWFjaCAoJGFyckZpbGVzIGFzICRzdHJGaWxlcGF0aCkgewogICAgICAgICAkc3RyRmlsZW5hbWUgPSBiYXNlbmFtZSgkc3RyRmlsZXBhdGgpOwoKICAgICAgICAgJGFyclRtcCA9IGV4cGxvZGUoJyMnLCBzdHJfcmVwbGFjZSgnLnBocCcsICcnLCAkc3RyRmlsZW5hbWUpKTsKICAgICAgICAgaWYgKGNvdW50KCRhcnJUbXApICE9IDIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiaW52YWxpZGUgZmlsZW5hbWU6ICIgLiAkc3RyRmlsZW5hbWUpOwogICAgICAgICB9CiAgICAgICAgICRpbnRJZCA9ICRhcnJUbXBbMF07CiAgICAgICAgICRzdHJUYWdOYW1lID0gJGFyclRtcFsxXTsKCiAgICAgICAgIGlmIChmaWxlbXRpbWUoJHN0ckZpbGVwYXRoKSA8PSAkdHNMYXN0UnVuKSB7CiAgICAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0RFQlVHLCAnbWVzc2FnZScgPT4gJ2ZpbGUgbm90IGNoYW5nZWQ6ICcgLiRzdHJUYWdOYW1lIC4gJyB8ICcgLiAkc3RyRmlsZW5hbWUpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQoKICAgICAgICAgJHN0ckNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkc3RyRmlsZXBhdGgpOwogICAgICAgICAkc3RyQ29udGVudCA9IHByZWdfcmVwbGFjZSgnfi8uKicgLiBfX0NMQVNTX18gLiAnLiovW1xuXSp+JywgJycsICRzdHJDb250ZW50KTsgLy9yZW1vdmUgZWFybHllciB0aW1lc3RhbXAKICAgICAgICAgJHN0ckNvbnRlbnQgPSAnLyogaW1wb3J0ZWQgd2l0aCAnIC4gX19DTEFTU19fIC4gJyBhdCAnIC4gZGF0ZSgnWS1tLWQgSDppOnMnKSAuICcgKi8nIC4gUEhQX0VPTCAuICRzdHJDb250ZW50OwoKICAgICAgICAgLy9zYXZlIG5ldyB2YWx1ZXMgdG8gZGF0YWJhc2UKICAgICAgICAgJG9ialVzZXJUYWdPcGVyYXRpb25zID0gVXNlclRhZ09wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAkb2JqVXNlclRhZ09wZXJhdGlvbnMtPlNldFVzZXJUYWcoJHN0clRhZ05hbWUsICRzdHJDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICRhcnJSZXR1cm5bXSA9IGFycmF5KCd0eXBlJyA9PiBzZWxmOjpNRVNTQUdFX0hJTlQsICdtZXNzYWdlJyA9PiAnbmV3IHZlcnNpb246ICcgLiAkc3RyVGFnTmFtZSAuICcgfCAnIC4gJHN0ckZpbGVuYW1lKTsKICAgICAgfQoKICAgICAgcmV0dXJuICRhcnJSZXR1cm47CiAgIH0KCn0=]]></data>
	</file>
</module>
