<?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.2</version>
  <mincmsversion>1.11.9</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+Q2F1dGlvbnM6PC9oMz4KPHA+UHJvbW90aW9ucyBhcmUgY2FsY3VsYXRlZCBvbiB0aGUgb3JkZXIgaW4gc2VxdWVuY2UuICBNdWx0aXBsZSBwcm9tb3Rpb25zIG1heSBtYXRjaCB0aGUgaXRlbXMgb2YgYSBzaW5nbGUgb3JkZXIsIHRoaXMgbWF5IHJlc3VsdCBpbiBhIHNpbmdsZSBvcmRlciBoYXZpbmcgYSB6ZXJvIDxlbSBzdHlsZT0iY29sb3I6IHJlZDsiPm5lZ2F0aXZlIHZhbHVlPC9lbT4uICBUaGUgb3JkZXJzIG1vZHVsZSBtYXkgZG8gc29tZSBiYXNpYyBjaGVja3MgdG8gaGVscCB3aXRoIG9yZGVyIGludGVncml0eSwgYnV0IGRvIG5vdCBjb3VudCBvbiBpdC4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBURVNUIHlvdXIgcHJvbW90aW9ucyBhbmQgdG8gYWx3YXlzIG1vbml0b3IgdGhlbSBiZWZvcmUgcm9sbGluZyB0aGVtIGxpdmUuPC9wPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiAgSG93ZXZlciB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcyBvciB0byBmaWxlIGEgYnVnIHJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgbWFkZSBzaW1wbGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVycyBGb3JnZTwvYT4gYW5kIGRvIGEgc2VhcmNoIGZvciAnUHJvZHVjdHMnPC9saT4KPGxpPlRvIG9idGFpbiBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IgYXQgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPlJvYmVydCBDYW1wYmVsbDwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zLjwvYT48L2xpPgo8bGk+Rm9yIHNvbWUgcXVlc3Rpb25zIGFuZCBsaW1pdGVkIHRlY2huaWNhbCBzdXBwb3J0LCB0aGUgYXV0aG9yIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIApzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+CjxoMz5EZXBlbmRlbmNpZXM8L2gzPjx1bD48bGk+Q0dFeHRlbnNpb25zID0mZ3Q7IDEuMzguMTA8L2xpPjxsaT5PcmRlcnMgPSZndDsgMS4xNjwvbGk+PGxpPkpRdWVyeVRvb2xzID0mZ3Q7IDEuMi42PC9saT48bGk+UHJvZHVjdHMgPSZndDsgMi4yMC4yPC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGlubGluZT0iZGVmYXVsdCIgLSBTcGVjaWZ5IHRoYXQgdGhlIGNvdXBvbiBjb2RlIGZvcm0gaXMgaW5saW5lLCBhbmQgdGhlIHJlc3VsdHMgc2hvdWxkIHJlcGxhY2UgdGhlIG9yaWdpbmFsIHRhZyBhbmQgbm90IHRoZSBwYWdlIGNvbnRlbnRzPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB0ZW1wbGF0ZT0iIiAtIFNwZWNpZnkgdGhlIG5hbWUgb2YgYSBub24gZGVmYXVsdCBjb3Vwb24gY29kZSB0ZW1wbGF0ZSB0byBkaXNwbGF5IGZvciB0aGUgZGVmYXVsdCBhY3Rpb248L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMjxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KICA8bGk+VmVyc2lvbiAxLjAgLSBBdWd1c3QvMjAwOQogICAgPHVsPgogICAgICA8bGk+SW5pdGlhbCBSZWxlYXNlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjEgLSBBdWd1c3QvMjAwOQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC40IC0gT2N0b2Jlci8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXM8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuNSAtIE9jdG9iZXIvMjAwOQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjYgLSBGZWJydWFyeS8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5BZGRzIHRoZSBhYmlsaXR5IHRvIGdldCBkaXNjb3VudCBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgcHJvZHVjdC48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5WZXJzaW9uIDEuMC42IC0gSnVuZS8yMDEwCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+VmVyc2lvbiAxLjAuOCAtIEp1bHkvMjAxMAogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlZlcnNpb24gMS4wLjEwIC0gRmVicnVhcnkvMjAxMQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICAgIDxsaT5BZGRzIGZyb250ZW5kIGFiaWxpdHkgdG8gcmVzZXQgY291cG9uIGNvZGVzIHRoYXQgaGF2ZSBiZWVuIGVudGVyZWQuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xMS0gRmVicnVhcnkvMjAxMQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTItIE1hcmNoLzIwMTEKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjE0IC0gQXByaWwvMjAxMQogICA8dWw+CiAgICAgPGxpPk1pbm9yIGJ1ZyBmaXguPC9saT4KICAgPC91bD4KIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTUgLSBEZWNlbWJlci8yMDExCiAgIDx1bD4KICAgICA8bGk+TWlub3IgYnVnIGZpeC48L2xpPgogICA8L3VsPgogPC9saT4KIDxsaT5WZXJzaW9uIDEuMS54IC0gRGVjZW1iZXIvMjAxMgogICA8cD48c3Ryb25nPk5PVEU6IENPTVBBVElCSUxJVFkgTUFZIEJFIEJST0tFTi4gIENIRUNLIEFMTCBPRiBZT1VSIFBST01PVElPTlMuPC9zdHJvbmc+PC9wPgogICA8cD48c3Ryb25nPk5PVEU6IFBIUCA1LjMueCBJUyBSRVFVSVJFRC48L3N0cm9uZz48L3A+CiAgIDx1bD4KICAgICAgPGxpPk1ham9yIHJldmlzaW9uIC0gYWRkcyBpbnN0YW50LCBhbmQgY2hlY2tvdXQgdHlwZSBwcm9tb3Rpb25zLjwvbGk+CiAgICAgIDxsaT5BZGRzIG5ldyBwcm9tb3Rpb24gdGVzdGVyIGNsYXNzZXMsIGFuZCBkZXByZWNhdGVzIHRoZSBvbGQgb25lcy48L2xpPgogICAgICA8bGk+PHN0cm9uZz5Ob3RlOiBUaGlzIG1heSBub3QgYmUgYSBzaW1wbGUgdXBncmFkZS48L3N0cm9uZz48L2xpPgogICA8L3VsPgogPC9saT4KPC91bD4KPGJyIC8+]]></about>
	<description><![CDATA[Create, manage, and interact with sales and promotions for your e-commerce site]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.38.10</requiredversion>
	</requires>
	<requires>
	  <requiredname>Orders</requiredname>
	  <requiredversion>1.16</requiredversion>
	</requires>
	<requires>
	  <requiredname>JQueryTools</requiredname>
	  <requiredversion>1.2.6</requiredversion>
	</requires>
	<requires>
	  <requiredname>Products</requiredname>
	  <requiredversion>2.20.2</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_addpromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemF0aW9uCi8vCiRmZXVfbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwoKLy8KLy8gc2V0dXAKLy8KJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CmlmKCBpc3NldCgkcGFyYW1zWyd0eXBlJ10pICkgJHR5cGUgPSB0cmltKCRwYXJhbXNbJ3R5cGUnXSk7CgokcHJvbW8gPSBudWxsOwppZiggaXNzZXQoJHBhcmFtc1sncHJvbW9pZCddKSApIHsKICAvLyB1cGRhdGluZwogICRwcm9tbyA9IHByb21vX29wczo6bG9hZF9wcm9tb19ieV9pZCgoaW50KSRwYXJhbXNbJ3Byb21vaWQnXSk7CiAgJHR5cGUgPSAkcHJvbW8tPmdldF90eXBlKCk7IC8vIHVzZSB0aGUgcHJvbW90aW9uIHR5cGUuCn0KZWxzZSB7CiAgLy8gbmV3IHByb21vCiAgJHByb21vID0gbmV3IHByb21vdGlvbigpOwogICRwcm9tby0+c2V0X2NyZWF0ZWQodGltZSgpKTsKICAkcHJvbW8tPnNldF9lbmRfZGF0ZShzdHJ0b3RpbWUoc3ByaW50ZignKyVkIG1vbnRocycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcpKSkpOwogICRwcm9tby0+c2V0X29mZmVyX3R5cGUoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfdHlwZScpKTsKICAkcHJvbW8tPnNldF9vZmZlcl9kYXRhKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZmx0X29mZmVyX2RhdGEnKSk7Cn0KCi8vIHRoaXMgc3R1ZmYgaGFzIHRvIGJlIGFmdGVyIGRhdGEgbG9hZHMgc28gdGhhdCB0aGUgdHlwZSBpcyBzcGVjaWZpZWQgY29ycmVjdGx5Lgpzd2l0Y2goICR0eXBlICkgewogY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycpOwogICBicmVhazsKIGNhc2UgcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOgogICAkdGhpcy0+U2V0Q3VycmVudFRhYignY2hlY2tvdXRfcHJvbW90aW9ucycpOwogICBicmVhazsKfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CgovLwovLyBnYXRoZXIgZGF0YQovLwppZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgewogIC8vIHZhbGlkYXRlCiAgJGVycm9yID0gJyc7CgogICRfZ2V0X2RhdGEgPSBmdW5jdGlvbigkcGFyYW1zLCRpZHgpIHsKICAgICRvdXQgPSBhcnJheSgpOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmRkYXRhMCddWyRpZHhdKSAmJiAkcGFyYW1zWydzYXZlZF9jb25kZGF0YTAnXVskaWR4XSApICRvdXRbXSA9IHRyaW0oJHBhcmFtc1snc2F2ZWRfY29uZGRhdGEwJ11bJGlkeF0pOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmRkYXRhMSddWyRpZHhdKSAmJiAkcGFyYW1zWydzYXZlZF9jb25kZGF0YTEnXVskaWR4XSApICRvdXRbXSA9IHRyaW0oJHBhcmFtc1snc2F2ZWRfY29uZGRhdGExJ11bJGlkeF0pOwogICAgcmV0dXJuICRvdXQ7CiAgfTsKCiAgLy8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5hbWUgaXMgdmFsaWQuCiAgaWYoICFwcm9tb19vcHM6OmNoZWNrX3VudXNlZF9uYW1lKHRyaW0oJHBhcmFtc1snbmFtZSddKSwkcHJvbW8tPmdldF9pZCgpKSApICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9uYW1lX2V4aXN0cycpOwoKICAvLyBidWlsZCB0aGUgcHJvbW90aW9uIG9iamVjdAogICRwcm9tby0+c2V0X25hbWUodHJpbSgkcGFyYW1zWyduYW1lJ10pKTsKICBpZiggaXNzZXQoJHBhcmFtc1sndHlwZSddKSApICRwcm9tby0+c2V0X3R5cGUoJHBhcmFtc1sndHlwZSddKTsKICBpZiggaXNzZXQoJHBhcmFtc1snZGVzY3JpcHRpb24nXSkgKSAkcHJvbW8tPnNldF9kZXNjcmlwdGlvbih0cmltKCRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ10pKTsKICBpZiggaXNzZXQoJHBhcmFtc1snaW1hZ2UnXSkgKSAkcHJvbW8tPnNldF9pbWFnZSh0cmltKCRwYXJhbXNbJ2ltYWdlJ10pKTsKICAkc2QgPSBta3RpbWUoMCwwLDAsKGludCkkcGFyYW1zWydzdGFydF9kYXRlX01vbnRoJ10sKGludCkkcGFyYW1zWydzdGFydF9kYXRlX0RheSddLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZV9ZZWFyJ10pOwogICRwcm9tby0+c2V0X3N0YXJ0X2RhdGUoJHNkKTsKICAkZWQgPSBta3RpbWUoMCwwLDAsKGludCkkcGFyYW1zWydlbmRfZGF0ZV9Nb250aCddLChpbnQpJHBhcmFtc1snZW5kX2RhdGVfRGF5J10sKGludCkkcGFyYW1zWydlbmRfZGF0ZV9ZZWFyJ10pOwogICRwcm9tby0+c2V0X2VuZF9kYXRlKCRlZCk7CiAgJHByb21vLT5zZXRfb2ZmZXJfdHlwZSgkcGFyYW1zWydvZmZlcl90eXBlJ10pOwogICRwcm9tby0+c2V0X29mZmVyX2RhdGEodHJpbSgkcGFyYW1zWydvZmZlcl9kYXRhJ10pKTsKICAkcHJvbW8tPmRlbF9jb25kaXRpb25zKCk7CiAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXSk7ICRpKysgKSB7CiAgICAkY29uZCA9IG5ldyBwcm9tb3Rpb25fY29uZGl0aW9uOwogICAgJGNvbmQtPnNldF9jb25kX3R5cGUoJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXVskaV0pOwogICAgJGNvbmQtPnNldF9kYXRhKCRfZ2V0X2RhdGEoJHBhcmFtcywkaSkpOwogICAgJHByb21vLT5hZGRfY29uZGl0aW9uKCRjb25kKTsKICB9CgogICRwcm9tby0+Y2xlYXJfZXh0cmEoKTsKICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlICkgewogICAgaWYoICFzdGFydHN3aXRoKCRrZXksJ2V4dHJhXycpICkgY29udGludWU7CiAgICAkbmtleSA9IHN1YnN0cigka2V5LDYpOwogICAgJHByb21vLT5zZXRfZXh0cmEoJG5rZXksJHZhbHVlKTsKICB9CgogIC8vIHZhbGlkYXRlIHRoZSBjb25kaXRpb25zLgogIGlmKCBlbXB0eSgkZXJyb3IpICYmIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmR0eXBlJ10pICkgewogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXSk7ICRpKysgKSB7CiAgICAgIGlmKCAhZW1wdHkoJGVycm9yKSApIGJyZWFrOwoKICAgICAgJGRhdGEgPSAkX2dldF9kYXRhKCRwYXJhbXMsJGkpOwogICAgICBzd2l0Y2goJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXVskaV0pIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJaWYoICEkZmV1X21vZHVsZSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX21vZHVsZV9ub3RfZm91bmQnLCdGcm9udEVuZFVzZXJzJyk7Cgl9CgllbHNlIGlmKCBjb3VudCgkZGF0YSkgIT0gMSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfZmV1X2dyb3VwJyk7Cgl9CgllbHNlIHsKCSAgJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7CgkgIGZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgICAgaWYoICEkZmV1X21vZHVsZS0+R3JvdXBFeGlzdHNCeU5hbWUodHJpbSgkdG1wKSkgKSB7CgkgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9mZXVfZ3JvdXAnKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9TVUJUT1RBTDoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgoJaWYoIGNvdW50KCRkYXRhKSAhPSAxIHx8IChmbG9hdCkkZGF0YVswXSA8IDAuMDAwMDEgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX29yZGVyX2Ftb3VudCcpOwoJfQoJZWxzZSBpZiggJHR5cGUgPT0gcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX2NvbmRpdGlvbl90eXBlJyk7Cgl9CgllbHNlIHsKCSAgJHRtcCA9IGZsb2F0dmFsKCRkYXRhKTsKCSAgaWYoICR0bXAgPD0gMC4wMSB8fCAkdG1wID4gMTAwMDAwICkgewoJICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX29yZGVyX2Ftb3VudCcpOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RTS1U6CgkvLyB0b2RvCglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCWlmKCBjb3VudCgkdG1wKSAhPSAxICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0Jyk7Cgl9CgllbHNlIHsKCSAgJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7CgkgIGZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgICAgaWYoICFwcm9kdWN0X29wczo6aXNfdmFsaWRfcHJvZHVjdF9pZCh0cmltKCR0bXApKSApIHsKCSAgICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3Byb2R1Y3QnKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgoJaWYoIGNvdW50KCRkYXRhKSAhPSAxICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0X2NhdGVnb3J5Jyk7Cgl9CgllbHNlIHsKCSAgJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7CgkgIGZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgICAgaWYoICFwcm9kdWN0X29wczo6aXNfdmFsaWRfY2F0ZWdvcnkodHJpbSgkdG1wKSkgKSB7CgkgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0X2NhdGVnb3J5Jyk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkvLyB0b2RvCglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0NPVVBPTjoKCWlmKCBjb3VudCgkZGF0YSkgIT0gMSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2NvdXBvbl9leGlzdHMnKTsKCX0KCWVsc2UgaWYoICFwcm9tb19vcHM6OmNoZWNrX3VudXNlZF9jb3Vwb24oJGRhdGEsJHByb21vLT5nZXRfaWQoKSkgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9jb3Vwb25fZXhpc3RzJyk7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKCWlmKCBjb3VudCgkZGF0YSkgIT0gMiB8fCAkZGF0YVswXSA9PSAnJyB8fCAoaW50KSRkYXRhWzFdIDwgMSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfYnVsa3B1cmNoYXNlJyk7Cgl9CgkvLyB0b2RvOiB2ZXJpZnkgc2t1IChtYXkgaGF2ZSB0byBhc2sgZm9yIHNvdXJjZSkKCWJyZWFrOwoKICAgICAgfSAvLyBzd2l0Y2gKICAgIH0gLy8gZm9yIGVhY2ggY29uZGl0aW9uCgogICAgLy8gdmFsaWRhdGUgdGhlIG9mZmVyCiAgICBpZiggZW1wdHkoJGVycm9yKSApIHsKICAgICAgc3dpdGNoKCRwYXJhbXNbJ29mZmVyX3R5cGUnXSkgewogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKCWlmKCAkdHlwZSA9PSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVCApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfb2ZmZXJfdHlwZScpOwoJfQoJZWxzZSB7CgkgICR0bXAgPSBmbG9hdHZhbCgkcGFyYW1zWydvZmZlcl9kYXRhJ10pOwoJICBpZiggJHRtcCA8IDAuMDAwMSB8fCAkdG1wID4gMTAwLjAgKSB7CgkgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfdmFsdWUnKTsKCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJJHRtcCA9IGZsb2F0dmFsKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSk7CglpZiggJHRtcCA8IDAuMDAwMSB8fCAkdG1wID4gMTAwLjAgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJyk7Cgl9CglicmVhazsKCSAgICAKICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgoJaWYoICR0eXBlID09IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9vZmZlcl90eXBlJyk7Cgl9CgllbHNlIHsKCSAgJHRtcCA9IGZsb2F0dmFsKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSk7CgkgIGlmKCAkdG1wIDwgMC4wMDAxIHx8ICR0bXAgPiAxMDAwMC4wICkgewoJICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJyk7CgkgIH0KCX0KCWJyZWFrOwoJICAgIAogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSR0bXAgPSB0cmltKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSk7CglpZighcHJvZHVjdF9vcHM6OmlzX3ZhbGlkX3Byb2R1Y3RfaWQoJHRtcCkpIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCcpOwoJfQoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBwdXQgdGhlIHBhcmFtcyBpbiB0aGUgcHJvbW8gb2JqZWN0CiAgICBpZiggZW1wdHkoJGVycm9yKSApIHsKCiAgICAgIC8vIGNvbW1pdAogICAgICAkcmVzID0gJHByb21vLT5zYXZlKCk7CiAgICAgIGlmKCAkcmVzICkgewoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICAgICAgfQogICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3Jfc2F2ZV9wcm9tb3Rpb24nKTsKICAgIH0KCiAgICBpZiggJGVycm9yICkgewogICAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcik7CiAgICB9CiAgfQp9CgogICAgCi8vCi8vIGdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKLy8KJHRtcCA9IHByb21vdGlvbjo6Z2V0X3R5cGVzX2FycmF5KCk7CiRwcm9tb3R5cGVzID0gYXJyYXkoKTsKZm9yZWFjaCggJHRtcCBhcyAkb25lICkgewogICRwcm9tb3R5cGVzWyRvbmVdID0gJHRoaXMtPkxhbmcoJG9uZSk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGVzJywkcHJvbW90eXBlcyk7CgokdG1wID0gcHJvbW90aW9uOjpnZXRfb2ZmZXJfYXJyYXkoJHR5cGUpOwokb2ZmZXJ0eXBlcyA9IGFycmF5KCk7CmZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKICAkb2ZmZXJ0eXBlc1skb25lXSA9ICR0aGlzLT5MYW5nKCRvbmUpOwp9CiRzbWFydHktPmFzc2lnbignb2ZmZXJ0eXBlcycsJG9mZmVydHlwZXMpOwoKJHRtcCA9IHByb21vdGlvbl9jb25kaXRpb246OmdldF90eXBlc19hcnJheSgkdHlwZSk7CiRjb25kdHlwZXMgPSBhcnJheSgpOwpmb3JlYWNoKCAkdG1wIGFzICRjb25kICkgewogIGlmKCAhJGZldV9tb2R1bGUgJiYgJGNvbmQgPT0gUFJPTU9USU9OU19DT05EX0ZFVSApICBjb250aW51ZTsKCiAgJHJlYyA9IGFycmF5KCduYW1lJz0+JGNvbmQsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJGNvbmQpKTsKICAkcmVjWydmaWVsZHMnXSA9IGFycmF5KCR0aGlzLT5MYW5nKCdwcm9tcHRkYXRhXycuJGNvbmQpKTsKICBpZiggJGNvbmQgPT0gUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSApIHsKICAgICRyZWNbJ2ZpZWxkcyddW10gPSAkdGhpcy0+TGFuZygncHJvbXB0ZGF0YV8nLiRjb25kLicyJyk7CiAgfQogICRjb25kdHlwZXNbJGNvbmRdID0gJHJlYzsKfQoKJHNtYXJ0eS0+YXNzaWduKCdjb25kaXRpb250eXBlcycsJGNvbmR0eXBlcyk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLCRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tbycsJHByb21vKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGUnLCR0eXBlKTsKaWYoICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpICkgJHNtYXJ0eS0+YXNzaWduKCdjb25kaXRpb25zJywkcHJvbW8tPmdldF9jb25kaXRpb25zKCkpOwokZXh0cyA9IGNnZV91dGlsczo6Z2V0X2ltYWdlX2V4dGVuc2lvbnMoKTsKJGRpciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpbWFnZWRpcicsJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc19wYXRoJ10pOwokZmlsZXMgPSBjZ2VfZGlyOjpnZXRfZmlsZV9saXN0KCRkaXIsJGV4dHMpOwokZmlsZXMgPSBjZ2VfYXJyYXk6Omhhc2hfcHJlcGVuZCgkZmlsZXMsJy0xJywkdGhpcy0+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+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjaGVja291dF9wcm9tb3Rpb25zJywkdGhpcy0+TGFuZygnbGJsX2NoZWNrb3V0X3Byb21vdGlvbnMnKSk7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpbnN0YW50X3Byb21vdGlvbnMnLCR0aGlzLT5MYW5nKCdsYmxfaW5zdGFudF9wcm9tb3Rpb25zJykpOwp9CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjb3Vwb25mb3JtJywkdGhpcy0+TGFuZygnbGJsX2NvdXBvbmZvcm1fdGVtcGxhdGVzJykpOwogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZGZsdF90ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCdsYmxfZGVmYXVsdF90ZW1wbGF0ZXMnKSk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZXR0aW5ncycsJHRoaXMtPkxhbmcoJ2xibF9zZXR0aW5ncycpKTsKfQplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oUHJvbW90aW9uczo6TUFJTl9QRVJNKSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYignY2hlY2tvdXRfcHJvbW90aW9ucycsJHBhcmFtcyk7CiAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2NoZWNrb3V0X3Byb21vdGlvbnN0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdpbnN0YW50X3Byb21vdGlvbnMnLCRwYXJhbXMpOwogIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9pbnN0YW50X3Byb21vdGlvbnN0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYignY291cG9uZm9ybScsJHBhcmFtcyk7CiAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2NvdXBvbmZvcm10YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdkZmx0X3RlbXBsYXRlcycsJHBhcmFtcyk7CiAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2RmbHRfdGVtcGxhdGVzX3RhYi5waHAnKTsKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYignc2V0dGluZ3MnLCRwYXJhbXMpOwogIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9zZXR0aW5nc3RhYi5waHAnKTsKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CgojCiMgRU9GCiMKPz4=]]></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+Q2F1dGlvbnM6PC9oMz4KPHA+UHJvbW90aW9ucyBhcmUgY2FsY3VsYXRlZCBvbiB0aGUgb3JkZXIgaW4gc2VxdWVuY2UuICBNdWx0aXBsZSBwcm9tb3Rpb25zIG1heSBtYXRjaCB0aGUgaXRlbXMgb2YgYSBzaW5nbGUgb3JkZXIsIHRoaXMgbWF5IHJlc3VsdCBpbiBhIHNpbmdsZSBvcmRlciBoYXZpbmcgYSB6ZXJvIDxlbSBzdHlsZT0iY29sb3I6IHJlZDsiPm5lZ2F0aXZlIHZhbHVlPC9lbT4uICBUaGUgb3JkZXJzIG1vZHVsZSBtYXkgZG8gc29tZSBiYXNpYyBjaGVja3MgdG8gaGVscCB3aXRoIG9yZGVyIGludGVncml0eSwgYnV0IGRvIG5vdCBjb3VudCBvbiBpdC4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBURVNUIHlvdXIgcHJvbW90aW9ucyBhbmQgdG8gYWx3YXlzIG1vbml0b3IgdGhlbSBiZWZvcmUgcm9sbGluZyB0aGVtIGxpdmUuPC9wPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiAgSG93ZXZlciB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcyBvciB0byBmaWxlIGEgYnVnIHJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgbWFkZSBzaW1wbGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVycyBGb3JnZTwvYT4gYW5kIGRvIGEgc2VhcmNoIGZvciAnUHJvZHVjdHMnPC9saT4KPGxpPlRvIG9idGFpbiBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IgYXQgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPlJvYmVydCBDYW1wYmVsbDwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zLjwvYT48L2xpPgo8bGk+Rm9yIHNvbWUgcXVlc3Rpb25zIGFuZCBsaW1pdGVkIHRlY2huaWNhbCBzdXBwb3J0LCB0aGUgYXV0aG9yIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIApzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiNBCiRsYW5nWydhZGQnXSA9ICdBZGQnOwoKCiNCCgoKI0MKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydjbGVhcl9jb3Vwb25zJ10gPSAnQ2xlYXIgQ291cG9ucyc7CiRsYW5nWydjb3Vwb25zX2NsZWFyZWQnXSA9ICdXZSBoYXZlIHJlc2V0IGFsbCBvZiB5b3VyIGNvdXBvbnMnOwokbGFuZ1snY291cG9uZm9ybXRlbXBsYXRlX2FkZGVkaXQnXSA9ICdBZGQgb3IgRWRpdCBhIENvdXBvbiBGb3JtIFRlbXBsYXRlJzsKCgojRAokbGFuZ1snZGVsZXRlJ10gPSAnRGVsZXRlJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGVfbm90aWNlJ10gPSA8PDxFT1QKPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgY29udGVudHMgb2YgdGhlc2UgdGV4dCBhcmVhcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgY29udGVudCBvZiB0ZW1wbGF0ZXMgd2hlbiB5b3UgY2xpY2sgJnF1b3Q7QWRkIFRlbXBsYXRlJnF1b3Q7IGluIHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZSB0YWIuICBFZGl0aW5nIG9uZSBvZiB0aGVzZSB0ZXh0IGFyZWFzIHdpbGwgaGF2ZSBubyBpbW1lZGlhdGUgZWZmZWN0IG9uIHlvdXIgd2Vic2l0ZS4KRU9UOwoKCiNFCiRsYW5nWydlZGl0J10gPSAnRWRpdCc7CiRsYW5nWydlbnRlcmVkX2NvdXBvbnMnXSA9ICdDb3Vwb25zIHlvdSBoYXZlIGVudGVyZWQ6JzsKJGxhbmdbJ2Vycm9yX2FscmVhZHlfcHJvZCddID0gJ0EgcHJvZHVjdCBjb25kaXRpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNvbmRpdGlvbiBsaXN0JzsKJGxhbmdbJ2Vycm9yX2NvdXBvbl9leGlzdHMnXSA9ICdBIHByb21vdGlvbiB1c2luZyB0aGF0IGNvdXBvbiBzdHJpbmcgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX2NvbmRpdGlvbiddID0gJ0EgZHVwbGljYXRlIGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY29uZGl0aW9uIGxpc3QnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX3R5cGUnXSA9ICdBIGR1cGxpY2F0ZSBwcm9kdWN0IGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9lbXB0eV9jb2RlJ10gPSAnUGxlYXNlIGVudGVyIGEgdmFsaWQgdmFsdWUnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9idWxrcHVyY2hhc2UnXSA9ICdUaGUgYnVsayBwdXJjaGFzZSBkYXRhIHNwZWNpZmllZCBpcyBpbnZhbGlkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfY29kZSddID0gJ1Byb21vdGlvbiBDb2RlIG5vdCByZWNvZ25pc2VkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfY29uZGl0aW9uX3R5cGUnXSA9ICdBIGNvbmRpdGlvbiBzcGVjaWZpZWQgaXMgaW52YWxpZCBmb3IgdGhpcyBwcm9tb3Rpb24gdHlwZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2ZldV9ncm91cCddID0gJ0ludmFsaWQgRkVVIEdyb3VwIE5hbWUgU3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfb3JkZXJfYW1vdW50J10gPSAnVGhlIG9yZGVyIGFtb3VudCBzcGVjaWZpZWQgaXMgaW52YWxpZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX29mZmVyX3R5cGUnXSA9ICdUaGUgb2ZmZXIgc3BlY2lmaWVkIGlzIGludmFsaWQgZm9yIHRoaXMgdHlwZSBvZiBvcmRlcic7CiRsYW5nWydlcnJvcl9pbnZhbGlkX3Byb2R1Y3RfY2F0ZWdvcnknXSA9ICdBdCBsZWFzdCBvbmUgaW52YWxpZCBwcm9kdWN0IGNhdGVnb3J5JzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCddID0gJ0ludmFsaWQgcHJvZHVjdCBpZCBzcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfaW52YWxpZF92YWx1ZSddID0gJ0ludmFsaWQgVmFsdWUgU3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfcGFyYW0nXSA9ICdBIHJlcXVpcmVkIGlucHV0IHBhcmFtZXRlciBpcyBtaXNzaW5nJzsKJGxhbmdbJ2Vycm9yX21vZHVsZV9ub3RfZm91bmQnXSA9ICdBIFJlcXVpcmVkIE1vZHVsZSAoJXMpIENvdWxkIG5vdCBiZSBmb3VuZCc7CiRsYW5nWydlcnJvcl9uYW1lX2V4aXN0cyddID0gJ0EgcHJvbW90aW9uIGJ5IHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9ub29mZmVyX2RhdGEnXSA9ICdUaGVyZSBpcyBubyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGh0IGhlIG9mZmVyIHR5cGUnOwokbGFuZ1snZXJyb3JfcHJvbW90aW9uX25hbWUnXSA9ICdFYWNoIHByb21vdGlvbiBtdXN0IGhhdmUgYSBuYW1lJzsKJGxhbmdbJ2Vycm9yX3NhdmVfcHJvbW90aW9uJ10gPSAnQW4gZXJyb3Igb2NjdXJyZWQgdHJ5aW5nIHRvIHNhdmUgdGhpcyBwcm9tb3Rpb24nOwokbGFuZ1snZXJyb3Jfc3BlY2lmeV92YWx1ZSddID0gJ1BsZWFzZSBzcGVjaWZ5IGEgdmFsdWUnOwoKI0YKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1Byb21vdGlvbiBNYW5hZ2VyJzsKCiNHCgoKI0gKCiNJCiRsYW5nWydpbmZvX2NoZWNrb3V0X3Byb21vdGlvbnMnXSA9ICdDaGVja291dCBwcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIHdoZW4gdGhlIG9yZGVyIGlzIGNoZWNrZWQgb3V0LiAgT25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgcHJvbW90aW9uIHdpbGwgYmUgdXNlZC4gIE5vIGFscmVhZHkgZGlzY291bnRlZCBjYXJ0IGl0ZW1zIHdpbGwgYmUgbWF0Y2hlZC4nOwokbGFuZ1snaW5mb19jb25kaXRpb25zJ10gPSAnU3BlY2lmeSBvbmUgb3IgbW9yZSBzYWxlcyBjb25kaXRpb25zIGZvciB0aGlzIHByb21vdGlvbic7CiRsYW5nWydpbmZvX2NvbmRpdGlvbl9kYXRhJ10gPSAnUHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZGF0YSBmb3IgdGhpcyBjb25kaXRpb24nOwokbGFuZ1snaW5mb19leHRyYXMnXSA9ICdUaGlzIGFyZWEgY29udGFpbnMgb3B0aW9uYWwgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciBlYWNoIHByb21vdGlvbiBmb3IgdXNlIHdoZW4gZGlzcGxheWluZyBwcm9tb3Rpb24gYmFubmVycyBvciBwcm9tb3Rpb24gaW5mb3JtYXRpb24uJzsKJGxhbmdbJ2luZm9faW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBwcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIHdoZW4gdGhlIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIGNhcnQuICBBdHRlbXB0cyBhcmUgbWFkZSB0byBkaXNwbGF5IHBvdGVudGlhbCBkaXNjb3VudHMgYmVmb3JlIGNoZWNrb3V0LiAgVGhlIGZpcnN0IHByb21vdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdGVkIGNhcnQgaXRlbSB3aWxsIGJlIHVzZWQgaW4gY2FsY3VsYXRpbmcgZGlzY291bnRzLic7CiRsYW5nWydpbmZvX2ltYWdlX2RpciddID0gJ1NwZWNpZnkgYSBkaXJlY3RvcnkgbmFtZSByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gc2VhcmNoIGZvciBpbWFnZXMgdG8gYXR0YWNoIHRvIG9mZmVycyc7CiRsYW5nWydpbmZvX3Byb21vX25hbWUnXSA9ICdUaGlzIG5hbWUgaXMgdXNlZCBmb3IgaW52b2ljZXMgYW5kIHNhbGVzIG9yZGVycyB0byBkZXNjcmliZSB0aGUgZGlzY291bnQgYmVpbmcgYXBwbGllZCc7CiRsYW5nWydpbmZvX3Byb21vX3R5cGUnXSA9ICdTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoaXMgcHJvbW90aW9uLiAgTm90ZSB0aGF0IG9mZmVycyB0aGF0IGVmZmVjdCB0aGUgb3JkZXIgdG90YWwgd2lsbCBoYXZlIG5vIGVmZmVjdCBpbiAmcXVvdDtpbnN0YW50JnF1b3Q7IHR5cGUgcHJvbW90aW9ucy4nOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0ZFVSddID0gJ0EgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgRkVVIGdyb3VwIG5hbWVzIGlzIHBlcm1pdHRlZCc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnXSA9ICdFbnRlciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIHVzaW5nIGEgLiBmb3IgYSBkZWNpbWFsIHNlcGFyYXRvci4gIGkuZTogIDEwMC4wMCc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfV0VJR0hUJ10gPSAnRW50ZXIgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSB1c2luZyBhIC4gZm9yIGEgZGVjaW1hbCBzZXBhcmF0b3IuICBpLmU6ICAxMDAuMDAnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0NPVVBPTiddID0gJ0VudGVyIGEgdGV4dCBzdHJpbmcgb2Ygbm8gbW9yZSB0aGFuIDEwIGNoYXJhY3RlcnMnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RJRCddID0gJ0VudGVyIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcHJvZHVjdCBpZHMnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RTS1UnXSA9ICdFbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHByb2R1Y3QgU0tVXCdzJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9QUk9EQ0FUJ10gPSAnRW50ZXIgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGNhdGVnb3J5IG5hbWVzJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9QUk9ESElFUiddID0gJ0VudGVyIGEgc2luZ2xlIHByb2R1Y3QgaGllcmFyY2h5IG5hbWUgaW4gdGhlIGZvcm1hdCAmcXVvdDtncmFuZHBhcmVudC5wYXJlbnQuY2hpbGQmcXVvdDsnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSddID0gJ0VudGVyIGEgbWludW11bSBxdWFudGl0eSBhbmQgYSBza3UnOwoKI0oKCgojSwoKCiNMCiRsYW5nWydsYmxfYWRkX3Byb21vJ10gPSAnQWRkIFByb21vdGlvbic7CiRsYW5nWydsYmxfZWRpdF9wcm9tbyddID0gJ0VkaXQgUHJvbW90aW9uJzsKJGxhbmdbJ2xibF9jaGVja291dF9wcm9tb3Rpb25zJ10gPSAnQ2hlY2tvdXQgUHJvbW90aW9ucyc7CiRsYW5nWydsYmxfaW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBQcm9tb3Rpb25zJzsKJGxhbmdbJ2xibF9wcm9tb3Rpb25zJ10gPSAnUHJvbW90aW9ucyc7CiRsYW5nWydsYmxfc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWydsYmxfY291cG9uZm9ybV90ZW1wbGF0ZXMnXSA9ICdDb3Vwb24gRm9ybSBUZW1wbGF0ZXMnOwokbGFuZ1snbGJsX2RlZmF1bHRfdGVtcGxhdGVzJ10gPSAnRGVmYXVsdCBUZW1wbGF0ZXMnOwokbGFuZ1snbGJsX29ubHlvbmUnXSA9ICdBbGxvdyBvbmx5IG9uZSAmcXVvdDtmcmVlJnF1b3Q7IGl0ZW0nOwokbGFuZ1snbGJsX3Byb21vX21lc3NhZ2VzJ10gPSAnUHJvbW90aW9uIE1lc3NhZ2VzJzsKCiNNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NyZWF0ZSwgbWFuYWdlLCBhbmQgaW50ZXJhY3Qgd2l0aCBzYWxlcyBhbmQgcHJvbW90aW9ucyBmb3IgeW91ciBlLWNvbW1lcmNlIHNpdGUnOwokbGFuZ1snbXNnX3ByZWZzdXBkYXRlZCddID0gJ1ByZWZlcmVuY2VzIFVwZGF0ZWQnOwokbGFuZ1snbXNnX3Byb21vZGVsZXRlZCddID0gJ1Byb21vdGlvbiBEZWxldGVkJzsKJGxhbmdbJ21zZ192YWxpZF9jb2RlJ10gPSAnWW91ciB2YWxpZCBwcm9tb3Rpb24gY29kZSB3YXMgcmVjb2duaXNlZCEnOwoKI04KJGxhbmdbJ25vbmUnXSA9ICdOb25lJzsKCiNPCgoKI1AKJGxhbmdbJ3BhcmFtX2lubGluZSddID0gJ1NwZWNpZnkgdGhhdCB0aGUgY291cG9uIGNvZGUgZm9ybSBpcyBpbmxpbmUsIGFuZCB0aGUgcmVzdWx0cyBzaG91bGQgcmVwbGFjZSB0aGUgb3JpZ2luYWwgdGFnIGFuZCBub3QgdGhlIHBhZ2UgY29udGVudHMnOwokbGFuZ1sncGFyYW1fdGVtcGxhdGUnXSA9ICdTcGVjaWZ5IHRoZSBuYW1lIG9mIGEgbm9uIGRlZmF1bHQgY291cG9uIGNvZGUgdGVtcGxhdGUgdG8gZGlzcGxheSBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVGhlIFByb21vdGlvbnMgbW9kdWxlIGhhcyBiZWVuIGluc3RhbGxlZCwgcGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBhdXRob3JpemVkIHVzZXJzIGhhdmUgdGhlICZxdW90O01hbmFnZSBQcm9tb3Rpb25zJnF1b3Q7IHBlcm1pc3Npb24sIGFuZCB0aGVuIGNvbmZpZ3VyZSB5b3VyIHByb21vdGlvbnMgYW5kIHRlbXBsYXRlcyBhcHByb3ByaWF0ZWx5JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdUaGUgUHJvbW90aW9ucyBtb2R1bGUgYW5kIGFsbCBhcHBsaWNhYmxlIGRhdGEgaGFzIGJlZW4gdW5pbnN0YWxsZWQgZnJvbSB0aGUgc3lzdGVtLiAgWW91IG1heSBub3cgcmVtb3ZlIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb2R1bGUnOwokbGFuZ1snUFJPTU9USU9OU19DT05EX0NPVVBPTiddID0gJ1JlcXVpcmUgYSBDb3Vwb24gQ29kZSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfRkVVJ10gPSAnUmVxdWlyZSBtZW1iZXJzaGlwIGluIGFuIEZFVSBncm91cCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnXSA9ICdSZXF1aXJlIGEgbWluaW11bSBwdXJjaGFzZSBhbW91bnQnOwokbGFuZ1snUFJPTU9USU9OU19DT05EX1dFSUdIVCddID0gJ1JlcXVpcmUgYSBtaW5pbXVtIG9yZGVyIHdlaWdodCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPRElEJ10gPSAnUmVxdWlyZSBwdXJjaGFzZSBvZiBhIHNwZWNpZmljIHByb2R1Y3QnOwokbGFuZ1snUFJPTU9USU9OU19DT05EX1BST0RDQVQnXSA9ICdSZXF1aXJlIHB1cmNoYXNlIG9mIGF0IGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgY2F0ZWdvcnknOwokbGFuZ1snUFJPTU9USU9OU19DT05EX1BST0RISUVSJ10gPSAnUmVxdWlyZSBwdXJjaGFzZSBvZiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBpbiBhIGhpZXJhcmNoeSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSddID0gJ1JlcXVpcmUgcHVyY2hhc2Ugb2YgYSBzcGVjaWZpYyBwcm9kdWN0IChieSBTS1UpJzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UnXSA9ICdSZXF1aXJlIGEgcHVyY2hhc2Ugb2YgYSBtaW51bXVtIHF1YW50aXR5IG9mIGEgc3BlY2lmaWMgcHJvZHVjdCAoYnkgU0tVKSc7CiRsYW5nWycwMV9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1QnXSA9ICdSZWNlaXZlIGEgZnJlZSBwcm9kdWN0JzsKJGxhbmdbJzAyX1BST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UJ10gPSAnRGlzY291bnQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdHMgYnkgYSBwZXJjZW50YWdlJzsKJGxhbmdbJzAzX1BST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCddID0gJ1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJzsKJGxhbmdbJzA0X1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnXSA9ICdSZWR1Y2Ugb3JkZXIgdG90YWwgYnkgYSBzcGVjaWZpZWQgZG9sbGFyIGZpZ3VyZSc7CiRsYW5nWycwNV9QUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUJ10gPSAnR2V0IHRoZSBzYW1lIHByb2R1Y3QgZnJlZSc7CiRsYW5nWycwNl9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UnXSA9ICdSZWNlaXZlIGEgZnJlZSBwcm9kdWN0IChieSBTS1UpJzsKJGxhbmdbJzA3X1BST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCddID0gJ0Rpc2NvdW50IHRoZSBhcHBsaWNhYmxlIHByb2R1Y3RzIGJ5IGEgZml4ZWQgYW1vdW50JzsKJGxhbmdbJ3Byb21vX3R5cGVfaW5zdGFudCddID0gJ1Byb21vdGlvbiBvZmZlciBjYWxjdWxhdGVkIGluIHRoZSBDYXJ0JzsKJGxhbmdbJ3Byb21vX3R5cGVfY2hlY2tvdXQnXSA9ICdQcm9tb3Rpb24gb2ZmZXIgY2FsY3VsYXRlZCBvbiBDaGVja291dCc7CiRsYW5nWydwcm9tcHRfYWRkX2NvbmRpdGlvbiddID0gJ0FkZCBhIENvbmRpdGlvbic7CiRsYW5nWydwcm9tcHRfYWRkcHJvbW8nXSA9ICdBZGQgYSBOZXcgUHJvbW90aW9uJzsKJGxhbmdbJ3Byb21wdF9hbGxvd19jdW11bGF0aXZlJ10gPSAnQXBwbHkgdGhpcyBwcm9tb3Rpb24gdG8gYWxyZWFkeSBkaXNjb3VudGVkIGl0ZW1zPyc7CiRsYW5nWydwcm9tcHRfYWxsb3dfb25jZSddID0gJ1RoaXMgcHJvbW90aW9uIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBwZXIgdHJhbnNhY3Rpb24nOwokbGFuZ1sncHJvbXB0X2NvZGUnXSA9ICdDb3Vwb24gQ29kZSc7CiRsYW5nWydwcm9tcHRfY29uZGl0aW9uX2RhdGEnXSA9ICdDb25kaXRpb24gRGF0YSc7CiRsYW5nWydwcm9tcHRfY29uZGl0aW9uX3R5cGUnXSA9ICdUeXBlIG9mIENvbmRpdGlvbic7CiRsYW5nWydwcm9tcHRfY29uZGl0aW9ucyddID0gJ0NvbmRpdGlvbnMnOwokbGFuZ1sncHJvbXB0X2NvdXBvbl9jb2RlJ10gPSAnRW50ZXIgYSBDb3Vwb24gb3IgUHJvbW90aW9uIENvZGUnOwokbGFuZ1sncHJvbXB0X2RmbHRfb2ZmZXJfdHlwZSddID0gJ0RlZmF1bHQgb2ZmZXIgdHlwZSc7CiRsYW5nWydwcm9tcHRfZGZsdF9wcm9tb3Rpb25fcGVyaW9kJ10gPSAnRGVmYXVsdCBQcm9tb3Rpb24gUGVyaW9kIChtb250aHMpJzsKJGxhbmdbJ3Byb21wdF9lbmRfZGF0ZSddID0gJ0VuZCBEYXRlJzsKJGxhbmdbJ3Byb21wdF9lcnJvcl9lbXB0eSddID0gJ0VtcHR5IENvZGUgTWVzc2FnZSc7CiRsYW5nWydwcm9tcHRfZXJyb3JfaW52YWxpZCddID0gJ0ludmFsaWQgQ29kZSBNZXNzYWdlJzsKJGxhbmdbJ3Byb21wdF9leHRyYXMnXSA9ICdFeHRyYXMnOwokbGFuZ1sncHJvbXB0X2ZyZWVfcHJvZHVjdCddID0gJ1NwZWNpZnkgdGhlIGZyZWUgcHJvZHVjdCc7CiRsYW5nWydwcm9tcHRfaWQnXSA9ICdJRCc7CiRsYW5nWydwcm9tcHRfaW1hZ2UnXSA9ICdJbWFnZSc7CiRsYW5nWydwcm9tcHRfaW1hZ2VfZGlyJ10gPSAnSW1hZ2UgRGlyZWN0b3J5JzsKJGxhbmdbJ3Byb21wdF9kZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ3Byb21wdF9tc2dfdmFsaWRfY29kZSddID0gJ1ZhbGlkIENvZGUgTWVzc2FnZSc7CiRsYW5nWydwcm9tcHRfbmFtZSddID0gJ05hbWUnOwokbGFuZ1sncHJvbXB0X29mZmVyJ10gPSAnT2ZmZXInOwokbGFuZ1sncHJvbXB0X29mZmVyX2RhdGEnXSA9ICdPZmZlciBEYXRhJzsKJGxhbmdbJ3Byb21wdF9vZmZlcl90eXBlJ10gPSAnT2ZmZXIgVHlwZSc7CiRsYW5nWydwcm9tcHRfb2ZmZXJzJ10gPSAnT2ZmZXJzJzsKJGxhbmdbJ3Byb21wdF9wZXJjZW50YWdlX2Rpc2NvdW50J10gPSAnUGVyY2VudCBEaXNjb3VudCA8ZW0+KGV4cHJlc3NlZCBhcyBhIGRlY2ltYWwgZnJvbSAwIHRvIDEpPC9lbT4nOwokbGFuZ1sncHJvbXB0X3ByaWNlX2Rpc2NvdW50J10gPSAnU3BlY2lmeSB0aGUgZG9sbGFyIGZpZ3VyZSB0byByZW1vdmUgZnJvbSB0aGUgb3JkZXInOwokbGFuZ1sncHJvbXB0X3N0YXJ0X2RhdGUnXSA9ICdTdGFydCBEYXRlJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ3Byb21wdF90eXBlJ10gPSAnVHlwZSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9DT1VQT04nXSA9ICdDb3Vwb24gQ29kZSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9GRVUnXSA9ICdGRVUgR3JvdXAgTmFtZSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCddID0gJ01pbmltdW0gT3JkZXIgQW1vdW50JzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1dFSUdIVCddID0gJ01pbmltdW0gT3JkZXIgV2VpZ2h0JzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1BST0RJRCddID0gJ1Byb2R1Y3QgSWQnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfUFJPRFNLVSddID0gJ1Byb2R1Y3QgU0tVJzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1BST0RDQVQnXSA9ICdQcm9kdWN0IENhdGVnb3J5JzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1BST0RISUVSJ10gPSAnUHJvZHVjdCBIaWVyYXJjaHknOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFJ10gPSAnUHJvZHVjdCBTS1UnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFMiddID0gJ01pbmltdW0gUXVhbnRpdHknOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDNfUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UJ10gPSAnRGlzY291bnQgUGVyY2VudGFnZSA8ZW0+KGV4cHJlc3NlZCBhcyBhIHZhbHVlIGZyb20gMC4wMCB0byAxLjAwKTwvZW0+JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzA0X1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnXSA9ICdDYXNoIERpc2NvdW50JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzAxX1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVCddID0gJ1Byb2R1Y3QgSUQgdG8gZ2l2ZSBmcmVlJzsKJGxhbmdbJ3Byb21wdG9mZmVyXzAyX1BST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UJ10gPSAnRGlzY291bnQgUGVyY2VudGFnZSA8ZW0+KGV4cHJlc3NlZCBhcyBhIHZhbHVlIGZyb20gMC4wMCB0byAxLjAwKTwvZW0+JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzA1X1BST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1QnXSA9ICdPZmZlciB0aGUgc2FtZSBwcm9kdWN0IGZyZWUgPGVtPihhbnkgdmFsdWUgaGVyZSBpcyB2YWxpZCk8L2VtPic7CiRsYW5nWydwcm9tcHRvZmZlcl8wNl9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UnXSA9ICdQcm9kdWN0IFNLVShzKSB0aGF0IGFyZSBmcmVlIHdpdGggdGhlIG9yZGVyIChvbmx5IHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtIGluIHRoZSBjYXJ0IHdpbGwgYmUgZGlzY291bnRlZCknOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDdfUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UJ10gPSAnRGlzY291bnQgYW1vdW50IDxlbT4oZXhwcmVzc2VkIGFzIGEgdmFsdWUsIGNhbm5vdCBleGNlZWQgdGhlIHByb2R1Y3RzIHByaWNlLjwvZW0+JzsKCiNRCgoKI1IKJGxhbmdbJ3JlYWxseV9kZWxldGVfcHJvbW90aW9uJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHByb21vdGlvbj8nOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBtb2R1bGU/IFByb2NlZWRpbmcgd2lsbCBwZXJtYW5lbnRseSByZW1vdmUgYWxsIG9mIHlvdXIgcHJvbW90aW9ucyBkYXRhIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBhIHdvcmtpbmcgZS1jb21tZXJjZSB3ZWJzaXRlLic7CiRsYW5nWydyZXNldHRvZmFjdG9yeSddID0gJ1Jlc2V0IFRvIEZhY3RvcnkgRGVmYXVsdHMnOwoKI1MKJGxhbmdbJ3N1Ym1pdCddID0gJ1N1Ym1pdCc7CgojVAokbGFuZ1sndGl0bGVfY291cG9uZm9ybV9kZmx0dGVtcGxhdGUnXSA9ICdTeXN0ZW0gRGVmYXVsdCBDb3Vwb24gRm9ybSBUZW1wbGF0ZSc7CiRsYW5nWyd0eXBlJ10gPSAnVHlwZSc7CgojVQoKCiNWCgoKI1cKJGxhbmdbJ3dhcm5faW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBwcm9tb3Rpb25zIHdpbGwgbm90IHdvcmsgd2l0aCB3aGVuIHVzaW5nIHRoZSAmcXVvdDtDYXJ0JnF1b3Q7IG1vZHVsZS4nOwokbGFuZ1snd2FybmluZ19ub19jb25kaXRpb25zJ10gPSAnWW91IGhhdmUgbm90IHNwZWNpZmllZCBhbnkgY29uZGl0aW9ucyBmb3IgdGhpcyBvZmZlciAob3RoZXIgdGhhbiBhIHN0YXJ0IGFuZCBlbmQgZGF0ZSkuICBDbGljayBPSyB0byBjb250aW51ZSwgb3IgQ2FuY2VsIHRvIGNvcnJlY3QgdGhpcyc7CgojWAoKCiNZCgoKI1oKCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.condition_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZmluYWwgY2xhc3MgY29uZGl0aW9uX3Rlc3RzCnsKICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgLyoqCiAgICogVGVzdCB0aGlzIGNvbmRpdGlvbiB0byBzZWUgaWYgaXQgaXMgYW4gRkVVIGdyb3VwIGNvbmRpdGlvbgogICAqIGFuZCBpZiB0aGUgdXNlciBpZCBzcGVjaWZpZWQgKG9yIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCkKICAgKiBtYXRjaGVzCiAgICoKICAgKiByZXR1cm4gVFJVRSBvbiBtYXRjaCwgRkFMU0Ugb3RoZXJ3aXNlCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0ZXN0X2ZldV91aWQocHJvbW90aW9uX2NvbmRpdGlvbiAkY29uZGl0aW9uLCRmZXVfdWlkID0gLTEpCiAgewogICAgaWYoICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSAhPSBQUk9NT1RJT05TX0NPTkRfRkVVICkgcmV0dXJuIEZBTFNFOwoKICAgICRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldSApIHJldHVybiBGQUxTRTsKICAgIGlmKCAkZmV1X3VpZCA9PSAtMSApICRmZXVfdWlkID0gJGZldS0+TG9nZ2VkSW5JZCgpOyAKICAgIGlmKCAkZmV1X3VpZCA8PSAwICkgcmV0dXJuIEZBTFNFOwoKICAgIC8vIGJ1aWxkIGEgbGlzdCBvZiBtZW1iZXIgZ3JvdXAgbmFtZXMKICAgICRhbGxncm91cHMgPSAkZmV1LT5HZXRHcm91cExpc3QoKTsKICAgICRhbGxncm91cHMgPSBhcnJheV9mbGlwKCRhbGxncm91cHMpOwogICAgJG1lbWJlcl9vZiA9ICRmZXUtPkdldE1lbWJlckdyb3Vwc0FycmF5KCRmZXVfdWlkKTsKICAgIGlmKCAhJG1lbWJlcl9vZiApIHJldHVybiBGQUxTRTsKICAgICRtZW1iZXJfb2YgPSBjZ2VfYXJyYXk6OmV4dHJhY3RfZmllbGQoJG1lbWJlcl9vZiwnZ3JvdXBpZCcpOwogICAgJG1lbWJlcl9ncm91cF9uYW1lcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkbWVtYmVyX29mIGFzICRtZ2lkICkgewogICAgICAkbWVtYmVyX2dyb3VwX25hbWVzW10gPSAkYWxsZ3JvdXBzWyRtZ2lkXTsKICAgIH0KCiAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIGNvbmRpdGlvbiwgYXMgYW4gYXJyYXkgb2YgdHJpbW1lZCBncm91cCBuYW1lcwogICAgJGRhdGEgPSBleHBsb2RlKCcsJywkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKICAgIGZvciggJGogPSAwOyAkaiA8IGNvdW50KCRkYXRhKTsgJGorKyApIHsKICAgICAgJGRhdGFbJGpdID0gdHJpbSgkZGF0YVskal0pOwogICAgfQoKICAgIC8vIG5vdyBkbyBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiBtZW1iZXIgZ3JvdXBvIG5hbWVzCiAgICAvLyBhbmQgdGhlIGRhdGEgZ3JvdXAgbmFtZXMuCiAgICAkcmVzID0gYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJfZ3JvdXBfbmFtZXMsJGRhdGEpOwogICAgaWYoIGNvdW50KCRyZXMpICkgcmV0dXJuIFRSVUU7CiAgICAKICAgIHJldHVybiBGQUxTRTsKICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvY2xhc3MucHJvbW9fb3BzLnBocCcpOwoKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfRkVVJywnUFJPTU9USU9OU19DT05EX0ZFVScpOyAgICAgICAvLyBGRVUgZ3JvdXAgbWVtYmVyc2hpcApkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCcsJ1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCcpOyAgIC8vIE9yZGVyIHRvdGFsIChwcmUgc2hpcHBpbmcgYW5kIHRheGVzKQpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9XRUlHSFQnLCdQUk9NT1RJT05TX0NPTkRfV0VJR0hUJyk7IC8vIE9yZGVyIHdlaWdodCAKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPRElEJywnUFJPTU9USU9OU19DT05EX1BST0RJRCcpOyAvLyBPcmRlciBoYXMgYSBjZXJ0YWluIHByb2R1Y3QgaWQKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPRENBVCcsJ1BST01PVElPTlNfQ09ORF9QUk9EQ0FUJyk7IC8vIE9yZGVyIGhhcyBhIHByb2R1Y3QgZnJvbSBhIGNlcnRhaW4gY2F0ZWdvcnkKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPREhJRVInLCdQUk9NT1RJT05TX0NPTkRfUFJPREhJRVInKTsgLy8gT3JkZXIgaGFzIGEgcHJvZHVjdCBmcm9tIGEgY2VydGFpbiBoaWVyYXJjaHkKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfUFJPRFNLVScsJ1BST01PVElPTlNfQ09ORF9QUk9EU0tVJyk7IC8vIE9yZGVyIGhhcyBhIGNlcnRhaW4gcHJvZHVjdCBza3UKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfQ09VUE9OJywnUFJPTU9USU9OU19DT05EX0NPVVBPTicpOyAvLyBPcmRlciBoYXMgYSBwcm9kdWN0IGZyb20gYSBjZXJ0YWluIGhpZXJhcmNoeQpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UnLCdQUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFJyk7IC8vIE9yZGVyIGhhcyBhIG1pbnVtdW0gcHVyY2hhc2Ugb2YgTiBxdWFudGl0eSBvZiBzcGVjaWZpYyBTS1UKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX1BST0RVQ1QnLCcwMV9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1QnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVCcsJzAyX1BST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UJywnMDNfUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVCcsJzA0X1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUJywnMDVfUFJPTU9USU9OU19PRkZFUl9TQU1FUFJPRFVDVCcpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVScsJzA2X1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVScpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCcsJzA3X1BST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCcpOwoKY2xhc3MgcHJvbW90aW9uX2NvbmRpdGlvbgp7CiAgcHJpdmF0ZSAkX2lkOwogIHByaXZhdGUgJF9wcm9tb3Rpb25faWQ7CiAgcHJpdmF0ZSAkX2NvbmRfdHlwZTsKICBwcml2YXRlICRfZGF0YTsKCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfdHlwZXNfYXJyYXkoJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQpCiAgewogICAgc3dpdGNoKCAkdHlwZSApIHsKICAgIGNhc2UgcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ6CiAgICAgIHJldHVybiBhcnJheShQUk9NT1RJT05TX0NPTkRfRkVVLFBST01PVElPTlNfQ09ORF9QUk9ESUQsCgkJICAgUFJPTU9USU9OU19DT05EX1BST0RDQVQsUFJPTU9USU9OU19DT05EX1BST0RISUVSLAoJCSAgIFBST01PVElPTlNfQ09ORF9DT1VQT04sUFJPTU9USU9OU19DT05EX1BST0RTS1UsCgkJICAgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSk7CiAgICBjYXNlIHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDoKICAgICAgcmV0dXJuIGFycmF5KFBST01PVElPTlNfQ09ORF9GRVUsUFJPTU9USU9OU19DT05EX1NVQlRPVEFMLFBST01PVElPTlNfQ09ORF9QUk9ESUQsCgkJICAgUFJPTU9USU9OU19DT05EX1BST0RDQVQsUFJPTU9USU9OU19DT05EX1BST0RISUVSLAoJCSAgIFBST01PVElPTlNfQ09ORF9DT1VQT04sUFJPTU9USU9OU19DT05EX1dFSUdIVCwKCQkgICBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSwKCQkgICBQUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFKTsKICAgIH0KICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfaWQoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2lkOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9pZCgkaWQpCiAgewogICAgJHRoaXMtPl9pZCA9ICRpZDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcHJvbW90aW9uX2lkKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9wcm9tb3Rpb25faWQ7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3Byb21vdGlvbl9pZCgkaWQpCiAgewogICAgJHRoaXMtPl9wcm9tb3Rpb25faWQgPSAkaWQ7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbmRfdHlwZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fY29uZF90eXBlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9jb25kX3R5cGUoJHR5cGUpCiAgewogICAgaWYoICR0eXBlID09IFBST01PVElPTlNfQ09ORF9GRVUgfHwJJHR5cGUgPT0gUFJPTU9USU9OU19DT05EX1NVQlRPVEFMIHx8ICR0eXBlID09IFBST01PVElPTlNfQ09ORF9XRUlHSFQgfHwKCSR0eXBlID09IFBST01PVElPTlNfQ09ORF9DT1VQT04gfHwgJHR5cGUgPT0gUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSB8fCAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPRElEIHx8CgkkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVCB8fCAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSB8fAkkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVIgKQogICAgICAkdGhpcy0+X2NvbmRfdHlwZSA9ICR0eXBlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9kYXRhKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9kYXRhOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9kYXRhKCRkYXRhKQogIHsKICAgICR0aGlzLT5fZGF0YSA9ICRkYXRhOwogIH0KfSAvLyBjbGFzcwoKCmNsYXNzIHByb21vdGlvbgp7CiAgcHJpdmF0ZSAkX2lkOwogIHByaXZhdGUgJF9uYW1lOwogIHByaXZhdGUgJF9kZXNjcmlwdGlvbjsKICBwcml2YXRlICRfaW1hZ2U7CiAgcHJpdmF0ZSAkX2NyZWF0ZWQ7CiAgcHJpdmF0ZSAkX3N0YXJ0X2RhdGU7CiAgcHJpdmF0ZSAkX2VuZF9kYXRlOwogIHByaXZhdGUgJF9vZmZlcl90eXBlOwogIHByaXZhdGUgJF9vZmZlcl9kYXRhOwogIHByaXZhdGUgJF9jb25kaXRpb25zOwogIHByaXZhdGUgJF9pdGVtX29yZGVyOwogIHByaXZhdGUgJF90eXBlOwogIHByaXZhdGUgc3RhdGljICRfdHlwZV9jYWNoZTsKICBwcml2YXRlICRfZXh0cmE7CgogIGNvbnN0IFRZUEVfSU5TVEFOVCA9ICdwcm9tb190eXBlX2luc3RhbnQnOwogIGNvbnN0IFRZUEVfQ0hFQ0tPVVQgPSAncHJvbW9fdHlwZV9jaGVja291dCc7CgogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgewogICAgJHRoaXMtPl90eXBlID0gc2VsZjo6VFlQRV9DSEVDS09VVDsKICB9CgogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3R5cGVzX2FycmF5KCkKICB7CiAgICByZXR1cm4gYXJyYXkoc2VsZjo6VFlQRV9JTlNUQU5ULHNlbGY6OlRZUEVfQ0hFQ0tPVVQpOwogIH0KCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfb2ZmZXJfYXJyYXkoJHR5cGUgPSBzZWxmOjpUWVBFX0NIRUNLT1VUKQogIHsKICAgIHN3aXRjaCggJHR5cGUgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgcmV0dXJuIGFycmF5KFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVCxQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UsCgkJICAgUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQsUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UKTsKCiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgIHJldHVybiBhcnJheShQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQsUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVCxQUk9NT1RJT05TX09GRkVSX1BST0RVQ1QsUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVLAoJCSAgIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5ULFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCk7CiAgICB9CiAgfQoKICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9vZmZlcl9leHRyYV9tYXAoKQogIHsKICAgICRyZXMgPSBhcnJheSgpOwogICAgJHJlc1tQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RdID0gYXJyYXkoYXJyYXkoJ25hbWUnPT4nb25seV9vbmUnLCd0eXBlJz0+J2NoZWNrYm94JywnbGFiZWwnPT4nbGJsX29ubHlvbmUnKSk7CiAgICAkcmVzW1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVV0gPSBhcnJheShhcnJheSgnbmFtZSc9Pidvbmx5X29uZScsJ3R5cGUnPT4nY2hlY2tib3gnLCdsYWJlbCc9PidsYmxfb25seW9uZScpKTsKICAgIHJldHVybiAkcmVzOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9pZCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5faWQ7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2lkKCR2YWwpCiAgewogICAgJHRoaXMtPl9pZCA9ICR2YWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X25hbWU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X25hbWUoJHZhbCkKICB7CiAgICAkdGhpcy0+X25hbWUgPSAkdmFsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZGVzY3JpcHRpb247CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2Rlc2NyaXB0aW9uKCR2YWwpCiAgewogICAgJHRoaXMtPl9kZXNjcmlwdGlvbiA9ICR2YWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ltYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9pbWFnZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfaW1hZ2UoJHZhbCkKICB7CiAgICBpZiggZW1wdHkoJHZhbCkgfHwgKGlzX2ludCgkdmFsKSAmJiAoJHZhbCA8IDEpKSApIHJldHVybiBGQUxTRTsKICAgICR0aGlzLT5faW1hZ2UgPSAkdmFsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF90eXBlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl90eXBlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF90eXBlKCR2YWwpCiAgewogICAgc3dpdGNoKCAkdmFsICkgewogICAgY2FzZSBzZWxmOjpUWVBFX0lOU1RBTlQ6CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0aGlzLT5fdHlwZSA9ICR2YWw7CiAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9jcmVhdGVkKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9jcmVhdGVkOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9jcmVhdGVkKCR2YWwpCiAgewogICAgJHRoaXMtPl9jcmVhdGVkID0gJHZhbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfaXRlbV9vcmRlcigpCiAgewogICAgcmV0dXJuICR0aGlzLT5faXRlbV9vcmRlcjsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfc3RhcnRfZGF0ZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fc3RhcnRfZGF0ZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfc3RhcnRfZGF0ZSgkdmFsKQogIHsKICAgICR0aGlzLT5fc3RhcnRfZGF0ZSA9ICR2YWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2VuZF9kYXRlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9lbmRfZGF0ZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZW5kX2RhdGUoJHZhbCkKICB7CiAgICAkdGhpcy0+X2VuZF9kYXRlID0gJHZhbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfb2ZmZXJfdHlwZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fb2ZmZXJfdHlwZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfb2ZmZXJfdHlwZSgkdmFsKQogIHsKICAgICR0aGlzLT5fb2ZmZXJfdHlwZSA9ICR2YWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X29mZmVyX2RhdGEoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X29mZmVyX2RhdGE7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2V4dHJhKCRrZXksJHZhbHVlKQogIHsKICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9leHRyYSkgKSAkdGhpcy0+X2V4dHJhID0gYXJyYXkoKTsKICAgICR0aGlzLT5fZXh0cmFbJGtleV0gPSAkdmFsdWU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2V4dHJhKCRrZXkpCiAgewogICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fZXh0cmEpICYmIGlzc2V0KCR0aGlzLT5fZXh0cmFbJGtleV0pICkgcmV0dXJuICR0aGlzLT5fZXh0cmFbJGtleV07OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHVuc2V0X2V4dHJhKCRrZXkpCiAgewogICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fZXh0cmEpICYmIGlzc2V0KCR0aGlzLT5fZXh0cmFbJGtleV0pICkgdW5zZXQoJHRoaXMtPl9leHRyYVska2V5XSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJfZXh0cmEoKQogIHsKICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2V4dHJhKSApICR0aGlzLT5leHRyYSA9IG51bGw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X29mZmVyX2RhdGEoJGRhdGEpCiAgewogICAgJHRoaXMtPl9vZmZlcl9kYXRhID0gJGRhdGE7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gJmdldF9jb25kaXRpb25zKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9jb25kaXRpb25zOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGFkZF9jb25kaXRpb24oJiRjb25kaXRpb24pCiAgewogICAgaWYoICFpc19hKCRjb25kaXRpb24sJ3Byb21vdGlvbl9jb25kaXRpb24nKSApIHJldHVybiBGQUxTRTsKICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9jb25kaXRpb25zKSApCSR0aGlzLT5fY29uZGl0aW9ucyA9IGFycmF5KCk7CiAgICAkdGhpcy0+X2NvbmRpdGlvbnNbXSA9ICRjb25kaXRpb247CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZGVsX2NvbmRpdGlvbigkaWR4KQogIHsKICAgIGlmKCBpc19hcnJheSgkdGhpcy0+X2NvbmRpdGlvbnMpICYmCWNvdW50KCR0aGlzLT5fY29uZGl0aW9ucykgPiAkaWR4ICYmICRpZHggPiAwKSB7CiAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkdGhpcy0+X2NvbmRpdGlvbnMpOyAkaSsrICkgewoJaWYoICRpID09ICRpZHggKSBjb250aW51ZTsKCSR0bXBbXSA9ICR0aGlzLT5fY29uZGl0aW9uczsKICAgICAgfQogICAgICAkdGhpcy0+X2NvbmRpdGlvbnMgPSAkdG1wOwogICAgfQogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGRlbF9jb25kaXRpb25zKCkKICB7CiAgICAkdGhpcy0+X2NvbmRpdGlvbnMgPSBudWxsOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uICZnZXRfY29uZGl0aW9uKCRpZHgpCiAgewogICAgaWYoICFpc19hcnJheSgkdGhpcy0+X2NvbmRpdGlvbnMpIHx8IChjb3VudCgkdGhpcy0+X2NvbmRpdGlvbnMpIDwgJGlkeCkgfHwgKCRpZHggPCAwKSApIHsKICAgICAgJHRtcCA9IEZBTFNFOwogICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICByZXR1cm4gJHRoaXMtPl9jb25kaXRpb25zWyRpZHhdOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGNvdW50X2NvbmRpdGlvbnMoKQogIHsKICAgIHJldHVybiBjb3VudCgkdGhpcy0+X2NvbmRpdGlvbnMpOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCkKICB7CiAgICBpZiggJHRoaXMtPl9pZCApIHJldHVybiAkdGhpcy0+X3VwZGF0ZSgpOwogICAgcmV0dXJuICR0aGlzLT5faW5zZXJ0KCk7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgpCiAgewogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIFdIRVJFIHByb21vdGlvbl9pZCA9ID8nOwogICAgJHJlcyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPl9pZCkpOwogICAgLy8gbm8gZXJyb3IgaWYgdGhlcmUgYXJlIG5vIGNvbmRpdGlvbnMuCgogICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIGlkID0gPyc7CiAgICAkcmVzID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+X2lkKSk7CiAgICBpZiggISRyZXMgKSB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdFcnJvciBkZWxldGluZyBwcm9tb3Rpb24nKTsKCiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nIFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciAtIDEgV0hFUkUgaXRlbV9vcmRlciA+ID8gQU5EIHR5cGUgPSA/JzsKICAgICRyZXMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0aGlzLT5faXRlbV9vcmRlciwkdGhpcy0+X3R5cGUpKTsKICAgIGlmKCAhJHJlcyApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIGRlbGV0aW5nIHByb21vdGlvbiAodXBkYXRpbmcgaXRlbSBvcmRlciknKTsKCiAgICByZXR1cm4gVFJVRTsKICB9CgogIC8qKgogICAqIERlbGV0ZSBjb25kaXRpb25zIGZyb20gdGhlIGRhdGFiYXNlIGZvciB0aGlzIHByb21vdGlvbgogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gX2RlbF9jb25kaXRpb25zKCkKICB7CiAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuUFJPTU9USU9OU19DT05EX1RBQkxFLicgV0hFUkUgcHJvbW90aW9uX2lkID0gPyc7CiAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+Z2V0X2lkKCkpKTsKICAgIGlmKCAhJGRiciApIHJldHVybiBGQUxTRTsKICAgIHJldHVybiBUUlVFOwogIH0KCiAgLyoqCiAgICogSW5zZXJ0IGEgY29uZGl0aW9uIGludG8gdGhlIGRhdGFiYXNlIGZvciB0aGlzIHByb21vdGlvbgogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gX2luc2VydF9jb25kaXRpb24ocHJvbW90aW9uX2NvbmRpdGlvbiAkY29uZCkKICB7CiAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKICAgICRjb25kLT5zZXRfcHJvbW90aW9uX2lkKCR0aGlzLT5nZXRfaWQoKSk7CgogICAgJF9zdG9yZV9kYXRhID0gZnVuY3Rpb24oJHRtcCkgewogICAgICBpZiggaXNfYXJyYXkoJHRtcCkgKSB7CglpZiggY291bnQoJHRtcCkgPT0gMSApIHJldHVybiAkdG1wWzBdOwoJcmV0dXJuIHNlcmlhbGl6ZSgkdG1wKTsKICAgICAgfQogICAgICBlbHNlIGlmKCBpc19vYmplY3QoJHRtcCkgKSB7CglyZXR1cm4gc2VyaWFsaXplKCR0bXApOwogICAgICB9CiAgICAgIHJldHVybiAkdG1wOwogICAgfTsKCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuUFJPTU9USU9OU19DT05EX1RBQkxFLicgKHByb21vdGlvbl9pZCxjb25kX3R5cGUsZGF0YSkgVkFMVUVTICg/LD8sPyknOwogICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGNvbmQtPmdldF9wcm9tb3Rpb25faWQoKSwkY29uZC0+Z2V0X2NvbmRfdHlwZSgpLCRfc3RvcmVfZGF0YSgkY29uZC0+Z2V0X2RhdGEoKSkpKTsKICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ1NRTCBFcnJvcjogJy4kZGItPnNxbC4nIC0tICcuJGRiLT5FcnJvck1zZygpKTsKICAgIHJldHVybiBUUlVFOwogIH0KCiAgcHJpdmF0ZSBmdW5jdGlvbiBfdXBkYXRlKCkKICB7CiAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJwogICAgICAgICAgICAgICAgIFNFVCBuYW1lID0gPywgdHlwZSA9ID8sIGRlc2NyaXB0aW9uID0gPywgaW1hZ2UgPSA/LCBzdGFydF9kYXRlID0gPywgZW5kX2RhdGUgPSA/LCBvZmZlcl90eXBlID0gPywgb2ZmZXJfZGF0YSA9ID8sIGV4dHJhID0gPwogICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nOwogICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksCgkJCWFycmF5KCR0aGlzLT5nZXRfbmFtZSgpLCAkdGhpcy0+Z2V0X3R5cGUoKSwgJHRoaXMtPmdldF9kZXNjcmlwdGlvbigpLCAkdGhpcy0+Z2V0X2ltYWdlKCksCgkJCSAgICAgIGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X3N0YXJ0X2RhdGUoKSksIGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X2VuZF9kYXRlKCkpLAoJCQkgICAgICAkdGhpcy0+Z2V0X29mZmVyX3R5cGUoKSwgJHRoaXMtPmdldF9vZmZlcl9kYXRhKCksIHNlcmlhbGl6ZSgkdGhpcy0+X2V4dHJhKSwKCQkJICAgICAgJHRoaXMtPmdldF9pZCgpKSApOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignU1FMIEVycm9yOiAnLiRkYi0+c3FsLicgLS0gJy4kZGItPkVycm9yTXNnKCkpOwoKICAgIC8vIGluc2VydCB0aGUgY29uZGl0aW9ucwogICAgc2VsZjo6X2RlbF9jb25kaXRpb25zKCk7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkdGhpcy0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZCA9ICR0aGlzLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgaWYoICEkY29uZCApIGNvbnRpbnVlOwogICAgICBzZWxmOjpfaW5zZXJ0X2NvbmRpdGlvbigkY29uZCk7CiAgICB9CgogICAgcmV0dXJuICR0aGlzLT5nZXRfaWQoKTsKICB9CgoKICBwcml2YXRlIGZ1bmN0aW9uIF9pbnNlcnQoKQogIHsKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkcXVlcnkgPSAnU0VMRUNUIE1BWChpdGVtX29yZGVyKSBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIHR5cGUgPSA/JzsKICAgICRpdGVtX29yZGVyID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCR0aGlzLT5nZXRfdHlwZSgpKSk7CiAgICBpZiggJGl0ZW1fb3JkZXIgPT0gJycgKSAkaXRlbV9vcmRlciA9IDA7CiAgICAkaXRlbV9vcmRlcisrOwoKICAgICRub3cgPSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSk7CiAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5QUk9NT1RJT05TX1RBQkxFLiIKICAgICAgKG5hbWUsdHlwZSxkZXNjcmlwdGlvbixpbWFnZSxjcmVhdGVkLHN0YXJ0X2RhdGUsZW5kX2RhdGUsb2ZmZXJfdHlwZSxvZmZlcl9kYXRhLGl0ZW1fb3JkZXIsZXh0cmEpCiAgICAgIFZBTFVFUyAoPyw/LD8sPywkbm93LD8sPyw/LD8sPyw/KSI7CiAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwKCQkJYXJyYXkoJHRoaXMtPmdldF9uYW1lKCksICR0aGlzLT5nZXRfdHlwZSgpLCAkdGhpcy0+Z2V0X2Rlc2NyaXB0aW9uKCksICR0aGlzLT5nZXRfaW1hZ2UoKSwKCQkJICAgICAgY2dlX3V0aWxzOjpkYl90aW1lKCR0aGlzLT5nZXRfc3RhcnRfZGF0ZSgpKSwgY2dlX3V0aWxzOjpkYl90aW1lKCR0aGlzLT5nZXRfZW5kX2RhdGUoKSksCgkJCSAgICAgICR0aGlzLT5nZXRfb2ZmZXJfdHlwZSgpLCAkdGhpcy0+Z2V0X29mZmVyX2RhdGEoKSwgJGl0ZW1fb3JkZXIsCgkJCSAgICAgIHNlcmlhbGl6ZSgkdGhpcy0+X2V4dHJhKSkpOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignU1FMIEVycm9yOiAnLiRkYi0+c3FsLicgLS0gJy4kZGItPkVycm9yTXNnKCkpOwogICAgJHRoaXMtPl9pZCA9ICRkYi0+SW5zZXJ0X0lEKCk7CgogICAgLy8gaW5zZXJ0IHRoZSBjb25kaXRpb25zCiAgICBmb3IoICRpID0gMDsgJGkgPCAkdGhpcy0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZCA9ICR0aGlzLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgaWYoICEkY29uZCApIGNvbnRpbnVlOwogICAgICBzZWxmOjpfaW5zZXJ0X2NvbmRpdGlvbigkY29uZCk7CiAgICB9CiAgICByZXR1cm4gJHRoaXMtPl9pZDsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdmFsaWQoKQogIHsKICAgICRzdCA9IGNnZV91dGlsczo6dW5peF90aW1lKCR0aGlzLT5nZXRfc3RhcnRfZGF0ZSgpKTsKICAgICRldCA9IGNnZV91dGlsczo6dW5peF90aW1lKCR0aGlzLT5nZXRfZW5kX2RhdGUoKSk7CiAgICAkY3IgPSBjZ2VfdXRpbHM6OnVuaXhfdGltZSgkdGhpcy0+Z2V0X2NyZWF0ZWQoKSk7CgogICAgaWYoICRzdCA8ICRjciApIHJldHVybiBGQUxTRTsKICAgIGlmKCAkZXQgPD0gJHN0ICkgcmV0dXJuIEZBTFNFOwogICAgaWYoIGVtcHR5KCR0aGlzLT5fbmFtZSkgKSByZXR1cm4gRkFMU0U7CiAgICBpZiggZW1wdHkoJHRoaXMtPl9vZmZlcl9kYXRhKSApIHJldHVybiBGQUxTRTsKCiAgICByZXR1cm4gVFJVRTsKICB9CgogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uICZfbG9hZF9mcm9tX2RhdGEoJGRhdGEpCiAgewogICAgJHJlcyA9IG51bGw7CiAgICBpZiggIWlzX2FycmF5KCRkYXRhKSB8fCBjb3VudCgkZGF0YSkgPT0gMCApIHJldHVybiAkcmVzOwogICAgaWYoICFpc3NldCgkZGF0YVsncmF3X2NvbmRpdGlvbnMnXSkgKSByZXR1cm4gJHJlczsKCiAgICAkcHJvbW8gPSBuZXcgcHJvbW90aW9uKCk7CiAgICBmb3JlYWNoKCAkZGF0YSBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICAgICAgaWYoICRrZXkgPT0gJ3Jhd19jb25kaXRpb25zJyApIGNvbnRpbnVlOwogICAgICAkbSA9ICdfJy4ka2V5OwogICAgICBpZiggJGtleSA9PSAnZXh0cmEnICkgJHZhbHVlID0gdW5zZXJpYWxpemUoJHZhbHVlKTsKICAgICAgJHByb21vLT4kbSA9ICR2YWx1ZTsKICAgIH0KCiAgICBmb3JlYWNoKCAkZGF0YVsncmF3X2NvbmRpdGlvbnMnXSBhcyAkcm93ICkgewogICAgICAkY29uZF9vYiA9IG5ldyBwcm9tb3Rpb25fY29uZGl0aW9uKCk7CiAgICAgIGZvcmVhY2goICRyb3cgYXMgJGtleSA9PiAkdmFsdWUgKSB7CgkkZnVuID0gJ3NldF8nLiRrZXk7CgkkY29uZF9vYi0+JGZ1bigkdmFsdWUpOwogICAgICB9CiAgICAgICRwcm9tby0+YWRkX2NvbmRpdGlvbigkY29uZF9vYik7CiAgICB9CiAgICByZXR1cm4gJHByb21vOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiAmbG9hZF9ieV9pZCgkaWQpCiAgewogICAgaWYoICgkaWQgPD0gMCkgfHwgIWlzX251bWVyaWMoJGlkKSApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Nhbm5vdCBsb2FkIGludmFsaWQgcHJvbW90aW9uIGlkICcuJGlkKTsKCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgaWQgPSA/JzsKICAgICRyb3cgPSAkZGItPkdldFJvdygkcXVlcnksYXJyYXkoKGludCkkaWQpKTsKICAgIGlmKCAhJHJvdyApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ1Byb2JsZW0gbG9hZGluZyBwcm9tb3Rpb24gd2l0aCBpZCAnLiRpZCk7CgogICAgLy8gbG9hZCBjb25kaXRpb25zLgogICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEUuJyBXSEVSRSBwcm9tb3Rpb25faWQgPSA/JzsKICAgICRkYXRhID0gJGRiLT5HZXRBcnJheSgkcXVlcnksYXJyYXkoKGludCkkaWQpKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRkYXRhKTsgJGkrKyApIHsKICAgICAgJHRtcCA9IEB1bnNlcmlhbGl6ZSgkZGF0YVskaV1bJ2RhdGEnXSk7CiAgICAgIGlmKCAkdG1wICkgJGRhdGFbJGldWydkYXRhJ10gPSAkdG1wOwogICAgfQogICAgJHJvd1sncmF3X2NvbmRpdGlvbnMnXSA9ICRkYXRhOwoKICAgIHJldHVybiBzZWxmOjpfbG9hZF9mcm9tX2RhdGEoJHJvdyk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRfYWxsX2J5X3R5cGUoJHR5cGUsJG9ubHl2YWxpZCA9IFRSVUUpCiAgewogICAgc3dpdGNoKCAkdHlwZSApIHsKICAgIGNhc2UgcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ6CiAgICBjYXNlIHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDoKICAgICAgaWYoIGlzc2V0KHNlbGY6OiRfdHlwZV9jYWNoZVskdHlwZV0pICkgcmV0dXJuIHNlbGY6OiRfdHlwZV9jYWNoZVskdHlwZV07CgogICAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSB0eXBlID0gPyc7CiAgICAgIGlmKCAkb25seXZhbGlkICkgewoJJGRhdGUgPSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSk7CgkkcXVlcnkgLj0gIiBBTkQgKHN0YXJ0X2RhdGUgPD0gJGRhdGUpIEFORCAoZW5kX2RhdGUgPj0gJGRhdGUpIjsKICAgICAgfQogICAgICAkcXVlcnkgLj0gJyBPUkRFUiBCWSBpdGVtX29yZGVyIEFTQyc7CiAgICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0eXBlKSk7CiAgICAgICRpZHMgPSBhcnJheSgpOwogICAgICB3aGlsZSggISRkYnItPkVPRiApIHsKCSRyb3cgPSAkZGJyLT5maWVsZHM7CglpZiggIWluX2FycmF5KCRyb3dbJ2lkJ10sJGlkcykgKSAkaWRzW10gPSAoaW50KSRyb3dbJ2lkJ107CgkkZGJyLT5Nb3ZlTmV4dCgpOwogICAgICB9CiAgICAgICRkYnItPk1vdmVGaXJzdCgpOwoKICAgICAgJGRicjIgPSBudWxsOwogICAgICBpZiggaXNfYXJyYXkoJGlkcykgJiYgY291bnQoJGlkcykgKSB7CgkkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIFdIRVJFIHByb21vdGlvbl9pZCBJTiAoJy5pbXBsb2RlKCcsJywkaWRzKS4nKSBPUkRFUiBCWSBwcm9tb3Rpb25faWQgQVNDJzsKCSRkYnIyID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwogICAgICB9CgogICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgd2hpbGUoICEkZGJyLT5FT0YgKSB7Cgkkcm93ID0gJGRici0+ZmllbGRzOwoJZm9yZWFjaCggJGRicjIgYXMgJHJvdzIgKSB7CgkgIGlmKCAkcm93MlsncHJvbW90aW9uX2lkJ10gPCAkcm93WydpZCddICkgY29udGludWU7CgkgIGlmKCAkcm93MlsncHJvbW90aW9uX2lkJ10gPiAkcm93WydpZCddICkgYnJlYWs7CgoJICAkdG1wID0gQHVuc2VyaWFsaXplKCRyb3cyWydkYXRhJ10pOwoJICBpZiggJHRtcCApICRyb3cyWydkYXRhJ10gPSAkdG1wOwoKCSAgaWYoICFpc3NldCgkcm93WydyYXdfY29uZGl0aW9ucyddKSApICRyb3dbJ3Jhd19jb25kaXRpb25zJ10gPSBhcnJheSgpOwoJICAkcm93WydyYXdfY29uZGl0aW9ucyddW10gPSAkcm93MjsKCX0KCSRvdXRbXSA9IHNlbGY6Ol9sb2FkX2Zyb21fZGF0YSgkcm93KTsKCSRkYnItPk1vdmVOZXh0KCk7CiAgICAgIH0KCiAgICAgIGlmKCAhaXNfYXJyYXkoc2VsZjo6JF90eXBlX2NhY2hlKSApIHNlbGY6OiRfdHlwZV9jYWNoZSA9IGFycmF5KCk7CiAgICAgIHNlbGY6OiRfdHlwZV9jYWNoZVskdHlwZV0gPSAkb3V0OwogICAgICByZXR1cm4gJG91dDsKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdJbnZhbGlkIHByb21vdGlvbiB0eXBlICcuJHR5cGUpOwogICAgfQogIH0KCgp9IC8vIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></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[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLy8gdGhpcyBjbGFzcyB0ZXN0cyBhbGwgcHJvbW90aW9ucyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZSBhZ2FpbnN0IHRoZSBpdGVtLCBhbmQgdGhlIGNhcnQuCmNsYXNzIHByb21vdGlvbl90ZXN0ZXIgZXh0ZW5kcyBjZ19lY29tbV9wcm9tb3Rpb25fdGVzdGVyCnsKICBwcml2YXRlICRfY291cG9uczsKICBwcml2YXRlICRfZmV1X3VpZDsKCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgJHRoaXMtPl9jb3Vwb25zID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwoKICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmV1X3VpZCgpCiAgewogICAgJHggPSBwYXJlbnQ6OmdldF9mZXVfdWlkKCk7CiAgICBpZiggJHggPiAwICkgcmV0dXJuICR4OwoKICAgICRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAkZmV1ICkgewogICAgICAkeCA9ICRmZXUtPkxvZ2dlZEluSWQoKTsKICAgICAgaWYoICR4ID4gMCApICR0aGlzLT5zZXRfZmV1X3VpZCgkeCk7CiAgICB9CiAgICByZXR1cm4gJHg7CiAgfQoKICAvKioKICAgKiB0ZXN0cyBpZiBwcm9kdWN0IG1hdGNoZXMgYW55IHByb21vdGlvbnMgdGhhdCBtYXRjaCBzZXQgY3JpdGVyaWEuCiAgICogKHByb2R1Y3QgbXVzdCBiZSBzZXQpLiAgU3RvcHMgYWZ0ZXIgdGhlIGZpcnN0IG1hdGNoCiAgICoKICAgKiBAcmV0dXJuIGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX21hdGNoKCkKICB7CiAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgIHN3aXRjaCggJHRoaXMtPmdldF9wcm9tb190eXBlKCkgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDsKICAgICAgYnJlYWs7CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgJG1hdGNoID0gbnVsbDsKICAgICRwcm9tb3MgPSBwcm9tb3Rpb246OmxvYWRfYWxsX2J5X3R5cGUoJHR5cGUpOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAgJHByb21vICkgewogICAgICAkdGVzdGVyID0gbmV3IHByb21vX3Rlc3RlcigkcHJvbW8pOwogICAgICBpZiggJHRoaXMtPmdldF9za3UoKSApICR0ZXN0ZXItPnNldF9za3UoJHRoaXMtPmdldF9za3UoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9pZ25vcmVfZGlzY291bnRlZCgkdGhpcy0+Z2V0X2lnbm9yZV9kaXNjb3VudGVkKCkpOwogICAgICAkdGVzdGVyLT5zZXRfcHJvZHVjdCgkdGhpcy0+Z2V0X3Byb2R1Y3QoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9xdWFudGl0eSgkdGhpcy0+Z2V0X3F1YW50aXR5KCkpOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgIGlmKCAkdGVzdGVyLT5maW5kX21hdGNoKCkgKSB7CgkvLyB0aGlzIHByb21vdGlvbiBtYXRjaGVzLgoJLy8gbmVlZCB0byBwYXJzZSB0aGUgb2ZmZXIuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJaWYoICR0eXBlID09IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UICkgewoJICBzd2l0Y2goICRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSApIHsKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKCSAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CgkgICAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICAgJGFtdCA9ICR0aGlzLT5nZXRfcHJpY2UoKSAqICRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqIC0xOwoJICAgICRtYXRjaC0+c2V0X2Rpc2NvdW50X2FtdCgkYW10KTsKCSAgICBicmVhazsKCgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UOgoJICAgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9ESVNDT1VOVCk7CgkgICAgJG1hdGNoLT5zZXRfZGlzY291bnRfYW10KCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICAgYnJlYWs7CgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CgkgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAgIGJyZWFrOwoKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CgkgICAgLy8gYSBmcmVlIHByb2R1Y3QKCSAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUFJPRFVDVElEKTsKCSAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgICBicmVhazsKCgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgoJICAgIC8vIGEgZnJlZSBwcm9kdWN0CgkgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RTS1UpOwoJICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAgIGJyZWFrOwoKCSAgZGVmYXVsdDoKCSAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ29mZmVyIG9mIHR5cGUgJy4kcHJvbW8tPmdldF9vZmZlcl90eXBlKCkuJyBpcyBpbnZhbGlkIGZvciBwcm9tb3Rpb24gb2YgdHlwZSAnLiR0eXBlKTsKCSAgfQoJfQoJZWxzZSB7CgkgIHN3aXRjaCggJHByb21vdGlvbi0+Z2V0X29mZmVyX3R5cGUoKSApIHsKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNURElTQ09VTlQ6CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9TQU1FUFJPRFVDVDoKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CgkgICAgZGllKCdpbmNvbXBsZXRlIC0tICcuX19GSUxFX18uJyAtLSAnLl9fTElORV9fKTsKCSAgICBicmVhazsKCgkgIGRlZmF1bHQ6CgkgICAgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdvZmZlciBvZiB0eXBlICcuJHByb21vdGlvbi0+Z2V0X29mZmVyX3R5cGUoKS4nIGlzIGludmFsaWQgZm9yIHByb21vdGlvbiBvZiB0eXBlICcuJHR5cGUpOwoJICB9Cgl9CgoJcmV0dXJuICRtYXRjaDsKICAgICAgfQogICAgfQogIH0gLy8gZmluZCBtYXRjaAoKICAvKioKICAgKiBGaW5kIHRoZSBmaXJzdCBwcm9tb3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBpdGVtcyBpbiB0aGUgY2FydAogICAqCiAgICogQHJldHVybiBjZ19lY29tbV9wcm9tb3Rpb25fbWF0Y2gKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZmluZF9jYXJ0X21hdGNoKCkKICB7CiAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgIHN3aXRjaCggJHRoaXMtPmdldF9wcm9tb190eXBlKCkgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDsKICAgICAgYnJlYWs7CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgJHByb21vcyA9IHByb21vdGlvbjo6bG9hZF9hbGxfYnlfdHlwZSgkdHlwZSk7CiAgICAkbWF0Y2ggPSBudWxsOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAgJHByb21vICkgewogICAgICAkdGVzdGVyID0gbmV3IHByb21vX3Rlc3RlcigkcHJvbW8pOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgICR0ZXN0ZXItPnNldF9pZ25vcmVfZGlzY291bnRlZCgkdGhpcy0+Z2V0X2lnbm9yZV9kaXNjb3VudGVkKCkpOwoKICAgICAgJG1hdGNoX2lkeCA9IC0xOwogICAgICBpZiggJHRlc3Rlci0+ZmluZF9jYXJ0X21hdGNoKCRtYXRjaF9pZHgpICkgewoJLy8gc28gZmFyLCBzbyBnb29kLi4uIG9mZmVyIG1hdGNoZXMgdGhpcyBpdGVtLi4uIGFuZCBtYXliZSBldmVuIHRoZSBjYXJ0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RJRCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAkbWF0Y2gtPnNldF9jYXJ0X2lkeCgkbWF0Y2hfaWR4KTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgICRhbXQgPSAkdGhpcy0+Z2V0X3ByaWNlKCkgKiAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMTsKCSAgJG1hdGNoLT5zZXRfZGlzY291bnRfYW10KCRhbXQpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX0RJU0NPVU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X2Rpc2NvdW50X2FtdCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAkbWF0Y2gtPnNldF9jYXJ0X2lkeCgkbWF0Y2hfaWR4KTsKCSAgYnJlYWs7CgkgIAoJZGVmYXVsdDoKCSAgZGllKCdpZ25vcmVkJyk7CgkgIC8vIGFuIGludmFsaWQgb2ZmZXIgdHlwZSBpcyBqdXN0IGlnbm9yZWQuCgkgIGJyZWFrOwoJfQoKCXJldHVybiAkbWF0Y2g7CiAgICAgIH0KICAgIH0KICB9CgogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX2FsbF9jYXJ0X21hdGNoZXMoKQogIHsKICAgIC8vIGNvbnZlcnRzIGEgY2dfZWNvbW10eXBlIHRvIGEgcHJvbW90aW9uIHR5cGUKICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgc3dpdGNoKCAkdGhpcy0+Z2V0X3Byb21vX3R5cGUoKSApIHsKICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNUQU5UOgogICAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOwogICAgICBicmVhazsKICAgIGNhc2Ugc2VsZjo6VFlQRV9DSEVDS09VVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IENzbUludmFsaWREYXRhRXhjZXB0aW9uKCdVbmtub3duIHByb21vdGlvbiB0eXBlIGluICcuX19DTEFTU19fKTsKICAgIH0KCiAgICAkcHJvbW9zID0gcHJvbW90aW9uOjpsb2FkX2FsbF9ieV90eXBlKCR0eXBlKTsKICAgICRtYXRjaCA9IG51bGw7CiAgICAkbWF0Y2hlcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICAkcHJvbW8gKSB7CiAgICAgICR0ZXN0ZXIgPSBuZXcgcHJvbW9fdGVzdGVyKCRwcm9tbyk7CiAgICAgICR0ZXN0ZXItPnNldF9jYXJ0KCR0aGlzLT5nZXRfY2FydCgpKTsKICAgICAgJHRlc3Rlci0+c2V0X2NvdXBvbnMoJHRoaXMtPl9jb3Vwb25zKTsKICAgICAgJHRlc3Rlci0+c2V0X2lnbm9yZV9kaXNjb3VudGVkKCR0aGlzLT5nZXRfaWdub3JlX2Rpc2NvdW50ZWQoKSk7CgogICAgICAkbWF0Y2hfaWR4ID0gLTE7CiAgICAgIGlmKCAkdGVzdGVyLT5maW5kX2NhcnRfbWF0Y2goJG1hdGNoX2lkeCkgKSB7CgkvLyBzbyBmYXIsIHNvIGdvb2QuLi4gb2ZmZXIgbWF0Y2hlcyB0aGlzIGl0ZW0uLi4gYW5kIG1heWJlIGV2ZW4gdGhlIGNhcnQgbWF0Y2hlcyB0aGUgY29uZGl0aW9ucy4KCSRtYXRjaCA9IG5ldyBjZ19lY29tbV9wcm9tb3Rpb25fbWF0Y2g7Cglzd2l0Y2goICRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSApIHsKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUOgoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUFJPRFVDVElEKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBjYW5ub3QgYmUgY3VtdWxhdGl2ZSAoaXRzIGEgbmV3IGxpbmUgaXRlbSkKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBjYW5ub3QgYmUgY3VtdWxhdGl2ZSAoaXRzIGEgbmV3IGxpbmUgaXRlbSkKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQ6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QRVJDRU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2N1bXVsYXRpdmUoJHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X2N1bXVsYXRpdmUnKSk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX0RJU0NPVU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2N1bXVsYXRpdmUoJHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X2N1bXVsYXRpdmUnKSk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQ6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QRVJDRU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAkbWF0Y2gtPnNldF9jdW11bGF0aXZlKCRwcm9tby0+Z2V0X2V4dHJhKCdhbGxvd19jdW11bGF0aXZlJykpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX0RJU0NPVU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAkbWF0Y2gtPnNldF9jdW11bGF0aXZlKCRwcm9tby0+Z2V0X2V4dHJhKCdhbGxvd19jdW11bGF0aXZlJykpOwoJICBicmVhazsKCSAgCglkZWZhdWx0OgoJICB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdJbnZhbGlkIG9mZmVyIHR5cGUgYXQgdGhpcyBzdGFnZTogJy4kcHJvbW8tPmdldF9vZmZlcl90eXBlKCkpOwoJICBkaWUoJ2lnbm9yZWQnKTsKCSAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KCSAgYnJlYWs7Cgl9CgoJJG1hdGNoZXNbXSA9ICRtYXRjaDsKICAgICAgfQogICAgfQogICAgaWYoIGNvdW50KCRtYXRjaGVzKSApIHJldHVybiAkbWF0Y2hlczsKICB9CgogIC8qKgogICAqIHRlc3QgaWYgdGhlIHByb2R1Y3QgKG9yIHNrdSkgbWF0Y2hlcyB0aGUgb2ZmZXIgcGFydAogICAqIG9mIGEgcHJvbW90aW9uLCBhbmQgaWYgdGhlIGNhcnQgY29udGVudHMgbWF0Y2ggdGhlIGNvbmRpdGlvbnMKICAgKiBvZiB0aGUgb2ZmZXIuICBTdG9wcyBhZnRlciB0aGUgZmlyc3QgbWF0Y2guCiAgICoKICAgKiBAcmV0dXJuIGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX29mZmVyX21hdGNoKCkKICB7CiAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgIHN3aXRjaCggJHRoaXMtPmdldF9wcm9tb190eXBlKCkgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDsKICAgICAgYnJlYWs7CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgJHByb21vcyA9IHByb21vdGlvbjo6bG9hZF9hbGxfYnlfdHlwZSgkdHlwZSk7CiAgICAkbWF0Y2ggPSBudWxsOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAgJHByb21vICkgewogICAgICAvLyB0aGUgcHJvbW8gdGVzdGVyIHRlc3RzIGEgc2luZ2xlIHByb21vdGlvbiBhZ2FpbnN0IHRoZSBpdGVtIGJlaW5nIHRlc3RlZC4KICAgICAgJHRlc3RlciA9IG5ldyBwcm9tb190ZXN0ZXIoJHByb21vKTsKICAgICAgaWYoICR0aGlzLT5nZXRfc2t1KCkgKSAkdGVzdGVyLT5zZXRfc2t1KCR0aGlzLT5nZXRfc2t1KCkpOwogICAgICAkdGVzdGVyLT5zZXRfaWdub3JlX2Rpc2NvdW50ZWQoJHRoaXMtPmdldF9pZ25vcmVfZGlzY291bnRlZCgpKTsKICAgICAgJHRlc3Rlci0+c2V0X3Byb2R1Y3QoJHRoaXMtPmdldF9wcm9kdWN0KCkpOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgICRtYXRjaF9pZHggPSAtMTsKICAgICAgaWYoICR0ZXN0ZXItPmZpbmRfb2ZmZXJfbWF0Y2goKSAmJiAoJHRoaXMtPmdldF9za2lwX2NhcnQoKSB8fCAkdGVzdGVyLT5maW5kX2NhcnRfbWF0Y2goJG1hdGNoX2lkeCkpICkgewoJLy8gc28gZmFyLCBzbyBnb29kLi4uIG9mZmVyIG1hdGNoZXMgdGhpcyBpdGVtLi4uIGFuZCBtYXliZSBldmVuIHRoZSBjYXJ0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSAgLy8gZnJlZSBwcm9kdWN0IGJ5IGlkCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUSUQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgoJICAvLyBmcmVlIHByb2R1Y3QgYnkgc2t1CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgLy8gZGlzY291bnQgYXBwbGljYWJsZSBwcm9kdWN0IGJ5IGZpeGVkIGFtb3VudAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJICAvLyBkaXNjb3VudCBtYXRjaGluZyBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2UKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBub3RlLCBubyBjYXJ0IGluZGV4CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJICAvLyBwZXJjZW50YWdlIG9mZiBvcmRlciB0b3RhbAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CgkgIC8vIHN1YnRyYWN0IGFtb3VudCBmcm9tIG9yZGVyIHRvdGFsCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9ESVNDT1VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CgkgIGRpZSgnbm90IGRvbmUnKTsKCSAgYnJlYWs7CgoJZGVmYXVsdDoKCSAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KCSAgYnJlYWs7Cgl9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJG1hdGNoOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_ops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgcHJvbW9fb3BzCnsKICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiAmX2dldF9kYigpCiAgewogICAgJGdDbXMgPSBjbXNtcygpOwogICAgJGRiID0mICRnQ21zLT5HZXREYigpOwogICAgcmV0dXJuICRkYjsKICB9CgogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uICZfZ2V0X3Byb2R1Y3RzX21vZCgpCiAgewogICAgcmV0dXJuIGNtc191dGlsczo6Z2V0X21vZHVsZSgnUHJvZHVjdHMnKTsKICB9CgogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uICZfZ2V0X3Byb2R1Y3QoJHByb2R1Y3RfaWQpCiAgewogICAgJHByb2QgPSBjZ19lY29tbTo6Z2V0X3Byb2R1Y3RfaW5mbygnUHJvZHVjdHMnLCRwcm9kdWN0X2lkKTsKICAgIHJldHVybiAkcHJvZDsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gJmxvYWRfcHJvbW9fYnlfaWQoJGlkKQogIHsKICAgIHJldHVybiBwcm9tb3Rpb246OmxvYWRfYnlfaWQoJGlkKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfdmFsaWRfY291cG9uKCRjb2RlKQogIHsKICAgICRkYiA9IHNlbGY6Ol9nZXRfZGIoKTsKICAgICRxdWVyeSA9ICdTRUxFQ1QgQS5pZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIEEKICAgICAgICAgICAgICAgIExFRlQgSk9JTiAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIEIKICAgICAgICAgICAgICAgICAgT04gQS5pZCA9IEIucHJvbW90aW9uX2lkCiAgICAgICAgICAgICAgIFdIRVJFIE5PVygpIEJFVFdFRU4gQS5zdGFydF9kYXRlIEFORCBBLmVuZF9kYXRlCiAgICAgICAgICAgICAgICAgQU5EIEIuY29uZF90eXBlID0gPwogICAgICAgICAgICAgICAgIEFORCBCLmRhdGEgPSA/JzsKICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoUFJPTU9USU9OU19DT05EX0NPVVBPTiwkY29kZSkpOwogICAgcmV0dXJuICR0bXA7CiAgfQoKCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjaGVja191bnVzZWRfY291cG9uKCRuYW1lLCRhbGxvd19wcm9tbyA9ICcnKQogIHsKICAgICRkYiA9IHNlbGY6Ol9nZXRfZGIoKTsKICAgICR3aGVyZSA9IGFycmF5KCk7CiAgICAkcGFybXMgPSBhcnJheSgpOwoKICAgICR3aGVyZVtdID0gJ2NvbmRfdHlwZSA9ID8nOwogICAgJHBhcm1zW10gPSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOwogICAgJHdoZXJlW10gPSAnZGF0YSA9ID8nOwogICAgJHBhcm1zW10gPSAkbmFtZTsKICAgIGlmKCAkYWxsb3dfcHJvbW8gKSB7CiAgICAgICR3aGVyZVtdID0gJ3Byb21vdGlvbl9pZCAhPSA/JzsKICAgICAgJHBhcm1zW10gPSAkYWxsb3dfcHJvbW87CiAgICB9CiAgICAkcXVlcnkgPSAnU0VMRUNUIGlkIEZST00gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEU7CiAgICAkcXVlcnkgLj0gJyBXSEVSRSAnLmltcGxvZGUoJyBBTkQgJywkd2hlcmUpOwogICAgJHRtcCA9ICRkYi0+R2V0T25lKCRxdWVyeSwkcGFybXMpOwogICAgaWYoICR0bXAgKSByZXR1cm4gRkFMU0U7CiAgICByZXR1cm4gVFJVRTsKICB9CgoKICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGNoZWNrX3VudXNlZF9uYW1lKCRuYW1lLCRpZD0nJykKICB7CiAgICAkZ0NtcyA9IGNtc21zKCk7CiAgICAkZGIgPSAkZ0Ntcy0+R2V0RGIoKTsKCiAgICBpZiggZW1wdHkoJGlkKSApIHsKICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIG5hbWUgPSA/JzsKICAgICAgJHRtcCA9ICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgkbmFtZSkpOwogICAgICBpZiggJHRtcCApIHJldHVybiBGQUxTRTsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIG5hbWUgPSA/IEFORCBpZCAhPSA/JzsKICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJG5hbWUsJGlkKSk7CiAgICBpZiggJHRtcCApIHJldHVybiBGQUxTRTsKICAgIHJldHVybiBUUlVFOwogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsY190b3RhbF9kaXNjb3VudCgkY2FydF9pdGVtcykKICB7CiAgICAkZGlzY291bnQgPSAwOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhcnRfaXRlbXMpOyAkaSsrICkgewogICAgICAkZGlzY291bnQgKz0gJGNhcnRfaXRlbXNbJGldLT5nZXRfZGlzY291bnQoKTsKICAgIH0KICAgIHJldHVybiAkZGlzY291bnQ7CiAgfQoKCiAgLyoqCiAgICogR2l2ZW4gYSBwcm9kdWN0IGlkIGFuZCBhbiBhcHBsaWNhYmxlIChhbHJlYWR5IHRlc3RlZCkgcHJvbW90aW9uCiAgICogY2FsY3VsYXRlIHRoZSBkaXNjb3VudCAoaWYgYW55KSBmb3IgdGhpcyBwcm9kdWN0CiAgICoKICAgKiBAcGFyYW0gdGhlIHByb21vdGlvbiBvYmplY3QKICAgKiBAcGFyYW0gdGhlIHByb2R1Y3QgaWQKICAgKiBAcmV0dXJucyBGQUxTRSBvbiBmYWlsdXJlLCBvciBhIGhhc2ggY29udGFpbmluZyB0aGUgZGlmZmVyZW50CiAgICogIGRpc2NvdW50IGF0dHJpYnV0ZXMuCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWxjdWxhdGVfcHJvZHVjdF9kaXNjb3VudCgmJHByb21vLCRwcm9kdWN0X2lkKQogIHsKICAgICRwcm9kdWN0ID0gc2VsZjo6X2dldF9wcm9kdWN0KCRwcm9kdWN0X2lkKTsKICAgIGlmKCAhaXNfYXJyYXkoJHByb2R1Y3QpICkgcmV0dXJuIEZBTFNFOwoKICAgICRwZXJjZW50ID0gJyc7CiAgICAkZGlzY291bnQgPSAnJzsKICAgICRmcmVlX3Byb2R1Y3QgPSAnJzsKICAgIHN3aXRjaCggJHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpICkgewogICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CiAgICAgIC8vIHdlIGdldCBhIGZyZWUgcHJvZHVjdC4KICAgICAgJGZyZWVfcHJvZHVjdCA9ICRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQ6CiAgICAgIC8vIGNhbGN1bGF0ZSBOICUgb2ZmCiAgICAgICRwZXJjZW50ID0gJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMDsKICAgICAgYnJlYWs7CgogICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgogICAgICAvLyBjYWxjdWxhdGUgJE4gb2ZmCiAgICAgICRkaXNjb3VudCA9ICRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqIC0xLjA7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQ6CiAgICAgICRwZXJjZW50ID0gJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMDsKICAgICAgYnJlYWs7CiAgICB9CgogICAgaWYoIGVtcHR5KCRwZXJjZW50KSApIHsKICAgICAgJHBlcmNlbnQgPSAkZGlzY291bnQgLyAkcHJvZHVjdC0+Z2V0X3ByaWNlKCk7CiAgICB9CiAgICBlbHNlIGlmKCBlbXB0eSgkZGlzY291bnQpICkgewogICAgICAkZGlzY291bnQgPSAkcHJvZHVjdC0+Z2V0X3ByaWNlKCkgKiAkcGVyY2VudDsKICAgIH0KCiAgICAkcmVzID0gYXJyYXkoJ3Byb2R1Y3RfaWQnPT4kZnJlZV9wcm9kdWN0KTsKICAgICRyZXNbJ3BlcmNlbnRhZ2UnXSA9ICRwZXJjZW50OwogICAgJHJlc1snZGlzY291bnQnXSA9ICRkaXNjb3VudDsKICAgIHJldHVybiAkcmVzOwogIH0KCgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsY3VsYXRlX2Rpc2NvdW50KCYkcHJvbW8sJHN1YnRvdGFsLCRjYXJ0X2l0ZW1zKQogIHsKICAgICRuZXdfaXRlbXMgPSBhcnJheSgpOwogICAgc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CiAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKICAgICAgLy8gY2FsY3VsYXRlIE4gJSBvZmYgZWFjaCBpdGVtLi4uIGFuIGZpbGwgaW4gdGhlIGRpc2NvdW50IGZpZWxkLgogICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CgkkaXRlbSA9ICRjYXJ0X2l0ZW1zWyRpXTsKCSRpdGVtLT5zZXRfZGlzY291bnQoJGl0ZW0tPmdldF91bml0X3ByaWNlKCkgKiAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wKTsKCSRuZXdfaXRlbXNbXSA9ICRpdGVtOwogICAgICB9CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKICAgICAgLy8gY2FsY3VsYXRlICROIG9mZgogICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CgkkaXRlbSA9IGNsb25lKCRjYXJ0X2l0ZW1zWyRpXSk7CgkkbmV3X2l0ZW1zW10gPSAkaXRlbTsKICAgICAgfQogICAgICAkaXRlbSA9IG5ldyBsaW5lX2l0ZW0oKTsKICAgICAgJGl0ZW0tPnNldF9zb3VyY2UoJ1Byb2R1Y3RzJyk7CiAgICAgICRpdGVtLT5zZXRfZGVzY3JpcHRpb24oJHByb21vLT5nZXRfbmFtZSgpKTsKICAgICAgJGl0ZW0tPnNldF9pdGVtX3R5cGUobGluZV9pdGVtOjpJVEVNVFlQRV9ESVNDT1VOVCk7CiAgICAgICRpdGVtLT5zZXRfcXVhbnRpdHkoMSk7CiAgICAgICRpdGVtLT5zZXRfZGlzY291bnQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMCk7CiAgICAgICRuZXdfaXRlbXNbXSA9ICRpdGVtOwogICAgICBicmVhazsKCiAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgLy8gb2ZmZXIgYSBmcmVlIHByb2R1Y3QuCiAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXJ0X2l0ZW1zKTsgJGkrKyApIHsKCSRpdGVtID0gY2xvbmUoJGNhcnRfaXRlbXNbJGldKTsKCSRuZXdfaXRlbXNbXSA9ICRpdGVtOwogICAgICB9CiAgICAgICRpdGVtID0gbmV3IGxpbmVfaXRlbSgpOwogICAgICAkaXRlbS0+c2V0X3NvdXJjZSgnUHJvZHVjdHMnKTsKICAgICAgJGl0ZW0tPnNldF9kZXNjcmlwdGlvbigkcHJvbW8tPmdldF9uYW1lKCkpOwogICAgICAkaXRlbS0+c2V0X2l0ZW1fdHlwZShsaW5lX2l0ZW06OklURU1UWVBFX1BST0RVQ1QpOwogICAgICAkaXRlbS0+c2V0X3N0YXR1cyhJVEVNU1RBVFVTX05PVFNISVBQRUQpOwogICAgICAkaXRlbS0+c2V0X3F1YW50aXR5KDEpOwogICAgICAkcHJvZHVjdCA9IHNlbGY6Ol9nZXRfcHJvZHVjdCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwogICAgICBpZiggISRwcm9kdWN0ICkgcmV0dXJuIEZBTFNFOwogICAgICAkaXRlbS0+c2V0X3VuaXRfcHJpY2UoJHByb2R1Y3QtPmdldF9wcmljZSgpKTsKICAgICAgJGl0ZW0tPnNldF9kaXNjb3VudCgkcHJvZHVjdC0+Z2V0X3ByaWNlKCkgKiAtMS4wKTsKICAgICAgJGl0ZW0tPnNldF93ZWlnaHQoJHByb2R1Y3QtPmdldF93ZWlnaHQoKSk7CiAgICAgICRpdGVtLT5zZXRfc2t1KCRwcm9kdWN0LT5nZXRfc2t1KCkpOwogICAgICAkbmV3X2l0ZW1zW10gPSAkaXRlbTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKICAgICAgLy8gZGlzY291bnQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdHMgYnkgYSBwZXJjZW50YWdlCiAgICAgICRwcm9kdWN0cyA9IGFycmF5KCk7CiAgICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewoJJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7Cglzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKCWNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCSAgJHByb2R1Y3RzID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgICRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgoJICAkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21IaWVyYXJjaHkoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSwnLicpOwoJICAkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgoJICAkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21DYXRlZ29yaWVzKCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJICAkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJICBicmVhazsKCglkZWZhdWx0OgoJICBjb250aW51ZTsKCSAgYnJlYWs7Cgl9CiAgICAgIH0KCiAgICAgIC8vIGNoZWNrIGlmIHdlIGZvdW5kIG1hdGNoaW5nIHByb2R1Y3RzPwogICAgICBpZiggISRwcm9kdWN0cyApIGJyZWFrOwoKICAgICAgLy8gd2UgZGlkLi4uIHNvIHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nIHdpdGggZWFjaCBwcm9kdWN0Li4KICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhcnRfaXRlbXMpOyAkaSsrICkgewoJJGl0ZW0gPSBjbG9uZSgkY2FydF9pdGVtc1skaV0pOwoJaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlKCkgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmCgkgICAgaW5fYXJyYXkoJGl0ZW0tPmdldF9pdGVtX2lkKCksJHByb2R1Y3RzKSApIHsKCSAgJGl0ZW0tPnNldF9kaXNjb3VudCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAkaXRlbS0+Z2V0X3VuaXRfcHJpY2UoKSAqIC0xKTsKCX0KCSRuZXdfaXRlbXNbXSA9ICRpdGVtOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQoKICAgIHJldHVybiAkbmV3X2l0ZW1zOwogIH0KfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgY2xhc3MgaXMgYW4gYXNzaXN0YW50IHRvIHRoZSBwcm9tb3Rpb25fdGVzdGVyIGNsYXNzLgogKiBUaGlzIGNsYXNzIG9wZXJhdGVzIG9uIHNpbmdsZSBwcm9tb3Rpb25zLgogKi8KY2xhc3MgcHJvbW9fdGVzdGVyCnsKICBwcml2YXRlICRfcDsKICBwcml2YXRlICRfc2t1OwogIHByaXZhdGUgJF9wcm9kdWN0OwogIHByaXZhdGUgJF9xdWFudGl0eTsKICBwcml2YXRlICRfY2FydDsKICBwcml2YXRlICRfYXV0b19mZXUgPSBUUlVFOwogIHByaXZhdGUgJF9mZXVfdWlkID0gbnVsbDsKICBwcml2YXRlICRfY291cG9ucyA9IG51bGw7CiAgcHJpdmF0ZSAkX2lnbm9yZV9kaXNjb3VudGVkOwoKICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfc2t1KCkKICB7CiAgICAkc2t1ID0gbnVsbDsKICAgIGlmKCAkdGhpcy0+X3Byb2R1Y3QgKSAkc2t1ID0gJHRoaXMtPl9wcm9kdWN0LT5nZXRfc2t1KCk7CiAgICBpZiggJHRoaXMtPl9za3UgKSAkc2t1ID0gJHRoaXMtPl9za3U7CiAgICByZXR1cm4gJHNrdTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChwcm9tb3Rpb24gJHByb21vKQogIHsKICAgICR0aGlzLT5fcCA9ICRwcm9tbzsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfYXV0b19mZXUoJGZsYWcgPSBUUlVFKQogIHsKICAgICR0aGlzLT5fYXV0b19mZXUgPSAoYm9vbCkkZmxhZzsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmV1X3VpZCgkdWlkKQogIHsKICAgIGlmKCAkdWlkID4gMCApICR0aGlzLT5fZmV1X3VpZCA9ICR1aWQ7CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfZmV1X3VpZCgpCiAgewogICAgaWYoICFpc19udWxsKCRfZmV1X3VpZCkgKSByZXR1cm4gJHRoaXMtPl9mZXVfdWlkOwoKICAgIGlmKCAkdGhpcy0+X2F1dG9fZmV1ICkgewogICAgICAkZmV1ID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgICAgIGlmKCBpc19vYmplY3QoJGZldSkgKSB7CgkkdGhpcy0+X2ZldV91aWQgPSAkZmV1LT5Mb2dnZWRJbklkKCk7CglyZXR1cm4gJHRoaXMtPl9mZXVfdWlkOwogICAgICB9CiAgICB9CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF9pdGVtX2Rpc2NvdW50ZWQoJGlkeCkKICB7CiAgICBpZiggJHRoaXMtPl9pZ25vcmVfZGlzY291bnRlZCApIHJldHVybiBGQUxTRTsKCiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkdGhpcy0+X2NhcnQpOyAkaSsrICkgewogICAgICAkaXRlbSA9ICR0aGlzLT5fY2FydFskaV07CiAgICAgIGlmKCAkaXRlbS0+Z2V0X3BhcmVudCgpICE9ICRpZHggKSBjb250aW51ZTsKICAgICAgaWYoICRpdGVtLT5nZXRfcGFyZW50KCkgPiAtMSApIHJldHVybiBUUlVFOwogICAgICBpZiggJGl0ZW0tPmdldF91bml0X2Rpc2NvdW50KCkgIT0gMCApIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfc2t1KCRza3UpCiAgewogICAgJHRoaXMtPl9za3UgPSAkc2t1OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9wcm9kdWN0KGNnX2Vjb21tX3Byb2R1Y3RpbmZvICRwcm9kdWN0KQogIHsKICAgICR0aGlzLT5fcHJvZHVjdCA9ICRwcm9kdWN0OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9xdWFudGl0eSgkbm4pCiAgewogICAgJHRoaXMtPl9xdWFudGl0eSA9IChpbnQpJG5uOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9pZ25vcmVfZGlzY291bnRlZCgkdmFsKQogIHsKICAgICR0aGlzLT5faWdub3JlX2Rpc2NvdW50ZWQgPSBjbXNfdG9fYm9vbCgkdmFsKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY2FydCgkaXRlbXMpCiAgewogICAgaWYoIGlzX2FycmF5KCRpdGVtcykgJiYgY291bnQoJGl0ZW1zKSApICR0aGlzLT5fY2FydCA9ICRpdGVtczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY291cG9ucygkaXRlbXMpCiAgewogICAgaWYoIGlzX2FycmF5KCRpdGVtcykgJiYgY291bnQoJGl0ZW1zKSApICR0aGlzLT5fY291cG9ucyA9ICRpdGVtczsKICB9CgogIC8qKgogICAqIENhbGN1bGF0ZXMgdGhlICdzdWJ0b3RhbCcgb2YgYWxsIGNhcnQgaXRlbXMKICAgKiBpbmNsdWRpbmcgZGlzc2NvdW50cyBhbHJlYWR5IGFwcGxpZWQKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIF9jYWxjX29yZGVyX3N1YnRvdGFsKCRpbmNsdWRlX2Rpc2NvdW50ZWQgPSBGQUxTRSkKICB7CiAgICAkdiA9IDA7CiAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jYXJ0KSAmJiBjb3VudCgkdGhpcy0+X2NhcnQpICkgewogICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CglpZiggIWlzX2EoJGl0ZW0sJ2NnX2Vjb21tX2NhcnRpdGVtJykgKSB7CgkgIC8vIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaGVyZQoJICBjb250aW51ZTsKCX0KCQoJaWYoICEkaW5jbHVkZV9kaXNjb3VudGVkICYmICRpdGVtLT5nZXRfdW5pdF9kaXNjb3VudCgpICE9IDAgKSBjb250aW51ZTsKCWlmKCAhJGluY2x1ZGVfZGlzY291bnRlZCAmJiAkaXRlbS0+Z2V0X3BhcmVudCgpID49IDAgKSBjb250aW51ZTsKCSR2ICs9ICRpdGVtLT5nZXRfaXRlbV90b3RhbCgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJHY7CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF9jYWxjX29yZGVyX3dlaWdodCgpCiAgewogICAgJHYgPSAwOwogICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fY2FydCkgJiYgY291bnQoJHRoaXMtPl9jYXJ0KSApIHsKICAgICAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJaWYoICFpc19hKCRpdGVtLCdjZ19lY29tbV9jYXJ0aXRlbScpICkgewoJICAvLyBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmUKCSAgY29udGludWU7Cgl9CgkKCSR2ICs9ICRpdGVtLT5nZXRfdW5pdF93ZWlnaHQoKSAqICRpdGVtLT5nZXRfcXVhbnRpdHkoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICR2OwogIH0KCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0X3NrdV9xdWFudGl0eSgkc2t1KQogIHsKICAgICR2ID0gMDsKICAgIGlmKCAhJHNrdSApIHJldHVybiAkdjsKCiAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jYXJ0KSAmJiBjb3VudCgkdGhpcy0+X2NhcnQpICkgewogICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CglpZiggIWlzX2EoJGl0ZW0sJ2NnX2Vjb21tX2NhcnRpdGVtJykgKSB7CgkgIC8vIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaGVyZQoJICBjb250aW51ZTsKCX0KCglpZiggJHNrdSAhPSAkaXRlbS0+Z2V0X3NrdSgpICkgY29udGludWU7CgkkdiArPSAkaXRlbS0+Z2V0X3F1YW50aXR5KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkdjsKICB9CgogIC8vIHJldHVybnMgYm9vbGVhbgogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX21hdGNoKCkKICB7CiAgICAkbWF0Y2hfY291bnQgPSAwOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHRoaXMtPl9wLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kaXRpb24gPSAkdGhpcy0+X3AtPmdldF9jb25kaXRpb24oJGkpOwoJICAgIAogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJLy8gdGVzdCB1c2VyIGlzIG1lbWJlciBvZiBmZXUgZ3JvdXAuCglpZiggY29uZGl0aW9uX3Rlc3RzOjp0ZXN0X2ZldV91aWQoJGNvbmRpdGlvbikgKSB7CgkgICRtYXRjaF9jb3VudCsrOwoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9TVUJUT1RBTDoKCWlmKCAhaXNfbnVtZXJpYygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKSApIGJyZWFrOwoJaWYoICR0aGlzLT5fY2FsY19vcmRlcl9zdWJ0b3RhbCgpID49IChmbG9hdCkkY29uZGl0aW9uLT5nZXRfZGF0YSgpICkgewoJICAkbWF0Y2hfY291bnQrKzsKCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgoJaWYoICFpc19udW1lcmljKCRjb25kaXRpb24tPmdldF9kYXRhKCkpICkgYnJlYWs7CglpZiggJHRoaXMtPl9jYWxjX29yZGVyX3dlaWdodCgpID49IChmbG9hdCkkY29uZGl0aW9uLT5nZXRfZGF0YSgpICkgewoJICAkbWF0Y2hfY291bnQrKzsKCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOgoJaWYoIGlzX2FycmF5KCR0aGlzLT5fY291cG9ucykgJiYgY291bnQoJHRoaXMtPl9jb3Vwb25zKSApIHsKCSAgZm9yZWFjaCggJHRoaXMtPl9jb3Vwb25zIGFzICRjb2RlICkgewoJICAgIGlmKCBzdHJjYXNlY21wKCRjb2RlLCAkY29uZGl0aW9uLT5nZXRfZGF0YSgpKSA9PSAwICkgewoJICAgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgICBicmVhazsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgoJaWYoICR0aGlzLT5fcHJvZHVjdCApIHsKCSAgLy8gdGVzdCBpZiB0aGlzIHByb2R1Y3QgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHByb2R1Y3QgaWQKCSAgJHRtcCA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJICBpZiggaW5fYXJyYXkoJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpLCR0bXApICkgewoJICAgICRtYXRjaF9jb3VudCsrOwoJICAgIGJyZWFrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKCWlmKCAoJHNrdSA9ICR0aGlzLT5fZ2V0X3NrdSgpKSApIHsKCSAgLy8gdGVzdCBpZiB0aGlzIHNrdSBtYXRjaGVzCgkgICRkYXRhID0gJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKTsKCSAgaWYoIGZubWF0Y2goJHNrdSwkZGF0YVswXSkgKSB7CgkgICAgLy8gbm93IHRlc3QgaWYgdGhlIHF1YW50aXR5IG1hdGNoZXMKCSAgICAkbnVtID0gJHRoaXMtPl9nZXRfc2t1X3F1YW50aXR5KCRza3UpOwoJICAgICRudW0gKz0gKGludCkkdGhpcy0+X3F1YW50aXR5OwoJICAgIGlmKCAkbnVtID4gMCAmJiAkbnVtID49ICRkYXRhWzFdICkgewoJICAgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgICBicmVhazsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVToKCWlmKCAoJHNrdSA9ICR0aGlzLT5fZ2V0X3NrdSgpKSApIHsKCSAgLy8gdGVzdCBpZiB0aGlzIHNrdSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHJvZHVjdCBza3UncwoJICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSAgICBpZiggZm5tYXRjaCgkb25lLCRza3UpICkgIHsKCSAgICAgICRtYXRjaF9jb3VudCsrOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21DYXRlZ29yaWVzKCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgLy8gaGF2ZSBwcm9kdWN0IGlkcyBpbiB0aHNlIGNhdGVnb3JpZXMuCgkgIGlmKCAkdGhpcy0+X3Byb2R1Y3QgJiYgaW5fYXJyYXkoJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CgkgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgYnJlYWs7CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21IaWVyYXJjaHkoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSwnLicpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgLy8gaGF2ZSBwcm9kdWN0IGlkcyBpbiB0aHNlIGNhdGVnb3JpZXMuCgkgIGlmKCAkdGhpcy0+X3Byb2R1Y3QgJiYgaW5fYXJyYXkoJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CgkgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgYnJlYWs7CgkgIH0KCX0KCWJyZWFrOwogICAgICB9IC8vIHN3aXRjaAogICAgfSAvLyBmb3IgZWFjaCBjb25kaXRpb24KCiAgICBpZiggJG1hdGNoX2NvdW50ID09ICR0aGlzLT5fcC0+Y291bnRfY29uZGl0aW9ucygpICkgewogICAgICBpZiggJHRoaXMtPl9wLT5nZXRfZXh0cmEoJ2FsbG93X29uY2UnKSApIHsKCWZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkb25lX2l0ZW0gKSB7CgkgIGlmKCAkb25lX2l0ZW0tPmdldF9wcm9tbygpID09ICR0aGlzLT5fcC0+Z2V0X2lkKCkgKSB7CgkgICAgcmV0dXJuIEZBTFNFOwoJICB9Cgl9CiAgICAgIH0KCiAgICAgIC8vIGl0IG1hdGNoZXMuCiAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9IC8vIGVuZCBvZiBmdW5jdGlvbgoKCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfb2ZmZXJfbWF0Y2goKQogIHsKICAgIC8vIHRlc3RzIGlmIHRoZSBwcm9kdWN0LCBvciBza3UgbWF0Y2ggdGhlIG9mZmVyCiAgICAvLyBub3RlLCBvbmx5IHdvcmtzIHdpdGggb2ZmZXIgdHlwZXMgdGhhdCBoYXZlIGEgcHJvZHVjdCBpZCwgb3Igc2t1IGluIHRoZW0uCiAgICAvLyByZXR1cm5zIGJvb2xlYW4uCgogICAgc3dpdGNoKCAkdGhpcy0+X3AtPmdldF9vZmZlcl90eXBlKCkgKSB7CiAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgaWYoICR0aGlzLT5fcHJvZHVjdC0+Z2V0X3Byb2R1Y3RfaWQoKSA9PSAkdGhpcy0+X3AtPmdldF9vZmZlcl9kYXRhKCkgKSB7CglyZXR1cm4gVFJVRTsKICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVToKICAgICAgaWYoICgkc2t1ID0gJHRoaXMtPl9nZXRfc2t1KCkpICkgewoJJHRtcCA9IGV4cGxvZGUoJywnLCR0aGlzLT5fcC0+Z2V0X29mZmVyX2RhdGEoKSk7Cglmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CgkgIGlmKCBmbm1hdGNoKCRvbmUsJHNrdSkgKSByZXR1cm4gVFJVRTsKCX0KICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfSAvLyBlbmQgb2YgZnVuY3Rpb24KCiAgLyoqCiAgICogVGVzdCBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNhcnQgbWF0Y2ggYWxsIG9mIHRoZSBjb25kaXRpb25zIGZvciB0aGlzIHByb21vdGlvbi4KICAgKiBBdCBsZWFzdCBvbmUgb2YgdGhlIGNvbmRpdGlvbnMgaGFzIHRvIGJlIGEgJ3Byb2R1Y3QnIHR5cGUgbWF0Y2guCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfY2FydF9tYXRjaCgmJG1hdGNoZWRfY2FydGl0ZW1faWR4KQogIHsKICAgICRtYXRjaF9jb3VudCA9IDA7CiAgICAkbWF0Y2hfY2FydGl0ZW0gPSAtMTsKICAgIGZvciggJGkgPSAwOyAkaSA8ICR0aGlzLT5fcC0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHRoaXMtPl9wLT5nZXRfY29uZGl0aW9uKCRpKTsKCiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9GRVU6CgkvLyB0ZXN0IHVzZXIgaXMgbWVtYmVyIG9mIGZldSBncm91cC4KCWlmKCBjb25kaXRpb25fdGVzdHM6OnRlc3RfZmV1X3VpZCgkY29uZGl0aW9uKSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1NVQlRPVEFMOgoJJGRhdGEgPSAkY29uZGl0aW9uLT5nZXRfZGF0YSgpOwoJaWYoICFpc19udW1lcmljKCRkYXRhKSApIGJyZWFrOwoJaWYoICR0aGlzLT5fY2FsY19vcmRlcl9zdWJ0b3RhbCgpID49IChmbG9hdCkkZGF0YSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1dFSUdIVDoKCWlmKCAhaXNfbnVtZXJpYygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKSApIGJyZWFrOwoJaWYoICR0aGlzLT5fY2FsY19vcmRlcl93ZWlnaHQoKSA+PSAoZmxvYXQpJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0NPVVBPTjoKCWlmKCBpc19hcnJheSgkdGhpcy0+X2NvdXBvbnMpICYmIGNvdW50KCR0aGlzLT5fY291cG9ucykgKSB7CgkgIGZvcmVhY2goICR0aGlzLT5fY291cG9ucyBhcyAkY29kZSApIHsKCSAgICBpZiggc3RyY2FzZWNtcCgkY29kZSwgJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSkgPT0gMCApIHsKCSAgICAgICRtYXRjaF9jb3VudCsrOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKCWlmKCAkdGhpcy0+X2NhcnQgKSB7CgkgICRpZHggPSAwOwoJICAkZGF0YSA9ICRjb25kaXRpb24tPmdldF9kYXRhKCk7CgkgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCSAgICBpZiggISR0aGlzLT5faXRlbV9kaXNjb3VudGVkKCRpZHgpICkgewoJICAgICAgaWYoIGZubWF0Y2goJGRhdGFbMF0sJGl0ZW0tPmdldF9za3UoKSkgKSB7CgkJaWYoICRkYXRhWzFdID4gMCAmJiAkaXRlbS0+Z2V0X3F1YW50aXR5KCkgPj0gKGludCkkZGF0YVsxXSApIHsKCQkgICRtYXRjaF9jb3VudCsrOwoJCSAgJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQkgIGJyZWFrOwoJCX0KCSAgICAgIH0KCSAgICB9CgkgICAgJGlkeCsrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCS8vIHRlc3QgaWYgdGhpcyBwcm9kdWN0IGV4aXN0cyBpbiB0aGUgY2FydCAoYnkgcHJvZHVjdCBpZCkKCWlmKCAkdGhpcy0+X2NhcnQgKSB7CgkgIC8vIGlmIG1hdGNoZXMsIHRoZW4gdGhlcmUgaXMgYSBwcm9kdWN0IGluIHRoZSBjYXJ0IHRoYXQgbWF0Y2hlcyB0aGlzIGNvbmRpdGlvbgoJICAkaWR4ID0gMDsKCSAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJICAgIGlmKCAhJHRoaXMtPl9pdGVtX2Rpc2NvdW50ZWQoJGlkeCkgKSB7CgkgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgICAgICBpZiggaW5fYXJyYXkoJGl0ZW0tPmdldF9wcm9kdWN0X2lkKCksJHRtcCkgKSB7CgkJJG1hdGNoX2NvdW50Kys7CgkJJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQlicmVhazsKCSAgICAgIH0KCSAgICB9CgkgICAgJGlkeCsrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RTS1U6CgkvLyB0ZXN0IGlmIHRoaXMgcHJvZHVjdCBleGlzdHMgaW4gdGhlIGNhcnQgKGJ5IHNrdSkKCWlmKCAkdGhpcy0+X2NhcnQgKSB7CgkgIC8vIGlmIG1hdGNoZXMsIHRoZW4gdGhlcmUgaXMgYSBwcm9kdWN0IGluIHRoZSBjYXJ0IHRoYXQgbWF0Y2hlcyB0aGlzIGNvbmRpdGlvbgoJICAkaWR4ID0gMDsKCSAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJICAgIGlmKCAkdGhpcy0+X2l0ZW1fZGlzY291bnRlZCgkaWR4KSApIGNvbnRpbnVlOwoKCSAgICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgICAgJGZuZCA9IGZhbHNlOwoJICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSAgICAgIGlmKCBmbm1hdGNoKCRvbmUsJGl0ZW0tPmdldF9za3UoKSkgKSB7CgoJCSRtYXRjaF9jb3VudCsrOwoJCSRtYXRjaF9jYXJ0aXRlbSA9ICRpZHg7CgkJJGZuZCA9IHRydWU7CgkJYnJlYWs7CgkgICAgICB9CgkgICAgfQoJICAgIGlmKCAkZm5kICkgYnJlYWs7CgkgICAgJGlkeCsrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21DYXRlZ29yaWVzKCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgaWYoICR0aGlzLT5fY2FydCAmJiAhJHRoaXMtPl90ZXN0X3Byb2R1Y3Rvbmx5ICkgewoJICAgICRpZHggPSAwOwoJICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCSAgICAgIGlmKCAkaXRlbS0+Z2V0X3BhcmVudCgpID4gLTEgKSBjb250aW51ZTsKCSAgICAgIGlmKCAkaXRlbS0+Z2V0X3VuaXRfZGlzY291bnQoKSAhPSAwICkgY29udGludWU7CgoJICAgICAgaWYoIGluX2FycmF5KCRpdGVtLT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CgkJJG1hdGNoX2NvdW50Kys7CgkJJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQlicmVhazsKCSAgICAgIH0KCSAgICAgICRpZHgrKzsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21IaWVyYXJjaHkoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSwnLicpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgaWYoICR0aGlzLT5fY2FydCAmJiAhJHRoaXMtPl90ZXN0X3Byb2R1Y3Rvbmx5ICkgewoJICAgICRpZHggPSAwOwoJICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCSAgICAgIGlmKCBpbl9hcnJheSgkaXRlbS0+Z2V0X3Byb2R1Y3RfaWQoKSwkcHJvZHVjdHMpICkgewoJCSRtYXRjaF9jb3VudCsrOwoJCSRtYXRjaF9jYXJ0aXRlbSA9ICRpZHg7CgkJYnJlYWs7CgkgICAgICB9CgkgICAgICAkaWR4Kys7CgkgICAgfQoJICB9Cgl9CglicmVhazsKICAgICAgfSAvLyBzd2l0Y2gKICAgIH0KCiAgICBpZiggKCRtYXRjaF9jb3VudCA9PSAkdGhpcy0+X3AtPmNvdW50X2NvbmRpdGlvbnMoKSkgKSB7CiAgICAgIC8vIGl0IG1hdGNoZXMuCiAgICAgICRtYXRjaGVkX2NhcnRpdGVtX2lkeCA9ICRtYXRjaF9jYXJ0aXRlbTsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></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[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZGVmaW5lKCdQUk9NT1RJT05TX1RBQkxFJyxjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9wcm9tb3Rpb25zJyk7CmRlZmluZSgnUFJPTU9USU9OU19DT05EX1RBQkxFJyxjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9wcm9tb3Rpb25zX2NvbmQnKTsKCmNsYXNzIFByb21vdGlvbnMgZXh0ZW5kcyBDR0V4dGVuc2lvbnMKewogIGNvbnN0IE5FV0NPVVBPTkZPUk1fVEVNUExBVEUgID0gJ05FV0NPVVBPTkZPUk1fVEVNUExBVEUnOwogIGNvbnN0IERGTFRDT1VQT05GT1JNX1RFTVBMQVRFID0gJ0RGTFRDT1VQT05GT1JNX1RFTVBMQVRFJzsKICBjb25zdCBNQUlOX1BFUk0gICAgICAgICAgICAgICA9ICdNYW5hZ2UgUHJvbW90aW9ucyc7CgogIHByaXZhdGUgJF9jdXJfY2FydF9pdGVtcyA9IG51bGw7CgogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgewogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwoKICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdwcm9tb19nZXRfcHJvZF9kaXNjb3VudCcsYXJyYXkoJ1Byb21vdGlvbnMnLCdzbWFydHlfZnVuY3Rpb25fcHJvbW9fZ2V0X3Byb2RfZGlzY291bnQnKSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsgcmV0dXJuICdQcm9tb3Rpb25zJzsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7IH0KICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjInOyB9CiAgcHVibGljIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgeyByZXR1cm4gJzEuMTEuOSc7IH0KICBwdWJsaWMgZnVuY3Rpb24gR2V0SGVscCgpIHsgcmV0dXJuIEBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLicvaGVscC5pbmMnKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3IoKSB7IHJldHVybiAnY2FsZ3V5MTAwMCc7IH0KICBwdWJsaWMgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgeyByZXR1cm4gJ2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcnOyB9CiAgcHVibGljIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gdHJ1ZTsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7IHJldHVybiAnZWNvbW1lcmNlJzsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7IH0KICBwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsgcmV0dXJuIFRSVUU7IH0KICBwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIEZBTFNFOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsgcmV0dXJuIEBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLicvY2hhbmdlbG9nLmluYycpOyB9CgogIHB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgfHwKICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpIHx8CiAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKICB7CiAgICByZXR1cm4gYXJyYXkoJ0NHRXh0ZW5zaW9ucyc9PicxLjM4LjEwJywgJ09yZGVycyc9PicxLjE2JywgJ0pRdWVyeVRvb2xzJz0+JzEuMi42JywgJ1Byb2R1Y3RzJz0+JzIuMjAuMicpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyB9CiAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBBbGxvd0F1dG9JbnN0YWxsKCkgeyByZXR1cm4gRkFMU0U7IH0KICBwdWJsaWMgZnVuY3Rpb24gQWxsb3dBdXRvVXBncmFkZSgpIHsgcmV0dXJuIEZBTFNFOyB9CgogIHB1YmxpYyBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKICB7CiAgICAkdGhpcy0+QWRkSW1hZ2VEaXIoJ2ljb25zJyk7CiAgICAkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKICAgICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsKCiAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdpbmxpbmUnLCdkZWZhdWx0JywkdGhpcy0+TGFuZygncGFyYW1faW5saW5lJykpOwogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lubGluZScsQ0xFQU5fSU5UKTsKCiAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0ZW1wbGF0ZScsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX3RlbXBsYXRlJykpOwogICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3RlbXBsYXRlJyxDTEVBTl9TVFJJTkcpOwoKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKENMRUFOX1JFR0VYUC4nL3Byb21vXy4qLycsQ0xFQU5fU1RSSU5HKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWFkZXJIVE1MKCkKICB7CiAgICByZXR1cm47CiAgICAkdHh0ID0gPDw8RU9UCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmZpZWxkc2V0LmNnZmllbGRzZXQgewogIG1hcmdpbi1sZWZ0OiAyMCU7Cn0KbGVnZW5kLmNnbGVnZW5kIHsKICBmb250LXNpemU6IDFlbTsKICBmb250LXdlaWdodDogbm9ybWFsOwp9Ci5ub29mZnNldCB7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KPC9zdHlsZT4KRU9UOwogICAgJG9iaiA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnSlF1ZXJ5VG9vbHMnKTsKICAgIGlmKCBpc19vYmplY3QoJG9iaikgKSB7CiR0bXBsID0gPDw8RU9UCntKUXVlcnlUb29scyBhY3Rpb249J2luY2pzJyBleGNsdWRlPSdmb3JtJ30Ke0pRdWVyeVRvb2xzIGFjdGlvbj0ncmVhZHknfQpFT1Q7CiAgICAgICR0eHQgLj0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCR0bXBsKTsKICAgIH0KICAgIHJldHVybiAkdHh0OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXM9YXJyYXkoKSkKICB7CiAgICBpZiggJGNhcGFiaWxpdHkgPT0gJ3Byb21vdGlvbnNfY2FsY3VsYXRpb24nICkgIHJldHVybiBUUlVFOwogICAgcmV0dXJuIHBhcmVudDo6SGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwkcGFyYW1zKTsKICB9CgogIC8qKgogICAqIEZpbmQgYXBwbGljYWJsZSBwcm9tb3Rpb25zIGdpdmVuIGJhc2tldCBkZXRhaWxzLCBhbmQgb3RoZXIgaW5mb3JtYXRpb24KICAgKgogICAqIEBwYXJhbSBpbnQgVXNlcklEIGZyb20gRkVVIG1vZHVsZQogICAqIEBwYXJhbSBhcnJheSBBcnJheSBvZiBpdGVtcyBpbiB0aGUgYmFza2V0IChhcnJheSBvZiBvYmplY3RzKQogICAqIEBwYXJhbSBmbG9hdCBzdWJ0b3RhbCBvZiBvcmRlciAoYmVmb3JlIHRheGVzIG9yIHNoaXBwaW5nKQogICAqIEBwYXJhbSBmbG9hdCB3ZWlnaHQgb2Ygb3JkZXIgKHByb2R1Y3RzIGhhcyB0aGUgdW5pdHMpCiAgICogQHBhcmFtIGludCAgIHVuaXggZm9ybWF0IGRhdGUgZm9yIHdoaWNoIG9yZGVyIGlzIGFwcGxpY2FibGUKICAgKiBAcmV0dXJucyBoYXNoIG9mIHByb21vdGlvbiBuYW1lLCBhbmQgYW1vdW50IG9mIHByb21vdGlvbi4gIHByb21vdGlvbiB3aXRoIGhpZ2hlciBkaXNjb3VudCB3aW5zLgogICAqIEBkZXByZWNhdGVkCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIEZpbmRQcm9tb3Rpb25zKCRmZXVfdWlkLCRpdGVtcywkc3VidG90YWwsJHdlaWdodCwkZGF0ZSA9ICcnKQogIHsKICAgIC8vIHRoaXMgZnVuY3Rpb24gY291bGQgdXNlIHByb21vdGlvbiB0ZXN0ZXIuLi4gYnV0CiAgICAvLyBpdCBleHBlY3RzIHRoYXQgdGhlIGl0ZW1zIGFyZSBjYXJ0IGl0ZW1zLgogICAgaWYoIGVtcHR5KCRkYXRlKSApICRkYXRlID0gdGltZSgpOwogICAgJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJ1Byb21vdGlvbnMnKTsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJGRhdGUgPSAkZGItPkRiVGltZVN0YW1wKCRkYXRlKTsKCiAgICAvLyBub3cgd2UgaGF2ZSBhIGxpc3Qgb2YgcHJvbW90aW9uIGlkJ3MgbG9hZCBlYWNoIHByb21vdGlvbgogICAgLy8gYW5kIHRlc3QgaXQuCiAgICAvLyBjYWxjdWxhdGUgdGhlIGRpc2NvdW50cyBhcHBsaWVkIGZvciBhbGwgbGluZSBpdGVtcwogICAgLy8gYW5kIGNhbGN1bGF0ZSB0aGUgdmFsdWUgb2YgdGhlbS4KICAgICRwcm9tb3MgPSBwcm9tb3Rpb246OmxvYWRfYWxsX2J5X3R5cGUocHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUKTsKICAgICRkaXNjb3VudF9hbXQgPSAxMDAwMDAwMDsKICAgICRkaXNjb3VudF9pdGVtcyA9ICcnOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAkcHJvbW8gKSB7CiAgICAgICRtYXRjaF90eXBlID0gJyc7CgogICAgICAvLyBjaGVjayBhbGwgb2YgdGhlIGNvbmRpdGlvbnMgaW4gdGhlIHByb21vdGlvbgogICAgICAkbWF0Y2ggPSB0cnVlOwogICAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKCSRjb25kaXRpb24gPSAkcHJvbW8tPmdldF9jb25kaXRpb24oJGkpOwoKCXN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewoJY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X2ZldV91aWQoJGZldV91aWQsJHByb21vKSApIHsKCSAgICAkbWF0Y2ggPSBmYWxzZTsKCSAgICBicmVhazsKCSAgfQoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfQ09ORF9TVUJUT1RBTDoKCSAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9vcmRlcl9zdWJ0b3RhbCgkc3VidG90YWwsJHByb21vKSApIHsKCSAgICAkbWF0Y2ggPSBmYWxzZTsKCSAgICBicmVhazsKCSAgfQoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfQ09ORF9DT1VQT046CgkgICRjb3Vwb25zID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwoJICBpZiggJGNvdXBvbnMgKSB7CgkgICAgLy8gdGVzdCBhbGwgb2Ygb3VyIGNvdXBvbnMuCgkgICAgJHRlc3QgPSBmYWxzZTsKCSAgICBmb3JlYWNoKCAkY291cG9ucyBhcyAkY291cG9uICkgewoJICAgICAgaWYoIHByb21vX3Rlc3RzOjp0ZXN0X2NvdXBvbigkY291cG9uLCRwcm9tbykgKSB7CgkJJHRlc3QgPSB0cnVlOwoJCWJyZWFrOwoJICAgICAgfQoJICAgIH0KCSAgICBpZiggISR0ZXN0ICkgJG1hdGNoID0gZmFsc2U7CgkgIH0KCSAgZWxzZSB7CgkgICAgJG1hdGNoID0gZmFsc2U7CgkgIH0KCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgoJICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X29yZGVyX3dlaWdodCgkd2VpZ2h0LCRwcm9tbykgKSAkbWF0Y2ggPSBmYWxzZTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgoJICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X3NpbmdsZV9wcm9kdWN0KCRpdGVtcywkcHJvbW8pICkgJG1hdGNoID0gZmFsc2U7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3RfcHJvZHVjdF9mcm9tX2NhdGVnb3J5KCRpdGVtcywkcHJvbW8pICkgJG1hdGNoID0gZmFsc2U7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgoJICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X3Byb2R1Y3RfZnJvbV9oaWVyYXJjaHkoJGl0ZW1zLCRwcm9tbykgKSAkbWF0Y2ggPSBmYWxzZTsKCSAgYnJlYWs7Cgl9CgoJLy8gaWYgb25lIGNvbmRpdGlvbiBkb2VzIG5vdCBtYXRjaCwgdGhlIHRlc3QgZmFpbHMuCglpZiggISRtYXRjaCApIGJyZWFrOwogICAgICB9CgogICAgICAvLyBjaGVjayB0aGUgdmFsdWUgb2YgdGhlIGRpc2NvdW50CiAgICAgIGlmKCAkbWF0Y2ggKSB7CgkkYWRqX2l0ZW1zID0gcHJvbW9fb3BzOjpjYWxjdWxhdGVfZGlzY291bnQoJHByb21vLCRzdWJ0b3RhbCwkaXRlbXMpOwoJJGFkal9hbXQgICA9IHByb21vX29wczo6Y2FsY190b3RhbF9kaXNjb3VudCgkYWRqX2l0ZW1zKTsKCWlmKCAkZGlzY291bnRfYW10ID4gJGFkal9hbXQgKSB7CgkgICRkaXNjb3VudF9hbXQgPSAkYWRqX2FtdDsKCSAgJGRpc2NvdW50X2l0ZW1zID0gJGFkal9pdGVtczsKCX0KCWNvbnRpbnVlOwogICAgICB9CiAgICB9IC8vIGZvcmVhY2gKCiAgICByZXR1cm4gJGRpc2NvdW50X2l0ZW1zOwogIH0KCiAgLyoqCiAgICogQ2FsY3VsYXRlIHRoZSBiZXN0IGRpc2NvdW50IGZvciBhIHByb2R1Y3QgZ2l2ZW4gYW4gRkVVIHVzZXIgaWQsIGFuZCBhIHByb2R1Y3QgaWQuCiAgICoKICAgKiBAcmV0dXJucyBhIGhhc2ggb2YgcmVzdWx0cyBmb3IgdGhlIGJlc3QgZGlzY291bnQgZm91bmQgb3IgRkFMU0UuCiAgICogQGRlcHJlY2F0ZWQKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9kaXNjb3VudF9mb3JfcHJvZHVjdCgkZmV1X3VpZCwkcHJvZHVjdF9pZCkKICB7CiAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgJGdDbXMgPSBjbXNtcygpOwogICAgJGRiID0gJGdDbXMtPkdldERiKCk7CiAgICAkZGF0ZSA9ICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKTsKCiAgICAvLyBnZXQgYSBsaXN0IG9mIHRoZSBjdXJyZW50bHkgdmFsaWQgcHJvbW90aW9ucy4KICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLlBST01PVElPTlNfVEFCTEUuIgogICAgICAgICAgICAgICBXSEVSRSAoc3RhcnRfZGF0ZSA8PSAkZGF0ZSkgQU5EIChlbmRfZGF0ZSA+PSAkZGF0ZSkKICAgICAgICAgICAgICAgT1JERVIgQlkgaXRlbV9vcmRlcixvZmZlcl90eXBlIEFTQyI7CiAgICAkcHJvbW90aW9uX2lkcyA9ICRkYi0+R2V0Q29sKCRxdWVyeSk7CiAgICBpZiggISRwcm9tb3Rpb25faWRzICkgcmV0dXJuIEZBTFNFOwoKICAgIC8vIG5vdyB3ZSBoYXZlIGEgbGlzdCBvZiBwcm9tb3Rpb25zIGFwcGxpY2FibGUgZm9yIHRoaXMgZGF0ZQogICAgLy8gbG9hZCBlYWNoIG9uZSBhbmQgdGVzdCBpdC4KICAgICRiZXN0X2Rpc2NvdW50ID0gJyc7CiAgICBmb3JlYWNoKCAkcHJvbW90aW9uX2lkcyBhcyAkcHJvbW9faWQgKSB7CiAgICAgICRwcm9tbyA9IHByb21vX29wczo6bG9hZF9wcm9tb19ieV9pZCgkcHJvbW9faWQpOwogICAgICBpZiggISRwcm9tbyApIGNvbnRpbnVlOwoKICAgICAgJG1hdGNoID0gdHJ1ZTsKICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CgkkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKCglzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKCWNhc2UgUFJPTU9USU9OU19DT05EX0ZFVToKCSAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9mZXVfdWlkKCRmZXVfdWlkLCRwcm9tbykgKSAkbWF0Y2ggPSBmYWxzZTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOgoJICAkY291cG9ucyA9ICRzZXNzLT5nZXQoJ2NvdXBvbnMnLCcnKTsKCSAgaWYoICRjb3Vwb25zICkgewoJICAgIC8vIHRlc3QgYWxsIG9mIG91ciBjb3Vwb25zLgoJICAgICR0ZXN0ID0gZmFsc2U7CgkgICAgZm9yZWFjaCggJGNvdXBvbnMgYXMgJGNvdXBvbiApIHsKCSAgICAgIGlmKCBwcm9tb190ZXN0czo6dGVzdF9jb3Vwb24oJGNvdXBvbiwkcHJvbW8pICkgewoJCSR0ZXN0ID0gdHJ1ZTsKCQlicmVhazsKCSAgICAgIH0KCSAgICB9CgkgICAgaWYoICEkdGVzdCApIHsKCSAgICAgICRtYXRjaCA9IGZhbHNlOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICB9CgkgIGVsc2UgewoJICAgICRtYXRjaCA9IGZhbHNlOwoJICB9CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCSAgaWYoICFwcm9tb190ZXN0czo6c2luZ2xlX3Byb2R1Y3RfbWF0Y2hlcygkcHJvbW8sJHByb2R1Y3RfaWQpICkgJG1hdGNoID0gZmFsc2U7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkgIGlmKCAhcHJvbW9fdGVzdHM6OnNpbmdsZV9wcm9kdWN0X2Zyb21fY2F0ZWdvcnkoJHByb21vLCRwcm9kdWN0X2lkKSApICRtYXRjaCA9IGZhbHNlOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESElFUjoKCSAgaWYoICFwcm9tb190ZXN0czo6c2luZ2xlX3Byb2R1Y3RfZnJvbV9oaWVyYXJjaHkoJHByb21vLCRwcm9kdWN0X2lkKSApICRtYXRjaCA9IGZhbHNlOwoJICBicmVhazsKCX0KICAgICAgfQoKICAgICAgaWYoICRtYXRjaCApIHsKCS8vIHRoaXMgcHJvbW90aW9uIG1hdGNoZXMgdGhlIHByb2R1Y3QgaWQKCSRyZXMgPSBwcm9tb19vcHM6OmNhbGN1bGF0ZV9wcm9kdWN0X2Rpc2NvdW50KCRwcm9tbywkcHJvZHVjdF9pZCk7CglpZiggaXNfYXJyYXkoJHJlcykgKSB7CgkgIGlmKCAhaXNfYXJyYXkoJGJlc3RfZGlzY291bnQpICkgewoJICAgICRiZXN0X2Rpc2NvdW50ID0gJHJlczsKCSAgICAkYmVzdF9kaXNjb3VudFsncHJvbW9faWQnXSA9ICRwcm9tby0+Z2V0X2lkKCk7CgkgIH0KCSAgZWxzZSBpZiggJHJlc1sncGVyY2VudGFnZSddIDwgJGJlc3RfZGlzY291bnRbJ3BlcmNlbnRhZ2UnXSApIHsKCSAgICAkYmVzdF9kaXNjb3VudCA9ICRyZXM7CgkgICAgJGJlc3RfZGlzY291bnRbJ3Byb21vX2lkJ10gPSAkcHJvbW8tPmdldF9pZCgpOwoJICB9Cgl9CiAgICAgIH0KICAgIH0KCiAgICBpZiggaXNfYXJyYXkoJGJlc3RfZGlzY291bnQpICkgcmV0dXJuICRiZXN0X2Rpc2NvdW50OwogICAgcmV0dXJuIEZBTFNFOwogIH0KCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjbGVhcl9jb3Vwb25zKCkKICB7CiAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgJHNlc3MtPmNsZWFyKCk7CiAgfQoKICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGFkZF9jb3Vwb24oJGNvZGUpCiAgewogICAgJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJ1Byb21vdGlvbnMnKTsKICAgICR0bXAgPSAkc2Vzcy0+Z2V0KCdjb3Vwb25zJywnJyk7CiAgICBpZiggaXNfYXJyYXkoJHRtcCkgKSB7CiAgICAgIGlmKCAhaW5fYXJyYXkoJGNvZGUsJHRtcCkgKSAkdG1wW10gPSAkY29kZTsKICAgIH0KICAgIGVsc2UgewogICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgJHRtcFtdID0gJGNvZGU7CiAgICB9CiAgICAkc2Vzcy0+cHV0KCdjb3Vwb25zJywkdG1wKTsKICB9CgogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvdXBvbnMoKQogIHsKICAgICRzZXNzID0gbmV3IGNnZV9zZXNzaW9uKCdQcm9tb3Rpb25zJyk7CiAgICAkdG1wID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwogICAgaWYoIGlzX2FycmF5KCR0bXApICkgcmV0dXJuICR0bXA7CiAgfQoKICAvKioKICAgKiBBIHNtYXJ0eSBwbHVnaW4gZm9yIGZpbmRpbmcgdGhlIGRpc2NvdW50IGZvciBhIHByb2R1Y3QKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9wcm9tb19nZXRfcHJvZF9kaXNjb3VudCgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgICRmZXVfdWlkID0gLTE7CiAgICAkcHJvZHVjdF9pZCA9IC0xOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2ZldV91aWQnXSkgKSB7CiAgICAgICRmZXVfdWlkID0gKGludCkkcGFyYW1zWydmZXVfdWlkJ107CiAgICB9CiAgICBlbHNlIHsKICAgICAgJGZldV9tb2R1bGUgPSBtb2R1bGVfaGVscGVyOjpnZXRfaW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgICAgJGZldV91aWQgPSAkZmV1X21vZHVsZS0+TG9nZ2VkSW5JZCgpOwogICAgfQoKICAgIGlmKCBpc3NldCgkcGFyYW1zWydwcm9kdWN0X2lkJ10pICkgJHByb2R1Y3RfaWQgPSAoaW50KSRwYXJhbXNbJ3Byb2R1Y3RfaWQnXTsKCiAgICBpZiggJHByb2R1Y3RfaWQgPCAxIHx8ICRmZXVfdWlkIDwgMSApIHJldHVybjsgIC8vIGludmFsaWQvaW5zdWZmaWNpZW50IHBhcmFtcwoKICAgICRyZXMgPSBzZWxmOjpnZXRfZGlzY291bnRfZm9yX3Byb2R1Y3QoJGZldV91aWQsJHByb2R1Y3RfaWQpOwogICAgaWYoICRyZXMgKSB7CiAgICAgICRyZXNbJ2RlY2ltYWwnXSA9ICRyZXNbJ3BlcmNlbnRhZ2UnXTsKICAgICAgJHJlc1sncGVyY2VudGFnZSddICo9IDEwMC4wOwogICAgfQogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Fzc2lnbiddKSApIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ2Fzc2lnbiddLCRyZXMpOwogICAgICByZXR1cm47CiAgICB9CiAgICByZXR1cm4gJHJlczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY2FydF9pdGVtcygkaXRlbXMpCiAgewogICAgaWYoICFpc19hcnJheSgkaXRlbXMpICkgcmV0dXJuOwoKICAgIC8vIHRvZG8sIHRoZXNlIHNob3VsZCBhbGwgYmUgY2dfZWNvbW1fY2FydGl0ZW0gb2JqZWN0cwogICAgJHRoaXMtPl9jdXJfY2FydF9pdGVtcyA9ICRpdGVtczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiAmZ2V0X3Rlc3Rfb2JqZWN0KCkKICB7CiAgICAkb2IgPSBuZXcgcHJvbW90aW9uX3Rlc3RlcigpOwogICAgcmV0dXJuICRvYjsKICB9Cn0gLy8gY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></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+TGFuZygndHlwZScpfTogeyRtb2QtPkxhbmcoJHByb21vdHlwZSl9ICh7JHByb21vdHlwZX0pPC9oND4KCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLy8gPCFbQ0RBVEFbIAp2YXIgY29uZGl0aW9ucyA9IHt9Owp7Zm9yZWFjaCAkY29uZGl0aW9udHlwZXMgYXMgJGtleSA9PiAkcmVjfQpjb25kaXRpb25zLnska2V5fSA9IHsKICBuYW1lOiAneyRyZWMubmFtZX0nLAogIGxhYmVsOiAneyRyZWMubGFiZWx9JywKICBmaWVsZHM6IFsge2ZvciAkaSA9IDEgdG8gY291bnQoJHJlYy5maWVsZHMpfXskdG1wPSRyZWMuZmllbGRzWyRpLTFdfSd7JHRtcH0nLHsvZm9yfSBdCn0Key9mb3JlYWNofQoKdmFyIG9mZmVyX3Byb21wdHMgPSBuZXcgQXJyYXkoKTsKe2ZvcmVhY2ggZnJvbT0kb2ZmZXJ0eXBlcyBrZXk9J25hbWUnIGl0ZW09J3ZhbHVlJ30Ke2NhcHR1cmUgYXNzaWduPSd0bXAnfXByb21wdG9mZmVyX3skbmFtZX17L2NhcHR1cmV9Cm9mZmVyX3Byb21wdHNbInskbmFtZX0iXSA9ICJ7JG1vZC0+TGFuZygkdG1wKX0iOwp7L2ZvcmVhY2h9CnZhciBlcnJvcnMgPSBuZXcgQXJyYXkoKTsKZXJyb3JzWydub192YWx1ZSddID0gInskbW9kLT5MYW5nKCdlcnJvcl9zcGVjaWZ5X3ZhbHVlJyl9IjsKZXJyb3JzWydhbHJlYWR5X3Byb2QnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3JfYWxyZWFkeV9wcm9kdWN0X2NvbmQnKX0iOwplcnJvcnNbJ2R1cGxpY2F0ZV90eXBlJ10gPSAieyRtb2QtPkxhbmcoJ2Vycm9yX2R1cGxpY2F0ZV9jb25kaXRpb24nKX0iOwplcnJvcnNbJ25vX25hbWUnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3JfcHJvbW90aW9uX25hbWUnKX0iOwplcnJvcnNbJ25vX29mZmVyX2RhdGEnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3Jfbm9fb2ZmZXJfZGF0YScpfSI7CmVycm9yc1snbm9fY29uZGl0aW9ucyddID0gInskbW9kLT5MYW5nKCd3YXJuaW5nX25vX2NvbmRpdGlvbnMnKX0iOwoKZnVuY3Rpb24gaXNOdW1lcmljKGZvcm1fdmFsdWUpIHsKICBpZiAoZm9ybV92YWx1ZS5tYXRjaCgvXlxkKyQvKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7IAp9IAoKZnVuY3Rpb24gaW5fYXJyYXkobmVlZGxlLGhheXN0YWNrKSB7CiAgZm9yKCBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrICkgewogICAgaWYoIGhheXN0YWNrW2ldID09IG5lZWRsZSApIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIGdldF9jb25kaXRpb25zKCkgewogIHZhciBjb25kcyA9IFtdOwogICQoJyNjb25kZGF0YSBkaXYuY29uZGl0aW9uX2RhdGEnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICB2YXIgdHlwZSA9ICQodGhpcykuZmluZCgnLnNhdmVkX2NvbmR0eXBlJykudmFsKCk7CiAgICB2YXIgZGF0YSA9IFtdOwogICAgZGF0YS5wdXNoKCQodGhpcykuZmluZCgnLnNhdmVkX2NvbmRkYXRhMCcpLnZhbCgpKTsKICAgIHZhciB2ID0gJCh0aGlzKS5maW5kKCcuc2F2ZWRfY29uZGRhdGExJykudmFsKCk7CiAgICBpZiggdHlwZW9mIHYgIT0gJ3VuZGVmaW5lZCcgJiYgdi5sZW5ndGggPiAwICkgZGF0YS5wdXNoKHYpOwogICAgY29uZHNbdHlwZV0gPSBkYXRhOwogIH0pOwogIHJldHVybiBjb25kczsKfQoKZnVuY3Rpb24gY29uZGl0aW9uX2ludmFsaWQodHlwZSkgewogIHZhciBjb25kcyA9IGdldF9jb25kaXRpb25zKCk7CiAgLy8gcGFzcyBvbmUsIGxvb2sgZm9yIGR1cGxpY2F0ZSB0eXBlcwogIGZvciggdmFyIGN0eXBlIGluIGNvbmRzICkgewogICAgaWYoIGN0eXBlID09IHR5cGUgKSByZXR1cm4gJ2R1cGxpY2F0ZV90eXBlJzsKICB9CgogIC8vIHBhc3MgdHdvLCBsb29rIGZvciBkdXBsaWNhdGUgcHJvZHVjdCB0eXBlcwogIGZvciggdmFyIGN0eXBlIGluIGNvbmRzICkgewogICAgaWYoIGN0eXBlLm1hdGNoKC9QUk9ELykgJiYgdHlwZS5tYXRjaCgvUFJPRC8pICkgcmV0dXJuICdhbHJlYWR5X3Byb2QnOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9hZGRfY29uZGl0aW9uKHR5cGUsZGF0YSkKewogIHZhciBfZGF0YV9hcmVhID0gJCgnZGl2I2NvbmRpdGlvbl90ZW1wbGF0ZSBkaXYuY29uZGl0aW9uX2RhdGEnKS5jbG9uZSgpOwogIHZhciBfZGlzcF9hcmVhID0gJCgnZGl2I2NvbmRpdGlvbl90ZW1wbGF0ZSB0ci5jb25kaXRpb25fcm93JykuY2xvbmUoKTsKCiAgJCgnaW5wdXQuY29uZHR5cGUnLF9kYXRhX2FyZWEpLnZhbCh0eXBlKTsKICAkKCd0ZC5kaXNwdHlwZScsX2Rpc3BfYXJlYSkuaHRtbChjb25kaXRpb25zW3R5cGVdLmxhYmVsKTsKICBpZiggZGF0YS5sZW5ndGggPiAwICkgewogICAgJCgnaW5wdXQuY29uZGRhdGEwJyxfZGF0YV9hcmVhKS52YWwoZGF0YVswXSk7CiAgICAkKCd0ZC5kaXNwZGF0YTAnLF9kaXNwX2FyZWEpLmh0bWwoZGF0YVswXSk7CiAgfQogIGlmKCBkYXRhLmxlbmd0aCA+IDEgKSB7CiAgICAkKCdpbnB1dC5jb25kZGF0YTEnLF9kYXRhX2FyZWEpLnZhbChkYXRhWzFdKTsKICAgICQoJy5kaXNwZGF0YTEnLF9kaXNwX2FyZWEpLmh0bWwoZGF0YVsxXSk7CiAgfQogICQoJyNjb25kZGF0YScpLmFwcGVuZChfZGF0YV9hcmVhKTsKICAkKCcjY29uZHRhYmxlJykuYXBwZW5kKF9kaXNwX2FyZWEpOwp9CgpmdW5jdGlvbiBfaGFuZGxlX2luaXRpYWxfY29uZGl0aW9ucygpCnsKICAvLyBoYW5kbGUgaW5pdGlhbCBjb25kaXRpb25zCiAgdmFyIHRtcDsKICB7Zm9yICRpID0gMSB0byAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKX0KICB7JGNvbmQ9JHByb21vLT5nZXRfY29uZGl0aW9uKCRpLTEpfQogIHskZGF0YT0kY29uZC0+Z2V0X2RhdGEoKX0KICB0bXAgPSBbXTsKICB7Zm9yZWFjaCAkZGF0YSBhcyAkb25lfQogIHRtcC5wdXNoKCd7JG9uZX0nKTsKICB7L2ZvcmVhY2h9CiAgX2FkZF9jb25kaXRpb24oJ3skY29uZC0+Z2V0X2NvbmRfdHlwZSgpfScsdG1wKTsKICB7L2Zvcn0KICAkKCcjY29uZGxpc3QgPiAuY29uZGl0aW9uX3JvdycpLnNob3coKTsKfQoKalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogIF9oYW5kbGVfaW5pdGlhbF9jb25kaXRpb25zKCk7CgogIC8vIGhhbmRsZXIgZm9yIGV4dHJhIGFyZWEKICBqUXVlcnkoJyNleHRyYXMnKS5oaWRlKCk7CiAgalF1ZXJ5KCcjbGlua2V4dHJhcycpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICBqUXVlcnkoJyNleHRyYXMnKS50b2dnbGUoKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gc2V0dXAgaW5pdGlhbCBjb25kaXRpb24gbGlzdCBzdHVmZi4KICAkKGRvY3VtZW50KS5vbignY2xpY2snLCdhLmRlbGNvbmQnLGZ1bmN0aW9uKCl7CiAgICB2YXIgcm93ID0gJCh0aGlzKS5jbG9zZXN0KCd0ci5jb25kaXRpb25fcm93Jyk7CiAgICB2YXIgaWR4ID0gJChyb3cpLmluZGV4KCk7CiAgICAkKCdkaXYjY29uZGRhdGEgZGl2LmNvbmRpdGlvbl9kYXRhJykuZXEoaWR4KS5yZW1vdmUoKTsKICAgICQocm93KS5yZW1vdmUoKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gaW5pdGlhbGl6ZSB0aGUgb2ZmZXIgcHJvbXB0CiAgdHlwZSA9IGpRdWVyeSgnI29mZmVydHlwZScpLnZhbCgpOwogICQoJyNvZmZlcmRhdGEnKS5odG1sKG9mZmVyX3Byb21wdHNbdHlwZV0pOwogICQoJyMnK3R5cGUpLnNob3coKTsKICAkKCcjb2ZmZXJ0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICAvLyBvZmZlciB0eXBlIGNoYW5nZWQKICAgIHZhciB0eXBlID0galF1ZXJ5KCcjb2ZmZXJ0eXBlJykudmFsKCk7CiAgICAkKCcjb2ZmZXJkYXRhJykuaHRtbChvZmZlcl9wcm9tcHRzW3R5cGVdKTsKICAgICQoJy5vZmZlcl9leHRyYScpLmhpZGUoKTsKICAgICQoJyMnK3R5cGUpLnNob3coKTsKICB9KTsKIAogIC8vIGhhbmRsZSBjb25kaXRpb24gdHlwZSBjaGFuZ2VkCiAgJCgnI2NvbmR0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICAvLyBjb25kaXRpb24gdHlwZSBjaGFuZ2VkCiAgICB2YXIgdHlwZSA9ICQoJyNjb25kdHlwZScpLnZhbCgpOwogICAgdmFyIG4gPSBjb25kaXRpb25zW3R5cGVdLmZpZWxkcy5sZW5ndGg7CiAgICB0eXBlID0gY29uZGl0aW9uc1t0eXBlXTsKICAgICQoJ2Rpdi5jb25kZGF0YScpLmhpZGUoKTsKICAgICQoJ2Rpdi5jb25kZGF0YSBpbnB1dCcpLmF0dHIoJ2Rpc2FibGVkJywnZGlzYWJsZWQnKTsKICAgIGZvciggdmFyIGkgPSAwOyBpIDwgbjsgaSsrICkgewogICAgICAkKCdwI2RhdGFwcm9tcHQnK2kpLmh0bWwodHlwZS5maWVsZHNbaV0rJzonKTsKICAgICAgJCgnZGl2I2Rpdl9jb25kZGF0YScraSsnIGlucHV0JykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKICAgICAgJCgnZGl2I2Rpdl9jb25kZGF0YScraSkuc2hvdygpOwogICAgfSAgICAKICB9KTsKICAkKCcjY29uZHR5cGUnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKCiAgLy8gaGFuZGxlIGFkZCBjb25kaXRpb24gY2xpY2tlZC4KICAkKGRvY3VtZW50KS5vbignY2xpY2snLCcjYWRkYnRuJyxmdW5jdGlvbigpewogICAgdmFyIHR5cGUgPSAkKCcjY29uZHR5cGUnKS52YWwoKTsKICAgIHZhciBuID0gY29uZGl0aW9uc1t0eXBlXS5maWVsZHMubGVuZ3RoOwoKICAgIHZhciBjb25kdHlwZSA9ICQoJyNjb25kdHlwZScpLnZhbCgpOwogICAgdmFyIGRhdGEgPSBbXTsKICAgIHZhciB0ID0gJCgnI2NvbmRkYXRhMCcpLnZhbCgpOwogICAgaWYoIHR5cGVvZiB0ICE9ICd1bmRlZmluZWQnICYmIHQubGVuZ3RoID4gMCApIGRhdGEucHVzaCh0KTsKICAgIHQgPSAkKCcjY29uZGRhdGExJykudmFsKCk7CiAgICBpZiggdHlwZW9mIHQgIT0gJ3VuZGVmaW5lZCcgJiYgdC5sZW5ndGggPiAwICkgZGF0YS5wdXNoKHQpOwoKICAgIGlmKCBkYXRhLmxlbmd0aCAhPSBuICkgewogICAgICBhbGVydChlcnJvcnNbJ25vX3ZhbHVlJ10pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYoIGNvbmR0eXBlID09ICdQUk9NT1RJT05TX0NPTkRfUFJPRElEJyApIHsKICAgICAgaWYoIHBhcnNlSW50KGNvbmRkYXRhKSA8PSAwICkgewogICAgICAgIGFsZXJ0KGVycm9yc1snaW52YWxpZF92YWx1ZSddKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYoIGNvbmR0eXBlID09ICdQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnICkgewogICAgICAvLyB0b2RvLCBlcnJvciBjaGVjayBoZXJlCiAgICB9CiAgICBlcnJvciA9IGNvbmRpdGlvbl9pbnZhbGlkKGNvbmR0eXBlKTsKICAgIGlmKCBlcnJvciApIHsKICAgICAgYWxlcnQoZXJyb3JzW2Vycm9yXSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBfYWRkX2NvbmRpdGlvbihjb25kdHlwZSxkYXRhKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gaGFuZGxlZm9ybSBzdWJtaXQKICBqUXVlcnkoJyNzdWJtaXQnKS5saXZlKCdjbGljaycsZnVuY3Rpb24oKXsKICAgIHZhciBuYW1lID0galF1ZXJ5KCcjbmFtZScpLnZhbCgpOwogICAgdmFyIG9mZmVyZGF0YSA9IGpRdWVyeSgnI29mZmVyX2RhdGEnKS52YWwoKTsKICAgIGlmKCBuYW1lID09ICcnICkgewogICAgICBhbGVydChlcnJvcnNbJ25vX25hbWUnXSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmKCBvZmZlcmRhdGEgPT0gJycgKSB7CiAgICAgIGFsZXJ0KGVycm9yc1snbm9fb2ZmZXJfZGF0YSddKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgLy8gd2FybiBhYm91dCBubyBjb25kaXRpb25zLgogICAgaWYoIGpRdWVyeSgnZGl2I2NvbmRkYXRhJykuY2hpbGRyZW4oKS5zaXplKCkgPT0gMCApIHsKICAgICAgcmV0dXJuIGNvbmZpcm0oZXJyb3JzWydub19jb25kaXRpb25zJ10pOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgICAvLyBzdWNjZXNzCiAgfSk7Cgp9KTsKLy8gXV0+Cjwvc2NyaXB0PgoKPGRpdiBpZD0iY29uZGl0aW9uX3RlbXBsYXRlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogIDxkaXYgY2xhc3M9ImNvbmRpdGlvbl9kYXRhIj4KICAgIDxpbnB1dCBjbGFzcz0iY29uZHR5cGUiICB0eXBlPSJoaWRkZW4iIHJlYWRvbmx5PSJyZWFkb25seSIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kdHlwZVtdIiAgc2l6ZT0iNTAiLz4KICAgIDxpbnB1dCBjbGFzcz0iY29uZGRhdGEwIiB0eXBlPSJoaWRkZW4iIHJlYWRvbmx5PSJyZWFkb25seSIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kZGF0YTBbXSIgc2l6ZT0iNTAiLz4KICAgIDxpbnB1dCBjbGFzcz0iY29uZGRhdGExIiB0eXBlPSJoaWRkZW4iIHJlYWRvbmx5PSJyZWFkb25seSIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kZGF0YTFbXSIgc2l6ZT0iNTAiLz4KICA8L2Rpdj4KCiAgPHRhYmxlPgogICAgPHRyIGNsYXNzPSJjb25kaXRpb25fcm93Ij4KICAgICAgPHRkIGNsYXNzPSJkaXNwdHlwZSI+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJkaXNwZGF0YTAiPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0iZGlzcGRhdGExIj48L3RkPgogICAgICA8dGQ+PGEgY2xhc3M9ImRlbGNvbmQiIGhyZWY9IiMiPntjZ2ltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicgYWx0PSRtb2QtPkxhbmcoJ2RlbGV0ZScpfTwvYT48L3RkPgogICAgPC90cj4KICA8L3RhYmxlPgo8L2Rpdj4KCnskZm9ybXN0YXJ0fQoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSdzdWJtaXQnIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIgLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9Y2FuY2VsIiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ2NhbmNlbCcpfSIgLz4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfbmFtZScpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9J25hbWUnIG5hbWU9InskYWN0aW9uaWR9bmFtZSIgdmFsdWU9InskcHJvbW8tPmdldF9uYW1lKCl9IiBzaXplPSI4MCIgbWF4bGVuZ3RoPSIyNTUiIC8+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3N0YXJ0X2RhdGUnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAge2NhcHR1cmUgYXNzaWduPSd0bXAnfXskYWN0aW9uaWR9c3RhcnRfZGF0ZV97L2NhcHR1cmV9CiAgICB7aHRtbF9zZWxlY3RfZGF0ZSBwcmVmaXg9JHRtcCB0aW1lPSRwcm9tby0+Z2V0X3N0YXJ0X2RhdGUoKSBlbmRfeWVhcj0iKzUifQogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9lbmRfZGF0ZScpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1lbmRfZGF0ZV97L2NhcHR1cmV9CiAgICB7aHRtbF9zZWxlY3RfZGF0ZSBwcmVmaXg9JHRtcCB0aW1lPSRwcm9tby0+Z2V0X2VuZF9kYXRlKCkgZW5kX3llYXI9Iis1In0KICA8L3A+CjwvZGl2PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3Byb21wdF9vZmZlcicpfTo8L2xlZ2VuZD4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3cgbm9vZmZzZXQiPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0IG5vb2Zmc2V0Ij4KICAgICAgeyRtb2QtPkxhbmcoJ3Byb21wdF9vZmZlcl90eXBlJyl9OgogICAgPC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCBub29mZnNldCI+CiAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1vZmZlcl90eXBlIiBpZD0ib2ZmZXJ0eXBlIj4KICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRvZmZlcnR5cGVzIHNlbGVjdGVkPSRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKX0KICAgICAgPC9zZWxlY3Q+CiAgICA8L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQgbm9vZmZzZXQiIGlkPSJvZmZlcmRhdGEiPgogICAgICB7JG1vZC0+TGFuZygncHJvbXB0X29mZmVyX2RhdGEnKX06CiAgICA8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0IG5vb2Zmc2ZmZXQiPgogICAgICA8aW5wdXQgaWQ9Im9mZmVyX2RhdGEiIHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfZGF0YSIgc2l6ZT0iMTAiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0ieyRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKX0iLz4KICAgIDwvcD4KICA8L2Rpdj4KCiAge2lmICRwcm9tb3R5cGUgPT0gJ3Byb21vX3R5cGVfaW5zdGFudCd9CiAgICA8ZGl2IGNsYXNzPSJwYWdvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9hbGxvd19vbmNlJyl9OjwvcD4KICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAge2NnZV95ZXNub19vcHRpb25zIHByZWZpeD0kYWN0aW9uaWQgbmFtZT0nZXh0cmFfYWxsb3dfb25jZScgc2VsZWN0ZWQ9JHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X29uY2UnKX0KICAgICAgPC9wPgogICAgPC9kaXY+CiAgey9pZn0KCiAge2lmICRwcm9tb3R5cGUgPT0gJ3Byb21vX3R5cGVfY2hlY2tvdXQnfQogICAgPGRpdiBjbGFzcz0icGFnb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfYWxsb3dfY3VtdWxhdGl2ZScpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9J2V4dHJhX2FsbG93X2N1bXVsYXRpdmUnIHNlbGVjdGVkPSRwcm9tby0+Z2V0X2V4dHJhKCdhbGxvd19jdW11bGF0aXZlJyl9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogIHsvaWZ9CgogIDxkaXYgaWQtImV4dHJhX2luZm9fYXJlYSI+CiAge2Fzc2lnbiB2YXI9J21hcCcgdmFsdWU9JHByb21vLT5nZXRfb2ZmZXJfZXh0cmFfbWFwKCl9CiAge2ZvcmVhY2ggZnJvbT0kbWFwIGtleT0nb2ZmZXJ0eXBlJyBpdGVtPSdmbGRzJ30KICAgIDxkaXYgaWQ9Inskb2ZmZXJ0eXBlfSIgY2xhc3M9Im9mZmVyX2V4dHJhIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICB7Zm9yZWFjaCBmcm9tPSRmbGRzIGl0ZW09J2ZsZCd9CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57YXNzaWduIHZhcj0nYScgdmFsdWU9JGZsZC5sYWJlbH17JG1vZC0+TGFuZygkYSl9OjwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIHtpZiAkZmxkLnR5cGU9PSdjaGVja2JveCd9CiAgICAgICAgICAgIHthc3NpZ24gdmFyPSdiJyB2YWx1ZT0kZmxkLm5hbWV9CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1leHRyYV97JGJ9IiB2YWx1ZT0iMSIge2lmICRwcm9tby0+Z2V0X2V4dHJhKCRiKX1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4KICAgICAgICAgIHsvaWZ9CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgey9mb3JlYWNofQogICAgPC9kaXY+CiAgey9mb3JlYWNofQogIDwvZGl2Pgo8L2ZpZWxkc2V0PgoKPGZpZWxkc2V0IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3Byb21wdF9jb25kaXRpb25zJyl9OiZuYnNwOzwvbGVnZW5kPgogIDxkaXYgaWQ9ImNvbmRkYXRhIj48L2Rpdj4KICA8dGFibGUgaWQ9ImNvbmR0YWJsZSIgc3R5bGU9InBhZGRpbmc6IDFweDsgd2lkdGg6IDEwMCU7Ij48L3RhYmxlPgo8L2ZpZWxkc2V0PgoKPGZpZWxkc2V0IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogPGxlZ2VuZD57JG1vZC0+TGFuZygncHJvbXB0X2FkZF9jb25kaXRpb24nKX06PC9sZWdlbmQ+CiA8cCBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2NvbmRpdGlvbnMnKX08L3A+CiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY29uZGl0aW9uX3R5cGUnKX06PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9YWRkX2NvbmR0eXBlIiBpZD0iY29uZHR5cGUiPgogICAgIHtmb3JlYWNoICRjb25kaXRpb250eXBlcyBhcyAka2V5ID0+ICRyZWN9CiAgICAgICA8b3B0aW9uIHZhbHVlPSJ7JGtleX0iPnskcmVjLmxhYmVsfTwvb3B0aW9uPgogICAgIHsvZm9yZWFjaH0KICAgICA8L3NlbGVjdD4KICAgPC9wPgogPC9kaXY+CgogPGRpdiBpZD0iZGl2X2NvbmRkYXRhMCIgY2xhc3M9InBhZ2VvdmVyZmxvdyBjb25kZGF0YSI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCIgaWQ9ImRhdGFwcm9tcHQwIj57JG1vZC0+TGFuZygncHJvbXB0X2NvbmRpdGlvbl9kYXRhJyl9OjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IGlkPSJjb25kZGF0YTAiIHR5cGU9InRleHQiIG5hbWU9ImFkZF9jb25kZGF0YTEiIHNpemU9IjMwIi8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgaWQ9ImRpdl9jb25kZGF0YTEiIGNsYXNzPSJwYWdlb3ZlcmZsb3cgY29uZGRhdGEiPgogICA8cCBjbGFzcz0icGFnZXRleHQiIGlkPSJkYXRhcHJvbXB0MSI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jb25kaXRpb25fZGF0YTInKX06PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8aW5wdXQgaWQ9ImNvbmRkYXRhMSIgdHlwZT0idGV4dCIgbmFtZT0iYWRkX2NvbmRkYXRhMiIgc2l6ZT0iMzAiLz4KICAgPC9wPgogPC9kaXY+CgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJhZGRidG4iIG5hbWU9ImFkZCIgdmFsdWU9InskbW9kLT5MYW5nKCdhZGQnKX0iLz4KICAgPC9wPgogPC9kaXY+CjwvZmllbGRzZXQ+CgoKeyRmb3JtZW5kfQ==]]></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[eyogcHJvbW90aW9ucyB0YWIgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9IndpZHRoOiA5NSU7Ij57JG1vZC0+TGFuZygnd2Fybl9pbnN0YW50X3Byb21vdGlvbnMnKX08L2Rpdj4KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2luc3RhbnRfcHJvbW90aW9ucycpfTwvZGl2Pgp7aWYgaXNzZXQoJHByb21vdGlvbnMpfQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSBjbXNfc29ydGFibGUgdGFibGVzb3J0ZXIiIGNlbGxzcGFjaW5nPSIwIj4KICA8dGhlYWQ+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[eyogdGVtcGxhdGUgZm9yIGNvbmRpdGlvbiByb3dzICp9Cnthc3NpZ24gdmFyPSJjb25kdHlwZSIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2Fzc2lnbiB2YXI9ImNvbmRkYXRhMCIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2Fzc2lnbiB2YXI9ImNvbmRkYXRhMSIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2lmIGlzc2V0KCRjb25kKX0KICB7YXNzaWduIHZhcj0iY29uZHR5cGUiIHZhbHVlPSRjb25kLT5nZXRfY29uZF90eXBlKCl9CiAgeyR0bXA9JGNvbmQtPmdldF9kYXRhKCl9CiAge2lmIGlzX2FycmF5KCR0bXApfQogICAgeyRjb25kZGF0YTA9JHRtcFswXX0KICAgIHskY29uZGRhdGExPSR0bXBbMV19CiAge2Vsc2V9CiAgICB7JGNvbmRkYXRhMD0kdG1wfQogIHsvaWZ9CnsvaWZ9Cgo8ZGl2IGlkPSJjb25kaXRpb25fcm93X3RtcGwiIGNsYXNzPSdjb25kaXRpb25fcm93JyBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogIDxpbnB1dCBjbGFzcz0ic2F2ZWRfY29uZHR5cGUiIHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kdHlwZVtdIiB2YWx1ZT0ieyRjb25kdHlwZX0iLz4KICA8aW5wdXQgY2xhc3M9InNhdmVkX2NvbmRkYXRhMCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNhdmVkX2NvbmRkYXRhW10iIHZhbHVlPSJ7JGNvbmRkYXRhMH0iLz4KICA8aW5wdXQgY2xhc3M9InNhdmVkX2NvbmRkYXRhMSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNhdmVkX2NvbmRkYXRhW10iIHZhbHVlPSJ7JGNvbmRkYXRhMX0iLz4KICA8dGFibGUgc3R5bGU9InBhZGRpbmc6IDFweDsgd2lkdGg6IDEwMCU7Ij4KICAgIDx0cj4KICAgICAgPHRkPgogICAgICAgIDxzcGFuIGNsYXNzPSdkaXNwX2NvbmR0eXBlJz57JG1vZC0+TGFuZygkY29uZHR5cGUpfTwvc3Bhbj4KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIDxzcGFuIGNsYXNzPSdkaXNwX2NvbmRkYXRhMCc+eyRjb25kZGF0YTB9PC9zcGFuPiAtLSA8c3BhbiBjbGFzcz0iZGlzcF9jb25kZGF0YTEiPnskY29uZGRhdGExfTwvc3Bhbj48L3NwYW4+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8YSBjbGFzcz0iZGVsY29uZCIgaHJlZj0iIyIgdGl0bGU9InskbW9kLT5MYW5nKCdkZWxldGUnKX0iPntjZ2ltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicgYWx0PSRtb2QtPkxhbmcoJ2RlbGV0ZScpfTwvYT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KPC9kaXY+]]></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>
