<?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>Orm</name>
	<version>0.1.0</version>
  <mincmsversion>1.11.0</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5tb3JlIGluZm9ybWF0aW9ucyBvbiA6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tczwvYT48L3A+DQo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtJmVncmF2ZTt0cmUgdXRpbGlzJmVhY3V0ZTsgcG91ciBzcCZlYWN1dGU7Y2lmaWVyIGRhbnMgcXVlbGxlIGxhbmd1ZSBhZmZpY2hlciBsZSBtb2R1bGUgZGFucyBsYSBwYXJ0aWUgcHVibGlxdWUuIENlIHBhcmFtJmVncmF2ZTt0cmUgbiYjMDM5O2VzdCBwYXMgc3VwcG9ydCZlYWN1dGU7IG91IHV0aWxlIHBvdXIgdG91cyBsZXMgbW9kdWxlcy48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBLZXZpbiBEYW5lemlzIChha2EgQmVzcykgJmx0O2NvbnRhY3QgYXQgZnVyaWUgcG9pbnQgYmUmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC4xLjA8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz5zZWUgY2hhbmdlbG9nIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjxiciAvPg==]]></about>
	<description><![CDATA[This module implements a small ORM layer for other modules]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_save.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCmlmIChpc3NldCgkcGFyYW1zWydkZWxldGUnXSkpew0KCXVubGluayhPcm1UUkFDRTo6Z2V0TG9nRmlsZSgpKTsNCglPcm1UcmFjZTo6aW5mbygiUmVpbml0aWF0ZSB0aGUgbG9nIGZpbGUiKTsNCn0gZWxzZSBpZiAoaXNzZXQoJHBhcmFtc1snbGV2ZWwnXSkgJiYgJHBhcmFtc1snbGV2ZWwnXSA+PSBPcm1UUkFDRTo6JERFQlVHICYmICRwYXJhbXNbJ2xldmVsJ10gPD0gT3JtVFJBQ0U6OiRFUlJPUil7DQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2xldmVsJywgJHBhcmFtc1snbGV2ZWwnXSk7DQp9DQoNCiR0aGlzLT5yZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicpOw0KDQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCiRjdXJyZW50TGV2ZWwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnKTsNCiRpdGVtcyA9IGFycmF5KCJERUJVRyI9Pk9ybVRSQUNFOjokREVCVUcsICJJTkZPIj0+T3JtVFJBQ0U6OiRJTkZPLCJXQVJOIj0+T3JtVFJBQ0U6OiRXQVJOLCJFUlJPUiI9Pk9ybVRSQUNFOjokRVJST1IpOw0KDQokc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7DQokc21hcnR5LT5hc3NpZ24oImZvcm1zdGFydCIsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZG1pbl9zYXZlJykpOw0KJHNtYXJ0eS0+YXNzaWduKCJzdWJtaXQiLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywgJ1NhdmUgUHJlZnMnKSk7DQokc21hcnR5LT5hc3NpZ24oImRlbGV0ZSIsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWxldGUnLCAnQ2xlYW4gTG9ncycpKTsNCiRzbWFydHktPmFzc2lnbigic2VsZWN0IiwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24gKCRpZCwgJ2xldmVsJywgJGl0ZW1zLCAtMSwgJGN1cnJlbnRMZXZlbCkpOw0KDQokc21hcnR5LT5hc3NpZ24oInVybExvZyIsIE9ybVRSQUNFOjpnZXRMb2dVcmwoKSk7DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW4udHBsJyk7DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdTaW1wbGUgT3JtJzsNCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJyc7DQokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsZSB1bmluc3RhbGxlZCwgYnllICEiJzsNCiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5PyBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgZmluZSBtb2R1bGU/JzsNCiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOw0KJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOw0KJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIHNtYWxsIE9STSBsYXllciBmb3Igb3RoZXIgbW9kdWxlcyc7DQokbGFuZ1snY2hhbmdlbG9nJ10gPSAnc2VlIGNoYW5nZWxvZyA6IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tcyIgdGFyZ2V0PSJfYmxhbmsiPmh0dHBzOi8vZ2l0aHViLmNvbS9iZXNzdGlvbGxlL29ybS1tczwvYT4nOw0KJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4NCjxwPm1vcmUgaW5mb3JtYXRpb25zIG9uIDogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2Jlc3N0aW9sbGUvb3JtLW1zPC9hPjwvcD4NCic7DQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.iormsortable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGludGVyZmFjZSBJT3JtU29ydGFibGUgd2hpY2ggYWxsb3cgdG8gc29ydCByZXN1bHRzIGZvciBhbiBlbnRpdHkNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEludGVyZmFjZSB3aWNoIGFsbG93IHRvIHNvcnQgcmVzdWx0cyBmb3IgYW4gZW50aXR5DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KaW50ZXJmYWNlIElPcm1Tb3J0YWJsZQ0Kew0KCQ0KICAgIC8qKg0KICAgICogRnVuY3Rpb24gd2hpY2ggY29tcGFyZSB0d28gZW50aXRpZXMgaW4gcGFyYW1ldGVycw0KICAgICogDQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgdGhlIGZpcnN0IGVudGl0eSB3aXRoIGFsbCB2YWx1ZXMgc2V0dGVkDQogICAgKiBAcGFyYW0gRW50aXR5IHRoZSBzZWNvbmQgZW50aXR5IHdpdGggYWxsIHZhbHVlcyBzZXR0ZWQNCgkqDQogICAgKiBAcmV0dXJuIEludGVnZXIgOiAwIGlmIGVxdWFscywgMSBpZiB0aGUgZmlyc3QgZW50aXR5IGlzIHN1cGVyaW9yLCBlbHNlIC0xDQogICAgKiANCiAgICAqIEBzZWUgRW50aXR5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmVUbyhFbnRpdHkgJGVudGl0eTEsIEVudGl0eSAkZW50aXR5Mik7DQp9DQoNCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.myautoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGF1dG9sb2FkIHN5c3RlbSB0aGF0IHdpbGwgbWVtb3JpemUgYWxsIHRoZSBlbnRpdGllcyB1c2VkIGJ5IGFsbCB0aGUgbW9kdWxlcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCiAvKioNCiAqIFN0YXRpYyBDbGFzcyBtYW5hZ2luZyBlbnRpdGllcyB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbg0KICoJVGhlIG1haW4gdXNlIGlzIHRvIG5vdCByZWRlY2xhcmF0ZSBYIGluc3RhbmNlcyBvZiBzYW1lIGNsYXNzZXMgaWYgaXQncyBub3QgbmVjZXNzYXJ5Lg0KICogQWxsIG1vZHVsZXMgaGF2ZSB0aGVpciBvd24gbmFtZXNwYWNlIHRvIGF2b2lkIHNoYXJpbmcgZW50aXRpZXMgYmV0d2VlbiB0d28gbW9kdWxlcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCmZpbmFsIGNsYXNzIE15QXV0b2xvYWQNCnsNCglwcml2YXRlIHN0YXRpYyAkaW5zdGFuY2VzOw0KCQ0KCS8qKg0KCSAqIFByaXZhdGUgY29uc3RydWN0b3INCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXt9CQ0KCQ0KCS8qKg0KCSAqIEZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgZW50aXRpZXMgdGhlbXNlbGYgZHVyaW5nIHRoZWlyIF9jb25zdHJ1Y3QoKSBmdW5jdGlvbg0KCSAqIGl0IHdpbGwgc3RvY2sgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAoaWYgbm90IGFscmVhZHkgZXhpc3RpbmcpIGluIGhpcyBtZW1vcnkNCiAgICAgKiANCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlDQoJICogQHBhcmFtIHN0cmluZyBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQoJICovDQoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBhZGRJbnN0YW5jZSgkbmFtZXNwYWNlLCBPcm1FbnRpdHkgJGluc3RhbmNlKQ0KCXsJDQoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOw0KCQkkbmFtZSA9ICRpbnN0YW5jZS0+Z2V0TmFtZSgpOw0KCQkkbmFtZSA9IHN0cnRvbG93ZXIoJG5hbWUpOw0KCQkJCQ0KCQlpZihpc3NldChzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdWyRuYW1lXSkpDQoJCXsNCgkJCU9ybVRyYWNlOjpkZWJ1ZygiSW5zdGFuY2UgIi4kbmFtZS4iIGFscmVhZHkgaW4gbWVtb3J5LiIpOw0KCQkJcmV0dXJuOw0KCQl9DQoJCU9ybVRyYWNlOjpkZWJ1ZygiQWRkaW5nIHRoZSBpbnN0YW5jZSAiLiRuYW1lLiIgaW50byB0aGUgbmFtZXNwYWNlICIuJG5hbWVzcGFjZSk7DQoJCXNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV1bJG5hbWVdID0gJGluc3RhbmNlOw0KCX0NCgkNCgkvKioNCgkgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugb2YgZW50aXR5IGZyb20gdGhlIG1lbW9yeS4gRWFjaCBpbnN0YW5jZSBpcyBhIGNsb25lIHRvIGF2b2lkIHVzaW5nDQoJICogdGhlIHNhbWUgb2JqZWN0IA0KICAgICAqIA0KCSAqIEBwYXJhbSBuYW1lc3BhY2UgbmFtZXNwYWNlIG9mIHRoZSBlbnRpdHkncyBtb2R1bGUNCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIGVudGl0eQ0KCSAqLw0KCXB1YmxpYyBmaW5hbCBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoJG5hbWVzcGFjZSwgJGluc3RhbmNlTmFtZSkNCgl7DQoJCSRuYW1lc3BhY2UgPSBzdHJ0b2xvd2VyKCRuYW1lc3BhY2UpOw0KCQkkaW5zdGFuY2VOYW1lID0gc3RydG9sb3dlcigkaW5zdGFuY2VOYW1lKTsNCgkJbXlBdXRvbG9hZDo6aXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSk7DQoJCQ0KCQlUcmFjZTo6ZGVidWcoIkFza2luZyBhbiBpbnN0YW5jZSBvZiAiLiRpbnN0YW5jZU5hbWUuICIgZm9yIG5hbWVzcGFjZSAiLiRuYW1lc3BhY2UpOw0KCQlpZihteUF1dG9sb2FkOjpoYXNJbnN0YW5jZSgkbmFtZXNwYWNlLCAkaW5zdGFuY2VOYW1lKSkNCgkJew0KCQkJVHJhY2U6OmRlYnVnKCJJbnN0YW5jZSAiLiRpbnN0YW5jZU5hbWUuIiByZXR1cm5lZC4iKTsNCgkJCXJldHVybiBjbG9uZSBzZWxmOjokaW5zdGFuY2VzWyRuYW1lc3BhY2VdWyRpbnN0YW5jZU5hbWVdOw0KCQl9DQoJCQ0KCQlUcmFjZTo6ZXJyb3IoIk5vIGluc3RhbmNlICRpbnN0YW5jZU5hbWUgZm91bmQgaW4gbWVtb3J5IGZvciBuYW1lc3BhY2UgIi4kbmFtZXNwYWNlKTsNCgkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm8gaW5zdGFuY2UgJGluc3RhbmNlTmFtZSBmb3VuZCBpbiBtZW1vcnkgZm9yIG5hbWVzcGFjZSAiLiRuYW1lc3BhY2UpOw0KCX0NCgkNCgkvKioNCgkgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgaW5zdGFuY2UgZXhpc3RzIGluIHRoZSBtZW1vcnkgZm9yIHRoZSBzYW1lIG5hbWVzcGFjZQ0KICAgICAqIA0KCSAqIEBwYXJhbSBuYW1lc3BhY2UgbmFtZXNwYWNlIG9mIHRoZSBlbnRpdHkncyBtb2R1bGUNCgkgKiBAcGFyYW0gc3RyaW5nIGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCgkgKg0KCSAqIEByZXR1cm4gQm9vbGVhbiBpZiB0aGUgaW5zdGFuY2UgZXhpc3RzDQoJICovDQoJcHVibGljIGZpbmFsIHN0YXRpYyBmdW5jdGlvbiBoYXNJbnN0YW5jZSgkbmFtZXNwYWNlLCAkaW5zdGFuY2VOYW1lKXsNCgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7DQoJCSRpbnN0YW5jZU5hbWUgPSBzdHJ0b2xvd2VyKCRpbnN0YW5jZU5hbWUpOw0KCQkNCgkJbXlBdXRvbG9hZDo6aXNWYWxpZGVOYW1lc3BhY2UoJG5hbWVzcGFjZSk7DQoJCQ0KCQlyZXR1cm4gaXNzZXQoc2VsZjo6JGluc3RhbmNlc1skbmFtZXNwYWNlXVskaW5zdGFuY2VOYW1lXSk7DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldHVybiBhbGwgdGhlIGluc3RhbmNlcyBvZiBhbGwgdGhlIGVudGl0aWVzIGZyb20gYSBzaW5nbGUgbmFtZXNwYWNlDQogICAgICogDQoJICogQHBhcmFtIG5hbWVzcGFjZSBuYW1lc3BhY2Ugb2YgdGhlIGVudGl0eSdzIG1vZHVsZQ0KCSAqIEBwYXJhbSBzdHJpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KCSAqDQoJICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGFuIGFycmF5IG9mIGFsbCB0aGUgZW50aXRpZXMNCgkgKi8NCglwdWJsaWMgZmluYWwgc3RhdGljIGZ1bmN0aW9uIGdldEFsbEluc3RhbmNlcygkbmFtZXNwYWNlKQ0KCXsNCgkJJG5hbWVzcGFjZSA9IHN0cnRvbG93ZXIoJG5hbWVzcGFjZSk7DQoJCW15QXV0b2xvYWQ6OmlzVmFsaWRlTmFtZXNwYWNlKCRuYW1lc3BhY2UpOw0KCQkNCgkJcmV0dXJuIHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV07DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldG91cm5lIHRydWUgaWYgdGhlIG5hbWVzcGFjZSBpcyBrbm93biBpbiBtZW1vcnkNCiAgICAgKiANCgkgKiBAcGFyYW0gbmFtZXNwYWNlIG5hbWVzcGFjZSBvZiB0aGUgZW50aXR5J3MgbW9kdWxlDQoJICoNCgkgKiBAcmV0dXJuIEJvb2xlYW4gaWYgdGhlIG5hbWVzcGFjZSBleGlzdHMNCgkgKi8NCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc1ZhbGlkZU5hbWVzcGFjZSgkbmFtZXNwYWNlKQ0KCXsNCgkJaWYoIWlzc2V0KHNlbGY6OiRpbnN0YW5jZXNbJG5hbWVzcGFjZV0pKQ0KCQl7DQoJCQlUcmFjZTo6ZXJyb3IoIlRoZSBuYW1lc3BhY2UgJyRuYW1lc3BhY2UnIGRvZXNuJ3QgZXhpc3RlIGludG8gdGhlIE9ybSBTeXN0ZW0iKTsNCgkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBuYW1lc3BhY2UgJyRuYW1lc3BhY2UnIGRvZXNuJ3QgZXhpc3RlIGludG8gdGhlIE9ybSBTeXN0ZW0iKTsNCgkJfQ0KCX0NCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpY2ggcHJvdmlkZSBhIG1pbmkgY2FjaGluZyBzeXN0ZW0gb2YgT3JtIHRvIGF2b2lkIG11bHRpcGxlcyBzcWwgcmVxdWVzdHMNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCg0KLyoqDQogKg0KICogIFN0YXRpYyBjbGFzc2UgdXNlZCB0byBwcm92aWRlIGEgdmVyeSBzaW1wbGUgY2FjaGluZyBzeXN0ZW0uIFlvdSBjYW4gcHVzaCB0aGUgcmVzdWx0IG9mIGEgcmVxdWVzdCBpbnRvIGl0IGFuZCBhc2tpbmcgbGF0ZXINCiAqCXRvIGNvbGxlY3QgdGhlIHJlc3VsdC4NCiAqDQogKiAgRXhhbXBsZSA6IA0KICogIDxjb2RlPg0KICogIAkvL0NhbGwgdG8gY21zbXMgdG8gZ2V0IHRoZSBkYXRhYmFzZSBjb25uZWN0b3INCiAqICAJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCiAqICAJDQogKiAgCS8vRGVmaW5lcyBhIG5ldyBDdXN0b21lciBlbnRpdHkNCiAqICAJJGVudGl0eSA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCdteU1vZHVsZScsICdjdXN0b21lcicpOw0KICogIAkNCiAqICAJLy9TZWxlY3QgYWxsIEN1c3RvbWVycw0KICogIAkkcXVlcnlTZWxlY3QgPSAnU2VsZWN0ICogRlJPTSAnLiRlbnRpdHktPmdldERibmFtZSgpOw0KICogIAkNCiAqICAJLy9JZiB0aGUgY2FjaGluZyBzeXN0ZW0gYWxyZWFkeSBrbm93IHRoZSBhbnN3ZXIgOiB3ZSByZXR1cm4gdGhlIHJlc3VsdCBpbW1lZGlhdGVseQ0KICogIAlpZihPcm1DYWNoZTo6aXNDYWNoZSgkcXVlcnlTZWxlY3QpKQ0KICogIAl7DQogKiAgCQlyZXR1cm4gT3JtQ2FjaGU6OmdldENhY2hlKCRxdWVyeVNlbGVjdCk7DQogKiAgCX0NCiAqICAJDQogKiAgCS8vU28gd2UgbmVlZCB0byBleGVjdXRlIHRoZSBxdWVyeQ0KICogIAkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVNlbGVjdCk7DQogKiAgCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciEiKTt9DQogKiAgCQ0KICogIAkkZW50aXR5cyA9IGFycmF5KCk7DQogKiAgCXdoaWxlICgkcm93ID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkNCiAqICAJew0KICogIAkJJGVudGl0eXNbXSA9IE9ybUNvcmU6OnJvd1RvRW50aXR5KCRlbnRpdHksICRyb3cpOw0KICogIAl9DQogKiAgCQ0KICogIAkvL0Rvbid0IGZvcmdldCB0byBwdXNoIHRoZSByZXN1bHQgaW50byB0aGUgY2FjaGluZyBzeXN0ZW0gZm9yIHRoZSBuZXh0IGNhbGwNCiAqICAJT3JtQ2FjaGU6OnNldENhY2hlKCRxdWVyeVNlbGVjdCwgbnVsbCwgJGVudGl0eXMpOw0KIA0KICogIAlyZXR1cm4gJGVudGl0eXM7DQogKgk8L2NvZGU+DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KLypmaW5hbCovIGNsYXNzIE9ybUNhY2hlDQp7CQ0KCS8qKg0KCSAqIENvbnRhaW5zIGFsbCB0aGUgcmVzdWx0IGZvciB0aGUgcGFzdCByZXF1ZXRlcw0KCSAqKi8NCglwcml2YXRlIHN0YXRpYyAkY2FjaGU7DQoJCQ0KCS8qKg0KCSAqIFByaXZhdGUgY29uc3RydWN0b3INCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQ0KCQkJDQoJLyoqDQoJICoJU2V0IHRoZSBjYWNoZSBmb3IgYSBzcWwgcmVxdWVzdCwgaXRzIHBhcmFtZXRlcnMgYW5kIG9mIGNvdXJzZSB0aGUgcmVzdWx0DQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKiBAcGFyYW0gb2JqZWN0IHRoZSByZXN1bHQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHNldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsLCAkdmFsdWUpDQoJewkJDQoJCWlmKCFpc3NldChzZWxmOjokY2FjaGUpKQ0KCQl7DQoJCQlzZWxmOjokY2FjaGUgPSBhcnJheSgpOw0KCQl9DQoJCQ0KCQlzZWxmOjokY2FjaGVbT3JtQ2FjaGU6Omhhc2goJHNxbCwkcGFyYW1zKV0gPSAkdmFsdWU7DQoJCQ0KCX0NCgkNCgkvKioNCgkgKiBRdWVyeWluZyB0aGUgY2FjaGUgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKg0KCSAqIEByZXR1cm4gb2JqZWN0IHRoZSByZXN1bHQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldENhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKQ0KCXsNCgkJaWYoT3JtQ2FjaGU6OmlzQ2FjaGUoJHNxbCwgJHBhcmFtcykpDQoJCXsNCgkJCXJldHVybiBzZWxmOjokY2FjaGVbT3JtQ2FjaGU6Omhhc2goJHNxbCwkcGFyYW1zKV07DQoJCX0NCgkJDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIFJldHVybiB0cnVlIGlmIGEgY2FjaGUgZXhpc3QgZm9yIGEgc3FsIHJlcXVlc3QgYW5kIGl0cyBwYXJhbWV0ZXJzDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKg0KCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHRoZSBjYWNoZSBleGlzdHMNCgkgKi8JDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBpc0NhY2hlKCRzcWwsICRwYXJhbXMgPSBudWxsKQ0KCXsNCgkJcmV0dXJuIGlzc2V0KHNlbGY6OiRjYWNoZSkgJiYgYXJyYXlfS0VZX2V4aXN0cyhPcm1DYWNoZTo6aGFzaCgkc3FsLCRwYXJhbXMpLHNlbGY6OiRjYWNoZSk7DQoJfQ0KDQoJLyoqDQoJICogRW1wdHkgdGhlIGNhY2hlLiBWZXJ5IGltcG9ydGFudCBpZiBiZXR3ZWVuIDIgcXVlcmluZywgdGhlIHN5c3RlbSBtYXkgaW5zZXJ0L2RlbGV0ZS91cGRhdGUgc29tZSBkYXRhIGluIHRoZSBkYXRhYmFzZQ0KCSAqICBJbiB0aGUgT3JtIHN5c3RlbSwgd2UgYWx3YXlzIGRyb3AgdGhlIGNhY2hlIGluIHRoZSBpbnNlcnQvZGVsZXRlL3VwZGF0ZSBmdW5jdGlvbi4NCgkgKi8JDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjbGVhckNhY2hlKCkNCgl7DQoJCXNlbGY6OiRjYWNoZT1udWxsOw0KCX0NCg0KCS8qKg0KCSAqIFJldHVybiBhIHVuaXF1ZSBoYXNoIGZvciBhIHNxbCByZXF1ZXN0IGFuZCBpdHMgcGFyYW1ldGVycw0KCSAqICB0aGlzIGhhc2ggaXMgdXNlZCB0byBEZWZpbmVzIGEgdW5pcXVlIGVudHJ5IGludG8gdGhlIGNhY2hlDQogICAgICogDQoJICogQHBhcmFtIHN0cmluZyB0aGUgc3FsIHF1ZXJ5DQoJICogQHBhcmFtIGFycmF5IHRoZSBwYXJhbWV0ZXJzIGludG8gYSBhcnJheS4gTWF5IGJlIG51bGwNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIHRoZSBoYXNoDQoJICovCQ0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gaGFzaCgkc3FsLCAkcGFyYW1zID0gbnVsbCkNCgl7DQoJCWlmKCRwYXJhbXMgPT0gbnVsbCkNCgkJe3JldHVybiBtZDUoJHNxbCk7fQ0KCQkNCgkJJHAgPSBwcmludF9yKCRwYXJhbXMsIHRydWUpOw0KDQoJCXJldHVybiBtZDUoJHNxbC4kcCk7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcast.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgdHlwZSBmb3IgdGhlIGZpZWxkIGludG8gZGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCg0KLyoqDQogKiBDbGFzcyBEZWZpbmVzIHRoZSB0eXBlIG9mIHRoZSBmaWVsZCwgaW4gZW50aXR5IGJ1dCBhbHNvIGluIGRhdGFiYXNlDQogKiANCiAqICBPcm1DQVNUOjokU1RSSU5HIGEgc2ltcGxlIHN0cmluZw0KICogIE9ybUNBU1Q6OiRJTlRFR0VSIGFuIGludGVnZXINCiAqICBPcm1DQVNUOjokREFURSBhIGZpZWxkIGRhdGUNCiAqICBPcm1DQVNUOjokVElNRSBhIGZpZWxkIHRpbWUNCiAqICBPcm1DQVNUOjokVFMgYSBmaWVsZCB0aW1lc3RhbXANCiAqICBPcm1DQVNUOjokQlVGRkVSIGEgZmllbGQgd2l0aCBubyBsaW1pdCBvZiBzaXplIChleGNlcHQgdGhlIG15c3FsIG5hdHVyYWwgbGltaXQpDQogKiAgT3JtQ0FTVDo6JE5VTUVSSUMgYSBmaWVsZCBmb3IgYSByZWFsIG51bWJlciAoZWcgOiB3aXRoIGNvbWEpDQogKiAgT3JtQ0FTVDo6JE5PTkUgYSBUcmFuc2lhbnQgZmllbGQgOiB3b24ndCBiZSBwZXJzaXN0IGludG8gZGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtQ0FTVA0Kew0KCXB1YmxpYyBzdGF0aWMgJFNUUklORyA9IDA7DQoJcHVibGljIHN0YXRpYyAkSU5URUdFUiA9IDE7DQoJcHVibGljIHN0YXRpYyAkREFURSA9IDI7DQoJcHVibGljIHN0YXRpYyAkQlVGRkVSID0gMzsNCglwdWJsaWMgc3RhdGljICROVU1FUklDID0gNDsNCglwdWJsaWMgc3RhdGljICRUSU1FID0gNTsNCglwdWJsaWMgc3RhdGljICRUUyA9IDY7DQoJcHVibGljIHN0YXRpYyAkREFURVRJTUUgPSA3Ow0KCXB1YmxpYyBzdGF0aWMgJFVVSUQgPSA4Ow0KCQ0KCXB1YmxpYyBzdGF0aWMgJE5PTkUgPSA5OTsNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUNvcmUNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KIA0KLyoqDQogKiBNYWluIHBhcnQgb2YgdGhlIGludGVyZmFjZSBiZXR3ZWVuIENtc21hZGVzaW1wbGUgbmF0aXZlcyBmdW5jdGlvbiBhbmQgdGhlIG5lY2Vzc2l0eSBmb3IgdGhlIE9ybSBmdW5jdGlvbnMNCiAqICAgDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtQ29yZQ0KeyAgDQogICAgLyoqDQogICAgKiBQcm90ZWN0ZWQgY29uc3RydWN0b3INCiAgICAqICAgICANCiAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9DQogICAgICANCiAgICAvKioNCiAgICAqIHRyYW5zZm9ybXMgdGhlIGVudGl0eSdzIHN0cnVjdHVyZSBpbnRvIGFkb2RiIGluZm9ybWF0aW9ucyANCiAgICAqICAgICAgICAgDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IHRoZSBlbnRpdHkNCiAgICAqIEByZXR1cm4gdGhlIGFkb2RiIGluZm9ybWF0aW9ucw0KICAgICovDQoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2V0RmllbGRzVG9IcWwoT3JtRW50aXR5ICYkZW50aXR5KSB7ICAgIA0KCQkkaHFsID0gJyc7DQoNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5LT5nZXRGaWVsZHMoKTsNCg0KCQkvL0ZvciBlYWNoIEZpZWxkIGNvbnRhaW5lZCBpbiB0aGUgZW50aXR5DQoJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKSB7DQoJCQkvL1dlIGRvbid0IGNyZWF0ZSB0aGUgRmllbGQgd2hpY2ggYXJlIGxpbmtzIGV4dGVybmFscyBvbiBhc3NvY2lhdGl2ZSB0YWJsZXMNCgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgew0KCQkJCWNvbnRpbnVlOw0KCQkJfQkNCgkJCQ0KCQkJLy9XZSBkb24ndCBjcmVhdGUgdGhlIHRyYW5zaWVudCBGaWVsZHMgDQoJCQlpZigkZmllbGQtPmdldFR5cGUoKSA9PSBPcm1DQVNUOjokTk9ORSkgew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KDQoJCQlpZighZW1wdHkoJGhxbCkpIHsNCgkJCQkkaHFsIC49ICcgLCAnOw0KCQkJfQ0KDQoJCQkkaHFsIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nICc7DQoNCgkJCXN3aXRjaCgkZmllbGQtPmdldFR5cGUoKSkgew0KCQkJCWNhc2UgT3JtQ0FTVDo6JFNUUklORyA6IA0KCQkJCQkkaHFsIC49ICdDJzsgDQoJCQkJCWlmKCRmaWVsZC0+Z2V0U2l6ZSgpICE9ICIiICkgeyRocWwuPSAiICgiLiRmaWVsZC0+Z2V0U2l6ZSgpLiIpICI7fSANCgkJCQkJYnJlYWs7DQoNCgkJCQljYXNlIE9ybUNBU1Q6OiRJTlRFR0VSIDogDQoJCQkJCSRocWwgLj0gJ0knOyANCgkJCQkJaWYoJGZpZWxkLT5nZXRTaXplKCkgIT0gIiIgKSB7JGhxbC49ICIgKCIuJGZpZWxkLT5nZXRTaXplKCkuIikgIjt9IA0KCQkJCQlicmVhazsNCg0KCQkJCWNhc2UgT3JtQ0FTVDo6JE5VTUVSSUMgOiANCgkJCQkJJGhxbCAuPSAnTic7IA0KCQkJCQlpZigkZmllbGQtPmdldFNpemUoKSAhPSAiIiApDQoJCQkJCXskaHFsLj0gIiAoIi4kZmllbGQtPmdldFNpemUoKS4iKSAiO30gDQoJCQkJCWJyZWFrOw0KDQoJCQkJY2FzZSBPcm1DQVNUOjokQlVGRkVSIDogJGhxbCAuPSAnWCc7IGJyZWFrOw0KDQoJCQkJY2FzZSBPcm1DQVNUOjokREFURSA6ICRocWwgLj0gJ0QnOyBicmVhazsNCg0KCQkJCWNhc2UgT3JtQ0FTVDo6JFRJTUUgOiAkaHFsIC49ICdUJzsgYnJlYWs7ICAgDQoNCgkJCQljYXNlIE9ybUNBU1Q6OiRVVUlEIDogJGhxbCAuPSAnQyAoMzYpICc7IGJyZWFrOyAgIA0KDQoJCQkJY2FzZSBPcm1DQVNUOjokVFMgOiAkaHFsIC49ICdJICgxMCkgJzsgYnJlYWs7IC8vd29ya2Fyb3VuZCBmb3IgdGhlIHJlYWwgdGltZXN0YW1wIG1pc3NpbmcgaW4gQURPREJMSVRFDQoNCgkJCQljYXNlIE9ybUNBU1Q6OiREQVRFVElNRSA6ICRocWwgLj0gQ01TX0FET0RCX0RUOyBicmVhazsgICANCgkJCX0NCgkJCQ0KCQkJLy9NYW5hZ2UgdGhlIGRlZmF1bHQgdmFsdWUNCgkJCWlmKCRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCkgIT0gbnVsbCl7DQoJCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JFNUUklORyB8fCAkZmllbGQtPmdldFR5cGUoKSA9PSBPcm1DQVNUOjokQlVGRkVSKSB7DQoJCQkJCSRocWwgLj0gIiAgREVGQVVMVCAnIi5zdHJfcmVwbGFjZSgiJyIsICInJyIsJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKSkuIicgIjsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaHFsIC49ICIgIERFRkFVTFQgIi4kZmllbGQtPmdldERlZmF1bHRWYWx1ZSgpLiIgIjsNCgkJCQl9DQoJCQkJDQoJCQl9DQoNCgkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpDQoJCQl7DQoJCQkJaWYoJGVudGl0eS0+aXNBdXRvaW5jcmVtZW50KCkpIHsNCgkJCQkJJGhxbCAuPSAnIEtFWSBBVVRPJzsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkaHFsIC49ICcgS0VZICc7DQoJCQkJfQ0KCQkJfQ0KCQkJCQ0KCQl9DQoJDQoJCU9ybVRyYWNlOjppbmZvKCRocWwpOw0KDQoJCXJldHVybiAkaHFsOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIENyZWF0ZSBhIHRhYmxlIGludG8gRGF0YWJhc2UgZnJvbSB0aGUgc3RydWN0dXJlIG9mIGFuIE9ybUVudGl0eQ0KICAgICogIFdpbGwgYWxzbyBjcmVhdGUgdGhlIHNlcXVlbmNlIGlmIGl0J3MgbmVlZGVkDQogICAgKiAgDQogICAgKiAgIGV4YW1wbGUgd2l0aCBhIEN1c3RvbWVyIGVudGl0eSA6IA0KICAgICogPGNvZGU+DQogICAgKiANCiAgICAqIGNsYXNzIEN1c3RvbWVyIGV4dGVuZHMgT3JtRW50aXR5DQogICAgKiB7DQogICAgKiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICAgICogICAgew0KICAgICogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiAgICAgICAgDQogICAgKiAgICAgICAgJHRoaXMtPmFkZChuZXcgT3JtRmllbGQoJ2N1c3RvbWVyX2lkJyAgDQoJKgkJCSwgT3JtQ0FTVDo6JElOVEVHRVINCgkqCQkJLCBudWxsDQoJKgkJCSwgbnVsbA0KCSoJCQksIE9ybUtFWTo6JFBLIA0KCSoJCQkpKTsNCiAgICAqIA0KICAgICogICAgICAgICR0aGlzLT5hZGQobmV3IE9ybUZpZWxkKCduYW1lJw0KICAgICogICAgICAgIAksIE9ybUNBU1Q6OiRTVFJJTkcgDQogICAgKiAgICAgICAgCSwgMzINCiAgICAqICAgICAgICAJKSk7DQogICAgKiANCiAgICAqICAgICAgICAkdGhpcy0+YWRkKG5ldyBPcm1GaWVsZCgnbGFzdG5hbWUnDQogICAgKiAgICAgICAgCSwgT3JtQ0FTVDo6JFNUUklORw0KICAgICogICAgICAgIAksIDMyDQoJKgkJCSwgdHJ1ZSAgLy8gSXMgbnVsbGFibGUNCiAgICAqICAgICAgICAJKSk7DQogICAgKiAgICB9DQogICAgKiB9DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBUaGUgYmVzdCB3YXkgdG8gY3JlYXRlIGl0cyB0YWJsZSBpbnRvIHRoZSBkYXRhYmFzZSA6IA0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgKiAgIE9ybUNvcmU6OmNyZWF0ZVRhYmxlKCRjdXN0b21lcik7DQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICBUaGUgZnVuY3Rpb24gd2lsbCBhbHNvIHRyeSB0byBwb3B1bGF0ZSB0aGUgdGFibGUgd2l0aCBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGluaXRUYWJsZSgpIGlmIGl0J3MgZGVmaW5lIGludG8gdGhlIGVudGl0eSBjbGFzcy4NCiAgICAqIA0KCSogQHBhcmFtIE9ybSB0aGUgbW9kdWxlIHdoaWNoIGV4dGVuZHMgdGhlIE9ybSBtb2R1bGUNCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjcmVhdGVUYWJsZShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgew0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQkkdGFib3B0YXJyYXkgPSBhcnJheSggJ215c3FsJyA9PiAnRU5HSU5FIE15SVNBTSBDSEFSQUNURVIgU0VUIHV0ZjggQ09MTEFURSB1dGY4X2dlbmVyYWxfY2knKTsNCgkJJGlkeG9wdGFycmF5VW5pcXVlID0gYXJyYXkoJ1VOSVFVRScpOw0KCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsNCgkJJGhxbCA9IE9ybUNvcmU6OmdldEZpZWxkc1RvSHFsKCRlbnRpdHlQYXJhbSk7DQoJCQ0KCQkvL0NhbGxpbmcgdGhlIGFkb2RiIGZ1bmN0aW9uYWxpdGllcw0KCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKSwgDQoJCQkJCQkJCQkJCQkkaHFsLA0KCQkJCQkJCQkJCQkJJHRhYm9wdGFycmF5KTsNCgkJCQkJCQkJCQkJCQ0KCQkkcmVzdWx0ID0gJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KDQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkgew0KCQkJT3JtVHJhY2U6OmVycm9yKCRocWwpOw0KCQkJT3JtVHJhY2U6OmVycm9yKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRhYmxlICIuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4iIGZvciB0aGUgZW50aXR5ICIgLiAkZW50aXR5UGFyYW0tPmdldE5hbWUoKS4kZGItPkVycm9yTXNnKCkpOw0KCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiB0YWJsZSAiLiRlbnRpdHlQYXJhbS0+Z2V0RGJuYW1lKCkuIiBmb3IgdGhlIGVudGl0eSAiIC4gJGVudGl0eVBhcmFtLT5nZXROYW1lKCkuJGRiLT5FcnJvck1zZygpKTsNCgkJfQ0KCQkgICANCgkJT3JtVHJhY2U6OmRlYnVnKCJjcmVhdGVUYWJsZSA6ICIucHJpbnRfcigkc3FsYXJyYXksIHRydWUpKTsNCgkJDQoJCS8vSWYgbmVjZXNzYXJ5LCBpdCB3aWxsIGNyZWF0ZSBhIHNlcXVlbmNlIG9uIHRoZSB0YWJsZS4NCgkJaWYoJGVudGl0eVBhcmFtLT5nZXRTZXFuYW1lKCkgIT0gbnVsbCl7DQoJCQkkZGItPkNyZWF0ZVNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsNCgkJfQ0KCQkNCgkJLy9XZSBtYW5hZ2UgdGhlICJ1bmlxdWUiIGtleXMNCgkJJGxpc3Rlc1VuaXF1ZUtleXMgPSAkZW50aXR5UGFyYW0tPmdldFVuaXF1ZUtleXMoKTsNCg0KCQkvL0ZvciBlYWNoIEZpZWxkIGNvbnRhaW5lZCBpbiB0aGUgZW50aXR5DQoJCWZvcmVhY2goJGxpc3Rlc1VuaXF1ZUtleXMgYXMgJGxpc3RGaWVsZCkgew0KCQkJLy9DYXNlIDogdW5pcXVlIGluZGV4IG9uIG1hbnkgZmllbGRzDQoJCQlpZihpc19hcnJheSgkbGlzdEZpZWxkKSkgew0KCQkJCSRpZHhmbGRzID0gaW1wbG9kZSgnLCcsICRsaXN0RmllbGQpOw0KCQkJCSRtZDUgPSBtZDUoc2VyaWFsaXplKCRsaXN0RmllbGQpKTsNCgkJCX0gZWxzZSB7DQoJCQkJJGlkeGZsZHMgPSAkbGlzdEZpZWxkOw0KCQkJCSRtZDUgPSBtZDUoJGxpc3RGaWVsZCk7DQoJCQl9DQoJCQkNCgkJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgkbWQ1LCAkZW50aXR5UGFyYW0tPmdldERibmFtZSgpLCAkaWR4ZmxkcywgJGlkeG9wdGFycmF5VW5pcXVlKTsNCgkJCSRyZXN1bHQgPSAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7DQoNCgkJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkgew0KCQkJCU9ybVRyYWNlOjplcnJvcigkaHFsKTsNCgkJCQlPcm1UcmFjZTo6ZXJyb3IoIkRhdGFiYXNlIGVycm9yIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgdGhlIHVuaXF1ZSBpbmRleCAiLiRtZDUuIigiLiRpZHhmbGRzLiIpIGZvciB0aGUgZW50aXR5ICIgLiAkZW50aXR5UGFyYW0tPmdldE5hbWUoKS4kZGItPkVycm9yTXNnKCkpOw0KCQkJCXRocm93IG5ldyBFeGNlcHRpb24oIkRhdGFiYXNlIGVycm9yIGR1cmluZyB0aGUgY3JlYXRpb24gb2YgdGhlIHVuaXF1ZSBpbmRleCAiLiRtZDUuIigiLiRpZHhmbGRzLiIpIGZvciB0aGUgZW50aXR5ICIgLiAkZW50aXR5UGFyYW0tPmdldE5hbWUoKS4kZGItPkVycm9yTXNnKCkpOw0KCQkJfQ0KCQkJDQoJCX0NCg0KCQkvL1dlIGluaXRpYXRlIHRoZSB0YWJsZS4NCgkJJGVudGl0eVBhcmFtLT5pbml0VGFibGUoKTsNCgl9DQogICAgDQogICAgLyoqDQogICAgKiBEcm9wIHRoZSB0YWJsZSBmb3IgdGhlIE9ybUVudGl0eSBpbiBwYXJhbWV0ZXJzDQogICAgKiAgV2lsbCBhbHNvIGRyb3AgdGhlIHNlcXVlbmNlIGlmIGl0J3MgbmVlZGVkDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBkcm9wVGFibGUoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsNCg0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KDQoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOw0KDQoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKSk7DQoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCg0KCQkvL0lmIG5lY2Vzc2FyeSwgaXQgd2lsbCBkZWxldGUgYSBzZXF1ZW5jZSBvbiB0aGUgdGFibGUuDQoJCWlmKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpICE9IG51bGwpeyRkYi0+RHJvcFNlcXVlbmNlKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTt9DQoJfSAgDQogIA0KICAgIC8qKg0KICAgICogV2lsbCBlZGl0IHRoZSB0YWJsZSBvZiB0aGUgT3JtRW50aXR5IGluIHBhcmFtZXRlcnMgd2l0aCB0aGUgU1FMIHF1ZXJ5IGluIHBhcmFtZXRlcnMNCiAgICAqIA0KICAgICogICBleGFtcGxlIDogaWYgeW91IG5lZWQgdG8gZG8gDQogICAgKiANCiAgICAqIDxjb2RlPiAgICAgICAgDQogICAgKiAgIEFMVEVSIFRBQkxFIGAgdGFibGUgb2YgdGhlIEN1c3RvbWVyIGVudGl0eSBgIEFERCBgbmV3Q29sdW1uYCBJTlQgTk9UIE5VTEwgDQogICAgKiAgIEFMVEVSIFRBQkxFIGAgdGFibGUgb2YgdGhlIEN1c3RvbWVyIGVudGl0eSBgIERST1AgYG9sZENvbHVtbmAgDQogICAgKiA8L2NvZGU+DQogICAgKiANCiAgICAqICB0aGUgY29kZSBtdXN0IGJlIDoNCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAqICAgICAgIE9ybUNvcmU6OmFsdGVyVGFibGUoJGN1c3RvbWVyLCAiQUREIGBuZXdDb2x1bW5gIElOVCBOT1QgTlVMTCIpOw0KICAgICogICAgICAgT3JtQ29yZTo6YWx0ZXJUYWJsZSgkY3VzdG9tZXIsICJEUk9QIGBvbGRDb2x1bW5gIik7DQogICAgKiA8L2NvZGU+DQogICAgKiAgIA0KICAgICogDQogICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIFNRTCBxdWVyeQ0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBhbHRlclRhYmxlKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCAkc3FsKSB7DQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoJCQkNCgkJJHF1ZXJ5QWx0ZXIgPSAiQUxURVIgVEFCTEUgIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLiIgIi4kc3FsOyAgICANCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlBbHRlcik7DQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbCdhbHRlciBkZSBsYSB0YWJsZSAkZW50aXR5UGFyYW0tPmdldERibmFtZSgpISIpO30NCgl9DQogICAgDQogICAgLyoqDQogICAgICogSW5zZXJ0IGRhdGEgaW50byBkYXRhYmFzZS4NCiAgICAgKiANCiAgICAgKiBFeGFtcGxlIGZvciBhIG5ldyBDdXN0b21lciA6IGN1c3RvbWVyX2lkLCBuYW1lLCBsYXN0TmFtZSAob3B0aW9uYWwpIA0KICAgICAqICAgDQogICAgICogPGNvZGU+DQogICAgICogICAgICAgJGN1c3RvbWVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ2N1c3RvbWVyJyk7DQogICAgICogICAgICAgDQogICAgICogICAgICAgJGN1c3RvbWVyLT5zZXQoJ25hbWUnLCdEdXJhbnQnKTsNCiAgICAgKiAgICAgICAkY3VzdG9tZXItPnNldCgnbGFzdE5hbWUnPT4nSm9obicpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6Omluc2VydEVudGl0eSgkY3VzdG9tZXIpOw0KICAgICAqIDwvY29kZT4NCgkgKg0KCSAqIFlvdSBjb3VsZCBhbHNvIGNvZGUgZm9yIHRoZSBsYXN0IGxpbmUgOiAkY3VzdG9tZXItPnNhdmUoKTsgIGl0IHdpbGwgYXV0b21hdGljYWxseSANCiAgICAgKiANCiAgICAgKiBJbXBvcnRhbnQgOiB5b3UgbXVzdCBub3Qgc2V0IHRoZSBwcmltYXJ5S2V5IHZhbHVlLiBJdCB3aWxsIGJlIGNhbGN1bGF0ZSBieSB0aGUgc3lzdGVtIGl0LXNlbGYNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQoJICoNCiAgICAgKiBAcmV0dXJuIHRoZSBlbnRpdHkgc2F2ZWQgd2l0aCBpdHMgbmV3IG5ldyBJZCAoY3VzdG9tZXJfaWQgaW4gbXkgZXhhbXBsZSkNCiAgICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGluc2VydEVudGl0eShPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgew0KDQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCgkJJHZhbHVlcyA9ICRlbnRpdHlQYXJhbS0+Z2V0VmFsdWVzKCk7DQoJCSR1bmlxdWVzID0gJGVudGl0eVBhcmFtLT5nZXRVbmlxdWVLZXlzKCk7DQoNCgkJJHF1ZXJ5SW5zZXJ0ID0gJ0lOU0VSVCBJTlRPICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nICglcykgdmFsdWVzICglcyknOw0KDQoJCSRzdHIxID0gIiI7DQoJCSRzdHIyID0gIiI7DQoNCgkJJHBhcmFtcyA9IGFycmF5KCk7DQoJCQkgICANCgkJLy9BbGwgdGhlIHJlcXVpcmVkIHZhbHVlcyBtdXN0IGJlIHByZXNlbnQNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpDQoJCXsNCgkJCWlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgew0KCQkJCWNvbnRpbnVlOw0KCQkJfQ0KDQoJCQlpZighZW1wdHkoJHN0cjEpKSB7DQoJCQkJJHN0cjEgLj0gJywnOw0KCQkJCSRzdHIyIC49ICcsJzsNCgkJCX0NCgkJCSRzdHIxIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nICc7DQoJCQkkc3RyMiAuPSAnPyc7DQoJCQkNCgkJCWlmKCRmaWVsZC0+aXNQcmltYXJ5S0VZKCkpIHsNCgkJCQlpZighZW1wdHkoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKSB7DQoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ1ByaW1hcnkgS2V5ICcuJGZpZWxkLT5nZXROYW1lKCkuJyBjYW5cJ3QgYmUgc2V0dGVkIGR1cmluZyBpbnNlcnQgb3BlcmF0aW9uIGZvciBPcm1FbnRpdHknLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkbmV3SWQgPSAkZGItPkdlbklEKCRlbnRpdHlQYXJhbS0+Z2V0U2VxbmFtZSgpKTsNCgkJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAkbmV3SWQ7DQoJCQkJCSRlbnRpdHlQYXJhbS0+c2V0KCRmaWVsZC0+Z2V0TmFtZSgpLCAkbmV3SWQpOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJLy9FbXB0eSBGaWVsZCB0aGF0IHNob3VsZG4ndCBiZSAhDQoJCQlpZighJGZpZWxkLT5pc051bGxhYmxlKCkgJiYgIWlzc2V0KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkgew0KCQkJCS8vRXhjZXB0aW9uIDogaWYgdGhlIGZpZWxkIGhhdmUgYSBkZWZhdWx0IHZhbHVlIHdlIHNldCBpdCBtYW51YWxseQ0KCQkJCWlmKCRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCkgIT0gbnVsbCl7DQoJCQkJCSR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldID0gJGZpZWxkLT5nZXREZWZhdWx0VmFsdWUoKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCd0aGUgZmllbGQgJy4kZmllbGQtPmdldE5hbWUoKS4nIG9mIE9ybUVudGl0eSAgJy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKS4nIGNhblwndCBiZSBudWxsJyk7DQoJCQkJfQ0KCQkJfQ0KCQkJDQoJCQkvLyBDb250cm9sIFVVSUQgdHlwZQ0KCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JFVVSUQgJiYgIWVtcHR5KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSl7DQoJCQkJJHBhdHRlcm4gPSAiL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfSQvaSI7DQoJCQkJaWYoIXByZWdfbWF0Y2goJHBhdHRlcm4sICR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSl7DQoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgT3JtRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgZG9lc25cJ3QgbWF0Y2ggdGhlIFVVSUQgcGF0dGVybiA6ICcuJHBhdHRlcm4pOw0KCQkJCX0NCgkJCX0NCgkJCQ0KCQkJDQoJCQkkdmFsID0gbnVsbDsNCgkJCWlmKGlzc2V0KCR2YWx1ZXNbJGZpZWxkLT5nZXROYW1lKCldKSkNCgkJCXsNCgkJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXSwgJGZpZWxkLT5nZXRUeXBlKCkpOw0KCQkJfSBlbHNlIHsNCgkJCQkkcGFyYW1zW10gPSBudWxsOw0KCQkJfQ0KCQl9DQoJCQ0KCQkvL2NvbnRyb2wgdW5pY2l0eSBvbiB1bmlxdWUgRmllbGQNCgkJZm9yZWFjaCgkdW5pcXVlcyBhcyAkY291cGxlKXsNCgkJCWlmKCFpc19hcnJheSgkY291cGxlKSl7DQoJCQkJJGNvdXBsZSA9IGFycmF5KCRjb3VwbGUpOw0KCQkJfQ0KCQkJJHF1ZXJ5ID0gJ1NFTEVDVCBDT1VOVCgqKSBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFdIRVJFIDEgJzsNCgkJCSRhcnJheUZpbmQgPSBhcnJheSgpOw0KCQkJZm9yZWFjaCgkY291cGxlIGFzICRlbHQpew0KCQkJCWlmKGVtcHR5KCR2YWx1ZXNbJGVsdF0pKXsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyBJUyBOVUxMICc7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJHF1ZXJ5IC49ICcgQU5EICcgLiAkZWx0IC4gJyA9ID8gJzsNCgkJCQkJJGFycmF5RmluZFtdID0gJHZhbHVlc1skZWx0XTsNCgkJCQl9DQoJCQl9DQoJCQkkcXVlcnkgLj0gJyBBTkQgJyAuICRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpIC4gJyAhPSA/ICc7DQoJCQkkYXJyYXlGaW5kW10gPSAkdmFsdWVzWyRlbnRpdHlQYXJhbS0+Z2V0UGsoKS0+Z2V0TmFtZSgpXTsJCQkNCgkJCQkNCgkJCSRyZXN1bHQgPSAkZGItPmdldE9uZSgkcXVlcnksICRhcnJheUZpbmQpOw0KCQkJDQoJCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsNCgkJCQlPcm1UcmFjZTo6ZXJyb3IocHJpbnRfcigkcGFyYW1zLCB0cnVlKSk7DQoJCQkJT3JtVHJhY2U6OmVycm9yKCRxdWVyeSk7DQoJCQkJT3JtVHJhY2U6OmVycm9yKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sISIuJGRiLT5FcnJvck1zZygpKTsNCgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJEYXRhYmFzZSBlcnJvciBkdXJpbmcgdW5pY2l0eSBjb250cm9sISIuJGRiLT5FcnJvck1zZygpKTsNCgkJCX0NCgkJCQ0KCQkJaWYoJHJlc3VsdCAhPSAwKXsNCgkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCdhbiBPcm1FbnRpdHkgJy4kZW50aXR5UGFyYW0tPmdldE5hbWUoKS4nIHdpdGggdGhlIHNhbWUgZmllbGRzIGFscmVhZHkgZXhpc3RzIGluIGRhdGFiYXNlJyk7DQoJCQl9DQoJCX0NCgkJICAJCSAgDQoJCS8vRXhlY3V0aW9uDQoJCSRkYi0+ZGVidWcgPSB0cnVlOw0KDQoJCU9ybVRyYWNlOjpkZWJ1ZygiaW5zZXJ0RW50aXR5IDogIi5zcHJpbnRmKCRxdWVyeUluc2VydCwgJHN0cjEsICRzdHIyKSk7DQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoc3ByaW50ZigkcXVlcnlJbnNlcnQsICRzdHIxLCAkc3RyMiksICRwYXJhbXMpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsNCgkJCU9ybVRyYWNlOjplcnJvcihwcmludF9yKCRwYXJhbXMsIHRydWUpKTsNCgkJCU9ybVRyYWNlOjplcnJvcihzcHJpbnRmKCRxdWVyeUluc2VydCwgJHN0cjEsICRzdHIyKSk7DQoJCQlPcm1UcmFjZTo6ZXJyb3IoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsJ2luc2VydCEiLiRkYi0+RXJyb3JNc2coKSk7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbCdpbnNlcnQhIi4kZGItPkVycm9yTXNnKCkpOw0KCQl9DQoNCgkJaWYoJGVudGl0eVBhcmFtLT5pc0luZGV4YWJsZSgpKSB7ICANCgkJCUluZGV4aW5nOjpBZGRXb3JkcygkZW50aXR5UGFyYW0tPmdldE1vZHVsZU5hbWUoKSwgT3JtQ29yZTo6ZmluZEJ5SWQoJGVudGl0eVBhcmFtLCRhcnJheUtFWVswXSkpOw0KCQl9DQoJCQ0KCQkvL2VtcHR5IGNhY2hlDQoJCU9ybUNhY2hlOjpjbGVhckNhY2hlKCk7DQoJCQ0KCQlyZXR1cm4gJGVudGl0eVBhcmFtOw0KDQoJfQ0KCQ0KICAgIC8qKg0KICAgICAqICBVcGRhdGUgZGF0YSBpbnRvIGRhdGFiYXNlLiBUaGUgdGhpcmQgcGFyYW1ldGVyIG11c3QgZm9sbG93IHRoaXMgc2NoZW1lDQogICAgICogDQogICAgICogRXhhbXBsZSBmb3IgYSBuZXcgQ3VzdG9tZXIgOiANCiAgICAgKiANCiAgICAgKiA8Y29kZT4NCiAgICAgKiAgICAgICAkbXlBcnJheSA9IGFycmF5KCk7DQogICAgICogICAgICAgJG15QXJyYXlbXSA9IGFycmF5KCdjdXN0b21lcl9pZCc9PjEsICdsYXN0TmFtZSc9Pm51bGwsICduYW1lJz0+J0R1cG9udCcpOyAgICA8LS0gdXBkYXRlIE5hbWUgdmFsdWUsIGVyYXNlIGxhc3ROYW1lIHZhbHVlIGluIGRhdGFiYXNlDQogICAgICogICAgICAgJG15QXJyYXlbXSA9IGFycmF5KCdjdXN0b21lcl9pZCc9PjIsICduYW1lJz0+J0R1cmFudCcpOyAgICAgICAgICAgICAgICAgICAgICA8LS0gdXBkYXRlIE5hbWUgdmFsdWUNCiAgICAgKiAgICAgICAkbXlBcnJheVtdID0gYXJyYXkoJ2N1c3RvbWVyX2lkJz0+MywgJ2xhc3ROYW1lJz0+J0pvaG4nLCAnbmFtZSc9PidEb2UnKTsgICAgIDwtLSB1cGRhdGUgTmFtZSB2YWx1ZSBhbmQgbGFzdE5hbWUgdmFsdWUNCiAgICAgKiANCiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAgKiAgICAgICANCiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBPcm1Db3JlOjpmaW5kQnlJZCgkY3VzdG9tZXIsIDEpOw0KICAgICAqICAgICAgICRjdXN0b21lci0+c2V0KCdsYXN0TmFtZSc9PidOZXdMYXN0TmFtZScpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6OnVwZGF0ZUVudGl0eSgkY3VzdG9tZXIpOw0KICAgICAqIDwvY29kZT4NCiAgICAgKiAJIA0KICAgICAqIFlvdSBjb3VsZCBhbHNvIGNvZGUgZm9yIHRoZSBsYXN0IGxpbmUgOiAkY3VzdG9tZXItPnNhdmUoKTsgIGl0IHdpbGwgYXV0b21hdGljYWxseSANCgkgKg0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KCSAqDQoJICogQHJldHVybiB0aGUgZW50aXR5IHNhdmVkIHdpdGggaXRzIG5ldyBJZCAoY3VzdG9tZXJfaWQgaW4gbXkgZXhhbXBsZSkNCiAgICAgKi8JDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiB1cGRhdGVFbnRpdHkoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0pIHsNCg0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoJCSR2YWx1ZXMgPSAkZW50aXR5UGFyYW0tPmdldFZhbHVlcygpOw0KCQkkdW5pcXVlcyA9ICRlbnRpdHlQYXJhbS0+Z2V0VW5pcXVlS2V5cygpOw0KDQoJCSRzdHIgPSAiIjsNCgkJJHdoZXJlID0gJyc7DQoJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQkkaGFzS2V5ID0gZmFsc2U7DQoJCSAgDQoJCS8vQWxsIHRoZSByZXF1aXJlZCB2YWx1ZXMgbXVzdCBiZSBwcmVzZW50DQoJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKSB7DQoJCQ0KCQkJLy9pZiB0aGUgZmllbGQgaXMgZW1wdHkgYW5kIHdlIGhhdmUgYSBkZWZhdWx0IHZhbHVlIHdlIHNldCBpdCBtYW51YWxseQ0KCQkJaWYoZW1wdHkoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pICYmICRmaWVsZC0+Z2V0RGVmYXVsdFZhbHVlKCkgIT0gbnVsbCl7DQoJCQkJJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0gPSAkZmllbGQtPmdldERlZmF1bHRWYWx1ZSgpOw0KCQkJfSANCgkJDQoJCQkvL0lmIGl0J3Mgbm90IHNldA0KCQkJaWYoZW1wdHkoJHZhbHVlc1skZmllbGQtPmdldE5hbWUoKV0pKSB7DQoJCQkNCgkJCQkvL0lmIGl0J3MgYSBwcmltYXJ5S2V5IHdlIHRocm93IGEgZXhjZXB0aW9uDQoJCQkJaWYoJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgew0KCQkJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCd0aGUgcHJpbWFyeUtleSAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgaXMgbWlzc2luZyBmb3IgdGhlIGVudGl0eSA6ICcuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkpOw0KCQkJCX0NCgkJCQkNCgkJCQkvL2FuIGVtcHR5IGFzc29jaWF0aXZlIGZpZWxkIDogbm8gcHJvYmxlbSwgd2UgY2FuIHBhc3MNCgkJCQlpZigkZmllbGQtPmlzQXNzb2NpYXRlS0VZKCkpIHsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCQ0KCQkJCS8vSWYgaXQncyBhIG5vIG51bGxhYmxlIGZpZWxkIHdlIHRocm93IGEgZXhjZXB0aW9uDQoJCQkJaWYoISRmaWVsZC0+aXNOdWxsYWJsZSgpKSB7DQoJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ3RoZSBmaWVsZCAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgb2YgRW50aXR5ICAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgY2FuXCd0IGJlIG51bGwnKTsNCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCS8vIENvbnRyb2wgVVVJRCB0eXBlDQoJCQkJaWYoJGZpZWxkLT5nZXRUeXBlKCkgPT0gT3JtQ0FTVDo6JFVVSUQpew0KCQkJCQkkcGF0dGVybiA9ICcvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pJzsNCgkJCQkJDQoJCQkJCWlmKCFwcmVnX21hdGNoKCRwYXR0ZXJuLCAkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXSkpew0KCQkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigndGhlIGZpZWxkICcuJGZpZWxkLT5nZXROYW1lKCkuJyBvZiBFbnRpdHkgICcuJGVudGl0eVBhcmFtLT5nZXROYW1lKCkuJyBkb2VzblwndCBtYXRjaCB0aGUgVVVJRCBwYXR0ZXJuIDogJy4kcGF0dGVybik7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCQkNCgkJCQ0KCQkJDQoJCQkvL0lmIGl0J3MgYSBwcmltYXJ5S2V5DQoJCQlpZigkZmllbGQtPmlzUHJpbWFyeUtFWSgpKSB7DQoJCQkJJHdoZXJlID0gJyBXSEVSRSAnLiRmaWVsZC0+Z2V0TmFtZSgpLicgPSA/JzsNCgkJCQkkaGFzS2V5ID0gdHJ1ZTsNCgkJCQkka2V5VmFsdWUgPSAkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXTsNCgkJCX0NCg0KCQkJaWYoIWVtcHR5KCRzdHIpKSB7DQoJCQkgICRzdHIgLj0gJywnOw0KCQkJfQ0KDQoJCQkkc3RyIC49ICcgJy4kZmllbGQtPmdldE5hbWUoKS4nID0gPyAnOw0KDQoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkdmFsdWVzWyRmaWVsZC0+Z2V0TmFtZSgpXSwgJGZpZWxkLT5nZXRUeXBlKCkpOw0KDQoJCX0NCgkJDQoJCS8vY29udHJvbCB1bmljaXR5IG9uIHVuaXF1ZSBGaWVsZA0KCQlmb3JlYWNoKCR1bmlxdWVzIGFzICRjb3VwbGUpew0KCQkJaWYoIWlzX2FycmF5KCRjb3VwbGUpKXsNCgkJCQkkY291cGxlID0gYXJyYXkoJGNvdXBsZSk7DQoJCQl9DQoJCQkkcXVlcnkgPSAnU0VMRUNUIENPVU5UKCopIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgMSAnOw0KCQkJJGFycmF5RmluZCA9IGFycmF5KCk7DQoJCQlmb3JlYWNoKCRjb3VwbGUgYXMgJGVsdCl7DQoJCQkJaWYoZW1wdHkoJHZhbHVlc1skZWx0XSkpew0KCQkJCQkkcXVlcnkgLj0gJyBBTkQgJyAuICRlbHQgLiAnIElTIE5VTEwgJzsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkcXVlcnkgLj0gJyBBTkQgJyAuICRlbHQgLiAnID0gPyAnOw0KCQkJCQkkYXJyYXlGaW5kW10gPSAkdmFsdWVzWyRlbHRdOw0KCQkJCX0NCgkJCX0NCgkJCSRxdWVyeSAuPSAnIEFORCAnIC4gJGVudGl0eVBhcmFtLT5nZXRQaygpLT5nZXROYW1lKCkgLiAnICE9ID8gJzsNCgkJCSRhcnJheUZpbmRbXSA9ICR2YWx1ZXNbJGVudGl0eVBhcmFtLT5nZXRQaygpLT5nZXROYW1lKCldOwkJCQ0KCQkJCQ0KCQkJJHJlc3VsdCA9ICRkYi0+Z2V0T25lKCRxdWVyeSwgJGFycmF5RmluZCk7DQoJCQkNCgkJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkgew0KCQkJCU9ybVRyYWNlOjplcnJvcihwcmludF9yKCRwYXJhbXMsIHRydWUpKTsNCgkJCQlPcm1UcmFjZTo6ZXJyb3IoJHF1ZXJ5KTsNCgkJCQlPcm1UcmFjZTo6ZXJyb3IoIkRhdGFiYXNlIGVycm9yIGR1cmluZyB1bmljaXR5IGNvbnRyb2whIi4kZGItPkVycm9yTXNnKCkpOw0KCQkJCXRocm93IG5ldyBFeGNlcHRpb24oIkRhdGFiYXNlIGVycm9yIGR1cmluZyB1bmljaXR5IGNvbnRyb2whIi4kZGItPkVycm9yTXNnKCkpOw0KCQkJfQ0KCQkJDQoJCQlpZigkcmVzdWx0ICE9IDApew0KCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oJ2FuIEVudGl0eSAnLiRlbnRpdHlQYXJhbS0+Z2V0TmFtZSgpLicgd2l0aCB0aGUgc2FtZSBmaWVsZHMgYWxyZWFkeSBleGlzdHMgaW4gZGF0YWJhc2UnKTsNCgkJCX0NCgkJfQ0KDQoJCWlmKCRoYXNLZXkpIHsNCgkJCSRwYXJhbXNbXSA9ICRrZXlWYWx1ZTsNCgkJfQ0KDQoJCSRxdWVyeVVwZGF0ZSA9ICdVUERBVEUgJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgU0VUICcuJHN0ci4kd2hlcmU7DQoNCgkJLy9FeGVjdXRpb24NCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlVcGRhdGUsICRwYXJhbXMpOw0KCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IgZHVyYW50IGwndXBkYXRlISIpO30NCgkJaWYoJGVudGl0eVBhcmFtLT5pc0luZGV4YWJsZSgpKSB7ICANCgkJCUluZGV4aW5nOjpVcGRhdGVXb3JkcygkZW50aXR5UGFyYW0tPmdldE1vZHVsZU5hbWUoKSwgJGVudGl0eVBhcmFtKTsNCgkJfQ0KCQkNCgkJLy9lbXB0eSBjYWNoZQ0KCQlPcm1DYWNoZTo6Y2xlYXJDYWNoZSgpOw0KCQkNCgkJcmV0dXJuICRlbnRpdHlQYXJhbTsNCgl9DQogIA0KICAgIC8qKg0KICAgICogRGVsZXRlIGluZm9ybWF0aW9uIGludG8gZGF0YWJhc2UNCiAgICAqICAgDQogICAgKiBFeGFtcGxlIGZvciBhIHNpbmdsZSBkZWxldGlvbiA6IA0KICAgICogDQogICAgKiA8Y29kZT4NCiAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICogDQogICAgKiAgICAgICBPcm1Db3JlOjpkZWxldGVCeUlkcygkY3VzdG9tZXIsIGFycmF5KDEpOw0KICAgICogPC9jb2RlPg0KICAgICogDQogICAgKiAgRXhhbXBsZSBmb3IgbXVsdGlwbGUgZGVsZXRpb24gOiANCiAgICAqIA0KICAgICogPGNvZGU+DQogICAgKiAgICAgICAkbXlBcnJheSA9IGFycmF5KCk7DQogICAgKiAgICAgICAkbXlBcnJheVtdID0gMTsNCiAgICAqICAgICAgICRteUFycmF5W10gPSAyOw0KICAgICogICAgICAgJG15QXJyYXlbXSA9IDM7DQogICAgKiANCiAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICogDQogICAgKiAgICAgICBPcm1Db3JlOjpkZWxldGVCeUlkcygkY3VzdG9tZXIsICRteUFycmF5KTsNCiAgICAqIDwvY29kZT4NCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgKiBAcGFyYW0gRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkgICAgDQogICAgKiBAcGFyYW0gYXJyYXkgYWxsIHRoZSBpZHMgdG8gZGVsZXRlICgkY3VzdG9tZXJfaWQgaW4gbXkgZXhhbXBsZSkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZGVsZXRlQnlJZHMoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRpZHMpIHsNCg0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpDQoJCXsNCgkJICBpZighJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkNCgkJICB7IA0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgICR0eXBlID0gJGZpZWxkLT5nZXRUeXBlKCk7DQoJCSAgJG5hbWUgPSAkZmllbGQtPmdldE5hbWUoKTsNCgkJfSAgDQoNCgkJJHdoZXJlID0gJyc7DQoJCWZvcmVhY2goJGlkcyBhcyAkc2lkKQ0KCQl7DQoJCSAgaWYoIWVtcHR5KCR3aGVyZSkpDQoJCSAgew0KCQkJJHdoZXJlIC49ICcgT1IgJzsNCgkJICB9DQoJCSAgDQoJCSAgJHdoZXJlIC49ICRuYW1lLicgPSA/JzsNCgkJICAkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkc2lkLCAkdHlwZSk7ICANCgkJfQ0KDQoNCgkJJHF1ZXJ5RGVsZXRlID0gJ0RFTEVURSBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKS4nIFdIRVJFICcuJHdoZXJlOw0KDQoJCS8vRXhlY3V0aW9uDQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5RGVsZXRlLCAkcGFyYW1zKTsNCgkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsYSBzdXBwcmVzc2lvbiEiKTt9DQoNCgkJaWYoJGVudGl0eVBhcmFtLT5pc0luZGV4YWJsZSgpKQ0KCQl7ICANCgkJICAvLyAkbW9kb3BzID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpOw0KCQkgIC8vIGlmKG1ldGhvZF9leGlzdHMoJG1vZG9wcywiR2V0U2VhcmNoTW9kdWxlIikpDQoJCSAgLy8gew0KCQkJLy8gSW5kZXhpbmc6OnNldFNlYXJjaCgkbW9kb3BzLT5HZXRTZWFyY2hNb2R1bGUoKSk7DQoJCSAgLy8gfSBlbHNlDQoJCSAgLy8gew0KCQkJLy8gZGllKCJrbyIpOw0KCQkgIC8vIH0NCgkJICBmb3JlYWNoKCRpZHMgYXMgJHNpZCkNCgkJICB7DQoJCQlJbmRleGluZzo6RGVsZXRlV29yZHMoJGVudGl0eVBhcmFtLT5nZXRNb2R1bGVOYW1lKCksICRlbnRpdHlQYXJhbSwgJHNpZCk7DQoJCSAgfQ0KCQkgIA0KCQl9DQoJCQ0KCQkvL2VtcHR5IGNhY2hlDQoJCU9ybUNhY2hlOjpjbGVhckNhY2hlKCk7DQoJfQ0KICAgDQogICAgLyoqDQogICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgZnJvbSB0aGUgdGFibGUgb2YgdGhlIGVudGl0eSBpbiBQYXJhbWV0ZXJzDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgICANCgkqIA0KICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBmcm9tIHRoZSB0YWJsZSAgIA0KICAgICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBjb3VudEFsbChPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgew0KDQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoNCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NlbGVjdCBjb3VudCgqKSBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsNCg0KCQlPcm1UcmFjZTo6ZGVidWcoImNvdW50QWxsIDogIi4kcXVlcnlTZWxlY3QpOw0KCQkgIA0KCQkkY29tcHRldXI9ICRkYi0+Z2V0T25lKCRxdWVyeVNlbGVjdCk7DQoJCWlmICgkY29tcHRldXIgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmFudCBsYSByZXF1ZXRlIGNvdW50KCopISIpO30NCg0KCQlyZXR1cm4gJGNvbXB0ZXVyOw0KCX0NCiAgDQogICAgLyoqDQogICAgKiBSZXR1cm5zIGFsbCB0aGUgb2NjdXJyZW5jZXMgZnJvbSB0aGUgdGFibGUgb2YgdGhlIGVudGl0eSBpbiBQYXJhbWV0ZXJzDQogICAgKiANCiAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgDQoJKg0KICAgICogQHJldHVybiBhcnJheTxPcm1FbnRpdHk+IGxpc3Qgb2YgRW50aXRpZXMgZm91bmQNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZmluZEFsbChPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSkgew0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KDQoJCSRxdWVyeVNlbGVjdCA9ICdTZWxlY3QgKiBGUk9NICcuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsNCg0KCQkvL0lmIGl0J3MgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIHdlIHJldHVybiB0aGUgcmVzdWx0DQoJCWlmKE9ybUNhY2hlOjppc0NhY2hlKCRxdWVyeVNlbGVjdCkpIHsNCgkJCSRlbnRpdGllcyA9IE9ybUNhY2hlOjpnZXRDYWNoZSgkcXVlcnlTZWxlY3QpOw0KCQl9IGVsc2Ugew0KCQkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTZWxlY3QpOw0KCQkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoIkRhdGFiYXNlIGVycm9yIGR1cmluZyBPcm1Db3JlOjpmaW5kQWxsKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtKSIpO30NCg0KCQkJJGVudGl0aWVzID0gT3JtQ29yZTo6X3Byb2Nlc3NBcnJheUVudGl0eSgkZW50aXR5UGFyYW0sICRyZXN1bHQpOw0KCQkJDQoJCQkvL1dlIHB1c2ggdGhlIHJlc3VsdCBpbnRvIHRoZSBjYWNoZSBiZWZvcmUgcmV0dXJuIGl0DQoJCQlPcm1DYWNoZTo6c2V0Q2FjaGUoJHF1ZXJ5U2VsZWN0LCBudWxsLCAkZW50aXRpZXMpOw0KCQl9DQoJCQ0KCQlyZXR1cm4gYXJyYXlfdmFsdWVzKCRlbnRpdGllcyk7DQoJfQ0KCQ0KCS8qKg0KCSAqIElubmVyIGZ1bmN0aW9uIHRvIGZhY3Rvcml6ZSBzb21lIGNvZGUgZm9yIGVhY2ggImZpbmQqIiBmdW5jdGlvbnMNCgkgKiAgSXQgd2lsbCByZXRyaWV2ZSBhbGwgdGhlIGluZm9ybWF0aW9ucyBvbiB0aGUgQUsncyBGaWVsZA0KCSAqDQogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICANCgkgKiBAcGFyYW0gcmVzdWx0UXVlcnkgdGhlIHJldHVybmVkIHZhbHVlIG9mIHNxbCBleGVjdXRpb24NCgkgKg0KICAgICAqIEByZXR1cm4gYXJyYXk8T3JtRW50aXR5PiBsaXN0IG9mIEVudGl0aWVzIHBvcHVsYXRlIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbnMgb24gQUsncyBGaWVsZA0KCSAqKi8NCglwcml2YXRlIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBfcHJvY2Vzc0FycmF5RW50aXR5KE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCAkcmVzdWx0UXVlcnkpIHsNCgkNCgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCgkJDQoJCSRlbnRpdHlzID0gYXJyYXkoKTsNCgkJd2hpbGUgKCRyb3cgPSAkcmVzdWx0UXVlcnktPkZldGNoUm93KCkpIHsNCgkJICAkYW5FbnRpdHkgPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkZW50aXR5UGFyYW0sICRyb3cpOw0KCQkgICRlbnRpdHlzWyRhbkVudGl0eS0+Z2V0KCRhbkVudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpKV0gPSAkYW5FbnRpdHk7DQoJCX0NCgkJCQkNCgkJLy9UZXN0IHRoZSBwcmVzZW5jZSBvZiAkQUsNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KCQlmb3JlYWNoKCRsaXN0ZUZpZWxkIGFzICRmaWVsZCkgew0KCQkgIGlmKCRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkgew0KCQkJDQoJCQkvL0luaXRpYXRlIHRoZSBmaWVsZCBhc3NvY2lhdGUgd2l0aCBhbiBlbXB0eSBhcnJheS4NCgkJCWZvcmVhY2goYXJyYXlfa2V5cygkZW50aXR5cykgYXMgJGtleSl7DQoJCQkJJGVudGl0eXNbJGtleV0tPnNldCgkZmllbGQtPmdldE5hbWUoKSwgYXJyYXkoKSk7DQoJCQl9DQoJCSAgDQoJCQlsaXN0KCRlbnRpdHlBc3NvY05hbWUsICRmaWVsZEFzc29jaWF0ZU5hbWUpID0gZXhwbG9kZSgiLiIsICRmaWVsZC0+Z2V0S0VZTmFtZSgpKTsNCgkJCSRlbnRpdHlBc3NvYyA9IG5ldyAkZW50aXR5QXNzb2NOYW1lKCk7DQoJCQkNCgkJCSRxdWVyeUFkZCA9ICdTRUxFQ1QgKiBGUk9NICcuJGVudGl0eUFzc29jLT5nZXREYm5hbWUoKS4nIFdIRVJFICcuJGZpZWxkQXNzb2NpYXRlTmFtZS4nIGluICgnLmltcGxvZGUoJywnLGFycmF5X2tleXMoJGVudGl0eXMpKS4nKSc7DQoJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeUFkZCk7DQoJCQlpZiAoJHJlc3VsdCA9PT0gZmFsc2Upe2RpZSgiRGF0YWJhc2UgZXJyb3IgZHVyaW5nIHJlcXVlc3QgdG8gZ2V0IGFzc29jaWF0aXZlIGVudGl0eSAkZW50aXR5QXNzb2NOYW1lISIpO30NCgkJCXdoaWxlICgkcm93QXNzb2NpYXRlID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkgew0KCQkJCSRhcnJheUlkRW50aXRpZXNEZXN0ID0gJGVudGl0eXNbJHJvd0Fzc29jaWF0ZVskZmllbGRBc3NvY2lhdGVOYW1lXV0tPmdldCgkZmllbGQtPmdldE5hbWUoKSk7DQoJCQkJJGFycmF5SWRFbnRpdGllc0Rlc3RbXSA9ICRyb3dBc3NvY2lhdGVbJGVudGl0eUFzc29jLT5nZXRQaygpLT5nZXROYW1lKCldOw0KCQkJCSRlbnRpdHlzWyRyb3dBc3NvY2lhdGVbJGZpZWxkQXNzb2NpYXRlTmFtZV1dLT5zZXQoJGZpZWxkLT5nZXROYW1lKCksJGFycmF5SWRFbnRpdGllc0Rlc3QpOw0KCQkJfQ0KCQkgIH0gDQoJCX0NCgkJDQoJCXJldHVybiAkZW50aXR5czsNCgl9DQogIA0KCS8qKg0KCSogUmV0dXJuIGEgT3JtRW50aXR5IGZyb20gaXRzIElkDQoJKiANCgkqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eSAgDQoJKiBAcGFyYW0gaW50IHRoZSBJZCB0byBmaW5kDQoJKiBAcmV0dXJuIE9ybUVudGl0eSB0aGUgT3JtRW50aXR5IGZvdW5kIG9yIE5VTEwNCgkqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZmluZEJ5SWQoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sICRpZCkgew0KCQkkbGlzdGUgPSBPcm1Db3JlOjpmaW5kQnlJZHMoJGVudGl0eVBhcmFtLCBhcnJheSgkaWQpKTsNCgkJDQoJCWlmKCFpc3NldCgkbGlzdGVbMF0pKXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJGxpc3RlWzBdOw0KCX0NCiAgDQoJLyoqDQoJKiBSZXR1cm4gRW50aXRpZXMgZnJvbSB0aGVpciBJZHMNCgkqIA0KCSogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5ICANCgkqIEBwYXJhbSBhcnJheSBsaXN0IG9mIHRoZSBJZHMgdG8gZmluZA0KCSoNCgkqIEByZXR1cm4gYXJyYXk8T3JtRW50aXR5PiBsaXN0IG9mIEVudGl0aWVzIGZvdW5kDQoJKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGZpbmRCeUlkcyhPcm1FbnRpdHkgJiRlbnRpdHlQYXJhbSwgJGlkcykgew0KCQlpZihjb3VudCgkaWRzKSA9PSAwKQ0KCQkgIHJldHVybiBhcnJheSgpOw0KCQkJDQoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7DQoJCSRsaXN0ZUZpZWxkID0gJGVudGl0eVBhcmFtLT5nZXRGaWVsZHMoKTsNCgkJJHdoZXJlID0gIiI7DQoJCQkNCgkJZm9yZWFjaCgkbGlzdGVGaWVsZCBhcyAkZmllbGQpIHsNCgkJICBpZighJGZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgeyANCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJICANCgkJICBmb3JlYWNoKCRpZHMgYXMgJGlkKSB7DQoJCQlpZighZW1wdHkoJHdoZXJlKSkgew0KCQkJICAkd2hlcmUgLj0gJyBPUiAnOw0KCQkJfQ0KCQkJCSAgDQoJCQkkd2hlcmUgLj0gJGZpZWxkLT5nZXROYW1lKCkuJyA9ID8nOw0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGlkLCAkZmllbGQtPmdldFR5cGUoKSk7DQoJCSAgfQ0KCQl9DQoNCgkJJHF1ZXJ5U2VsZWN0ID0gJ1NlbGVjdCAqIEZST00gJy4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpLicgV0hFUkUgJy4kd2hlcmU7DQoNCgkJLy9JZiBpdCdzIGFscmVhZHkgaW4gdGhlIGNhY2hlLCB3ZSByZXR1cm4gdGhlIHJlc3VsdA0KCQlpZihPcm1DYWNoZTo6aXNDYWNoZSgkcXVlcnlTZWxlY3QsICRwYXJhbXMpKSB7DQoJCSAgJGVudGl0aWVzID0gT3JtQ2FjaGU6OmdldENhY2hlKCRxdWVyeVNlbGVjdCwkcGFyYW1zKTsNCgkJfSBlbHNlIHsNCgkJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U2VsZWN0LCAkcGFyYW1zKTsNCgkJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbGEgcmVxdWV0ZSBwYXIgSWRzISIpO30NCg0KCQkJJGVudGl0aWVzID0gT3JtQ29yZTo6X3Byb2Nlc3NBcnJheUVudGl0eSgkZW50aXR5UGFyYW0sICRyZXN1bHQpOw0KCQkJDQoJCQkvL1dlIHB1c2ggdGhlIHJlc3VsdCBpbnRvIHRoZSBjYWNoZSBiZWZvcmUgcmV0dXJuIGl0DQoJCQlPcm1DYWNoZTo6c2V0Q2FjaGUoJHF1ZXJ5U2VsZWN0LCBudWxsLCAkZW50aXRpZXMpOw0KCQl9DQoNCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkZW50aXRpZXMpOw0KCX0NCiAgDQogICAgLyoqDQogICAgICogQWxsb3cgc2VhcmNoIGEgbGlzdCBvZiBPcm1FbnRpdHkgZnJvbSBhIGxpc3Qgb2YgT3JtQ3JpdGVyaWENCiAgICAgKiANCiAgICAgKiBFeGFtcGxlIDogZmluZCB0aGUgY3VzdG9tZXJzIHdpdGggbGFzdE5hbWUgJ1JvZ2VyJyAobm8gY2Fzc2Ugc2Vuc2l0aXZlKQ0KICAgICAqIA0KICAgICAqICA8Y29kZT4NCiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAgKiANCiAgICAgKiAgICAgICAkZXhhbXBsZSA9IG5ldyBPcm1FeGFtcGxlKCk7DQogICAgICogICAgICAgJGV4YW1wbGUtPmFkZENyaXRlcmlhKCdsYXN0TmFtZScsIE9ybVR5cGVDcml0ZXJpYTo6JEVRLCBhcnJheSgncm9nZXInKSwgdHJ1ZSk7DQogICAgICogDQogICAgICogICAgICAgT3JtQ29yZTo6ZmluZEJ5RXhhbXBsZSgkY3VzdG9tZXIsICRleGFtcGxlKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICogDQogICAgICogIEV4YW1wbGUgOiBmaW5kIHRoZSBjdXN0b21lcnMgd2l0aCBJZCA+PSA5MA0KICAgICAqIA0KICAgICAqIDxjb2RlPg0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqIA0KICAgICAqICAgICAgICRleGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCiAgICAgKiAgICAgICAkZXhhbXBsZS0+YWRkQ3JpdGVyaWEoJ2N1c3RvbWVyX2lkJywgT3JtVHlwZUNyaXRlcmlhOjokR1RFLCBhcnJheSg5MCkpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6OmZpbmRCeUV4YW1wbGUoJGN1c3RvbWVyLCAkZXhhbXBsZSk7DQogICAgICogPC9jb2RlPg0KICAgICAqIA0KICAgICAqIE5PVEUgOiBFUSA9PiA8Yj5FUTwvYj51YWxzLCBHVEUgPT4gPGI+RzwvYj5yZWF0ZXIgPGI+VDwvYj5oYW4gb3IgPGI+RTwvYj5xdWFscw0KICAgICAqIA0KICAgICAqIE5PVEUgMiA6IHlvdSBjYW4gYWRkIGFzIG1hbnkgQ3JpdGVyaWFzIGFzIHlvdSB3YW50IGluIGFuIEV4YW1wbGUgT2JqZWN0DQogICAgICogDQogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIE9ybUV4YW1wbGUgdGhlIE9iamVjdCBPcm1FeGFtcGxlIHdpdGggc29tZSBDcml0ZXJpYXMgaW5zaWRlDQogICAgICogDQogICAgICogQHNlZSBPcm1FeGFtcGxlDQogICAgICogQHNlZSBPcm1UeXBlQ3JpdGVyaWENCiAgICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGZpbmRCeUV4YW1wbGUoT3JtRW50aXR5ICYkZW50aXR5UGFyYW0sIE9ybUV4YW1wbGUgJGV4YW1wbGUpIHsNCg0KCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KCQkkbGlzdGVGaWVsZCA9ICRlbnRpdHlQYXJhbS0+Z2V0RmllbGRzKCk7DQoNCgkJJGNyaXRlcmlhcyA9ICRleGFtcGxlLT5nZXRDcml0ZXJpYXMoKTsNCgkJJHNlbGVjdCA9ICJzZWxlY3QgKiBmcm9tICIuJGVudGl0eVBhcmFtLT5nZXREYm5hbWUoKTsNCgkJJGhxbCA9ICIiOw0KCQkkcGFyYW1zID0gYXJyYXkoKTsNCgkJDQoJCWZvcmVhY2goJGNyaXRlcmlhcyBhcyAkY3JpdGVyaWEpIHsNCgkJICBpZighZW1wdHkoJGhxbCkpIHsNCgkJCSRocWwgLj0gJyBBTkQgJzsNCgkJICB9DQoJCSAgDQoJCSAgaWYoZW1wdHkoJGhxbCkpIHsNCgkJCSRocWwgLj0gJyBXSEVSRSAnOw0KCQkgIH0NCg0KCQkgICRmaWx0ZXJUeXBlID0gICRsaXN0ZUZpZWxkWyRjcml0ZXJpYS0+ZmllbGRuYW1lXS0+Z2V0VHlwZSgpOw0KCQkgIA0KCQkJCS8vMSBwYXJhbWV0ZXINCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRFUSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRORVEgDQoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRHVCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRHVEUgDQoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVCB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRMVEUgDQoJCQl8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRCRUZPUkUgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokQUZURVINCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExJS0UgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTkxJS0UpIHsgIA0KCQkJJHZhbCA9ICRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMF07DQoJCQkNCgkJCWlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExJS0UgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTkxJS0UpDQoJCQl7DQoJCQkgICR2YWwuPSAnJSc7DQoJCQl9DQoJCQkNCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCR2YWwsICRmaWx0ZXJUeXBlKTsgDQoJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhLicgPyAnOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIA0KCQkJCS8vMCBwYXJhbWV0ZXINCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROVUxMIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5OVUxMKSB7ICANCgkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWE7DQoJCQljb250aW51ZTsNCgkJICB9DQoJCSAgDQoJCQkJLy8yIHBhcmFtZXRlcnMNCgkJICBpZigkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRCRVRXRUVOKSB7ICANCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMF0sICRmaWx0ZXJUeXBlKTsgDQoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhWzFdLCAkZmlsdGVyVHlwZSk7IA0KCQkJJGhxbCAuPSAkY3JpdGVyaWEtPmZpZWxkbmFtZS4kY3JpdGVyaWEtPnR5cGVDcml0ZXJpYS4nID8gQU5EID8nOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIA0KCQkJLy8gTiBwYXJhbWV0ZXJzDQoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokSU4gfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTklOKSB7DQoJCQkkaHFsIC49ICcgKCAnOw0KCQkJJHNlY29uZCA9IGZhbHNlOyANCgkJCWZvcmVhY2goJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYSBhcyAkcGFyYW0pIHsNCgkJCSAgaWYoJHNlY29uZCkgew0KCQkJCSRocWwgLj0gJyBPUiAnOw0KCQkJICB9DQoJCQkgIA0KCQkJICAkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkcGFyYW0sICRmaWx0ZXJUeXBlKTsgDQoJCQkgICRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuT3JtVHlwZUNyaXRlcmlhOjokRVEuJyA/ICc7DQoJCQkgIA0KCQkJICAkc2Vjb25kID0gdHJ1ZTsNCgkJCX0NCgkJCSRocWwgLj0gJyApJzsNCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJICANCgkJICAvL090aGVyIGNhc2VzDQoJCSAgaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokRU1QVFkpIHsNCgkJCSRocWwgLj0gJyAoICcuJGNyaXRlcmlhLT5maWVsZG5hbWUgLicgaXMgbnVsbCB8fCAnIC4gJGNyaXRlcmlhLT5maWVsZG5hbWUgLiAiPSAnJykiOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5FTVBUWSkgew0KCQkJJGhxbCAuPSAnICggJy4kY3JpdGVyaWEtPmZpZWxkbmFtZSAuJyBpcyBub3QgbnVsbCAmJiAnIC4gJGNyaXRlcmlhLT5maWVsZG5hbWUgLiAiIT0gJycpIjsNCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJCQkJCSANCgkJICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUaGUgT3JtQ3JpdGVyaWEgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgaXMgbm90IG1hbmFnZSIpOw0KCQl9DQoJCSRxdWVyeUV4YW1wbGUgPSAkc2VsZWN0LiRocWw7DQoJCQ0KCQkvL0lmIGl0J3MgYWxyZWFkeSBpbiB0aGUgY2FjaGUsIHdlIHJldHVybiB0aGUgcmVzdWx0DQoJCWlmKE9ybUNhY2hlOjppc0NhY2hlKCRxdWVyeUV4YW1wbGUsICRwYXJhbXMpKSB7DQoJCSAgJGVudGl0aWVzID0gT3JtQ2FjaGU6OmdldENhY2hlKCRxdWVyeUV4YW1wbGUsJHBhcmFtcyk7DQoJCX0gZWxzZSB7DQoJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeUV4YW1wbGUsICRwYXJhbXMpOw0KCQkJaWYgKCRyZXN1bHQgPT09IGZhbHNlKXtkaWUoJGRiLT5FcnJvck1zZygpLk9ybVRyYWNlOjplcnJvcigiRGF0YWJhc2UgZXJyb3IgZHVyYW50IGxhIHJlcXVldGUgcGFyIEV4YW1wbGUhIikpO30NCg0KCQkJT3JtVHJhY2U6OmluZm8oImZpbmRCeUV4YW1wbGUgOiAiLiRyZXN1bHQtPlJlY29yZENvdW50KCkuIiByZXN1bHRhdChzKSIpOw0KCQkJDQoJCQkkZW50aXRpZXMgPSBPcm1Db3JlOjpfcHJvY2Vzc0FycmF5RW50aXR5KCRlbnRpdHlQYXJhbSwgJHJlc3VsdCk7DQoJCQkNCgkJCS8vV2UgcHVzaCB0aGUgcmVzdWx0IGludG8gdGhlIGNhY2hlIGJlZm9yZSByZXR1cm4gaXQNCgkJCU9ybUNhY2hlOjpzZXRDYWNoZSgkcXVlcnlFeGFtcGxlLCBudWxsLCAkZW50aXRpZXMpOw0KCQl9DQoNCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkZW50aXRpZXMpOw0KDQoJfQ0KICAgDQoJLyoqDQogICAgICogQWxsb3cgZGVsZXRlIGEgbGlzdCBvZiBPcm1FbnRpdHkgZnJvbSBhIGxpc3Qgb2YgT3JtQ3JpdGVyaWENCiAgICAgKiANCiAgICAgKiBFeGFtcGxlIDogZGVsZXRlIHRoZSBjdXN0b21lcnMgd2l0aCBsYXN0TmFtZSAnUm9nZXInIChubyBjYXNzZSBzZW5zaXRpdmUpDQogICAgICogDQogICAgICogIDxjb2RlPg0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqIA0KICAgICAqICAgICAgICRleGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCiAgICAgKiAgICAgICAkZXhhbXBsZS0+YWRkQ3JpdGVyaWEoJ2xhc3ROYW1lJywgT3JtVHlwZUNyaXRlcmlhOjokRVEsIGFycmF5KCdyb2dlcicpLCB0cnVlKTsNCiAgICAgKiANCiAgICAgKiAgICAgICBPcm1Db3JlOjpkZWxldGVCeUV4YW1wbGUoJGN1c3RvbWVyLCAkZXhhbXBsZSk7DQogICAgICogPC9jb2RlPg0KICAgICAqIA0KICAgICAqICBFeGFtcGxlIDogZGVsZXRlIHRoZSBjdXN0b21lcnMgd2l0aCBJZCA+PSA5MA0KICAgICAqIA0KICAgICAqIDxjb2RlPg0KICAgICAqICAgICAgICRjdXN0b21lciA9IE15QXV0b2xvYWQ6OmdldEluc3RhbmNlKCR0aGlzLT5HZXROYW1lKCksICdjdXN0b21lcicpOw0KICAgICAqIA0KICAgICAqICAgICAgICRleGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCiAgICAgKiAgICAgICAkZXhhbXBsZS0+YWRkQ3JpdGVyaWEoJ2N1c3RvbWVyX2lkJywgT3JtVHlwZUNyaXRlcmlhOjokR1RFLCBhcnJheSg5MCkpOw0KICAgICAqIA0KICAgICAqICAgICAgIE9ybUNvcmU6OmRlbGV0ZUJ5RXhhbXBsZSgkY3VzdG9tZXIsICRleGFtcGxlKTsNCiAgICAgKiA8L2NvZGU+DQogICAgICogDQogICAgICogTk9URSA6IEVRID0+IDxiPkVRPC9iPnVhbHMsIEdURSA9PiA8Yj5HPC9iPnJlYXRlciA8Yj5UPC9iPmhhbiBvciA8Yj5FPC9iPnF1YWxzDQogICAgICogDQogICAgICogTk9URSAyIDogeW91IGNhbiBhZGQgYXMgbWFueSBDcml0ZXJpYXMgYXMgeW91IHdhbnQgaW4gYW4gT3JtRXhhbXBsZSBPYmplY3QNCiAgICAgKiANCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IGFuIGluc3RhbmNlIG9mIHRoZSBlbnRpdHkNCiAgICAgKiBAcGFyYW0gT3JtRXhhbXBsZSB0aGUgT2JqZWN0IE9ybUV4YW1wbGUgd2l0aCBzb21lIENyaXRlcmlhcyBpbnNpZGUNCiAgICAgKiANCiAgICAgKiBAc2VlIE9ybUV4YW1wbGUNCiAgICAgKiBAc2VlIE9ybVR5cGVDcml0ZXJpYQ0KICAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZGVsZXRlQnlFeGFtcGxlKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCBPcm1FeGFtcGxlICRPcm1FeGFtcGxlKSB7DQoNCgkJJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KDQoJCSRjcml0ZXJpYXMgPSAkT3JtRXhhbXBsZS0+Z2V0Q3JpdGVyaWFzKCk7DQoJCSRkZWxldGUgPSAiZGVsZXRlIGZyb20gIi4kZW50aXR5UGFyYW0tPmdldERibmFtZSgpOw0KCQkkaHFsID0gIiI7DQoJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRjcml0ZXJpYXMgYXMgJGNyaXRlcmlhKQ0KCQl7DQoJCSAgaWYoIWVtcHR5KCRocWwpKQ0KCQkgIHsNCgkJCSRocWwgLj0gJyBBTkQgJzsNCgkJICB9DQoJCSAgDQoJCSAgaWYoZW1wdHkoJGhxbCkpDQoJCSAgew0KCQkJJGhxbCAuPSAnIFdIRVJFICc7DQoJCSAgfQ0KDQoJCSAgJGZpbHRlclR5cGUgPSAkbGlzdGVGaWVsZFskY3JpdGVyaWEtPmZpZWxkbmFtZV0tPmdldFR5cGUoKTsNCgkJICANCgkJCQkvLyAxIHBhcmFtw6h0cmUgIA0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEVRIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5FUSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEdUIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEdURSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExUIHx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JExURSANCgkJCXx8ICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFRk9SRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiRBRlRFUg0KCQkJfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTElLRSB8fCAkY3JpdGVyaWEtPnR5cGVDcml0ZXJpYSA9PSBPcm1UeXBlQ3JpdGVyaWE6OiROTElLRSkNCgkJICB7ICANCgkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRjcml0ZXJpYS0+cGFyYW1zQ3JpdGVyaWFbMF0sICRmaWx0ZXJUeXBlKTsgDQoJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhLicgPyAnOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIA0KCQkJCS8vIDAgcGFyYW3DqHRyZQ0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JE5VTEwgfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTk5VTEwpDQoJCSAgeyAgDQoJCQkkaHFsIC49ICRjcml0ZXJpYS0+ZmllbGRuYW1lLiRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhOw0KCQkJY29udGludWU7DQoJCSAgfQ0KCQkgIA0KCQkJCS8vIDIgcGFyYW3DqHRyZXMgIA0KCQkgIGlmKCRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhID09IE9ybVR5cGVDcml0ZXJpYTo6JEJFVFdFRU4pDQoJCSAgeyAgDQoJCQkkcGFyYW1zW10gPSBPcm1Db3JlOjpGaWVsZFRvREJWYWx1ZSgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhWzBdLCAkZmlsdGVyVHlwZSk7IA0KCQkJJHBhcmFtc1tdID0gT3JtQ29yZTo6RmllbGRUb0RCVmFsdWUoJGNyaXRlcmlhLT5wYXJhbXNDcml0ZXJpYVsxXSwgJGZpbHRlclR5cGUpOyANCgkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEuJyA/IEFORCA/JzsNCgkJCWNvbnRpbnVlOw0KCQkgIH0NCgkJCQkNCgkJCQkvLyBOIHBhcmFtw6h0cmVzDQoJCQkJaWYoJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokSU4gfHwgJGNyaXRlcmlhLT50eXBlQ3JpdGVyaWEgPT0gT3JtVHlwZUNyaXRlcmlhOjokTklOKQ0KCQkJCXsNCgkJCQkJJGhxbCAuPSAnICggJzsNCgkJCQkJJHNlY29uZCA9IGZhbHNlOyANCgkJCQkJZm9yZWFjaCgkY3JpdGVyaWEtPnBhcmFtc0NyaXRlcmlhIGFzICRwYXJhbSkNCgkJCQkJew0KCQkJCQkJaWYoJHNlY29uZCkNCgkJCQkJCXsNCgkJCQkJCQkkaHFsIC49ICcgT1IgJzsNCgkJCQkJCX0NCgkJCQkJCSRwYXJhbXNbXSA9IE9ybUNvcmU6OkZpZWxkVG9EQlZhbHVlKCRwYXJhbSwgJGZpbHRlclR5cGUpOyANCgkJCQkJCSRocWwgLj0gJGNyaXRlcmlhLT5maWVsZG5hbWUuT3JtVHlwZUNyaXRlcmlhOjokRVEuJyA/ICc7DQoJCQkJCQkNCgkJCQkJCSRzZWNvbmQgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCSRocWwgLj0gJyApJzsNCgkJCQkJY29udGludWU7DQoJCQkJfSAgICAgICAgICAgICAgICAgICAgICAgIA0KCQkgIA0KCQkgIHRocm93IG5ldyBFeGNlcHRpb24oIkxlIE9ybUNyaXRlcmlhICRjcml0ZXJpYS0+dHlwZUNyaXRlcmlhIG4nZXN0IHBhcyBlbmNvcmUgcHJpcyBlbiBjaGFyZ2UiKTsNCgkJfQ0KCQkkcXVlcnlFeGFtcGxlID0gJGRlbGV0ZS4kaHFsOw0KCQkJCQkJCQkJCQ0KDQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5RXhhbXBsZSwgJHBhcmFtcyk7DQoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSl7ZGllKCJEYXRhYmFzZSBlcnJvciBkdXJhbnQgbGEgcmVxdWV0ZSBwYXIgT3JtRXhhbXBsZSEiKTt9DQoJfQ0KICAgICAgDQogICAgLyoqDQogICAgICogVHJhbnNmb3JtcyBhbiBhcnJheSBvZiB2YWx1ZSBpbnRvIGEgZW50aXJlIE9ybUVudGl0eS4gVGhlIGFycmF5IG11c3QgZmFsbG93IHRoaXMgc2NoZW1lDQogICAgICogDQogICAgICogRXhhbXBsZSA6DQogICAgICogDQogICAgICogPGNvZGU+DQogICAgICogICAgICAgJG15QXJyYXkxID0gYXJyYXkoJ2N1c3RvbWVyX2lkJz0+MSwgJ25hbWUnPT4nRHVwb250Jyk7ICAgICAgIA0KICAgICAqICAgICAgICRteUFycmF5MiA9IGFycmF5KCdjdXN0b21lcl9pZCc9PjIsICduYW1lJz0+J0R1cmFuZCcsICdsYXN0TmFtZSc9PidKb2UnKTsgICAgICAgDQogICAgICogICANCiAgICAgKiAgICAgICAkY3VzdG9tZXIgPSBNeUF1dG9sb2FkOjpnZXRJbnN0YW5jZSgkdGhpcy0+R2V0TmFtZSgpLCAnY3VzdG9tZXInKTsNCiAgICAgKiANCiAgICAgKiAgICAgICAkY3VzdG9tZXIxID0gT3JtQ29yZTo6cm93VG9FbnRpdHkoJGN1c3RvbWVyLCAkbXlBcnJheTEpOw0KICAgICAqICAgICAgICRjdXN0b21lcjIgPSBPcm1Db3JlOjpyb3dUb0VudGl0eSgkY3VzdG9tZXIsICRteUFycmF5Mik7DQogICAgICogDQogICAgICogICAgICAgZWNobyAkY3VzdG9tZXIxLT5nZXQoJ2xhc3ROYW1lJyk7IC8vcmV0dXJuIG51bGwNCiAgICAgKiAgICAgICBlY2hvICRjdXN0b21lcjItPmdldCgnbGFzdE5hbWUnKTsgLy9yZXR1cm4gSm9lDQogICAgICogDQogICAgICogPC9jb2RlPg0KICAgICAqICAgICAgICAgDQogICAgICogQHBhcmFtIE9ybUVudGl0eSBhbiBpbnN0YW5jZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIGFycmF5IHRoZSBsaXN0IHdpdGggdGhlIGRhdGENCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gcm93VG9FbnRpdHkgKE9ybUVudGl0eSAmJGVudGl0eVBhcmFtLCAkcm93KSB7DQoNCgkJT3JtVHJhY2U6OmRlYnVnKCJyb3dUb0VudGl0eSA6ICIucHJpbnRfcigkcm93LHRydWUpKTsNCgkJJGxpc3RlRmllbGQgPSAkZW50aXR5UGFyYW0tPmdldEZpZWxkcygpOw0KDQoJCSRuZXdFbnRpdHkgPSBjbG9uZSAkZW50aXR5UGFyYW07DQoJCWZvcmVhY2goJGxpc3RlRmllbGQgYXMgJGZpZWxkKQ0KCQl7DQoJCSAgaWYoISRmaWVsZC0+aXNBc3NvY2lhdGVLRVkoKSkNCgkJICB7DQoJCQkkbmV3RW50aXR5LT5zZXQoJGZpZWxkLT5nZXROYW1lKCksT3JtQ29yZTo6ZGJWYWx1ZVRvRmllbGQoJHJvd1skZmllbGQtPmdldE5hbWUoKV0sICRmaWVsZC0+Z2V0VHlwZSgpKSk7DQoJCSAgfSANCgkJfQ0KCQlyZXR1cm4gJG5ld0VudGl0eTsgIA0KCX0NCiAgDQogICAgLyoqDQogICAgICogVHJhbnNmb3JtIGEgUEhQIHZhbHVlIGludG8gYSBTUUwgdmFsdWUNCiAgICAgKiANCiAgICAgKiBAcGFyYW0gbWl4ZWQgdGhlIFBIUCB2YWx1ZQ0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgQ0FTVCB2YWx1ZQ0KICAgICAqIA0KICAgICAqIEBzZWUgQ0FTVA0KICAgICAqLw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIEZpZWxkVG9EQlZhbHVlKCRkYXRhLCAkdHlwZSkgew0KCQlpZigkZGF0YSA9PSBudWxsKXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCQ0KCQlzd2l0Y2goJHR5cGUpIHsNCgkJICBjYXNlIE9ybUNBU1Q6OiRTVFJJTkcgOiByZXR1cm4gJGRhdGE7DQoJCSAgY2FzZSBPcm1DQVNUOjokSU5URUdFUiA6IHJldHVybiAkZGF0YTsNCgkJICBjYXNlIE9ybUNBU1Q6OiROVU1FUklDIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JEJVRkZFUiA6IHJldHVybiAkZGF0YTsNCgkJICBjYXNlIE9ybUNBU1Q6OiRUUyA6IHJldHVybiAkZGF0YTsNCgkJICBjYXNlIE9ybUNBU1Q6OiRVVUlEIDogcmV0dXJuICRkYXRhOw0KCQkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JERBVEUgOiByZXR1cm4gc3RyX3JlcGxhY2UoIiciLCAiIiwgY21zbXMoKS0+R2V0RGIoKS0+REJEYXRlKCRkYXRhKSk7ICAgICAgIA0KDQoJCSAgY2FzZSBPcm1DQVNUOjokVElNRSA6IHJldHVybiBzdHJfcmVwbGFjZSgiJyIsICIiLCBjbXNtcygpLT5HZXREYigpLT5EQlRpbWVTdGFtcCgkZGF0YSkpOyAgIAkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JERBVEVUSU1FIDogcmV0dXJuICRkYXRhOw0KCQl9DQoJfQ0KICANCiAgICAvKioNCiAgICAgKiBUcmFuc2Zvcm0gYSBTUUwgdmFsdWUgaW50byBhIFBIUCB2YWx1ZQ0KICAgICAqIA0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgU1FMIHZhbHVlIA0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgQ0FTVCB2YWx1ZQ0KICAgICAqIA0KICAgICAqIEBzZWUgQ0FTVA0KICAgICAqLw0KCXByaXZhdGUgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGRiVmFsdWVUb0ZpZWxkKCRkYXRhLCAkdHlwZSkgew0KCQlzd2l0Y2goJHR5cGUpIHsNCgkJICBjYXNlIE9ybUNBU1Q6OiRTVFJJTkcgOiByZXR1cm4gJGRhdGE7CQkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JElOVEVHRVIgOiByZXR1cm4gJGRhdGE7CQkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JE5VTUVSSUMgOiByZXR1cm4gJGRhdGE7CQkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JEJVRkZFUiA6IHJldHVybiAkZGF0YTsJCSAgCQkgIA0KCQkgIGNhc2UgT3JtQ0FTVDo6JFRTIDogcmV0dXJuICRkYXRhOw0KCQkgIGNhc2UgT3JtQ0FTVDo6JFVVSUQgOiByZXR1cm4gJGRhdGE7DQoJCSAgDQoJCSAgY2FzZSBPcm1DQVNUOjokREFURSA6IHJldHVybiBjbXNtcygpLT5HZXREYigpLT5Vbml4RGF0ZSgkZGF0YSk7DQoJCSAgY2FzZSBPcm1DQVNUOjokVElNRSA6IHJldHVybiAkZGF0YTsvL3JldHVybiBjbXNtcygpLT5HZXREYigpLT5Vbml4VGltZVN0YW1wKCRkYXRhKTsNCgkJICBjYXNlIE9ybUNBU1Q6OiREQVRFVElNRSA6IHJldHVybiAkZGF0YTsNCg0KCQl9DQoJfQ0KICANCiAgICAvKioNCiAgICAgKiBWZXJpZnkgaW4gYWxsIHR5cGUgb2YgZW50aXRpZXMgaWYgYW55b25lIHN0aWxsIGhhcyBhIGxpbmsgd2l0aCB0aGUgT3JtRW50aXR5IHBhc3NlZCBpbiBwYXJhbWV0ZXJzIChGb3JlaWduS0V5IGFuZCBBc3NvY2lhdGVLZXkpDQogICAgICogDQogICAgICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB0aGUgZGVsZXRlKiBmdW5jdGlvbnMgdG8gYXZvaWQgb3JwaGFucyBkYXRhIGluIGRhdGFiYXNlDQogICAgICogDQoJICogQHBhcmFtIE9ybSB0aGUgbW9kdWxlIHdoaWNoIGV4dGVuZHMgdGhlIE9ybSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAqIEBwYXJhbSBPcm1FbnRpdHkgYW4gaW5zdGFuY2Ugb2YgdGhlIGVudGl0eQ0KICAgICAqIEBwYXJhbSBtaXhlZCB0aGUgaWQgb2YgdGhlIE9ybUVudGl0eSB0byB2ZXJpZnkNCgkgKg0KCSAqIEByZXR1cm4gYSBtZXNzYWdlIGlmIGEgbGluayBpcyBzdGlsbCBwcmVzZW50LiBub3RoaW5nIGlmIHRoZSBpbnRlZ3JpdHkgaXMgb2sNCiAgICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIHZlcmlmSW50ZWdyaXR5KE9ybUVudGl0eSAmJGVudGl0eSwgJHNpZCkgew0KCQkkbGlzdGVFbnRpdHlzID0gTXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSk7DQoNCgkJZm9yZWFjaCgkbGlzdGVFbnRpdHlzIGFzICRrZXk9PiRhbkVudGl0eSkgew0KCQkgIGlmKCRhbkVudGl0eSBpbnN0YW5jZU9mIEVudGl0eUFzc29jaWF0aW9uKQ0KCQkJY29udGludWU7DQoJCQkNCgkJICBmb3JlYWNoKCRhbkVudGl0eS0+Z2V0RmllbGRzKCkgYXMgJGZpZWxkKSB7DQoJCQlpZigkZmllbGQtPmlzQXNzb2NpYXRlS0VZKCkpIHsNCgkJCSAgY29udGludWU7DQoJCQl9DQoJCQkNCgkJCWlmKCRmaWVsZC0+Z2V0S0VZTmFtZSgpICE9IG51bGwpIHsNCgkJCSAgJHZhbHMgPSBleHBsb2RlKCcuJywkZmllbGQtPmdldEtFWU5hbWUoKSwyKTsNCgkJCSAgDQoJCQkgIGlmKHN0cnRvbG93ZXIgKCR2YWxzWzBdKSA9PSBzdHJ0b2xvd2VyICgkZW50aXR5LT5nZXROYW1lKCkpKSAgew0KCQkJCSRPcm1FeGFtcGxlID0gbmV3IE9ybUV4YW1wbGUoKTsNCgkJCQkkT3JtRXhhbXBsZS0+YWRkQ3JpdGVyaWEoJGZpZWxkLT5nZXROYW1lKCksIE9ybVR5cGVDcml0ZXJpYTo6JEVRLCBhcnJheSgkc2lkKSk7DQoJCQkJJGVudGl0eXMgPSBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKCRhbkVudGl0eSwgJE9ybUV4YW1wbGUpOw0KCQkJCWlmKGNvdW50KCRlbnRpdHlzKSA+IDApDQoJCQkJew0KCQkJCSAgcmV0dXJuICJMYSBsaWduZSAmYWdyYXZlOyBzdXBwcmltZXIgZXN0IGVuY29yZSB1dGlsaXMmZWFjdXRlO2UgcGFyICZsYXF1bzsgIi4kYW5FbnRpdHktPmdldE5hbWUoKS4iICZyYXF1bzsiOw0KCQkJCX0NCgkJCSAgfQ0KCQkJfQ0KCQkgIH0NCgkJfQ0KDQoJCXJldHVybjsNCg0KCX0NCg0KICAgIC8qKg0KICAgICAqIEFsbG93IHJlYWxpc2UgZGVlcCBzZWFyY2ggb24gZGlmZmVyZW50IHR5cGUgb2YgT3JtRW50aXR5IGxpbmtlZCB0b2dldGhlcg0KICAgICAqIA0KICAgICAqIEV4YW1wbGUgOiANCiAgICAgKiAgIEFuIE9yZGVyIGhhcyBhIGxpbmsgdG8gYSBDdXN0b21lciAoT3JkZXIuY3VzdG9tZXJfaWQpDQogICAgICogICBBIEN1c3RvbWVyIGhhcyBhIGxpbmsgdG8gYW4gQWRkcmVzcyAoQ3VzdG9tZXIuYWRkcmVzc2VfaWQpDQogICAgICogICBBbiBBZGRyZXNzIGhhcyBhIGxpbmsgdG8gYSBjaXR5IChBZGRyZXNzLmNpdHlfaWQpDQoJICogICBBIGNpdHkgaGFzIGEgWmlwQ29kZSAobWF5YmUgc2hhcmVkIGJ5IGRpZmZlcmVudCBjaXRpZXMpDQogICAgICogDQogICAgICogIElmIGkgd2FudCB0aGUgT3JkZXJzIGZvciBDdXN0b21lcnMgZnJvbSB0aGUgY2l0eSB3aXRoIHppcGNvZGUgZXF1YWxzIHRvICIwMTIzNCIgb3IgIjQ1NjciIEkgY291bGQgd3JpdGUgc29tZSBzaGl0dHkgY29kZSAhDQogICAgICogDQogICAgICogPGNvZGU+DQogICAgICogICRjaXRpZXMgPSAvL0ZpbmQgbXkgY2l0aWVzIHdpdGggWmlwQ29kZSAiMDEyMzQiIG9yICI0NTY3Ig0KICAgICAqICBmb3JlYWNoKCRjaXRpZXMgYXMgJGNpdHkpDQogICAgICogIHsNCiAgICAgKiAgICAgICAkYWRkcmVzc2VzID0gLy9GaW5kIHRoZSBhZGRyZXNzIGZvciB0aGUgY2l0eSAkY2l0eQ0KICAgICAqICAgICAgIGZvcmVhY2goJGFkZHJlc3NlcyBhcyAkYWRkcmVzcykNCiAgICAgKiAgICAgICB7DQogICAgICogICAgICAgICAgICRjdXN0b21lcnMgPSAvL0ZpbmQgdGhlIEN1c3RvbWVycyBmb3IgdGhlIGFkZHJlc3MgJGFkZHJlc3MNCiAgICAgKiAgICAgICAgICAgZm9yZWFjaCgkY3VzdG9tZXJzIGFzICRjdXN0b21lcikNCiAgICAgKiAgICAgICAgICAgew0KICAgICAqICAgICAgICAgICAgICAgJGNvbW1hbmRlcyA9ICAvL0ZpbmQgVHJhaXRlbWVudCBkZSByZWNoZXJjaGUgZCd1bmUgY29tbWFuZGUgcG9zc8OoZGFudCBsZSBudW1lcm9jbGllbnQgPSAkY3VzdG9tZXItPmdldCgnbnVtZXJvY2xpZW50JykgICANCiAgICAgKiAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICANCiAgICAgKiAgICAgICB9ICAgICAgICAgICAgICAgICAgDQogICAgICogIH0NCiAgICAgKiANCiAgICAgKiAgPC9jb2RlPg0KICAgICAqIA0KICAgICAqICBJIGNvdWxkIGFsc28gd3JpdGUgYSBiZXR0ZXIgY29kZSA6IA0KICAgICAqIA0KICAgICAqIDxjb2RlPg0KCSAqICAgJG9yZGVyID0gTXlBdXRvbG9hZDo6Z2V0SW5zdGFuY2UoJHRoaXMtPkdldE5hbWUoKSwgJ29yZGVyJyk7DQogICAgICogICAkb3JkZXJzID0gT3JtQ29yZTo6bWFrZURlZXBTZWFyY2gob3JkZXIsICdPcmRlci5jdXN0b21lcl9pZC5hZGRyZXNzX2lkLmNpdHlfaWQuemlwY29kZScsIGFycmF5KCcwMTIzNCcsICc0NTY3JykpOw0KICAgICAqIDwvY29kZT4NCiAgICAgKiANCiAgICAgKiBAcGFyYW0gT3JtRW50aXR5IFRoZSBlbnRpdHkgaSB3YW50IHRvIGhhdmUgYXQgdGhlIGVuZA0KICAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIHBhdGggdG8gZmFsbG93LiBNdXN0IGJlIGVuZGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIEZpZWxkIHRvIG1ha2UgdGhlIGNvbXBhcmFpc29uDQogICAgICogQHBhcmFtIGFycmF5IHRoZSBhcnJheSBvZiB2YWx1ZSB0byBtYWtlIHRoZSBjb21wYXJhaXNvbg0KICAgICAqIA0KICAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gbWFrZURlZXBTZWFyY2goT3JtRW50aXR5ICRwcmV2aW91c0VudGl0eSwgJGNsZSwgJHZhbHVlcykgeyAgICANCgkJVFJBQ0U6OmluZm8oIiMgOiAiLiJTdGFydCBtYWtlRGVlcFNlYXJjaCgpICIuJHByZXZpb3VzRW50aXR5LT5nZXROYW1lKCkuIi0+Ii4kY2xlKTsNCg0KCQlpZigkcHJldmlvdXNFbnRpdHkgPT0gbnVsbCkNCgkJew0KCQkgIA0KCQkgICRuZXdDbGUgPSBleHBsb2RlKCcuJywkY2xlLDIpOw0KCQkgICRwcmV2aW91c0VudGl0eSA9ICRuZXdDbGVbMF07DQoJCSAgJGNsZSA9ICRuZXdDbGVbMV07DQoJCSAgJHByZXZpb3VzRW50aXR5ID0gbmV3ICRwcmV2aW91c0VudGl0eSgpOw0KCQl9DQoNCgkJJG5ld0NsZSA9IGV4cGxvZGUoJy4nLCRjbGUsMik7DQoJCSRmaWVsZG5hbWUgPSAkbmV3Q2xlWzBdOw0KDQoJCS8vVGVzdCBkZSBzb3J0aWUgOiBvbiBhIHVuIHNldWwgcsOpc3VsdGF0IGRhbnMgJG5ld0NsZSA6IGxlIGNoYW1wcyBmaW5hbA0KCQlpZihjb3VudCgkbmV3Q2xlKSA9PSAxKQ0KCQl7DQoJCSAgVFJBQ0U6OmluZm8oIiMgOiAiLiIgY291bnQoXCRuZXdDbGUpID09IDEgLCBkb25jIHNvcnRpZSAiKTsNCgkJICAkT3JtRXhhbXBsZSA9IG5ldyBPcm1FeGFtcGxlOw0KCQkgICRPcm1FeGFtcGxlLT5hZGRDcml0ZXJpYSgkZmllbGRuYW1lLCBPcm1UeXBlQ3JpdGVyaWE6OiRJTiwgJHZhbHVlcyk7DQoJCSAgJGVudGl0eXMgPSBPcm1Db3JlOjpmaW5kQnlFeGFtcGxlKCRwcmV2aW91c0VudGl0eSwgJE9ybUV4YW1wbGUpOw0KCQkgIFRSQUNFOjppbmZvKCIjIDogIi5jb3VudCgkZW50aXR5cykuIiBSJmVhY3V0ZTtzdWx0YXQocykgcmV0b3VybiZlYWN1dGU7cyIpOw0KCQkgIHJldHVybiAkZW50aXR5czsNCgkJfSBlbHNlDQoJCXsNCgkJICBUUkFDRTo6aW5mbygiIyA6ICIuIiBwb3Vyc3VpdGUgIik7DQoJCX0NCg0KCQkvL1LDqWN1cMOpcmF0aW9uIGRlIGxhIGNsw6kgZGlzdGFuY2UgcG91ciB1bmUgRksNCgkJJGZpZWxkID0gJHByZXZpb3VzRW50aXR5LT5nZXRGaWVsZEJ5TmFtZSgkZmllbGRuYW1lKTsNCgkJaWYoJGZpZWxkLT5pc0ZvcmVpZ25LRVkoKSB8fCAkZmllbGQtPmlzQXNzb2NpYXRlS2V5KCkpDQoJCXsNCgkJICAkZm9yZWlnbktFWSA9IGV4cGxvZGUoJy4nLCRmaWVsZC0+Z2V0S0VZTmFtZSgpLDIpOw0KCQkgICRuZXh0RW50aXR5ID0gbmV3ICRmb3JlaWduS0VZWzBdKCk7DQoJCX0gDQoNCgkJaWYoJGZpZWxkLT5pc0Fzc29jaWF0ZUtleSgpKQ0KCQl7DQoJCSAgJGNsZSA9IGV4cGxvZGUoJy4nLCRuZXdDbGVbMV0sMik7DQoJCSAgJGNsZSA9ICRjbGVbMV07DQoJCX0gZWxzZQ0KCQl7DQoJCSAgJGNsZSA9ICRuZXdDbGVbMV07DQoJCX0gDQoJCQ0KCQlUUkFDRTo6aW5mbygiIyA6ICIuIiBtYWtlIG5ldyByZWNoZXJjaGUgOiAiLiRuZXh0RW50aXR5LT5nZXROYW1lKCkgLiIgLCAiLiAkY2xlKTsNCg0KCQkkZW50aXR5cyA9IE9ybUNvcmU6Om1ha2VEZWVwU2VhcmNoKCRuZXh0RW50aXR5LCAkY2xlLCAkdmFsdWVzKTsNCg0KCQlpZihjb3VudCgkZW50aXR5cykgPT0gMCkNCgkJew0KCQkgIHJldHVybiBhcnJheSgpOw0KCQl9DQoNCgkJaWYoJG5leHRFbnRpdHkgaW5zdGFuY2VvZiBFbnRpdHlBc3NvY2lhdGlvbikNCgkJeyAgDQoJCSAgJGZpZWxkcyA9ICRuZXh0RW50aXR5LT5nZXRGaWVsZHMoKTsNCgkJICAkbm9tRmllbGRTdWl2aXQgPSBleHBsb2RlKCcuJywkY2xlLDIpOw0KCQkgICRub21GaWVsZFN1aXZpdCA9ICRub21GaWVsZFN1aXZpdFswXTsNCgkJICAkbm9tRmllbGRSZXRvdXIgPSAiTi9BIjsNCgkJICBmb3JlYWNoKCRmaWVsZHMgYXMgJGFmaWVsZCkNCgkJICB7DQoJCQlpZigkYWZpZWxkLT5nZXROYW1lKCkgPT0gJG5vbUZpZWxkU3Vpdml0KQ0KCQkJew0KCQkJICBjb250aW51ZTsNCgkJCX0NCgkJCSRub21GaWVsZFJldG91ciA9ICRhZmllbGQ7DQoJCSAgfQ0KCQkgIA0KCQl9DQoNCgkJJGlkcyA9IGFycmF5KCk7DQoJCWZvcmVhY2goJGVudGl0eXMgYXMgJGFuRW50aXR5KQ0KCQl7DQoJCSAgVFJBQ0U6OmluZm8oIk9uIGEgdHJvdXYmZWFjdXRlOyAgOiAiLiRhbkVudGl0eS0+Z2V0TmFtZSgpLiIiKTsNCgkJICBpZigkYW5FbnRpdHkgaW5zdGFuY2VvZiBFbnRpdHlBc3NvY2lhdGlvbikNCgkJICB7DQoJCQkkdmFsdWUgPSAkYW5FbnRpdHktPmdldCgkbm9tRmllbGRSZXRvdXItPmdldE5hbWUoKSk7DQoJCQkkaWRzW10gPSAkdmFsdWU7DQoJCQlUUkFDRTo6aW5mbygiIHZhbGV1ciBhc3NvYyA6ICIuJHZhbHVlLiIgcG91ciBsZSBjaGFtcHMgIi4kbm9tRmllbGRSZXRvdXItPmdldE5hbWUoKSk7DQoJCSAgfSBlbHNlDQoJCSAgew0KCQkJJHZhbHVlID0gJGFuRW50aXR5LT5nZXQoJG5leHRFbnRpdHktPmdldFBrKCktPmdldE5hbWUoKSk7DQoJCQkkaWRzW10gPSAkdmFsdWU7DQoJCQlUUkFDRTo6aW5mbygiIHZhbGV1ciBpZCA6ICIuJHZhbHVlKTsNCgkJICB9DQoJCSAgDQoJCX0NCg0KDQoJCSRPcm1FeGFtcGxlID0gbmV3IE9ybUV4YW1wbGU7DQoJCWlmKCRuZXh0RW50aXR5IGluc3RhbmNlb2YgRW50aXR5QXNzb2NpYXRpb24pDQoJCXsNCgkJICAkT3JtRXhhbXBsZS0+YWRkQ3JpdGVyaWEoJHByZXZpb3VzRW50aXR5LT5nZXRQaygpLT5nZXROYW1lKCksIE9ybVR5cGVDcml0ZXJpYTo6JElOLCAkaWRzKTsNCgkJfSBlbHNlDQoJCXsNCgkJICAkT3JtRXhhbXBsZS0+YWRkQ3JpdGVyaWEoJGZpZWxkbmFtZSwgT3JtVHlwZUNyaXRlcmlhOjokSU4sICRpZHMpOw0KCQl9DQoJCSRlbnRpdHlzID0gT3JtQ29yZTo6ZmluZEJ5RXhhbXBsZSgkcHJldmlvdXNFbnRpdHksICRPcm1FeGFtcGxlKTsNCg0KCQlyZXR1cm4gJGVudGl0eXM7DQoJfQ0KICANCgkvKioNCgkgKiBXaWxsIHJldHVybiBhIFVVSUQgOiBhIHVuaXF1ZSBpZGVudGlmaWVyDQoJICogQHNpbmNlIDAuMC4yDQoJICovDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQoKXsNCgkJICRkYiA9IGNtc21zKCktPkdldERiKCk7DQoNCgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgnU0VMRUNUIFVVSUQoKSBBUyB1dWlkOycpOw0KDQoJCSRyb3c9JHJlc3VsdC0+RmV0Y2hSb3coKTsNCg0KCQlyZXR1cm4gJHJvd1sndXVpZCddOw0KCX0NCn0NCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormcriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgQ3JpdGVyaWEgY2xhc3MNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KIA0KDQovKioNCiAqIEJhY2tib25lIGZvciBDcml0ZXJpYSBpbnRvIHRoZSBPcm0gc3lzdGVtDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KLypmaW5hbCAqL2NsYXNzIE9ybUNyaXRlcmlhDQp7DQoJLyoqDQoJICogTmFtZSBvZiB0aGUgZmllbGQgDQoJICovDQoJcHVibGljICRmaWVsZG5hbWU7DQoJDQoJLyoqDQoJICogVHlwZSBvZiBDcml0ZXJpYQ0KCSAqLw0KCXB1YmxpYyAkdHlwZUNyaXRlcmlhOw0KCQ0KCS8qKg0KCSAqIFBhcmFtZXRlcnMgZm9yIHRoZSB0eXBlIG9mIENyaXRlcmlhDQoJICovDQoJcHVibGljICRwYXJhbXNDcml0ZXJpYTsNCgkNCgkvKioNCgkgKiBCb29sZWFuIGlmIHdlIG11c3QgaWdub3JlIGNhc2UNCgkgKi8NCglwdWJsaWMgJGlnbm9yZUNhc2U7DQoJDQogICAgLyoqDQogICAgKiBQdWJsaWMgQ29uc3RydWN0b3INCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyBOYW1lIG9mIHRoZSBmaWVsZCANCiAgICAqIEBwYXJhbSBUeXBlQ3JpdGVyaWEgVHlwZSBvZiBDcml0ZXJpYQ0KICAgICogQHBhcmFtIGFycmF5IGFsbCB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgcGFyYW1ldGVyICR0eXBlQ3JpdGVyaWENCiAgICAqIEBwYXJhbSBib29sZWFuIFtPcHRpb25hbF0gaWYgd2UgbXVzdCBpZ25vcmUgdGhlIGNhc2UgKGF6ZSBlcXVhbHMgQVpFKSBvciBub3QuIERlZmF1bHQgdmFsdWUgaXMgImZhbHNlIg0KICAgICoNCgkqIEByZXR1cm4gQ3JpdGVyaWEgYSBDcml0ZXJpYQ0KCSoNCgkqIEBzZWUgVHlwZUNyaXRlcmlhDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpZWxkbmFtZSwgJHR5cGVDcml0ZXJpYSwgJHBhcmFtc0NyaXRlcmlhLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJJHRoaXMtPmZpZWxkbmFtZSA9ICRmaWVsZG5hbWU7DQoJCSR0aGlzLT50eXBlQ3JpdGVyaWEgPSAkdHlwZUNyaXRlcmlhOw0KCQkkdGhpcy0+cGFyYW1zQ3JpdGVyaWEgPSAkcGFyYW1zQ3JpdGVyaWE7DQoJCSR0aGlzLT5pZ25vcmVDYXNlID0gJGlnbm9yZUNhc2U7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormentity.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIE9ybUVudGl0eQ0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCi8qKg0KICogQWJzdHJhY3QgQ2xhc3NlcyBkZXNjcmliaW5nIHRoZSBmcmFtZSBvZiBhbiBFbnRpdHkgaW50byBPcm0NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQphYnN0cmFjdCBjbGFzcyBPcm1FbnRpdHkNCnsNCgkvKioNCgkgKiBTdHJpbmcgOiBOYW1lIG9mIHRoZSBtb2R1bGUgdGhhdCBjdXJyZW50bHkgdXNlIHRoaXMgZW50aXR5DQoJICogKi8NCglwcml2YXRlICRtb2R1bGVOYW1lOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IHRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoZSBlbnRpdHkNCgkgKiAqLw0KCXByb3RlY3RlZCAkbmFtZTsNCg0KCS8qKg0KCSAqIFN0cmluZyA6IHRoZSBuYW1lIG9mIHRoZSB0YWJsZSBpbiBkYXRhYmFzZQ0KCSAqICovDQoJcHJpdmF0ZSAkZGJuYW1lOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IG5hbWUgb2YgdGhlIHNlcXVlbmNlIGxpbmtlZCB0byB0aGUgdGFibGUgaW4gdGhlIGRhdGFiYXNlLiBNYXkgYmUgTnVsbA0KCSAqICovDQoJcHJpdmF0ZSAkc2VxbmFtZTsNCgkNCgkvKioNCgkgKiBsaXN0IDogZmllbGRzIG1ha2luZyB1cCB0aGUgZW50aXR5DQoJICogKi8NCglwcml2YXRlICRmaWVsZHMgPSBhcnJheSgpOw0KCQ0KCS8qKg0KCSAqIGxpc3QgOiB2YWx1ZXMgb2YgZWFjaCBmaWVsZHMNCgkgKiAqLw0KCXByaXZhdGUgJHZhbHVlcyA9IGFycmF5KCk7DQoJDQoJLyoqDQoJICogU3RyaW5nIDogTmFtZSBvZiB0aGUgZmllbGQgd2ljaCB3aWxsIGJlIHVzZWQgYXMgYSBwcmltYXJ5S2V5DQoJICogKi8NCglwcml2YXRlICRwazsNCgkNCgkvKioNCgkgKiBCb29sZWFuIDogaWYgdHJ1ZSB0aGUgZnJhbWV3b3JrIHdpbGwgdHJ5IHRvIHVzZSB0aGUgaW5uZXIgYXV0b2luY3JlbWVudCBvZiBNeXNxbCBpbnN0ZWFkIGdlbmVyYXRlIGEgbmV3IHRhYmxlIHh4eF9zZXEgbGlrZSB1c3VhbA0KCSAqLw0KCXByaXZhdGUgJGF1dG9pbmNyZW1lbnQgPSBmYWxzZTsNCgkNCgkvKioNCgkgKiBBcnJheSwgY29udGFpbnMgYWxsIHRoZSB1bmlxdWVLZXlzIGZvciBvbmUgb3IgbW9yZSBjb2x1bW5zLg0KCSAqKi8JIA0KCXByaXZhdGUgJHVuaXF1ZUtleXMgPSBhcnJheSgpOw0KCQ0KCS8qKg0KCSAqIFN0cmluZyA6IGNvbnN0YW50LCBzdWZmaXggZm9yIHRoZSBzZXF1ZW5jZSBuYW1lIGludG8gdGhlIGRhdGFiYXNlDQoJICogKi8NCglwdWJsaWMgc3RhdGljICRfQ09OU1RfU0VRID0gJ19zZXEnOw0KCS8qKg0KCSAqIFN0cmluZyA6IGNvbnN0YW50LCBzdWZmaXggdXNlZCB0byBuYW1tZWQgdGhlIHRhYmxlIGludG8gZGF0YWJhc2UgZm9yIGEgbW9kdWxlDQoJICogKi8NCglwdWJsaWMgc3RhdGljICRfQ09OU1RfTU9EID0gJ21vZHVsZSc7DQoJDQoJDQoJDQogICAgLyoqDQogICAgICogY29uc3RydWN0b3IgcHJvdGVjdGVkIHRvIGF2b2lkIGEgZGlyZWN0IGluc3RhbmNpYXRpb24gbGlrZSAibmV3IEVudGl0eSgpIg0KICAgICAqIEVhY2ggdGltZSBhIGVudGl0eSBpcyBjb25zdHJ1Y3RlZCwgd2UgcGxhY2UgYSBjb3B5IGludG8gdGhlIGF1dG9sb2FkZXIuDQogICAgICogDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdobyBjYWxsaW5nIHRoaXMgbWV0aG9kIChzbyBub3QgIk9ybSIpDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFByZWZpeCB0byB1c2UgaW50byBkYXRhYmFzZSBmb3IgdGFibGUuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlDQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFRoZSBuYW1lIG9mIHRhYmxlIGZvciB0aGlzIGVudGl0eS4gSWYgbm90IHNldHRlZCwgaXQgd2lsbCB1c2UgdGhlIG5hbWUgb2YgeW91ciBlbnRpdHkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gRW50aXR5IHRoZSBlbnRpdHkgYXMgYSBuZXcgaW5zdGFuY2UNCiAgICAgKiANCiAgICAgKiBAc2VlIE15QXV0b2xvYWQNCiAgICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCAkcHJlZml4ZSA9IG51bGwsICRkYk5hbWUgPSBudWxsKSB7DQoJCSR0aGlzLT5tb2R1bGVOYW1lID0gc3RydG9sb3dlcigkbW9kdWxlTmFtZSk7DQoJCSR0aGlzLT5uYW1lID0gc3RydG9sb3dlcigkbmFtZSk7DQoJCQ0KCQkkdGhpcy0+ZGJuYW1lID0gJHRoaXMtPm5hbWU7DQoJCWlmKCFlbXB0eSgkZGJOYW1lKSkgew0KCQkJJHRoaXMtPmRibmFtZSA9IHN0cnRvbG93ZXIoJGRiTmFtZSk7DQoJCX0NCgkJDQoJCWlmKGVtcHR5KCRwcmVmaXhlKSkgew0KCQkJJHByZWZpeGUgPSAkdGhpcy0+bW9kdWxlTmFtZTsNCgkJfSBlbHNlIHsNCgkJCSRwcmVmaXhlID0gc3RydG9sb3dlcigkcHJlZml4ZSk7DQoJCX0NCgkJDQoJCSR0aGlzLT5kYm5hbWUgPSBjbXNfZGJfcHJlZml4KCkuT3JtRW50aXR5OjokX0NPTlNUX01PRC4nXycuJHByZWZpeGUuJ18nLiR0aGlzLT5kYm5hbWU7DQoJCQ0KCQkvLyBXZSBhZGQgYW4gaW5zdGFuY2Ugb2Ygb3VyLXNlcmYgaW50byB0aGUgYXV0b2xvYWQNCgkJbXlBdXRvbG9hZDo6YWRkSW5zdGFuY2UoJHRoaXMtPm1vZHVsZU5hbWUsJHRoaXMpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqICBDYW4gYmUgb3ZlcnJpZGUuIExldCB5b3Ugc3BlY2lmeSBob3cgeW91ciB0YWJsZSBtdXN0IGJlIHBvcHVsYXRlZCANCiAgICAqIGFmdGVyIHlvdSBhc2tlZCB0byBjcmVhdGUgdGhlIHRhYmxlIG9mIHlvdXIgRW50aXR5DQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaW5pdFRhYmxlKCl7fQ0KICAgIAkNCiAgICAvKioNCiAgICAqIEFkZCBhIG5ldyBGaWVsZCBpbnRvIHRoZSBsaXN0IG9mIEZpZWxkcw0KICAgICogDQogICAgKiBAcGFyYW0gRmllbGQgdGhlIG9iamVjdCBGaWVsZCB0byBhZGQNCgkqIA0KCSogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBpZiB3ZSB0cnkgdG8gdXNlIG1vcmUgdGhhbiBhIHNpbmdsZSBQcmltYXJ5S2V5IGluIHRoZSBlbnRpdHkNCiAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhZGQoT3JtRmllbGQgJG5ld0ZpZWxkKSB7DQoJCSR0aGlzLT5maWVsZHNbJG5ld0ZpZWxkLT5nZXROYW1lKCldID0gJG5ld0ZpZWxkOw0KDQoJCS8vQWRkIGEgc2VxdWVuY2Ugb24gdGhlIGtleXMNCgkJaWYoJG5ld0ZpZWxkLT5pc1ByaW1hcnlLRVkoKSkgew0KCQkJaWYoJHRoaXMtPnBrICE9IG51bGwpDQoJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCJPcm0gZG9lc24ndCBzdXBwb3J0IG11bHRpLVByaW1hcnktS2V5IGludG8gdGhlIEVudGl0eSAiLiR0aGlzLT5uYW1lKTsNCgkJCQkNCgkJCSR0aGlzLT5wayA9ICRuZXdGaWVsZC0+Z2V0TmFtZSgpOw0KCQkJaWYoISR0aGlzLT5pc0F1dG9pbmNyZW1lbnQoKSkgeyAvLyBubyBzZXF1ZW5jZSBpZiBhdXRvaW5jcmVtZW50IHVzZWQNCiAgICAgICAgICAgICAgICAkdGhpcy0+c2VxbmFtZSA9ICR0aGlzLT5kYm5hbWUuT3JtRW50aXR5OjokX0NPTlNUX1NFUTsNCiAgICAgICAgICAgIH0NCgkJfQ0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgUHJpbWFyeUtleSBGaWVsZA0KICAgICogDQogICAgKiBAcmV0dXJuIEZpZWxkIHRoZSBQcmltYXJ5S2V5IEZpZWxkDQogICAgKiBAZXhjZXB0aW9uIE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyBQcmltYXJ5S2V5IEZpZWxkDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGsoKSB7DQoJCWlmKCR0aGlzLT5wayA9PSBudWxsKQ0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBkb2Vzbid0IGhhdmUgYW55IFByaW1hcnktS2V5Iik7DQoJCQ0KCQlyZXR1cm4gJHRoaXMtPmZpZWxkc1skdGhpcy0+cGtdOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgbGlzdCBvZiBGaWVsZHMNCiAgICAqIA0KICAgICogQHJldHVybiBhcnJheTxGaWVsZD4gYW4gYXJyYXkgd2l0aCBhbGwgdGhlIEZpZWxkcw0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RmllbGRzKCkgew0KCQlyZXR1cm4gJHRoaXMtPmZpZWxkczsNCgl9DQoJDQogICAgLyoqDQogICAgKiByZXR1cm4gYSBGaWVsZCBieSBuYW1lDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgdGhlIG5hbWUNCiAgICAqIEByZXR1cm4gRmllbGQgdGhlIEZpZWxkDQogICAgKiANCiAgICAqIEBleGNlcHRpb24gT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIG5vIEZpZWxkIGV4aXN0IGZvciB0aGUgbmFtZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkQnlOYW1lKCRuYW1lKSB7DQoJCWlmKGlzc2V0KCR0aGlzLT5maWVsZHNbJG5hbWVdKSkNCgkJCXJldHVybiAkdGhpcy0+ZmllbGRzWyRuYW1lXTsNCgkJDQoJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBmaWVsZCAkbmFtZSBkb2Vzbid0IGV4aXN0IGludG8gdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0cnVlIGlmIGEgRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQ0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBuYW1lDQogICAgKiBAcmV0dXJuIEJvb2xlYW4gaWYgZXhpc3RzDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNGaWVsZEJ5TmFtZUV4aXN0cygkbmFtZSkgew0KCQlyZXR1cm4gaXNzZXQoJHRoaXMtPmZpZWxkc1skbmFtZV0pOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgdGFibGUgaW50byB0aGUgZGF0YWJhc2UNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlIG5hbWUgb2YgdGhlIHRhYmxlIGludG8gdGhlIGRhdGFiYXNlDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXREYm5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+ZGJuYW1lOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+bmFtZTsNCgl9DQoJDQoJLyoqDQoJICogIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBtb2R1bGUNCgkgKiAgDQoJICogIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IG1vZHVsZS4NCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZU5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+bW9kdWxlTmFtZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNlcXVlbmNlIChpZiBleGlzdHMpDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBzZXF1ZW5jZSBvciBOVUxMDQogICAgKiANCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXFuYW1lKCkgew0KCQlpZihlbXB0eSgkdGhpcy0+c2VxbmFtZSkpDQoJCQlyZXR1cm4gbnVsbDsNCgkJDQoJCXJldHVybiAkdGhpcy0+c2VxbmFtZTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBSZXR1cm4gdGhlIHZhbHVlIGZvciBhIEZpZWxkIGJ5IHRoZSBuYW1lIA0KICAgICogCQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgRmllbGQNCiAgICAqIEByZXR1cm4gbWl4ZWQgdGhlIHZhbHVlIGZvciB0aGUgZmllbGQNCiAgICAqIA0KICAgICogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbm8gRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldCgkZmllbGROYW1lKSB7DQoNCgkJJGZpZWxkbmFtZVNpZCA9ICRmaWVsZE5hbWU7DQoJCWlmKCFhcnJheV9LRVlfZXhpc3RzKCRmaWVsZE5hbWUsJHRoaXMtPmZpZWxkcykgJiYgIWFycmF5X0tFWV9leGlzdHMoJGZpZWxkbmFtZVNpZCwkdGhpcy0+ZmllbGRzKSkgew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZm9uY3Rpb24gR2V0IDogRmllbGQgJGZpZWxkTmFtZSBub3QgZm91bmQgZm9yIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQl9DQoJCQ0KCQlpZighaXNzZXQoJHRoaXMtPnZhbHVlc1skZmllbGROYW1lXSkpIHsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoJCQ0KCQlyZXR1cm4gJHRoaXMtPnZhbHVlc1skZmllbGROYW1lXTsNCgl9DQoJDQogICAvKioNCiAgICAqIFNldCBhIHZhbHVlIHRvIGEgRmllbGQNCiAgICAqICAgICANCiAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIG5hbWUgb2YgdGhlIEZpZWxkDQogICAgKiBAcGFyYW0gbWl4ZWQgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgRmllbGQNCiAgICAqIA0KICAgICogQGV4Y2VwdGlvbiBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgbm8gRmllbGQgZXhpc3RzIGZvciB0aGUgbmFtZQ0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIHNldCgkZmllbGROYW1lLCR2YWx1ZSkgew0KCQkkZmllbGRuYW1lU2lkID0gZXhwbG9kZSgiX3NpZCIsICRmaWVsZE5hbWUpOw0KCQkkZmllbGRuYW1lU2lkID0gJGZpZWxkbmFtZVNpZFswXTsNCgkJaWYoIWFycmF5X0tFWV9leGlzdHMoJGZpZWxkTmFtZSwkdGhpcy0+ZmllbGRzKSAmJiAhYXJyYXlfS0VZX2V4aXN0cygkZmllbGRuYW1lU2lkLCR0aGlzLT5maWVsZHMpKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmdW5jdGlvbiBTZXQgOiBGaWVsZCAkZmllbGROYW1lIG5vdCBmb3VuZCBpbnRvIHRoZSBlbnRpdHkiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQl9DQoJCQ0KCQkkdGhpcy0+dmFsdWVzWyRmaWVsZE5hbWVdID0gJHZhbHVlOw0KCX0NCgkNCiAgICAvKioNCiAgICAqIFJldHVybiB0aGUgdmFsdWVzIGZvciBhbGwgdGhlIEZpZWxkcyBpbnRvIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggDQogICAgKiAgKiBrZXkgPSBuYW1lIG9mIHRoZSBGaWVsZCwgYW5kIA0KICAgICogICogdmFsdWUgPSBpdHMgdmFsdWUNCiAgICAqIA0KICAgICogQHJldHVybiBhcnJheSBhbiBhc3NvY2lhdGl2ZSBhcnJheQ0KICAgICogDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVzKCkgew0KCQlyZXR1cm4gJHRoaXMtPnZhbHVlczsNCgl9DQoJCQ0KCS8qKg0KCSAqIFNob3J0Y3V0IHRvIHNhdmUgdGhlIGVudGl0eS4gaWYgdGhlIHByaW1hcnlLZXkgaXMgc2V0dGVkLCBpdCB3aWxsIGJlIGFuIHVwZGF0ZSBvcGVyYXRpb24sIGVsc2UgYW4gaW5zZXJ0Lg0KCSAqDQoJICogQHJldHVybiB0aGUgZW50aXR5IHNhdmVkIHdpdGggaXRzIG5ldyBuZXcgSWQgKGN1c3RvbWVyX2lkIGluIG15IGV4YW1wbGUpIGlmIGl0J3MgYW4gaW5zZXJ0aW9uDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCl7DQoJCWlmKCR0aGlzLT5wayA9PSBudWxsKSB7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ5b3UgY2FuJ3Qgc2F2ZSB0aGUgZW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGFueSBQcmltYXJ5LUtleSIpOw0KCQl9DQoJDQoJCWlmKCR0aGlzLT5nZXQoJHRoaXMtPnBrKSA9PSBudWxsKSB7DQoJCQlyZXR1cm4gT3JtQ29yZTo6aW5zZXJ0RW50aXR5KCR0aGlzKTsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiBPcm1Db3JlOjp1cGRhdGVFbnRpdHkoJHRoaXMpOw0KCQl9DQoJfQ0KCQ0KCS8qKg0KCSAqIFNob3J0Y3V0IHRvIGRlbGV0ZSB0aGUgZW50aXR5DQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGUoKXsNCgkJaWYoJHRoaXMtPnBrID09IG51bGwpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInlvdSBjYW4ndCBkZWxldGUgdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgUHJpbWFyeS1LZXkiKTsNCgkJfQ0KCQkNCgkJaWYoJHRoaXMtPmdldCgkdGhpcy0+cGspID09IG51bGwpIHsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInlvdSBjYW4ndCBkZWxldGUgdGhlIGVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkuIiBiZWNhdXNlIGl0cyBQcmltYXJ5LUtleSBkb2Vzbid0IGhhdmUgYW55IHZhbHVlIik7DQoJCX0NCgkJDQoJCU9ybUNvcmU6OmRlbGV0ZUJ5SWRzKCR0aGlzLCBhcnJheSgkdGhpcy0+Z2V0KCR0aGlzLT5waykpKTsNCgl9DQoJDQogICAgLyoqDQogICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBMZXQgeW91IG1vZGlmeSBzb21lIGRhdGEganVzdCBiZWZvcmUgc2F2aW5nIHRoZSBkYXRhIGludG8gdGhlIGRhdGF0YWJsZS4NCiAgICAqIA0KICAgICogQHBhcmFtIGFycmF5IGFsbCB0aGUgdmFsdWVzIHRvIHByb2Nlc3MNCiAgICAqIEBwYXJhbSBhcnJheSBtb3JlIHBhcmFtZXRlcnMgaWYgeW91IG5lZWQsIGlmIHlvdSB3YW50DQogICAgKiANCiAgICAqIEByZXR1cm4gbWl4ZWQgdG8gZGVmaW5lDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc1ZhbHVlRm9yU2F2ZSgkcm93cywgJGFyZ3MgPSBudWxsKXsNCgkNCgkJcmV0dXJuICRyb3dzOw0KCX0NCgkNCgkvKioNCgkgKiBDYWxsIHRoZSBjb21wYXJlVG8gZnVuY3Rpb24gaW50byB5b3VyIEVudGl0eSB0byBzb3J0IHRoZSBFbnRpdGllcy4NCgkgKiBUbyBhY3RpdmF0ZSB0aGlzIGZ1bmN0aW9uYWxpdHksIFRoZSBFbnRpdHkgbXVzdCBpbXBsZW1lbnQgSVNvcnRhYmxlIEludGVyZmFjZS4NCgkgKg0KCSAqIEV4YW1wbGUgb2YgZnVuY3Rpb24gY29tcGFyZVRvKCkgaW4gYSBDdXN0b21lciBFbnRpdHkNCgkgKiAgPGNvZGU+DQoJICogICAgICAgDQoJICoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wYXJlVG8oRW50aXR5ICRlbnRpdHkxLCBFbnRpdHkgJGVudGl0eTIpDQoJICoJew0KCSAqCQkkY29tcGFyZSA9IHN0cmNtcCgkZW50aXR5MS0+Z2V0KCduYW1lJyksICRlbnRpdHkyLT5nZXQoJ25hbWUnKSk7DQoJICogICAgICAJcmV0dXJuICRjb21wYXJlOw0KCSAqCX0NCgkgKiANCgkgKiAgPC9jb2RlPg0KCSAqDQoJICogQHBhcmFtIGFycmF5PEVudGl0eT4gdGhlIGxpc3Qgb2YgRW50aXR5IHRvIHNvcnQNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXk8RW50aXR5PiB0aGUgbGlzdCBvZiBlbnRpdHkgZ3JhY2VmdWxseSBzb3J0ZWQNCgkgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnQoYXJyYXkgJGFycmF5KSB7DQoNCgkJdXNvcnQoJGFycmF5LCBhcnJheShnZXRfY2FsbGVkX2NsYXNzKCksICJjb21wYXJlVG8iKSk7DQoJDQoJCXJldHVybiAkYXJyYXk7DQoJfQ0KCQ0KCS8qKg0KCSAqIE1heSBiZSBvdmVycmlkZSBpbiB5b3VyIEVudGl0eSdzIGRlZmluaXRpb24gdG8gYWxsb3cgU2VhcmNoIG1vZHVsZSBpbmRleGluZyB5b3VyIGVudGl0aWVzJ3MgZGF0YQ0KCSAqIA0KCSAqIEV4YW1wbGUgb2YgZnVuY3Rpb24gaXNJbmRleGFibGUoKSBpbiBhIEN1c3RvbWVyIEVudGl0eQ0KCSAqICANCgkgKiAgPGNvZGU+DQoJICogICAgICAgDQoJICoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0luZGV4YWJsZSgpDQoJICoJew0KCSAqCQlyZXR1cm4gdGhpcy0+Z2V0Wydpc0FjdGl2YXRlZCddOw0KCSAqCX0NCgkgKiANCgkgKiAgPC9jb2RlPg0KCSAqKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSW5kZXhhYmxlKCl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJCQ0KCS8qKg0KICAgICogZ2V0dGVyIGZvciBhdXRvaW5jcmVtZW50DQogICAgKiANCiAgICAqIEByZXR1cm4gdHJ1ZSBvZiB0aGUgRmllbGQgaXMgYXV0b2luY3JlbWVudA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIElzQXV0b2luY3JlbWVudCgpIHsNCgkJcmV0dXJuICR0aGlzLT5hdXRvaW5jcmVtZW50Ow0KCX0NCgkNCgkvKioNCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQ0KCSAqICAgID0+IHRoZSBmaWVsZCBtdXN0IGJlIGF1dG8taW5jcmVtZW50YWwNCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGdhcm5pc2hBdXRvaW5jcmVtZW50KCl7DQoJCQ0KCQlpZigkdGhpcy0+Z2V0UGsoKSA9PSBudWxsIHx8ICR0aGlzLT5nZXRQaygpLT5nZXRUeXBlKCkgIT0gT3JtQ0FTVDo6JElOVEVHRVIpew0KCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGRvbid0IGhhdmUgYW55IElOVEVHRVIgUEsgYW5kIHNvIGNhbid0IGJlIGRlZmluZWQgYXV0b2luY3JlbWVudCIpOw0KCQl9DQoJCSR0aGlzLT5hdXRvaW5jcmVtZW50ID0gdHJ1ZTsNCgkJDQoJCS8vUmVtb3ZlIGFueSBzZXEgdGhhdCBjb3VsZCBiZSBhZGQgYmVmb3JlDQogICAgICAgICR0aGlzLT5zZXFuYW1lID0gbnVsbDsNCgl9DQoJDQoJLyoqDQoJICogUmV0dXJuIA0KCSAqIEByZXR1cm4gYXJyYXkgOiB0aGUgbGlzdCBvZiBjb3VwbGUgb2YgdW5pcXVlIGluZGV4DQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRVbmlxdWVLZXlzKCkgew0KCQlyZXR1cm4gJHRoaXMtPnVuaXF1ZUtleXM7DQoJfQ0KCQ0KCS8qKg0KCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBsZXQgeW91IGRlZmluZSBzb21lIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHlvdXIgRW50aXR5DQoJICogICAgPT4gdGhlIGZpZWxkIGhhdmUgb25lIG9yIG1hbnkgVW5pcXVlIEtleSBvbiBvbmUgb3IgbWFueSBjb2x1bW5zLg0KCSAqDQoJICogIGV4IDogbXlFbnRpdHktPmdhcm5pc2hVbmlxdWVLZXlzKGFycmF5KCdmaWVsZDEnLCBhcnJheSgnZmllbGQyJywgJ2ZpZWxkMycpKSkgd2lsbCBjcmVhdGUgMiB1bmlxdWUgaW5kZXgNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSBhIGxpc3Qgb2Ygb25lIG9yIG1hbnkgbmFtZSBvZiBmaWVsZCANCgkgKg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2FybmlzaFVuaXF1ZUtleXMoJHVuaXF1ZUtleXMpew0KCQkNCgkJaWYoIWlzX2FycmF5KCR1bmlxdWVLZXlzKSl7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJnYXJuaXNoVW5pcXVlS2V5cygpIG9ubHkgYWNjZXB0IGFuIGFycmF5IGFzIHBhcmFtZXRlciIpOw0KCQl9DQoJCQ0KCQkvL1Rlc3QgdGhlIGV4aXN0ZW5jZSBvZiBlYWNoIG1lbWJlcg0KCQlmb3JlYWNoKCR1bmlxdWVLZXlzIGFzICRtZW1iZXIpew0KCQkJaWYoaXNfYXJyYXkoJG1lbWJlcikpew0KCQkJCWZvcmVhY2goJG1lbWJlciBhcyAkZWx0KXsNCgkJCQkJaWYoISR0aGlzLT5pc0ZpZWxkQnlOYW1lRXhpc3RzKCRlbHQpKXsNCgkJCQkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImdhcm5pc2hVbmlxdWVLZXlzKCkgb25seSBhY2NlcHQgdmFsaWQgRmllbGQgYnV0ICIuJGVsdC4iIGlzIG5vdCBhIGV4aXN0aW5nIEZpZWxkIGluIHRoZSBFbnRpdHkgIi4kdGhpcy0+Z2V0TmFtZSgpKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJaWYoISR0aGlzLT5pc0ZpZWxkQnlOYW1lRXhpc3RzKCRtZW1iZXIpKXsNCgkJCQkJdGhyb3cgbmV3IE9ybUlsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZ2FybmlzaFVuaXF1ZUtleXMoKSBvbmx5IGFjY2VwdCB2YWxpZCBGaWVsZCBidXQgIi4kbWVtYmVyLiIgaXMgbm90IGEgZXhpc3RpbmcgRmllbGQgaW4gdGhlIEVudGl0eSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQ0KCQkkdGhpcy0+dW5pcXVlS2V5cyA9ICR1bmlxdWVLZXlzOw0KCX0NCgkNCgkNCgkvKioNCgkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbGV0IHlvdSBkZWZpbmUgc29tZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB5b3VyIEVudGl0eQ0KCSAqICAgID0+IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBmaWVsZCBpcyAuLi4NCgkgKg0KCSAqICBleCA6IG15RW50aXR5LT5nYXJuaXNoRGVmYXVsdFZhbHVlKCdmaWVsZDEnLCAnc29tZSB0ZXh0JykNCgkgKg0KCSAqIEBwYXJhbSBTdHJpbmcgdGhlIG5hbWUgb2YgdGhlIEZpZWxkDQoJICogQHBhcmFtIE1peGVkIHRoZSBkZWZhdWx0IHZhbHVlLg0KCSAqDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnYXJuaXNoRGVmYXVsdFZhbHVlKCRmaWVsZE5hbWUsJGRlZmF1bHRWYWx1ZSl7DQoJCWlmKCEkdGhpcy0+aXNGaWVsZEJ5TmFtZUV4aXN0cygkZmllbGROYW1lKSl7DQoJCQl0aHJvdyBuZXcgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJnYXJuaXNoRGVmYXVsdCgpIG9ubHkgYWNjZXB0IHZhbGlkIEZpZWxkIGJ1dCAiLiRmaWVsZE5hbWUuIiBpcyBub3QgYSBleGlzdGluZyBGaWVsZCBpbiB0aGUgRW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKSk7DQoJCX0NCgkJDQoJCS8vZm9yYmlkIGEgZGVmYXVsdCB2YWx1ZSBvbiBhIG51bGxhYmxlIGZpZWxkIEJlY2F1c2UgaXQncyBtYWtlIG5vIHNlbmNlDQoJCWlmKCR0aGlzLT5nZXRGaWVsZEJ5TmFtZSgkZmllbGROYW1lKS0+aXNOdWxsYWJsZSgpKXsNCgkJCXRocm93IG5ldyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBGaWVsZCAiLiRmaWVsZE5hbWUuIiBpbiB0aGUgRW50aXR5ICIuJHRoaXMtPmdldE5hbWUoKS4iIGNhbid0IGFjY2VwdCBhIGRlZmF1bHQgdmFsdWUgYmVjYXVzZSBpdCdzIHNldHRlZCBOdWxsYWJsZSIpOw0KCQl9DQoJCQ0KCQkkdGhpcy0+Z2V0RmllbGRCeU5hbWUoJGZpZWxkTmFtZSktPnNldERlZmF1bHRWYWx1ZSgkZGVmYXVsdFZhbHVlKTsNCgkJDQoJfQ0KfQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormentityassociation.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgRW50aXR5QXNzb2NpYXRpb24gQ2xhc3Mgd2hpY2ggZXh0ZW5kcyBFbnRpdHkgY2xhc3MNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEFic3RyYWN0IENsYXNzIHdoaWNoIGRlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBmb3IgYW4gQXNzb2NpYXRpdmUgRW50aXR5DQogKiAgICANCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQphYnN0cmFjdCBjbGFzcyBPcm1FbnRpdHlBc3NvY2lhdGlvbiBleHRlbmRzIE9ybUVudGl0eSANCnsNCglwcml2YXRlICRuYkZpZWxkID0gMDsNCg0KICAgIC8qKg0KICAgICAqIGNvbnN0cnVjdG9yIHByb3RlY3RlZCB0byBhdm9pZCBhIGRpcmVjdCBpbnN0YW5jaWF0aW9uIGxpa2UgIm5ldyBFbnRpdHlBc3NvY2lhdGlvbigpIg0KICAgICAqIEVhY2ggdGltZSBhIGVudGl0eSBpcyBjb25zdHJ1Y3RlZCwgd2UgcGxhY2UgYSBjb3B5IGludG8gdGhlIGF1dG9sb2FkZXIuDQogICAgICogDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdobyBjYWxsaW5nIHRoaXMgbWV0aG9kIChzbyBub3QgIk9ybSIpDQogICAgICogQHBhcmFtIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgZW50aXR5DQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFByZWZpeCB0byB1c2UgaW50byBkYXRhYmFzZSBmb3IgdGFibGUuIElmIG5vdCBzZXR0ZWQsIGl0IHdpbGwgdXNlIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlDQogICAgICogQHBhcmFtIHN0cmluZyBbb3B0aW9uYWxdIFRoZSBuYW1lIG9mIHRhYmxlIGZvciB0aGlzIGVudGl0eS4gSWYgbm90IHNldHRlZCwgaXQgd2lsbCB1c2UgdGhlIG5hbWUgb2YgeW91ciBlbnRpdHkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gRW50aXR5QXNzb2NpYXRpb24gdGhlIGVudGl0eSBhcyBhIG5ldyBpbnN0YW5jZQ0KICAgICAqIA0KICAgICAqIEBzZWUgTXlBdXRvbG9hZA0KICAgICAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kdWxlTmFtZSwgJG5hbWUsJHByZWZpeGUgPSBudWxsLCAkZGJOYW1lID0gbnVsbCkNCgl7DQoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJG1vZHVsZU5hbWUsICRuYW1lLCAkcHJlZml4ZSwgJGRiTmFtZSk7DQoJfQ0KCQ0KICAgIC8qKg0KICAgICogQWRkIGEgbmV3IEZpZWxkDQogICAgKiANCiAgICAqIEN1cnJlbnRseSwgdGhlIE9ybSBTeXN0ZW0gZG9lbid0IGFsbG93IG1vcmUgdGhhbiB0d28gRmllbGQgZm9yIGFuIEVudGl0eUFzc29jaWF0aW9uDQogICAgKiANCiAgICAqIEBwYXJhbSBGaWVsZCB0aGUgRmllbGQgdG8gYWRkLg0KCSoNCgkqIEBleGNlcHRpb24gSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgd2UgdHJ5IHRvIHVzZSBtb3JlIHRoYW4gdHdvIEZpZWxkIGluIHRoZSBlbnRpdHkNCgkqIEBleGNlcHRpb24gSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24gaWYgd2UgdHJ5IHRvIHVzZSBtb3JlIHRoYW4gYSBzaW5nbGUgUHJpbWFyeUtleSBpbiB0aGUgZW50aXR5DQogICAgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkKE9ybUZpZWxkICRuZXdGaWVsZCkNCgl7DQoJCSR0aGlzLT5uYkZpZWxkICsrOw0KCQkNCgkJaWYoJHRoaXMtPm5iRmllbGQgPiAyKQ0KCQkJdGhyb3cgbmV3IElsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uICgiSXQncyBpbXBvc3NpYmxlIHRvIHVzZSBtb3JlIHRoYW4gdHdvIEZpZWxkIGluIHRoZSBFbnRpdHlBc3NvY2lhdGlvbiAiLiAkdGhpcy0+Z2V0TmFtZSgpKTsNCgkJCQkNCgkJcGFyZW50OjphZGQoJG5ld0ZpZWxkKTsNCgl9DQoNCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormexample.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgRXhhbXBsZSBDbGFzcw0KICoNCiAqIEBzaW5jZSAwLjAuMQ0KICogQGF1dGhvciBCZXNzDQogKiBAcGFja2FnZSBPcm0NCiAqKi8NCiANCiANCi8qKg0KICogUmVwcmVzZW50cyBhIGdyb3VwIG9mIGRpZmZlcmVudHMgT3JtQ3JpdGVyaWEgKENyaXRlcmlhcykgdG8gcHJvY2VzcyBhIHNlYXJjaCAiQnkgRXhhbXBsZSIgb24gYSBPcm1FbnRpdHkgaW4gRGF0YWJhc2UNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQpmaW5hbCBjbGFzcyBPcm1FeGFtcGxlIA0Kew0KCXByaXZhdGUgJENyaXRlcmlhcyA9IGFycmF5KCk7DQoJDQogICAgLyoqDQogICAgKiBQdWJsaWMgQ29uc3RydWN0b3INCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCgl7DQoJfQ0KCQ0KICAgIA0KICAgIC8qKg0KICAgICogQWRkIGEgbmV3IENyaXRlcmlhIG9uIHRoZSBleGlzdGluZyBsaXN0DQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgTmFtZSBvZiB0aGUgZmllbGQgDQogICAgKiBAcGFyYW0gVHlwZUNyaXRlcmlhIFR5cGUgb2YgQ3JpdGVyaWENCiAgICAqIEBwYXJhbSBhcnJheSBhbGwgdGhlIHBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIHBhcmFtZXRlciAkdHlwZUNyaXRlcmlhDQogICAgKiBAcGFyYW0gYm9vbGVhbiBbT3B0aW9ubmFsXSBpZiB3ZSBtdXN0IGlnbm9yZSB0aGUgY2FzZSAoYXplIGVxdWFscyBBWkUpIG9yIG5vdC4gRGVmYXVsdCB2YWx1ZSBpcyAiZmFsc2UiDQogICAgKiANCiAgICAqIEBzZWUgVHlwZUNyaXRlcmlhDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gYWRkQ3JpdGVyaWEoJGZpZWxkbmFtZSwgJHR5cGVDcml0ZXJpYSwgJHBhcmFtc0NyaXRlcmlhLCAkaWdub3JlQ2FzZSA9IGZhbHNlKQ0KCXsNCgkJaWYoIWlzX2FycmF5KCRwYXJhbXNDcml0ZXJpYSkpDQoJCXsNCgkJCXRocm93IG5ldyBFeGNlcHRpb24oInRoZSBwYXJhbWV0ZXIgXCRwYXJhbXNDcml0ZXJpYSBmb3IgdGhlIENyaXRlcmlhIG9mIHRoZSBGaWVsZCBbIi4kZmllbGRuYW1lLiJdIG11c3QgYmUgYW4gYXJyYXkiKTsNCgkJfQ0KCQkNCgkJJHRoaXMtPkNyaXRlcmlhc1tdID0gbmV3IE9ybUNyaXRlcmlhKCRmaWVsZG5hbWUsICR0eXBlQ3JpdGVyaWEsICRwYXJhbXNDcml0ZXJpYSwgJGlnbm9yZUNhc2UpOw0KCX0NCg0KICAgIC8qKg0KICAgICogUmV0dXJuIGFsbCB0aGUgQ3JpdGVyaWFzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBFeGFtcGxlIE9iamVjdA0KICAgICogDQogICAgKiBAcmV0dXJuIGFycmF5PENyaXRlcmlhPiB0aGUgbGlzdCBvZiBDcml0ZXJpYXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IEV4YW1wbGUgT2JqZWN0DQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q3JpdGVyaWFzKCl7DQoJCXJldHVybiAkdGhpcy0+Q3JpdGVyaWFzOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormfield.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIEZpZWxkDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KIA0KLyoqDQogKiAgIFJlcHJlc2VudCBhIE9ybUVudGl0eSdzIGZpZWxkIHdpdGggYWxsIGl0cyBwcm9wZXJ0aWVzDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KY2xhc3MgT3JtRmllbGQgDQp7DQoJLyoqDQoJICogVGhlICh1bmlxdWUpIG5hbWUgb2YgdGhlIGZpZWxkDQoJICovDQoJcHJpdmF0ZSAkbmFtZTsNCgkNCgkvKioNCgkgKiBUaGUgT3JtQ0FTVCB2YWx1ZSBvZiB0aGUgZmllbGQNCgkgKi8NCglwcml2YXRlICR0eXBlOw0KCQ0KCS8qKg0KCSAqIFRoZSBtYXggc2l6ZSBvZiB0aGUgZmllbGQuIE1heSBiZSBudWxsIGlmICR0eXBlIGlzIERhdGUsIFRpbWUsIEJ1ZmZlciwgTm9uZSAuLi4NCgkgKi8NCglwcml2YXRlICRzaXplOw0KCQ0KCS8qKg0KCSAqIEJvb2xlYW4gOiB0cnVlIGlmIHRoZSB2YWx1ZSBtYXkgYmUgTlVMTA0KCSAqLw0KCXByaXZhdGUgJG51bGxhYmxlOw0KCQ0KCS8qKg0KCSAqIHRoZSBPcm1LRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbA0KCSAqLw0KCXByaXZhdGUgJEtFWTsNCgkNCgkvKioNCgkgKiB0aGUgbmFtZSBvZiB0aGUga2V5LiBPbmx5IHVzZWQgZm9yIEZvcmVpZ25LZXkgYW5kIEFzc29jaWF0ZUtleQ0KCSAqLw0KCXByaXZhdGUgJEtFWU5hbWU7DQoJDQoJLyoqDQoJICogVGhlIGRlZmF1bHQgdmFsdWUuIE5vdCB1c2VkIGJ5IGRlZmF1bHQuDQoJICoqLw0KCXByaXZhdGUgJGRlZmF1bHRWYWx1ZTsNCgkNCiAgICAvKioNCiAgICAqIHB1YmxpYyBjb25zdHJ1Y3Rvcg0KICAgICogCQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgKHVuaXF1ZSkgbmFtZSBvZiB0aGUgZmllbGQNCiAgICAqIEBwYXJhbSBDQVNUIFRoZSBPcm1DQVNUIHZhbHVlIG9mIHRoZSBmaWVsZCBleGFtcGxlIDogT3JtT3JtQ0FTVDo6JElOVEVHRVINCiAgICAqIEBwYXJhbSBpbnQgVGhlIG1heCBzaXplIG9mIHRoZSBmaWVsZC4gTWF5IGJlIG51bGwgaWYgJHR5cGUgaXMgRGF0ZSwgVGltZSwgQnVmZmVyLCBOb25lIC4uLg0KICAgICogQHBhcmFtIHRydWUgaWYgdGhlIHZhbHVlIG1heSBiZSBOVUxMLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlDQogICAgKiBAcGFyYW0gS0VZIHRoZSBLRVkgdmFsdWUgb2YgdGhlIGZpZWxkLiBNYXkgYmUgbnVsbCBleGFtcGxlOiBPcm1LRVk6OiRQSyBmb3IgYSBwcmltYXJ5IGtleQ0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUga2V5LiBPbmx5IHVzZWQgZm9yIEZvcmVpZ25LZXkgYW5kIEFzc29jaWF0ZUtleSBleGFtcGxlIDogIkN1c3RvbWVyLmN1c3RvbWVyX2lkIiBpbiB0aGUgZmllbGQgImN1c3RvbWVyIiBvZiBhbiBlbnRpdHkgIk9yZGVyIi4NCiAgICAqIA0KICAgICogQHJldHVybiBGaWVsZCB0aGUgRmllbGQgT2JqZWN0DQogICAgKiANCiAgICAqIA0KICAgICogQHNlZSBPcm1DQVNUDQogICAgKiBAc2VlIE9ybUtFWQ0KCSogQHNlZSBPcm1FbnRpdHkNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWVsZG5hbWUsICRjYXN0LCAkc2l6ZSA9IG51bGwsICRudWxsYWJsZSA9IGZhbHNlLCAkS0VZID0gbnVsbCwgJEtFWU5hbWU9bnVsbCkgew0KCQ0KCQlpZihlbXB0eSgkS0VZKSAmJiAhZW1wdHkoJEtFWU5hbWUpKSB7DQoJCQl0aHJvdyBuZXcgSWxsZWdhbENvbmZpZ3VyYXRpb25FeGNlcHRpb24oJ0ltcG9zc2libGUgdG8gc3BlY2lmeSBhIGtleU5hbWUgcGFyYW1ldGVyIGZvciB0aGUgZmllbGQgJy4kZmllbGRuYW1lLicgaWYgdGhlIGtleSBpcyBub3QgJEZLIG9yICRBSycpOw0KCQl9DQoJCWlmKCRLRVkgPT0gT3JtS0VZOjokUEsgJiYgIWVtcHR5KCRLRVlOYW1lKSkgew0KCQkJdGhyb3cgbmV3IElsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdJbXBvc3NpYmxlIHRvIHNwZWNpZnkgYSBrZXlOYW1lIHBhcmFtZXRlciBmb3IgdGhlIGZpZWxkICcuJGZpZWxkbmFtZS4nIGlmIHRoZSBrZXkgaXMgbm90ICRGSyBvciAkQUsnKTsNCgkJfQ0KCQlpZigoJEtFWSA9PSBPcm1LRVk6OiRGSyB8fCAkS0VZID09IE9ybUtFWTo6JEFLKSAmJiBlbXB0eSgkS0VZTmFtZSkpIHsNCgkJCXRocm93IG5ldyBJbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignJEZLIGtleSBvciAkQUsga2V5IGZvciB0aGUgZmllbGQgJy4kZmllbGRuYW1lLicgbmVlZCBhIGtleU5hbWUnKTsNCgkJfQ0KCQkNCgkJaWYoKCRjYXN0ID09IE9ybUNBU1Q6OiREQVRFIHx8ICRjYXN0ID09IE9ybUNBU1Q6OiRCVUZGRVIgfHwgJGNhc3QgPT0gT3JtQ0FTVDo6JFRJTUUpICYmICFlbXB0eSgkc2l6ZSkpIHsNCgkJCXRocm93IG5ldyBJbGxlZ2FsQ29uZmlndXJhdGlvbkV4Y2VwdGlvbignVGhlIE9ybUNBU1Q6OkRBVEUgb3IgdGhlIE9ybUNBU1Q6OkJVRkZFUiBvciB0aGUgT3JtQ0FTVDo6VElNRSBvZiBmaWVsZCAnLiRmaWVsZG5hbWUuJyBtdXN0IG5vdCBoYXZlIHNpemUgdmFsdWUnKTsNCgkJfQ0KCQkNCg0KCQlpZigkbnVsbGFibGUgPT0gbnVsbCkgew0KCQkJJG51bGxhYmxlID0gZmFsc2U7DQoJCX0NCgkJCQ0KCQkkdGhpcy0+bmFtZSAJPSAkZmllbGRuYW1lOw0KCQkkdGhpcy0+dHlwZSAJPSAkY2FzdDsNCgkJJHRoaXMtPnNpemUgCT0gJHNpemU7DQoJCSR0aGlzLT5udWxsYWJsZSA9ICRudWxsYWJsZTsNCgkJJHRoaXMtPktFWSAJCT0gJEtFWTsNCgkJJHRoaXMtPktFWU5hbWUgCT0gJEtFWU5hbWU7DQoJfQ0KCQ0KDQogICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIG5hbWUNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlICh1bmlxdWUpIG5hbWUgb2YgRmllbGQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkNCgl7cmV0dXJuICR0aGlzLT5uYW1lO30NCg0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciB0eXBlDQogICAgKiANCiAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBDQVNUIHZhbHVlIG9mIEZpZWxkDQogICAgKiANCiAgICAqIEBzZWUgQ0FTVA0KICAgICogDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQ0KCXtyZXR1cm4gJHRoaXMtPnR5cGU7fQ0KCQ0KICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIHNpemUNCiAgICAqIA0KICAgICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgRmllbGQNCiAgICAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkNCgl7cmV0dXJuICR0aGlzLT5zaXplO30NCg0KICAgLyoqDQogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkUEsNCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgRmllbGQgaGFzIGEgJFBLDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGlzUHJpbWFyeUtFWSgpDQoJe3JldHVybiAkdGhpcy0+S0VZID09IE9ybUtFWTo6JFBLO30NCg0KICAgLyoqDQogICAgKiByZXR1cm4gdHJ1ZSBpZiBGaWVsZCBoYXMgYSAkRksNCiAgICAqIA0KICAgICogQHJldHVybiBib29sZWFuIHRydWUgaWYgRmllbGQgaGFzIGEgJEZLDQogICAgKi8gICAgCQ0KCXB1YmxpYyBmdW5jdGlvbiBpc0ZvcmVpZ25LRVkoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRGSzt9DQoNCiAgIC8qKg0KICAgICogcmV0dXJuIHRydWUgaWYgRmllbGQgaGFzIGEgJEFLDQogICAgKiANCiAgICAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIEZpZWxkIGhhcyBhICRBSw0KICAgICovICAgIAkNCglwdWJsaWMgZnVuY3Rpb24gaXNBc3NvY2lhdGVLRVkoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWSA9PSBPcm1LRVk6OiRBSzt9DQoJDQogICAgLyoqDQogICAgKiBnZXR0ZXIgZm9yIGtleU5hbWUNCiAgICAqIA0KICAgICogQHJldHVybiBzdHJpbmcgdGhlIGtleU5hbWUgb2YgRmllbGQNCiAgICAqIA0KICAgICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEtFWU5hbWUoKQ0KCXtyZXR1cm4gJHRoaXMtPktFWU5hbWU7fQ0KCQ0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciBudWxsYWJsZSANCiAgICAqIA0KICAgICogQHJldHVybiB0cnVlIGlmIEZpZWxkIGlzIG9wdGlvbmFsIGluIGRhdGFiYXNlDQogICAgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXNOdWxsYWJsZSgpDQoJe3JldHVybiAkdGhpcy0+bnVsbGFibGU7fQ0KCQ0KICAgIC8qKg0KICAgICogZ2V0dGVyIGZvciBkZWZhdWx0VmFsdWUNCiAgICAqIA0KICAgICogQHJldHVybiBtaXhlZCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBGaWVsZA0KICAgICogDQogICAgKi8JDQoJcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpDQoJe3JldHVybiAkdGhpcy0+ZGVmYXVsdFZhbHVlO30NCgkNCiAgIC8qKg0KICAgICogc2V0dGVyIGZvciBkZWZhdWx0VmFsdWUNCiAgICAqIA0KICAgICogQHBhcmFtIG1peGVkIHRoZSBkZWZhdWx0IHZhbHVlIG9mIEZpZWxkDQogICAgKiANCiAgICAqLwkNCglwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKCRkZWZhdWx0VmFsdWUpew0KCQlpZigkdGhpcy0+dHlwZSA9PSBPcm1DQVNUOjokQlVGRkVSKXsNCgkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRoZSBGaWVsZCAiLiR0aGlzLT5uYW1lLiIgb2YgdHlwZSBCVUZGRVIgY2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgIik7DQoJCX0NCgkJJHRoaXMtPmRlZmF1bHRWYWx1ZSA9ICRkZWZhdWx0VmFsdWU7DQoJfQ0KCQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormillegalargumentexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogQ2xhc3NlIGV4dGVuZHMgRXhjZXB0aW9uLCB1c2VkIHdoZW4gdGhlIHBhcmFtZXRlcnMgaXMgbm90IHRoZSBvbmUgZXhwZWN0ZWQNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQoqLw0KY2xhc3MgT3JtSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsNCiAgICANCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZz1OVUxMLCAkY29kZT0wKQ0KICAgIHtwYXJlbnQ6Ol9fY29uc3RydWN0KCRtc2csICRjb2RlKTt9DQp9DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormillegalconfigurationexception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAvKioNCiAqIENvbnRhaW5zIHRoZSBjbGFzcyBPcm1JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24NCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogQ2xhc3NlIGV4dGVuZHMgRXhjZXB0aW9uLCB1c2VkIHdoZW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiBFbnRpdGllcyBpc24ndCBjb3JyZWN0DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KKi8NCmNsYXNzIE9ybUlsbGVnYWxDb25maWd1cmF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uICB7DQogICAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtc2c9TlVMTCwgJGNvZGU9MCkNCiAgICB7cGFyZW50OjpfX2NvbnN0cnVjdCgkbXNnLCAkY29kZSk7fQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormindexing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgYWxsIHRoZSBDbXNNYWRlU2ltcGxlJ3MgaW5kZXhpbmcgc3lzdGVtDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KDQovKioNCiAqICAgQWxsb3cgYSBxdWljayBhbmQgc2ltcGxlIGluZGV4aW5nIHN5c3RlbSB3aXRoIG1vZHVsZXMgbGlrZSBTZWFyY2gNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgIFRoZSBtb3N0IG9mIHRoZSB3b3JrIHdhcyBtYWRlIGZyb20gRHVrZXRvd24ncyB3b3JrIC0gdGhhbmsgdG8gaGltDQogKiAgIGh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy92aWV3dG9waWMucGhwP3A9MjYxNTA4I3AyNjE1MDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogKiAgICANCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLyAgIA0KZmluYWwgY2xhc3MgT3JtSW5kZXhpbmcNCnsJDQoJDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCX0NCgkNCglwdWJsaWMgc3RhdGljIGZpbmFsIGZ1bmN0aW9uIGdldFNlYXJjaCgpDQoJew0KCQkkbW9kb3BzID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpOw0KCQlyZXR1cm4gJG1vZG9wcy0+R2V0U2VhcmNoTW9kdWxlKCk7DQoJfQ0KDQoJLyoqDQogICAgKiB2aWRlIGwnaW5kZXhhZ2UgDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IG1vZHVsZS4NCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gRGVsZXRlQWxsV29yZHMoRW50aXR5ICRlbnRpdHkpDQoJewkNCgkJJHNlYXJjaG1vZHVsZSA9IEluZGV4aW5nOjpnZXRTZWFyY2goKTsNCgkJJHNlYXJjaG1vZHVsZS0+RGVsZXRlV29yZHMoJGVudGl0eS0+Z2V0TW9kdWxlTmFtZSgpLCBudWxsLCAkZW50aXR5LT5nZXROYW1lKCkpOw0KCX0NCg0KICAgLyoqDQogICAgKiB2aWRlIGwnaW5kZXhhZ2UgZCd1biDpbGVtZW50IGVuIHBhcnRpY3VsaWVyDQogICAgKiANCiAgICAqIEBwYXJhbSBzdHJpbmcgbGUgbm9tIGR1IG1vZHVsZS4NCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gRGVsZXRlV29yZHMoRW50aXR5ICRlbnRpdHksICRzaWQgPSBudWxsKQ0KCXsJDQoJCWlmKCRzaWQgPT0gbnVsbCkNCgkJCSRzaWQgPSAkZW50aXR5LT5nZXQoJGVudGl0eS0+Z2V0UGsoKS0+Z2V0TmFtZSgpKTsNCgkJDQoJCSRzZWFyY2htb2R1bGUgPSBJbmRleGluZzo6Z2V0U2VhcmNoKCk7DQoJCSRzZWFyY2htb2R1bGUtPkRlbGV0ZVdvcmRzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSwgJHNpZCwgJGVudGl0eS0+Z2V0TmFtZSgpKTsNCgl9DQoJDQoJDQoJcHVibGljIHN0YXRpYyBmaW5hbAlmdW5jdGlvbiBBZGRXb3JkcygkZW50aXR5KQ0KICAgIHsNCgkJJHNlYXJjaG1vZHVsZSA9IEluZGV4aW5nOjpnZXRTZWFyY2goKTsNCgkJJGZpZWxkcyA9ICRlbnRpdHktPmdldEZpZWxkcygpOw0KCQkNCgkJJGNvbnRlbnQgPSAnJzsNCgkJZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCkNCgkJew0KCQkJJGNvbnRlbnQuPSAnICcuJGVudGl0eS0+Z2V0KCRmaWVsZC0+Z2V0TmFtZSgpKTsNCgkJfQ0KCQkNCgkJJHNpZCA9ICRlbnRpdHktPmdldCgkZW50aXR5LT5nZXRQaygpLT5nZXROYW1lKCkpOw0KCQkNCgkJLy9lY2hvICRzaWQuJyAnLiRlbnRpdHktPmdldE5hbWUoKS4nICcuJGNvbnRlbnQ7DQoJCSRzZWFyY2htb2R1bGUtPkFkZFdvcmRzKCRlbnRpdHktPmdldE1vZHVsZU5hbWUoKSwgJHNpZCwkZW50aXR5LT5nZXROYW1lKCksJGNvbnRlbnQpOw0KICAgIH0NCgkNCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIFVwZGF0ZVdvcmRzKCRlbnRpdHkpIHsNCgkJSW5kZXhpbmc6OkRlbGV0ZVdvcmRzKCRlbnRpdHkpOw0KCQlJbmRleGluZzo6QWRkV29yZHMoJGVudGl0eSk7DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBTZWFyY2hSZWluZGV4KCRtb2R1bGVOYW1lKSB7DQoJCSRlbnRpdHlzID0gTXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRtb2R1bGVOYW1lKTsNCgkJZm9yZWFjaCAoJGVudGl0eXMgYXMgJGVudGl0eSkgew0KCQkNCgkJCWlmKCRlbnRpdHktPmlzSW5kZXhhYmxlKCkpIHsNCgkJCQ0KCQkJCUluZGV4aW5nOjpEZWxldGVBbGxXb3JkcygkZW50aXR5KTsNCgkJCQkNCgkJCQkkbGlzdGUgPSBhcnJheSgpOw0KCQkJCWlmKCEkZW50aXR5LT5pc0ZpZWxkQnlOYW1lRXhpc3RzKEZpZWxkX0FjdGl2ZTo6JG5hbWUpKSB7DQoJCQkJCSRsaXN0ZSA9IENvcmU6OnNlbGVjdEFsbCgkZW50aXR5KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZXhhbXBsZSA9IG5ldyBFeGFtcGxlKCk7DQoJCQkJCSRleGFtcGxlLT5hZGRDcml0ZXJpYShGaWVsZF9BY3RpdmU6OiRuYW1lLCBPcm1UeXBlQ3JpdGVyaWE6OiRFUSwgYXJyYXkoMSkpOw0KCQkJCQkkbGlzdGUgPSBDb3JlOjpzZWxlY3RCeUV4YW1wbGUoJGVudGl0eSwgJGV4YW1wbGUpOw0KCQkJCX0NCgkJCQkNCgkJCQlmb3JlYWNoKCRsaXN0ZSBhcyAkc2luZ2xlRW50aXR5KSB7DQoJCQkJCUluZGV4aW5nOjpBZGRXb3Jkcygkc2luZ2xlRW50aXR5KTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBDYWxsZWQgYnkgbW9kdWxlIFNlYXJjaCB0byBkaXNwbGF5IGEgcmVzdWx0DQoJICovDQoJZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCYkbW9kdWxlLCAkaWQsICRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0ciA9ICcnKQ0KICAgIHsJDQoJCSRyZXN1bHQgPSBhcnJheSgpOw0KCQkNCgkJLyokbWxlID0gTWxlRm9yTW1tZnM6OmdldFJvb3RVcmwoKTsNCgkJaWYoJG1sZSA9PSBudWxsKQ0KCQl7DQoJCQkkbWxlPSdmcic7DQoJCX0qLw0KCQkNCgkJDQoJCSRlbnRpdHlzID0gbXlBdXRvbG9hZDo6Z2V0QWxsSW5zdGFuY2VzKCRtb2R1bGUtPmdldE5hbWUoKSk7DQoJCWZvcmVhY2ggKCRlbnRpdHlzIGFzICRlbnRpdHkpDQoJCXsNCgkJCWlmKCRlbnRpdHktPmlzSW5kZXhhYmxlKCkpDQoJCQl7CQkNCg0KCQkJCWlmICgkYXR0ciA9PSAkZW50aXR5LT5nZXROYW1lKCkpDQoJCQkJew0KCQkJCQkkbXlFbnRpdHkgPSBDb3JlOjpzZWxlY3RCeUlkKCRlbnRpdHksICRlbnRpdHlJZCk7DQoJCQkJCQ0KCQkJCQkvLyRjdXJyZW50TGFuZ0lTTyA9ICgkbWxlID09ICdmcic/J2ZyX0ZSJzonZW5fVVMnKTsgLy9UT0RPIDogc2UgZOltZXJkZXIgcG91ciBy6WN1cOlyZXIgbGEgbGFuZ3VlIGxp6WUgYXUgJHJldHVybklkOw0KCQkJCQkNCgkJCQkJJHByZXR0eVVybCA9ICcnOw0KCQkJCQkkbGluayA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZmljaGUnLCAkcmV0dXJuaWQsIA0KCQkJCQkJCQkJJycsIA0KCQkJCQkJCQkJYXJyYXkoImVjbGFzcyI9PiRteUVudGl0eS0+Z2V0TmFtZSgpLCAiZWNsYXNzSWQiPT4kZW50aXR5SWQpLCcnLHRydWUsbnVsbCxudWxsLG51bGwsJHByZXR0eVVybCk7DQoJCQkJIAkJCQkgICAgDQoJCQkJCSRyZXN1bHRbMF0gPSAkbXlFbnRpdHktPmdldE5hbWUoKTsNCgkJCQkJJHJlc3VsdFsxXSA9IGh0bWxfZW50aXR5X2RlY29kZSgkbXlFbnRpdHktPmdldE5hbWUoKS4nICMnLiRlbnRpdHlJZCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7DQoJCQkJCSRyZXN1bHRbMV0gPSBodG1sX2VudGl0eV9kZWNvZGUoJHJlc3VsdFsxXSwgRU5UX1FVT1RFUywgJ1VURi04Jyk7DQoJCQkJCQ0KCQkJCQkNCgkJCQkJJHJlc3VsdFsyXSA9ICRsaW5rOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KDQoJDQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormisortable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGludGVyZmFjZSBJU29ydGFibGUgd2hpY2ggYWxsb3cgdG8gc29ydCByZXN1bHRzIGZvciBhbiBlbnRpdHkNCiAqDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQovKioNCiAqIEludGVyZmFjZSB3aWNoIGFsbG93IHRvIHNvcnQgcmVzdWx0cyBmb3IgYW4gZW50aXR5DQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KaW50ZXJmYWNlIE9ybUlTb3J0YWJsZQ0Kew0KCQ0KICAgIC8qKg0KICAgICogRnVuY3Rpb24gd2hpY2ggY29tcGFyZSB0d28gZW50aXRpZXMgaW4gcGFyYW1ldGVycw0KICAgICogDQogICAgKiANCiAgICAqIEBwYXJhbSBFbnRpdHkgdGhlIGZpcnN0IGVudGl0eSB3aXRoIGFsbCB2YWx1ZXMgc2V0dGVkDQogICAgKiBAcGFyYW0gRW50aXR5IHRoZSBzZWNvbmQgZW50aXR5IHdpdGggYWxsIHZhbHVlcyBzZXR0ZWQNCgkqDQogICAgKiBAcmV0dXJuIEludGVnZXIgOiAwIGlmIGVxdWFscywgMSBpZiB0aGUgZmlyc3QgZW50aXR5IGlzIHN1cGVyaW9yLCBlbHNlIC0xDQogICAgKiANCiAgICAqIEBzZWUgRW50aXR5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmVUbyhPcm1FbnRpdHkgJGVudGl0eTEsIE9ybUVudGl0eSAkZW50aXR5Mik7DQp9DQoNCg0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormkey.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIGNsYXNzIGZvciB0aGUgZGlmZmVyZW50IGRhdGFiYXNlIGtleQ0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQoNCi8qKg0KICogQ2xhc3MgZGVmaW5lcyB0aGUgZGlmZmVyZW50cyBrZXlzIHVzZWQgaW4gdGhlIE9ybSBzeXN0ZW0NCiAqIA0KICogIE9ybUtFWTo6JFBLIGRlZmluZXMgYSBwcmltYXJ5IGtleQ0KICogIE9ybUtFWTo6JEZLIGRlZmluZXMgYSBmb3JlaWduIGtleSA6IGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgMCwxLT5uIA0KICogIE9ybUtFWTo6JEFLIGRlZmluZXMgYW4gYXNzb2NpYXRlIGtleSA6IGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgdGhhdCBuZWVkaW5nIGEgdGhpcmQgdGFibGUNCiAqIA0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KKi8NCmNsYXNzIE9ybUtFWQ0Kew0KCXB1YmxpYyBzdGF0aWMgJFBLID0gMHg5OTAxOyAvLyBQcmltYXJ5IEtFWQ0KCXB1YmxpYyBzdGF0aWMgJEZLID0gMHg5OTAyOyAvLyBGb3JlaWduIEtFWSBhIGxpbmsgYmV0d2VlbiAyIGVudGl0aWVzIDAsMS0+bg0KCXB1YmxpYyBzdGF0aWMgJEFLID0gMHg5OTAzOyAvLyBBc3NvY2lhdGUgS0VZIGEgbGluayBiZXR3ZWVuIDIgZW50aXRpZXMgbi0+biB0aGF0IG5lZWRpbmcgYSB0aGlyZCB0YWJsZQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormtrace.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgYWxsIHRoZSBkZWJ1ZyBzeXN0ZW0uDQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLw0KDQovKioNCiAqICBBbGxvdyBkaXNwbGF5IHN0YWNrdHJhY2UgYW5kIG90aGVyIGluZm9ybWF0aW9ucyBpbiBhIGNvbnNvbGUgb3Igb24gdGhlIHBhZ2UNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICogIGV4YW1wbGUNCiAqICA8Y29kZT4NCiAqICAgICAgICAgIE9ybVRyYWNlOjpkZWJ1ZygnaSBhbSBoZXJlICEnKTsNCiAqICAgICAgICAgIE9ybVRyYWNlOjppbmZvKCdwcm9jZXNzIGZpbmlzaGVkJyk7DQogKiAgICAgICAgICBPcm1UcmFjZTo6d2FybignQmUgY2FyZnVsbCA6IHRvbyBtdWNoIHJlc3VsdHMgd2lsbCBiZSBkaXNwbGF5ZWQnKTsNCiAqICAgICAgICAgIE9ybVRyYWNlOjplcnJvcignb3VwcyBob3VzdG9uLCB3ZSBoYXZlIGdvdCBhIHByb2JsZW0uLi4gOiggJyk7DQogKiAgPC9jb2RlPg0KICogDQogKiB0aGUgcHJvcGVydHkgJGxldmVsIG9mIHRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VzIHRvIGRpc3BsYXlpbmcNCiAqICBTbyBhIGxldmVsIG9mICJXQVJOIiB3aWxsIG9ubHkgZGlzcGxheSB3YXJuaW5nIGFuZCBlcnJvciBtZXNzYWdlcw0KICogIEJ5IGRlZmF1bHQgdGhlIGxldmVsIGlzIHNldHRlZCB0byBXQVJODQogKg0KICogQHNpbmNlIDAuMC4xDQogKiBAYXV0aG9yIEJlc3MNCiAqIEBwYWNrYWdlIE9ybQ0KICoqLyAgIA0KIA0KZmluYWwgY2xhc3MgT3JtVHJhY2UNCnsNCglwdWJsaWMgc3RhdGljICRERUJVRyA9IDA7DQoJcHVibGljIHN0YXRpYyAkSU5GTyA9IDE7DQoJcHVibGljIHN0YXRpYyAkV0FSTiA9IDI7DQoJcHVibGljIHN0YXRpYyAkRVJST1IgPSAzOw0KCQ0KCS8vQ3VycmVudCBsZXZlbCAoYnkgZGVmYXVsdCkNCglwdWJsaWMgc3RhdGljICRsZXZlbCA9IDI7DQoJDQoJcHJvdGVjdGVkIHN0YXRpYyAkbG9nRmlsZTsNCglwcm90ZWN0ZWQgc3RhdGljICRsb2dVcmw7DQoJDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCX0NCg0KCS8qKg0KICAgICogRGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCBERUJVRyBsZXZlbA0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gZGVidWcoJG1zZykgewkNCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRERUJVRywgJ2RlYnVnJywgJG1zZyk7DQoJfQ0KDQogICAgLyoqDQogICAgKiBEaXNwbGF5IGEgbWVzc2FnZSB3aXRoIElORk8gbGV2ZWwNCiAgICAqIA0KICAgICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5DQogICAgKi8NCglwdWJsaWMgc3RhdGljIGZpbmFsCWZ1bmN0aW9uIGluZm8oJG1zZykgewkNCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRJTkZPLCAnaW5mbycsICRtc2cpOw0KCX0gDQoNCiAgICAvKioNCiAgICAqIERpc3BsYXkgYSBtZXNzYWdlIHdpdGggV0FSTiBsZXZlbA0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gd2FybigkbXNnKSB7CQ0KCQlzZWxmOjppbm5lcldyaXRlcihPcm1UcmFjZTo6JFdBUk4sICd3YXJuJywgJG1zZyk7DQoJfSANCg0KICAgIC8qKg0KICAgICogRGlzcGxheSBhIG1lc3NhZ2Ugd2l0aCBFUlJPUiBsZXZlbA0KICAgICogDQogICAgKiBAcGFyYW0gc3RyaW5nIHRoZSBtZXNzYWdlIHRvIGRpc3BsYXkNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwJZnVuY3Rpb24gZXJyb3IoJG1zZykgewkNCgkJc2VsZjo6aW5uZXJXcml0ZXIoT3JtVHJhY2U6OiRFUlJPUiwgJ2Vycm9yJywgJG1zZyk7DQoJfQ0KCQ0KCS8qKg0KCSAqIFdpbGwgcmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBsb2cgZmlsZQ0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgdGhlIHBhdGggb2YgdGhlIGxvZyBmaWxlDQoJICoqLw0KCXB1YmxpYyBzdGF0aWMgZmluYWwgZnVuY3Rpb24gZ2V0TG9nRmlsZSgpew0KCQlpZihzZWxmOjokbG9nRmlsZSA9PSBudWxsKXsNCgkJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCgkJCXNlbGY6OiRsb2dGaWxlID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy90bXAvY2FjaGUvb3JtLmxvZyc7DQoJCX0NCgkJcmV0dXJuIHNlbGY6OiRsb2dGaWxlOw0KCX0NCgkNCgkvKioNCgkgKiBXaWxsIHJldHVybiB0aGUgdXJsIG9mIHRoZSBsb2cgZmlsZQ0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgdGhlIHVybCBvZiB0aGUgbG9nIGZpbGUNCgkgKiovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBmdW5jdGlvbiBnZXRMb2dVcmwoKXsNCgkJaWYoc2VsZjo6JGxvZ1VybCA9PSBudWxsKXsNCgkJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCgkJCXNlbGY6OiRsb2dVcmwgPSAkY29uZmlnWydyb290X3VybCddLicvdG1wL2NhY2hlL29ybS5sb2cnOw0KCQl9DQoJCXJldHVybiBzZWxmOjokbG9nVXJsOw0KCX0NCgkNCgkvKioNCgkgKiBEbyBhbGwgdGhlIHN1ZmYgYmVoaW5kDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nIHRoZSBsZXZlbCBvZiBtZXNzYWdlLg0KCSAqIEBwYXJhbSBzdHJpbmcgdGhlIGNzcyBjbGFzcyB0byBkaXNwbGF5IHRoZSAiaW5saW5lIiBtZXNzYWdlDQoJICogQHBhcmFtIHN0cmluZyB0aGUgbWVzc2FnZSB0byBkaXNwbGF5DQoJICovDQoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZnVuY3Rpb24gaW5uZXJXcml0ZXIoJGxldmVsLCAkY3NzQ2xhc3MsICRtc2cpew0KCQkNCgkJaWYoc2VsZjo6JGxldmVsID4gJGxldmVsKSB7cmV0dXJuO30NCgkJCQkNCgkJLy9pbiBmaWxlIGxvZw0KCQlmaWxlX3B1dF9jb250ZW50cyhzZWxmOjpnZXRMb2dGaWxlKCkgLCBkYXRlKCdZLW0tZCBIOmk6cycsIHRpbWUoKSkuIiAtIFskY3NzQ2xhc3NdIC0gJG1zZyBcbiIsIEZJTEVfQVBQRU5EICk7DQoJCQ0KCQkvL0luIHBocCBsb2cNCgkJZXJyb3JfbG9nKCRtc2cpOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.ormtypecriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ29udGFpbnMgdGhlIE9ybVR5cGVDcml0ZXJpYSBjbGFzcw0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQogDQoNCi8qKg0KICogRW51bSBmb3IgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBPcm1UeXBlQ3JpdGVyaWENCiAqIA0KICogDQogKiBAc2luY2UgMC4wLjENCiAqIEBhdXRob3IgQmVzcw0KICogQHBhY2thZ2UgT3JtDQogKiovDQpjbGFzcyBPcm1UeXBlQ3JpdGVyaWENCnsNCiAgICAvKioNCiAgICAqIElzIGVxdWFscyB0bw0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkRVEgPSAnID0gJzsNCiAgICANCiAgICAvKioNCiAgICAqIElzIGRpZmZlcmVudCBPZg0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTkVRID0gJyAhPSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogaXMgc3RyaWN0bHkgZ3JlYXRlciAgdGhhbg0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkR1QgPSAnID4gJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGdyZWF0ZXIgIG9yIGVxdWFscyB0bw0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkR1RFID0gJyA+PSAnOw0KICAgIA0KICAgIC8qKg0KICAgICogaXMgc3RyaWN0bHkgbGVzc2VyIHRoYW4NCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExUID0gJyA8ICc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBsZXNzZXIgb3IgZXF1YWxzIHRvDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRMVEUgPSAnIDw9ICc7DQoJDQoJLyoqDQogICAgKiBpcyBOVUxMIG9yIGlzIEVtcHR5DQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRFTVBUWSA9ICdpcyBlbXB0eSgpJzsNCgkNCiAgICAvKioNCiAgICAqIGlzIE5vdCBOVUxMIGFuZCBpcyBOb3QgRW1wdHkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5FTVBUWSA9ICdpcyBub3QgZW1wdHkoKSc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBOVUxMDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICROVUxMID0gJyBpcyBudWxsICc7DQogICAgDQogICAgLyoqDQogICAgKiBpcyBOb3QgTlVMTA0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkTk5VTEwgPSAnIGlzIG5vdCBudWxsJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGJlZm9yZSAoYSBEYXRlKQ0KICAgICogDQogICAgKiBAdmFyIHN0cmluZw0KICAgICovDQoJcHVibGljIHN0YXRpYyAkQkVGT1JFID0gJyBiZWZvcmUgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGFmdGVyIChhIERhdGUpDQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRBRlRFUiA9ICcgYWZ0ZXIgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIGJldHdlZW4gKGEgRGF0ZSkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJEJFVFdFRU4gPSAnIGFmdGVyICc7DQogICAgIA0KICAgIC8qKg0KICAgICogaXMgY29udGFpbmVkIGludG8gdGhlIGFycmF5DQogICAgKiANCiAgICAqIC8hXCBuZWVkIGF0IGxhc3QgMiB2YWx1ZXMgaW4gdGhlIGFycmF5DQogICAgKiANCiAgICAqIEB2YXIgc3RyaW5nDQogICAgKi8NCglwdWJsaWMgc3RhdGljICRJTiA9ICdpbiAoJWEpJzsNCiAgICANCiAgICAvKioNCiAgICAqIGlzIG5vdCBjb250YWluZWQgaW50byB0aGUgYXJyYXkNCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICogLyFcIG5lZWQgYXQgbGFzdCAyIHZhbHVlcyBpbiB0aGUgYXJyYXkNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5JTiA9ICdub3QgaW4gKCVhKSc7DQogICAgDQogICAgLyoqDQogICAgKiBjb250YWlucyB0aGUgc3RyaW5nDQogICAgKiANCiAgICAqIC8hXCBkb24ndCBmb3JnZXQgdG8gYWRkIHRoZSB3aWxkY2FyZCAnJScNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJExJS0UgPSAnIGxpa2UgJzsNCiAgICANCiAgICAvKioNCiAgICAqIGRvZXNuJ3QgY29udGFpbiB0aGUgc3RyaW5nDQogICAgKiANCiAgICAqIC8hXCBkb24ndCBmb3JnZXQgdG8gYWRkIHRoZSB3aWxkY2FyZCAnJScNCiAgICAqIA0KICAgICogQHZhciBzdHJpbmcNCiAgICAqLw0KCXB1YmxpYyBzdGF0aWMgJE5MSUtFID0gJyBub3QgbGlrZSAnOw0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCg0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2xldmVsJywgVHJhY2U6OiRJTkZPKTsNCg0KJHRoaXMtPkF1ZGl0KCAwLCANCgkgICAgICAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIA0KCSAgICAgICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSApOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCg0KLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nDQokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQoNCi8vUmVpbml0IHRoZSBkZWZhdWx0IGxldmVsIG9mIFRyYWNlDQokbGV2ZWwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnLCBPcm1UcmFjZTo6JElORk8pOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2xvZ2xldmVsJywgJGxldmVsKTsNCg0KLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nDQokdGhpcy0+QXVkaXQoIDAsICAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICAkdGhpcy0+TGFuZygndXBncmFkZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/Orm.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCgkvKioNCgkqIENsYXNzIG9mIGNtc21hZGVzaW1wbGUncyBBUEkuIFVzZWQgdG8gbWFrZSBhIGxpbmsgYmV0d2VlbiB0aGUgQVBJIG9mIENtc01hZGVTaW1wbGUgYW5kIG90aGVyIG1vZHVsZXMnDQoJKg0KCSogQHNpbmNlIDAuMC4xDQoJKiBAYXV0aG9yIEJlc3MNCgkqIEBwYWNrYWdlIE9ybQ0KCSoqLw0KDQoJLy9VbmlxdWUgaW1wb3J0LCB0byB1c2UgdGhlIFRyYWNlIGludG8gdGhlIGNsYXNzIE9ybQ0KCWluY2x1ZGVfb25jZShjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCJsaWIiLCJjbGFzcy5vcm10cmFjZS5waHAiKSk7DQoNCgkvKioNCgkqIFRoZSBDbGFzcyBPcm0gZGVmaW5lIHRoZSBtb2R1bGUgT3JtIGFuZCBhbGxvdyBoYXZpbmcgYWxsIHRoZSBvcm0gZnVuY3Rpb25hbGl0aWVzIGludG8gYW5vdGhlciBtb2R1bGUNCgkqDQoJKiBAc2luY2UgMC4wLjENCgkqIEBhdXRob3IgQmVzcw0KCSogQHBhY2thZ2UgY21zbXMNCgkqLw0KY2xhc3MgT3JtIGV4dGVuZHMgQ01TTW9kdWxlIHsNCg0KCWZ1bmN0aW9uIF9fY29uc3RydWN0KCkgew0KCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQoJCU9ybVRyYWNlOjokbGV2ZWwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9nbGV2ZWwnLCBPcm1UcmFjZTo6JElORk8pOw0KCX0NCg0KCWZ1bmN0aW9uIEdldE5hbWUoKSB7DQoJCXJldHVybiAnT3JtJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsNCgkJcmV0dXJuICcwLjEuMCc7DQoJfQ0KICANCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQ0KIAl7DQogICAgCXJldHVybiBhcnJheSgpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEhlbHAoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvcigpIHsNCgkJcmV0dXJuICdLZXZpbiBEYW5lemlzIChha2EgQmVzcyknOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgew0KCQlyZXR1cm4gJ2NvbnRhY3QgYXQgZnVyaWUgcG9pbnQgYmUnOw0KCX0NCg0KCWZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7DQoJfQ0KDQoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7DQoJCXJldHVybiAiMS4xMS4wIjsNCgl9DQoNCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7DQoJCXJldHVybiAnZXh0ZW5zaW9ucyc7DQoJfQ0KDQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7DQoJfQ0KDQoJZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkgew0KCX0NCg0KCWZ1bmN0aW9uIEFsbG93U21hcnR5Q2FjaGluZygpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIExhenlMb2FkRnJvbnRlbmQoKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBMYXp5TG9hZEFkbWluKCkgew0KCSAgcmV0dXJuIGZhbHNlOw0KCX0NCgkNCglmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkgeyAgDQoJfQ0KDQoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7DQoJfQ0KDQoJZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOw0KCX0NCg0KCWZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7DQoJCXJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOw0KCX0gIA0KCQ0KCWZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJG1zZykgew0KCQllY2hvICI8aDM+Ii4kbXNnLiI8L2gzPiI7DQoJfSANCgkJIA0KCXByaXZhdGUgZnVuY3Rpb24gR2V0TXlNb2R1bGVQYXRoKCkgew0KCQlyZXR1cm4gcGFyZW50OjpHZXRNb2R1bGVQYXRoKCk7CQkNCgl9DQoNCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19hdXRvbG9hZCgpIHsJDQoJCXNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgkdGhpcywgJ2F1dG9sb2FkX2NsYXNzZXMnKSk7DQoJCS8vc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnYXV0b2xvYWRfY2xhc3Nlc19hZGRvbicpKTsNCgkJDQoJCS8vV2UncmUgbGlzdGluZyB0aGUgY2xhc3MgZGVjbGFyZWQgaW50byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjaGlsZCBtb2R1bGUNCgkJJHJlcGVydG9pcmUgPSBjbXNfam9pbl9wYXRoKCR0aGlzLT5HZXRNeU1vZHVsZVBhdGgoKSwnbGliJyk7DQoJCQ0KCQkkbGlzdGVbJ2VudGl0aWVzJ10gPSBhcnJheSgpOw0KCQkkbGlzdGVbJ2Fzc29jaWF0ZSddID0gYXJyYXkoKTsNCgkJDQoJCSRvYmplY3RzID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRyZXBlcnRvaXJlKSk7DQoJCWZvcmVhY2goJG9iamVjdHMgYXMgJG5hbWUgPT4gJG9iamVjdCl7DQoJCQlpZihzdHJpcG9zKCRuYW1lLCAnY2xhc3MuZW50aXR5LicpICE9PSBGQUxTRSl7CQkJDQoJCQkJJGNsYXNzbmFtZSA9IHN1YnN0cigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpICwgMTMgLHN0cmxlbigkb2JqZWN0LT5nZXRGaWxlTmFtZSgpKSAtIDQgLSAxMyk7DQoJCQkJJGxpc3RlWydlbnRpdGllcyddW10gPSBhcnJheSgnZmlsZW5hbWUnPT4kbmFtZSwgJ2Jhc2VuYW1lJz0+JG9iamVjdC0+Z2V0RmlsZU5hbWUoKSwgJ2NsYXNzbmFtZSc9PiRjbGFzc25hbWUpOw0KCQkJfSBlbHNlaWYoc3RyaXBvcygkbmFtZSwgJ2NsYXNzLmFzc29jLicpICE9PSBGQUxTRSkgew0KCQkJCSRjbGFzc25hbWUgPSBzdWJzdHIoJG9iamVjdC0+Z2V0RmlsZU5hbWUoKSAsIDEyICxzdHJsZW4oJG9iamVjdC0+Z2V0RmlsZU5hbWUoKSkgLSA0IC0gMTIpOw0KCQkJCSRsaXN0ZVsnYXNzb2NpYXRlJ11bXSA9IGFycmF5KCdmaWxlbmFtZSc9PiRuYW1lLCAnYmFzZW5hbWUnPT4kb2JqZWN0LT5nZXRGaWxlTmFtZSgpLCAnY2xhc3NuYW1lJz0+JGNsYXNzbmFtZSk7DQoJCQl9IGVsc2Ugew0KCQkJfQ0KCQl9DQoJCQ0KCQlmb3JlYWNoKCRsaXN0ZVsnZW50aXRpZXMnXSBhcyAkZWxlbWVudCkgew0KCQkJJGNsYXNzTmFtZSA9ICRlbGVtZW50WydjbGFzc25hbWUnXTsNCgkJCSRmaWxlbmFtZSA9ICRlbGVtZW50WydmaWxlbmFtZSddOw0KCQkJT3JtVHJhY2U6OmRlYnVnKCJpbXBvcnRpbmcgRW50aXR5ICIuJGNsYXNzTmFtZS4iIGludG8gdGhlIG1vZHVsZSAiLiR0aGlzLT5nZXROYW1lKCkpOw0KCQkJcmVxdWlyZV9vbmNlKCRmaWxlbmFtZSk7CQkJDQoJCQkkZW50aXR5ID0gbmV3ICRjbGFzc05hbWUoKTsNCgkJfQ0KCQlmb3JlYWNoKCRsaXN0ZVsnYXNzb2NpYXRlJ10gYXMgJGVsZW1lbnQpIHsNCgkJCSRjbGFzc05hbWUgPSAkZWxlbWVudFsnY2xhc3NuYW1lJ107DQoJCQkkZmlsZW5hbWUgPSAkZWxlbWVudFsnZmlsZW5hbWUnXTsNCgkJCU9ybVRyYWNlOjpkZWJ1ZygiaW1wb3J0aW5nIEFzc29jaWF0ZSBFbnRpdHkgIi4kY2xhc3NOYW1lLiIgaW50byB0aGUgbW9kdWxlICIuJHRoaXMtPmdldE5hbWUoKSk7DQoJCQlyZXF1aXJlX29uY2UoJGZpbGVuYW1lKTsNCgkJCSRlbnRpdHkgPSBuZXcgJGNsYXNzTmFtZSgpOw0KCQl9DQoJfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZF9jbGFzc2VzKCRjbGFzc25hbWUpew0KCQlPcm1UcmFjZTo6ZGVidWcoIiZuYnNwOyZuYnNwOyZuYnNwOyBOZWVkICRjbGFzc25hbWUiKTsNCgkJJE9ybSA9IG5ldyBPcm0oKTsNCgkJJHBhdGggPSAkT3JtLT5HZXRNeU1vZHVsZVBhdGgoKTsNCgkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwibGliIiwiY2xhc3MuIi5zdHJ0b2xvd2VyKCRjbGFzc25hbWUpLiIucGhwIik7DQoNCg0KCQlPcm1UcmFjZTo6ZGVidWcoImltcG9ydCBjbGFzcyBkdSBmcmFtZXdvcmsgdmlhICIuJHRoaXMtPmdldE5hbWUoKS4iOiAkZm4iKTsNCg0KCQlpZihmaWxlX2V4aXN0cygkZm4pKXsNCgkJCXJlcXVpcmVfb25jZSgkZm4pOw0KCQkJT3JtVHJhY2U6OmRlYnVnKCJpbXBvcnRpbmcgJGZuIHdpdGggc3VjY2VzcyIpOw0KCQl9IGVsc2Ugew0KCQkJT3JtVHJhY2U6OmRlYnVnKCJGaWxlICRmbiBub3QgZm91bmQsIHdlIHNraXAgaXQiKTsNCgkJfQ0KCX0NCgkNCgkvKioNCgkgKiBTaG9ydGN1dCB0byBjYWxsIGFsbCB0aGUgaW5zdGFuY2VzIGZvciBhIHNpbmdsZSBtb2R1bGUNCgkgKg0KCSAqIEByZXR1cm4gTGlzdDxFbnRpdHk+IHRoZSBlbnRpdGllcyBmb3IgdGhlIGN1cnJlbnQgcGFyZW50J3MgbmFtZXNwYWNlDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRBbGxJbnN0YW5jZXMoKXsNCgkJcmV0dXJuIE15QXV0b2xvYWQ6OmdldEFsbEluc3RhbmNlcyhwYXJlbnQ6OkdldE5hbWUoKSk7DQoJfQ0KCS8qDQoJcHVibGljIGZ1bmN0aW9uIGF1dG9sb2FkX2NsYXNzZXNfYWRkb24oJGNsYXNzbmFtZSl7DQoJCU9ybVRyYWNlOjpkZWJ1ZygiJm5ic3A7Jm5ic3A7Jm5ic3A7JGNsYXNzbmFtZSIpOw0KCQkNCgkJJHBhdGggPSAkdGhpcy0+R2V0TXlNb2R1bGVQYXRoKCk7DQoJCQ0KCQkkZm4gPSBudWxsOw0KCSAgIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkhUTUxfRklFTEQiKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5hZGQuZmllbGRodG1sLnBocCIpOw0KCSAgIH0gZWxzZSBpZihzdHJpcG9zKCRjbGFzc25hbWUsICJTRUFSQ0hfRklFTEQiKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5hZGQuc2VhcmNoZmllbGQucGhwIik7DQoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkZJRUxEXyIpICE9PSBGQUxTRSkNCgkgICB7DQoJCQkkZm4gPSBjbXNfam9pbl9wYXRoKCRwYXRoLCJjbGFzcyIsImNsYXNzLmFkZC5maWVsZHNzeXN0ZW0ucGhwIik7DQoJICAgfSBlbHNlIGlmKHN0cmlwb3MoJGNsYXNzbmFtZSwgIkZJTFRSRV8iKSAhPT0gRkFMU0UpDQoJICAgew0KCQkJJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwiY2xhc3MiLCJjbGFzcy5hZGQuZmlsdHJlLnBocCIpOw0KCSAgIH0NCgkgICANCgkgICBpZigkZm4gIT0gbnVsbCkNCgkgICB7DQoJCQlPcm1UcmFjZTo6ZGVidWcoICJpbXBvcnQgZCd1biBhZGRvbiBkdSBwcm9qZXQgIi4kdGhpcy0+Z2V0TmFtZSgpLiI6ICRmbiIpOw0KCSAgIA0KCQkJaWYoZmlsZV9leGlzdHMoJGZuKSl7DQoJCQkJcmVxdWlyZV9vbmNlKCRmbik7DQoJCQl9DQoJCX0NCgl9Ki8NCgkvKg0KCWZ1bmN0aW9uIFNlYXJjaFJlaW5kZXgoJiRtb2R1bGUgPSBudWxsKSB7DQoJCS8vT24g6XZpdGUgZGUgcydhdXRvLWluZGV4ZXIuDQoJCWlmKCR0aGlzLT5nZXROYW1lKCkgPT0gJ01tbWZzJykNCgkJCXJldHVybjsJCQ0KCQkJDQoJCS8vIEluZGV4aW5nOjpzZXRTZWFyY2goJG1vZHVsZSk7DQoJCUluZGV4aW5nOjpTZWFyY2hSZWluZGV4KCR0aGlzLT5nZXROYW1lKCkpOw0KCX0qLw0KDQoJLyoqDQoJICogQXBwZWzpZSBwYXIgU2VhcmNoIHBvdXIgYWZmaWNoZXIgdW4gculzdWx0YXQNCgkgKi8vKg0KCWZ1bmN0aW9uIFNlYXJjaFJlc3VsdCgkcmV0dXJuaWQsICRlbnRpdHlJZCwgJGF0dHIgPSAnJykgewkNCgkJLy9PbiBuZSByZXRvdXJuZSByaWVuIGRlIE1tbWZzIGRlIHRvdXRlIG1hbmnocmUNCgkJaWYoJHRoaXMtPmdldE5hbWUoKSA9PSAnTW1tZnMnKQ0KCQkJcmV0dXJuOwkNCgkJDQoJCXJldHVybiBJbmRleGluZzo6U2VhcmNoUmVzdWx0KCR0aGlzLCAkaWQsICRyZXR1cm5pZCwgJGVudGl0eUlkLCAkYXR0cik7DQoJfSovDQoNCn0gDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9DQoJeyRzZWxlY3R9DQoJeyRzdWJtaXR9eyRkZWxldGV9DQoNCjwvZm9ybT4NCg0KPHByZSBpZD0nb3V0cHV0Jz48L3ByZT4NCntsaXRlcmFsfQ0KPHNjcmlwdD4NCg0KZnVuY3Rpb24gZG9VcGRhdGUoKSB7DQokLmFqYXgoe3R5cGU6ICJHRVQiLCB1cmwgOiAiey9saXRlcmFsfXskdXJsTG9nfXtsaXRlcmFsfSIsIGNhY2hlOmZhbHNlLA0KICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7DQogICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gNCkgew0KICAgICAgICAgICAgICAgIC8vIERhdGEgYXJlIGFzc3VtZWQgdG8gYmUgaW4gSFRNTCBmb3JtYXQNCiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gc29tZXRoaW5nIGxpa2UgPHAvPiBpbiBjYXNlIG9mIG5vIHVwZGF0ZXMNCiAgICAgICAgICAgICAgICAkKCIjb3V0cHV0IikudGV4dChkYXRhKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgc2V0VGltZW91dCgiZG9VcGRhdGUoKSIsIDIwMDApOw0KICAgICAgICAgICB9fSk7DQogIA0KfQ0KDQpzZXRUaW1lb3V0KCJkb1VwZGF0ZSgpIiwgMjAwMCk7DQo8L3NjcmlwdD57L2xpdGVyYWx9]]></data>
	</file>
</module>
