<?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>Mmmfs</name>
	<version>1.2.0</version>
  <mincmsversion>1.10.0</mincmsversion>
	<help><![CDATA[PHVsPjxsaT5wcm9vZiBvZiBjb25jZXB0IDogPGEgaHJlZj0naHR0cDovL21tbWZzLmZ1cmllLmJlLycgdGFyZ2V0PSdfYmxhbmsnPmh0dHA6Ly9tbW1mcy5mdXJpZS5iZS88L2E+PC9saT4NCgkJCQk8bGk+d2lraSA6IDxhIGhyZWY9J2h0dHA6Ly93d3cuZnVyaWUuYmUvd2lraS8nIHRhcmdldD0nX2JsYW5rJz5odHRwOi8vd3d3LmZ1cmllLmJlL3dpa2kvPC9hPjwvbGk+PC91bD48aDM+UGFyYW0mZWdyYXZlO3RyZXM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbSZlZ3JhdmU7dHJlIHV0aWxpcyZlYWN1dGU7IHBvdXIgc3AmZWFjdXRlO2NpZmllciBkYW5zIHF1ZWxsZSBsYW5ndWUgYWZmaWNoZXIgbGUgbW9kdWxlIGRhbnMgbGEgcGFydGllIHB1YmxpcXVlLiBDZSBwYXJhbSZlZ3JhdmU7dHJlIG4mIzAzOTtlc3QgcGFzIHN1cHBvcnQmZWFjdXRlOyBvdSB1dGlsZSBwb3VyIHRvdXMgbGVzIG1vZHVsZXMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0ZXVyJm5ic3A7OiBLZXZpbiBEYW5lemlzIChha2EgQmVzcykgJmx0O2NvbnRhY3RAZnVyaWUuYmUmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbiA6IDEuMi4wPGJyIC8+PGJyIC8+SGlzdG9yaXF1ZSBkZXMgY2hhbmdlbWVudHMmbmJzcDs6PGJyIC8+PHA+c2VlIGNoYW5nZWxvZyA6IDxhIGhyZWY9J2h0dHA6Ly93d3cuZnVyaWUuYmUvd2lraS8nIHRhcmdldD0nX2JsYW5rJz5odHRwOi8vd3d3LmZ1cmllLmJlL3dpa2kvPC9hPjwvcD48YnIgLz4=]]></about>
	<description><![CDATA[N/A]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/class/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/class/class.cache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGEgY2xhc3NlIHF1aSBn6HJlIGxlIGNhY2hlIGRlIG1tbWZzDQogKiANCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQoNCg0KLyoqDQogKiBHZXN0aW9uIGQndW4gbWluaSBjYWNoZSBpbnRlcm5lDQogKg0KICogIENsYXNzIHN0YXRpYyBn6XJhbnQgdG91dGUgbGEgcGFydGllIGNhY2hlIGRlcyBhY2PocyDgIGxhIGJhc2UgZGUgZG9ubullLiANCiAqCVV0aWxpc+llIHBvdXIg6XZpdGVyIGRlIHRyb3Agbm9tYnJldXggYXBwZWxzIGVuIGJhc2Ugc3VyIGxlcyBsaXN0aW5nIGQnZW50aXTpIGNoYXJn6WVzDQogKiAgRXhlbXBsZSA6IA0KICogIDxjb2RlPg0KICogIAkvL0FwcGVsIOAgY21zbXMgcG91ciBy6WN1cOlyZXIgbGUgY29ubmVjdGV1ciBkZSBiZGQNCiAqICAJJGdDbXMgPSBjbXNtcygpOw0KICogIAkkZGIgPSAkZ0Ntcy0+R2V0RGIoKTsNCiAqICAJDQogKiAgCS8vROlmaW5pdGlvbiBkJ3VuZSBlbnRpdOkgY2xpZW50DQogKiAgCSRlbnRpdHkgPSBuZXcgQ2xpZW50KCk7DQogKiAgCQ0KICogIAkvL1NlbGVjdGlvbiBkZSB0b3VzIGxlcyBjbGllbnRzDQogKiAgCSRxdWVyeVNlbGVjdCA9ICdTZWxlY3QgKiBGUk9NICcuJGVudGl0eS0+Z2V0RGJuYW1lKCk7DQogKiAgCQ0KICogIAkvL1NpIHJlcXXqdGUgcHLpY+lkZW1lbnQgZXhlY3V06WUgOiBvbiByZXRvdXJuZSBkaXJlY3RlbWVudCBkdSBjYWNoZSBsZSBy6XN1bHRhdA0KICogIAlpZihDYWNoZTo6aXNDYWNoZSgkcXVlcnlTZWxlY3QpKQ0KICogIAl7DQogKiAgCQlyZXR1cm4gQ2FjaGU6OmdldENhY2hlKCRxdWVyeVNlbGVjdCk7DQogKiAgCX0NCiAqICAJDQogKiAgCS8vT24gZXhlY3V0ZSBsYSByZXF16nRlDQogKiAgCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U2VsZWN0KTsNCiAqICAJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yISIpO30NCiAqICAJDQogKiAgCSRlbnRpdHlzID0gYXJyYXkoKTsNCiAqICAJd2hpbGUgKCRyb3cgPSAkcmVzdWx0LT5GZXRjaFJvdygpKQ0KICogIAl7DQogKiAgCQkkZW50aXR5c1tdID0gQ29yZTo6cm93VG9FbnRpdHkoJGVudGl0eSwgJHJvdyk7DQogKiAgCX0NCiAqICAJDQogKiAgCS8vT24gcmVwb3Vzc2UgZGFucyBsZSBjYWNoZSBsZSBy6XN1bHRhdCBwb3VyIHVuIHByb2NoYWluIHBhc3NhZ2UNCiAqICAJQ2FjaGU6OnNldENhY2hlKCRxdWVyeVNlbGVjdCwgbnVsbCwgJGVudGl0eXMpOw0KICogIAlyZXR1cm4gJGVudGl0eXM7DQogKgk8L2NvZGU+DQogKg0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KZmluYWwgY2xhc3MgQ2FjaGUgDQp7CQ0KCS8qKg0KCSAqIFZhcmlhYmxlIGNvbnRlbmFudCBsJ2Vuc2VtYmxlIGRlcyBy6XN1bHRhdHMgZGVzIHJlcXXqdGVzIHBhc3PpZXMNCgkgKiovDQoJcHJpdmF0ZSBzdGF0aWMgJGNhY2hlOw0KCQkNCgkvKioNCgkgKiBDb25zdHJ1Y3RldXIgcHJpdukNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQ0KCQkJDQoJLyoqDQoJICoJROlmaW5pdCBsZSBjYWNoZSBwb3VyIHVuZSByZXF16nRlIGRvbm7pZSwgdW5lIGxpc3RlIGRlIHBhcmFt6HRyZSBldCDpdmlkZW1lbnQgbGUgculzdWx0YXQgb2J0ZW51DQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyBsYSByZXF16nRlIHNxbA0KCSAqIEBwYXJhbSBhcnJheSBsYSBsaXN0ZSBkZXMgcGFyYW3odHJlcyBkYW5zIHVuIHRhYmxlYXUgb3UgbnVsbA0KCSAqIEBwYXJhbSBvYmplY3QgbGEgdmFsZXVyIOAgbeltb3Jpc2VyIChhcnJheSBvdSBzdHJpbmcgb3UgaW50ZWdlciBvdSAuLi4pDQoJICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBzZXRDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCwgJHZhbHVlKQ0KCXsJCQ0KCQlpZighaXNzZXQoc2VsZjo6JGNhY2hlKSkNCgkJew0KCQkJc2VsZjo6JGNhY2hlID0gYXJyYXkoKTsNCgkJfQ0KCQkNCgkJc2VsZjo6JGNhY2hlW0NhY2hlOjpoYXNoKCRzcWwsJHBhcmFtcyldID0gJHZhbHVlOw0KCQkNCgl9DQoJDQoJLyoqDQoJICogRGVtYW5kZSBsZSBjYWNoZSBwb3VyIHVuZSByZXF1ZXRlIGRvbm7pZSBldCB1bmUgbGlzdGUgZGUgcGFyYW3odHJlDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyBsYSByZXF16nRlIHNxbA0KCSAqIEBwYXJhbSBhcnJheSBsYSBsaXN0ZSBkZXMgcGFyYW3odHJlcyBkYW5zIHVuIHRhYmxlYXUgb3UgbnVsbA0KCSAqIEByZXR1cm4gb2JqZWN0IGxhIHZhbGV1ciBjb250ZW51IGRhbnMgbGUgY2FjaGUgKGFycmF5IG91IHN0cmluZyBvdSBpbnRlZ2VyIG91IC4uLikNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKQ0KCXsNCgkJaWYoQ2FjaGU6OmlzQ2FjaGUoJHNxbCwgJHBhcmFtcykpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokY2FjaGVbQ2FjaGU6Omhhc2goJHNxbCwkcGFyYW1zKV07DQoJCX0NCgkJDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIFJlbnZvaSB2cmFpIHNpIHVuIGNhY2hlIGV4aXN0ZSBwb3VyIHVuZSByZXF16nRlIGV0IHVuZSBsaXN0ZSBkZSBwYXJhbeh0cmUNCiAgICAgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGxhIHJlcXXqdGUgc3FsDQoJICogQHBhcmFtIGFycmF5IGxhIGxpc3RlIGRlcyBwYXJhbeh0cmVzIGRhbnMgdW4gdGFibGVhdSBvdSBudWxsDQoJICogQHJldHVybiBib29sZWFuIHZyYWkgc2kgdW4gY2FjaGUgZXhpc3RlDQoJICovCQ0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gaXNDYWNoZSgkc3FsLCAkcGFyYW1zID0gbnVsbCkNCgl7DQoJCXJldHVybiBpc3NldChzZWxmOjokY2FjaGUpICYmIGFycmF5X0tFWV9leGlzdHMoQ2FjaGU6Omhhc2goJHNxbCwkcGFyYW1zKSxzZWxmOjokY2FjaGUpOw0KCX0NCg0KCS8qKg0KCSAqIFZpZGUgbGUgY2FjaGUuIEluZGlzcGVuc2FibGUgc2kgZW50cmUgZGVzIGxlY3R1cmVzIGRlIGRvbm7pZSB1bmUgbWlzZSDgIGpvdXIgZXN0IGZhaXRlIHBhciBsZSB0cmFpdGVtZW50Lg0KCSAqICBQYXIgc+ljdXJpdOkgbGUgcHJvY2Vzc3VzIHZpZGUgaW506WdyYWxlbWVudCBsZSBjYWNoZQ0KCSAqLwkNCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGNsZWFyQ2FjaGUoKQ0KCXsNCgkJdW5zZXQoc2VsZjo6JGNhY2hlKTsNCgl9DQoNCgkvKioNCgkgKiBSZXRvdXJuZSB1bmUgc2lnbmF0dXJlIHVuaXF1ZSBkZSBsYSBjb21iaW5haXNvbiBkZSBsYSByZXF16nRlIFNRTCBldCBkZSBsYSBsaXN0ZSBkZXMgcGFyYW3odHJlcy4NCgkgKiAgbGUgSGFzaCBn6W7pcukgZXN0IHV0aWxpc+kgZGFucyBsYSBjbGFzcyBwb3VyIHLpY3Vw6XJlciBvdSBwb3VyIGTpZmluaXIgbGUgY2FjaGUuDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyBsYSByZXF16nRlIHNxbA0KCSAqIEBwYXJhbSBhcnJheSBsYSBsaXN0ZSBkZXMgcGFyYW3odHJlcyBkYW5zIHVuIHRhYmxlYXUgb3UgbnVsbA0KCSAqIEByZXR1cm4gc3RyaW5nIGxlIGhhc2hhZ2UNCgkgKi8JDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBoYXNoKCRzcWwsICRwYXJhbXMgPSBudWxsKQ0KCXsNCgkJaWYoJHBhcmFtcyA9PSBudWxsKQ0KCQl7cmV0dXJuIG1kNSgkc3FsKTt9DQoJCQ0KCQkkcCA9IHByaW50X3IoJHBhcmFtcywgdHJ1ZSk7DQoNCgkJcmV0dXJuIG1kNSgkc3FsLiRwKTsNCgl9DQoNCgkJDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.core.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogTm95YXUgZHUgZnJhbWV3b3JrDQogKiANCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQogDQovKioNCiogTGlicmFpcmllIGRlIGZvbmN0aW9uIHBvdXIgbGUgZnJhbWV3b3JrDQoqIA0KKiBDb3JlIGVzdCBsYSBjbGFzc2UgcXVpIGZhaXQgbCdpbnRlcmZhY2UgZW50cmUgbGVzIG3pdGhvZGVzIG5hdGl2ZXMgZGUgQ21zTWFkZVNpbXBsZSBldCBsZXMgYmVzb2lucyBjb21tdW5zDQoqICBkYW5zIGxlcyBtb2R1bGVzIHV0aWxpc2FudCBsZSBmcmFtZXdvcmsuIA0KKiANCiogQHBhY2thZ2UgbW1tZnMNCiovDQpjbGFzcyBDb3JlIA0KewkNCiAgICAvKioNCiAgICAqIENvbnN0cnVjdGV1ciBwcm90ZWN0ZWQsIHBldXQg6nRyZSBzdXJjaGFyZ+kgcGFyIHVuZSBhdXRyZSBjbGFzc2UuDQogICAgKiAJCQ0KICAgICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30NCgkJCQ0KICAgIC8qKg0KICAgICogVHJhbnNmb3JtZSBsZXMgaW5mb3JtYXRpb25zIGQndW5lIGVudGl06SBlbiB1bmUgc+lyaWUgZGUgY29tbWFuZGUgdXRpbGlzYWJsZSBwYXIgYWRvZGIgKGxlIG1vdGV1ciBiZGQgZGUgY21zbWFkZXNpbXBsZSkNCiAgICAqICAgICAgICAgDQogICAgKiBAcGFyYW0gRW50aXR5IGwnZW50aXTpIA0KICAgICogQHJldHVybiBsYSBjaGFpbmUg4CBkZXN0aW5hdGlvbiBkJ2Fkb2RiLg0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZXRGaWVsZHNUb0hxbChFbnRpdHkgJiRlbnRpdHkpDQoJewkJDQoJCSRocWwgPSAnJzsNCgkJDQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eS0+Z2V0RmllbGRzKCk7DQoJCQ0KICAgICAgICAvL1BvdXIgY2hhcXVlIGNoYW1wcyBjb250ZW51IGRhbnMgbCdlbnRpdOkNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpDQoJCXsNCgkJCS8vT24gbmUgY3JlZSBwYXMgbGVzIGNoYW1wcyBxdWkgc29udCBkZXMgbGlhaXNvbnMgZXh0ZXJuZXMgc3VyIGRlcyB0YWJsZXMgYXNzb2NpYXRpdmVzDQoJCQlpZigkZmllbGQtPmlzQXNzb2NpYXRlS0VZKCkpDQoJCQkJY29udGludWU7DQoJCQ0KCQkJaWYoIWVtcHR5KCRocWwpKQ0KCQkJew0KCQkJCSRocWwgLj0gJywnOw0KCQkJfQ0KCQkJDQoJCQkkaHFsIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nICc7DQoJCQkNCgkJCXN3aXRjaCgkZmllbGQtPmdldFR5cGUoKSkNCgkJCXsNCgkJCQljYXNlIENBU1Q6OiRTVFJJTkcgOiAkaHFsIC49ICdDJzsgDQoJCQkJCWlmKCRmaWVsZC0+Z2V0U2l6ZSgpICE9ICIiICkNCgkJCQkJeyRocWwuPSAiKCIuJGZpZWxkLT5nZXRTaXplKCkuIikiO30gYnJlYWs7DQoJCQkJDQoJCQkJY2FzZSBDQVNUOjokSU5URUdFUiA6ICRocWwgLj0gJ0knOyANCgkJCQkJaWYoJGZpZWxkLT5nZXRTaXplKCkgIT0gIiIgKQ0KCQkJCQl7JGhxbC49ICIoIi4kZmllbGQtPmdldFNpemUoKS4iKSI7fSBicmVhazsNCgkJCQkNCgkJCQljYXNlIENBU1Q6OiROVU1FUklDIDogJGhxbCAuPSAnTic7IA0KCQkJCQlpZigkZmllbGQtPmdldFNpemUoKSAhPSAiIiApDQoJCQkJCXskaHFsLj0gIigiLiRmaWVsZC0+Z2V0U2l6ZSgpLiIpIjt9IGJyZWFrOw0KCQkJCQ0KCQkJCWNhc2UgQ0FTVDo6JEJVRkZFUiA6ICRocWwgLj0gJ1gnOyBicmVhazsNCgkJCQkNCgkJCQkvL1RPRE8gOiBnZXJlciBsZXMgZGF0ZXMNCgkJCX0NCgkJCQ0KCQkJaWYoJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkNCgkJCXsNCgkJCQkkaHFsIC49ICcgS0VZJzsNCgkJCX0NCgkJCQkJCQ0KCQl9DQoJCQ0KICAgICAgICAvL1RyYWNlIGRlIGTpYnVnDQoJCVRyYWNlOjppbmZvKCRocWwpOw0KCQkNCgkJcmV0dXJuICRocWw7DQoJfQ0KICAgIC8qKg0KICAgICogQ3Lp6SB1bmUgdGFibGUgZW4gZm9uY3Rpb24gZGVzIGluZm9ybWF0aW9ucyBzdG9ja+llIGRhbnMgdW5lIGVudGl06S4gDQogICAgKiANCiAgICAqICBDcunpIOlnYWxlbWVudCBsYSBz6XF1ZW5jZSBhc3NvY2npZS4NCiAgICAqICANCiAgICAqICAgTGUgYmVzb2luIGNsYXNzaXF1ZSBlc3QgbGEgY3LpYXRpb24gZCd1bmUgdGFibGUgZGUgYmRkIOAgcGFydGlyIGQndW5lIGVudGl06Q0KICAgICogICBleGVtcGxlIHJhcGlkZSBkJ3VuZSBlbnRpdOkgQ2xpZW50IDogDQogICAgKiA8Y29kZT4NCiAgICAqIA0KICAgICogY2xhc3MgQ2xpZW50IGV4dGVuZHMgRW50aXR5DQogICAgKiB7DQogICAgKiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICAgICogICAgew0KICAgICogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJ2NsaWVudCcsICdtb25Nb2R1bGUnKTsNCiAgICAqICAgICAgICANCiAgICAqICAgICAgICAkdGhpcy0+YWRkKG5ldyBGaWVsZCgnY2xpZW50X2lkJyAgLCBDQVNUOjokSU5URUdFUixudWxsLCBudWxsLCBLRVk6OiRQSyAgICwgbnVsbCAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbmV3IG1IVE1MX0ZJRUxEX0lERU5USUZJQU5UKCkgLCBOVUxMQUJMRTo6JEZBTFNFKSk7DQogICAgKiANCiAgICAqICAgICAgICAkdGhpcy0+YWRkKG5ldyBGaWVsZCgnbm9tJyAgICAgICAgLCBDQVNUOjokU1RSSU5HICwgIDMyLCBudWxsLCBudWxsICAgICAgICAsIG51bGwgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5ldyBtSFRNTF9GSUVMRF9URVhUKCkgICAgICAgICwgTlVMTEFCTEU6OiRGQUxTRSkpOw0KICAgICogDQogICAgKiAgICAgICAgJHRoaXMtPmFkZChuZXcgRmllbGQoJ3ByZW5vbScgICAgICwgQ0FTVDo6JFNUUklORyAsICAzMiwgbnVsbCwgbnVsbCAgICAgICAgLCBudWxsICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuZXcgbUhUTUxfRklFTERfVEVYVCgpICAgICAgICAsIE5VTExBQkxFOjokRkFMU0UpKTsNCiAgICAqICAgIH0NCiAgICAqIH0NCiAgICAqIDwvY29kZT4NCiAgICAqIA0KICAgICogIExlIG1laWxsZXVyIG1veWVuIGRlIGfpbulyZXIgbGEgdGFibGUgJ2NsaWVudCcgZXN0IGRlIGZhaXJlIGFwcGVsIOAgbGEgbel0aG9kZSAgY3JlYXRlVGFibGUoKS4gDQogICAgKiANCiAgICAqIEV4ZW1wbGUNCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICRjbGllbnQgPSBuZXcgQ2xpZW50KCk7DQogICAgKiAgIENvcmU6OmNyZWF0ZVRhYmxlKCRjbGllbnQpOw0KICAgICogPC9jb2RlPg0KICAgICogDQogICAgKiAgQ2Ugc2ltcGxlIGNvZGUgdmEgYXV0b21hdGlxdWVtZW50IGNy6WVyIGxhIHRhYmxlIHNlbG9uIGxlcyBwYXJhbeh0cmVzIGTpZmluaXQgZGFucyBsJ2VudGl06SBDbGllbnQgc29pdA0KICAgICogICAgMyBjb2xvbm5lcyBkb250IDEgbnVt6XJpcXVlIGF2ZWMgdW5lIHPpcXVlbmNlIGV0IGRldXggY2hhaW5lcyBkZSBjYXJhY3TocmVzDQogICAgKiANCiAgICAqIA0KICAgICogIEEgbm90ZXIgbCdhcHBlbCDgIGxhIGZvbmN0aW9uIGluaXRUYWJsZSgpIGRlIGwnZW50aXTpLiBTaSBlbGxlIGVzdCBk6WZpbml0IA0KICAgICogICBkYW5zIGwnZW50aXTpIHBhc3PpZSBlbiBwYXJhbeh0cmUsIGNlbGEgcGVybWV0IOAgbW9pbmRyZSBjb/t0IGQnaW5pdGFsaXNlciBsYSB0YWJsZSANCiAgICAqICAgYXBy6HMgY3LpYXRpb24gYXZlYyB1biBqZXUgZGUgdmFsZXVyIHBy6WTpZmluaXQuDQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgbCdlbnRpdOkgc2VydmFudCBkZSBtb2TobGUuDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGNyZWF0ZVRhYmxlKE1tbWZzICYkbW9kdWxlLCBFbnRpdHkgJiRlbnRpdHlQYXJhbSkNCgl7DQoJCSRnQ21zID0gY21zbXMoKTsNCgkJDQoJCSRkYiA9ICRnQ21zLT5HZXREYigpOw0KCQkkdGFib3B0YXJyYXkgPSBhcnJheSggJ215c3FsJyA9PiAnRU5HSU5FPU15SVNBTScgKTsNCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7DQoNCiAgICAgICAgLy9BcHBlbCBhdXggbel0aG9kZXMgZGUgbCdBUEkgZGUgYWRvZGIgcG91ciBjcullciBlZmZlY3RpdmVtZW50IGxhIHRhYmxlLg0KCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcmU6OmdldEZpZWxkc1RvSHFsKCRlbnRpdHlQYXJhbSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJvcHRhcnJheSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KCQkkcmVzdWx0ID0gJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KCQkNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKQ0KCQl7DQoJCSAgIGVjaG8gIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsYSBjcmVhdGlvbiBkZSBsYSB0YWJsZSBwb3VyIGwnZW50aXTpICIgLiAkZW50aXR5UGFyYW0tPmdldE5hbWUoKSA7DQoJCSAgIGV4aXQ7DQoJCX0NCgkJICAgDQoJCVRyYWNlOjpkZWJ1ZygiY3JlYXRlVGFibGUgOiAiLnByaW50X3IoJHNxbGFycmF5KSk7DQoJCQ0KCQkvL09wdGlvbm5lbCA6IGNy6WVyYSB1bmUgc+lxdWVuY2UgYXNzb2NpZWUNCgkJaWYoJGVudGl0eVBhcmFtLT5nZXRTZXFuYW1lKCkgIT0gbnVsbCl7JGRiLT5DcmVhdGVTZXF1ZW5jZSgkZW50aXR5UGFyYW0tPmdldFNlcW5hbWUoKSk7fQ0KCQkNCgkJLy9PbiBpbml0aWFsaXNlIGxhIHRhYmxlLg0KCQkkZW50aXR5UGFyYW0tPmluaXRUYWJsZSgkbW9kdWxlKTsNCgl9DQoJCQ0KICAgIA0KICAgIC8qKg0KICAgICogU3VwcHJpbWUgdW5lIHRhYmxlIGRlIGxhIGJhc2UgZGUgZG9ubullDQogICAgKiANCiAgICAqIExhIGZvbmN0aW9uIHLpY3Vw6HJlIGxlIG5vbSBkZSBsYSB0YWJsZSDgIHN1cHByaW1lciBkZXB1aXMgbGUgbW9k6GxlDQogICAgKiAgICBkZSBsJ2VudGl06SBldCBlZmZlY3R1ZSB1biAiZHJvcCB0YWJsZSIgc3FsDQogICAgKiANCiAgICAqIFN1cHByaW1lIGxhIHPpcXVlbmNlIGFzc29jaellIHNpIGVsbGUgZXhpc3RlDQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgbCdlbnRpdOkgc2VydmFudCBkZSBtb2TobGUNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZHJvcFRhYmxlKE1tbWZzICYkbW9kdWxlLCBFbnRpdHkgJiRlbnRpdHlQYXJhbSkNCgl7DQoJCSRnQ21zID0gY21zbXMoKTsNCgkJJGRiID0gJGdDbXMtPkdldERiKCk7DQoJCQ0KCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsNCgkJDQoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKSk7DQoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkJDQoJCS8vT3B0aW9ubmVsIDogc3VwcHJpbWVyYSB1bmUgc2VxdWVuY2UgYXNzb2NpZWUNCgkJaWYoJGVudGl0eVBhcmFtLT5nZXRTZXFuYW1lKCkgIT0gbnVsbCl7JGRiLT5Ecm9wU2VxdWVuY2UoJGVudGl0eVBhcmFtLT5nZXRTZXFuYW1lKCkpO30NCgl9CQ0KCQ0KICAgIC8qKg0KICAgICogRWZmZWN0dWUgdW5lIG1vZGlmaWNhdGlvbiBzdXIgbGEgdGFibGUgZGUgbCdlbnRpdOkgcGFzc+llIGVuIHBhcmFt6HRyZQ0KICAgICogDQogICAgKiAgIGV4ZW1wbGUgOiBwb3VyIGRldXggcmVxdep0ZXMgc3VyIGxhIHRhYmxlIGRlIGwnZW50aXTpIENsaWVudCA6DQogICAgKiANCiAgICAqIDxjb2RlPiAgICAgICAgDQogICAgKiAgIEFMVEVSIFRBQkxFIGAgdGFibGUgZGUgbCdlbnRpdOkgQ2xpZW50IGAgQUREIGBuZXdDb2x1bW5gIElOVCBOT1QgTlVMTCANCiAgICAqICAgQUxURVIgVEFCTEUgYCB0YWJsZSBkZSBsJ2VudGl06SBDbGllbnQgYCBEUk9QIGBvbGRDb2x1bW5gIA0KICAgICogPC9jb2RlPg0KICAgICogDQogICAgKiAgbGUgY29kZSBzZXJhIGNlbHVpIGNpIDoNCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICAgICAkY2xpZW50ID0gbmV3IENsaWVudCgpOw0KICAgICogICAgICAgQ29yZTo6YWx0ZXJUYWJsZSgkY2xpZW50LCAiQUREIGBuZXdDb2x1bW5gIElOVCBOT1QgTlVMTCIpOw0KICAgICogICAgICAgQ29yZTo6YWx0ZXJUYWJsZSgkY2xpZW50LCAiRFJPUCBgb2xkQ29sdW1uYCIpOw0KICAgICogPC9jb2RlPg0KICAgICogICANCiAgICAqIA0KICAgICogQHBhcmFtIEVudGl0eSBsJ2VudGl06SBzZXJ2YW50IGRlIG1vZOhsZQ0KICAgICogQHBhcmFtIHN0cmluZyBsYSByZXF16nRlIHNxbCDgIHBhc3Nlci4gDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGFsdGVyVGFibGUoRW50aXR5ICYkZW50aXR5UGFyYW0sICRzcWwpDQoJew0KCQkkZ0NtcyA9IGNtc21zKCk7DQoJCSRkYiA9ICRnQ21zLT5HZXREYigpOw0KCQkJCQ0KCQkkcXVlcnlBbHRlciA9ICJBTFRFUiBUQUJMRSAiLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuIiAiLiRzcWw7CQkNCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlBbHRlcik7DQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbCdhbHRlciBkZSBsYSB0YWJsZSAkZW50aXR5UGFyYW0tPmdldERibmFtZSgpISIpO30NCgl9DQoJCQ0KICAgIC8qKg0KICAgICogRWZmZWN0dWUgdW5lIHPpcmllIGQnSW5zZXJ0IGVuIGJhc2UNCiAgICAqIA0KICAgICogIExlIHNlY29uZCBwYXJhbeh0cmUgZG9pdCByZXNwZWN0ZXIgY2Ugc2No6W1hLiANCiAgICAqIA0KICAgICogRXhlbXBsZSBkJ3VuZSBpbnNlcnRpb24gZGUgMyBsaWduZXMgcG91ciB1biBjbGllbnQgKGNsaWVudF9pZCwgbm9tLCBwcmVub20pIA0KICAgICogICBhdmVjIHBy6W5vbSBmYWN1bHRhdGlmIGV0IGNsaWVudF9pZCB1bmUgY2zpIHByaW1haXJlIGF2ZWMgdW5lIHPpcXVlbmNlLg0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgICAgICR0YWJsZWF1ID0gYXJyYXkoKTsNCiAgICAqICAgICAgICR0YWJsZWF1W10gPSBhcnJheSgncHJlbm9tJz0+JycsICdub20nPT4nRHVwb250Jyk7DQogICAgKiAgICAgICAkdGFibGVhdVtdID0gYXJyYXkoJ25vbSc9PidEdXJhbnQnKTsNCiAgICAqICAgICAgICR0YWJsZWF1W10gPSBhcnJheSgncHJlbm9tJz0+J0pvaG4nLCAnbm9tJz0+J0RvZScpOw0KICAgICogDQogICAgKiAgICAgICAkY2xpZW50ID0gbmV3IENsaWVudCgpOyANCiAgICAqIA0KICAgICogICAgICAgQ29yZTo6aW5zZXJ0RW50aXR5KCRjbGllbnQsICR0YWJsZWF1KTsNCiAgICAqIDwvY29kZT4NCiAgICAqIA0KICAgICogICBOb3RleiBxdWUgZGFucyBsJ2V4ZW1wbGUgb24gbmUgcHLpY2lzZSA8Yj5KQU1BSVM8L2I+IGxhIGNs6SBwcmltYWlyZSBwb3VyIHVuZSBpbnNlcnRpb24sIGVsbGUgc2VyYSANCiAgICAqICAgICAgIGRldGVybWlu6WUgcGFyIGxlIHN5c3TobWUgbHVpIG3qbWUuIERhbnMgbGUgY2FzIG91IHZvdXMgc291aGFpdGV6IGluc+lyZXIgdm90cmUgcHJvcHJlIGlkZW50aWZpYW50LCANCiAgICAqICAgICAgIHZlaWxsZXogdG91am91cnMg4CB26XJpZmllciBxdWUgbGEgc+lxdWVuY2UgbmUgc2VyYSBwYXMgZW4gZOljYWxhZ2UgIQ0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgKiBAcGFyYW0gRW50aXR5IGwnZW50aXTpIHNlcnZhbnQgZGUgbW9k6GxlDQogICAgKiBAcGFyYW0gYXJyYXkgbGUgdGFibGVhdSBjb250ZW5hbnQgbGVzIGRvbm7pZXMg4CBpbnPpcmVyLg0KICAgICogQHJldHVybiBhcnJheSBsYSBsaXN0ZSBkZXMgSWQgY3Lp6WVzLg0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBpbnNlcnRFbnRpdHkoTW1tZnMgJiRtb2R1bGUsIEVudGl0eSAmJGVudGl0eVBhcmFtLCAkcm93cykNCgl7DQoJCSRnQ21zID0gY21zbXMoKTsNCgkJJGRiID0gJGdDbXMtPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCgkJICAgICAgICAgICAgDQoJCSRzcWxSZWFkeSA9IGZhbHNlOw0KCQkNCgkJLy9UYWJsZWF1IGRlIHJldG91ciBjb250aWVuZHJhIGxlcyBjbOlzIGNy6WVzDQoJCSRhcnJheUtFWSA9IGFycmF5KCk7DQoJCQ0KCQkkcXVlcnlJbnNlcnQgPSAnSU5TRVJUIElOVE8gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgKCVzKSB2YWx1ZXMgKCVzKSc7DQoJCQ0KCQkkc3RyMSA9ICIiOw0KCQkkc3RyMiA9ICIiOw0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkNCgkJew0KCQkNCgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkNCgkJCQljb250aW51ZTsNCgkJDQoJCQlpZighZW1wdHkoJHN0cjEpKQ0KCQkJew0KCQkJCSRzdHIxIC49ICcsJzsNCgkJCQkkc3RyMiAuPSAnLCc7DQoJCQl9DQoJCQkkc3RyMSAuPSAnICcuJGZpZWxkLT5nZXROYW1lKCkuJyAnOw0KCQkJJHN0cjIgLj0gJz8nOw0KCQl9DQoJCQ0KCQlmb3JlYWNoKCRyb3dzIGFzICRyb3cpDQoJCXsNCgkJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQkJICAgICAgICAgCQkNCgkJCS8vT24gdmVyaWZpZSBxdWUgdG91dGVzIGxlcyB2YWxldXJzIG5lY2Vzc2FpcmVzIHNvbnQgdHJhbnNtaXNlcw0KCQkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpDQoJCQl7DQoJCQkJaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKQ0KCQkJCQljb250aW51ZTsNCgkJCQkNCgkJCQkvL0NoYW1wcyB2aWRlIG1haXMgcGFzIHVuZSBjbGUgYXV0b21hdGlxdWUgZXQgbmkgdW4gY2hhbXBzIHNw6WNpYWwNCgkJCQlpZighJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSANCgkJCQkJJiYgISRmaWVsZC0+aXNOdWxsYWJsZSgpIA0KCQkJCQkmJiAoIWlzc2V0KCRyb3dbJGZpZWxkLT5nZXROYW1lKCldKSB8fCBlbXB0eSgkcm93WyRmaWVsZC0+Z2V0TmFtZSgpXSkpDQoJCQkJCSYmICEoJGZpZWxkIGluc3RhbmNlb2YgRmllbGRfU1BFKSkNCgkJCQl7DQoJCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJ2xhIHZhbGV1ciBkdSBjaGFtcHMgJy4kZmllbGQtPmdldE5hbWUoKS4nIGRlIGxhIGNsYXNzZSAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgZXN0IG1hbnF1YW50ZScpOw0KCQkJCX0NCg0KCQkJIAkvL09uIGfpbuhyZSB1bmUgbm91dmVsbGUgY2zpZiBwb3VyIHRvdXRlcyBsZXMgY2zpIHByaW1haXJlDQoJCQkJaWYoJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSAmJiBlbXB0eSgkcm93WyRmaWVsZC0+Z2V0TmFtZSgpXSkpDQoJCQkJew0KCQkJCQkvL05vdXZlbGxlIGNsZQ0KCQkJCQkkcm93WyRmaWVsZC0+Z2V0TmFtZSgpXSA9ICRkYi0+R2VuSUQoJGVudGl0eVBhcmFtLT5nZXRTZXFuYW1lKCkpOw0KCQkJCQkkYXJyYXlLRVlbXSA9ICRyb3dbJGZpZWxkLT5nZXROYW1lKCldOw0KCQkJCX0NCgkJCQkNCgkJCQkkdmFsID0gbnVsbDsNCgkJCQlpZihpc3NldCgkcm93WyRmaWVsZC0+Z2V0TmFtZSgpXSkpDQoJCQkJew0KCQkJCQkkdmFsID0gJHJvd1skZmllbGQtPmdldE5hbWUoKV07DQoJCQkJfQ0KCQkJCQ0KCQkJCSRwYXJhbXNbXSA9IENvcmU6OkZpZWxkVG9EQlZhbHVlKCR2YWwsICRmaWVsZC0+Z2V0VHlwZSgpKTsNCgkJCQkNCgkJCX0NCgkJCQ0KCQkJJHNxbFJlYWR5ID0gdHJ1ZTsNCgkJCQ0KCQkJLy9FeOljdXRpb24NCgkJCSRkYi0+ZGVidWcgPSB0cnVlOw0KCQkJDQoJCSAgICBUcmFjZTo6ZGVidWcoImluc2VydEVudGl0eSA6ICIuc3ByaW50ZigkcXVlcnlJbnNlcnQsICRzdHIxLCAkc3RyMikpOw0KCQkJDQoJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKHNwcmludGYoJHF1ZXJ5SW5zZXJ0LCAkc3RyMSwgJHN0cjIpLCAkcGFyYW1zKTsNCgkJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkNCgkJCXsNCgkJCQllY2hvIHByaW50X3IoJHBhcmFtcywgdHJ1ZSk7DQoJCQkJZWNobyAiPGJyLz48YnIvPiI7DQoJCQkJZWNobyBzcHJpbnRmKCRxdWVyeUluc2VydCwgJHN0cjEsICRzdHIyKTsNCgkJCQllY2hvICI8YnIvPjxici8+IjsNCgkJCQkvL1RPRE8gOiBy6XVzc2lyIOAgYWZmaWNoZXIgY29ycmVjdGVtZW50IGxlcyB0cmFjZXMgU1FMDQoJCQkJVHJhY2U6OmVycm9yKCRkYi0+RXJyb3JNc2coKSk7DQoJCQkJZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbCdpbnNlcnQhIi4kZGItPkVycm9yTXNnKCkpOw0KCQkJfQ0KCQkJDQoJCQlpZigkZW50aXR5UGFyYW0tPmlzSW5kZXhhYmxlKCkpDQoJCQl7CQ0KCQkJCS8vICRtb2RvcHMgPSBjbXNtcygpLT5HZXRNb2R1bGVPcGVyYXRpb25zKCk7DQoJCQkJLy8gSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kb3BzLT5HZXRTZWFyY2hNb2R1bGUoKSk7DQoJCQkJSW5kZXhpbmc6OkFkZFdvcmRzKCRtb2R1bGUtPmdldE5hbWUoKSwgQ29yZTo6U2VsZWN0QnlJZCgkZW50aXR5UGFyYW0sJGFycmF5S0VZWzBdKSk7DQoJCQl9DQoJCX0NCgkJDQoJCXJldHVybiAkYXJyYXlLRVk7DQoJCQ0KCX0NCg0KICAgIA0KICAgIC8qKg0KICAgICogIEVmZmVjdHVlIHVuZSBz6XJpZSBkJ1VwZGF0ZSBlbiBiYXNlDQogICAgKiANCiAgICAqICBMZSBzZWNvbmQgcGFyYW3odHJlIGRvaXQgcmVzcGVjdGVyIGNlIHNjaOltYS4gDQogICAgKiANCiAgICAqIEV4ZW1wbGUgZCd1bmUgbWlzZSDgIGpvdXIgZGUgMyBsaWduZXMgcG91ciB1biBjbGllbnQgKGNsaWVudF9pZCwgbm9tLCBwcmVub20pIA0KICAgICogICBhdmVjIHBy6W5vbSBmYWN1bHRhdGlmIGV0IGNsaWVudF9pZCB1bmUgY2zpIHByaW1haXJlIGF2ZWMgdW5lIHPpcXVlbmNlLg0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgICAgICR0YWJsZWF1ID0gYXJyYXkoKTsNCiAgICAqICAgICAgICR0YWJsZWF1W10gPSBhcnJheSgnY2xpZW50X2lkJz0+MSwgJ3ByZW5vbSc9Pm51bGwsICdub20nPT4nRHVwb250Jyk7ICAgIDwtLSBtZXQg4CBudWxsIGxlIGNoYW1wcyBwcmVub20NCiAgICAqICAgICAgICR0YWJsZWF1W10gPSBhcnJheSgnY2xpZW50X2lkJz0+MiwgJ25vbSc9PidEdXJhbnQnKTsgICAgICAgICAgICAgICAgICAgIDwtLSBtZXQg4CBqb3VyIHVuaXF1ZW1lbnQgbGUgbm9tDQogICAgKiAgICAgICAkdGFibGVhdVtdID0gYXJyYXkoJ2NsaWVudF9pZCc9PjMsICdwcmVub20nPT4nSm9obicsICdub20nPT4nRG9lJyk7ICAgICA8LS0gbWV0IOAgam91ciBsZXMgZGV1eCBjaGFtcHMNCiAgICAqIA0KICAgICogICAgICAgJGNsaWVudCA9IG5ldyBDbGllbnQoKTsgDQogICAgKiANCiAgICAqICAgICAgIENvcmU6OnVwZGF0ZUVudGl0eSgkY2xpZW50LCAkdGFibGVhdSk7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgbCdlbnRpdOkgc2VydmFudCBkZSBtb2TobGUNCiAgICAqIEBwYXJhbSBhcnJheSBsZSB0YWJsZWF1IGNvbnRlbmFudCBsZXMgZG9ubullcyDgIG1ldHRyZSDgIGpvdXIuDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHVwZGF0ZUVudGl0eShNbW1mcyAkbW9kdWxlLCBFbnRpdHkgJiRlbnRpdHlQYXJhbSwgYXJyYXkgJHJvd3MpDQoJew0KCQkkZ0NtcyA9IGNtc21zKCk7DQoJCSRkYiA9ICRnQ21zLT5HZXREYigpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoJCQ0KCQlmb3JlYWNoKCRyb3dzIGFzICRyb3cpDQoJCXsNCgkJCSRzdHIgPSAiIjsNCgkJCSR3aGVyZSA9ICcnOw0KCQkJJHBhcmFtcyA9IGFycmF5KCk7DQoJCQkNCgkJCS8vTmV0dG95YWdlIGRlcyBldmVudHVlbGxlcyB2YWxldXJzIHBvdXJyaWVzIHRyYW5zbWlzZXMNCgkJCWZvcmVhY2goJHJvdyBhcyAkS0VZPT4kdmFsdWUpDQoJCQl7DQoJCQkJaWYoZW1wdHkoJGxpc3RlRmllbGRbJEtFWV0pKQ0KCQkJCXsNCgkJCQkJdW5zZXQoJHJvd1skS0VZXSk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkkaGFzS0VZID0gZmFsc2U7DQoJCQkvL09uIHZlcmlmaWUgcXVlIHRvdXRlcyBsZXMgdmFsZXVycyBuZWNlc3NhaXJlcyBzb250IHRyYW5zbWlzZXMNCgkJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKQ0KCQkJew0KCQkJCS8vU2kgbGUgY2hhbXBzIHZpZGUgZXN0IHVuZSBjbGUgOiBlcnJldXINCgkJCQlpZigkZmllbGQtPmlzUHJpbWFyeUtFWSgpKQ0KCQkJCXsNCgkJCQkJaWYoZW1wdHkoJHJvd1skZmllbGQtPmdldE5hbWUoKV0pKQ0KCQkJCQl7DQoJCQkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdsXCdpZCBuXCdlc3QgcGFzIGZvdXJuaWUgOiAnLiRmaWVsZC0+Z2V0TmFtZSgpKTsNCgkJCQkJfSANCgkJCQkJDQoJCQkJCSR3aGVyZSA9ICcgV0hFUkUgJy4kZmllbGQtPmdldE5hbWUoKS4nID0gPyc7DQoJCQkJCSRoYXNLRVkgPSB0cnVlOw0KCQkJCQkkS0VZID0gJHJvd1skZmllbGQtPmdldE5hbWUoKV07DQoJCQkJCQ0KCQkJCX0NCgkJCQkNCgkJCQkvL1NpIG4nZXN0IHBhcyBk6WZpbml0IGRhbnMgbGVzIGxpZ25lcyDgIG1ldHRyZSDgIGpvdXIsIG9uIG5lIG1ldCBzaW1wbGVtZW50IHBhcyDgIGpvdXINCgkJCQlpZighaXNzZXQoJHJvd1skZmllbGQtPmdldE5hbWUoKV0pKQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCQ0KCQkJCWlmKGVtcHR5KCRyb3dbJGZpZWxkLT5nZXROYW1lKCldKSAmJiAkZmllbGQtPmlzTnVsbGFibGUoKSkNCgkJCQl7DQogICAgICAgICAgICAgICAgICAgIC8vTm90aGluZyB0byBkbw0KCQkJCX0NCgkJCQkNCgkJCQkvL0NoYW1wcyBhc3NvY2lhdGlmIDogb24gcGFzc2UNCgkJCQlpZihlbXB0eSgkcm93WyRmaWVsZC0+Z2V0TmFtZSgpXSkgJiYgJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCQ0KCQkJCWlmKCFlbXB0eSgkc3RyKSkNCgkJCQl7DQoJCQkJCSRzdHIgLj0gJywnOw0KCQkJCX0NCgkJCQkNCgkJCQkkc3RyIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nID0gPyAnOw0KCQkJCQ0KCQkJCSRwYXJhbXNbXSA9IENvcmU6OkZpZWxkVG9EQlZhbHVlKCRyb3dbJGZpZWxkLT5nZXROYW1lKCldLCAkZmllbGQtPmdldFR5cGUoKSk7DQoJCQkJDQoJCQl9DQoJCQkNCgkJCWlmKCRoYXNLRVkpDQoJCQl7DQoJCQkJJHBhcmFtc1tdID0gJEtFWTsNCgkJCX0NCgkJCQ0KDQoJCQkkcXVlcnlVcGRhdGUgPSAnVVBEQVRFICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFNFVCAnLiRzdHIuJHdoZXJlOw0KCQkJDQoJCQkvL0V4Y2VjdXRpb24NCgkJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5VXBkYXRlLCAkcGFyYW1zKTsNCgkJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbCd1cGRhdGUhIik7fQ0KCQkJDQoJCQlpZigkZW50aXR5UGFyYW0tPmlzSW5kZXhhYmxlKCkpDQoJCQl7CQ0KCQkJCS8vICRtb2RvcHMgPSBjbXNtcygpLT5HZXRNb2R1bGVPcGVyYXRpb25zKCk7DQoJCQkJLy8gSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kb3BzLT5HZXRTZWFyY2hNb2R1bGUoKSk7DQoJCQkJSW5kZXhpbmc6OlVwZGF0ZVdvcmRzKCRtb2R1bGUtPmdldE5hbWUoKSwgQ29yZTo6U2VsZWN0QnlJZCgkZW50aXR5UGFyYW0sJEtFWSkpOw0KCQkJfQ0KCQl9DQoJfQ0KCQ0KICAgIA0KICAgIC8qKg0KICAgICogRWZmZWN0dWUgdW5lIHPpcmllIGRlIERFTEVURSBkYW5zIGxhIHRhYmxlIGRlIGwnZW50aXTpDQogICAgKiAgIA0KICAgICogRXhlbXBsZSBkJ3VuZSBzdXBwcmVzc2lvbiB1bmlxdWUgOiANCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICAgICAkY2xpZW50ID0gbmV3IENsaWVudCgpOyANCiAgICAqIA0KICAgICogICAgICAgQ29yZTo6ZGVsZXRlQnlJZHMoJGNsaWVudCwgYXJyYXkoMSk7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBFeGVtcGxlIGQndW5lIHN1cHByZXNzaW9uIG11bHRpcGxlIDogDQogICAgKiANCiAgICAqIDxjb2RlPg0KICAgICogICAgICAgJHRhYmxlYXUgPSBhcnJheSgpOw0KICAgICogICAgICAgJHRhYmxlYXVbXSA9IDE7DQogICAgKiAgICAgICAkdGFibGVhdVtdID0gMjsNCiAgICAqICAgICAgICR0YWJsZWF1W10gPSAzOw0KICAgICogDQogICAgKiAgICAgICAkY2xpZW50ID0gbmV3IENsaWVudCgpOyANCiAgICAqIA0KICAgICogICAgICAgQ29yZTo6ZGVsZXRlQnlJZHMoJGNsaWVudCwgJHRhYmxlYXUpOw0KICAgICogPC9jb2RlPg0KICAgICogDQogICAgKiBAcGFyYW0gRW50aXR5IGwnZW50aXTpIHNlcnZhbnQgZGUgbW9k6GxlICAgICANCiAgICAqIEBwYXJhbSBhcnJheSB1biB0YWJsZWF1IGNvbnRlbmFudCBsZXMgaWRzIOAgc3VwcHJpbWVyDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRlbGV0ZUJ5SWRzKE1tbWZzICRtb2R1bGUsIEVudGl0eSAmJGVudGl0eVBhcmFtLCAkaWRzKQ0KCXsNCgkJJGdDbXMgPSBjbXNtcygpOw0KCQkkZGIgPSAkZ0Ntcy0+R2V0RGIoKTsNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KCQkNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpDQoJCXsNCgkJCWlmKCEkZmllbGQtPmlzUHJpbWFyeUtFWSgpKQ0KCQkJeyANCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCSR0eXBlID0gJGZpZWxkLT5nZXRUeXBlKCk7DQoJCQkkbmFtZSA9ICRmaWVsZC0+Z2V0TmFtZSgpOw0KCQl9CQ0KCQkJCQ0KCQlmb3JlYWNoKCRpZHMgYXMgJHNpZCkNCgkJew0KCQkJaWYoIWVtcHR5KCR3aGVyZSkpDQoJCQl7DQoJCQkJJHdoZXJlIC49ICcgT1IgJzsNCgkJCX0NCgkJCQ0KCQkJJHdoZXJlIC49ICRuYW1lLicgPSA/JzsNCgkJCSRwYXJhbXNbXSA9IENvcmU6OkZpZWxkVG9EQlZhbHVlKCRzaWQsICR0eXBlKTsJDQoJCX0NCgkJDQoJCQ0KCQkkcXVlcnlEZWxldGUgPSAnREVMRVRFIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgJy4kd2hlcmU7DQoJCQ0KCQkvL0V4Y2VjdXRpb24NCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlEZWxldGUsICRwYXJhbXMpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IgZHVyYW50IGxhIHN1cHByZXNzaW9uISIpO30NCgkJDQoJCWlmKCRlbnRpdHlQYXJhbS0+aXNJbmRleGFibGUoKSkNCgkJewkNCgkJCS8vICRtb2RvcHMgPSBjbXNtcygpLT5HZXRNb2R1bGVPcGVyYXRpb25zKCk7DQoJCQkvLyBpZihtZXRob2RfZXhpc3RzKCRtb2RvcHMsIkdldFNlYXJjaE1vZHVsZSIpKQ0KCQkJLy8gew0KCQkJCS8vIEluZGV4aW5nOjpzZXRTZWFyY2goJG1vZG9wcy0+R2V0U2VhcmNoTW9kdWxlKCkpOw0KCQkJLy8gfSBlbHNlDQoJCQkvLyB7DQoJCQkJLy8gZGllKCJrbyIpOw0KCQkJLy8gfQ0KCQkJZm9yZWFjaCgkaWRzIGFzICRzaWQpDQoJCQl7DQoJCQkJSW5kZXhpbmc6OkRlbGV0ZVdvcmRzKCRtb2R1bGUtPmdldE5hbWUoKSwgJGVudGl0eVBhcmFtLCAkc2lkKTsNCgkJCX0NCgkJCQ0KCQl9DQoJfQ0KCQ0KICAgIA0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbGUgbm9tYnJlIGQnb2NjdXJhbmNlIGRhbnMgbGEgdGFibGUgcmVwculzZW50YW50IGwnZW50aXTpDQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgbCdlbnRpdOkgc2VydmFudCBkZSBtb2TobGUNCiAgICAqIEByZXR1cm4gaW50IGxlIG5vbWJyZSBkJ29jY3VyYW5jZSBwculzZW50ZSBlbiB0YWJsZSAgIA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjb3VudEFsbChFbnRpdHkgJiRlbnRpdHlQYXJhbSkNCgl7DQoJCSRnQ21zID0gY21zbXMoKTsNCgkJJGRiID0gJGdDbXMtPkdldERiKCk7DQoJCQ0KCQkkcXVlcnlTZWxlY3QgPSAnU2VsZWN0IGNvdW50KCopIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KCQkNCgkJVHJhY2U6OmRlYnVnKCJjb3VudEFsbCA6ICIuJHF1ZXJ5U2VsZWN0KTsNCgkJCQ0KCQkkY29tcHRldXI9ICRkYi0+Z2V0T25lKCRxdWVyeVNlbGVjdCk7DQoJCWlmICgkY29tcHRldXIgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsYSByZXF1ZXRlIGNvdW50KCopISIpO30NCgkJDQoJCXJldHVybiAkY29tcHRldXI7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbCdpbnTpZ3JhbGl06SBkZXMgb2NjdXJlbmNlcyBkZSBsYSB0YWJsZSByZXBy6XNlbnRhbnQgbCdlbnRpdOkNCiAgICAqIA0KICAgICogQHBhcmFtIEVudGl0eSBsJ2VudGl06SBzZXJ2YW50IGRlIG1vZOhsZQ0KICAgICogQHJldHVybiBhcnJheTxFbnRpdHk+IGxhIGxpc3RlIGRlcyBFbnRpdOlzIA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBzZWxlY3RBbGwoRW50aXR5ICYkZW50aXR5UGFyYW0pDQoJew0KCQkkZ0NtcyA9IGNtc21zKCk7DQoJCSRkYiA9ICRnQ21zLT5HZXREYigpOw0KCQkNCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NlbGVjdCAqIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KCQkNCiAgICAgICAgLy9TaSBk6WrgIHBy6XNlbnQgZW4gY2FjaGUsIG9uIGxlIHJldG91cm5lIA0KCQlpZihDYWNoZTo6aXNDYWNoZSgkcXVlcnlTZWxlY3QpKQ0KCQl7DQoJCQlyZXR1cm4gQ2FjaGU6OmdldENhY2hlKCRxdWVyeVNlbGVjdCk7DQoJCX0NCgkJCQ0KCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVNlbGVjdCk7DQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbGEgcmVxdWV0ZSBwYXIgSWRzISIpO30NCgkJDQoJCSRlbnRpdHlzID0gYXJyYXkoKTsNCgkJd2hpbGUgKCRyb3cgPSAkcmVzdWx0LT5GZXRjaFJvdygpKQ0KCQl7DQoJCQkkZW50aXR5c1tdID0gQ29yZTo6cm93VG9FbnRpdHkoJGVudGl0eVBhcmFtLCAkcm93KTsNCgkJfQ0KCQkNCiAgICAgICAgLy9PbiByZXBvdXNzZSBkYW5zIGxlIGNhY2hlIGxlIHLpc3VsdGF0IGF2YW50IGRlIGxlIHJldG91cm5lciAgIA0KCQlDYWNoZTo6c2V0Q2FjaGUoJHF1ZXJ5U2VsZWN0LCBudWxsLCAkZW50aXR5cyk7DQoJCQ0KICAgICAgICByZXR1cm4gJGVudGl0eXM7DQoJfQ0KCQ0KICAgIA0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbCdlbnRpdOkgdHJvdXbpZSBlbiBiYXNlIOAgcGFydGlyIGRlIHNvbiBJZA0KICAgICogDQogICAgKiBAcGFyYW0gRW50aXR5IGwnZW50aXTpIHNlcnZhbnQgZGUgbW9k6GxlICANCiAgICAqIEBwYXJhbSBpbnQgbCdJZCByZWNoZXJjaOkNCiAgICAqIEByZXR1cm4gRW50aXR5IGwnZW50aXTpIGF5YW50IGwnSWQgcGFzc+kgZW4gcGFyYW3odHJlIG91IG51bGwNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gc2VsZWN0QnlJZChFbnRpdHkgJiRlbnRpdHlQYXJhbSwkaWQpDQoJew0KCQkkbGlzdGUgPSBDb3JlOjpzZWxlY3RCeUlkcygkZW50aXR5UGFyYW0sIGFycmF5KCRpZCkpOw0KICAgICAgICANCiAgICAgICAgaWYoIWlzc2V0KCRsaXN0ZVswXSkpDQogICAgICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgICAgDQoJCXJldHVybiAkbGlzdGVbMF07DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbGEgbGlzdGUgZGVzIGVudGl06XMgdHJvdXbpZXMgZW4gYmFzZSDgIHBhcnRpciBkZSBsZXVyIElkcw0KICAgICogDQogICAgKiBAcGFyYW0gRW50aXR5IGwnZW50aXTpIHNlcnZhbnQgZGUgbW9k6GxlICANCiAgICAqIEBwYXJhbSBhcnJheSBsZSB0YWJsZWF1IGNvbnRlbmFudCBsZXMgSWRzIHJlY2hlcmNo6XMNCiAgICAqIEByZXR1cm4gYXJyYXk8RW50aXR5PiB1biB0YWJsZWF1IGNvbnRlbmFudCB0b3V0ZXMgbGVzIGVudGl06XMgdHJvdXbpZXMgb3UgdmlkZSBzaSBhdWN1biBy6XN1bHRhdA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBzZWxlY3RCeUlkcyhFbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGlkcykNCgl7DQoJCWlmKGNvdW50KCRpZHMpID09IDApDQoJCQlyZXR1cm4gYXJyYXkoKTsNCiAgICAgICAgDQoJCSRnQ21zID0gY21zbXMoKTsNCgkJJGRiID0gJGdDbXMtPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCgkJDQoJCSR3aGVyZSA9ICIiOw0KCQkJCQ0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkNCgkJew0KCQkNCgkJCWlmKCEkZmllbGQtPmlzUHJpbWFyeUtFWSgpKQ0KCQkJeyANCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCQ0KCQkJZm9yZWFjaCgkaWRzIGFzICRpZCkNCgkJCXsNCgkJCQ0KCQkJCWlmKCFlbXB0eSgkd2hlcmUpKQ0KCQkJCXsNCgkJCQkJJHdoZXJlIC49ICcgT1IgJzsNCgkJCQl9DQoJCQkJCQkJDQoJCQkJJHdoZXJlIC49ICRmaWVsZC0+Z2V0TmFtZSgpLicgPSA/JzsNCgkJCQkNCgkJCQkkcGFyYW1zW10gPSBDb3JlOjpGaWVsZFRvREJWYWx1ZSgkaWQsICRmaWVsZC0+Z2V0VHlwZSgpKTsNCgkJCX0NCgkJfQ0KCQkNCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NlbGVjdCAqIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgJy4kd2hlcmU7DQoJCQ0KICAgICAgICAvL1NpIGTpauAgcHLpc2VudCBlbiBjYWNoZSwgb24gbGUgcmV0b3VybmUNCgkJaWYoQ2FjaGU6OmlzQ2FjaGUoJHF1ZXJ5U2VsZWN0LCRwYXJhbXMpKQ0KCQl7DQoJCQlyZXR1cm4gQ2FjaGU6OmdldENhY2hlKCRxdWVyeVNlbGVjdCwkcGFyYW1zKTsNCgkJfQ0KCQkNCgkJLy9FeGNlY3V0aW9uDQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U2VsZWN0LCAkcGFyYW1zKTsNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsYSByZXF1ZXRlIHBhciBJZHMhIik7fQ0KCQkNCgkJJGVudGl0eXMgPSBhcnJheSgpOw0KCQl3aGlsZSAoJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpDQoJCXsNCgkJCSRlbnRpdHlzW10gPSBDb3JlOjpyb3dUb0VudGl0eSgkZW50aXR5UGFyYW0sICRyb3cpOw0KCQl9DQogICAgICAgIA0KICAgICAgICAvL09uIHJlcG91c3NlIGRhbnMgbGUgY2FjaGUgbGUgculzdWx0YXQgYXZhbnQgZGUgbGUgcmV0b3VybmVyDQoJCUNhY2hlOjpzZXRDYWNoZSgkcXVlcnlTZWxlY3QsJHBhcmFtcywgJGVudGl0eXMpOw0KICAgICAgICANCgkJcmV0dXJuICRlbnRpdHlzOw0KCQkNCgl9DQoJDQogICAgLyoqDQogICAgKiAgUGVybWV0IGRlIHJlY2hlcmNoZXIgdW5lIGxpc3RlIGQnZW50aXTpIOAgcGFydGlyIGQndW5lIHPpcmllIGRlIGNyaXTocmUgZGUgc2VsZWN0aW9uIA0KICAgICogDQogICAgKiBFeGVtcGxlIDogcmVjaGVyY2hlciBsZXMgY2xpZW50cyBwculub21t6SAnUm9nZXInIChjYXNzZSBpbnNlbnNpYmxlKQ0KICAgICogDQogICAgKiAgPGNvZGU+DQogICAgKiAgICAgICAkY2xpZW50ID0gbmV3IENsaWVudCgpOw0KICAgICogDQogICAgKiAgICAgICAkZXhlbXBsZSA9IG5ldyBFeGVtcGxlKCk7DQogICAgKiAgICAgICAkZXhlbXBsZS0+YWRkQ3JpdGVyZSgncHJlbm9tJywgVHlwZUNyaXRlcmU6OiRFUSwgYXJyYXkoJ3JvZ2VyJyksIHRydWUpOw0KICAgICogDQogICAgKiAgICAgICBDb3JlOjpzZWxlY3RCeUV4ZW1wbGUoJGNsaWVudCwgJGV4ZW1wbGUpOw0KICAgICogPC9jb2RlPg0KICAgICogDQogICAgKiAgRXhlbXBsZSA6IHJlY2hlcmNoZXIgbGVzIGNsaWVudHMgYXlhbnQgdW4gSWRzID49IDkwIA0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgICAgICRjbGllbnQgPSBuZXcgQ2xpZW50KCk7DQogICAgKiANCiAgICAqICAgICAgICRleGVtcGxlID0gbmV3IEV4ZW1wbGUoKTsNCiAgICAqICAgICAgICRleGVtcGxlLT5hZGRDcml0ZXJlKCdjbGllbnRfaWQnLCBUeXBlQ3JpdGVyZTo6JEdURSwgYXJyYXkoOTApKTsNCiAgICAqIA0KICAgICogICAgICAgQ29yZTo6c2VsZWN0QnlFeGVtcGxlKCRjbGllbnQsICRleGVtcGxlKTsNCiAgICAqIDwvY29kZT4NCiAgICAqIA0KICAgICogTk9URSA6IEVRID0+IDxiPkVRPC9iPnVhbHMsIEdURSA9PiA8Yj5HPC9iPnJlYXRlciA8Yj5UPC9iPmhhbiBvciA8Yj5FPC9iPnF1YWxzIChzdXDpcmlldXIgb3Ug6WdhbCDgKQ0KICAgICogDQoJKiBOT1RFIDIgOiBMZXMgY3JpdOhyZXMgcydham91dGVudCBzYW5zIHNvdWNpcyBwb3VyIGN1bXVsZXIgbGVzIGNvbmRpdGlvbnMgZGUgcmVjaGVyY2hlDQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgbCdlbnRpdOkgc2VydmFudCBkZSBtb2TobGUgDQogICAgKiBAcGFyYW0gRXhlbXBsZSBsJ09iamV0IEV4ZW1wbGUgcHLpYWxhYmxlbWVudCByZW1wbGlzDQogICAgKiANCiAgICAqIEBzZWUgRXhlbXBsZQ0KICAgICogQHNlZSBUeXBlQ3JpdGVyZQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBzZWxlY3RCeUV4ZW1wbGUoRW50aXR5ICYkZW50aXR5UGFyYW0sIEV4ZW1wbGUgJGV4ZW1wbGUpDQoJew0KCQkkZ0NtcyA9IGNtc21zKCk7DQoJCSRkYiA9ICRnQ21zLT5HZXREYigpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoJCQ0KCQkkY3JpdGVyZXMgPSAkZXhlbXBsZS0+Z2V0Q3JpdGVyZXMoKTsNCgkJJHNlbGVjdCA9ICJzZWxlY3QgKiBmcm9tICIuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsNCgkJJGhxbCA9ICIiOw0KCQkkcGFyYW1zID0gYXJyYXkoKTsNCgkJLy8JZGllKCJzcHAsIi5jb3VudCgkY3JpdGVyZXMpKTsNCgkJZm9yZWFjaCgkY3JpdGVyZXMgYXMgJGNyaXRlcmUpDQoJCXsNCgkJCWlmKCFlbXB0eSgkaHFsKSkNCgkJCXsNCgkJCQkkaHFsIC49ICcgQU5EICc7DQoJCQl9DQoJCQkNCgkJCWlmKGVtcHR5KCRocWwpKQ0KCQkJew0KCQkJCSRocWwgLj0gJyBXSEVSRSAnOw0KCQkJfQ0KCQkJDQogICAgICAgICAgICAvL0NyaXTocmVzIGF2ZWMgMSBzZXVsIHBhcmFt6HRyZQ0KCQkJaWYoJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokRVEgfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokTkVRIA0KCQkJCXx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JEdUIHx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JEdURSANCgkJCQl8fCAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRMVCB8fCAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRMVEUgDQoJCQkJfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokQkVGT1JFIHx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JEFGVEVSDQoJCQkJfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokTElLRSB8fCAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiROTElLRSkNCgkJCXsJDQoJCQkJJHZhbCA9ICRjcml0ZXJlLT5wYXJhbXNDcml0ZXJlWzBdOw0KCQkJCQ0KCQkJCWlmKCRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JExJS0UgfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokTkxJS0UpDQoJCQkJew0KCQkJCQkkdmFsLj0gJyUnOw0KCQkJCX0NCgkJCQkNCgkJCQkkcGFyYW1zW10gPSBDb3JlOjpGaWVsZFRvREJWYWx1ZSgkdmFsLCAkbGlzdGVGaWVsZFskY3JpdGVyZS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpKTsgDQoJCQkJJGhxbCAuPSAkY3JpdGVyZS0+ZmllbGRuYW1lLiRjcml0ZXJlLT50eXBlQ3JpdGVyZS4nID8gJzsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCQ0KICAgICAgICAgICAgLy9TYW5zIHBhcmFt6HRyZXMNCgkJCWlmKCRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JE5VTEwgfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokTk5VTEwpDQoJCQl7CQ0KCQkJCSRocWwgLj0gJGNyaXRlcmUtPmZpZWxkbmFtZS4kY3JpdGVyZS0+dHlwZUNyaXRlcmU7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQkNCiAgICAgICAgICAgIC8vZGV1eCBwYXJhbeh0cmVzDQoJCQlpZigkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRCRVRXRUVOKQ0KCQkJewkNCgkJCQkkcGFyYW1zW10gPSBDb3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyZS0+cGFyYW1zQ3JpdGVyZVswXSwgJGxpc3RlRmllbGRbJGNyaXRlcmUtPmZpZWxkbmFtZV0tPmdldFR5cGUoKSk7IA0KCQkJCSRwYXJhbXNbXSA9IENvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJlLT5wYXJhbXNDcml0ZXJlWzFdLCAkbGlzdGVGaWVsZFskY3JpdGVyZS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpKTsgDQoJCQkJJGhxbCAuPSAkY3JpdGVyZS0+ZmllbGRuYW1lLiRjcml0ZXJlLT50eXBlQ3JpdGVyZS4nID8gQU5EID8nOw0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQkJDQogICAgICAgICAgICAvLyBOIHBhcmFt6HRyZXMNCgkJCWlmKCRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JElOIHx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JE5JTikNCgkJCXsNCgkJCQkkaHFsIC49ICcgKCAnOw0KCQkJCSRzZWNvbmQgPSBmYWxzZTsgDQoJCQkJZm9yZWFjaCgkY3JpdGVyZS0+cGFyYW1zQ3JpdGVyZSBhcyAkcGFyYW0pDQoJCQkJew0KCQkJCQlpZigkc2Vjb25kKQ0KCQkJCQl7DQoJCQkJCQkkaHFsIC49ICcgT1IgJzsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkvLwllY2hvICI8YnIvPnBhcmFtIDogIi4kcGFyYW0uIiogIi4kbGlzdGVGaWVsZFskY3JpdGVyZS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpLiIgKiAiLkNvcmU6OkZpZWxkVG9EQlZhbHVlKCRwYXJhbSwgJGxpc3RlRmllbGRbJGNyaXRlcmUtPmZpZWxkbmFtZV0tPmdldFR5cGUoKSkuIjxici8+IjsNCgkJCQkJJHBhcmFtc1tdID0gQ29yZTo6RmllbGRUb0RCVmFsdWUoJHBhcmFtLCAkbGlzdGVGaWVsZFskY3JpdGVyZS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpKTsgDQoJCQkJCSRocWwgLj0gJGNyaXRlcmUtPmZpZWxkbmFtZS5UeXBlQ3JpdGVyZTo6JEVRLicgPyAnOw0KCQkJCQkNCgkJCQkJJHNlY29uZCA9IHRydWU7DQoJCQkJfQ0KCQkJCSRocWwgLj0gJyApJzsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCQ0KCQkJLy9UcmFpdGVtZW50IHNw6WNpZmlxdWUNCgkJCWlmKCRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JEVNUFRZKQ0KCQkJew0KCQkJCSRocWwgLj0gJyAoICcuJGNyaXRlcmUtPmZpZWxkbmFtZSAuJyBpcyBudWxsIHx8ICcgLiAkY3JpdGVyZS0+ZmllbGRuYW1lIC4gIj0gJycpIjsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCWlmKCRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JE5FTVBUWSkNCgkJCXsNCgkJCQkkaHFsIC49ICcgKCAnLiRjcml0ZXJlLT5maWVsZG5hbWUgLicgaXMgbm90IG51bGwgJiYgJyAuICRjcml0ZXJlLT5maWVsZG5hbWUgLiAiIT0gJycpIjsNCgkJCQljb250aW51ZTsNCgkJCX0NCgkJCSAgICAgICAgICAgICAgIA0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTGUgQ3JpdGVyZSAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgbidlc3QgcGFzIGVuY29yZSBwcmlzIGVuIGNoYXJnZSIpOw0KCQl9DQoJCSRxdWVyeUV4ZW1wbGUgPSAkc2VsZWN0LiRocWw7DQoJCQ0KCQkkZGVidWcgPSBwcmludF9yKCRwYXJhbXMsIHRydWUpOw0KCQlUcmFjZTo6aW5mbygiU2VsZWN0QnlFeGVtcGxlIDogIi4kcXVlcnlFeGVtcGxlLiIgICAiLiRkZWJ1Zyk7DQoJCQ0KCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeUV4ZW1wbGUsICRwYXJhbXMpOw0KCQkNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoJGRiLT5FcnJvck1zZygpLlRyYWNlOjplcnJvcigiRGF0YWJhc2UgZXJyb3IgZHVyYW50IGxhIHJlcXVldGUgcGFyIEV4ZW1wbGUhIikpO30NCgkJDQoJCVRyYWNlOjppbmZvKCJTZWxlY3RCeUV4ZW1wbGUgOiAiLiRyZXN1bHQtPlJlY29yZENvdW50KCkuIiByZXN1bHRhdChzKSIpOw0KCQkNCgkJJGVudGl0eXMgPSBhcnJheSgpOw0KCQl3aGlsZSAoJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpDQoJCXsNCgkJCSRlbnRpdHlzW10gPSBDb3JlOjpyb3dUb0VudGl0eSgkZW50aXR5UGFyYW0sICRyb3cpOw0KCQl9DQoJCQ0KCQkNCgkJDQoJCXJldHVybiAkZW50aXR5czsNCgkJDQoJfQ0KCQ0KICAgLyoqDQogICAgKiAgUGVybWV0IGRlIHJlY2hlcmNoZXIgdW5lIGxpc3RlIGQnZW50aXTpIOAgcGFydGlyIGQndW5lIHPpcmllIGRlIGNyaXTocmUgZGUgc2VsZWN0aW9uIA0KICAgICogICAgICAgZXQgZGUgbGVzIHN1cHByaW1lciBkZSBsYSB0YWJsZQ0KICAgICogDQogICAgKiBFeGVtcGxlIDogc3VwcHJpbWVyIGxlcyBjbGllbnRzIHBy6W5vbW3pICdSb2dlcicgKGNhc3NlIGluc2Vuc2libGUpDQogICAgKiANCiAgICAqICA8Y29kZT4NCiAgICAqICAgICAgICRjbGllbnQgPSBuZXcgQ2xpZW50KCk7DQogICAgKiANCiAgICAqICAgICAgICRleGVtcGxlID0gbmV3IEV4ZW1wbGUoKTsNCiAgICAqICAgICAgICRleGVtcGxlLT5hZGRDcml0ZXJlKCdwcmVub20nLCBUeXBlQ3JpdGVyZTo6JEVRLCBhcnJheSgncm9nZXInKSwgdHJ1ZSk7DQogICAgKiANCiAgICAqICAgICAgIENvcmU6OmRlbGV0ZUJ5RXhlbXBsZSgkY2xpZW50LCAkZXhlbXBsZSk7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBFeGVtcGxlIDogc3VwcHJpbWVyIGxlcyBjbGllbnRzIGF5YW50IHVuIElkcyA+PSA5MCANCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICAgICAkY2xpZW50ID0gbmV3IENsaWVudCgpOw0KICAgICogDQogICAgKiAgICAgICAkZXhlbXBsZSA9IG5ldyBFeGVtcGxlKCk7DQogICAgKiAgICAgICAkZXhlbXBsZS0+YWRkQ3JpdGVyZSgnY2xpZW50X2lkJywgVHlwZUNyaXRlcmU6OiRHVEUsIGFycmF5KDkwKSk7DQogICAgKiANCiAgICAqICAgICAgIENvcmU6OmRlbGV0ZUJ5RXhlbXBsZSgkY2xpZW50LCAkZXhlbXBsZSk7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqIE5PVEUgOiBFUSA9PiA8Yj5FUTwvYj51YWxzLCBHRVQgPT4gPGI+RzwvYj5yZXR0ZXIgb3IgPGI+RTwvYj5xdWFscyA8Yj5UPC9iPmhhbiAocGx1cyBncmFuZCBvdSDpZ2FsIOApDQogICAgKiANCiAgICAqIA0KICAgICogQHBhcmFtIEVudGl0eSBsJ2VudGl06SBzZXJ2YW50IGRlIG1vZOhsZSANCiAgICAqIEBwYXJhbSBFeGVtcGxlIGwnT2JqZXQgRXhlbXBsZSBwculhbGFibGVtZW50IHJlbXBsaXMNCiAgICAqIA0KICAgICogQHNlZSBFeGVtcGxlDQogICAgKiBAc2VlIFR5cGVDcml0ZXJlDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRlbGV0ZUJ5RXhlbXBsZShFbnRpdHkgJiRlbnRpdHlQYXJhbSwgRXhlbXBsZSAkRXhlbXBsZSkNCgl7DQoJCSRnQ21zID0gY21zbXMoKTsNCgkJJGRiID0gJGdDbXMtPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCgkJDQoJCSRjcml0ZXJlcyA9ICRFeGVtcGxlLT5nZXRDcml0ZXJlcygpOw0KCQkkZGVsZXRlID0gImRlbGV0ZSBmcm9tICIuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsNCgkJJGhxbCA9ICIiOw0KCQkkcGFyYW1zID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkY3JpdGVyZXMgYXMgJGNyaXRlcmUpDQoJCXsNCgkJCWlmKCFlbXB0eSgkaHFsKSkNCgkJCXsNCgkJCQkkaHFsIC49ICcgQU5EICc7DQoJCQl9DQoJCQkNCgkJCWlmKGVtcHR5KCRocWwpKQ0KCQkJew0KCQkJCSRocWwgLj0gJyBXSEVSRSAnOw0KCQkJfQ0KCQkJDQogICAgICAgICAgICAvLyAxIHBhcmFt6HRyZSAgDQoJCQlpZigkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRFUSB8fCAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRORVEgDQoJCQkJfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokR1QgfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokR1RFIA0KCQkJCXx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JExUIHx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JExURSANCgkJCQl8fCAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRCRUZPUkUgfHwgJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokQUZURVINCgkJCQl8fCAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRMSUtFIHx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JE5MSUtFKQ0KCQkJewkNCgkJCQkkcGFyYW1zW10gPSBDb3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyZS0+cGFyYW1zQ3JpdGVyZVswXSwgJGxpc3RlRmllbGRbJGNyaXRlcmUtPmZpZWxkbmFtZV0tPmdldFR5cGUoKSk7IA0KCQkJCSRocWwgLj0gJGNyaXRlcmUtPmZpZWxkbmFtZS4kY3JpdGVyZS0+dHlwZUNyaXRlcmUuJyA/ICc7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQkNCiAgICAgICAgICAgIC8vIDAgcGFyYW3odHJlDQoJCQlpZigkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiROVUxMIHx8ICRjcml0ZXJlLT50eXBlQ3JpdGVyZSA9PSBUeXBlQ3JpdGVyZTo6JE5OVUxMKQ0KCQkJewkNCgkJCQkkaHFsIC49ICRjcml0ZXJlLT5maWVsZG5hbWUuJGNyaXRlcmUtPnR5cGVDcml0ZXJlOw0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KCQkJDQogICAgICAgICAgICAvLyAyIHBhcmFt6HRyZXMgIA0KCQkJaWYoJGNyaXRlcmUtPnR5cGVDcml0ZXJlID09IFR5cGVDcml0ZXJlOjokQkVUV0VFTikNCgkJCXsJDQoJCQkJJHBhcmFtc1tdID0gQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmUtPnBhcmFtc0NyaXRlcmVbMF0sICRsaXN0ZUZpZWxkWyRjcml0ZXJlLT5maWVsZG5hbWVdLT5nZXRUeXBlKCkpOyANCgkJCQkkcGFyYW1zW10gPSBDb3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyZS0+cGFyYW1zQ3JpdGVyZVsxXSwgJGxpc3RlRmllbGRbJGNyaXRlcmUtPmZpZWxkbmFtZV0tPmdldFR5cGUoKSk7IA0KCQkJCSRocWwgLj0gJGNyaXRlcmUtPmZpZWxkbmFtZS4kY3JpdGVyZS0+dHlwZUNyaXRlcmUuJyA/IEFORCA/JzsNCgkJCQljb250aW51ZTsNCgkJCX0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gTiBwYXJhbeh0cmVzDQogICAgICAgICAgICBpZigkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiRJTiB8fCAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgPT0gVHlwZUNyaXRlcmU6OiROSU4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJGhxbCAuPSAnICggJzsNCiAgICAgICAgICAgICAgICAkc2Vjb25kID0gZmFsc2U7IA0KICAgICAgICAgICAgICAgIGZvcmVhY2goJGNyaXRlcmUtPnBhcmFtc0NyaXRlcmUgYXMgJHBhcmFtKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHNlY29uZCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGhxbCAuPSAnIE9SICc7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHBhcmFtc1tdID0gQ29yZTo6RmllbGRUb0RCVmFsdWUoJHBhcmFtLCAkbGlzdGVGaWVsZFskY3JpdGVyZS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpKTsgDQogICAgICAgICAgICAgICAgICAgICRocWwgLj0gJGNyaXRlcmUtPmZpZWxkbmFtZS5UeXBlQ3JpdGVyZTo6JEVRLicgPyAnOw0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgJHNlY29uZCA9IHRydWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRocWwgLj0gJyApJzsNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICANCgkJCQ0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTGUgQ3JpdGVyZSAkY3JpdGVyZS0+dHlwZUNyaXRlcmUgbidlc3QgcGFzIGVuY29yZSBwcmlzIGVuIGNoYXJnZSIpOw0KCQl9DQoJCSRxdWVyeUV4ZW1wbGUgPSAkZGVsZXRlLiRocWw7DQoJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoJCQ0KCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeUV4ZW1wbGUsICRwYXJhbXMpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IgZHVyYW50IGxhIHJlcXVldGUgcGFyIEV4ZW1wbGUhIik7fQ0KCX0NCgkJCQ0KICAgIC8qKg0KICAgICogdHJhbnNmb3JtZSB1biB0YWJsZWF1IGRlIHZhbGV1ciBlbiB1bmUgZW50aXTpIGNvbXBs6HRlDQogICAgKiANCiAgICAqICAgTGUgdGFibGVhdSBkb2l0IOp0cmUgc291cyBsYSBmb3JtZSBkJ3VuIHRhYmxlYXUgYXNzb2NpYXRpZiDgIHVuZSBzZXVsZSBkaW1lbnNpb24NCiAgICAqIA0KICAgICogRXhlbXBsZSA6DQogICAgKiANCiAgICAqIDxjb2RlPg0KICAgICogICAgICAgJHRhYmxlYXUxID0gYXJyYXkoJ2NsaWVudF9pZCc9PjEsICdub20nPT4nRHVwb250Jyk7ICAgICAgIA0KICAgICogICAgICAgJHRhYmxlYXUyID0gYXJyYXkoJ2NsaWVudF9pZCc9PjIsICdub20nPT4nRHVyYW5kJywgJ3ByZW5vbSc9PidKb2UnKTsgICAgICAgDQogICAgKiAgIA0KICAgICogICAgICAgJGNsaWVudCA9IG5ldyBDbGllbnQoKTsNCiAgICAqIA0KICAgICogICAgICAgJGNsaWVudDEgPSBDb3JlOjpyb3dUb0VudGl0eSgkY2xpZW50LCAkdGFibGVhdTEpOw0KICAgICogICAgICAgJGNsaWVudDIgPSBDb3JlOjpyb3dUb0VudGl0eSgkY2xpZW50LCAkdGFibGVhdTIpOw0KICAgICogDQogICAgKiAgICAgICBlY2hvICRjbGllbnQxLT5nZXQoJ3ByZW5vbScpOyAvL3JldG91cm5lcmEgbnVsbA0KICAgICogICAgICAgZWNobyAkY2xpZW50Mi0+Z2V0KCdQcmVub20nKTsgLy9yZXRvdXJuZXJhIEpvZQ0KICAgICogDQogICAgKiA8L2NvZGU+DQogICAgKiAgICAgICAgIA0KICAgICogQHBhcmFtIEVudGl0eSBsJ2VudGl06SBzZXJ2YW50IGRlIG1vZOhsZQ0KICAgICogQHBhcmFtIGFycmF5IGxlIHRhYmxlYXUgY29udGVuYW50IGxlcyBkb25u6WVzDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHJvd1RvRW50aXR5IChFbnRpdHkgJiRlbnRpdHlQYXJhbSwgJHJvdykNCgl7DQoJCQ0KCQlUcmFjZTo6ZGVidWcoInJvd1RvRW50aXR5IDogIi5wcmludF9yKCRyb3csdHJ1ZSkuIjxici8+PGJyLz48YnIvPiIpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoJCQ0KCQkkbmV3RW50aXR5ID0gY2xvbmUgJGVudGl0eVBhcmFtOw0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkNCgkJew0KCQkJaWYoISRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkNCgkJCXsNCgkJCQkkbmV3RW50aXR5LT5zZXQoJGZpZWxkLT5nZXROYW1lKCksQ29yZTo6ZGJWYWx1ZVRvRmllbGQoJHJvd1skZmllbGQtPmdldE5hbWUoKV0sICRmaWVsZC0+Z2V0VHlwZSgpKSk7DQoJCQl9IA0KCQl9DQoJCXJldHVybiAkbmV3RW50aXR5OwkNCgl9DQoJDQogICAgLyoqDQogICAgKiBUcmFuc2Zvcm1lIHVuZSBkb25u6WUgaXNzdWUgZGUgUEhQIGVuIHVuZSBkb25u6WUgcG91ciBTUUwNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkIGxhIGRvbm7pZSBpc3N1ZSBkZSBQSFANCiAgICAqIEBwYXJhbSBtaXhlZCB1biBjaGFtcHMgZGUgbGEgY2xhc3NlIHN0YXRpYyBDQVNUDQogICAgKiANCiAgICAqIEBzZWUgQ0FTVA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBGaWVsZFRvREJWYWx1ZSgkZGF0YSwgJHR5cGUpDQoJew0KCQlzd2l0Y2goJHR5cGUpDQoJCXsNCgkJCWNhc2UgQ0FTVDo6JFNUUklORyA6IHJldHVybiAkZGF0YTsNCgkJCQ0KCQkJY2FzZSBDQVNUOjokSU5URUdFUiA6IHJldHVybiAkZGF0YTsNCgkJCQ0KCQkJY2FzZSBDQVNUOjokTlVNRVJJQyA6IHJldHVybiAkZGF0YTsNCgkJCQ0KCQkJY2FzZSBDQVNUOjokQlVGRkVSIDogcmV0dXJuICRkYXRhOw0KCQkJDQoJCQljYXNlIENBU1Q6OiREQVRFIDogICRnQ21zID0gY21zbXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRiID0gJGdDbXMtPkdldERiKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZGItPkRCRGF0ZSgkZGF0YSk7ICAgICAgICAgIA0KCQl9DQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqIFRyYW5zZm9ybWUgdW5lIGRvbm7pZSBpc3N1ZSBkZSBTUUwgZW4gdW5lIGRvbm7pZSBwb3VyIFBIUA0KICAgICogDQogICAgKiBAcGFyYW0gbWl4ZWQgbGEgZG9ubullIGlzc3VlIGRlIGxhIGJhc2UgZGUgZG9ubullDQogICAgKiBAcGFyYW0gbWl4ZWQgdW4gY2hhbXBzIGRlIGxhIGNsYXNzZSBzdGF0aWMgQ0FTVA0KICAgICogDQogICAgKiBAc2VlIENBU1QNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZGJWYWx1ZVRvRmllbGQoJGRhdGEsICR0eXBlKQ0KCXsNCgkJc3dpdGNoKCR0eXBlKQ0KCQl7DQoJCQljYXNlIENBU1Q6OiRTVFJJTkcgOiByZXR1cm4gJGRhdGE7DQoJCQkNCgkJCWNhc2UgQ0FTVDo6JElOVEVHRVIgOiByZXR1cm4gJGRhdGE7DQoJCQkNCgkJCWNhc2UgQ0FTVDo6JE5VTUVSSUMgOiByZXR1cm4gJGRhdGE7DQoJCQkNCgkJCWNhc2UgQ0FTVDo6JEJVRkZFUiA6IHJldHVybiAkZGF0YTsNCgkJCQ0KCQkJY2FzZSBDQVNUOjokREFURSA6ICAkZ0NtcyA9IGNtc21zKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYiA9ICRnQ21zLT5HZXREYigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGRiLT5Vbml4VGltZVN0YW1wKCRkYXRhKTsNCgkJfQ0KCX0NCgkNCgkvKioNCiAgICAqIEBkZXByZWNhdGVkIFZvaXIgbGEgZm9uY3Rpb24gaW5pdEZvcmVpZ25LRVkgZGUgbGEgY2xhc3NlIEVudGl0eQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBpbml0Rm9yZWlnbktFWShFbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGZpZWxkTmFtZSwgJHNpZCA9IG51bGwpDQoJewkJDQoJCXRyaWdnZXJfZXJyb3IoIkRlcHJlY2F0ZWQgZnVuY3Rpb24gY2FsbGVkLiIsIEVfVVNFUl9OT1RJQ0UpOw0KCQ0KCQkkZmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkQnlOYW1lKCRmaWVsZE5hbWUpOw0KCQkNCgkJaWYoJGZpZWxkLT5nZXRLRVlOYW1lKCkgPT0gJycpDQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJMZSBjaGFtcHMgJGZpZWxkTmFtZSBuZSBwb3NzZWRlIGF1Y3VuZSBjbGUgZXRyYW5nZXJlIGFzc29jaWVlIik7DQoJCQkNCgkJJGNsZSA9IGV4cGxvZGUoJy4nLCRmaWVsZC0+Z2V0S0VZTmFtZSgpLDIpOw0KCQkvL0V2YWx1YXRpb24gZGUgbGEgZWNsYXNzIGVuIGNvdXJzDQoJCWV2YWwoJyRlbnRpdHkgPSBuZXcgJy4kY2xlWzBdLicoKTsnKTsNCgkJDQoJCWlmKCRzaWQgPT0gbnVsbCkNCgkJew0KCQkJJGxpc3RlID0gQ29yZTo6c2VsZWN0QWxsKCRlbnRpdHkpOw0KCQl9IGVsc2UNCgkJew0KCQkJJGxpc3RlID0gQ29yZTo6c2VsZWN0QnlJZHMoJGVudGl0eSwgYXJyYXkoJHNpZCkpOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJGxpc3RlOw0KCQ0KCX0NCg0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbGVzIGVudGl06XMgQiBwb3V2YW50IOp0cmUgYXNzb2Np6SDgIHVuZSBFbnRpdOkgQQ0KICAgICogDQogICAgKiBEYW5zIGxlIGNhcyBkZSBjbOkg6XRyYW5n6HJlIHBy6XNlbnRlIGRhbnMgdW5lIGVudGl06SwgcGFyIGV4ZW1wbGUgdW4gYXJ0aWNsZSBkZSBibG9nIGV0IHRvdXMgc2VzIHRhZ3MgYXNzb2Np6XMsDQogICAgKiAgICBpbCBlc3QgaW506XJlc3NhbnQgZGUgcG91dm9pciBy6WN1cOlyZXIgbCdpbnTpZ3JhbGl06SBkZXMgdGFncyBsaekgZXQvb3UgcG91dmFudCDqdHJlIGxp6SDgIG5vdHJlIGFydGljbGUgZGUgYmxvZyBz6WxlY3Rpb25u6Q0KICAgICogDQogICAgKiBMYSBmb25jdGlvbiB2YSBwYXJjb3VyaXIgTCdlbnRpdOkgQXJ0aWNsZSAsIHByZW5kcmUgbGUgY2hhbXBzIHBhc3PpIGVuIEFzc29jaWF0ZUtleSBldCBhbGxlciBmYWlyZSB1bmUgcmVxdep0ZSBkZSBzZWxlY3Rpb24gc3VyIGwnZW50aXTpIFRhZw0KICAgICogDQogICAgKiBwb3VyIHJhcHBlbCB1bmUgY2zpIGFzc29jaellIGVzdCBjb25maWd1cullIGFpbnNpIGRhbnMgTW1tZnMgOg0KICAgICogDQogICAgICAgKiA8Y29kZT4NCiAgICAqICAgIGNsYXNzIEFydGljbGUgZXh0ZW5kcyBtRW50aXR5DQogICAgKiAgICB7DQogICAgKiAqICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgKiAgICAgICAgew0KICAgICogICAgICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCdhcnRpY2xlJywnbW9ucHJvamV0Jyk7DQogICAgKiAgICAgICAgICAgIA0KICAgICogICAgICAgICAgICAgJHRoaXMtPmFkZChuZXcgRmllbGQoJ2FydGljbGVfaWQnIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIENBU1Q6OiRJTlRFR0VSDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbUtFWTo6JFBLICAgIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwgICAgICAgICAgICAgIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsICBuZXcgbUhUTUxfRklFTERfSURFTlRJRklBTlQoKSAgICAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOVUxMQUJMRTo6JEZBTFNFKQ0KICAgICogICAgICAgICAgICAgWy4uLl0NCiAgICAqICAgICAgICAgICAgICR0aGlzLT5hZGQobmV3IEZpZWxkKCd0YWdzJyANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBDQVNUOjokSU5URUdFUg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbUtFWTo6JEFLICAgIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsICdBcnRpY2xlQmlsbGV0LmFydGljbGVfaWQnIDwtLSBsaWVuIHZlcnMgbCBlbnRpdOkgQXNzb2Np6WUgQXJ0aWNsZUJpbGxldA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5ldyBtSFRNTF9GSUVMRF9BU1NPQ0lBVEUoKSAgDQogICAgKiAgICAgICAgICAgICBbLi4uXQ0KICAgICogICAgICAgIH0NCiAgICAqICAgICAgICANCiAgICAqDQogICAgKiAgICB9DQogICAgKiANCiAgICAqICAgIGNsYXNzIFRhZyBleHRlbmRzIG1FbnRpdHkNCiAgICAqICAgIHsNCiAgICAqICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgKiAgICAgICAgew0KICAgICogICAgICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCd0YWcnLCdtb25wcm9qZXQnKTsNCiAgICAqICAgICAgICAgICAgDQogICAgKiAgICAgICAgICAgICAkdGhpcy0+YWRkKG5ldyBGaWVsZCgndGFnX2lkJyANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBDQVNUOjokSU5URUdFUg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG1LRVk6OiRQSyAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsICAgICAgICAgICAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgbmV3IG1IVE1MX0ZJRUxEX0lERU5USUZJQU5UKCkgICAgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlVMTEFCTEU6OiRGQUxTRSkNCiAgICAqICAgICAgICAgICAgIFsuLi5dDQogICAgKiAgICAgICAgICAgICAkdGhpcy0+YWRkKG5ldyBGaWVsZCgnYXJ0aWNsZXMnIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIENBU1Q6OiRJTlRFR0VSDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtS0VZOjokQUsgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ0FydGljbGVCaWxsZXQuYmlsbGV0X2lkJyA8LS0gbGllbiB2ZXJzIGwgZW50aXTpIEFzc29jaellIEFydGljbGVCaWxsZXQNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuZXcgbUhUTUxfRklFTERfQVNTT0NJQVRFKCkgICAgDQogICAgKiAgICAgICAgICAgICBbLi4uXQ0KICAgICogICAgICAgIH0NCiAgICAqICAgICAgICANCiAgICAqDQogICAgKiAgICB9DQogICAgKiANCiAgICAqICAgY2xhc3MgQXJ0aWNsZUJpbGxldCBleHRlbmRzIG1FbnRpdHlBc3NvY2lhdGlvbg0KICAgICogICB7DQogICAgKiAgICAgICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICAqICAgICAgICB7DQogICAgKiAgICAgICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJ2FydGljbGViaWxsZXQnLCdtb25wcm9qZXQnKTsNCiAgICAqICAgICAgICAgICAgDQogICAgKiAgICAgICAgICAgICR0aGlzLT5hZGQobmV3IEZpZWxkKCdhcnRpY2xlX2lkJw0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgQ0FTVDo6JElOVEVHRVINCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsbnVsbA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbUtFWTo6JEZLDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnQXJ0aWNsZS50YWdzJyAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5ldyBtSFRNTF9GSUVMRF9OT05FKCkgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOVUxMQUJMRTo6JEZBTFNFKSk7DQogICAgKiAgICAgICAgICAgICR0aGlzLT5hZGQobmV3IEZpZWxkKCd0YWdfaWQnICAgICAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIENBU1Q6OiRJTlRFR0VSDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtS0VZOjokRksNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdUYWcuYXJ0aWNsZXMnICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5ldyBtSFRNTF9GSUVMRF9OT05FKCkgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBOVUxMQUJMRTo6JEZBTFNFKSk7DQogICAgKg0KICAgICogICAgICAgIH0gICAgDQogICAgKiAgICB9DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgbCdlbnRpdOkgc2VydmFudCBkZSBtb2TobGUgIA0KICAgICogQHBhcmFtIHN0cmluZyBsZSBub20gZHUgY2hhbXBzIGRlIGwnZW50aXTpIHF1aSBzZXJ2aXJhIGRlIHBvaW50IGRlIGTpcGFydCBwb3VyIGxhIHJlY2hlcmNoZQ0KICAgICogQHJldHVybiBhcnJheTxFbnRpdHk+IGxhIGxpc3RlIGRlcyBlbnRpdOlzIGFzc29jaellcyBldCBwb3V2YW50IOp0cmUgYXNzb2Np6WUg4CBjZSBjaGFtcHMuDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldEVudGl0eXNBc3NvY2lhYmxlKEVudGl0eSAmJGVudGl0eVBhcmFtLCRmaWVsZG5hbWUpDQoJew0KCQkkZmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkQnlOYW1lKCRmaWVsZG5hbWUpOw0KCQlpZigkZmllbGQtPmdldEtFWU5hbWUoKSA9PSAnJykNCgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJMZSBjaGFtcHMgJGZpZWxkbmFtZSBuZSBwb3NzZWRlIGF1Y3VuZSBjbGUgZXRyYW5nZXJlIGFzc29jaWVlIHBvdXIgbGEgY2xhc3MgIi4kZW50aXR5UGFyYW0tPmdldE5hbWUoKSk7DQoJCQkJDQoJCSRjbGUgPSBleHBsb2RlKCcuJywkZmllbGQtPmdldEtFWU5hbWUoKSwyKTsNCgkJDQoJCWV2YWwoJyRlbnRpdHkgPSBuZXcgJy4kY2xlWzBdLicoKTsnKTsNCgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJDQoJCSRsaXN0RmllbGQgPSAkZW50aXR5LT5nZXRGaWVsZHMoKTsNCgkJZm9yZWFjaCgkbGlzdEZpZWxkIGFzICRmaWVsZCkNCgkJew0KCQkJaWYoJGZpZWxkLT5nZXRLRVlOYW1lKCkgPT0gJycpDQoJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTGUgY2hhbXBzICRmaWVsZG5hbWUgbmUgcG9zc2VkZSBhdWN1bmUgY2xlIGV0cmFuZ2VyZSBhc3NvY2llZSBwb3VyIGxhIGNsYXNzICIuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkpOw0KCQkJCQkJDQoJCQkkY2xlID0gZXhwbG9kZSgnLicsJGZpZWxkLT5nZXRLRVlOYW1lKCksMik7DQoJCQkNCgkJCWlmKHN0cnRvbG93ZXIoJGNsZVswXSkgPT0gJGVudGl0eVBhcmFtLT5nZXROYW1lKCkpDQoJCQkJY29udGludWU7DQoJCQkgICAgDQoJCQkNCgkJCS8vRXZhbHVhdGlvbiBkZSBsYSBlY2xhc3MgZW4gY291cnMNCgkJCWV2YWwoJyRlbnRpdHkgPSBuZXcgJy4kY2xlWzBdLicoKTsnKTsNCgkJCQ0KCQkJJGxpc3RlID0gQ29yZTo6c2VsZWN0QWxsKCRlbnRpdHkpOw0KCQkJDQoJCQlyZXR1cm4gJGxpc3RlOw0KCQl9CQkNCgkJCQkNCgl9DQoNCgkvKioNCiAgICAqIFJldG91cm5lIGxlcyBlbnRpdOlzIEIgcXVpIHNvbnQgZOlq4CBhc3NvY2npcyDgIHVuZSBFbnRpdOkgQQ0KICAgICogDQogICAgKiBEYW5zIGxlIGNhcyBkZSBjbOkg6XRyYW5n6HJlIHBy6XNlbnRlIGRhbnMgdW5lIGVudGl06SwgcGFyIGV4ZW1wbGUgdW4gYXJ0aWNsZSBkZSBibG9nIGV0IHRvdXMgc2VzIHRhZ3MgYXNzb2Np6XMsDQogICAgKiAgICBpbCBlc3QgaW506XJlc3NhbnQgZGUgcG91dm9pciBy6WN1cOlyZXIgbCdpbnTpZ3JhbGl06SBkZXMgdGFncyBsaelzIOAgbm90cmUgYXJ0aWNsZSBkZSBibG9nIHPpbGVjdGlvbm7pDQogICAgKiANCiAgICAqIExhIGZvbmN0aW9uIHZhIHBhcmNvdXJpciBMJ2VudGl06SBBcnRpY2xlICwgcHJlbmRyZSBsZSBjaGFtcHMgcGFzc+kgZW4gQXNzb2NpYXRlS2V5IGV0IGFsbGVyIGZhaXJlIHVuZSByZXF16nRlIGRlIHNlbGVjdGlvbiBzdXIgbCdlbnRpdOkgVGFnDQogICAgKiAgICAgZW4gcHJlbmFudCBlbiBjb21wdGUgbCdpZGVudGlmaWFudCBkZSBsJ2FydGljbGUgZW4gY291cnMNCiAgICAqIA0KICAgICogcG91ciByYXBwZWwgdW5lIGNs6SBhc3NvY2npZSBlc3QgY29uZmlndXLpZSBhaW5zaSBkYW5zIE1tbWZzIDoNCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICBjbGFzcyBBcnRpY2xlIGV4dGVuZHMgbUVudGl0eQ0KICAgICogICAgew0KICAgICogKiAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICAgICogICAgICAgIHsNCiAgICAqICAgICAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgnYXJ0aWNsZScsJ21vbnByb2pldCcpOw0KICAgICogICAgICAgICAgICANCiAgICAqICAgICAgICAgICAgICR0aGlzLT5hZGQobmV3IEZpZWxkKCdhcnRpY2xlX2lkJyANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBDQVNUOjokSU5URUdFUg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG1LRVk6OiRQSyAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsICAgICAgICAgICAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgbmV3IG1IVE1MX0ZJRUxEX0lERU5USUZJQU5UKCkgICAgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlVMTEFCTEU6OiRGQUxTRSkNCiAgICAqICAgICAgICAgICAgIFsuLi5dDQogICAgKiAgICAgICAgICAgICAkdGhpcy0+YWRkKG5ldyBGaWVsZCgndGFncycgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgQ0FTVDo6JElOVEVHRVINCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG1LRVk6OiRBSyAgICANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnQXJ0aWNsZUJpbGxldC5hcnRpY2xlX2lkJyA8LS0gbGllbiB2ZXJzIGwgZW50aXTpIEFzc29jaellIEFydGljbGVCaWxsZXQNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuZXcgbUhUTUxfRklFTERfQVNTT0NJQVRFKCkgIA0KICAgICogICAgICAgICAgICAgWy4uLl0NCiAgICAqICAgICAgICB9DQogICAgKiAgICAgICAgDQogICAgKg0KICAgICogICAgfQ0KICAgICogDQogICAgKiAgICBjbGFzcyBUYWcgZXh0ZW5kcyBtRW50aXR5DQogICAgKiAgICB7DQogICAgKiAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICAgICogICAgICAgIHsNCiAgICAqICAgICAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgndGFnJywnbW9ucHJvamV0Jyk7DQogICAgKiAgICAgICAgICAgIA0KICAgICogICAgICAgICAgICAgJHRoaXMtPmFkZChuZXcgRmllbGQoJ3RhZ19pZCcgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgQ0FTVDo6JElOVEVHRVINCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbCANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtS0VZOjokUEsgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbCAgICAgICAgICAgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIG5ldyBtSFRNTF9GSUVMRF9JREVOVElGSUFOVCgpICAgICAgIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIE5VTExBQkxFOjokRkFMU0UpDQogICAgKiAgICAgICAgICAgICBbLi4uXQ0KICAgICogICAgICAgICAgICAgJHRoaXMtPmFkZChuZXcgRmllbGQoJ2FydGljbGVzJyANCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBDQVNUOjokSU5URUdFUg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBudWxsDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbUtFWTo6JEFLICAgIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAsICdBcnRpY2xlQmlsbGV0LmJpbGxldF9pZCcgPC0tIGxpZW4gdmVycyBsIGVudGl06SBBc3NvY2npZSBBcnRpY2xlQmlsbGV0DQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbmV3IG1IVE1MX0ZJRUxEX0FTU09DSUFURSgpICAgIA0KICAgICogICAgICAgICAgICAgWy4uLl0NCiAgICAqICAgICAgICB9DQogICAgKiAgICAgICAgDQogICAgKg0KICAgICogICAgfQ0KICAgICogDQogICAgKiAgIGNsYXNzIEFydGljbGVCaWxsZXQgZXh0ZW5kcyBtRW50aXR5QXNzb2NpYXRpb24NCiAgICAqICAgew0KICAgICogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgKiAgICAgICAgew0KICAgICogICAgICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCdhcnRpY2xlYmlsbGV0JywnbW9ucHJvamV0Jyk7DQogICAgKiAgICAgICAgICAgIA0KICAgICogICAgICAgICAgICAkdGhpcy0+YWRkKG5ldyBGaWVsZCgnYXJ0aWNsZV9pZCcNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIENBU1Q6OiRJTlRFR0VSDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLG51bGwNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG51bGwNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG1LRVk6OiRGSw0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ0FydGljbGUudGFncycgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuZXcgbUhUTUxfRklFTERfTk9ORSgpICAgIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlVMTEFCTEU6OiRGQUxTRSkpOw0KICAgICogICAgICAgICAgICAkdGhpcy0+YWRkKG5ldyBGaWVsZCgndGFnX2lkJyAgICAgICAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBDQVNUOjokSU5URUdFUg0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbnVsbA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgbUtFWTo6JEZLDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnVGFnLmFydGljbGVzJyAgDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuZXcgbUhUTUxfRklFTERfTk9ORSgpICAgIA0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgTlVMTEFCTEU6OiRGQUxTRSkpOw0KICAgICoNCiAgICAqICAgICAgICB9ICAgIA0KICAgICogICAgfQ0KICAgICogPC9jb2RlPg0KICAgICogDQogICAgKiBAcGFyYW0gRW50aXR5IGwnZW50aXTpIHNlcnZhbnQgZGUgbW9k6GxlICANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcyBkZSBsJ2VudGl06SBxdWkgc2VydmlyYSBkZSBwb2ludCBkZSBk6XBhcnQgcG91ciBsYSByZWNoZXJjaGUNCiAgICAqIEBwYXJhbSBtaXhlZCBsJ2lkZW50aWZpYW50IGRlIGwnZW50aXTpIGVuIGNvdXJzDQogICAgKiBAcmV0dXJuIGFycmF5PEVudGl0eT4gbGEgbGlzdGUgZGVzIGVudGl06XMgZWZmZWN0aXZlbWVudCBhc3NvY2npZXMg4CBjZSBjaGFtcHMuDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldEVudGl0eXNBc3NvY2llZXNMaWVlcyhFbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGZpZWxkbmFtZSwgJGVudGl0eUlkKQ0KCXsNCgkJVHJhY2U6OmRlYnVnKCJnZXRFbnRpdHlzQXNzb2NpZWVzTGllZXMgOiAiLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLiIgIi4kZmllbGRuYW1lLiIgIi4kZW50aXR5SWQpOw0KCQkNCgkJJGZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZEJ5TmFtZSgkZmllbGRuYW1lKTsNCgkJDQoJCWlmKCRmaWVsZC0+Z2V0S0VZTmFtZSgpID09ICcnKQ0KCQkJCXRocm93IG5ldyBFeGNlcHRpb24oIkxlIGNoYW1wcyAkZmllbGRuYW1lIG5lIHBvc3NlZGUgYXVjdW5lIGNsZSBldHJhbmdlcmUgYXNzb2NpZWUgcG91ciBsYSBjbGFzcyAiLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpKTsNCgkJCQ0KCQkkY2xlID0gZXhwbG9kZSgnLicsJGZpZWxkLT5nZXRLRVlOYW1lKCksMik7DQoJCQ0KCQlldmFsKCckZW50aXR5ID0gbmV3ICcuJGNsZVswXS4nKCk7Jyk7DQoJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCgkJJGV4ZW1wbGUgPSBuZXcgRXhlbXBsZSgpOwkJDQoJCSRleGVtcGxlLT5hZGRDcml0ZXJlKCRjbGVbMV0sVHlwZUNyaXRlcmU6OiRFUSxhcnJheSgkZW50aXR5SWQpKTsNCgkJJGFzc29jcyA9IENvcmU6OnNlbGVjdEJ5RXhlbXBsZSgkZW50aXR5LCAkZXhlbXBsZSk7DQoJCQ0KCQkkbGlzdEZpZWxkID0gJGVudGl0eS0+Z2V0RmllbGRzKCk7DQoJCWZvcmVhY2goJGxpc3RGaWVsZCBhcyAkZmllbGQpDQoJCXsNCgkJCWlmKCRmaWVsZC0+Z2V0S0VZTmFtZSgpID09IG51bGwgfHwgJGZpZWxkLT5nZXRLRVlOYW1lKCkgPT0gJycpDQoJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTGUgY2hhbXBzICRmaWVsZG5hbWUgbmUgcG9zc2VkZSBhdWN1bmUgY2xlIGV0cmFuZ2VyZSBhc3NvY2llZSBwb3VyIGxhIGNsYXNzICIuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkpOw0KCQkJDQoJCQkkY2xlID0gZXhwbG9kZSgnLicsJGZpZWxkLT5nZXRLRVlOYW1lKCksMik7DQoJCQkNCgkJCWlmKHN0cnRvbG93ZXIoJGNsZVswXSkgPT0gJGVudGl0eVBhcmFtLT5nZXROYW1lKCkpDQoJCQkJY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgDQoJCQkkaWRzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goJGFzc29jcyBhcyAkYXNzb2MpDQoJCQl7DQoJCQkJJGlkc1tdID0gJGFzc29jLT5nZXQoJGZpZWxkLT5nZXROYW1lKCkpOw0KCQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoJCQkNCgkJCSRjbGUgPSBleHBsb2RlKCcuJywkZmllbGQtPmdldEtFWU5hbWUoKSwyKTsNCiAgICAgICAgICAgIA0KCQkJLy9FdmFsdWF0aW9uIGRlIGxhIGVjbGFzcyBlbiBjb3Vycw0KCQkJZXZhbCgnJGVudGl0eSA9IG5ldyAnLiRjbGVbMF0uJygpOycpOw0KCQkJDQoJCQkkbGlzdGUgPSBDb3JlOjpzZWxlY3RCeUlkcygkZW50aXR5LCAkaWRzKTsNCgkJCQ0KCQkJVHJhY2U6OmRlYnVnKCJnZXRFbnRpdHlzQXNzb2NpZWVzTGllZXMgOiAiLiJyZXN1bHRhdCA6ICIuY291bnQoJGxpc3RlKSk7DQoJCQkNCgkJCXJldHVybiAkbGlzdGU7DQoJCX0JCQ0KCX0NCgkNCiAgICAvKioNCiAgICAqIFbpcmlmaWUgZGFucyB0b3V0ZXMgbGVzIGVudGl0eSBleGlzdGFudGVzLCBxdSdhdWN1bmUgbmUgcG9zc+hkZSBlbmNvcmUgdW5lIGxpYWlzb24gdmVycyANCiAgICAqICAgbCdlbnRpdOkgcGFzc+llIGVuIHBhcmFt6HRyZSBhdmVjIGwnSWQgcGFzc+kgZW4gcGFyYW3odHJlDQogICAgKiANCiAgICAqICBDZXR0ZSBmb25jdGlvbiBlc3QgdXRpbGlz6WUgYXZhbnQgdW5lIHN1cHByZXNzaW9uIG/5dSBsJ29uIHNvdWhhaXRlcyBzJ2Fzc3VyZXIgcXUnYXVjdW5lIA0KICAgICogICAgIGF1dHJlIGVudGl06SBuJ2VzdCBlbmNvcmUgbGnpZScNCiAgICAqIA0KICAgICogQHBhcmFtIE1tbWZzIGxlIG1vZHVsZSBlbiBjb3Vycw0KICAgICogQHBhcmFtIEVudGl0eSBsJ2VudGl06SBzZXJ2YW50IGRlIG1vZOhsZQ0KICAgICogQHBhcmFtIG1peGVkIGwnaWRlbnRpZmlhbnQgZGUgbGEgbGlnbmUg4CB26XJpZmllci4NCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gdmVyaWZJbnRlZ3JpdHkoTW1tZnMgJG1vZHVsZSwgRW50aXR5ICYkZW50aXR5LCAkc2lkKQ0KCXsNCgkJJGxpc3RlRW50aXR5cyA9IE15QXV0b2xvYWQ6OmdldEFsbEluc3RhbmNlcygkbW9kdWxlLT5nZXROYW1lKCkpOw0KCQ0KCQlmb3JlYWNoKCRsaXN0ZUVudGl0eXMgYXMgJGtleT0+JGFuRW50aXR5KQ0KCQl7DQoJCQlpZigkYW5FbnRpdHkgaW5zdGFuY2VPZiBFbnRpdHlBc3NvY2lhdGlvbikNCgkJCQljb250aW51ZTsNCgkJCQkNCgkJCWZvcmVhY2goJGFuRW50aXR5LT5nZXRGaWVsZHMoKSBhcyAkZmllbGQpDQoJCQl7DQoJCQkJaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtFWSgpKQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCQ0KCQkJCWlmKCRmaWVsZC0+Z2V0S0VZTmFtZSgpICE9IG51bGwpDQoJCQkJew0KCQkJCQkkdmFscyA9IGV4cGxvZGUoJy4nLCRmaWVsZC0+Z2V0S0VZTmFtZSgpLDIpOw0KCQkJCQkNCgkJCQkJaWYoc3RydG9sb3dlciAoJHZhbHNbMF0pID09IHN0cnRvbG93ZXIgKCRlbnRpdHktPmdldE5hbWUoKSkpDQoJCQkJCXsNCgkJCQkJCSRFeGVtcGxlID0gbmV3IEV4ZW1wbGUoKTsNCgkJCQkJCSRFeGVtcGxlLT5hZGRDcml0ZXJlKCRmaWVsZC0+Z2V0TmFtZSgpLCBUeXBlQ3JpdGVyZTo6JEVRLCBhcnJheSgkc2lkKSk7DQoJCQkJCQkkZW50aXR5cyA9IENvcmU6OnNlbGVjdEJ5RXhlbXBsZSgkYW5FbnRpdHksICRFeGVtcGxlKTsNCgkJCQkJCWlmKGNvdW50KCRlbnRpdHlzKSA+IDApDQoJCQkJCQl7DQoJCQkJCQkJcmV0dXJuICJMYSBsaWduZSAmYWdyYXZlOyBzdXBwcmltZXIgZXN0IGVuY29yZSB1dGlsaXMmZWFjdXRlO2UgcGFyICZsYXF1bzsgIi4kYW5FbnRpdHktPmdldE5hbWUoKS4iICZyYXF1bzsiOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1cm47DQoJDQoJfQ0KDQogICAgLyoqDQogICAgKiBQZXJtZXQgZGUgculhbGlzZXIgZGVzIHJlY2hlcmNoZXMgZW4gcHJvZm9uZGV1ciBzdXIgdW5lIHN1Y2Nlc3Npb24gZGUgbGllbiBpbnRlci1lbnRpdOkuIA0KICAgICogDQogICAgKiAgIERhbnMgbGUgY2FzIG91IHVuZSBlbnRpdOkgZXN0IGxpbullIOAgdW5lIHNlY29uZGUgZW50aXTpLCBxdWkgYSBzb250IHRvdXIgZXN0IGxp6WUg4CB1bmUgM2VtZSwgDQogICAgKiAgIGlsIGVzdCBwb3NzaWJsZSBkZSBk6XRlcm1pbmVyIHVuIGNoZW1pbiBlbnRyZSBlbGxlcy4NCiAgICAqIA0KICAgICogRXhlbXBsZSA6IA0KICAgICogICBVbmUgY29tbWFuZGUgcG9zc+hkZSB1biBsaWVuIHZlcnMgdW4gY2xpZW50IHZpYSBsZSBudW1lcm8gZGUgY2xpZW50DQogICAgKiAgIFVuIGNsaWVudCBwb3Nz6GRlIHVuIGxpZW4gdmVycyB1bmUgYWRyZXNzZSB2aWEgc29uIGlkIEFkcmVzc2UgKOdhIHBlcm1ldCBkZSBn6XJlciBkZXMgYWRyZXNzZXMgbXVsdGlwbGVzKQ0KICAgICogICBVbmUgYWRyZXNzZSBwb3Nz6GRlIHVuIGxpZW4gdmVycyB1bmUgdmlsbGUgdmlhIHNvbiBjb2RlIHBvc3RhbA0KICAgICogDQogICAgKiAgU2kgamUgc291aGFpdGVzIGNvbm5haXRyZSBsJ2ludOlncmFsaXTpIGRlcyBjb21tYW5kZXMgcGFzc+llIHBvdXIgbGEgdmlsbGUgZGUgTGlsbGUsIGplIHBvdXJyYWlzIGZhaXJlIDoNCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgJHZpbGxlcyA9IC8vVHJhaXRlbWVudCBkZSByZWNoZXJjaGUgZCd1bmUgdmlsbGUgZG9udCBsZSBsaWJlbGzpID0gTGlsbGUNCiAgICAqICBmb3JlYWNoKCR2aWxsZXMgYXMgJHZpbGxlKQ0KICAgICogIHsNCiAgICAqICAgICAgICRhZHJlc3NlcyA9IC8vVHJhaXRlbWVudCBkZSByZWNoZXJjaGUgZCd1bmUgYWRyZXNzZSBkb250IGxlIGNvZGUgcG9zdGFsID0gJHZpbGxlLT5nZXQoJ2NvZGVwb3N0YWwnKQ0KICAgICogICAgICAgZm9yZWFjaCgkYWRyZXNzZXMgYXMgJGFkcmVzc2UpDQogICAgKiAgICAgICB7DQogICAgKiAgICAgICAgICAgJGNsaWVudHMgPSAvL1RyYWl0ZW1lbnQgZGUgcmVjaGVyY2hlIGQndW4gY2xpZW50IHBvc3PoZGFudCBsJ0lEIGFkcmVzc2UgPSAkYWRyZXNzZS0+Z2V0KCdhZHJlc3NlX2lkJykNCiAgICAqICAgICAgICAgICBmb3JlYWNoKCRjbGllbnRzIGFzICRjbGllbnQpDQogICAgKiAgICAgICAgICAgew0KICAgICogICAgICAgICAgICAgICAkY29tbWFuZGVzID0gIC8vVHJhaXRlbWVudCBkZSByZWNoZXJjaGUgZCd1bmUgY29tbWFuZGUgcG9zc+hkYW50IGxlIG51bWVyb2NsaWVudCA9ICRjbGllbnQtPmdldCgnbnVtZXJvY2xpZW50JykgICANCiAgICAqICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIA0KICAgICogICAgICAgfSAgICAgICAgICAgICAgICAgIA0KICAgICogIH0NCiAgICAqIA0KICAgICogIDwvY29kZT4NCiAgICAqIA0KICAgICogIENldHRlIGZvbmN0aW9uIHBlcm1ldCBkZSBzaW1wbGlmaWVyIOlub3JtZW1lbnQgbGEgY2hvc2UgcHVpc3F1J2lsIHN1ZmZpdCBkZSBmYWlyZSA6IA0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAkY29tbWFuZGVzID0gQ29yZTo6bWFrZURlZXBTZWFyY2gobmV3IENvbW1hbmRlKCksICdDb21tYW5kZS5udW1lcm9jbGllbnQuYWRyZXNzZV9pZC5jb2RlcG9zdGFsLmxpYmVsbGUnLCBhcnJheSgnTGlsbGUnKSk7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICANCiAgICAqIA0KICAgICogQHBhcmFtIEVudGl0eSBMJ2VudGl06SBzZXJ2YW50IGRlIHBvaW50IGRlIGTpcGFydCDgIGxhIHJlY2hlcmNoZQ0KICAgICogQHBhcmFtIHN0cmluZyBsZSBjaGVtaW4g4CBwYXJjb3VyaXIsIGQnZW50aXTpIGVuIGVudGl06SBz6XBhcukgcGFyIHVuIHBvaW50Lg0KICAgICogQHBhcmFtIGFycmF5IGxhIGxpc3RlIGRlcyB2YWxldXJzIHJlY2hlcmNo6WVzDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gbWFrZURlZXBTZWFyY2goRW50aXR5ICRwcmV2aW91c0VudGl0eSwgJGNsZSwgJHZhbHVlcykNCgl7CQkNCgkJVFJBQ0U6OmluZm8oIiMgOiAiLiJTdGFydCBtYWtlRGVlcFNlYXJjaCgpICIuJHByZXZpb3VzRW50aXR5LT5nZXROYW1lKCkuIi0+Ii4kY2xlKTsNCgkJDQoJCWlmKCRwcmV2aW91c0VudGl0eSA9PSBudWxsKQ0KCQl7DQoJCQkNCgkJCSRuZXdDbGUgPSBleHBsb2RlKCcuJywkY2xlLDIpOw0KCQkJJHByZXZpb3VzRW50aXR5ID0gJG5ld0NsZVswXTsNCgkJCSRjbGUgPSAkbmV3Q2xlWzFdOw0KCQkJZXZhbCgnJHByZXZpb3VzRW50aXR5ID0gbmV3ICcuJHByZXZpb3VzRW50aXR5LicoKTsnKTsNCgkJfQ0KCQkNCgkJJG5ld0NsZSA9IGV4cGxvZGUoJy4nLCRjbGUsMik7DQoJCSRmaWVsZG5hbWUgPSAkbmV3Q2xlWzBdOw0KCQkNCgkJLy9UZXN0IGRlIHNvcnRpZSA6IG9uIGEgdW4gc2V1bCBy6XN1bHRhdCBkYW5zICRuZXdDbGUgOiBsZSBjaGFtcHMgZmluYWwNCgkJaWYoY291bnQoJG5ld0NsZSkgPT0gMSkNCgkJew0KCQkJVFJBQ0U6OmluZm8oIiMgOiAiLiIgY291bnQoXCRuZXdDbGUpID09IDEgLCBkb25jIHNvcnRpZSAiKTsNCgkJCSRFeGVtcGxlID0gbmV3IEV4ZW1wbGU7DQoJCQkkRXhlbXBsZS0+YWRkQ3JpdGVyZSgkZmllbGRuYW1lLCBUeXBlQ3JpdGVyZTo6JElOLCAkdmFsdWVzKTsNCgkJCSRlbnRpdHlzID0gQ29yZTo6c2VsZWN0QnlFeGVtcGxlKCRwcmV2aW91c0VudGl0eSwgJEV4ZW1wbGUpOw0KCQkJVFJBQ0U6OmluZm8oIiMgOiAiLmNvdW50KCRlbnRpdHlzKS4iIFImZWFjdXRlO3N1bHRhdChzKSByZXRvdXJuJmVhY3V0ZTtzIik7DQoJCQlyZXR1cm4gJGVudGl0eXM7DQoJCX0gZWxzZQ0KCQl7DQoJCQlUUkFDRTo6aW5mbygiIyA6ICIuIiBwb3Vyc3VpdGUgIik7DQoJCX0NCgkJDQoJCS8vUuljdXDpcmF0aW9uIGRlIGxhIGNs6SBkaXN0YW5jZSBwb3VyIHVuZSBGSw0KCQkkZmllbGQgPSAkcHJldmlvdXNFbnRpdHktPmdldEZpZWxkQnlOYW1lKCRmaWVsZG5hbWUpOw0KCQlpZigkZmllbGQtPmlzRm9yZWlnbktFWSgpIHx8ICRmaWVsZC0+aXNBc3NvY2lhdGVLZXkoKSkNCgkJew0KCQkJJGZvcmVpZ25LRVkgPSBleHBsb2RlKCcuJywkZmllbGQtPmdldEtFWU5hbWUoKSwyKTsNCgkJCWV2YWwoJyRuZXh0RW50aXR5ID0gbmV3ICcuJGZvcmVpZ25LRVlbMF0uJygpOycpOw0KCQl9IA0KDQoJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLZXkoKSkNCgkJew0KCQkJJGNsZSA9IGV4cGxvZGUoJy4nLCRuZXdDbGVbMV0sMik7DQoJCQkkY2xlID0gJGNsZVsxXTsNCgkJfSBlbHNlDQoJCXsNCgkJCSRjbGUgPSAkbmV3Q2xlWzFdOw0KCQl9DQoNCgkJDQoJCQ0KDQoJCQ0KCQlUUkFDRTo6aW5mbygiIyA6ICIuIiBtYWtlIG5ldyByZWNoZXJjaGUgOiAiLiRuZXh0RW50aXR5LT5nZXROYW1lKCkgLiIgLCAiLiAkY2xlKTsNCgkJDQoJCSRlbnRpdHlzID0gQ29yZTo6bWFrZURlZXBTZWFyY2goJG5leHRFbnRpdHksICRjbGUsICR2YWx1ZXMpOw0KCQkNCgkJaWYoY291bnQoJGVudGl0eXMpID09IDApDQoJCXsNCgkJCXJldHVybiBhcnJheSgpOw0KCQl9DQoJCQ0KCQlpZigkbmV4dEVudGl0eSBpbnN0YW5jZW9mIEVudGl0eUFzc29jaWF0aW9uKQ0KCQl7CQ0KCQkJJGZpZWxkcyA9ICRuZXh0RW50aXR5LT5nZXRGaWVsZHMoKTsNCgkJCSRub21GaWVsZFN1aXZpdCA9IGV4cGxvZGUoJy4nLCRjbGUsMik7DQoJCQkkbm9tRmllbGRTdWl2aXQgPSAkbm9tRmllbGRTdWl2aXRbMF07DQoJCQkkbm9tRmllbGRSZXRvdXIgPSAiTi9BIjsNCgkJCWZvcmVhY2goJGZpZWxkcyBhcyAkYWZpZWxkKQ0KCQkJew0KCQkJCWlmKCRhZmllbGQtPmdldE5hbWUoKSA9PSAkbm9tRmllbGRTdWl2aXQpDQoJCQkJew0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoJCQkJJG5vbUZpZWxkUmV0b3VyID0gJGFmaWVsZDsNCgkJCX0NCgkJCQ0KCQkJLy9kaWUoJG5vbUZpZWxkUmV0b3VyLT5nZXROYW1lKCkpOw0KCQl9DQoJCQ0KCQkkaWRzID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkZW50aXR5cyBhcyAkYW5FbnRpdHkpDQoJCXsNCgkJCVRSQUNFOjppbmZvKCI8YnIvPk9uIGEgdHJvdXYmZWFjdXRlOyAgOiAiLiRhbkVudGl0eS0+Z2V0TmFtZSgpLiIiKTsNCgkJCWlmKCRhbkVudGl0eSBpbnN0YW5jZW9mIEVudGl0eUFzc29jaWF0aW9uKQ0KCQkJew0KCQkJCSR2YWx1ZSA9ICRhbkVudGl0eS0+Z2V0KCRub21GaWVsZFJldG91ci0+Z2V0TmFtZSgpKTsNCgkJCQkkaWRzW10gPSAkdmFsdWU7DQoJCQkJVFJBQ0U6OmluZm8oIiB2YWxldXIgYXNzb2MgOiAiLiR2YWx1ZS4iIHBvdXIgbGUgY2hhbXBzICIuJG5vbUZpZWxkUmV0b3VyLT5nZXROYW1lKCkpOw0KCQkJfSBlbHNlDQoJCQl7DQoJCQkJJHZhbHVlID0gJGFuRW50aXR5LT5nZXQoJG5leHRFbnRpdHktPmdldFBrKCktPmdldE5hbWUoKSk7DQoJCQkJJGlkc1tdID0gJHZhbHVlOw0KCQkJCVRSQUNFOjppbmZvKCIgdmFsZXVyIGlkIDogIi4kdmFsdWUpOw0KCQkJfQ0KCQkJDQoJCX0NCgkJDQoJCQ0KCQkkRXhlbXBsZSA9IG5ldyBFeGVtcGxlOw0KCQlpZigkbmV4dEVudGl0eSBpbnN0YW5jZW9mIEVudGl0eUFzc29jaWF0aW9uKQ0KCQl7DQoJCQkkRXhlbXBsZS0+YWRkQ3JpdGVyZSgkcHJldmlvdXNFbnRpdHktPmdldFBrKCktPmdldE5hbWUoKSwgVHlwZUNyaXRlcmU6OiRJTiwgJGlkcyk7DQoJCX0gZWxzZQ0KCQl7DQoJCQkkRXhlbXBsZS0+YWRkQ3JpdGVyZSgkZmllbGRuYW1lLCBUeXBlQ3JpdGVyZTo6JElOLCAkaWRzKTsNCgkJfQ0KCQkkZW50aXR5cyA9IENvcmU6OnNlbGVjdEJ5RXhlbXBsZSgkcHJldmlvdXNFbnRpdHksICRFeGVtcGxlKTsNCgkJDQoJCXJldHVybiAkZW50aXR5czsNCgl9DQoJDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.critere.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgdG91dGVzIGxlcyBmb25jdGlvbm5hbGl06XMgcmVsYXRpdmVzIGF1eCByZWNoZXJjaGVzIHBhciBDcml06HJlcw0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQogDQoNCi8qKg0KKiBDbGFzc2Ugc3RydWN0dXJhbnQgdW4gY3JpdOhyZSANCiogDQoqIENvbnRpZW50IHVuIG5vbSBkZSBjaGFtcHMsIHVuIFR5cGVDcml0ZXJlLCB1biB0YWJsZWF1IGRlIHBhcmFt6HRyZSBldCB1biBib29sZWFuIHBvdXIgbGEgY2Fzc2UNCioNCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCmZpbmFsIGNsYXNzIENyaXRlcmUNCnsNCglwdWJsaWMgJGZpZWxkbmFtZTsNCglwdWJsaWMgJHR5cGVDcml0ZXJlOw0KCXB1YmxpYyAkcGFyYW1zQ3JpdGVyZTsNCglwdWJsaWMgJGlnbm9yZUNhc2U7DQoJDQogICAgLyoqDQogICAgKiBDb25zdHJ1Y3RldXIgcHVibGljDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcyBGaWVsZA0KICAgICogQHBhcmFtIHN0cmluZyB1bmUgdmFsZXVyIGRlIGxhIGNsYXNzIFR5cGVDcml0ZXJlIA0KICAgICogQHBhcmFtIGFycmF5IHVuIHRhYmxlYXUgZGUgcGFyYW3odHJlcyB1dGlsaXPpcyBlbiBhc3NvY2lhdGlvbiBhdmVjIGxlIHBhcmFt6HRyZSAkdHlwZUNyaXRlcmUNCiAgICAqIEBwYXJhbSBib29sZWFuICRpZ25vcmVDYXNlIGZhdXggcGFyIGTpZmF1dCwgc3DpY2lmaWUgc2kgbCdvbiBzb3VoYWl0ZSB1dGlsaXNlciBsZSBUeXBlQ3JpdGVyZSBhdmVjIG91IHNhbnMgY2Fzc2UgKGF6ZSAhPSBBWkUpDQogICAgKiBAcmV0dXJuIENyaXRlcmUNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmllbGRuYW1lLCAkdHlwZUNyaXRlcmUsICRwYXJhbXNDcml0ZXJlLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJJHRoaXMtPmZpZWxkbmFtZSA9ICRmaWVsZG5hbWU7DQoJCSR0aGlzLT50eXBlQ3JpdGVyZSA9ICR0eXBlQ3JpdGVyZTsNCgkJJHRoaXMtPnBhcmFtc0NyaXRlcmUgPSAkcGFyYW1zQ3JpdGVyZTsNCgkJJHRoaXMtPmlnbm9yZUNhc2UgPSAkaWdub3JlQ2FzZTsNCgl9DQoJDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.entity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIGNsYXNzZSBt6HJlcyBkZSB0b3V0ZXMgbGVzIGVudGl06XMgZXQgZW50aXTpcyBhc3NvY2lhdGl2ZXMNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQovKioNCiAqIENsYXNzIGFic3RyYWN0IGTpY3JpdmFudCBsZSBjb21wb3J0ZW1lbnQgZXQgbGVzIHByb3Byael06XMgZCd1bmUgRW50aXTpDQogKgkNCiAqDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQphYnN0cmFjdCBjbGFzcyBFbnRpdHkgDQp7DQoJLy9ub20gZGUgbCdlbnRpdGUNCglwcm90ZWN0ZWQgJG5hbWU7DQoNCgkvL25vbSBkZSBsYSB0YWJsZQ0KCXByaXZhdGUgJGRibmFtZTsNCgkNCgkvL25vbSBkZSBsYSBzZXF1ZW5jZSBvdSBudWxsIHNpIHBhcyBkZSBzZXF1ZW5jZQ0KCXByaXZhdGUgJHNlcW5hbWU7DQoJDQoJLy9MaXN0ZSBkZXMgY2hhbXBzIGRlIGwnZW50aXRlDQoJcHJpdmF0ZSAkZmllbGRzID0gYXJyYXkoKTsNCgkNCgkvL0xpc3RlIGRlcyB2YWxldXJzIGNvcnJlc3BvbmRhbnRlcw0KCXByaXZhdGUgJHZhbHVlcyA9IGFycmF5KCk7DQoJDQoJcHVibGljIHN0YXRpYyAkX0NPTlNUX1NFUSA9ICdfc2VxJzsNCgkNCiAgICAvL3RhYmxlYXUgZGVzIGZpbHRyZXMgcG91ciBsZSBCYWNrT2ZmaWNlDQoJcHJpdmF0ZSAkZmlsdHJlczsNCgkNCgkvL3RhYmxlYXUgYXNzb2NpYXRpZiBlbnRyZSB1bmUgbGFuZ3VlIGV0IHVuIG5vbSBk6XNpZ25hbnQgbCdlbnRpdOkgZGFucyBjZXR0ZSBsYW5ndWUNCglwcml2YXRlIHN0YXRpYyAkc2VvOw0KCQ0KCS8vQ29udGllbnQgbGUgbm9tIGR1IEZpZWxkIHNlcnZhbnQgZGUgY2zpDQoJcHJpdmF0ZSAkcGs7DQoJDQoJDQogICAgLyoqDQogICAgKiBDb25zdHJ1Y3RldXIgc2VtaS1wcml26SBwb3VyIOl2aXRlciBkJ2luc3RhbmNlciBjZXR0ZSBjbGFzc2UgZGVwdWlzIGxlIGNvZGUgcGFyIGVycmV1cg0KICAgICogDQogICAgKiAgIEEgY2hhcXVlIGNvbnN0cnVjdGlvbiwgbCdlbnRpdOkgZXN0IHBsYWPpZSBkYW5zIGwnQXV0b2xvYWRlcg0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkJ3VuIG1vZHVsZSBkZSB0eXBlIE1tbWZzDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkZSBsJ2VudGl06Q0KICAgICogQHBhcmFtIHN0cmluZyBsZSBwculmaXhlIOAgdXRpbGlzZXIgZW4gYmFzZSBkZSBkb25u6WUgcG91ciBsZXMgdGFibGVzLiBFbiBn6W7pcmFsIGxlIG5vbSBkZSB2b3RyZSBtb2R1bGUNCiAgICAqIEBwYXJhbSBzdHJpbmcgc2kgcmVuc2VpZ27pIHNlcmEgbGUgbm9tIGRlIGxhIHRhYmxlIGxp6WUg4CBjZXR0ZSBlbnRpdOkuIFNpIG5vbiByZW5zZWlnbullIG9uIHByZW5kcmEgbGUgbm9tIGRlIGwnZW50aXTpDQogICAgKiBAcmV0dXJuIEVudGl0eSBsJ2VudGl0IHNlcnZhbnQgZGUgbW9k6GxlDQogICAgKiANCiAgICAqIEBzZWUgTXlBdXRvbG9hZA0KICAgICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVOYW1lLCAkbmFtZSwgJHByZWZpeGUgPSBudWxsLCAkZGJOYW1lID0gbnVsbCkNCgl7DQoJCSR0aGlzLT5uYW1lID0gJG5hbWU7DQoJCQ0KCQlpZihlbXB0eSgkZGJOYW1lKSkNCgkJCSR0aGlzLT5kYm5hbWUgPSAkbmFtZTsNCgkJZWxzZQ0KCQkJJHRoaXMtPmRibmFtZSA9ICRkYk5hbWU7DQoNCgkJaWYoZW1wdHkoJHByZWZpeGUpKQ0KCQkJJHByZWZpeGUgPSAkbW9kdWxlTmFtZTsNCgkJDQoJCSR0aGlzLT5kYm5hbWUgPSBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV8nLiRwcmVmaXhlLidfJy4kdGhpcy0+ZGJuYW1lOw0KCQkNCgkJLy9PbiBham91dGUgdW5lIGluc3RhbmNlIGRlIHNvaSBkYW5zIGwnYXV0b2xvYWQNCgkJbXlBdXRvbG9hZDo6YWRkSW5zdGFuY2UoJG1vZHVsZU5hbWUsJHRoaXMpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqICBkb2l0IOp0cmUgcmVk6WZpbml0IGRhbnMgY2hhcXVlIGNsYXNzZSBo6XJpdGFudCBkZSBFbnRpdHkuDQogICAgKiANCiAgICAqIENvbnRpZW50IHRvdXQgbGUgY29kZSBu6WNlc3NhaXJlIHBvdXIgaW5pdGlhbGlzZXIgbGVzIHRhYmxlcyBkdXJhbnQgbCdpbnN0YWxsYXRpb24gZHUgbW9kdWxlDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBpbml0VGFibGUoKXt9DQogICAgDQogICAgLyoqDQogICAgKiANCiAgICAqIFJldG91cm5lIHVuIHRhYmxlYXUgYXNzb2NpYXRpZiBwcup0IOAgbCdlbXBsb2kgcG91ciB1bmUgc2VsZWN0Ym94IOAgZGVzdGluYXRpb24gZHUgYmFja29mZmljZSAgICAgICAgICANCiAgICAqIA0KICAgICogZG9pdCDqdHJlIHN1cmNoYXJn6WUgZGFucyBsYSBjbGFzc2UgaOlyaXRhbnQgZGUgRW50aXR5IHNpIGwnb24gc291aGFpdGUgbCd1dGlsaXNlciBkZXB1aXMgbGUgY29kZQ0KICAgICogDQogICAgKiBAcGFyYW0gYXJyYXk8RW50aXR5PiBsYSBsaXN0ZSBkZXMgZW50aXTpcyDgIHRyYW5zZm9ybWVyDQogICAgKiBAcGFyYW0gJGxhbmcgbGEgbGFuZ3VlIGR1IGZyb250IG9mZmljZSAoZnIsIGVuLCAuLi4pIHNlcmEgdXRpbGlz6SBwb3VyIGRpZmbpcmVuY2llciBsZXMgY2hhbXBzIGVuIGJhc2UgOiBsaWJfZnIgbGliX2VuLCAuLi4NCiAgICAqIEByZXR1cm4gYXJyYXkgdW5lIGxpc3RlIGFzc29jaWF0aWYgcHLqdGUg4CBsJ2VtcGxvaSBwb3VyIGwnQVBJIGRlIGNtc21hZGVzaW1wbGUNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZWxlY3RGb3JCTygkbGlzdGUsICRsYW5nID0gJ2ZyJykNCgl7DQoJCXRocm93IG5ldyBFeGNlcHRpb24oImxhIGZvbmN0aW9uIGdldFNlbGVjdEZvckJPKCkgZGUgbGEgY2xhc3NlICIuJHRoaXMtPmdldE5hbWUoKS4iIG4nZXN0IHBhcyBjb2RlZSIpOw0KCX0NCgkNCiAgICAgLyoqDQogICAgKiANCiAgICAqIFJldG91cm5lIHVuIHRhYmxlYXUgYXNzb2NpYXRpZiBwcup0IOAgbCdlbXBsb2kgcG91ciB1bmUgc2VsZWN0Ym94IOAgZGVzdGluYXRpb24gZHUgZnJvbnRvZmZpY2UgICAgICAgICAgDQogICAgKiANCiAgICAqIGRvaXQg6nRyZSBzdXJjaGFyZ+llIGRhbnMgbGEgY2xhc3NlIGjpcml0YW50IGRlIEVudGl0eSBzaSBsJ29uIHNvdWhhaXRlIGwndXRpbGlzZXIgZGVwdWlzIGxlIGNvZGUNCiAgICAqIA0KICAgICogQHBhcmFtIGFycmF5PEVudGl0eT4gbGEgbGlzdGUgZGVzIGVudGl06XMg4CB0cmFuc2Zvcm1lcg0KICAgICogQHBhcmFtICRsYW5nIGxhIGxhbmd1ZSBkdSBmcm9udCBvZmZpY2UgKGZyLCBlbiwgLi4uKSBzZXJhIHV0aWxpc+kgcG91ciBkaWZm6XJlbmNpZXIgbGVzIGNoYW1wcyBlbiBiYXNlIDogbGliX2ZyIGxpYl9lbiwgLi4uDQogICAgKiBAcmV0dXJuIGFycmF5IHVuZSBsaXN0ZSBhc3NvY2lhdGlmIHBy6nRlIOAgbCdlbXBsb2kgcG91ciBsJ0FQSSBkZSBjbXNtYWRlc2ltcGxlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0U2VsZWN0Rm9yRk8oJGxpc3RlLCAkbGFuZyA9ICdmcicpDQoJew0KCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJsYSBmb25jdGlvbiBnZXRTZWxlY3RGb3JGTygpIGRlIGxhIGNsYXNzZSAiLiR0aGlzLT5nZXROYW1lKCkuIiBuJ2VzdCBwYXMgY29kZWUiKTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBBam91dGUgdW4gbm91dmVhdSBjaGFtcHMgRmllbGQg4CBsYSBsaXN0ZSBk6WrgIHBy6XNlbnRlIGRhbnMgbCdFbnRpdOkNCiAgICAqIA0KICAgICogQHBhcmFtIEZpZWxkIGxlIGNoYW1wcyDgIGFqb3V0ZXIuDQogICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkKEZpZWxkICRuZXdGaWVsZCkNCgl7DQoJCSR0aGlzLT5maWVsZHNbJG5ld0ZpZWxkLT5nZXROYW1lKCldID0gJG5ld0ZpZWxkOw0KDQoJCS8vQWpvdXQgZCd1bmUgc2VxdWVuY2Ugc3VyIGxlcyBjbGUNCgkJaWYoJG5ld0ZpZWxkLT5pc1ByaW1hcnlLRVkoKSkNCgkJew0KCQkJaWYoJHRoaXMtPnBrICE9IG51bGwpDQoJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTGUgcHJvZ3JhbW1lIG5lIGdlcmUgcGFzIGxlcyBlbnRpdGVzIOAgbXVsdGlwbGVzIGNsZXMgcHJpbWFpcmVzIChQSykiKTsNCgkJCQkNCgkJCSR0aGlzLT5wayA9ICRuZXdGaWVsZC0+Z2V0TmFtZSgpOw0KCQkJJHRoaXMtPnNlcW5hbWUgPSAkdGhpcy0+ZGJuYW1lLkVudGl0eTo6JF9DT05TVF9TRVE7DQoJCX0NCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXRvdXJuZSBsZSBjaGFtcHMgc2VydmFudCBkZSBQcmltYXJ5IEtleSBkZSBsJ2VudGl06Q0KICAgICogDQogICAgKiBAcmV0dXJuIEZpZWxkIGxlIGNoYW1wcyBQSyBzaSBleGlzdGFudCANCiAgICAqIEBleGNlcHRpb24gc2kgYXVjdW4gY2hhbXBzIFBLIG4nZXhpc3RlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGsoKQ0KCXsNCgkJaWYoJHRoaXMtPnBrID09IG51bGwpDQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJsYSBjbGFzcyAiLiR0aGlzLT5nZXROYW1lKCkuIiBuZSBwb3NzZWRlIHBhcyBkZSBjbGUgcHJpbWFpcmUiKTsNCgkJDQoJCXJldHVybiAkdGhpcy0+ZmllbGRzWyR0aGlzLT5wa107DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbGEgbGlzdGUgZGVzIEZpZWxkcyBkZSBsJ2VudGl06ScNCiAgICAqIA0KICAgICogQHJldHVybiBhcnJheTxGaWVsZD4gdW4gdGFibGVhdSBjb250ZW5hbnQgdG91cyBsZXMgRmllbGRzIA0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RmllbGRzKCkNCgl7DQoJCXJldHVybiAkdGhpcy0+ZmllbGRzOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIHJldG91cm5lIHVuIEZpZWxkIOAgcGFydGlyIGR1IG5vbSBwYXNz6SBlbiBwYXJhbeh0cmUNCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQ0KICAgICogQHJldHVybiBGaWVsZCBsZSBGaWVsZCBjb3JyZXNwb25kYW50DQogICAgKiBAZXhjZXB0aW9uIHNpIGF1Y3VuIEZpZWxkIG5lIGNvcnJlc3BvbmQgYXUgcGFyYW3odHJlIHBhc3PpDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RmllbGRCeU5hbWUoJG5hbWUpDQoJew0KCQlpZihpc3NldCgkdGhpcy0+ZmllbGRzWyRuYW1lXSkpDQoJCQlyZXR1cm4gJHRoaXMtPmZpZWxkc1skbmFtZV07DQoJCQ0KCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJsZSBjaGFtcHMgJG5hbWUgbidleGlzdGUgcGFzIGRhbnMgbCdlbnRpdCZlYWN1dGU7ICIuJHRoaXMtPmdldE5hbWUoKSk7DQoJfQ0KCQ0KCS8qKg0KICAgICogcmV0b3VybmUgdnJhaSBzaSB1biBGaWVsZCDgIHBhcnRpciBkdSBub20gcGFzc+kgZW4gcGFyYW3odHJlIGV4aXN0ZQ0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lDQogICAgKiBAcmV0dXJuIEJvb2xlYW4gc2kgZXhpc3RhbnQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBpc0ZpZWxkQnlOYW1lRXhpc3RzKCRuYW1lKQ0KCXsNCgkJcmV0dXJuIGlzc2V0KCR0aGlzLT5maWVsZHNbJG5hbWVdKTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXRvdXJuZSBsZSBub20gZGUgbGEgdGFibGUgZW4gYmFzZSBkZSBsJ0VudGl06Q0KICAgICogDQogICAgKiBAcmV0dXJuIHN0cmluZyBsZSBub20gZGUgbGEgdGFibGUNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldERibmFtZSgpDQoJew0KCQlyZXR1cm4gJHRoaXMtPmRibmFtZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXRvdXJuZSBsZSBub20gZGUgbCdlbnRpdOkNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgbGUgbm9tIGRlIGwnZW50aXTpDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkNCgl7DQoJCXJldHVybiAkdGhpcy0+bmFtZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXRvdXJuZSBsZSBub20gZGUgbGEgc+lxdWVuY2Ugc2kgZWxsZSBleGlzdGUNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgbGUgbm9tIGRlIGxhIHPpcXVlbmNlIG91IE5VTEwgc2kgaW5leGlzdGFudGUNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFNlcW5hbWUoKQ0KCXsNCgkJaWYoZW1wdHkoJHRoaXMtPnNlcW5hbWUpKQ0KCQkJcmV0dXJuIG51bGw7DQoJCQ0KCQlyZXR1cm4gJHRoaXMtPnNlcW5hbWU7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbGEgdmFsZXVyIGQndW4gRmllbGQgZGUgbCdlbnRpdOkNCiAgICAqIAkNCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcw0KICAgICogQHJldHVybiBtaXhlZCBsYSB2YWxldXIgY29udGVudSBkYW5zIGNlIGNoYW1wcw0KICAgICogQGV4Y2VwdGlvbiBzaSBhdWN1biBjaGFtcHMgbidleGlzdGUgYXZlYyBjZSBub20NCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXQoJGZpZWxkTmFtZSkNCgl7DQoJCSRmaWVsZG5hbWVTaWQgPSBleHBsb2RlKCJfc2lkIiwgJGZpZWxkTmFtZSk7DQoJCSRmaWVsZG5hbWVTaWQgPSAkZmllbGRuYW1lU2lkWzBdOw0KCQlpZighYXJyYXlfS0VZX2V4aXN0cygkZmllbGROYW1lLCR0aGlzLT5maWVsZHMpICYmICFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZG5hbWVTaWQsJHRoaXMtPmZpZWxkcykpDQoJCXt0aHJvdyBuZXcgRXhjZXB0aW9uKCdmb25jdGlvbiBHZXQgOiBjbGUgJy4kZmllbGROYW1lLicgbm9uIHRyb3V2ZWUgZGFucyBsXCdlbnRpdGUgJy4kdGhpcy0+Z2V0TmFtZSgpKTt9DQoJCQ0KCQlpZighaXNzZXQoJHRoaXMtPnZhbHVlc1skZmllbGROYW1lXSkpDQoJCQlyZXR1cm4gbnVsbDsNCgkJDQoJCXJldHVybiAkdGhpcy0+dmFsdWVzWyRmaWVsZE5hbWVdOw0KCX0NCgkNCiAgIC8qKg0KICAgICogQWZmZWN0ZSB1bmUgdmFsZXVyIOAgdW4gRmllbGQgZGUgbCdlbnRpdOkNCiAgICAqICAgICANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcw0KICAgICogQHBhcmFtIG1peGVkIGxhIHZhbGV1ciANCiAgICAqIEBleGNlcHRpb24gc2kgYXVjdW4gY2hhbXBzIG4nZXhpc3RlIGF2ZWMgY2Ugbm9tDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0KCRmaWVsZE5hbWUsJHZhbHVlKQ0KCXsNCgkJJGZpZWxkbmFtZVNpZCA9IGV4cGxvZGUoIl9zaWQiLCAkZmllbGROYW1lKTsNCgkJJGZpZWxkbmFtZVNpZCA9ICRmaWVsZG5hbWVTaWRbMF07DQoJCWlmKCFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZE5hbWUsJHRoaXMtPmZpZWxkcykgJiYgIWFycmF5X0tFWV9leGlzdHMoJGZpZWxkbmFtZVNpZCwkdGhpcy0+ZmllbGRzKSkNCgkJe3Rocm93IG5ldyBFeGNlcHRpb24oJ2ZvbmN0aW9uIFNldCA6IGNsZSAnLiRmaWVsZE5hbWUuJyBub24gdHJvdXZlZSBkYW5zIGxcJ2VudGl0ZScpO30NCgkJDQoJCSR0aGlzLT52YWx1ZXNbJGZpZWxkTmFtZV0gPSAkdmFsdWU7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbCdlbnNlbWJsZSBkZXMgdmFsZXVycyBk6WZpbmllIHBvdXIgbCdlbnRpdOkNCiAgICAqIA0KICAgICogbGUgdGFibGVhdSBlc3QgdW4gdGFibGVhdSBhc3NvY2lhdGlmIGTpZmluaXQgY29tbWUgdGVsIDoNCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgYXJyYXkoDQogICAgKiAgICAgICAgJ25vbV9kdV9maWVsZCcgPT4gdmFsZXVyLA0KICAgICogICAgICAgICdub21fZHVfZmllbGQnID0+IHZhbGV1ciwNCiAgICAqICAgICAgICAnbm9tX2R1X2ZpZWxkJyA9PiB2YWxldXIsDQogICAgKiAgICAgICAgJ25vbV9kdV9maWVsZCcgPT4gdmFsZXVyDQogICAgKiAgICAgKQ0KICAgICogIDwvY29kZT4NCiAgICAqIA0KICAgICogQHJldHVybiBhcnJheSB1biB0YWJsZWF1IGFzc29jaWF0aWYNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlcygpDQoJew0KCQlyZXR1cm4gJHRoaXMtPnZhbHVlczsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXRvdXJuZSB1biB0ZXh0ZSBhc3NvY2npIOAgbCdlbnRpdOkgZW4gY291cnMuIFV0aWxpc+kgcGFyIGV4ZW1wbGUgZGFucyBsZSBiYWNrT2ZmaWNlIA0KICAgICogcG91ciBhZmZpY2hlciBkZXMgbm90ZXMg4CBsJ2F0dGVudGlvbiBkZXMgdXRpbGlzYXRldXJzIGR1cmFudCB1bmUgY3LpYXRpb24gcGFyIGV4ZW1wbGUNCiAgICAqIA0KICAgICogUGV1dCDqdHJlIHN1cmNoZ2FyZ+llIHNlbG9uIGxlcyBiZXNvaW5zDQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQg4CBk6WZpbmlyIHNlbG9uIGxlIHRyYWl0ZW1lbnQgICAgICAgICAgICANCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEFkbWluTm90ZSgpDQoJew0KCQlyZXR1cm4gbnVsbDsNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGluaXRGb3JlaWduS0VZKCRmaWVsZE5hbWUsICRzaWQgPSBudWxsKQ0KCXsJCQkNCgkJJGZpZWxkID0gJHRoaXMtPmdldEZpZWxkQnlOYW1lKCRmaWVsZE5hbWUpOw0KCQkNCgkJaWYoJGZpZWxkLT5nZXRLRVlOYW1lKCkgPT0gJycpDQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJMZSBjaGFtcHMgJGZpZWxkTmFtZSBuZSBwb3NzZWRlIGF1Y3VuZSBjbGUgZXRyYW5nZXJlIGFzc29jaWVlIik7DQoJCQkNCgkJJGNsZSA9IGV4cGxvZGUoJy4nLCRmaWVsZC0+Z2V0S0VZTmFtZSgpLDIpOw0KCQkvL0V2YWx1YXRpb24gZGUgbGEgZWNsYXNzIGVuIGNvdXJzDQoJCWV2YWwoJyRlbnRpdHkgPSBuZXcgJy4kY2xlWzBdLicoKTsnKTsNCgkJDQoJCWlmKCRzaWQgPT0gbnVsbCkNCgkJew0KCQkJJGxpc3RlID0gQ29yZTo6c2VsZWN0QWxsKCRlbnRpdHkpOw0KCQl9IGVsc2UNCgkJew0KCQkJJGxpc3RlID0gQ29yZTo6c2VsZWN0QnlJZHMoJGVudGl0eSwgYXJyYXkoJHNpZCkpOw0KCQl9DQoJCQ0KCQlyZXR1cm4gYXJyYXkoJGVudGl0eSwkbGlzdGUpOw0KCQ0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFJlZ2lzdGVyUm91dGVzKCkNCgl7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUGVybWV0IGVuIHN1cmNoYXJnZWFudCBjZXR0ZSBt6XRob2RlIGRlcHVpcyBsYSBjbGFzc2UgaOlyaXRhbnQgZGUgRW50aXR5IGRlIGZhaXJlIA0KICAgICogICBkdSBwcmUtdHJhaXRlbWVudCBkZXMgZG9ubullcyBhdmFudCBzYXV2ZWdhcmRlIGVuIGJhc2UuDQogICAgKiANCiAgICAqIEBwYXJhbSBhcnJheSB0YWJsZWF1IGNvbnRlbmFudCBsZXMgdmFsZXVycyDgIHRyYWl0ZXINCiAgICAqIEBwYXJhbSBhcnJheSDpdmVudHVlbHMgcGFyYW3odHJlcyBzdXBwbOltZW50YWlyZXMgZOlzdGlu6SDgIGxhIGZvbmN0aW9uDQogICAgKiBAcmV0dXJuIG1peGVkIOAgZOlmaW5pciBzZWxvbiBsZSB0cmFpdGVtZW50IA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZUZvclNhdmUoJHJvd3MsICRhcmdzID0gbnVsbCl7DQoJDQoJCXJldHVybiAkcm93czsNCgl9DQoJDQogICAgLyoqDQogICAgKiBBam91dGUgdW4gRmlsdHJlIOAgbGEgbGlzdGUgZGVzIGZpbHRyZXMgZXhpc3RhbnRzIGRlIGwnZW50aXTpDQogICAgKiANCiAgICAqIExlcyBmaWx0cmVzIHBlcm1ldHRlbnQgZGUgZmFpcmUgdW4gZmlsdHJhZ2UgZGFucyBsZXMgcmVjaGVyY2hlcyBkdSBCYWNrT2ZmaWNlDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGZpbHRyZQ0KICAgICogQHBhcmFtIEZJTFRSRV9IVE1MIGxlIHR5cGUgZGUgZmlsdHJlIGNob2lzaXQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBhZGRGaWx0cmUoJGZpbHRyZU5hbWUsIEZJTFRSRV9IVE1MICRmaWx0cmVUeXBlKQ0KCXsNCgkJJHRoaXMtPmZpbHRyZXNbJGZpbHRyZU5hbWVdID0gbmV3IEZpbHRyZSgkZmlsdHJlVHlwZSwgbnVsbCk7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbCdlbnNlbWJsZSBkZXMgRmlsdHJlcyBk6WZpbml0cyBwb3VyIGwnZW50aXTpIGVuIGNvdXJzLg0KICAgICogDQogICAgKiBMZXMgZmlsdHJlcyBwZXJtZXR0ZW50IGRlIGZhaXJlIHVuIGZpbHRyYWdlIGRhbnMgbGVzIHJlY2hlcmNoZXMgZHUgQmFja09mZmljZSAgICAqIA0KICAgICogDQogICAgKiBAcmV0dXJuIGFycmF5IHVuIHRhYmxlYXUgYXNzb2NpYXRpZiBhdmVjIG5vbUZpbHRyZSA9PiB0eXBlRmlsdHJlDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRGaWx0cmVzKCkNCgl7DQoJCWlmKCR0aGlzLT5maWx0cmVzID09IG51bGwpDQoJCQlyZXR1cm4gYXJyYXkoKTsNCgkJCQ0KCQlyZXR1cm4gJHRoaXMtPmZpbHRyZXM7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgdW4gdHlwZUZpbHRyZSDgIHBhcnRpciBkdSBub20gcGFzc+kgZW4gcGFyYW3odHJlDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGZpbHRyZQ0KCSoNCgkqIEByZXR1cm4gRmlsdHJlIGxlIGZpbHRyZSBz6WxlY3Rpb25u6SANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRGaWx0cmVCeU5hbWUoJGZpbHRyZU5hbWUpDQoJew0KCQlyZXR1cm4gJHRoaXMtPmZpbHRyZXNbJGZpbHRyZU5hbWVdOw0KCX0NCgkNCgkvKioNCgkgKiBGb25jdGlvbiB1dGlsaXRhaXJlIHBlcm1ldHRhbnQgZGUgcGFzc2VyIHVuZSBjaGFpbmUgZHUgdHlwZSAiYmxhYmxhICVub20lIGJsYWJsYSAlcHJlbm9tJSBibGFibGEiIGV0IGRlIHLpY3Vw6XJlciBlbiBzb3J0aWUgbGVzIGNvcnJlc3BvbmRhbmNlcyBhdmVjIGxlcyB2YWxldXJzIGRlIGwnZW50aXTpIGNvdXJhbnRlDQoJICogZXhlbXBsZSA6ICJibGFibGEgRHVwb250IGJsYWJsYSBKZWFuIGJsYWJsYSIuIElsIGZhdXQg6XZpZGVtZW50IHF1ZSBsZXMgaW5mb3JtYXRpb25zIGNvbnRlbnVlcyBlbnRyZSAlJSBzb2llbnQgbGUgbm9tIGQndW4gRklFTEQgZGUgbCdlbnRpdOkgdmFsaWRlLg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyBsYSBjaGFpbmUgZGUgY2FyYWN06HJlcyDgIHRyYWl0ZXINCgkgKiBAcGFyYW0gc3RyaW5nIGxlIHBhdHRlcm4gZGUgcmVjaGVyY2hlLiBQYXIgZOlmYXV0IHRyYWl0ZXJhIGNlIHF1aSBzZSB0cm91dmUgZW50cmUgZGV1eCBzeW1ib2xlcyBwb3VyY2VudGFnZSA6ICUNCgkgKi8gDQoJZnVuY3Rpb24gcHJvY2Vzc1N0cmluZ1dpdGhWYWx1ZXMoJHN0cmluZywgJHBhdHRlcm4gPSAnLyUoXHcrKSUvaScpDQoJew0KCQkkb2NjdSA9IHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkc3RyaW5nLCAkcmVzdWx0YXQpOw0KCQlmb3IoJGkgPSAwOyAkaSA8ICRvY2N1OyAkaSsrKQ0KCQl7DQoJCQkkcmVzdWx0YXRbMV1bJGldID0gJHRoaXMtPmdldCgkcmVzdWx0YXRbMV1bJGldKTsNCgkJfQ0KCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoJHJlc3VsdGF0WzBdLCAkcmVzdWx0YXRbMV0sICRzdHJpbmcsICRvY2N1KTsNCgkJcmV0dXJuICRzdHJpbmc7DQoJfQ0KCQ0KCS8qKg0KCSAqIEZvbmN0aW9uIHV0aWxpdGFpcmUgcGVybWV0dGFudCBkZSBuZXR0b3llciBsYSBjaGFpbmUgZGUgY2FyYWN06HJlIGVuIHZ1ZSBkJ3V0aWxpc2F0aW9uIGRhbnMgdW5lIHVybA0KCSAqDQoJICogQHBhcmFtIHN0cmluZyBsYSBjaGFpbmUg4CB0cmFpdGVyDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBsYSBjaGFpbmUgbmV0dG956WUNCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHByb2Nlc3NTdHJpbmdGb3JVcmwoJHRleHRlKQ0KCXsJDQoJCS8vU3VwcHJlc3Npb24gZGVzIGFjY2VudHMgZXQgYXV0cmVzIGNvbm5lcmllcw0KCQkkdGV4dGUgPSBodG1sZW50aXRpZXMoJHRleHRlLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsNCgkJDQoJCSR0ZXh0ZSA9IHByZWdfcmVwbGFjZSgnIyYoW0EtemEtel0pKD86YWN1dGV8Y2VkaWx8Y2lyY3xncmF2ZXxvcm58cmluZ3xzbGFzaHx0aHx0aWxkZXx1bWwpOyMnLCAnXDEnLCAkdGV4dGUpOw0KCQkkdGV4dGUgPSBwcmVnX3JlcGxhY2UoJyMmKFtBLXphLXpdezJ9KSg/OmxpZyk7IycsICdcMScsICR0ZXh0ZSk7IC8vIHBvdXIgbGVzIGxpZ2F0dXJlcyBlLmcuICcmb2VsaWc7Jw0KCQkkdGV4dGUgPSBwcmVnX3JlcGxhY2UoJyMmW147XSs7IycsICcnLCAkdGV4dGUpOyAvLyBzdXBwcmltZSBsZXMgYXV0cmVzIGNhcmFjdOhyZXMgc3DpY2lhdXgNCgkJJHRleHRlID0gcHJlZ19yZXBsYWNlKCcjICMnLCAnLScsICR0ZXh0ZSk7IC8vIGVzcGFjZSAtPiAgdGlyZXQgNg0KCQkkdGV4dGUgPSBwcmVnX3JlcGxhY2UoJyNbXmEtekEtWjAtOV9cLSxdIycsICcnLCAkdGV4dGUpOyAvLyBzdXBwcmltZSBsZXMgY2FyYWN06HJlcyBxdWkgbmUgc3VpdmVyYWllbnQgcGFzIGxhIHLoZ2xlIGRlIHJlcm91dGUgICANCgkJcmV0dXJuICR0ZXh0ZTsNCgl9DQoJDQoJLyoqDQoJICogRmFpdCB1biBhcHBlbCDgIGNvbXBhcmVUbyBkZSBsJ2VudGl06SBwb3VyIHRyaWVyIGxlIHRhYmxlYXUuIA0KCSAqIFBvdXIgZW4gYulu6WZpY2llciwgbCdlbnRpdOkgZG9pdCBpbXBs6W1lbnRlciBsJ2ludGVyZmFjZSBJU29ydGFibGUNCgkgKg0KCSAqIEV4ZW1wbGUgZGUgbel0aG9kZSBjb21wYXJlVG8oKSDgIGNvZGVyIGRhbnMgdm90cmUgZW50aXTpIGRlIHR5cGUgY2xpZW50IDogDQoJICogIDxjb2RlPg0KCSAqICAgKiBFZmZlY3R1ZSB1bmUgY29tcGFyYWlzb24gc29tbWFpcmUgKOlnYWxpdOkgYWJzb2x1ZSkgZW50cmUgZGV1eCBlbnRpdOlzLiANCgkgKgkgKiBkb2l0IOp0cmUgcmVk6WZpbmllIGRhbnMgY2hhcXVlIGVudGl06SBhdmVjIGxhcXVlbGxlIG5vdXMgc291aGFpdG9ucyB1biB2cmFpIGNvbXBhcmF0aWYNCgkgKgkgKiBwYXIgaGFiaXR1ZGUgOiByZW52b2kgMSBzaSBsYSBwcmVtaehyZSBlbnRpdOkgZXN0IHN1cOlyaWV1cmUsIC0xIHNpIGluZulyaWV1cmUsIDAgc2kg6WdhbGl06S4NCgkgKgkgKg0KCSAqCSAqIEBwYXJhbSBFbnRpdHkgbGEgcHJlbWnocmUgZW50aXTpIOAgY29tcGFyZXIuDQoJICoJICogQHBhcmFtIEVudGl0eSBsYSBzZWNvbmRlIGVudGl06SDgIGNvbXBhcmVyLg0KCSAqCSAqDQoJICoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wYXJlVG8oRW50aXR5ICRlbnRpdHkxLCBFbnRpdHkgJGVudGl0eTIpDQoJICoJew0KCSAqCQkkY29tcGFyZSA9IHN0cmNtcCgkZW50aXR5MS0+Z2V0KCdub20nKSwgJGVudGl0eTItPmdldCgnbm9tJykpOw0KCSAqICAgICAgcmV0dXJuICRjb21wYXJlOw0KCSAqCX0NCgkgKiANCgkgKiAgPC9jb2RlPg0KCSAqDQoJICogQHBhcmFtIGFycmF5PEVudGl0eT4gbGUgdGFibGVhdSBkJ0VudGl06Q0KCSAqDQoJICogQHJldHVybiBhcnJheTxFbnRpdHk+IGxlIHRhYmxlYXUgZCdFbnRpdOkgdHJp6SBzZWxvbiBsYSBt6XRob2RlIGNvbXBhcmVUbyBk6WZpbmkgZGFucyBsJ2VudGl06S4NCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnQoRW50aXR5ICRlbnRpdHksIGFycmF5ICRhcnJheSkNCgl7DQoJCQ0KCQkvL2h0dHA6Ly9waHAubmV0L21hbnVhbC9mci9mdW5jdGlvbi5nZXQtY2FsbGVkLWNsYXNzLnBocA0KCQkvL1BIUCA1LjMuMCBzZXVsZW1lbnQNCgkJLy91c29ydCgkYXJyYXksIGFycmF5KGdldF9jYWxsZWRfY2xhc3MoKSwgImNvbXBhcmVUbyIpKTsNCgkJdXNvcnQoJGFycmF5LCBhcnJheShnZXRfY2xhc3MoJGVudGl0eSksICJjb21wYXJlVG8iKSk7DQoJCQ0KCQlyZXR1cm4gJGFycmF5Ow0KCX0NCgkJCQ0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRJbm5lclNlb0ZvckJhbGlzZSgkbGFuZywgYXJyYXkgJGNoYWluZSwgYXJyYXkgJGNoYWluZVBhcmFtKQ0KCXsNCgkJDQoJCWlmKCFpc3NldCgkY2hhaW5lWyRsYW5nXSkpDQoJCXsNCgkJCXRocm93IG5ldyBFeGNlcHRpb24gKCJBdWN1biBwYXJhbWV0cmFnZSBTRU8gZHUgdGl0bGUgb3UgaDEgbidlc3QgZGVmaW5pdCBwb3VyIGxhIGxhbmd1ZSAkbGFuZyBkYW5zIGwnZW50aXRlICIuICR0aGlzLT5nZXROYW1lKCkpOw0KCQl9DQoJCQ0KCQkkcmVtcGxhY2UgPSBhcnJheSgpOw0KCQkkcmVjaGVyY2hlID0gYXJyYXkoKTsNCgkJZm9yKCRpPTA7ICRpIDwgY291bnQoJGNoYWluZVBhcmFtKTsgJGkrKykNCgkJew0KCQkJaWYoISR0aGlzLT5pc0ZpZWxkQnlOYW1lRXhpc3RzKCRjaGFpbmVQYXJhbVskaV0pKQ0KCQkJew0KCQkJCXRocm93IG5ldyBFeGNlcHRpb24gKCJsZSBjaGFtcHMgIi4kY2hhaW5lUGFyYW1bJGldLiIgZGUgbCdlbnRpdGUgIi4gJHRoaXMtPmdldE5hbWUoKS4gIiBkZWZpbml0IGEgZGVzIGZpbnMgZGUgY29uc3RydWN0aW9uIFNFTyBkZSBIbi9UaXRsZSBuJ2V4aXN0ZSBwYXMuIik7DQoJCQl9DQoJCQkkcmVtcGxhY2VbXSA9ICR0aGlzLT5nZXQoJGNoYWluZVBhcmFtWyRpXSk7DQoJCQkvLyAgZWNobyAkY2hhaW5lUGFyYW1bJGldOw0KCQkJJHJlY2hlcmNoZVtdID0gJyUnLigkaSsxKTsNCgkJfQ0KCQkkdGV4dGUgPSBzdHJfcmVwbGFjZSgkcmVjaGVyY2hlLCAkcmVtcGxhY2UsICRjaGFpbmVbJGxhbmddKTsNCgkJDQoJCS8vU3VwcHJlc3Npb24gZGVzIGFjY2VudHMgZXQgYXV0cmVzIGNvbm5lcmllcw0KCQkkdGV4dGUgPSBodG1sZW50aXRpZXMoJHRleHRlLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsNCgkNCgkJcmV0dXJuICR0ZXh0ZTsNCgl9DQoJDQoJLyoqDQoJICogT24gZOlmaW5pdCBwYXIgZOlmYXV0IGxlcyBFbnRpdOlzIGNvbW1lIOl0YW50IG5vbiBpbmRleGFibGUuDQoJICoNCgkgKiBJbCBzdWZmaXQgZGUgc3VyY2hhcmdlciBjZXR0ZSBt6XRob2RlIGRhbnMgbCdlbnRpdOkgcG91ciBwcm92b3F1ZXIgbCdpbmRleGFnZSBkZSBjZWxsZSBjaS4NCgkgKiANCgkgKiBAcmV0dXJuIGJvb2xlYW4gc2kgbCdlbnRpdOkgcGV1dCDqdHJlIGluZGV46WUgZGFucyBsZSBtb3RldXIgZGUgcmVjaGVyY2hlDQoJICovDQoJIHB1YmxpYyBmdW5jdGlvbiBpc0luZGV4YWJsZSgpDQoJIHsNCgkJaWYoaXNzZXQoJHRoaXMtPmluZGV4VGhpc0VudGl0eSkpDQoJCQlyZXR1cm4gJHRoaXMtPmluZGV4VGhpc0VudGl0eTsNCgkJDQoJCXJldHVybiBmYWxzZTsNCgkgfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/class/class.entityassociation.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIGNsYXNzZSBt6HJlcyBkZSB0b3V0ZXMgbGVzIGVudGl06XMgZXQgZW50aXTpcyBhc3NvY2lhdGl2ZXMNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQovKioNCiAqIENsYXNzIGFic3RyYWN0IGTpY3JpdmFudCBsZSBjb21wb3J0ZW1lbnQgZXQgbGVzIHByb3Byael06XMgZCd1bmUgRW50aXTpIEFzc29jaWF0aXZlDQogKiAgICANCiAqDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQphYnN0cmFjdCBjbGFzcyBFbnRpdHlBc3NvY2lhdGlvbiBleHRlbmRzIEVudGl0eSANCnsNCglwcml2YXRlICRuYkZpZWxkID0gMDsNCg0KICAgICAvKioNCiAgICAqIENvbnN0cnVjdGV1ciBzZW1pLXByaXbpIHBvdXIg6XZpdGVyIGQnaW5zdGFuY2VyIGNldHRlIGNsYXNzZSBkZXB1aXMgbGUgY29kZSBwYXIgZXJyZXVyDQogICAgKiANCiAgICAqICAgQSBjaGFxdWUgY29uc3RydWN0aW9uLCBsJ2VudGl06SBlc3QgcGxhY+llIGRhbnMgbCdBdXRvbG9hZGVyDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGQndW4gbW9kdWxlIGRlIHR5cGUgTW1tZnMNCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGRlIGwnZW50aXTpDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIHBy6WZpeGUg4CB1dGlsaXNlciBlbiBiYXNlIGRlIGRvbm7pZSBwb3VyIGxlcyB0YWJsZXMuIEVuIGfpbulyYWwgbGUgbm9tIGRlIHZvdHJlIG1vZHVsZQ0KICAgICogQHBhcmFtIHN0cmluZyBzaSByZW5zZWlnbukgc2VyYSBsZSBub20gZGUgbGEgdGFibGUgbGnpZSDgIGNldHRlIGVudGl06S4gU2kgbm9uIHJlbnNlaWdu6WUgb24gcHJlbmRyYSBsZSBub20gZGUgbCdlbnRpdOkNCiAgICAqIEByZXR1cm4gRW50aXR5QXNzb2NpYXRpb24gbCdlbnRpdGUgc2VydmFudCBkZSBtb2TobGUNCiAgICAqIA0KICAgICogQHNlZSBNeUF1dG9sb2FkDQogICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCRwcmVmaXhlID0gbnVsbCwgJGRiTmFtZSA9IG51bGwpDQoJew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCRtb2R1bGVOYW1lLCAkbmFtZSwgJHByZWZpeGUsICRkYk5hbWUpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIEFqb3V0ZSB1biBjaGFtcHMgDQogICAgKiANCiAgICAqIExlIHByb2dyYW1tZSBuZSBn6HJlIHF1ZSBkZXV4IGNoYW1wcyBwYXIgRW50aXR5QXNzb2NpYXRpb24NCiAgICAqIA0KICAgICogQHBhcmFtIEZpZWxkIGxlIGNoYW1wcyDgIGFqb3V0ZXIuDQogICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkKEZpZWxkICRuZXdGaWVsZCkNCgl7DQoJCSR0aGlzLT5uYkZpZWxkICsrOw0KCQkNCgkJaWYoJHRoaXMtPm5iRmllbGQgPiAyKQ0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbiAoImltcG9zc2libGUgZCd1dGlsaXNlciB1bmUgdGFibGUgZCdhc3NvY2lhdGlvbiBhdmVjIHBsdXMgZGUgMiBjaGFtcHMgY2xlLiBFbnRpdGUgOiAiLiAkdGhpcy0+Z2V0TmFtZSgpKTsNCgkJCQkNCgkJcGFyZW50OjphZGQoJG5ld0ZpZWxkKTsNCgl9DQoNCn0=]]></data>
	</file>
	<file>
	  <filename>/class/class.exemple.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgdG91dGVzIGxlcyBmb25jdGlvbm5hbGl06XMgcmVsYXRpdmVzIGF1eCByZWNoZXJjaGVzIHBhciBDcml06HJlcw0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQogDQovKioNCiAqIENsYXNzIHJlcHLpc2VudGFudCBsZSBjdW11bCBkZSBYIENyaXTocmUgZW4gdnUgZGUgZmFpcmUgdW5lIHJlY2hlcmNoZSBwYXIgRXhlbXBsZQ0KICogICAgDQogKg0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KZmluYWwgY2xhc3MgRXhlbXBsZSANCnsNCglwcml2YXRlICRDcml0ZXJlcyA9IGFycmF5KCk7DQoJDQogICAgLyoqDQogICAgKiBDb25zdHJ1Y3RldXIgcHVibGljLg0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KCXsNCgl9DQoJDQogICAgDQogICAgLyoqDQogICAgKiBBam91dGUgdW4gQ3JpdGVyZSDgIGxhIGxpc3RlIGV4aXN0YW50ZQ0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkdSBjaGFtcHMgRmllbGQNCiAgICAqIEBwYXJhbSBzdHJpbmcgdW5lIHZhbGV1ciBkZSBsYSBjbGFzcyBUeXBlQ3JpdGVyZSANCiAgICAqIEBwYXJhbSBhcnJheSB1biB0YWJsZWF1IGRlIHBhcmFt6HRyZXMgdXRpbGlz6XMgZW4gYXNzb2NpYXRpb24gYXZlYyBsZSBwYXJhbeh0cmUgJHR5cGVDcml0ZXJlDQogICAgKiBAcGFyYW0gYm9vbGVhbiAkaWdub3JlQ2FzZSBmYXV4IHBhciBk6WZhdXQsIHNw6WNpZmllIHNpIGwnb24gc291aGFpdGUgdXRpbGlzZXIgbGUgVHlwZUNyaXRlcmUgYXZlYyBvdSBzYW5zIGNhc3NlIChhemUgIT0gQVpFKQ0KICAgICogDQogICAgKiBAc2VlIFR5cGVDcml0ZXJlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRkQ3JpdGVyZSgkZmllbGRuYW1lLCAkdHlwZUNyaXRlcmUsICRwYXJhbXNDcml0ZXJlLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJaWYoIWlzX2FycmF5KCRwYXJhbXNDcml0ZXJlKSkNCgkJew0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigibGUgcGFyYW1ldHJlIENyaXRlcmUgWyIuJGZpZWxkbmFtZS4iXSBkZSBsJ0V4ZW1wbGUgZG9pdCBldHJlIHVuZSBsaXN0ZSIpOw0KCQl9DQoJCQ0KCQkkdGhpcy0+Q3JpdGVyZXNbXSA9IG5ldyBDcml0ZXJlKCRmaWVsZG5hbWUsICR0eXBlQ3JpdGVyZSwgJHBhcmFtc0NyaXRlcmUsICRpZ25vcmVDYXNlKTsNCgl9DQoNCiAgICAvKioNCiAgICAqIFJldG91cm5lIHRvdXMgbGVzIENyaXTocmVzIGNvbnRlbnUgZGFucyBsJ29iamV0IEV4ZW1wbGUuDQogICAgKiANCiAgICAqIEByZXR1cm4gYXJyYXk8Q3JpdGVyZT4gbGEgbGlzdGUgZGVzIG9iamV0cyBDcml0ZXJlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q3JpdGVyZXMoKXsNCgkJcmV0dXJuICR0aGlzLT5Dcml0ZXJlczsNCgl9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.field.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIHByaW5jaXBhbGVzIGNsYXNzZXMgdXRpbGlz6WVzIHBvdXIgZ+lyZXIgbGVzIEZpZWxkcw0KICoNCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCiANCi8qKg0KICogICBSZXBy6XNlbnRlIHVuIGNoYW1wcyBkJ3VuZSBlbnRpdOkgZGFucyBzb24gZW5zZW1ibGUsIGRlcHVpcyBsYSBiYXNlIGRlIGRvbm7pZSDgIGwnYWZmaWNoYWdlIA0KICogICAgZW4gcGFzc2FudCBwYXIgbGVzIGxpYWlzb25zIGludGVyLWVudGl06Q0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQpjbGFzcyBGaWVsZCANCnsNCglwcml2YXRlICRuYW1lOw0KCXByaXZhdGUgJHR5cGU7DQoJcHJpdmF0ZSAkc2l6ZTsNCgkNCglwcml2YXRlICRLRVk7DQoJcHJpdmF0ZSAkS0VZTmFtZTsNCgkNCglwcml2YXRlICRIVE1MOw0KCXByaXZhdGUgJG51bGxhYmxlOw0KCXByaXZhdGUgJHZhbGlkYXRvcjsNCgkNCiAgICAvKioNCiAgICAqIGNvbnN0cmN0ZXVyIHB1YmxpYyANCiAgICAqIAkNCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcyAoZG9pdCDqdHJlIHVuaXF1ZSBwb3VyIHRvdXRlIGwnZW50aXTpKQ0KICAgICogQHBhcmFtIENBU1QgdW5lIHByb3Byael06SBkZSBsYSBjbGFzc2UgQ0FTVC4gcmVwculzZW50ZSBsZSB0eXBhZ2UgZHUgY2hhbXBzLCBleGVtcGxlIENBU1Q6OiRJTlRFR0VSDQogICAgKiBAcGFyYW0gaW50IGxhIHRhaWxsZSBtYXggZHUgY2hhbXBzIGVuIGJhc2UgZXQgZGFucyBsJ2FwcGxpY2F0aW9uLiBOJ2VzdCBwYXMgbuljZXNzYWlyZSBzaSBsZSB0eXBhZ2UgZHUgY2hhbXBzIGVzdCB1biBDQVNUOjokQlVGRkVSLCBDQVNUOjpOT05FLCAuLi4NCiAgICAqIEBwYXJhbSBOVUxMQUJMRSB1bmUgcHJvcHJp6XTpIGRlIGxhIGNsYXNzZSBOVUxMQUJMRSBvdSBudWxsLCBk6WZpbml0IHNpIGxlIGNoYW1wcyBlc3QgZmFjdWx0YXRpZiwgZXhlbXBsZSBOVUxMQUJMRTo6JFRSVUUgcG91ciB1biBjaGFtcHMgZmFjdWx0YXRpZiwgTlVMTEFCTEU6OiRGQUxTRSBwb3VyIHVuIGNoYW1wcyBvYmxpZ2F0b2lyZQ0KICAgICogQHBhcmFtIEtFWSB1bmUgcHJvcHJp6XTpIGRlIGxhIGNsYXNzZSBLRVkgb3UgbnVsbCwgcmVwculzZW50ZSBsZXMgY2zpcyBwcmltYWlyZXMsIOl0cmFuZ+hyZXMgb3UgYXNzb2NpYXRpdmUsIGV4ZW1wbGUgS0VZOjokUEsgcG91ciB1bmUgY2zpIHByaW1haXJlDQogICAgKiBAcGFyYW0gc3RyaW5nIHVuaXF1ZW1lbnQgdXRpbGlzYWJsZSBhdmVjIEtFWTo6JEZLIGV0IEtFWTo6JEFLLiBDaGFpbmUgZGUgbGlhaXNvbiBkZSBsJ+l2ZW50dWVsbGUgY2zpIOl0cmFuZ+hyZSBvdSBhc3NvY2lhdGl2ZS4gTWV0dHJlIOAgbnVsbCBzaSBpbnV0aWxpc+kuIGV4ZW1wbGUgOiAiQ2xpZW50LmNsaWVudF9pZCIgZGFucyBsZSBGaWVsZCAiY2xpZW50IiBzZXJ2YW50IGRlIGNs6SDpdHJhbmfocmUgcG91ciBsJ2VudGl06SAiQ29tbWFuZGUiIA0KICAgICogQHBhcmFtIEhUTUxfRklFTEQgdW5lIHByb3Byael06SBkZSBsYSBjbGFzc2UgSFRNTF9GSUVMRCBvdSBudWxsLCByZXBy6XNlbnRlIGxlcyBjaGFtcHMgSFRNTCBhdXRvLWfpbuly6SwgZXhlbXBsZSBIVE1MX0ZJRUxEOjokSU4gbidhY2NlcHRlcmEgcXVlIDQgY2FyYWN06HJlIG51belyaXF1ZXMNCiAgICAqIEBwYXJhbSBWQUxJREFUT1IgdW5lIHByb3Byael06SBkZSBsYSBjbGFzc2UgVkFMSURBVE9SIG91IG51bGwsIHJlcHLpc2VudGUgbGUgc3lzdOhtZSBkZSB2YWxpZGF0aW9uIHBhciByZWdleCBkdSBjaGFtcHMsIGV4ZW1wbGUgVkFMSURBVE9SOjokWUVBUiBuJ2FjY2VwdGVyYSBxdWUgNCBjYXJhY3TocmUgbnVt6XJpcXVlcyAgIA0KICAgICogDQogICAgKiBAcmV0dXJuIEZpZWxkIGxlIGNoYW1wcyBk6WZpbml0IHBy6nQg4CDqdHJlIHN0b2Nr6SBkYW5zIHVuZSBlbnRpdOkuDQogICAgKiANCiAgICAqIA0KICAgICogQHNlZSBDQVNUDQogICAgKiBAc2VlIFZBTElEQVRPUg0KICAgICogQHNlZSBLRVkNCiAgICAqIEBzZWUgSFRNTF9GSUVMRA0KICAgICogQHNlZSBOVUxMQUJMRQ0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpZWxkbmFtZSwgJGZpZWxkdHlwZSwgJGZpZWxkc2l6ZSA9IG51bGwsICRudWxsYWJsZSA9IG51bGwsICRLRVkgPSBudWxsLCAkS0VZTmFtZT1udWxsLCAgJEhUTUwgPSBudWxsLCAkdmFsaWRhdG9yID0gbnVsbCkNCgl7DQoJCWlmKGVtcHR5KCRLRVkpICYmICFlbXB0eSgkS0VZTmFtZSkpDQoJCXsNCgkJCXRocm93IG5ldyBJbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignSW1wb3NzaWJsZSBkZSBzcGVjaWZpZXIgbGUgbm9tIGRcJ3VuZSBjbGUgZXRyYW5nZXJlIHNpIGxlIHR5cGUgZGUgY2xlIG5cJ2VzdCBwYXMgZGVmaW5pZSBhICRQSyBvdSBhICRBSycpOw0KCQl9DQoJCWlmKCRLRVkgPT0gS0VZOjokUEsgJiYgIWVtcHR5KCRLRVlOYW1lKSkNCgkJew0KCQkJdGhyb3cgbmV3IElsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdsYSBjbGUgJFBLIG5cJ2FjY2VwdGUgYXVjdW4gbm9tIGRlIGNsZSBldHJhbmdlcmUnKTsNCgkJfQ0KCQlpZigoJEtFWSA9PSBLRVk6OiRGSyB8fCAkS0VZID09IEtFWTo6JEFLKSAmJiBlbXB0eSgkS0VZTmFtZSkpDQoJCXsNCgkJCXRocm93IG5ldyBJbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignbGVzIGNsZXMgJEZLIGV0ICRBSyBpbXBvc2VudCB1biBub20gZGUgY2xlIGV0cmFuZ2VyZScpOw0KCQl9DQoJCQ0KCQlpZigoJGZpZWxkdHlwZSA9PSBDQVNUOjokREFURSB8fCAkZmllbGR0eXBlID09IENBU1Q6OiRCVUZGRVIpICYmICFlbXB0eSgkZmllbGRzaXplKSkNCgkJew0KCQkJdGhyb3cgbmV3IElsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdMZSB0eXBhZ2UgREFURSBvdSBCVUZGRVIgZHUgY2hhbXBzICcuJGZpZWxkbmFtZS4nIG5lIHBldXQgcG9zc2VkZXIgdW5lIHRhaWxsZScpOw0KCQl9DQoJCQ0KDQoJCWlmKCRudWxsYWJsZSA9PSBudWxsKQ0KCQkJJG51bGxhYmxlID0gTlVMTEFCTEU6OiRGQUxTRTsNCgkJCQ0KCQkkdGhpcy0+bmFtZSAJPSAkZmllbGRuYW1lOw0KCQkkdGhpcy0+dHlwZSAJPSAkZmllbGR0eXBlOw0KCQkkdGhpcy0+c2l6ZSAJPSAkZmllbGRzaXplOw0KCQkkdGhpcy0+SFRNTCAJPSAkSFRNTDsNCgkJJHRoaXMtPm51bGxhYmxlID0gJG51bGxhYmxlOw0KCQkkdGhpcy0+dmFsaWRhdG9yID0gJHZhbGlkYXRvcjsNCgkJJHRoaXMtPktFWSAJCT0gJEtFWTsNCgkJJHRoaXMtPktFWU5hbWUgCT0gJEtFWU5hbWU7DQoJfQ0KCQ0KDQogICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXINCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgbGUgbm9tIGR1IEZpZWxkDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpDQoJe3JldHVybiAkdGhpcy0+bmFtZTt9DQoNCiAgICAvKioNCiAgICAqIGZ1bmN0aW9uIGdldHRlcg0KICAgICogDQogICAgKiBAcmV0dXJuIHN0cmluZyBsZSBjYXN0IGR1IEZpZWxkDQogICAgKiANCiAgICAqIEBzZWUgQ0FTVA0KICAgICogDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQ0KCXtyZXR1cm4gJHRoaXMtPnR5cGU7fQ0KCQ0KICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXINCiAgICAqIA0KICAgICogQHJldHVybiBpbnQgbGEgdGFpbGxlIG1heCBkdSBjaGFtcHMNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkNCgl7cmV0dXJuICR0aGlzLT5zaXplO30NCg0KICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXINCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHZyYWkgc2kgbGUgY2hhbXBzIGVzdCB1bmUgY2zpIHByaW1haXJlDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGlzUHJpbWFyeUtFWSgpDQoJe3JldHVybiAkdGhpcy0+S0VZID09IEtFWTo6JFBLO30NCg0KICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXINCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHZyYWkgc2kgbGUgY2hhbXBzIGVzdCB1bmUgY2zpIOl0cmFuZ+hyZQ0KICAgICovICAgIAkNCglwdWJsaWMgZnVuY3Rpb24gaXNGb3JlaWduS0VZKCkNCgl7cmV0dXJuICR0aGlzLT5LRVkgPT0gS0VZOjokRks7fQ0KDQogICAvKioNCiAgICAqIGZ1bmN0aW9uIGdldHRlcg0KICAgICogDQogICAgKiBAcmV0dXJuIGJvb2xlYW4gdnJhaSBzaSBsZSBjaGFtcHMgZXN0IHVuZSBjbOkgZCdhc3NvY2lhdGlvbg0KICAgICovICAgIAkNCglwdWJsaWMgZnVuY3Rpb24gaXNBc3NvY2lhdGVLRVkoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBLRVk6OiRBSzt9DQoJDQogICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXIgIA0KICAgICogDQogICAgKiBAcmV0dXJuIHN0cmluZyBsYSBjaGFpbmUgZGUgbGlhaXNvbiBkZSBsJ+l2ZW50dWVsbGUgY2zpIOl0cmFuZ+hyZSBvdSBhc3NvY2lhdGl2ZQ0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0S0VZTmFtZSgpDQoJe3JldHVybiAkdGhpcy0+S0VZTmFtZTt9DQoJDQogICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXIgIA0KICAgICogDQogICAgKiBAcmV0dXJuIHRydWUgc2kgbGUgY2hhbXBzIEZpZWxkIGVzdCBmYWN1bHRhdGlmLiByZW52b2l0IGZhdXggc2kgY2hhbXBzIEZpZWxkIG9ibGlnYXRvaXJlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNOdWxsYWJsZSgkZGVidWcgPSBudWxsKQ0KCXsNCglpZigkZGVidWcgIT0gbnVsbCkNCgl7DQoJCWRpZSgidG90byIpOw0KCX0NCgkNCglyZXR1cm4gJHRoaXMtPm51bGxhYmxlO30NCgkNCiAgICAvKioNCiAgICAqIGZ1bmN0aW9uIGdldHRlciAgDQogICAgKiANCiAgICAqIEByZXR1cm4gSFRNTF9GSUVMRCBsZSBjaGFtcHMgSFRNTCBhdXRvLWfpbuly6SBvdSBudWxsDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRIVE1MKCkNCgl7cmV0dXJuICR0aGlzLT5IVE1MO30NCgkNCiAgICAvKioNCiAgICAqIGZ1bmN0aW9uIGdldHRlciAgDQogICAgKiANCiAgICAqIEByZXR1cm4gVkFMSURBVE9SIGxlIHZhbGlkYXRvciBkdSBjaGFtcHMgRmllbGQgb3UgbnVsbA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFZBTElEQVRPUigpDQoJe3JldHVybiAkdGhpcy0+dmFsaWRhdG9yO30NCg0KfQ0KDQovKioNCiAqIENsYXNzZSBk6WZpbmlzc2FudCBsZXMgY2zpcyB1dGlsaXNhYmxlIGRhbnMgbGUgZnJhbWV3b3JrDQogKiANCiAqICBLRVk6OiRQSyBk6WZpbml0IHVuZSBjbOkgcHJpbWFpcmUgKGlkZW50aWZpYW50IHRlY2huaXF1ZSkgDQogKiAgS0VZOjokRksgZOlmaW5pdCB1bmUgY2zpIOl0cmFuZ+hyZSAoc2VydCBkZSBsaWFpc29uIGVudHJlIGRldXggZW50aXTpcykNCiAqICBLRVk6OiRBSyBk6WZpbml0IHVuZSBjbOkgYXNzb2NpYXRpdmUgKHNlcnQgZGUgbGlhaXNvbiBlbnRyZSBkZXV4IGVudGl06XMgbuljZXNzaXRhbnQgdW5lIHRhYmxlIGQnYXNzb2NpYXRpb24gaW50ZXJt6WRpYWlyZScpIA0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQoqLw0KY2xhc3MgS0VZDQp7DQoJcHVibGljIHN0YXRpYyAkUEsgPSAweDk5MDE7IC8vIFByaW1hcnkgS0VZDQoJcHVibGljIHN0YXRpYyAkRksgPSAweDk5MDI7IC8vIEZvcmVpZ24gS0VZDQoJcHVibGljIHN0YXRpYyAkQUsgPSAweDk5MDM7IC8vIEFzc29jaWF0ZSBLRVkgKG5lY2Vzc2l0ZSB1bmUgdGFibGUgaW50ZXJtZWRpYWlyZSkNCn0NCg0KLyoqDQogKiBDbGFzc2UgZOlmaW5pc3NhbnQgbGVzIHR5cGFnZSBkZXMgY2hhbXBzDQogKiANCiAqICBDQVNUOjokU1RSSU5HIHVuZSBjaGFpbmUgZGUgY2FyYWN06HJlIA0KICogIENBU1Q6OiRJTlRFR0VSIHVuIGVudGllcg0KICogIENBU1Q6OiREQVRFIHVuZSBkYXRlIA0KICogIENBU1Q6OiRCVUZGRVIgdW5lIHpvbmUgZGUgdGV4dGUgbm9uIGxpbWl06SBlbiB0YWlsbGUNCiAqICBDQVNUOjokTlVNRVJJQyB1biBub21icmUgcunpbCAodmlyZ3VsZSkNCiAqICBDQVNUOjokTk9ORSBuZSBwYXMgc3RvY2tlciBlbiBiYXNlIChkYW5zIGxlIGNhcyBkJ3VuZSBjbOllIGFzc29jaWF0aXZlKSAgICANCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KKi8NCmNsYXNzIENBU1QNCnsNCglwdWJsaWMgc3RhdGljICRTVFJJTkcgPSAwOw0KCXB1YmxpYyBzdGF0aWMgJElOVEVHRVIgPSAxOw0KCXB1YmxpYyBzdGF0aWMgJERBVEUgPSAyOw0KCXB1YmxpYyBzdGF0aWMgJEJVRkZFUiA9IDM7DQoJcHVibGljIHN0YXRpYyAkTlVNRVJJQyA9IDQ7DQoJcHVibGljIHN0YXRpYyAkTk9ORSA9IDk7DQp9DQoNCiAvKioNCiAqIENsYXNzZSBk6WZpbmlzc2FudCBzaSB1biBjaGFtcHMgZXN0IG9ibGlnYXRvaXJlIG91IGZhY3VsdGF0aWYNCiAqIA0KICogIE5VTExBQkxFOjokRkFMU0UgZXN0IG9ibGlnYXRvaXJlDQogKiAgTlVMTEFCTEU6OiRUUlVFIGVzdCBmYWN1bHRhdGlmDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiovDQpjbGFzcyBOVUxMQUJMRQ0Kew0KCXB1YmxpYyBzdGF0aWMgJEZBTFNFID0gZmFsc2U7DQoJcHVibGljIHN0YXRpYyAkVFJVRSA9IHRydWU7DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.fieldhtml.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbCdlbnNlbWJsZSBkZXMgY2hhbXBzIGF1dG8tZ+lu6XLpcyBwb3VyIGxlcyBGaWVsZHMNCiAqDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQovKioNCiAqICAgQ2xhc3NlIG3ocmUgZGUgdG91cyBsZXMgY2hhbXBzIGF1dG8tZ+lu6XLpcw0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQpjbGFzcyBIVE1MX0ZJRUxEDQp7CQkNCglwcm90ZWN0ZWQgJGNtc01vZHVsZTsNCg0KCS8qKg0KICAgICogQ29uc3RydWN0ZXVyIHB1YmxpYw0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KCXsJCQ0KCQkkdGhpcy0+Y21zTW9kdWxlID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNbW1mcycpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIETpZmluaXIg4CB0cnVlIHBvdXIgYWZmaWNoZXIgbGUgY2hhbXBzIGRhbnMgbGVzIGxpc3RlcyBkdSBiYWNrb2ZmaWNlDQogICAgKiANCiAgICAqIEB2YXIgYm9vbGVhbiANCiAgICAqLw0KCXB1YmxpYyAkaXNWaXNpYmxlSW5BZG1pbkxpc3QgPSAgdHJ1ZTsNCiAgICANCiAgICAvKioNCiAgICAqIETpZmluaXIg4CB0cnVlIHBvdXIgYWZmaWNoZXIgbGUgY2hhbXBzIGRhbnMgbGVzIHRhYmxlYXV4IGRlIHLpc3VsdGF0IGR1IGZyb250LW9mZmljZQ0KICAgICogDQogICAgKiBAdmFyIGJvb2xlYW4NCiAgICAqLw0KCXB1YmxpYyAkaXNWaXNpYmxlSW5Gcm9uT2ZmaWNlTGlzdCA9ICB0cnVlOw0KCQ0KICAgIC8qKg0KICAgICogZOljcml0IGxlIGNvbXBvcnRlbWVudCBkdSBjaGFtcHMgYXV0by1n6W7pcukgZGFucyBsZXMgdGFibGVhdXggZHUgYmFja29mZmljZQ0KICAgICogDQogICAgKiBVdGlsaXPpIHVuaXF1ZW1lbnQgc2kgJGlzVmlzaWJsZUluQWRtaW5MaXN0IGVzdCBk6WZpbmllIOAgdHJ1ZQ0KICAgICogDQogICAgKiBQYXIgZOlmYXV0IGFmZmljaGVyYSBsYSB2YWxldXIgYnJ1dA0KICAgICogDQogICAgKiBAcGFyYW0gbWl4ZWQgJHZhbCBsYSB2YWxldXIg4CBhZmZpY2hlcg0KICAgICogQHBhcmFtIEZpZWxkICRmaWVsZCBsZSBGaWVsZCBjb25jZXJu6Q0KICAgICogQHBhcmFtIEVudGl0eSAkZW50aXR5IGwnZW50aXTpIGNvbmNlcm7pZQ0KICAgICogQHBhcmFtIGFycmF5IHRhYmxlYXUgZGUgcGFyYW3odHJlcyBzdXBwbOltZW50YWlyZSDpdmVudHVlbGxlbWVudCBu6WNlc3NhaXJlIHBvdXIgbGUgdHJhaXRlbWVudA0KICAgICogDQogICAgKiBAcmV0dXJuIG1peGVkIGTpcGVuZCBkdSB0cmFpdGVtZW50DQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5MaXN0VGQoJHZhbCwgRmllbGQgJiRmaWVsZCA9IG51bGwsIEVudGl0eSAmJGVudGl0eSA9IG51bGwsICR2YXJzID0gbnVsbCkNCgl7DQoJCXJldHVybiAkdmFsOw0KCX0NCg0KICAgIC8qKg0KICAgICogZOljcml0IGxlIGNvbXBvcnRlbWVudCBkdSBjaGFtcHMgYXV0by1n6W7pcukgZGFucyBsZXMgdGFibGVhdXggZHUgZnJvbnQtb2ZmaWNlDQogICAgKiANCiAgICAqIFV0aWxpc+kgdW5pcXVlbWVudCBzaSAkaXNWaXNpYmxlSW5Gcm9uT2ZmaWNlTGlzdCBlc3QgZOlmaW5pZSDgIHRydWUNCiAgICAqIA0KICAgICogUGFyIGTpZmF1dCBhZmZpY2hlcmEgbGEgdmFsZXVyIGJydXQNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkICR2YWwgbGEgdmFsZXVyIOAgYWZmaWNoZXINCiAgICAqIEBwYXJhbSBGaWVsZCAkZmllbGQgbGUgRmllbGQgY29uY2VybukNCiAgICAqIEBwYXJhbSBFbnRpdHkgJGVudGl0eSBsJ2VudGl06SBjb25jZXJu6WUNCiAgICAqIEBwYXJhbSBhcnJheSB0YWJsZWF1IGRlIHBhcmFt6HRyZXMgc3VwcGzpbWVudGFpcmUg6XZlbnR1ZWxsZW1lbnQgbuljZXNzYWlyZSBwb3VyIGxlIHRyYWl0ZW1lbnR0cmFpdGVtZW50DQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgZOlwZW5kIGR1IHRyYWl0ZW1lbnQNCiAgICAqLwkNCglwdWJsaWMgZnVuY3Rpb24gZnJvbnRvZmZpY2VMaXN0VGQoJHZhbCxGaWVsZCAmJGZpZWxkID0gbnVsbCwgRW50aXR5ICYkZW50aXR5ID0gbnVsbCwgJHZhcnMgPSBudWxsLCAkY3VycmVudExhbmcgPSAnZnInKQ0KCXsNCgkJcmV0dXJuICR0aGlzLT5hZG1pbkxpc3RUZCgkdmFsLCAkZmllbGQsICRlbnRpdHksICR2YXJzKTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBk6WNyaXQgbGUgY29tcG9ydGVtZW50IGR1IGNoYW1wcyBhdXRvLWfpbuly6SBkYW5zIGxlcyBmaWNoZXMgZHUgYmFja29mZmljZSAgDQogICAgKiANCiAgICAqIFBhciBk6WZhdXQgcmV0b3VybmVyYSB1biB0YWJsZWF1IOAgNCDpbGVtZW50cyBk6WZpbml0IGNvbW1lIHRlbCA6IA0KICAgICogICBsZSBub20gZHUgbGFiZWwgKHV0aWxpc2FibGUgYXZlYyBsZXMgZmljaGllcnMgZGUgbGFuZ3VlIGRlIENtc01hZGVTaW1wbGUpDQogICAgKiAgIGxlIGNvZGUgSFRNTCBkdSBjaGFtcHMgZ+lu6XLpIA0KICAgICogICBib29sZWFuIGVzdFJlcXVpcywgdXRpbGlz6SBwb3VyIGFmZmljaGVyIHVuZSBpbmRpY2F0aW9uIGRhbnMgbGVzIGZvcm11bGFpcmUNCiAgICAqICAgdW4g6XZlbnR1ZWwgY29kZSBodG1sIHBvdXIgZ+lyZXIgbGVzIGJvdXRvbnMgKGFqb3V0ZXIgdW4g6WxlbWVudCkgcHLocyBkZXMgc2VsZWN0Ym94IGRhbnMgbGVzIGZvcm11bGFpcmVzIGRlIHNhaXNpZQ0KICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgKiBAcGFyYW0gbWl4ZWQgbCdJZGVudGlmaWFudCBkdSBtb2R1bGUgKGVuIGfpbulyYWwgZGFucyB1bmUgY2xhc3NlIGFjdGlvbiBpbCBmYXV0IHV0aWxpc2VyIHNpbXBsZW1lbnQgJGlkKQ0KICAgICogQHBhcmFtIEZpZWxkICRmaWVsZCBsZSBGaWVsZCBjb25jZXJu6Q0KICAgICogQHBhcmFtIG1peGVkICR2YWwgbGEgdmFsZXVyIOAgYWZmaWNoZXINCiAgICAqIEBwYXJhbSBhcnJheSB0YWJsZWF1IGRlIHBhcmFt6HRyZXMgc3VwcGzpbWVudGFpcmUg6XZlbnR1ZWxsZW1lbnQgbuljZXNzYWlyZSBwb3VyIGxlIHRyYWl0ZW1lbnR0cmFpdGVtZW50DQogICAgKiANCiAgICAqIEByZXR1cm4gYXJyYXkgdGFibGVhdSDgIDQgZWxlbWVudHMgIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGFkbWluRmljaGUoJGlkLCAkZmllbGQsICR2YWwsICR2YXJzID0gbnVsbCkNCgl7DQoJCQ0KCQkkdGl0bGUgPSAnbGFiZWxfJy4kZmllbGQtPmdldE5hbWUoKTsNCgkJJHJlcXVpcmVkID0gISRmaWVsZC0+aXNOdWxsYWJsZSgpOw0KCQkkYWRkID0gbnVsbDsNCgkJJGlucHV0ID0gJHZhbDsNCgkJDQoJCXJldHVybiBhcnJheSgkdGl0bGUsJGlucHV0LCRyZXF1aXJlZCwkYWRkKTsNCgl9ICAgICAgICAgIA0KCQ0KICAgICAgICAvKioNCiAgICAqIGTpY3JpdCBsZSBjb21wb3J0ZW1lbnQgZHUgY2hhbXBzIGF1dG8tZ+lu6XLpIGRhbnMgbGVzIGZpY2hlcyBkdSBmcm9udC1vZmZpY2UgIA0KICAgICogDQogICAgKiBQYXIgZOlmYXV0IHJldG91cm5lcmEgdW4gdGFibGVhdSDgIDQg6WxlbWVudHMgZOlmaW5pdCBjb21tZSB0ZWwgOiANCiAgICAqICAgbGUgbm9tIGR1IGxhYmVsICh1dGlsaXNhYmxlIGF2ZWMgbGVzIGZpY2hpZXJzIGRlIGxhbmd1ZSBkZSBDbXNNYWRlU2ltcGxlKQ0KICAgICogICBsZSBjb2RlIEhUTUwgZHUgY2hhbXBzIGfpbuly6SANCiAgICAqICAgYm9vbGVhbiBlc3RSZXF1aXMsIHV0aWxpc+kgcG91ciBhZmZpY2hlciB1bmUgaW5kaWNhdGlvbiBkYW5zIGxlcyBmb3JtdWxhaXJlDQogICAgKiAgIHVuIOl2ZW50dWVsIGNvZGUgaHRtbCBwb3VyIGfpcmVyIGxlcyBib3V0b25zIChham91dGVyIHVuIOlsZW1lbnQpIHBy6HMgZGVzIHNlbGVjdGJveCBkYW5zIGxlcyBmb3JtdWxhaXJlcyBkZSBzYWlzaWUNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICogQHBhcmFtIG1peGVkIGwnSWRlbnRpZmlhbnQgZHUgbW9kdWxlIChlbiBn6W7pcmFsIGRhbnMgdW5lIGNsYXNzZSBhY3Rpb24gaWwgZmF1dCB1dGlsaXNlciBzaW1wbGVtZW50ICRpZCkNCiAgICAqIEBwYXJhbSBGaWVsZCAkZmllbGQgbGUgRmllbGQgY29uY2VybukNCiAgICAqIEBwYXJhbSBtaXhlZCAkdmFsIGxhIHZhbGV1ciDgIGFmZmljaGVyDQogICAgKiBAcGFyYW0gYXJyYXkgdGFibGVhdSBkZSBwYXJhbeh0cmVzIHN1cHBs6W1lbnRhaXJlIOl2ZW50dWVsbGVtZW50IG7pY2Vzc2FpcmUgcG91ciBsZSB0cmFpdGVtZW50dHJhaXRlbWVudA0KICAgICogDQogICAgKiBAcmV0dXJuIGFycmF5IHRhYmxlYXUg4CA0IGVsZW1lbnRzICANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmcm9udG9mZmljZUZpY2hlKCR2YWwsICRmaWVsZCA9IG51bGwsICRlbnRpdHkgPSBudWxsLCAkdmFycyA9IG51bGwsICRjdXJyZW50TGFuZyA9ICdmcicpDQoJew0KCQlyZXR1cm4gJHZhbDsNCgl9DQp9DQoNCg0KLyoqDQogKiBjaGFtcHMgYXV0by1n6W7pcuksIG5lIHMnYWZmaWNoZSBwYXMgZGFucyBsZXMgZmljaGVzIGR1IGJhY2tvZmZpY2UgDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqIEBzZWUgSFRNTF9GSUVMRA0KICoqLw0KY2xhc3MgSFRNTF9GSUVMRF9OT05FIGV4dGVuZHMgSFRNTF9GSUVMRA0Kew0KCXB1YmxpYyBmdW5jdGlvbiBhZG1pbkZpY2hlKCRpZCwgJGZpZWxkLCAkdmFsLCAkdmFycyA9IG51bGwpDQoJew0KCQlyZXR1cm4gYXJyYXkobnVsbCxudWxsLG51bGwsbnVsbCk7DQoJfQ0KfQ0KDQovKioNCiAqIGNoYW1wcyBhdXRvLWfpbuly6SwgZ+lu6HJlIGRlcyBpbnB1dFRleHQgY2xhc3NpcXVlIGRhbnMgbGVzIGZvcm11bGFpcmVzIGR1IGJhY2tvZmZpY2UgDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqIEBzZWUgSFRNTF9GSUVMRA0KICoqLw0KY2xhc3MgSFRNTF9GSUVMRF9URVhUIGV4dGVuZHMgSFRNTF9GSUVMRA0KewkNCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5GaWNoZSgkaWQsICRmaWVsZCwgJHZhbCwgJHZhcnMgPSBudWxsKQ0KCXsNCgkJJGFyciA9IHBhcmVudDo6YWRtaW5GaWNoZSgkaWQsICRmaWVsZCwgJHZhbCwgJHZhcnMpOw0KCQkNCgkJJGxvbmcgPSAkZmllbGQtPmdldFNpemUoKTsNCgkJaWYoJGxvbmcgIT0gMCkNCgkJew0KCQkJc3dpdGNoKFRSVUUpDQoJCQl7DQoJCQkJY2FzZSAoJGZpZWxkLT5nZXRTaXplKCkgPCAyKSA6ICRsb25nKysgO2JyZWFrOw0KCQkJCWNhc2UgKCRmaWVsZC0+Z2V0U2l6ZSgpIDwgNTApIDogYnJlYWs7DQoJCQkJZGVmYXVsdCA6ICRsb25nID0gNTA7DQoJCQl9DQoJCX0NCgkJDQoJCSRhcnJbMV0gPSAkdGhpcy0+Y21zTW9kdWxlLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAkZmllbGQtPmdldE5hbWUoKSwgJHZhbCwgJGxvbmcsICRmaWVsZC0+Z2V0U2l6ZSgpKTsNCgkJDQoJCXJldHVybiAkYXJyOw0KCX0NCn0NCg0KLyoqDQogKiBjaGFtcHMgYXV0by1n6W7pcuksIGfpbuhyZSBkZXMgaW5wdXRUZXh0IGNsYXNzaXF1ZSBkYW5zIGxlcyBmb3JtdWxhaXJlcyBkdSBiYWNrb2ZmaWNlIA0KICogIGV0IGFmZmljaGUgTyBvdSBOIGRhbnMgbGVzIHRhYmxlYXV4IGR1IGJhY2tvZmZpY2Ugc2kgdW5lIHZhbGV1ciBlc3QgcmVuc2VpZ27pZQ0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiBAc2VlIEhUTUxfRklFTEQNCiAqKi8NCgkJCQkJCQkNCmNsYXNzIEhUTUxfRklFTERfVEVYVF9PTiBleHRlbmRzIEhUTUxfRklFTERfVEVYVA0Kew0KCXB1YmxpYyBmdW5jdGlvbiBhZG1pbkxpc3RUZCgkdmFsLCBGaWVsZCAmJGZpZWxkID0gbnVsbCwgRW50aXR5ICYkZW50aXR5ID0gbnVsbCwgJHZhcnMgPSBudWxsKQ0KCXsNCgkJcmV0dXJuIChpc3NldCgkdmFsKT8nTyc6J04nKTsNCgl9DQp9DQoNCiAgIC8qKg0KICogY2hhbXBzIGF1dG8tZ+lu6XLpLCBn6W7ocmUgZGVzIHRleHRhcmVhIGNsYXNzaXF1ZSBkYW5zIGxlcyBmb3JtdWxhaXJlcyBkdSBiYWNrb2ZmaWNlIA0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiBAc2VlIEhUTUxfRklFTEQNCiAqKi8NCmNsYXNzIEhUTUxfRklFTERfVEVYVEFSRUEgZXh0ZW5kcyBIVE1MX0ZJRUxEDQp7DQoJcHVibGljICRpc1Zpc2libGVJbkFkbWluTGlzdCA9ICBmYWxzZTsNCglwdWJsaWMgJGlzVmlzaWJsZUluRnJvbk9mZmljZUxpc3QgPSAgZmFsc2U7DQoJDQoJcHVibGljIGZ1bmN0aW9uIGFkbWluRmljaGUoJGlkLCAkZmllbGQsICR2YWwsICR2YXJzID0gbnVsbCkNCgl7DQoJCSRhcnIgPSBwYXJlbnQ6OmFkbWluRmljaGUoJGlkLCAkZmllbGQsICR2YWwsICR2YXJzKTsNCgkJJGFyclsxXSA9ICR0aGlzLT5jbXNNb2R1bGUtPkNyZWF0ZVRleHRBcmVhKGZhbHNlICwkaWQsICR2YWwsICRmaWVsZC0+Z2V0TmFtZSgpLCBudWxsLCAkZmllbGQtPmdldE5hbWUoKSk7DQoJCXJldHVybiAkYXJyOw0KCX0NCn0NCg0KLyoqDQogKiBjaGFtcHMgYXV0by1n6W7pcuksIGfpbuhyZSBkZXMgdGV4dGFyZWEgY2xhc3NpcXVlIGRhbnMgbGVzIGZvcm11bGFpcmVzIGR1IGJhY2tvZmZpY2UgDQogKiAgZXQgYWZmaWNoZSBPIG91IE4gZGFucyBsZXMgdGFibGVhdXggZHUgYmFja29mZmljZSBzaSB1bmUgdmFsZXVyIGVzdCByZW5zZWlnbullDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqIEBzZWUgSFRNTF9GSUVMRA0KICoqLw0KY2xhc3MgSFRNTF9GSUVMRF9URVhUQVJFQV9PTiBleHRlbmRzIEhUTUxfRklFTEQNCnsNCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5MaXN0VGQoJHZhbCwgRmllbGQgJiRmaWVsZCA9IG51bGwsIEVudGl0eSAmJGVudGl0eSA9IG51bGwsICR2YXJzID0gbnVsbCkNCgl7DQoJCXJldHVybiAoaXNzZXQoJHZhbCk/J08nOidOJyk7DQoJfQ0KfQ0KDQovKioNCiAqIGNoYW1wcyBhdXRvLWfpbuly6SwgZ+lu6HJlIGRlcyB6b25lcyBkZSBXWVNJV1lHIGRhbnMgbGVzIGZvcm11bGFpcmVzIGR1IGJhY2tvZmZpY2UgIA0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiBAc2VlIEhUTUxfRklFTEQNCiAqKi8NCmNsYXNzIEhUTUxfRklFTERfV1lTSVdZRyBleHRlbmRzIEhUTUxfRklFTEQNCnsNCglwdWJsaWMgJGlzVmlzaWJsZUluQWRtaW5MaXN0ID0gIGZhbHNlOw0KCXB1YmxpYyAkaXNWaXNpYmxlSW5Gcm9uT2ZmaWNlTGlzdCA9ICBmYWxzZTsNCgkNCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5GaWNoZSgkaWQsICRmaWVsZCwgJHZhbCwgJHZhcnMgPSBudWxsKQ0KCXsNCgkJJGFyciA9IHBhcmVudDo6YWRtaW5GaWNoZSgkaWQsICRmaWVsZCwgJHZhbCwgJHZhcnMpOw0KCQkkYXJyWzFdID0gJHRoaXMtPmNtc01vZHVsZS0+Q3JlYXRlVGV4dEFyZWEodHJ1ZSwgJGlkLCAkdmFsLCAkZmllbGQtPmdldE5hbWUoKSwgbnVsbCwgJGZpZWxkLT5nZXROYW1lKCksICcnLCAnJywgJzgwJywgJzE1JywgJycsICcnLCAnY2xhc3M9InRleHRhcmVhV1lTSVdZRyInKTsNCgkJcmV0dXJuICRhcnI7DQoJfQ0KfQ0KDQovKioNCiAqIGNoYW1wcyBhdXRvLWfpbuly6SwgZ+lu6HJlIGRlcyB6b25lcyBkZSBXWVNJV1lHIGNsYXNzaXF1ZSBkYW5zIGxlcyBmb3JtdWxhaXJlcyBkdSBiYWNrb2ZmaWNlIA0KICogIGV0IGFmZmljaGUgTyBvdSBOIGRhbnMgbGVzIHRhYmxlYXV4IGR1IGJhY2tvZmZpY2Ugc2kgdW5lIHZhbGV1ciBlc3QgcmVuc2VpZ27pZQ0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiBAc2VlIEhUTUxfRklFTEQNCiAqKi8NCmNsYXNzIEhUTUxfRklFTERfV1lTSVdZR19PTiBleHRlbmRzIEhUTUxfRklFTEQNCnsNCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5MaXN0VGQoJHZhbCwgRmllbGQgJiRmaWVsZCA9IG51bGwsIEVudGl0eSAmJGVudGl0eSA9IG51bGwsICR2YXJzID0gbnVsbCkNCgl7DQoJCXJldHVybiAoaXNzZXQoJHZhbCk/J08nOidOJyk7DQoJfQ0KfQ0KDQovKioNCiAqIGNoYW1wcyBhdXRvLWfpbuly6SwgZ+lu6HJlIGRlcyBjaGVja2JveCBjbGFzc2lxdWUgZGFucyBsZXMgZm9ybXVsYWlyZXMgZHUgYmFja29mZmljZSAgICANCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICogQHNlZSBIVE1MX0ZJRUxEDQogKiovDQpjbGFzcyBIVE1MX0ZJRUxEX0NIRUNLQk9YIGV4dGVuZHMgSFRNTF9GSUVMRA0Kew0KCXB1YmxpYyBmdW5jdGlvbiBhZG1pbkZpY2hlKCRpZCwgJGZpZWxkLCAkdmFsLCAkdmFycyA9IG51bGwpDQoJew0KCQkkYXJyID0gcGFyZW50OjphZG1pbkZpY2hlKCRpZCwgJGZpZWxkLCAkdmFsLCAkdmFycyk7DQoJCSRhcnJbMV0gPSAkdGhpcy0+Y21zTW9kdWxlLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJGZpZWxkLT5nZXROYW1lKCksIDEsICR2YWwpOw0KCQlyZXR1cm4gJGFycjsNCgl9DQp9DQoNCi8qKg0KICogY2hhbXBzIGF1dG8tZ+lu6XLpLCBn6W7ocmUgZGVzIGlucHV0IHJhZGlvIGNsYXNzaXF1ZSBkYW5zIGxlcyBmb3JtdWxhaXJlcyBkdSBiYWNrb2ZmaWNlICANCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICogQHNlZSBIVE1MX0ZJRUxEDQogKiovDQpjbGFzcyBIVE1MX0ZJRUxEX1JBRElPIGV4dGVuZHMgSFRNTF9GSUVMRA0Kew0KCXB1YmxpYyBmdW5jdGlvbiBhZG1pbkZpY2hlKCRpZCwgJGZpZWxkLCAkdmFsLCAkdmFycyA9IG51bGwpDQoJew0KCQkkYXJyID0gcGFyZW50OjphZG1pbkZpY2hlKCRpZCwgJGZpZWxkLCAkdmFsLCAkdmFycyk7DQoJCSRsYW5nID0gJHZhcnNbMF07DQoJCSR2YWwgPSAoJHZhbCA9PSAxPycxJzonMCcpOw0KCQkkYXJyWzFdID0gJHRoaXMtPmNtc01vZHVsZS0+Q3JlYXRlSW5wdXRSYWRpb0dyb3VwKCRpZCwgJGZpZWxkLT5nZXROYW1lKCksIGFycmF5KCRsYW5nLT5MYW5nKCdvdWknKT0+JzEnLCRsYW5nLT5MYW5nKCdub24nKT0+JzAnKSwgJycuJHZhbCk7DQoJCXJldHVybiAkYXJyOw0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5MaXN0VGQoJHZhbCwgRmllbGQgJiRmaWVsZCA9IG51bGwsIEVudGl0eSAmJGVudGl0eSA9IG51bGwsICR2YXJzID0gbnVsbCkNCgl7DQoJCXJldHVybiAoJHZhbCA9PSAxID8nTyc6J04nKTsNCgl9DQp9DQoNCi8qKg0KICogY2hhbXBzIGF1dG8tZ+lu6XLpLCBn6W7ocmUgZGFucyBsZXMgZm9ybXVsYWlyZXMgZHUgYmFja29mZmljZSBldCBzdXIgbGVzIGZpY2hlcyBkdQ0KICogZnJvbnQgb2ZmaWNlIGRlcyBzZWxlY3Rib3ggY2xhc3NpcXVlIHBy6S1yZW1wbGlzIHBhciBsZXMgdmFsZXVycyBwb3NzaWJsZSBsaellIHBhciBsYSBjbOkg6XRyYW5n6HJlLiANCiAqICBBZmZpY2hlIGxhIHZhbGV1ciByZXRvdXJu6WUgcGFyICRlbnRpdHktPmluaXRGb3JlaWduS0VZKCkgYXZlYyAkZW50aXR5IGwnZW50aXTpIA0KICogIGxp6WUgcGFyIGxhIGNs6SDpdHJhbmfocmUNCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICogQHNlZSBIVE1MX0ZJRUxEDQogKiovDQpjbGFzcyBIVE1MX0ZJRUxEX1NFTEVDVCBleHRlbmRzIEhUTUxfRklFTEQNCnsNCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5MaXN0VGQoJHZhbCwgRmllbGQgJiRmaWVsZCA9IG51bGwsIEVudGl0eSAmJGVudGl0eSA9IG51bGwsICR2YXJzID0gbnVsbCkNCgl7DQoJCWlmKCR2YWwgPT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJJGZvcmVpZ25LZXkgPSAkZW50aXR5LT5pbml0Rm9yZWlnbktFWSgkZmllbGQtPmdldE5hbWUoKSwgJHZhbCk7DQoJCSR2YWwgPSBhcnJheV9rZXlzKCRmb3JlaWduS2V5WzBdLT5nZXRTZWxlY3RGb3JCTygkZm9yZWlnbktleVsxXSkpOwkNCgkJDQoJCWlmKCFpc3NldCgkdmFsWzBdKSkNCgkJCXJldHVybiBudWxsOw0KCQkNCgkJcmV0dXJuICR2YWxbMF07DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIGFkbWluRmljaGUoJGlkLCAkZmllbGQsICR2YWwsICR2YXJzID0gbnVsbCkNCgl7CQkNCgkJJGFyciA9IHBhcmVudDo6YWRtaW5GaWNoZSgkaWQsICRmaWVsZCwgJHZhbCwgJHZhcnMpOw0KCQkNCgkJDQoJCWlmKCRmaWVsZC0+aXNOdWxsYWJsZSgpKQ0KCQl7CQ0KCQkJJHZhcnNbMF0gPSBhcnJheV9tZXJnZShhcnJheSgiIj0+IiIpLCR2YXJzWzBdKTsNCgkJfQ0KCQkNCgkJJGFyclsxXSA9ICR0aGlzLT5jbXNNb2R1bGUtPkNyZWF0ZUlucHV0U2VsZWN0TGlzdCgkaWQsICRmaWVsZC0+Z2V0TmFtZSgpLCAkdmFyc1swXSwgYXJyYXkoJHZhbCksIDEsICcnLCBmYWxzZSk7DQoJCSRjbGUgPSBleHBsb2RlKCcuJywkZmllbGQtPmdldEtFWU5hbWUoKSwyKTsNCgkJJGFyclszXSA9IGFycmF5KCdlY2xhc3MnPT4kY2xlWzBdLCAnYWN0Jz0+J2FkZGVkaXQnKTsNCgkNCgkJcmV0dXJuICRhcnI7DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBmcm9udG9mZmljZUZpY2hlKCR2YWwsICRmaWVsZCA9IG51bGwsICRlbnRpdHkgPSBudWxsLCAkdmFycyA9IG51bGwsICRjdXJyZW50TGFuZyA9ICdmcicpDQoJew0KCQlpZihpc3NldCgkdmFyc1swXSkpDQoJCXsNCgkJCSRLRVlzID0gYXJyYXlfa2V5cygkdmFyc1swXSk7DQoJCQlyZXR1cm4gQCRLRVlzWzBdOw0KCQl9IGVsc2UNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0JCQ0KCX0NCn0NCi8qKg0KICogY2hhbXBzIGF1dG8tZ+lu6XLpLCBn6W7ocmUgZGFucyBsZXMgZm9ybXVsYWlyZXMgZHUgYmFja29mZmljZSB1biBjaGFtcHMgY2FjaOkuDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqIEBzZWUgSFRNTF9GSUVMRA0KICoqLyAgDQpjbGFzcyBIVE1MX0ZJRUxEX0lERU5USUZJQU5UIGV4dGVuZHMgSFRNTF9GSUVMRA0KewkNCglwdWJsaWMgZnVuY3Rpb24gYWRtaW5GaWNoZSgkaWQsICRmaWVsZCwgJHZhbCwgJHZhcnMgPSBudWxsKQ0KCXsNCgkJJGFyciA9ICR0aGlzLT5jbXNNb2R1bGUtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwkZmllbGQtPmdldE5hbWUoKSwgJHZhbCk7DQoJCXJldHVybiBhcnJheShudWxsLCRhcnIsZmFsc2UsbnVsbCk7DQoJfQ0KfQ0KDQovKioNCiAqIGNoYW1wcyBhdXRvLWfpbuly6SwgZ+lu6HJlIGRhbnMgZGVzIHNlbGVjdGJveCDgIGNob2l4IG11bHRpcGxlIHN1ciBsYSBmaWNoZSBkdSBiYWNrb2ZmaWNlIA0KICogIElsIGfpbuhyZSB1bmUgbGlzdGUgY29tcGzodGUgZGVzIGxpYWlzb25zIGVudHJlIGxlcyBkZXV4IGVudGl06XMgc3VyIGxhIGZpY2hlIGR1IGZyb250IG9mZmljZQ0KICogIEVuZmluIGlsIG5lIHMnYWZmaWNoZSBuaSBkYW5zIGxlcyB0YWJsZWF1eCBkdSBiYWNrb2ZmaWNlIG5pIGRhbnMgY2V1eCBkdSBmcm9udG9mZmljZQ0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiBAc2VlIEhUTUxfRklFTEQNCiAqKi8NCmNsYXNzIEhUTUxfRklFTERfQVNTT0NJQVRFIGV4dGVuZHMgSFRNTF9GSUVMRA0Kew0KCXB1YmxpYyAkaXNWaXNpYmxlSW5BZG1pbkxpc3QgPSAgZmFsc2U7DQoJcHVibGljICRpc1Zpc2libGVJbkZyb25PZmZpY2VMaXN0ID0gIGZhbHNlOw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBhZG1pbkZpY2hlKCRpZCwgJGZpZWxkLCAkdmFsLCAkdmFycyA9IG51bGwpDQoJew0KCQkkYXJyID0gcGFyZW50OjphZG1pbkZpY2hlKCRpZCwgJGZpZWxkLCAkdmFsLCAkdmFycyk7DQoJCQ0KCQkkbGlzdGVMaWVlID0gJHZhcnNbMF07DQoJCSRsaXN0ZVBvc3NpYmxlID0gJHZhcnNbMV07DQoJCQ0KCQkkYXJyYXkxID0gYXJyYXkoKTsNCgkJJGFycmF5MiA9IGFycmF5KCk7DQoJCQ0KCQlpZihjb3VudCgkbGlzdGVQb3NzaWJsZSkgPj0gMSkNCgkJew0KCQkJJGFycmF5MSA9ICRsaXN0ZVBvc3NpYmxlWzBdLT5nZXRTZWxlY3RGb3JCTygkbGlzdGVMaWVlKTsNCgkJCSRhcnJheTIgPSAkbGlzdGVQb3NzaWJsZVswXS0+Z2V0U2VsZWN0Rm9yQk8oJGxpc3RlUG9zc2libGUpOw0KCQl9DQoJCQ0KCQkkY291bnQgPSAoY291bnQoJGxpc3RlUG9zc2libGUpPjI/Y291bnQoJGxpc3RlUG9zc2libGUpOjMpOw0KCQkkYXJyWzFdID0gJHRoaXMtPmNtc01vZHVsZS0+Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwgJGZpZWxkLT5nZXROYW1lKCkuJ1tdJywgJGFycmF5MiwgJGFycmF5MSwgJGNvdW50KTsNCgkJDQoJCXJldHVybiAkYXJyOw0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gZnJvbnRvZmZpY2VGaWNoZSgkdmFsLCAkZmllbGQgPSBudWxsLCAkZW50aXR5ID0gbnVsbCwgJHZhcnMgPSBudWxsLCAkY3VycmVudExhbmcgPSAnZnInKQ0KCXsNCgkJJGxpc3RlTGllZSA9ICR2YXJzWzBdOw0KCQlpZihjb3VudCgkbGlzdGVMaWVlKSA9PSAwKQ0KCQl7DQoJCQlyZXR1cm4gYXJyYXkoKTsNCgkJfQ0KCQkkbGlzdGVGb3JtYXRlZSA9ICRsaXN0ZUxpZWVbMF0tPmdldFNlbGVjdEZvckZPKCRsaXN0ZUxpZWUsICRjdXJyZW50TGFuZyk7DQoJCXJldHVybiBhcnJheV9rZXlzKCRsaXN0ZUZvcm1hdGVlKTsNCgl9DQp9DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/class/class.fieldsystem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIHByaW5jaXBhbGVzIGNsYXNzZXMgdXRpbGlz6WVzIHBvdXIgZ+lyZXIgbGVzIEZpZWxkcyBTcOljaWF1eCANCiAqDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQoNCmNsYXNzIEZpZWxkX1NQRSBleHRlbmRzIEZpZWxkIA0Kew0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpewkNCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgpOw0KCQkNCgl9DQoJDQogICAvKioNCiAgICAqIGZ1bmN0aW9uIGdldHRlcg0KICAgICogDQogICAgKiBAcmV0dXJuIHN0cmluZyBsZSBub20gZHUgRmllbGQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkNCgl7cmV0dXJuICR0aGlzLT5uYW1lO30NCg0KICAgIC8qKg0KICAgICogZnVuY3Rpb24gZ2V0dGVyDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIGxlIGNhc3QgZHUgRmllbGQNCiAgICAqIA0KICAgICogQHNlZSBDQVNUDQogICAgKiANCiAgICAqLwkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpDQoJe3JldHVybiAkdGhpcy0+dHlwZTt9DQoJDQogICAvKioNCiAgICAqIGZ1bmN0aW9uIGdldHRlcg0KICAgICogDQogICAgKiBAcmV0dXJuIGludCBsYSB0YWlsbGUgbWF4IGR1IGNoYW1wcw0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQ0KCXtyZXR1cm4gJHRoaXMtPnNpemU7fQ0KfQ0KDQovKioNCiAqICAgUmVwculzZW50ZSB1biBjaGFtcHMgZCdhY3RpdmF0aW9uL2Tpc2FjdGl2YXRpb24gYXV0b21hdGlxdWVtZW50IGfpcukgZW4gYmFzZSBwYXIgdW4gYm9vbGVhbiBldCBkYW5zIGxhIHBhcnRpZSBkJ2FkbWluaXN0cmF0aW9uIHBhciB1bmUgY29jaGUgY2xpY2FibGUNCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KY2xhc3MgRmllbGRfQWN0aXZlIGV4dGVuZHMgRmllbGRfU1BFIA0KewkNCglwdWJsaWMgc3RhdGljICRuYW1lID0gJ3NwX2FjdGl2ZSc7DQoJDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCl7DQoJCSR0aGlzLT5uYW1lID0gRmllbGRfQWN0aXZlOjokbmFtZTsNCgkJJHRoaXMtPnR5cGUgPSBDQVNUOjokU1RSSU5HOw0KCQkkdGhpcy0+c2l6ZSA9ICcxJzsNCgkJJHRoaXMtPm51bGxhYmxlID0gTlVMTEFCTEU6OiRGQUxTRTsNCgl9DQoJDQp9DQoNCmNsYXNzIEZpZWxkX1Nlb19UaXRsZSBleHRlbmRzIEZpZWxkX1NQRSANCnsNCglwdWJsaWMgc3RhdGljICRuYW1lID0gJ3NwX3Nlb190aXRsZSc7DQoJDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCl7DQoJCSR0aGlzLT5uYW1lID0gRmllbGRfU2VvX1RpdGxlOjokbmFtZTsNCgkJJHRoaXMtPnR5cGUgPSBDQVNUOjokU1RSSU5HOw0KCQkkdGhpcy0+c2l6ZSA9ICcyNTUnOw0KCQkkdGhpcy0+bnVsbGFibGUgPSBOVUxMQUJMRTo6JFRSVUU7DQoJfQ0KfQ0KDQpjbGFzcyBGaWVsZF9TZW9fSG4gZXh0ZW5kcyBGaWVsZF9TUEUgDQp7DQoJcHVibGljIHN0YXRpYyAkbmFtZSA9ICdzcF9zZW9faDEnOw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpew0KCQkkdGhpcy0+bmFtZSA9IEZpZWxkX1Nlb19Ibjo6JG5hbWU7DQoJCSR0aGlzLT50eXBlID0gQ0FTVDo6JFNUUklORzsNCgkJJHRoaXMtPnNpemUgPSAnMjU1JzsNCgkJJHRoaXMtPm51bGxhYmxlID0gTlVMTEFCTEU6OiRUUlVFOw0KCX0NCn0NCg0KDQpjbGFzcyBGaWVsZF9TZW9fVGl0bGVfZnIgZXh0ZW5kcyBGaWVsZF9TZW9fVGl0bGUgDQp7DQoJcHVibGljIHN0YXRpYyAkbmFtZSA9ICdzcF9zZW9fdGl0bGVfZnInOw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQoJCSR0aGlzLT5uYW1lID0gc2VsZjo6JG5hbWU7DQoJfQ0KDQp9DQpjbGFzcyBGaWVsZF9TZW9fVGl0bGVfZW4gZXh0ZW5kcyBGaWVsZF9TZW9fVGl0bGUgDQp7DQoJcHVibGljIHN0YXRpYyAkbmFtZSA9ICdzcF9zZW9fdGl0bGVfZW4nOw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQoJCSR0aGlzLT5uYW1lID0gc2VsZjo6JG5hbWU7DQoJfQ0KfQ0KDQpjbGFzcyBGaWVsZF9TZW9fSG5fZnIgZXh0ZW5kcyBGaWVsZF9TZW9fSG4gDQp7DQoJcHVibGljIHN0YXRpYyAkbmFtZSA9ICdzcF9zZW9faDFfZnInOw0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQoJCSR0aGlzLT5uYW1lID0gc2VsZjo6JG5hbWU7DQoJfQ0KfQ0KY2xhc3MgRmllbGRfU2VvX0huX2VuIGV4dGVuZHMgRmllbGRfU2VvX0huIA0Kew0KCXB1YmxpYyBzdGF0aWMgJG5hbWUgPSAnc3Bfc2VvX2gxX2VuJzsNCgkNCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsNCgkJcGFyZW50OjpfX2NvbnN0cnVjdCgpOw0KCQkkdGhpcy0+bmFtZSA9IHNlbGY6OiRuYW1lOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/class/class.filtre.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIHByaW5jaXBhbGVzIGNsYXNzZXMgdXRpbGlz6WVzIHBvdXIgZ+lyZXIgbGVzIEZpbHRyZXMgZHUgYmFja09mZmljZQ0KICoNCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCiANCi8qKg0KICogICBSZXBy6XNlbnRlIHVuIGZpbHRyZSBhdmVjIHNvbiB0eXBhZ2UgZXQgbGEgdmFsZXVyIHNhaXNpZSBwYXIgbCd1dGlsaXNhdGV1cg0KICogDQogKiBMZXMgZmlsdHJlcyBzb250IHV0aWxpc+lzIGRhbnMgbGUgYmFjay1vZmZpY2Ugc3VyIGxlcyBsaXN0ZXMgZCdlbnRpdOkgYWZpbiBkZSBy6WR1aXJlIGxlIG5vbWJyZSBkJ2VudGl06SBhZmZpY2jpZSBzZWxvbiBkZXMgY3JpdOhyZXMgcHLpLWTpZmluaXQNCiAqIA0KICogU29uIHV0aWxpc2F0aW9uIHNlIGZhaXQgZGFucyBsZSBjb25zdHJ1Y3RldXIgZGUgbGEgY2xhc3NlIGRlIGwnZW50aXTpLiBwYXIgZXhlbXBsZSANCiAqIA0KICogPGNvZGU+DQogKiAgY2xhc3MgQ2xpZW50IGV4dGVuZHMgbUVudGl0eQ0KICogIHsNCiAqICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogKiAgICB7DQogKiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgnY2xpZW50JywgJ21vbk1vZHVsZScpOw0KICogDQogKiAgICAgICAgWy4uLl0gaWNpIGTpZmluaXIgdG91cyBsZXMgY2hhbXBzLCBkb250ICJub20iICJwcmVub20iLCAuLi4gWy4uLl0NCiAqIA0KICogICAgICAgICAvL2Fqb3V0ZXJhIHVuIGZpbHRyZSBwZXJtZXR0YW50IGRlIHJlY2hlcmNoZXIgbGVzIGNsaWVudHMgcGFyIGxldXIgbm9tDQogKiAgICAgICAgICR0aGlzLT5hZGRGaWx0cmUoJ25vbScgICAgICxuZXcgRklMVFJFX0xJS0UoKSk7ICANCiAqICAgDQogKiAgICAgICAgIC8vaWRlbSBwYXIgbGV1ciBwculub20gIA0KICogICAgICAgICAkdGhpcy0+YWRkRmlsdHJlKCdwcmVub20nICAsbmV3IEZJTFRSRV9MSUtFKCkpOyANCiAqICAgIA0KICogICAgICAgICAvL3Byb3Bvc2VyYSB1biAz6G1lIGZpbHRyZSBwZXJtZXR0YW50IGRlIGZpbHRyZXIgbGVzIGNsaWVudHMgDQogKiAgICAgICAgIC8vYXlhbnQgdW4gcHLpbm9tIGRlIHNhaXNpdCwgb3UgYXUgY29udHJhaXJlIG4nYXlhbnQgcGFzIGRlIHBy6W5vbSByZW5zZWlnbukgICAgDQogKiAgICAgICAgICR0aGlzLT5hZGRGaWx0cmUoJ3ByZW5vbScgICxuZXcgRklMVFJFX05PVE5VTEwoKSk7IA0KICogICAgfQ0KICogIH0NCiAqIDwvY29kZT4NCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLyANCmNsYXNzIEZJTFRSRSANCnsNCglwcml2YXRlICR0eXBlOw0KCXByaXZhdGUgJHZhbHVlOw0KCQ0KICAgIC8qKg0KICAgICogY29uc3RydWN0ZXVyIHB1YmxpYw0KICAgICogCQ0KICAgICogQHBhcmFtIEZJTFRSRV9IVE1MIGxlIHR5cGFnZSBkdSBmaWx0cmUNCiAgICAqIEBwYXJhbSBtaXhlZCBsYSB2YWxldXIgc2Fpc2llIHBhciBsJ3V0aWxpc2F0ZXVyIGRhbnMgbGUgZmlsdHJlDQogICAgKiBAcmV0dXJuIEZJTFRSRQ0KICAgICogDQogICAgKiBAc2VlIEZJTFRSRV9IVE1MDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoRklMVFJFX0hUTUwgJGZpZWxkdHlwZSwgJHZhbHVlKQ0KCXsNCgkJJHRoaXMtPnR5cGUgCT0gJGZpZWxkdHlwZTsNCgkJJHRoaXMtPnZhbHVlIAk9ICR2YWx1ZTsNCgl9DQogICAgDQogICAgIC8qKg0KICAgICogZnVuY3Rpb24gZ2V0dGVyDQogICAgKiANCiAgICAqIEByZXR1cm4gRklMVFJFX0hUTUwgbGUgdHlwYWdlIGR1IGZpbHRyZSANCiAgICAqLwkNCglwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpDQoJe3JldHVybiAkdGhpcy0+dHlwZTt9DQoJDQogICAgIC8qKg0KICAgICogZnVuY3Rpb24gZ2V0dGVyDQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgbGEgdmFsZXVyIHNhaXNpZSBwYXIgbCd1dGlsaXNhdGV1ciBkYW5zIGxlIGZpbHRyZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCkNCgl7cmV0dXJuICR0aGlzLT52YWx1ZTt9DQp9DQoNCi8qKg0KICogICBDbGFzcyBt6HJlIGRlcyB0eXBlcyBkZSBGaWx0cmUNCiAqICAgIA0KICogIExlcyB0eXBlcyBkZSBmaWx0cmVzIG9udCBsZSBt6m1lIGNvbXBvcnRlbWVudCBxdWUgbGVzIGNoYW1wcyBIVE1MIGF1dG8tZ+lu6XLpcyBjYXIgY2VzIGNsYXNzZXMNCiAqICBzJ29jY3VwZW50IOAgbGEgZm9pcyBkZSBn6W7pcmVyIGxlIGNoYW1wcyBIVE1MIGRhbnMgbGUgZm9ybXVsYWlyZSBkZXMgZmlsdHJlcywgbWFpcyBwZXJtZXR0ZW50IA0KICogIOlnYWxlbWVudCBkZSBn6W7pcmVyIGxhIHBhcnRpZSBkdSBjb2RlIFNRTCBu6WNlc3NhaXJlIOAgbGEgcmVxdep0cmUgdW5lIGZvaXMgbGUgZm9ybXVsYWlyZSBkZXMNCiAqICBmaWx0cmVzIHZhbGlk6Q0KICogDQogKiAgLyFcIGNldHRlIGNsYXNzZSBuJ2VzdCBwYXMgdXRpbGlzYWJsZSBlbiBsJ+l0YXQsIHZvdXMgZGV2ZXogdXRpbGlzZXIgdW5lIGRlcyBjbGFzc2VzIGjpcml0YW50IGRlIA0KICogICAgICBGSUxUUkVfSFRNTCBvdSByZWTpZmluaXIgbGEgdm90cmUNCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLyANCmNsYXNzIEZJTFRSRV9IVE1MDQp7DQogICAgDQogICAgLyoqDQogICAgKiBn6W7ocmUgbGUgY2hhbXBzIEhUTUwg4CBhZmZpY2hlciBkYW5zIGxlIGZvcm11bGFpcmUgZGVzIGZpbHRyZXMNCiAgICAqIA0KICAgICogQHBhcmFtIENNU19NT0RVTEUgdW4gbGllbiB2ZXJzIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIHZvcyBjbGFzc2VzIGFjdGlvbiA6ICR0aGlzKQ0KICAgICogQHBhcmFtIGludCBsJ2lkZW50aWZpYW50IGRlIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIHZvcyBjbGFzc2VzIGFjdGlvbiA6ICRpZCkNCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcw0KICAgICogQHBhcmFtIG1peGVkIGxhIHZhbGV1ciBzYWlzaWUgb3Ugc+lsZWN0aW9ubullDQogICAgKiBAcGFyYW0gYXJyYXkgdW4gdGFibGVhdSBkZSB2YWxldXIg6XZlbnR1ZWxsZXMgKHV0aWxpc2F0aW9uIGRhbnMgdW5lIHNlbGVjdCBib3ggcGFyIGV4ZW1wbGUpDQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgZOlwZW5kIGR1IHRyYWl0ZW1lbnQsIGVuIGfpbulyYWwgdW4gY2hhbXBzIEhUTUwgcHLqdCDgIGwnZW1wbG9pDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0SHRtbElucHV0KCYkbW9kdWxlLCAkaWQsICRuYW1lLCAkdmFsc2VsZWN0ZWQsICR2YWxzPW51bGwpDQoJew0KCQlyZXR1cm4gJyc7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbGUgdHlwZSBkZSBDcml06HJlIHF1aSBzZXJhIHV0aWxpc+kgZGFucyBsYSByZXF16nRlIHBhciBDcml06HJlIChzZWxlY3RCeUV4ZW1wbGUpDQogICAgKiANCiAgICAqIEBwYXJhbSBtaXhlZCBsYSB2YWxldXIgc2Fpc2llIG91IHPpbGVjdGlvbm7pZQ0KICAgICogDQogICAgKiBAcmV0dXJuIFR5cGVDcml0ZXJlIGxlIHR5cGVDcml06HJlDQogICAgKg0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldENyaXRlcmVzKCR2YWwpDQoJew0KCQlyZXR1cm4gbnVsbDsNCgl9DQoJDQogICAgLyoqDQogICAgKiBQZXJtZXQgdW4gcHLpLXRyYWl0ZW1lbnQgZGUgbGEgdmFsZXVyIHNhaXNpZSBwYXIgbCd1dGlsaXNhdGV1ciBhdmFudCBkJ+p0cmUgZ+ly6WUgcGFyIGxlIHJlc3RlIGR1IHByb2Nlc3N1cw0KICAgICogDQogICAgKiBAcGFyYW0gbWl4ZWQgbGEgdmFsZXVyIHNhaXNpZSBvdSBz6WxlY3Rpb25u6WUNCiAgICAqIA0KICAgICogQHJldHVybiBtaXhlZCBsZSByZXN1bHRhdCBkdSBwcuktdHJhaXRlbWVudC4NCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzRGF0YSgkdmFsKQ0KCXsNCgkJcmV0dXJuICR2YWw7DQoJfQ0KfQ0KDQovKioNCiAqIEZpbHRyZSB1dGlsaXNhbnQgdW5lIGxpc3RlIGRlIHZhbGV1ciBz6WxlY3Rpb25uYWJsZSBwYXIgbCd1dGlsaXNhdGV1cg0KICogDQogKiBwZXJtZXQgdW5lIHJlY2hlcmNoZSBiYXPpZSBzdXIgbCfpZ2FsaXTpIGFic29sdWUgDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8gDQpjbGFzcyBGSUxUUkVfU0VMRUNUIGV4dGVuZHMgRklMVFJFX0hUTUwNCnsNCiAgLyoqDQogICAgKiBn6W7ocmUgbGUgY2hhbXBzIEhUTUwg4CBhZmZpY2hlciBkYW5zIGxlIGZvcm11bGFpcmUgZGVzIGZpbHRyZXMNCiAgICAqIA0KICAgICogQHBhcmFtIENNU19NT0RVTEUgdW4gbGllbiB2ZXJzIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIHZvcyBjbGFzc2VzIGFjdGlvbiA6ICR0aGlzKQ0KICAgICogQHBhcmFtIGludCBsJ2lkZW50aWZpYW50IGRlIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIHZvcyBjbGFzc2VzIGFjdGlvbiA6ICRpZCkNCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcw0KICAgICogQHBhcmFtIG1peGVkIGxhIHZhbGV1ciBzYWlzaWUgb3Ugc+lsZWN0aW9ubullDQogICAgKiBAcGFyYW0gYXJyYXkgdW4gdGFibGVhdSBkZSB2YWxldXIg6XZlbnR1ZWxsZXMgKHV0aWxpc2F0aW9uIGRhbnMgdW5lIHNlbGVjdCBib3ggcGFyIGV4ZW1wbGUpDQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgZOlwZW5kIGR1IHRyYWl0ZW1lbnQsIGVuIGfpbulyYWwgdW4gY2hhbXBzIEhUTUwgcHLqdCDgIGwnZW1wbG9pDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0SHRtbElucHV0KCYkbW9kdWxlLCAkaWQsICRuYW1lLCAkdmFsc2VsZWN0ZWQsICR2YWxzPW51bGwpDQoJewkNCgkJJHZhbHMgPSBhcnJheSgkbW9kdWxlLT5MYW5nKCdub2ZpbHRyZScpPT5udWxsKSArICR2YWxzIDsNCgkJcmV0dXJuICRtb2R1bGUtPkNyZWF0ZUlucHV0U2VsZWN0TGlzdCAoJGlkLCAkbmFtZSwgJHZhbHMsIGFycmF5KCR2YWxzZWxlY3RlZCksIDEsICcnLCBmYWxzZSk7DQoJfQ0KICAgIA0KICAgIC8qKg0KICAgICogUmV0b3VybmUgbGUgdHlwZSBkZSBDcml06HJlIHF1aSBzZXJhIHV0aWxpc+kgZGFucyBsYSByZXF16nRlIHBhciBDcml06HJlIChzZWxlY3RCeUV4ZW1wbGUpDQogICAgKiANCiAgICAqIEBwYXJhbSBtaXhlZCBsYSB2YWxldXIgc2Fpc2llIG91IHPpbGVjdGlvbm7pZQ0KICAgICogDQogICAgKiBAcmV0dXJuIFR5cGVDcml0ZXJlIGxlIHR5cGVDcml06HJlDQogICAgKg0KICAgICovCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRDcml0ZXJlcygkdmFsKQ0KCXsNCgkJaWYoJHZhbCA9PSBudWxsKQ0KCQkJcmV0dXJuIG51bGw7DQoJCQkNCgkJcmV0dXJuIFR5cGVDcml0ZXJlOjokRVE7DQoJfQ0KfQ0KDQovKioNCiAqIEZpbHRyZSB1dGlsaXNhbnQgdW5lIGNvbmRpdGlvbiBvdWkvbm9uLCB1dGlsaXNhYmxlIHN1ciBkZXMgY2hhbXBzIGVuIGJhc2UgZGUgdHlwZSBib29sZWFuDQogKiANCiAqIHBlcm1ldCB1bmUgcmVjaGVyY2hlIGJhc+llIHN1ciBsJ+lnYWxpdOkgYWJzb2x1ZSAob3VpID0gMSwgbm9uPTApIA0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovIA0KY2xhc3MgRklMVFJFX09VSU5PTiBleHRlbmRzIEZJTFRSRV9IVE1MDQp7DQogICAgLyoqDQogICAgKiBn6W7ocmUgbGUgY2hhbXBzIEhUTUwg4CBhZmZpY2hlciBkYW5zIGxlIGZvcm11bGFpcmUgZGVzIGZpbHRyZXMNCiAgICAqIA0KICAgICogQHBhcmFtIENNU19NT0RVTEUgdW4gbGllbiB2ZXJzIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIHZvcyBjbGFzc2VzIGFjdGlvbiA6ICR0aGlzKQ0KICAgICogQHBhcmFtIGludCBsJ2lkZW50aWZpYW50IGRlIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIHZvcyBjbGFzc2VzIGFjdGlvbiA6ICRpZCkNCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcw0KICAgICogQHBhcmFtIG1peGVkIGxhIHZhbGV1ciBzYWlzaWUgb3Ugc+lsZWN0aW9ubullDQogICAgKiBAcGFyYW0gYXJyYXkgdW4gdGFibGVhdSBkZSB2YWxldXIg6XZlbnR1ZWxsZXMgKHV0aWxpc2F0aW9uIGRhbnMgdW5lIHNlbGVjdCBib3ggcGFyIGV4ZW1wbGUpDQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgZOlwZW5kIGR1IHRyYWl0ZW1lbnQsIGVuIGfpbulyYWwgdW4gY2hhbXBzIEhUTUwgcHLqdCDgIGwnZW1wbG9pDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0SHRtbElucHV0KCYkbW9kdWxlLCAkaWQsICRuYW1lLCAkdmFsc2VsZWN0ZWQsICR2YWxzPW51bGwpDQoJew0KCQkkaXRlbXMgPSBhcnJheSgkbW9kdWxlLT5MYW5nKCdub2ZpbHRyZScpPT5udWxsLCRtb2R1bGUtPkxhbmcoJ291aScpPT4nMScsJG1vZHVsZS0+TGFuZygnbm9uJyk9PicwJyk7DQoJCXJldHVybiAkbW9kdWxlLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAoJGlkLCAkbmFtZSwgJGl0ZW1zLCAkdmFsc2VsZWN0ZWQpOw0KCX0gDQogICAgDQogICAgLyoqDQogICAgKiBSZXRvdXJuZSBsZSB0eXBlIGRlIENyaXTocmUgcXVpIHNlcmEgdXRpbGlz6SBkYW5zIGxhIHJlcXXqdGUgcGFyIENyaXTocmUgKHNlbGVjdEJ5RXhlbXBsZSkNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkIGxhIHZhbGV1ciBzYWlzaWUgb3Ugc+lsZWN0aW9ubullDQogICAgKiANCiAgICAqIEByZXR1cm4gVHlwZUNyaXRlcmUgbGUgdHlwZUNyaXTocmUNCiAgICAqDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q3JpdGVyZXMoJHZhbCkNCgl7DQoJCWlmKCR2YWwgPT0gbnVsbCkNCgkJCXJldHVybiBudWxsOw0KCQkJDQoJCXJldHVybiBUeXBlQ3JpdGVyZTo6JEVROw0KCX0NCn0NCg0KLyoqDQogKiBGaWx0cmUgYmFz6SBzdXIgbGUgTlVMTC9WSURFIGV0IGxlIE5PTiBOVUxML05PTiBWSURFDQogKiANCiAqIHBlcm1ldCB1bmUgcmVjaGVyY2hlIGJhc+llIHN1ciBsYSByZWNoZXJjaGUgcGFyIGNoYW1wcyBudWxsL3ZpZGUgb3UgcGFyIGNoYW1wcyByZW5zZWlnbukgDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8gDQpjbGFzcyBGSUxUUkVfTk9URU1QVFkgZXh0ZW5kcyBGSUxUUkVfSFRNTA0Kew0KICAgIC8qKg0KICAgICogZ+lu6HJlIGxlIGNoYW1wcyBIVE1MIOAgYWZmaWNoZXIgZGFucyBsZSBmb3JtdWxhaXJlIGRlcyBmaWx0cmVzDQogICAgKiANCiAgICAqIEBwYXJhbSBDTVNfTU9EVUxFIHVuIGxpZW4gdmVycyB2b3RyZSBtb2R1bGUgKGVuIGfpbulyYWwgZGFucyB2b3MgY2xhc3NlcyBhY3Rpb24gOiAkdGhpcykNCiAgICAqIEBwYXJhbSBpbnQgbCdpZGVudGlmaWFudCBkZSB2b3RyZSBtb2R1bGUgKGVuIGfpbulyYWwgZGFucyB2b3MgY2xhc3NlcyBhY3Rpb24gOiAkaWQpDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkdSBjaGFtcHMNCiAgICAqIEBwYXJhbSBtaXhlZCBsYSB2YWxldXIgc2Fpc2llIG91IHPpbGVjdGlvbm7pZQ0KICAgICogQHBhcmFtIGFycmF5IHVuIHRhYmxlYXUgZGUgdmFsZXVyIOl2ZW50dWVsbGVzICh1dGlsaXNhdGlvbiBkYW5zIHVuZSBzZWxlY3QgYm94IHBhciBleGVtcGxlKQ0KICAgICogDQogICAgKiBAcmV0dXJuIG1peGVkIGTpcGVuZCBkdSB0cmFpdGVtZW50LCBlbiBn6W7pcmFsIHVuIGNoYW1wcyBIVE1MIHBy6nQg4CBsJ2VtcGxvaQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEh0bWxJbnB1dCgmJG1vZHVsZSwgJGlkLCAkbmFtZSwgJHZhbHNlbGVjdGVkLCAkdmFscz1udWxsKQ0KCXsNCgkJJGl0ZW1zID0gYXJyYXkoJG1vZHVsZS0+TGFuZygnbm9maWx0cmUnKT0+bnVsbCwkbW9kdWxlLT5MYW5nKCdudWxsJyk9PicxJywkbW9kdWxlLT5MYW5nKCdub3RudWxsJyk9PicwJyk7DQoJCXJldHVybiAkbW9kdWxlLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAoJGlkLCAkbmFtZSwgJGl0ZW1zLCAkdmFsc2VsZWN0ZWQpOw0KCX0gDQogICAgDQogICAgLyoqDQogICAgKiBSZXRvdXJuZSBsZSB0eXBlIGRlIENyaXTocmUgcXVpIHNlcmEgdXRpbGlz6SBkYW5zIGxhIHJlcXXqdGUgcGFyIENyaXTocmUgKHNlbGVjdEJ5RXhlbXBsZSkNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkIGxhIHZhbGV1ciBzYWlzaWUgb3Ugc+lsZWN0aW9ubullDQogICAgKiANCiAgICAqIEByZXR1cm4gVHlwZUNyaXRlcmUgbGUgdHlwZUNyaXTocmUNCiAgICAqDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q3JpdGVyZXMoJHZhbCkNCgl7DQoJCWlmKCR2YWwgPT0gbnVsbCkNCgkJCXJldHVybiBudWxsOw0KCQkJDQoJCWlmKCR2YWwgPT0gMSkNCgkJCXJldHVybiBUeXBlQ3JpdGVyZTo6JEVNUFRZOw0KCQkJDQoJCWlmKCR2YWwgPT0gMCkNCgkJCXJldHVybiBUeXBlQ3JpdGVyZTo6JE5FTVBUWTsNCgl9DQp9DQoNCiAvKioNCiAqIEZpbHRyZSB1dGlsaXPpIHBvdXIgZmFpcmUgZGVzIHJlY2hlcmNoZXMgYXZlYyB3aWxkY2FyDQogKiANCiAqIHBlcm1ldCB1bmUgcmVjaGVyY2hlIGJhc+llIHN1ciBsZSBMSUtFIFNRTC4gTGVzIGNhcmFjdOhyZXMgd2lsZGNhciBzb250IGTpauAgaW5pdGlhbGlz6S4gDQogKiAgRG9uYyB0YXBlciAiRFUiIHJhcG9ydGVyYSBkYW5zIGxlcyBy6XN1bHRhdHMgbGVzIGNsaWVudHMgYXlhbnQgcG91ciBub20gOg0KICogIERVUE9OVCwgRFVSQU5ULCBNQVJERURVLCBMRSBEVVBMTywgLi4uIA0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovIA0KY2xhc3MgRklMVFJFX0xJS0UgZXh0ZW5kcyBGSUxUUkVfSFRNTA0Kew0KICAgIC8qKg0KICAgICogZ+lu6HJlIGxlIGNoYW1wcyBIVE1MIOAgYWZmaWNoZXIgZGFucyBsZSBmb3JtdWxhaXJlIGRlcyBmaWx0cmVzDQogICAgKiANCiAgICAqIEBwYXJhbSBDTVNfTU9EVUxFIHVuIGxpZW4gdmVycyB2b3RyZSBtb2R1bGUgKGVuIGfpbulyYWwgZGFucyB2b3MgY2xhc3NlcyBhY3Rpb24gOiAkdGhpcykNCiAgICAqIEBwYXJhbSBpbnQgbCdpZGVudGlmaWFudCBkZSB2b3RyZSBtb2R1bGUgKGVuIGfpbulyYWwgZGFucyB2b3MgY2xhc3NlcyBhY3Rpb24gOiAkaWQpDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkdSBjaGFtcHMNCiAgICAqIEBwYXJhbSBtaXhlZCBsYSB2YWxldXIgc2Fpc2llIG91IHPpbGVjdGlvbm7pZQ0KICAgICogQHBhcmFtIGFycmF5IHVuIHRhYmxlYXUgZGUgdmFsZXVyIOl2ZW50dWVsbGVzICh1dGlsaXNhdGlvbiBkYW5zIHVuZSBzZWxlY3QgYm94IHBhciBleGVtcGxlKQ0KICAgICogDQogICAgKiBAcmV0dXJuIG1peGVkIGTpcGVuZCBkdSB0cmFpdGVtZW50LCBlbiBn6W7pcmFsIHVuIGNoYW1wcyBIVE1MIHBy6nQg4CBsJ2VtcGxvaQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEh0bWxJbnB1dCgmJG1vZHVsZSwgJGlkLCAkbmFtZSwgJHZhbHNlbGVjdGVkLCAkdmFscz1udWxsKQ0KCXsNCgkJcmV0dXJuICRtb2R1bGUtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICRuYW1lLCAkdmFsc2VsZWN0ZWQsIDMwLCA1MCk7DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBnZXRDcml0ZXJlcygkdmFsKQ0KCXsNCgkJaWYoJHZhbCA9PSBudWxsKQ0KCQkJcmV0dXJuIG51bGw7DQoJCQ0KCQlyZXR1cm4gVHlwZUNyaXRlcmU6OiRMSUtFOw0KCX0NCgkNCiAgIC8qKg0KICAgICogUGVybWV0IHVuIHBy6S10cmFpdGVtZW50IGRlIGxhIHZhbGV1ciBzYWlzaWUgcGFyIGwndXRpbGlzYXRldXIgYXZhbnQgZCfqdHJlIGfpcullIHBhciBsZSByZXN0ZSBkdSBwcm9jZXNzdXMNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkIGxhIHZhbGV1ciBzYWlzaWUgb3Ugc+lsZWN0aW9ubullDQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgbGUgcmVzdWx0YXQgZHUgcHLpLXRyYWl0ZW1lbnQuDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoJHZhbCkNCgl7DQoJCXJldHVybiAnJScuJHZhbC4nJSc7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/class/class.illegalargumentexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRpZW50IGxlcyBkaWZm6XJlbnRlcyBjbGFzc2VzIGQnZXhjZXB0aW9uDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQoNCi8qKg0KKiBDbGFzc2UgdXRpbGlz6WUgZGFucyBsZSBjYXMgb3UgbCdhcmd1bWVudCBwYXNz6SBuJ2VzdCBwYXMgY2VsdWkgYXR0ZW5kdQ0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KKi8NCmNsYXNzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtc2c9TlVMTCwgJGNvZGU9MCkNCiAgICB7cGFyZW50OjpfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSk7fQ0KfQ0KDQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.illegalconfigurationexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRpZW50IGxlcyBkaWZm6XJlbnRlcyBjbGFzc2VzIGQnZXhjZXB0aW9uDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQovKioNCiogQ2xhc3NlIHV0aWxpc+llIGRhbnMgbGUgY2FzIG91IGxhIGNvbmZpZ3VyYXRpb24gZGVzIGVudGl06XMgJmNvIG4nZXN0IHBhcyBjb3JyZWN0ZQ0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KKi8NCmNsYXNzIElsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uICB7DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtc2c9TlVMTCwgJGNvZGU9MCkNCiAgICB7cGFyZW50OjpfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSk7fQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/class/class.indexing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgdG91dCBsZSBzeXN06G1lIGQnaW5kZXhhZ2UgZGUgY29udGVudQ0KICoNCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCg0KLyoqDQogKiAgIFBlcm1ldCBkJ2luZGV4ZXIgcmFwaWRlbWVudCBsZXMgZG9ubullcyBpc3N1ZXMgZCd1biBtb2R1bGUgc291cyBNbW1GUyBhdmVjIGxlIG1vZHVsZSBTZWFyY2gNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgIEwnZXNzZW50aWVsIGR1IGNvZGUgZXN0IGluc3BpcukgZHUgdHJhdmFpbCBkZSBEdWtldG93biAtIG1lcmNpIOAgbHVpDQogKiAgIGh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy92aWV3dG9waWMucGhwP3A9MjYxNTA4I3AyNjE1MDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICogIGV4ZW1wbGUNCiAqICA8Y29kZT4NCiAqICAgICAgICAgIA0KICogIDwvY29kZT4NCiAqIA0KICogDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8gICANCmZpbmFsIGNsYXNzIEluZGV4aW5nDQp7CQ0KCQ0KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsNCgl9DQoJDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZXRTZWFyY2goKQ0KCXsNCgkJJG1vZG9wcyA9IGNtc21zKCktPkdldE1vZHVsZU9wZXJhdGlvbnMoKTsNCgkJcmV0dXJuICRtb2RvcHMtPkdldFNlYXJjaE1vZHVsZSgpOw0KCX0NCg0KCS8qKg0KICAgICogdmlkZSBsJ2luZGV4YWdlIA0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkdSBtb2R1bGUuDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIERlbGV0ZUFsbFdvcmRzKCRtb2R1bGVuYW1lLCBFbnRpdHkgJGVudGl0eSkNCgl7CQ0KCQkkc2VhcmNobW9kdWxlID0gSW5kZXhpbmc6OmdldFNlYXJjaCgpOw0KCQkkc2VhcmNobW9kdWxlLT5EZWxldGVXb3JkcygkbW9kdWxlbmFtZSwgbnVsbCwgJGVudGl0eS0+Z2V0TmFtZSgpKTsNCgl9DQoNCiAgIC8qKg0KICAgICogdmlkZSBsJ2luZGV4YWdlIGQndW4g6WxlbWVudCBlbiBwYXJ0aWN1bGllcg0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkdSBtb2R1bGUuDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIERlbGV0ZVdvcmRzKCRtb2R1bGVuYW1lLCBFbnRpdHkgJGVudGl0eSwgJHNpZCA9IG51bGwpDQoJewkNCgkJaWYoJHNpZCA9PSBudWxsKQ0KCQkJJHNpZCA9ICRlbnRpdHktPmdldCgkZW50aXR5LT5nZXRQaygpLT5nZXROYW1lKCkpOw0KCQkNCgkJJHNlYXJjaG1vZHVsZSA9IEluZGV4aW5nOjpnZXRTZWFyY2goKTsNCgkJJHNlYXJjaG1vZHVsZS0+RGVsZXRlV29yZHMoJG1vZHVsZW5hbWUsICRzaWQsICRlbnRpdHktPmdldE5hbWUoKSk7DQoJfQ0KCQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gQWRkV29yZHMoJG1vZHVsZW5hbWUsICRlbnRpdHkpDQogICAgew0KCQkkc2VhcmNobW9kdWxlID0gSW5kZXhpbmc6OmdldFNlYXJjaCgpOw0KCQkkZmllbGRzID0gJGVudGl0eS0+Z2V0RmllbGRzKCk7DQoJCQ0KCQkkY29udGVudCA9ICcnOw0KCQlmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQl7DQoJCQkkY29udGVudC49ICcgJy4kZW50aXR5LT5nZXQoJGZpZWxkLT5nZXROYW1lKCkpOw0KCQl9DQoJCQ0KCQkkc2lkID0gJGVudGl0eS0+Z2V0KCRlbnRpdHktPmdldFBrKCktPmdldE5hbWUoKSk7DQoJCQ0KCQkvL2VjaG8gJHNpZC4nICcuJGVudGl0eS0+Z2V0TmFtZSgpLicgJy4kY29udGVudC4nPGJyLz4nOw0KCQkkc2VhcmNobW9kdWxlLT5BZGRXb3JkcygkbW9kdWxlbmFtZSwgJHNpZCwkZW50aXR5LT5nZXROYW1lKCksJGNvbnRlbnQpOw0KICAgIH0NCgkNCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIFVwZGF0ZVdvcmRzKCRtb2R1bGVuYW1lLCAkZW50aXR5KQ0KCXsNCgkJSW5kZXhpbmc6OkRlbGV0ZVdvcmRzKCRtb2R1bGVuYW1lLCAkZW50aXR5KTsNCgkJSW5kZXhpbmc6OkFkZFdvcmRzKCRtb2R1bGVuYW1lLCAkZW50aXR5KTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIFNlYXJjaFJlaW5kZXgoJG1vZHVsZU5hbWUpDQoJew0KCQkkZW50aXR5cyA9IE15QXV0b2xvYWQ6OmdldEFsbEluc3RhbmNlcygkbW9kdWxlTmFtZSk7DQoJCWZvcmVhY2ggKCRlbnRpdHlzIGFzICRlbnRpdHkpDQoJCXsNCgkJCWlmKCRlbnRpdHktPmlzSW5kZXhhYmxlKCkpDQoJCQl7DQoJCQkJSW5kZXhpbmc6OkRlbGV0ZUFsbFdvcmRzKCRtb2R1bGVOYW1lLCAkZW50aXR5KTsNCgkJCQkNCgkJCQkkbGlzdGUgPSBhcnJheSgpOw0KCQkJCWlmKCEkZW50aXR5LT5pc0ZpZWxkQnlOYW1lRXhpc3RzKEZpZWxkX0FjdGl2ZTo6JG5hbWUpKQ0KCQkJCXsNCgkJCQkJJGxpc3RlID0gQ29yZTo6c2VsZWN0QWxsKCRlbnRpdHkpOw0KCQkJCX0gZWxzZQ0KCQkJCXsNCgkJCQkJJGV4ZW1wbGUgPSBuZXcgRXhlbXBsZSgpOw0KCQkJCQkkZXhlbXBsZS0+YWRkQ3JpdGVyZShGaWVsZF9BY3RpdmU6OiRuYW1lLCBUeXBlQ3JpdGVyZTo6JEVRLCBhcnJheSgxKSk7DQoJCQkJCSRsaXN0ZSA9IENvcmU6OnNlbGVjdEJ5RXhlbXBsZSgkZW50aXR5LCAkZXhlbXBsZSk7DQoJCQkJfQ0KCQkJCQ0KCQkJCWZvcmVhY2goJGxpc3RlIGFzICRlbGVtZW50KQ0KCQkJCXsNCgkJCQkJSW5kZXhpbmc6OkFkZFdvcmRzKCRtb2R1bGVOYW1lLCAkZWxlbWVudCk7DQoJCQkJfQ0KCQkJCQ0KCQkJCS8vIGVjaG8gIm91aSA6ICIuJGVudGl0eS0+Z2V0TmFtZSgpLicgICcuY291bnQoJGxpc3RlKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEFwcGVs6WUgcGFyIFNlYXJjaCBwb3VyIGFmZmljaGVyIHVuIHLpc3VsdGF0DQoJICovDQoJZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCYkbW9kdWxlLCAkaWQsICRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0ciA9ICcnKQ0KICAgIHsJDQoJCSRyZXN1bHQgPSBhcnJheSgpOw0KCQkNCgkJJG1sZSA9IE1sZUZvck1tbWZzOjpnZXRSb290VXJsKCk7DQoJCWlmKCRtbGUgPT0gbnVsbCkNCgkJew0KCQkJJG1sZT0nZnInOw0KCQl9DQoJCQ0KCQkNCgkJJGVudGl0eXMgPSBteUF1dG9sb2FkOjpnZXRBbGxJbnN0YW5jZXMoJG1vZHVsZS0+Z2V0TmFtZSgpKTsNCgkJZm9yZWFjaCAoJGVudGl0eXMgYXMgJGVudGl0eSkNCgkJew0KCQkJaWYoJGVudGl0eS0+aXNJbmRleGFibGUoKSkNCgkJCXsJCQ0KDQoJCQkJaWYgKCRhdHRyID09ICRlbnRpdHktPmdldE5hbWUoKSkNCgkJCQl7DQoJCQkJCSRteUVudGl0eSA9IENvcmU6OnNlbGVjdEJ5SWQoJGVudGl0eSwgJGVudGl0eUlkKTsNCgkJCQkJDQoJCQkJCS8vU2kgdW4gY2hhbXBzICJhY3RpZi9pbmFjdGlmIiBleGlzdGUgZXQgcXUnaWwgZXN0IGEgaW5hY3RpZiBvbiBwYXNzZSBsYSBtYWluDQoJCQkJCWlmKCRlbnRpdHktPmlzRmllbGRCeU5hbWVFeGlzdHMoRmllbGRfQWN0aXZlOjokbmFtZSkgJiYgISRteUVudGl0eS0+Z2V0KEZpZWxkX0FjdGl2ZTo6JG5hbWUpKQ0KCQkJCQl7DQoJCQkJCQljb250aW51ZTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJGN1cnJlbnRMYW5nSVNPID0gKCRtbGUgPT0gJ2ZyJz8nZnJfRlInOidlbl9VUycpOyAvL1RPRE8gOiBzZSBk6W1lcmRlciBwb3VyIHLpY3Vw6XJlciBsYSBsYW5ndWUgbGnpZSBhdSAkcmV0dXJuSWQ7DQoJCQkJCQ0KCQkJCQkkcHJldHR5VXJsID0gJyc7DQoJCQkJCWlmKGluX2FycmF5KCdJU2VvJyxjbGFzc19pbXBsZW1lbnRzKCRteUVudGl0eSkpKQ0KCQkJCQl7DQoJCQkJCQkgDQoJCQkJCQkgJHByZXR0eVVybCA9ICRteUVudGl0eS0+Z2V0UHJldHR5VXJsKCRjdXJyZW50TGFuZ0lTTywgJHJldHVybmlkKTsNCgkJCQkJfQ0KDQoJCQkJCS8vICRsaW5rID0gJG1vZHVsZS0+Q3JlYXRlTGluaygkaWQsICdmaWNoZScsICRjdXN0b21fcmV0dXJuaWQsIA0KCQkJCQkJCQkJLy8gJycsIA0KCQkJCQkJCQkJLy8gJG5ld1BhcmFtLCcnLHRydWUsbnVsbCxudWxsLG51bGwsJHByZXR0eVVybCk7DQoJCQkJCSRsaW5rID0gJG1vZHVsZS0+Q3JlYXRlTGluaygkaWQsICdmaWNoZScsICRyZXR1cm5pZCwgDQoJCQkJCQkJCQknJywgDQoJCQkJCQkJCQlhcnJheSgiZWNsYXNzIj0+JG15RW50aXR5LT5nZXROYW1lKCksICJlY2xhc3NJZCI9PiRlbnRpdHlJZCksJycsdHJ1ZSxudWxsLG51bGwsbnVsbCwkcHJldHR5VXJsKTsNCgkJCQkgIA0KCQkJCSAgICBpZihpbl9hcnJheSgnSVNlbycsY2xhc3NfaW1wbGVtZW50cygkbXlFbnRpdHkpKSkNCgkJCQkJew0KCQkJCQkJJHJlc3VsdFswXSA9ICRteUVudGl0eS0+Z2V0TmFtZSgpOw0KCQkJCQkJJHJlc3VsdFsxXSA9IGh0bWxfZW50aXR5X2RlY29kZSgkbXlFbnRpdHktPmdldEJhbGlzZUgxKCRjdXJyZW50TGFuZ0lTTyksIEVOVF9RVU9URVMsICdVVEYtOCcpOw0KCQkJCQkJJHJlc3VsdFsxXSA9IGh0bWxfZW50aXR5X2RlY29kZSgkcmVzdWx0WzFdLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsNCgkJCQkJDQoJCQkJCX0NCgkJCQkgIAllbHNlDQoJCQkJCXsNCgkJCQkJCSRyZXN1bHRbMF0gPSAkbXlFbnRpdHktPmdldE5hbWUoKTsNCgkJCQkJCSRyZXN1bHRbMV0gPSBodG1sX2VudGl0eV9kZWNvZGUoJG15RW50aXR5LT5nZXROYW1lKCkuJyAjJy4kZW50aXR5SWQsIEVOVF9RVU9URVMsICdVVEYtOCcpOw0KCQkJCQkJJHJlc3VsdFsxXSA9IGh0bWxfZW50aXR5X2RlY29kZSgkcmVzdWx0WzFdLCBFTlRfUVVPVEVTLCAnVVRGLTgnKTsNCgkJCQkJfQ0KCQkJCQkNCgkJCQkJJHJlc3VsdFsyXSA9ICRsaW5rOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KDQoJDQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/class/class.iseo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbCdpbnRlcmZhY2UgZGUgZ2VzdGlvbiBkZXMgcHJldHR5IFVSTA0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCiANCi8qKg0KICogSW50ZXJmYWNlIGRlIGdlc3Rpb24gZGVzIHByZXR0eSB1cmwgcG91ciBsZXMgZW50aXTpcw0KICoJDQogKg0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KaW50ZXJmYWNlIElTZW8NCnsNCgkNCgkvKioNCgkgKiBSZXRvdXJuZSBsZSBub20gZGUgbCdlbnRpdOkgcG91ciB1bmUgbGFuZ3VlIGFmaW4gZCfqdHJlIHV0aWxpc+kgcG91ciBjcullciBsZXMgcHJldHR5IHVybA0KCSAqDQoJICogQHBhcmFtIHN0cmluZyBsYSBsYW5ndWUgKGVuX1VTLCBmcl9GUiwgLi4uKQ0KCSAqIA0KCSAqIEByZXR1cm4gc3RyaW5nIGxlIG5vbSBkYW5zIGxhIGxhbmd1ZSAoQ3VzdG9tZXIsIENsaWVudCwgLi4uKQ0KCSAqLyANCgkgcHVibGljIGZ1bmN0aW9uIGdldFByZXR0eVVybCgkbGFuZyA9ICdmcl9GUicsICRyZXR1cm5pZCk7DQoJIA0KICAgLyoqDQogICAgKiBE6WZpbml0IGxhIGxpc3RlIGRlcyBwcmV0dHkgVXJsIGFzc29jaellcyDgIGwnZW50aXTpIGVuIGNvdXJzDQogICAgKiANCiAgICAqIEByZXR1cm4gYXJyYXkgbGVzIHByZXR0eXVybC4NCiAgICAqIA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRSZWdpc3RlclJvdXRlcygpOw0KfQ0KDQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/class/class.isortable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbCdpbnRlcmZhY2UgZGUgVHJpIGlTb3J0YWJsZSBxdWkgcGVybWV0IGRlIHRyaWVyIGxlcyBy6XN1bHRhdHMgZCd1bmUgZW50aXTpDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KIA0KLyoqDQogKiBJbnRlcmZhY2UgZGUgdHJpIGQndW5lIEVudGl06Q0KICoJDQogKg0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KaW50ZXJmYWNlIElTb3J0YWJsZQ0Kew0KCQ0KICAgIC8qKg0KICAgICogRm9uY3Rpb24gcXVpIGNvbXBhcmUgZGV1eCBlbnRpdOlzIHBhc3PpZXMgZW4gcGFyYW3odHJlIA0KICAgICogDQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgbGEgcHJlbWnocmUgZW50aXTpIGF2ZWMgc2VzIHZhbGV1cnMgcmVuc2VpZ27pZXMNCiAgICAqIEBwYXJhbSBFbnRpdHkgbGEgc2Vjb25kZSBlbnRpdOkgYXZlYyBzZXMgdmFsZXVycyByZW5zZWlnbullcw0KICAgICogQHJldHVybiBlbnRpZXIgeulybyBzaSDpZ2FsaXTpLCAxIHNpIGxhIHByZW1p6HJlIGVudGl06SBlc3Qgc3Vw6XJpZXVyZSwgLTEgc2kgbGEgc2Vjb25kZSBlbnRpdOkgcGFzc+llIGVuIHBhcmFt6HRyZSBlc3Qgc3Vw6XJpZXVyZQ0KICAgICogDQogICAgKiBAc2VlIEVudGl0eQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wYXJlVG8oRW50aXR5ICRlbnRpdHkxLCBFbnRpdHkgJGVudGl0eTIpOw0KfQ0KDQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/class/class.mleformmmfs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KZmluYWwgY2xhc3MgTWxlRm9yTW1tZnN7DQoJDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYXNNbGUoKQ0KCXsNCgkJJG1vZG9wcyA9IGNtc21zKCktPkdldE1vZHVsZU9wZXJhdGlvbnMoKTsNCgkJcmV0dXJuICRtb2RvcHMtPklzTW9kdWxlQWN0aXZlKCdNbGVDTVMnKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJvb3RVcmwoKQ0KCXsNCgkJaWYoIU1sZUZvck1tbWZzOjpoYXNNbGUoKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCgkJDQoJCWlmKCFjbGFzc19leGlzdHMoIm1sZV90b29scyIpKXsNCgkJCSRtbGVfdG9vbHMgPSBjbXNfam9pbl9wYXRoKCRnQ21zLT5jb25maWdbJ3Jvb3RfcGF0aCddLCdtb2R1bGVzJywnTWxlQ01TJywnbGliJywnY2xhc3MubWxlX3Rvb2xzLnBocCcpOw0KCQkJaWYoICFpc19yZWFkYWJsZSggJG1sZV90b29scyApICkNCgkJCQl7ZWNobyAnPGgxPjxmb250IGNvbG9yPSJyZWQiPkVSUk9SOiBUaGUgbWxlX3Rvb2xzIGNsYXNzZSBjb3VsZCBub3QgYmUgcmVhZC48L2ZvbnQ+PC9oMT4nO3JldHVybjt9DQoJCQlyZXF1aXJlX29uY2UoJG1sZV90b29scyk7DQoJCX0NCgkJDQoJCXJldHVybiBtbGVfdG9vbHM6OmdldF9yb290X2FsaWFzKCk7DQoNCgl9DQoNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/class/class.myautoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGEgY2xhc3NlIHF1aSBn6HJlIGxlIGNoYXJnZW1lbnQgYXV0b21hdGlxdWUgZGVzIGNsYXNzZXMgZW4gbeltb2lyZQ0KICogDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KIA0KIC8qKg0KICogQ2xhc3Mgc3RhdGljIGfpcmFudCBsZXMgZW50aXTpcyB1dGlsaXPpZXMgZGFucyBsJ2FwcGxpY2F0aW9uDQogKglMJ2ludOly6nQg6XRhbnQgZGUgbmUgcGFzIHJlZOljbGFyZXIgWCBpbnN0YW5jZXMgZGUgY2xhc3MgaWRlbnRpcXVlcyBpbnV0aWxlbWVudC4NCiAqDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQpmaW5hbCBjbGFzcyBNeUF1dG9sb2FkDQp7DQoJcHJpdmF0ZSBzdGF0aWMgJGluc3RhbmNlczsNCgkNCgkvKioNCgkgKiBDb25zdHJ1Y3RldXIgcHJpdukNCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KCXsNCgl9CQ0KCQ0KCS8qKg0KCSAqIEZvbmN0aW9uIGFwcGVs6WUgcGFyIGxlIG5veWF1IGRlcyBlbnRpdOllcyBldCBkZXMgZW50aXTpZXMgZGUgcmVjaGVyY2hlLCANCgkgKiBpbCB2YSBpbnN0YW5jaWVyIGwnIGVudGl06SBzaSBlbGxlIGVzdCBpbmV4aXN0YW50ZSBldCBsYSBzdG9ja2VyIGVuIG3pbW9pcmUNCiAgICAgKiANCgkgKiBAcGFyYW0gc3RyaW5nIGwnaW5zdGFuY2UgOiAibmV3IG1hQ2xhc3MoKSIuIEwnaW5zdGFuY2UgZG9pdCBo6XJpdGVyIGRlIEVudGl0eSAvIEVudGl0eUFzc29jaWF0aW9uIG91IFNlYXJjaENvcmUNCgkgKi8NCglwdWJsaWMgZmluYWwgc3RhdGljIGZ1bmN0aW9uIGFkZEluc3RhbmNlKCRuYW1lc3BhY2UsICRuZXdpbnN0YW5jZSkNCgl7CQ0KCQkkbmFtZXNwYWNlID0gc3RydG9sb3dlcigkbmFtZXNwYWNlKTsNCgkJJG5hbWUgPSAkbmV3aW5zdGFuY2UtPmdldE5hbWUoKTsNCgkJCQkNCgkJaWYoaXNzZXQoc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskbmFtZV0pKQ0KCQl7DQoJCQlUcmFjZTo6ZGVidWcoIkluc3RhbmNlICIuJG5hbWUuIiBkZWphIHByZXNlbnRlLiIpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCVRyYWNlOjpkZWJ1ZygiQWpvdXQgZGUgbCdpbnN0YW5jZSAiLiRuYW1lKTsNCgkJc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskbmFtZV0gPSAkbmV3aW5zdGFuY2U7DQoJfQ0KCQ0KCS8qKg0KCSAqIFJlbnZvaSB1bmUgaW5zdGFuY2UgZCdlbnRpdOkgcHLpY+lkZW1lbnQgaW5zdGFuY2npZS4gQ2hhcXVlIGluc3RhbmNlIHJldG91cm7pZSBlc3QgdW4gY2xvbmUgY2UgcXVpIOl2aXRlIGQndXRpbGlzZXIgDQoJICogbGUgbeptZSBwb2ludGV1ciBt6W1vaXJlIGV0IGQn6WNyYXNlciBzZXMgcHJvcHJlcyBkb25u6WVzDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyBsZSBub20gZGUgbCdpbnN0YW5jZSDgIHJldG91cm5lci4gTCdpbnN0YW5jZSBkb2l0IGjpcml0ZXIgZGUgRW50aXR5IC8gRW50aXR5QXNzb2NpYXRpb24gb3UgU2VhcmNoQ29yZQ0KCSAqIEByZXR1cm4gT2JqZWN0IGluc3RhbmNlIHVuZSBpbnN0YW5jZQ0KCSAqLw0KCXB1YmxpYyBmaW5hbCBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoJG5hbWVzcGFjZSwgJGluc3RhbmNlTmFtZSkNCgl7DQoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOw0KCQlteUF1dG9sb2FkOjppc1ZhbGlkZU5hbWVzcGFjZSgkbmFtZXNwYWNlKTsNCgkJDQoJCWlmKGlzc2V0KHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV1bJGluc3RhbmNlTmFtZV0pKQ0KCQl7DQoJCQlyZXR1cm4gY2xvbmUgc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskaW5zdGFuY2VOYW1lXTsNCgkJfQ0KCQkNCgkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiQXVjdW5lIGluc3RhbmNlICRpbnN0YW5jZU5hbWUgbidlc3Qgc3RvY2tlZSBkYW5zIGwnYXV0b2xvYWQiKTsNCgl9DQoJDQoJLyoqDQoJICogUmVudm9pIHRvdXRlcyBsZXMgaW5zdGFuY2VzIGQnZW50aXTpcyBwculj6WRlbWVudCBpbnN0YW5jaellcy4gUGFyIGTpZmF1dCBuZSByZW52b2kgcGFzIGxlcyBpbnN0YW5jZXMgZCdlbnRpdOlzIGjpcml0YW50cyBkZSBTZWFyY2hDb3JlIChsZXMgbW90ZXVycyBkZSByZWNoZXJjaGUpDQogICAgICogDQoJICogQHBhcmFtIGJvb2xlYW4gc2kgZOlmaW5pdCDgIHZyYWksIGluY2x1ZXJhIGxhIGxpc3RlIGRlcyBkJ2VudGl06XMgaOlyaXRhbnRzIGRlIFNlYXJjaENvcmUNCgkgKiBAcmV0dXJuIGFycmF5IHVuZSBsaXN0ZSBkJ2luc3RhbmNlcw0KCSAqLw0KCXB1YmxpYyBmaW5hbCBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsSW5zdGFuY2VzKCRuYW1lc3BhY2UsICRpbmNsdWRlX3NlYXJjaCA9IGZhbHNlKQ0KCXsNCgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7DQoJCW15QXV0b2xvYWQ6OmlzVmFsaWRlTmFtZXNwYWNlKCRuYW1lc3BhY2UpOw0KCQ0KCQlpZigkaW5jbHVkZV9zZWFyY2gpDQoJCQlyZXR1cm4gc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXTsNCgkJDQoJCSRsaXN0ZVJldG91ciA9IGFycmF5KCk7DQoJCSRpbnN0cyA9IHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV07DQoJCWZvcmVhY2goJGluc3RzIGFzICRpbnN0KQ0KCQl7DQoJCQlpZigkaW5zdCBpbnN0YW5jZW9mIFNlYXJjaENvcmUpDQoJCQkJY29udGludWU7DQoJCQkNCgkJCSRsaXN0ZVJldG91cltdID0gJGluc3Q7DQoJCX0NCgkJcmV0dXJuICRsaXN0ZVJldG91cjsNCgl9DQoJDQoJcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSkNCgl7DQoJCWlmKCFpc3NldChzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdKSkNCgkJew0KCQkJVHJhY2U6OmVycm9yKCJMZSBuYW1lc3BhY2UgJyRuYW1lc3BhY2UnIG4nZXhpc3RlIHBhcyBkYW5zIGxlIG1vZHVsZSBNbW1mcy4iKTsNCgkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxlIG5hbWVzcGFjZSAkbmFtZXNwYWNlIG4nZXhpc3RlIHBhcyBkYW5zIGxlIG1vZHVsZSBNbW1mcy4iKTsNCgkJfQ0KCX0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.seachelement.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIHByaW5jaXBhbGVzIGNsYXNzZXMgdXRpbGlz6WVzIHBvdXIgZ+lyZXIgbGVzIG1vdGV1cnMgZGUgcmVjaGVyY2hlIGRhbnMgbGUgZnJvbnQtb2ZmaWNlDQogKg0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KDQovKioNCiAqICAgUmVwculzZW50ZSB1biBjaGFtcHMgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZQ0KICogDQogKiBMYSBjb21wb3NpdGlvbiBkJ3VuIG1vdGV1ciBkZSByZWNoZXJjaGUgZXN0IGFzc2V6IHNlbWJsYWJsZSDgIGNlbGxlIGQndW5lIGVudGl06SwgcGFyIGV4ZW1wbGUgOg0KICogDQogKiA8Y29kZT4NCiAqICBjbGFzcyBTZWFyY2hDbGllbnQgZXh0ZW5kcyBTZWFyY2hDb3JlDQogKiAgew0KICogICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICogICB7DQogKiAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCdzZWFyY2hfY2xpZW50JywnY2xpZW50Jyk7IC8vbGlhaXNvbiBzdXIgbCdlbnRpdOkgQ2xpZW50DQogKiAgICAgICANCiAqICAgICAgICAkdGhpcy0+bGlzdGVFbGVtZW50c1snY29kZXBvc3RhbCddID0gICAgDQogKiAgICAgICAgICAgICAgbmV3IFNlYWNoRWxlbWVudCgnY29kZXBvc3RhbCcsICdjb2RlcG9zdGFsJywgbVR5cGVDcml0ZXJlOjokRVEsIG5ldyBTRUFSQ0hfRklFTERfU0VMRUNUKCkpOyAgICAgDQogKiANCiAqICAgICAgICAkdGhpcy0+bGlzdGVFbGVtZW50c1snYWdlbWluJ10gPSAgICAgICAgIA0KICogICAgICAgICAgICAgIG5ldyBTZWFjaEVsZW1lbnQoJ2FnZW1pbicsICAgICAnYWdlJywgICAgICAgIG1UeXBlQ3JpdGVyZTo6JEdURSwgbmV3IFNFQVJDSF9GSUVMRF9URVhUKCkpOw0KICogDQogKiAgICAgICAgJHRoaXMtPmxpc3RlRWxlbWVudHNbJ2FnZW1heCddID0gICAgICAgIA0KICogICAgICAgICAgICAgIG5ldyBTZWFjaEVsZW1lbnQoJ2FnZW1heCcsICAgICAnYWdlJywgICAgICAgIG1UeXBlQ3JpdGVyZTo6JExURSwgbmV3IFNFQVJDSF9GSUVMRF9URVhUKCkpOw0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICogICB9DQogKiAgfQ0KICogPC9jb2RlPg0KICogDQogKiAgIERvbm5lcmEgdW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBkZSBjbGllbnQgcGFyIGxldXIgY29kZSBwb3N0YWwgYXZlYyBwb3NzaWJpbGl06SBkZSBwculjaXNlciBsJ2FnZSBtaW5pbXVtIGV0L291IGwnYWdlIG1heGltdW0gZHUgY2xpZW50DQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8gIA0KY2xhc3MgU2VhY2hFbGVtZW50DQp7DQoJcHJpdmF0ZSAkbmFtZTsNCglwcml2YXRlICRmaWVsZG5hbWU7DQoJcHJpdmF0ZSAkdHlwZUNyaXRlcmU7DQoJcHJpdmF0ZSAkc2VhcmNoRmllbGQ7DQoJDQogICAgLyoqDQogICAgKiBjb25zdHJ1Y3RldXIgcHVibGljDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IGNoYW1wcyBkZSByZWNoZXJjaGUuIERvaXQg6nRyZSB1bmlxdWUgZGFucyBsZSBtb3RldXIgZGUgcmVjaGVyY2hlDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSBkdSBjaGFtcHMgZGUgbCdlbnRpdOkgbGnpZS4NCiAgICAqIEBwYXJhbSBUeXBlQ3JpdGVyZSBsZSBUeXBlIGRlIENyaXTocmUgYXNzb2Np6SAo6WdhbGl06SBhYnNvbHVlLCBzdXDpcmlldXIg4C4uLikNCiAgICAqIEBwYXJhbSBTRUFSQ0hfRklFTEQgbGUgY2hhbXBzIEhUTUwgYXV0by1n6W7pcukgZOlkaekgYXV4IG1vdGV1cnMgZGUgcmVjaGVyY2hlDQogICAgKiANCiAgICAqIEByZXR1cm4gU2VhY2hFbGVtZW50IHVuIGNoYW1wcyBkZSBtb3RldXIgZGUgcmVjaGVyY2hlLg0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCRmaWVsZG5hbWUsJHR5cGVDcml0ZXJlLCAkc2VhcmNoRmllbGQpDQoJewkNCgkJJHRoaXMtPm5hbWUgPSAkbmFtZTsNCgkJJHRoaXMtPmZpZWxkbmFtZSA9ICRmaWVsZG5hbWU7DQoJCSR0aGlzLT50eXBlQ3JpdGVyZSA9ICR0eXBlQ3JpdGVyZTsNCgkJJHRoaXMtPnNlYXJjaEZpZWxkID0gJHNlYXJjaEZpZWxkOw0KCX0NCiAgICAgICANCiAgIC8qKg0KICAgICogZnVuY3Rpb24gZ2V0dGVyDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIGxlIG5vbSBkdSBjaGFtcHMNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkNCgl7cmV0dXJuICR0aGlzLT5uYW1lO30gDQogICAgICAgDQogICAvKioNCiAgICAqIGZ1bmN0aW9uIGdldHRlcg0KICAgICogDQogICAgKiBAcmV0dXJuIHN0cmluZyBsZSBub20gZHUgY2hhbXBzIGRlIGwnZW50aXTpIGxp6WUNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZG5hbWUoKQ0KCXtyZXR1cm4gJHRoaXMtPmZpZWxkbmFtZTt9IA0KICAgICAgIA0KICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXINCiAgICAqIA0KICAgICogQHJldHVybiBUeXBlQ3JpdGVyZSBsZSBUeXBlIGRlIENyaXTocmUgYXNzb2Np6SAo6WdhbGl06SBhYnNvbHVlLCBzdXDpcmlldXIg4C4uLikgICANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlQ3JpdGVyZSgpDQoJe3JldHVybiAkdGhpcy0+dHlwZUNyaXRlcmU7fSANCiAgICAgICANCiAgIC8qKg0KICAgICogZnVuY3Rpb24gZ2V0dGVyDQogICAgKiANCiAgICAqIEByZXR1cm4gU0VBUkNIX0ZJRUxEIGxlIGNoYW1wcyBIVE1MIGF1dG8tZ+lu6XLpIGTpZGnpIGF1eCBtb3RldXJzIGRlIHJlY2hlcmNoZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFNlYXJjaEZpZWxkKCkNCgl7cmV0dXJuICR0aGlzLT5zZWFyY2hGaWVsZDt9DQp9DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/class/class.searchcore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIHByaW5jaXBhbGVzIGNsYXNzZXMgdXRpbGlz6WVzIHBvdXIgZ+lyZXIgbGVzIG1vdGV1cnMgZGUgcmVjaGVyY2hlIGRhbnMgbGUgZnJvbnQtb2ZmaWNlDQogKg0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KDQovKioNCiAqICAgUmVwculzZW50ZSB1bmUgZW50aXTpIGTpZGnpZSDgIGxhIHJlY2hlcmNoZS4NCiAqIA0KICogVW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBzZSBiYXNlIHRvdWpvdXJzIHN1ciB1bmUgZW50aXTpIGV4aXN0YW50ZS4gDQogKiBVbiBtb3RldXIgZGUgcmVjaGVyY2hlIGNvbnRpZW50IHVuIG91IHBsdXNpZXVycyBjaGFtcHMgKFNlYXJjaEVsZW1lbnQpIHRvdWpvdXJzIGxp6XMg4CB1biBjaGFtcHMgKEZJRUxEKSBkZSBsJ2VudGl06ScNCiAqIFBsdXNpZXVycyBDaGFtcHMgKFNlYXJjaEVsZW1lbnQpIHBldXZlbnQg6nRyZSBsaekg4CB1biBt6m1lIGNoYW1wcyAoRklFTEQpIGQndW5lIGVudGl06SwgbCd1dGlsaXNhdGlvbiBwYXIgZXhlbXBsZSBkJ3VuZSByZWNoZXJjaGUgYXZlYyB1biBwcml4IG1pbmkgZXQgdW4gcHJpeCBtYXhpDQogKiANCiAqIExhIGNvbXBvc2l0aW9uIGQndW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBlc3QgYXNzZXogc2VtYmxhYmxlIOAgY2VsbGUgZCd1bmUgZW50aXTpLCBwYXIgZXhlbXBsZSA6DQogKiANCiAqIDxjb2RlPg0KICogIGNsYXNzIFNlYXJjaENsaWVudCBleHRlbmRzIFNlYXJjaENvcmUNCiAqICB7DQogKiAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogKiAgIHsNCiAqICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJ3NlYXJjaF9jbGllbnQnLCdjbGllbnQnKTsgLy9saWFpc29uIHN1ciBsJ2VudGl06SBDbGllbnQNCiAqICAgICAgIA0KICogICAgICAgICR0aGlzLT5saXN0ZUVsZW1lbnRzWydjb2RlcG9zdGFsJ10gPSAgICANCiAqICAgICAgICAgICAgICBuZXcgU2VhY2hFbGVtZW50KCdjb2RlcG9zdGFsJywgJ2NvZGVwb3N0YWwnLCBtVHlwZUNyaXRlcmU6OiRFUSwgbmV3IFNFQVJDSF9GSUVMRF9TRUxFQ1QoKSk7ICAgICANCiAqIA0KICogICAgICAgICR0aGlzLT5saXN0ZUVsZW1lbnRzWydhZ2VtaW4nXSA9ICAgICAgICAgDQogKiAgICAgICAgICAgICAgbmV3IFNlYWNoRWxlbWVudCgnYWdlbWluJywgICAgICdhZ2UnLCAgICAgICAgbVR5cGVDcml0ZXJlOjokR1RFLCBuZXcgU0VBUkNIX0ZJRUxEX1RFWFQoKSk7DQogKiANCiAqICAgICAgICAkdGhpcy0+bGlzdGVFbGVtZW50c1snYWdlbWF4J10gPSAgICAgICAgDQogKiAgICAgICAgICAgICAgbmV3IFNlYWNoRWxlbWVudCgnYWdlbWF4JywgICAgICdhZ2UnLCAgICAgICAgbVR5cGVDcml0ZXJlOjokTFRFLCBuZXcgU0VBUkNIX0ZJRUxEX1RFWFQoKSk7DQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgIH0NCiAqICB9DQogKiA8L2NvZGU+DQogKiANCiAqICAgRG9ubmVyYSB1biBtb3RldXIgZGUgcmVjaGVyY2hlIGRlIGNsaWVudCBwYXIgbGV1ciBjb2RlIHBvc3RhbCBhdmVjIHBvc3NpYmlsaXTpIGRlIHBy6WNpc2VyIGwnYWdlIG1pbmltdW0gZXQvb3UgbCdhZ2UgbWF4aW11bSBkdSBjbGllbnQNCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLyAgDQpjbGFzcyBTZWFyY2hDb3JlIA0KewkNCglwcm90ZWN0ZWQgJGxpc3RlRWxlbWVudHM7DQoJcHJvdGVjdGVkICRlbnRpdHlOYW1lOw0KCXByb3RlY3RlZCAkbmFtZTsNCgkNCiAgICAvKioNCiAgICAqIENvbnN0cnVjdGV1ciBwdWJsaWMNCiAgICAqIA0KICAgICogIEEgbm90ZXIgcXVlIGxhIGNsYXNzZSB1bmUgZm9pcyBjcunpZSBzZSBjaGFyZ2UgYXV0b21hdGlxdWVtZW50IGRhbnMgbCdBdXRvbG9hZGVyDQogICAgKiANCgkqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGQndW4gbW9kdWxlIGRlIHR5cGUgTW1tZnMNCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IG1vdGV1ciBkZSByZWNoZXJjaGUuIERvaXQg6nRyZSB1bmlxdWUgZGFucyB0b3V0ZSBsJ2FwcGxpY2F0aW9uDQogICAgKiBAcGFyYW0gc3RyaW5nICRlbnRpdHlOYW1lIGxlIG5vbSBkZSBsJ2VudGl06SBsaellLiBEb2l0IOp0cmUgZXhpc3RhbnRlDQogICAgKiBAcmV0dXJuIFNlYXJjaENvcmUgbGUgbW90ZXVyIGRlIHJlY2hlcmNoZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVuYW1lLCAkbmFtZSwgJGVudGl0eU5hbWUpDQoJew0KCQkkdGhpcy0+bmFtZSA9ICRuYW1lOw0KCQkkdGhpcy0+ZW50aXR5TmFtZSA9ICRlbnRpdHlOYW1lOw0KCQkkdGhpcy0+bGlzdGVFbGVtZW50cyA9IGFycmF5KCk7DQoJCQ0KCQkvL09uIGFqb3V0ZSB1bmUgaW5zdGFuY2UgZGUgc29pIGRhbnMgbCdhdXRvbG9hZA0KCQlteUF1dG9sb2FkOjphZGRJbnN0YW5jZSgkbW9kdWxlbmFtZSwgJHRoaXMpOw0KCX0NCiAgIA0KICAgLyoqDQogICAgKiBmdW5jdGlvbiBnZXR0ZXINCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgbGUgbm9tIGR1IG1vdGV1ciBkZSByZWNoZXJjaGUNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkNCgl7cmV0dXJuICR0aGlzLT5uYW1lO30NCgkgICANCiAgIC8qKg0KICAgICogZnVuY3Rpb24gZ2V0dGVyDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIGxlIG5vbSBkZSBsJ2VudGl06SBsaellDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RW50aXR5TmFtZSgpDQoJe3JldHVybiAkdGhpcy0+ZW50aXR5TmFtZTt9DQoJDQogICAgICANCiAgIC8qKg0KICAgICogZnVuY3Rpb24gZ2V0dGVyDQogICAgKiANCiAgICAqIEByZXR1cm4gYXJyYXkgbGEgbGlzdGUgZGVzIFNlYXJjaEVsZW1lbnQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldExpc3RlRWxlbWVudHMoKQ0KCXtyZXR1cm4gJHRoaXMtPmxpc3RlRWxlbWVudHM7fQ0KCQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/class/class.searchfield.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgbGVzIHByaW5jaXBhbGVzIGNsYXNzZXMgZGUgY2hhbXBzIEhUTUwgYXV0by1n6W7pcukgZOlkaekgYXV4IG1vdGV1cnMgZGUgcmVjaGVyY2hlDQogKg0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KIA0KLyoqDQogKiAgIENsYXNzIG3ocmUgZGUgdG91cyBsZXMgY2hhbXBzIEhUTUwgYXV0by1n6W7pcukgICAgICAgICANCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICogICAvIVwgbmUgcGV1dCDqdHJlIHV0aWxpc+kgZGFucyBsJ+l0YXQgZGFucyBsZSBjb2RlLiBWb3VzIGRldmV6IHV0aWxpc2VyIHVuZSBjbGFzc2UgaOlyaXRhbnQgZGUgU0VBUkNIX0ZJRUxEIG91IHJlZOlmaW5pciB2b3MgcHJvcHJlIGNsYXNzZQ0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovICAgIA0KY2xhc3MgU0VBUkNIX0ZJRUxEDQp7ICAgICAgICANCiAgICBwcm90ZWN0ZWQgJGNtc01vZHVsZTsNCiAgICANCiAgICAvKioNCiAgICAqIENvbnN0cnVjdGV1ciBwdWJsaWMNCiAgICAqIA0KICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7ICAgICAgICANCiAgICAgICAgJHRoaXMtPmNtc01vZHVsZSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnTW1tZnMnKTsNCg0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAqIHJlbnZvaSBsZSBjb2RlIEhUTUwgZ+lu6XLpDQogICAgKiAgICAgDQogICAgKiBAcGFyYW0gaW50ICRpZCBsJ2lkZW50aWZpYW50IGRlIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIGxlcyBjbGFzc2VzIGFjdGlvbnMgOiAkaWQpDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSDgIGRvbm5lciBhdSBjaGFtcHMgSFRNTA0KICAgICogQHBhcmFtIEZJRUxEIGxlIGNoYW1wcyBGSUVMRCBkZSBsJ2VudGl06SBsaekgYXUgbW90ZXVyIGRlIHJlY2hlcmNoZQ0KICAgICogQHBhcmFtIGFycmF5IGxhIGxpc3RlIGRlIHZhbGV1ciDgIHRyYWl0ZXIgZGFucyBsZSBjaGFtcHMgSFRNTA0KICAgICogDQogICAgKiBAcmV0dXJuIG1peGVkIGxlIGNvZGUgSFRNTCDgIGFmZmljaGVyDQogICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVmYXVsdHZpZXcoJGlkLCAkbmFtZSwgJGZpZWxkLCAkdmFscykNCiAgICB7DQogICAgICAgIHJldHVybiAnW3RvZG8gOiBjb2RlciBkZWZhdWx0dmlld10gOiknOw0KICAgIH0NCn0NCg0KLyoqDQogKiAgIENhbXBzIEhUTUwgYXV0by1n6W7pcukgZGUgdHlwZSBpbnB1dFRleHQgICAgICAgICANCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KY2xhc3MgU0VBUkNIX0ZJRUxEX1RFWFQgZXh0ZW5kcyBTRUFSQ0hfRklFTEQNCnsgICAgDQogICAvKioNCiAgICAqIHJlbnZvaSBsZSBjb2RlIEhUTUwgZ+lu6XLpDQogICAgKiAgICAgDQogICAgKiBAcGFyYW0gaW50ICRpZCBsJ2lkZW50aWZpYW50IGRlIHZvdHJlIG1vZHVsZSAoZW4gZ+lu6XJhbCBkYW5zIGxlcyBjbGFzc2VzIGFjdGlvbnMgOiAkaWQpDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG5vbSDgIGRvbm5lciBhdSBjaGFtcHMgSFRNTA0KICAgICogQHBhcmFtIEZJRUxEIGxlIGNoYW1wcyBGSUVMRCBkZSBsJ2VudGl06SBsaekgYXUgbW90ZXVyIGRlIHJlY2hlcmNoZQ0KICAgICogQHBhcmFtIGFycmF5IGxhIGxpc3RlIGRlIHZhbGV1ciDgIHRyYWl0ZXIgZGFucyBsZSBjaGFtcHMgSFRNTA0KICAgICogDQogICAgKiBAcmV0dXJuIG1peGVkIGxlIGNvZGUgSFRNTCDgIGFmZmljaGVyDQogICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVmYXVsdHZpZXcoJGlkLCAkbmFtZSwgJGZpZWxkLCAkdmFscykNCiAgICB7DQogICAgICAgICRsb25nID0gJGZpZWxkLT5nZXRTaXplKCk7DQogICAgICAgIGlmKCRsb25nICE9IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHN3aXRjaChUUlVFKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgKCRmaWVsZC0+Z2V0U2l6ZSgpIDwgMikgOiAkbG9uZysrIDticmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICgkZmllbGQtPmdldFNpemUoKSA8IDUwKSA6IGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQgOiAkbG9uZyA9IDUwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICByZXR1cm4gJHRoaXMtPmNtc01vZHVsZS0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJG5hbWUsIG51bGwsICRsb25nLCAkZmllbGQtPmdldFNpemUoKSk7Ow0KICAgIH0NCn0NCg0KLyoqDQogKiAgIENhbXBzIEhUTUwgYXV0by1n6W7pcukgZGUgdHlwZSBTZWxlY3RCb3ggICAgICAgICANCiAqIA0KICogQHNpbmNlIDEuMA0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBtbW1mcw0KICoqLw0KY2xhc3MgU0VBUkNIX0ZJRUxEX1NFTEVDVCBleHRlbmRzIFNFQVJDSF9GSUVMRA0Kew0KICAgLyoqDQogICAgKiByZW52b2kgbGUgY29kZSBIVE1MIGfpbuly6Q0KICAgICogICAgIA0KICAgICogQHBhcmFtIGludCAkaWQgbCdpZGVudGlmaWFudCBkZSB2b3RyZSBtb2R1bGUgKGVuIGfpbulyYWwgZGFucyBsZXMgY2xhc3NlcyBhY3Rpb25zIDogJGlkKQ0KICAgICogQHBhcmFtIHN0cmluZyBsZSBub20g4CBkb25uZXIgYXUgY2hhbXBzIEhUTUwNCiAgICAqIEBwYXJhbSBGSUVMRCBsZSBjaGFtcHMgRklFTEQgZGUgbCdlbnRpdOkgbGnpIGF1IG1vdGV1ciBkZSByZWNoZXJjaGUNCiAgICAqIEBwYXJhbSBhcnJheSBsYSBsaXN0ZSBkZSB2YWxldXIg4CB0cmFpdGVyIGRhbnMgbGUgY2hhbXBzIEhUTUwNCiAgICAqIA0KICAgICogQHJldHVybiBtaXhlZCBsZSBjb2RlIEhUTUwg4CBhZmZpY2hlcg0KICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGRlZmF1bHR2aWV3KCRpZCwgJG5hbWUsICRmaWVsZCwgJHZhbHMpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPmNtc01vZHVsZS0+Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KCRpZCwgJG5hbWUsICR2YWxzLCBhcnJheSgpICwgMSwgJycsIGZhbHNlKTsNCiAgICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.trace.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgdG91dGUgbGEgZ2VzdGlvbiBkZXMgaW5mb3JtYXRpb25zIGRlIGTpYnVnYWdlLg0KICoNCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCg0KLyoqDQogKiAgIFBlcm1ldCBkJ2FmZmljaGVyIGRlcyB0cmFjZXMgcHJvcHJlbWVudCBzZWxvbiBjZXJ0YWlucyBuaXZlYXV4ICAgICAgICAgDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAqICBleGVtcGxlDQogKiAgPGNvZGU+DQogKiAgICAgICAgICBUcmFjZTo6ZGVidWcoJ2plIHBhc3NlIHBhciBpY2knKTsNCiAqICAgICAgICAgIFRyYWNlOjppbmZvKCd0cmFpdGVtZW50IHRlcm1pbuknKTsNCiAqICAgICAgICAgIFRyYWNlOjp3YXJuKCd0cm9wIHBldSBkZSBy6XN1bHRhdHMnKTsNCiAqICAgICAgICAgIFRyYWNlOjplcnJvcignZXJyZXVyIGRlIHRyYWl0ZW1lbnQnKTsNCiAqICA8L2NvZGU+DQogKiANCiAqIGxhIHByb3Byael06SAkbGV2ZWwgZGUgY2V0dGUgY2xhc3NlIGTpZmluaXQgbGUgbml2ZWF1IGQnYWxlcnQg4CBwYXJ0aXIgZHVxdWVsIGxlcyBtZXNzYWdlcyBzJ2FmZmljaGVyb250LiANCiAqICBBaW5zaSB1biBuaXZlYXUg6WdhbCDgIDIgKFdBUk4pIG4nYWZmaWNoZXJhIHF1ZSBsZXMgbWVzc2FnZXMgZGUgV0FSTklORyBldCBkZSB0eXBlIEVSUk9SDQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8gICANCiANCmZpbmFsIGNsYXNzIFRyYWNlDQp7DQoJcHVibGljIHN0YXRpYyAkREVCVUcgPSAwOw0KCXB1YmxpYyBzdGF0aWMgJElORk8gPSAxOw0KCXB1YmxpYyBzdGF0aWMgJFdBUk4gPSAyOw0KCXB1YmxpYyBzdGF0aWMgJEVSUk9SID0gMzsNCgkNCgkvL0NoYW5nZXIgY2V0dGUgdmFsZXVyIGRlIDAg4CAzIHBvdXIgbml2ZWxlciBsZXMgbG9ncw0KCXB1YmxpYyBzdGF0aWMgJGxldmVsID0gMjsNCgkNCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7DQoJfQ0KDQoJLyoqDQogICAgKiBBZmZpY2hlIHVuIG1lc3NhZ2UgZGVzdGlu6SBhdSBk6WJ1Z2FnZS4NCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyBsZSBtZXNzYWdlDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIGRlYnVnKCRtc2cpDQoJewkNCgkJaWYoc2VsZjo6JGxldmVsID4gVHJhY2U6OiRERUJVRykge3JldHVybjt9DQoJCWVjaG8gIjxkaXYgY2xhc3M9J2RlYnVnJyA+JG1zZzwvZGl2PiI7DQoJfQ0KDQogICAgLyoqDQogICAgKiBBZmZpY2hlIHVuIG1lc3NhZ2UgZGVzdGlu6SDgIGluZm9ybWVyLg0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIGxlIG1lc3NhZ2UNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gaW5mbygkbXNnKQ0KCXsJDQoJCWlmKHNlbGY6OiRsZXZlbCA+IFRyYWNlOjokSU5GTykge3JldHVybjt9DQoJCWVjaG8gIjxkaXYgY2xhc3M9J2luZm8nID4kbXNnPC9kaXY+IjsNCgl9IA0KDQogICAgLyoqDQogICAgKiBBZmZpY2hlIHVuIG1lc3NhZ2UgZGVzdGlu6SDgIGF0dGlyZXIgbCdhdHRlbnRpb24gc3VyIHVuIOl2ZW50dWVsIHNvdWNpcy4NCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyBsZSBtZXNzYWdlDQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIHdhcm4oJG1zZykNCgl7CQ0KCQlpZihzZWxmOjokbGV2ZWwgPiBUcmFjZTo6JFdBUk4pIHtyZXR1cm47fQ0KCQllY2hvICI8ZGl2IGNsYXNzPSd3YXJuJyA+JG1zZzwvZGl2PiI7DQoJfSANCg0KICAgIC8qKg0KICAgICogQWZmaWNoZSB1biBtZXNzYWdlIGRlc3Rpbukg4CBzaWduYWxlciB1bmUgZXJyZXVyIG5vbiBn6XJhYmxlIHBhciBsZSBzeXN06G1lDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbWVzc2FnZQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiBlcnJvcigkbXNnKQ0KCXsJDQoJCWVjaG8gIjxkaXYgY2xhc3M9J2Vycm9yJyA+JG1zZzwvZGl2PiI7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/class/class.typecritere.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGllbnQgdG91dGVzIGxlcyBmb25jdGlvbm5hbGl06XMgcmVsYXRpdmVzIGF1eCByZWNoZXJjaGVzIHBhciBDcml06HJlcw0KICogDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIG1tbWZzDQogKiovDQogDQoNCi8qKg0KKiBFbnVtIGRlcyBkaWZm6XJlbnRzIFR5cGVDcml0ZXJlIGVudmlzYWdlYWJsZQ0KKiANCiogdXRpbGlzZXIgYWluc2kgOg0KKiANCiogPGNvZGU+DQoqIFR5cGVDcml0ZXJlOjokRVENCiogPC9jb2RlPg0KKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCmNsYXNzIFR5cGVDcml0ZXJlDQp7DQogICAgLyoqDQogICAgKiBFc3Qg6WdhbCDgDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRFUSA9ICcgPSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogRXN0IGRpZmbpcmVudCBkZSANCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5FUSA9ICcgIT0gJzsNCiAgICANCiAgICAvKioNCiAgICAqIGVzdCBzdHJpY3RlbWVudCBzdXDpcmlldXIg4A0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkR1QgPSAnID4gJzsNCiAgICANCiAgICAvKioNCiAgICAqIGVzdCBzdXBlcmlldXIgb3Ug6WdhbCDgDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRHVEUgPSAnID49ICc7DQogICAgDQogICAgLyoqDQogICAgKiBlc3Qgc3RyaWN0ZW1lbnQgaW5mZXJpZXVyIOANCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExUID0gJyA8ICc7DQogICAgDQogICAgLyoqDQogICAgKiBlc3QgaW5mZXJpZXVyIG91IOlnYWwg4CANCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExURSA9ICcgPD0gJzsNCgkNCgkvKioNCiAgICAqIGVzdCBudWxsIG91IHZpZGUNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJEVNUFRZID0gJ2lzIGVtcHR5KCknOw0KCQ0KICAgIC8qKg0KICAgICogZXN0IG5vbiBudWxsIGV0IG5vbiB2aWRlDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRORU1QVFkgPSAnaXMgbm90IGVtcHR5KCknOw0KICAgIA0KICAgIC8qKg0KICAgICogZXN0IG51bGwNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5VTEwgPSAnIGlzIG51bGwgJzsNCiAgICANCiAgICAvKioNCiAgICAqIG4nZXN0IHBhcyBudWxsDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICROTlVMTCA9ICcgaXMgbm90IG51bGwnOw0KICAgIA0KICAgIC8qKg0KICAgICogZXN0IGF2YW50IChEYXRlKQ0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkQkVGT1JFID0gJyBiZWZvcmUgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGVzdCBhcHLocyAoRGF0ZSkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJEFGVEVSID0gJyBhZnRlciAnOw0KICAgIA0KICAgIC8qKg0KICAgICogZXN0IGVudHJlIChEYXRlKQ0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkQkVUV0VFTiA9ICcgYWZ0ZXIgJzsNCiAgICAgDQogICAgLyoqDQogICAgKiBlc3QgY29udGVudSBkYW5zIGxhIGxpc3RlIHN1aXZhbnRlDQogICAgKiANCiAgICAqIC8hXCBu6WNlc3NpdGUgYXUgbWluaW11bSBkZXV4IHZhbGV1cnMgZGFucyBsZSB0YWJsZWF1IGRlIHBhcmFt6HRyZQ0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkSU4gPSAnaW4gKCVhKSc7DQogICAgDQogICAgLyoqDQogICAgKiBuJ2VzdCBwYXMgY29udGVudSBkYW5zIGxhIGxpc3RlIHN1aXZhbnRlDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAqIC8hXCBu6WNlc3NpdGUgYXUgbWluaW11bSBkZXV4IHZhbGV1cnMgZGFucyBsZSB0YWJsZWF1IGRlIHBhcmFt6HRyZQ0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTklOID0gJ25vdCBpbiAoJWEpJzsNCiAgICANCiAgICAvKioNCiAgICAqIGNvbnRpZW50IGxhIGNoYWluZSBzdWl2YW50ZQ0KICAgICogDQogICAgKiAvIVwgdm91cyBkZXZleiBham91dGVyIHZvdXMgbeptZSBsZXMgY2FyYWN06HJlcyBn6W7pcmlxdWVzICclJw0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTElLRSA9ICcgbGlrZSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogY29udGllbnQgbGEgY2hhaW5lIHN1aXZhbnRlDQogICAgKiANCiAgICAqIC8hXCB2b3VzIGRldmV6IGFqb3V0ZXIgdm91cyBt6m1lIGxlcyBjYXJhY3TocmVzIGfpbulyaXF1ZXMgJyUnDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICROTElLRSA9ICcgbm90IGxpa2UgJzsNCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/class/class.validator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRpZW50IHRvdXRlIGxhIHBhcnRpZSB2YWxpZGF0aW9uIGRlcyBzYWlzaWVzIHV0aWxpc2F0ZXVyLg0KICoNCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8NCg0KLyoqDQogKiAgIFBlcm1ldCBkJ2ltcG9zZXIgYXBy6HMgbCdlbnZvaSBkJ3VuIGZvcm11bGFpcmUgdW5lIHbpcmlmaWNhdGlvbiBwYXIgRXhwcmVzc2lvbiBS6Wd1bGnocmUgKHJlZ2V4KSBzdXIgdG91dCBvdSBwYXJ0aWUgZGVzIGNoYW1wcyBjb21wb3NhbnQgY2UgZm9ybXVsYWlyZSAgICAgICAgIA0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgZXhlbXBsZQ0KICogIDxjb2RlPg0KICoNCiAqICAgY2xhc3MgQ2xpZW50IGV4dGVuZHMgbUVudGl0eQ0KICogICB7DQogKiAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICogICAgICAgew0KICogICAgICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJ2NsaWVudCcsICdtb25Nb2R1bGUnKTsNCiAqICAgICAgICAgICANCiAqICAgICAgICAgICAkdGhpcy0+YWRkKG5ldyBtRmllbGQoJ2VtYWlsJywgQ0FTVDo6JFNUUklORyw1NSwgVkFMSURBVE9SOjokRU1BSUwsIG51bGwsIG51bGwsIG5ldyBtSFRNTF9GSUVMRF9URVhUKCksIE5VTExBQkxFOjokVFJVRSkpOw0KICogICAgICAgfQ0KICogICB9DQogKiAgPC9jb2RlPg0KICogDQogKiBBaW5zaSBsZSBjaGFtcHMgImVtYWlsIiBkZXZyYSBzYXRpc2ZhaXJlIGwnZXhwcmVzc2lvbiBy6Wd1bGnocmUgZOlmaW5pZSBwYXIgVkFMSURBVE9SOjokRU1BSUwNCiAqIA0KICogTGEgY2xhc3NlIGNvbXBvcnRlIGRlIG5vbWJyZXVzZXMgUmVnRXggcHLpZOlmaW5pZSA6DQogKiANCiAqIDx1bD4NCiAqICAgICAgPGxpPiAkTk9ORSA6IGF1Y3VuIGNvbnRyb2xlDQogKiANCiAqICAgICAgPGxpPiAkTlVNRVJJUVVFIDogdW5pcXVlbWVudCBkZXMgY2hpZmZyZXMgICA8L2xpPg0KICogICAgICA8bGk+ICRBTFBIQSA6IHVuaXF1ZW1lbnQgZGVzIGxldHRyZXMgIDwvbGk+ICANCiAqICAgICAgPGxpPiAkQUxQSEFOVU0gOiBjaGlmZnJlcyBldCBsZXR0cmVzICAgIDwvbGk+DQogKiAgDQogKiAgICAgIDxsaT4gJFVSTCA6IHVuZSB1cmwgZGUgdHlwZSBodHRwIC8gaHR0cHMgPC9saT4NCiAqICAgICAgPGxpPiAkRU1BSUwgOiBmb3JtYXQgZCdlbWFpbCA8L2xpPiANCiAqIA0KICogICAgICA8bGk+ICREQVRFIDogZGF0ZSBhdSBmb3JtYXQgSkovTU0vQUFBQSA8L2xpPiANCiAqICAgICAgPGxpPiAkWUVBUiA6IGRhdGUgYXUgZm9ybWF0IEFBQUEgPC9saT4gDQogKiANCiAqIDwvdWw+DQogKiANCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgbW1tZnMNCiAqKi8gICANCmNsYXNzIFZBTElEQVRPUg0Kew0KCXB1YmxpYyBzdGF0aWMgJE5PTkUgPSBudWxsOw0KCQ0KCXB1YmxpYyBzdGF0aWMgJE5VTUVSSVFVRSA9IGFycmF5KCdgXihbWzpkaWdpdDpdXSspJGAnLCdsZSBjaGFtcHMgJmxhcXVvOyAlcyAmcmFxdW87IG5lIGRvaXQgY29udGVuaXIgcXVlIGRlcyBjaGlmZnJlcycpOw0KCXB1YmxpYyBzdGF0aWMgJEFMUEhBID0gYXJyYXkoJ2BeKFtbOmFscGhhOl1dKykkYCcsJ2xlIGNoYW1wcyAmbGFxdW87ICVzICZyYXF1bzsgbmUgZG9pdCBjb250ZW5pciBxdWUgZGVzIGxldHRyZXMnKTsNCglwdWJsaWMgc3RhdGljICRBTFBIQU5VTSA9IGFycmF5KCdgXihbWzphbG51bTpdXSspJGAnLCdsZSBjaGFtcHMgJmxhcXVvOyAlcyAmcmFxdW87IG5lIGRvaXQgY29udGVuaXIgcXVlIGRlcyBjaGlmZnJlcyBldCBkZXMgbGV0dHJlcycpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgJFVSTCA9IGFycmF5KCdgKGh0dHBzPzovLyhbLVx3XC5dKykrKDpcZCspPygvKFtcdy9fXC5dKihcP1xTKyk/KT8pPylgJywnbGUgY2hhbXBzICZsYXF1bzsgJXMgJnJhcXVvOyBuJmFwb3M7ZXN0IHBhcyB1bmUgYWRyZXNzZSB2YWxpZGUgOiAob3VibGlleiBwYXMgbGUgImh0dHA6Ly8iIGRldmFudCknKTsNCglwdWJsaWMgc3RhdGljICRFTUFJTCA9IGFycmF5KCdgXltcdy4tXStAW1x3Li1dK1wuW2EtekEtWl17Miw2fSRgJywnVGhlIEZpZWxkICZsYXF1bzsgJXMgJnJhcXVvOyBpcyBub3QgYSB2YWxpZCBlbWFpbCcpOw0KCQ0KCXB1YmxpYyBzdGF0aWMgJERBVEUgPSBhcnJheSgnYF4oMFsxLTldfFsxMl1bMC05XXwzWzAxXSlbLSAvLl0oMFsxLTldfDFbMDEyXSlbLSAvLl0oMTB8MTF8MTJ8MTN8MTR8MTV8MTZ8MTd8MTh8MTl8MjApXGRcZCRgJywgImxlIGNoYW1wcyAmbGFxdW87ICVzICZyYXF1bzsgbmUgcmVzcGVjdGUgcGFzIGxlIGZvcm1hdCBkZSBkYXRlIEpKL01NL0FBQUEiKTsNCglwdWJsaWMgc3RhdGljICRZRUFSID0gYXJyYXkoJ2BeKDEwfDExfDEyfDEzfDE0fDE1fDE2fDE3fDE4fDE5fDIwKVxkXGQkYCcsICJsZSBjaGFtcHMgJmxhcXVvOyAlcyAmcmFxdW87IG5lIHJlc3BlY3RlIHBhcyBsZSBmb3JtYXQgZGUgZGF0ZSBBQUFBIik7DQoJDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCgl7DQoJfQ0KCQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmFsaWRlKCR2LCAkc3RyKQ0KCXsNCgkJaWYoZW1wdHkoJHYpKQ0KCQkJcmV0dXJuIHRydWU7DQoJCQkNCgkJaWYoIWlzX2FycmF5KCR2KSkNCgkJew0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigibGUgcHJlbWllciBwYXJhbWV0cmUgZGUgbGEgZm9uY3Rpb24gdmFsaWRlKCkgZG9pdCBldHJlIGR1IHR5cGUgVkFMSURBVE9SIik7DQoJCX0NCgkJDQoJCXJldHVybiBwcmVnX21hdGNoKCR2WzBdICwgJHN0cik7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/Mmmfs.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENsYXNzZSBkZSBsJ0FQSSBkZSBjbXNtYWRlc2ltcGxlLiBTZXJ0IOAgZmFpcmUgbGEgbGlhaXNvbiBlbnRyZSBsJ0FQSSBkZSBDbXNNYWRlU2ltcGxlIGV0IGxlIGZyYW1ld29yayBNbW1GUycNCiAqDQogKiBAc2luY2UgMS4wDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIGNtc21zDQogKiovDQoNCi8vVW5pcXVlIGltcG9ydCwgdXRpbGlz6SBwb3VyIGfpcmVyIGxlcyB0cmFjZXMgZW4gc29ydGllDQppbmNsdWRlX29uY2UoY21zX2pvaW5fcGF0aChkaXJuYW1lKF9fRklMRV9fKSwiY2xhc3MiLCJjbGFzcy50cmFjZS5waHAiKSk7DQoNCiNE6WNvbW1lbnRlciBwb3VyIG9idGVuaXIgbGUgbW9kZSBkZWJ1ZyBjb21wbGV0LiBBdXRyZXMgdmFsZXVycyBwb3NzaWJsZXMgOiAkREVCVUd8JElORk98JFdBUk58JEVSUk9SDQojVHJhY2U6OiRsZXZlbCA9IFRyYWNlOjokREVCVUc7DQoNCi8qKg0KKiBDbGFzc2UgTW1tZnMgZOlmaW5pdCBsZSBtb2R1bGUgTW1tZnMgZXQgcGVybWV0IGFpbnNpIGQnYXZvaXIgdG91dGVzIGxlcyBjbGFzc2VzIGR1IGZyYW1ld29yayDgIGRpc3Bvc2l0aW9uIGRhbnMgQ21zTWFkZVNpbXBsZQ0KICoNCiAqIEBzaW5jZSAxLjANCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgY21zbXMNCiovDQpjbGFzcyBNbW1mcyBleHRlbmRzIENNU01vZHVsZQ0Kew0KCXByaXZhdGUgc3RhdGljICRpbnN0YW5jZXM7DQogICAgICAgICANCglwcml2YXRlIGZ1bmN0aW9uIEdldE15TW9kdWxlUGF0aCgpDQoJew0KCQkkY29uZmlnID0gY21zbXMoKS0+Z2V0Q29uZmlnKCk7DQoJCWlmKHN0cnBvcyhwYXJlbnQ6OkdldE1vZHVsZVBhdGgoKSwgJGNvbmZpZ1sncm9vdF9wYXRoJ10pICE9PSBGQUxTRSkNCgkJCXJldHVybiBwYXJlbnQ6OkdldE1vZHVsZVBhdGgoKTsNCgkJZWxzZQ0KCQkJcmV0dXJuIGNtc19qb2luX3BhdGgoJGNvbmZpZ1sncm9vdF9wYXRoJ10sICdtb2R1bGVzJywgJHRoaXMtPmdldE5hbWUoKSk7DQoJfQ0KICANCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXV0b2xvYWQoKQ0KCXsNCgkJc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnYXV0b2xvYWRfY2xhc3NlcycpKTsNCgkJc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnYXV0b2xvYWRfY2xhc3Nlc19hZGRvbicpKTsNCgkJDQoJCS8vT24gbGlzdGUgbGVzIGNsYXNzZXMgZOljbGFy6WVzIGRhbnMgbGUgculwZXJ0b2lyZSBkdSBtb2R1bGUgZW5mYW50DQoJCSRyZXBlcnRvaXJlID0gY21zX2pvaW5fcGF0aCgkdGhpcy0+R2V0TXlNb2R1bGVQYXRoKCksJ2NsYXNzJyk7DQoJCSRkaXIgPSBvcGVuZGlyKCRyZXBlcnRvaXJlKTsgDQoJCXdoaWxlKCRmaWxlID0gcmVhZGRpcigkZGlyKSkgeyRsaXN0ZVtdID0gJGZpbGU7fQ0KCQljbG9zZWRpcigkZGlyKTsNCgkJDQoJCWZvcmVhY2goJGxpc3RlIGFzICRmaWxlKQ0KCQl7DQoJCQlpZigkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIiAmJiAhaXNfZGlyKCRmaWxlKSANCgkJCQkmJiBzdHJpcG9zKCRmaWxlLCAnY2xhc3MuJykgIT09IEZBTFNFDQoJCQkJJiYgc3RyaXBvcygkZmlsZSwgJ2NsYXNzLmFkZC4nKSA9PT0gRkFMU0UpDQoJCQl7DQoJCQkJVHJhY2U6OmRlYnVnKCJpbXBvcnQgY2xhc3MgZHUgbW9kdWxlICIuJHRoaXMtPmdldE5hbWUoKS4iOiAiLmNtc19qb2luX3BhdGgoJHJlcGVydG9pcmUsJGZpbGUpLiI8YnIvPiIpOw0KCQkJCXJlcXVpcmVfb25jZShjbXNfam9pbl9wYXRoKCRyZXBlcnRvaXJlLCRmaWxlKSk7DQoJCQl9IA0KCQl9DQoJfQ0KICANCglwdWJsaWMgZnVuY3Rpb24gYXV0b2xvYWRfY2xhc3NlcygkY2xhc3NuYW1lKXsNCgkgICBUcmFjZTo6ZGVidWcoIiZuYnNwOyZuYnNwOyZuYnNwOyBOZWVkICRjbGFzc25hbWU8YnIvPiIpOw0KCSAgICRtbW1mcyA9IG5ldyBNbW1mcygpOw0KCSAgICRwYXRoID0gJG1tbWZzLT5HZXRNeU1vZHVsZVBhdGgoKTsNCgkgICANCgkgICBpZihzdHJpcG9zKCRjbGFzc25hbWUsICJIVE1MX0ZJRUxEIikgIT09IEZBTFNFKQ0KCSAgIHsNCgkJCSRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsImNsYXNzIiwiY2xhc3MuZmllbGRodG1sLnBocCIpOw0KCSAgIH0gZWxzZSBpZihzdHJpcG9zKCRjbGFzc25hbWUsICJTRUFSQ0hfRklFTEQiKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5zZWFyY2hmaWVsZC5waHAiKTsNCgkgICB9IGVsc2UgaWYoc3RyaXBvcygkY2xhc3NuYW1lLCAiRklFTERfIikgIT09IEZBTFNFKQ0KCSAgIHsNCgkJCSRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsImNsYXNzIiwiY2xhc3MuZmllbGRzeXN0ZW0ucGhwIik7DQoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkZJTFRSRV8iKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5maWx0cmUucGhwIik7DQoJICAgfSBlbHNlDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy4iLnN0cnRvbG93ZXIoJGNsYXNzbmFtZSkuIi5waHAiKTsNCgkgICB9DQoJICAgDQoJICBUcmFjZTo6ZGVidWcoImltcG9ydCBjbGFzcyBkdSBmcmFtZXdvcmsgdmlhICIuJHRoaXMtPmdldE5hbWUoKS4iOiAkZm48YnIvPiIpOw0KCSAgIA0KCSAgIGlmKGZpbGVfZXhpc3RzKCRmbikpew0KCQkgIHJlcXVpcmVfb25jZSgkZm4pOw0KCSAgIH0NCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIGF1dG9sb2FkX2NsYXNzZXNfYWRkb24oJGNsYXNzbmFtZSl7DQoJCVRyYWNlOjpkZWJ1ZygiJm5ic3A7Jm5ic3A7Jm5ic3A7JGNsYXNzbmFtZTxici8+Iik7DQoJCQ0KCQkkcGF0aCA9ICR0aGlzLT5HZXRNeU1vZHVsZVBhdGgoKTsNCgkJDQoJCSRmbiA9IG51bGw7DQoJICAgaWYoc3RyaXBvcygkY2xhc3NuYW1lLCAiSFRNTF9GSUVMRCIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5maWVsZGh0bWwucGhwIik7DQoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIlNFQVJDSF9GSUVMRCIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5zZWFyY2hmaWVsZC5waHAiKTsNCgkgICB9IGVsc2UgaWYoc3RyaXBvcygkY2xhc3NuYW1lLCAiRklFTERfIikgIT09IEZBTFNFKQ0KCSAgIHsNCgkJCSRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsImNsYXNzIiwiY2xhc3MuYWRkLmZpZWxkc3N5c3RlbS5waHAiKTsNCgkgICB9IGVsc2UgaWYoc3RyaXBvcygkY2xhc3NuYW1lLCAiRklMVFJFXyIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5maWx0cmUucGhwIik7DQoJICAgfQ0KCSAgIA0KCSAgIGlmKCRmbiAhPSBudWxsKQ0KCSAgIHsNCgkJCVRyYWNlOjpkZWJ1ZyggImltcG9ydCBkJ3VuIGFkZG9uIGR1IHByb2pldCAiLiR0aGlzLT5nZXROYW1lKCkuIjogJGZuPGJyLz4iKTsNCgkgICANCgkJCWlmKGZpbGVfZXhpc3RzKCRmbikpew0KCQkJCXJlcXVpcmVfb25jZSgkZm4pOw0KCQkJfQ0KCQl9DQoJfQ0KCQ0KCWZ1bmN0aW9uIFNlYXJjaFJlaW5kZXgoJiRtb2R1bGUgPSBudWxsKQ0KCXsNCgkJLy9PbiDpdml0ZSBkZSBzJ2F1dG8taW5kZXhlci4NCgkJaWYoJHRoaXMtPmdldE5hbWUoKSA9PSAnTW1tZnMnKQ0KCQkJcmV0dXJuOwkJDQoJCQkNCgkJLy8gSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kdWxlKTsNCgkJSW5kZXhpbmc6OlNlYXJjaFJlaW5kZXgoJHRoaXMtPmdldE5hbWUoKSk7DQoJfQ0KCQ0KCS8qKg0KCSAqIEFwcGVs6WUgcGFyIFNlYXJjaCBwb3VyIGFmZmljaGVyIHVuIHLpc3VsdGF0DQoJICovDQoJZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0ciA9ICcnKQ0KICAgIHsJDQoJCS8vT24gbmUgcmV0b3VybmUgcmllbiBkZSBNbW1mcyBkZSB0b3V0ZSBtYW5p6HJlDQoJCWlmKCR0aGlzLT5nZXROYW1lKCkgPT0gJ01tbWZzJykNCgkJCXJldHVybjsJDQoJCQ0KCQlyZXR1cm4gSW5kZXhpbmc6OlNlYXJjaFJlc3VsdCgkdGhpcywgJGlkLCAkcmV0dXJuaWQsICRlbnRpdHlJZCwgJGF0dHIpOw0KICAgIH0NCiAgDQogIGZ1bmN0aW9uIEdldE5hbWUoKQ0KICB7DQogICAgcmV0dXJuICdNbW1mcyc7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQ0KICB7DQogICAgcmV0dXJuICdNYWtlIE15IE1vZHVsZSBGcm9tIFNjcmF0Y2gnOw0KICB9DQogIA0KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkNCiAgew0KICAgIHJldHVybiAiMS4yLjAiOw0KICB9DQogDQogIGZ1bmN0aW9uIEdldEhlbHAoKQ0KICB7DQogICAgcmV0dXJuICI8dWw+PGxpPnByb29mIG9mIGNvbmNlcHQgOiA8YSBocmVmPSdodHRwOi8vbW1tZnMuZnVyaWUuYmUvJyB0YXJnZXQ9J19ibGFuayc+aHR0cDovL21tbWZzLmZ1cmllLmJlLzwvYT48L2xpPg0KCQkJCTxsaT53aWtpIDogPGEgaHJlZj0naHR0cDovL3d3dy5mdXJpZS5iZS93aWtpLycgdGFyZ2V0PSdfYmxhbmsnPmh0dHA6Ly93d3cuZnVyaWUuYmUvd2lraS88L2E+PC9saT48L3VsPiI7DQogIH0NCiAgDQogIGZ1bmN0aW9uIEdldEF1dGhvcigpDQogIHsNCiAgICByZXR1cm4gJ0tldmluIERhbmV6aXMgKGFrYSBCZXNzKSc7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpDQogIHsNCiAgICByZXR1cm4gJ2NvbnRhY3RAZnVyaWUuYmUnOw0KICB9DQogIA0KICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQ0KICB7DQogICAgcmV0dXJuICI8cD5zZWUgY2hhbmdlbG9nIDogPGEgaHJlZj0naHR0cDovL3d3dy5mdXJpZS5iZS93aWtpLycgdGFyZ2V0PSdfYmxhbmsnPmh0dHA6Ly93d3cuZnVyaWUuYmUvd2lraS88L2E+PC9wPiI7DQogIH0NCiAgDQogIA0KICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkNCiAgew0KICAgIHJldHVybiAiTi9BIjsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpDQogIHsNCiAgICByZXR1cm4gYXJyYXkoKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkNCiAgew0KICAgIHJldHVybiAiMS4xMC4wIjsNCiAgfQ0KDQogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpDQogIHsNCiAgICByZXR1cm4gJ2RvbmUgOiknOw0KICB9DQoNCiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICdkb25lIDopJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICdyZWFsbHkgPyc7DQogIH0gIA0KfSANCj8+DQo=]]></data>
	</file>
</module>
