<?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>CGSnapshot</name>
	<version>1.0</version>
  <mincmsversion>1.12.1</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgaXMgYSB1dGlsaXR5IG1vZHVsZSB0byBhbGxvdyBhdXRob3JpemVkIHBlcnNvbmVsbCB0byBnZW5lcmF0ZSBzbmFwc2hvdHMgb2YgYWxsIG9mIHRoZSBmaWxlcyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRhdGFiYXNlIG9mIGEgQ01TTVMgaW5zdGFsbGF0aW9uIGFuZCBkb3dubG9hZCBpdCB0byB5b3VyIGxvY2FsIGNvbXB1dGVyLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB1bmRlcnRha2luZyBzaXRlIHVwZ3JhZGVzLCBvciB3aGVuIG1vdmluZyBhIHNpdGUgdG8gYSBuZXcgaG9zdC48L3A+CjxwPlRoZSBzbmFwc2hvdHMgZ2VuZXJhdGVkIGFyZSBzdG9yZWQgaW4gc3RhbmRhcmQgLnppcCBmaWxlcyB3aGljaCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBzaXRlIGF0IGFueSB0aW1lLCBlaXRoZXIgbWFudWFsbHkgb3Igd2l0aCBhbiBpbnRlcmFjdGl2ZSBDTEkgYmFzZWQgcGhwIHNjcmlwdC48L3A+Cgo8aDM+SG93IGRvIEkgVXNlIGl0PzwvaDM+CjxwPkFmdGVyIGluc3RhbGxpbmcgdGhlIG1vZHVsZSwgdmlzaXQgdGhlIFNpdGUgQWRtaW4gPj4gQ0dTbmFwc2hvdHMgbWVudSBpdGVtIGFuZCBjbGljayAnQ3JlYXRlIFNuYXBzaG90IE5vdycuICBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIHNuYXBzaG90IGZpbGUgYW5kIHNlbmQgaXQgdG8geW91ciBsb2NhbCBicm93c2VyLjwvcD4KCjxoMz5DYXV0aW9uPC9oMz4KPHA+U25hcHNob3QgZmlsZXMgYXJlIHR5cGljYWx5IGxhcmdlLCBhbmQgY2FuIGNvbnN1bWUgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygc2VydmVyIHJlc291cmNlcyBpbiBnZW5lcmF0aW5nIHRoZW0sIGFuZCBkb3dubG9hZGluZyB0aGVtLiAgVGhpcyB1dGlsaXR5IG1heSBub3Qgd29yayB3ZWxsIGZvciBzaXRlcyB0aGF0IGNvbnN1bWUgbXVsdGktZ2lnYWJ5dGVzIG9mIGRpc2sgc3BhY2UsIG9yIG9uIGEgc2VydmVyIHdpdGggbGltaXRlZCByZXNvdXJjZXMuICAgVXNlIGF0IHlvdXIgb3duIHJpc2suPC9wPgo8cD5TbmFwc2hvdCBmaWxlcyBhcmUgZ2VuZXJhdGVkIGFuZCBzdG9yZWQgb24gdGhlIHNlcnZlciB1bnRpbCBzdWNoIHRpbWUgYXMgdGhleSBlaXRoZXIgZXhwaXJlIChhIHNldHRpbmcgaW4gQ01TTVMpIG9yIHRoZSBzZXJ2ZXIgY2FjaGUgaXMgY2xlYXJlZC4gIFRoZXNlIGNhbiB0YWtlIHVwIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHNwYWNlLCBzbyB1c2UgY2F1dGlvbiB3aGVuIGdlbmVyYXRpbmcgdGhlbS48L3A+Cgo8aDM+UmVzdG9yaW5nPC9oMz4KPHA+VGhlIENHU25hcHNob3QgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyYWN0aXZlIENMSSBiYXNlZCBwaHAgc2NyaXB0IChhY3R1YWxseSBhIGJpbmFyeSAucGhhciBmaWxlKSB0byBhaWRlIGluIHJlc3RvcmluZyB0aGUgc25hcHNob3QuICBUaGlzIGZpbGUgaXMgbG9jYXRlZCBpbiB0bXAvcmVzdG9yZS5waHAgaW4gdGhlIGluY2x1ZGVkIHNuYXBzaG90LCAgYW5kIGNhbiBhbHNvIGJlIGRvd25sb2FkZWQgc2VwYXJhdGVseSBmcm9tIHdpdGhpbiB0aGUgQ0dTbmFwc2hvdCBhZG1pbiBwYW5lbC48L3A+CjxwPlRvIGRvIGFuIGludGVyYWN0aXZlIHJlc3RvcmUgeW91IHdpbGwgbmVlZCBzaGVsbCBhY2NjZXNzIChpbiBhIGxpbnV4IGVudmlyb25tZW50KSB0byB0aGUgZGVzdGluYXRpb24gc2VydmVyLjwvcD4KPHA+SW5zdHJ1Y3Rpb25zOjwvcD4KPG9sPgogIDxsaT5VcGxvYWQgdGhlIHNuYXBzaG90IC56aXAgZmlsZSBpbiBpdHMgZW50aXJldHkgKGRvIG5vdCBleHBhbmQgaXQpIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuICBVc2luZyBTU0ggaXMgdGhlIGJlc3QgbWV0aG9kLjwvbGk+CiAgPGxpPlVwbG9hZCB0aGUgcmVzdG9yZSBzY3JpcHQgKHVzdWFsbHkgbmFtZWQgIkNHU25hcHNob3QtUmVzdG9yZS5waHAiKSBmaWxlIChJTiBCSU5BUlkgTU9ERSkgdG8gdGhlIGRlc3RpbmF0aW9uIGZvbGRlci48L2xpPgogIDxsaT5Vc2luZyBTU0ggb3IgYW5vdGhlciBtZWNoYW5pc20gY29ubmVjdCB0byB5b3VyIHNlcnZlcnMgc2hlbGwgY29uc29sZS48L2xpPgogIDxsaT5OYXZpZ2F0ZSB0byB5b3VyIGRlc3RpbmF0aW9uIGZvbGRlciAodGhlIHNhbWUgZm9sZGVyIHlvdSB1c2VkIGluIHRoZSBmaXJzdCB0d28gc3RlcHMpLjwvbGk+CiAgPGxpPkV4ZWN1dGU6ICBwaHAgQ0dTbmFwc2hvdC1SZXN0b3JlLnBocAogICAgIDxwPlRoaXMgd2lsbCBicmluZyB1cCBhbiBpbnRlcmFjdGl2ZSwgY29uc29sZSBkcml2ZW4gdXRpbGl0eSB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBzbmFwc2hvdCBmaWxlLCBhbmQgZW50ZXIgZGF0YWJhc2UgY3JlZGVudGlhbCBpbmZvcm1hdGlvbi48L3A+CiAgICAgPHA+VGhlIHNjcmlwdCB3aWxsIHRoZW4gdmVyaWZ5IHRoZSBkYXRhYnNlIGNyZWRlbnRpYWxzLCBhbmQgdGhhdCB0aGUgZGF0YWJhc2UgaXMgZW1wdHkuPC9wPgogICAgIDxwPkZvbGxvd2luZyB0aGlzIHRoZSBkYXRhYmFzZSBkdW1wIHdpbGwgYmUgaW1wb3J0ZWQgdG8gdGhlIG5ldyBkYXRhYmFzZSwgYW5kIHRoZSB6aXAgZmlsZSBleHBhbmRlZC48L3A+CiAgICAgPHA+VGhpcyBzY3JpcHQgd2lsbCB0aGVuIGdlbmVyYXRlIGEgbmV3IGNvbmZpZy5waHAsIGdlbmVyYXRlIHRoZSBzcGVjaWFsIENNU01TIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgYW5kIHBlcmZvcm0gY2xlYW51cC48L3A+CiAgICAgPHA+VGhlIHV0aWxpdHkgd2lsbCBhdXRvbWF0aWNhbGx5IGRlbGV0ZSBpdHNlbGYsIGFuZCByZW1vdmUgdGhlIHppcCBmaWxlIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0ZWlvbi48L3A+CiAgPC9saT4KPC9vbD4KCjxoMz5BZnRlciBSZXN0b3JhdGlvbjwvaDM+CjxwPkFmdGVyIHJlc3RvcmF0aW9uLCBwYXJ0aWN1bGFybHkgaWYgeW91IGFyZSByZXN0b3JpbmcgdG8gYSBkaWZmZXJlbnQgaG9zdCB0aGVuIHlvdSBtYXkgbmVlZCB0byBtYWtlIGFkanVzdG1lbnRzIHRvIHNvbWUgZmlsZXMuICBJbmNsdWRpbmc6PC9wPgo8dWw+CiAgPGxpPkFkanVzdGluZyB0aGUgLmh0YWNjZXNzIGZpbGUgZm9yIHRoZSByZXdyaXRlX2Jhc2UgYW5kIGFueSBvdGhlciByZWRpcmVjdCBydWxlcy48L2xpPgogIDxsaT5BZGp1c3RpbmcgcGF0aHMgaW4gdGhlIGNvbmZpZy5waHAgZmlsZS48L2xpPgogIDxsaT5BZGp1c3RpbmcgcGVybWlzc2lvbnMKICAgICA8cD5EZXBlbmRpbmcgdXBvbiB0aGUgZGVzdGluYXRpb24gc2VydmVyIGVudmlyb25tZW50LCBhbmQgdGhlIGFjY291bnRzIHRoYXQgeW91IGFyZSB1c2luZyB0byBjb25uZWN0IHZpYSBzaGVsbCwgYW5kIGZvciB0aGUgd2ViIHNlcnZlciwgeW91IG1heSBuZWVkIHRvIGFkanVzdCBwZXJtaXNzaW9ucyBvZiBzb21lIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGZvciBDTVNNUyB0byB3b3JrIHByb3Blcmx5LjwvcD4KICAgICA8cD5JbmZvcm1hdGlvbiBhYm91dCBwcm9wZXIgcGVybWlzc2lvbnMgZm9yIENNU01TIGlzIHdlbGwgZG9jdW1lbnRlZCBvbiB0aGUgQ01TTVMgZG9jdW1lbnRhdGlvbiBzaXRlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kb2NzLmNtc21hZGVzaW1wbGUub3JnIj5kb2NzLmNtc21hZGVzaW1wbGUub3JnPC9hPgogIDwvbGk+CjwvdWw+Cgo8aDM+U3BlY2lhbCBGaWxlczwvaDM+CjxwPklmIHBlcmZvcm1pbmcgYSBtYW51YWwgcmVzdG9yYXRpb24sIHRoZXJlIGFyZSBzb21lIHNwZWNpYWwgZmlsZXMgaW4gdGhlIGFyY2hpdmUgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGRlbGV0ZSBhZnRlciBtYW51YWxseSBleHBhbmRpbmcgdGhlIC56aXAgZmlsZTo8L3A+Cjx1bD4KICA8bGk+dG1wL19fbXlzcWxkdW1wLnNxbCAtIFRoaXMgaXMgdGhlIGR1bXAgb2YgdGhlIGRhdGFiYXNlLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZpbGUgYmUgZGVsZXRlZCBvbiBsaXZlIHNpdGVzLjwvbGk+CiAgPGxpPnRtcC8uY2dzbmFwc2hvdCAtIFRoaXMgaXMgYSBtYWdpYyBmaWxlIHVzZWQgYnkgdGhlIGludGVyYWN0aXZlIHJlc3RvcmF0aW9uIHNjcmlwdC4gIEl0IHNob3VsZCBiZSBkZWxldGVkIG9uIGxpdmUgc2l0ZXMuPC9saT4KPC91bD4KCjxoMz5SZXF1aXJlbWVudHM8L2gzPgo8cD5UaGlzIG1vZHVsZSBoYXMgdGhlc2Ugc3BlY2lhbCByZXF1aXJlbWVudHM6PC9wPgo8dWw+CiAgPGxpPlZhbGlkLCBhbmQgd3JpdGFibGUgc3lzdGVtIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgICAgPHA+VGhlIHBocCBmdW5jdGlvbiBzeXNfZ2V0X3RlbXBfZGlyKCkgbXVzdCByZXR1cm4gYSB2YWxpZCwgd3JpdGFibGUgZGlyZWN0b3J5LjwvcD4KICA8L2xpPgogIDxsaT5TdXBwb3J0IGZvciB0aGUgUEhQIFppcEFyY2hpdmUgY2xhc3MuPC9saT4KICA8bGk+VGhlIGFiaWxpdHkgdG8gYWRqdXN0IHRoZSBwaHAgc2NyaXB0IHRpbWUgbGltaXQuCiAgICA8cD50aGUgc2V0X3RpbWVfbGltaXQoOTk5OSkgbWV0aG9kIG11c3Qgd29yayBwcm9wZXJseS48L3A+CiAgPC9saT4KPC91bD4KCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhlIG1vZHVsZSBhdXRob3IgaXMgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5BIGJ1ZyB0cmFja2luZyBhbmQgZmVhdHVyZSByZXF1ZXN0IHN5c3RlbSBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGlzIG1vZHVsZSA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2Nnc25hcHNob3QiPmhlcmU8L2E+LiAgUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJvdmlkZSBhbGwgcmVsYXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS4gIEhvd2V2ZXIsIHBsZWFzZSB1c2UgdGhpcyBhcyBhIGxhc3QgcmVzb3J0LCBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgZm9sbG93ZWQgYWxsIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBmb3JnZSwgaW4gdGhlIGZvcnVtcywgZXRjLjwvbGk+CjwvdWw+CgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOC0yMDEyLCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4Kc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMDxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPgk8dWw+Cgk8bGk+Tm90IG9mZmljaWFsbHkgcmVsZWFzZWQgeWV0PC9saT4KCTwvdWw+CjxiciAvPg==]]></about>
	<description><![CDATA[A simple module to create snapshots of the CMSMS filesystem and database.  Useful for quick backups or site moves.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYoICEkdGhpcy0+VmlzaWJsZVRvQWRtaW5Vc2VyKCkgKSByZXR1cm47Cgp0cnkgewogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NuYXBzaG90bm93J10pICkgewogICAgICAgICRhZGRyID0gbnVsbDsKICAgICAgICAkbWFpbGVyID0gbnVsbDsKICAgICAgICAkZGlzcG9zZSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnZGlzcG9zZScsJ2Rvd25sb2FkJyk7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ByZWZfZGlzcG9zZScsJGRpc3Bvc2UpOwoKICAgICAgICAvLyB2YWxpZGF0ZSBkaXNwb3NpdGlvbnMuCiAgICAgICAgc3dpdGNoKCAkZGlzcG9zZSApIHsKICAgICAgICBjYXNlICdlbWFpbDEnOgogICAgICAgICAgICAkYWRkciA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnZW1haWwxJyk7CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcmVmX2VtYWlsMScsJGFkZHIpOwogICAgICAgICAgICBpZiggIWlzX2VtYWlsKCRhZGRyKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkbW9kLT5MYW5nKCdlcnJfaW52YWxpZF9lbWFpbCcpKTsKCiAgICAgICAgICAgICRtYWlsZXIgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDTVNNYWlsZXInKTsKICAgICAgICAgICAgaWYoICEkbWFpbGVyICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCRtb2QtPkxhbmcoJ2Vycl9jbXNtYWlsZXInKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gdmFsaWRhdGVkLCBub3cgY3JlYXRlIHRoZSBzbmFwc2hvdC4KICAgICAgICBAc2V0X3RpbWVfbGltaXQoOTk5OSk7CiAgICAgICAgJGxvZ2dlciA9IG5ldyBcQ0dTbmFwc2hvdFxmaWxlX2xvZ2dlcihcQ0dTbmFwc2hvdFxmaWxlX2xvZ2dlcjo6TFZMX0RFQlVHKTsKICAgICAgICAkY3JlYXRvciA9IG5ldyBcQ0dTbmFwc2hvdFxzbmFwc2hvdF9jcmVhdG9yOwogICAgICAgICRjcmVhdG9yLT5zZXRfbG9nZ2VyKCRsb2dnZXIpOwogICAgICAgICRzbmFwc2hvdCA9ICRjcmVhdG9yLT5leGVjdXRlKCk7CgogICAgICAgIC8vIG5vdyB3ZSBoYXZlIHRoZSBkb3dubG9hZCwgd2hhdCBkbyB3ZSB3YW50IHRvIGRvIHdpdGggaXQuCiAgICAgICAgc3dpdGNoKCAkZGlzcG9zZSApIHsKICAgICAgICBjYXNlICdlbWFpbDEnOgogICAgICAgICAgICAkY29uZmlnID0gXGNtc19jb25maWc6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAkY29udGVudG9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgICAgICRjb2RlID0gbWQ1KF9fRElSX18uJHRoaXMtPkdldE5hbWUoKS5iYXNlbmFtZSgkc25hcHNob3QpKTsKICAgICAgICAgICAgJHNuYXBzaG90X3VybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnZ2V0X3NuYXBzaG90JywkY29udGVudG9wcy0+R2V0RGVmYXVsdENvbnRlbnQoKSxhcnJheSgnc25hcHNob3QnPT4kY29kZSkpOwoKICAgICAgICAgICAgJGF1dG9fY2xlYXJfY2FjaGVfYWdlID0gKGludCkgXGNtc19zaXRlcHJlZnM6OmdldCgnYXV0b19jbGVhcl9jYWNoZV9hZ2UnKTsKICAgICAgICAgICAgJGF1dG9fY2xlYXJfY2FjaGVfYWdlID0gbWF4KDAsJGF1dG9fY2xlYXJfY2FjaGVfYWdlKTsKICAgICAgICAgICAgJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnZGlzcG9zZV9lbWFpbDEudHBsJyk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignYXV0b19jbGVhcl9jYWNoZV9hZ2UnLCRhdXRvX2NsZWFyX2NhY2hlX2FnZSk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignc25hcHNob3RfdXJsJywkc25hcHNob3RfdXJsKTsKICAgICAgICAgICAgJGJvZHkgPSAkdHBsLT5mZXRjaCgpOwogICAgICAgICAgICAkc3ViamVjdCA9ICdDR1NuYXBzaG90IG9mICcuXGNtc19zaXRlcHJlZnM6OmdldCgnc2l0ZW5hbWUnKS4nIGNyZWF0ZWQgb24gJy5zdHJmdGltZSgnJWQtJW0tJVknKTsKCiAgICAgICAgICAgICRtYWlsZXItPnJlc2V0KCk7CiAgICAgICAgICAgICRtYWlsZXItPlNldFByaW9yaXR5KDEpOwogICAgICAgICAgICAkbWFpbGVyLT5Jc0hUTUwoVFJVRSk7CiAgICAgICAgICAgICRtYWlsZXItPkFkZEFkZHJlc3MoJGFkZHIpOwogICAgICAgICAgICAkbWFpbGVyLT5TZXRTdWJqZWN0KCRzdWJqZWN0KTsKICAgICAgICAgICAgJG1haWxlci0+U2V0Qm9keSgkYm9keSk7CiAgICAgICAgICAgICRtYWlsZXItPlNlbmQoKTsKICAgICAgICAgICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnQ3JlYXRlZCBhIHNuYXBzaG90LCBhbmQgYW4gZW1haWwgbGluayB0byBpdCcpOwoKICAgICAgICAgICAgZWNobyAkdGhpcy0+TGFuZygnbXNnX2VtYWlsX3NlbnQnKTsKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBjYXNlICdkb3dubG9hZCc6CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgJHJlYWRhYmxlX25hbWUgPSAnQ0dTbmFwc2hvdC0nLlxjbXNfc2l0ZXByZWZzOjpnZXQoJ3NpdGVuYW1lJykuJy0nLnN0cmZ0aW1lKCclZC0lbS0lWScpLicuemlwJzsKICAgICAgICAgICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnRG93bmxvYWRlZCBhIHNuYXBzaG90Jyk7CiAgICAgICAgICAgIFxjZ2VfdXRpbHM6OnNlbmRfZmlsZV9hbmRfZXhpdCgkc25hcHNob3QsMTAwKjEwMjQsJycsJHJlYWRhYmxlX25hbWUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlLT5HZXRNZXNzYWdlKCkpOwp9CgokZGlzcG9zZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwcmVmX2Rpc3Bvc2UnLCdkb3dubG9hZCcpOwokdHBsID0gJHRoaXMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCdkZWZhdWx0YWRtaW4udHBsJyk7CiR0cGwtPmFzc2lnbigncHJlZl9kaXNwb3NlJywkZGlzcG9zZSk7CiR0cGwtPmFzc2lnbignYWRtaW5fZW1haWwnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwcmVmX2VtYWlsMScpKTsKJHRwbC0+YXNzaWduKCdkb3dubG9hZCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3ByZWZfZG93bmxvYWQnKSk7CiR0cGwtPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCkpOwokdHBsLT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokcmVzdG9yZV9zY3JpcHQgPSAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLicvcGhhci9DR1NuYXBzaG90LVJlc3RvcmUucGhwJzsKaWYoIGlzX2ZpbGUoJHJlc3RvcmVfc2NyaXB0KSApIHsKICAgICRyZXN0b3JlX3VybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnZ2V0X3Jlc3RvcmVfc2NyaXB0Jyk7CiAgICAkdHBsLT5hc3NpZ24oJ3Jlc3RvcmVfdXJsJywkcmVzdG9yZV91cmwpOwp9CiR0cGwtPmRpc3BsYXkoKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.get_restore_script.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5WaXNpYmxldG9BZG1pblVzZXIoKSApIGV4aXQ7CgokcmVzdG9yZV9zY3JpcHQgPSAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLicvcGhhci9DR1NuYXBzaG90LVJlc3RvcmUucGhwJzsKaWYoICFpc19maWxlKCRyZXN0b3JlX3NjcmlwdCkgKSB0aHJvdyBuZXcgXENtc0Vycm9yNDA0RXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCByZXN0b3JlIHNjcmlwdCBpbiBmaWxlc3lzdGVtJyk7CgpcY2dlX3V0aWxzOjpzZW5kX2ZpbGVfYW5kX2V4aXQoJHJlc3RvcmVfc2NyaXB0KTs=]]></data>
	</file>
	<file>
	  <filename>/action.get_snapshot.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKdHJ5IHsKICAgICRjb2RlID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCdzbmFwc2hvdCcpOwogICAgaWYoICEkY29kZSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyX21pc3NpbmdwYXJhbScpKTsKCiAgICAvLyBmaW5kIGFsbCBvZiB0aGUgc25hcHNob3QgZmlsZXMgaW4gdGhlIFRNUF9DQUNIRSBkaXJlY3RvcnkKICAgIC8vIGJ1aWxkIGEgbWFwIG9mIHRoZWlyIGNvZGVzCiAgICAkZmlsZXMgPSBnbG9iKFRNUF9DQUNIRV9MT0NBVElPTi4nL19zcCouemlwJyk7CiAgICBpZiggIWNvdW50KCRmaWxlcykgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycl9ub3NuYXBzaG90cycpKTsKCiAgICAkbWFwID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRmaWxlcyBhcyAkb25lICkgewogICAgICAgICRibiA9IGJhc2VuYW1lKCRvbmUpOwogICAgICAgICR0X2NvZGUgPSBtZDUoX19ESVJfXy4kdGhpcy0+R2V0TmFtZSgpLiRibik7CiAgICAgICAgJG1hcFskdF9jb2RlXSA9ICRvbmU7CiAgICB9CiAgICBpZiggIWlzc2V0KCRtYXBbJGNvZGVdKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyX3NuYXBzaG90bm90Zm91bmQnKSk7CgogICAgJG9uZSA9ICRtYXBbJGNvZGVdOwogICAgJGN0aW1lID0gZmlsZWN0aW1lKCRvbmUpOwogICAgJHJlYWRhYmxlX25hbWUgPSAnQ0dTbmFwc2hvdC0nLlxjbXNfc2l0ZXByZWZzOjpnZXQoJ3NpdGVuYW1lJykuJy0nLnN0cmZ0aW1lKCclZC0lbS0lWScsJGN0aW1lKS4nLnppcCc7CiAgICBcY2dlX3V0aWxzOjpzZW5kX2ZpbGVfYW5kX2V4aXQoJG9uZSwxMDAqMTAyNCwnJywkcmVhZGFibGVfbmFtZSk7Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICBlY2hvICR0aGlzLT5EaXNwbGF5RXJyb3JNZXNzYWdlKCRlLT5HZXRNZXNzYWdlKCkpOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/CGSnapshot.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgpmaW5hbCBjbGFzcyBDR1NuYXBzaG90IGV4dGVuZHMgQ0dFeHRlbnNpb25zCnsKICAgIHByaXZhdGUgJF9zbmFwc2hvdGRpcjsKCiAgICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gVFJVRTsgfQogICAgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIExhenlMb2FkQWRtaW4oKSB7IHJldHVybiBUUlVFOyB9CiAgICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gJzEuMCc7IH0KICAgIGZ1bmN0aW9uIElzQWRtaW5Pbmx5KCkgeyByZXR1cm4gVFJVRTsgfQogICAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7IHJldHVybiAnMS4xMi4xJzsgfQogICAgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkgeyBhcnJheSgnQ0dFeHRlbnNpb25zJz0+JzEuNTEnLCdDTVNNYWlsZXInPT4nMS4wJyk7IH0KICAgIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZGVzY3JpcHRpb24nKTsgfQogICAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgeyByZXR1cm4gJ3NpdGVhZG1pbic7IH0KICAgIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsKICAgICAgICByZXR1cm4gZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL2NoYW5nZWxvZy5pbmMnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKQogICAgewogICAgICAgICRjb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgJHRoaXMtPl9zbmFwc2hvdGRpciA9ICRjb25maWdbJ3Jvb3RfcGF0aCddLicvdXBsb2Fkcy8uX2Nnc25hcHNob3QnOwogICAgfQoKICAgIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBTbmFwc2hvdHMnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NuYXBzaG90JyxDTEVBTl9TVFJJTkcpOwogICAgfQoKICAgIC8vIHJldHVybiBzbmFwc2hvdCBuYW1lCiAgICBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlU25hcHNob3QoKQogICAgewogICAgICAgICRzaXRlbmFtZSA9IFxjbXNfc2l0ZXByZWZzOjpnZXQoJ3NpdGVuYW1lJywnQ01TTVMgU2l0ZScpOwogICAgICAgICRzaXRlbmFtZSA9IHN0cnRvbG93ZXIoJHNpdGVuYW1lKTsKICAgICAgICAkc2l0ZW5hbWUgPSBzdHJfcmVwbGFjZSgkc2l0ZW5hbWUsJyAnLCctJyk7CiAgICAgICAgJHNuYXBzaG90X25hbWUgPSAnY2dzbmFwc2hvdF8nLnN0cmZ0aW1lKCclWS0lbS0lZCcpLidfJy4kc2l0ZW5hbWU7CgogICAgICAgIC8vIHNldCB0aW1lbGltaXQKICAgICAgICAvLyBzZXQgc2l0ZWRvd24KICAgICAgICAkc2l0ZWRvd25fZmlsZSA9IFRNUF9DQUNIRV9MT0NBVElPTi4nL3NpdGVkb3duLmh0bWwnOwogICAgICAgIHRvdWNoKCRzaXRlZG93bl9maWxlKTsKCiAgICAgICAgLy8gY3JlYXRlIHRoZSB0bXAgb3V0cHV0IGRpcmVjdG9yeQogICAgICAgICR0bXBkaXIgPSBUTVBfQ0FDSEVfTE9DQVRJT04uJy8nLiR0aGlzLT5HZXROYW1lKCk7CiAgICAgICAgQG1rZGlyKCR0bXBkaXIpOwoKICAgICAgICAvLyBkbyB0aGUgbXlzcWwgZHVtcCBpbnRvIHRtcC9jYWNoZQogICAgICAgICRkdW1wZmlsZSA9ICR0bXBkaXIuJy9kdW1wLnNxbCc7CiAgICAgICAgJGNvbmZpZyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRDb25maWcoKTsKICAgICAgICAkZHVtcF9vYmogPSBuZXcgXENHU25hcHNob3Rcc3BfbXlzcWxkdW1wOwogICAgICAgICRkdW1wX29iai0+aG9zdCA9ICRjb25maWdbJ2RiX2hvc3RuYW1lJ107CiAgICAgICAgJGR1bXBfb2JqLT51c2VyID0gJGNvbmZpZ1snZGJfdXNlcm5hbWUnXTsKICAgICAgICAkZHVtcF9vYmotPnBhc3N3b3JkID0gJGNvbmZpZ1snZGJfcGFzc3dvcmQnXTsKICAgICAgICAkZHVtcF9vYmotPmRiID0gJGNvbmZpZ1snZGJfbmFtZSddOwogICAgICAgICRkdW1wX29iai0+cHJlZml4ID0gJGNvbmZpZ1snZGJfcHJlZml4J107CiAgICAgICAgJG91dCA9ICRkdW1wX29iai0+ZHVtcCgpOwogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRkdW1wZmlsZSwkb3V0KTsKCiAgICAgICAgLy8gZ2VuZXJhdGUgdGhlIGludGVybmFsIHRhcgogICAgICAgIC8vIC0gZXhjbHVkZSB0bXAgZmlsZXMgKGJ1dCBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzKQogICAgICAgIC8vIC0gZXhwbGljaXRseSBhZGQgdGhlIG15c3FsIGR1bXAKICAgICAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvciAoJGNvbmZpZ1sncm9vdF9wYXRoJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OkNISUxEX0ZJUlNUKSBhcyAkaXQpIHsKICAgICAgICAgICAgJGFic29sdXRlID0gJGl0LT5nZXRQYXRoTmFtZSgpOwogICAgICAgICAgICBpZiggJGl0LT5Jc0RpcigpICkgY29udGludWU7CiAgICAgICAgICAgICRhZGQgPSB0cnVlOwogICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkYWJzb2x1dGUsVE1QX0NBQ0hFX0xPQ0FUSU9OKSB8fCBzdGFydHN3aXRoKCRhYnNvbHV0ZSxUTVBfVEVNUExBVEVTX0NfTE9DQVRJT04pICkgewogICAgICAgICAgICAgICAgJGFkZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYoIHN0YXJ0c3dpdGgoICRhYnNvbHV0ZSwgJHRtcGRpcikgKSB7CiAgICAgICAgICAgICAgICAgICAgJGFkZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZWxzZSBjaGVjayBpZiBmaWxlIGlzIGV4Y2x1ZGVkCiAgICAgICAgICAgIGlmKCAkYWRkICkgJGZpbGVzW10gPSAkYWJzb2x1dGU7CiAgICAgICAgfQogICAgICAgIGRlYnVnX2Rpc3BsYXkoJGZpbGVzKTsgZGllKCk7CgogICAgICAgIC8vIC0gYWRkIHRoZSBleHRyYWN0IHNjcmlwdCBhbmQgcmVhZG1lCiAgICAgICAgLy8gLSBhcmNoaXZlIGFnYWluIGludG8gZmluYWwgZGlyZWN0b3J5CiAgICAgICAgLy8gLSBkZWxldGUgdGhlIHRtcCBkdW1wCiAgICAgICAgcmVjdXJzaXZlX3JtZGlyKCR0bXBkaXIpOwoKICAgICAgICAvLyByZW1vdmUgc2l0ZWRvd24KICAgICAgICBAdW5saW5rKCRzaXRlZG93bl9maWxlKTsKCiAgICAgICAgLy8gcmV0dXJuIHRoZSBmaWxlbmFtZQoKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gTGlzdFNuYXBzaG90cygpCiAgICB7CgogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBEb3dubG9hZFNuYXBzaG90KCRuYW1lKQogICAgewoKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gRGVsZXRlU25hcHNob3QoJG5hbWUpCiAgICB7CgogICAgfQoKfSAvLyBFbmQgb2YgY2xhc3MKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CTx1bD4KCTxsaT5Ob3Qgb2ZmaWNpYWxseSByZWxlYXNlZCB5ZXQ8L2xpPgoJPC91bD4K]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgaXMgYSB1dGlsaXR5IG1vZHVsZSB0byBhbGxvdyBhdXRob3JpemVkIHBlcnNvbmVsbCB0byBnZW5lcmF0ZSBzbmFwc2hvdHMgb2YgYWxsIG9mIHRoZSBmaWxlcyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRhdGFiYXNlIG9mIGEgQ01TTVMgaW5zdGFsbGF0aW9uIGFuZCBkb3dubG9hZCBpdCB0byB5b3VyIGxvY2FsIGNvbXB1dGVyLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB1bmRlcnRha2luZyBzaXRlIHVwZ3JhZGVzLCBvciB3aGVuIG1vdmluZyBhIHNpdGUgdG8gYSBuZXcgaG9zdC48L3A+CjxwPlRoZSBzbmFwc2hvdHMgZ2VuZXJhdGVkIGFyZSBzdG9yZWQgaW4gc3RhbmRhcmQgLnppcCBmaWxlcyB3aGljaCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBzaXRlIGF0IGFueSB0aW1lLCBlaXRoZXIgbWFudWFsbHkgb3Igd2l0aCBhbiBpbnRlcmFjdGl2ZSBDTEkgYmFzZWQgcGhwIHNjcmlwdC48L3A+Cgo8aDM+SG93IGRvIEkgVXNlIGl0PzwvaDM+CjxwPkFmdGVyIGluc3RhbGxpbmcgdGhlIG1vZHVsZSwgdmlzaXQgdGhlIFNpdGUgQWRtaW4gPj4gQ0dTbmFwc2hvdHMgbWVudSBpdGVtIGFuZCBjbGljayAnQ3JlYXRlIFNuYXBzaG90IE5vdycuICBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIHNuYXBzaG90IGZpbGUgYW5kIHNlbmQgaXQgdG8geW91ciBsb2NhbCBicm93c2VyLjwvcD4KCjxoMz5DYXV0aW9uPC9oMz4KPHA+U25hcHNob3QgZmlsZXMgYXJlIHR5cGljYWx5IGxhcmdlLCBhbmQgY2FuIGNvbnN1bWUgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygc2VydmVyIHJlc291cmNlcyBpbiBnZW5lcmF0aW5nIHRoZW0sIGFuZCBkb3dubG9hZGluZyB0aGVtLiAgVGhpcyB1dGlsaXR5IG1heSBub3Qgd29yayB3ZWxsIGZvciBzaXRlcyB0aGF0IGNvbnN1bWUgbXVsdGktZ2lnYWJ5dGVzIG9mIGRpc2sgc3BhY2UsIG9yIG9uIGEgc2VydmVyIHdpdGggbGltaXRlZCByZXNvdXJjZXMuICAgVXNlIGF0IHlvdXIgb3duIHJpc2suPC9wPgo8cD5TbmFwc2hvdCBmaWxlcyBhcmUgZ2VuZXJhdGVkIGFuZCBzdG9yZWQgb24gdGhlIHNlcnZlciB1bnRpbCBzdWNoIHRpbWUgYXMgdGhleSBlaXRoZXIgZXhwaXJlIChhIHNldHRpbmcgaW4gQ01TTVMpIG9yIHRoZSBzZXJ2ZXIgY2FjaGUgaXMgY2xlYXJlZC4gIFRoZXNlIGNhbiB0YWtlIHVwIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHNwYWNlLCBzbyB1c2UgY2F1dGlvbiB3aGVuIGdlbmVyYXRpbmcgdGhlbS48L3A+Cgo8aDM+UmVzdG9yaW5nPC9oMz4KPHA+VGhlIENHU25hcHNob3QgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyYWN0aXZlIENMSSBiYXNlZCBwaHAgc2NyaXB0IChhY3R1YWxseSBhIGJpbmFyeSAucGhhciBmaWxlKSB0byBhaWRlIGluIHJlc3RvcmluZyB0aGUgc25hcHNob3QuICBUaGlzIGZpbGUgaXMgbG9jYXRlZCBpbiB0bXAvcmVzdG9yZS5waHAgaW4gdGhlIGluY2x1ZGVkIHNuYXBzaG90LCAgYW5kIGNhbiBhbHNvIGJlIGRvd25sb2FkZWQgc2VwYXJhdGVseSBmcm9tIHdpdGhpbiB0aGUgQ0dTbmFwc2hvdCBhZG1pbiBwYW5lbC48L3A+CjxwPlRvIGRvIGFuIGludGVyYWN0aXZlIHJlc3RvcmUgeW91IHdpbGwgbmVlZCBzaGVsbCBhY2NjZXNzIChpbiBhIGxpbnV4IGVudmlyb25tZW50KSB0byB0aGUgZGVzdGluYXRpb24gc2VydmVyLjwvcD4KPHA+SW5zdHJ1Y3Rpb25zOjwvcD4KPG9sPgogIDxsaT5VcGxvYWQgdGhlIHNuYXBzaG90IC56aXAgZmlsZSBpbiBpdHMgZW50aXJldHkgKGRvIG5vdCBleHBhbmQgaXQpIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuICBVc2luZyBTU0ggaXMgdGhlIGJlc3QgbWV0aG9kLjwvbGk+CiAgPGxpPlVwbG9hZCB0aGUgcmVzdG9yZSBzY3JpcHQgKHVzdWFsbHkgbmFtZWQgIkNHU25hcHNob3QtUmVzdG9yZS5waHAiKSBmaWxlIChJTiBCSU5BUlkgTU9ERSkgdG8gdGhlIGRlc3RpbmF0aW9uIGZvbGRlci48L2xpPgogIDxsaT5Vc2luZyBTU0ggb3IgYW5vdGhlciBtZWNoYW5pc20gY29ubmVjdCB0byB5b3VyIHNlcnZlcnMgc2hlbGwgY29uc29sZS48L2xpPgogIDxsaT5OYXZpZ2F0ZSB0byB5b3VyIGRlc3RpbmF0aW9uIGZvbGRlciAodGhlIHNhbWUgZm9sZGVyIHlvdSB1c2VkIGluIHRoZSBmaXJzdCB0d28gc3RlcHMpLjwvbGk+CiAgPGxpPkV4ZWN1dGU6ICBwaHAgQ0dTbmFwc2hvdC1SZXN0b3JlLnBocAogICAgIDxwPlRoaXMgd2lsbCBicmluZyB1cCBhbiBpbnRlcmFjdGl2ZSwgY29uc29sZSBkcml2ZW4gdXRpbGl0eSB0aGF0IHdpbGwgYWxsb3cgeW91IHRvIGVudGVyIHRoZSBuYW1lIG9mIHRoZSBzbmFwc2hvdCBmaWxlLCBhbmQgZW50ZXIgZGF0YWJhc2UgY3JlZGVudGlhbCBpbmZvcm1hdGlvbi48L3A+CiAgICAgPHA+VGhlIHNjcmlwdCB3aWxsIHRoZW4gdmVyaWZ5IHRoZSBkYXRhYnNlIGNyZWRlbnRpYWxzLCBhbmQgdGhhdCB0aGUgZGF0YWJhc2UgaXMgZW1wdHkuPC9wPgogICAgIDxwPkZvbGxvd2luZyB0aGlzIHRoZSBkYXRhYmFzZSBkdW1wIHdpbGwgYmUgaW1wb3J0ZWQgdG8gdGhlIG5ldyBkYXRhYmFzZSwgYW5kIHRoZSB6aXAgZmlsZSBleHBhbmRlZC48L3A+CiAgICAgPHA+VGhpcyBzY3JpcHQgd2lsbCB0aGVuIGdlbmVyYXRlIGEgbmV3IGNvbmZpZy5waHAsIGdlbmVyYXRlIHRoZSBzcGVjaWFsIENNU01TIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgYW5kIHBlcmZvcm0gY2xlYW51cC48L3A+CiAgICAgPHA+VGhlIHV0aWxpdHkgd2lsbCBhdXRvbWF0aWNhbGx5IGRlbGV0ZSBpdHNlbGYsIGFuZCByZW1vdmUgdGhlIHppcCBmaWxlIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0ZWlvbi48L3A+CiAgPC9saT4KPC9vbD4KCjxoMz5BZnRlciBSZXN0b3JhdGlvbjwvaDM+CjxwPkFmdGVyIHJlc3RvcmF0aW9uLCBwYXJ0aWN1bGFybHkgaWYgeW91IGFyZSByZXN0b3JpbmcgdG8gYSBkaWZmZXJlbnQgaG9zdCB0aGVuIHlvdSBtYXkgbmVlZCB0byBtYWtlIGFkanVzdG1lbnRzIHRvIHNvbWUgZmlsZXMuICBJbmNsdWRpbmc6PC9wPgo8dWw+CiAgPGxpPkFkanVzdGluZyB0aGUgLmh0YWNjZXNzIGZpbGUgZm9yIHRoZSByZXdyaXRlX2Jhc2UgYW5kIGFueSBvdGhlciByZWRpcmVjdCBydWxlcy48L2xpPgogIDxsaT5BZGp1c3RpbmcgcGF0aHMgaW4gdGhlIGNvbmZpZy5waHAgZmlsZS48L2xpPgogIDxsaT5BZGp1c3RpbmcgcGVybWlzc2lvbnMKICAgICA8cD5EZXBlbmRpbmcgdXBvbiB0aGUgZGVzdGluYXRpb24gc2VydmVyIGVudmlyb25tZW50LCBhbmQgdGhlIGFjY291bnRzIHRoYXQgeW91IGFyZSB1c2luZyB0byBjb25uZWN0IHZpYSBzaGVsbCwgYW5kIGZvciB0aGUgd2ViIHNlcnZlciwgeW91IG1heSBuZWVkIHRvIGFkanVzdCBwZXJtaXNzaW9ucyBvZiBzb21lIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGZvciBDTVNNUyB0byB3b3JrIHByb3Blcmx5LjwvcD4KICAgICA8cD5JbmZvcm1hdGlvbiBhYm91dCBwcm9wZXIgcGVybWlzc2lvbnMgZm9yIENNU01TIGlzIHdlbGwgZG9jdW1lbnRlZCBvbiB0aGUgQ01TTVMgZG9jdW1lbnRhdGlvbiBzaXRlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kb2NzLmNtc21hZGVzaW1wbGUub3JnIj5kb2NzLmNtc21hZGVzaW1wbGUub3JnPC9hPgogIDwvbGk+CjwvdWw+Cgo8aDM+U3BlY2lhbCBGaWxlczwvaDM+CjxwPklmIHBlcmZvcm1pbmcgYSBtYW51YWwgcmVzdG9yYXRpb24sIHRoZXJlIGFyZSBzb21lIHNwZWNpYWwgZmlsZXMgaW4gdGhlIGFyY2hpdmUgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGRlbGV0ZSBhZnRlciBtYW51YWxseSBleHBhbmRpbmcgdGhlIC56aXAgZmlsZTo8L3A+Cjx1bD4KICA8bGk+dG1wL19fbXlzcWxkdW1wLnNxbCAtIFRoaXMgaXMgdGhlIGR1bXAgb2YgdGhlIGRhdGFiYXNlLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGlzIGZpbGUgYmUgZGVsZXRlZCBvbiBsaXZlIHNpdGVzLjwvbGk+CiAgPGxpPnRtcC8uY2dzbmFwc2hvdCAtIFRoaXMgaXMgYSBtYWdpYyBmaWxlIHVzZWQgYnkgdGhlIGludGVyYWN0aXZlIHJlc3RvcmF0aW9uIHNjcmlwdC4gIEl0IHNob3VsZCBiZSBkZWxldGVkIG9uIGxpdmUgc2l0ZXMuPC9saT4KPC91bD4KCjxoMz5SZXF1aXJlbWVudHM8L2gzPgo8cD5UaGlzIG1vZHVsZSBoYXMgdGhlc2Ugc3BlY2lhbCByZXF1aXJlbWVudHM6PC9wPgo8dWw+CiAgPGxpPlZhbGlkLCBhbmQgd3JpdGFibGUgc3lzdGVtIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgICAgPHA+VGhlIHBocCBmdW5jdGlvbiBzeXNfZ2V0X3RlbXBfZGlyKCkgbXVzdCByZXR1cm4gYSB2YWxpZCwgd3JpdGFibGUgZGlyZWN0b3J5LjwvcD4KICA8L2xpPgogIDxsaT5TdXBwb3J0IGZvciB0aGUgUEhQIFppcEFyY2hpdmUgY2xhc3MuPC9saT4KICA8bGk+VGhlIGFiaWxpdHkgdG8gYWRqdXN0IHRoZSBwaHAgc2NyaXB0IHRpbWUgbGltaXQuCiAgICA8cD50aGUgc2V0X3RpbWVfbGltaXQoOTk5OSkgbWV0aG9kIG11c3Qgd29yayBwcm9wZXJseS48L3A+CiAgPC9saT4KPC91bD4KCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhlIG1vZHVsZSBhdXRob3IgaXMgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5BIGJ1ZyB0cmFja2luZyBhbmQgZmVhdHVyZSByZXF1ZXN0IHN5c3RlbSBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGlzIG1vZHVsZSA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2Nnc25hcHNob3QiPmhlcmU8L2E+LiAgUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJvdmlkZSBhbGwgcmVsYXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS4gIEhvd2V2ZXIsIHBsZWFzZSB1c2UgdGhpcyBhcyBhIGxhc3QgcmVzb3J0LCBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgZm9sbG93ZWQgYWxsIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBmb3JnZSwgaW4gdGhlIGZvcnVtcywgZXRjLjwvbGk+CjwvdWw+CgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOC0yMDEyLCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4Kc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKJGxhbmdbJ2FkZHJlc3MnXSA9ICdBZGRyZXNzJzsKCiNCCgojQwoKI0QKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnQSBzaW1wbGUgbW9kdWxlIHRvIGNyZWF0ZSBzbmFwc2hvdHMgb2YgdGhlIENNU01TIGZpbGVzeXN0ZW0gYW5kIGRhdGFiYXNlLiAgVXNlZnVsIGZvciBxdWljayBiYWNrdXBzIG9yIHNpdGUgbW92ZXMuJzsKJGxhbmdbJ2Rpc3Bvc2VfZG93bmxvYWQnXSA9ICdEb3dubG9hZCc7CiRsYW5nWydkaXNwb3NlX2VtYWlsJ10gPSAnU2VuZCBsaW5rIHZpYSBFbWFpbCc7CgojRQokbGFuZ1snZXJyX2Ntc21haWxlciddID0gJ1dlIGNvdWxkIG5vdCBnZXQgYW4gaW5zdGFuY2Ugb2YgQ01TTWFpbGVyIG1vZHVsZSc7CiRsYW5nWydlcnJfaW52YWxpZF9lbWFpbCddID0gJ1RoZSBlbWFpbCBhZGRyZXNzIHlvdSBzcGVjaWZpZWQgYXBwZWFycyB0byBiZSBpbnZhbGlkLic7CiRsYW5nWydlcnJfbWlzc2luZ3BhcmFtJ10gPSAnT25lIG9yIG1vcmUgZXhwZWN0ZWQgcGFyYW1ldGVycyB3YXMgbWlzc2luZyBvciBpbnZhbGlkLic7CiRsYW5nWydlcnJfbm9zbmFwc2hvdHMnXSA9ICdTb3JyeSwgaXQgYXBwZWFycyB0aGF0IHlvdSBhcmUgdG9vIGxhdGUuICBXZSBjb3VsZCBub3QgZmluZCBhbnkgQ0dTbmFwc2hvdHMgb24gdGhlIHNlcnZlci4nOwokbGFuZ1snZXJyX3NuYXBzaG90bm90Zm91bmQnXSA9ICdTb3JyeSwgYnV0IHRoZSBzbmFwc2hvdCBzcGVjaWZpZWQgY291bGQgbm90IGJlIGxvY2F0ZWQuJzsKCiNGCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdCYWNrdXAgU25hcHNob3RzJzsKCiNHCiRsYW5nWydnZXRfcmVzdG9yZV9zY3JpcHQnXSA9ICdEb3dubG9hZCByZXN0b3JlIHNjcmlwdCc7CgojSAoKI0kKJGxhbmdbJ2luZm9fY3JlYXRlX3NuYXBzaG90J10gPSAnVGhpcyBhY3Rpb24gd2lsbCBjcmVhdGUgYSBzbmFwc2hvdCBvZiB5b3VyIENNUyBNYWRlIFNpbXBsZSBpbnN0YWxsYXRpb24sIGluY2x1ZGluZyB0aGUgZGF0YWJhc2UgYW5kIGNyZWF0ZSBhIHppcCBmaWxlIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBiYWNrdXAuICBJdCB3aWxsIG5vdCBiYWNrdXAgdGVtcG9yYXJ5IGZpbGVzLic7CgojSgoKI0sKCiNMCiRsYW5nWydsZWdlbmRfc25hcHNob3RfZGlzcG9zaXRpb24nXSA9ICdXaGF0IGRvIHlvdSB3YW50IHRvIGRvIHdpdGggdGhlIHNuYXBzaG90JzsKCiNNCiRsYW5nWydtc2dfZW1haWxfc2VudCddID0gJ1lvdXIgQ0dTbmFwc2hvdCBoYXMgYmVlbiBnZW5lcmF0ZWQgYW5kIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzLic7CgojTgoKI08KCiNQCgojUQoKI1IKCiNTCiRsYW5nWydzbmFwc2hvdG5vdyddID0gJ0NyZWF0ZSBTbmFwc2hvdCBOb3cnOwoKI1QKCiNVCgojVgoKI1cKJGxhbmdbJ3dhcm5fY3JlYXRlX3NuYXBzaG90J10gPSAnPHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBUaGlzIGlzIGEgdmVyeSBkYXRhYmFzZSBhbmQgbWVtb3J5IGludGVuc2l2ZSBvcGVyYXRpb24uICBZb3UgbWF5IG5lZWQgdG8gYWRqdXN0IHNlcnZlciByZXNvdXJjZXMgdG8gdXRpbGl6ZSB0aGlzIGFjdGlvbi4nOwoKI1gKCiNZCgojWgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.file_logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90OwoKY2xhc3MgZmlsZV9sb2dnZXIgZXh0ZW5kcyBsb2dnZXIKewogICAgcHJpdmF0ZSAkX2ZpbGVuYW1lOwogICAgcHJpdmF0ZSAkX2x2bDsKCiAgICBjb25zdCBMVkxfRkFUQUwgPSAwOwogICAgY29uc3QgTFZMX0VSUk9SID0gMTsKICAgIGNvbnN0IExWTF9XQVJOSU5HID0gMjsKICAgIGNvbnN0IExWTF9JTkZPID0gMzsKICAgIGNvbnN0IExWTF9WRVJCT1NFID0gNDsKICAgIGNvbnN0IExWTF9ERUJVRyA9IDU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsdmwgPSBzZWxmOjpMVkxfSU5GTywkZmlsZW5hbWUgPSBudWxsKQogICAgewogICAgICAgIGlmKCAhJGZpbGVuYW1lICkgewogICAgICAgICAgICAkZmlsZW5hbWUgPSBUTVBfQ0FDSEVfTE9DQVRJT04uJy8nLmJhc2VuYW1lKF9fQ0xBU1NfXykuJy5sb2cnOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPl9maWxlbmFtZSA9ICRmaWxlbmFtZTsKICAgICAgICAkdGhpcy0+X2x2bCA9LSAkbHZsOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZSgkc3RyKQogICAgewogICAgICAgICRzdHIgPSB0cmltKCRzdHIpOwogICAgICAgIGlmKCAhJHN0ciApIHJldHVybjsKICAgICAgICBpZiggIWVuZHN3aXRoKCAkc3RyLCAiXG4iKSApICRzdHIgLj0gIlxuIjsKICAgICAgICAkZmggPSBmb3BlbigkdGhpcy0+X2ZpbGVuYW1lLCdhJyk7CiAgICAgICAgaWYoICEkZmggKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1Byb2JsZW0gb3BlbmluZyBmaWxlIGZvciB3cml0aW5nOiAnLiR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIGZ3cml0ZSgkZmgsJHN0cik7CiAgICAgICAgZmNsb3NlKCRmaCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5fbHZsIDwgc2VsZjo6TFZMX0RFQlVHICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnREVCVUc6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHZlcmJvc2UoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sdmwgPCBzZWxmOjpMVkxfVkVSQk9TRSApIHJldHVybjsKICAgICAgICAkdGhpcy0+d3JpdGUoJ1ZFUkJPU0U6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGluZm8oJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sdmwgPCBzZWxmOjpMVkxfSU5GTyApIHJldHVybjsKICAgICAgICAkdGhpcy0+d3JpdGUoJ0lORk86ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdhcm5pbmcoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sdmwgPCBzZWxmOjpMVkxfV0FSTklORyApIHJldHVybjsKICAgICAgICAkdGhpcy0+d3JpdGUoJ1dBUk5JTkc6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVycm9yKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5fbHZsIDwgc2VsZjo6TFZMX0VSUk9SICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnRVJST1I6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGZhdGFsKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5fbHZsIDwgc2VsZjo6TFZMX0ZBVEFMICkgcmV0dXJuOwogICAgICAgICR0aGlzLT53cml0ZSgnRkFUQUw6ICcuJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXlfcHJvZ3Jlc3MoJHBlcmNlbnQpCiAgICB7CiAgICAgICAgLy8gZG8gbm90aGluZy4KICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/class.logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90OwoKYWJzdHJhY3QgY2xhc3MgbG9nZ2VyCnsKICAgIHByaXZhdGUgJF9jdXJfc3RlcCA9IDA7CiAgICBwcml2YXRlICRfdG90YWxfc3RlcHMgPSAxOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdG90YWxfc3RlcHMpCiAgICB7CiAgICAgICAgJHRoaXMtPnRvdGFsX3N0ZXBzID0gbWF4KDEsKGludCkkdG90YWxfc3RlcHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZHZhbmNlKCkKICAgIHsKICAgICAgICAkdGhpcy0+X2N1cl9zdGVwID0gbWluKCR0aGlzLT5fY3VyX3N0ZXAgKyAxLCR0aGlzLT5fdG90YWxfc3RlcHMpOwogICAgICAgICR0aGlzLT5kaXNwbGF5X3Byb2dyZXNzKCR0aGlzLT5nZXRfcGVyY2VudF9jb21wbGV0ZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZG9uZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2N1cl9zdGVwID09ICR0aGlzLT5fdG90YWxfc3RlcHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGVyY2VudF9jb21wbGV0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIChmbG9hdCkgJHRoaXMtPl9jdXJfc3RlcCAvIChmbG9hdCkgJHRoaXMtPl90b3RhbF9zdGVwcyAqIDEwMC4wOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNldCgpCiAgICB7CiAgICAgICAgJHRoaXMtPl9jdXJfc3RlcCA9IDA7CiAgICAgICAgJHRoaXMtPmRpc3BsYXlfcHJvZ3Jlc3MoJHRoaXMtPmdldF9wZXJjZW50X2NvbXBsZXRlKCkpOwogICAgfQoKICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBkZWJ1Zygkc3RyKTsKICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB2ZXJib3NlKCRzdHIpOwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGluZm8oJHN0cik7CiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkc3RyKTsKICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBlcnJvcigkc3RyKTsKICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBmYXRhbCgkc3RyKTsKICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5X3Byb2dyZXNzKCRwZXJjZW50KTsKfSAvLyBlbmQgb2YgY2xhc3M=]]></data>
	</file>
	<file>
	  <filename>/lib/class.secure_ini_file.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90OwoKY2xhc3Mgc2VjdXJlX2luaV9maWxlCnsKICAgIHByaXZhdGUgJF9maWxlbmFtZTsKICAgIHByaXZhdGUgJF9maXJzdF9zZWN0aW9uID0gVFJVRTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9maWxlbmFtZSgkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9maWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9zb3J0X2RhdGEoJGRhdGEpCiAgICB7CiAgICAgICAgJG91dCA9ICRkYXRhOwogICAgICAgIGZvcmVhY2goICRvdXQgYXMgJGtleSA9PiAmJHZhbCApIHsKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR2YWwpICkgJHZhbCA9ICR0aGlzLT5fc29ydF9kYXRhKCR2YWwpOwogICAgICAgIH0KICAgICAgICBrc29ydCgkb3V0KTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gX2NhbGNfY2hlY2tzdW0oJGRhdGEpCiAgICB7CiAgICAgICAgJHNvcnRlZCA9ICR0aGlzLT5fc29ydF9kYXRhKCRkYXRhKTsKICAgICAgICAkc2lnID0gbWQ1KF9fQ0xBU1NfXy5fX0RJUl9fLnNlcmlhbGl6ZSgkc29ydGVkKSk7CiAgICAgICAgcmV0dXJuICRzaWc7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9pbmlfc2VjdGlvbigkc2VjdGlvbikKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICBpZiggISR0aGlzLT5fZmlyc3Rfc2VjdGlvbiApIHsKICAgICAgICAgICAgJHRoaXMtPl9maXJzdF9zZWN0aW9uID0gRkFMU0U7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkb3V0IC49ICJcbiI7CiAgICAgICAgfQoKICAgICAgICAkb3V0IC49ICdbJy50cmltKCRzZWN0aW9uKS4iXVxuIjsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2luaV92YWwoJGtleSwkdmFsKQogICAgewogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgIC8vIEB0b2RvIGNoZWNrIGZvciBpbnZhbGlkIGNoYXJzIGluIHRoZSBrZXkgYW5kIHRocm93IGFuIGV4Y2VwdGlvbgogICAgICAgICRua2V5ID0gdHJpbSgka2V5KTsKICAgICAgICAkbnZhbCA9IHRyaW0oJHZhbCk7CiAgICAgICAgaWYoICEkbmtleSApIHJldHVybjsKICAgICAgICAkdHlwZSA9IGdldHR5cGUoJHZhbCk7CiAgICAgICAgaWYoICR0eXBlID09ICdvYmplY3QnICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignT2JqZWN0cyBjYW5ub3QgYmUgc3RvcmVkJyk7CgogICAgICAgICRmbmQgPSAwOwogICAgICAgICRiYWRjaGFycyA9IGFycmF5KCJcbiIsIlxyIiwiOyIsIiciLCciJyk7CiAgICAgICAgZm9yZWFjaCggJGJhZGNoYXJzIGFzICRjaCApIHsKICAgICAgICAgICAgaWYoIHN0cnBvcygkbnZhbCwkY2gpICE9PSBGQUxTRSApIHsKICAgICAgICAgICAgICAgICRmbmQgPSAxOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoICRmbmQgKSB7CiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBiYWQgY2hhcmFjdHJzLiBnb3R0YSBlc2NhcGUgdGhlIGRvdWJsZSBxdW90ZXMKICAgICAgICAgICAgJG52YWwgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJywkbnZhbCk7CiAgICAgICAgfQogICAgICAgICRudmFsID0gIiciLiR0eXBlLid8OnwnLiRudmFsLiInIjsKICAgICAgICAkb3V0IC49IHNwcmludGYoIiVzID0gJXNcbiIsJGtleSwkbnZhbCk7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9maWxlX2hlYWRlcigkY2hlY2tzdW0pCiAgICB7CiAgICAgICAgJG91dCA9ICc7PD9waHAgZGllKCk7IC8qIFNJRz0nLiRjaGVja3N1bS4nICovID8+Jy4iXG4iOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX2FycmF5KCRhcnIsJHNlY3Rpb24gPSBudWxsKQogICAgewogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgICRzZWN0aW9uID0gdHJpbSgkc2VjdGlvbik7CiAgICAgICAgJGlzX2Fzc29jID0gKGFycmF5X2tleXMoJGFycikgIT09IHJhbmdlKDAsIGNvdW50KCRhcnIpIC0gMSkpOwoKICAgICAgICBpZiggJGlzX2Fzc29jICkgewogICAgICAgICAgICAvLyBwYXNzIG9uZSwgbm9ybWFsIHZhbHVlcwogICAgICAgICAgICBmb3JlYWNoKCAkYXJyIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbCkgKSAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX3ZhbCgka2V5LCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCAkb3V0ICkgewogICAgICAgICAgICAgICAgaWYoICEkc2VjdGlvbiApICRzZWN0aW9uID0gJ21haW4nOwogICAgICAgICAgICAgICAgJG91dCA9ICR0aGlzLT5fd3JpdGVfaW5pX3NlY3Rpb24oJHNlY3Rpb24pIC4gJG91dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gcGFzcyB0d28sIG5lc3RlZCBhcnJheXMKICAgICAgICAgICAgZm9yZWFjaCggJGFyciBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgY29udGludWU7CiAgICAgICAgICAgICAgICBpZiggYXJyYXlfa2V5cygkdmFsKSAhPT0gcmFuZ2UoMCwgY291bnQoJHZhbCkgLSAxKSApIHsKICAgICAgICAgICAgICAgICAgICAvLyBhc3NvY2lhdGl2ZSBjaGlsZCBhcnJheQogICAgICAgICAgICAgICAgICAgICR0bXAgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmKCAkc2VjdGlvbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICRzZWN0aW9uLiIgOiAka2V5IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAka2V5OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX2FycmF5KCR2YWwsJHRtcCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWwgY2hpbGQgYXJyYXkKICAgICAgICAgICAgICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX2FycmF5KCR2YWwsJGtleSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCAhJHNlY3Rpb24gKSAkc2VjdGlvbiA9ICdtYWluJzsKICAgICAgICAgICAgZm9yKCAkaSA9IDAsICRuID0gY291bnQoJGFycik7ICRpIDwgJG47ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX3ZhbCgkc2VjdGlvbi4nW10nLCRhcnJbJGldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoJGRhdGEpCiAgICB7CiAgICAgICAgJGNrc3VtID0gJHRoaXMtPl9jYWxjX2NoZWNrc3VtKCRkYXRhKTsKICAgICAgICAkb3V0ID0gJHRoaXMtPl93cml0ZV9maWxlX2hlYWRlcigkY2tzdW0pOwogICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfYXJyYXkoJGRhdGEpOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkZGF0YSwkZmlsZW5hbWUgPSBudWxsKQogICAgewogICAgICAgIGlmKCAhJGZpbGVuYW1lICkgJGZpbGVuYW1lID0gJHRoaXMtPl9maWxlbmFtZTsKICAgICAgICBpZiggISRmaWxlbmFtZSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignTm8gZmlsZW5hbWUgc3BlY2lmaWVkIHRvIGluc3RhbmNlIG9mICcuX19DTEFTU19fKTsKICAgICAgICAkZGlyID0gZGlybmFtZSgkdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICBpZiggKGlzX2ZpbGUoJGZpbGVuYW1lKSAmJiAhaXNfd3JpdGFibGUoJHRoaXMtPl9maWxlbmFtZSkpIHx8ICFpc193cml0YWJsZSgkZGlyKSApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJObyBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvICIuJHRoaXMtPl9maWxlbmFtZSk7CiAgICAgICAgfQoKICAgICAgICAkZmggPSBmb3BlbigkZmlsZW5hbWUsJ3cnKTsKICAgICAgICBmd3JpdGUoJGZoLCR0aGlzLT5nZW5lcmF0ZSgpKTsKICAgICAgICBmY2xvc2UoJGZoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPndyaXRlKCRkYXRhKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2NvbnZlcnRfdmFsdWVzKCRkYXRhKQogICAgewogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR2YWwpICkgewogICAgICAgICAgICAgICAgJG91dFska2V5XSA9ICR0aGlzLT5fY29udmVydF92YWx1ZXMoJHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBsaXN0KCR0eXBlLCR2YWwpID0gZXhwbG9kZSgnfDp8JywkdmFsLDIpOwogICAgICAgICAgICAgICAgc3dpdGNoKCAkdHlwZSApIHsKICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoYm9vbCkgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVnZXInOgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoaW50KSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAncmVhbCc6CiAgICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6CiAgICAgICAgICAgICAgICBjYXNlICdkb3VibGUnOgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoZmxvYXQpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKHN0cmluZykgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2UoJGNvbnRlbnRzLCR2ZXJpZnkgPSBUUlVFKQogICAgewogICAgICAgIC8vIGdldCB0aGUgZmlyc3QgbGluZQogICAgICAgICRmaXJzdF9saW5lID0gZXhwbG9kZSgiXG4iLCRjb250ZW50cywyKVswXTsKICAgICAgICAkZmlsZV9zaWcgPSBudWxsOwogICAgICAgICRtYXRjaGVzID0gbnVsbDsKICAgICAgICBwcmVnX21hdGNoKCcvXHMrU0lHPShbMC05QS1aYS16XXszMn0pXHMrLycsJGZpcnN0X2xpbmUsJG1hdGNoZXMpOwogICAgICAgIGlmKCAkbWF0Y2hlc1sxXSApICRmaWxlX3NpZyA9ICRtYXRjaGVzWzFdOwogICAgICAgIHVuc2V0KCRtYXRjaGVzKTsKCiAgICAgICAgJHJhd19kYXRhID0gcGFyc2VfaW5pX3N0cmluZygkY29udGVudHMsVFJVRSk7CgogICAgICAgIC8vIHdlIGhhdmUgYSBmbGF0IGxpc3Qgb2Ygc2VjdGlvbnMsIGVhY2ggc2VjdGlvbiBpcyBhbiBhcnJheQogICAgICAgIC8vIHRoZSB0b3Agc2VjdGlvbiBzaG91bGQgbm90IGhhdmUgYW55IG5lc3RpbmcKICAgICAgICAkYWxsX2tleXMgPSBhcnJheV9rZXlzKCRyYXdfZGF0YSk7CiAgICAgICAgJGtleTAgPSAkYWxsX2tleXNbMF07CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnIDogJywka2V5MCk7CiAgICAgICAgaWYoICRwYXJ0c1swXSAhPSAka2V5MCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBmaWxlIGZvcm1hdCwgZm91bmQgbmVzdGVkIGNoaWxkIGFzIGZpcnN0IGVsZW1lbnQnKTsKCiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJHJhd19kYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnIDogJywka2V5KTsKICAgICAgICAgICAgLy9pZiggJHBhcnRzWzBdICE9ICRrZXkwICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIGZpbGUgZm9ybWF0Jyk7CgogICAgICAgICAgICBpZiggY291bnQoJHBhcnRzKSA9PSAxICkgewogICAgICAgICAgICAgICAgJG91dFska2V5XSA9ICR0aGlzLT5fY29udmVydF92YWx1ZXMoJHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkdG1wID0mICRvdXQ7CiAgICAgICAgICAgICAgICAkaSA9IG51bGw7CiAgICAgICAgICAgICAgICBmb3IoICRpID0gMSwgJG4gPSBjb3VudCgkcGFydHMpIC0gMTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAkcGFydCA9ICRwYXJ0c1skaV07CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdG1wWyRwYXJ0XSkgKSAkdG1wWyRwYXJ0XSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgJHRtcCA9JiAkdG1wWyRwYXJ0XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0bXBbJHBhcnRzWyRpXV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiggY291bnQoJG91dCkgPT0gMSAmJiBpc3NldCgkb3V0WyRrZXkwXSkgKSB7CiAgICAgICAgICAgICRvdXQgPSAkb3V0WyRrZXkwXTsKICAgICAgICB9CgogICAgICAgIGlmKCAkdmVyaWZ5ICkgewogICAgICAgICAgICAkY2FsY19zaWcgPSAkdGhpcy0+X2NhbGNfY2hlY2tzdW0oJG91dCk7CiAgICAgICAgICAgIGlmKCAkZmlsZV9zaWcgIT0gJGNhbGNfc2lnICkgdGhyb3cgbmV3IFxSYW5nZUV4Y2VwdGlvbigiSU5JIEZpbGUgc2lnbmF0dXJlIGRpZCBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiB0aGUgZmlsZSBjb250ZW50cyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkZmlsZW5hbWUgPSBudWxsLCR2ZXJpZnkgPSBUUlVFKQogICAgewogICAgICAgIGlmKCAkZmlsZW5hbWUgKSAkdGhpcy0+c2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSk7CgogICAgICAgIGlmKCAhaXNfZmlsZSgkdGhpcy0+X2ZpbGVuYW1lKSB8fCAhaXNfcmVhZGFibGUoJHRoaXMtPl9maWxlbmFtZSkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigiRmlsZSAlcyBjb3VsZCBub3QgYmUgcmVhZCIsJHRoaXMtPl9maWxlbmFtZSkpOwogICAgICAgICRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2UoJGNvbnRlbnRzLCR2ZXJpZnkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.snapshot_creator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90OwoKY2xhc3Mgc25hcHNob3RfY3JlYXRvcgp7CiAgICB1c2UgbG9nZ2FibGU7CiAgICBwcml2YXRlICRfb3B0cyA9IGFycmF5KCdteXNxbGR1bXAnPT5UUlVFLCdyZWFkbWUnPT4nRkFMU0UnLCdlbmNyeXB0Jz0+J0ZBTFNFJyk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJhbXMgPSBudWxsKQogICAgewogICAgICAgIGlmKCBpc19hcnJheSgkcGFyYW1zICYmIGNvdW50KCRwYXJhbXMpICkgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAgICAgJHRoaXMtPiRrZXkgPSAkdmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIGlmKCAhYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fb3B0cykgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fb3B0c1ska2V5XTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJGtleSwkdmFsKQogICAgewogICAgICAgIHN3aXRjaCggJGtleSApCiAgICAgICAgewogICAgICAgIGNhc2UgJ215c3FsZHVtcCc6CiAgICAgICAgY2FzZSAncmVhZG1lJzoKICAgICAgICBjYXNlICdlbmNyeXB0JzoKICAgICAgICAgICAgJHRoaXMtPl9vcHRzWyRrZXldID0gKGJvb2wpICR2YWw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIiRrZXkgaXMgbm90IGEgdmFsaWQgbWVtYmVyIG9mICIuX19DTEFTU19fKTsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9maWxlX2xpc3QoJHN0YXJ0ZGlyLCRhZHZhbmNlZCA9IGZhbHNlKQogICAgewogICAgICAgIC8vIGdldCBhbGwgZmlsZXMgKGV4Y2VwdCB0bXAgYW5kIGJhY2t1cCBmaWxlcykgZnJvbSB0aGUgcm9vdCBwYXRoCiAgICAgICAgaWYoICFpc19kaXIoJHN0YXJ0ZGlyKSApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oImludmFsaWQgcGF0aCBwYXNzZWQgdG8gIi5fX01FVEhPRF9fKTsKCiAgICAgICAgJGRpcl9pdGVyYXRvciA9IG5ldyBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJHN0YXJ0ZGlyKTsKICAgICAgICAkZmlsdGVyX2l0ZXJhdG9yID0gbmV3IFxSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yKCRkaXJfaXRlcmF0b3IsZnVuY3Rpb24oJGN1cnJlbnQsJGtleSwkaXRlcmF0b3IpIHVzZSAoJGFkdmFuY2VkKSB7CiAgICAgICAgICAgICAgICAkZm4gPSAkY3VycmVudC0+Z2V0RmlsZW5hbWUoKTsKICAgICAgICAgICAgICAgIGlmKCAkZm4gPT0gJy4nIHx8ICRmbiA9PSAnLi4nICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goICcjKiMnLCAkZm4pICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goICcuIyonLCAkZm4pICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goICcqficsICRmbikgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICBpZiggZm5tYXRjaCggJyoudG1wJywgJGZuKSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgIGlmKCBmbm1hdGNoKCAnKi5iYWsnLCAkZm4pICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goICcuZ2l0KicsICRmbikgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICBpZiggZm5tYXRjaCggJy5zdm4qJywgJGZuKSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgICRkaXJuYW1lID0gZGlybmFtZSgkY3VycmVudC0+Z2V0UGF0aG5hbWUoKSk7CiAgICAgICAgICAgICAgICBpZiggISRhZHZhbmNlZCAmJiBzdGFydHN3aXRoKCAkZGlybmFtZSwgVE1QX0NBQ0hFX0xPQ0FUSU9OICkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICBpZiggISRhZHZhbmNlZCAmJiBzdGFydHN3aXRoKCAkZGlybmFtZSwgVE1QX1RFTVBMQVRFU19DX0xPQ0FUSU9OICkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAvL2lmKCAkY3VycmVudC0+aXNEaXIoKSApIHJldHVybiBGQUxTRTsgLy8gcmV0dXJuIG5vIGRpcmVjdG9yaWVzCiAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJGl0ZXJhdG9yID0gbmV3IFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKCRmaWx0ZXJfaXRlcmF0b3IpOwogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRpdGVyYXRvciBhcyAkaW5mbyApIHsKICAgICAgICAgICAgJG91dFtdID0gc3Vic3RyKCRpbmZvLT5nZXRQYXRobmFtZSgpLHN0cmxlbigkc3RhcnRkaXIpKzEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgJGNvbmZpZyA9IFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAvLyBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9DR1NOQVBTSE9UKTsKICAgICAgICAkc2lnID0gbWQ1KF9fRElSX18uJG1vZC0+R2V0TmFtZSgpLiRtb2QtPkdldFZlcnNpb24oKS5nZXRfdXNlcmlkKEZBTFNFKS50aW1lKCkpOwoKICAgICAgICAkdGhpcy0+dmVyYm9zZSgnbGFuZzpjcmVhdG9yX2NvcHl0b3RtcCcpOwogICAgICAgIC8vIGNvcHkgYWxsIG9mIHRoZSBmaWxlcy4KICAgICAgICAkbGlzdCA9ICR0aGlzLT5nZXRfZmlsZV9saXN0KCRjb25maWdbJ3Jvb3RfcGF0aCddKTsKICAgICAgICAkdG1wZmlsZXMgPSBhcnJheSgpOwoKICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgcmVhZG1lCiAgICAgICAgaWYoICR0aGlzLT5yZWFkbWUgKSB7CiAgICAgICAgICAgICR0cGwgPSAkbW9kLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgncmVhZG1lLnRwbCcpOwogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ21vZHVsZV9uYW1lJywkbW9kLT5HZXROYW1lKCkpOwogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ21vZHVsZV92ZXJzaW9uJywkbW9kLT5HZXRWZXJzaW9uKCkpOwogICAgICAgICAgICAkb3V0ID0gJHRwbC0+ZmV0Y2goKTsKICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy90bXAvUkVBRE1FLUNHU05BUFNIT1QudHh0Jywkb3V0KTsKICAgICAgICAgICAgJGxpc3RbXSA9ICd0bXAvUkVBRE1FLUNHU05BUFNIT1QudHh0JzsKICAgICAgICAgICAgJHRtcGZpbGVzW10gID0gJ3RtcC9SRUFETUUtQ0dTTkFQU0hPVC50eHQnOwogICAgICAgIH0KCiAgICAgICAgLy8gZG8gdGhlIG15c3FsIGR1bXAKICAgICAgICAkZHVtcGZpbGUgPSBudWxsOwogICAgICAgIGlmKCAkdGhpcy0+bXlzcWxkdW1wICkgewogICAgICAgICAgICAkdGhpcy0+dmVyYm9zZSgnbGFuZzo6Y3JlYXRvcl9teXNxbGR1bXAnKTsKICAgICAgICAgICAgJHBhcm1zID0gYXJyYXkoKTsKICAgICAgICAgICAgJHBhcm1zWydob3N0J10gPSAkY29uZmlnWydkYl9ob3N0bmFtZSddOwogICAgICAgICAgICAkcGFybXNbJ3VzZXInXSA9ICRjb25maWdbJ2RiX3VzZXJuYW1lJ107CiAgICAgICAgICAgICRwYXJtc1sncGFzc3dvcmQnXSA9ICRjb25maWdbJ2RiX3Bhc3N3b3JkJ107CiAgICAgICAgICAgICRwYXJtc1sndXNlciddID0gJGNvbmZpZ1snZGJfdXNlcm5hbWUnXTsKICAgICAgICAgICAgJHBhcm1zWydkYiddID0gJGNvbmZpZ1snZGJfbmFtZSddOwogICAgICAgICAgICAkcGFybXNbJ3NxbF9jcmVhdGVfdGFibGUnXSA9IDE7CiAgICAgICAgICAgICRwYXJtc1snc3FsX3RhYmxlX2RhdGEnXSA9IDE7CiAgICAgICAgICAgICRkdW1wZXIgPSBuZXcgc3BfbXlzcWxkdW1wKCRwYXJtcyk7CiAgICAgICAgICAgICRkdW1wZXItPmR1bXBmaWxlID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy90bXAvX19teXNxbGR1bXAuc3FsJzsKICAgICAgICAgICAgJGR1bXBlci0+ZHVtcCgpOwogICAgICAgICAgICAkbGlzdFtdID0gJ3RtcC9fX215c3FsZHVtcC5zcWwnOwogICAgICAgICAgICAkdG1wZmlsZXNbXSAgPSAndG1wL19fbXlzcWxkdW1wLnNxbCc7CiAgICAgICAgICAgIHVuc2V0KCRkdW1wZXIpOwogICAgICAgIH0KCiAgICAgICAgLy8gdG9kbzogaW5jbHVkZSByZXN0b3JlIHNjcmlwdCA/PwogICAgICAgICRyZXN0b3JlX3NjcmlwdCA9ICRtb2QtPkdldE1vZHVsZVBhdGgoKS4nL3BoYXIvQ0dTbmFwc2hvdC1SZXN0b3JlLnBocCc7CiAgICAgICAgaWYoIGZpbGVfZXhpc3RzKCRyZXN0b3JlX3NjcmlwdCkgKSB7CiAgICAgICAgICAgICRvdXRmaWxlID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy90bXAvcmVzdG9yZS5waHAnOwogICAgICAgICAgICBAY29weSgkcmVzdG9yZV9zY3JpcHQsJG91dGZpbGUpOwogICAgICAgICAgICAkbGlzdFtdID0gJ3RtcC9yZXN0b3JlLnBocCc7CiAgICAgICAgICAgICR0bXBmaWxlc1tdID0gJ3RtcC9yZXN0b3JlLnBocCc7CiAgICAgICAgfQoKICAgICAgICAvLyBkbyB0aGUgLmNnc25hcHNob3QgZGF0YSBmaWxlCiAgICAgICAgJG1haW4gPSBhcnJheSgpOwogICAgICAgICRtYWluWydjcmVhdGVkJ10gPSB0aW1lKCk7CiAgICAgICAgJG1haW5bJ2NyZWF0ZWRfYnknXSA9IGdldF91c2VyaWQoKTsKICAgICAgICAkbWFpblsndmVyc2lvbiddID0gJG1vZC0+R2V0VmVyc2lvbigpOwogICAgICAgICR3ZWJzaXRlID0gYXJyYXkoKTsKICAgICAgICAkd2Vic2l0ZVsnY21zX3ZlcnNpb24nXSA9IENNU19WRVJTSU9OOwogICAgICAgICR3ZWJzaXRlWydyb290X3VybCddID0gJGNvbmZpZ1sncm9vdF91cmwnXTsKICAgICAgICAkd2Vic2l0ZVsncm9vdF9wYXRoJ10gPSAkY29uZmlnWydyb290X3BhdGgnXTsKICAgICAgICAkd2Vic2l0ZVsndXJsX3Jld3JpdGluZyddID0gJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddOwogICAgICAgICR3ZWJzaXRlWydzaXRlbmFtZSddID0gXGNtc19zaXRlcHJlZnM6OmdldCgnc2l0ZW5hbWUnKTsKICAgICAgICAkZGF0YSA9IGFycmF5KCdtYWluJz0+JG1haW4sJ3dlYnNpdGUnPT4kd2Vic2l0ZSk7CiAgICAgICAgJGluaSA9IG5ldyBzZWN1cmVfaW5pX2ZpbGUoJ3RtcC8uY2dzbmFwc2hvdCcpOwogICAgICAgICRvdXQgPSAkaW5pLT5nZW5lcmF0ZSgkZGF0YSk7CiAgICAgICAgJGNnc25hcHNob3RfZmlsZSA9ICRjb25maWdbJ3Jvb3RfcGF0aCddLicvdG1wLy5jZ3NuYXBzaG90JzsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkY2dzbmFwc2hvdF9maWxlLCRvdXQpOwogICAgICAgICRsaXN0W10gPSAndG1wLy5jZ3NuYXBzaG90JzsKICAgICAgICAkdG1wZmlsZXNbXSA9ICd0bXAvLmNnc25hcHNob3QnOwogICAgICAgIHVuc2V0KCRkYXRhKTsKCiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcmNoaXZlCiAgICAgICAgJHRoaXMtPnZlcmJvc2UoJ2xhbmc6Y3JlYXRvcl9ta2FyY2hpdmUnKTsKICAgICAgICAkemlwID0gbmV3IFxaaXBBcmNoaXZlKCk7CiAgICAgICAgJGZuMSA9IHRlbXBuYW0oVE1QX0NBQ0hFX0xPQ0FUSU9OLCdfc3AnKTsKICAgICAgICAkZm4gPSAkZm4xLicuemlwJzsKICAgICAgICB1bmxpbmsoJGZuMSk7CiAgICAgICAgJHppcC0+b3BlbigkZm4sXFppcEFyY2hpdmU6OkNSRUFURSB8IFxaaXBBcmNoaXZlOjpPVkVSV1JJVEUpOwogICAgICAgIGZvcmVhY2goICRsaXN0IGFzICRvbmUgKSB7CiAgICAgICAgICAgICRzcmNmaWxlID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy8nLiRvbmU7CiAgICAgICAgICAgICR6aXAtPmFkZEZpbGUoICRzcmNmaWxlLCAkb25lICk7CiAgICAgICAgfQogICAgICAgICR6aXAtPmNsb3NlKCk7CiAgICAgICAgdW5zZXQoJGxpc3QpOwoKICAgICAgICAvLyBjbGVhbnVwCiAgICAgICAgZm9yZWFjaCggJHRtcGZpbGVzIGFzICRmaWxlICkgewogICAgICAgICAgICAkdGZuID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWydyb290X3BhdGgnXSwkZmlsZSk7CiAgICAgICAgICAgIEB1bmxpbmsoJHRmbik7CiAgICAgICAgfQogICAgICAgIGlmKCAkdGhpcy0+bXlzcWxkdW1wICYmICRkdW1wZmlsZSApIEB1bmxpbmsoJGR1bXBmaWxlKTsKICAgICAgICBpZiggJGNnc25hcHNob3RfZmlsZSApIEB1bmxpbmsoJGNnc25hcHNob3RfZmlsZSk7CiAgICAgICAgcmV0dXJuICRmbjsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/class.sp_mysqldump.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90OwoKY2xhc3Mgc3BfbXlzcWxkdW1wCnsKICAgIHByaXZhdGUgJF9kdW1wZmg7CiAgICBwcml2YXRlICRfY29ubjsKICAgIHByaXZhdGUgJF9jb25maWc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJhbXMgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fY29uZmlnID0gYXJyYXkoJ3NraXBfZm9yZWlnbl9rZXknPT4xKTsKICAgICAgICAkY29uZmlnID0gbnVsbDsKICAgICAgICBpZiggJHBhcmFtcyBpbnN0YW5jZW9mIFxjbXNfY29uZmlnICkgewogICAgICAgICAgICAkY29uZmlnID0gYXJyYXkoKTsKICAgICAgICAgICAgJGNvbmZpZ1snaG9zdCddID0gJHBhcmFtc1snZGJfaG9zdG5hbWUnXTsKICAgICAgICAgICAgJGNvbmZpZ1sndXNlciddID0gJHBhcmFtc1snZGJfdXNlcm5hbWUnXTsKICAgICAgICAgICAgJGNvbmZpZ1sncGFzc3dvcmQnXSA9ICRwYXJhbXNbJ2RiX3Bhc3N3b3JkJ107CiAgICAgICAgICAgICRjb25maWdbJ2RiJ10gPSAkcGFyYW1zWydkYl9uYW1lJ107CiAgICAgICAgICAgICRjb25maWdbJ3ByZWZpeCddID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgZWxzZWlmKCBpc19hcnJheSgkcGFyYW1zKSApIHsKICAgICAgICAgICAgJGNvbmZpZyA9ICRwYXJhbXM7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fY29uZmlnID0gYXJyYXlfbWVyZ2UoJHRoaXMtPl9jb25maWcsJGNvbmZpZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2RiX2hvc3RuYW1lJzoKICAgICAgICBjYXNlICdob3N0JzoKICAgICAgICBjYXNlICdob3N0bmFtZSc6CiAgICAgICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2NvbmZpZ1snaG9zdCddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1snaG9zdCddOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfdXNlcm5hbWUnOgogICAgICAgIGNhc2UgJ3VzZXInOgogICAgICAgIGNhc2UgJ3VzZXJuYW1lJzoKICAgICAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fY29uZmlnWyd1c2VyJ10pICkgcmV0dXJuICR0aGlzLT5fY29uZmlnWyd1c2VyJ107CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkYl9wYXNzd29yZCc6CiAgICAgICAgY2FzZSAncHcnOgogICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoKICAgICAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fY29uZmlnWydwYXNzd29yZCddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1sncGFzc3dvcmQnXTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RiX25hbWUnOgogICAgICAgIGNhc2UgJ2RiJzoKICAgICAgICBjYXNlICdkYm5hbWUnOgogICAgICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9jb25maWdbJ2RiJ10pICkgcmV0dXJuICR0aGlzLT5fY29uZmlnWydkYiddOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZHJvcF90YWJsZSc6CiAgICAgICAgY2FzZSAndGFibGVfc3RydWN0dXJlJzoKICAgICAgICBjYXNlICd0YWJsZV9kYXRhJzoKICAgICAgICBjYXNlICdza2lwX2ZvcmVpZ25fa2V5JzoKICAgICAgICAgICAgJG91dCA9IChpc3NldCgkdGhpcy0+X2NvbmZpZ1ska2V5XSkpID8gJHRoaXMtPl9jb25maWdbJGtleV0gOiBUUlVFOwogICAgICAgICAgICByZXR1cm4gJG91dDsKCiAgICAgICAgY2FzZSAnZGJfcHJlZml4JzoKICAgICAgICBjYXNlICdwcmVmaXgnOgogICAgICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9jb25maWdbJ3ByZWZpeCddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1sncHJlZml4J107CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkdW1wZmlsZSc6CiAgICAgICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2NvbmZpZ1snZHVtcGZpbGUnXSkgKSByZXR1cm4gJHRoaXMtPl9jb25maWdbJ2R1bXBmaWxlJ107CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2RiX2hvc3RuYW1lJzoKICAgICAgICBjYXNlICdob3N0JzoKICAgICAgICBjYXNlICdob3N0bmFtZSc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWydob3N0J10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfdXNlcm5hbWUnOgogICAgICAgIGNhc2UgJ3VzZXInOgogICAgICAgIGNhc2UgJ3VzZXJuYW1lJzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3VzZXInXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkYl9wYXNzd29yZCc6CiAgICAgICAgY2FzZSAncHcnOgogICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfbmFtZSc6CiAgICAgICAgY2FzZSAnZGInOgogICAgICAgIGNhc2UgJ2RibmFtZSc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWydkYiddID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RiX3ByZWZpeCc6CiAgICAgICAgY2FzZSAncHJlZml4JzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3ByZWZpeCddID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2Ryb3BfdGFibGUnOgogICAgICAgIGNhc2UgJ3RhYmxlX3N0cnVjdHVyZSc6CiAgICAgICAgY2FzZSAndGFibGVfZGF0YSc6CiAgICAgICAgY2FzZSAnc2tpcF9mb3JlaWduX2tleSc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWyRrZXldID0gXGNnZV91dGlsczo6dG9fYm9vbCgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2R1bXBmaWxlJzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ2R1bXBmaWxlJ10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ2hvc3QnXSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiTm8gZGF0YWJhc2UgaG9zdCBzcGVjaWZpZWQgZm9yICIuX19DTEFTU19fKTsKICAgICAgICBpZiggISR0aGlzLT5fY29uZmlnWyd1c2VyJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIHVzZXJuYW1lIHNwZWNpZmllZCBmb3IgIi5fX0NMQVNTX18pOwogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIHBhc3N3b3JkIHNwZWNpZmllZCBmb3IgIi5fX0NMQVNTX18pOwogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ2RiJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIG5hbWUgc3BlY2lmaWVkIGZvciAiLl9fQ0xBU1NfXyk7CiAgICAgICAgaWYoICEkdGhpcy0+ZHVtcGZpbGUgKSB7CiAgICAgICAgICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICAgICAgICAgIGlmKCAhJGRpciApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGdldCBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeScpOwogICAgICAgICAgICAkdGhpcy0+ZHVtcGZpbGUgPSAkZGlyLicvJy5tZDUoX19DTEFTU19fLl9fRklMRV9fLnRpbWUoKSkuJy50bXAnOwogICAgICAgIH0KICAgICAgICAkZG4gPSBkaXJuYW1lKCR0aGlzLT5kdW1wZmlsZSk7CiAgICAgICAgaWYoICFpc193cml0YWJsZSgkZG4pICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdXZSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIGRlc3RpbmF0aW9uIGRpcmVjdG9yeScpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZSgkdHh0KQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9kdW1wZmggKSAkdGhpcy0+X2R1bXBmaCA9IGZvcGVuKCR0aGlzLT5kdW1wZmlsZSwndycpOwogICAgICAgIGlmKCAhJHRoaXMtPl9kdW1wZmggKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1dlIGNvdWxkIG5vdCBvcGVuIHRoZSBkdW1wIGZpbGUgZm9yIHdyaXRpbmcnKTsKCiAgICAgICAgZndyaXRlKCR0aGlzLT5fZHVtcGZoLCR0eHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkdW1wKCkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdGUoKTsKICAgICAgICAkdGhpcy0+X2Nvbm4gPSBteXNxbGlfY29ubmVjdCgkdGhpcy0+X2NvbmZpZ1snaG9zdCddLCR0aGlzLT5fY29uZmlnWyd1c2VyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10sJHRoaXMtPl9jb25maWdbJ2RiJ10pOwogICAgICAgIGlmKCBteXNxbGlfY29ubmVjdF9lcnJubygpICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oX19DTEFTU19fLicgY291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlJyk7CiAgICAgICAgfQoKICAgICAgICBpZiggJHRoaXMtPnNraXBfZm9yZWlnbl9rZXkgKSAkdGhpcy0+d3JpdGUoIlNFVCBGT1JFSUdOX0tFWV9DSEVDS1M9MDtcbiIpOwoKICAgICAgICAkc3FsID0gJ1NIT1cgVEFCTEVTOyc7CiAgICAgICAgJHJlcyA9IG15c3FsaV9xdWVyeSgkdGhpcy0+X2Nvbm4sJHNxbCk7CiAgICAgICAgaWYoICEkcmVzICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKF9fQ0xBU1NfXy4nIGNvdWxkIG5vdCBnZXQgdGFibGUgbGlzdCcpOwogICAgICAgIHdoaWxlKCAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcmVzKSApIHsKICAgICAgICAgICAgaWYoICR0aGlzLT50YWJsZV9zdHJ1Y3R1cmUgKSAkdGhpcy0+ZG9fdGFibGVfc3RydWN0dXJlKCRyb3dbMF0pOwogICAgICAgICAgICBpZiggJHRoaXMtPnRhYmxlX2RhdGEgKSAkdGhpcy0+ZG9fdGFibGVfZGF0YSgkcm93WzBdKTsKICAgICAgICB9CiAgICAgICAgbXlzcWxpX2Nsb3NlKCR0aGlzLT5fY29ubik7CiAgICAgICAgJHRoaXMtPl9jb25uID0gbnVsbDsKICAgICAgICBmY2xvc2UoJHRoaXMtPl9kdW1wZmgpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb190YWJsZV9zdHJ1Y3R1cmUoJHRhYmxlKQogICAgewogICAgICAgICR0eHQgPSAiLyogVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBgJHRhYmxlYCAqL1xuIjsKICAgICAgICBpZiggJHRoaXMtPmRyb3BfdGFibGUgKSB7CiAgICAgICAgICAgICR0eHQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAkdGFibGVgO1xuXG4iOwogICAgICAgIH0KICAgICAgICAkc3FsID0gIlNIT1cgQ1JFQVRFIFRBQkxFIGAkdGFibGVgOyI7CiAgICAgICAgJHJlcyA9IG15c3FsaV9xdWVyeSgkdGhpcy0+X2Nvbm4sJHNxbCk7CiAgICAgICAgaWYoICRyZXMgKSB7CiAgICAgICAgICAgIGlmKCAkcm93ID0gbXlzcWxpX2ZldGNoX2Fzc29jKCRyZXMpICkgewogICAgICAgICAgICAgICAgJHR4dCAuPSAkcm93WydDcmVhdGUgVGFibGUnXS4iO1xuXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15c3FsaV9mcmVlX3Jlc3VsdCgkcmVzKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPndyaXRlKCR0eHQpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb190YWJsZV9kYXRhKCR0YWJsZSkKICAgIHsKICAgICAgICAkdHh0ID0gJyc7CiAgICAgICAgJHNxbCA9ICJTRUxFQ1QgKiBGUk9NIGAkdGFibGVgOyI7CiAgICAgICAgJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkdGhpcy0+X2Nvbm4sJHNxbCk7CiAgICAgICAgaWYoICEkcmVzdWx0ICkgcmV0dXJuOwoKICAgICAgICAkbnVtX3Jvd3MgPSBteXNxbGlfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgJG51bV9maWVsZHMgPSBteXNxbGlfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCiAgICAgICAgaWYoICRudW1fcm93cyApIHsKICAgICAgICAgICAgJHR4dCAuPSAiLyogdGFibGUgY29udGVudHMgZm9yIHRhYmxlIGAkdGFibGVgICovXG4iOwoKICAgICAgICAgICAgLy8gZ2V0IGNvbHVtdW4gdHlwZXMKICAgICAgICAgICAgJGZpZWxkX3R5cGUgPSBhcnJheSgpOwogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkbnVtX2ZpZWxkczsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRtZXRhID0gbXlzcWxpX2ZldGNoX2ZpZWxkKCRyZXN1bHQpOwogICAgICAgICAgICAgICAgJGZpZWxkX3R5cGVbXSA9ICRtZXRhLT50eXBlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdHh0IC49ICJJTlNFUlQgSU5UTyBgJHRhYmxlYCB2YWx1ZXNcbiI7CiAgICAgICAgICAgIGZvciggJHIgPSAwOyAkciA8ICRudW1fcm93czsgJHIrKyApIHsKICAgICAgICAgICAgICAgICRyb3cgPSBteXNxbGlfZmV0Y2hfcm93KCRyZXN1bHQpOwogICAgICAgICAgICAgICAgJGNvbHMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJG51bV9maWVsZHM7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoIGlzX251bGwoJHJvd1skaV0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29sc1tdID0gJ251bGwnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCggJGZpZWxkX3R5cGVbJGldICkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHNbXSA9ICRyb3dbJGldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2InOgogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHNbXSA9ICInIi5teXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCR0aGlzLT5fY29ubiwkcm93WyRpXSkuIiciOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdHh0IC49ICcoJy5pbXBsb2RlKCcsJywkY29scykuJyknOwogICAgICAgICAgICAgICAgaWYoICRyIDwgJG51bV9yb3dzIC0gMSApIHsKICAgICAgICAgICAgICAgICAgICAkdHh0IC49ICIsIFxuIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHR4dCAuPSAiOyBcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15c3FsaV9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICAgICAkdHh0IC49ICJcbiI7CiAgICAgICAgJHRoaXMtPndyaXRlKCR0eHQpOwogICAgfQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/trait.loggable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90OwoKdHJhaXQgbG9nZ2FibGUKewogICAgcHJpdmF0ZSAkX2xvZ2dlcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2xvZ2dlcihsb2dnZXIgJGxvZ2dlcikKICAgIHsKICAgICAgICAkdGhpcy0+X2xvZ2dlciA9ICRsb2dnZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFkdmFuY2UoKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2xvZ2dlciApICR0aGlzLT5fbG9nZ2VyLT5hZHZhbmNlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5fbG9nZ2VyICkgJHRoaXMtPl9sb2dnZXItPmRlYnVnKCRzdHIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJib3NlKCRzdHIpCiAgICB7CiAgICAgICAgaWYoICR0aGlzLT5fbG9nZ2VyICkgJHRoaXMtPl9sb2dnZXItPnZlcmJvc2UoJHN0cik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGluZm8oJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sb2dnZXIgKSAkdGhpcy0+X2xvZ2dlci0+aW5mbygkc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FybmluZygkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2xvZ2dlciApICR0aGlzLT5fbG9nZ2VyLT53YXJuaW5nKCRzdHIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlcnJvcigkc3RyKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2xvZ2dlciApICR0aGlzLT5fbG9nZ2VyLT5lcnJvcigkc3RyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZmF0YWwoJHN0cikKICAgIHsKICAgICAgICBpZiggJHRoaXMtPl9sb2dnZXIgKSAkdGhpcy0+X2xvZ2dlci0+ZmF0YWwoJHN0cik7CiAgICB9Cgp9IC8vIGVuZCBvZiB0cmFpdA==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCi8vIGRvIHN5c3RlbXMgY2hlY2tzCnRyeSB7CiAgICBpZiggIWNsYXNzX2V4aXN0cygnXFppcEFyY2hpdmUnKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignWW91ciBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgUEhQIFppcEFyY2hpdmUgY2xhc3MnKTsKICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICBpZiggISRkaXIgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1lvdXIgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbGlkIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5Jyk7CiAgICBpZiggIWlzX3dyaXRhYmxlKCRkaXIpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdZb3VyIGluc3RhbGxhdGlvbiBjYW5ub3Qgd3JpdGUgdG8gdGhlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5Jyk7CgogICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBTbmFwc2hvdHMnLCdNYW5hZ2UgU25hcHNob3RzJyk7Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCdJbnN0YWxsYXRpb24gUHJvYmxlbTogJy4kZS0+R2V0TWVzc2FnZSgpKTsKICAgIGRlYnVnX3RvX2xvZyhfX0ZJTEVfXyk7CiAgICBkZWJ1Z190b19sb2coJGUtPkdldE1lc3NhZ2UoKSk7CiAgICByZXR1cm4gJGUtPkdldE1lc3NhZ2UoKTsKfQoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdNYW5hZ2UgU25hcHNob3RzJyk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/phar/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/phar/build.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKQHVubGluaygnQ0dTbmFwc2hvdC1SZXN0b3JlLnBocCcpOwokcGhhcjIgPSBuZXcgUGhhcignQ0dTbmFwc2hvdC1SZXN0b3JlLnBoYXInLCAwLCAnQ0dTbmFwc2hvdC1SZXN0b3JlLnBoYXInKTsKLy8gYWRkIGFsbCBmaWxlcyBpbiB0aGUgcHJvamVjdCwgb25seSBpbmNsdWRlIHBocCBmaWxlcwokcGhhcjItPmJ1aWxkRnJvbURpcmVjdG9yeShkaXJuYW1lKF9fRklMRV9fKSk7CiRwaGFyMi0+c2V0U3R1YigkcGhhcjItPmNyZWF0ZURlZmF1bHRTdHViKCdjbGkucGhwJywgJ3d3dy5waHAnKSk7CnJlbmFtZSgnQ0dTbmFwc2hvdC1SZXN0b3JlLnBoYXInLCdDR1NuYXBzaG90LVJlc3RvcmUucGhwJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/phar/CGSnapshot-Restore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiR3ZWIgPSAnd3d3LnBocCc7CgppZiAoaW5fYXJyYXkoJ3BoYXInLCBzdHJlYW1fZ2V0X3dyYXBwZXJzKCkpICYmIGNsYXNzX2V4aXN0cygnUGhhcicsIDApKSB7ClBoYXI6OmludGVyY2VwdEZpbGVGdW5jcygpOwpzZXRfaW5jbHVkZV9wYXRoKCdwaGFyOi8vJyAuIF9fRklMRV9fIC4gUEFUSF9TRVBBUkFUT1IgLiBnZXRfaW5jbHVkZV9wYXRoKCkpOwpQaGFyOjp3ZWJQaGFyKG51bGwsICR3ZWIpOwppbmNsdWRlICdwaGFyOi8vJyAuIF9fRklMRV9fIC4gJy8nIC4gRXh0cmFjdF9QaGFyOjpTVEFSVDsKcmV0dXJuOwp9CgppZiAoQChpc3NldCgkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgJiYgaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10pICYmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnR0VUJyB8fCAkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PSAnUE9TVCcpKSkgewpFeHRyYWN0X1BoYXI6OmdvKHRydWUpOwokbWltZXMgPSBhcnJheSgKJ3BocHMnID0+IDIsCidjJyA9PiAndGV4dC9wbGFpbicsCidjYycgPT4gJ3RleHQvcGxhaW4nLAonY3BwJyA9PiAndGV4dC9wbGFpbicsCidjKysnID0+ICd0ZXh0L3BsYWluJywKJ2R0ZCcgPT4gJ3RleHQvcGxhaW4nLAonaCcgPT4gJ3RleHQvcGxhaW4nLAonbG9nJyA9PiAndGV4dC9wbGFpbicsCidybmcnID0+ICd0ZXh0L3BsYWluJywKJ3R4dCcgPT4gJ3RleHQvcGxhaW4nLAoneHNkJyA9PiAndGV4dC9wbGFpbicsCidwaHAnID0+IDEsCidpbmMnID0+IDEsCidhdmknID0+ICd2aWRlby9hdmknLAonYm1wJyA9PiAnaW1hZ2UvYm1wJywKJ2NzcycgPT4gJ3RleHQvY3NzJywKJ2dpZicgPT4gJ2ltYWdlL2dpZicsCidodG0nID0+ICd0ZXh0L2h0bWwnLAonaHRtbCcgPT4gJ3RleHQvaHRtbCcsCidodG1scycgPT4gJ3RleHQvaHRtbCcsCidpY28nID0+ICdpbWFnZS94LWljbycsCidqcGUnID0+ICdpbWFnZS9qcGVnJywKJ2pwZycgPT4gJ2ltYWdlL2pwZWcnLAonanBlZycgPT4gJ2ltYWdlL2pwZWcnLAonanMnID0+ICdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnLAonbWlkaScgPT4gJ2F1ZGlvL21pZGknLAonbWlkJyA9PiAnYXVkaW8vbWlkaScsCidtb2QnID0+ICdhdWRpby9tb2QnLAonbW92JyA9PiAnbW92aWUvcXVpY2t0aW1lJywKJ21wMycgPT4gJ2F1ZGlvL21wMycsCidtcGcnID0+ICd2aWRlby9tcGVnJywKJ21wZWcnID0+ICd2aWRlby9tcGVnJywKJ3BkZicgPT4gJ2FwcGxpY2F0aW9uL3BkZicsCidwbmcnID0+ICdpbWFnZS9wbmcnLAonc3dmJyA9PiAnYXBwbGljYXRpb24vc2hvY2t3YXZlLWZsYXNoJywKJ3RpZicgPT4gJ2ltYWdlL3RpZmYnLAondGlmZicgPT4gJ2ltYWdlL3RpZmYnLAond2F2JyA9PiAnYXVkaW8vd2F2JywKJ3hibScgPT4gJ2ltYWdlL3hibScsCid4bWwnID0+ICd0ZXh0L3htbCcsCik7CgpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsKaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CgokYmFzZW5hbWUgPSBiYXNlbmFtZShfX0ZJTEVfXyk7CmlmICghc3RycG9zKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAkYmFzZW5hbWUpKSB7CmNoZGlyKEV4dHJhY3RfUGhhcjo6JHRlbXApOwppbmNsdWRlICR3ZWI7CnJldHVybjsKfQokcHQgPSBzdWJzdHIoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sIHN0cnBvcygkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSwgJGJhc2VuYW1lKSArIHN0cmxlbigkYmFzZW5hbWUpKTsKaWYgKCEkcHQgfHwgJHB0ID09ICcvJykgewokcHQgPSAkd2ViOwpoZWFkZXIoJ0hUVFAvMS4xIDMwMSBNb3ZlZCBQZXJtYW5lbnRseScpOwpoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10gLiAnLycgLiAkcHQpOwpleGl0Owp9CiRhID0gcmVhbHBhdGgoRXh0cmFjdF9QaGFyOjokdGVtcCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkcHQpOwppZiAoISRhIHx8IHN0cmxlbihkaXJuYW1lKCRhKSkgPCBzdHJsZW4oRXh0cmFjdF9QaGFyOjokdGVtcCkpIHsKaGVhZGVyKCdIVFRQLzEuMCA0MDQgTm90IEZvdW5kJyk7CmVjaG8gIjxodG1sPlxuIDxoZWFkPlxuICA8dGl0bGU+RmlsZSBOb3QgRm91bmQ8dGl0bGU+XG4gPC9oZWFkPlxuIDxib2R5PlxuICA8aDE+NDA0IC0gRmlsZSAiLCAkcHQsICIgTm90IEZvdW5kPC9oMT5cbiA8L2JvZHk+XG48L2h0bWw+IjsKZXhpdDsKfQokYiA9IHBhdGhpbmZvKCRhKTsKaWYgKCFpc3NldCgkYlsnZXh0ZW5zaW9uJ10pKSB7CmhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7CmhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBmaWxlc2l6ZSgkYSkpOwpyZWFkZmlsZSgkYSk7CmV4aXQ7Cn0KaWYgKGlzc2V0KCRtaW1lc1skYlsnZXh0ZW5zaW9uJ11dKSkgewppZiAoJG1pbWVzWyRiWydleHRlbnNpb24nXV0gPT09IDEpIHsKaW5jbHVkZSAkYTsKZXhpdDsKfQppZiAoJG1pbWVzWyRiWydleHRlbnNpb24nXV0gPT09IDIpIHsKaGlnaGxpZ2h0X2ZpbGUoJGEpOwpleGl0Owp9CmhlYWRlcignQ29udGVudC1UeXBlOiAnIC4kbWltZXNbJGJbJ2V4dGVuc2lvbiddXSk7CmhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBmaWxlc2l6ZSgkYSkpOwpyZWFkZmlsZSgkYSk7CmV4aXQ7Cn0KfQoKY2xhc3MgRXh0cmFjdF9QaGFyCnsKc3RhdGljICR0ZW1wOwpzdGF0aWMgJG9yaWdkaXI7CmNvbnN0IEdaID0gMHgxMDAwOwpjb25zdCBCWjIgPSAweDIwMDA7CmNvbnN0IE1BU0sgPSAweDMwMDA7CmNvbnN0IFNUQVJUID0gJ2NsaS5waHAnOwpjb25zdCBMRU4gPSA2NjgxOwoKc3RhdGljIGZ1bmN0aW9uIGdvKCRyZXR1cm4gPSBmYWxzZSkKewokZnAgPSBmb3BlbihfX0ZJTEVfXywgJ3JiJyk7CmZzZWVrKCRmcCwgc2VsZjo6TEVOKTsKJEwgPSB1bnBhY2soJ1YnLCAkYSA9IChiaW5hcnkpZnJlYWQoJGZwLCA0KSk7CiRtID0gKGJpbmFyeSknJzsKCmRvIHsKJHJlYWQgPSA4MTkyOwppZiAoJExbMV0gLSBzdHJsZW4oJG0pIDwgODE5MikgewokcmVhZCA9ICRMWzFdIC0gc3RybGVuKCRtKTsKfQokbGFzdCA9IChiaW5hcnkpZnJlYWQoJGZwLCAkcmVhZCk7CiRtIC49ICRsYXN0Owp9IHdoaWxlIChzdHJsZW4oJGxhc3QpICYmIHN0cmxlbigkbSkgPCAkTFsxXSk7CgppZiAoc3RybGVuKCRtKSA8ICRMWzFdKSB7CmRpZSgnRVJST1I6IG1hbmlmZXN0IGxlbmd0aCByZWFkIHdhcyAiJyAuCnN0cmxlbigkbSkgLiciIHNob3VsZCBiZSAiJyAuCiRMWzFdIC4gJyInKTsKfQoKJGluZm8gPSBzZWxmOjpfdW5wYWNrKCRtKTsKJGYgPSAkaW5mb1snYyddOwoKaWYgKCRmICYgc2VsZjo6R1opIHsKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0ZScpKSB7CmRpZSgnRXJyb3I6IHpsaWIgZXh0ZW5zaW9uIGlzIG5vdCBlbmFibGVkIC0nIC4KJyBnemluZmxhdGUoKSBmdW5jdGlvbiBuZWVkZWQgZm9yIHpsaWItY29tcHJlc3NlZCAucGhhcnMnKTsKfQp9CgppZiAoJGYgJiBzZWxmOjpCWjIpIHsKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycpKSB7CmRpZSgnRXJyb3I6IGJ6aXAyIGV4dGVuc2lvbiBpcyBub3QgZW5hYmxlZCAtJyAuCicgYnpkZWNvbXByZXNzKCkgZnVuY3Rpb24gbmVlZGVkIGZvciBiejItY29tcHJlc3NlZCAucGhhcnMnKTsKfQp9CgokdGVtcCA9IHNlbGY6OnRtcGRpcigpOwoKaWYgKCEkdGVtcCB8fCAhaXNfd3JpdGFibGUoJHRlbXApKSB7CiRzZXNzaW9ucGF0aCA9IHNlc3Npb25fc2F2ZV9wYXRoKCk7CmlmIChzdHJwb3MgKCRzZXNzaW9ucGF0aCwgIjsiKSAhPT0gZmFsc2UpCiRzZXNzaW9ucGF0aCA9IHN1YnN0ciAoJHNlc3Npb25wYXRoLCBzdHJwb3MgKCRzZXNzaW9ucGF0aCwgIjsiKSsxKTsKaWYgKCFmaWxlX2V4aXN0cygkc2Vzc2lvbnBhdGgpIHx8ICFpc19kaXIoJHNlc3Npb25wYXRoKSkgewpkaWUoJ0NvdWxkIG5vdCBsb2NhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBleHRyYWN0IHBoYXInKTsKfQokdGVtcCA9ICRzZXNzaW9ucGF0aDsKfQoKJHRlbXAgLj0gJy9waGFyZXh0cmFjdC8nLmJhc2VuYW1lKF9fRklMRV9fLCAnLnBoYXInKTsKc2VsZjo6JHRlbXAgPSAkdGVtcDsKc2VsZjo6JG9yaWdkaXIgPSBnZXRjd2QoKTsKQG1rZGlyKCR0ZW1wLCAwNzc3LCB0cnVlKTsKJHRlbXAgPSByZWFscGF0aCgkdGVtcCk7CgppZiAoIWZpbGVfZXhpc3RzKCR0ZW1wIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIG1kNV9maWxlKF9fRklMRV9fKSkpIHsKc2VsZjo6X3JlbW92ZVRtcEZpbGVzKCR0ZW1wLCBnZXRjd2QoKSk7CkBta2RpcigkdGVtcCwgMDc3NywgdHJ1ZSk7CkBmaWxlX3B1dF9jb250ZW50cygkdGVtcCAuICcvJyAuIG1kNV9maWxlKF9fRklMRV9fKSwgJycpOwoKZm9yZWFjaCAoJGluZm9bJ20nXSBhcyAkcGF0aCA9PiAkZmlsZSkgewokYSA9ICFmaWxlX2V4aXN0cyhkaXJuYW1lKCR0ZW1wIC4gJy8nIC4gJHBhdGgpKTsKQG1rZGlyKGRpcm5hbWUoJHRlbXAgLiAnLycgLiAkcGF0aCksIDA3NzcsIHRydWUpOwpjbGVhcnN0YXRjYWNoZSgpOwoKaWYgKCRwYXRoW3N0cmxlbigkcGF0aCkgLSAxXSA9PSAnLycpIHsKQG1rZGlyKCR0ZW1wIC4gJy8nIC4gJHBhdGgsIDA3NzcpOwp9IGVsc2UgewpmaWxlX3B1dF9jb250ZW50cygkdGVtcCAuICcvJyAuICRwYXRoLCBzZWxmOjpleHRyYWN0RmlsZSgkcGF0aCwgJGZpbGUsICRmcCkpOwpAY2htb2QoJHRlbXAgLiAnLycgLiAkcGF0aCwgMDY2Nik7Cn0KfQp9CgpjaGRpcigkdGVtcCk7CgppZiAoISRyZXR1cm4pIHsKaW5jbHVkZSBzZWxmOjpTVEFSVDsKfQp9CgpzdGF0aWMgZnVuY3Rpb24gdG1wZGlyKCkKewppZiAoc3RycG9zKFBIUF9PUywgJ1dJTicpICE9PSBmYWxzZSkgewppZiAoJHZhciA9IGdldGVudignVE1QJykgPyBnZXRlbnYoJ1RNUCcpIDogZ2V0ZW52KCdURU1QJykpIHsKcmV0dXJuICR2YXI7Cn0KaWYgKGlzX2RpcignL3RlbXAnKSB8fCBta2RpcignL3RlbXAnKSkgewpyZXR1cm4gcmVhbHBhdGgoJy90ZW1wJyk7Cn0KcmV0dXJuIGZhbHNlOwp9CmlmICgkdmFyID0gZ2V0ZW52KCdUTVBESVInKSkgewpyZXR1cm4gJHZhcjsKfQpyZXR1cm4gcmVhbHBhdGgoJy90bXAnKTsKfQoKc3RhdGljIGZ1bmN0aW9uIF91bnBhY2soJG0pCnsKJGluZm8gPSB1bnBhY2soJ1YnLCBzdWJzdHIoJG0sIDAsIDQpKTsKICRsID0gdW5wYWNrKCdWJywgc3Vic3RyKCRtLCAxMCwgNCkpOwokbSA9IHN1YnN0cigkbSwgMTQgKyAkbFsxXSk7CiRzID0gdW5wYWNrKCdWJywgc3Vic3RyKCRtLCAwLCA0KSk7CiRvID0gMDsKJHN0YXJ0ID0gNCArICRzWzFdOwokcmV0WydjJ10gPSAwOwoKZm9yICgkaSA9IDA7ICRpIDwgJGluZm9bMV07ICRpKyspIHsKICRsZW4gPSB1bnBhY2soJ1YnLCBzdWJzdHIoJG0sICRzdGFydCwgNCkpOwokc3RhcnQgKz0gNDsKICRzYXZlcGF0aCA9IHN1YnN0cigkbSwgJHN0YXJ0LCAkbGVuWzFdKTsKJHN0YXJ0ICs9ICRsZW5bMV07CiAgICRyZXRbJ20nXVskc2F2ZXBhdGhdID0gYXJyYXlfdmFsdWVzKHVucGFjaygnVmEvVmIvVmMvVmQvVmUvVmYnLCBzdWJzdHIoJG0sICRzdGFydCwgMjQpKSk7CiRyZXRbJ20nXVskc2F2ZXBhdGhdWzNdID0gc3ByaW50ZignJXUnLCAkcmV0WydtJ11bJHNhdmVwYXRoXVszXQomIDB4ZmZmZmZmZmYpOwokcmV0WydtJ11bJHNhdmVwYXRoXVs3XSA9ICRvOwokbyArPSAkcmV0WydtJ11bJHNhdmVwYXRoXVsyXTsKJHN0YXJ0ICs9IDI0ICsgJHJldFsnbSddWyRzYXZlcGF0aF1bNV07CiRyZXRbJ2MnXSB8PSAkcmV0WydtJ11bJHNhdmVwYXRoXVs0XSAmIHNlbGY6Ok1BU0s7Cn0KcmV0dXJuICRyZXQ7Cn0KCnN0YXRpYyBmdW5jdGlvbiBleHRyYWN0RmlsZSgkcGF0aCwgJGVudHJ5LCAkZnApCnsKJGRhdGEgPSAnJzsKJGMgPSAkZW50cnlbMl07Cgp3aGlsZSAoJGMpIHsKaWYgKCRjIDwgODE5MikgewokZGF0YSAuPSBAZnJlYWQoJGZwLCAkYyk7CiRjID0gMDsKfSBlbHNlIHsKJGMgLT0gODE5MjsKJGRhdGEgLj0gQGZyZWFkKCRmcCwgODE5Mik7Cn0KfQoKaWYgKCRlbnRyeVs0XSAmIHNlbGY6OkdaKSB7CiRkYXRhID0gZ3ppbmZsYXRlKCRkYXRhKTsKfSBlbHNlaWYgKCRlbnRyeVs0XSAmIHNlbGY6OkJaMikgewokZGF0YSA9IGJ6ZGVjb21wcmVzcygkZGF0YSk7Cn0KCmlmIChzdHJsZW4oJGRhdGEpICE9ICRlbnRyeVswXSkgewpkaWUoIkludmFsaWQgaW50ZXJuYWwgLnBoYXIgZmlsZSAoc2l6ZSBlcnJvciAiIC4gc3RybGVuKCRkYXRhKSAuICIgIT0gIiAuCiRzdGF0WzddIC4gIikiKTsKfQoKaWYgKCRlbnRyeVszXSAhPSBzcHJpbnRmKCIldSIsIGNyYzMyKChiaW5hcnkpJGRhdGEpICYgMHhmZmZmZmZmZikpIHsKZGllKCJJbnZhbGlkIGludGVybmFsIC5waGFyIGZpbGUgKGNoZWNrc3VtIGVycm9yKSIpOwp9CgpyZXR1cm4gJGRhdGE7Cn0KCnN0YXRpYyBmdW5jdGlvbiBfcmVtb3ZlVG1wRmlsZXMoJHRlbXAsICRvcmlnZGlyKQp7CmNoZGlyKCR0ZW1wKTsKCmZvcmVhY2ggKGdsb2IoJyonKSBhcyAkZikgewppZiAoZmlsZV9leGlzdHMoJGYpKSB7CmlzX2RpcigkZikgPyBAcm1kaXIoJGYpIDogQHVubGluaygkZik7CmlmIChmaWxlX2V4aXN0cygkZikgJiYgaXNfZGlyKCRmKSkgewpzZWxmOjpfcmVtb3ZlVG1wRmlsZXMoJGYsIGdldGN3ZCgpKTsKfQp9Cn0KCkBybWRpcigkdGVtcCk7CmNsZWFyc3RhdGNhY2hlKCk7CmNoZGlyKCRvcmlnZGlyKTsKfQp9CgpFeHRyYWN0X1BoYXI6OmdvKCk7Cl9fSEFMVF9DT01QSUxFUigpOyA/Pg0KwgEAAAkAAAARAAAAAQAXAAAAQ0dTbmFwc2hvdC1SZXN0b3JlLnBoYXIAAAAABwAAAGNsaS5waHBDJAAAUPhlVkMkAAD8Th8ntgEAAAAAAAARAAAAbGliL2RiX3V0aWxzLnBocH4mCAAAUPhlViYIAAA1xb67tgEAAAAAAAAiAAAAbGliL2NsYXNzLmNvbXBhdGliaWxpdHlfdGVzdGVyLnBocBUaAABQ+GVWFRoAAPirlTG2AQAAAAAAABAAAABsaWIvZGJfdXRpbHMucGhwNggAAFD4ZVY2CAAA9AK7VbYBAAAAAAAADQAAAGxpYi91dGlscy5waHANDgAAUPhlVg0OAACmZgshtgEAAAAAAAAdAAAAbGliL2NsYXNzLnNlY3VyZV9pbmlfZmlsZS5waHAZHgAAUPhlVhkeAACxApGotgEAAAAAAAAZAAAAbGliL2NsYXNzLnNpbXBsZV90ZXN0LnBocHELAABQ+GVWcQsAAHsepCy2AQAAAAAAAAcAAAB3d3cucGhw9wEAAFD4ZVb3AQAA5v7PBbYBAAAAAAAACQAAAGJ1aWxkLnBocFoBAABQ+GVWWgEAADt++Dm2AQAAAAAAADw/cGhwCgppbmNsdWRlX29uY2UoJ2xpYi91dGlscy5waHAnKTsKaW5jbHVkZV9vbmNlKCdsaWIvZGJfdXRpbHMucGhwJyk7CmluY2x1ZGVfb25jZSgnbGliL2NsYXNzLmNvbXBhdGliaWxpdHlfdGVzdGVyLnBocCcpOwoKJHNjcmlwdCA9IGJhc2VuYW1lKCRhcmd2WzBdKTsKJGRiY29uZmlnID0gbnVsbDsgLy8gZGIgY29uZmlnIGFycmF5CiRkYmZpbGUgPSBudWxsOyAvLyBwYXRoIHRvIGltcG9ydCBmaWxlLgokc25hcHNob3QgPSBudWxsOyAvLyBwYXRobmFtZSB0byBzbmFwc2hvdAokb2xkX2NvbmZpZyA9IG51bGw7IC8vIG9sZCBjb25maWcgdmFsdWVzCiRhcmNoID0gbnVsbDsgIC8vIHRoZSBhcmNoaXZlIG9iamVjdAokZGlyID0gZ2V0Y3dkKCk7CiRjb25maWdfZmlsZSA9IG51bGw7Cgokb3V0ID0gPDw8RU9UCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPT09IENHU25hcHNob3QgUmVzdG9yZSBVdGlsaXR5ID09PQpUaGlzIHByb2dyYW0gd2lsbCBhdHRlbXB0IHRvIHJlc3RvcmUgYSBDR1NuYXBzaG90IGZpbGUgaW50byBhIHdvcmtpbmcgQ01TTVMgRGlzdHJpYnV0aW9uLgpUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc3RlcHMgaW4gdGhpcyBvcGVyYXRpb246CjEuICBEbyBhIGJhc2ljIGNoZWNrIGZvciBzeXN0ZW0gY29tcGF0aWJpbGl0eQoyLiAgQXNrIGZvciwgYW5kIHZhbGlkYXRlIHRoZSBDR1NuYXBzaG90IGZpbGUKMy4gIENoZWNrIGZvciBhbiBlbXB0eSBkaXJlY3RvcnkuCjQuICBHZXQgYW5kIHZhbGlkYXRlIGRhdGFiYXNlIGNyZWRlbnRpYWxzLCBhbmQgdGhlIGRhdGFiYXNlCjUuICBFeHRyYWN0IENHU25hcHNob3QgRmlsZXMKNi4gIFJlc3RvcmUgdGhlIGRhdGFiYXNlCjcuICBTZWN1cmUgdGhlIGluc3RhbGxhdGlvbgo4LiAgR2VuZXJhdGUgYSBuZXcgY29uZmlnLnBocAoKVGhlcmUgYXJlIHN0ZXBzIHlvdSBtYXkgbmVlZCB0byB0YWtlIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIHRvIGVuc3VyZSBhIHdvcmtpbmcgc3lzdGVtLApQYXJ0aWN1bGFybHkgaWYgeW91IGFyZSBtb3ZpbmcgdG8gYSBuZXcgaG9zdC4KVGhlc2UgSW5jbHVkZQoxLiAgQWRqdXN0aW5nIHlvdXIgLmh0YWNjZXNzIGZpbGUKMi4gIEFkanVzdGluZyBhbnkgaGFyZCBjb2RlZCBsaW5rcwozLiAgQWRqdXN0aW5nIG1vZHVsZSBwcmVmZXJlbmNlcyBhbmQgc2V0dGluZ3MKNC4gIFRlc3RpbmcKCk5PVEVTOgoxLiAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBzaGVsbCBjb21tYW5kcy4KMi4gIFRoaXMgc2NyaXB0IHJlcXVpcmVzIHRoYXQgdGhlIG15c3FsIHByb2dyYW0gYmUgaW4gdGhlIGN1cnJlbnQgUEFUSC4KMy4gIFRoaXMgc2NyaXB0IHJlcXVpcmVzIHRoZSBaaXBBcmNoaXZlIHBocCBjbGFzcyAodXN1YWxseSBidWlsdCBpbikKNC4gIFRoaXMgc2NyaXB0IGRvZXMgY29tcGF0aWJpbGl0eSBjaGVja3MgdGhhdCBtYXkgYmUgbGVzcyBleHRlbnNpdmUgdGhhbiB0aG9zZSBidWlsdCBpbnRvIENNU01TLCBvciBtYXkgYmUgbW9yZSBleHRlbnNpdmUuCkVPVDsKY2xzKCk7Cm91dHB1dCgkb3V0KTsKCiRyZXMgPSBhc2tfYm9vbCgnQXJlIHlvdSByZWFkeSB0byBiZWdpbj8nKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgb3V0cHV0KCJUaGFuayB5b3UsIGNvbWUgYWdhaW4iKTsKICAgIGV4aXQ7Cn0KCi8vIDEuICBwcm9tcHQgZm9yIHppcCBmaWxlCiRvdXQgPSA8PDxFT1QKPT0gRW50ZXIgdGhlIENHU25hcHNob3QgbmFtZSA9PQpQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIENHU25hcHNob3QgZmlsZSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHJlc3RvcmUuCgpOb3RlOiBUaGUgZmlsZW5hbWUgc2hvdWxkIGJlIGFuIGFic29sdXRlIHBhdGgsIG9yIHNob3VsZCByZXNpZGUgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgpFT1Q7CiRzbmFwc2hvdCA9IG51bGw7CmNscygpOwp3aGlsZSggISRzbmFwc2hvdCApIHsKICAgIG91dHB1dCgkb3V0KTsKICAgICRyZXMgPSBhc2tfc3RyaW5nX3JlcXVpcmVkKCAiQ0dTbmFwc2hvdCBGaWxlIE5hbWU6IiApOwogICAgaWYoICRyZXMgKSB7CiAgICAgICAgJGZuID0gJGRpci4nLycuJHJlczsKICAgICAgICBpZiggIWlzX2ZpbGUoJGZuKSB8fCAhaXNfcmVhZGFibGUoJGZuKSApIHsKICAgICAgICAgICAgbmV3bGluZSgpOwogICAgICAgICAgICBlcnJvcigiQ291bGQgbm90IGZpbmQgdGhlIGZpbGU6ICRyZXMiKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiggIWlzX2Nnc25hcHNob3QoJGZuKSApIHsKICAgICAgICAgICAgbmV3bGluZSgpOwogICAgICAgICAgICBlcnJvcigiJHJlcyBpcyBub3QgYSBDR1NuYXBzaG90IGFyY2hpdmUgZmlsZSIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHNuYXBzaG90ID0gJHJlczsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CgovLyAyLiAgR2V0IGNvbmZpZyBhbmQgZGF0YWJhc2UgZmlsZXMgZnJvbSB0aGUgc25hcHNob3QKJGNvbmZpZ19maWxlcyA9IGFycmF5KCdjb25maWcucGhwJywnbGliL2NvbmZpZy5waHAnKTsKJG9sZF9jb25maWcgPSBudWxsOwokdG1wZmlsZSA9ICcudG1wLmNvbmZpZy5waHAnOwokYXJjaCA9IG5ldyBcWmlwQXJjaGl2ZTsKJGFyY2gtPm9wZW4oJHNuYXBzaG90KTsKJGRiZmlsZSA9IGNvcHlfYXJjaGZpbGVfdG9fdG1wKCRhcmNoLCd0bXAvX19teXNxbGR1bXAuc3FsJyk7CmZvcmVhY2goICRjb25maWdfZmlsZXMgYXMgJGZpbGUgKSB7CiAgICAkZm4gPSBjb3B5X2FyY2hmaWxlX3RvX3RtcCgkYXJjaCwkZmlsZSk7CiAgICBpZiggJGZuICkgewogICAgICAgICRjb25maWdfZmlsZSA9ICRmaWxlOwogICAgICAgIGluY2x1ZGUoJGZuKTsKICAgICAgICAkb2xkX2NvbmZpZyA9ICRjb25maWc7CiAgICAgICAgdW5zZXQoJGNvbmZpZyk7CiAgICAgICAgdW5saW5rKCRmbik7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KaWYoICEkb2xkX2NvbmZpZyB8fCAhaXNzZXQoJG9sZF9jb25maWdbJ2RiX25hbWUnXSkgKSB7CiAgICBlcnJvcigiQ291bGQgbm90IGZpbmQgY29uZmlnIGRhdGEgaW4gQ0dTbmFwc2hvdCIpOwogICAgZXhpdCgxKTsKfQoKLy8gMy4gIERpc3BsYXkgaW5mbyBmcm9tIHRoZSBzbmFwc2hvdAokY2dzbmFwc2hvdF9maWxlID0gJGFyY2gtPmdldEZyb21OYW1lKCd0bXAvLmNnc25hcHNob3QnKTsKJGluaSA9IG5ldyBcQ0dTbmFwc2hvdFxwaGFyXHNlY3VyZV9pbmlfZmlsZTsKJGNnc25hcHNob3RfZGF0YSA9ICRpbmktPnBhcnNlKCRjZ3NuYXBzaG90X2ZpbGUsRkFMU0UpOwpjbHMoKTsKb3V0cHV0KCc9PSBDR1NuYXBzaG90IERldGFpbHMgPT0nKTsKb3V0cHV0KCdTaXRlIE5hbWU6ICcuJGNnc25hcHNob3RfZGF0YVsnd2Vic2l0ZSddWydzaXRlbmFtZSddKTsKb3V0cHV0KCdTaXRlIFVSTDogJy4kY2dzbmFwc2hvdF9kYXRhWyd3ZWJzaXRlJ11bJ3Jvb3RfdXJsJ10pOwpvdXRwdXQoJ0NNU01TIFZlcnNpb246ICcuJGNnc25hcHNob3RfZGF0YVsnd2Vic2l0ZSddWydjbXNfdmVyc2lvbiddKTsKb3V0cHV0KCdDcmVhdGVkOiAnLnN0cmZ0aW1lKCcleCAlWCcsJGNnc25hcHNob3RfZGF0YVsnbWFpbiddWydjcmVhdGVkJ10pKTsKJHJlcyA9IGFza19ib29sKCdEbyB5b3Ugd2FudCB0byBjb250aW51ZT8nKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgb3V0cHV0KCJUaGFuayB5b3UsIGNvbWUgYWdhaW4iKTsKICAgIGV4aXQ7Cn0KCi8vIDQuICBDb21wYXRpYmlsaXR5IGNoZWNrCmNscygpOwpvdXRwdXQoJz09IENoZWNrIGZvciBDb21wYXRpYmlsaXR5ID09Jyk7CiRwYXJtcyA9IGFycmF5KCdkaXInPT4kZGlyLCdleGNsdWRlcyc9PmFycmF5KGJhc2VuYW1lKCRzbmFwc2hvdCksJHNjcmlwdCkpOwokdGVzdGVyID0gbmV3IFxDR1NuYXBzaG90XHBoYXJcY29tcGF0aWJpbGl0eV90ZXN0ZXIoJHBhcm1zKTsKJHJlcyA9ICR0ZXN0ZXItPnRlc3QoKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgZXJyb3IoIk9uZSBvciBtb3JlIGNvbXBhdGliaWxpdHkgdGVzdHMgZmFpbGVkIik7CiAgICAkZmFpbGVkID0gJHRlc3Rlci0+Z2V0X2ZhaWxlZCgpOwogICAgZm9yZWFjaCggJGZhaWxlZCBhcyAkb25lICkgewogICAgICAgIGVycm9yKCIgICAgJG9uZSA6ICIuJHRlc3Rlci0+Z2V0X2Vycm9ybXNnKCRvbmUpLEZBTFNFKTsKICAgIH0KICAgIGVycm9yKCJOb3QgYWxsIHRlc3RzIHBhc3NzZWQuLi4gbXVzdCBleGl0LiIpOwogICAgZXhpdCgxKTsKfQoKJG91dCA9IGFycmF5KCk7CiRsaXN0ID0gYXJyYXkoKTsKJGxpc3RbJ2EnXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgSG9zdCcsJ2tleSc9PidkYl9ob3N0bmFtZScsJ3ZhbCc9Pidsb2NhbGhvc3QnKTsKJGxpc3RbJ2InXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgTmFtZScsJ2tleSc9PidkYl9uYW1lJywndmFsJz0+bnVsbCk7CiRsaXN0WydjJ10gPSBhcnJheSgncHJvbXB0Jz0+J0RhdGFiYXNlIFVzZXInLCdrZXknPT4nZGJfdXNlcm5hbWUnLCd2YWwnPT5udWxsKTsKJGxpc3RbJ2QnXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgUGFzc3dvcmQnLCdrZXknPT4nZGJfcGFzc3dvcmQnLCd2YWwnPT5udWxsKTsKJGxpc3RbJ2UnXSA9IGFycmF5KCdwcm9tcHQnPT4nREJNUyAobXlzcWwvbXlzcWxpKScsJ2tleSc9PidkYm1zJywndmFsJz0+J215c3FsaScsJ29wdGlvbnMnPT5hcnJheSgnbXlzcWxpJywnbXlzcWwnKSk7CiRsaXN0Wyd6J10gPSBhcnJheSgncHJvbXB0Jz0+J0RvbmUvRmluaXNoZWQnKTsKJHZhbGlkID0gZmFsc2U7CiRidWlsZF9wcm9tcHQgPSBmdW5jdGlvbigkbGlzdCkgewogICAgJHByb21wdCA9ICc9PSBEYXRhYmFzZSBDb25uZWN0aW9uIEluZm9ybWF0aW9uID09Jy4iXG4iOwogICAgZm9yZWFjaCggJGxpc3QgYXMgJGtleSA9PiAkcmVjICkgewogICAgICAgIGlmKCBpc3NldCgkcmVjWydrZXknXSkgKSB7CiAgICAgICAgICAgICRwcm9tcHQgLj0gc3ByaW50ZigiJXM6ICUyMHMgPSAlc1xuIiwka2V5LCRyZWNbJ3Byb21wdCddLCRyZWNbJ3ZhbCddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcHJvbXB0IC49IHNwcmludGYoIiVzOiAlMjBzXG4iLCRrZXksJHJlY1sncHJvbXB0J10pOwogICAgICAgIH0KICAgIH0KICAgICRwcm9tcHQgLj0gIlxuT3B0aW9uIFthLGIsYyxkLGUgcS9xdWl0L2V4aXRdOiAiOwogICAgcmV0dXJuICRwcm9tcHQ7Cn07CgpjbHMoKTsKd2hpbGUoICEkdmFsaWQgKSB7CiAgICB3aGlsZSggMSApIHsKICAgICAgICAvLyBkaXNwbGF5IHRoZSBsaXN0CiAgICAgICAgJGxpc3RrZXkgPSBhc2tfb3B0aW9uKCRidWlsZF9wcm9tcHQoJGxpc3QpLGFycmF5X2tleXMoJGxpc3QpKTsKICAgICAgICBpZiggJGxpc3RrZXkgPT0gJ3onICkgYnJlYWs7CiAgICAgICAgaWYoIGlzc2V0KCRsaXN0WyRsaXN0a2V5XVsnb3B0aW9ucyddKSApIHsKICAgICAgICAgICAgJHZhbCA9IGFza19vcHRpb24oJGxpc3RbJGxpc3RrZXldWydwcm9tcHQnXS4nOicsJGxpc3RbJGxpc3RrZXldWydvcHRpb25zJ10pOwogICAgICAgICAgICAkbGlzdFskbGlzdGtleV1bJ3ZhbCddID0gdHJpbSgkdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR2YWwgPSBhc2tfc3RyaW5nX3JlcXVpcmVkKCRsaXN0WyRsaXN0a2V5XVsncHJvbXB0J10uJzonKTsKICAgICAgICAgICAgJGxpc3RbJGxpc3RrZXldWyd2YWwnXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYSB2YWx1ZSBmb3IgZXZlcnl0aGluZwogICAgJGZuZCA9IHRydWU7CiAgICBmb3JlYWNoKCAkbGlzdCBhcyAka2V5ID0+ICRyZWMgKSB7CiAgICAgICAgaWYoICFpc3NldCgkcmVjWydrZXknXSkgKSBjb250aW51ZTsKICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ3ZhbCddKSB8fCAkcmVjWyd2YWwnXSA9PSAnJyApIHsKICAgICAgICAgICAgJGZuZCA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBpZiggJGZuZCApIHsKICAgICAgICAvLyBkbyBhIHRlc3QgY29ubmVjdGlvbgogICAgICAgICRkYmNvbmZpZyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJGtleSA9PiAkcmVjICkgewogICAgICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ2tleSddKSApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ3ZhbCddKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkZGJjb25maWdbJHJlY1sna2V5J11dID0gJHJlY1sndmFsJ107CiAgICAgICAgfQogICAgICAgICRyZXMgPSBcQ0dTbmFwc2hvdFxwaGFyXHRlc3RfZGJfY29ubmVjdCgkZGJjb25maWcpOwogICAgICAgIGlmKCAhJHJlcyApIHsKICAgICAgICAgICAgbmV3bGluZSgpOwogICAgICAgICAgICBlcnJvcignUHJvYmxlbSBjb25uZWN0aW5nIHRvIHRoZSBkYXRhYmFzZS4uLiBwbGVhc2UgZG91YmxlY2hlY2sgeW91ciBpbmZvcm1hdGlvbicpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIC8vIGNvbm5lY3RlZCBva2F5LCBzZWUgaWYgdGhlIGRiIGlzIGVtcHR5CiAgICAgICAgJHJlcyA9IFxDR1NuYXBzaG90XHBoYXJcdGVzdF9kYl9lbXB0eSgkcmVzLCRkYmNvbmZpZyk7CiAgICAgICAgaWYoICEkcmVzICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCdUaGUgZGF0YWJhc2UgeW91IHNlbGVjdGVkIGFwcGVhcnMgdG8gYWxyZWFkeSBjb250YWluIHRhYmxlcy4uLiBwbGVhc2UgcGljayBhbm90aGVyIGRhdGFiYXNlLCBvciBjbGVhciB0aGlzIG9uZS4nKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAkdmFsaWQgPSB0cnVlOwogICAgfQp9CgovLyA1LiAgaW1wb3J0IGRhdGFiYXNlCmNscygpOwpvdXRwdXQoJz09IGltcG9ydGluZyBkYXRhYmFzZSA9PScpOwokcmVzID0gXENHU25hcHNob3RccGhhclxkYl9pbXBvcnQoJGRiY29uZmlnLCRkYmZpbGUpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBlcnJvcignUHJvYmxlbSBpbXBvcnRpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZS4uLiBwbGVhc2UgY2xlYW51cCBhbmQgcmV0cnknKTsKICAgIGV4aXQoMSk7Cn0Kb3V0cHV0KCdkb25lJyk7CgovLyA2LiAgZXh0cmFjdCB6aXAgZmlsZXMKJG9wID0gbnVsbDsKbmV3bGluZSgpOwpvdXRwdXQoJz09IHJlc3RvcmluZyBmaWxlcyA9PScpOwpmb3IoICRpID0gMDsgJGkgPCAkYXJjaC0+bnVtRmlsZXM7ICRpKysgKSB7CiAgICAkZW50cnkgPSAkYXJjaC0+Z2V0TmFtZUluZGV4KCRpKTsKICAgICRhcmNoLT5leHRyYWN0VG8oJy4nLCRlbnRyeSk7CiAgICAkcCA9IChpbnQpICgoZmxvYXQpJGkgLyAoZmxvYXQpJGFyY2gtPm51bUZpbGVzICogMTAwKTsKICAgIGlmKCAkcCA+IDAgJiYgJHAgJSA1ID09IDAgJiYgJHAgIT0gJG9wICkgewogICAgICAgICRvcCA9ICRwOwogICAgICAgIG91dHB1dCgkcC4nJS4uLiAnLEZBTFNFKTsKICAgIH0KfQpvdXRwdXQoJ2RvbmUnKTsKCi8vIDYuICBnZW5lcmF0ZSBjb25maWcucGhwCmlmKCAkY29uZmlnX2ZpbGUgKSB7CiAgIC8vIGFsbCBvZiB0aGlzIGFzc3VtZXMgJGRpciA9PSBjd2QKICAgbmV3bGluZSgpOwogICBvdXRwdXQoJz09IGdlbmVyYXRpbmcgbmV3IGNvbmZpZyBmaWxlID09Jyk7CiAgIG91dHB1dCgnV0FSTklORzogIEFueSBhZHZhbmNlZCBwaHAgcHJvY2Vzc2luZyBpbiB0aGUgb3JpZ2luYWwgZmlsZSB3aWxsIGJlIHJlbW92ZWQsIGFuZCBtYXkgcmVxdWlyZSBmaXhpbmcnKTsKICAgb3V0cHV0KCdUaGUgb3JpZ2luYWwgY29uZmlnIGZpbGUgY2FuIGJlIGZvdW5kIGluIGJhay5jb25maWcucGhwIGluIHRoZSBzaXRlIHJvb3QgZGlyZWN0b3J5Jyk7CiAgICRibiA9IGJhc2VuYW1lKCRjb25maWdfZmlsZSk7CiAgICRkbiA9IGRpcm5hbWUoJGNvbmZpZ19maWxlKTsKICAgcmVuYW1lKCRjb25maWdfZmlsZSwiJGRuL2Jhay57JGJufSIpOwoKICAgaWYoICRvbGRfY29uZmlnICYmICRkYmNvbmZpZyApIHsKICAgICAgJG5ld19jb25maWcgPSBhcnJheV9tZXJnZSgkb2xkX2NvbmZpZywkZGJjb25maWcpOwogICAgICB3cml0ZV9jb25maWdfcGhwKCRjb25maWdfZmlsZSwkbmV3X2NvbmZpZyk7CiAgIH0KfQoKLy8gNi4gIHNlY3VyaXR5Li4uCm5ld2xpbmUoKTsKb3V0cHV0KCc9PSBpbXByb3Zpbmcgc2VjdXJpdHkgPT09Jyk7CiRpdGVyID0gbmV3IFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKAogICAgbmV3IFxSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZGlyLCBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3I6OlNLSVBfRE9UUyksCiAgICBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6U0VMRl9GSVJTVCwKICAgIFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpDQVRDSF9HRVRfQ0hJTEQgLy8gSWdub3JlICJQZXJtaXNzaW9uIGRlbmllZCIKICAgICk7CiRzdHIgPSAnPCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+JzsKZm9yZWFjaCggJGl0ZXIgYXMgJHBhdGggPT4gJGRpciApIHsKICAgIGlmKCAhJGRpci0+aXNEaXIoKSApIGNvbnRpbnVlOwogICAgaWYoIGZpbGVfZXhpc3RzKCRwYXRoLicvaW5kZXgucGhwJykgfHwgZmlsZV9leGlzdHMoJHBhdGguJy9pbmRleC5odG1sJykgKSBjb250aW51ZTsKCiAgICBmaWxlX3B1dF9jb250ZW50cygkcGF0aC4nL2luZGV4Lmh0bWwnLCRzdHIpOwp9CgovLyA5ICAgY2xlYW51cApuZXdsaW5lKCk7Cm91dHB1dCgnPT0gY2xlYW5pbmcgdXAgPT09Jyk7CkB1bmxpbmsoJHNuYXBzaG90KTsKQHVubGluaygkc2NyaXB0KTsKQHVubGluaygndG1wL19fbXlzcWxkdW1wLnNxbCcpOwpAdW5saW5rKCd0bXAvLmNnc25hcHNob3QnKTsKQG1rZGlyKCd0bXAvY2FjaGUnLDA3NzcpOwpAbWtkaXIoJ3RtcC90ZW1wbGF0ZXNfYycsMDc3Nyk7CgovLyAxMC4gIERPTkUKbmV3bGluZSgpOwpvdXRwdXQoJz09IEZpbmlzaGVkID09PScpOwokb3V0ID0gPDw8RU9UClRoZSByZXN0b3JlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4gIFRoZSBkYXRhYmFzZSBhbmQgYWxsIGZpbGVzIGhhdmUgYmVuIHJlc3RvcmVkLgpZb3UgbWF5IG5lZWQgdG8gcmV2aWV3IHlvdXIgY29uZmlnLnBocCBmaWxlLCBhbmQgYWRqdXN0IHlvdXIgLmh0YWNjZXNzIGZpbGUgZm9yIHRoZSBuZXcgc2l0ZSBsb2NhdGlvbi4KQWxzbywgeW91IHNob3VsZCB1bmRlcnRha2UgZXh0ZW5zaXZlIHRlc3RpbmcuCgpUaGFuayB5b3UgZm9yIHVzaW5nIENHU25hcHNob3QuCkVPVDsKb3V0cHV0KCRvdXQpOwpleGl0Owo8P3BocAoKbmFtZXNwYWNlIENHU25hcHNob3RccGhhcjsKCmZ1bmN0aW9uIHRlc3RfZGJjb25maWcoJGRiY29uZmlnKQp7CiAgICBpZiggIWlzX2FycmF5KCRkYmNvbmZpZykgKSByZXR1cm4gRkFMU0U7CiAgICAka2V5cyA9IGFycmF5KCdkYm1zJywnZGJfaG9zdG5hbWUnLCdkYl91c2VybmFtZScsJ2RiX3Bhc3N3b3JkJywnZGJfbmFtZScpOwogICAgJGtleXMyID0gYXJyYXlfa2V5cygkZGJjb25maWcpOwogICAgZm9yZWFjaCggJGtleXMgYXMgJGtleSApIHsKICAgICAgICBpZiggIWluX2FycmF5KCRrZXksJGtleXMyKSApIHJldHVybiBGQUxTRTsKICAgIH0KICAgIHJldHVybiBUUlVFOwp9CgpmdW5jdGlvbiB0ZXN0X2RiX2Nvbm5lY3QoJGRiY29uZmlnKQp7CiAgICBpZiggIXRlc3RfZGJjb25maWcoJGRiY29uZmlnKSApIHJldHVybiBGQUxTRTsKCiAgICAkb3V0ID0gbnVsbDsKICAgIHN3aXRjaCggJGRiY29uZmlnWydkYm1zJ10gKSB7CiAgICBjYXNlICdteXNxbCc6CiAgICAgICAgaWYoICFmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSApIHJldHVybiBGQUxTRTsKICAgICAgICAkb3V0ID0gbXlzcWxfY29ubmVjdCgkZGJjb25maWdbJ2RiX2hvc3RuYW1lJ10sJGRiY29uZmlnWydkYl91c2VybmFtZSddLCRkYmNvbmZpZ1snZGJfcGFzc3dvcmQnXSwkZGJjb25maWdbJ2RiX25hbWUnXSk7CiAgICAgICAgaWYoICEkb3V0ICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgJ215c3FsaSc6CiAgICAgICAgaWYoICFmdW5jdGlvbl9leGlzdHMoJ215c3FsaV9jb25uZWN0JykgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgJG91dCA9IG15c3FsaV9jb25uZWN0KCRkYmNvbmZpZ1snZGJfaG9zdG5hbWUnXSwkZGJjb25maWdbJ2RiX3VzZXJuYW1lJ10sJGRiY29uZmlnWydkYl9wYXNzd29yZCddLCRkYmNvbmZpZ1snZGJfbmFtZSddKTsKICAgICAgICBpZiggISRvdXQgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIHRlc3RfZGJfZW1wdHkoJGhhbmRsZSwkZGJjb25maWcpCnsKICAgIGlmKCAhdGVzdF9kYmNvbmZpZygkZGJjb25maWcpICkgcmV0dXJuIEZBTFNFOwoKICAgICRvdXQgPSBudWxsOwogICAgJHNxbCA9ICdTSE9XIFRBQkxFUyc7CiAgICBzd2l0Y2goICRkYmNvbmZpZ1snZGJtcyddICkgewogICAgY2FzZSAnbXlzcWwnOgogICAgICAgIGlmKCAoJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkaGFuZGxlLCRzcWwpKSApIHsKICAgICAgICAgICAgJG50YWJsZXMgPSBteXNxbGlfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgICAgIGlmKCAkbnRhYmxlcyA+IDAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRkFMU0U7CgogICAgY2FzZSAnbXlzcWxpJzoKICAgICAgICBpZiggKCRyZXN1bHQgPSBteXNxbGlfcXVlcnkoJGhhbmRsZSwkc3FsKSkgKSB7CiAgICAgICAgICAgICRudGFibGVzID0gbXlzcWxpX251bV9yb3dzKCRyZXN1bHQpOwogICAgICAgICAgICBpZiggJG50YWJsZXMgPiAwICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQp9CgpmdW5jdGlvbiBkYl9pbXBvcnQoJGRiY29uZmlnLCRkYmZpbGUpCnsKICAgIC8vIHRoaXMgdXNlcyBzaGVsbCBjb21tYW5kcy4KICAgICRjb21tYW5kPSJteXNxbCAtaCB7JGRiY29uZmlnWydkYl9ob3N0bmFtZSddfSAtdSB7JGRiY29uZmlnWydkYl91c2VybmFtZSddfSAtcCB7JGRiY29uZmlnWydkYl9wYXNzd29yZCddfSB7JGRiY29uZmlnWydkYl9uYW1lJ119IDwgeyRkYmZpbGV9IjsKICAgIGV4ZWMoJGNvbW1hbmQsJG91dHB1dD1hcnJheSgpLCR3b3JrZWQpOwogICAgaWYoICR3b3JrZWQgPT0gMCApIHJldHVybiBUUlVFOwogICAgcHJpbnRfcigkb3V0cHV0KTsgZGllKCk7IC8vIGRlYnVnLgogICAgcmV0dXJuIEZBTFNFOwp9Cj8+PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90XHBoYXI7CgppbmNsdWRlX29uY2UoX19ESVJfXy4nL2NsYXNzLnNpbXBsZV90ZXN0LnBocCcpOwoKY2xhc3MgY29tcGF0aWJpbGl0eV90ZXN0ZXIKewogICAgY29uc3QgTUlOUEhQID0gJzUuNC4xMSc7CiAgICBjb25zdCBURVNUX01JTlBIUFZFUiA9ICdtaW5waHB2ZXInOwogICAgY29uc3QgVEVTVF9ESVJXUklUQUJMRSA9ICdkaXJ3cml0YWJsZSc7CiAgICBjb25zdCBURVNUX0RJUkVNUFRZID0gJ2RpcmVtcHR5JzsKICAgIGNvbnN0IFRFU1RfVE1QRklMRSA9ICdmdW5jX3RtcGZpbGUnOwogICAgY29uc3QgVEVTVF9URU1QTkFNID0gJ2Z1bmNfdGVtcG5hbSc7CiAgICBjb25zdCBURVNUX0daT1BFTiA9ICdmdW5jX2d6b3Blbic7CiAgICBjb25zdCBURVNUX0VYVF9NVUxUSUJZVEUgPSAnZXh0X211bHRpYnl0ZSc7CiAgICBjb25zdCBURVNUX0VYVF9GSU5GTyA9ICdleHRfZmluZm8nOwogICAgY29uc3QgVEVTVF9FWFRfTVlTUUwgPSAnZXh0X215c3FsJzsKICAgIGNvbnN0IFRFU1RfTUQ1ID0gJ2Z1bmNfbWQ1JzsKICAgIGNvbnN0IFRFU1RfU0hBMSA9ICdmdW5jX3NoYTEnOwogICAgY29uc3QgVEVTVF9KU09OID0gJ2Z1bmNfanNvbic7CiAgICBjb25zdCBURVNUX09QRU5CQVNFRElSID0gJ29wZW5iYXNlZGlyJzsKICAgIGNvbnN0IFRFU1RfU0VTU0lPTkNPT0tJRVMgPSAnc2Vzc2lvbi51c2VfY29va2llcyc7CiAgICBjb25zdCBURVNUX1NFU1NJT05TQVZFID0gJ3Nlc3Npb24uc2F2ZXBhdGgnOwogICAgY29uc3QgVEVTVF9TQUZFTU9ERSA9ICdzYWZlX21vZGUnOwogICAgY29uc3QgVEVTVF9GSUxFVVBMT0FEUyA9ICdmaWxlX3VwbG9hZHMnOwogICAgY29uc3QgVEVTVF9FWFRfWE1MID0gJ2V4dF94bWwnOwogICAgY29uc3QgVEVTVF9GSUxFR0VUID0gJ2Z1bmNfZmlsZWdldGNvbnRlbnRzJzsKICAgIGNvbnN0IFRFU1RfRklMRVBVVCA9ICdmdW5jX2ZpbGVwdXRjb250ZW50cyc7CgogICAgcHJpdmF0ZSAkX3Rlc3RzID0gYXJyYXkoKTsKICAgIHByaXZhdGUgJF9yZXN1bHRzID0gYXJyYXkoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhcmFtcyA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gYnVpbGQgbGlzdCBvZiB0ZXN0cyBiYXNlZCBvbiBwYXJhbXMgaW4gdGhlIGNvbnN0cnVjb3RyCiAgICAgICAgJGRpciA9IGlzc2V0KCRwYXJhbXNbJ2RpciddKSA/ICRwYXJhbXNbJ2RpciddIDogZ2V0Y3dkKCk7CiAgICAgICAgJGV4Y2x1ZGVzID0gaXNzZXQoJHBhcmFtc1snZXhjbHVkZXMnXSkgPyAkcGFyYW1zWydleGNsdWRlcyddIDogbnVsbDsKCiAgICAgICAgLy8gY2hlY2sgZm9yIHdyaXRlIGFjY2VzcwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBtaW52ZXJzaW9uX3Rlc3Qoc2VsZjo6VEVTVF9NSU5QSFBWRVIsc2VsZjo6TUlOUEhQLHBocHZlcnNpb24oKSk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGRpcl93cml0YWJsZV90ZXN0KHNlbGY6OlRFU1RfRElSV1JJVEFCTEUsJGRpcik7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGRpcl9lbXB0eV90ZXN0KHNlbGY6OlRFU1RfRElSRU1QVFksJGRpciwkZXhjbHVkZXMpOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1RNUEZJTEUsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICRmaCA9IHRtcGZpbGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiAoJGZoID09PSBGQUxTRSkgPyBGQUxTRSA6IFRSVUU7CiAgICAgICAgICAgIH0pOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfVEVNUE5BTSwndGVtcG5hbScpOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX0daT1BFTixmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygnZ3pvcGVuJykgfHwgZnVuY3Rpb25fZXhpc3RzKCdnem9wZW42NCcpOwogICAgICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBleHRlbnNpb25fdGVzdChzZWxmOjpURVNUX0VYVF9NVUxUSUJZVEUsJ21ic3RyaW5nJyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX0VYVF9GSU5GTywnZmluZm9fb3BlbicpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfRVhUX01ZU1FMLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB0ZXN0X2V4dGVuc2lvbl9sb2FkZWQoJ215c3FsaScpIHx8IHRlc3RfZXh0ZW5zaW9uX2xvYWRlZCgnbXlzcWwnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX01ENSwnbWQ1Jyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX1NIQTEsJ3NoYTEnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfSlNPTiwnanNvbl9lbmNvZGUnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX09QRU5CQVNFRElSLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByZXR1cm4gKGluaV9nZXQoJ29wZW5fYmFzZWRpcicpID09ICcnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgc2ltcGxlX3Rlc3Qoc2VsZjo6VEVTVF9TRVNTSU9OQ09PS0lFUyxmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcmV0dXJuIChpbmlfZ2V0KCdzZXNzaW9uLnVzZV9jb29raWVzJykpOwogICAgICAgICAgICB9KTsKICAgICAgICBpZiggaW5pX2dldCgnc2Vzc2lvbi5zYXZlX2hhbmRsZXInKSA9PSAnZmlsZXMnICkgewogICAgICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1NFU1NJT05TQVZFLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJHBhdGggPSBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOwogICAgICAgICAgICAgICAgICAgIGlmKCAoJHBvcyA9IHN0cnBvcygkcGF0aCwnOycpKSAhPT0gRkFMU0UgKSAkcGF0aCA9IHN1YnN0cigkcGF0aCwkcG9zKzEpOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfZGlyKCR0bXApICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfd3JpdGFibGUoJHRtcCkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8vIHRvZG86IHRlc3QgbWVtb3J5IGxpbWl0CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZmFsc2VfdGVzdChzZWxmOjpURVNUX1NBRkVNT0RFLGluaV9nZXQoJ3NhZmVfbW9kZScpKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyB0cnVlX3Rlc3Qoc2VsZjo6VEVTVF9GSUxFVVBMT0FEUyxpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZXh0ZW5zaW9uX3Rlc3Qoc2VsZjo6VEVTVF9FWFRfWE1MLCd4bWwnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRklMRUdFVCwnZmlsZV9nZXRfY29udGVudHMnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRklMRVBVVCwnZmlsZV9wdXRfY29udGVudHMnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm9ybXNnKCRjb2RlKQogICAgewogICAgICAgIHN3aXRjaCggJGNvZGUgKSB7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX01JTlBIUFZFUjoKICAgICAgICAgICAgcmV0dXJuICdUaGUgY29uZmlndXJlZCBQSFAgdmVyc2lvbiBpcyB0b28gbG93LiAgTWluaW11bSByZXF1aXJlZCBpcyAnLnNlbGY6Ok1JTlBIUDsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRElSV1JJVEFCTEU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIFBIUCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGlzIGRpcmVjdG9yeS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9ESVJFTVBUWToKICAgICAgICAgICAgcmV0dXJuICJUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IHNwZWNpZmllZCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgZW1wdHkgZXhjZXB0IGZvciBDR1NuYXBzaG90IGZpbGVzIGFuZCB0aGlzIHNjcmlwdFxuCiAgIEhpbnQ6ICBDaGVjayBmb3IgaGlkZGVuIGZpbGVzLiI7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1RNUEZJTEU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIHRtcGZpbGUoKSBtZXRob2QgZG9lcyBub3QgYXBwZWFyIHRvIG9wZXJhdGUgcHJvcGVybHknOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9URU1QTkFNOgogICAgICAgICAgICByZXR1cm4gJ1RoZSB0ZW1wbmFtKCkgZnVuY3Rpb24gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0daT1BFTjoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZ3pvcGVuL2d6b3BlbjY0IGZ1bmN0aW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfTVVMVElCWVRFOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBtdWx0aWJ5dGUgZXh0ZW5zaW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfRklORk86CiAgICAgICAgICAgIHJldHVybiAnVGhlIGZpbGVpbmZvIGV4dGVuc2lvbnMgZG8gbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRVhUX01ZU1FMOgogICAgICAgICAgICByZXR1cm4gJ1dlIGNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgZGF0YWJhc2UgZHJpdmVyLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX01ENToKICAgICAgICAgICAgcmV0dXJuICdUaGUgbWQ1IGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TSEExOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBzaGExIGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9KU09OOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBqc29uIGZ1bmN0aW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX09QRU5CQVNFRElSOgogICAgICAgICAgICByZXR1cm4gJ09wZW4gYmFzZWRpciBpcyBlbmFibGVkLi4uIHRoaXMgaXMgcHJvYmxlbWF0aWMnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TRVNTSU9OQ09PS0lFUzoKICAgICAgICAgICAgcmV0dXJuICdTZXNzaW9uIGNvb2tpZXMgYXJlIG5vdCBlbmFibGVkLi4uIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1NFU1NJT05TQVZFOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBzZXNzaW9uIHNhdmUgcGF0aCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd3JpdGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfU0FGRU1PREU6CiAgICAgICAgICAgIHJldHVybiAnU2FmZSBtb2RlIGlzIGVuYWJsZWQuLi4gd2UgY2Fubm90IGNvbnRpbnVlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRklMRVVQTE9BRFM6CiAgICAgICAgICAgIHJldHVybiAnRmlsZSB1cGxvYWRzIGFyZSBub3QgZW5hYmxlZC4gIFRoaXMgaXMgcHJvYmxlbWF0aWMnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfWE1MOgogICAgICAgICAgICByZXR1cm4gJ1hNTCBFeHRlbnNpb25zIGFyZSBub3QgZW5hYm9lZC4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9GSUxFR0VUOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBmaWxlX2dldF9jb250ZW50cyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRklMRVBVVDoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZmlsZV9wdXRfY29udGVudHMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4nOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnVW5rbm93biBFcnJvcjogJy4kY29kZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9mYWlsZWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc3VsdHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3QoKQogICAgewogICAgICAgICRmYWlsZWQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICR0aGlzLT5fdGVzdHMgYXMgJHRlc3QgKSB7CiAgICAgICAgICAgICRyZXMgPSAkdGVzdC0+ZXhlY3V0ZSgpOwogICAgICAgICAgICBpZiggISRyZXMgKSB7CiAgICAgICAgICAgICAgICAkZmFpbGVkW10gPSAkdGVzdC0+Z2V0X2xhYmVsKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIGNvdW50KCRmYWlsZWQpICkgewogICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdHMgPSAkZmFpbGVkOwogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBUUlVFOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwo8P3BocAoKbmFtZXNwYWNlIENHU25hcHNob3RccGhhcjsKCmZ1bmN0aW9uIHRlc3RfZGJjb25maWcoJGRiY29uZmlnKQp7CiAgICBpZiggIWlzX2FycmF5KCRkYmNvbmZpZykgKSByZXR1cm4gRkFMU0U7CiAgICAka2V5cyA9IGFycmF5KCdkYm1zJywnZGJfaG9zdG5hbWUnLCdkYl91c2VybmFtZScsJ2RiX3Bhc3N3b3JkJywnZGJfbmFtZScpOwogICAgJGtleXMyID0gYXJyYXlfa2V5cygkZGJjb25maWcpOwogICAgZm9yZWFjaCggJGtleXMgYXMgJGtleSApIHsKICAgICAgICBpZiggIWluX2FycmF5KCRrZXksJGtleXMyKSApIHJldHVybiBGQUxTRTsKICAgIH0KICAgIHJldHVybiBUUlVFOwp9CgpmdW5jdGlvbiB0ZXN0X2RiX2Nvbm5lY3QoJGRiY29uZmlnKQp7CiAgICBpZiggIXRlc3RfZGJjb25maWcoJGRiY29uZmlnKSApIHJldHVybiBGQUxTRTsKCiAgICAkb3V0ID0gbnVsbDsKICAgIHN3aXRjaCggJGRiY29uZmlnWydkYm1zJ10gKSB7CiAgICBjYXNlICdteXNxbCc6CiAgICAgICAgaWYoICFmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSApIHJldHVybiBGQUxTRTsKICAgICAgICAkb3V0ID0gbXlzcWxfY29ubmVjdCgkZGJjb25maWdbJ2RiX2hvc3RuYW1lJ10sJGRiY29uZmlnWydkYl91c2VybmFtZSddLCRkYmNvbmZpZ1snZGJfcGFzc3dvcmQnXSwkZGJjb25maWdbJ2RiX25hbWUnXSk7CiAgICAgICAgaWYoICEkb3V0ICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgJ215c3FsaSc6CiAgICAgICAgaWYoICFmdW5jdGlvbl9leGlzdHMoJ215c3FsaV9jb25uZWN0JykgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgJG91dCA9IG15c3FsaV9jb25uZWN0KCRkYmNvbmZpZ1snZGJfaG9zdG5hbWUnXSwkZGJjb25maWdbJ2RiX3VzZXJuYW1lJ10sJGRiY29uZmlnWydkYl9wYXNzd29yZCddLCRkYmNvbmZpZ1snZGJfbmFtZSddKTsKICAgICAgICBpZiggISRvdXQgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIHRlc3RfZGJfZW1wdHkoJGhhbmRsZSwkZGJjb25maWcpCnsKICAgIGlmKCAhdGVzdF9kYmNvbmZpZygkZGJjb25maWcpICkgcmV0dXJuIEZBTFNFOwoKICAgICRvdXQgPSBudWxsOwogICAgJHNxbCA9ICdTSE9XIFRBQkxFUyc7CiAgICBzd2l0Y2goICRkYmNvbmZpZ1snZGJtcyddICkgewogICAgY2FzZSAnbXlzcWwnOgogICAgICAgIGlmKCAoJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkaGFuZGxlLCRzcWwpKSApIHsKICAgICAgICAgICAgJG50YWJsZXMgPSBteXNxbGlfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgICAgIGlmKCAkbnRhYmxlcyA+IDAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRkFMU0U7CgogICAgY2FzZSAnbXlzcWxpJzoKICAgICAgICBpZiggKCRyZXN1bHQgPSBteXNxbGlfcXVlcnkoJGhhbmRsZSwkc3FsKSkgKSB7CiAgICAgICAgICAgICRudGFibGVzID0gbXlzcWxpX251bV9yb3dzKCRyZXN1bHQpOwogICAgICAgICAgICBpZiggJG50YWJsZXMgPiAwICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQp9CgpmdW5jdGlvbiBkYl9pbXBvcnQoJGRiY29uZmlnLCRkYmZpbGUpCnsKICAgIC8vIHRoaXMgdXNlcyBzaGVsbCBjb21tYW5kcy4KICAgICRjb21tYW5kPSJteXNxbCAtLWhvc3Q9eyRkYmNvbmZpZ1snZGJfaG9zdG5hbWUnXX0gLS11c2VyPXskZGJjb25maWdbJ2RiX3VzZXJuYW1lJ119IC0tcGFzc3dvcmQ9eyRkYmNvbmZpZ1snZGJfcGFzc3dvcmQnXX0geyRkYmNvbmZpZ1snZGJfbmFtZSddfSA8IHskZGJmaWxlfSI7CiAgICBleGVjKCRjb21tYW5kLCRvdXRwdXQ9YXJyYXkoKSwkd29ya2VkKTsKICAgIGlmKCAkd29ya2VkID09IDAgKSByZXR1cm4gVFJVRTsKICAgIHByaW50X3IoJG91dHB1dCk7IGRpZSgpOyAvLyBkZWJ1Zy4KICAgIHJldHVybiBGQUxTRTsKfQo/Pjw/cGhwCgppbmNsdWRlX29uY2UoX19ESVJfXy4nL2NsYXNzLnNlY3VyZV9pbmlfZmlsZS5waHAnKTsKCmZ1bmN0aW9uIGVuZHN3aXRoKCAkc3RyLCAkc3ViICkKewoJcmV0dXJuICggc3Vic3RyKCAkc3RyLCBzdHJsZW4oICRzdHIgKSAtIHN0cmxlbiggJHN1YiApICkgPT0gJHN1YiApOwp9CgpmdW5jdGlvbiBzdGFydHN3aXRoKCAkc3RyLCAkc3ViICkKewoJcmV0dXJuICggc3Vic3RyKCAkc3RyLCAwLCBzdHJsZW4oICRzdWIgKSApID09ICRzdWIgKTsKfQoKZnVuY3Rpb24gY2xzKCkKewogICAgcHJpbnQgY2hyKDI3KSAuICJbMkoiIC4gY2hyKDI3KSAuICJbO0giOwp9CgpmdW5jdGlvbiBvdXRwdXQoJHN0ciwkbmV3bGluZSA9IFRSVUUpCnsKICAgICRzdHIgPSB0cmltKCRzdHIpOwogICAgaWYoICEkc3RyICkgcmV0dXJuOwogICAgaWYoICRuZXdsaW5lICkgewogICAgICAgIGlmKCAhZW5kc3dpdGgoJHN0ciwiXG4iKSApICRzdHIgLj0gIlxuIjsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmKCAhZW5kc3dpdGgoJHN0ciwnICcpICkgJHN0ciAuPSAnICc7CiAgICB9CiAgICBlY2hvICRzdHI7Cn0KCmZ1bmN0aW9uIGVycm9yKCRtc2csJHByZWZpeCA9IFRSVUUsJG5ld2xpbmUgPSBUUlVFKQp7CiAgICAkbXNnID0gKHN0cmluZykkbXNnOwogICAgaWYoICEkbXNnICkgcmV0dXJuOwoKICAgIGlmKCAkcHJlZml4ICkgJG1zZyA9ICJFUlJPUjogIi4kbXNnOwogICAgaWYoICRuZXdsaW5lICYmICFlbmRzd2l0aCgkbXNnLCJcbiIpICkgJG1zZyAuPSAiXG4iOwogICAgZndyaXRlKFNUREVSUiwkbXNnKTsKfQoKZnVuY3Rpb24gbmV3bGluZSgpCnsKICAgIGVjaG8gIlxuIjsKfQoKZnVuY3Rpb24gYXNrX2Jvb2woJHByb21wdCwkYWNjZXB0ID0gLTEsJGF1dG9wcm9tcHQgPSBUUlVFKQp7CiAgICB3aGlsZSggMSApIHsKICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgaWYoICRhdXRvcHJvbXB0ICkgJHByb21wdCAuPSAnIFtZL25dOic7CiAgICAgICAgb3V0cHV0KCRwcm9tcHQsRkFMU0UpOwogICAgICAgICRpbiA9IGZnZXRzKFNURElOKTsKICAgICAgICAkaW4gPSB0cmltKCRpbik7CiAgICAgICAgaWYoICEkaW4gKSB7CiAgICAgICAgICAgIGlmKCAkYWNjZXB0ID09IEZBTFNFICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICBpZiggJGFjY2VwdCA9PSBUUlVFICkgcmV0dXJuIFRSVUU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiggJGluID09ICdleGl0JyB8fCAkaW4gPT0gJ3F1aXQnICkgZXhpdDsKICAgICAgICAgICAgJGluID0gc3RydG9sb3dlcigkaW4pOwogICAgICAgICAgICBpZiggJGluID09ICcxJyB8fCAkaW4gPT0gJ3knICkgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICB9Cn0KCmZ1bmN0aW9uIGFza19vcHRpb24oJHByb21wdCwkb3B0aW9ucykKewogICAgd2hpbGUoIDEgKSB7CiAgICAgICAgbmV3bGluZSgpOwogICAgICAgIG91dHB1dCgkcHJvbXB0LEZBTFNFKTsKICAgICAgICAkaW4gPSB0cmltKGZnZXRzKFNURElOKSk7CiAgICAgICAgaWYoICRpbiAmJiBpbl9hcnJheSgkaW4sYXJyYXkoJ3EnLCdxdWl0JywnZXhpdCcpKSApIGV4aXQ7CiAgICAgICAgaWYoICRpbiAmJiBpbl9hcnJheSgkaW4sJG9wdGlvbnMpICkgcmV0dXJuICRpbjsKICAgIH0KICAgIGVycm9yKCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBvcHRpb24nKTsKfQoKZnVuY3Rpb24gYXNrX3N0cmluZ19yZXF1aXJlZCgkcHJvbXB0LCRlcnJzdHIgPSBudWxsKQp7CiAgICB3aGlsZSggMSApIHsKICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgb3V0cHV0KCRwcm9tcHQsRkFMU0UpOwogICAgICAgICRzdHIgPSBmZ2V0cyhTVERJTik7CiAgICAgICAgJHN0ciA9IHRyaW0oJHN0cik7CiAgICAgICAgaWYoICEkc3RyICkgewogICAgICAgICAgICBpZiggISRlcnJvcnN0ciApICRlcnJvcnN0ciA9ICdJbnZhbGlkIFJlc3BvbnNlJzsKICAgICAgICAgICAgZXJyb3IoJGVycm9yc3RyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiggJHN0ciA9PSAncScgfHwgJHN0ciA9PSAnZXhpdCcgfHwgJHN0ciA9PSAncXVpdCcgKSBleGl0OwogICAgICAgICAgICByZXR1cm4gJHN0cjsKICAgICAgICB9CiAgICB9Cn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8KCmZ1bmN0aW9uIGlzX2Nnc25hcHNob3QoJGZpbGVuYW1lKQp7CiAgICAkZmlsZW5hbWUgPSB0cmltKCRmaWxlbmFtZSk7CiAgICBpZiggISRmaWxlbmFtZSApIHJldHVybiBGQUxTRTsKCiAgICAkbG93ZXIgPSBzdHJ0b2xvd2VyKCRmaWxlbmFtZSk7CiAgICBpZiggIWVuZHN3aXRoKCRmaWxlbmFtZSwnLnppcCcpICkgUkVUVVJOIEZBTFNFOwoKICAgICRhcmNoID0gbmV3IFxaaXBBcmNoaXZlOwogICAgaWYoICgkcmVzID0gJGFyY2gtPm9wZW4oJGZpbGVuYW1lKSkgIT09IFRSVUUgKSB7CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgICRpbmlfdGV4dCA9ICRhcmNoLT5nZXRGcm9tTmFtZSgndG1wLy5jZ3NuYXBzaG90Jyk7CiAgICBpZiggISRpbmlfdGV4dCApIHJldHVybiBGQUxTRTsKCiAgICAkZHVtcGZpbGUgPSAkYXJjaC0+Z2V0RnJvbU5hbWUoJ3RtcC9fX215c3FsZHVtcC5zcWwnKTsKICAgIGlmKCAhJGR1bXBmaWxlICkgcmV0dXJuIEZBTFNFOwoKICAgIHRyeSB7CiAgICAgICAgJGluaSA9IG5ldyBcQ0dTbmFwc2hvdFxwaGFyXHNlY3VyZV9pbmlfZmlsZSgpOwogICAgICAgICRpbmktPnBhcnNlKCRpbmlfdGV4dCxmYWxzZSk7CiAgICB9CiAgICBjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsKICAgICAgICBkaWUoJGUtPkdldE1lc3NhZ2UoKSk7CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgcmV0dXJuIFRSVUU7Cn0KCmZ1bmN0aW9uIGNvcHlfYXJjaGZpbGVfdG9fdG1wKFxaaXBBcmNoaXZlICRhcmNoLCRuYW1lKQp7CiAgICAkbmFtZSA9IHRyaW0oJG5hbWUpOwogICAgaWYoICEkbmFtZSApIHJldHVybjsKCiAgICAkZGlyID0gc3lzX2dldF90ZW1wX2RpcigpOwogICAgaWYoICEkZGlyICkgewogICAgICAgIGVycm9yKCdDb3VsZCBub3QgZ2V0IHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5Li4uIGV4aXRpbmcnKTsKICAgICAgICBleGl0KDEpOwogICAgfQoKICAgICRmbiA9IHRlbXBuYW0oJGRpciwnY2dzJyk7CiAgICAkZGF0YSA9ICRhcmNoLT5nZXRGcm9tTmFtZSgkbmFtZSk7CiAgICBpZiggJGRhdGEgKSB7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJGZuLCRkYXRhKTsKICAgICAgICByZXR1cm4gJGZuOwogICAgfQp9CgpmdW5jdGlvbiB3cml0ZV9jb25maWdfcGhwKCRmaWxlbmFtZSwkZGF0YSkKewogICAgJG5vdyA9IHN0cmZ0aW1lKCcleCcpOwogICAgJG91dCA9ICI8P3BocFxuLy8gR2VuZXJhdGVkIGJ5IENHU25hcHNob3QtUmVzdG9yZSBvbiB7JG5vd31cbiI7CiAgICAkZm10ID0gIlwkY29uZmlnWyclcyddID0gJyVzJztcbiI7CiAgICBmb3JlYWNoKCAkZGF0YSBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgJG91dCAuPSBzcHJpbnRmKCRmbXQsJGtleSwkdmFsKTsKICAgIH0KICAgICRvdXQgLj0gIlxuIjsKICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlbmFtZSwkb3V0KTsKfTw/cGhwCgpuYW1lc3BhY2UgQ0dTbmFwc2hvdFxwaGFyOwoKY2xhc3Mgc2VjdXJlX2luaV9maWxlCnsKICAgIHByaXZhdGUgJF9maWxlbmFtZTsKICAgIHByaXZhdGUgJF9maXJzdF9zZWN0aW9uID0gVFJVRTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9maWxlbmFtZSgkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9maWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9zb3J0X2RhdGEoJGRhdGEpCiAgICB7CiAgICAgICAgJG91dCA9ICRkYXRhOwogICAgICAgIGZvcmVhY2goICRvdXQgYXMgJGtleSA9PiAmJHZhbCApIHsKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR2YWwpICkgJHZhbCA9ICR0aGlzLT5fc29ydF9kYXRhKCR2YWwpOwogICAgICAgIH0KICAgICAgICBrc29ydCgkb3V0KTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZmluYWwgZnVuY3Rpb24gX2NhbGNfY2hlY2tzdW0oJGRhdGEpCiAgICB7CiAgICAgICAgJHNvcnRlZCA9ICR0aGlzLT5fc29ydF9kYXRhKCRkYXRhKTsKICAgICAgICAkc2FsdCA9ICdlcndlcmlkZmFzZHMgbmRmYXNkZmFzaGRmYXNkOTM0OTgqKCBkaWZhb3VkZmFzZGZhYWRmIHNkZjBhZGZhMTIzKSc7IC8vIGp1c3Qgc29tZSByYW5kb20gY2hhcmFjdGVycwogICAgICAgICRzaWcgPSBtZDUoJHNhbHQuc2VyaWFsaXplKCRzb3J0ZWQpKTsKICAgICAgICByZXR1cm4gJHNpZzsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2luaV9zZWN0aW9uKCRzZWN0aW9uKQogICAgewogICAgICAgICRvdXQgPSBudWxsOwogICAgICAgIGlmKCAhJHRoaXMtPl9maXJzdF9zZWN0aW9uICkgewogICAgICAgICAgICAkdGhpcy0+X2ZpcnN0X3NlY3Rpb24gPSBGQUxTRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRvdXQgLj0gIlxuIjsKICAgICAgICB9CgogICAgICAgICRvdXQgLj0gJ1snLnRyaW0oJHNlY3Rpb24pLiJdXG4iOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX3ZhbCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgLy8gQHRvZG8gY2hlY2sgZm9yIGludmFsaWQgY2hhcnMgaW4gdGhlIGtleSBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICAgICAgJG5rZXkgPSB0cmltKCRrZXkpOwogICAgICAgICRudmFsID0gdHJpbSgkdmFsKTsKICAgICAgICBpZiggISRua2V5ICkgcmV0dXJuOwogICAgICAgICR0eXBlID0gZ2V0dHlwZSgkdmFsKTsKICAgICAgICBpZiggJHR5cGUgPT0gJ29iamVjdCcgKSB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdPYmplY3RzIGNhbm5vdCBiZSBzdG9yZWQnKTsKCiAgICAgICAgJGZuZCA9IDA7CiAgICAgICAgJGJhZGNoYXJzID0gYXJyYXkoIlxuIiwiXHIiLCI7IiwiJyIsJyInKTsKICAgICAgICBmb3JlYWNoKCAkYmFkY2hhcnMgYXMgJGNoICkgewogICAgICAgICAgICBpZiggc3RycG9zKCRudmFsLCRjaCkgIT09IEZBTFNFICkgewogICAgICAgICAgICAgICAgJGZuZCA9IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggJGZuZCApIHsKICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGJhZCBjaGFyYWN0cnMuIGdvdHRhIGVzY2FwZSB0aGUgZG91YmxlIHF1b3RlcwogICAgICAgICAgICAkbnZhbCA9IHN0cl9yZXBsYWNlKCciJywnXCInLCRudmFsKTsKICAgICAgICB9CiAgICAgICAgJG52YWwgPSAiJyIuJHR5cGUuJ3w6fCcuJG52YWwuIiciOwogICAgICAgICRvdXQgLj0gc3ByaW50ZigiJXMgPSAlc1xuIiwka2V5LCRudmFsKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2ZpbGVfaGVhZGVyKCRjaGVja3N1bSkKICAgIHsKICAgICAgICAkb3V0ID0gJzs8P3BocCBkaWUoKTsgLyogU0lHPScuJGNoZWNrc3VtLicgKi8gPz4nLiJcbiI7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9pbmlfYXJyYXkoJGFyciwkc2VjdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgJHNlY3Rpb24gPSB0cmltKCRzZWN0aW9uKTsKICAgICAgICAkaXNfYXNzb2MgPSAoYXJyYXlfa2V5cygkYXJyKSAhPT0gcmFuZ2UoMCwgY291bnQoJGFycikgLSAxKSk7CgogICAgICAgIGlmKCAkaXNfYXNzb2MgKSB7CiAgICAgICAgICAgIC8vIHBhc3Mgb25lLCBub3JtYWwgdmFsdWVzCiAgICAgICAgICAgIGZvcmVhY2goICRhcnIgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdmFsKSApICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfdmFsKCRrZXksJHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICRvdXQgKSB7CiAgICAgICAgICAgICAgICBpZiggISRzZWN0aW9uICkgJHNlY3Rpb24gPSAnbWFpbic7CiAgICAgICAgICAgICAgICAkb3V0ID0gJHRoaXMtPl93cml0ZV9pbmlfc2VjdGlvbigkc2VjdGlvbikgLiAkb3V0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBwYXNzIHR3bywgbmVzdGVkIGFycmF5cwogICAgICAgICAgICBmb3JlYWNoKCAkYXJyIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHZhbCkgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGlmKCBhcnJheV9rZXlzKCR2YWwpICE9PSByYW5nZSgwLCBjb3VudCgkdmFsKSAtIDEpICkgewogICAgICAgICAgICAgICAgICAgIC8vIGFzc29jaWF0aXZlIGNoaWxkIGFycmF5CiAgICAgICAgICAgICAgICAgICAgJHRtcCA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgaWYoICRzZWN0aW9uICkgewogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gJHNlY3Rpb24uIiA6ICRrZXkiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICRrZXk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfYXJyYXkoJHZhbCwkdG1wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBjaGlsZCBhcnJheQogICAgICAgICAgICAgICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfYXJyYXkoJHZhbCwka2V5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYoICEkc2VjdGlvbiApICRzZWN0aW9uID0gJ21haW4nOwogICAgICAgICAgICBmb3IoICRpID0gMCwgJG4gPSBjb3VudCgkYXJyKTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRvdXQgLj0gJHRoaXMtPl93cml0ZV9pbmlfdmFsKCRzZWN0aW9uLidbXScsJGFyclskaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZSgkZGF0YSkKICAgIHsKICAgICAgICAkY2tzdW0gPSAkdGhpcy0+X2NhbGNfY2hlY2tzdW0oJGRhdGEpOwogICAgICAgICRvdXQgPSAkdGhpcy0+X3dyaXRlX2ZpbGVfaGVhZGVyKCRja3N1bSk7CiAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkZGF0YSk7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRkYXRhLCRmaWxlbmFtZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYoICEkZmlsZW5hbWUgKSAkZmlsZW5hbWUgPSAkdGhpcy0+X2ZpbGVuYW1lOwogICAgICAgIGlmKCAhJGZpbGVuYW1lICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdObyBmaWxlbmFtZSBzcGVjaWZpZWQgdG8gaW5zdGFuY2Ugb2YgJy5fX0NMQVNTX18pOwogICAgICAgICRkaXIgPSBkaXJuYW1lKCR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIGlmKCAoaXNfZmlsZSgkZmlsZW5hbWUpICYmICFpc193cml0YWJsZSgkdGhpcy0+X2ZpbGVuYW1lKSkgfHwgIWlzX3dyaXRhYmxlKCRkaXIpICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gIi4kdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICB9CgogICAgICAgICRmaCA9IGZvcGVuKCRmaWxlbmFtZSwndycpOwogICAgICAgIGZ3cml0ZSgkZmgsJHRoaXMtPmdlbmVyYXRlKCkpOwogICAgICAgIGZjbG9zZSgkZmgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCRkYXRhKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+d3JpdGUoJGRhdGEpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfY29udmVydF92YWx1ZXMoJGRhdGEpCiAgICB7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGRhdGEgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHZhbCkgKSB7CiAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gJHRoaXMtPl9jb252ZXJ0X3ZhbHVlcygkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGxpc3QoJHR5cGUsJHZhbCkgPSBleHBsb2RlKCd8OnwnLCR2YWwsMik7CiAgICAgICAgICAgICAgICBzd2l0Y2goICR0eXBlICkgewogICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChib29sKSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnaW50ZWdlcic6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChpbnQpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdyZWFsJzoKICAgICAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzoKICAgICAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChmbG9hdCkgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAoc3RyaW5nKSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZSgkY29udGVudHMsJHZlcmlmeSA9IFRSVUUpCiAgICB7CiAgICAgICAgaWYoICR2ZXJpZnkgKSBkaWUoJ29vcHMnKTsKICAgICAgICAvLyBnZXQgdGhlIGZpcnN0IGxpbmUKICAgICAgICAkZmlyc3RfbGluZSA9IGV4cGxvZGUoIlxuIiwkY29udGVudHMsMilbMF07CiAgICAgICAgJGZpbGVfc2lnID0gbnVsbDsKICAgICAgICAkbWF0Y2hlcyA9IG51bGw7CiAgICAgICAgcHJlZ19tYXRjaCgnL1xzK1NJRz0oWzAtOUEtWmEtel17MzJ9KVxzKy8nLCRmaXJzdF9saW5lLCRtYXRjaGVzKTsKICAgICAgICBpZiggJG1hdGNoZXNbMV0gKSAkZmlsZV9zaWcgPSAkbWF0Y2hlc1sxXTsKICAgICAgICB1bnNldCgkbWF0Y2hlcyk7CgogICAgICAgICRyYXdfZGF0YSA9IHBhcnNlX2luaV9zdHJpbmcoJGNvbnRlbnRzLFRSVUUpOwoKICAgICAgICAvLyB3ZSBoYXZlIGEgZmxhdCBsaXN0IG9mIHNlY3Rpb25zLCBlYWNoIHNlY3Rpb24gaXMgYW4gYXJyYXkKICAgICAgICAvLyB0aGUgdG9wIHNlY3Rpb24gc2hvdWxkIG5vdCBoYXZlIGFueSBuZXN0aW5nCiAgICAgICAgJGFsbF9rZXlzID0gYXJyYXlfa2V5cygkcmF3X2RhdGEpOwogICAgICAgICRrZXkwID0gJGFsbF9rZXlzWzBdOwogICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyA6ICcsJGtleTApOwogICAgICAgIGlmKCAkcGFydHNbMF0gIT0gJGtleTAgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgZmlsZSBmb3JtYXQsIGZvdW5kIG5lc3RlZCBjaGlsZCBhcyBmaXJzdCBlbGVtZW50Jyk7CgogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRyYXdfZGF0YSBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJyA6ICcsJGtleSk7CiAgICAgICAgICAgIC8vaWYoICRwYXJ0c1swXSAhPSAka2V5MCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBmaWxlIGZvcm1hdCcpOwoKICAgICAgICAgICAgaWYoIGNvdW50KCRwYXJ0cykgPT0gMSApIHsKICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJHRtcCA9JiAkb3V0OwogICAgICAgICAgICAgICAgJGkgPSBudWxsOwogICAgICAgICAgICAgICAgZm9yKCAkaSA9IDEsICRuID0gY291bnQoJHBhcnRzKSAtIDE7ICRpIDwgJG47ICRpKysgKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhcnQgPSAkcGFydHNbJGldOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJHRtcFskcGFydF0pICkgJHRtcFskcGFydF0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICR0bXAgPSYgJHRtcFskcGFydF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdG1wWyRwYXJ0c1skaV1dID0gJHRoaXMtPl9jb252ZXJ0X3ZhbHVlcygkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoIGNvdW50KCRvdXQpID09IDEgJiYgaXNzZXQoJG91dFska2V5MF0pICkgewogICAgICAgICAgICAkb3V0ID0gJG91dFska2V5MF07CiAgICAgICAgfQoKICAgICAgICBpZiggJHZlcmlmeSApIHsKICAgICAgICAgICAgJGNhbGNfc2lnID0gJHRoaXMtPl9jYWxjX2NoZWNrc3VtKCRvdXQpOwogICAgICAgICAgICBpZiggJGZpbGVfc2lnICE9ICRjYWxjX3NpZyApIHRocm93IG5ldyBcUmFuZ2VFeGNlcHRpb24oIklOSSBGaWxlIHNpZ25hdHVyZSBkaWQgbm90IG1hdGNoIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZpbGUgY29udGVudHMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGZpbGVuYW1lID0gbnVsbCwkdmVyaWZ5ID0gVFJVRSkKICAgIHsKICAgICAgICBpZiggJGZpbGVuYW1lICkgJHRoaXMtPnNldF9maWxlbmFtZSgkZmlsZW5hbWUpOwoKICAgICAgICBpZiggIWlzX2ZpbGUoJHRoaXMtPl9maWxlbmFtZSkgfHwgIWlzX3JlYWRhYmxlKCR0aGlzLT5fZmlsZW5hbWUpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoIkZpbGUgJXMgY291bGQgbm90IGJlIHJlYWQiLCR0aGlzLT5fZmlsZW5hbWUpKTsKICAgICAgICAkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+X2ZpbGVuYW1lKTsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlKCRjb250ZW50cywkdmVyaWZ5KTsKICAgIH0KfQo8P3BocAoKbmFtZXNwYWNlIENHU25hcHNob3RccGhhcjsKCmFic3RyYWN0IGNsYXNzIHRlc3RfYmFzZQp7CiAgICBwcm90ZWN0ZWQgJF9sYWJlbDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2xhYmVsKCkgeyByZXR1cm4gJHRoaXMtPl9sYWJlbDsgfQogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKTsKfQoKY2xhc3MgZmFsc2VfdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfdmFsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fdmFsID0gKGJvb2wpICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3ZhbCA9PSBGQUxTRTsKICAgIH0KfQoKY2xhc3MgdHJ1ZV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF92YWw7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl92YWwgPSAoYm9vbCkgJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdmFsID09IFRSVUU7CiAgICB9Cn0KCmNsYXNzIGV4dGVuc2lvbl90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9leHQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkZXh0KQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9leHQgPSB0cmltKCRleHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gZXh0ZW5zaW9uX2xvYWRlZCgkdGhpcy0+X2V4dCk7CiAgICB9Cn0KCmNsYXNzIG1pbnZlcnNpb25fdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfbWludmFsOwogICAgcHJpdmF0ZSAkX3ZhbDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRtaW52YWwsJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fbWludmFsID0gdHJpbSgkbWludmFsKTsKICAgICAgICAkdGhpcy0+X3ZhbCA9IHRyaW0oJHZhbCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiAodmVyc2lvbl9jb21wYXJlKCR0aGlzLT5fdmFsLCR0aGlzLT5fbWludmFsKSA+PSAwKTsKICAgIH0KfQoKY2xhc3MgZnVuY3Rpb25fdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfZm47CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkZm4pCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X2ZuID0gdHJpbSgkZm4pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb25fZXhpc3RzKCR0aGlzLT5fZm4pOwogICAgfQp9CgpjbGFzcyBzaW1wbGVfdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfZm47CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCxjYWxsYWJsZSAkZm4pCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X2ZuID0gJGZuOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICAkdG1wID0gJHRoaXMtPl9mbjsKICAgICAgICByZXR1cm4gJHRtcCgpOwogICAgfQp9CgpjbGFzcyBkaXJfd3JpdGFibGVfdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfZGlyOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJGRpcikKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fZGlyID0gdHJpbSgkZGlyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIChpc19kaXIoJHRoaXMtPl9kaXIpICYmIGlzX3dyaXRhYmxlKCR0aGlzLT5fZGlyKSk7CiAgICB9Cn0KCmNsYXNzIGRpcl9lbXB0eV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9kaXI7CiAgICBwcml2YXRlICRfZXhjbHVkZXM7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkZGlyLCRleGNsdWRlcyA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9ICRsYWJlbDsKICAgICAgICAkdGhpcy0+X2RpciA9ICRkaXI7CiAgICAgICAgJHRoaXMtPl9leGNsdWRlcyA9ICRleGNsdWRlczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgJGZpbGVzMSA9IGdsb2IoJHRoaXMtPl9kaXIuJy8uPz8qJyk7CiAgICAgICAgJGZpbGVzMiA9IGdsb2IoJHRoaXMtPl9kaXIuJy8qJyk7CiAgICAgICAgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGZpbGVzMSwkZmlsZXMyKTsKICAgICAgICBmb3JlYWNoKCAkZmlsZXMgYXMgJGZpbGUgKSB7CiAgICAgICAgICAgICRibiA9IHN0cl9yZXBsYWNlKCR0aGlzLT5fZGlyLicvJywnJywkZmlsZSk7CiAgICAgICAgICAgIG91dHB1dCgndGVzdDogJy4kYm4pOwogICAgICAgICAgICBpZiggIWNvdW50KCR0aGlzLT5fZXhjbHVkZXMpIHx8ICFpbl9hcnJheSgkYm4sJHRoaXMtPl9leGNsdWRlcykgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBUUlVFOwogICAgfQp9PD9waHAKPz4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+Q0dTbmFwc2hvdCAtIFdlYiBJbnRlcmZhY2UgVW5zdXBwb3J0ZWQ8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5DR1NuYXBzaG90IC1XZWIgSW50ZXJmYWNlIFVuc3VwcG9ydGVkITwvaDE+CiAgICA8aDMgc3R5bGU9ImNvbG9yOiByZWQ7Ij5Tb3JyeSE8L2gzPgogICAgPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij5UaGUgQ0dTbmFwc2hvdCByZXN0b3JlIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGEgd2ViIGludGVyZmFjZSBhdCB0aGlzIHRpbWUuPC9wPgoKICAgIDxwPllvdSBtYXkgYmUgYWJsZSB0byBzcG9uc29yIGl0IHRob3VnaC4uLi4gcGxlYXNlIGNvbnRhY3QgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAZ21haWwuY29tIj5jYWxndXkxMDAwQGdtYWlsLmNvbTwvYT4gdG8gc2VlIGFib3V0IHNwb25zb3JpbmcgYSB3ZWIgYmFzZWQgcmVzdG9yZSBwYWNrYWdlLjwvcD4KICA8Ym9keT4KPC9odG1sPgo8P3BocApAdW5saW5rKCdDR1NuYXBzaG90LVJlc3RvcmUucGhwJyk7CiRwaGFyMiA9IG5ldyBQaGFyKCdDR1NuYXBzaG90LVJlc3RvcmUucGhhcicsIDAsICdDR1NuYXBzaG90LVJlc3RvcmUucGhhcicpOwovLyBhZGQgYWxsIGZpbGVzIGluIHRoZSBwcm9qZWN0LCBvbmx5IGluY2x1ZGUgcGhwIGZpbGVzCiRwaGFyMi0+YnVpbGRGcm9tRGlyZWN0b3J5KGRpcm5hbWUoX19GSUxFX18pKTsKJHBoYXIyLT5zZXRTdHViKCRwaGFyMi0+Y3JlYXRlRGVmYXVsdFN0dWIoJ2NsaS5waHAnLCAnd3d3LnBocCcpKTsKcmVuYW1lKCdDR1NuYXBzaG90LVJlc3RvcmUucGhhcicsJ0NHU25hcHNob3QtUmVzdG9yZS5waHAnKTsK5GPRvmMGXRuRcgnytOTmMRbYSCUCAAAAR0JNQg==]]></data>
	</file>
	<file>
	  <filename>/phar/cli.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmluY2x1ZGVfb25jZSgnbGliL3V0aWxzLnBocCcpOwppbmNsdWRlX29uY2UoJ2xpYi9kYl91dGlscy5waHAnKTsKaW5jbHVkZV9vbmNlKCdsaWIvY2xhc3MuY29tcGF0aWJpbGl0eV90ZXN0ZXIucGhwJyk7Cgokc2NyaXB0ID0gYmFzZW5hbWUoJGFyZ3ZbMF0pOwokZGJjb25maWcgPSBudWxsOyAvLyBkYiBjb25maWcgYXJyYXkKJGRiZmlsZSA9IG51bGw7IC8vIHBhdGggdG8gaW1wb3J0IGZpbGUuCiRzbmFwc2hvdCA9IG51bGw7IC8vIHBhdGhuYW1lIHRvIHNuYXBzaG90CiRvbGRfY29uZmlnID0gbnVsbDsgLy8gb2xkIGNvbmZpZyB2YWx1ZXMKJGFyY2ggPSBudWxsOyAgLy8gdGhlIGFyY2hpdmUgb2JqZWN0CiRkaXIgPSBnZXRjd2QoKTsKJGNvbmZpZ19maWxlID0gbnVsbDsKCiRvdXQgPSA8PDxFT1QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo9PT0gQ0dTbmFwc2hvdCBSZXN0b3JlIFV0aWxpdHkgPT09ClRoaXMgcHJvZ3JhbSB3aWxsIGF0dGVtcHQgdG8gcmVzdG9yZSBhIENHU25hcHNob3QgZmlsZSBpbnRvIGEgd29ya2luZyBDTVNNUyBEaXN0cmlidXRpb24uClRoZXJlIGFyZSBhIG51bWJlciBvZiBzdGVwcyBpbiB0aGlzIG9wZXJhdGlvbjoKMS4gIERvIGEgYmFzaWMgY2hlY2sgZm9yIHN5c3RlbSBjb21wYXRpYmlsaXR5CjIuICBBc2sgZm9yLCBhbmQgdmFsaWRhdGUgdGhlIENHU25hcHNob3QgZmlsZQozLiAgQ2hlY2sgZm9yIGFuIGVtcHR5IGRpcmVjdG9yeS4KNC4gIEdldCBhbmQgdmFsaWRhdGUgZGF0YWJhc2UgY3JlZGVudGlhbHMsIGFuZCB0aGUgZGF0YWJhc2UKNS4gIEV4dHJhY3QgQ0dTbmFwc2hvdCBGaWxlcwo2LiAgUmVzdG9yZSB0aGUgZGF0YWJhc2UKNy4gIFNlY3VyZSB0aGUgaW5zdGFsbGF0aW9uCjguICBHZW5lcmF0ZSBhIG5ldyBjb25maWcucGhwCgpUaGVyZSBhcmUgc3RlcHMgeW91IG1heSBuZWVkIHRvIHRha2UgYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgY29tcGxldGUgdG8gZW5zdXJlIGEgd29ya2luZyBzeXN0ZW0sClBhcnRpY3VsYXJseSBpZiB5b3UgYXJlIG1vdmluZyB0byBhIG5ldyBob3N0LgpUaGVzZSBJbmNsdWRlCjEuICBBZGp1c3RpbmcgeW91ciAuaHRhY2Nlc3MgZmlsZQoyLiAgQWRqdXN0aW5nIGFueSBoYXJkIGNvZGVkIGxpbmtzCjMuICBBZGp1c3RpbmcgbW9kdWxlIHByZWZlcmVuY2VzIGFuZCBzZXR0aW5ncwo0LiAgVGVzdGluZwoKTk9URVM6CjEuICBUaGlzIHNjcmlwdCByZXF1aXJlcyB0aGUgYWJpbGl0eSB0byBleGVjdXRlIHNoZWxsIGNvbW1hbmRzLgoyLiAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgdGhhdCB0aGUgbXlzcWwgcHJvZ3JhbSBiZSBpbiB0aGUgY3VycmVudCBQQVRILgozLiAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgdGhlIFppcEFyY2hpdmUgcGhwIGNsYXNzICh1c3VhbGx5IGJ1aWx0IGluKQo0LiAgVGhpcyBzY3JpcHQgZG9lcyBjb21wYXRpYmlsaXR5IGNoZWNrcyB0aGF0IG1heSBiZSBsZXNzIGV4dGVuc2l2ZSB0aGFuIHRob3NlIGJ1aWx0IGludG8gQ01TTVMsIG9yIG1heSBiZSBtb3JlIGV4dGVuc2l2ZS4KRU9UOwpjbHMoKTsKb3V0cHV0KCRvdXQpOwoKJHJlcyA9IGFza19ib29sKCdBcmUgeW91IHJlYWR5IHRvIGJlZ2luPycpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBvdXRwdXQoIlRoYW5rIHlvdSwgY29tZSBhZ2FpbiIpOwogICAgZXhpdDsKfQoKLy8gMS4gIHByb21wdCBmb3IgemlwIGZpbGUKJG91dCA9IDw8PEVPVAo9PSBFbnRlciB0aGUgQ0dTbmFwc2hvdCBuYW1lID09ClBsZWFzZSBlbnRlciB0aGUgbmFtZSBvZiB0aGUgQ0dTbmFwc2hvdCBmaWxlIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gcmVzdG9yZS4KCk5vdGU6IFRoZSBmaWxlbmFtZSBzaG91bGQgYmUgYW4gYWJzb2x1dGUgcGF0aCwgb3Igc2hvdWxkIHJlc2lkZSBpbiB5b3VyIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCkVPVDsKJHNuYXBzaG90ID0gbnVsbDsKY2xzKCk7CndoaWxlKCAhJHNuYXBzaG90ICkgewogICAgb3V0cHV0KCRvdXQpOwogICAgJHJlcyA9IGFza19zdHJpbmdfcmVxdWlyZWQoICJDR1NuYXBzaG90IEZpbGUgTmFtZToiICk7CiAgICBpZiggJHJlcyApIHsKICAgICAgICAkZm4gPSAkZGlyLicvJy4kcmVzOwogICAgICAgIGlmKCAhaXNfZmlsZSgkZm4pIHx8ICFpc19yZWFkYWJsZSgkZm4pICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCJDb3VsZCBub3QgZmluZCB0aGUgZmlsZTogJHJlcyIpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCAhaXNfY2dzbmFwc2hvdCgkZm4pICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCIkcmVzIGlzIG5vdCBhIENHU25hcHNob3QgYXJjaGl2ZSBmaWxlIik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkc25hcHNob3QgPSAkcmVzOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9Cn0KCi8vIDIuICBHZXQgY29uZmlnIGFuZCBkYXRhYmFzZSBmaWxlcyBmcm9tIHRoZSBzbmFwc2hvdAokY29uZmlnX2ZpbGVzID0gYXJyYXkoJ2NvbmZpZy5waHAnLCdsaWIvY29uZmlnLnBocCcpOwokb2xkX2NvbmZpZyA9IG51bGw7CiR0bXBmaWxlID0gJy50bXAuY29uZmlnLnBocCc7CiRhcmNoID0gbmV3IFxaaXBBcmNoaXZlOwokYXJjaC0+b3Blbigkc25hcHNob3QpOwokZGJmaWxlID0gY29weV9hcmNoZmlsZV90b190bXAoJGFyY2gsJ3RtcC9fX215c3FsZHVtcC5zcWwnKTsKZm9yZWFjaCggJGNvbmZpZ19maWxlcyBhcyAkZmlsZSApIHsKICAgICRmbiA9IGNvcHlfYXJjaGZpbGVfdG9fdG1wKCRhcmNoLCRmaWxlKTsKICAgIGlmKCAkZm4gKSB7CiAgICAgICAgJGNvbmZpZ19maWxlID0gJGZpbGU7CiAgICAgICAgaW5jbHVkZSgkZm4pOwogICAgICAgICRvbGRfY29uZmlnID0gJGNvbmZpZzsKICAgICAgICB1bnNldCgkY29uZmlnKTsKICAgICAgICB1bmxpbmsoJGZuKTsKICAgICAgICBicmVhazsKICAgIH0KfQppZiggISRvbGRfY29uZmlnIHx8ICFpc3NldCgkb2xkX2NvbmZpZ1snZGJfbmFtZSddKSApIHsKICAgIGVycm9yKCJDb3VsZCBub3QgZmluZCBjb25maWcgZGF0YSBpbiBDR1NuYXBzaG90Iik7CiAgICBleGl0KDEpOwp9CgovLyAzLiAgRGlzcGxheSBpbmZvIGZyb20gdGhlIHNuYXBzaG90CiRjZ3NuYXBzaG90X2ZpbGUgPSAkYXJjaC0+Z2V0RnJvbU5hbWUoJ3RtcC8uY2dzbmFwc2hvdCcpOwokaW5pID0gbmV3IFxDR1NuYXBzaG90XHBoYXJcc2VjdXJlX2luaV9maWxlOwokY2dzbmFwc2hvdF9kYXRhID0gJGluaS0+cGFyc2UoJGNnc25hcHNob3RfZmlsZSxGQUxTRSk7CmNscygpOwpvdXRwdXQoJz09IENHU25hcHNob3QgRGV0YWlscyA9PScpOwpvdXRwdXQoJ1NpdGUgTmFtZTogJy4kY2dzbmFwc2hvdF9kYXRhWyd3ZWJzaXRlJ11bJ3NpdGVuYW1lJ10pOwpvdXRwdXQoJ1NpdGUgVVJMOiAnLiRjZ3NuYXBzaG90X2RhdGFbJ3dlYnNpdGUnXVsncm9vdF91cmwnXSk7Cm91dHB1dCgnQ01TTVMgVmVyc2lvbjogJy4kY2dzbmFwc2hvdF9kYXRhWyd3ZWJzaXRlJ11bJ2Ntc192ZXJzaW9uJ10pOwpvdXRwdXQoJ0NyZWF0ZWQ6ICcuc3RyZnRpbWUoJyV4ICVYJywkY2dzbmFwc2hvdF9kYXRhWydtYWluJ11bJ2NyZWF0ZWQnXSkpOwokcmVzID0gYXNrX2Jvb2woJ0RvIHlvdSB3YW50IHRvIGNvbnRpbnVlPycpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBvdXRwdXQoIlRoYW5rIHlvdSwgY29tZSBhZ2FpbiIpOwogICAgZXhpdDsKfQoKLy8gNC4gIENvbXBhdGliaWxpdHkgY2hlY2sKY2xzKCk7Cm91dHB1dCgnPT0gQ2hlY2sgZm9yIENvbXBhdGliaWxpdHkgPT0nKTsKJHBhcm1zID0gYXJyYXkoJ2Rpcic9PiRkaXIsJ2V4Y2x1ZGVzJz0+YXJyYXkoYmFzZW5hbWUoJHNuYXBzaG90KSwkc2NyaXB0KSk7CiR0ZXN0ZXIgPSBuZXcgXENHU25hcHNob3RccGhhclxjb21wYXRpYmlsaXR5X3Rlc3RlcigkcGFybXMpOwokcmVzID0gJHRlc3Rlci0+dGVzdCgpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBlcnJvcigiT25lIG9yIG1vcmUgY29tcGF0aWJpbGl0eSB0ZXN0cyBmYWlsZWQiKTsKICAgICRmYWlsZWQgPSAkdGVzdGVyLT5nZXRfZmFpbGVkKCk7CiAgICBmb3JlYWNoKCAkZmFpbGVkIGFzICRvbmUgKSB7CiAgICAgICAgZXJyb3IoIiAgICAkb25lIDogIi4kdGVzdGVyLT5nZXRfZXJyb3Jtc2coJG9uZSksRkFMU0UpOwogICAgfQogICAgZXJyb3IoIk5vdCBhbGwgdGVzdHMgcGFzc3NlZC4uLiBtdXN0IGV4aXQuIik7CiAgICBleGl0KDEpOwp9Cgokb3V0ID0gYXJyYXkoKTsKJGxpc3QgPSBhcnJheSgpOwokbGlzdFsnYSddID0gYXJyYXkoJ3Byb21wdCc9PidEYXRhYmFzZSBIb3N0Jywna2V5Jz0+J2RiX2hvc3RuYW1lJywndmFsJz0+J2xvY2FsaG9zdCcpOwokbGlzdFsnYiddID0gYXJyYXkoJ3Byb21wdCc9PidEYXRhYmFzZSBOYW1lJywna2V5Jz0+J2RiX25hbWUnLCd2YWwnPT5udWxsKTsKJGxpc3RbJ2MnXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgVXNlcicsJ2tleSc9PidkYl91c2VybmFtZScsJ3ZhbCc9Pm51bGwpOwokbGlzdFsnZCddID0gYXJyYXkoJ3Byb21wdCc9PidEYXRhYmFzZSBQYXNzd29yZCcsJ2tleSc9PidkYl9wYXNzd29yZCcsJ3ZhbCc9Pm51bGwpOwokbGlzdFsnZSddID0gYXJyYXkoJ3Byb21wdCc9PidEQk1TIChteXNxbC9teXNxbGkpJywna2V5Jz0+J2RibXMnLCd2YWwnPT4nbXlzcWxpJywnb3B0aW9ucyc9PmFycmF5KCdteXNxbGknLCdteXNxbCcpKTsKJGxpc3RbJ3onXSA9IGFycmF5KCdwcm9tcHQnPT4nRG9uZS9GaW5pc2hlZCcpOwokdmFsaWQgPSBmYWxzZTsKJGJ1aWxkX3Byb21wdCA9IGZ1bmN0aW9uKCRsaXN0KSB7CiAgICAkcHJvbXB0ID0gJz09IERhdGFiYXNlIENvbm5lY3Rpb24gSW5mb3JtYXRpb24gPT0nLiJcbiI7CiAgICBmb3JlYWNoKCAkbGlzdCBhcyAka2V5ID0+ICRyZWMgKSB7CiAgICAgICAgaWYoIGlzc2V0KCRyZWNbJ2tleSddKSApIHsKICAgICAgICAgICAgJHByb21wdCAuPSBzcHJpbnRmKCIlczogJTIwcyA9ICVzXG4iLCRrZXksJHJlY1sncHJvbXB0J10sJHJlY1sndmFsJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwcm9tcHQgLj0gc3ByaW50ZigiJXM6ICUyMHNcbiIsJGtleSwkcmVjWydwcm9tcHQnXSk7CiAgICAgICAgfQogICAgfQogICAgJHByb21wdCAuPSAiXG5PcHRpb24gW2EsYixjLGQsZSBxL3F1aXQvZXhpdF06ICI7CiAgICByZXR1cm4gJHByb21wdDsKfTsKCmNscygpOwp3aGlsZSggISR2YWxpZCApIHsKICAgIHdoaWxlKCAxICkgewogICAgICAgIC8vIGRpc3BsYXkgdGhlIGxpc3QKICAgICAgICAkbGlzdGtleSA9IGFza19vcHRpb24oJGJ1aWxkX3Byb21wdCgkbGlzdCksYXJyYXlfa2V5cygkbGlzdCkpOwogICAgICAgIGlmKCAkbGlzdGtleSA9PSAneicgKSBicmVhazsKICAgICAgICBpZiggaXNzZXQoJGxpc3RbJGxpc3RrZXldWydvcHRpb25zJ10pICkgewogICAgICAgICAgICAkdmFsID0gYXNrX29wdGlvbigkbGlzdFskbGlzdGtleV1bJ3Byb21wdCddLic6JywkbGlzdFskbGlzdGtleV1bJ29wdGlvbnMnXSk7CiAgICAgICAgICAgICRsaXN0WyRsaXN0a2V5XVsndmFsJ10gPSB0cmltKCR2YWwpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHZhbCA9IGFza19zdHJpbmdfcmVxdWlyZWQoJGxpc3RbJGxpc3RrZXldWydwcm9tcHQnXS4nOicpOwogICAgICAgICAgICAkbGlzdFskbGlzdGtleV1bJ3ZhbCddID0gdHJpbSgkdmFsKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHZhbHVlIGZvciBldmVyeXRoaW5nCiAgICAkZm5kID0gdHJ1ZTsKICAgIGZvcmVhY2goICRsaXN0IGFzICRrZXkgPT4gJHJlYyApIHsKICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ2tleSddKSApIGNvbnRpbnVlOwogICAgICAgIGlmKCAhaXNzZXQoJHJlY1sndmFsJ10pIHx8ICRyZWNbJ3ZhbCddID09ICcnICkgewogICAgICAgICAgICAkZm5kID0gZmFsc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmKCAkZm5kICkgewogICAgICAgIC8vIGRvIGEgdGVzdCBjb25uZWN0aW9uCiAgICAgICAgJGRiY29uZmlnID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkbGlzdCBhcyAka2V5ID0+ICRyZWMgKSB7CiAgICAgICAgICAgIGlmKCAhaXNzZXQoJHJlY1sna2V5J10pICkgY29udGludWU7CiAgICAgICAgICAgIGlmKCAhaXNzZXQoJHJlY1sndmFsJ10pICkgY29udGludWU7CiAgICAgICAgICAgICRkYmNvbmZpZ1skcmVjWydrZXknXV0gPSAkcmVjWyd2YWwnXTsKICAgICAgICB9CiAgICAgICAgJHJlcyA9IFxDR1NuYXBzaG90XHBoYXJcdGVzdF9kYl9jb25uZWN0KCRkYmNvbmZpZyk7CiAgICAgICAgaWYoICEkcmVzICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCdQcm9ibGVtIGNvbm5lY3RpbmcgdG8gdGhlIGRhdGFiYXNlLi4uIHBsZWFzZSBkb3VibGVjaGVjayB5b3VyIGluZm9ybWF0aW9uJyk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gY29ubmVjdGVkIG9rYXksIHNlZSBpZiB0aGUgZGIgaXMgZW1wdHkKICAgICAgICAkcmVzID0gXENHU25hcHNob3RccGhhclx0ZXN0X2RiX2VtcHR5KCRyZXMsJGRiY29uZmlnKTsKICAgICAgICBpZiggISRyZXMgKSB7CiAgICAgICAgICAgIG5ld2xpbmUoKTsKICAgICAgICAgICAgZXJyb3IoJ1RoZSBkYXRhYmFzZSB5b3Ugc2VsZWN0ZWQgYXBwZWFycyB0byBhbHJlYWR5IGNvbnRhaW4gdGFibGVzLi4uIHBsZWFzZSBwaWNrIGFub3RoZXIgZGF0YWJhc2UsIG9yIGNsZWFyIHRoaXMgb25lLicpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgICR2YWxpZCA9IHRydWU7CiAgICB9Cn0KCi8vIDUuICBpbXBvcnQgZGF0YWJhc2UKY2xzKCk7Cm91dHB1dCgnPT0gaW1wb3J0aW5nIGRhdGFiYXNlID09Jyk7CiRyZXMgPSBcQ0dTbmFwc2hvdFxwaGFyXGRiX2ltcG9ydCgkZGJjb25maWcsJGRiZmlsZSk7CmlmKCAhJHJlcyApIHsKICAgIG5ld2xpbmUoKTsKICAgIGVycm9yKCdQcm9ibGVtIGltcG9ydGluZyBkYXRhIGludG8gdGhlIGRhdGFiYXNlLi4uIHBsZWFzZSBjbGVhbnVwIGFuZCByZXRyeScpOwogICAgZXhpdCgxKTsKfQpvdXRwdXQoJ2RvbmUnKTsKCi8vIDYuICBleHRyYWN0IHppcCBmaWxlcwokb3AgPSBudWxsOwpuZXdsaW5lKCk7Cm91dHB1dCgnPT0gcmVzdG9yaW5nIGZpbGVzID09Jyk7CmZvciggJGkgPSAwOyAkaSA8ICRhcmNoLT5udW1GaWxlczsgJGkrKyApIHsKICAgICRlbnRyeSA9ICRhcmNoLT5nZXROYW1lSW5kZXgoJGkpOwogICAgJGFyY2gtPmV4dHJhY3RUbygnLicsJGVudHJ5KTsKICAgICRwID0gKGludCkgKChmbG9hdCkkaSAvIChmbG9hdCkkYXJjaC0+bnVtRmlsZXMgKiAxMDApOwogICAgaWYoICRwID4gMCAmJiAkcCAlIDUgPT0gMCAmJiAkcCAhPSAkb3AgKSB7CiAgICAgICAgJG9wID0gJHA7CiAgICAgICAgb3V0cHV0KCRwLiclLi4uICcsRkFMU0UpOwogICAgfQp9Cm91dHB1dCgnZG9uZScpOwoKLy8gNi4gIGdlbmVyYXRlIGNvbmZpZy5waHAKaWYoICRjb25maWdfZmlsZSApIHsKICAgLy8gYWxsIG9mIHRoaXMgYXNzdW1lcyAkZGlyID09IGN3ZAogICBuZXdsaW5lKCk7CiAgIG91dHB1dCgnPT0gZ2VuZXJhdGluZyBuZXcgY29uZmlnIGZpbGUgPT0nKTsKICAgb3V0cHV0KCdXQVJOSU5HOiAgQW55IGFkdmFuY2VkIHBocCBwcm9jZXNzaW5nIGluIHRoZSBvcmlnaW5hbCBmaWxlIHdpbGwgYmUgcmVtb3ZlZCwgYW5kIG1heSByZXF1aXJlIGZpeGluZycpOwogICBvdXRwdXQoJ1RoZSBvcmlnaW5hbCBjb25maWcgZmlsZSBjYW4gYmUgZm91bmQgaW4gYmFrLmNvbmZpZy5waHAgaW4gdGhlIHNpdGUgcm9vdCBkaXJlY3RvcnknKTsKICAgJGJuID0gYmFzZW5hbWUoJGNvbmZpZ19maWxlKTsKICAgJGRuID0gZGlybmFtZSgkY29uZmlnX2ZpbGUpOwogICByZW5hbWUoJGNvbmZpZ19maWxlLCIkZG4vYmFrLnskYm59Iik7CgogICBpZiggJG9sZF9jb25maWcgJiYgJGRiY29uZmlnICkgewogICAgICAkbmV3X2NvbmZpZyA9IGFycmF5X21lcmdlKCRvbGRfY29uZmlnLCRkYmNvbmZpZyk7CiAgICAgIHdyaXRlX2NvbmZpZ19waHAoJGNvbmZpZ19maWxlLCRuZXdfY29uZmlnKTsKICAgfQp9CgovLyA2LiAgc2VjdXJpdHkuLi4KbmV3bGluZSgpOwpvdXRwdXQoJz09IGltcHJvdmluZyBzZWN1cml0eSA9PT0nKTsKJGl0ZXIgPSBuZXcgXFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoCiAgICBuZXcgXFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRkaXIsIFxSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcjo6U0tJUF9ET1RTKSwKICAgIFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpTRUxGX0ZJUlNULAogICAgXFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OkNBVENIX0dFVF9DSElMRCAvLyBJZ25vcmUgIlBlcm1pc3Npb24gZGVuaWVkIgogICAgKTsKJHN0ciA9ICc8IS0tIERVTU1ZIEhUTUwgRklMRSAtLT4nOwpmb3JlYWNoKCAkaXRlciBhcyAkcGF0aCA9PiAkZGlyICkgewogICAgaWYoICEkZGlyLT5pc0RpcigpICkgY29udGludWU7CiAgICBpZiggZmlsZV9leGlzdHMoJHBhdGguJy9pbmRleC5waHAnKSB8fCBmaWxlX2V4aXN0cygkcGF0aC4nL2luZGV4Lmh0bWwnKSApIGNvbnRpbnVlOwoKICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRwYXRoLicvaW5kZXguaHRtbCcsJHN0cik7Cn0KCi8vIDkgICBjbGVhbnVwCm5ld2xpbmUoKTsKb3V0cHV0KCc9PSBjbGVhbmluZyB1cCA9PT0nKTsKQHVubGluaygkc25hcHNob3QpOwpAdW5saW5rKCRzY3JpcHQpOwpAdW5saW5rKCd0bXAvX19teXNxbGR1bXAuc3FsJyk7CkB1bmxpbmsoJ3RtcC8uY2dzbmFwc2hvdCcpOwpAbWtkaXIoJ3RtcC9jYWNoZScsMDc3Nyk7CkBta2RpcigndG1wL3RlbXBsYXRlc19jJywwNzc3KTsKCi8vIDEwLiAgRE9ORQpuZXdsaW5lKCk7Cm91dHB1dCgnPT0gRmluaXNoZWQgPT09Jyk7CiRvdXQgPSA8PDxFT1QKVGhlIHJlc3RvcmUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLiAgVGhlIGRhdGFiYXNlIGFuZCBhbGwgZmlsZXMgaGF2ZSBiZW4gcmVzdG9yZWQuCllvdSBtYXkgbmVlZCB0byByZXZpZXcgeW91ciBjb25maWcucGhwIGZpbGUsIGFuZCBhZGp1c3QgeW91ciAuaHRhY2Nlc3MgZmlsZSBmb3IgdGhlIG5ldyBzaXRlIGxvY2F0aW9uLgpBbHNvLCB5b3Ugc2hvdWxkIHVuZGVydGFrZSBleHRlbnNpdmUgdGVzdGluZy4KClRoYW5rIHlvdSBmb3IgdXNpbmcgQ0dTbmFwc2hvdC4KRU9UOwpvdXRwdXQoJG91dCk7CmV4aXQ7Cg==]]></data>
	</file>
	<file>
	  <filename>/phar/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/phar/lib/class.compatibility_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90XHBoYXI7CgppbmNsdWRlX29uY2UoX19ESVJfXy4nL2NsYXNzLnNpbXBsZV90ZXN0LnBocCcpOwoKY2xhc3MgY29tcGF0aWJpbGl0eV90ZXN0ZXIKewogICAgY29uc3QgTUlOUEhQID0gJzUuNC4xMSc7CiAgICBjb25zdCBURVNUX01JTlBIUFZFUiA9ICdtaW5waHB2ZXInOwogICAgY29uc3QgVEVTVF9ESVJXUklUQUJMRSA9ICdkaXJ3cml0YWJsZSc7CiAgICBjb25zdCBURVNUX0RJUkVNUFRZID0gJ2RpcmVtcHR5JzsKICAgIGNvbnN0IFRFU1RfVE1QRklMRSA9ICdmdW5jX3RtcGZpbGUnOwogICAgY29uc3QgVEVTVF9URU1QTkFNID0gJ2Z1bmNfdGVtcG5hbSc7CiAgICBjb25zdCBURVNUX0daT1BFTiA9ICdmdW5jX2d6b3Blbic7CiAgICBjb25zdCBURVNUX0VYVF9NVUxUSUJZVEUgPSAnZXh0X211bHRpYnl0ZSc7CiAgICBjb25zdCBURVNUX0VYVF9GSU5GTyA9ICdleHRfZmluZm8nOwogICAgY29uc3QgVEVTVF9FWFRfTVlTUUwgPSAnZXh0X215c3FsJzsKICAgIGNvbnN0IFRFU1RfTUQ1ID0gJ2Z1bmNfbWQ1JzsKICAgIGNvbnN0IFRFU1RfU0hBMSA9ICdmdW5jX3NoYTEnOwogICAgY29uc3QgVEVTVF9KU09OID0gJ2Z1bmNfanNvbic7CiAgICBjb25zdCBURVNUX09QRU5CQVNFRElSID0gJ29wZW5iYXNlZGlyJzsKICAgIGNvbnN0IFRFU1RfU0VTU0lPTkNPT0tJRVMgPSAnc2Vzc2lvbi51c2VfY29va2llcyc7CiAgICBjb25zdCBURVNUX1NFU1NJT05TQVZFID0gJ3Nlc3Npb24uc2F2ZXBhdGgnOwogICAgY29uc3QgVEVTVF9TQUZFTU9ERSA9ICdzYWZlX21vZGUnOwogICAgY29uc3QgVEVTVF9GSUxFVVBMT0FEUyA9ICdmaWxlX3VwbG9hZHMnOwogICAgY29uc3QgVEVTVF9FWFRfWE1MID0gJ2V4dF94bWwnOwogICAgY29uc3QgVEVTVF9GSUxFR0VUID0gJ2Z1bmNfZmlsZWdldGNvbnRlbnRzJzsKICAgIGNvbnN0IFRFU1RfRklMRVBVVCA9ICdmdW5jX2ZpbGVwdXRjb250ZW50cyc7CgogICAgcHJpdmF0ZSAkX3Rlc3RzID0gYXJyYXkoKTsKICAgIHByaXZhdGUgJF9yZXN1bHRzID0gYXJyYXkoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhcmFtcyA9IG51bGwpCiAgICB7CiAgICAgICAgLy8gYnVpbGQgbGlzdCBvZiB0ZXN0cyBiYXNlZCBvbiBwYXJhbXMgaW4gdGhlIGNvbnN0cnVjb3RyCiAgICAgICAgJGRpciA9IGlzc2V0KCRwYXJhbXNbJ2RpciddKSA/ICRwYXJhbXNbJ2RpciddIDogZ2V0Y3dkKCk7CiAgICAgICAgJGV4Y2x1ZGVzID0gaXNzZXQoJHBhcmFtc1snZXhjbHVkZXMnXSkgPyAkcGFyYW1zWydleGNsdWRlcyddIDogbnVsbDsKCiAgICAgICAgLy8gY2hlY2sgZm9yIHdyaXRlIGFjY2VzcwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBtaW52ZXJzaW9uX3Rlc3Qoc2VsZjo6VEVTVF9NSU5QSFBWRVIsc2VsZjo6TUlOUEhQLHBocHZlcnNpb24oKSk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGRpcl93cml0YWJsZV90ZXN0KHNlbGY6OlRFU1RfRElSV1JJVEFCTEUsJGRpcik7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGRpcl9lbXB0eV90ZXN0KHNlbGY6OlRFU1RfRElSRU1QVFksJGRpciwkZXhjbHVkZXMpOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1RNUEZJTEUsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICRmaCA9IHRtcGZpbGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiAoJGZoID09PSBGQUxTRSkgPyBGQUxTRSA6IFRSVUU7CiAgICAgICAgICAgIH0pOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfVEVNUE5BTSwndGVtcG5hbScpOwogICAgICAgICR0aGlzLT5fdGVzdHNbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX0daT1BFTixmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygnZ3pvcGVuJykgfHwgZnVuY3Rpb25fZXhpc3RzKCdnem9wZW42NCcpOwogICAgICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBleHRlbnNpb25fdGVzdChzZWxmOjpURVNUX0VYVF9NVUxUSUJZVEUsJ21ic3RyaW5nJyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX0VYVF9GSU5GTywnZmluZm9fb3BlbicpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfRVhUX01ZU1FMLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB0ZXN0X2V4dGVuc2lvbl9sb2FkZWQoJ215c3FsaScpIHx8IHRlc3RfZXh0ZW5zaW9uX2xvYWRlZCgnbXlzcWwnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX01ENSwnbWQ1Jyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZnVuY3Rpb25fdGVzdChzZWxmOjpURVNUX1NIQTEsJ3NoYTEnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfSlNPTiwnanNvbl9lbmNvZGUnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX09QRU5CQVNFRElSLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByZXR1cm4gKGluaV9nZXQoJ29wZW5fYmFzZWRpcicpID09ICcnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgc2ltcGxlX3Rlc3Qoc2VsZjo6VEVTVF9TRVNTSU9OQ09PS0lFUyxmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcmV0dXJuIChpbmlfZ2V0KCdzZXNzaW9uLnVzZV9jb29raWVzJykpOwogICAgICAgICAgICB9KTsKICAgICAgICBpZiggaW5pX2dldCgnc2Vzc2lvbi5zYXZlX2hhbmRsZXInKSA9PSAnZmlsZXMnICkgewogICAgICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1NFU1NJT05TQVZFLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJHBhdGggPSBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOwogICAgICAgICAgICAgICAgICAgIGlmKCAoJHBvcyA9IHN0cnBvcygkcGF0aCwnOycpKSAhPT0gRkFMU0UgKSAkcGF0aCA9IHN1YnN0cigkcGF0aCwkcG9zKzEpOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfZGlyKCR0bXApICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfd3JpdGFibGUoJHRtcCkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIC8vIHRvZG86IHRlc3QgbWVtb3J5IGxpbWl0CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZmFsc2VfdGVzdChzZWxmOjpURVNUX1NBRkVNT0RFLGluaV9nZXQoJ3NhZmVfbW9kZScpKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyB0cnVlX3Rlc3Qoc2VsZjo6VEVTVF9GSUxFVVBMT0FEUyxpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgZXh0ZW5zaW9uX3Rlc3Qoc2VsZjo6VEVTVF9FWFRfWE1MLCd4bWwnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRklMRUdFVCwnZmlsZV9nZXRfY29udGVudHMnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRklMRVBVVCwnZmlsZV9wdXRfY29udGVudHMnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm9ybXNnKCRjb2RlKQogICAgewogICAgICAgIHN3aXRjaCggJGNvZGUgKSB7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX01JTlBIUFZFUjoKICAgICAgICAgICAgcmV0dXJuICdUaGUgY29uZmlndXJlZCBQSFAgdmVyc2lvbiBpcyB0b28gbG93LiAgTWluaW11bSByZXF1aXJlZCBpcyAnLnNlbGY6Ok1JTlBIUDsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRElSV1JJVEFCTEU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIFBIUCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGlzIGRpcmVjdG9yeS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9ESVJFTVBUWToKICAgICAgICAgICAgcmV0dXJuICJUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IHNwZWNpZmllZCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgZW1wdHkgZXhjZXB0IGZvciBDR1NuYXBzaG90IGZpbGVzIGFuZCB0aGlzIHNjcmlwdFxuCiAgIEhpbnQ6ICBDaGVjayBmb3IgaGlkZGVuIGZpbGVzLiI7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1RNUEZJTEU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIHRtcGZpbGUoKSBtZXRob2QgZG9lcyBub3QgYXBwZWFyIHRvIG9wZXJhdGUgcHJvcGVybHknOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9URU1QTkFNOgogICAgICAgICAgICByZXR1cm4gJ1RoZSB0ZW1wbmFtKCkgZnVuY3Rpb24gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0daT1BFTjoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZ3pvcGVuL2d6b3BlbjY0IGZ1bmN0aW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfTVVMVElCWVRFOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBtdWx0aWJ5dGUgZXh0ZW5zaW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfRklORk86CiAgICAgICAgICAgIHJldHVybiAnVGhlIGZpbGVpbmZvIGV4dGVuc2lvbnMgZG8gbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRVhUX01ZU1FMOgogICAgICAgICAgICByZXR1cm4gJ1dlIGNvdWxkIG5vdCBmaW5kIGEgc3VpdGFibGUgZGF0YWJhc2UgZHJpdmVyLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX01ENToKICAgICAgICAgICAgcmV0dXJuICdUaGUgbWQ1IGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TSEExOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBzaGExIGZ1bmN0aW9uIGRvZXMgbm90IGFwcGVhciB0byBiZSBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9KU09OOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBqc29uIGZ1bmN0aW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX09QRU5CQVNFRElSOgogICAgICAgICAgICByZXR1cm4gJ09wZW4gYmFzZWRpciBpcyBlbmFibGVkLi4uIHRoaXMgaXMgcHJvYmxlbWF0aWMnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TRVNTSU9OQ09PS0lFUzoKICAgICAgICAgICAgcmV0dXJuICdTZXNzaW9uIGNvb2tpZXMgYXJlIG5vdCBlbmFibGVkLi4uIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1NFU1NJT05TQVZFOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBzZXNzaW9uIHNhdmUgcGF0aCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd3JpdGFibGUuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfU0FGRU1PREU6CiAgICAgICAgICAgIHJldHVybiAnU2FmZSBtb2RlIGlzIGVuYWJsZWQuLi4gd2UgY2Fubm90IGNvbnRpbnVlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRklMRVVQTE9BRFM6CiAgICAgICAgICAgIHJldHVybiAnRmlsZSB1cGxvYWRzIGFyZSBub3QgZW5hYmxlZC4gIFRoaXMgaXMgcHJvYmxlbWF0aWMnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfWE1MOgogICAgICAgICAgICByZXR1cm4gJ1hNTCBFeHRlbnNpb25zIGFyZSBub3QgZW5hYm9lZC4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9GSUxFR0VUOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBmaWxlX2dldF9jb250ZW50cyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfRklMRVBVVDoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZmlsZV9wdXRfY29udGVudHMgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4nOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAnVW5rbm93biBFcnJvcjogJy4kY29kZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9mYWlsZWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc3VsdHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3QoKQogICAgewogICAgICAgICRmYWlsZWQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICR0aGlzLT5fdGVzdHMgYXMgJHRlc3QgKSB7CiAgICAgICAgICAgICRyZXMgPSAkdGVzdC0+ZXhlY3V0ZSgpOwogICAgICAgICAgICBpZiggISRyZXMgKSB7CiAgICAgICAgICAgICAgICAkZmFpbGVkW10gPSAkdGVzdC0+Z2V0X2xhYmVsKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIGNvdW50KCRmYWlsZWQpICkgewogICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdHMgPSAkZmFpbGVkOwogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgfQogICAgICAgIHJldHVybiBUUlVFOwogICAgfQp9IC8vIGVuZCBvZiBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/phar/lib/class.secure_ini_file.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90XHBoYXI7CgpjbGFzcyBzZWN1cmVfaW5pX2ZpbGUKewogICAgcHJpdmF0ZSAkX2ZpbGVuYW1lOwogICAgcHJpdmF0ZSAkX2ZpcnN0X3NlY3Rpb24gPSBUUlVFOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmlsZW5hbWUgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5zZXRfZmlsZW5hbWUoJGZpbGVuYW1lKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkdGhpcy0+X2ZpbGVuYW1lID0gdHJpbSgkZmlsZW5hbWUpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX3NvcnRfZGF0YSgkZGF0YSkKICAgIHsKICAgICAgICAkb3V0ID0gJGRhdGE7CiAgICAgICAgZm9yZWFjaCggJG91dCBhcyAka2V5ID0+ICYkdmFsICkgewogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHZhbCkgKSAkdmFsID0gJHRoaXMtPl9zb3J0X2RhdGEoJHZhbCk7CiAgICAgICAgfQogICAgICAgIGtzb3J0KCRvdXQpOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmaW5hbCBmdW5jdGlvbiBfY2FsY19jaGVja3N1bSgkZGF0YSkKICAgIHsKICAgICAgICAkc29ydGVkID0gJHRoaXMtPl9zb3J0X2RhdGEoJGRhdGEpOwogICAgICAgICRzYWx0ID0gJ2Vyd2VyaWRmYXNkcyBuZGZhc2RmYXNoZGZhc2Q5MzQ5OCooIGRpZmFvdWRmYXNkZmFhZGYgc2RmMGFkZmExMjMpJzsgLy8ganVzdCBzb21lIHJhbmRvbSBjaGFyYWN0ZXJzCiAgICAgICAgJHNpZyA9IG1kNSgkc2FsdC5zZXJpYWxpemUoJHNvcnRlZCkpOwogICAgICAgIHJldHVybiAkc2lnOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX3NlY3Rpb24oJHNlY3Rpb24pCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgaWYoICEkdGhpcy0+X2ZpcnN0X3NlY3Rpb24gKSB7CiAgICAgICAgICAgICR0aGlzLT5fZmlyc3Rfc2VjdGlvbiA9IEZBTFNFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG91dCAuPSAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJG91dCAuPSAnWycudHJpbSgkc2VjdGlvbikuIl1cbiI7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9pbmlfdmFsKCRrZXksJHZhbCkKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICAvLyBAdG9kbyBjaGVjayBmb3IgaW52YWxpZCBjaGFycyBpbiB0aGUga2V5IGFuZCB0aHJvdyBhbiBleGNlcHRpb24KICAgICAgICAkbmtleSA9IHRyaW0oJGtleSk7CiAgICAgICAgJG52YWwgPSB0cmltKCR2YWwpOwogICAgICAgIGlmKCAhJG5rZXkgKSByZXR1cm47CiAgICAgICAgJHR5cGUgPSBnZXR0eXBlKCR2YWwpOwogICAgICAgIGlmKCAkdHlwZSA9PSAnb2JqZWN0JyApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ09iamVjdHMgY2Fubm90IGJlIHN0b3JlZCcpOwoKICAgICAgICAkZm5kID0gMDsKICAgICAgICAkYmFkY2hhcnMgPSBhcnJheSgiXG4iLCJcciIsIjsiLCInIiwnIicpOwogICAgICAgIGZvcmVhY2goICRiYWRjaGFycyBhcyAkY2ggKSB7CiAgICAgICAgICAgIGlmKCBzdHJwb3MoJG52YWwsJGNoKSAhPT0gRkFMU0UgKSB7CiAgICAgICAgICAgICAgICAkZm5kID0gMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAkZm5kICkgewogICAgICAgICAgICAvLyB0aGVyZSBhcmUgYmFkIGNoYXJhY3Rycy4gZ290dGEgZXNjYXBlIHRoZSBkb3VibGUgcXVvdGVzCiAgICAgICAgICAgICRudmFsID0gc3RyX3JlcGxhY2UoJyInLCdcIicsJG52YWwpOwogICAgICAgIH0KICAgICAgICAkbnZhbCA9ICInIi4kdHlwZS4nfDp8Jy4kbnZhbC4iJyI7CiAgICAgICAgJG91dCAuPSBzcHJpbnRmKCIlcyA9ICVzXG4iLCRrZXksJG52YWwpOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfZmlsZV9oZWFkZXIoJGNoZWNrc3VtKQogICAgewogICAgICAgICRvdXQgPSAnOzw/cGhwIGRpZSgpOyAvKiBTSUc9Jy4kY2hlY2tzdW0uJyAqLyA/PicuIlxuIjsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2luaV9hcnJheSgkYXJyLCRzZWN0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICAkc2VjdGlvbiA9IHRyaW0oJHNlY3Rpb24pOwogICAgICAgICRpc19hc3NvYyA9IChhcnJheV9rZXlzKCRhcnIpICE9PSByYW5nZSgwLCBjb3VudCgkYXJyKSAtIDEpKTsKCiAgICAgICAgaWYoICRpc19hc3NvYyApIHsKICAgICAgICAgICAgLy8gcGFzcyBvbmUsIG5vcm1hbCB2YWx1ZXMKICAgICAgICAgICAgZm9yZWFjaCggJGFyciBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV92YWwoJGtleSwkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggJG91dCApIHsKICAgICAgICAgICAgICAgIGlmKCAhJHNlY3Rpb24gKSAkc2VjdGlvbiA9ICdtYWluJzsKICAgICAgICAgICAgICAgICRvdXQgPSAkdGhpcy0+X3dyaXRlX2luaV9zZWN0aW9uKCRzZWN0aW9uKSAuICRvdXQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHBhc3MgdHdvLCBuZXN0ZWQgYXJyYXlzCiAgICAgICAgICAgIGZvcmVhY2goICRhcnIgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdmFsKSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYoIGFycmF5X2tleXMoJHZhbCkgIT09IHJhbmdlKDAsIGNvdW50KCR2YWwpIC0gMSkgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gYXNzb2NpYXRpdmUgY2hpbGQgYXJyYXkKICAgICAgICAgICAgICAgICAgICAkdG1wID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZiggJHNlY3Rpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAkc2VjdGlvbi4iIDogJGtleSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gJGtleTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkdmFsLCR0bXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGNoaWxkIGFycmF5CiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkdmFsLCRrZXkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiggISRzZWN0aW9uICkgJHNlY3Rpb24gPSAnbWFpbic7CiAgICAgICAgICAgIGZvciggJGkgPSAwLCAkbiA9IGNvdW50KCRhcnIpOyAkaSA8ICRuOyAkaSsrICkgewogICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV92YWwoJHNlY3Rpb24uJ1tdJywkYXJyWyRpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKCRkYXRhKQogICAgewogICAgICAgICRja3N1bSA9ICR0aGlzLT5fY2FsY19jaGVja3N1bSgkZGF0YSk7CiAgICAgICAgJG91dCA9ICR0aGlzLT5fd3JpdGVfZmlsZV9oZWFkZXIoJGNrc3VtKTsKICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX2FycmF5KCRkYXRhKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGRhdGEsJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICBpZiggISRmaWxlbmFtZSApICRmaWxlbmFtZSA9ICR0aGlzLT5fZmlsZW5hbWU7CiAgICAgICAgaWYoICEkZmlsZW5hbWUgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ05vIGZpbGVuYW1lIHNwZWNpZmllZCB0byBpbnN0YW5jZSBvZiAnLl9fQ0xBU1NfXyk7CiAgICAgICAgJGRpciA9IGRpcm5hbWUoJHRoaXMtPl9maWxlbmFtZSk7CiAgICAgICAgaWYoIChpc19maWxlKCRmaWxlbmFtZSkgJiYgIWlzX3dyaXRhYmxlKCR0aGlzLT5fZmlsZW5hbWUpKSB8fCAhaXNfd3JpdGFibGUoJGRpcikgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiTm8gcGVybWlzc2lvbiB0byB3cml0ZSB0byAiLiR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIH0KCiAgICAgICAgJGZoID0gZm9wZW4oJGZpbGVuYW1lLCd3Jyk7CiAgICAgICAgZndyaXRlKCRmaCwkdGhpcy0+Z2VuZXJhdGUoKSk7CiAgICAgICAgZmNsb3NlKCRmaCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoJGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53cml0ZSgkZGF0YSk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9jb252ZXJ0X3ZhbHVlcygkZGF0YSkKICAgIHsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkZGF0YSBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdmFsKSApIHsKICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGlzdCgkdHlwZSwkdmFsKSA9IGV4cGxvZGUoJ3w6fCcsJHZhbCwyKTsKICAgICAgICAgICAgICAgIHN3aXRjaCggJHR5cGUgKSB7CiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGJvb2wpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdpbnRlZ2VyJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGludCkgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3JlYWwnOgogICAgICAgICAgICAgICAgY2FzZSAnZmxvYXQnOgogICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGZsb2F0KSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChzdHJpbmcpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50cywkdmVyaWZ5ID0gVFJVRSkKICAgIHsKICAgICAgICBpZiggJHZlcmlmeSApIGRpZSgnb29wcycpOwogICAgICAgIC8vIGdldCB0aGUgZmlyc3QgbGluZQogICAgICAgICRmaXJzdF9saW5lID0gZXhwbG9kZSgiXG4iLCRjb250ZW50cywyKVswXTsKICAgICAgICAkZmlsZV9zaWcgPSBudWxsOwogICAgICAgICRtYXRjaGVzID0gbnVsbDsKICAgICAgICBwcmVnX21hdGNoKCcvXHMrU0lHPShbMC05QS1aYS16XXszMn0pXHMrLycsJGZpcnN0X2xpbmUsJG1hdGNoZXMpOwogICAgICAgIGlmKCAkbWF0Y2hlc1sxXSApICRmaWxlX3NpZyA9ICRtYXRjaGVzWzFdOwogICAgICAgIHVuc2V0KCRtYXRjaGVzKTsKCiAgICAgICAgJHJhd19kYXRhID0gcGFyc2VfaW5pX3N0cmluZygkY29udGVudHMsVFJVRSk7CgogICAgICAgIC8vIHdlIGhhdmUgYSBmbGF0IGxpc3Qgb2Ygc2VjdGlvbnMsIGVhY2ggc2VjdGlvbiBpcyBhbiBhcnJheQogICAgICAgIC8vIHRoZSB0b3Agc2VjdGlvbiBzaG91bGQgbm90IGhhdmUgYW55IG5lc3RpbmcKICAgICAgICAkYWxsX2tleXMgPSBhcnJheV9rZXlzKCRyYXdfZGF0YSk7CiAgICAgICAgJGtleTAgPSAkYWxsX2tleXNbMF07CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnIDogJywka2V5MCk7CiAgICAgICAgaWYoICRwYXJ0c1swXSAhPSAka2V5MCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBmaWxlIGZvcm1hdCwgZm91bmQgbmVzdGVkIGNoaWxkIGFzIGZpcnN0IGVsZW1lbnQnKTsKCiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJHJhd19kYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnIDogJywka2V5KTsKICAgICAgICAgICAgLy9pZiggJHBhcnRzWzBdICE9ICRrZXkwICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIGZpbGUgZm9ybWF0Jyk7CgogICAgICAgICAgICBpZiggY291bnQoJHBhcnRzKSA9PSAxICkgewogICAgICAgICAgICAgICAgJG91dFska2V5XSA9ICR0aGlzLT5fY29udmVydF92YWx1ZXMoJHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkdG1wID0mICRvdXQ7CiAgICAgICAgICAgICAgICAkaSA9IG51bGw7CiAgICAgICAgICAgICAgICBmb3IoICRpID0gMSwgJG4gPSBjb3VudCgkcGFydHMpIC0gMTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAkcGFydCA9ICRwYXJ0c1skaV07CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdG1wWyRwYXJ0XSkgKSAkdG1wWyRwYXJ0XSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgJHRtcCA9JiAkdG1wWyRwYXJ0XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0bXBbJHBhcnRzWyRpXV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiggY291bnQoJG91dCkgPT0gMSAmJiBpc3NldCgkb3V0WyRrZXkwXSkgKSB7CiAgICAgICAgICAgICRvdXQgPSAkb3V0WyRrZXkwXTsKICAgICAgICB9CgogICAgICAgIGlmKCAkdmVyaWZ5ICkgewogICAgICAgICAgICAkY2FsY19zaWcgPSAkdGhpcy0+X2NhbGNfY2hlY2tzdW0oJG91dCk7CiAgICAgICAgICAgIGlmKCAkZmlsZV9zaWcgIT0gJGNhbGNfc2lnICkgdGhyb3cgbmV3IFxSYW5nZUV4Y2VwdGlvbigiSU5JIEZpbGUgc2lnbmF0dXJlIGRpZCBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiB0aGUgZmlsZSBjb250ZW50cyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkZmlsZW5hbWUgPSBudWxsLCR2ZXJpZnkgPSBUUlVFKQogICAgewogICAgICAgIGlmKCAkZmlsZW5hbWUgKSAkdGhpcy0+c2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSk7CgogICAgICAgIGlmKCAhaXNfZmlsZSgkdGhpcy0+X2ZpbGVuYW1lKSB8fCAhaXNfcmVhZGFibGUoJHRoaXMtPl9maWxlbmFtZSkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigiRmlsZSAlcyBjb3VsZCBub3QgYmUgcmVhZCIsJHRoaXMtPl9maWxlbmFtZSkpOwogICAgICAgICRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2UoJGNvbnRlbnRzLCR2ZXJpZnkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/phar/lib/class.simple_test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90XHBoYXI7CgphYnN0cmFjdCBjbGFzcyB0ZXN0X2Jhc2UKewogICAgcHJvdGVjdGVkICRfbGFiZWw7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9sYWJlbCgpIHsgcmV0dXJuICR0aGlzLT5fbGFiZWw7IH0KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk7Cn0KCmNsYXNzIGZhbHNlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX3ZhbDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X3ZhbCA9IChib29sKSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl92YWwgPT0gRkFMU0U7CiAgICB9Cn0KCmNsYXNzIHRydWVfdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfdmFsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fdmFsID0gKGJvb2wpICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X3ZhbCA9PSBUUlVFOwogICAgfQp9CgpjbGFzcyBleHRlbnNpb25fdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfZXh0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJGV4dCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fZXh0ID0gdHJpbSgkZXh0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGV4dGVuc2lvbl9sb2FkZWQoJHRoaXMtPl9leHQpOwogICAgfQp9CgpjbGFzcyBtaW52ZXJzaW9uX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX21pbnZhbDsKICAgIHByaXZhdGUgJF92YWw7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkbWludmFsLCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X21pbnZhbCA9IHRyaW0oJG1pbnZhbCk7CiAgICAgICAgJHRoaXMtPl92YWwgPSB0cmltKCR2YWwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gKHZlcnNpb25fY29tcGFyZSgkdGhpcy0+X3ZhbCwkdGhpcy0+X21pbnZhbCkgPj0gMCk7CiAgICB9Cn0KCmNsYXNzIGZ1bmN0aW9uX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2ZuOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJGZuKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9mbiA9IHRyaW0oJGZuKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygkdGhpcy0+X2ZuKTsKICAgIH0KfQoKY2xhc3Mgc2ltcGxlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2ZuOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsY2FsbGFibGUgJGZuKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9mbiA9ICRmbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgJHRtcCA9ICR0aGlzLT5fZm47CiAgICAgICAgcmV0dXJuICR0bXAoKTsKICAgIH0KfQoKY2xhc3MgZGlyX3dyaXRhYmxlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2RpcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRkaXIpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X2RpciA9IHRyaW0oJGRpcik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiAoaXNfZGlyKCR0aGlzLT5fZGlyKSAmJiBpc193cml0YWJsZSgkdGhpcy0+X2RpcikpOwogICAgfQp9CgpjbGFzcyBkaXJfZW1wdHlfdGVzdCBleHRlbmRzIHRlc3RfYmFzZQp7CiAgICBwcml2YXRlICRfZGlyOwogICAgcHJpdmF0ZSAkX2V4Y2x1ZGVzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJGRpciwkZXhjbHVkZXMgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSAkbGFiZWw7CiAgICAgICAgJHRoaXMtPl9kaXIgPSAkZGlyOwogICAgICAgICR0aGlzLT5fZXhjbHVkZXMgPSAkZXhjbHVkZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgICRmaWxlczEgPSBnbG9iKCR0aGlzLT5fZGlyLicvLj8/KicpOwogICAgICAgICRmaWxlczIgPSBnbG9iKCR0aGlzLT5fZGlyLicvKicpOwogICAgICAgICRmaWxlcyA9IGFycmF5X21lcmdlKCRmaWxlczEsJGZpbGVzMik7CiAgICAgICAgZm9yZWFjaCggJGZpbGVzIGFzICRmaWxlICkgewogICAgICAgICAgICAkYm4gPSBzdHJfcmVwbGFjZSgkdGhpcy0+X2Rpci4nLycsJycsJGZpbGUpOwogICAgICAgICAgICBvdXRwdXQoJ3Rlc3Q6ICcuJGJuKTsKICAgICAgICAgICAgaWYoICFjb3VudCgkdGhpcy0+X2V4Y2x1ZGVzKSB8fCAhaW5fYXJyYXkoJGJuLCR0aGlzLT5fZXhjbHVkZXMpICkgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/phar/lib/db_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90XHBoYXI7CgpmdW5jdGlvbiB0ZXN0X2RiY29uZmlnKCRkYmNvbmZpZykKewogICAgaWYoICFpc19hcnJheSgkZGJjb25maWcpICkgcmV0dXJuIEZBTFNFOwogICAgJGtleXMgPSBhcnJheSgnZGJtcycsJ2RiX2hvc3RuYW1lJywnZGJfdXNlcm5hbWUnLCdkYl9wYXNzd29yZCcsJ2RiX25hbWUnKTsKICAgICRrZXlzMiA9IGFycmF5X2tleXMoJGRiY29uZmlnKTsKICAgIGZvcmVhY2goICRrZXlzIGFzICRrZXkgKSB7CiAgICAgICAgaWYoICFpbl9hcnJheSgka2V5LCRrZXlzMikgKSByZXR1cm4gRkFMU0U7CiAgICB9CiAgICByZXR1cm4gVFJVRTsKfQoKZnVuY3Rpb24gdGVzdF9kYl9jb25uZWN0KCRkYmNvbmZpZykKewogICAgaWYoICF0ZXN0X2RiY29uZmlnKCRkYmNvbmZpZykgKSByZXR1cm4gRkFMU0U7CgogICAgJG91dCA9IG51bGw7CiAgICBzd2l0Y2goICRkYmNvbmZpZ1snZGJtcyddICkgewogICAgY2FzZSAnbXlzcWwnOgogICAgICAgIGlmKCAhZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgJG91dCA9IG15c3FsX2Nvbm5lY3QoJGRiY29uZmlnWydkYl9ob3N0bmFtZSddLCRkYmNvbmZpZ1snZGJfdXNlcm5hbWUnXSwkZGJjb25maWdbJ2RiX3Bhc3N3b3JkJ10sJGRiY29uZmlnWydkYl9uYW1lJ10pOwogICAgICAgIGlmKCAhJG91dCApIHJldHVybiBGQUxTRTsKICAgICAgICBicmVhazsKCiAgICBjYXNlICdteXNxbGknOgogICAgICAgIGlmKCAhZnVuY3Rpb25fZXhpc3RzKCdteXNxbGlfY29ubmVjdCcpICkgcmV0dXJuIEZBTFNFOwogICAgICAgICRvdXQgPSBteXNxbGlfY29ubmVjdCgkZGJjb25maWdbJ2RiX2hvc3RuYW1lJ10sJGRiY29uZmlnWydkYl91c2VybmFtZSddLCRkYmNvbmZpZ1snZGJfcGFzc3dvcmQnXSwkZGJjb25maWdbJ2RiX25hbWUnXSk7CiAgICAgICAgaWYoICEkb3V0ICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIHJldHVybiAkb3V0Owp9CgpmdW5jdGlvbiB0ZXN0X2RiX2VtcHR5KCRoYW5kbGUsJGRiY29uZmlnKQp7CiAgICBpZiggIXRlc3RfZGJjb25maWcoJGRiY29uZmlnKSApIHJldHVybiBGQUxTRTsKCiAgICAkb3V0ID0gbnVsbDsKICAgICRzcWwgPSAnU0hPVyBUQUJMRVMnOwogICAgc3dpdGNoKCAkZGJjb25maWdbJ2RibXMnXSApIHsKICAgIGNhc2UgJ215c3FsJzoKICAgICAgICBpZiggKCRyZXN1bHQgPSBteXNxbGlfcXVlcnkoJGhhbmRsZSwkc3FsKSkgKSB7CiAgICAgICAgICAgICRudGFibGVzID0gbXlzcWxpX251bV9yb3dzKCRyZXN1bHQpOwogICAgICAgICAgICBpZiggJG50YWJsZXMgPiAwICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGNhc2UgJ215c3FsaSc6CiAgICAgICAgaWYoICgkcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRoYW5kbGUsJHNxbCkpICkgewogICAgICAgICAgICAkbnRhYmxlcyA9IG15c3FsaV9udW1fcm93cygkcmVzdWx0KTsKICAgICAgICAgICAgaWYoICRudGFibGVzID4gMCApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKCiAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KfQoKZnVuY3Rpb24gZGJfaW1wb3J0KCRkYmNvbmZpZywkZGJmaWxlKQp7CiAgICAvLyB0aGlzIHVzZXMgc2hlbGwgY29tbWFuZHMuCiAgICAkY29tbWFuZD0ibXlzcWwgLS1ob3N0PXskZGJjb25maWdbJ2RiX2hvc3RuYW1lJ119IC0tdXNlcj17JGRiY29uZmlnWydkYl91c2VybmFtZSddfSAtLXBhc3N3b3JkPXskZGJjb25maWdbJ2RiX3Bhc3N3b3JkJ119IHskZGJjb25maWdbJ2RiX25hbWUnXX0gPCB7JGRiZmlsZX0iOwogICAgZXhlYygkY29tbWFuZCwkb3V0cHV0PWFycmF5KCksJHdvcmtlZCk7CiAgICBpZiggJHdvcmtlZCA9PSAwICkgcmV0dXJuIFRSVUU7CiAgICBwcmludF9yKCRvdXRwdXQpOyBkaWUoKTsgLy8gZGVidWcuCiAgICByZXR1cm4gRkFMU0U7Cn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/phar/lib/utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmluY2x1ZGVfb25jZShfX0RJUl9fLicvY2xhc3Muc2VjdXJlX2luaV9maWxlLnBocCcpOwoKZnVuY3Rpb24gZW5kc3dpdGgoICRzdHIsICRzdWIgKQp7CglyZXR1cm4gKCBzdWJzdHIoICRzdHIsIHN0cmxlbiggJHN0ciApIC0gc3RybGVuKCAkc3ViICkgKSA9PSAkc3ViICk7Cn0KCmZ1bmN0aW9uIHN0YXJ0c3dpdGgoICRzdHIsICRzdWIgKQp7CglyZXR1cm4gKCBzdWJzdHIoICRzdHIsIDAsIHN0cmxlbiggJHN1YiApICkgPT0gJHN1YiApOwp9CgpmdW5jdGlvbiBjbHMoKQp7CiAgICBwcmludCBjaHIoMjcpIC4gIlsySiIgLiBjaHIoMjcpIC4gIls7SCI7Cn0KCmZ1bmN0aW9uIG91dHB1dCgkc3RyLCRuZXdsaW5lID0gVFJVRSkKewogICAgJHN0ciA9IHRyaW0oJHN0cik7CiAgICBpZiggISRzdHIgKSByZXR1cm47CiAgICBpZiggJG5ld2xpbmUgKSB7CiAgICAgICAgaWYoICFlbmRzd2l0aCgkc3RyLCJcbiIpICkgJHN0ciAuPSAiXG4iOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYoICFlbmRzd2l0aCgkc3RyLCcgJykgKSAkc3RyIC49ICcgJzsKICAgIH0KICAgIGVjaG8gJHN0cjsKfQoKZnVuY3Rpb24gZXJyb3IoJG1zZywkcHJlZml4ID0gVFJVRSwkbmV3bGluZSA9IFRSVUUpCnsKICAgICRtc2cgPSAoc3RyaW5nKSRtc2c7CiAgICBpZiggISRtc2cgKSByZXR1cm47CgogICAgaWYoICRwcmVmaXggKSAkbXNnID0gIkVSUk9SOiAiLiRtc2c7CiAgICBpZiggJG5ld2xpbmUgJiYgIWVuZHN3aXRoKCRtc2csIlxuIikgKSAkbXNnIC49ICJcbiI7CiAgICBmd3JpdGUoU1RERVJSLCRtc2cpOwp9CgpmdW5jdGlvbiBuZXdsaW5lKCkKewogICAgZWNobyAiXG4iOwp9CgpmdW5jdGlvbiBhc2tfYm9vbCgkcHJvbXB0LCRhY2NlcHQgPSAtMSwkYXV0b3Byb21wdCA9IFRSVUUpCnsKICAgIHdoaWxlKCAxICkgewogICAgICAgIG5ld2xpbmUoKTsKICAgICAgICBpZiggJGF1dG9wcm9tcHQgKSAkcHJvbXB0IC49ICcgW1kvbl06JzsKICAgICAgICBvdXRwdXQoJHByb21wdCxGQUxTRSk7CiAgICAgICAgJGluID0gZmdldHMoU1RESU4pOwogICAgICAgICRpbiA9IHRyaW0oJGluKTsKICAgICAgICBpZiggISRpbiApIHsKICAgICAgICAgICAgaWYoICRhY2NlcHQgPT0gRkFMU0UgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIGlmKCAkYWNjZXB0ID09IFRSVUUgKSByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCAkaW4gPT0gJ2V4aXQnIHx8ICRpbiA9PSAncXVpdCcgKSBleGl0OwogICAgICAgICAgICAkaW4gPSBzdHJ0b2xvd2VyKCRpbik7CiAgICAgICAgICAgIGlmKCAkaW4gPT0gJzEnIHx8ICRpbiA9PSAneScgKSByZXR1cm4gVFJVRTsKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KICAgIH0KfQoKZnVuY3Rpb24gYXNrX29wdGlvbigkcHJvbXB0LCRvcHRpb25zKQp7CiAgICB3aGlsZSggMSApIHsKICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgb3V0cHV0KCRwcm9tcHQsRkFMU0UpOwogICAgICAgICRpbiA9IHRyaW0oZmdldHMoU1RESU4pKTsKICAgICAgICBpZiggJGluICYmIGluX2FycmF5KCRpbixhcnJheSgncScsJ3F1aXQnLCdleGl0JykpICkgZXhpdDsKICAgICAgICBpZiggJGluICYmIGluX2FycmF5KCRpbiwkb3B0aW9ucykgKSByZXR1cm4gJGluOwogICAgfQogICAgZXJyb3IoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIG9wdGlvbicpOwp9CgpmdW5jdGlvbiBhc2tfc3RyaW5nX3JlcXVpcmVkKCRwcm9tcHQsJGVycnN0ciA9IG51bGwpCnsKICAgIHdoaWxlKCAxICkgewogICAgICAgIG5ld2xpbmUoKTsKICAgICAgICBvdXRwdXQoJHByb21wdCxGQUxTRSk7CiAgICAgICAgJHN0ciA9IGZnZXRzKFNURElOKTsKICAgICAgICAkc3RyID0gdHJpbSgkc3RyKTsKICAgICAgICBpZiggISRzdHIgKSB7CiAgICAgICAgICAgIGlmKCAhJGVycm9yc3RyICkgJGVycm9yc3RyID0gJ0ludmFsaWQgUmVzcG9uc2UnOwogICAgICAgICAgICBlcnJvcigkZXJyb3JzdHIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmKCAkc3RyID09ICdxJyB8fCAkc3RyID09ICdleGl0JyB8fCAkc3RyID09ICdxdWl0JyApIGV4aXQ7CiAgICAgICAgICAgIHJldHVybiAkc3RyOwogICAgICAgIH0KICAgIH0KfQoKLy8vLy8vLy8vLy8vLy8vLy8vLwoKZnVuY3Rpb24gaXNfY2dzbmFwc2hvdCgkZmlsZW5hbWUpCnsKICAgICRmaWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIGlmKCAhJGZpbGVuYW1lICkgcmV0dXJuIEZBTFNFOwoKICAgICRsb3dlciA9IHN0cnRvbG93ZXIoJGZpbGVuYW1lKTsKICAgIGlmKCAhZW5kc3dpdGgoJGZpbGVuYW1lLCcuemlwJykgKSBSRVRVUk4gRkFMU0U7CgogICAgJGFyY2ggPSBuZXcgXFppcEFyY2hpdmU7CiAgICBpZiggKCRyZXMgPSAkYXJjaC0+b3BlbigkZmlsZW5hbWUpKSAhPT0gVFJVRSApIHsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgJGluaV90ZXh0ID0gJGFyY2gtPmdldEZyb21OYW1lKCd0bXAvLmNnc25hcHNob3QnKTsKICAgIGlmKCAhJGluaV90ZXh0ICkgcmV0dXJuIEZBTFNFOwoKICAgICRkdW1wZmlsZSA9ICRhcmNoLT5nZXRGcm9tTmFtZSgndG1wL19fbXlzcWxkdW1wLnNxbCcpOwogICAgaWYoICEkZHVtcGZpbGUgKSByZXR1cm4gRkFMU0U7CgogICAgdHJ5IHsKICAgICAgICAkaW5pID0gbmV3IFxDR1NuYXBzaG90XHBoYXJcc2VjdXJlX2luaV9maWxlKCk7CiAgICAgICAgJGluaS0+cGFyc2UoJGluaV90ZXh0LGZhbHNlKTsKICAgIH0KICAgIGNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgICAgIGRpZSgkZS0+R2V0TWVzc2FnZSgpKTsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CiAgICByZXR1cm4gVFJVRTsKfQoKZnVuY3Rpb24gY29weV9hcmNoZmlsZV90b190bXAoXFppcEFyY2hpdmUgJGFyY2gsJG5hbWUpCnsKICAgICRuYW1lID0gdHJpbSgkbmFtZSk7CiAgICBpZiggISRuYW1lICkgcmV0dXJuOwoKICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICBpZiggISRkaXIgKSB7CiAgICAgICAgZXJyb3IoJ0NvdWxkIG5vdCBnZXQgc3lzdGVtIHRlbXBvcmFyeSBkaXJlY3RvcnkuLi4gZXhpdGluZycpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgJGZuID0gdGVtcG5hbSgkZGlyLCdjZ3MnKTsKICAgICRkYXRhID0gJGFyY2gtPmdldEZyb21OYW1lKCRuYW1lKTsKICAgIGlmKCAkZGF0YSApIHsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZm4sJGRhdGEpOwogICAgICAgIHJldHVybiAkZm47CiAgICB9Cn0KCmZ1bmN0aW9uIHdyaXRlX2NvbmZpZ19waHAoJGZpbGVuYW1lLCRkYXRhKQp7CiAgICAkbm93ID0gc3RyZnRpbWUoJyV4Jyk7CiAgICAkb3V0ID0gIjw/cGhwXG4vLyBHZW5lcmF0ZWQgYnkgQ0dTbmFwc2hvdC1SZXN0b3JlIG9uIHskbm93fVxuIjsKICAgICRmbXQgPSAiXCRjb25maWdbJyVzJ10gPSAnJXMnO1xuIjsKICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAkb3V0IC49IHNwcmludGYoJGZtdCwka2V5LCR2YWwpOwogICAgfQogICAgJG91dCAuPSAiXG4iOwogICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCRvdXQpOwp9]]></data>
	</file>
	<file>
	  <filename>/phar/www.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKPz4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+Q0dTbmFwc2hvdCAtIFdlYiBJbnRlcmZhY2UgVW5zdXBwb3J0ZWQ8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5DR1NuYXBzaG90IC1XZWIgSW50ZXJmYWNlIFVuc3VwcG9ydGVkITwvaDE+CiAgICA8aDMgc3R5bGU9ImNvbG9yOiByZWQ7Ij5Tb3JyeSE8L2gzPgogICAgPHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij5UaGUgQ0dTbmFwc2hvdCByZXN0b3JlIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IGEgd2ViIGludGVyZmFjZSBhdCB0aGlzIHRpbWUuPC9wPgoKICAgIDxwPllvdSBtYXkgYmUgYWJsZSB0byBzcG9uc29yIGl0IHRob3VnaC4uLi4gcGxlYXNlIGNvbnRhY3QgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAZ21haWwuY29tIj5jYWxndXkxMDAwQGdtYWlsLmNvbTwvYT4gdG8gc2VlIGFib3V0IHNwb25zb3JpbmcgYSB3ZWIgYmFzZWQgcmVzdG9yZSBwYWNrYWdlLjwvcD4KICA8Ym9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/defaultadmin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9ImluZm9ybWF0aW9uIj57JG1vZC0+TGFuZygnaW5mb19jcmVhdGVfc25hcHNob3QnKX08L2Rpdj4KCjxkaXYgY2xhc3M9Indhcm5pbmciPnskbW9kLT5MYW5nKCd3YXJuX2NyZWF0ZV9zbmFwc2hvdCcpfTwvZGl2Pgo8ZmllbGRzZXQ+CiAgPGxlZ2VuZD57JG1vZC0+TGFuZygnbGVnZW5kX3NuYXBzaG90X2Rpc3Bvc2l0aW9uJyl9OjwvbGVnZW5kPgogIDxkaXYgY2xhc3M9ImNfZnVsbCI+CiAgICAgPGRpdiBjbGFzcz0iZ3JpZF8yIHRleHQtcmlnaHQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ieyRhY3Rpb25pZH1kaXNwb3NlIiB2YWx1ZT0iZG93bmxvYWQiIHtpZiAkcHJlZl9kaXNwb3NlPT0nZG93bmxvYWQnfWNoZWNrZWR7L2lmfS8+CiAgICAgPC9kaXY+CiAgICAgPGRpdiBjbGFzcz0iZ3JpZF8xMCI+CiAgICAgICAgeyRtb2QtPkxhbmcoJ2Rpc3Bvc2VfZG93bmxvYWQnKX0KICAgICA8L2Rpdj4KICAgICA8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImNfZnVsbCI+CiAgICAgPGRpdiBjbGFzcz0iZ3JpZF8yIHRleHQtcmlnaHQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0ieyRhY3Rpb25pZH1kaXNwb3NlIiB2YWx1ZT0iZW1haWwxIiB7aWYgJHByZWZfZGlzcG9zZT09J2VtYWlsMSd9Y2hlY2tlZHsvaWZ9Lz4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGNsYXNzPSJncmlkXzEwIj4KICAgICAgICB7JG1vZC0+TGFuZygnZGlzcG9zZV9lbWFpbCcpfQoJPGJyLz4KCXskbW9kLT5MYW5nKCdhZGRyZXNzJyl9OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1lbWFpbDEiIHZhbHVlPSJ7JGFkbWluX2VtYWlsfSIvPgogICAgIDwvZGl2PgogICAgIDxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+CiAgPC9kaXY+CjwvZmllbGRzZXQ+CgogIDxkaXYgY2xhc3M9ImNfZnVsbCI+CiAgICAgPGRpdiBjbGFzcz0iZ3JpZF8yIHRleHQtcmlnaHQiPiZuYnNwOzwvZGl2PgogICAgIDxkaXYgY2xhc3M9ImdyaWRfMTAiPgogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c25hcHNob3Rub3ciIHZhbHVlPSJ7JG1vZC0+TGFuZygnc25hcHNob3Rub3cnKX0iLz4KCXtpZiBpc3NldCgkcmVzdG9yZV91cmwpfQoJICA8YSBocmVmPSJ7JHJlc3RvcmVfdXJsfSI+eyRtb2QtPkxhbmcoJ2dldF9yZXN0b3JlX3NjcmlwdCcpfTwvYT4KCXsvaWZ9CiAgICAgPC9kaXY+CiAgICAgPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KICA8L2Rpdj4KeyRmb3JtZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/dispose_email1.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SGVsbG86PGJyLz48YnIvPgoKWW91ciBDR1NuYXBzaG90IGhhcyBiZWVuIGdlbmVyYXRlZCBhbmQgaXMgdGVtcG9yYXJpbHkgc3RvcmVkIG9uIHRoZSBDTVNNUyBzZXJ2ZXIuICBZb3UgY2FuIGRvd25sb2FkIGl0IGJ5IGNsaWNraW5nIDxhIGhyZWY9Inskc25hcHNob3RfdXJsfSI+aGVyZTwvYT4uPGJyLz48YnIvPgoKSWYgeW91IGNhbm5ub3QgY2xpY2sgb24gdGhlIGxpbmsgYWJvdmUsIHBsZWFzZSBuYXZpZ2F0ZSBpbiB5b3VyIGJyb3dzZXIgdG86IHskc25hcHNob3RfdXJsfSA8YnIvPjxici8+CgpQbGVhc2UgcmV0cmlldmUgdGhpcyBmaWxlIHNvb24uICBJdCB3aWxsIGJlIGRlbGV0ZWQgd2hlbmV2ZXIgdGhlIENNU01TIHN5c3RlbSBjYWNoZSBpcyBjbGVhcmVkLiAge2lmICRhdXRvX2NsZWFyX2NhY2hlX2FnZX1vciBmb3Igb25seSB7JGF1dG9fY2xlYXJfY2FjaGVfYWdlfSBkYXlzLCB3aGljaGV2ZXIgaXMgc29vbmVyLnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/readme.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PT09IENHU05BUFNIT1QgUkVBRE1FID09PQpUaGlzIHppcCBmaWxlIHdhcyBjcmVhdGVkIHVzaW5nIHskbW9kdWxlX25hbWV9IHskbW9kdWxlX3ZlcnNpb259IG9uIHskc21hcnR5Lm5vd3xkYXRlX2Zvcm1hdDonJXgnfQpUaGUgemlwIGZpbGUgY29udGFpbnMgYSBzbmFwc2hvdCBvZiB0aGUgZGF0YWJhc2UsIGFuZCBhIHNuYXBzaG90IG9mIGFsbCByZWxldmFudCBmaWxlcyAoZXhjbHVkaW5nIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMpIG9mIHlvdXIgQ01TTVMgd2Vic2l0ZS4KClRoaXMgemlwIGZpbGUgaXMgdXNlZnVsIGZvciBjcmVhdGluZyBhIHNuYXBzaG90IG9mIGEgc2l0ZSBiZWZvcmUgdXBncmFkaW5nLCBvciB0byBtYWtlIG1vdmluZyBhIHdlYnNpdGUgZWFzaWVyLgoKSW50ZXJhY3RpdmUgUmVzdG9yZSBJbnN0cnVjdGlvbnMKLS0tLS0KSWYgeW91IGhhdmUgc2hlbGwgYWNjZXNzIGludG8geW91ciB3ZWIgYWNjb3VudCAocmVjb21tZW5kZWQpIHRoZW46CjEuICBVcGxvYWQgdGhpcyB6aXAgZmlsZSBpbiBpdHMgZW50aXJldHkgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBvbiB5b3VyIHdlYiBzZXJ2ZXIuCjIuICBDb25uZWN0IHZpYSBzaGVsbCAoc3NoIG9yIG90aGVyKSB0byB5b3VyIHdlYiBhY2NvdW50IGFuZCBuYXZpZ2F0ZSB0byB5b3VyIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4KMy4gIEV4ZWN1dGU6IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKICAgIHBocCB0bXAvcmVzdG9yZS5waHAKCiAgICBZb3Ugd2lsbCBiZSBpbmVyYWN0aXZlbHkgZ3VpZGVkIHRocm91Z2ggdGhlIHJlc3RvcmUgcHJvY2Vzcy4gYW5kIHByb21wdGVkIGZvciB0aGUgbmFtZSBvZiB0aGUgQ0dTbmFwc2hvdCBmaWxlLCBhbmQgZGF0YWJhc2UgaW5mb3JtYXRpb24uCiAgICBOb3RlOiAgT25seSBzbmFwc2hvdHMgZ2VuZXJhdGVkIGJ5IENHU25hcHNob3QgY2FuIGJlIHVzZWQgYnkgdGhpcyBzY3JpcHQuCgpNYW51YWwgUmVzdG9yZSBJbnN0cnVjdGlvbnMKLS0tLS0KMS4gIFVwbG9hZCB0aGlzIHppcCBmaWxlIGluIGl0cyBlbnRpcmV0eSB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IG9uIHlvdXIgd2ViIHNlcnZlci4KMi4gIFVzaW5nIHlvdXIgd2ViIGFjY291bnRzIGZpbGUgbWFuYWdlbWVudCBzeXN0ZW0gZXhwYW5kIHRoaXMgemlwIGZpbGUKMy4gIEltcG9ydCB0aGUgdG1wL19fbXlzcWxkdW1wLnNxbCBmaWxlIGludG8geW91ciBkZXN0aW5hdGlvbiBkYXRhYmFzZSB1c2luZyBwaHBteWFkbWluIG9yIGFub3RoZXIgc2ltaWxhciB0b29sCjQuICBBZGp1c3QgdGhlIGNvbmZpZy5waHAgZmlsZSB0byBjb250YWluIHRoZSBkYXRhYmFzZSBjcmVkZW50aWFscwo1LiAgVGVzdCB0aGUgbmV3IHdlYnNpdGUKNiAgIERlbGV0ZSB0aGUgb3JpZ2luYWwgemlwIGZpbGUgb25jZSBjb21wbGV0ZS4KNy4gIERlbGV0ZSB0aGUgdG1wLy5jZ3NuYXBzaG90IGFuZCB0bXAvX19teXNxbGR1bXAuc3FsIGZpbGVzCgpFcnJvcnMgeW91IG1heSBuZWVkIHRvIGNvcnJlY3QKLS0tLS0KMS4gIFBlcm1pc3Npb25zCiAgICBEZXBlbmRpbmcgdXBvbiB5b3VyIHNlcnZlciBjb25maWd1cmF0aW9uLCB5b3UgbWF5IG5lZWQgdG8gYWRqdXN0IHBlcm1pc3Npb25zIG9uIHZhcmlvdXMgZGlyZWN0b3JpZXMgdG8gYWxsb3cgeW91IHRvIHdvcmsgd2l0aCBmaWxlIGFuZCBtb2R1bGVzIHZpYSBGVFAgb3IgdmlhIHRoZSBDTVNNUyB3ZWIgaW50ZXJmYWNlLgoKMi4gIFBhdGhzIGluIHRoZSBjb25maWcucGhwCiAgICBNb3N0IG5ldyBpbnN0YWxscyBvZiBDTVNNUyBkbyBub3QgY29udGFpbiBwYXRocyBpbiB0aGUgY29uZmlnLnBocCwgIHRoZXJlZm9yZSB0aGlzIHNjcmlwdCBkb2VzIG5vdCBhdHRlbXB0IHRvIHJlcGFpciBhbnkgcGF0aHMgaW4gdGhlIGNvbmZpZy5waHAuCiAgICBJZiB5b3UgZG8gaGF2ZSBwYXRocyBhbmQvb3IgVVJMJ3MgaW4gdmFyaW91cyB2YXJpYWJsZXMgaW4gdGhlIGNvbmZpZy5waHAgeW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGVtLgoKMy4gIC5odGFjY2VzcyBmaWxlcwogICAgSWYgeW91IGFyZSB1c2luZyBtb2RfcmV3cml0ZSwgb3IgaGF2ZSBvdGhlciBVUkwgcmV3cml0aW5nIHJ1bGVzIGluIHlvdXIgLmh0YWNjZXNzIHlvdSBtYXkgbmVlZCB0byBtYWtlIGFkanVzdG1lbnRzIGluIHRoaXMgZmlsZS4KCjQuICBwYXRocyBhbmQgcHJlZmVyZW5jZXMgaW4gYWRkb25zCiAgICBTb21lIG1vZHVsZXMgbWF5IHN0b3JlIHNlcnZlciBwYXRocyBpbiBwcmVmZXJlbmNlcyBvciBvdGhlciBsb2NhdGlvbnMuICBZb3UgbWF5IG5lZWQgdG8gcmV2aWV3IHRoZXNlIHBhdGhzIGFzIHBhcnQgb2YgeW91ciB0ZXN0aW5nIHByb2Nlc3MuCgpTZWN1cml0eSBjb25jZXJucwotLS0tLQoxLiAgUGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBkZWxldGUgdGhlIENHU25hcHNob3QgZmlsZSBmcm9tIHlvdXIgc2VydmVyIG9uY2UgdGhlIG5ldyBzaXRlIGlzIHdvcmtpbmcgd2VsbC4KMi4gIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgZGVsZXRlIHRoZSB0bXAvX19teXNxbGR1bXAuc3FsIGZpbGUgZnJvbSB5b3VyIHNlcnZlciBvbmNlIHRoZSBuZXcgc2l0ZSBpcyB3b3JraW5nIHdlbGwuCg==]]></data>
	</file>
</module>
