<?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>Promotions</name>
	<version>1.1.3</version>
  <mincmsversion>1.11.4</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2R1Y3RzIGFuZCBPcmRlcnMgbW9kdWxlIHRvIGFsbG93IGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aW1lIGxpbWl0ZWQgcHJvbW90aW9ucyBmb3IgdGhlIHByb2R1Y3RzIG9uIHlvdXIgZS1jb21tZXJjZSB3ZWJzaXRlLjwvcD4KPGgzPkZlYXR1cmVzOjwvaDM+Cjx1bD4KPGxpPjx1PkFsbCBwcm9tb3Rpb25zIGFyZSB0aW1lIGxpbWl0ZWQuPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+QSBwcm9tb3Rpb24gY2FuIGhhdmUgb25lIG9yIG1vcmUgY29uZGl0aW9ucyB0byBpbmRpY2F0ZSBlbGlnaWJpbGl0eS48L3U+CiAgPHA+SWYgYSBwcm9tb3Rpb24gaXMgZGVmaW5lZCB3aXRoIHR3byBvciBtb3JlIGNvbmRpdGlvbnMsIGFsbCBvZiB0aG9zZSBjb25kaXRpb25zIG11c3QgYmUgbWV0IGluIG9yZGVyIGZvciB0aGUgY3VzdG9tZXIgdG8gYmUgZWxpZ2libGUgZm9yIHRoZSBwcm9tb3Rpb24uPC9wPgogIDxwPkEgbnVtYmVyIG9mIGNvbmRpdGlvbiB0eXBlcyBleGlzdC4uLiBIb3dldmVyIHNvbWUgb2YgdGhlbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlcnMuICBpLmU6ICBZb3UgY2Fubm90IGhhdmUgdHdvIGRpZmZlcmVudCB0eXBlIG9mIHByb2R1Y3QgY29uZGl0aW9ucy48L3A+CiAgPHVsPgo8bGk+PHU+UmVxdWlyZSBtZW1iZXJzaGlwIGluIGFuIEZFVSBHcm91cDo8L3U+CiAgPHA+WW91IGNhbiBlbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIEZFVSBncm91cCBuYW1lcy4gIFRoZSBsb2dnZWQgaW4gd2Vic2l0ZSB2aXNpdG9yIG11c3QgYmUgYSBtZW1iZXIgb2Ygb25lIG9mIHRoZXNlIGdyb3VwcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhlIHByb21vdGlvbi48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gcHVyY2hhc2UgYW1vdW50OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgcHJlLXRheC9wcmUtc2hpcHBpbmcgdG90YWwgZm9yIHRoZWlyIG9yZGVyIG11c3QgbWVldCB0aGUgc3BlY2lmaWVkIG1pbmltdW0gdmFsdWUuPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgdGhlIHB1cmNoYXNlIG9mIGEgc3BlY2lmaWMgcHJvZHVjdDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IG1hdGNoaW5nIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGlkcyBlbnRlcmVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBjYXRlZ29yeTo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IHRoYXQgaXMgd2l0aGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnkgbmFtZXMgKGZyb20gdGhlIHByb2R1Y3RzIG1vZHVsZSkgc3BlY2lmaWVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBoaWVyYXJjaHk6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCB0aGF0IGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHByb2R1Y3RzIG1vZHVsZSBoaWVyYXJjaHkuPC9wPgogIDxwPkhpZXJhcmNoeSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtIG9mICZxdW90O1BhcmVudC5QYXJlbnQuQ2hpbGQmcXVvdDsgaS5lOiAmcXVvdDtDbG90aGluZy5UZW50cyZxdW90Oy4gIEhpZXJhcmNoeSBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLiAgV2lsZGNhcmRzIGNhbiBiZSBzcGVjZmlmaWVkIGJ5IHVzaW5nIHRoZSAqIGNoYXJhY3Rlci4gIGkuZTogJnF1b3Q7Q2xvdGhpbmcqJnF1b3Q7LjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIGEgQ291cG9uIENvZGU6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhlIG11c3QgaGF2ZSBzdXBwbGllZCB0aGUgY291cG9uIGNvZGUgdGhhdCBtYXRjaGVzIHRoaXMgY29uZGl0aW9uLjwvcD4KICA8cD5JbiBvcmRlciB0byBhbGxvdyBjdXN0b21lcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLCB5b3UgbmVlZCB0byBhZGQgYSB0YWcgaW50byB5b3VyIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50IGxpa2Uge1Byb21vdGlvbnN9LiAgVGhpcyB3aWxsIGRpc3BsYXkgYSBmb3JtIHRoYXQgYWxsb3dzIHlvdXIgdXNlcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLiAgQ291cG9uIGNvZGVzIGFyZSByZW1lbWJlcmVkIHVudGlsIHRoZSB1c2VyIGNsb3NlcyB0aGUgYnJvd3Nlci48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gb3JkZXIgd2VpZ2h0OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgc3VtIHRvdGFsIG9mIGFsbCBvZiB0aGUgd2VpZ2h0IHZhbHVlcyBmb3IgdGhlIGl0ZW1zIGluIGhpcyBjYXJ0IG11c3QgbWVldCBvciBleGNlZWQgdGhlIHZhbHVlIHNwZWNpZmllZC48L3A+PC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPjx1PkVhY2ggcHJvbW90aW9uIGNhbiBoYXZlIGEgZGlmZmVyZW50ICZxdW90O29mZmVyJnF1b3Q7PC91Pgo8cD5BIG51bWJlciBvZiBkaWZmZXJlbnQgb2ZmZXJzIHR5cGVzIGFyZSBhdmFpbGFibGU6PC9wPgogIDx1bD4KPGxpPjx1PlBlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsOjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGJldHdlZW4gMCBhbmQgMSB0byBpbmRpY2F0ZSBhIHBlcmNlbnRhZ2Ugb2ZmLiAgaS5lOiAwLjEgaW5kaWNhdGVzIDEwJSBvZmYuICAgRHVyaW5nIHRoZSBjaGVja291dCBwcm9jZXNzLCBhbnkgbm9uIHRheCwgb3Igbm9uIHNoaXBwaW5nIGl0ZW0gaW4gdGhlIG9yZGVyIHdpbGwgYmUgcmVkdWNlZCBpbiBwcmljZSBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC48L3A+PC9saT4KPGxpPjx1PlJlZHVjZSBvcmRlciB0b3RhbCBieSBhIHNwZWNpZmllZCBhbW91bnQ6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgYWxsb3dzIHlvdSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0aGUgb3JkZXIgYnkgYSBjZXJ0YWluIGRvbGxhciBmaWd1cmUuICBUaGlzIGRvbGxhciBmaWd1cmUgd2lsbCBiZSBhZGRlZCBhcyBhIGRpc2NvdW50IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcyBhbmQgd2lsbCBhcHBlYXIgb24gdGhlIGludm9pY2UuPC9wPjwvbGk+CjxsaT48dT5SZWNlaXZlIGEgRnJlZSBQcm9kdWN0OjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIHByb2R1Y3QgaWQgdG8gYXV0b21hdGljYWxseSBpbmNsdWRlIGluIHRoZSBvcmRlciBhdCBubyBjb3N0LiAgVGhpcyBwcm9kdWN0IHdpbGwgYmUgYWRkZWQgYXMgYSBwcm9kdWN0IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcywgYnV0IHdpbGwgYXBwZWFyIGF0IG5vIGNvc3QuPC9wPjwvbGk+CjxsaT48dT5EaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2U6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBjb25kaXRpb24gaXMgc3BlY2lmaWVkLiAgSWYgYSBwcm9kdWN0IGNvbmRpdGlvbiBpcyBzcGVjaXJpZWQsIGFuZCBtYXRjaGVzLCB0aGlzIG9mZmVyIHR5cGUgd2lsbCBkaXNjb3VudCB0aGUgbWF0Y2hpbmcgcHJvZHVjdHMgZnJvbSB0aGUgY3VzdG9tZXIgb3JkZXIgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZS48L3A+LgogIDwvdWw+CjwvbGk+CjxsaT48dT5BbGxvd3Mgd2Vic2l0ZSB2aXNpdG9ycyB0byBlbnRlciBvbmUgb3IgbW9yZSBjb3Vwb24gY29kZXM8L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5EaXNjb3VudHMgYXJlIGNhbGN1bGF0ZWQgYW5kIGFwcGxpZWQgdG8gdGhlIG9yZGVyIGR1cmluZyB0aGUgY2hlY2tvdXQgcHJvY2Vzcy48L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5JZiBhIHdlYiBjdXN0b21lciBpcyBlbGlnaWJsZSBmb3IgbXVsdGlwbGUgcHJvbW90aW9ucywgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCB2YWx1ZSBpcyBhcHBsaWVkLjwvdT48L2xpPgo8L3VsPgo8YnIvPgo8aDM+SG93IERvIEkgVXNlIEl0OjwvaDM+CjxvbD4KICA8bGk+MS4gSW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBtb2R1bGU8L2xpPgogIDxsaT4yLiBDcmVhdGUgYXQgbGVhc3Qgb25lIHByb21vdGlvbjwvbGk+CiAgPGxpPjMuIFNwZWNpZnkgdGhpcyBtb2R1bGUgYXMgdGhlICZxdW90O1Byb21vdGlvbnMmcXVvdDsgbW9kdWxlIHdpdGhpbiB0aGUgT3JkZXJzIFByZWZlcmVuY2VzLjwvbGk+CiAgPGxpPjQuIDxlbT4ob3B0aW9uYWwpPC9lbT4gQWRkIHtQcm9tb3Rpb25zfSB0byBhIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50LjwvZW0+PC9saT4KPC9vbD4KPGgzPkV4YW1wbGU6PC9oMz4KPHA+SW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgY3JlYXRlIGEgcHJvbW90aW9uIGxpa2UgJnF1b3Q7MTAlIG9mZiBhbGwgb3JkZXJzIG92ZXIgJDEwMCwgd2l0aCBjb3Vwb24gY29kZSZxdW90Ozo8L3A+Cjx1bD4KICA8bGk+MS4gPHU+Q3JlYXRlIGEgbmV3IHByb21vdGlvbjwvdT4KICA8cD5OYXZpZ2F0ZSB0byB0aGUgcHJvbW90aW9ucyBtb2R1bGUgYWRtaW4gcGFuZWwsIGFuZCBjbGljayBvbiAmcXVvdDtBZGQgYSBOZXcgUHJvbW90aW9uJnF1b3Q7LiAgWW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggdGhlIHByb21vdGlvbnMgZm9ybS48L3A+PC9saT4KICA8bGk+Mi4gPHU+U3BlY2lmeSBhIHByb21vdGlvbiBuYW1lPC91PgogIDxwPkZvciB0aGlzIGV4YW1wbGUgd2Ugd2lsbCB1c2UgdGhlIG5hbWUgJnF1b3Q7U2ltcGxlIFNhbGUmcXVvdDs8L3A+PC9saT4KICA8bGk+My4gPHU+QWRkIGEgY291cG9uIGNvbmRpdGlvbjwvdT4KICA8cD5Gcm9tIHRoZSAmcXVvdDtUeXBlIG9mIENvbmRpdGlvbiZxdW90OyBkcm9wZG93biBzZWxlY3QgJnF1b3Q7UmVxdWlyZSBhIENvdXBvbiBDb2RlJnF1b3Q7LiAgRW50ZXIgJnF1b3Q7c2ltcGxlc2FsZSZxdW90OyBpbnRvIHRoZSBpbnB1dCBmaWVsZCBiZWxvdyBhbmQgY2xpY2sgQWRkLjwvcD48L2xpPgogIDxsaT40LiA8dT5BZGQgYW4gb3JkZXIgcHJpY2UgY29uZGl0aW9uPC91PgogIDxwPkZyb20gdGhlICZxdW90O1R5cGUgb2YgQ29uZGl0aW9uJnF1b3Q7IGRyb3Bkb3duIHNlbGVjdCAmcXVvdDtSZXF1aXJlIGEgTWluaW11bSBQdXJjaGFzZSBBbW91bnQmcXVvdDsgZnJvbSB0aGUgZHJvcGRvd24sIGFuZCBlbnRlciAxMDAgaW50byB0aGUgaW5wdXQgZmllbGQgYmVsb3cuICBDbGljayBBZGQuPC9wPjwvbGk+CiAgPGxpPjUuIDx1PlNwZWNpZnkgdGhlIG9mZmVyIHR5cGUsIGFuZCBhbW91bnQ8L3U+CiAgPHA+U2VsZWN0IHRoZSBvZmZlciB0eXBlICZxdW90O1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJnF1b3Q7IGFuZCBlbnRlciAwLjEgaW50byB0aGUgdGV4dCBmaWVsZCBiZWxvdyB0byBpbmRpY2F0ZSAxMCUmcXVvdDs8L3A+PC9saT4KICA8bGk+Ni4gPHU+Q2xpY2sgc3VibWl0PC91PjwvbGk+CjwvdWw+CjxoMz5TbWFydHkgUGx1Z2luczwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBzbWFydHkgcGx1Z2luIHRvIGFpZCBpbiByZXRyaWV2aW5nIGFuZCBkaXNwbGF5aW5nIGRpc2NvdW50cyBmb3IgYSBzaW5nbGUgcHJvZHVjdC48L3A+Cjx1bD4KICA8bGk+PHN0cm9uZz57cHJvbW9fZ2V0X3Byb2RfZGlzY291bnQgW2ZldV91aWQ9dmFsXSBwcm9kdWN0X2lkPXZhbCBbYXNzaWduPXZhcl19PC9zdHJvbmc+CiAgPHA+SWYgc3VjY2Vzc2Z1bCwgdGhpcyBwbHVnaW4gcmV0dXJucyBhIGhhc2ggY29udGFpbmluZyBkaXNjb3VudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9kdWN0LiAgVGhlIGdyZWF0ZXN0IHBvc3NpYmxlIGRpc2NvdW50IGlzIGNhbGN1bGF0ZWQsIGNvbnNpZGVyaW5nIGFsbCBhY3RpdmUgcHJvbW90aW9ucywgdXNlciBpZCwgZW50ZXJlZCBjb3Vwb24gY29kZXMsIGFuZCBvdGhlciBtYXRjaGluZyBjb25kaXRpb25zLjwvcD4KICA8cD5QYXJhbWV0ZXJzOjwvcD4KICA8dWw+CiAgPGxpPmZldV91aWQgKG9wdGlvbmFsKSAtIFRoZSBGcm9udEVuZFVzZXJzIHVzZXJpZCB0byB0ZXN0IHdpdGguICBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgaWQgd2lsbCBiZSB1c2VkLjwvbGk+CiAgPGxpPnByb2R1Y3RfaWQgKHJlcXVpcmVkKSAtIFRoZSBJRCBvZiB0aGUgcHJvZHVjdCB0byB0ZXN0IHdpdGguPC9saT4KICA8bGk+YXNzaWduIChvcHRpb25hbCkgLSBPcHRpb25hbGx5IGFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgPC91bD4KICA8L2xpPgo8L3VsPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiAgSG93ZXZlciB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcyBvciB0byBmaWxlIGEgYnVnIHJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgbWFkZSBzaW1wbGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVycyBGb3JnZTwvYT4gYW5kIGRvIGEgc2VhcmNoIGZvciAnUHJvZHVjdHMnPC9saT4KPGxpPlRvIG9idGFpbiBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IgYXQgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPlJvYmVydCBDYW1wYmVsbDwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ybXMuPC9hPjwvbGk+CjxsaT5Gb3Igc29tZSBxdWVzdGlvbnMgYW5kIGxpbWl0ZWQgdGVjaG5pY2FsIHN1cHBvcnQsIHRoZSBhdXRob3IgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPC91bD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4KPGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DR0V4dGVuc2lvbnMgPSZndDsgMS4zMi41PC9saT48bGk+T3JkZXJzID0mZ3Q7IDEuMTMuNzwvbGk+PGxpPkpRdWVyeVRvb2xzID0mZ3Q7IDEuMi40PC9saT48bGk+UHJvZHVjdHMgPSZndDsgMi4xOS40PC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGlubGluZT0iZGVmYXVsdCIgLSBTcGVjaWZ5IHRoYXQgdGhlIGNvdXBvbiBjb2RlIGZvcm0gaXMgaW5saW5lLCBhbmQgdGhlIHJlc3VsdHMgc2hvdWxkIHJlcGxhY2UgdGhlIG9yaWdpbmFsIHRhZyBhbmQgbm90IHRoZSBwYWdlIGNvbnRlbnRzPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB0ZW1wbGF0ZT0iIiAtIFNwZWNpZnkgdGhlIG5hbWUgb2YgYSBub24gZGVmYXVsdCBjb3Vwb24gY29kZSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGZvciB0aGUgZGVmYXVsdCBhY3Rpb248L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMS4zPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2U8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuMSAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjQgLSBPY3RvYmVyLzIwMDkKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlczwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC41IC0gT2N0b2Jlci8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXM8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuNiAtIEZlYnJ1YXJ5LzIwMDkKICAgIDx1bD4KICAgICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZ2V0IGRpc2NvdW50IGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBwcm9kdWN0LjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlZlcnNpb24gMS4wLjYgLSBKdW5lLzIwMTAKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5WZXJzaW9uIDEuMC44IC0gSnVseS8yMDEwCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+VmVyc2lvbiAxLjAuMTAgLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgICAgPGxpPkFkZHMgZnJvbnRlbmQgYWJpbGl0eSB0byByZXNldCBjb3Vwb24gY29kZXMgdGhhdCBoYXZlIGJlZW4gZW50ZXJlZC48L2xpPgogICAgPC91bD4KICA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjExLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xMi0gTWFyY2gvMjAxMQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTQgLSBBcHJpbC8yMDExCiAgIDx1bD4KICAgICA8bGk+TWlub3IgYnVnIGZpeC48L2xpPgogICA8L3VsPgogPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xNSAtIERlY2VtYmVyLzIwMTEKICAgPHVsPgogICAgIDxsaT5NaW5vciBidWcgZml4LjwvbGk+CiAgIDwvdWw+CiA8L2xpPgogPGxpPlZlcnNpb24gMS4xLnggLSBEZWNlbWJlci8yMDEyCiAgIDxwPjxzdHJvbmc+Tk9URTogQ09NUEFUSUJJTElUWSBNQVkgQkUgQlJPS0VOLiAgQ0hFQ0sgQUxMIE9GIFlPVVIgUFJPTU9USU9OUy48L3N0cm9uZz48L3A+CiAgIDxwPjxzdHJvbmc+Tk9URTogUEhQIDUuMy54IElTIFJFUVVJUkVELjwvc3Ryb25nPjwvcD4KICAgPHVsPgogICAgICA8bGk+TWFqb3IgcmV2aXNpb24gLSBhZGRzIGluc3RhbnQsIGFuZCBjaGVja291dCB0eXBlIHByb21vdGlvbnMuPC9saT4KICAgICAgPGxpPkFkZHMgbmV3IHByb21vdGlvbiB0ZXN0ZXIgY2xhc3NlcywgYW5kIGRlcHJlY2F0ZXMgdGhlIG9sZCBvbmVzLjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPk5vdGU6IFRoaXMgbWF5IG5vdCBiZSBhIHNpbXBsZSB1cGdyYWRlLjwvc3Ryb25nPjwvbGk+CiAgIDwvdWw+CiA8L2xpPgo8L3VsPgo8YnIgLz4=]]></about>
	<description><![CDATA[Create, manage, and interact with sales and promotions for your e-commerce site]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.32.5</requiredversion>
	</requires>
	<requires>
	  <requiredname>Orders</requiredname>
	  <requiredversion>1.13.7</requiredversion>
	</requires>
	<requires>
	  <requiredname>JQueryTools</requiredname>
	  <requiredversion>1.2.4</requiredversion>
	</requires>
	<requires>
	  <requiredname>Products</requiredname>
	  <requiredversion>2.19.4</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_addpromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemF0aW9uCi8vCiRmZXVfbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwoKLy8KLy8gc2V0dXAKLy8KJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CmlmKCBpc3NldCgkcGFyYW1zWyd0eXBlJ10pICkgewogICR0eXBlID0gdHJpbSgkcGFyYW1zWyd0eXBlJ10pOwp9CiRwcm9tbyA9ICcnOwppZiggaXNzZXQoJHBhcmFtc1sncHJvbW9pZCddKSApIHsKICAvLyB1cGRhdGluZwogICRwcm9tbyA9IHByb21vX29wczo6bG9hZF9wcm9tb19ieV9pZCgoaW50KSRwYXJhbXNbJ3Byb21vaWQnXSk7CiAgJHR5cGUgPSAkcHJvbW8tPmdldF90eXBlKCk7IC8vIHVzZSB0aGUgcHJvbW90aW9uIHR5cGUuCn0KZWxzZSB7CiAgLy8gbmV3IHByb21vCiAgJHByb21vID0gbmV3IHByb21vdGlvbigpOwogICRwcm9tby0+c2V0X2NyZWF0ZWQodGltZSgpKTsKICAkcHJvbW8tPnNldF9lbmRfZGF0ZShzdHJ0b3RpbWUoc3ByaW50ZignKyVkIG1vbnRocycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcpKSkpOwogICRwcm9tby0+c2V0X29mZmVyX3R5cGUoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfdHlwZScpKTsKICAkcHJvbW8tPnNldF9vZmZlcl9kYXRhKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZmx0X29mZmVyX2RhdGEnKSk7Cn0KCi8vIHRoaXMgc3R1ZmYgaGFzIHRvIGJlIGFmdGVyIGRhdGEgbG9hZHMgc28gdGhhdCB0aGUgdHlwZSBpcyBzcGVjaWZpZWQgY29ycmVjdGx5Lgpzd2l0Y2goICR0eXBlICkgewogY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycpOwogICBicmVhazsKIGNhc2UgcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOgogICAkdGhpcy0+U2V0Q3VycmVudFRhYignY2hlY2tvdXRfcHJvbW90aW9ucycpOwogICBicmVhazsKfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApIHsKICAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwp9CgovLwovLyBnYXRoZXIgZGF0YQovLwppZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgewogIC8vIHZhbGlkYXRlCiAgJGVycm9yID0gJyc7CgogIC8vIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lIGlzIHZhbGlkLgogIGlmKCAhcHJvbW9fb3BzOjpjaGVja191bnVzZWRfbmFtZSh0cmltKCRwYXJhbXNbJ25hbWUnXSksJHByb21vLT5nZXRfaWQoKSkgKSB7CiAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfbmFtZV9leGlzdHMnKTsKICB9CgogIC8vIHZhbGlkYXRlIHRoZSBjb25kaXRpb25zLgogIGlmKCBlbXB0eSgkZXJyb3IpICYmIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmR0eXBlJ10pICkgewogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXSk7ICRpKysgKSB7CiAgICAgIGlmKCAhZW1wdHkoJGVycm9yKSApIGJyZWFrOwoKICAgICAgJGRhdGEgPSAkcGFyYW1zWydzYXZlZF9jb25kZGF0YSddWyRpXTsKICAgICAgc3dpdGNoKCRwYXJhbXNbJ3NhdmVkX2NvbmR0eXBlJ11bJGldKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0ZFVToKCWlmKCAhJGZldV9tb2R1bGUgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9tb2R1bGVfbm90X2ZvdW5kJywnRnJvbnRFbmRVc2VycycpOwoJfQoJJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7Cglmb3JlYWNoKCAkbGlzdCBhcyAkdG1wICkgewoJICBpZiggISRmZXVfbW9kdWxlLT5Hcm91cEV4aXN0c0J5TmFtZSh0cmltKCR0bXApKSApIHsKCSAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9mZXVfZ3JvdXAnKTsKCSAgICBicmVhazsKCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9TVUJUT1RBTDoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgoJaWYoICR0eXBlID09IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9jb25kaXRpb25fdHlwZScpOwoJfQoJZWxzZSB7CgkgICR0bXAgPSBmbG9hdHZhbCgkZGF0YSk7CgkgIGlmKCAkdG1wIDw9IDAuMDEgfHwgJHRtcCA+IDEwMDAwMCApIHsKCSAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9vcmRlcl9hbW91bnQnKTsKCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CgkkbGlzdCA9IGV4cGxvZGUoJywnLCRkYXRhKTsKCWZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgIGlmKCAhcHJvZHVjdF9vcHM6OmlzX3ZhbGlkX3Byb2R1Y3RfaWQodHJpbSgkdG1wKSkgKSB7CgkgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCcpOwoJICAgIGJyZWFrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkkbGlzdCA9IGV4cGxvZGUoJywnLCRkYXRhKTsKCWZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgIGlmKCAhcHJvZHVjdF9vcHM6OmlzX3ZhbGlkX2NhdGVnb3J5KHRyaW0oJHRtcCkpICkgewoJICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3Byb2R1Y3RfY2F0ZWdvcnknKTsKCSAgICBicmVhazsKCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESElFUjoKCS8vIHRvZG8KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOgoJaWYoICFwcm9tb19vcHM6OmNoZWNrX3VudXNlZF9jb3Vwb24oJGRhdGEsJHByb21vLT5nZXRfaWQoKSkgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9jb3Vwb25fZXhpc3RzJyk7Cgl9CglicmVhazsKICAgICAgfQogICAgfQoKICAgIC8vIHZhbGlkYXRlIHRoZSBvZmZlcgogICAgaWYoIGVtcHR5KCRlcnJvcikgKSB7CiAgICAgIHN3aXRjaCgkcGFyYW1zWydvZmZlcl90eXBlJ10pIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQ6CglpZiggJHR5cGUgPT0gcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX29mZmVyX3R5cGUnKTsKCX0KCWVsc2UgewoJICAkdG1wID0gZmxvYXR2YWwoJHBhcmFtc1snb2ZmZXJfZGF0YSddKTsKCSAgaWYoICR0bXAgPCAwLjAwMDEgfHwgJHRtcCA+IDEwMC4wICkgewoJICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJyk7CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKCSR0bXAgPSBmbG9hdHZhbCgkcGFyYW1zWydvZmZlcl9kYXRhJ10pOwoJaWYoICR0bXAgPCAwLjAwMDEgfHwgJHRtcCA+IDEwMC4wICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF92YWx1ZScpOwoJfQoJYnJlYWs7CgkgICAgCiAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKCWlmKCAkdHlwZSA9PSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVCApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfb2ZmZXJfdHlwZScpOwoJfQoJZWxzZSB7CgkgICR0bXAgPSBmbG9hdHZhbCgkcGFyYW1zWydvZmZlcl9kYXRhJ10pOwoJICBpZiggJHRtcCA8IDAuMDAwMSB8fCAkdG1wID4gMTAwMDAuMCApIHsKCSAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF92YWx1ZScpOwoJICB9Cgl9CglicmVhazsKCSAgICAKICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CgkkdG1wID0gdHJpbSgkcGFyYW1zWydvZmZlcl9kYXRhJ10pOwoJaWYoIXByb2R1Y3Rfb3BzOjppc192YWxpZF9wcm9kdWN0X2lkKCR0bXApKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3Byb2R1Y3QnKTsKCX0KCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gcHV0IHRoZSBwYXJhbXMgaW4gdGhlIHByb21vIG9iamVjdAogICAgaWYoIGVtcHR5KCRlcnJvcikgKSB7CiAgICAgICRwcm9tby0+c2V0X25hbWUodHJpbSgkcGFyYW1zWyduYW1lJ10pKTsKICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkgKSB7CgkkcHJvbW8tPnNldF90eXBlKCRwYXJhbXNbJ3R5cGUnXSk7CiAgICAgIH0KICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ10pICkgewoJJHByb21vLT5zZXRfZGVzY3JpcHRpb24odHJpbSgkcGFyYW1zWydkZXNjcmlwdGlvbiddKSk7CiAgICAgIH0KICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2ltYWdlJ10pICkgewoJJHByb21vLT5zZXRfaW1hZ2UodHJpbSgkcGFyYW1zWydpbWFnZSddKSk7CiAgICAgIH0KICAgICAgJHNkID0gbWt0aW1lKDAsMCwwLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZV9Nb250aCddLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZV9EYXknXSwoaW50KSRwYXJhbXNbJ3N0YXJ0X2RhdGVfWWVhciddKTsKICAgICAgJHByb21vLT5zZXRfc3RhcnRfZGF0ZSgkc2QpOwogICAgICAkZWQgPSBta3RpbWUoMCwwLDAsKGludCkkcGFyYW1zWydlbmRfZGF0ZV9Nb250aCddLChpbnQpJHBhcmFtc1snZW5kX2RhdGVfRGF5J10sKGludCkkcGFyYW1zWydlbmRfZGF0ZV9ZZWFyJ10pOwogICAgICAkcHJvbW8tPnNldF9lbmRfZGF0ZSgkZWQpOwogICAgICAkcHJvbW8tPnNldF9vZmZlcl90eXBlKCRwYXJhbXNbJ29mZmVyX3R5cGUnXSk7CiAgICAgICRwcm9tby0+c2V0X29mZmVyX2RhdGEodHJpbSgkcGFyYW1zWydvZmZlcl9kYXRhJ10pKTsKICAgICAgJHByb21vLT5kZWxfY29uZGl0aW9ucygpOwogICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkcGFyYW1zWydzYXZlZF9jb25kdHlwZSddKTsgJGkrKyApIHsKCSRjb25kID0gbmV3IHByb21vdGlvbl9jb25kaXRpb247CgkkY29uZC0+c2V0X2NvbmRfdHlwZSgkcGFyYW1zWydzYXZlZF9jb25kdHlwZSddWyRpXSk7CgkkY29uZC0+c2V0X2RhdGEodHJpbSgkcGFyYW1zWydzYXZlZF9jb25kZGF0YSddWyRpXSkpOwoJJHByb21vLT5hZGRfY29uZGl0aW9uKCRjb25kKTsKICAgICAgfQoKICAgICAgJHByb21vLT5jbGVhcl9leHRyYSgpOwogICAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlICkgewoJaWYoICFzdGFydHN3aXRoKCRrZXksJ2V4dHJhXycpICkgY29udGludWU7CgoJJG5rZXkgPSBzdWJzdHIoJGtleSw2KTsKCSRwcm9tby0+c2V0X2V4dHJhKCRua2V5LCR2YWx1ZSk7CiAgICAgIH0KCiAgICAgIC8vIGNvbW1pdAogICAgICAkcmVzID0gJHByb21vLT5zYXZlKCk7CiAgICAgIGlmKCAkcmVzICkgewoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICAgICAgfQogICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3Jfc2F2ZV9wcm9tb3Rpb24nKTsKICAgIH0KCiAgICBpZiggJGVycm9yICkgewogICAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcik7CiAgICB9CiAgfQp9CgogICAgCi8vCi8vIGdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKLy8KJHRtcCA9IHByb21vdGlvbjo6Z2V0X3R5cGVzX2FycmF5KCk7CiRwcm9tb3R5cGVzID0gYXJyYXkoKTsKZm9yZWFjaCggJHRtcCBhcyAkb25lICkgewogICRwcm9tb3R5cGVzWyRvbmVdID0gJHRoaXMtPkxhbmcoJG9uZSk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGVzJywkcHJvbW90eXBlcyk7CgokdG1wID0gcHJvbW90aW9uOjpnZXRfb2ZmZXJfYXJyYXkoJHR5cGUpOwokb2ZmZXJ0eXBlcyA9IGFycmF5KCk7CmZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKICAkb2ZmZXJ0eXBlc1skb25lXSA9ICR0aGlzLT5MYW5nKCRvbmUpOwp9CiRzbWFydHktPmFzc2lnbignb2ZmZXJ0eXBlcycsJG9mZmVydHlwZXMpOwoKJHRtcCA9IHByb21vdGlvbl9jb25kaXRpb246OmdldF90eXBlc19hcnJheSgkdHlwZSk7CiRjb25kdHlwZXMgPSBhcnJheSgpOwpmb3JlYWNoKCAkdG1wIGFzICRjb25kICkgewogIGlmKCAhJGZldV9tb2R1bGUgJiYgJGNvbmQgPT0gUFJPTU9USU9OU19DT05EX0ZFVSApCiAgICBjb250aW51ZTsKCiAgJGNvbmR0eXBlc1skY29uZF0gPSAkdGhpcy0+TGFuZygkY29uZCk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdjb25kaXRpb250eXBlcycsJGNvbmR0eXBlcyk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLCRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tbycsJHByb21vKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGUnLCR0eXBlKTsKaWYoICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpICkgewogICRzbWFydHktPmFzc2lnbignY29uZGl0aW9ucycsJHByb21vLT5nZXRfY29uZGl0aW9ucygpKTsKfQokZXh0cyA9IGNnZV91dGlsczo6Z2V0X2ltYWdlX2V4dGVuc2lvbnMoKTsKJGRpciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpbWFnZWRpcicsJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc19wYXRoJ10pOwokZmlsZXMgPSBjZ2VfZGlyOjpnZXRfZmlsZV9saXN0KCRkaXIsJGV4dHMpOwokZmlsZXMgPSBjZ2VfYXJyYXk6Omhhc2hfcHJlcGVuZCgkZmlsZXMsJy0xJywkdGhpcy0+TGFuZygnbm9uZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdmaWxlX2xpc3QnLCRmaWxlcyk7CgovLwovLyBQcm9jZXNzIHRlbXBsYXRlCi8vCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fYWRkcHJvbW8udHBsJyk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_delpromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemF0aW9uCi8vCiR0aGlzLT5TZXRDdXJyZW50VGFiKCdjaGVja291dF9wcm9tb3Rpb25zJyk7CgppZiggIWlzc2V0KCRwYXJhbXNbJ3Byb21vaWQnXSkgKSB7CiAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nX3BhcmFtJykpOwogICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7Cn0KCnRyeSB7CiAgJHByb21vID0gcHJvbW90aW9uOjpsb2FkX2J5X2lkKChpbnQpJHBhcmFtc1sncHJvbW9pZCddKTsKCiAgc3dpdGNoKCAkcHJvbW8tPmdldF90eXBlKCkgKSB7CiAgY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgICR0aGlzLT5TZXRDdXJyZW50VGFiKCdpbnN0YW50X3Byb21vdGlvbnMnKTsKICAgIGJyZWFrOwogIH0KCiAgJHByb21vLT5kZWxldGUoKTsKCiAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19wcm9tb2RlbGV0ZWQnKSk7Cn0KY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsKICAkdGhpcy0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7Cn0KJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_movepromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCiR0aGlzLT5TZXRDdXJyZW50VGFiKCdwcm9tb3Rpb25zJyk7CmlmKCAhaXNzZXQoJHBhcmFtc1sncHJvbW8nXSkgfHwgIWlzc2V0KCRwYXJhbXNbJ2RpciddKSApIHsKICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdfcGFyYW0nKSk7CiAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKdHJ5IHsKICAkcHJvbW8gPSBwcm9tb3Rpb246OmxvYWRfYnlfaWQoKGludCkkcGFyYW1zWydwcm9tbyddKTsKICBzd2l0Y2goICRwcm9tby0+Z2V0X3R5cGUoKSApIHsKICBjYXNlIHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOgogICAgJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycpOwogICAgYnJlYWs7CiAgY2FzZSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ6CiAgICAkdGhpcy0+U2V0Q3VycmVudFRhYignY2hlY2tvdXRfcHJvbW90aW9ucycpOwogICAgYnJlYWs7CiAgfQoKCiAgc3dpdGNoKCBzdHJ0b2xvd2VyKCRwYXJhbXNbJ2RpciddKSApIHsKICBjYXNlICd1cCc6CiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nIFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciArIDEgCiAgICAgICAgICAgICAgV0hFUkUgaXRlbV9vcmRlciA9ID8gQU5EIHR5cGUgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2l0ZW1fb3JkZXIoKS0xLCRwcm9tby0+Z2V0X3R5cGUoKSkpOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgcmUtb3JkZXJpbmcgcHJvbW90aW9uJyk7CgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgLSAxCiAgICAgICAgICAgICAgV0hFUkUgaWQgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2lkKCkpKTsKICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIHJlLW9yZGVyaW5nIHByb21vdGlvbicpOwogICAgYnJlYWs7CgogIGNhc2UgJ2Rvd24nOgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgLSAxIAogICAgICAgICAgICAgIFdIRVJFIGl0ZW1fb3JkZXIgPSA/IEFORCB0eXBlID0gPyc7CiAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkcHJvbW8tPmdldF9pdGVtX29yZGVyKCkrMSwkcHJvbW8tPmdldF90eXBlKCkpKTsKICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIHJlLW9yZGVyaW5nIHByb21vdGlvbicpOwogICAgCiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nIFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciArIDEKICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nOwogICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHByb21vLT5nZXRfaWQoKSkpOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgcmUtb3JkZXJpbmcgcHJvbW90aW9uJyk7CiAgICBicmVhazsKICB9Cn0KY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsKICAkdGhpcy0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7Cn0KJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIGV4aXQ7CgokdGhpcy0+U2V0Q3VycmVudFRhYignc2V0dGluZ3MnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsKGludCkkcGFyYW1zWydwcm9tb3Rpb25fcGVyaW9kJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl90eXBlJyx0cmltKCRwYXJhbXNbJ29mZmVyX3R5cGUnXSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnaW1hZ2VfZGlyJyx0cmltKCRwYXJhbXNbJ2ltYWdlX2RpciddKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9pbnZhbGlkX2NvZGUnLHRyaW0oJHBhcmFtc1snZXJyb3JfaW52YWxpZCddKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9lbXB0eV9jb2RlJyx0cmltKCRwYXJhbXNbJ2Vycm9yX2VtcHR5J10pKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJyx0cmltKCRwYXJhbXNbJ21zZ192YWxpZCddKSk7Cgpzd2l0Y2goJHBhcmFtc1snb2ZmZXJfdHlwZSddKQogIHsKICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKICAgIGlmKCBlbXB0eSgkcGFyYW1zWydvZmZlcl9wZXJjZW50J10pIHx8IAoJKCRwYXJhbXNbJ29mZmVyX3BlcmNlbnQnXSA8IDAuMDAxKSB8fCAKCSgkcGFyYW1zWydvZmZlcl9wZXJjZW50J10gPiAxMDAuMCkgKQogICAgICB7CgkkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfdmFsdWUnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwogICAgICB9CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl9kYXRhJywkcGFyYW1zWydvZmZlcl9wZXJjZW50J10pOwogICAgYnJlYWs7CiAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgogIGlmKCBlbXB0eSgkcGFyYW1zWydvZmZlcl9wcmljZSddKSB8fCAoJHBhcmFtc1snb2ZmZXJfcHJpY2UnXSA8IDAuMDAxKSkKICAgICAgewoJJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJykpOwoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICAgICAgfQogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJHBhcmFtc1snb2ZmZXJfcHJpY2UnXSk7CiAgICBicmVhazsKICBkZWZhdWx0OgogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJycpOwogICAgYnJlYWs7CiAgfQokdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3ByZWZzdXBkYXRlZCcpKTsKJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_setdflttemplates.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiR0aGlzLT5TZXRDdXJyZW50VGFiKCdkZmx0X3RlbXBsYXRlcycpOwoKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKQogIHsKICAgIGV4aXQoKTsKICB9CgppZiggaXNzZXQoICRwYXJhbXNbJ3N1Ym1pdF9jb3Vwb29uZm9ybXRlbXBsYXRlJ10gKSApCiAgewogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0oJHBhcmFtc1snaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlJ10pKTsKICB9CmVsc2UgaWYoIGlzc2V0KCAkcGFyYW1zWydyZXNldF9jb3Vwb25mb3JtdGVtcGxhdGUnXSApICkKICB7CiAgICAkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS4nL3RlbXBsYXRlcy9vcmlnX2NvdXBvbmZvcm1fdGVtcGxhdGUudHBsJzsKICAgIGlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQogICAgICB7CiAgICAgICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSwkdGVtcGxhdGUpOwogICAgICB9CiAgfQoKCiR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgovLwovLyBpbml0aWFsaXphdGlvbgovLwokdGhldGVtcGxhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZShQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSk7CiRpbmxpbmUgPSAwOwokY29kZSA9ICcnOwokZXJyb3IgPSAnJzsKJG1lc3NhZ2UgPSAnJzsKJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJHRoaXMtPkdldE5hbWUoKSk7CgovLwovLyBoYW5kbGUgcGFyYW1zCi8vCmlmKCBpc3NldCgkcGFyYW1zWydpbmxpbmUnXSkgKSAkaW5saW5lID0gKGludCkkcGFyYW1zWydpbmxpbmUnXTsKaWYoIGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICkgJHRoZXRlbXBsYXRlID0gdHJpbSgkcGFyYW1zWyd0ZW1wbGF0ZSddKTsKCi8vCi8vIGhhbmRlIGZvcm0gZGF0YQovLwppZiggaXNzZXQoJHBhcmFtc1sncHJvbW9fc3VibWl0J10pICkgewogIGlmKCBpc3NldCgkcGFyYW1zWydwcm9tb19jb2RlJ10pICkgJGNvZGUgPSB0cmltKCRwYXJhbXNbJ3Byb21vX2NvZGUnXSk7CgogICRlcnJvciA9ICcnOwogICRtc2cgPSAnJzsKICBpZiggJGNvZGUgPT0gJycgKSB7CiAgICAkZXJyb3IgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXJyb3JfZW1wdHlfY29kZScpOwogIH0KICBlbHNlIHsKICAgIC8vIGNoZWNrIGZvciBjb2RlIHZhbGlkaXR5CiAgICBpZiggIXByb21vX29wczo6aXNfdmFsaWRfY291cG9uKCRjb2RlKSApIHsKICAgICAgJGVycm9yID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vycm9yX2ludmFsaWRfY29kZScpOwogICAgfQogICAgZWxzZSB7CiAgICAgIFByb21vdGlvbnM6OmFkZF9jb3Vwb24oJGNvZGUpOwogICAgICAkbXNnID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJyk7CiAgICAgICRjb2RlID0gJyc7CiAgICB9CiAgfQoKICBpZiggJGVycm9yICkgJHNlc3MtPnB1dCgnZXJyb3InLCRlcnJvcik7CiAgaWYoICRtc2cgKSAkc2Vzcy0+cHV0KCdtc2cnLCRtc2cpOwoKICBpZiggaXNzZXQoJHBhcmFtc1sncHJvbW9fb3JpZ191cmwnXSkgKSB7CiAgICAkdXJsID0gdHJpbSgkcGFyYW1zWydwcm9tb19vcmlnX3VybCddKTsKICAgICR1cmwgPSBzdHJfcmVwbGFjZSgnYW1wOycsJycsJHVybCk7CiAgICBpZiggJHVybCApIHJlZGlyZWN0KCR1cmwpOwogIH0KfQplbHNlIGlmKCBpc3NldCgkcGFyYW1zWydwcm9tb19jbGVhciddKSApIHsKICBQcm9tb3Rpb25zOjpjbGVhcl9jb3Vwb25zKCk7CiAgJG1zZyA9ICR0aGlzLT5MYW5nKCdjb3Vwb25zX2NsZWFyZWQnKTsKCiAgJHNlc3MtPnB1dCgnbXNnJywkbXNnKTsKfQoKLy8KLy8gZ2l2ZSBldmVyeXRoaW5nIHRvIHNtYXJ0eQovLwppZiggJHNlc3MtPmV4aXN0cygnbXNnJykgKSB7CiAgJG1zZyA9ICRzZXNzLT5nZXQoJ21zZycpOwogICRzZXNzLT5jbGVhcignbXNnJyk7Cn0KaWYoICRzZXNzLT5leGlzdHMoJ2Vycm9yJykgKSB7CiAgJGVycm9yID0gJHNlc3MtPmdldCgnZXJyb3InKTsKICAkc2Vzcy0+Y2xlYXIoJ2Vycm9yJyk7Cn0KaWYoICRzZXNzLT5leGlzdHMoJ2NvdXBvbnMnKSApIHsKICAkY291cG9ucyA9ICRzZXNzLT5nZXQoJ2NvdXBvbnMnKTsKICBpZiggaXNfYXJyYXkoJGNvdXBvbnMpICYmIGNvdW50KCRjb3Vwb25zKSApIHsKICAgICRzbWFydHktPmFzc2lnbignY291cG9ucycsJGNvdXBvbnMpOwogIH0KfQoKaWYoIGlzc2V0KCRtc2cpICYmICRtc2cgIT0gJycgKSB7CiAgJHNtYXJ0eS0+YXNzaWduKCdtc2cnLCRtc2cpOwp9CmlmKCBpc3NldCgkZXJyb3IpICYmICRlcnJvciAhPSAnJyApIHsKICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkZXJyb3IpOwp9CmlmKCAhaXNzZXQoJHBhcmFtc1sncHJvbW9fb3JpZ191cmwnXSkgKSB7CiAgJHBhcmFtc1sncHJvbW9fb3JpZ191cmwnXSA9IGNnZV91cmw6OmN1cnJlbnRfdXJsKCk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdjb2RlJywkY29kZSk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywKCQkkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJHBhcmFtcywkaW5saW5lKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgovLwovLyBvdXRwdXQKLy8KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdjb3Vwb25mb3JtXycuJHRoZXRlbXBsYXRlKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgppZiggJGlkID09ICcnICkgewogIGRlYnVnX2Rpc3BsYXkoJ2VtcHR5IGlkJyk7CiAgc3RhY2tfdHJhY2UoKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKQogIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignY2hlY2tvdXRfcHJvbW90aW9ucycsJHRoaXMtPkxhbmcoJ2xibF9jaGVja291dF9wcm9tb3Rpb25zJykpOwogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpbnN0YW50X3Byb21vdGlvbnMnLCR0aGlzLT5MYW5nKCdsYmxfaW5zdGFudF9wcm9tb3Rpb25zJykpOwogIH0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApCiAgewogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjb3Vwb25mb3JtJywkdGhpcy0+TGFuZygnbGJsX2NvdXBvbmZvcm1fdGVtcGxhdGVzJykpOwogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdkZmx0X3RlbXBsYXRlcycsJHRoaXMtPkxhbmcoJ2xibF9kZWZhdWx0X3RlbXBsYXRlcycpKTsKICB9CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkKICB7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NldHRpbmdzJywkdGhpcy0+TGFuZygnbGJsX3NldHRpbmdzJykpOwogIH0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKQogIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdjaGVja291dF9wcm9tb3Rpb25zJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9jaGVja291dF9wcm9tb3Rpb25zdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycsJHBhcmFtcyk7CiAgICBpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5faW5zdGFudF9wcm9tb3Rpb25zdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkKICB7CiAgICBlY2hvICR0aGlzLT5TdGFydFRhYignY291cG9uZm9ybScsJHBhcmFtcyk7CiAgICBpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fY291cG9uZm9ybXRhYi5waHAnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdkZmx0X3RlbXBsYXRlcycsJHBhcmFtcyk7CiAgICBpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvZnVuY3Rpb24uYWRtaW5fZGZsdF90ZW1wbGF0ZXNfdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApCiAgewogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NldHRpbmdzJywkcGFyYW1zKTsKICAgIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9zZXR0aW5nc3RhYi5waHAnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwogIH0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2U8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuMSAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjQgLSBPY3RvYmVyLzIwMDkKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlczwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC41IC0gT2N0b2Jlci8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXM8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuNiAtIEZlYnJ1YXJ5LzIwMDkKICAgIDx1bD4KICAgICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZ2V0IGRpc2NvdW50IGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBwcm9kdWN0LjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlZlcnNpb24gMS4wLjYgLSBKdW5lLzIwMTAKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5WZXJzaW9uIDEuMC44IC0gSnVseS8yMDEwCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+VmVyc2lvbiAxLjAuMTAgLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgICAgPGxpPkFkZHMgZnJvbnRlbmQgYWJpbGl0eSB0byByZXNldCBjb3Vwb24gY29kZXMgdGhhdCBoYXZlIGJlZW4gZW50ZXJlZC48L2xpPgogICAgPC91bD4KICA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjExLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xMi0gTWFyY2gvMjAxMQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTQgLSBBcHJpbC8yMDExCiAgIDx1bD4KICAgICA8bGk+TWlub3IgYnVnIGZpeC48L2xpPgogICA8L3VsPgogPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xNSAtIERlY2VtYmVyLzIwMTEKICAgPHVsPgogICAgIDxsaT5NaW5vciBidWcgZml4LjwvbGk+CiAgIDwvdWw+CiA8L2xpPgogPGxpPlZlcnNpb24gMS4xLnggLSBEZWNlbWJlci8yMDEyCiAgIDxwPjxzdHJvbmc+Tk9URTogQ09NUEFUSUJJTElUWSBNQVkgQkUgQlJPS0VOLiAgQ0hFQ0sgQUxMIE9GIFlPVVIgUFJPTU9USU9OUy48L3N0cm9uZz48L3A+CiAgIDxwPjxzdHJvbmc+Tk9URTogUEhQIDUuMy54IElTIFJFUVVJUkVELjwvc3Ryb25nPjwvcD4KICAgPHVsPgogICAgICA8bGk+TWFqb3IgcmV2aXNpb24gLSBhZGRzIGluc3RhbnQsIGFuZCBjaGVja291dCB0eXBlIHByb21vdGlvbnMuPC9saT4KICAgICAgPGxpPkFkZHMgbmV3IHByb21vdGlvbiB0ZXN0ZXIgY2xhc3NlcywgYW5kIGRlcHJlY2F0ZXMgdGhlIG9sZCBvbmVzLjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPk5vdGU6IFRoaXMgbWF5IG5vdCBiZSBhIHNpbXBsZSB1cGdyYWRlLjwvc3Ryb25nPjwvbGk+CiAgIDwvdWw+CiA8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/function.admin_checkout_promotionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemUKLy8KCi8vIAovLyBnZXQgdGhlIGRhdGEKLy8KJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgdHlwZSA9ID8gT1JERVIgQlkgaXRlbV9vcmRlciBBU0MnOwokZGF0YSA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LGFycmF5KHByb21vdGlvbjo6VFlQRV9DSEVDS09VVCkpOwppZiggaXNfYXJyYXkoJGRhdGEpICkgewogIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRkYXRhKTsgJGkrKyApIHsKICAgICRyZWMgPSYgJGRhdGFbJGldOwogICAgJHJlY1snZWRpdF91cmwnXSA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLGFycmF5KCdwcm9tb2lkJz0+JHJlY1snaWQnXSkpOwogICAgJHJlY1snZWRpdF9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fYWRkcHJvbW8nLCRyZXR1cm5pZCwKCQkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ2VkaXQnKSwnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywKCQkJCQkgICAgICAgYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSk7CiAgICAkcmVjWydkZWxldGVfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlVVJMKCRpZCwnYWRtaW5fZGVscHJvbW8nLCRyZXR1cm5pZCxhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pKTsKICAgICRyZWNbJ2RlbGV0ZV9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fZGVscHJvbW8nLCRyZXR1cm5pZCwKCQkJCQkJICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLAoJCQkJCQkgYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSwnJywKCQkJCQkJICR0aGlzLT5MYW5nKCdyZWFsbHlfZGVsZXRlX3Byb21vdGlvbicpKTsKICAgICRyZWNbJ3N0YXJ0X2RhdGVfdXQnXSA9IGNnZV91dGlsczo6dW5peF90aW1lKCRyZWNbJ3N0YXJ0X2RhdGUnXSk7CiAgICAkcmVjWydlbmRfZGF0ZV91dCddID0gY2dlX3V0aWxzOjp1bml4X3RpbWUoJHJlY1snZW5kX2RhdGUnXSk7CiAgfQp9CgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCiRzbWFydHktPmFzc2lnbignYWRkbGluaycsCgkJJHRoaXMtPkNyZWF0ZUltYWdlTGluaygkaWQsJ2FkbWluX2FkZHByb21vJywkcmV0dXJuaWQsCgkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ3Byb21wdF9hZGRwcm9tbycpLAoJCQkJICAgICAgICdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsCgkJCQkgICAgICAgYXJyYXkoJ3R5cGUnPT5wcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQpLCcnLCcnLGZhbHNlKSk7CmlmKCBpc19hcnJheSgkZGF0YSkgKSB7CiAgJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3Rpb25zJywkZGF0YSk7Cn0KCi8vCi8vIGRpc3BsYXkgdGhlIHRlbXBhbHRlCi8vCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fY2hlY2tvdXRfcHJvbW90aW9uc3RhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_couponformtab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCRpZCwkcmV0dXJuaWQsJ2NvdXBvbmZvcm1fJywKCQkJICAgICBQcm9tb3Rpb25zOjpORVdDT1VQT05GT1JNX1RFTVBMQVRFLAoJCQkgICAgICdjb3Vwb25mb3JtJywKCQkJICAgICBQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSwKCQkJICAgICAkdGhpcy0+TGFuZygnY291cG9uZm9ybXRlbXBsYXRlX2FkZGVkaXQnKSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_dflt_templates_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlID0KICAkdGhpcy0+R2V0UHJlZmVyZW5jZShQcm9tb3Rpb25zOjpORVdDT1VQT05GT1JNX1RFTVBMQVRFKTsKCiRzbWFydHktPmFzc2lnbignaW5mb19kZmx0X3RlbXBsYXRlJywKCQkkdGhpcy0+TGFuZygnZGVmYXVsdF90ZW1wbGF0ZV9ub3RpY2UnKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsCgkJJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX3NldGRmbHR0ZW1wbGF0ZXMnLAoJCQkJICAgICAgICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKJHNtYXJ0eS0+YXNzaWduKCdsZWdlbmRfY291cG9uZm9ybXRlbXBsYXRlJywKCQkkdGhpcy0+TGFuZygndGl0bGVfY291cG9uZm9ybV9kZmx0dGVtcGxhdGUnKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJJHRoaXMtPkxhbmcoJ3Byb21wdF90ZW1wbGF0ZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGUnLAoJCSR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGlucHV0X2NvdXBvbmZvcm10ZW1wbGF0ZSwKCQkJCSAgICAgICdpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGUnKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJCQkJICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3Jlc2V0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwncmVzZXRfY291cG9uZm9ybXRlbXBsYXRlJywKCQkJCQkgJHRoaXMtPkxhbmcoJ3Jlc2V0dG9mYWN0b3J5JykpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fZGZsdF90ZW1wbGF0ZXNfdGFiLnRwbCcpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/function.admin_instant_promotionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemUKLy8KCi8vIAovLyBnZXQgdGhlIGRhdGEKLy8KJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgVFlQRSA9ID8gT1JERVIgQlkgaXRlbV9vcmRlciBBU0MnOwokZGF0YSA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LGFycmF5KHByb21vdGlvbjo6VFlQRV9JTlNUQU5UKSk7CmlmKCBpc19hcnJheSgkZGF0YSkgKSB7CiAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGRhdGEpOyAkaSsrICkgewogICAgJHJlYyA9JiAkZGF0YVskaV07CiAgICAkcmVjWydlZGl0X3VybCddID0gJHRoaXMtPkNyZWF0ZVVSTCgkaWQsJ2FkbWluX2FkZHByb21vJywkcmV0dXJuaWQsYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSk7CiAgICAkcmVjWydlZGl0X2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLAoJCQkJCSAgICAgICAkdGhpcy0+TGFuZygnZWRpdCcpLCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAoJCQkJCSAgICAgICBhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pKTsKICAgICRyZWNbJ2RlbGV0ZV91cmwnXSA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdhZG1pbl9kZWxwcm9tbycsJHJldHVybmlkLGFycmF5KCdwcm9tb2lkJz0+JHJlY1snaWQnXSkpOwogICAgJHJlY1snZGVsZXRlX2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9kZWxwcm9tbycsJHJldHVybmlkLAoJCQkJCQkgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCgkJCQkJCSBhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pLCcnLAoJCQkJCQkgJHRoaXMtPkxhbmcoJ3JlYWxseV9kZWxldGVfcHJvbW90aW9uJykpOwogICAgJHJlY1snc3RhcnRfZGF0ZV91dCddID0gY2dlX3V0aWxzOjp1bml4X3RpbWUoJHJlY1snc3RhcnRfZGF0ZSddKTsKICAgICRyZWNbJ2VuZF9kYXRlX3V0J10gPSBjZ2VfdXRpbHM6OnVuaXhfdGltZSgkcmVjWydlbmRfZGF0ZSddKTsKICB9Cn0KCi8vCi8vIGdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKLy8KJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywKCQkkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fYWRkcHJvbW8nLCRyZXR1cm5pZCwKCQkJCSAgICAgICAkdGhpcy0+TGFuZygncHJvbXB0X2FkZHByb21vJyksCgkJCQkgICAgICAgJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywKCQkJCSAgICAgICBhcnJheSgndHlwZSc9PnByb21vdGlvbjo6VFlQRV9JTlNUQU5UKSwnJywnJyxmYWxzZSkpOwppZiggaXNfYXJyYXkoJGRhdGEpICkgewogICRzbWFydHktPmFzc2lnbigncHJvbW90aW9ucycsJGRhdGEpOwp9CgovLwovLyBkaXNwbGF5IHRoZSB0ZW1wYWx0ZQovLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2luc3RhbnRfcHJvbW90aW9uc3RhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_settingstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIGV4aXQ7CgovLwovLyBpbml0aWFsaXplCi8vCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2xpYi9jbGFzcy5wcm9tb3Rpb24ucGhwJyk7CgovLwovLyBzZXR1cAovLwokcHJvZHVjdHNfbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUHJvZHVjdHMnKTsKCi8vCi8vIGdhdGhlciBkYXRhCi8vCgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCiRzbWFydHktPmFzc2lnbignY3VycmVuY3lfc3ltYm9sJywkcHJvZHVjdHNfbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdwcm9kdWN0X2N1cnJlbmN5c3ltYm9sJywnJCcpKTsKJHBlcmlvZHMgPSBhcnJheSgpOwpmb3IoICRpID0gMDsgJGkgPCAzNjsgJGkrKyApCiAgewogICAgJHBlcmlvZHNbJGkrMV0gPSAkaSsxOwogIH0KJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3Rpb25fcGVyaW9kcycsJHBlcmlvZHMpOwokcHJvbW90eXBlcyA9IGFycmF5KCk7CiRwcm9tb3R5cGVzW1BST01PVElPTlNfT0ZGRVJfUEVSQ0VOVF0gPSAkdGhpcy0+TGFuZyhQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQpOwokcHJvbW90eXBlc1tQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UXSA9ICR0aGlzLT5MYW5nKFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQpOwokcHJvbW90eXBlc1tQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RdID0gJHRoaXMtPkxhbmcoUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUKTsKJHNtYXJ0eS0+YXNzaWduKCdvZmZlcl90eXBlcycsJHByb21vdHlwZXMpOwokc21hcnR5LT5hc3NpZ24oJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsMSkpOwokc21hcnR5LT5hc3NpZ24oJ2RmbHRfb2ZmZXJfdHlwZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfdHlwZScsUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UKSk7CiRzbWFydHktPmFzc2lnbignZGZsdF9vZmZlcl9kYXRhJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl9kYXRhJywnLjEnKSk7CiRzbWFydHktPmFzc2lnbignaW1hZ2VfZGlyJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaW1hZ2VfZGlyJywnJykpOwokc21hcnR5LT5hc3NpZ24oJ2Vycm9yX2ludmFsaWRfY29kZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vycm9yX2ludmFsaWRfY29kZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdlcnJvcl9lbXB0eV9jb2RlJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXJyb3JfZW1wdHlfY29kZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdtc2dfdmFsaWRfY29kZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJykpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fc2F2ZXNldHRpbmdzJykpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKLy8KLy8gcHJvY2VzcyB0ZW1wbGF0ZQovLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3NldHRpbmdzdGFiLnRwbCcpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2R1Y3RzIGFuZCBPcmRlcnMgbW9kdWxlIHRvIGFsbG93IGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aW1lIGxpbWl0ZWQgcHJvbW90aW9ucyBmb3IgdGhlIHByb2R1Y3RzIG9uIHlvdXIgZS1jb21tZXJjZSB3ZWJzaXRlLjwvcD4KPGgzPkZlYXR1cmVzOjwvaDM+Cjx1bD4KPGxpPjx1PkFsbCBwcm9tb3Rpb25zIGFyZSB0aW1lIGxpbWl0ZWQuPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+QSBwcm9tb3Rpb24gY2FuIGhhdmUgb25lIG9yIG1vcmUgY29uZGl0aW9ucyB0byBpbmRpY2F0ZSBlbGlnaWJpbGl0eS48L3U+CiAgPHA+SWYgYSBwcm9tb3Rpb24gaXMgZGVmaW5lZCB3aXRoIHR3byBvciBtb3JlIGNvbmRpdGlvbnMsIGFsbCBvZiB0aG9zZSBjb25kaXRpb25zIG11c3QgYmUgbWV0IGluIG9yZGVyIGZvciB0aGUgY3VzdG9tZXIgdG8gYmUgZWxpZ2libGUgZm9yIHRoZSBwcm9tb3Rpb24uPC9wPgogIDxwPkEgbnVtYmVyIG9mIGNvbmRpdGlvbiB0eXBlcyBleGlzdC4uLiBIb3dldmVyIHNvbWUgb2YgdGhlbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlcnMuICBpLmU6ICBZb3UgY2Fubm90IGhhdmUgdHdvIGRpZmZlcmVudCB0eXBlIG9mIHByb2R1Y3QgY29uZGl0aW9ucy48L3A+CiAgPHVsPgo8bGk+PHU+UmVxdWlyZSBtZW1iZXJzaGlwIGluIGFuIEZFVSBHcm91cDo8L3U+CiAgPHA+WW91IGNhbiBlbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIEZFVSBncm91cCBuYW1lcy4gIFRoZSBsb2dnZWQgaW4gd2Vic2l0ZSB2aXNpdG9yIG11c3QgYmUgYSBtZW1iZXIgb2Ygb25lIG9mIHRoZXNlIGdyb3VwcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhlIHByb21vdGlvbi48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gcHVyY2hhc2UgYW1vdW50OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgcHJlLXRheC9wcmUtc2hpcHBpbmcgdG90YWwgZm9yIHRoZWlyIG9yZGVyIG11c3QgbWVldCB0aGUgc3BlY2lmaWVkIG1pbmltdW0gdmFsdWUuPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgdGhlIHB1cmNoYXNlIG9mIGEgc3BlY2lmaWMgcHJvZHVjdDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IG1hdGNoaW5nIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGlkcyBlbnRlcmVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBjYXRlZ29yeTo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IHRoYXQgaXMgd2l0aGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnkgbmFtZXMgKGZyb20gdGhlIHByb2R1Y3RzIG1vZHVsZSkgc3BlY2lmaWVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBoaWVyYXJjaHk6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCB0aGF0IGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHByb2R1Y3RzIG1vZHVsZSBoaWVyYXJjaHkuPC9wPgogIDxwPkhpZXJhcmNoeSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtIG9mICZxdW90O1BhcmVudC5QYXJlbnQuQ2hpbGQmcXVvdDsgaS5lOiAmcXVvdDtDbG90aGluZy5UZW50cyZxdW90Oy4gIEhpZXJhcmNoeSBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLiAgV2lsZGNhcmRzIGNhbiBiZSBzcGVjZmlmaWVkIGJ5IHVzaW5nIHRoZSAqIGNoYXJhY3Rlci4gIGkuZTogJnF1b3Q7Q2xvdGhpbmcqJnF1b3Q7LjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIGEgQ291cG9uIENvZGU6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhlIG11c3QgaGF2ZSBzdXBwbGllZCB0aGUgY291cG9uIGNvZGUgdGhhdCBtYXRjaGVzIHRoaXMgY29uZGl0aW9uLjwvcD4KICA8cD5JbiBvcmRlciB0byBhbGxvdyBjdXN0b21lcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLCB5b3UgbmVlZCB0byBhZGQgYSB0YWcgaW50byB5b3VyIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50IGxpa2Uge1Byb21vdGlvbnN9LiAgVGhpcyB3aWxsIGRpc3BsYXkgYSBmb3JtIHRoYXQgYWxsb3dzIHlvdXIgdXNlcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLiAgQ291cG9uIGNvZGVzIGFyZSByZW1lbWJlcmVkIHVudGlsIHRoZSB1c2VyIGNsb3NlcyB0aGUgYnJvd3Nlci48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gb3JkZXIgd2VpZ2h0OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgc3VtIHRvdGFsIG9mIGFsbCBvZiB0aGUgd2VpZ2h0IHZhbHVlcyBmb3IgdGhlIGl0ZW1zIGluIGhpcyBjYXJ0IG11c3QgbWVldCBvciBleGNlZWQgdGhlIHZhbHVlIHNwZWNpZmllZC48L3A+PC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPjx1PkVhY2ggcHJvbW90aW9uIGNhbiBoYXZlIGEgZGlmZmVyZW50ICZxdW90O29mZmVyJnF1b3Q7PC91Pgo8cD5BIG51bWJlciBvZiBkaWZmZXJlbnQgb2ZmZXJzIHR5cGVzIGFyZSBhdmFpbGFibGU6PC9wPgogIDx1bD4KPGxpPjx1PlBlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsOjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGJldHdlZW4gMCBhbmQgMSB0byBpbmRpY2F0ZSBhIHBlcmNlbnRhZ2Ugb2ZmLiAgaS5lOiAwLjEgaW5kaWNhdGVzIDEwJSBvZmYuICAgRHVyaW5nIHRoZSBjaGVja291dCBwcm9jZXNzLCBhbnkgbm9uIHRheCwgb3Igbm9uIHNoaXBwaW5nIGl0ZW0gaW4gdGhlIG9yZGVyIHdpbGwgYmUgcmVkdWNlZCBpbiBwcmljZSBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC48L3A+PC9saT4KPGxpPjx1PlJlZHVjZSBvcmRlciB0b3RhbCBieSBhIHNwZWNpZmllZCBhbW91bnQ6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgYWxsb3dzIHlvdSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0aGUgb3JkZXIgYnkgYSBjZXJ0YWluIGRvbGxhciBmaWd1cmUuICBUaGlzIGRvbGxhciBmaWd1cmUgd2lsbCBiZSBhZGRlZCBhcyBhIGRpc2NvdW50IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcyBhbmQgd2lsbCBhcHBlYXIgb24gdGhlIGludm9pY2UuPC9wPjwvbGk+CjxsaT48dT5SZWNlaXZlIGEgRnJlZSBQcm9kdWN0OjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIHByb2R1Y3QgaWQgdG8gYXV0b21hdGljYWxseSBpbmNsdWRlIGluIHRoZSBvcmRlciBhdCBubyBjb3N0LiAgVGhpcyBwcm9kdWN0IHdpbGwgYmUgYWRkZWQgYXMgYSBwcm9kdWN0IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcywgYnV0IHdpbGwgYXBwZWFyIGF0IG5vIGNvc3QuPC9wPjwvbGk+CjxsaT48dT5EaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2U6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBjb25kaXRpb24gaXMgc3BlY2lmaWVkLiAgSWYgYSBwcm9kdWN0IGNvbmRpdGlvbiBpcyBzcGVjaXJpZWQsIGFuZCBtYXRjaGVzLCB0aGlzIG9mZmVyIHR5cGUgd2lsbCBkaXNjb3VudCB0aGUgbWF0Y2hpbmcgcHJvZHVjdHMgZnJvbSB0aGUgY3VzdG9tZXIgb3JkZXIgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZS48L3A+LgogIDwvdWw+CjwvbGk+CjxsaT48dT5BbGxvd3Mgd2Vic2l0ZSB2aXNpdG9ycyB0byBlbnRlciBvbmUgb3IgbW9yZSBjb3Vwb24gY29kZXM8L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5EaXNjb3VudHMgYXJlIGNhbGN1bGF0ZWQgYW5kIGFwcGxpZWQgdG8gdGhlIG9yZGVyIGR1cmluZyB0aGUgY2hlY2tvdXQgcHJvY2Vzcy48L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5JZiBhIHdlYiBjdXN0b21lciBpcyBlbGlnaWJsZSBmb3IgbXVsdGlwbGUgcHJvbW90aW9ucywgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCB2YWx1ZSBpcyBhcHBsaWVkLjwvdT48L2xpPgo8L3VsPgo8YnIvPgo8aDM+SG93IERvIEkgVXNlIEl0OjwvaDM+CjxvbD4KICA8bGk+MS4gSW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBtb2R1bGU8L2xpPgogIDxsaT4yLiBDcmVhdGUgYXQgbGVhc3Qgb25lIHByb21vdGlvbjwvbGk+CiAgPGxpPjMuIFNwZWNpZnkgdGhpcyBtb2R1bGUgYXMgdGhlICZxdW90O1Byb21vdGlvbnMmcXVvdDsgbW9kdWxlIHdpdGhpbiB0aGUgT3JkZXJzIFByZWZlcmVuY2VzLjwvbGk+CiAgPGxpPjQuIDxlbT4ob3B0aW9uYWwpPC9lbT4gQWRkIHtQcm9tb3Rpb25zfSB0byBhIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50LjwvZW0+PC9saT4KPC9vbD4KPGgzPkV4YW1wbGU6PC9oMz4KPHA+SW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgY3JlYXRlIGEgcHJvbW90aW9uIGxpa2UgJnF1b3Q7MTAlIG9mZiBhbGwgb3JkZXJzIG92ZXIgJDEwMCwgd2l0aCBjb3Vwb24gY29kZSZxdW90Ozo8L3A+Cjx1bD4KICA8bGk+MS4gPHU+Q3JlYXRlIGEgbmV3IHByb21vdGlvbjwvdT4KICA8cD5OYXZpZ2F0ZSB0byB0aGUgcHJvbW90aW9ucyBtb2R1bGUgYWRtaW4gcGFuZWwsIGFuZCBjbGljayBvbiAmcXVvdDtBZGQgYSBOZXcgUHJvbW90aW9uJnF1b3Q7LiAgWW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggdGhlIHByb21vdGlvbnMgZm9ybS48L3A+PC9saT4KICA8bGk+Mi4gPHU+U3BlY2lmeSBhIHByb21vdGlvbiBuYW1lPC91PgogIDxwPkZvciB0aGlzIGV4YW1wbGUgd2Ugd2lsbCB1c2UgdGhlIG5hbWUgJnF1b3Q7U2ltcGxlIFNhbGUmcXVvdDs8L3A+PC9saT4KICA8bGk+My4gPHU+QWRkIGEgY291cG9uIGNvbmRpdGlvbjwvdT4KICA8cD5Gcm9tIHRoZSAmcXVvdDtUeXBlIG9mIENvbmRpdGlvbiZxdW90OyBkcm9wZG93biBzZWxlY3QgJnF1b3Q7UmVxdWlyZSBhIENvdXBvbiBDb2RlJnF1b3Q7LiAgRW50ZXIgJnF1b3Q7c2ltcGxlc2FsZSZxdW90OyBpbnRvIHRoZSBpbnB1dCBmaWVsZCBiZWxvdyBhbmQgY2xpY2sgQWRkLjwvcD48L2xpPgogIDxsaT40LiA8dT5BZGQgYW4gb3JkZXIgcHJpY2UgY29uZGl0aW9uPC91PgogIDxwPkZyb20gdGhlICZxdW90O1R5cGUgb2YgQ29uZGl0aW9uJnF1b3Q7IGRyb3Bkb3duIHNlbGVjdCAmcXVvdDtSZXF1aXJlIGEgTWluaW11bSBQdXJjaGFzZSBBbW91bnQmcXVvdDsgZnJvbSB0aGUgZHJvcGRvd24sIGFuZCBlbnRlciAxMDAgaW50byB0aGUgaW5wdXQgZmllbGQgYmVsb3cuICBDbGljayBBZGQuPC9wPjwvbGk+CiAgPGxpPjUuIDx1PlNwZWNpZnkgdGhlIG9mZmVyIHR5cGUsIGFuZCBhbW91bnQ8L3U+CiAgPHA+U2VsZWN0IHRoZSBvZmZlciB0eXBlICZxdW90O1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJnF1b3Q7IGFuZCBlbnRlciAwLjEgaW50byB0aGUgdGV4dCBmaWVsZCBiZWxvdyB0byBpbmRpY2F0ZSAxMCUmcXVvdDs8L3A+PC9saT4KICA8bGk+Ni4gPHU+Q2xpY2sgc3VibWl0PC91PjwvbGk+CjwvdWw+CjxoMz5TbWFydHkgUGx1Z2luczwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBzbWFydHkgcGx1Z2luIHRvIGFpZCBpbiByZXRyaWV2aW5nIGFuZCBkaXNwbGF5aW5nIGRpc2NvdW50cyBmb3IgYSBzaW5nbGUgcHJvZHVjdC48L3A+Cjx1bD4KICA8bGk+PHN0cm9uZz57cHJvbW9fZ2V0X3Byb2RfZGlzY291bnQgW2ZldV91aWQ9dmFsXSBwcm9kdWN0X2lkPXZhbCBbYXNzaWduPXZhcl19PC9zdHJvbmc+CiAgPHA+SWYgc3VjY2Vzc2Z1bCwgdGhpcyBwbHVnaW4gcmV0dXJucyBhIGhhc2ggY29udGFpbmluZyBkaXNjb3VudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9kdWN0LiAgVGhlIGdyZWF0ZXN0IHBvc3NpYmxlIGRpc2NvdW50IGlzIGNhbGN1bGF0ZWQsIGNvbnNpZGVyaW5nIGFsbCBhY3RpdmUgcHJvbW90aW9ucywgdXNlciBpZCwgZW50ZXJlZCBjb3Vwb24gY29kZXMsIGFuZCBvdGhlciBtYXRjaGluZyBjb25kaXRpb25zLjwvcD4KICA8cD5QYXJhbWV0ZXJzOjwvcD4KICA8dWw+CiAgPGxpPmZldV91aWQgKG9wdGlvbmFsKSAtIFRoZSBGcm9udEVuZFVzZXJzIHVzZXJpZCB0byB0ZXN0IHdpdGguICBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgaWQgd2lsbCBiZSB1c2VkLjwvbGk+CiAgPGxpPnByb2R1Y3RfaWQgKHJlcXVpcmVkKSAtIFRoZSBJRCBvZiB0aGUgcHJvZHVjdCB0byB0ZXN0IHdpdGguPC9saT4KICA8bGk+YXNzaWduIChvcHRpb25hbCkgLSBPcHRpb25hbGx5IGFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgPC91bD4KICA8L2xpPgo8L3VsPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiAgSG93ZXZlciB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcyBvciB0byBmaWxlIGEgYnVnIHJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgbWFkZSBzaW1wbGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVycyBGb3JnZTwvYT4gYW5kIGRvIGEgc2VhcmNoIGZvciAnUHJvZHVjdHMnPC9saT4KPGxpPlRvIG9idGFpbiBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IgYXQgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPlJvYmVydCBDYW1wYmVsbDwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ybXMuPC9hPjwvbGk+CjxsaT5Gb3Igc29tZSBxdWVzdGlvbnMgYW5kIGxpbWl0ZWQgdGVjaG5pY2FsIHN1cHBvcnQsIHRoZSBhdXRob3IgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPC91bD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiNBCiRsYW5nWydhZGQnXSA9ICdBZGQnOwoKCiNCCgoKI0MKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydjbGVhcl9jb3Vwb25zJ10gPSAnQ2xlYXIgQ291cG9ucyc7CiRsYW5nWydjb3Vwb25zX2NsZWFyZWQnXSA9ICdXZSBoYXZlIHJlc2V0IGFsbCBvZiB5b3VyIGNvdXBvbnMnOwokbGFuZ1snY291cG9uZm9ybXRlbXBsYXRlX2FkZGVkaXQnXSA9ICdBZGQgb3IgRWRpdCBhIENvdXBvbiBGb3JtIFRlbXBsYXRlJzsKCgojRAokbGFuZ1snZGVsZXRlJ10gPSAnRGVsZXRlJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGVfbm90aWNlJ10gPSA8PDxFT1QKPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgY29udGVudHMgb2YgdGhlc2UgdGV4dCBhcmVhcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgY29udGVudCBvZiB0ZW1wbGF0ZXMgd2hlbiB5b3UgY2xpY2sgJnF1b3Q7QWRkIFRlbXBsYXRlJnF1b3Q7IGluIHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZSB0YWIuICBFZGl0aW5nIG9uZSBvZiB0aGVzZSB0ZXh0IGFyZWFzIHdpbGwgaGF2ZSBubyBpbW1lZGlhdGUgZWZmZWN0IG9uIHlvdXIgd2Vic2l0ZS4KRU9UOwoKCiNFCiRsYW5nWydlZGl0J10gPSAnRWRpdCc7CiRsYW5nWydlbnRlcmVkX2NvdXBvbnMnXSA9ICdDb3Vwb25zIHlvdSBoYXZlIGVudGVyZWQ6JzsKJGxhbmdbJ2Vycm9yX2FscmVhZHlfcHJvZCddID0gJ0EgcHJvZHVjdCBjb25kaXRpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNvbmRpdGlvbiBsaXN0JzsKJGxhbmdbJ2Vycm9yX2NvdXBvbl9leGlzdHMnXSA9ICdBIHByb21vdGlvbiB1c2luZyB0aGF0IGNvdXBvbiBzdHJpbmcgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX2NvbmRpdGlvbiddID0gJ0EgZHVwbGljYXRlIGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY29uZGl0aW9uIGxpc3QnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX3R5cGUnXSA9ICdBIGR1cGxpY2F0ZSBwcm9kdWN0IGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9lbXB0eV9jb2RlJ10gPSAnUGxlYXNlIGVudGVyIGEgdmFsaWQgdmFsdWUnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9jb2RlJ10gPSAnUHJvbW90aW9uIENvZGUgbm90IHJlY29nbmlzZWQnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9jb25kaXRpb25fdHlwZSddID0gJ0EgY29uZGl0aW9uIHNwZWNpZmllZCBpcyBpbnZhbGlkIGZvciB0aGlzIHByb21vdGlvbiB0eXBlJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfZmV1X2dyb3VwJ10gPSAnSW52YWxpZCBGRVUgR3JvdXAgTmFtZSBTcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9vcmRlcl9hbW91bnQnXSA9ICdUaGUgb3JkZXIgYW1vdW50IHNwZWNpZmllZCBpcyBpbnZhbGlkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfb2ZmZXJfdHlwZSddID0gJ1RoZSBvZmZlciBzcGVjaWZpZWQgaXMgaW52YWxpZCBmb3IgdGhpcyB0eXBlIG9mIG9yZGVyJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfcHJvZHVjdF9jYXRlZ29yeSddID0gJ0F0IGxlYXN0IG9uZSBpbnZhbGlkIHByb2R1Y3QgY2F0ZWdvcnknOwokbGFuZ1snZXJyb3JfaW52YWxpZF9wcm9kdWN0J10gPSAnSW52YWxpZCBwcm9kdWN0IGlkIHNwZWNpZmllZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX3ZhbHVlJ10gPSAnSW52YWxpZCBWYWx1ZSBTcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfbWlzc2luZ19wYXJhbSddID0gJ0EgcmVxdWlyZWQgaW5wdXQgcGFyYW1ldGVyIGlzIG1pc3NpbmcnOwokbGFuZ1snZXJyb3JfbW9kdWxlX25vdF9mb3VuZCddID0gJ0EgUmVxdWlyZWQgTW9kdWxlICglcykgQ291bGQgbm90IGJlIGZvdW5kJzsKJGxhbmdbJ2Vycm9yX25hbWVfZXhpc3RzJ10gPSAnQSBwcm9tb3Rpb24gYnkgdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ2Vycm9yX25vb2ZmZXJfZGF0YSddID0gJ1RoZXJlIGlzIG5vIHZhbHVlIGFzc29jaWF0ZWQgd2l0aHQgaGUgb2ZmZXIgdHlwZSc7CiRsYW5nWydlcnJvcl9wcm9tb3Rpb25fbmFtZSddID0gJ0VhY2ggcHJvbW90aW9uIG11c3QgaGF2ZSBhIG5hbWUnOwokbGFuZ1snZXJyb3Jfc2F2ZV9wcm9tb3Rpb24nXSA9ICdBbiBlcnJvciBvY2N1cnJlZCB0cnlpbmcgdG8gc2F2ZSB0aGlzIHByb21vdGlvbic7CiRsYW5nWydlcnJvcl9zcGVjaWZ5X3ZhbHVlJ10gPSAnUGxlYXNlIHNwZWNpZnkgYSB2YWx1ZSc7CgojRgokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnUHJvbW90aW9uIE1hbmFnZXInOwoKI0cKCgojSAoKI0kKJGxhbmdbJ2luZm9fY2hlY2tvdXRfcHJvbW90aW9ucyddID0gJ0NoZWNrb3V0IHByb21vdGlvbnMgYXJlIGNhbGN1bGF0ZWQgd2hlbiB0aGUgb3JkZXIgaXMgY2hlY2tlZCBvdXQuICBPbmx5IHRoZSBmaXJzdCBtYXRjaGluZyBwcm9tb3Rpb24gd2lsbCBiZSB1c2VkLiAgTm8gYWxyZWFkeSBkaXNjb3VudGVkIGNhcnQgaXRlbXMgd2lsbCBiZSBtYXRjaGVkLic7CiRsYW5nWydpbmZvX2NvbmRpdGlvbnMnXSA9ICdTcGVjaWZ5IG9uZSBvciBtb3JlIHNhbGVzIGNvbmRpdGlvbnMgZm9yIHRoaXMgcHJvbW90aW9uJzsKJGxhbmdbJ2luZm9fY29uZGl0aW9uX2RhdGEnXSA9ICdQcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGZvciB0aGlzIGNvbmRpdGlvbic7CiRsYW5nWydpbmZvX2V4dHJhcyddID0gJ1RoaXMgYXJlYSBjb250YWlucyBvcHRpb25hbCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIGVhY2ggcHJvbW90aW9uIGZvciB1c2Ugd2hlbiBkaXNwbGF5aW5nIHByb21vdGlvbiBiYW5uZXJzIG9yIHByb21vdGlvbiBpbmZvcm1hdGlvbi4nOwokbGFuZ1snaW5mb19pbnN0YW50X3Byb21vdGlvbnMnXSA9ICdJbnN0YW50IHByb21vdGlvbnMgYXJlIGNhbGN1bGF0ZWQgd2hlbiB0aGUgaXRlbSBpcyBhZGRlZCB0byB0aGUgY2FydC4gIEF0dGVtcHRzIGFyZSBtYWRlIHRvIGRpc3BsYXkgcG90ZW50aWFsIGRpc2NvdW50cyBiZWZvcmUgY2hlY2tvdXQuICBUaGUgZmlyc3QgcHJvbW90aW9uIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0ZWQgY2FydCBpdGVtIHdpbGwgYmUgdXNlZCBpbiBjYWxjdWxhdGluZyBkaXNjb3VudHMuJzsKJGxhbmdbJ2luZm9faW1hZ2VfZGlyJ10gPSAnU3BlY2lmeSBhIGRpcmVjdG9yeSBuYW1lIHJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpcmVjdG9yeSBpbiB3aGljaCB0byBzZWFyY2ggZm9yIGltYWdlcyB0byBhdHRhY2ggdG8gb2ZmZXJzJzsKJGxhbmdbJ2luZm9fcHJvbW9fbmFtZSddID0gJ1RoaXMgbmFtZSBpcyB1c2VkIGZvciBpbnZvaWNlcyBhbmQgc2FsZXMgb3JkZXJzIHRvIGRlc2NyaWJlIHRoZSBkaXNjb3VudCBiZWluZyBhcHBsaWVkJzsKJGxhbmdbJ2luZm9fcHJvbW9fdHlwZSddID0gJ1NlbGVjdCB0aGUgYXBwcm9wcmlhdGUgdHlwZSBmb3IgdGhpcyBwcm9tb3Rpb24uICBOb3RlIHRoYXQgb2ZmZXJzIHRoYXQgZWZmZWN0IHRoZSBvcmRlciB0b3RhbCB3aWxsIGhhdmUgbm8gZWZmZWN0IGluICZxdW90O2luc3RhbnQmcXVvdDsgdHlwZSBwcm9tb3Rpb25zLic7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfRkVVJ10gPSAnQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBGRVUgZ3JvdXAgbmFtZXMgaXMgcGVybWl0dGVkJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCddID0gJ0VudGVyIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgdXNpbmcgYSAuIGZvciBhIGRlY2ltYWwgc2VwYXJhdG9yLiAgaS5lOiAgMTAwLjAwJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9XRUlHSFQnXSA9ICdFbnRlciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIHVzaW5nIGEgLiBmb3IgYSBkZWNpbWFsIHNlcGFyYXRvci4gIGkuZTogIDEwMC4wMCc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfQ09VUE9OJ10gPSAnRW50ZXIgYSB0ZXh0IHN0cmluZyBvZiBubyBtb3JlIHRoYW4gMTAgY2hhcmFjdGVycyc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfUFJPRElEJ10gPSAnRW50ZXIgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGlkcyc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfUFJPRFNLVSddID0gJ0VudGVyIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcHJvZHVjdCBTS1VcJ3MnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RDQVQnXSA9ICdFbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHByb2R1Y3QgY2F0ZWdvcnkgbmFtZXMnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RISUVSJ10gPSAnRW50ZXIgYSBzaW5nbGUgcHJvZHVjdCBoaWVyYXJjaHkgbmFtZSBpbiB0aGUgZm9ybWF0ICZxdW90O2dyYW5kcGFyZW50LnBhcmVudC5jaGlsZCZxdW90Oyc7CgojSgoKCiNLCgoKI0wKJGxhbmdbJ2xibF9hZGRfcHJvbW8nXSA9ICdBZGQgUHJvbW90aW9uJzsKJGxhbmdbJ2xibF9lZGl0X3Byb21vJ10gPSAnRWRpdCBQcm9tb3Rpb24nOwokbGFuZ1snbGJsX2NoZWNrb3V0X3Byb21vdGlvbnMnXSA9ICdDaGVja291dCBQcm9tb3Rpb25zJzsKJGxhbmdbJ2xibF9pbnN0YW50X3Byb21vdGlvbnMnXSA9ICdJbnN0YW50IFByb21vdGlvbnMnOwokbGFuZ1snbGJsX3Byb21vdGlvbnMnXSA9ICdQcm9tb3Rpb25zJzsKJGxhbmdbJ2xibF9zZXR0aW5ncyddID0gJ1NldHRpbmdzJzsKJGxhbmdbJ2xibF9jb3Vwb25mb3JtX3RlbXBsYXRlcyddID0gJ0NvdXBvbiBGb3JtIFRlbXBsYXRlcyc7CiRsYW5nWydsYmxfZGVmYXVsdF90ZW1wbGF0ZXMnXSA9ICdEZWZhdWx0IFRlbXBsYXRlcyc7CiRsYW5nWydsYmxfb25seW9uZSddID0gJ0FsbG93IG9ubHkgb25lICZxdW90O2ZyZWUmcXVvdDsgaXRlbSc7CiRsYW5nWydsYmxfcHJvbW9fbWVzc2FnZXMnXSA9ICdQcm9tb3Rpb24gTWVzc2FnZXMnOwoKI00KJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQ3JlYXRlLCBtYW5hZ2UsIGFuZCBpbnRlcmFjdCB3aXRoIHNhbGVzIGFuZCBwcm9tb3Rpb25zIGZvciB5b3VyIGUtY29tbWVyY2Ugc2l0ZSc7CiRsYW5nWydtc2dfcHJlZnN1cGRhdGVkJ10gPSAnUHJlZmVyZW5jZXMgVXBkYXRlZCc7CiRsYW5nWydtc2dfcHJvbW9kZWxldGVkJ10gPSAnUHJvbW90aW9uIERlbGV0ZWQnOwokbGFuZ1snbXNnX3ZhbGlkX2NvZGUnXSA9ICdZb3VyIHZhbGlkIHByb21vdGlvbiBjb2RlIHdhcyByZWNvZ25pc2VkISc7CgojTgokbGFuZ1snbm9uZSddID0gJ05vbmUnOwoKI08KCgojUAokbGFuZ1sncGFyYW1faW5saW5lJ10gPSAnU3BlY2lmeSB0aGF0IHRoZSBjb3Vwb24gY29kZSBmb3JtIGlzIGlubGluZSwgYW5kIHRoZSByZXN1bHRzIHNob3VsZCByZXBsYWNlIHRoZSBvcmlnaW5hbCB0YWcgYW5kIG5vdCB0aGUgcGFnZSBjb250ZW50cyc7CiRsYW5nWydwYXJhbV90ZW1wbGF0ZSddID0gJ1NwZWNpZnkgdGhlIG5hbWUgb2YgYSBub24gZGVmYXVsdCBjb3Vwb24gY29kZSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGZvciB0aGUgZGVmYXVsdCBhY3Rpb24nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdUaGUgUHJvbW90aW9ucyBtb2R1bGUgaGFzIGJlZW4gaW5zdGFsbGVkLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGF1dGhvcml6ZWQgdXNlcnMgaGF2ZSB0aGUgJnF1b3Q7TWFuYWdlIFByb21vdGlvbnMmcXVvdDsgcGVybWlzc2lvbiwgYW5kIHRoZW4gY29uZmlndXJlIHlvdXIgcHJvbW90aW9ucyBhbmQgdGVtcGxhdGVzIGFwcHJvcHJpYXRlbHknOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1RoZSBQcm9tb3Rpb25zIG1vZHVsZSBhbmQgYWxsIGFwcGxpY2FibGUgZGF0YSBoYXMgYmVlbiB1bmluc3RhbGxlZCBmcm9tIHRoZSBzeXN0ZW0uICBZb3UgbWF5IG5vdyByZW1vdmUgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfQ09VUE9OJ10gPSAnUmVxdWlyZSBhIENvdXBvbiBDb2RlJzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9GRVUnXSA9ICdSZXF1aXJlIG1lbWJlcnNoaXAgaW4gYW4gRkVVIGdyb3VwJzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCddID0gJ1JlcXVpcmUgYSBtaW5pbXVtIHB1cmNoYXNlIGFtb3VudCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfV0VJR0hUJ10gPSAnUmVxdWlyZSBhIG1pbmltdW0gb3JkZXIgd2VpZ2h0JzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9QUk9ESUQnXSA9ICdSZXF1aXJlIHB1cmNoYXNlIG9mIGEgc3BlY2lmaWMgcHJvZHVjdCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPRENBVCddID0gJ1JlcXVpcmUgcHVyY2hhc2Ugb2YgYXQgbGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBjYXRlZ29yeSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPREhJRVInXSA9ICdSZXF1aXJlIHB1cmNoYXNlIG9mIGF0IGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgaGllcmFyY2h5JzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9QUk9EU0tVJ10gPSAnUmVxdWlyZSBwdXJjaGFzZSBvZiBhIHNwZWNpZmljIHByb2R1Y3QgKGJ5IFNLVSknOwokbGFuZ1snMDFfUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUJ10gPSAnUmVjZWl2ZSBhIGZyZWUgcHJvZHVjdCc7CiRsYW5nWycwMl9QUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVCddID0gJ0Rpc2NvdW50IHRoZSBhcHBsaWNhYmxlIHByb2R1Y3RzIGJ5IGEgcGVyY2VudGFnZSc7CiRsYW5nWycwM19QUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnXSA9ICdQZXJjZW50YWdlIG9mZiBvcmRlciB0b3RhbCc7CiRsYW5nWycwNF9QUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UJ10gPSAnUmVkdWNlIG9yZGVyIHRvdGFsIGJ5IGEgc3BlY2lmaWVkIGRvbGxhciBmaWd1cmUnOwokbGFuZ1snMDVfUFJPTU9USU9OU19PRkZFUl9TQU1FUFJPRFVDVCddID0gJ0dldCB0aGUgc2FtZSBwcm9kdWN0IGZyZWUnOwokbGFuZ1snMDZfUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVJ10gPSAnUmVjZWl2ZSBhIGZyZWUgcHJvZHVjdCAoYnkgU0tVKSc7CiRsYW5nWycwN19QUk9NT1RJT05TX09GRkVSX1BST0RBTU9VTlQnXSA9ICdEaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIGZpeGVkIGFtb3VudCc7CiRsYW5nWydwcm9tb190eXBlX2luc3RhbnQnXSA9ICdQcm9tb3Rpb24gb2ZmZXIgY2FsY3VsYXRlZCBpbiB0aGUgQ2FydCc7CiRsYW5nWydwcm9tb190eXBlX2NoZWNrb3V0J10gPSAnUHJvbW90aW9uIG9mZmVyIGNhbGN1bGF0ZWQgb24gQ2hlY2tvdXQnOwokbGFuZ1sncHJvbXB0X2FkZF9jb25kaXRpb24nXSA9ICdBZGQgYSBDb25kaXRpb24nOwokbGFuZ1sncHJvbXB0X2FkZHByb21vJ10gPSAnQWRkIGEgTmV3IFByb21vdGlvbic7CiRsYW5nWydwcm9tcHRfYWxsb3dfY3VtdWxhdGl2ZSddID0gJ0FwcGx5IHRoaXMgcHJvbW90aW9uIHRvIGFscmVhZHkgZGlzY291bnRlZCBpdGVtcz8nOwokbGFuZ1sncHJvbXB0X2FsbG93X29uY2UnXSA9ICdUaGlzIHByb21vdGlvbiBjYW4gb25seSBiZSB1c2VkIG9uY2UgcGVyIHRyYW5zYWN0aW9uJzsKJGxhbmdbJ3Byb21wdF9jb2RlJ10gPSAnQ291cG9uIENvZGUnOwokbGFuZ1sncHJvbXB0X2NvbmRpdGlvbl9kYXRhJ10gPSAnQ29uZGl0aW9uIERhdGEnOwokbGFuZ1sncHJvbXB0X2NvbmRpdGlvbl90eXBlJ10gPSAnVHlwZSBvZiBDb25kaXRpb24nOwokbGFuZ1sncHJvbXB0X2NvbmRpdGlvbnMnXSA9ICdDb25kaXRpb25zJzsKJGxhbmdbJ3Byb21wdF9jb3Vwb25fY29kZSddID0gJ0VudGVyIGEgQ291cG9uIG9yIFByb21vdGlvbiBDb2RlJzsKJGxhbmdbJ3Byb21wdF9kZmx0X29mZmVyX3R5cGUnXSA9ICdEZWZhdWx0IG9mZmVyIHR5cGUnOwokbGFuZ1sncHJvbXB0X2RmbHRfcHJvbW90aW9uX3BlcmlvZCddID0gJ0RlZmF1bHQgUHJvbW90aW9uIFBlcmlvZCAobW9udGhzKSc7CiRsYW5nWydwcm9tcHRfZW5kX2RhdGUnXSA9ICdFbmQgRGF0ZSc7CiRsYW5nWydwcm9tcHRfZXJyb3JfZW1wdHknXSA9ICdFbXB0eSBDb2RlIE1lc3NhZ2UnOwokbGFuZ1sncHJvbXB0X2Vycm9yX2ludmFsaWQnXSA9ICdJbnZhbGlkIENvZGUgTWVzc2FnZSc7CiRsYW5nWydwcm9tcHRfZXh0cmFzJ10gPSAnRXh0cmFzJzsKJGxhbmdbJ3Byb21wdF9mcmVlX3Byb2R1Y3QnXSA9ICdTcGVjaWZ5IHRoZSBmcmVlIHByb2R1Y3QnOwokbGFuZ1sncHJvbXB0X2lkJ10gPSAnSUQnOwokbGFuZ1sncHJvbXB0X2ltYWdlJ10gPSAnSW1hZ2UnOwokbGFuZ1sncHJvbXB0X2ltYWdlX2RpciddID0gJ0ltYWdlIERpcmVjdG9yeSc7CiRsYW5nWydwcm9tcHRfZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydwcm9tcHRfbXNnX3ZhbGlkX2NvZGUnXSA9ICdWYWxpZCBDb2RlIE1lc3NhZ2UnOwokbGFuZ1sncHJvbXB0X25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ3Byb21wdF9vZmZlciddID0gJ09mZmVyJzsKJGxhbmdbJ3Byb21wdF9vZmZlcl9kYXRhJ10gPSAnT2ZmZXIgRGF0YSc7CiRsYW5nWydwcm9tcHRfb2ZmZXJfdHlwZSddID0gJ09mZmVyIFR5cGUnOwokbGFuZ1sncHJvbXB0X29mZmVycyddID0gJ09mZmVycyc7CiRsYW5nWydwcm9tcHRfcGVyY2VudGFnZV9kaXNjb3VudCddID0gJ1BlcmNlbnQgRGlzY291bnQgPGVtPihleHByZXNzZWQgYXMgYSBkZWNpbWFsIGZyb20gMCB0byAxKTwvZW0+JzsKJGxhbmdbJ3Byb21wdF9wcmljZV9kaXNjb3VudCddID0gJ1NwZWNpZnkgdGhlIGRvbGxhciBmaWd1cmUgdG8gcmVtb3ZlIGZyb20gdGhlIG9yZGVyJzsKJGxhbmdbJ3Byb21wdF9zdGFydF9kYXRlJ10gPSAnU3RhcnQgRGF0ZSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWydwcm9tcHRfdHlwZSddID0gJ1R5cGUnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfQ09VUE9OJ10gPSAnQ291cG9uIENvZGUnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfRkVVJ10gPSAnRkVVIEdyb3VwIE5hbWUnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnXSA9ICdNaW5pbXVtIE9yZGVyIEFtb3VudCc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9XRUlHSFQnXSA9ICdNaW5pbXVtIE9yZGVyIFdlaWdodCc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9QUk9ESUQnXSA9ICdQcm9kdWN0IElkJzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1BST0RTS1UnXSA9ICdQcm9kdWN0IFNLVSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9QUk9EQ0FUJ10gPSAnUHJvZHVjdCBDYXRlZ29yeSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9QUk9ESElFUiddID0gJ1Byb2R1Y3QgSGllcmFyY2h5JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzAzX1BST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCddID0gJ0Rpc2NvdW50IFBlcmNlbnRhZ2UgPGVtPihleHByZXNzZWQgYXMgYSB2YWx1ZSBmcm9tIDAuMDAgdG8gMS4wMCk8L2VtPic7CiRsYW5nWydwcm9tcHRvZmZlcl8wNF9QUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UJ10gPSAnQ2FzaCBEaXNjb3VudCc7CiRsYW5nWydwcm9tcHRvZmZlcl8wMV9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1QnXSA9ICdQcm9kdWN0IElEIHRvIGdpdmUgZnJlZSc7CiRsYW5nWydwcm9tcHRvZmZlcl8wMl9QUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVCddID0gJ0Rpc2NvdW50IFBlcmNlbnRhZ2UgPGVtPihleHByZXNzZWQgYXMgYSB2YWx1ZSBmcm9tIDAuMDAgdG8gMS4wMCk8L2VtPic7CiRsYW5nWydwcm9tcHRvZmZlcl8wNV9QUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUJ10gPSAnT2ZmZXIgdGhlIHNhbWUgcHJvZHVjdCBmcmVlIDxlbT4oYW55IHZhbHVlIGhlcmUgaXMgdmFsaWQpPC9lbT4nOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDZfUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVJ10gPSAnUHJvZHVjdCBTS1UocykgdGhhdCBhcmUgZnJlZSB3aXRoIHRoZSBvcmRlciAob25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgaXRlbSBpbiB0aGUgY2FydCB3aWxsIGJlIGRpc2NvdW50ZWQpJzsKJGxhbmdbJ3Byb21wdG9mZmVyXzA3X1BST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCddID0gJ0Rpc2NvdW50IGFtb3VudCA8ZW0+KGV4cHJlc3NlZCBhcyBhIHZhbHVlLCBjYW5ub3QgZXhjZWVkIHRoZSBwcm9kdWN0cyBwcmljZS48L2VtPic7CgojUQoKCiNSCiRsYW5nWydyZWFsbHlfZGVsZXRlX3Byb21vdGlvbiddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBwcm9tb3Rpb24/JzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgbW9kdWxlPyBQcm9jZWVkaW5nIHdpbGwgcGVybWFuZW50bHkgcmVtb3ZlIGFsbCBvZiB5b3VyIHByb21vdGlvbnMgZGF0YSBhbmQgbWF5IGNhdXNlIHByb2JsZW1zIHdpdGggYSB3b3JraW5nIGUtY29tbWVyY2Ugd2Vic2l0ZS4nOwokbGFuZ1sncmVzZXR0b2ZhY3RvcnknXSA9ICdSZXNldCBUbyBGYWN0b3J5IERlZmF1bHRzJzsKCiNTCiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwoKI1QKJGxhbmdbJ3RpdGxlX2NvdXBvbmZvcm1fZGZsdHRlbXBsYXRlJ10gPSAnU3lzdGVtIERlZmF1bHQgQ291cG9uIEZvcm0gVGVtcGxhdGUnOwokbGFuZ1sndHlwZSddID0gJ1R5cGUnOwoKI1UKCgojVgoKCiNXCiRsYW5nWyd3YXJuaW5nX25vX2NvbmRpdGlvbnMnXSA9ICdZb3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGFueSBjb25kaXRpb25zIGZvciB0aGlzIG9mZmVyIChvdGhlciB0aGFuIGEgc3RhcnQgYW5kIGVuZCBkYXRlKS4gIENsaWNrIE9LIHRvIGNvbnRpbnVlLCBvciBDYW5jZWwgdG8gY29ycmVjdCB0aGlzJzsKCiNYCgoKI1kKCgojWgoKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.condition_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZmluYWwgY2xhc3MgY29uZGl0aW9uX3Rlc3RzCnsKICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgLyoqCiAgICogVGVzdCB0aGlzIGNvbmRpdGlvbiB0byBzZWUgaWYgaXQgaXMgYW4gRkVVIGdyb3VwIGNvbmRpdGlvbgogICAqIGFuZCBpZiB0aGUgdXNlciBpZCBzcGVjaWZpZWQgKG9yIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCkKICAgKiBtYXRjaGVzCiAgICoKICAgKiByZXR1cm4gVFJVRSBvbiBtYXRjaCwgRkFMU0Ugb3RoZXJ3aXNlCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0ZXN0X2ZldV91aWQocHJvbW90aW9uX2NvbmRpdGlvbiAkY29uZGl0aW9uLCRmZXVfdWlkID0gLTEpCiAgewogICAgaWYoICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSAhPSBQUk9NT1RJT05TX0NPTkRfRkVVICkgcmV0dXJuIEZBTFNFOwoKICAgICRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldSApIHJldHVybiBGQUxTRTsKICAgIGlmKCAkZmV1X3VpZCA9PSAtMSApIHsKICAgICAgJGZldV91aWQgPSAkZmV1LT5Mb2dnZWRJbigpOwogICAgfQogICAgaWYoICRmZXVfdWlkIDw9IDAgKSByZXR1cm4gRkFMU0U7CgogICAgLy8gYnVpbGQgYSBsaXN0IG9mIG1lbWJlciBncm91cCBuYW1lcwogICAgJGFsbGdyb3VwcyA9ICRmZXUtPkdldEdyb3VwTGlzdCgpOwogICAgJGFsbGdyb3VwcyA9IGFycmF5X2ZsaXAoJGFsbGdyb3Vwcyk7CiAgICAkbWVtYmVyX29mID0gJGZldS0+R2V0TWVtYmVyR3JvdXBzQXJyYXkoJGZldV91aWQpOwogICAgaWYoICEkbWVtYmVyX29mICkgcmV0dXJuIEZBTFNFOwogICAgJG1lbWJlcl9vZiA9IGNnZV9hcnJheTo6ZXh0cmFjdF9maWVsZCgkbWVtYmVyX29mLCdncm91cGlkJyk7CiAgICAkbWVtYmVyX2dyb3VwX25hbWVzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRtZW1iZXJfb2YgYXMgJG1naWQgKSB7CiAgICAgICRtZW1iZXJfZ3JvdXBfbmFtZXNbXSA9ICRhbGxncm91cHNbJG1naWRdOwogICAgfQoKICAgIC8vIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgY29uZGl0aW9uLCBhcyBhbiBhcnJheSBvZiB0cmltbWVkIGdyb3VwIG5hbWVzCiAgICAkZGF0YSA9IGV4cGxvZGUoJywnLCRjb25kLT5nZXRfZGF0YSgpKTsKICAgIGZvciggJGogPSAwOyAkaiA8IGNvdW50KCRkYXRhKTsgJGorKyApIHsKICAgICAgJGRhdGFbJGpdID0gdHJpbSgkZGF0YVskal0pOwogICAgfQoKICAgIC8vIG5vdyBkbyBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiBtZW1iZXIgZ3JvdXBvIG5hbWVzCiAgICAvLyBhbmQgdGhlIGRhdGEgZ3JvdXAgbmFtZXMuCiAgICAkcmVzID0gYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJfZ3JvdXBfbmFtZXMsJGRhdGEpOwogICAgaWYoIGNvdW50KCRyZXMpICkgcmV0dXJuIFRSVUU7CiAgICAKICAgIHJldHVybiBGQUxTRTsKICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvY2xhc3MucHJvbW9fb3BzLnBocCcpOwoKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfRkVVJywnUFJPTU9USU9OU19DT05EX0ZFVScpOyAgICAgICAvLyBGRVUgZ3JvdXAgbWVtYmVyc2hpcApkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCcsJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCcpOyAgIC8vIE9yZGVyIHRvdGFsIChwcmUgc2hpcHBpbmcgYW5kIHRheGVzKQpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9XRUlHSFQnLCdQUk9NT1RJT05TX0NPTkRfV0VJR0hUJyk7IC8vIE9yZGVyIHdlaWdodCAKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPRElEJywnUFJPTU9USU9OU19DT05EX1BST0RJRCcpOyAvLyBPcmRlciBoYXMgYSBjZXJ0YWluIHByb2R1Y3QgaWQKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPRENBVCcsJ1BST01PVElPTlNfQ09ORF9QUk9EQ0FUJyk7IC8vIE9yZGVyIGhhcyBhIHByb2R1Y3QgZnJvbSBhIGNlcnRhaW4gY2F0ZWdvcnkKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPREhJRVInLCdQUk9NT1RJT05TX0NPTkRfUFJPREhJRVInKTsgLy8gT3JkZXIgaGFzIGEgcHJvZHVjdCBmcm9tIGEgY2VydGFpbiBoaWVyYXJjaHkKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPRFNLVScsJ1BST01PVElPTlNfQ09ORF9QUk9EU0tVJyk7IC8vIE9yZGVyIGhhcyBhIGNlcnRhaW4gcHJvZHVjdCBza3UKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfQ09VUE9OJywnUFJPTU9USU9OU19DT05EX0NPVVBPTicpOyAvLyBPcmRlciBoYXMgYSBwcm9kdWN0IGZyb20gYSBjZXJ0YWluIGhpZXJhcmNoeQpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVCcsJzAxX1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVCcpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UJywnMDJfUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnLCcwM19QUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UJywnMDRfUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVCcpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1QnLCcwNV9QUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVJywnMDZfUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UJywnMDdfUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UJyk7CgpjbGFzcyBwcm9tb3Rpb25fY29uZGl0aW9uCnsKICBwcml2YXRlICRfaWQ7CiAgcHJpdmF0ZSAkX3Byb21vdGlvbl9pZDsKICBwcml2YXRlICRfY29uZF90eXBlOwogIHByaXZhdGUgJF9kYXRhOwoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF90eXBlc19hcnJheSgkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVCkKICB7CiAgICBzd2l0Y2goICR0eXBlICkgewogICAgY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgICAgcmV0dXJuIGFycmF5KFBST01PVElPTlNfQ09ORF9GRVUsUFJPTU9USU9OU19DT05EX1BST0RJRCwKCQkgICBQUk9NT1RJT05TX0NPTkRfUFJPRENBVCxQUk9NT1RJT05TX0NPTkRfUFJPREhJRVIsCgkJICAgUFJPTU9USU9OU19DT05EX0NPVVBPTixQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSk7CiAgICBjYXNlIHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDoKICAgICAgcmV0dXJuIGFycmF5KFBST01PVElPTlNfQ09ORF9GRVUsUFJPTU9USU9OU19DT05EX1NVQlRPVEFMLFBST01PVElPTlNfQ09ORF9QUk9ESUQsCgkJICAgUFJPTU9USU9OU19DT05EX1BST0RDQVQsUFJPTU9USU9OU19DT05EX1BST0RISUVSLAoJCSAgIFBST01PVElPTlNfQ09ORF9DT1VQT04sUFJPTU9USU9OU19DT05EX1dFSUdIVCwKCQkgICBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSk7CiAgICB9CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2lkKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9pZDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfaWQoJGlkKQogIHsKICAgICR0aGlzLT5faWQgPSAkaWQ7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3Byb21vdGlvbl9pZCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fcHJvbW90aW9uX2lkOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9wcm9tb3Rpb25faWQoJGlkKQogIHsKICAgICR0aGlzLT5fcHJvbW90aW9uX2lkID0gJGlkOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9jb25kX3R5cGUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2NvbmRfdHlwZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY29uZF90eXBlKCR0eXBlKQogIHsKICAgIGlmKCAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfRkVVIHx8CgkkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwgfHwKCSR0eXBlID09IFBST01PVElPTlNfQ09ORF9XRUlHSFQgfHwKCSR0eXBlID09IFBST01PVElPTlNfQ09ORF9DT1VQT04gfHwKCSR0eXBlID09IFBST01PVElPTlNfQ09ORF9QUk9ESUQgfHwKCSR0eXBlID09IFBST01PVElPTlNfQ09ORF9QUk9EQ0FUIHx8CgkkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSB8fAoJJHR5cGUgPT0gUFJPTU9USU9OU19DT05EX1BST0RISUVSICkKICAgICAgJHRoaXMtPl9jb25kX3R5cGUgPSAkdHlwZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGF0YSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZGF0YTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGF0YSgkZGF0YSkKICB7CiAgICAkdGhpcy0+X2RhdGEgPSAkZGF0YTsKICB9Cn0gLy8gY2xhc3MKCgpjbGFzcyBwcm9tb3Rpb24KewogIHByaXZhdGUgJF9pZDsKICBwcml2YXRlICRfbmFtZTsKICBwcml2YXRlICRfZGVzY3JpcHRpb247CiAgcHJpdmF0ZSAkX2ltYWdlOwogIHByaXZhdGUgJF9jcmVhdGVkOwogIHByaXZhdGUgJF9zdGFydF9kYXRlOwogIHByaXZhdGUgJF9lbmRfZGF0ZTsKICBwcml2YXRlICRfb2ZmZXJfdHlwZTsKICBwcml2YXRlICRfb2ZmZXJfZGF0YTsKICBwcml2YXRlICRfY29uZGl0aW9uczsKICBwcml2YXRlICRfaXRlbV9vcmRlcjsKICBwcml2YXRlICRfdHlwZTsKICBwcml2YXRlIHN0YXRpYyAkX3R5cGVfY2FjaGU7CiAgcHJpdmF0ZSAkX2V4dHJhOwoKICBjb25zdCBUWVBFX0lOU1RBTlQgPSAncHJvbW9fdHlwZV9pbnN0YW50JzsKICBjb25zdCBUWVBFX0NIRUNLT1VUID0gJ3Byb21vX3R5cGVfY2hlY2tvdXQnOwoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogIHsKICAgICR0aGlzLT5fdHlwZSA9IHNlbGY6OlRZUEVfQ0hFQ0tPVVQ7CiAgfQoKICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF90eXBlc19hcnJheSgpCiAgewogICAgcmV0dXJuIGFycmF5KHNlbGY6OlRZUEVfSU5TVEFOVCxzZWxmOjpUWVBFX0NIRUNLT1VUKTsKICB9CgogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X29mZmVyX2FycmF5KCR0eXBlID0gc2VsZjo6VFlQRV9DSEVDS09VVCkKICB7CiAgICBzd2l0Y2goICR0eXBlICkgewogICAgY2FzZSBzZWxmOjpUWVBFX0lOU1RBTlQ6CiAgICAgIHJldHVybiBhcnJheShQUk9NT1RJT05TX09GRkVSX1BST0RVQ1QsUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVLAoJCSAgIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5ULFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCk7CgogICAgY2FzZSBzZWxmOjpUWVBFX0NIRUNLT1VUOgogICAgICByZXR1cm4gYXJyYXkoUFJPTU9USU9OU19PRkZFUl9QRVJDRU5ULFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQsUFJPTU9USU9OU19PRkZFUl9QUk9EVUNULFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVSwKCQkgICBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVCxQUk9NT1RJT05TX09GRkVSX1BST0RBTU9VTlQpOwogICAgfQogIH0KCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfb2ZmZXJfZXh0cmFfbWFwKCkKICB7CiAgICAkcmVzID0gYXJyYXkoKTsKICAgICRyZXNbUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUXSA9IGFycmF5KGFycmF5KCduYW1lJz0+J29ubHlfb25lJywndHlwZSc9PidjaGVja2JveCcsJ2xhYmVsJz0+J2xibF9vbmx5b25lJykpOwogICAgJHJlc1tQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1VdID0gYXJyYXkoYXJyYXkoJ25hbWUnPT4nb25seV9vbmUnLCd0eXBlJz0+J2NoZWNrYm94JywnbGFiZWwnPT4nbGJsX29ubHlvbmUnKSk7CiAgICByZXR1cm4gJHJlczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfaWQoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2lkOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9pZCgkdmFsKQogIHsKICAgICR0aGlzLT5faWQgPSAkdmFsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9uYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9uYW1lOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9uYW1lKCR2YWwpCiAgewogICAgJHRoaXMtPl9uYW1lID0gJHZhbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGVzY3JpcHRpb24oKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2Rlc2NyaXB0aW9uOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9kZXNjcmlwdGlvbigkdmFsKQogIHsKICAgICR0aGlzLT5fZGVzY3JpcHRpb24gPSAkdmFsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9pbWFnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5faW1hZ2U7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ltYWdlKCR2YWwpCiAgewogICAgaWYoIGVtcHR5KCR2YWwpIHx8IChpc19pbnQoJHZhbCkgJiYgKCR2YWwgPCAxKSkgKSAKICAgICAgewoJcmV0dXJuIEZBTFNFOwogICAgICB9CiAgICAkdGhpcy0+X2ltYWdlID0gJHZhbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfdHlwZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fdHlwZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdHlwZSgkdmFsKQogIHsKICAgIHN3aXRjaCggJHZhbCApIHsKICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNUQU5UOgogICAgY2FzZSBzZWxmOjpUWVBFX0NIRUNLT1VUOgogICAgICAkdGhpcy0+X3R5cGUgPSAkdmFsOwogICAgICBicmVhazsKICAgIH0KICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfY3JlYXRlZCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fY3JlYXRlZDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY3JlYXRlZCgkdmFsKQogIHsKICAgICR0aGlzLT5fY3JlYXRlZCA9ICR2YWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2l0ZW1fb3JkZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2l0ZW1fb3JkZXI7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3N0YXJ0X2RhdGUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X3N0YXJ0X2RhdGU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3N0YXJ0X2RhdGUoJHZhbCkKICB7CiAgICAkdGhpcy0+X3N0YXJ0X2RhdGUgPSAkdmFsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9lbmRfZGF0ZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZW5kX2RhdGU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2VuZF9kYXRlKCR2YWwpCiAgewogICAgJHRoaXMtPl9lbmRfZGF0ZSA9ICR2YWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X29mZmVyX3R5cGUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X29mZmVyX3R5cGU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X29mZmVyX3R5cGUoJHZhbCkKICB7CiAgICAkdGhpcy0+X29mZmVyX3R5cGUgPSAkdmFsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9vZmZlcl9kYXRhKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9vZmZlcl9kYXRhOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9leHRyYSgka2V5LCR2YWx1ZSkKICB7CiAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5fZXh0cmEpICkgJHRoaXMtPl9leHRyYSA9IGFycmF5KCk7CiAgICAkdGhpcy0+X2V4dHJhWyRrZXldID0gJHZhbHVlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9leHRyYSgka2V5KQogIHsKICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2V4dHJhKSAmJiBpc3NldCgkdGhpcy0+X2V4dHJhWyRrZXldKSApCiAgICAgIHJldHVybiAkdGhpcy0+X2V4dHJhWyRrZXldOzsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiB1bnNldF9leHRyYSgka2V5KQogIHsKICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2V4dHJhKSAmJiBpc3NldCgkdGhpcy0+X2V4dHJhWyRrZXldKSApCiAgICAgIHVuc2V0KCR0aGlzLT5fZXh0cmFbJGtleV0pOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGNsZWFyX2V4dHJhKCkKICB7CiAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9leHRyYSkgKSAkdGhpcy0+ZXh0cmEgPSBudWxsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9vZmZlcl9kYXRhKCRkYXRhKQogIHsKICAgICR0aGlzLT5fb2ZmZXJfZGF0YSA9ICRkYXRhOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uICZnZXRfY29uZGl0aW9ucygpCiAgewogICAgcmV0dXJuICR0aGlzLT5fY29uZGl0aW9uczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBhZGRfY29uZGl0aW9uKCYkY29uZGl0aW9uKQogIHsKICAgIGlmKCAhaXNfYSgkY29uZGl0aW9uLCdwcm9tb3Rpb25fY29uZGl0aW9uJykgKSAKICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9jb25kaXRpb25zKSApCiAgICAgIHsKCSR0aGlzLT5fY29uZGl0aW9ucyA9IGFycmF5KCk7CiAgICAgIH0KICAgICR0aGlzLT5fY29uZGl0aW9uc1tdID0gJGNvbmRpdGlvbjsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBkZWxfY29uZGl0aW9uKCRpZHgpCiAgewogICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fY29uZGl0aW9ucykgJiYKCWNvdW50KCR0aGlzLT5fY29uZGl0aW9ucykgPiAkaWR4ICYmCgkkaWR4ID4gMCkKICAgICAgewoJJHRtcCA9IGFycmF5KCk7Cglmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkdGhpcy0+X2NvbmRpdGlvbnMpOyAkaSsrICkKCSAgewoJICAgIGlmKCAkaSA9PSAkaWR4ICkgY29udGludWU7CgkgICAgJHRtcFtdID0gJHRoaXMtPl9jb25kaXRpb25zOwoJICB9CgkkdGhpcy0+X2NvbmRpdGlvbnMgPSAkdG1wOwogICAgICB9CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZGVsX2NvbmRpdGlvbnMoKQogIHsKICAgICR0aGlzLT5fY29uZGl0aW9ucyA9IG51bGw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gJmdldF9jb25kaXRpb24oJGlkeCkKICB7CiAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5fY29uZGl0aW9ucykgfHwKCShjb3VudCgkdGhpcy0+X2NvbmRpdGlvbnMpIDwgJGlkeCkgfHwKCSgkaWR4IDwgMCkgKSB7CiAgICAgICR0bXAgPSBGQUxTRTsKICAgICAgcmV0dXJuICR0bXA7CiAgICB9CgogICAgcmV0dXJuICR0aGlzLT5fY29uZGl0aW9uc1skaWR4XTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBjb3VudF9jb25kaXRpb25zKCkKICB7CiAgICByZXR1cm4gY291bnQoJHRoaXMtPl9jb25kaXRpb25zKTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgpCiAgewogICAgaWYoICR0aGlzLT5faWQgKSB7CiAgICAgIHJldHVybiAkdGhpcy0+X3VwZGF0ZSgpOwogICAgfQogICAgcmV0dXJuICR0aGlzLT5faW5zZXJ0KCk7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgpCiAgewogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nCiAgICAgICAgICAgICAgIFdIRVJFIHByb21vdGlvbl9pZCA9ID8nOwogICAgJHJlcyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPl9pZCkpOwogICAgLy8gbm8gZXJyb3IgaWYgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbnMuCgogICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nCiAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPyc7CiAgICAkcmVzID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+X2lkKSk7CiAgICBpZiggISRyZXMgKSB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdFcnJvciBkZWxldGluZyBwcm9tb3Rpb24nKTsKCiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nIFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciAtIDEgCiAgICAgICAgICAgICAgV0hFUkUgaXRlbV9vcmRlciA+ID8gQU5EIHR5cGUgPSA/JzsKICAgICRyZXMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0aGlzLT5faXRlbV9vcmRlciwkdGhpcy0+X3R5cGUpKTsKICAgIGlmKCAhJHJlcyApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIGRlbGV0aW5nIHByb21vdGlvbiAodXBkYXRpbmcgaXRlbSBvcmRlciknKTsKCiAgICByZXR1cm4gVFJVRTsKICB9CgogIC8qKgogICAqIERlbGV0ZSBjb25kaXRpb25zIGZyb20gdGhlIGRhdGFiYXNlIGZvciB0aGlzIHByb21vdGlvbgogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gX2RlbF9jb25kaXRpb25zKCkKICB7CiAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuUFJPTU9USU9OU19DT05EX1RBQkxFLicgV0hFUkUgcHJvbW90aW9uX2lkID0gPyc7CiAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+Z2V0X2lkKCkpKTsKICAgIGlmKCAhJGRiciApIHJldHVybiBGQUxTRTsKICAgIHJldHVybiBUUlVFOwogIH0KCiAgLyoqCiAgICogSW5zZXJ0IGEgY29uZGl0aW9uIGludG8gdGhlIGRhdGFiYXNlIGZvciB0aGlzIHByb21vdGlvbgogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gX2luc2VydF9jb25kaXRpb24ocHJvbW90aW9uX2NvbmRpdGlvbiAkY29uZCkKICB7CiAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKICAgICRjb25kLT5zZXRfcHJvbW90aW9uX2lkKCR0aGlzLT5nZXRfaWQoKSk7CgogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nCiAgICAgICAgICAgICAgIChwcm9tb3Rpb25faWQsY29uZF90eXBlLGRhdGEpCiAgICAgICAgICAgICAgVkFMVUVTICg/LD8sPyknOwogICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGNvbmQtPmdldF9wcm9tb3Rpb25faWQoKSwKCQkJCSAgICAgJGNvbmQtPmdldF9jb25kX3R5cGUoKSwKCQkJCSAgICAgJGNvbmQtPmdldF9kYXRhKCkpKTsKICAgIGlmKCAhJGRiciApIHsKICAgICAgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignU1FMIEVycm9yOiAnLiRkYi0+c3FsLicgLS0gJy4kZGItPkVycm9yTXNnKCkpOwogICAgfQogICAgcmV0dXJuIFRSVUU7CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF91cGRhdGUoKQogIHsKICAgIGlmKCAhJHRoaXMtPmdldF9pZCgpICkgcmV0dXJuIEZBTFNFOwoKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nCiAgICAgICAgICAgICAgICAgU0VUIG5hbWUgPSA/LCB0eXBlID0gPywgZGVzY3JpcHRpb24gPSA/LCBpbWFnZSA9ID8sIAogICAgICAgICAgICAgICAgICAgICBzdGFydF9kYXRlID0gPywgZW5kX2RhdGUgPSA/LAogICAgICAgICAgICAgICAgICAgICBvZmZlcl90eXBlID0gPywgb2ZmZXJfZGF0YSA9ID8sIGV4dHJhID0gPwogICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nOwogICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksCgkJCWFycmF5KCR0aGlzLT5nZXRfbmFtZSgpLAoJCQkgICAgICAkdGhpcy0+Z2V0X3R5cGUoKSwKCQkJICAgICAgJHRoaXMtPmdldF9kZXNjcmlwdGlvbigpLAoJCQkgICAgICAkdGhpcy0+Z2V0X2ltYWdlKCksCgkJCSAgICAgIGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X3N0YXJ0X2RhdGUoKSksCgkJCSAgICAgIGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X2VuZF9kYXRlKCkpLAoJCQkgICAgICAkdGhpcy0+Z2V0X29mZmVyX3R5cGUoKSwKCQkJICAgICAgJHRoaXMtPmdldF9vZmZlcl9kYXRhKCksCgkJCSAgICAgIHNlcmlhbGl6ZSgkdGhpcy0+X2V4dHJhKSwKCQkJICAgICAgJHRoaXMtPmdldF9pZCgpKSApOwogICAgaWYoICEkZGJyICkgewogICAgICB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdTUUwgRXJyb3I6ICcuJGRiLT5zcWwuJyAtLSAnLiRkYi0+RXJyb3JNc2coKSk7CiAgICB9CgogICAgLy8gaW5zZXJ0IHRoZSBjb25kaXRpb25zCiAgICBzZWxmOjpfZGVsX2NvbmRpdGlvbnMoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8ICR0aGlzLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kID0gJHRoaXMtPmdldF9jb25kaXRpb24oJGkpOwogICAgICBpZiggISRjb25kICkgY29udGludWU7CiAgICAgIHNlbGY6Ol9pbnNlcnRfY29uZGl0aW9uKCRjb25kKTsKICAgIH0KCiAgICByZXR1cm4gJHRoaXMtPmdldF9pZCgpOwogIH0KCgogIHByaXZhdGUgZnVuY3Rpb24gX2luc2VydCgpCiAgewogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRxdWVyeSA9ICdTRUxFQ1QgTUFYKGl0ZW1fb3JkZXIpIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgdHlwZSA9ID8nOwogICAgJGl0ZW1fb3JkZXIgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJHRoaXMtPmdldF90eXBlKCkpKTsKICAgIGlmKCAkaXRlbV9vcmRlciA9PSAnJyApICRpdGVtX29yZGVyID0gMDsKICAgICRpdGVtX29yZGVyKys7CgogICAgJG5vdyA9ICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKTsKICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLlBST01PVElPTlNfVEFCTEUuIgogICAgICAobmFtZSx0eXBlLGRlc2NyaXB0aW9uLGltYWdlLGNyZWF0ZWQsc3RhcnRfZGF0ZSxlbmRfZGF0ZSxvZmZlcl90eXBlLG9mZmVyX2RhdGEsaXRlbV9vcmRlcixleHRyYSkKICAgICAgVkFMVUVTICg/LD8sPyw/LCRub3csPyw/LD8sPyw/LD8pIjsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LAoJCQlhcnJheSgkdGhpcy0+Z2V0X25hbWUoKSwKCQkJICAgICAgJHRoaXMtPmdldF90eXBlKCksCgkJCSAgICAgICR0aGlzLT5nZXRfZGVzY3JpcHRpb24oKSwKCQkJICAgICAgJHRoaXMtPmdldF9pbWFnZSgpLAoJCQkgICAgICBjZ2VfdXRpbHM6OmRiX3RpbWUoJHRoaXMtPmdldF9zdGFydF9kYXRlKCkpLAoJCQkgICAgICBjZ2VfdXRpbHM6OmRiX3RpbWUoJHRoaXMtPmdldF9lbmRfZGF0ZSgpKSwKCQkJICAgICAgJHRoaXMtPmdldF9vZmZlcl90eXBlKCksCgkJCSAgICAgICR0aGlzLT5nZXRfb2ZmZXJfZGF0YSgpLAoJCQkgICAgICAkaXRlbV9vcmRlciwKCQkJICAgICAgc2VyaWFsaXplKCR0aGlzLT5fZXh0cmEpKSk7CiAgICBpZiggISRkYnIgKSB7CiAgICAgIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ1NRTCBFcnJvcjogJy4kZGItPnNxbC4nIC0tICcuJGRiLT5FcnJvck1zZygpKTsKICAgIH0KICAgICR0aGlzLT5faWQgPSAkZGItPkluc2VydF9JRCgpOwoKICAgIC8vIGluc2VydCB0aGUgY29uZGl0aW9ucwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHRoaXMtPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmQgPSAkdGhpcy0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIGlmKCAhJGNvbmQgKSBjb250aW51ZTsKICAgICAgc2VsZjo6X2luc2VydF9jb25kaXRpb24oJGNvbmQpOwogICAgfQogICAgcmV0dXJuICR0aGlzLT5faWQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGNoZWNrX3ZhbGlkKCkKICB7CiAgICAkc3QgPSBjZ2VfdXRpbHM6OnVuaXhfdGltZSgkdGhpcy0+Z2V0X3N0YXJ0X2RhdGUoKSk7CiAgICAkZXQgPSBjZ2VfdXRpbHM6OnVuaXhfdGltZSgkdGhpcy0+Z2V0X2VuZF9kYXRlKCkpOwogICAgJGNyID0gY2dlX3V0aWxzOjp1bml4X3RpbWUoJHRoaXMtPmdldF9jcmVhdGVkKCkpOwoKICAgIGlmKCAkc3QgPCAkY3IgKSByZXR1cm4gRkFMU0U7CiAgICBpZiggJGV0IDw9ICRzdCApIHJldHVybiBGQUxTRTsKICAgIGlmKCBlbXB0eSgkdGhpcy0+X25hbWUpICkgcmV0dXJuIEZBTFNFOwogICAgaWYoIGVtcHR5KCR0aGlzLT5fb2ZmZXJfZGF0YSkgKSByZXR1cm4gRkFMU0U7CgogICAgcmV0dXJuIFRSVUU7CiAgfQoKICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiAmX2xvYWRfZnJvbV9kYXRhKCRkYXRhKQogIHsKICAgICRyZXMgPSBudWxsOwogICAgaWYoICFpc19hcnJheSgkZGF0YSkgfHwgY291bnQoJGRhdGEpID09IDAgKSByZXR1cm4gJHJlczsKICAgIGlmKCAhaXNzZXQoJGRhdGFbJ3Jhd19jb25kaXRpb25zJ10pICkgcmV0dXJuICRyZXM7CgogICAgJHByb21vID0gbmV3IHByb21vdGlvbigpOwogICAgZm9yZWFjaCggJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgIGlmKCAka2V5ID09ICdyYXdfY29uZGl0aW9ucycgKSBjb250aW51ZTsKICAgICAgJG0gPSAnXycuJGtleTsKICAgICAgaWYoICRrZXkgPT0gJ2V4dHJhJyApICR2YWx1ZSA9IHVuc2VyaWFsaXplKCR2YWx1ZSk7CiAgICAgICRwcm9tby0+JG0gPSAkdmFsdWU7CiAgICB9CgogICAgZm9yZWFjaCggJGRhdGFbJ3Jhd19jb25kaXRpb25zJ10gYXMgJHJvdyApIHsKICAgICAgJGNvbmRfb2IgPSBuZXcgcHJvbW90aW9uX2NvbmRpdGlvbigpOwogICAgICBmb3JlYWNoKCAkcm93IGFzICRrZXkgPT4gJHZhbHVlICkgewoJJGZ1biA9ICdzZXRfJy4ka2V5OwoJJGNvbmRfb2ItPiRmdW4oJHZhbHVlKTsKICAgICAgfQogICAgICAkcHJvbW8tPmFkZF9jb25kaXRpb24oJGNvbmRfb2IpOwogICAgfQogICAgcmV0dXJuICRwcm9tbzsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gJmxvYWRfYnlfaWQoJGlkKQogIHsKICAgIGlmKCAoJGlkIDw9IDApIHx8ICFpc19udW1lcmljKCRpZCkgKSAKICAgICAgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignQ2Fubm90IGxvYWQgaW52YWxpZCBwcm9tb3Rpb24gaWQgJy4kaWQpOwoKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSBpZCA9ID8nOwogICAgJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgoaW50KSRpZCkpOwogICAgaWYoICEkcm93ICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignUHJvYmxlbSBsb2FkaW5nIHByb21vdGlvbiB3aXRoIGlkICcuJGlkKTsKCiAgICAvLyBsb2FkIGNvbmRpdGlvbnMuCiAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIFdIRVJFIHByb21vdGlvbl9pZCA9ID8nOwogICAgJGRhdGEgPSAkZGItPkdldEFycmF5KCRxdWVyeSxhcnJheSgoaW50KSRpZCkpOwogICAgJHJvd1sncmF3X2NvbmRpdGlvbnMnXSA9ICRkYXRhOwoKICAgIHJldHVybiBzZWxmOjpfbG9hZF9mcm9tX2RhdGEoJHJvdyk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRfYWxsX2J5X3R5cGUoJHR5cGUsJG9ubHl2YWxpZCA9IFRSVUUpCiAgewogICAgc3dpdGNoKCAkdHlwZSApIHsKICAgIGNhc2UgcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ6CiAgICBjYXNlIHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDoKICAgICAgaWYoIGlzc2V0KHNlbGY6OiRfdHlwZV9jYWNoZVskdHlwZV0pICkgcmV0dXJuIHNlbGY6OiRfdHlwZV9jYWNoZVskdHlwZV07CgogICAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSB0eXBlID0gPyc7CiAgICAgIGlmKCAkb25seXZhbGlkICkgewoJJGRhdGUgPSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSk7CgkkcXVlcnkgLj0gIiBBTkQgKHN0YXJ0X2RhdGUgPD0gJGRhdGUpIEFORCAoZW5kX2RhdGUgPj0gJGRhdGUpIjsKICAgICAgfQogICAgICAkcXVlcnkgLj0gJyBPUkRFUiBCWSBpdGVtX29yZGVyIEFTQyc7CiAgICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0eXBlKSk7CiAgICAgICRpZHMgPSBhcnJheSgpOwogICAgICB3aGlsZSggISRkYnItPkVPRiApIHsKCSRyb3cgPSAkZGJyLT5maWVsZHM7CglpZiggIWluX2FycmF5KCRyb3dbJ2lkJ10sJGlkcykgKSAkaWRzW10gPSAoaW50KSRyb3dbJ2lkJ107CgkkZGJyLT5Nb3ZlTmV4dCgpOwogICAgICB9CiAgICAgICRkYnItPk1vdmVGaXJzdCgpOwoKICAgICAgJGRicjIgPSBudWxsOwogICAgICBpZiggaXNfYXJyYXkoJGlkcykgJiYgY291bnQoJGlkcykgKSB7CgkkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIFdIRVJFIHByb21vdGlvbl9pZCBJTiAoJy5pbXBsb2RlKCcsJywkaWRzKS4nKSBPUkRFUiBCWSBwcm9tb3Rpb25faWQgQVNDJzsKCSRkYnIyID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwogICAgICB9CgogICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgd2hpbGUoICEkZGJyLT5FT0YgKSB7Cgkkcm93ID0gJGRici0+ZmllbGRzOwoJZm9yZWFjaCggJGRicjIgYXMgJHJvdzIgKSB7CgkgIGlmKCAkcm93MlsncHJvbW90aW9uX2lkJ10gPCAkcm93WydpZCddICkgY29udGludWU7CgkgIGlmKCAkcm93MlsncHJvbW90aW9uX2lkJ10gPiAkcm93WydpZCddICkgYnJlYWs7CgoJICBpZiggIWlzc2V0KCRyb3dbJ3Jhd19jb25kaXRpb25zJ10pICkgJHJvd1sncmF3X2NvbmRpdGlvbnMnXSA9IGFycmF5KCk7CgkgICRyb3dbJ3Jhd19jb25kaXRpb25zJ11bXSA9ICRyb3cyOwoJfQoJJG91dFtdID0gc2VsZjo6X2xvYWRfZnJvbV9kYXRhKCRyb3cpOwoJJGRici0+TW92ZU5leHQoKTsKICAgICAgfQoKICAgICAgaWYoICFpc19hcnJheShzZWxmOjokX3R5cGVfY2FjaGUpICkgc2VsZjo6JF90eXBlX2NhY2hlID0gYXJyYXkoKTsKICAgICAgc2VsZjo6JF90eXBlX2NhY2hlWyR0eXBlXSA9ICRvdXQ7CiAgICAgIHJldHVybiAkb3V0OwogICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ0ludmFsaWQgcHJvbW90aW9uIHR5cGUgJy4kdHlwZSk7CiAgICB9CiAgfQoKCn0gLy8gY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion_discount.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZGVmaW5lKCdQUk9NT1RJT05TX0RJU0NPVU5UX1BST0RVQ1QnLCdQUk9NT1RJT05TX0RJU0NPVU5UX1BST0RVQ1QnKTsKZGVmaW5lKCdQUk9NT1RJT05TX0RJU0NPVU5UX0FNT1VOVCcsJ1BST01PVElPTlNfRElTQ09VTlRfUFJPRFVDVCcpOwoKY2xhc3MgcHJvbW90aW9uX2Rpc2NvdW50CnsKICBwcml2YXRlICRfdHlwZTsKICBwcml2YXRlICRfYW10OwogIHByaXZhdGUgJF9kZXNjOwogIHByaXZhdGUgJF9wcm9tb19pZDsKCiAgcHVibGljIGZ1bmN0aW9uIGdldF90eXBlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl90eXBlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF90eXBlKCR0eXBlKQogIHsKICAgIGlmKCAkdHlwZSA9PSBQUk9NT1RJT05TX0RJU0NPVU5UX1BST0RVQ1QgfHwKCSR0eXBlID09IFBST01PVElPTlNfRElTQ09VTlRfQU1PVU5UICkKICAgICAgewoJJHRoaXMtPl90eXBlID0gJHR5cGU7CiAgICAgIH0KICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Ftb3VudCgpCiAgewogICAgcmV0dXJuICR0aGlzLV9hbXQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9hbW91bnQoJGFtb3VudCkKICB7CiAgICAkdGhpcy0+X2FtdCA9ICRhbW91bnQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZGVzYzsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2Rlc2NyaXB0aW9uKCRkZXNjcmlwdGlvbikKICB7CiAgICAkdGhpcy0+X2Rlc2MgPSAkZGVzY3JpcHRpb247CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF9wcm9tb19pZCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fcHJvbW9faWQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9wcm9tb19pZCgkaWQpCiAgewogICAgJHRoaXMtPl9wcm9tb19pZCA9ICRpZDsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gaXNfdmFsaWQoKQogIHsKICAgIGlmKCBpc19udWxsKCR0aGlzLT5fdHlwZSkgfHwKCWlzX251bGwoJHRoaXMtPl9kZXNjKSB8fAoJaXNfbnVsbCgkdGhpcy0+X2FtdCkgfHwgKGZsb2F0dmFsKCR0aGlzLT5fYW10KSA8PSAwLjApIHx8Cglpc19udWxsKCR0aGlzLT5fcHJvbW9faWQpICkKICAgICAgewoJcmV0dXJuIEZBTFNFOwogICAgICB9CiAgICByZXR1cm4gVFJVRTsKICB9Cn0gLy8gY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgcHJvbW90aW9uX3Rlc3RlciBleHRlbmRzIGNnX2Vjb21tX3Byb21vdGlvbl90ZXN0ZXIKewogIHByaXZhdGUgJF9jb3Vwb25zOwogIHByaXZhdGUgJF9mZXVfdWlkOwoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogIHsKICAgICRzZXNzID0gbmV3IGNnZV9zZXNzaW9uKCdQcm9tb3Rpb25zJyk7CiAgICAkdGhpcy0+X2NvdXBvbnMgPSAkc2Vzcy0+Z2V0KCdjb3Vwb25zJywnJyk7CgogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9mZXVfdWlkKCkKICB7CiAgICAkeCA9IHBhcmVudDo6Z2V0X2ZldV91aWQoKTsKICAgIGlmKCAkeCA+IDAgKSByZXR1cm4gJHg7CgogICAgJGZldSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwogICAgaWYoICRmZXUgKSB7CiAgICAgICR4ID0gJGZldS0+TG9nZ2VkSW4oKTsKICAgICAgaWYoICR4ID4gMCApIHsKCSR0aGlzLT5zZXRfZmV1X3VpZCgkeCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkeDsKICB9CgogIC8qKgogICAqIHRlc3RzIGlmIHByb2R1Y3QgbWF0Y2hlcyBhbnkgcHJvbW90aW9ucyB0aGF0IG1hdGNoIHNldCBjcml0ZXJpYS4KICAgKiAocHJvZHVjdCBtdXN0IGJlIHNldCkuICBTdG9wcyBhZnRlciB0aGUgZmlyc3QgbWF0Y2gKICAgKgogICAqIEByZXR1cm4gY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfbWF0Y2goKQogIHsKICAgIC8vIGNvbnZlcnRzIGEgY2dfZWNvbW10eXBlIHRvIGEgcHJvbW90aW9uIHR5cGUKICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgc3dpdGNoKCAkdGhpcy0+Z2V0X3Byb21vX3R5cGUoKSApIHsKICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNUQU5UOgogICAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOwogICAgICBicmVhazsKICAgIGNhc2Ugc2VsZjo6VFlQRV9DSEVDS09VVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IENzbUludmFsaWREYXRhRXhjZXB0aW9uKCdVbmtub3duIHByb21vdGlvbiB0eXBlIGluICcuX19DTEFTU19fKTsKICAgIH0KCiAgICAkbWF0Y2ggPSBudWxsOwogICAgJHByb21vcyA9IHByb21vdGlvbjo6bG9hZF9hbGxfYnlfdHlwZSgkdHlwZSk7CiAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICAkcHJvbW8gKSB7CiAgICAgICR0ZXN0ZXIgPSBuZXcgcHJvbW9fdGVzdGVyKCRwcm9tbyk7CiAgICAgIGlmKCAkdGhpcy0+Z2V0X3NrdSgpICkgJHRlc3Rlci0+c2V0X3NrdSgkdGhpcy0+Z2V0X3NrdSgpKTsKCiAgICAgICR0ZXN0ZXItPnNldF9wcm9kdWN0KCR0aGlzLT5nZXRfcHJvZHVjdCgpKTsKICAgICAgJHRlc3Rlci0+c2V0X2NhcnQoJHRoaXMtPmdldF9jYXJ0KCkpOwogICAgICAkdGVzdGVyLT5zZXRfY291cG9ucygkdGhpcy0+X2NvdXBvbnMpOwogICAgICBpZiggJHRlc3Rlci0+ZmluZF9tYXRjaCgpICkgewoJLy8gdGhpcyBwcm9tb3Rpb24gbWF0Y2hlcy4KCS8vIG5lZWQgdG8gcGFyc2UgdGhlIG9mZmVyLgoJJG1hdGNoID0gbmV3IGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaDsKCWlmKCAkdHlwZSA9PSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVCApIHsKCSAgc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQ6CgkgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAgICRhbXQgPSAkdGhpcy0+Z2V0X3ByaWNlKCkgKiAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMTsKCSAgICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJGFtdCk7CgkgICAgYnJlYWs7CgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAgICRtYXRjaC0+c2V0X2Rpc2NvdW50X2FtdCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAgIGJyZWFrOwoKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUOgoJICAgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QRVJDRU5UKTsKCSAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgICBicmVhazsKCgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUOgoJICAgIC8vIGEgZnJlZSBwcm9kdWN0CgkgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RJRCk7CgkgICAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICAgYnJlYWs7CgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVToKCSAgICAvLyBhIGZyZWUgcHJvZHVjdAoJICAgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgICBicmVhazsKCgkgIGRlZmF1bHQ6CgkgICAgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdvZmZlciBvZiB0eXBlICcuJHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpLicgaXMgaW52YWxpZCBmb3IgcHJvbW90aW9uIG9mIHR5cGUgJy4kdHlwZSk7CgkgIH0KCX0KCWVsc2UgewoJICBzd2l0Y2goICRwcm9tb3Rpb24tPmdldF9vZmZlcl90eXBlKCkgKSB7CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUOgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVERJU0NPVU5UOgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgoJICAgIGRpZSgnaW5jb21wbGV0ZSAtLSAnLl9fRklMRV9fLicgLS0gJy5fX0xJTkVfXyk7CgkgICAgYnJlYWs7CgoJICBkZWZhdWx0OgoJICAgIHRocm93IG5ldyBDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbignb2ZmZXIgb2YgdHlwZSAnLiRwcm9tb3Rpb24tPmdldF9vZmZlcl90eXBlKCkuJyBpcyBpbnZhbGlkIGZvciBwcm9tb3Rpb24gb2YgdHlwZSAnLiR0eXBlKTsKCSAgfQoJfQoKCXJldHVybiAkbWF0Y2g7CiAgICAgIH0KICAgIH0KICB9IC8vIGZpbmQgbWF0Y2gKCiAgLyoqCiAgICogRmluZCB0aGUgZmlyc3QgcHJvbW90aW9uIHRoYXQgbWF0Y2hlcyB0aGUgaXRlbXMgaW4gdGhlIGNhcnQKICAgKgogICAqIEByZXR1cm4gY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfY2FydF9tYXRjaCgpCiAgewogICAgLy8gY29udmVydHMgYSBjZ19lY29tbXR5cGUgdG8gYSBwcm9tb3Rpb24gdHlwZQogICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICBzd2l0Y2goICR0aGlzLT5nZXRfcHJvbW9fdHlwZSgpICkgewogICAgY2FzZSBzZWxmOjpUWVBFX0lOU1RBTlQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ7CiAgICAgIGJyZWFrOwogICAgY2FzZSBzZWxmOjpUWVBFX0NIRUNLT1VUOgogICAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgQ3NtSW52YWxpZERhdGFFeGNlcHRpb24oJ1Vua25vd24gcHJvbW90aW9uIHR5cGUgaW4gJy5fX0NMQVNTX18pOwogICAgfQoKICAgICRwcm9tb3MgPSBwcm9tb3Rpb246OmxvYWRfYWxsX2J5X3R5cGUoJHR5cGUpOwogICAgJG1hdGNoID0gbnVsbDsKICAgIGZvcmVhY2goICRwcm9tb3MgYXMgICRwcm9tbyApIHsKICAgICAgJHRlc3RlciA9IG5ldyBwcm9tb190ZXN0ZXIoJHByb21vKTsKICAgICAgJHRlc3Rlci0+c2V0X2NhcnQoJHRoaXMtPmdldF9jYXJ0KCkpOwogICAgICAkdGVzdGVyLT5zZXRfY291cG9ucygkdGhpcy0+X2NvdXBvbnMpOwoKICAgICAgJG1hdGNoX2lkeCA9IC0xOwogICAgICBpZiggJHRlc3Rlci0+ZmluZF9jYXJ0X21hdGNoKCRtYXRjaF9pZHgpICkgewoJLy8gc28gZmFyLCBzbyBnb29kLi4uIG9mZmVyIG1hdGNoZXMgdGhpcyBpdGVtLi4uIGFuZCBtYXliZSBldmVuIHRoZSBjYXJ0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RJRCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAkbWF0Y2gtPnNldF9jYXJ0X2lkeCgkbWF0Y2hfaWR4KTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EREFNT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX0RJU0NPVU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCSAgCglkZWZhdWx0OgoJICBkaWUoJ2lnbm9yZWQnKTsKCSAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KCSAgYnJlYWs7Cgl9CgoJcmV0dXJuICRtYXRjaDsKICAgICAgfQogICAgfQogIH0KCiAgLyoqCiAgICogdGVzdCBpZiB0aGUgcHJvZHVjdCAob3Igc2t1KSBtYXRjaGVzIHRoZSBvZmZlciBwYXJ0CiAgICogb2YgYSBwcm9tb3Rpb24sIGFuZCBpZiB0aGUgY2FydCBjb250ZW50cyBtYXRjaCB0aGUgY29uZGl0aW9ucwogICAqIG9mIHRoZSBvZmZlci4gIFN0b3BzIGFmdGVyIHRoZSBmaXJzdCBtYXRjaC4KICAgKgogICAqIEByZXR1cm4gY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfb2ZmZXJfbWF0Y2goKQogIHsKICAgIC8vIGNvbnZlcnRzIGEgY2dfZWNvbW10eXBlIHRvIGEgcHJvbW90aW9uIHR5cGUKICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgc3dpdGNoKCAkdGhpcy0+Z2V0X3Byb21vX3R5cGUoKSApIHsKICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNUQU5UOgogICAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOwogICAgICBicmVhazsKICAgIGNhc2Ugc2VsZjo6VFlQRV9DSEVDS09VVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IENzbUludmFsaWREYXRhRXhjZXB0aW9uKCdVbmtub3duIHByb21vdGlvbiB0eXBlIGluICcuX19DTEFTU19fKTsKICAgIH0KCiAgICAkcHJvbW9zID0gcHJvbW90aW9uOjpsb2FkX2FsbF9ieV90eXBlKCR0eXBlKTsKICAgICRtYXRjaCA9IG51bGw7CiAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICAkcHJvbW8gKSB7CiAgICAgICR0ZXN0ZXIgPSBuZXcgcHJvbW9fdGVzdGVyKCRwcm9tbyk7CiAgICAgIGlmKCAkdGhpcy0+Z2V0X3NrdSgpICkgJHRlc3Rlci0+c2V0X3NrdSgkdGhpcy0+Z2V0X3NrdSgpKTsKICAgICAgJHRlc3Rlci0+c2V0X3Byb2R1Y3QoJHRoaXMtPmdldF9wcm9kdWN0KCkpOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgICRtYXRjaF9pZHggPSAtMTsKICAgICAgaWYoICR0ZXN0ZXItPmZpbmRfb2ZmZXJfbWF0Y2goKSAmJiAoJHRoaXMtPmdldF9za2lwX2NhcnQoKSB8fCAkdGVzdGVyLT5maW5kX2NhcnRfbWF0Y2goJG1hdGNoX2lkeCkpICkgewoJLy8gc28gZmFyLCBzbyBnb29kLi4uIG9mZmVyIG1hdGNoZXMgdGhpcyBpdGVtLi4uIGFuZCBtYXliZSBldmVuIHRoZSBjYXJ0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSAgLy8gZnJlZSBwcm9kdWN0IGJ5IGlkCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUSUQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgoJICAvLyBmcmVlIHByb2R1Y3QgYnkgc2t1CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgLy8gZGlzY291bnQgYXBwbGljYWJsZSBwcm9kdWN0IGJ5IGZpeGVkIGFtb3VudAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJICAvLyBkaXNjb3VudCBtYXRjaGluZyBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2UKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBub3RlLCBubyBjYXJ0IGluZGV4CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJICAvLyBwZXJjZW50YWdlIG9mZiBvcmRlciB0b3RhbAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CgkgIC8vIHN1YnRyYWN0IGFtb3VudCBmcm9tIG9yZGVyIHRvdGFsCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9ESVNDT1VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CgkgIGRpZSgnbm90IGRvbmUnKTsKCSAgYnJlYWs7CgoJZGVmYXVsdDoKCSAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KCSAgYnJlYWs7Cgl9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJG1hdGNoOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_ops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgcHJvbW9fb3BzCnsKICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiAmX2dldF9kYigpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJGRiID0mICRnQ21zLT5HZXREYigpOwogICAgcmV0dXJuICRkYjsKICB9CgogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uICZfZ2V0X3Byb2R1Y3RzX21vZCgpCiAgewogICAgcmV0dXJuIGNtc191dGlsczo6Z2V0X21vZHVsZSgnUHJvZHVjdHMnKTsKICB9CgogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uICZfZ2V0X3Byb2R1Y3QoJHByb2R1Y3RfaWQpCiAgewogICAgJG1vZHVsZSA9IHNlbGY6Ol9nZXRfcHJvZHVjdHNfbW9kKCk7CiAgICByZXR1cm4gJG1vZHVsZS0+R2V0UHJvZHVjdCgkcHJvZHVjdF9pZCk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uICZsb2FkX3Byb21vX2J5X2lkKCRpZCkKICB7CiAgICByZXR1cm4gcHJvbW90aW9uOjpsb2FkX2J5X2lkKCRpZCk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzX3ZhbGlkX2NvdXBvbigkY29kZSkKICB7CiAgICAkZGIgPSBzZWxmOjpfZ2V0X2RiKCk7CiAgICAkcXVlcnkgPSAnU0VMRUNUIEEuaWQgRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBBCiAgICAgICAgICAgICAgICBMRUZUIEpPSU4gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEUuJyBCCiAgICAgICAgICAgICAgICAgIE9OIEEuaWQgPSBCLnByb21vdGlvbl9pZAogICAgICAgICAgICAgICBXSEVSRSBOT1coKSBCRVRXRUVOIEEuc3RhcnRfZGF0ZSBBTkQgQS5lbmRfZGF0ZQogICAgICAgICAgICAgICAgIEFORCBCLmNvbmRfdHlwZSA9ID8KICAgICAgICAgICAgICAgICBBTkQgQi5kYXRhID0gPyc7CiAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KFBST01PVElPTlNfQ09ORF9DT1VQT04sJGNvZGUpKTsKICAgIHJldHVybiAkdG1wOwogIH0KCgogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdW51c2VkX2NvdXBvbigkbmFtZSwkYWxsb3dfcHJvbW8gPSAnJykKICB7CiAgICAkZGIgPSBzZWxmOjpfZ2V0X2RiKCk7CiAgICAkd2hlcmUgPSBhcnJheSgpOwogICAgJHBhcm1zID0gYXJyYXkoKTsKCiAgICAkd2hlcmVbXSA9ICdjb25kX3R5cGUgPSA/JzsKICAgICRwYXJtc1tdID0gUFJPTU9USU9OU19DT05EX0NPVVBPTjsKICAgICR3aGVyZVtdID0gJ2RhdGEgPSA/JzsKICAgICRwYXJtc1tdID0gJG5hbWU7CiAgICBpZiggJGFsbG93X3Byb21vICkKICAgICAgewoJJHdoZXJlW10gPSAncHJvbW90aW9uX2lkICE9ID8nOwoJJHBhcm1zW10gPSAkYWxsb3dfcHJvbW87CiAgICAgIH0KICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRTsKICAgICRxdWVyeSAuPSAnIFdIRVJFICcuaW1wbG9kZSgnIEFORCAnLCR3aGVyZSk7CiAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCRwYXJtcyk7CiAgICBpZiggJHRtcCApIHJldHVybiBGQUxTRTsKICAgIHJldHVybiBUUlVFOwogIH0KCgogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdW51c2VkX25hbWUoJG5hbWUsJGlkPScnKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCiAgICBpZiggZW1wdHkoJGlkKSApCiAgICAgIHsKCSRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSBuYW1lID0gPyc7CgkkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCRuYW1lKSk7CglpZiggJHRtcCApIHJldHVybiBGQUxTRTsKCXJldHVybiBUUlVFOwogICAgICB9CgogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIG5hbWUgPSA/IEFORCBpZCAhPSA/JzsKICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJG5hbWUsJGlkKSk7CiAgICBpZiggJHRtcCApIHJldHVybiBGQUxTRTsKICAgIHJldHVybiBUUlVFOwogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsY190b3RhbF9kaXNjb3VudCgkY2FydF9pdGVtcykKICB7CiAgICAkZGlzY291bnQgPSAwOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhcnRfaXRlbXMpOyAkaSsrICkKICAgICAgewoJJGRpc2NvdW50ICs9ICRjYXJ0X2l0ZW1zWyRpXS0+Z2V0X2Rpc2NvdW50KCk7CiAgICAgIH0KICAgIHJldHVybiAkZGlzY291bnQ7CiAgfQoKCiAgLyoqCiAgICogR2l2ZW4gYSBwcm9kdWN0IGlkIGFuZCBhbiBhcHBsaWNhYmxlIChhbHJlYWR5IHRlc3RlZCkgcHJvbW90aW9uCiAgICogY2FsY3VsYXRlIHRoZSBkaXNjb3VudCAoaWYgYW55KSBmb3IgdGhpcyBwcm9kdWN0CiAgICoKICAgKiBAcGFyYW0gdGhlIHByb21vdGlvbiBvYmplY3QKICAgKiBAcGFyYW0gdGhlIHByb2R1Y3QgaWQKICAgKiBAcmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLCBvciBhIGhhc2ggY29udGFpbmluZyB0aGUgZGlmZmVyZW50CiAgICogIGRpc2NvdW50IGF0dHJpYnV0ZXMuCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWxjdWxhdGVfcHJvZHVjdF9kaXNjb3VudCgmJHByb21vLCRwcm9kdWN0X2lkKQogIHsKICAgICRwcm9kdWN0ID0gc2VsZjo6X2dldF9wcm9kdWN0KCRwcm9kdWN0X2lkKTsKICAgIGlmKCAhaXNfYXJyYXkoJHByb2R1Y3QpICkgcmV0dXJuIEZBTFNFOwoKICAgICRwZXJjZW50ID0gJyc7CiAgICAkZGlzY291bnQgPSAnJzsKICAgICRmcmVlX3Byb2R1Y3QgPSAnJzsKICAgIHN3aXRjaCggJHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpICkKICAgICAgewogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCS8vIHdlIGdldCBhIGZyZWUgcHJvZHVjdC4KCSRmcmVlX3Byb2R1Y3QgPSAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCk7CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJLy8gY2FsY3VsYXRlIE4gJSBvZmYgCgkkcGVyY2VudCA9ICRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqIC0xLjA7CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKCS8vIGNhbGN1bGF0ZSAkTiBvZmYgCgkkZGlzY291bnQgPSAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wOwoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJJHBlcmNlbnQgPSAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wOwoJYnJlYWs7CiAgICAgIH0KCiAgICBpZiggZW1wdHkoJHBlcmNlbnQpICkKICAgICAgewoJJHBlcmNlbnQgPSAkZGlzY291bnQgLyAkcHJvZHVjdFsncHJpY2UnXTsKICAgICAgfQogICAgZWxzZSBpZiggZW1wdHkoJGRpc2NvdW50KSApCiAgICAgIHsKCSRkaXNjb3VudCA9ICRwcm9kdWN0WydwcmljZSddICogJHBlcmNlbnQ7CiAgICAgIH0KCiAgICAkcmVzID0gYXJyYXkoJ3Byb2R1Y3RfaWQnPT4kZnJlZV9wcm9kdWN0KTsKICAgICRyZXNbJ3BlcmNlbnRhZ2UnXSA9ICRwZXJjZW50OwogICAgJHJlc1snZGlzY291bnQnXSA9ICRkaXNjb3VudDsKICAgIHJldHVybiAkcmVzOwogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsY3VsYXRlX2Rpc2NvdW50KCYkcHJvbW8sJHN1YnRvdGFsLCRjYXJ0X2l0ZW1zKQogIHsKICAgICRuZXdfaXRlbXMgPSBhcnJheSgpOwogICAgc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKQogICAgICB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJLy8gY2FsY3VsYXRlIE4gJSBvZmYgZWFjaCBpdGVtLi4uIGFuIGZpbGwgaW4gdGhlIGRpc2NvdW50IGZpZWxkLgoJZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhcnRfaXRlbXMpOyAkaSsrICkKCSAgewoJICAgICRpdGVtID0gJGNhcnRfaXRlbXNbJGldOwoJICAgICRpdGVtLT5zZXRfZGlzY291bnQoJGl0ZW0tPmdldF91bml0X3ByaWNlKCkgKiAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wKTsKCSAgICAkbmV3X2l0ZW1zW10gPSAkaXRlbTsKCSAgfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CgkvLyBjYWxjdWxhdGUgJE4gb2ZmIAoJZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhcnRfaXRlbXMpOyAkaSsrICkKCSAgewoJICAgICRpdGVtID0gY2xvbmUoJGNhcnRfaXRlbXNbJGldKTsKCSAgICAkbmV3X2l0ZW1zW10gPSAkaXRlbTsKCSAgfQoJJGl0ZW0gPSBuZXcgbGluZV9pdGVtKCk7CgkkaXRlbS0+c2V0X3NvdXJjZSgnUHJvZHVjdHMnKTsKCSRpdGVtLT5zZXRfZGVzY3JpcHRpb24oJHByb21vLT5nZXRfbmFtZSgpKTsKCSRpdGVtLT5zZXRfaXRlbV90eXBlKGxpbmVfaXRlbTo6SVRFTVRZUEVfRElTQ09VTlQpOwoJJGl0ZW0tPnNldF9xdWFudGl0eSgxKTsKCSRpdGVtLT5zZXRfZGlzY291bnQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMCk7CgkkbmV3X2l0ZW1zW10gPSAkaXRlbTsKCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CgkvLyBvZmZlciBhIGZyZWUgcHJvZHVjdC4KCWZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXJ0X2l0ZW1zKTsgJGkrKyApCgkgIHsKCSAgICAkaXRlbSA9IGNsb25lKCRjYXJ0X2l0ZW1zWyRpXSk7CgkgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CgkgIH0KCSRpdGVtID0gbmV3IGxpbmVfaXRlbSgpOwoJJGl0ZW0tPnNldF9zb3VyY2UoJ1Byb2R1Y3RzJyk7CgkkaXRlbS0+c2V0X2Rlc2NyaXB0aW9uKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkkaXRlbS0+c2V0X2l0ZW1fdHlwZShsaW5lX2l0ZW06OklURU1UWVBFX1BST0RVQ1QpOwoJJGl0ZW0tPnNldF9zdGF0dXMoSVRFTVNUQVRVU19OT1RTSElQUEVEKTsKCSRpdGVtLT5zZXRfcXVhbnRpdHkoMSk7CgkkcHJvZHVjdCA9IHNlbGY6Ol9nZXRfcHJvZHVjdCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJaWYoICEkcHJvZHVjdCApIHJldHVybiBGQUxTRTsKCSRpdGVtLT5zZXRfdW5pdF9wcmljZSgkcHJvZHVjdFsncHJpY2UnXSk7CgkkaXRlbS0+c2V0X2Rpc2NvdW50KCRwcm9kdWN0WydwcmljZSddICogLTEuMCk7CgkkaXRlbS0+c2V0X3dlaWdodCgkcHJvZHVjdFsnd2VpZ2h0J10pOwoJJGl0ZW0tPnNldF9za3UoJHByb2R1Y3RbJ3NrdSddKTsKCSRuZXdfaXRlbXNbXSA9ICRpdGVtOwoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJLy8gZGlzY291bnQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdHMgYnkgYSBwZXJjZW50YWdlCgkkcHJvZHVjdHMgPSBhcnJheSgpOwoJZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKQoJICB7CgkgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CgkgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKQoJICAgICAgewoJICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgoJCSRwcm9kdWN0cyA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CgkJYnJlYWs7CgoJICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKCQkkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJCWJyZWFrOwoKCSAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKCQkkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJCWJyZWFrOwoKCSAgICAgIGRlZmF1bHQ6CgkJY29udGludWU7CgkJYnJlYWs7CgkgICAgICB9CgkgIH0KCgkvLyBjaGVjayBpZiB3ZSBmb3VuZCBtYXRjaGluZyBwcm9kdWN0cz8KCWlmKCAhJHByb2R1Y3RzICkgYnJlYWs7CgoJLy8gd2UgZGlkLi4uIHNvIHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nIHdpdGggZWFjaCBwcm9kdWN0Li4KCWZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXJ0X2l0ZW1zKTsgJGkrKyApCgkgIHsKCSAgICAkaXRlbSA9IGNsb25lKCRjYXJ0X2l0ZW1zWyRpXSk7CgkgICAgaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlKCkgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmIAoJCWluX2FycmF5KCRpdGVtLT5nZXRfaXRlbV9pZCgpLCRwcm9kdWN0cykgKQoJICAgICAgewoJCSRpdGVtLT5zZXRfZGlzY291bnQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogJGl0ZW0tPmdldF91bml0X3ByaWNlKCkgKiAtMSk7CgkgICAgICB9CgkgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CgkgIH0KCWJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICRuZXdfaXRlbXM7CiAgfQp9IC8vIGNsYXNzCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgY2xhc3MgaXMgYW4gYXNzaXN0YW50IHRvIHRoZSBwcm9tb3Rpb25fdGVzdGVyIGNsYXNzLgogKiBUaGlzIGNsYXNzIG9wZXJhdGVzIG9uIHNpbmdsZSBwcm9tb3Rpb25zLgogKi8KY2xhc3MgcHJvbW9fdGVzdGVyCnsKICBwcml2YXRlICRfcDsKICBwcml2YXRlICRfc2t1OwogIHByaXZhdGUgJF9wcm9kdWN0OwogIHByaXZhdGUgJF9jYXJ0OwogIHByaXZhdGUgJF9hdXRvX2ZldSA9IFRSVUU7CiAgcHJpdmF0ZSAkX2ZldV91aWQgPSBudWxsOwogIHByaXZhdGUgJF9jb3Vwb25zID0gbnVsbDsKCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0X3NrdSgpCiAgewogICAgJHNrdSA9IG51bGw7CiAgICBpZiggJHRoaXMtPl9wcm9kdWN0ICkgJHNrdSA9ICR0aGlzLT5fcHJvZHVjdC0+Z2V0X3NrdSgpOwogICAgaWYoICR0aGlzLT5fc2t1ICkgJHNrdSA9ICR0aGlzLT5fc2t1OwogICAgcmV0dXJuICRza3U7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocHJvbW90aW9uICRwcm9tbykKICB7CiAgICAkdGhpcy0+X3AgPSAkcHJvbW87CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2F1dG9fZmV1KCRmbGFnID0gVFJVRSkKICB7CiAgICAkdGhpcy0+X2F1dG9fZmV1ID0gKGJvb2wpJGZsYWc7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZldV91aWQoJHVpZCkKICB7CiAgICBpZiggJHVpZCA+IDAgKSAkdGhpcy0+X2ZldV91aWQgPSAkdWlkOwogIH0KCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0X2ZldV91aWQoKQogIHsKICAgIGlmKCAhaXNfbnVsbCgkX2ZldV91aWQpICkgcmV0dXJuICR0aGlzLT5fZmV1X3VpZDsKCiAgICBpZiggJHRoaXMtPl9hdXRvX2ZldSApIHsKICAgICAgJGZldSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwogICAgICBpZiggaXNfb2JqZWN0KCRmZXUpICkgewoJJHRoaXMtPl9mZXVfdWlkID0gJGZldS0+TG9nZ2VkSW4oKTsKCXJldHVybiAkdGhpcy0+X2ZldV91aWQ7CiAgICAgIH0KICAgIH0KICB9CgogIHByaXZhdGUgZnVuY3Rpb24gX2l0ZW1fZGlzY291bnRlZCgkaWR4KQogIHsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0aGlzLT5fY2FydCk7ICRpKysgKSB7CiAgICAgICRpdGVtID0gJHRoaXMtPl9jYXJ0WyRpXTsKICAgICAgaWYoICRpdGVtLT5nZXRfcGFyZW50KCkgPiAtMSApIHJldHVybiBUUlVFOwogICAgICBpZiggJGl0ZW0tPmdldF91bml0X2Rpc2NvdW50KCkgIT0gMCApIHJldHVybiBUUlVFOwogICAgICBpZiggJGl0ZW0tPmdldF9wYXJlbnQoKSA9PSAkaWR4ICkgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9za3UoJHNrdSkKICB7CiAgICAkdGhpcy0+X3NrdSA9ICRza3U7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3Byb2R1Y3QoY2dfZWNvbW1fcHJvZHVjdGluZm8gJHByb2R1Y3QpCiAgewogICAgJHRoaXMtPl9wcm9kdWN0ID0gJHByb2R1Y3Q7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NhcnQoJGl0ZW1zKQogIHsKICAgIGlmKCBpc19hcnJheSgkaXRlbXMpICYmIGNvdW50KCRpdGVtcykgKSB7CiAgICAgICR0aGlzLT5fY2FydCA9ICRpdGVtczsKICAgIH0KICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY291cG9ucygkaXRlbXMpCiAgewogICAgaWYoIGlzX2FycmF5KCRpdGVtcykgJiYgY291bnQoJGl0ZW1zKSApIHsKICAgICAgJHRoaXMtPl9jb3Vwb25zID0gJGl0ZW1zOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsY3VsYXRlcyB0aGUgJ3N1YnRvdGFsJyBvZiBhbGwgY2FydCBpdGVtcwogICAqIGluY2x1ZGluZyBkaXNzY291bnRzIGFscmVhZHkgYXBwbGllZAogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gX2NhbGNfb3JkZXJfc3VidG90YWwoJGluY2x1ZGVkX2Rpc2NvdW50ZWQgPSBGQUxTRSkKICB7CiAgICAkdiA9IDA7CiAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jYXJ0KSAmJiBjb3VudCgkdGhpcy0+X2NhcnQpICkgewogICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CglpZiggIWlzX2EoJGl0ZW0sJ2NnX2Vjb21tX2NhcnRpdGVtJykgKSB7CgkgIC8vIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaGVyZQoJICBjb250aW51ZTsKCX0KCQoJaWYoICEkaW5jbHVkZV9kaXNjb3VudGVkICYmICRpdGVtLT5nZXRfdW5pdF9kaXNjb3VudCgpIDwgMCApIGNvbnRpbnVlOwoJaWYoICEkaW5jbHVkZV9kaXNjb3VudGVkICYmICRpdGVtLT5nZXRfcGFyZW50KCkgPCAwICkgY29udGludWU7CgkkdiArPSAkaXRlbS0+Z2V0X2l0ZW1fdG90YWwoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICR2OwogIH0KCiAgcHJpdmF0ZSBmdW5jdGlvbiBfY2FsY19vcmRlcl93ZWlnaHQoKQogIHsKICAgICR2ID0gMDsKICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2NhcnQpICYmIGNvdW50KCR0aGlzLT5fY2FydCkgKSB7CiAgICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCWlmKCAhaXNfYSgkaXRlbSwnY2dfZWNvbW1fY2FydGl0ZW0nKSApIHsKCSAgLy8gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlCgkgIGNvbnRpbnVlOwoJfQoJCgkkdiArPSAkaXRlbS0+Z2V0X3VuaXRfd2VpZ2h0KCkgKiAkaXRlbS0+Z2V0X3F1YW50aXR5KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkdjsKICB9CgogIC8vIHJldHVybnMgYm9vbGVhbgogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX21hdGNoKCkKICB7CiAgICAkbWF0Y2hfY291bnQgPSAwOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHRoaXMtPl9wLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kaXRpb24gPSAkdGhpcy0+X3AtPmdldF9jb25kaXRpb24oJGkpOwoJICAgIAogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJLy8gdGVzdCB1c2VyIGlzIG1lbWJlciBvZiBmZXUgZ3JvdXAuCglpZiggJGNvbmRfdGVzdHM6OnRlc3RfZmV1X3VpZCgkY29uZGl0aW9uKSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1NVQlRPVEFMOgoJaWYoICFpc19udW1lcmljKCRjb25kaXRpb24tPmdldF9kYXRhKCkpICkgYnJlYWs7CglpZiggJHRoaXMtPl9jYWxjX29yZGVyX3N1YnRvdGFsKCkgPj0gKGZsb2F0KSRjb25kaXRpb24tPmdldF9kYXRhKCkgKSB7CgkgICRtYXRjaF9jb3VudCsrOwoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9XRUlHSFQ6CglpZiggIWlzX251bWVyaWMoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSkgKSBicmVhazsKCWlmKCAkdGhpcy0+X2NhbGNfb3JkZXJfd2VpZ2h0KCkgPj0gKGZsb2F0KSRjb25kaXRpb24tPmdldF9kYXRhKCkgKSB7CgkgICRtYXRjaF9jb3VudCsrOwoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9DT1VQT046CglpZiggaXNfYXJyYXkoJHRoaXMtPl9jb3Vwb25zKSAmJiBjb3VudCgkdGhpcy0+X2NvdXBvbnMpICkgewoJICBmb3JlYWNoKCAkdGhpcy0+X2NvdXBvbnMgYXMgJGNvZGUgKSB7CgkgICAgaWYoIHN0cmNhc2VjbXAoJGNvZGUsICRjb25kaXRpb24tPmdldF9kYXRhKCkpID09IDAgKSB7CgkgICAgICAkbWF0Y2hfY291bnQrKzsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CglpZiggJHRoaXMtPl9wcm9kdWN0ICkgewoJICAvLyB0ZXN0IGlmIHRoaXMgcHJvZHVjdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHJvZHVjdCBpZAoJICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgIGlmKCBpbl9hcnJheSgkdGhpcy0+X3Byb2R1Y3QtPmdldF9wcm9kdWN0X2lkKCksJHRtcCkgKSB7CgkgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgYnJlYWs7CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVToKCWlmKCAoJHNrdSA9ICR0aGlzLT5fZ2V0X3NrdSgpKSApIHsKCSAgLy8gdGVzdCBpZiB0aGlzIHByb2R1Y3QgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHByb2R1Y3QgaWQKCSAgJHRtcCA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJICBmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CgkgICAgaWYoIGZubWF0Y2goJG9uZSwkc2t1KSApICB7CgkgICAgICAkbWF0Y2hfY291bnQrKzsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKCWlmKCAkcHJvZHVjdHMgKSB7CgkgIC8vIGhhdmUgcHJvZHVjdCBpZHMgaW4gdGhzZSBjYXRlZ29yaWVzLgoJICBpZiggJHRoaXMtPl9wcm9kdWN0ICYmIGluX2FycmF5KCR0aGlzLT5fcHJvZHVjdC0+Z2V0X3Byb2R1Y3RfaWQoKSwkcHJvZHVjdHMpICkgewoJICAgICRtYXRjaF9jb3VudCsrOwoJICAgIGJyZWFrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKCWlmKCAkcHJvZHVjdHMgKSB7CgkgIC8vIGhhdmUgcHJvZHVjdCBpZHMgaW4gdGhzZSBjYXRlZ29yaWVzLgoJICBpZiggJHRoaXMtPl9wcm9kdWN0ICYmIGluX2FycmF5KCR0aGlzLT5fcHJvZHVjdC0+Z2V0X3Byb2R1Y3RfaWQoKSwkcHJvZHVjdHMpICkgewoJICAgICRtYXRjaF9jb3VudCsrOwoJICAgIGJyZWFrOwoJICB9Cgl9CglicmVhazsKICAgICAgfSAvLyBzd2l0Y2gKICAgIH0gLy8gZm9yIGVhY2ggY29uZGl0aW9uCgogICAgaWYoICRtYXRjaF9jb3VudCA9PSAkdGhpcy0+X3AtPmNvdW50X2NvbmRpdGlvbnMoKSApIHsKICAgICAgaWYoICR0aGlzLT5fcC0+Z2V0X2V4dHJhKCdhbGxvd19vbmNlJykgKSB7Cglmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJG9uZV9pdGVtICkgewoJICBpZiggJG9uZV9pdGVtLT5nZXRfcHJvbW8oKSA9PSAkdGhpcy0+X3AtPmdldF9pZCgpICkgewoJICAgIHJldHVybiBGQUxTRTsKCSAgfQoJfQogICAgICB9CgogICAgICAvLyBpdCBtYXRjaGVzLgogICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfSAvLyBlbmQgb2YgZnVuY3Rpb24KCgogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX29mZmVyX21hdGNoKCkKICB7CiAgICAvLyB0ZXN0cyBpZiB0aGUgcHJvZHVjdCwgb3Igc2t1IG1hdGNoIHRoZSBvZmZlcgogICAgLy8gbm90ZSwgb25seSB3b3JrcyB3aXRoIG9mZmVyIHR5cGVzIHRoYXQgaGF2ZSBhIHByb2R1Y3QgaWQsIG9yIHNrdSBpbiB0aGVtLgogICAgLy8gcmV0dXJucyBib29sZWFuLgoKICAgIHN3aXRjaCggJHRoaXMtPl9wLT5nZXRfb2ZmZXJfdHlwZSgpICkgewogICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CiAgICAgIGlmKCAkdGhpcy0+X3Byb2R1Y3QtPmdldF9wcm9kdWN0X2lkKCkgPT0gJHRoaXMtPl9wLT5nZXRfb2ZmZXJfZGF0YSgpICkgewoJcmV0dXJuIFRSVUU7CiAgICAgIH0KICAgICAgYnJlYWs7CgogICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CiAgICAgIGlmKCAoJHNrdSA9ICR0aGlzLT5fZ2V0X3NrdSgpKSApIHsKCSR0bXAgPSBleHBsb2RlKCcsJywkdGhpcy0+X3AtPmdldF9vZmZlcl9kYXRhKCkpOwoJZm9yZWFjaCggJHRtcCBhcyAkb25lICkgewoJICBpZiggZm5tYXRjaCgkb25lLCRza3UpICkgcmV0dXJuIFRSVUU7Cgl9CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0gLy8gZW5kIG9mIGZ1bmN0aW9uCgogIC8qKgogICAqIFRlc3QgaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjYXJ0IG1hdGNoIGFsbCBvZiB0aGUgY29uZGl0aW9ucyBmb3IgdGhpcyBwcm9tb3Rpb24uCiAgICogQXQgbGVhc3Qgb25lIG9mIHRoZSBjb25kaXRpb25zIGhhcyB0byBiZSBhICdwcm9kdWN0JyB0eXBlIG1hdGNoLgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX2NhcnRfbWF0Y2goJiRtYXRjaGVkX2NhcnRpdGVtX2lkeCkKICB7CiAgICAkbWF0Y2hfY291bnQgPSAwOwogICAgJG1hdGNoX2NhcnRpdGVtID0gLTE7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkdGhpcy0+X3AtPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICR0aGlzLT5fcC0+Z2V0X2NvbmRpdGlvbigkaSk7CgogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJLy8gdGVzdCB1c2VyIGlzIG1lbWJlciBvZiBmZXUgZ3JvdXAuCglpZiggJGNvbmRfdGVzdHM6OnRlc3RfZmV1X3VpZCgkY29uZGl0aW9uKSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1NVQlRPVEFMOgoJaWYoICFpc19udW1lcmljKCRjb25kaXRpb24tPmdldF9kYXRhKCkpICkgYnJlYWs7CglpZiggJHRoaXMtPl9jYWxjX29yZGVyX3N1YnRvdGFsKCkgPj0gKGZsb2F0KSRjb25kaXRpb24tPmdldF9kYXRhKCkgKSB7CgkgICRtYXRjaF9jb3VudCsrOwoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9XRUlHSFQ6CglpZiggIWlzX251bWVyaWMoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSkgKSBicmVhazsKCWlmKCAkdGhpcy0+X2NhbGNfb3JkZXJfd2VpZ2h0KCkgPj0gKGZsb2F0KSRjb25kaXRpb24tPmdldF9kYXRhKCkgKSB7CgkgICRtYXRjaF9jb3VudCsrOwoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9DT1VQT046CglpZiggaXNfYXJyYXkoJHRoaXMtPl9jb3Vwb25zKSAmJiBjb3VudCgkdGhpcy0+X2NvdXBvbnMpICkgewoJICBmb3JlYWNoKCAkdGhpcy0+X2NvdXBvbnMgYXMgJGNvZGUgKSB7CgkgICAgaWYoIHN0cmNhc2VjbXAoJGNvZGUsICRjb25kaXRpb24tPmdldF9kYXRhKCkpID09IDAgKSB7CgkgICAgICAkbWF0Y2hfY291bnQrKzsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CgkvLyB0ZXN0IGlmIHRoaXMgcHJvZHVjdCBleGlzdHMgaW4gdGhlIGNhcnQgKGJ5IHByb2R1Y3QgaWQpCglpZiggJHRoaXMtPl9jYXJ0ICkgewoJICAvLyBpZiBtYXRjaGVzLCB0aGVuIHRoZXJlIGlzIGEgcHJvZHVjdCBpbiB0aGUgY2FydCB0aGF0IG1hdGNoZXMgdGhpcyBjb25kaXRpb24KCSAgJGlkeCA9IDA7CgkgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCSAgICBpZiggJHRoaXMtPl9pdGVtX2Rpc2NvdW50ZWQoJGlkeCkgKSBjb250aW51ZTsKCgkgICAgJHRtcCA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJICAgIGlmKCBpbl9hcnJheSgkaXRlbS0+Z2V0X3Byb2R1Y3RfaWQoKSwkdG1wKSApIHsKCSAgICAgICRtYXRjaF9jb3VudCsrOwoJICAgICAgJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgICAkaWR4Kys7CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVToKCS8vIHRlc3QgaWYgdGhpcyBwcm9kdWN0IGV4aXN0cyBpbiB0aGUgY2FydCAoYnkgc2t1KQoJaWYoICR0aGlzLT5fY2FydCApIHsKCSAgLy8gaWYgbWF0Y2hlcywgdGhlbiB0aGVyZSBpcyBhIHByb2R1Y3QgaW4gdGhlIGNhcnQgdGhhdCBtYXRjaGVzIHRoaXMgY29uZGl0aW9uCgkgICRpZHggPSAwOwoJICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CgkgICAgaWYoICR0aGlzLT5faXRlbV9kaXNjb3VudGVkKCRpZHgpICkgY29udGludWU7CgoJICAgICR0bXAgPSBleHBsb2RlKCcsJywkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKCSAgICAkZm5kID0gZmFsc2U7CgkgICAgZm9yZWFjaCggJHRtcCBhcyAkb25lICkgewoJICAgICAgaWYoIGZubWF0Y2goJG9uZSwkaXRlbS0+Z2V0X3NrdSgpKSApIHsKCgkJJG1hdGNoX2NvdW50Kys7CgkJJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQkkZm5kID0gdHJ1ZTsKCQlicmVhazsKCSAgICAgIH0KCSAgICB9CgkgICAgaWYoICRmbmQgKSBicmVhazsKCSAgICAkaWR4Kys7CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVDoKCSRwcm9kdWN0cyA9IFByb2R1Y3RzOjpHZXRQcm9kdWN0SWRzRnJvbUNhdGVnb3JpZXMoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CglpZiggJHByb2R1Y3RzICkgewoJICBpZiggJHRoaXMtPl9jYXJ0ICYmICEkdGhpcy0+X3Rlc3RfcHJvZHVjdG9ubHkgKSB7CgkgICAgJGlkeCA9IDA7CgkgICAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJICAgICAgaWYoICRpdGVtLT5nZXRfcGFyZW50KCkgPiAtMSApIGNvbnRpbnVlOwoJICAgICAgaWYoICRpdGVtLT5nZXRfdW5pdF9kaXNjb3VudCgpICE9IDAgKSBjb250aW51ZTsKCgkgICAgICBpZiggaW5fYXJyYXkoJGl0ZW0tPmdldF9wcm9kdWN0X2lkKCksJHByb2R1Y3RzKSApIHsKCQkkbWF0Y2hfY291bnQrKzsKCQkkbWF0Y2hfY2FydGl0ZW0gPSAkaWR4OwoJCWJyZWFrOwoJICAgICAgfQoJICAgICAgJGlkeCsrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESElFUjoKCSRwcm9kdWN0cyA9IFByb2R1Y3RzOjpHZXRQcm9kdWN0SWRzRnJvbUhpZXJhcmNoeSgkY29uZGl0aW9uLT5nZXRfZGF0YSgpLCcuJyk7CglpZiggJHByb2R1Y3RzICkgewoJICBpZiggJHRoaXMtPl9jYXJ0ICYmICEkdGhpcy0+X3Rlc3RfcHJvZHVjdG9ubHkgKSB7CgkgICAgJGlkeCA9IDA7CgkgICAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJICAgICAgaWYoIGluX2FycmF5KCRpdGVtLT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CgkJJG1hdGNoX2NvdW50Kys7CgkJJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQlicmVhazsKCSAgICAgIH0KCSAgICAgICRpZHgrKzsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwogICAgICB9IC8vIHN3aXRjaAogICAgfQoKICAgIC8vaWYoICgkbWF0Y2hfY291bnQgPT0gJHRoaXMtPl9wLT5jb3VudF9jb25kaXRpb25zKCkpICYmICRtYXRjaF9jYXJ0aXRlbSA+IC0xICkgewogICAgaWYoICgkbWF0Y2hfY291bnQgPT0gJHRoaXMtPl9wLT5jb3VudF9jb25kaXRpb25zKCkpICkgewogICAgICAvLyBpdCBtYXRjaGVzLgogICAgICAkbWF0Y2hlZF9jYXJ0aXRlbV9pZHggPSAkbWF0Y2hfY2FydGl0ZW07CiAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgcHJvbW9fdGVzdHMKewogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gJl9nZXRfZmV1KCkKICB7CiAgICByZXR1cm4gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiB0aGUgcHJvbW90aW9uIGlzIGFwcGxpY2FibGUKICAgKiB0byBjb3Vwb24gY29kZSBzdXBwbGllZC4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgY291cG9uIGNvZGUKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIGNvdXBvbiBjb2Rlcywgb3IgaWYgdGhlIGNvdXBvbiBjb2RlIG1hdGNoZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X2NvdXBvbigkY291cG9uLHByb21vdGlvbiAkcHJvbW8pCiAgewogICAgJGNvbmRpdGlvbnMgPSAkcHJvbW8tPmdldF9jb25kaXRpb25zKCk7CiAgICAkZm5kID0gRkFMU0U7CiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY29uZGl0aW9ucyk7ICRpKysgKSB7CiAgICAgICRjb25kID0gJGNvbmRpdGlvbnNbJGldOwogICAgICBpZiggJGNvbmQtPmdldF9jb25kX3R5cGUoKSAhPSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OICkgY29udGludWU7CgogICAgICAkZm5kID0gVFJVRTsKICAgICAgJGRhdGEgPSAkY29uZC0+Z2V0X2RhdGEoKTsKICAgICAgaWYoIHN0cmNhc2VjbXAoJGNvdXBvbiwkZGF0YSkgPT0gMCApIHJldHVybiBUUlVFOwogICAgfQoKICAgIGlmKCAhJGZuZCApIHJldHVybiBUUlVFOyAvLyB0aGlzIHByb21pdGlvbiBoYXMgbm8gY291cG9uIGRlcGVuZGVuY2llcy4KCiAgICAvLyB0aGlzIHByb21vdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgc3VwcGxpZWQgY291cG9uLgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgc3ViamVjdCB0byBhIHdlaWdodCBjb25kaXRpb24KICAgKiBhbmQgd2V0aGVyIHRoZSB3ZWlnaHQgc3VwcGxpZXMgbWF0Y2hlcyB0aGF0IGNvbmRpdGlvbi4KICAgKgogICAqIEBwYXJhbSBmbG9hdCB3ZWlnaHQgYW1vdW50CiAgICogQHBhcmFtIHByb21vdGlvbiBQcm9tb3Rpb24gb2JqZWN0LgogICAqIEByZXR1cnNuIFRSVUUgaWYgdGhpcyB0ZXN0IGRvZXMgbm90IHJlbHkgb24gb3JkZXIgd2VpZ2h0LCBvciBpZiB0aGUgd2VpZ2h0IHZhbHVlIGlzIG92ZXIgdGhlIGFsbG93ZWQgcmFuZ2UuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X29yZGVyX3dlaWdodCgkd2VpZ2h0LHByb21vdGlvbiAkcHJvbW8pCiAgewogICAgaWYoICR3ZWlnaHQgPD0gMC4wMCApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgJGNvbmQgPSAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpICE9IFBST01PVElPTlNfQ09ORF9XRUlHSFQgKQoJY29udGludWU7CgogICAgICAkZGF0YSA9ICRjb25kLT5nZXRfZGF0YSgpOwogICAgICBpZiggJHdlaWdodCA+PSAkZGF0YSApCglyZXR1cm4gVFJVRTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIHRoaXMgcHJvbW90aW9uIGlzIG5vdCBkZXBlbmRhbnQgdXBvbiBvcmRlciB3ZWlnaHRzLgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb21vdGlvbiBpcyBhcHBsaWNhYmxlCiAgICogdG8gb3JkZXIgc3VidG90YWwgY2FsY3VsYXRpb25zLCBhbmQgaWYgc28gaWYgdGhlIHN1cHBsaWVkCiAgICogc3VidG90YWwgaXMgb3ZlciBvciBlcXVhbCB0byB0aGUgb25lIHNwZWNpZmllZCBpbiB0aGUKICAgKiBjb25kaXRpb25zLgogICAqCiAgICogQHBhcmFtIGZsb2F0IHN1YnRvdGFsIGFtb3VudAogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJzbiBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIG9yZGVyciBzdWJ0b3RhbCwgb3IgaWYgdGhlIHN1YnRvdGFsIHZhbHVlIGlzIG92ZXIgdGhlIGFsbG93ZWQgcmFuZ2UuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X29yZGVyX3N1YnRvdGFsKCRzdWJ0b3RhbCwmJHByb21vKQogIHsKICAgIGlmKCAkc3VidG90YWwgPD0gMC4wMCApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgICRmb3VuZCA9IGZhbHNlOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNvbmRpdGlvbnMpOyAkaSsrICkgewogICAgICAkY29uZCA9JiAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpICE9IFBST01PVElPTlNfQ09ORF9TVUJUT1RBTCApCgljb250aW51ZTsKCiAgICAgICRkYXRhID0gJGNvbmQtPmdldF9kYXRhKCk7CiAgICAgIGlmKCAkc3VidG90YWwgPj0gJGRhdGEgKSB7CglyZXR1cm4gVFJVRTsKICAgICAgfQoKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gdGhpcyBwcm9tb3Rpb24gaXMgbm90IGRlcGVuZGFudCB1cG9uIG9yZGVyIHN1YnRvdGFscy4KICAgIHJldHVybiBGQUxTRTsKICB9CgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb21vdGlvbiBpcyAKICAgKiBhcHBsaWNhYmxlIHRvIGNlcnRhaW4gRkVVIGdyb3Vwcy4uLiBhbmQgaWYgc28KICAgKiBpZiB0aGUgc3VwcGxpZWQgZmV1X2dyb3VwIHBhc3NlcyB0aGUgdGVzdC4KICAgKgogICAqIEBwYXJhbSBpbnQgZmV1X3VpZAogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIEZFVSBncm91cCBtZW1iZXJzaGlwLCBvciBpZiB0aGUgdXNlciBpcyBtZW1iZXIgb2Ygb25lIG9mIHRoZSBzcGVjaWZpZWQgZ3JvdXAgbmFtZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X2ZldV91aWQoJGZldV91aWQsJiRwcm9tbykKICB7CiAgICBpZiggJGZldV91aWQgPD0gMCApIHJldHVybiBGQUxTRTsKCiAgICAkZmV1ID0gc2VsZjo6X2dldF9mZXUoKTsKICAgIGlmKCAhJGZldSApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgJGNvbmQgPSAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpID09IFBST01PVElPTlNfQ09ORF9GRVUgKSB7CgkvLyBnZXQgbWVtYmVyIGdyb3VwcyBhcyBhcnJheSBvZiBncm91cCBuYW1lcwoJJG1lbWJlcl9vZiA9ICRmZXUtPkdldE1lbWJlckdyb3Vwc0FycmF5KCRmZXVfdWlkKTsKCWlmKCAhJG1lbWJlcl9vZiApIHJldHVybiBGQUxTRTsKCSRtZW1iZXJfb2YgPSBjZ2VfYXJyYXk6OmV4dHJhY3RfZmllbGQoJG1lbWJlcl9vZiwnZ3JvdXBpZCcpOwoKCSR0bXAgPSAkZmV1LT5HZXRHcm91cExpc3QoKTsKCSRhbGxncm91cHMgPSBhcnJheV9mbGlwKCR0bXApOwoJJG1lbWJlcl9ncm91cF9uYW1lcyA9IGFycmF5KCk7Cglmb3JlYWNoKCAkbWVtYmVyX29mIGFzICRvbmVnaWQgKSB7CgkgICRtZW1iZXJfZ3JvdXBfbmFtZXNbXSA9ICRhbGxncm91cHNbJG9uZWdpZF07Cgl9CgoJLy8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBjb25kaXRpb24KCS8vIGFzIGFuIGFycmF5IG9mIHRyaW1tZWQgZ3JvdXAgbmFtZXMuCgkkZGF0YSA9IGV4cGxvZGUoJywnLCRjb25kLT5nZXRfZGF0YSgpKTsKCWZvciggJGogPSAwOyAkaiA8IGNvdW50KCRkYXRhKTsgJGorKyApIHsKCSAgJGRhdGFbJGpdID0gdHJpbSgkZGF0YVskal0pOwoJfQoKCS8vIG5vdyBkbyBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiBtZW1iZXIgZ3JvdXBvIG5hbWVzCgkvLyBhbmQgdGhlIGRhdGEgZ3JvdXAgbmFtZXMuCgkkcmVzID0gYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJfZ3JvdXBfbmFtZXMsJGRhdGEpOwoJaWYoIGNvdW50KCRyZXMpICkgcmV0dXJuIFRSVUU7CgoJLy8gdGhlcmUgaXMgZ3VhcmFudGVlZCB0byBiZSBubyBtb3JlIGNvbmRpdGlvbnMgb2YgdGhpcyB0eXBlLgoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyB0aGlzIHByb21vdGlvbiBpcyBub3QgZGVwZW5kYW50IHVwb24gZmV1IGdyb3VwIG1lbWJlcnNoaXAuCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqIAogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb2R1Y3QgaWQgc3BlY2lmaWVkCiAgICogaXMgYXBwbGljYWJsZSB0byBwcm9kdWN0IGhpZXJhcmNoeSB0ZXN0cywgYW5kIGlmIHNvLCBpZiB0aGUgcHJvZHVjdCBpZCBzcGVjaWZpZWQKICAgKiBpcyBpbiB0aGUgYXBwcm9wcmlhdGUgcHJvZHVjdCBoaWVyYXJjaHkuCiAgICoKICAgKiBAcGFyYW0gcHJvbW90aW9uIG9iamVjdAogICAqIEBwYXJhbSBwcm9kdWN0IGlkCiAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgcHJvZHVjdCBpcyBhcHBsaWNhYmxlIHRvIHRoaXMgcHJvbW90aW9uLCBGQUxTRSBvdGhlcndpc2UKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHNpbmdsZV9wcm9kdWN0X2Zyb21faGllcmFyY2h5KCYkcHJvbW8sJHByb2R1Y3RfaWQpCiAgewogICAgJHByb2R1Y3RzID0gbnVsbDsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0cyApIHJldHVybiBGQUxTRTsgCgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgaXRlbXMgaW4gdGhlIGNhcnQgbWF0Y2guCiAgICBpZiggaW5fYXJyYXkoJHByb2R1Y3RfaWQsJHByb2R1Y3RzKSApIHsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgYXBwbGljYWJsZSB0byBwcm9kdWN0IGhpZXJhcmNoeQogICAqIGNvbmRpdGlvbnMsIGFuZCBpZiBzbywgaWYgdGhlIGl0ZW1zIGluIHRoZSAgdXNlcnMgY2FydCBhcmUgcHJvZHVjdHMsIAogICAqIGFuZCBpZiB0aGV5IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIHRoZSBwcm9tb3Rpb24uCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgb2YgbGluZV9pdGVtIG9iamVjdHMKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybnMgVFJVRSBpZiB0aGlzIHRlc3QgZG9lcyBub3QgcmVseSBvbiBGRVUgZ3JvdXAgbWVtYmVyc2hpcCwgb3IgaWYgdGhlIHVzZXIgaXMgbWVtYmVyIG9mIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGdyb3VwIG5hbWVzLiAgRkFMU0Ugb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gdGVzdF9wcm9kdWN0X2Zyb21faGllcmFyY2h5KCRpdGVtcywmJHByb21vKQogIHsKICAgICRwcm9kdWN0cyA9ICcnOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kaXRpb24gPSAkcHJvbW8tPmdldF9jb25kaXRpb24oJGkpOwogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21IaWVyYXJjaHkoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSwnLicpOwoJJGkgPSAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsKCWJyZWFrOwoKICAgICAgZGVmYXVsdDoKCWNvbnRpbnVlOwoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgcHJvZHVjdHMgZm91bmQKICAgIGlmKCAhJHByb2R1Y3RzICkgcmV0dXJuIEZBTFNFOyAKCiAgICAvLyBub3cgY2hlY2sgdG8gc2VlIGlmIHRoZSBpdGVtcyBpbiB0aGUgY2FydCBtYXRjaC4KICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRpdGVtcyk7ICRpKysgKSB7CiAgICAgICRpdGVtID0gJGl0ZW1zWyRpXTsKICAgICAgaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlKCkgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmIAoJICBpbl9hcnJheSgkaXRlbS0+Z2V0X2l0ZW1faWQoKSwkcHJvZHVjdHMpICkgewoJcmV0dXJuIFRSVUU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiBpdCBpcyBhcHBsaWNhYmxlIHRvIHByb2R1Y3QgY2F0ZWdvcnkgCiAgICogY29uZGl0aW9ucywgYW5kIGlmIHNvLCBkb2VzIHRoZSBwcm9kdWN0IGlkIHN1cHBsaWVkIG1hdGNoCiAgICoKICAgKiBAcGFyYW0gdGhlIHByb21vdGlvbiBvYmplY3QKICAgKiBAcGFyYW0gdGhlIHByb2R1Y3QgaWQKICAgKiBAcmV0dXJucyBUUlVFIGlmIG1hdGNoIGZvdW5kLCBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzaW5nbGVfcHJvZHVjdF9mcm9tX2NhdGVnb3J5KCYkcHJvbW8sJHByb2R1Y3RfaWQpCiAgewogICAgJHByb2R1Y3RzID0gJyc7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0cyApIHJldHVybiBGQUxTRTsgCgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZHVjdCBpZCBtYXRjaGVzLgogICAgJGl0ZW0gPSAkaXRlbXNbJGldOwogICAgaWYoIGluX2FycmF5KCRwcm9kdWN0X2lkLCRwcm9kdWN0cykgKSB7CiAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9CgoKICAvKioKICAgKiBUZXN0IHRoZSBwcm9tb3Rpb24gdG8gc2VlIGlmIGl0IGlzIGFwcGxpY2FibGUgdG8gcHJvZHVjdCBjYXRlZ29yeQogICAqIGNvbmRpdGlvbnMsIGFuZCBpZiBzbyBkbyB0aGUgcHJvZHVjdCBpdGVtcyBpbiB0aGUgY3VycmVudAogICAqIHVzZXJzIGNhcnQgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gdGhlIHByb21vdGlvbi4KICAgKgogICAqIEBwYXJhbSBhcnJheSBvZiBsaW5lX2l0ZW0gb2JqZWN0cwogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIEZFVSBncm91cCBtZW1iZXJzaGlwLCBvciBpZiB0aGUgdXNlciBpcyBtZW1iZXIgb2Ygb25lIG9mIHRoZSBzcGVjaWZpZWQgZ3JvdXAgbmFtZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X3Byb2R1Y3RfZnJvbV9jYXRlZ29yeSgkaXRlbXMsJiRwcm9tbykKICB7CiAgICAkcHJvZHVjdHMgPSAnJzsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21DYXRlZ29yaWVzKCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJJGkgPSAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsKCWJyZWFrOwoKICAgICAgZGVmYXVsdDoKCWNvbnRpbnVlOwoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgcHJvZHVjdHMgZm91bmQKICAgIGlmKCAhJHByb2R1Y3RzICkgcmV0dXJuIEZBTFNFOyAKCiAgICAvLyBub3cgY2hlY2sgdG8gc2VlIGlmIHRoZSBpdGVtcyBpbiB0aGUgY2FydCBtYXRjaC4KICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXJ0X2l0ZW1zKTsgJGkrKyApIHsKICAgICAgJGl0ZW0gPSAkaXRlbXNbJGldOwogICAgICBpZiggJGl0ZW0tPmdldF9pdGVtX3R5cGUgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmIAoJICBpbl9hcnJheSgkaXRlbS0+Z2V0X2l0ZW1faWQoKSwkcHJvZHVjdHMpICkgewoJcmV0dXJuIFRSVUU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiBpdCBpcyBhcHBsaWNhYmxlIHRvIGNvbmRpdGlvbnMgYmFzZWQgb24gYSBzaW5nbGUgcHJvZHVjdAogICAqIGFuZCBpZiBzbywgc2VlIGlmIHRoZSBwcm9kdWN0IGlkIHNwZWNpZmllcyBtYXRjaGVzLgogICAqCiAgICogQHBhcmFtIHRoZSBwcm9tb3Rpb24gb2JqZWN0CiAgICogQHBhcmFtIHRoZSBwcm9kdWN0IGlkIHRvIHRlc3QKICAgKiBAcmV0dXJuIFRSVUUgaWYgbWF0Y2ggZm91bmQsIGZhbHNlIG90aGVyd2lzZQogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gc2luZ2xlX3Byb2R1Y3RfbWF0Y2hlcygmJHByb21vLCRwcm9kdWN0X2lkKQogIHsKICAgICRwcm9kdWN0ID0gbnVsbDsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCSRwcm9kdWN0ID0gJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0ICkgcmV0dXJuIEZBTFNFOyAKCiAgICAkcF9hcnJheSA9IGV4cGxvZGUoJywnLCRwcm9kdWN0KTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRwX2FycmF5KTsgJGkrKyApIHsKICAgICAgJHBfYXJyYXlbJGldID0gKGludCl0cmltKCRwX2FycmF5WyRpXSk7CiAgICB9CgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgaXRlbXMgaW4gdGhlIGNhcnQgbWF0Y2guCiAgICBpZiggaW5fYXJyYXkoJHByb2R1Y3RfaWQsJHBfYXJyYXkpICkgewogICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiBpdCBpcyBhcHBsaWNhYmxlIHRvIGNvbmRpdGlvbnMgYmFzZWQgb24gYSBzaW5nbGUgcHJvZHVjdAogICAqIGFuZCBpZiBzbywgc2VlIGlmIGF0IGxlYXN0IG9uZSBwcm9kdWN0IGluIHRoZSBsaW5lIGl0ZW1zIHN1cHBsaWVkIG1hdGNoIHRoZSBjb25kaXRpb24uCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgb2YgbGluZV9pdGVtIG9iamVjdHMKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybnMgVFJVRSBpZiB0aGlzIHRlc3QgZG9lcyBub3QgcmVseSBvbiBGRVUgZ3JvdXAgbWVtYmVyc2hpcCwgb3IgaWYgdGhlIHVzZXIgaXMgbWVtYmVyIG9mIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGdyb3VwIG5hbWVzLiAgRkFMU0Ugb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gdGVzdF9zaW5nbGVfcHJvZHVjdCgkaXRlbXMsJiRwcm9tbykKICB7CiAgICAkcHJvZHVjdCA9IG51bGw7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CgkkcHJvZHVjdCA9ICRjb25kaXRpb24tPmdldF9kYXRhKCk7CgkkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJYnJlYWs7CgogICAgICBkZWZhdWx0OgoJY29udGludWU7CglicmVhazsKICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBwcm9kdWN0cyBmb3VuZAogICAgaWYoICEkcHJvZHVjdCApIHJldHVybiBGQUxTRTsgCgogICAgJHBfYXJyYXkgPSBleHBsb2RlKCcsJywkcHJvZHVjdCk7CiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkcF9hcnJheSk7ICRpKysgKSB7CiAgICAgICRwX2FycmF5WyRpXSA9IChpbnQpdHJpbSgkcF9hcnJheVskaV0pOwogICAgfQoKICAgIC8vIG5vdyBjaGVjayB0byBzZWUgaWYgdGhlIGl0ZW1zIGluIHRoZSBjYXJ0IG1hdGNoLgogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGl0ZW1zKTsgJGkrKyApIHsKICAgICAgJGl0ZW0gPSAkaXRlbXNbJGldOwogICAgICBpZiggJGl0ZW0tPmdldF9pdGVtX3R5cGUoKSA9PSBsaW5lX2l0ZW06OklURU1UWVBFX1BST0RVQ1QgJiYgCgkgIGluX2FycmF5KCRpdGVtLT5nZXRfaXRlbV9pZCgpLCRwX2FycmF5KSApIHsKCXJldHVybiBUUlVFOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgovLyBkdW1teSBvYmplY3QKJGR1bW15ID0gbmV3IHByb21vdGlvbigpOwoKJGRiID0mICR0aGlzLT5HZXREYigpOwokY29uZmlnID0mICRnQ21zLT5HZXRDb25maWcoKTsKCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCi8vIFByb21vdGlvbnMgdGFibGUKJGZsZHMgPSAiCiAgICAgICAgIGlkIEkgS0VZIEFVVE8sCiAgICAgICAgIG5hbWUgQygyNTUpIEtFWSBOT1QgTlVMTCwKICAgICAgICAgZGVzY3JpcHRpb24gWCwKICAgICAgICAgaW1hZ2UgQygyNTUpLAogICAgICAgICBpdGVtX29yZGVyIEkgTk9UIE5VTEwsCiAgICAgICAgIHR5cGUgQygyMCkgTk9UIE5VTEwsCiAgICAgICAgIGNyZWF0ZWQgIiAuIENNU19BRE9EQl9EVCAuICIsCiAgICAgICAgIHN0YXJ0X2RhdGUgIiAuIENNU19BRE9EQl9EVCAuICIsCiAgICAgICAgIGVuZF9kYXRlICIgLiBDTVNfQURPREJfRFQgLiAiLAogICAgICAgICBvZmZlcl90eXBlICBDKDUwKSBOT1QgTlVMTCwKICAgICAgICAgb2ZmZXJfZGF0YSAgQygyNTUpIE5PVCBOVUxMLAogICAgICAgICBleHRyYSBYCiAgICAgICAgIjsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKFBST01PVElPTlNfVEFCTEUsJGZsZHMsJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8gQ29uZGl0aW9ucyB0YWJsZQokZmxkcyA9ICIKICAgICAgICAgaWQgSSBLRVkgQVVUTywKICAgICAgICAgcHJvbW90aW9uX2lkIEkgS0VZIE5PVCBOVUxMLAogICAgICAgICBjb25kX3R5cGUgQyg1MCkgTk9UIE5VTEwsCiAgICAgICAgIGRhdGEgWCBOT1QgTlVMTAogICAgICAgICI7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChQUk9NT1RJT05TX0NPTkRfVEFCTEUsJGZsZHMsJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8gcGVybWlzc2lvbnMKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oUHJvbW90aW9uczo6TUFJTl9QRVJNLFByb21vdGlvbnM6Ok1BSU5fUEVSTSk7CgovLyBwcmVmZXJlbmNlcwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9wcm9tb3Rpb25fcGVyaW9kJywxKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfdHlwZScsUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJy4xJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpbWFnZV9kaXInLCdpbWFnZXMnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vycm9yX2ludmFsaWRfY29kZScsJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfY29kZScpKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vycm9yX2VtcHR5X2NvZGUnLCR0aGlzLT5MYW5nKCdlcnJvcl9lbXB0eV9jb2RlJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbXNnX3ZhbGlkX2NvZGUnLCR0aGlzLT5MYW5nKCdtc2dfdmFsaWRfY29kZScpKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NrdXJlcXVpcmVkJywxKTsKCi8vIHRlbXBsYXRlcwojIFNldHVwIGRlZmF1bHQgaGllcmFyY2h5IHJlcG9ydCB0ZW1wbGF0ZQokZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCdvcmlnX2NvdXBvbmZvcm1fdGVtcGxhdGUudHBsJyk7CmlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQogIHsKICAgICR0ZW1wbGF0ZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCAkZm4gKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKFByb21vdGlvbnM6Ok5FV0NPVVBPTkZPUk1fVEVNUExBVEUsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnY291cG9uZm9ybV9TYW1wbGUnLCR0ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZShQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSwnU2FtcGxlJyk7CiAgfQoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggUFJPTU9USU9OU19UQUJMRSApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBQUk9NT1RJT05TX0NPTkRfVEFCTEUgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCk7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwokZGIgPSBjbXNtcygpLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgppZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjEnKSA8IDAgKSB7CiAgJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChQUk9NT1RJT05TX1RBQkxFLCAnaXRlbV9vcmRlciBJIE5PVCBOVUxMLCB0eXBlIEMoMjUpIE5PVCBOVUxMLCBleHRyYSBYJyk7CiAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdza3VyZXF1aXJlZCcsMSk7CgogICRxdWVyeSA9ICdTRUxFQ1QgaWQsc3RhcnRfZGF0ZSBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIE9SREVSIEJZIHN0YXJ0X2RhdGUgQVNDJzsKICAkdG1wID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwogIGlmKCBpc19hcnJheSgkdG1wKSAmJiBjb3VudCgkdG1wKSApIHsKICAgICRxdWVyeSA9ICdVUERBVEUgJy5QUk9NT1RJT05TX1RBQkxFLicgc2V0IGl0ZW1fb3JkZXIgPSA/LCB0eXBlID0gPyBXSEVSRSBpZCA9ID8nOwogICAgJGlkeCA9IDE7CiAgICBmb3JlYWNoKCAkdG1wIGFzICRyb3cgKSB7CiAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHJvd1snaWQnXSxwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQsJGlkeCsrKSk7CiAgICB9CiAgfQp9CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/Promotions.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJGNnZXh0ZW5zaW9ucyA9IGNtc19qb2luX3BhdGgoJGdDbXMtPmNvbmZpZ1sncm9vdF9wYXRoJ10sJ21vZHVsZXMnLAoJCQkgICAgICAnQ0dFeHRlbnNpb25zJywnQ0dFeHRlbnNpb25zLm1vZHVsZS5waHAnKTsKaWYoICFpc19yZWFkYWJsZSggJGNnZXh0ZW5zaW9ucyApICkKewogIGVjaG8gJzxoMT48Zm9udCBjb2xvcj0icmVkIj5FUlJPUjogVGhlIENHRXh0ZW5zaW9ucyBtb2R1bGUgY291bGQgbm90IGJlIGZvdW5kLjwvZm9udD48L2gxPic7CiAgcmV0dXJuOwp9CnJlcXVpcmVfb25jZSgkY2dleHRlbnNpb25zKTsKCmRlZmluZSgnUFJPTU9USU9OU19UQUJMRScsY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcHJvbW90aW9ucycpOwpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9UQUJMRScsY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcHJvbW90aW9uc19jb25kJyk7CgpjbGFzcyBQcm9tb3Rpb25zIGV4dGVuZHMgQ0dFeHRlbnNpb25zCnsKICBjb25zdCBORVdDT1VQT05GT1JNX1RFTVBMQVRFICA9ICdORVdDT1VQT05GT1JNX1RFTVBMQVRFJzsKICBjb25zdCBERkxUQ09VUE9ORk9STV9URU1QTEFURSA9ICdERkxUQ09VUE9ORk9STV9URU1QTEFURSc7CiAgY29uc3QgTUFJTl9QRVJNICAgICAgICAgICAgICAgPSAnTWFuYWdlIFByb21vdGlvbnMnOwoKICBwcml2YXRlICRfY3VyX2NhcnRfaXRlbXMgPSBudWxsOwoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogIHsKICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKCiAgICBnbG9iYWwgJGdDbXM7CiAgICAkc21hcnR5ID0gJGdDbXMtPkdldFNtYXJ0eSgpOwogICAgCiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigncHJvbW9fZ2V0X3Byb2RfZGlzY291bnQnLAoJCQkgICAgICAgYXJyYXkoJ1Byb21vdGlvbnMnLCdzbWFydHlfZnVuY3Rpb25fcHJvbW9fZ2V0X3Byb2RfZGlzY291bnQnKSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsgcmV0dXJuICdQcm9tb3Rpb25zJzsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7IH0KICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjEuMyc7IH0KICBwdWJsaWMgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7IHJldHVybiAnMS4xMS40JzsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkgeyByZXR1cm4gQGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy9oZWxwLmluYycpOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdjYWxndXkxMDAwJzsgfQogIHB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIHRydWU7IH0KICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyc7IH0KICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiB0cnVlOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdlY29tbWVyY2UnOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEFkbWluKCkgeyByZXR1cm4gVFJVRTsgfQogIHB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkgeyByZXR1cm4gRkFMU0U7IH0KCiAgcHVibGljIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsKICAgIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL2NoYW5nZWxvZy5pbmMnKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgfHwKICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpIHx8CiAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKICB7CiAgICByZXR1cm4gYXJyYXkoJ0NHRXh0ZW5zaW9ucyc9PicxLjMyLjUnLAoJCSAnT3JkZXJzJz0+JzEuMTMuNycsCgkJICdKUXVlcnlUb29scyc9PicxLjIuNCcsCgkJICdQcm9kdWN0cyc9PicyLjE5LjQnKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7IH0KICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7IH0JCiAgcHVibGljIGZ1bmN0aW9uIEFsbG93QXV0b0luc3RhbGwoKSB7IHJldHVybiBGQUxTRTsgfQkKICBwdWJsaWMgZnVuY3Rpb24gQWxsb3dBdXRvVXBncmFkZSgpIHsgcmV0dXJuIEZBTFNFOyB9CQoKICBwdWJsaWMgZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpCiAgewogICAgJHRoaXMtPkFkZEltYWdlRGlyKCdpY29ucycpOwogICAgJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7CiAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CgogICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaW5saW5lJywnZGVmYXVsdCcsJHRoaXMtPkxhbmcoJ3BhcmFtX2lubGluZScpKTsKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbmxpbmUnLENMRUFOX0lOVCk7CiAgICAKICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3RlbXBsYXRlJywnJywkdGhpcy0+TGFuZygncGFyYW1fdGVtcGxhdGUnKSk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGVtcGxhdGUnLENMRUFOX1NUUklORyk7CgogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoQ0xFQU5fUkVHRVhQLicvcHJvbW9fLiovJyxDTEVBTl9TVFJJTkcpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQogIHsKICAgIHJldHVybjsKICAgICR0eHQgPSA8PDxFT1QKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KZmllbGRzZXQuY2dmaWVsZHNldCB7CiAgbWFyZ2luLWxlZnQ6IDIwJTsKfQpsZWdlbmQuY2dsZWdlbmQgewogIGZvbnQtc2l6ZTogMWVtOwogIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cn0KLm5vb2Zmc2V0IHsKICBtYXJnaW4tbGVmdDogMDsKfQo8L3N0eWxlPgpFT1Q7CiAgICAkb2JqID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdKUXVlcnlUb29scycpOwogICAgaWYoIGlzX29iamVjdCgkb2JqKSApIHsKJHRtcGwgPSA8PDxFT1QKe0pRdWVyeVRvb2xzIGFjdGlvbj0naW5janMnIGV4Y2x1ZGU9J2Zvcm0nfQp7SlF1ZXJ5VG9vbHMgYWN0aW9uPSdyZWFkeSd9CkVPVDsKICAgICAgJHR4dCAuPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRtcGwpOwogICAgfQogICAgcmV0dXJuICR0eHQ7CiAgfQkKCiAgcHVibGljIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXM9YXJyYXkoKSkKICB7CiAgICBpZiggJGNhcGFiaWxpdHkgPT0gJ3Byb21vdGlvbnNfY2FsY3VsYXRpb24nICkKICAgICAgcmV0dXJuIFRSVUU7CgogICAgcmV0dXJuIHBhcmVudDo6SGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwkcGFyYW1zKTsKICB9CgogIC8qKgogICAqIEZpbmQgYXBwbGljYWJsZSBwcm9tb3Rpb25zIGdpdmVuIGJhc2tldCBkZXRhaWxzLCBhbmQgb3RoZXIgaW5mb3JtYXRpb24KICAgKgogICAqIEBwYXJhbSBpbnQgVXNlcklEIGZyb20gRkVVIG1vZHVsZQogICAqIEBwYXJhbSBhcnJheSBBcnJheSBvZiBpdGVtcyBpbiB0aGUgYmFza2V0IChhcnJheSBvZiBvYmplY3RzKQogICAqIEBwYXJhbSBmbG9hdCBzdWJ0b3RhbCBvZiBvcmRlciAoYmVmb3JlIHRheGVzIG9yIHNoaXBwaW5nKQogICAqIEBwYXJhbSBmbG9hdCB3ZWlnaHQgb2Ygb3JkZXIgKHByb2R1Y3RzIGhhcyB0aGUgdW5pdHMpCiAgICogQHBhcmFtIGludCAgIHVuaXggZm9ybWF0IGRhdGUgZm9yIHdoaWNoIG9yZGVyIGlzIGFwcGxpY2FibGUKICAgKiBAcmV0dXJucyBoYXNoIG9mIHByb21vdGlvbiBuYW1lLCBhbmQgYW1vdW50IG9mIHByb21vdGlvbi4gIHByb21vdGlvbiB3aXRoIGhpZ2hlciBkaXNjb3VudCB3aW5zLgogICAqIEBkZXByZWNhdGVkCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEZpbmRQcm9tb3Rpb25zKCRmZXVfdWlkLCRpdGVtcywkc3VidG90YWwsJHdlaWdodCwkZGF0ZSA9ICcnKQogIHsKICAgIC8vIHRoaXMgZnVuY3Rpb24gY291bGQgdXNlIHByb21vdGlvbiB0ZXN0ZXIuLi4gYnV0IAogICAgLy8gaXQgZXhwZWN0cyB0aGF0IHRoZSBpdGVtcyBhcmUgY2FydCBpdGVtcy4KICAgIGlmKCBlbXB0eSgkZGF0ZSkgKSAkZGF0ZSA9IHRpbWUoKTsKICAgICRzZXNzID0gbmV3IGNnZV9zZXNzaW9uKCdQcm9tb3Rpb25zJyk7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRkYXRlID0gJGRiLT5EYlRpbWVTdGFtcCgkZGF0ZSk7CgogICAgLy8gbm93IHdlIGhhdmUgYSBsaXN0IG9mIHByb21vdGlvbiBpZCdzIGxvYWQgZWFjaCBwcm9tb3Rpb24KICAgIC8vIGFuZCB0ZXN0IGl0LgogICAgLy8gY2FsY3VsYXRlIHRoZSBkaXNjb3VudHMgYXBwbGllZCBmb3IgYWxsIGxpbmUgaXRlbXMKICAgIC8vIGFuZCBjYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHRoZW0uCiAgICAkcHJvbW9zID0gcHJvbW90aW9uOjpsb2FkX2FsbF9ieV90eXBlKHByb21vdGlvbjo6VFlQRV9DSEVDS09VVCk7CiAgICAkZGlzY291bnRfYW10ID0gMTAwMDAwMDA7CiAgICAkZGlzY291bnRfaXRlbXMgPSAnJzsKICAgIGZvcmVhY2goICRwcm9tb3MgYXMgJHByb21vICkgewogICAgICAkbWF0Y2hfdHlwZSA9ICcnOwoKICAgICAgLy8gY2hlY2sgYWxsIG9mIHRoZSBjb25kaXRpb25zIGluIHRoZSBwcm9tb3Rpb24KICAgICAgJG1hdGNoID0gdHJ1ZTsKICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CgkkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKCglzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKCWNhc2UgUFJPTU9USU9OU19DT05EX0ZFVToKCSAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9mZXVfdWlkKCRmZXVfdWlkLCRwcm9tbykgKSB7CgkgICAgJG1hdGNoID0gZmFsc2U7CgkgICAgYnJlYWs7CgkgIH0KCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUw6CgkgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3Rfb3JkZXJfc3VidG90YWwoJHN1YnRvdGFsLCRwcm9tbykgKSB7CgkgICAgJG1hdGNoID0gZmFsc2U7CgkgICAgYnJlYWs7CgkgIH0KCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOgoJICAkY291cG9ucyA9ICRzZXNzLT5nZXQoJ2NvdXBvbnMnLCcnKTsKCSAgaWYoICRjb3Vwb25zICkgewoJICAgIC8vIHRlc3QgYWxsIG9mIG91ciBjb3Vwb25zLgoJICAgICR0ZXN0ID0gZmFsc2U7CgkgICAgZm9yZWFjaCggJGNvdXBvbnMgYXMgJGNvdXBvbiApIHsKCSAgICAgIGlmKCBwcm9tb190ZXN0czo6dGVzdF9jb3Vwb24oJGNvdXBvbiwkcHJvbW8pICkgewoJCSR0ZXN0ID0gdHJ1ZTsKCQlicmVhazsKCSAgICAgIH0KCSAgICB9CgkgICAgaWYoICEkdGVzdCApIHsKCSAgICAgICRtYXRjaCA9IGZhbHNlOwoJICAgIH0KCSAgfQoJICBlbHNlIHsKCSAgICAkbWF0Y2ggPSBmYWxzZTsKCSAgfQoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfQ09ORF9XRUlHSFQ6CgkgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3Rfb3JkZXJfd2VpZ2h0KCR3ZWlnaHQsJHByb21vKSApIHsKCSAgICAkbWF0Y2ggPSBmYWxzZTsKCSAgICBicmVhazsKCSAgfQoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CgkgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3Rfc2luZ2xlX3Byb2R1Y3QoJGl0ZW1zLCRwcm9tbykgKSB7CgkgICAgJG1hdGNoID0gZmFsc2U7CgkgIH0KCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVDoKCSAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9wcm9kdWN0X2Zyb21fY2F0ZWdvcnkoJGl0ZW1zLCRwcm9tbykgKSB7CgkgICAgJG1hdGNoID0gZmFsc2U7CgkgIH0KCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3RfcHJvZHVjdF9mcm9tX2hpZXJhcmNoeSgkaXRlbXMsJHByb21vKSApIHsKCSAgICAkbWF0Y2ggPSBmYWxzZTsKCSAgfQoJICBicmVhazsKCX0KCgkvLyBpZiBvbmUgY29uZGl0aW9uIGRvZXMgbm90IG1hdGNoLCB0aGUgdGVzdCBmYWlscy4KCWlmKCAhJG1hdGNoICkgYnJlYWs7CiAgICAgIH0KCiAgICAgIC8vIGNoZWNrIHRoZSB2YWx1ZSBvZiB0aGUgZGlzY291bnQJCiAgICAgIGlmKCAkbWF0Y2ggKSB7CgkkYWRqX2l0ZW1zID0gcHJvbW9fb3BzOjpjYWxjdWxhdGVfZGlzY291bnQoJHByb21vLCRzdWJ0b3RhbCwkaXRlbXMpOwoJJGFkal9hbXQgICA9IHByb21vX29wczo6Y2FsY190b3RhbF9kaXNjb3VudCgkYWRqX2l0ZW1zKTsKCWlmKCAkZGlzY291bnRfYW10ID4gJGFkal9hbXQgKSB7CgkgICRkaXNjb3VudF9hbXQgPSAkYWRqX2FtdDsKCSAgJGRpc2NvdW50X2l0ZW1zID0gJGFkal9pdGVtczsKCX0KCWNvbnRpbnVlOwogICAgICB9CiAgICB9IC8vIGZvcmVhY2gKCiAgICByZXR1cm4gJGRpc2NvdW50X2l0ZW1zOwogIH0KCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBiZXN0IGRpc2NvdW50IGZvciBhIHByb2R1Y3QgZ2l2ZW4gYW4gRkVVIHVzZXIgaWQsIGFuZCBhIHByb2R1Y3QgaWQuCiAgICogCiAgICogQHJldHVybnMgYSBoYXNoIG9mIHJlc3VsdHMgZm9yIHRoZSBiZXN0IGRpc2NvdW50IGZvdW5kIG9yIEZBTFNFLgogICAqIEBkZXByZWNhdGVkCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGlzY291bnRfZm9yX3Byb2R1Y3QoJGZldV91aWQsJHByb2R1Y3RfaWQpCiAgewogICAgJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJ1Byb21vdGlvbnMnKTsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRkYiA9ICRnQ21zLT5HZXREYigpOwogICAgJGRhdGUgPSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSk7CgogICAgLy8gZ2V0IGEgbGlzdCBvZiB0aGUgY3VycmVudGx5IHZhbGlkIHByb21vdGlvbnMuCiAgICAkcXVlcnkgPSAnU0VMRUNUIGlkIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLiIKICAgICAgICAgICAgICAgV0hFUkUgKHN0YXJ0X2RhdGUgPD0gJGRhdGUpIEFORCAoZW5kX2RhdGUgPj0gJGRhdGUpCiAgICAgICAgICAgICAgIE9SREVSIEJZIGl0ZW1fb3JkZXIsb2ZmZXJfdHlwZSBBU0MiOwogICAgJHByb21vdGlvbl9pZHMgPSAkZGItPkdldENvbCgkcXVlcnkpOwogICAgaWYoICEkcHJvbW90aW9uX2lkcyApIHsKICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIC8vIG5vdyB3ZSBoYXZlIGEgbGlzdCBvZiBwcm9tb3Rpb25zIGFwcGxpY2FibGUgZm9yIHRoaXMgZGF0ZQogICAgLy8gbG9hZCBlYWNoIG9uZSBhbmQgdGVzdCBpdC4KICAgICRiZXN0X2Rpc2NvdW50ID0gJyc7CiAgICBmb3JlYWNoKCAkcHJvbW90aW9uX2lkcyBhcyAkcHJvbW9faWQgKSB7CiAgICAgICRwcm9tbyA9IHByb21vX29wczo6bG9hZF9wcm9tb19ieV9pZCgkcHJvbW9faWQpOwogICAgICBpZiggISRwcm9tbyApIGNvbnRpbnVlOwoKICAgICAgJG1hdGNoID0gdHJ1ZTsKICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CgkkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKCSAgICAKCXN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewoJY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X2ZldV91aWQoJGZldV91aWQsJHByb21vKSApIHsKCSAgICAkbWF0Y2ggPSBmYWxzZTsKCSAgfQoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfQ09ORF9DT1VQT046CgkgICRjb3Vwb25zID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwoJICBpZiggJGNvdXBvbnMgKSB7CgkgICAgLy8gdGVzdCBhbGwgb2Ygb3VyIGNvdXBvbnMuCgkgICAgJHRlc3QgPSBmYWxzZTsKCSAgICBmb3JlYWNoKCAkY291cG9ucyBhcyAkY291cG9uICkgewoJICAgICAgaWYoIHByb21vX3Rlc3RzOjp0ZXN0X2NvdXBvbigkY291cG9uLCRwcm9tbykgKSB7CgkJJHRlc3QgPSB0cnVlOwoJCWJyZWFrOwoJICAgICAgfQoJICAgIH0KCSAgICBpZiggISR0ZXN0ICkgewoJICAgICAgJG1hdGNoID0gZmFsc2U7CgkgICAgICBicmVhazsKCSAgICB9CgkgIH0KCSAgZWxzZSB7CgkgICAgJG1hdGNoID0gZmFsc2U7CgkgIH0KCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgoJICBpZiggIXByb21vX3Rlc3RzOjpzaW5nbGVfcHJvZHVjdF9tYXRjaGVzKCRwcm9tbywkcHJvZHVjdF9pZCkgKSB7CgkgICAgJG1hdGNoID0gZmFsc2U7CgkgIH0KCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVDoKCSAgaWYoICFwcm9tb190ZXN0czo6c2luZ2xlX3Byb2R1Y3RfZnJvbV9jYXRlZ29yeSgkcHJvbW8sJHByb2R1Y3RfaWQpICkgewoJICAgICRtYXRjaCA9IGZhbHNlOwoJICB9CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgoJICBpZiggIXByb21vX3Rlc3RzOjpzaW5nbGVfcHJvZHVjdF9mcm9tX2hpZXJhcmNoeSgkcHJvbW8sJHByb2R1Y3RfaWQpICkgewoJICAgICRtYXRjaCA9IGZhbHNlOwoJICB9CgkgIGJyZWFrOwoJfQogICAgICB9CgogICAgICBpZiggJG1hdGNoICkgewoJLy8gdGhpcyBwcm9tb3Rpb24gbWF0Y2hlcyB0aGUgcHJvZHVjdCBpZAoJZGVidWdfZGlzcGxheSgkcHJvbW8pOyBkaWUoJ2ZvdW5kIHByb21vJyk7CgkkcmVzID0gcHJvbW9fb3BzOjpjYWxjdWxhdGVfcHJvZHVjdF9kaXNjb3VudCgkcHJvbW8sJHByb2R1Y3RfaWQpOwoJaWYoIGlzX2FycmF5KCRyZXMpICkgewoJICBpZiggIWlzX2FycmF5KCRiZXN0X2Rpc2NvdW50KSApIHsKCSAgICAkYmVzdF9kaXNjb3VudCA9ICRyZXM7CgkgICAgJGJlc3RfZGlzY291bnRbJ3Byb21vX2lkJ10gPSAkcHJvbW8tPmdldF9pZCgpOwoJICB9CgkgIGVsc2UgaWYoICRyZXNbJ3BlcmNlbnRhZ2UnXSA8ICRiZXN0X2Rpc2NvdW50WydwZXJjZW50YWdlJ10gKSB7CgkgICAgJGJlc3RfZGlzY291bnQgPSAkcmVzOwoJICAgICRiZXN0X2Rpc2NvdW50Wydwcm9tb19pZCddID0gJHByb21vLT5nZXRfaWQoKTsKCSAgfQoJfQogICAgICB9CiAgICB9CgogICAgaWYoIGlzX2FycmF5KCRiZXN0X2Rpc2NvdW50KSApIHsKICAgICAgcmV0dXJuICRiZXN0X2Rpc2NvdW50OwogICAgfQogICAgcmV0dXJuIEZBTFNFOwogIH0KCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjbGVhcl9jb3Vwb25zKCkKICB7CiAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgJHNlc3MtPmNsZWFyKCk7CiAgfQoKICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGFkZF9jb3Vwb24oJGNvZGUpCiAgewogICAgJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJ1Byb21vdGlvbnMnKTsKICAgICR0bXAgPSAkc2Vzcy0+Z2V0KCdjb3Vwb25zJywnJyk7CiAgICBpZiggaXNfYXJyYXkoJHRtcCkgKSB7CiAgICAgIGlmKCAhaW5fYXJyYXkoJGNvZGUsJHRtcCkgKQoJJHRtcFtdID0gJGNvZGU7CiAgICB9CiAgICBlbHNlIHsKICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICR0bXBbXSA9ICRjb2RlOwogICAgfQogICAgJHNlc3MtPnB1dCgnY291cG9ucycsJHRtcCk7CiAgfQoKICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9jb3Vwb25zKCkKICB7CiAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgJHRtcCA9ICRzZXNzLT5nZXQoJ2NvdXBvbnMnLCcnKTsKICAgIGlmKCBpc19hcnJheSgkdG1wKSApIHsKICAgICAgcmV0dXJuICR0bXA7CiAgICB9CiAgfQogIAogIC8qKgogICAqIEEgc21hcnR5IHBsdWdpbiBmb3IgZmluZGluZyB0aGUgZGlzY291bnQgZm9yIGEgcHJvZHVjdAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc21hcnR5X2Z1bmN0aW9uX3Byb21vX2dldF9wcm9kX2Rpc2NvdW50KCRwYXJhbXMsJiRzbWFydHkpCiAgewogICAgJGZldV91aWQgPSAtMTsKICAgICRwcm9kdWN0X2lkID0gLTE7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snZmV1X3VpZCddKSApIHsKICAgICAgJGZldV91aWQgPSAoaW50KSRwYXJhbXNbJ2ZldV91aWQnXTsKICAgIH0KICAgIGVsc2UgewogICAgICAkZmV1X21vZHVsZSA9IG1vZHVsZV9oZWxwZXI6OmdldF9pbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwogICAgICAkZmV1X3VpZCA9ICRmZXVfbW9kdWxlLT5Mb2dnZWRJbklkKCk7IAogICAgfQoKICAgIGlmKCBpc3NldCgkcGFyYW1zWydwcm9kdWN0X2lkJ10pICkgewogICAgICAkcHJvZHVjdF9pZCA9IChpbnQpJHBhcmFtc1sncHJvZHVjdF9pZCddOwogICAgfQoKICAgIGlmKCAkcHJvZHVjdF9pZCA8IDEgfHwgJGZldV91aWQgPCAxICkgewogICAgICAvLyBpbnZhbGlkL2luc3VmZmljaWVudCBwYXJhbXMgCiAgICAgIHJldHVybjsKICAgIH0KCiAgICAkcmVzID0gc2VsZjo6Z2V0X2Rpc2NvdW50X2Zvcl9wcm9kdWN0KCRmZXVfdWlkLCRwcm9kdWN0X2lkKTsKICAgIGlmKCAkcmVzICkgewogICAgICAkcmVzWydkZWNpbWFsJ10gPSAkcmVzWydwZXJjZW50YWdlJ107CiAgICAgICRyZXNbJ3BlcmNlbnRhZ2UnXSAqPSAxMDAuMDsKICAgIH0KICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKSB7CiAgICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkcmVzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmV0dXJuICRyZXM7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NhcnRfaXRlbXMoJGl0ZW1zKQogIHsKICAgIGlmKCAhaXNfYXJyYXkoJGl0ZW1zKSApIHJldHVybjsKCiAgICAvLyB0b2RvLCB0aGVzZSBzaG91bGQgYWxsIGJlIGNnX2Vjb21tX2NhcnRpdGVtIG9iamVjdHMKICAgICR0aGlzLT5fY3VyX2NhcnRfaXRlbXMgPSAkaXRlbXM7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gJmdldF90ZXN0X29iamVjdCgpCiAgewoJJG9iID0gbmV3IHByb21vdGlvbl90ZXN0ZXIoKTsKICAgIHJldHVybiAkb2I7CiAgfQp9IC8vIGNsYXNzCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/skeleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_addpromo.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRwcm9tby0+Z2V0X2lkKCkgPT0gJyd9CiAgPGgzPnskbW9kLT5MYW5nKCdsYmxfYWRkX3Byb21vJyl9PC9oMz4Ke2Vsc2V9CiAgPGgzPnskbW9kLT5MYW5nKCdsYmxfZWRpdF9wcm9tbycpfTwvaDM+CnsvaWZ9CjxoND57JG1vZC0+TGFuZygndHlwZScpfTogeyRtb2QtPkxhbmcoJHByb21vdHlwZSl9ICh7JHByb21vdHlwZX0pPC9oND4KCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLy8gPCFbQ0RBVEFbIAp2YXIgY29uZF9wcm9tcHRzID0gbmV3IEFycmF5KCk7CnZhciBjb25kX25hbWVzID0gbmV3IEFycmF5KCk7CnZhciBjb25kX2luZm8gPSBuZXcgQXJyYXkoKTsKe2ZvcmVhY2ggZnJvbT0kY29uZGl0aW9udHlwZXMga2V5PSduYW1lJyBpdGVtPSd2YWx1ZSd9CmNvbmRfbmFtZXNbInskbmFtZX0iXSA9ICJ7JHZhbHVlfSI7CntjYXB0dXJlIGFzc2lnbj0ndG1wJ31wcm9tcHRkYXRhX3skbmFtZX17L2NhcHR1cmV9CmNvbmRfcHJvbXB0c1sieyRuYW1lfSJdID0gInskbW9kLT5MYW5nKCR0bXApfSI7CntjYXB0dXJlIGFzc2lnbj0ndG1wJ31pbmZvZGF0YV97JG5hbWV9ey9jYXB0dXJlfQpjb25kX2luZm9bInskbmFtZX0iXSA9ICJ7JG1vZC0+TGFuZygkdG1wKX0iOwp7L2ZvcmVhY2h9Cgp2YXIgb2ZmZXJfcHJvbXB0cyA9IG5ldyBBcnJheSgpOwp7Zm9yZWFjaCBmcm9tPSRvZmZlcnR5cGVzIGtleT0nbmFtZScgaXRlbT0ndmFsdWUnfQp7Y2FwdHVyZSBhc3NpZ249J3RtcCd9cHJvbXB0b2ZmZXJfeyRuYW1lfXsvY2FwdHVyZX0Kb2ZmZXJfcHJvbXB0c1sieyRuYW1lfSJdID0gInskbW9kLT5MYW5nKCR0bXApfSI7CnsvZm9yZWFjaH0KdmFyIGVycm9ycyA9IG5ldyBBcnJheSgpOwplcnJvcnNbJ25vX3ZhbHVlJ10gPSAieyRtb2QtPkxhbmcoJ2Vycm9yX3NwZWNpZnlfdmFsdWUnKX0iOwplcnJvcnNbJ2FscmVhZHlfcHJvZCddID0gInskbW9kLT5MYW5nKCdlcnJvcl9hbHJlYWR5X3Byb2R1Y3RfY29uZCcpfSI7CmVycm9yc1snZHVwbGljYXRlX3R5cGUnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3JfZHVwbGljYXRlX2NvbmRpdGlvbicpfSI7CmVycm9yc1snbm9fbmFtZSddID0gInskbW9kLT5MYW5nKCdlcnJvcl9wcm9tb3Rpb25fbmFtZScpfSI7CmVycm9yc1snbm9fb2ZmZXJfZGF0YSddID0gInskbW9kLT5MYW5nKCdlcnJvcl9ub19vZmZlcl9kYXRhJyl9IjsKZXJyb3JzWydub19jb25kaXRpb25zJ10gPSAieyRtb2QtPkxhbmcoJ3dhcm5pbmdfbm9fY29uZGl0aW9ucycpfSI7Cgp7bGl0ZXJhbH0KZnVuY3Rpb24gaXNOdW1lcmljKGZvcm1fdmFsdWUpIAp7IAogIGlmIChmb3JtX3ZhbHVlLm1hdGNoKC9eXGQrJC8pID09IG51bGwpIAogICAgcmV0dXJuIGZhbHNlOyAKICBlbHNlIAogICAgcmV0dXJuIHRydWU7IAp9IAoKZnVuY3Rpb24gaW5fYXJyYXkobmVlZGxlLGhheXN0YWNrKQp7CiAgZm9yKCBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrICkgewogICAgaWYoIGhheXN0YWNrW2ldID09IG5lZWRsZSApIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIGdldF9jb25kaXRpb25zKCkKewogIHZhciBjb25kcyA9IG5ldyBBcnJheSgpOwogIGpRdWVyeSgnI2NvbmRsaXN0ID4gLmNvbmRpdGlvbl9yb3cnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICB2YXIgdHlwZSA9IGpRdWVyeSh0aGlzKS5maW5kKCcuc2F2ZWRfY29uZHR5cGUnKS52YWwoKTsKICAgIHZhciBkYXRhID0galF1ZXJ5KHRoaXMpLmZpbmQoJy5zYXZlZF9jb25kZGF0YScpLnZhbCgpOwogICAgY29uZHNbdHlwZV0gPSBkYXRhOwogIH0pOwogIHJldHVybiBjb25kczsKfQoKZnVuY3Rpb24gY29uZGl0aW9uX2ludmFsaWQodHlwZSxkYXRhKQp7CiAgdmFyIGNvbmRzID0gZ2V0X2NvbmRpdGlvbnMoKTsKICAvLyBwYXNzIG9uZSwgbG9vayBmb3IgZHVwbGljYXRlIHR5cGVzCiAgZm9yKCB2YXIgY3R5cGUgaW4gY29uZHMgKSB7CiAgICBpZiggY3R5cGUgPT0gdHlwZSApIHJldHVybiAnZHVwbGljYXRlX3R5cGUnOwogIH0KCiAgLy8gcGFzcyB0d28sIGxvb2sgZm9yIGR1cGxpY2F0ZSBwcm9kdWN0IHR5cGVzCiAgZm9yKCB2YXIgY3R5cGUgaW4gY29uZHMgKSB7CiAgICBpZiggY3R5cGUubWF0Y2goL1BST0QvKSAmJiB0eXBlLm1hdGNoKC9QUk9ELykgKSB7CiAgICAgICAgcmV0dXJuICdhbHJlYWR5X3Byb2QnOwogICAgICB9CiAgfQogIHJldHVybiBmYWxzZTsKfQoKalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogIC8vIGluaXRpYWxpemUgdGhlIGRhdGEgcHJvbXB0CiAgdmFyIHR5cGUgPSBqUXVlcnkoJyNjb25kdHlwZScpLnZhbCgpOwogIGpRdWVyeSgnI2RhdGFwcm9tcHQnKS5odG1sKGNvbmRfcHJvbXB0c1t0eXBlXSk7CiAgalF1ZXJ5KCcjZGF0YWluZm8nKS5odG1sKGNvbmRfaW5mb1t0eXBlXSk7CgogIC8vIGhhbmRsZXIgZm9yIGV4dHJhIGFyZWEKICBqUXVlcnkoJyNleHRyYXMnKS5oaWRlKCk7CiAgalF1ZXJ5KCcjbGlua2V4dHJhcycpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICBqUXVlcnkoJyNleHRyYXMnKS50b2dnbGUoKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gc2V0dXAgaW5pdGlhbCBjb25kaXRpb24gbGlzdCBzdHVmZi4KICBqUXVlcnkoJyNjb25kbGlzdCA+IC5jb25kaXRpb25fcm93Jykuc2hvdygpOwogIGpRdWVyeSgnYS5kZWxjb25kJykuY2xpY2soZnVuY3Rpb24oKXsKICAgICBqUXVlcnkodGhpcykuY2xvc2VzdCgnLmNvbmRpdGlvbl9yb3cnKS5yZW1vdmUoKTsKICAgICByZXR1cm4gZmFsc2U7CiAgfSk7CgogIC8vIGluaXRpYWxpemUgdGhlIG9mZmVyIHByb21wdAogIHR5cGUgPSBqUXVlcnkoJyNvZmZlcnR5cGUnKS52YWwoKTsKICAkKCcjb2ZmZXJkYXRhJykuaHRtbChvZmZlcl9wcm9tcHRzW3R5cGVdKTsKICAkKCcjJyt0eXBlKS5zaG93KCk7CiAgJCgnI29mZmVydHlwZScpLmNoYW5nZShmdW5jdGlvbigpewogICAgLy8gb2ZmZXIgdHlwZSBjaGFuZ2VkCiAgICB2YXIgdHlwZSA9IGpRdWVyeSgnI29mZmVydHlwZScpLnZhbCgpOwogICAgJCgnI29mZmVyZGF0YScpLmh0bWwob2ZmZXJfcHJvbXB0c1t0eXBlXSk7CiAgICAkKCcub2ZmZXJfZXh0cmEnKS5oaWRlKCk7CiAgICAkKCcjJyt0eXBlKS5zaG93KCk7CiAgfSk7CiAKICAvLyBoYW5kbGUgY29uZGl0aW9uIHR5cGUgY2hhbmdlZAogIGpRdWVyeSgnI2NvbmR0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICAvLyBjb25kaXRpb24gdHlwZSBjaGFuZ2VkCiAgICB2YXIgdHlwZSA9IGpRdWVyeSgnI2NvbmR0eXBlJykudmFsKCk7CiAgICAkKCcjZGF0YXByb21wdCcpLmh0bWwoY29uZF9wcm9tcHRzW3R5cGVdKTsKICAgICQoJyNkYXRhaW5mbycpLmh0bWwoY29uZF9pbmZvW3R5cGVdKTsKICB9KTsKCiAgLy8gaGFuZGxlIGFkZCBjb25kaXRpb24gY2xpY2tlZC4KICBqUXVlcnkoJyNhZGRidG4nKS5saXZlKCdjbGljaycsZnVuY3Rpb24oKXsKICAgIHZhciBlbGVtID0galF1ZXJ5KCcjY29uZGl0aW9uX3Jvd190bXBsJykuY2xvbmUoKTsKICAgIGVsZW0uYXR0cignaWQnLCcnKTsKICAgIHZhciBjb25kdHlwZSA9IGpRdWVyeSgnI2NvbmR0eXBlJykudmFsKCk7CiAgICB2YXIgY29uZGRhdGEgPSBqUXVlcnkoJyNjb25kZGF0YScpLnZhbCgpOwogICAgaWYoIGNvbmRkYXRhID09ICcnICkgewogICAgICBhbGVydChlcnJvcnNbJ25vX3ZhbHVlJ10pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBlbHNlIGlmKCBjb25kdHlwZSA9PSAnUFJPTU9USU9OU19DT05EX1BST0RJRCcgKSB7CiAgICAgIGlmKCBwYXJzZUludChjb25kZGF0YSkgPD0gMCApIHsKICAgICAgICBhbGVydChlcnJvcnNbJ2ludmFsaWRfdmFsdWUnXSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmKCBjb25kdHlwZSA9PSAnUFJPTU9USU9OU19DT05EX1NVQlRPVEFMJyApIHsKICAgICAgLy8gdG9kbywgZXJyb3IgY2hlY2sgaGVyZQogICAgfQogICAgZXJyb3IgPSBjb25kaXRpb25faW52YWxpZChjb25kdHlwZSxjb25kZGF0YSk7CiAgICBpZiggZXJyb3IgKSB7CiAgICAgIGFsZXJ0KGVycm9yc1tlcnJvcl0pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBlbGVtLmZpbmQoJy5zYXZlZF9jb25kdHlwZScpLnZhbChjb25kdHlwZSk7CiAgICBlbGVtLmZpbmQoJy5zYXZlZF9jb25kZGF0YScpLnZhbChjb25kZGF0YSk7CiAgICBlbGVtLmZpbmQoJy5kaXNwX2NvbmR0eXBlJykuaHRtbChjb25kX25hbWVzW2NvbmR0eXBlXSk7CiAgICBlbGVtLmZpbmQoJy5kaXNwX2NvbmRkYXRhJykuaHRtbChjb25kZGF0YSk7CiAgICBqUXVlcnkoJyNjb25kbGlzdCcpLmFwcGVuZChlbGVtKTsKCiAgICAvLyBoYW5kbGUgcm93IGRlbGV0ZQogICAgalF1ZXJ5KCdhLmRlbGNvbmQnKS5jbGljayhmdW5jdGlvbigpewogICAgICAgalF1ZXJ5KHRoaXMpLmNsb3Nlc3QoJy5jb25kaXRpb25fcm93JykucmVtb3ZlKCk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICBlbGVtLmZhZGVJbignc2xvdycpOwogICAgcmV0dXJuIGZhbHNlOwogIH0pOwoKICAvLyBoYW5kbGVmb3JtIHN1Ym1pdAogIGpRdWVyeSgnI3N1Ym1pdCcpLmxpdmUoJ2NsaWNrJyxmdW5jdGlvbigpewogICAgdmFyIG5hbWUgPSBqUXVlcnkoJyNuYW1lJykudmFsKCk7CiAgICB2YXIgb2ZmZXJkYXRhID0galF1ZXJ5KCcjb2ZmZXJfZGF0YScpLnZhbCgpOwogICAgaWYoIG5hbWUgPT0gJycgKQogICAgewoJYWxlcnQoZXJyb3JzWydub19uYW1lJ10pOwoJcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYoIG9mZmVyZGF0YSA9PSAnJyApCiAgICB7CglhbGVydChlcnJvcnNbJ25vX29mZmVyX2RhdGEnXSk7CglyZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyB3YXJuIGFib3V0IG5vIGNvbmRpdGlvbnMuCiAgICBpZiggalF1ZXJ5KCcjY29uZGxpc3QnKS5jaGlsZHJlbigpLnNpemUoKSA9PSAwICkKICAgIHsKCXJldHVybiBjb25maXJtKGVycm9yc1snbm9fY29uZGl0aW9ucyddKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogICAgLy8gc3VjY2VzcwogIH0pOwoKfSk7CnsvbGl0ZXJhbH0KLy8gXV0+Cjwvc2NyaXB0PgoKe2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOlByb21vdGlvbnM7aW5jX2NvbmRpdGlvbl9yb3cudHBsJ30KCnskZm9ybXN0YXJ0fQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9uYW1lJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0nbmFtZScgbmFtZT0ieyRhY3Rpb25pZH1uYW1lIiB2YWx1ZT0ieyRwcm9tby0+Z2V0X25hbWUoKX0iIHNpemU9IjgwIiBtYXhsZW5ndGg9IjI1NSIgLz4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfc3RhcnRfZGF0ZScpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1zdGFydF9kYXRlX3svY2FwdHVyZX0KICAgIHtodG1sX3NlbGVjdF9kYXRlIHByZWZpeD0kdG1wIHRpbWU9JHByb21vLT5nZXRfc3RhcnRfZGF0ZSgpIGVuZF95ZWFyPSIrNSJ9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2VuZF9kYXRlJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIHtjYXB0dXJlIGFzc2lnbj0ndG1wJ317JGFjdGlvbmlkfWVuZF9kYXRlX3svY2FwdHVyZX0KICAgIHtodG1sX3NlbGVjdF9kYXRlIHByZWZpeD0kdG1wIHRpbWU9JHByb21vLT5nZXRfZW5kX2RhdGUoKSBlbmRfeWVhcj0iKzUifQogIDwvcD4KPC9kaXY+Cgo8ZmllbGRzZXQgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPGxlZ2VuZD57JG1vZC0+TGFuZygncHJvbXB0X2NvbmRpdGlvbnMnKX06Jm5ic3A7PC9sZWdlbmQ+CiAgPGRpdiBpZD0iY29uZGxpc3QiPgogIHtpZiBpc3NldCgkY29uZGl0aW9ucyl9CiAgICB7KiBkbyBhIGZvcmVhY2ggaGVyZSBmb3IgYWxsIG9mIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgKn0KICAgIHtmb3JlYWNoIGZyb209JGNvbmRpdGlvbnMgaXRlbT0nY29uZCd9CiAgICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpQcm9tb3Rpb25zO2luY19jb25kaXRpb25fcm93LnRwbCd9CiAgICB7L2ZvcmVhY2h9CiAgey9pZn0KICA8L2Rpdj4KPC9maWVsZHNldD4KCjxmaWVsZHNldCBjbGFzcz0icGFnZW92ZXJmbG93Ij4KIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3Byb21wdF9hZGRfY29uZGl0aW9uJyl9OjwvbGVnZW5kPgogPHAgY2xhc3M9ImluZm9ybWF0aW9uIj57JG1vZC0+TGFuZygnaW5mb19jb25kaXRpb25zJyl9PC9wPgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2NvbmRpdGlvbl90eXBlJyl9OjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWFkZF9jb25kdHlwZSIgaWQ9ImNvbmR0eXBlIj4KICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGNvbmRpdGlvbnR5cGVzfQogICAgIDwvc2VsZWN0PgogICA8L3A+CiA8L2Rpdj4KCiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICA8cCBjbGFzcz0icGFnZXRleHQiIGlkPSJkYXRhcHJvbXB0Ij57JG1vZC0+TGFuZygncHJvbXB0X2NvbmRpdGlvbl9kYXRhJyl9OjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IGlkPSJjb25kZGF0YSIgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1hZGRfY29uZGRhdGEiIHNpemU9IjMwIi8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBpZD0iYWRkYnRuIiBuYW1lPSJ7JGFjdGlvbmlkfWFkZCIgdmFsdWU9InskbW9kLT5MYW5nKCdhZGQnKX0iLz4KICAgPC9wPgogPC9kaXY+CjwvZmllbGRzZXQ+Cgo8ZmllbGRzZXQgY2xhc3M9InBhZ2V0ZXh0IiBzdHlsZT0icGFkZGluZy1ib3R0b206IDAuNWVtOyI+CiAgPGxlZ2VuZD57JG1vZC0+TGFuZygncHJvbXB0X29mZmVyJyl9OjwvbGVnZW5kPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyBub29mZnNldCI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0IG5vb2Zmc2V0Ij4KICAgIHskbW9kLT5MYW5nKCdwcm9tcHRfb2ZmZXJfdHlwZScpfToKICA8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCBub29mZnNldCI+CiAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfdHlwZSIgaWQ9Im9mZmVydHlwZSI+CiAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JG9mZmVydHlwZXMgc2VsZWN0ZWQ9JHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpfQogICAgPC9zZWxlY3Q+CiAgPC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCBub29mZnNldCIgaWQ9Im9mZmVyZGF0YSI+CiAgICB7JG1vZC0+TGFuZygncHJvbXB0X29mZmVyX2RhdGEnKX06CiAgPC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQgbm9vZmZzZmZldCI+CiAgICA8aW5wdXQgaWQ9Im9mZmVyX2RhdGEiIHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfZGF0YSIgc2l6ZT0iMTAiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0ieyRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKX0iLz4KICA8L3A+CiAgPC9kaXY+CgogIHtpZiAkcHJvbW90eXBlID09ICdwcm9tb190eXBlX2luc3RhbnQnfQogIDxkaXYgY2xhc3M9InBhZ292ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9hbGxvd19vbmNlJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAge2NnZV95ZXNub19vcHRpb25zIHByZWZpeD0kYWN0aW9uaWQgbmFtZT0nZXh0cmFfYWxsb3dfb25jZScgc2VsZWN0ZWQ9JHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X29uY2UnKX0KICAgIDwvcD4KICA8L2Rpdj4KICB7L2lmfQoKICB7aWYgJHByb21vdHlwZSA9PSAncHJvbW9fdHlwZV9jaGVja291dCd9CiAgPGRpdiBjbGFzcz0icGFnb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2FsbG93X2N1bXVsYXRpdmUnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICB7Y2dlX3llc25vX29wdGlvbnMgcHJlZml4PSRhY3Rpb25pZCBuYW1lPSdleHRyYV9hbGxvd19jdW11bGF0aXZlJyBzZWxlY3RlZD0kcHJvbW8tPmdldF9leHRyYSgnYWxsb3dfY3VtdWxhdGl2ZScpfQogICAgPC9wPgogIDwvZGl2PgogIHsvaWZ9CgogIDxkaXYgaWQtImV4dHJhX2luZm9fYXJlYSI+CiAge2Fzc2lnbiB2YXI9J21hcCcgdmFsdWU9JHByb21vLT5nZXRfb2ZmZXJfZXh0cmFfbWFwKCl9CiAge2ZvcmVhY2ggZnJvbT0kbWFwIGtleT0nb2ZmZXJ0eXBlJyBpdGVtPSdmbGRzJ30KICAgIDxkaXYgaWQ9Inskb2ZmZXJ0eXBlfSIgY2xhc3M9Im9mZmVyX2V4dHJhIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICB7Zm9yZWFjaCBmcm9tPSRmbGRzIGl0ZW09J2ZsZCd9CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57YXNzaWduIHZhcj0nYScgdmFsdWU9JGZsZC5sYWJlbH17JG1vZC0+TGFuZygkYSl9OjwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIHtpZiAkZmxkLnR5cGU9PSdjaGVja2JveCd9CiAgICAgICAgICAgIHthc3NpZ24gdmFyPSdiJyB2YWx1ZT0kZmxkLm5hbWV9CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1leHRyYV97JGJ9IiB2YWx1ZT0iMSIge2lmICRwcm9tby0+Z2V0X2V4dHJhKCRiKX1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4KICAgICAgICAgIHsvaWZ9CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgey9mb3JlYWNofQogICAgPC9kaXY+CiAgey9mb3JlYWNofQogIDwvZGl2PgogIAo8L2ZpZWxkc2V0PgoKeyoKPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2V4dHJhcycpfTogPGEgaWQ9ImxpbmtleHRyYXMiPis8L2E+PC9wPgo8ZmllbGRzZXQgY2xhc3M9ImNnZmllbGRzZXQiIGlkPSJleHRyYXMiPgogIDxwIGNsYXNzPSJwYWdlb3ZlcmZsb3ciPnskbW9kLT5MYW5nKCdpbmZvX2V4dHJhcycpfTwvcD4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3cgbm9vZmZzZXQiPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDA7Ij57JG1vZC0+TGFuZygncHJvbXB0X2ltYWdlJyl9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwOyI+CiAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9aW1hZ2UiPgogICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRmaWxlX2xpc3Qgc2VsZWN0ZWQ9JHByb21vLT5nZXRfaW1hZ2UoKX0KICAgIDwvc2VsZWN0PgogICAgPC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiIHN0eWxlPSJtYXJnaW4tbGVmdDogMDsiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGVzY3JpcHRpb24nKX08L3A+CiAgPHRleHRhcmVhIGNsYXNzPSJub29mZnNldCIgcm93cz0iMyIgY29scz0iNTAiIG5hbWU9InskYWN0aW9uaWR9ZGVzY3JpcHRpb24iPnskcHJvbW8tPmdldF9kZXNjcmlwdGlvbigpfTwvdGV4dGFyZWE+CiAgPC9kaXY+CjwvZmllbGRzZXQ+Cip9Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgaWQ9J3N1Ym1pdCcgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9IiAvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9IiAvPgogIDwvcD4KPC9kaXY+CnskZm9ybWVuZH0=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_checkout_promotionstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogcHJvbW90aW9ucyB0YWIgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2NoZWNrb3V0X3Byb21vdGlvbnMnKX08L2Rpdj4Ke2lmIGlzc2V0KCRwcm9tb3Rpb25zKX0KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUgY21zX3NvcnRhYmxlIHRhYmxlc29ydGVyIiBjZWxsc3BhY2luZz0iMCI+CiAgPHRoZWFkPgogICA8dHI+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfaWQnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X25hbWUnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X3N0YXJ0X2RhdGUnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X2VuZF9kYXRlJyl9PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGl0ZXJhbH17c29ydGVyOiBmYWxzZX17L2xpdGVyYWx9Ij4mbmJzcDs8L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgIDwvdHI+CiAgPC90aGVhZD4KICB7Zm9yZWFjaCBmcm9tPSRwcm9tb3Rpb25zIGl0ZW09J2VudHJ5JyBuYW1lPSdwcm9tb3MnfQogICAgPHRyPgogICAgICA8dGQ+eyRlbnRyeS5pZH08L3RkPgogICAgICA8dGQ+PGEgaHJlZj0ieyRlbnRyeS5lZGl0X3VybH0iIHRpdGxlPSJ7JG1vZC0+TGFuZygnZWRpdCcpfSI+eyRlbnRyeS5uYW1lfTwvYT48L3RkPgogICAgICA8dGQ+CiAgICAgICAgeyogc3RhcnQgZGF0ZSAqfQogICAgICAgIHtpZiAkZW50cnkuc3RhcnRfZGF0ZV91dCA+ICRzbWFydHkubm93fQogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij57JGVudHJ5LnN0YXJ0X2RhdGV8Y21zX2RhdGVfZm9ybWF0fTwvc3Bhbj4KICAgICAgICB7ZWxzZX0KICAgICAgICAgIHskZW50cnkuc3RhcnRfZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9CiAgICAgICAgey9pZn0KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIHsqIGVuZCBkYXRlICp9CiAgICAgICAge2lmICRlbnRyeS5lbmRfZGF0ZV91dCA8ICRzbWFydHkubm93fQogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGVudHJ5LmVuZF9kYXRlfGNtc19kYXRlX2Zvcm1hdH08L3NwYW4+CiAgICAgICAge2Vsc2V9CiAgICAgICAgICB7JGVudHJ5LmVuZF9kYXRlfGNtc19kYXRlX2Zvcm1hdH0KICAgICAgICB7L2lmfQogICAgICA8L3RkPgogICAgICA8dGQ+e2lmICRlbnRyeS5pdGVtX29yZGVyID4gMX17bW9kdWxlX2FjdGlvbl9saW5rIG1vZHVsZT1Qcm9tb3Rpb25zIGFjdGlvbj0nYWRtaW5fbW92ZXByb21vJyBkaXI9J3VwJyBwcm9tbz0kZW50cnkuaWQgaW1hZ2U9J2ljb25zL3N5c3RlbS9hcnJvdy11LmdpZicgaW1hZ2Vvbmx5PTF9ey9pZn08L3RkPgogICAgICA8dGQ+e2lmICEkc21hcnR5LmZvcmVhY2gucHJvbW9zLmxhc3R9e21vZHVsZV9hY3Rpb25fbGluayBtb2R1bGU9UHJvbW90aW9ucyBhY3Rpb249J2FkbWluX21vdmVwcm9tbycgZGlyPSdkb3duJyBwcm9tbz0kZW50cnkuaWQgaW1hZ2U9J2ljb25zL3N5c3RlbS9hcnJvdy1kLmdpZicgaW1hZ2Vvbmx5PTF9ey9pZn08L3RkPgogICAgICA8dGQ+eyRlbnRyeS5lZGl0X2xpbmt9PC90ZD4KICAgICAgPHRkPnskZW50cnkuZGVsZXRlX2xpbmt9PC90ZD4KICAgIDwvdHI+CiAgey9mb3JlYWNofQogIDx0Ym9keT4KICA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_dflt_templates_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgeyRpbmZvX2RmbHRfdGVtcGxhdGV9CjwvZGl2PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRsZWdlbmRfY291cG9uZm9ybXRlbXBsYXRlfTwvbGVnZW5kPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2NvdXBvbmZvcm10ZW1wbGF0ZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGV9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZX0mbmJzcDt7JHJlc2V0X2NvdXBvbmZvcm10ZW1wbGF0ZX08L3A+CiAgPC9kaXY+CjwvZmllbGRzZXQ+Cgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/admin_instant_promotionstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogcHJvbW90aW9ucyB0YWIgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2luc3RhbnRfcHJvbW90aW9ucycpfTwvZGl2Pgp7aWYgaXNzZXQoJHByb21vdGlvbnMpfQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSBjbXNfc29ydGFibGUgdGFibGVzb3J0ZXIiIGNlbGxzcGFjaW5nPSIwIj4KICA8dGhlYWQ+CiAgIDx0cj4KICAgICA8dGg+eyRtb2QtPkxhbmcoJ3Byb21wdF9pZCcpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfbmFtZScpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfc3RhcnRfZGF0ZScpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfZW5kX2RhdGUnKX08L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGl0ZXJhbH17c29ydGVyOiBmYWxzZX17L2xpdGVyYWx9Ij4mbmJzcDs8L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgPC90cj4KICA8L3RoZWFkPgogIHtmb3JlYWNoIGZyb209JHByb21vdGlvbnMgaXRlbT0nZW50cnknIG5hbWU9J3Byb21vcyd9CiAgICA8dHI+CiAgICAgIDx0ZD57JGVudHJ5LmlkfTwvdGQ+CiAgICAgIDx0ZD48YSBocmVmPSJ7JGVudHJ5LmVkaXRfdXJsfSIgdGl0bGU9InskbW9kLT5MYW5nKCdlZGl0Jyl9Ij57JGVudHJ5Lm5hbWV9PC9hPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICB7KiBzdGFydCBkYXRlICp9CiAgICAgICAge2lmICRlbnRyeS5zdGFydF9kYXRlX3V0ID4gJHNtYXJ0eS5ub3d9CiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPnskZW50cnkuc3RhcnRfZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9PC9zcGFuPgogICAgICAgIHtlbHNlfQogICAgICAgICAgeyRlbnRyeS5zdGFydF9kYXRlfGNtc19kYXRlX2Zvcm1hdH0KICAgICAgICB7L2lmfQogICAgICA8L3RkPgogICAgICA8dGQ+CiAgICAgICAgeyogZW5kIGRhdGUgKn0KICAgICAgICB7aWYgJGVudHJ5LmVuZF9kYXRlX3V0IDwgJHNtYXJ0eS5ub3d9CiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPnskZW50cnkuZW5kX2RhdGV8Y21zX2RhdGVfZm9ybWF0fTwvc3Bhbj4KICAgICAgICB7ZWxzZX0KICAgICAgICAgIHskZW50cnkuZW5kX2RhdGV8Y21zX2RhdGVfZm9ybWF0fQogICAgICAgIHsvaWZ9CiAgICAgIDwvdGQ+CiAgICAgIDx0ZD57aWYgJGVudHJ5Lml0ZW1fb3JkZXIgPiAxfXttb2R1bGVfYWN0aW9uX2xpbmsgbW9kdWxlPVByb21vdGlvbnMgYWN0aW9uPSdhZG1pbl9tb3ZlcHJvbW8nIGRpcj0ndXAnIHByb21vPSRlbnRyeS5pZCBpbWFnZT0naWNvbnMvc3lzdGVtL2Fycm93LXUuZ2lmJyBpbWFnZW9ubHk9MX17L2lmfTwvdGQ+CiAgICAgIDx0ZD57aWYgISRzbWFydHkuZm9yZWFjaC5wcm9tb3MubGFzdH17bW9kdWxlX2FjdGlvbl9saW5rIG1vZHVsZT1Qcm9tb3Rpb25zIGFjdGlvbj0nYWRtaW5fbW92ZXByb21vJyBkaXI9J2Rvd24nIHByb21vPSRlbnRyeS5pZCBpbWFnZT0naWNvbnMvc3lzdGVtL2Fycm93LWQuZ2lmJyBpbWFnZW9ubHk9MX17L2lmfTwvdGQ+CiAgICAgIDx0ZD57JGVudHJ5LmVkaXRfbGlua308L3RkPgogICAgICA8dGQ+eyRlbnRyeS5kZWxldGVfbGlua308L3RkPgogICAgPC90cj4KICB7L2ZvcmVhY2h9CiAgPHRib2R5PgogIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICBqUXVlcnkoJy5oaWRhYmxlJykuaGlkZSgpOwogIGpRdWVyeSgnIycrJ3svbGl0ZXJhbH17JGRmbHRfb2ZmZXJfdHlwZX17bGl0ZXJhbH0nKS5zaG93KCk7CiAgalF1ZXJ5KCcjb2ZmZXJ0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICB2YXIgdmFsID0gJyMnK2pRdWVyeSh0aGlzKS52YWwoKTsKICAgIGpRdWVyeSgnLmhpZGFibGUnKS5oaWRlKCk7CiAgICBqUXVlcnkodmFsKS5zaG93KCk7CiAgfSk7Cn0pOwo8L3NjcmlwdD4Key9saXRlcmFsfQoKeyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2RmbHRfcHJvbW90aW9uX3BlcmlvZCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1wcm9tb3Rpb25fcGVyaW9key9jYXB0dXJlfQogICAge2h0bWxfb3B0aW9ucyBuYW1lPSR0bXAgb3B0aW9ucz0kcHJvbW90aW9uX3BlcmlvZHMgc2VsZWN0ZWQ9JGRmbHRfcHJvbW90aW9uX3BlcmlvZH0KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGZsdF9vZmZlcl90eXBlJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIHtjYXB0dXJlIGFzc2lnbj0ndG1wJ317JGFjdGlvbmlkfW9mZmVyX3R5cGV7L2NhcHR1cmV9CiAgICA8c2VsZWN0IG5hbWU9InskdG1wfSIgaWQ9Im9mZmVydHlwZSI+CiAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JG9mZmVyX3R5cGVzIHNlbGVjdGVkPSRkZmx0X29mZmVyX3R5cGV9CiAgICA8L3NlbGVjdD4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQiPgogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3BlcmNlbnRhZ2VfZGlzY291bnQnKX06PC9wPgogPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfW9mZmVyX3BlcmNlbnQiIHNpemU9IjUiIG1heGxlbmd0aD0iNSIgdmFsdWU9InskZGZsdF9vZmZlcl9kYXRhfSIvPgogPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UIj4KIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9wcmljZV9kaXNjb3VudCcpfTo8L3A+CiA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgeyRjdXJyZW5jeV9zeW1ib2x9PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfcHJpY2UiIHNpemU9IjUiIG1heGxlbmd0aD0iNSIgdmFsdWU9InskZGZsdF9vZmZlcl9kYXRhfSIvPgogPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX1BST0RVQ1QiPgp7KiA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZnJlZV9wcm9kdWN0Jyl9OjwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPiZuYnNwOzwvcD4qfQo8L2Rpdj4KCntpZiAkZGZsdF9vZmZlcl90eXBlID09ICdQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnfQp7ZWxzZWlmICRkZmx0X29mZmVyX3R5cGUgPT0gJ1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnfQp7ZWxzZX0Key9pZn0KCgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9pbWFnZV9kaXInKX08L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbWFnZV9kaXIiIHZhbHVlPSJ7JGltYWdlX2Rpcn0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIvPgogICAgPGJyLz4KICAgIHskbW9kLT5MYW5nKCdpbmZvX2ltYWdlX2RpcicpfQogIDwvcD4KPC9kaXY+Cgp7KiBwcm9tb3Rpb25hbCBtZXNzYWdlcyAqfQo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2xibF9wcm9tb19tZXNzYWdlcycpfTombmJzcDs8L2xlZ2VuZD4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZXJyb3JfaW52YWxpZCcpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSByb3dzPSIzIiBjb2xzPSI1MCIgbmFtZT0ieyRhY3Rpb25pZH1lcnJvcl9pbnZhbGlkIj57JGVycm9yX2ludmFsaWRfY29kZX08L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9lcnJvcl9lbXB0eScpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSByb3dzPSIzIiBjb2xzPSI1MCIgbmFtZT0ieyRhY3Rpb25pZH1lcnJvcl9lbXB0eSI+eyRlcnJvcl9lbXB0eV9jb2RlfTwvdGV4dGFyZWE+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X21zZ192YWxpZF9jb2RlJyl9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPHRleHRhcmVhIHJvd3M9IjMiIGNvbHM9IjUwIiBuYW1lPSJ7JGFjdGlvbmlkfW1zZ192YWxpZCI+eyRtc2dfdmFsaWRfY29kZX08L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+Cgo8L2ZpZWxkc2V0PgoKCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICA8L3A+CjwvZGl2Pgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/inc_condition_row.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogdGVtcGxhdGUgZm9yIGNvbmRpdGlvbiByb3dzICp9Cnthc3NpZ24gdmFyPSJjb25kdHlwZSIgdmFsdWU9IklOVkFMSUQifQp7YXNzaWduIHZhcj0iY29uZGRhdGEiIHZhbHVlPSJJTlZBTElEIn0Ke2lmIGlzc2V0KCRjb25kKX0KICB7YXNzaWduIHZhcj0iY29uZHR5cGUiIHZhbHVlPSRjb25kLT5nZXRfY29uZF90eXBlKCl9CiAge2Fzc2lnbiB2YXI9ImNvbmRkYXRhIiB2YWx1ZT0kY29uZC0+Z2V0X2RhdGEoKX0Key9pZn0KPGRpdiBpZD0iY29uZGl0aW9uX3Jvd190bXBsIiBjbGFzcz0nY29uZGl0aW9uX3Jvdycgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICA8aW5wdXQgY2xhc3M9InNhdmVkX2NvbmR0eXBlIiB0eXBlPSJoaWRkZW4iIG5hbWU9InskYWN0aW9uaWR9c2F2ZWRfY29uZHR5cGVbXSIgdmFsdWU9InskY29uZHR5cGV9Ii8+CiAgPGlucHV0IGNsYXNzPSJzYXZlZF9jb25kZGF0YSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNhdmVkX2NvbmRkYXRhW10iIHZhbHVlPSJ7JGNvbmRkYXRhfSIvPgogIDx0YWJsZSBzdHlsZT0icGFkZGluZzogMXB4OyB3aWR0aDogMTAwJTsiPgogICAgPHRyPgogICAgICA8dGQ+CiAgICAgICAgPHNwYW4gY2xhc3M9J2Rpc3BfY29uZHR5cGUnPnskbW9kLT5MYW5nKCRjb25kdHlwZSl9PC9zcGFuPgogICAgICA8L3RkPgogICAgICA8dGQ+CiAgICAgICAgPHNwYW4gY2xhc3M9J2Rpc3BfY29uZGRhdGEnPnskY29uZGRhdGF9PC9zcGFuPgogICAgICA8L3RkPgogICAgICA8dGQ+CiAgICAgICAgPGEgY2xhc3M9ImRlbGNvbmQiIGhyZWY9IiMiIHRpdGxlPSJ7JG1vZC0+TGFuZygnZGVsZXRlJyl9Ij57Y2dpbWFnZSBpbWFnZT0naWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnIGFsdD0kbW9kLT5MYW5nKCdkZWxldGUnKX08L2E+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGFibGU+CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_couponform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogY291cG9uIGZvcm0gdGVtcGxhdGUgKn0KeyRmb3Jtc3RhcnR9CjxmaWVsZHNldD4KPGxlZ2VuZD57JFByb21vdGlvbnMtPkxhbmcoJ3Byb21wdF9jb3Vwb25fY29kZScpfTwvbGVnZW5kPgoKPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+CiAge2lmIGlzc2V0KCRlcnJvcil9PHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGVycm9yfTwvcD57L2lmfQogIHtpZiBpc3NldCgkbXNnKX08cCBzdHlsZT0iY29sb3I6IGdyZWVuOyI+eyRtc2d9PC9wPnsvaWZ9CgogIDxwPnskbW9kLT5MYW5nKCdwcm9tcHRfY29kZScpfTombmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1wcm9tb19jb2RlIiBzaXplPSIxMiIgbWF4bGVuZ3RoPSIxMCIgdmFsdWU9InskY29kZX0iLz48L3A+CiAgPHA+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXByb21vX3N1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9cHJvbW9fY2xlYXIiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2xlYXJfY291cG9ucycpfSIvPgogIDwvcD4KCiAge2lmIGlzc2V0KCRjb3Vwb25zKX0KICA8cD57JG1vZC0+TGFuZygnZW50ZXJlZF9jb3Vwb25zJyl9OjwvcD4KICA8dWw+CiAge2ZvcmVhY2ggZnJvbT0kY291cG9ucyBpdGVtPSdpdGVtJyBuYW1lPSdjb3Vwb25zJ30KICAgIDxsaT57JHNtYXJ0eS5mb3JlYWNoLmNvdXBvbnMuaXRlcmF0aW9ufTogeyRpdGVtfTwvbGk+CiAgey9mb3JlYWNofQogIDwvdWw+CiAgey9pZn0gIAo8L2Rpdj4KCjwvZmllbGRzZXQ+CnskZm9ybWVuZH0=]]></data>
	</file>
</module>
