<?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>CMSForms</name>
	<version>0.0.1</version>
  <mincmsversion>1.8.2</mincmsversion>
	<help><![CDATA[PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgJmx0O2N5YmVydG90b3BoZUBnbWFpbC5jb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4wLjE8YnIgLz4=]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/CMSForms.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCglNb2R1bGU6IENNUyBGb3JtcyAtIFRoaXMgbW9kdWxlIGhlbHBzIGRldmVsb3BlcnMgdG8gaGFuZGxlIGZvcm1zIGZvciB0aGVpciBmcm9udGVuZCBvciBiYWNrZW5kIGFwcGxpY2F0aW9ucwoJCglDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwIMKpCiovCgpyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9jbGFzc2VzL0NNU0Zvcm0uY2xhc3MucGhwJzsKCmNsYXNzIENNU0Zvcm1zIGV4dGVuZHMgQ01TTW9kdWxlCnsKCXB1YmxpYyBmdW5jdGlvbiBHZXROYW1lKCkJCQkJewlyZXR1cm4gJ0NNU0Zvcm1zJzsJIH0KCXB1YmxpYyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgICAgICAgICAgIAl7IHJldHVybiAnMC4wLjEnOyB9CglwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgICAgICAgICAgICAJeyByZXR1cm4gJ0plYW4tQ2hyaXN0b3BoZSBDdXZlbGllcic7IH0KCXB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpICAgICAgIAl7IHJldHVybiAnY3liZXJ0b3RvcGhlQGdtYWlsLmNvbSc7IH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/CMSForm.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgkvKgoJCVRoaXMgY2xhc3MgYWltIHRvIGhhbmRsZSBDTVMgRm9ybXMgdmVyeSBkaWZmZXJlbnRseS4KCQkKCQlBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KCQlDb3B5cmlnaHRzOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgLSBNb3JyaXMgJiBDaGFwbWFuIEJlbGdpdW0gLSAyMDEwCgkJTGljZW5jZTogR1BMCQkKCQoJKi8KCmNsYXNzIENNU0Zvcm0JZXh0ZW5kcwlDbXNPYmplY3QKewoJY29uc3QgVkVSU0lPTiA9ICcwLjAuNSc7CgkKCXByb3RlY3RlZCAkbW9kdWxlX25hbWU7Cglwcm90ZWN0ZWQgJGlkOyAvLyBUaGUgZm9ybSBJRAoJcHJvdGVjdGVkICRyZXR1cm5pZDsKCXByb3RlY3RlZCAkYWN0aW9uOwkKCQoJcHJvdGVjdGVkICR3aWRnZXRzID0gYXJyYXkoKTsgLy8gVGhlIGZvcm0gd2lkZ2V0cwoJcHJvdGVjdGVkICRoaWRkZW5fd2lkZ2V0cyA9IGFycmF5KCk7IC8vIFNwZWNpZmljIHdpZGdldHMgc2hvd24gb24gdGhlIGJlZ2luOwoJCglwcm90ZWN0ZWQgJGxhYmVscyA9IGFycmF5KAoJCSdzdWJtaXQnID0+ICdTdWJtaXQnLAoJCSdhcHBseScgPT4gJ0FwcGx5JywKCQknY2FuY2VsJyA9PiAnQ2FuY2VsJywKCQknbmV4dCcgPT4gJ05leHQnLAoJCSdwcmV2aW91cycgPT4gJ1ByZXZpb3VzJwoJCSk7CgkJCglwcm90ZWN0ZWQgJGFjdGl2ZV9idXR0b25zID0gYXJyYXkoJ2NhbmNlbCcsJ3N1Ym1pdCcpOwoJcHJvdGVjdGVkICRmb3JtX2Vycm9ycyA9IGFycmF5KCk7IAoJCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZV9uYW1lLCAkaWQsICRhY3Rpb24sICRyZXR1cm5pZCkKCXsKCQkkdGhpcy0+bW9kdWxlX25hbWUgPSAkbW9kdWxlX25hbWU7CgkJJHRoaXMtPmlkID0gJGlkOwoJCSR0aGlzLT5yZXR1cm5pZCA9ICRyZXR1cm5pZDsKCQkkdGhpcy0+YWN0aW9uID0gJGFjdGlvbjsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHByb2Nlc3MoKQoJewoJCWZvcmVhY2goJHRoaXMtPndpZGdldHMgYXMgJHdpZGdldCkKCQl7CgkJCSR3aWRnZXQtPnByb2Nlc3MoKTsKCQl9Cgl9CgkKCS8vIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldE5ld0lkKCkKCS8vIHsKCS8vIAlnbG9iYWwgJENNU0Zvcm1zOwoJLy8gCSRuZXdpZCA9IHN1YnN0cihtZDUodGltZSgpKSwwLDYpOwoJLy8gCWlmICghaXNzZXQoJENNU0Zvcm1zWyRuZXdpZF0pKQoJLy8gCXsKCS8vIAkJJENNU0Zvcm1zWyRuZXdpZF0gPSB0cnVlOyAvL25ldyBzZWxmKCRuZXdpZCk7CgkvLyAJCXJldHVybiAkbmV3aWQ7CgkvLyAJfQoJLy8gCWVsc2UKCS8vIAl7CgkvLyAJCXJldHVybiBzZWxmOjpnZXROZXdJZCgpOwoJLy8gCX0KCS8vIH0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcnMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsJCQkKCQkJJGh0bWwgPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlRm9ybVN0YXJ0KCR0aGlzLT5pZCwgJHRoaXMtPmFjdGlvbiwgJHRoaXMtPnJldHVybmlkKTsKCQkJZm9yZWFjaCgkdGhpcy0+aGlkZGVuX3dpZGdldHMgYXMgJHdpZGdldCkKCQkJewoJCQkJJGh0bWwgLj0gJHdpZGdldDsKCQkJfQkJCQoJCQlyZXR1cm4gJGh0bWw7CgkJfQoJCXJldHVybiBudWxsOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9vdGVycygpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCWlmIChpc3NldCgkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXSkpCgkJewkJCQoJCQkkaHRtbCA9ICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVGb3JtRW5kKCk7CgkJCXJldHVybiAkaHRtbDsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRTdWJtaXRMYWJlbCgkbGFiZWwpCgl7CgkJJHRoaXMtPmxhYmVsc1snc3VibWl0J10gPSAkbGFiZWw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRMYWJlbCgkbGFiZWwsICR0aXRsZSkKCXsKCQkkdGhpcy0+bGFiZWxzWyRsYWJlbF0gPSAkdGl0bGU7Cgl9CgkKCQoJcHVibGljIGZ1bmN0aW9uIHNldEJ1dHRvbnMoJGJ1dHRvbnMgPSBhcnJheSgpKQoJewoJCWlmIChpc19hcnJheSgkYnV0dG9ucykpCSR0aGlzLT5hY3RpdmVfYnV0dG9ucyA9ICRidXR0b25zOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0QnV0dG9ucygpCgl7CgkJJGh0bWwgPSAnJzsKCQlmb3JlYWNoKCR0aGlzLT5hY3RpdmVfYnV0dG9ucyBhcyAkYnV0dG9uKQoJCXsKCQkJc3dpdGNoKCRidXR0b24pCgkJCXsKCQkJCWNhc2UgJ3N1Ym1pdCc6CgkJCQkJJGh0bWwgLj0gJHRoaXMtPmdldFN1Ym1pdCgpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAnYXBwbHknOgoJCQkJCSRodG1sIC49ICR0aGlzLT5nZXRBcHBseSgpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAnY2FuY2VsJzoKCQkJCQkkaHRtbCAuPSAkdGhpcy0+Z2V0Q2FuY2VsKCk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICduZXh0JzoKCQkJCQkkaHRtbCAuPSAkdGhpcy0+Z2V0TmV4dCgpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAncHJldmlvdXMnOgoJCQkJCSRodG1sIC49ICR0aGlzLT5nZXRQcmV2aW91cygpOwoJCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJCQlicmVhazsKCQkJfQoJCX0KCQkKCQlyZXR1cm4gJGh0bWw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRTdWJtaXQoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsJCQkKCQkJJGh0bWwgPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlSW5wdXRTdWJtaXQoJHRoaXMtPmlkLCAnc3VibWl0JywgJHRoaXMtPmxhYmVsc1snc3VibWl0J10pOwoJCQlyZXR1cm4gJGh0bWw7CgkJfQoJCXJldHVybiBudWxsOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwbHkoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsJCQkKCQkJJGh0bWwgPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlSW5wdXRTdWJtaXQoJHRoaXMtPmlkLCAnYXBwbHknLCAkdGhpcy0+bGFiZWxzWydhcHBseSddKTsKCQkJcmV0dXJuICRodG1sOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldENhbmNlbCgpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCWlmIChpc3NldCgkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXSkpCgkJewkJCQoJCQkkaHRtbCA9ICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dFN1Ym1pdCgkdGhpcy0+aWQsICdjYW5jZWwnLCAkdGhpcy0+bGFiZWxzWydjYW5jZWwnXSk7CgkJCXJldHVybiAkaHRtbDsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXROZXh0KCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddKSkKCQl7CQkJCgkJCSRodG1sID0gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUlucHV0U3VibWl0KCR0aGlzLT5pZCwgJ25leHQnLCAkdGhpcy0+bGFiZWxzWyduZXh0J10pOwoJCQlyZXR1cm4gJGh0bWw7CgkJfQoJCXJldHVybiBudWxsOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldmlvdXMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10pKQoJCXsJCQkKCQkJJGh0bWwgPSAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Q3JlYXRlSW5wdXRTdWJtaXQoJHRoaXMtPmlkLCAncHJldmlvdXMnLCAkdGhpcy0+bGFiZWxzWydwcmV2aW91cyddKTsKCQkJcmV0dXJuICRodG1sOwoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldFdpZGdldCgkbmFtZSwkdHlwZSwkc2V0dGluZ3MgPSBhcnJheSgpKQoJewoJCSR3aWRnZXQgPSBuZXcgQ01TRm9ybVdpZGdldCgkdGhpcy0+aWQsJHRoaXMtPm1vZHVsZV9uYW1lLCRuYW1lLCR0eXBlLCRzZXR0aW5ncyk7CgkJaWYgKCR0eXBlID09ICdoaWRkZW4nKQoJCXsKCQkJJHRoaXMtPmhpZGRlbl93aWRnZXRzWyRuYW1lXSA9ICR3aWRnZXQ7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT53aWRnZXRzWyRuYW1lXSA9ICR3aWRnZXQ7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkZ2V0cygpCgl7CgkJcmV0dXJuICR0aGlzLT53aWRnZXRzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0V2lkZ2V0KCRuYW1lKQoJewoJCWlmIChpc3NldCgkdGhpcy0+d2lkZ2V0c1skbmFtZV0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT53aWRnZXRzWyRuYW1lXTsKCQl9CgkJZWxzZWlmIChpc3NldCgkdGhpcy0+aGlkZGVuX3dpZGdldHNbJG5hbWVdKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+aGlkZGVuX3dpZGdldHNbJG5hbWVdOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzaG93V2lkZ2V0cygkdGVtcGxhdGU9bnVsbCkKCXsKCQkkaHRtbCA9ICcnOwoJCWZvcmVhY2goJHRoaXMtPndpZGdldHMgYXMgJHdpZGdldCkKCQl7CgkJCWlmICghaXNfbnVsbCgkdGVtcGxhdGUpKQoJCQl7CgkJCQkkdGV4dCA9IHN0cl9yZXBsYWNlKCclTEFCRUwlJywgJHdpZGdldC0+Z2V0TGFiZWwoKSwgJHRlbXBsYXRlKTsKCQkJCSR0ZXh0ID0gc3RyX3JlcGxhY2UoJyVJTlBVVCUnLCAkd2lkZ2V0LT5nZXRJbnB1dCgpLCAkdGV4dCk7CgkJCQkkdGV4dCA9IHN0cl9yZXBsYWNlKCclRVJST1JTJScsICR3aWRnZXQtPnNob3dFcnJvcnMoKSwgJHRleHQpOwoJCQkJJGh0bWwgLj0gJHRleHQ7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkaHRtbCAuPSAkd2lkZ2V0OwkJCQkKCQkJfQoJCX0KCQlyZXR1cm4gJGh0bWw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBub0Vycm9yKCkKCXsKCQlpZiAoY291bnQoJHRoaXMtPmZvcm1fZXJyb3JzKSA9PSAwKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEVycm9ycygpCgl7CgkJcmV0dXJuICR0aGlzLT5mb3JtX2Vycm9yczsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNob3dFcnJvcnMoKQoJewoJCSRodG1sID0gJyc7CgkJaWYoY291bnQoJHRoaXMtPmZvcm1fZXJyb3JzKSA+IDApCgkJewoJCQkkaHRtbCAuPSAnPHVsIGNsYXNzPSJlcnJvcnMiPic7CgkJCWZvcmVhY2goJHRoaXMtPmZvcm1fZXJyb3JzIGFzICRwcmlvcml0eSA9PiAkZXJyb3JzKQoJCQl7CgkJCQkkaHRtbCAuPSAnPGxpPjxlbT4nLiRwcmlvcml0eS4nPC9lbT48dWw+JzsKCQkJCWZvcmVhY2goJGVycm9ycyBhcyAkZXJyb3IpCgkJCQl7CgkJCQkJJGh0bWwgLj0gJzxsaT4nLiRlcnJvci4nPC9saT4nOwoJCQkJfQkJCQkKCQkJCSRodG1sIC49ICc8L3VsPjwvbGk+JzsKCQkJfQoJCQkkaHRtbCAuPSAnPC91bD4nOwoJCX0KCQlyZXR1cm4gJGh0bWw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvcigkbWVzc2FnZSwkcHJpb3JpdHk9J2RlZmF1bHQnKQoJewoJCSR0aGlzLT5mb3JtX2Vycm9yc1skcHJpb3JpdHldW10gPSAkbWVzc2FnZTsKCX0KfQoKY2xhc3MgQ01TRm9ybVdpZGdldAlleHRlbmRzIENtc09iamVjdAp7Cglwcm90ZWN0ZWQgJGlkOyAvLyBUaGUgZm9ybSBJRAoJcHJvdGVjdGVkICRtb2R1bGVfbmFtZTsKCXByb3RlY3RlZCAkbmFtZTsgLy8gVGhlIGlucHV0IG5hbWUKCXByb3RlY3RlZCAkdHlwZTsKCXByb3RlY3RlZCAkaW5wdXQ7Cglwcm90ZWN0ZWQgJHZhbHVlcyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJHNldHRpbmdzID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkZm9ybV9lcnJvcnM7CgkKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaWQsICRtb2R1bGVfbmFtZSwgJG5hbWUsICR0eXBlLCRzZXR0aW5ncz1hcnJheSgpKQoJewoJCSR0aGlzLT5pZCA9ICRpZDsKCQkkdGhpcy0+bW9kdWxlX25hbWUgPSAkbW9kdWxlX25hbWU7CgkJJHRoaXMtPm5hbWUgPSAkbmFtZTsKCQkkdGhpcy0+dHlwZSA9ICR0eXBlOwoJCSR0aGlzLT5zZXR0aW5ncyA9ICRzZXR0aW5nczsKCQkkdGhpcy0+aW5pdFZhbHVlcygpOwoJfQoJCQoJcHVibGljIGZ1bmN0aW9uIHByb2Nlc3MoKQoJewoJCWlmKAoJCQkoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXSkpCgkJCXx8CgkJCShpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkpCgkJKQoJCXsKCQkJJHRoaXMtPnNhdmVWYWx1ZXMoKTsKCQl9Cgl9CgkJCglwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCgl7CgkJaWYgKCR0aGlzLT50eXBlID09ICdoaWRkZW4nKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5nZXRJbnB1dCgpOwoJCX0KCQllbHNlCgkJewoJCQkkaHRtbCA9ICcKCQkJPGRpdiBjbGFzcz0iZm9ybV93aWRnZXQiPgoJCQkJPGRpdiBjbGFzcz0iZm9ybV9sYWJlbCI+PGxhYmVsIGZvcj0iJy4kdGhpcy0+aWQuJHRoaXMtPm5hbWUuJyI+Jy4kdGhpcy0+Z2V0TGFiZWwoKS4nPC9sYWJlbD48L2Rpdj4nOwkJCQkJCQoJCQlpZiAoY291bnQoJHRoaXMtPmZvcm1fZXJyb3JzKSkKCQkJewoJCQkJJGh0bWwgLj0gJzxkaXYgY2xhc3M9ImZvcm1fZXJyb3JzIj4nIC4gJHRoaXMtPnNob3dFcnJvcnMoKSAuICc8L2Rpdj4nOwoJCQl9CQkJCQoJCQkkaHRtbCAuPSAnCgkJCQk8ZGl2IGNsYXNzPSJmb3JtX2lucHV0Ij4nLiR0aGlzLT5nZXRJbnB1dCgpLic8L2Rpdj4KCQkJPC9kaXY+JzsKCQkJcmV0dXJuICRodG1sOwoJCX0KCX0KCQoJcHVibGljIGZ1bmN0aW9uIGluaXRWYWx1ZXMoKQoJewkKCQlnbG9iYWwgJGdDbXM7CgkJc3dpdGNoKCR0aGlzLT50eXBlKQoJCXsKCQkJY2FzZSAnY2hlY2tib3gnOgoJCQkJaWYoCgkJCQkJIWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJHRoaXMtPm5hbWVdKQoJCQkJCSYmCgkJCQkJKAoJCQkJCQlpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLidzdWJtaXQnXSkKCQkJCQkJfHwKCQkJCQkJaXNzZXQoJF9SRVFVRVNUWyR0aGlzLT5pZC4nYXBwbHknXSkKCQkJCQkpCgkJCQkJCgkJCQkpCgkJCQl7CgkJCQkJLy8gQ2FzZSB3aGVuIGNoZWNrYm94IGlzIHVuY2hlY2tlZCBhbmQgZm9ybSBpcyBzdWJtaXR0ZWQsIHdlIHNob3VsZCBlbXB0eSB0aGUgdmFsdWUKCQkJCQkkdGhpcy0+dmFsdWVzW109YXJyYXkoKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJZGVmYXVsdDoKCQkJCWlmIChpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLiR0aGlzLT5uYW1lXSkpCgkJCQl7CgkJCQkJJHZhbHVlcyA9ICRfUkVRVUVTVFskdGhpcy0+aWQuJHRoaXMtPm5hbWVdOwoJCQkJfQoJCQkJZWxzZWlmKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1sndmFsdWUnXSkpCgkJCQl7CgkJCQkJJHZhbHVlcyA9ICR0aGlzLT5zZXR0aW5nc1sndmFsdWUnXTsKCQkJCX0KCQkJCWVsc2VpZihpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddKSAmJiAhaXNzZXQoJF9SRVFVRVNUWyR0aGlzLT5pZC4nc3VibWl0J10pICYmICFpc3NldCgkX1JFUVVFU1RbJHRoaXMtPmlkLidhcHBseSddKSkKCQkJCXsKCQkJCQkkdmFsdWVzID0gJHRoaXMtPmZldGNoVmFsdWVzKCk7CgkJCQl9CgkJCQllbHNlaWYoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydwcmVmZXJlbmNlJ10pICYmICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5nZXRQcmVmZXJlbmNlKCR0aGlzLT5zZXR0aW5nc1sncHJlZmVyZW5jZSddKSAhPSAnJykKCQkJCXsKCQkJCQkJCSR2YWx1ZXMgPSBleHBsb2RlKCd8JywkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+Z2V0UHJlZmVyZW5jZSgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkpOwoJCQkJfQoJCQkJZWxzZWlmKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snZGVmYXVsdF92YWx1ZSddKSkKCQkJCXsKCQkJCQkkdmFsdWVzID0gJHRoaXMtPnNldHRpbmdzWydkZWZhdWx0X3ZhbHVlJ107CgkJCQl9CgkJCQkKCQkJCWlmICghZW1wdHkoJHZhbHVlcykpCgkJCQl7CgkJCQkJaWYgKGlzX2FycmF5KCR2YWx1ZXMpKSAKCQkJCQl7CgkJCQkJCSR0aGlzLT52YWx1ZXMgPSAkdmFsdWVzOwoJCQkJCX0JCgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkkdGhpcy0+dmFsdWVzW10gPSAkdmFsdWVzOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCX0KCQkKCX0KCQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNhdmVWYWx1ZXMoKQoJewoJCWlmKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pICYmIGlzX29iamVjdCgkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddKSkKCQl7CgkJCS8vIFRoaXMgZG8gbm90IHNhdmUgdGhlIG9iamVjdCBzdGF0ZSwgc28gd2UgaGF2ZSB0byBkbyBpdCBvdXRzaWRlIHRoZSBmb3JtCgkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXSwgJ3NldCcpKQoJCQl7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ10pKQoJCQkJewoJCQkJCSRuYW1lID0gJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ107CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJG5hbWUgPSAkdGhpcy0+bmFtZTsKCQkJCX0KCQkJCSR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10tPnNldCgkbmFtZSwgaW1wbG9kZSgnLCcsICR0aGlzLT52YWx1ZXMpKTsKCQkJfQoJCX0KCQkKCQlpZihpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ByZWZlcmVuY2UnXSkgJiYgIWlzc2V0KCRfUkVRVUVTVFskdGhpcy0+aWQuJ2NhbmNlbCddKSkKCQl7CgkJCS8vIENoZWNrIGlmIHRoZXJlIGlzIG5vIGNhbmNlbCBidXR0b24gZmlyc3QgYmVjYXVzZSB3ZSBzYXZlIHRoZSB2YWx1ZSBkaXJlY3RseSAhCgkJCWdsb2JhbCAkZ0NtczsKCQkJJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPnNldFByZWZlcmVuY2UoJHRoaXMtPnNldHRpbmdzWydwcmVmZXJlbmNlJ10sIGltcGxvZGUoJ3wnLCAkdGhpcy0+dmFsdWVzKSk7CgkJfQoJfQoJCglwcm90ZWN0ZWQgZnVuY3Rpb24gZmV0Y2hWYWx1ZXMoKQoJewoJCWlmKGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snb2JqZWN0J10pICYmIGlzX29iamVjdCgkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddKSkKCQl7CgkJCWlmKG1ldGhvZF9leGlzdHMoJHRoaXMtPnNldHRpbmdzWydvYmplY3QnXSwgJ2dldCcpKQoJCQl7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ10pKQoJCQkJewoJCQkJCSRuYW1lID0gJHRoaXMtPnNldHRpbmdzWydmaWVsZF9uYW1lJ107CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJG5hbWUgPSAkdGhpcy0+bmFtZTsKCQkJCX0KCQkJCSR2YWx1ZXMgPSBleHBsb2RlKCcsJywkdGhpcy0+c2V0dGluZ3NbJ29iamVjdCddLT5nZXQoJG5hbWUpKTsKCQkJCXJldHVybiAkdmFsdWVzOwoJCQl9CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0VmFsdWVzKCR2YWx1ZXMpCgl7CgkJaWYgKGlzX2FycmF5KCR2YWx1ZXMpKQoJCXsKCQkJJHRoaXMtPnZhbHVlcyA9ICR2YWx1ZXM7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT52YWx1ZXMgPSBhcnJheSgkdmFsdWVzKTsKCQl9Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZXMoKQoJewoJCXJldHVybiAkdGhpcy0+dmFsdWVzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0SW5wdXQoKQoJewkKCQlpZiAoIWVtcHR5KCR0aGlzLT5pbnB1dCkpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmlucHV0OwoJCX0KCQkKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddKSkKCQl7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkKCQkJewoJCQkJY2FzZSAndGV4dCc6CgkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dFRleHQoJHRoaXMtPmlkLCAkdGhpcy0+bmFtZSwgaW1wbG9kZSgnLCcsJHRoaXMtPnZhbHVlcyksIGlzc2V0KCR0aGlzLT5zZXR0aW5nc1snc2l6ZSddKT8kdGhpcy0+c2V0dGluZ3NbJ3NpemUnXTo4MCk7CQkJCQoJCQkJY2FzZSAnaGlkZGVuJzoKCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZUlucHV0SGlkZGVuKCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsIGltcGxvZGUoJywnLCR0aGlzLT52YWx1ZXMpKTsKCQkJCWNhc2UgJ3NlbGVjdCc6CgkJCQkJcmV0dXJuIHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkdGhpcy0+aWQsICR0aGlzLT5uYW1lLCBpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3ZhbHVlcyddKT8kdGhpcy0+c2V0dGluZ3NbJ3ZhbHVlcyddOmFycmF5KCksICR0aGlzLT52YWx1ZXMsIDEsICcnLCBmYWxzZSk7CgkJCQljYXNlICdjaGVja2JveCc6CgkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVJbnB1dENoZWNrYm94KCR0aGlzLT5pZCwgJHRoaXMtPm5hbWUsICcxJywgKGludGVnZXIpaW1wbG9kZSgnLCcsJHRoaXMtPnZhbHVlcykpOwoJCQkJY2FzZSAndGV4dGFyZWEnOgoJCQkJCWlmIChpc3NldCgkdGhpcy0+c2V0dGluZ3NbJ3Nob3dfd3lzaXd5ZyddKSAmJiAkdGhpcy0+c2V0dGluZ3NbJ3Nob3dfd3lzaXd5ZyddID09IHRydWUpCgkJCQkJewoJCQkJCQlyZXR1cm4gJGdDbXMtPm1vZHVsZXNbJHRoaXMtPm1vZHVsZV9uYW1lXVsnb2JqZWN0J10tPkNyZWF0ZVRleHRBcmVhKHRydWUsICR0aGlzLT5pZCwgaW1wbG9kZSgnLCcsJHRoaXMtPnZhbHVlcyksICR0aGlzLT5uYW1lKTsJCQkJCQkKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJcmV0dXJuICRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJHRoaXMtPmlkLCBpbXBsb2RlKCcsJywkdGhpcy0+dmFsdWVzKSwgJHRoaXMtPm5hbWUpOwoJCQkJCX0KCQkJCWNhc2UgJ3RpbWUnOgoJCQkJCXJldHVybiBzZWxmOjpDcmVhdGVUaW1lU2VsZWN0KCR0aGlzLT5pZCwkdGhpcy0+bmFtZSwkdGhpcy0+dmFsdWVzKTsKCQkJCWNhc2UgJ2RhdGUnOgoJCQkJCXJldHVybiBzZWxmOjpDcmVhdGVEYXRlU2VsZWN0KCR0aGlzLT5pZCwkdGhpcy0+bmFtZSwkdGhpcy0+dmFsdWVzLCAkdGhpcy0+c2V0dGluZ3MpOwoJCQkJY2FzZSAncGFnZXMnOgoJCQkJCXJldHVybiAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+Q3JlYXRlSGllcmFyY2h5RHJvcGRvd24oJycsIGltcGxvZGUoJywnLCR0aGlzLT52YWx1ZXMpLCAkdGhpcy0+aWQgLiAkdGhpcy0+bmFtZSk7CgkJCQkJCS8vJHRoaXMtPmdldFByZWZlcmVuY2UoJ2RlZmF1bHRfcGFnZScsKQoJCQkJZGVmYXVsdDoKCQkJCQlyZXR1cm4gbnVsbDsKCQkJfQoJCX0KCQlyZXR1cm4gbnVsbDsKCQkKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldExhYmVsKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyR0aGlzLT5tb2R1bGVfbmFtZV1bJ29iamVjdCddKSkKCQl7CgkJCXJldHVybiAkZ0Ntcy0+bW9kdWxlc1skdGhpcy0+bW9kdWxlX25hbWVdWydvYmplY3QnXS0+bGFuZygnZm9ybV8nLiR0aGlzLT5uYW1lKTsKCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgkKCS8vIFRvb2xzCgkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRGF0ZVNlbGVjdCgkaWQsJG5hbWUsJHZhbHVlcywkc2V0dGluZ3MpCgl7CgkJJHN0YXJ0X3llYXIgPSBpc3NldCgkc2V0dGluZ3NbJ3N0YXJ0X3llYXInXSk/JHNldHRpbmdzWydzdGFydF95ZWFyJ106ZGF0ZSgnWScpOwoJCSRudW1iZXJfeWVhcnMgPSBpc3NldCgkc2V0dGluZ3NbJ251bWJlcl95ZWFycyddKT8kc2V0dGluZ3NbJ251bWJlcl95ZWFycyddOjIwOwoJCSRlbmRfeWVhciA9ICRzdGFydF95ZWFyICsgJG51bWJlcl95ZWFyczsKCQkKCQkkeWVhciA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1swXScsc2VsZjo6Q3JlYXRlTnVtYmVyTGlzdCgkZW5kX3llYXIsJHN0YXJ0X3llYXIpLGFycmF5KCR2YWx1ZXNbMF0pLDEsJycsZmFsc2UpOwoJCSRtb250aCA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1sxXScsc2VsZjo6Q3JlYXRlTnVtYmVyTGlzdCgxMiwxKSxhcnJheSgkdmFsdWVzWzFdKSwxLCcnLGZhbHNlKTsKCQkkZGF5ID0gc2VsZjo6Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwkbmFtZS4nWzJdJyxzZWxmOjpDcmVhdGVOdW1iZXJMaXN0KDMxLDEpLGFycmF5KCR2YWx1ZXNbMl0pLDEsJycsZmFsc2UpOwoJCXJldHVybiAkeWVhciAuICcgLyAnIC4gJG1vbnRoIC4gJyAvICcgLiAkZGF5OwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZVRpbWVTZWxlY3QoJGlkLCRuYW1lLCR2YWx1ZXMpCgl7CgkJJGhvdXJzID0gc2VsZjo6Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwkbmFtZS4nWzBdJyxzZWxmOjpDcmVhdGVOdW1iZXJMaXN0KDIzKSxhcnJheSgkdmFsdWVzWzBdKSwxLCcnLGZhbHNlKTsKCQkkbWludXRlcyA9IHNlbGY6OkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsJG5hbWUuJ1sxXScsc2VsZjo6Q3JlYXRlTnVtYmVyTGlzdCg1OSksYXJyYXkoJHZhbHVlc1sxXSksMSwnJyxmYWxzZSk7CgkJJHNlY29uZHMgPSBzZWxmOjpDcmVhdGVJbnB1dFNlbGVjdExpc3QoJGlkLCRuYW1lLidbMl0nLHNlbGY6OkNyZWF0ZU51bWJlckxpc3QoNTkpLGFycmF5KCR2YWx1ZXNbMl0pLDEsJycsZmFsc2UpOwoJCXJldHVybiAkaG91cnMgLiAnIDogJyAuICRtaW51dGVzIC4gJyA6ICcgLiAkc2Vjb25kczsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZU51bWJlckxpc3QoJGVuZCwgJHN0YXJ0PTApCgl7CgkJaWYgKCgkZW5kIDwgMCl8fCghaXNfbnVtZXJpYygkZW5kKSkpICRlbmQgPSAxOwoJCSRsaXN0ID0gYXJyYXkoKTsKCQlmb3IgKCRpID0gJHN0YXJ0OyAkaSA8PSAkZW5kOyAkaSsrKQoJCXsKCQkJJGxpc3RbJGldID0gKHN0cmluZykkaTsKCQl9CgkJcmV0dXJuICRsaXN0OwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsICRuYW1lLCAkaXRlbXMsICRzZWxlY3RlZGl0ZW1zPWFycmF5KCksICRzaXplPTMsICRhZGR0dGV4dD0nJywgJG11bHRpcGxlID0gdHJ1ZSkKCXsKCSAgJGlkID0gY21zX2h0bWxlbnRpdGllcygkaWQpOwoJICAkbmFtZSA9IGNtc19odG1sZW50aXRpZXMoJG5hbWUpOwoJICAkc2l6ZSA9IGNtc19odG1sZW50aXRpZXMoJHNpemUpOwoJICAkbXVsdGlwbGUgPSBjbXNfaHRtbGVudGl0aWVzKCRtdWx0aXBsZSk7CgkKCQkkdGV4dCA9ICc8c2VsZWN0IG5hbWU9IicuJGlkLiRuYW1lLiciJzsKCQlpZiAoJGFkZHR0ZXh0ICE9ICcnKQoJCXsKCQkJJHRleHQgLj0gJyAnIC4gJGFkZHR0ZXh0OwoJCX0KCQlpZiggJG11bHRpcGxlICkKCQkgIHsKCQkJJHRleHQgLj0gJyBtdWx0aXBsZT0ibXVsdGlwbGUiICc7CgkJICB9CgkJICAKCQkgIGlmICgkc2l6ZSA+IDEpCgkJICB7CgkJICAJJHRleHQgLj0gJyBzaXplPSInLiRzaXplLiciJzsKCQkgIH0KCQkKCQkkdGV4dCAuPSAnPic7CgkJCgkJJGNvdW50ID0gMDsKCQlmb3JlYWNoICgkaXRlbXMgYXMgJGtleT0+JHZhbHVlKQoJCXsKCQkgIAlpZiAoaXNfYXJyYXkoJHZhbHVlKSkKCQkgCXsKCQkJCSRhcnJheSA9IGFycmF5X3NoaWZ0KCR2YWx1ZSk7CgkJCQkka2V5ID0gaW1wbG9kZSgnfCcsYXJyYXlfa2V5cygkYXJyYXkpKTsKCQkJCSR2YWx1ZSA9IGltcGxvZGUoJ3wnLCAkYXJyYXkpOwoJCQl9CgkJCQoJCQkkdmFsdWUgPSBjbXNfaHRtbGVudGl0aWVzKCR2YWx1ZSk7CgkKCQkJJHRleHQgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIic7CgkJCWlmIChpbl9hcnJheSgka2V5LCAkc2VsZWN0ZWRpdGVtcykpCgkJCXsKCQkJCSR0ZXh0IC49ICcgJyAuICdzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKCQkJfQoJCQkkdGV4dCAuPSAnPic7CgkJCSR0ZXh0IC49ICR2YWx1ZTsKCQkJJHRleHQgLj0gJzwvb3B0aW9uPic7CgkJCSRjb3VudCsrOwoJCX0KCQkkdGV4dCAuPSAnPC9zZWxlY3Q+Jy4iXG4iOwoJCgkJcmV0dXJuICR0ZXh0OwoJfQoJCglmdW5jdGlvbiB0ZW1wKCkKCXsKCQkkd2lkZ2V0WydsYWJlbCddID0gJHRoaXMtPmxhbmcoJ2Zvcm1fJy4kbmFtZSk7CgkJJHdpZGdldFsndmFsdWUnXSA9ICcnOwoJCQoJCXN3aXRjaCgkdHlwZSkKCQl7CgkJCWNhc2UgJ3RleHQnOgoJCQkJJHdpZGdldFsndmFsdWUnXSA9IGlzc2V0KCRwYXJhbXNbJG5hbWVdKT8kcGFyYW1zWyRuYW1lXTppc3NldCgkc2V0dGluZ3NbJ2RlZmF1bHRfdmFsdWUnXSk/JHNldHRpbmdzWydkZWZhdWx0X3ZhbHVlJ106Jyc7CgkJCQkkd2lkZ2V0WydpbnB1dCddID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkZm9ybV9pZCwgJG5hbWUsICR3aWRnZXRbJ3ZhbHVlJ10sIGlzc2V0KCRzZXR0aW5nc1snc2l6ZSddKT8kc2V0dGluZ3NbJ3NpemUnXTo4MCk7CgkJCQlicmVhazsKCQl9CgkJCgkJJGZvcm1bJG5hbWVdID0gJHdpZGdldDsKCQlyZXR1cm4gJGZvcm07Cgl9CgkKCQoJLyoKCXB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQoJewoJCXJldHVybiAkdGhpcy0+ZXJyb3JzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2hvd0Vycm9ycygpCgl7CgkJJGh0bWwgPSAnJzsKCQlpZiAoY291bnQoJHRoaXMtPmVycm9ycykpCgkJewoJCQkkaHRtbCAuPSAnPHVsPic7CgkJCWZvcmVhY2goJHRoaXMtPmVycm9ycyBhcyAka2V5ID0+ICR2YWx1ZSkKCQkJewoJCQkJJGh0bWwgLj0gJzxsaT48c3Ryb25nPicuJGtleS4nOjwvc3Ryb25nPiAnLiR2YWx1ZS4nPC9saT4nOwoJCQl9CgkJCSRodG1sIC49ICc8L3VsPic7CgkJfQoJCXJldHVybiAkaHRtbDsKCX0KCSovCgkKCXB1YmxpYyBmdW5jdGlvbiBoYXNFcnJvcnMoKQoJewoJCWlmIChjb3VudCgkdGhpcy0+Zm9ybV9lcnJvcnMpID09IDApCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gbm9FcnJvcigpCgl7CgkJcmV0dXJuICEkdGhpcy0+aGFzRXJyb3JzKCk7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQoJewoJCXJldHVybiAkdGhpcy0+Zm9ybV9lcnJvcnM7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBzaG93RXJyb3JzKCkKCXsKCQkkaHRtbCA9ICcnOwoJCWlmKGNvdW50KCR0aGlzLT5mb3JtX2Vycm9ycykgPiAwKQoJCXsKCQkJJGh0bWwgLj0gJzx1bCBjbGFzcz0iZm9ybV93aWRnZXRfZXJyb3JzIj4nOwoJCQlmb3JlYWNoKCR0aGlzLT5mb3JtX2Vycm9ycyBhcyAkcHJpb3JpdHkgPT4gJGVycm9ycykKCQkJewoJCQkJJGh0bWwgLj0gJzxsaT48ZW0gY2xhc3M9ImZvcm1fd2lkZ2V0X2Vycm9yX3ByaW9yaXR5Ij4nLiRwcmlvcml0eS4nPC9lbT48dWw+JzsKCQkJCWZvcmVhY2goJGVycm9ycyBhcyAkZXJyb3IpCgkJCQl7CgkJCQkJJGh0bWwgLj0gJzxsaSBjbGFzcz0iZm9ybV93aWRnZXRfZXJyb3JfbWVzc2FnZSI+Jy4kZXJyb3IuJzwvbGk+JzsKCQkJCX0JCQkJCgkJCQkkaHRtbCAuPSAnPC91bD48L2xpPic7CgkJCX0KCQkJJGh0bWwgLj0gJzwvdWw+JzsKCQl9CgkJcmV0dXJuICRodG1sOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0RXJyb3IoJG1lc3NhZ2UsJHByaW9yaXR5PSdkZWZhdWx0JykKCXsKCQkkdGhpcy0+Zm9ybV9lcnJvcnNbJHByaW9yaXR5XVtdID0gJG1lc3NhZ2U7Cgl9CgkKfQoK]]></data>
	</file>
</module>
