<?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.3.1</version>
    <mincmsversion>2.1.6</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgaXMgYSB1dGlsaXR5IG1vZHVsZSB0byBhbGxvdyBhdXRob3JpemVkIHBlcnNvbmVsbCB0byBnZW5lcmF0ZSBzbmFwc2hvdHMgb2YgYWxsIG9mIHRoZSBmaWxlcyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRhdGFiYXNlIG9mIGEgQ01TTVMgaW5zdGFsbGF0aW9uIGFuZCBkb3dubG9hZCBpdCB0byB5b3VyIGxvY2FsIGNvbXB1dGVyLiAgVGhpcyBpcyB1c2VmdWwgd2hlbiB1bmRlcnRha2luZyBzaXRlIHVwZ3JhZGVzLCBvciB3aGVuIG1vdmluZyBhIHNpdGUgdG8gYSBuZXcgaG9zdC48L3A+CjxwPlRoZSBzbmFwc2hvdHMgZ2VuZXJhdGVkIGFyZSBzdG9yZWQgaW4gc3RhbmRhcmQgLnppcCBmaWxlcyB3aGljaCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBzaXRlIGF0IGFueSB0aW1lLCBlaXRoZXIgbWFudWFsbHkgb3Igd2l0aCBhbiBpbnRlcmFjdGl2ZSBDTEkgYmFzZWQgcGhwIHNjcmlwdC48L3A+Cgo8aDM+SG93IGRvIEkgVXNlIGl0PzwvaDM+CjxwPkFmdGVyIGluc3RhbGxpbmcgdGhlIG1vZHVsZSwgdmlzaXQgdGhlIFNpdGUgQWRtaW4gPj4gQ0dTbmFwc2hvdHMgbWVudSBpdGVtIGFuZCBjbGljayAnQ3JlYXRlIFNuYXBzaG90IE5vdycuICBUaGlzIHdpbGwgZ2VuZXJhdGUgdGhlIHNuYXBzaG90IGZpbGUgYW5kIHNlbmQgaXQgdG8geW91ciBsb2NhbCBicm93c2VyLjwvcD4KCjxoMz5DYXV0aW9uPC9oMz4KPHA+U25hcHNob3QgZmlsZXMgYXJlIHR5cGljYWx5IGxhcmdlLCBhbmQgY2FuIGNvbnN1bWUgYSBzaWduaWZpY2FudCBhbW91bnQgb2Ygc2VydmVyIHJlc291cmNlcyBpbiBnZW5lcmF0aW5nIHRoZW0sIGFuZCBkb3dubG9hZGluZyB0aGVtLiAgVGhpcyB1dGlsaXR5IG1heSBub3Qgd29yayB3ZWxsIGZvciBzaXRlcyB0aGF0IGNvbnN1bWUgbXVsdGktZ2lnYWJ5dGVzIG9mIGRpc2sgc3BhY2UsIG9yIG9uIGEgc2VydmVyIHdpdGggbGltaXRlZCByZXNvdXJjZXMuICAgVXNlIGF0IHlvdXIgb3duIHJpc2suPC9wPgo8cD5TbmFwc2hvdCBmaWxlcyBhcmUgZ2VuZXJhdGVkIGFuZCBzdG9yZWQgb24gdGhlIHNlcnZlciB1bnRpbCBzdWNoIHRpbWUgYXMgdGhleSBlaXRoZXIgZXhwaXJlIChhIHNldHRpbmcgaW4gQ01TTVMpIG9yIHRoZSBzZXJ2ZXIgY2FjaGUgaXMgY2xlYXJlZC4gIFRoZXNlIGNhbiB0YWtlIHVwIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHNwYWNlLCBzbyB1c2UgY2F1dGlvbiB3aGVuIGdlbmVyYXRpbmcgdGhlbS48L3A+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIGRhdGFiYXNlIGJhY2t1cCB3aWxsIG5vdCBleHBvcnQgYWR2YW5jZWQgY29uc3RydWN0cyBzdWNoIGFzIHN0b3JlZCBwcm9jZWR1cmVzLCB2aWV3cywgb3IgdHJpZ2dlcnMuICBCdXQgaXQgc2hvdWxkIHdvcmsgZm9yIG1vc3QgQ01TTVMgd2Vic2l0ZXMuPC9wPgoKPGgzPlJlc3RvcmluZzwvaDM+CjxwPlRoZSBDR1NuYXBzaG90IG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmFjdGl2ZSBDTEkgYmFzZWQgcGhwIHNjcmlwdCAoYWN0dWFsbHkgYSBiaW5hcnkgLnBoYXIgZmlsZSkgdG8gYWlkZSBpbiByZXN0b3JpbmcgdGhlIHNuYXBzaG90LiAgVGhpcyBmaWxlIGlzIGxvY2F0ZWQgaW4gdG1wL3Jlc3RvcmUucGhwIGluIHRoZSBpbmNsdWRlZCBzbmFwc2hvdCwgIGFuZCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIHNlcGFyYXRlbHkgZnJvbSB3aXRoaW4gdGhlIENHU25hcHNob3QgYWRtaW4gcGFuZWwuPC9wPgo8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBpbnRlcmFjdGl2ZSByZXN0b3JlIHNjcmlwdCBjdXJyZW50bHkgb25seSBvcGVyYXRlcyBpZiB5b3UgYmFja2VkIHVwIGJvdGggdGhlIGZpbGVzIGFuZCB0aGUgZGF0YWJhc2UuPC9wPgo8cD5UbyBkbyBhbiBpbnRlcmFjdGl2ZSByZXN0b3JlIHlvdSB3aWxsIG5lZWQgc2hlbGwgYWNjY2VzcyAoaW4gYSBsaW51eCBlbnZpcm9ubWVudCkgdG8gdGhlIGRlc3RpbmF0aW9uIHNlcnZlci48L3A+CjxwPkluc3RydWN0aW9uczo8L3A+CjxvbD4KICA8bGk+VXBsb2FkIHRoZSBzbmFwc2hvdCAuemlwIGZpbGUgaW4gaXRzIGVudGlyZXR5IChkbyBub3QgZXhwYW5kIGl0KSB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyLiAgVXNpbmcgU1NIIGlzIHRoZSBiZXN0IG1ldGhvZC48L2xpPgogIDxsaT5VcGxvYWQgdGhlIHJlc3RvcmUgc2NyaXB0ICh1c3VhbGx5IG5hbWVkICJDR1NuYXBzaG90LVJlc3RvcmUucGhwIikgZmlsZSAoSU4gQklOQVJZIE1PREUpIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuPC9saT4KICA8bGk+VXNpbmcgU1NIIG9yIGFub3RoZXIgbWVjaGFuaXNtIGNvbm5lY3QgdG8geW91ciBzZXJ2ZXJzIHNoZWxsIGNvbnNvbGUuPC9saT4KICA8bGk+TmF2aWdhdGUgdG8geW91ciBkZXN0aW5hdGlvbiBmb2xkZXIgKHRoZSBzYW1lIGZvbGRlciB5b3UgdXNlZCBpbiB0aGUgZmlyc3QgdHdvIHN0ZXBzKS48L2xpPgogIDxsaT5FeGVjdXRlOiAgcGhwIENHU25hcHNob3QtUmVzdG9yZS5waHAKICAgICA8cD5UaGlzIHdpbGwgYnJpbmcgdXAgYW4gaW50ZXJhY3RpdmUsIGNvbnNvbGUgZHJpdmVuIHV0aWxpdHkgdGhhdCB3aWxsIGFsbG93IHlvdSB0byBlbnRlciB0aGUgbmFtZSBvZiB0aGUgc25hcHNob3QgZmlsZSwgYW5kIGVudGVyIGRhdGFiYXNlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uPC9wPgogICAgIDxwPlRoZSBzY3JpcHQgd2lsbCB0aGVuIHZlcmlmeSB0aGUgZGF0YWJzZSBjcmVkZW50aWFscywgYW5kIHRoYXQgdGhlIGRhdGFiYXNlIGlzIGVtcHR5LjwvcD4KICAgICA8cD5Gb2xsb3dpbmcgdGhpcyB0aGUgZGF0YWJhc2UgZHVtcCB3aWxsIGJlIGltcG9ydGVkIHRvIHRoZSBuZXcgZGF0YWJhc2UsIGFuZCB0aGUgemlwIGZpbGUgZXhwYW5kZWQuPC9wPgogICAgIDxwPlRoaXMgc2NyaXB0IHdpbGwgdGhlbiBnZW5lcmF0ZSBhIG5ldyBjb25maWcucGhwLCBnZW5lcmF0ZSB0aGUgc3BlY2lhbCBDTVNNUyB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMsIGFuZCBwZXJmb3JtIGNsZWFudXAuPC9wPgogICAgIDxwPlRoZSB1dGlsaXR5IHdpbGwgYXV0b21hdGljYWxseSBkZWxldGUgaXRzZWxmLCBhbmQgcmVtb3ZlIHRoZSB6aXAgZmlsZSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGVpb24uPC9wPgogIDwvbGk+Cjwvb2w+Cgo8aDM+QWZ0ZXIgUmVzdG9yYXRpb248L2gzPgo8cD5BZnRlciByZXN0b3JhdGlvbiwgcGFydGljdWxhcmx5IGlmIHlvdSBhcmUgcmVzdG9yaW5nIHRvIGEgZGlmZmVyZW50IGhvc3QgdGhlbiB5b3UgbWF5IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cyB0byBzb21lIGZpbGVzLiAgSW5jbHVkaW5nOjwvcD4KPHVsPgogIDxsaT5BZGp1c3RpbmcgdGhlIC5odGFjY2VzcyBmaWxlIGZvciB0aGUgcmV3cml0ZV9iYXNlIGFuZCBhbnkgb3RoZXIgcmVkaXJlY3QgcnVsZXMuPC9saT4KICA8bGk+QWRqdXN0aW5nIHBhdGhzIGluIHRoZSBjb25maWcucGhwIGZpbGUuPC9saT4KICA8bGk+QWRqdXN0aW5nIHBlcm1pc3Npb25zCiAgICAgPHA+RGVwZW5kaW5nIHVwb24gdGhlIGRlc3RpbmF0aW9uIHNlcnZlciBlbnZpcm9ubWVudCwgYW5kIHRoZSBhY2NvdW50cyB0aGF0IHlvdSBhcmUgdXNpbmcgdG8gY29ubmVjdCB2aWEgc2hlbGwsIGFuZCBmb3IgdGhlIHdlYiBzZXJ2ZXIsIHlvdSBtYXkgbmVlZCB0byBhZGp1c3QgcGVybWlzc2lvbnMgb2Ygc29tZSBmaWxlcyBvciBkaXJlY3RvcmllcyBmb3IgQ01TTVMgdG8gd29yayBwcm9wZXJseS48L3A+CiAgICAgPHA+SW5mb3JtYXRpb24gYWJvdXQgcHJvcGVyIHBlcm1pc3Npb25zIGZvciBDTVNNUyBpcyB3ZWxsIGRvY3VtZW50ZWQgb24gdGhlIENNU01TIGRvY3VtZW50YXRpb24gc2l0ZSBhdCA8YSBocmVmPSJodHRwOi8vZG9jcy5jbXNtYWRlc2ltcGxlLm9yZyI+ZG9jcy5jbXNtYWRlc2ltcGxlLm9yZzwvYT4KICA8L2xpPgo8L3VsPgoKPGgzPlNwZWNpYWwgRmlsZXM8L2gzPgo8cD5JZiBwZXJmb3JtaW5nIGEgbWFudWFsIHJlc3RvcmF0aW9uLCB0aGVyZSBhcmUgc29tZSBzcGVjaWFsIGZpbGVzIGluIHRoZSBhcmNoaXZlIHRoYXQgeW91IHdpbGwgbmVlZCB0byBkZWxldGUgYWZ0ZXIgbWFudWFsbHkgZXhwYW5kaW5nIHRoZSAuemlwIGZpbGU6PC9wPgo8dWw+CiAgPGxpPnRtcC9fX215c3FsZHVtcC5zcWwgLSBUaGlzIGlzIHRoZSBkdW1wIG9mIHRoZSBkYXRhYmFzZSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhpcyBmaWxlIGJlIGRlbGV0ZWQgb24gbGl2ZSBzaXRlcy48L2xpPgogIDxsaT50bXAvLmNnc25hcHNob3QgLSBUaGlzIGlzIGEgbWFnaWMgZmlsZSB1c2VkIGJ5IHRoZSBpbnRlcmFjdGl2ZSByZXN0b3JhdGlvbiBzY3JpcHQuICBJdCBzaG91bGQgYmUgZGVsZXRlZCBvbiBsaXZlIHNpdGVzLjwvbGk+CjwvdWw+Cgo8aDM+UmVxdWlyZW1lbnRzPC9oMz4KPHA+VGhpcyBtb2R1bGUgaGFzIHRoZXNlIHNwZWNpYWwgcmVxdWlyZW1lbnRzOjwvcD4KPHVsPgogIDxsaT5WYWxpZCwgYW5kIHdyaXRhYmxlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAgIDxwPlRoZSBwaHAgZnVuY3Rpb24gc3lzX2dldF90ZW1wX2RpcigpIG11c3QgcmV0dXJuIGEgdmFsaWQsIHdyaXRhYmxlIGRpcmVjdG9yeS48L3A+CiAgPC9saT4KICA8bGk+U3VwcG9ydCBmb3IgdGhlIFBIUCBaaXBBcmNoaXZlIGNsYXNzLjwvbGk+CiAgPGxpPlRoZSBhYmlsaXR5IHRvIGFkanVzdCB0aGUgcGhwIHNjcmlwdCB0aW1lIGxpbWl0LgogICAgPHA+dGhlIHNldF90aW1lX2xpbWl0KDk5OTkpIG1ldGhvZCBtdXN0IHdvcmsgcHJvcGVybHkuPC9wPgogIDwvbGk+CjwvdWw+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoZSBtb2R1bGUgYXV0aG9yIGlzIGluIG5vIHdheSBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUgaW4gYW55IGZhc2hpb24uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+QSBidWcgdHJhY2tpbmcgYW5kIGZlYXR1cmUgcmVxdWVzdCBzeXN0ZW0gaGFzIGJlZW4gY3JlYXRlZCBmb3IgdGhpcyBtb2R1bGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jZ3NuYXBzaG90Ij5oZXJlPC9hPi4gIFBsZWFzZSBiZSB2ZXJib3NlIGFuZCBkZXNjcmlwdGl2ZSB3aGVuIHN1Ym1pdHRpbmcgYnVnIHJlcG9ydHMgYW5kIGZlYXR1cmUgcmVxdWVzdHMsIGFuZCBmb3IgYnVnIHJlcG9ydHMgZW5zdXJlIHRoYXQgeW91IGhhdmUgcHJvdmlkZWQgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byByZWxpYWJseSByZXByb2R1Y2UgdGhlIGlzc3VlLjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uICBXaGVuIGRlc2NyaWJpbmcgYW4gaXNzdWUgcGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHByb3ZpZGUgYWxsIHJlbGF2YW50IGluZm9ybWF0aW9uLCBhIHRob3JvdWdoIGRlc2NyaXB0aW9uIG9mIHlvdXIgaXNzdWUsIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgaXQgb3IgeW91ciBkaXNjdXNzaW9uIG1heSBiZSBpZ25vcmVkLjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuICBIb3dldmVyLCBwbGVhc2UgdXNlIHRoaXMgYXMgYSBsYXN0IHJlc29ydCwgYW5kIGVuc3VyZSB0aGF0IHlvdSBoYXZlIGZvbGxvd2VkIGFsbCBhcHBsaWNhYmxlIGluc3RydWN0aW9ucyBvbiB0aGUgZm9yZ2UsIGluIHRoZSBmb3J1bXMsIGV0Yy48L2xpPgo8L3VsPgoKCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgtMjAxMiwgUm9iZXJ0IENhbXBiZWxsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4KPGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DR0V4dGVuc2lvbnMgPSZndDsgMS41MzwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMy4xPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogICA8bGk+VmVyc2lvbiAxLjAgLSBJbml0aWFsIFJlbGVhc2UuPC9saT4KICAgPGxpPlZlcnNpb24gMS4xIC0gQXByaWwgMjAxNgogICAgIDx1bD4KICAgICAgIDxsaT5IZWxwIGltcHJvdmVtZW50cy48L2xpPgogICAgICAgPGxpPkFkZCBhYmlsaXR5IHRvIGV4cG9ydCBkYXRhYmFzZSwgZmlsZXMsIG9yIGJvdGguPC9saT4KICAgICAgIDxsaT5DTEkgUmVzdG9yZSBzY3JpcHQgaW1wcm92ZW1lbnRzLjwvbGk+CiAgICAgPC91bD4KICAgPC9saT4KICAgPGxpPlZlcnNpb24gMS4yCiAgICAgPHVsPgoJPGxpPkFkZCBCZWZvcmVDcmVhdGVTbmFwc2hvdCBldmVudC48L2xpPgoJPGxpPkFkZCBBYmlsaXR5IHRvIGV4Y2x1ZGUgZmlsZXMgYnkgcGF0dGVybi48L2xpPgoJPGxpPkNoYW5nZSB0aGUgZG93bmxvYWRlZCBmaWxlbmFtZSB0byBiZSBhIGJpdCBtb3JlIHJlbGV2YW50LjwvbGk+CiAgICAgPC91bD4KICAgPC9saT4KICAgPGxpPlZlcnNpb24gMS4zCiAgICAgPHVsPgogICAgICAgPGxpPlN1cHBvcnQgZm9yIHZpZXdzLjwvbGk+CiAgICAgICA8bGk+Tm93IHVzZXMgInNldCBuYW1lcyB1dGY4IiBpZiBpdCBpcyBlbmFibGVkIGluIHRoZSBjb25maWcucGhwICh3aGljaCBpdCBpcyBieSBkZWZhdWx0KS48L2xpPgogICAgIDwvdWw+CiAgIDwvbGk+CjwvdWw+CjxiciAvPg==]]></about>
	<description><![CDATA[A simple module to create snapshots of the CMSMS filesystem and database.  Useful for quick backups or site moves.]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.53</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYoICEkdGhpcy0+VmlzaWJsZVRvQWRtaW5Vc2VyKCkgKSByZXR1cm47Cgp0cnkgewogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NuYXBzaG90bm93J10pICkgewogICAgICAgICRhZGRyID0gbnVsbDsKICAgICAgICAkbWFpbGVyID0gbnVsbDsKICAgICAgICAkZGlzcG9zZSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnZGlzcG9zZScsJ2Rvd25sb2FkJyk7CiAgICAgICAgJHdoYXQgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3ByZWZfd2hhdCcsJ2JvdGgnKTsKICAgICAgICAkZXhjbHVkZXMgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3ByZWZfZXhjbHVkZXMnKTsKICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHJlZl9kaXNwb3NlJywkZGlzcG9zZSk7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ByZWZfd2hhdCcsJHdoYXQpOwogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcmVmX2V4Y2x1ZGVzJywkZXhjbHVkZXMpOwoKICAgICAgICAvLyB2YWxpZGF0ZSBkaXNwb3NpdGlvbnMuCiAgICAgICAgc3dpdGNoKCAkZGlzcG9zZSApIHsKICAgICAgICBjYXNlICdlbWFpbDEnOgogICAgICAgICAgICAkYWRkciA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnZW1haWwxJyk7CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwcmVmX2VtYWlsMScsJGFkZHIpOwogICAgICAgICAgICBpZiggIWlzX2VtYWlsKCRhZGRyKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyX2ludmFsaWRfZW1haWwnKSk7CgogICAgICAgICAgICAkbWFpbGVyID0gbmV3IFxjbXNfbWFpbGVyOwogICAgICAgICAgICBpZiggISRtYWlsZXIgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPkxhbmcoJ2Vycl9jbXNtYWlsZXInKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgLy8gdmFsaWRhdGVkLCBub3cgY3JlYXRlIHRoZSBzbmFwc2hvdC4KICAgICAgICBAc2V0X3RpbWVfbGltaXQoOTk5OSk7CgogICAgICAgICR0aGlzLT5TZW5kRXZlbnQoJ0JlZm9yZUNyZWF0ZVNuYXBzaG90JyxbJ3ByZWZfZGlzcG9zZSc9PiRkaXNwb3NlLCdwcmVmX3doYXQnPT4kd2hhdCwnZXhjbHVkZXMnPT4mJGV4Y2x1ZGVzLCdlbWFpbCc9PiRhZGRyXSk7CiAgICAgICAgJGxvZ2dlciA9IG5ldyBcQ0dTbmFwc2hvdFxmaWxlX2xvZ2dlcihcQ0dTbmFwc2hvdFxmaWxlX2xvZ2dlcjo6TFZMX0RFQlVHKTsKICAgICAgICAkY3JlYXRvciA9IG5ldyBcQ0dTbmFwc2hvdFxzbmFwc2hvdF9jcmVhdG9yOwogICAgICAgICRjcmVhdG9yLT5leGNsdWRlcyA9ICRleGNsdWRlczsKICAgICAgICBzd2l0Y2goICR3aGF0ICkgewogICAgICAgIGNhc2UgJ2JvdGgnOgogICAgICAgICAgICAkY3JlYXRvci0+bXlzcWxkdW1wID0gVFJVRTsKICAgICAgICAgICAgJGNyZWF0b3ItPmZpbGVzID0gVFJVRTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZmlsZXMnOgogICAgICAgICAgICAkY3JlYXRvci0+bXlzcWxkdW1wID0gRkFMU0U7CiAgICAgICAgICAgICRjcmVhdG9yLT5maWxlcyA9IFRSVUU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RiJzoKICAgICAgICAgICAgJGNyZWF0b3ItPm15c3FsZHVtcCA9IFRSVUU7CiAgICAgICAgICAgICRjcmVhdG9yLT5maWxlcyA9IEZBTFNFOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgJGNyZWF0b3ItPnNldF9sb2dnZXIoJGxvZ2dlcik7CiAgICAgICAgJHNuYXBzaG90ID0gJGNyZWF0b3ItPmV4ZWN1dGUoKTsKCiAgICAgICAgLy8gbm93IHdlIGhhdmUgdGhlIGRvd25sb2FkLCB3aGF0IGRvIHdlIHdhbnQgdG8gZG8gd2l0aCBpdC4KICAgICAgICAkY29uZmlnID0gXGNtc19jb25maWc6OmdldF9pbnN0YW5jZSgpOwogICAgICAgIHN3aXRjaCggJGRpc3Bvc2UgKSB7CiAgICAgICAgY2FzZSAnZW1haWwxJzoKICAgICAgICAgICAgJGNvbnRlbnRvcHMgPSBcQ29udGVudE9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAkY29kZSA9IG1kNShfX0RJUl9fLiR0aGlzLT5HZXROYW1lKCkuYmFzZW5hbWUoJHNuYXBzaG90KSk7CiAgICAgICAgICAgICRzbmFwc2hvdF91cmwgPSAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2dldF9zbmFwc2hvdCcsJGNvbnRlbnRvcHMtPkdldERlZmF1bHRDb250ZW50KCksYXJyYXkoJ3NuYXBzaG90Jz0+JGNvZGUpKTsKCiAgICAgICAgICAgICRhdXRvX2NsZWFyX2NhY2hlX2FnZSA9IChpbnQpIFxjbXNfc2l0ZXByZWZzOjpnZXQoJ2F1dG9fY2xlYXJfY2FjaGVfYWdlJyk7CiAgICAgICAgICAgICRhdXRvX2NsZWFyX2NhY2hlX2FnZSA9IG1heCgwLCRhdXRvX2NsZWFyX2NhY2hlX2FnZSk7CiAgICAgICAgICAgICR0cGwgPSAkdGhpcy0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJ2Rpc3Bvc2VfZW1haWwxLnRwbCcpOwogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ2F1dG9fY2xlYXJfY2FjaGVfYWdlJywkYXV0b19jbGVhcl9jYWNoZV9hZ2UpOwogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ3NuYXBzaG90X3VybCcsJHNuYXBzaG90X3VybCk7CiAgICAgICAgICAgICRib2R5ID0gJHRwbC0+ZmV0Y2goKTsKICAgICAgICAgICAgJHN1YmplY3QgPSAnQ0dTbmFwc2hvdCBvZiAnLlxjbXNfc2l0ZXByZWZzOjpnZXQoJ3NpdGVuYW1lJykuJyBjcmVhdGVkIG9uICcuc3RyZnRpbWUoJyVkLSVtLSVZJyk7CgogICAgICAgICAgICAkbWFpbGVyLT5yZXNldCgpOwogICAgICAgICAgICAkbWFpbGVyLT5TZXRQcmlvcml0eSgxKTsKICAgICAgICAgICAgJG1haWxlci0+SXNIVE1MKFRSVUUpOwogICAgICAgICAgICAkbWFpbGVyLT5BZGRBZGRyZXNzKCRhZGRyKTsKICAgICAgICAgICAgJG1haWxlci0+U2V0U3ViamVjdCgkc3ViamVjdCk7CiAgICAgICAgICAgICRtYWlsZXItPlNldEJvZHkoJGJvZHkpOwogICAgICAgICAgICAkbWFpbGVyLT5TZW5kKCk7CiAgICAgICAgICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0NyZWF0ZWQgYSBzbmFwc2hvdCwgYW5kIGFuIGVtYWlsIGxpbmsgdG8gaXQnKTsKCiAgICAgICAgICAgIGVjaG8gJHRoaXMtPkxhbmcoJ21zZ19lbWFpbF9zZW50Jyk7CiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgY2FzZSAnZG93bmxvYWQnOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICRmbiA9ICRjb25maWdbJ3Jvb3RfdXJsJ107CiAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRmbiwnaHR0cHM6JykgKSAkZm4gPSBzdWJzdHIoJGZuLDYpOwogICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkZm4sJ2h0dHA6JykgKSAkZm4gPSBzdWJzdHIoJGZuLDUpOwogICAgICAgICAgICAkZm4gPSB0cmltKCRmbiwnLycpOwogICAgICAgICAgICAkZm4gPSBzdHJfcmVwbGFjZSgnLycsJy0nLCRmbik7CiAgICAgICAgICAgICRmbiA9IG11bmdlX3N0cmluZ190b191cmwoJGZuKTsKICAgICAgICAgICAgJHJlYWRhYmxlX25hbWUgPSAnQ0dTbmFwc2hvdC0nLiRmbi4nLScuc3RyZnRpbWUoJyVkLSVtLSVZJykuJy56aXAnOwogICAgICAgICAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCdEb3dubG9hZGVkIHNuYXBzaG90ICcuJHJlYWRhYmxlX25hbWUpOwogICAgICAgICAgICBcY2dlX3V0aWxzOjpzZW5kX2ZpbGVfYW5kX2V4aXQoJHNuYXBzaG90LDEwMCoxMDI0LCcnLCRyZWFkYWJsZV9uYW1lKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZS0+R2V0TWVzc2FnZSgpKTsKfQoKJHdoYXRsaXN0ID0gYXJyYXkoJ2JvdGgnPT4kdGhpcy0+TGFuZygnd2hhdF9ib3RoJyksJ2ZpbGVzJz0+JHRoaXMtPkxhbmcoJ3doYXRfZmlsZXMnKSwnZGInPT4kdGhpcy0+TGFuZygnd2hhdF9kYicpKTsKJGRpc3Bvc2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHJlZl9kaXNwb3NlJywnZG93bmxvYWQnKTsKJHRwbCA9ICR0aGlzLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgnZGVmYXVsdGFkbWluLnRwbCcpOwokdHBsLT5hc3NpZ24oJ3ByZWZfZGlzcG9zZScsJGRpc3Bvc2UpOwokdHBsLT5hc3NpZ24oJ3doYXRsaXN0Jywkd2hhdGxpc3QpOwokdHBsLT5hc3NpZ24oJ3ByZWZfd2hhdCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3ByZWZfd2hhdCcpKTsKJHRwbC0+YXNzaWduKCdwcmVmX2V4Y2x1ZGVzJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHJlZl9leGNsdWRlcycpKTsKJHRwbC0+YXNzaWduKCdhZG1pbl9lbWFpbCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3ByZWZfZW1haWwxJykpOwokdHBsLT5hc3NpZ24oJ2Rvd25sb2FkJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHJlZl9kb3dubG9hZCcpKTsKJHRwbC0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkKSk7CiR0cGwtPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRyZXN0b3JlX3NjcmlwdCA9ICR0aGlzLT5HZXRNb2R1bGVQYXRoKCkuJy9waGFyL0NHU25hcHNob3QtUmVzdG9yZS5waHAnOwppZiggaXNfZmlsZSgkcmVzdG9yZV9zY3JpcHQpICkgewogICAgJHJlc3RvcmVfdXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdnZXRfcmVzdG9yZV9zY3JpcHQnKTsKICAgICR0cGwtPmFzc2lnbigncmVzdG9yZV91cmwnLCRyZXN0b3JlX3VybCk7Cn0KJHRwbC0+ZGlzcGxheSgpOwoKIwojIEVPRgojCj8+Cg==]]></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[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgpmaW5hbCBjbGFzcyBDR1NuYXBzaG90IGV4dGVuZHMgQ0dFeHRlbnNpb25zCnsKICAgIHByaXZhdGUgJF9zbmFwc2hvdGRpcjsKCiAgICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gVFJVRTsgfQogICAgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIFRSVUU7IH0KICAgIGZ1bmN0aW9uIExhenlMb2FkQWRtaW4oKSB7IHJldHVybiBUUlVFOyB9CiAgICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gJzEuMy4xJzsgfQogICAgZnVuY3Rpb24gSXNBZG1pbk9ubHkoKSB7IHJldHVybiBUUlVFOyB9CiAgICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcyLjEuNic7IH0KICAgIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIFsgJ0NHRXh0ZW5zaW9ucycgPT4gJzEuNTMnIF07IH0KICAgIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZGVzY3JpcHRpb24nKTsgfQogICAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgeyByZXR1cm4gJ3NpdGVhZG1pbic7IH0KICAgIGZ1bmN0aW9uIEdldEV2ZW50RGVzY3JpcHRpb24oICRldmVudG5hbWUgKSB7IHJldHVybiAkdGhpcy0+bGFuZygnZXZlbnRkZXNjLScgLiAkZXZlbnRuYW1lKTsgfQogICAgZnVuY3Rpb24gR2V0RXZlbnRIZWxwKCAkZXZlbnRuYW1lICkgeyByZXR1cm4gJHRoaXMtPmxhbmcoJ2V2ZW50aGVscC0nIC4gJGV2ZW50bmFtZSk7IH0KICAgIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsKICAgICAgICByZXR1cm4gZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL2NoYW5nZWxvZy5pbmMnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKQogICAgewogICAgICAgICRjb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgJHRoaXMtPl9zbmFwc2hvdGRpciA9ICRjb25maWdbJ3Jvb3RfcGF0aCddLicvdXBsb2Fkcy8uX2Nnc25hcHNob3QnOwogICAgfQoKICAgIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBTbmFwc2hvdHMnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NuYXBzaG90JyxDTEVBTl9TVFJJTkcpOwogICAgfQoKICAgIC8vIHJldHVybiBzbmFwc2hvdCBuYW1lCiAgICBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlU25hcHNob3QoKQogICAgewogICAgICAgICRzaXRlbmFtZSA9IFxjbXNfc2l0ZXByZWZzOjpnZXQoJ3NpdGVuYW1lJywnQ01TTVMgU2l0ZScpOwogICAgICAgICRzaXRlbmFtZSA9IHN0cnRvbG93ZXIoJHNpdGVuYW1lKTsKICAgICAgICAkc2l0ZW5hbWUgPSBzdHJfcmVwbGFjZSgkc2l0ZW5hbWUsJyAnLCctJyk7CiAgICAgICAgJHNuYXBzaG90X25hbWUgPSAnY2dzbmFwc2hvdF8nLnN0cmZ0aW1lKCclWS0lbS0lZCcpLidfJy4kc2l0ZW5hbWU7CgogICAgICAgIC8vIHNldCB0aW1lbGltaXQKICAgICAgICAvLyBzZXQgc2l0ZWRvd24KICAgICAgICAkc2l0ZWRvd25fZmlsZSA9IFRNUF9DQUNIRV9MT0NBVElPTi4nL3NpdGVkb3duLmh0bWwnOwogICAgICAgIHRvdWNoKCRzaXRlZG93bl9maWxlKTsKCiAgICAgICAgLy8gY3JlYXRlIHRoZSB0bXAgb3V0cHV0IGRpcmVjdG9yeQogICAgICAgICR0bXBkaXIgPSBUTVBfQ0FDSEVfTE9DQVRJT04uJy8nLiR0aGlzLT5HZXROYW1lKCk7CiAgICAgICAgQG1rZGlyKCR0bXBkaXIpOwoKICAgICAgICAvLyBkbyB0aGUgbXlzcWwgZHVtcCBpbnRvIHRtcC9jYWNoZQogICAgICAgICRkdW1wZmlsZSA9ICR0bXBkaXIuJy9kdW1wLnNxbCc7CiAgICAgICAgJGNvbmZpZyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRDb25maWcoKTsKICAgICAgICAkZHVtcF9vYmogPSBuZXcgXENHU25hcHNob3Rcc3BfbXlzcWxkdW1wOwogICAgICAgICRkdW1wX29iai0+aG9zdCA9ICRjb25maWdbJ2RiX2hvc3RuYW1lJ107CiAgICAgICAgJGR1bXBfb2JqLT51c2VyID0gJGNvbmZpZ1snZGJfdXNlcm5hbWUnXTsKICAgICAgICAkZHVtcF9vYmotPnBhc3N3b3JkID0gJGNvbmZpZ1snZGJfcGFzc3dvcmQnXTsKICAgICAgICAkZHVtcF9vYmotPmRiID0gJGNvbmZpZ1snZGJfbmFtZSddOwogICAgICAgICRkdW1wX29iai0+cHJlZml4ID0gJGNvbmZpZ1snZGJfcHJlZml4J107CiAgICAgICAgJGR1bXBfb2JqLT5zZXRfbmFtZXMgPSAkY29uZmlnWydzZXRfbmFtZXMnXTsKICAgICAgICAkb3V0ID0gJGR1bXBfb2JqLT5kdW1wKCk7CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJGR1bXBmaWxlLCRvdXQpOwoKICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgaW50ZXJuYWwgdGFyCiAgICAgICAgLy8gLSBleGNsdWRlIHRtcCBmaWxlcyAoYnV0IGNyZWF0ZSB0aGUgZGlyZWN0b3JpZXMpCiAgICAgICAgLy8gLSBleHBsaWNpdGx5IGFkZCB0aGUgbXlzcWwgZHVtcAogICAgICAgICRmaWxlcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAobmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yICgkY29uZmlnWydyb290X3BhdGgnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6Q0hJTERfRklSU1QpIGFzICRpdCkgewogICAgICAgICAgICAkYWJzb2x1dGUgPSAkaXQtPmdldFBhdGhOYW1lKCk7CiAgICAgICAgICAgIGlmKCAkaXQtPklzRGlyKCkgKSBjb250aW51ZTsKICAgICAgICAgICAgJGFkZCA9IHRydWU7CiAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRhYnNvbHV0ZSxUTVBfQ0FDSEVfTE9DQVRJT04pIHx8IHN0YXJ0c3dpdGgoJGFic29sdXRlLFRNUF9URU1QTEFURVNfQ19MT0NBVElPTikgKSB7CiAgICAgICAgICAgICAgICAkYWRkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiggc3RhcnRzd2l0aCggJGFic29sdXRlLCAkdG1wZGlyKSApIHsKICAgICAgICAgICAgICAgICAgICAkYWRkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBlbHNlIGNoZWNrIGlmIGZpbGUgaXMgZXhjbHVkZWQKICAgICAgICAgICAgaWYoICRhZGQgKSAkZmlsZXNbXSA9ICRhYnNvbHV0ZTsKICAgICAgICB9CiAgICAgICAgZGVidWdfZGlzcGxheSgkZmlsZXMpOyBkaWUoKTsKCiAgICAgICAgLy8gLSBhZGQgdGhlIGV4dHJhY3Qgc2NyaXB0IGFuZCByZWFkbWUKICAgICAgICAvLyAtIGFyY2hpdmUgYWdhaW4gaW50byBmaW5hbCBkaXJlY3RvcnkKICAgICAgICAvLyAtIGRlbGV0ZSB0aGUgdG1wIGR1bXAKICAgICAgICByZWN1cnNpdmVfcm1kaXIoJHRtcGRpcik7CgogICAgICAgIC8vIHJlbW92ZSBzaXRlZG93bgogICAgICAgIEB1bmxpbmsoJHNpdGVkb3duX2ZpbGUpOwoKICAgICAgICAvLyByZXR1cm4gdGhlIGZpbGVuYW1lCgogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBMaXN0U25hcHNob3RzKCkKICAgIHsKCiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIERvd25sb2FkU25hcHNob3QoJG5hbWUpCiAgICB7CgogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBEZWxldGVTbmFwc2hvdCgkbmFtZSkKICAgIHsKCiAgICB9Cgp9IC8vIEVuZCBvZiBjbGFzcwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogICA8bGk+VmVyc2lvbiAxLjAgLSBJbml0aWFsIFJlbGVhc2UuPC9saT4KICAgPGxpPlZlcnNpb24gMS4xIC0gQXByaWwgMjAxNgogICAgIDx1bD4KICAgICAgIDxsaT5IZWxwIGltcHJvdmVtZW50cy48L2xpPgogICAgICAgPGxpPkFkZCBhYmlsaXR5IHRvIGV4cG9ydCBkYXRhYmFzZSwgZmlsZXMsIG9yIGJvdGguPC9saT4KICAgICAgIDxsaT5DTEkgUmVzdG9yZSBzY3JpcHQgaW1wcm92ZW1lbnRzLjwvbGk+CiAgICAgPC91bD4KICAgPC9saT4KICAgPGxpPlZlcnNpb24gMS4yCiAgICAgPHVsPgoJPGxpPkFkZCBCZWZvcmVDcmVhdGVTbmFwc2hvdCBldmVudC48L2xpPgoJPGxpPkFkZCBBYmlsaXR5IHRvIGV4Y2x1ZGUgZmlsZXMgYnkgcGF0dGVybi48L2xpPgoJPGxpPkNoYW5nZSB0aGUgZG93bmxvYWRlZCBmaWxlbmFtZSB0byBiZSBhIGJpdCBtb3JlIHJlbGV2YW50LjwvbGk+CiAgICAgPC91bD4KICAgPC9saT4KICAgPGxpPlZlcnNpb24gMS4zCiAgICAgPHVsPgogICAgICAgPGxpPlN1cHBvcnQgZm9yIHZpZXdzLjwvbGk+CiAgICAgICA8bGk+Tm93IHVzZXMgInNldCBuYW1lcyB1dGY4IiBpZiBpdCBpcyBlbmFibGVkIGluIHRoZSBjb25maWcucGhwICh3aGljaCBpdCBpcyBieSBkZWZhdWx0KS48L2xpPgogICAgIDwvdWw+CiAgIDwvbGk+CjwvdWw+Cg==]]></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+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIGRhdGFiYXNlIGJhY2t1cCB3aWxsIG5vdCBleHBvcnQgYWR2YW5jZWQgY29uc3RydWN0cyBzdWNoIGFzIHN0b3JlZCBwcm9jZWR1cmVzLCB2aWV3cywgb3IgdHJpZ2dlcnMuICBCdXQgaXQgc2hvdWxkIHdvcmsgZm9yIG1vc3QgQ01TTVMgd2Vic2l0ZXMuPC9wPgoKPGgzPlJlc3RvcmluZzwvaDM+CjxwPlRoZSBDR1NuYXBzaG90IG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmFjdGl2ZSBDTEkgYmFzZWQgcGhwIHNjcmlwdCAoYWN0dWFsbHkgYSBiaW5hcnkgLnBoYXIgZmlsZSkgdG8gYWlkZSBpbiByZXN0b3JpbmcgdGhlIHNuYXBzaG90LiAgVGhpcyBmaWxlIGlzIGxvY2F0ZWQgaW4gdG1wL3Jlc3RvcmUucGhwIGluIHRoZSBpbmNsdWRlZCBzbmFwc2hvdCwgIGFuZCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIHNlcGFyYXRlbHkgZnJvbSB3aXRoaW4gdGhlIENHU25hcHNob3QgYWRtaW4gcGFuZWwuPC9wPgo8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBpbnRlcmFjdGl2ZSByZXN0b3JlIHNjcmlwdCBjdXJyZW50bHkgb25seSBvcGVyYXRlcyBpZiB5b3UgYmFja2VkIHVwIGJvdGggdGhlIGZpbGVzIGFuZCB0aGUgZGF0YWJhc2UuPC9wPgo8cD5UbyBkbyBhbiBpbnRlcmFjdGl2ZSByZXN0b3JlIHlvdSB3aWxsIG5lZWQgc2hlbGwgYWNjY2VzcyAoaW4gYSBsaW51eCBlbnZpcm9ubWVudCkgdG8gdGhlIGRlc3RpbmF0aW9uIHNlcnZlci48L3A+CjxwPkluc3RydWN0aW9uczo8L3A+CjxvbD4KICA8bGk+VXBsb2FkIHRoZSBzbmFwc2hvdCAuemlwIGZpbGUgaW4gaXRzIGVudGlyZXR5IChkbyBub3QgZXhwYW5kIGl0KSB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyLiAgVXNpbmcgU1NIIGlzIHRoZSBiZXN0IG1ldGhvZC48L2xpPgogIDxsaT5VcGxvYWQgdGhlIHJlc3RvcmUgc2NyaXB0ICh1c3VhbGx5IG5hbWVkICJDR1NuYXBzaG90LVJlc3RvcmUucGhwIikgZmlsZSAoSU4gQklOQVJZIE1PREUpIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuPC9saT4KICA8bGk+VXNpbmcgU1NIIG9yIGFub3RoZXIgbWVjaGFuaXNtIGNvbm5lY3QgdG8geW91ciBzZXJ2ZXJzIHNoZWxsIGNvbnNvbGUuPC9saT4KICA8bGk+TmF2aWdhdGUgdG8geW91ciBkZXN0aW5hdGlvbiBmb2xkZXIgKHRoZSBzYW1lIGZvbGRlciB5b3UgdXNlZCBpbiB0aGUgZmlyc3QgdHdvIHN0ZXBzKS48L2xpPgogIDxsaT5FeGVjdXRlOiAgcGhwIENHU25hcHNob3QtUmVzdG9yZS5waHAKICAgICA8cD5UaGlzIHdpbGwgYnJpbmcgdXAgYW4gaW50ZXJhY3RpdmUsIGNvbnNvbGUgZHJpdmVuIHV0aWxpdHkgdGhhdCB3aWxsIGFsbG93IHlvdSB0byBlbnRlciB0aGUgbmFtZSBvZiB0aGUgc25hcHNob3QgZmlsZSwgYW5kIGVudGVyIGRhdGFiYXNlIGNyZWRlbnRpYWwgaW5mb3JtYXRpb24uPC9wPgogICAgIDxwPlRoZSBzY3JpcHQgd2lsbCB0aGVuIHZlcmlmeSB0aGUgZGF0YWJzZSBjcmVkZW50aWFscywgYW5kIHRoYXQgdGhlIGRhdGFiYXNlIGlzIGVtcHR5LjwvcD4KICAgICA8cD5Gb2xsb3dpbmcgdGhpcyB0aGUgZGF0YWJhc2UgZHVtcCB3aWxsIGJlIGltcG9ydGVkIHRvIHRoZSBuZXcgZGF0YWJhc2UsIGFuZCB0aGUgemlwIGZpbGUgZXhwYW5kZWQuPC9wPgogICAgIDxwPlRoaXMgc2NyaXB0IHdpbGwgdGhlbiBnZW5lcmF0ZSBhIG5ldyBjb25maWcucGhwLCBnZW5lcmF0ZSB0aGUgc3BlY2lhbCBDTVNNUyB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMsIGFuZCBwZXJmb3JtIGNsZWFudXAuPC9wPgogICAgIDxwPlRoZSB1dGlsaXR5IHdpbGwgYXV0b21hdGljYWxseSBkZWxldGUgaXRzZWxmLCBhbmQgcmVtb3ZlIHRoZSB6aXAgZmlsZSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGVpb24uPC9wPgogIDwvbGk+Cjwvb2w+Cgo8aDM+QWZ0ZXIgUmVzdG9yYXRpb248L2gzPgo8cD5BZnRlciByZXN0b3JhdGlvbiwgcGFydGljdWxhcmx5IGlmIHlvdSBhcmUgcmVzdG9yaW5nIHRvIGEgZGlmZmVyZW50IGhvc3QgdGhlbiB5b3UgbWF5IG5lZWQgdG8gbWFrZSBhZGp1c3RtZW50cyB0byBzb21lIGZpbGVzLiAgSW5jbHVkaW5nOjwvcD4KPHVsPgogIDxsaT5BZGp1c3RpbmcgdGhlIC5odGFjY2VzcyBmaWxlIGZvciB0aGUgcmV3cml0ZV9iYXNlIGFuZCBhbnkgb3RoZXIgcmVkaXJlY3QgcnVsZXMuPC9saT4KICA8bGk+QWRqdXN0aW5nIHBhdGhzIGluIHRoZSBjb25maWcucGhwIGZpbGUuPC9saT4KICA8bGk+QWRqdXN0aW5nIHBlcm1pc3Npb25zCiAgICAgPHA+RGVwZW5kaW5nIHVwb24gdGhlIGRlc3RpbmF0aW9uIHNlcnZlciBlbnZpcm9ubWVudCwgYW5kIHRoZSBhY2NvdW50cyB0aGF0IHlvdSBhcmUgdXNpbmcgdG8gY29ubmVjdCB2aWEgc2hlbGwsIGFuZCBmb3IgdGhlIHdlYiBzZXJ2ZXIsIHlvdSBtYXkgbmVlZCB0byBhZGp1c3QgcGVybWlzc2lvbnMgb2Ygc29tZSBmaWxlcyBvciBkaXJlY3RvcmllcyBmb3IgQ01TTVMgdG8gd29yayBwcm9wZXJseS48L3A+CiAgICAgPHA+SW5mb3JtYXRpb24gYWJvdXQgcHJvcGVyIHBlcm1pc3Npb25zIGZvciBDTVNNUyBpcyB3ZWxsIGRvY3VtZW50ZWQgb24gdGhlIENNU01TIGRvY3VtZW50YXRpb24gc2l0ZSBhdCA8YSBocmVmPSJodHRwOi8vZG9jcy5jbXNtYWRlc2ltcGxlLm9yZyI+ZG9jcy5jbXNtYWRlc2ltcGxlLm9yZzwvYT4KICA8L2xpPgo8L3VsPgoKPGgzPlNwZWNpYWwgRmlsZXM8L2gzPgo8cD5JZiBwZXJmb3JtaW5nIGEgbWFudWFsIHJlc3RvcmF0aW9uLCB0aGVyZSBhcmUgc29tZSBzcGVjaWFsIGZpbGVzIGluIHRoZSBhcmNoaXZlIHRoYXQgeW91IHdpbGwgbmVlZCB0byBkZWxldGUgYWZ0ZXIgbWFudWFsbHkgZXhwYW5kaW5nIHRoZSAuemlwIGZpbGU6PC9wPgo8dWw+CiAgPGxpPnRtcC9fX215c3FsZHVtcC5zcWwgLSBUaGlzIGlzIHRoZSBkdW1wIG9mIHRoZSBkYXRhYmFzZSwgaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhpcyBmaWxlIGJlIGRlbGV0ZWQgb24gbGl2ZSBzaXRlcy48L2xpPgogIDxsaT50bXAvLmNnc25hcHNob3QgLSBUaGlzIGlzIGEgbWFnaWMgZmlsZSB1c2VkIGJ5IHRoZSBpbnRlcmFjdGl2ZSByZXN0b3JhdGlvbiBzY3JpcHQuICBJdCBzaG91bGQgYmUgZGVsZXRlZCBvbiBsaXZlIHNpdGVzLjwvbGk+CjwvdWw+Cgo8aDM+UmVxdWlyZW1lbnRzPC9oMz4KPHA+VGhpcyBtb2R1bGUgaGFzIHRoZXNlIHNwZWNpYWwgcmVxdWlyZW1lbnRzOjwvcD4KPHVsPgogIDxsaT5WYWxpZCwgYW5kIHdyaXRhYmxlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogICAgIDxwPlRoZSBwaHAgZnVuY3Rpb24gc3lzX2dldF90ZW1wX2RpcigpIG11c3QgcmV0dXJuIGEgdmFsaWQsIHdyaXRhYmxlIGRpcmVjdG9yeS48L3A+CiAgPC9saT4KICA8bGk+U3VwcG9ydCBmb3IgdGhlIFBIUCBaaXBBcmNoaXZlIGNsYXNzLjwvbGk+CiAgPGxpPlRoZSBhYmlsaXR5IHRvIGFkanVzdCB0aGUgcGhwIHNjcmlwdCB0aW1lIGxpbWl0LgogICAgPHA+dGhlIHNldF90aW1lX2xpbWl0KDk5OTkpIG1ldGhvZCBtdXN0IHdvcmsgcHJvcGVybHkuPC9wPgogIDwvbGk+CjwvdWw+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoZSBtb2R1bGUgYXV0aG9yIGlzIGluIG5vIHdheSBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUgaW4gYW55IGZhc2hpb24uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+QSBidWcgdHJhY2tpbmcgYW5kIGZlYXR1cmUgcmVxdWVzdCBzeXN0ZW0gaGFzIGJlZW4gY3JlYXRlZCBmb3IgdGhpcyBtb2R1bGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jZ3NuYXBzaG90Ij5oZXJlPC9hPi4gIFBsZWFzZSBiZSB2ZXJib3NlIGFuZCBkZXNjcmlwdGl2ZSB3aGVuIHN1Ym1pdHRpbmcgYnVnIHJlcG9ydHMgYW5kIGZlYXR1cmUgcmVxdWVzdHMsIGFuZCBmb3IgYnVnIHJlcG9ydHMgZW5zdXJlIHRoYXQgeW91IGhhdmUgcHJvdmlkZWQgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byByZWxpYWJseSByZXByb2R1Y2UgdGhlIGlzc3VlLjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uICBXaGVuIGRlc2NyaWJpbmcgYW4gaXNzdWUgcGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHByb3ZpZGUgYWxsIHJlbGF2YW50IGluZm9ybWF0aW9uLCBhIHRob3JvdWdoIGRlc2NyaXB0aW9uIG9mIHlvdXIgaXNzdWUsIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgaXQgb3IgeW91ciBkaXNjdXNzaW9uIG1heSBiZSBpZ25vcmVkLjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuICBIb3dldmVyLCBwbGVhc2UgdXNlIHRoaXMgYXMgYSBsYXN0IHJlc29ydCwgYW5kIGVuc3VyZSB0aGF0IHlvdSBoYXZlIGZvbGxvd2VkIGFsbCBhcHBsaWNhYmxlIGluc3RydWN0aW9ucyBvbiB0aGUgZm9yZ2UsIGluIHRoZSBmb3J1bXMsIGV0Yy48L2xpPgo8L3VsPgoKCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgtMjAxMiwgUm9iZXJ0IENhbXBiZWxsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKJGxhbmdbJ2FkZHJlc3MnXSA9ICdBZGRyZXNzJzsKCiNCCgojQwoKI0QKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnQSBzaW1wbGUgbW9kdWxlIHRvIGNyZWF0ZSBzbmFwc2hvdHMgb2YgdGhlIENNU01TIGZpbGVzeXN0ZW0gYW5kIGRhdGFiYXNlLiAgVXNlZnVsIGZvciBxdWljayBiYWNrdXBzIG9yIHNpdGUgbW92ZXMuJzsKJGxhbmdbJ2Rpc3Bvc2VfZG93bmxvYWQnXSA9ICdEb3dubG9hZCc7CiRsYW5nWydkaXNwb3NlX2VtYWlsJ10gPSAnU2VuZCBsaW5rIHZpYSBFbWFpbCc7CgojRQokbGFuZ1snZXJyX2Ntc21haWxlciddID0gJ1dlIGNvdWxkIG5vdCBnZXQgYW4gaW5zdGFuY2Ugb2YgQ01TTWFpbGVyIG1vZHVsZSc7CiRsYW5nWydlcnJfaW52YWxpZF9lbWFpbCddID0gJ1RoZSBlbWFpbCBhZGRyZXNzIHlvdSBzcGVjaWZpZWQgYXBwZWFycyB0byBiZSBpbnZhbGlkLic7CiRsYW5nWydlcnJfbWlzc2luZ3BhcmFtJ10gPSAnT25lIG9yIG1vcmUgZXhwZWN0ZWQgcGFyYW1ldGVycyB3YXMgbWlzc2luZyBvciBpbnZhbGlkLic7CiRsYW5nWydlcnJfbm9zbmFwc2hvdHMnXSA9ICdTb3JyeSwgaXQgYXBwZWFycyB0aGF0IHlvdSBhcmUgdG9vIGxhdGUuICBXZSBjb3VsZCBub3QgZmluZCBhbnkgQ0dTbmFwc2hvdHMgb24gdGhlIHNlcnZlci4nOwokbGFuZ1snZXJyX3NuYXBzaG90bm90Zm91bmQnXSA9ICdTb3JyeSwgYnV0IHRoZSBzbmFwc2hvdCBzcGVjaWZpZWQgY291bGQgbm90IGJlIGxvY2F0ZWQuJzsKJGxhbmdbJ2V2ZW50ZGVzYy1CZWZvcmVDcmVhdGVTbmFwc2hvdCddID0gJ1NlbnQgYmVmb3JlIGEgc25hcHNob3QgaXMgY3JlYXRlZCc7CiRsYW5nWydldmVudGhlbHAtQmVmb3JlQ3JlYXRlU25hcHNob3QnXSA9IDw8PEVPVApQYXJhbWV0ZXJzOgo8dWw+CiAgPGxpPmRpc3Bvc2UgKHN0cmluZykgLSBpbmRpY2F0ZXMgdGhlIHNlbGVjdGVkIGRpc3Bvc2l0aW9uIHR5cGU8L2xpPgogIDxsaT53aGF0IChzdHJpbmcpIC0gaW5kaWNhdGVzIHdoYXQgaGFzIGJlZW4gc2VsZWN0ZWQgdG8gYmUgYmFja2VkIHVwPC9saT4KICA8bGk+ZXhjbHVkZXMgKHN0cmluZyByZWZlcmVuY2UpIC0gYSByZWZlcmVuY2UgdG8gYSBzdHJpbmcgY29udGFpbmluZyBhIG5ld2xpbmUgc2VwYXJhdGVkIGxpc3Qgb2YgZmlsZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBiYWNrdXAuICB3aWxkY2FyZHMgYXJlIHN1cHBvdGVkLjwvbGk+CiAgPGxpPmVtYWlsIChzdHJpbmcpIC0gSWYgdXNpbmcgZW1haWwgZGlzcG9zaXRpb24sIHRoZSBlbWFpbCBhZGRyZXNzIHRoYXQgd2lsbCByZWNlaXZlIHRoZSBtZXNzYWdlLjwvbGk+CjwvdWw+CkVPVDsKCiNGCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdCYWNrdXAgU25hcHNob3RzJzsKCiNHCiRsYW5nWydnZXRfcmVzdG9yZV9zY3JpcHQnXSA9ICdEb3dubG9hZCByZXN0b3JlIHNjcmlwdCc7CgojSAoKI0kKJGxhbmdbJ2luZm9fY3JlYXRlX3NuYXBzaG90J10gPSAnVGhpcyBhY3Rpb24gd2lsbCBjcmVhdGUgYSBzbmFwc2hvdCBvZiB5b3VyIENNUyBNYWRlIFNpbXBsZSBpbnN0YWxsYXRpb24sIGluY2x1ZGluZyB0aGUgZGF0YWJhc2UgYW5kIGNyZWF0ZSBhIHppcCBmaWxlIHN1aXRhYmxlIGZvciB1c2UgYXMgYSBiYWNrdXAuICBJdCB3aWxsIG5vdCBiYWNrdXAgdGVtcG9yYXJ5IGZpbGVzLic7CiRsYW5nWydpbmZvX2V4Y2x1ZGVzJ10gPSAnT25lIGVudHJ5IHBlciBsaW5lLCB3aWxkY2FyZCBwYXR0ZXJucyBhbmQgc3ViZGlyZWN0b3JpZXMgYXJlIHBlcm1pdHRpZWQuICBpLmU6ICB0bXAvKmd6JzsKCiNKCgojSwoKI0wKJGxhbmdbJ2xlZ2VuZF9zbmFwc2hvdF9kaXNwb3NpdGlvbiddID0gJ1doYXQgZG8geW91IHdhbnQgdG8gZG8gd2l0aCB0aGUgc25hcHNob3QnOwokbGFuZ1snbGVnZW5kX3doYXQnXSA9ICdBcmNoaXZlIE9wdGlvbnMnOwoKI00KJGxhbmdbJ21zZ19lbWFpbF9zZW50J10gPSAnWW91ciBDR1NuYXBzaG90IGhhcyBiZWVuIGdlbmVyYXRlZCBhbmQgYW4gZW1haWwgc2VudCB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuJzsKCiNOCgojTwoKI1AKJGxhbmdbJ3Byb21wdF9leGNsdWRlcyddID0gJ0V4Y2x1ZGVzJzsKJGxhbmdbJ3Byb21wdF93aGF0J10gPSAnQXJjaGl2ZSBDb250ZW50cyc7CgojUQoKI1IKCiNTCiRsYW5nWydzbmFwc2hvdG5vdyddID0gJ0NyZWF0ZSBTbmFwc2hvdCBOb3cnOwoKI1QKCiNVCgojVgoKI1cKJGxhbmdbJ3dhcm5fY3JlYXRlX3NuYXBzaG90J10gPSAnPHN0cm9uZz5XYXJuaW5nOjwvc3Ryb25nPiBUaGlzIGlzIGEgdmVyeSBkYXRhYmFzZSBhbmQgbWVtb3J5IGludGVuc2l2ZSBvcGVyYXRpb24uICBZb3UgbWF5IG5lZWQgdG8gYWRqdXN0IHNlcnZlciByZXNvdXJjZXMgdG8gdXRpbGl6ZSB0aGlzIGFjdGlvbi4nOwokbGFuZ1snd2hhdF9ib3RoJ10gPSAnRmlsZXMgYW5kIERhdGFiYXNlJzsKJGxhbmdbJ3doYXRfZmlsZXMnXSA9ICdGaWxlcyBvbmx5JzsKJGxhbmdbJ3doYXRfZGInXSA9ICdEYXRhYmFzZSBvbmx5JzsKCiNYCgojWQoKI1oKCj8+Cg==]]></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+J0ZBTFNFJywnZmlsZXMnPT5UUlVFLCdleGNsdWRlcyc9Pm51bGwpOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGFyYW1zID0gbnVsbCkKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoJHBhcmFtcyAmJiBjb3VudCgkcGFyYW1zKSApICkgewogICAgICAgICAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgICAgICR0aGlzLT4ka2V5ID0gJHZhbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICAgIHsKICAgICAgICBpZiggIWFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X29wdHMpICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIHJldHVybiAkdGhpcy0+X29wdHNbJGtleV07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRrZXksJHZhbCkKICAgIHsKICAgICAgICBzd2l0Y2goICRrZXkgKQogICAgICAgIHsKICAgICAgICBjYXNlICdteXNxbGR1bXAnOgogICAgICAgIGNhc2UgJ2ZpbGVzJzoKICAgICAgICBjYXNlICdyZWFkbWUnOgogICAgICAgIGNhc2UgJ2VuY3J5cHQnOgogICAgICAgICAgICAkdGhpcy0+X29wdHNbJGtleV0gPSAoYm9vbCkgJHZhbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZXhjbHVkZXMnOgogICAgICAgICAgICAkdGhpcy0+X29wdHNbJGtleV0gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0X2ZpbGVfbGlzdCgkc3RhcnRkaXIsJGFkdmFuY2VkID0gZmFsc2UpCiAgICB7CiAgICAgICAgLy8gZ2V0IGFsbCBmaWxlcyAoZXhjZXB0IHRtcCBhbmQgYmFja3VwIGZpbGVzKSBmcm9tIHRoZSByb290IHBhdGgKICAgICAgICBpZiggIWlzX2Rpcigkc3RhcnRkaXIpICkgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiaW52YWxpZCBwYXRoIHBhc3NlZCB0byAiLl9fTUVUSE9EX18pOwoKICAgICAgICAvLyBpZiB3ZSBoYXZlIGV4Y2x1ZGVzLCBjbGVhbiB0aGVtIHVwCiAgICAgICAgJGV4Y2x1ZGVzID0gWyAnIyojJywgJy4jKicsICcqficsICcqLnRtcCcsICcqLmJhaycsICcuZ2l0KicsICcuc3ZuKicgXTsKICAgICAgICBpZiggJHRoaXMtPmV4Y2x1ZGVzICkgewogICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgiXG4iLCR0aGlzLT5leGNsdWRlcyk7CiAgICAgICAgICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKICAgICAgICAgICAgICAgICRvbmUgPSB0cmltKCRvbmUpOwogICAgICAgICAgICAgICAgaWYoICEkb25lICkgY29udGludWU7CiAgICAgICAgICAgICAgICAkZXhjbHVkZXNbXSA9ICRvbmU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRkaXJfaXRlcmF0b3IgPSBuZXcgXFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRzdGFydGRpcik7CiAgICAgICAgJGZpbHRlcl9pdGVyYXRvciA9IG5ldyBcUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvcigkZGlyX2l0ZXJhdG9yLGZ1bmN0aW9uKCRjdXJyZW50LCRrZXksJGl0ZXJhdG9yKSB1c2UgKCRhZHZhbmNlZCwkZXhjbHVkZXMsJHN0YXJ0ZGlyKSB7CiAgICAgICAgICAgICAgICAkZm4gPSAkY3VycmVudC0+Z2V0RmlsZW5hbWUoKTsKICAgICAgICAgICAgICAgICRkaXJuYW1lID0gZGlybmFtZSgkY3VycmVudC0+Z2V0UGF0aG5hbWUoKSk7CiAgICAgICAgICAgICAgICBpZiggJGZuID09ICcuJyB8fCAkZm4gPT0gJy4uJyApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRleGNsdWRlcyBhcyAkb25lICkgewogICAgICAgICAgICAgICAgICAgICRibiA9IGJhc2VuYW1lKCRvbmUpOwogICAgICAgICAgICAgICAgICAgICRkbiA9IGRpcm5hbWUoJG9uZSk7CiAgICAgICAgICAgICAgICAgICAgaWYoICEkZG4gfHwgJGRuID09ICcuJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGZubWF0Y2goJG9uZSwgJGZuKSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAkZGlybmFtZSA9PSAiJHN0YXJ0ZGlyLyRkbiIgJiYgZm5tYXRjaCgkYm4sICRmbikgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiggISRhZHZhbmNlZCAmJiBzdGFydHN3aXRoKCRkaXJuYW1lLCBUTVBfQ0FDSEVfTE9DQVRJT04pICkgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICAgICAgaWYoICEkYWR2YW5jZWQgJiYgc3RhcnRzd2l0aCgkZGlybmFtZSwgVE1QX1RFTVBMQVRFU19DX0xPQ0FUSU9OKSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgIC8vaWYoICRjdXJyZW50LT5pc0RpcigpICkgcmV0dXJuIEZBTFNFOyAvLyByZXR1cm4gbm8gZGlyZWN0b3JpZXMKICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICAgICB9KTsKICAgICAgICAkaXRlcmF0b3IgPSBuZXcgXFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoJGZpbHRlcl9pdGVyYXRvcik7CiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGl0ZXJhdG9yIGFzICRpbmZvICkgewogICAgICAgICAgICAkb3V0W10gPSBzdWJzdHIoJGluZm8tPmdldFBhdGhuYW1lKCksc3RybGVuKCRzdGFydGRpcikrMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICAkY29uZmlnID0gXGNtc19jb25maWc6OmdldF9pbnN0YW5jZSgpOwogICAgICAgIC8vIGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX0NHU05BUFNIT1QpOwogICAgICAgICRzaWcgPSBtZDUoX19ESVJfXy4kbW9kLT5HZXROYW1lKCkuJG1vZC0+R2V0VmVyc2lvbigpLmdldF91c2VyaWQoRkFMU0UpLnRpbWUoKSk7CgogICAgICAgICR0aGlzLT52ZXJib3NlKCdsYW5nOmNyZWF0b3JfY29weXRvdG1wJyk7CiAgICAgICAgJGxpc3QgPSBhcnJheSgpOwogICAgICAgIGlmKCAkdGhpcy0+ZmlsZXMgKSAkbGlzdCA9ICR0aGlzLT5nZXRfZmlsZV9saXN0KCRjb25maWdbJ3Jvb3RfcGF0aCddKTsKICAgICAgICAkdG1wZmlsZXMgPSBhcnJheSgpOwoKICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgcmVhZG1lCiAgICAgICAgaWYoICR0aGlzLT5maWxlcyAmJiAkdGhpcy0+bXlzcWxkdW1wICYmICR0aGlzLT5yZWFkbWUgKSB7CiAgICAgICAgICAgICR0cGwgPSAkbW9kLT5DcmVhdGVTbWFydHlUZW1wbGF0ZSgncmVhZG1lLnRwbCcpOwogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ2ZpbGVzJywkdGhpcy0+ZmlsZXMpOwogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ215c3FsZHVtcCcsJHRoaXMtPm15c3FsZHVtcCk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignbW9kdWxlX25hbWUnLCRtb2QtPkdldE5hbWUoKSk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignbW9kdWxlX3ZlcnNpb24nLCRtb2QtPkdldFZlcnNpb24oKSk7CiAgICAgICAgICAgICRvdXQgPSAkdHBsLT5mZXRjaCgpOwogICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkY29uZmlnWydyb290X3BhdGgnXS4nL3RtcC9SRUFETUUtQ0dTTkFQU0hPVC50eHQnLCRvdXQpOwogICAgICAgICAgICAkbGlzdFtdID0gJ3RtcC9SRUFETUUtQ0dTTkFQU0hPVC50eHQnOwogICAgICAgICAgICAkdG1wZmlsZXNbXSAgPSAndG1wL1JFQURNRS1DR1NOQVBTSE9ULnR4dCc7CiAgICAgICAgfQoKICAgICAgICAvLyBkbyB0aGUgbXlzcWwgZHVtcAogICAgICAgICRkdW1wZmlsZSA9IG51bGw7CiAgICAgICAgaWYoICR0aGlzLT5teXNxbGR1bXAgKSB7CiAgICAgICAgICAgICR0aGlzLT52ZXJib3NlKCdsYW5nOjpjcmVhdG9yX215c3FsZHVtcCcpOwogICAgICAgICAgICAkcGFybXMgPSBhcnJheSgpOwogICAgICAgICAgICAkcGFybXNbJ3NldF9uYW1lcyddID0gJGNvbmZpZ1snc2V0X25hbWVzJ107CiAgICAgICAgICAgICRwYXJtc1snaG9zdCddID0gJGNvbmZpZ1snZGJfaG9zdG5hbWUnXTsKICAgICAgICAgICAgJHBhcm1zWyd1c2VyJ10gPSAkY29uZmlnWydkYl91c2VybmFtZSddOwogICAgICAgICAgICAkcGFybXNbJ3Bhc3N3b3JkJ10gPSAkY29uZmlnWydkYl9wYXNzd29yZCddOwogICAgICAgICAgICAkcGFybXNbJ3VzZXInXSA9ICRjb25maWdbJ2RiX3VzZXJuYW1lJ107CiAgICAgICAgICAgICRwYXJtc1snZGInXSA9ICRjb25maWdbJ2RiX25hbWUnXTsKICAgICAgICAgICAgJHBhcm1zWyd0YWJsZV9zdHJ1Y3R1cmUnXSA9IDE7CiAgICAgICAgICAgICRwYXJtc1sndGFibGVfZGF0YSddID0gMTsKICAgICAgICAgICAgJHBhcm1zWyd2aWV3cyddID0gMTsKICAgICAgICAgICAgJGR1bXBlciA9IG5ldyBzcF9teXNxbGR1bXAoJHBhcm1zKTsKICAgICAgICAgICAgJGR1bXBlci0+ZHVtcGZpbGUgPSAkY29uZmlnWydyb290X3BhdGgnXS4nL3RtcC9fX215c3FsZHVtcC5zcWwnOwogICAgICAgICAgICAkZHVtcGVyLT5kdW1wKCk7CiAgICAgICAgICAgICRsaXN0W10gPSAndG1wL19fbXlzcWxkdW1wLnNxbCc7CiAgICAgICAgICAgICR0bXBmaWxlc1tdICA9ICd0bXAvX19teXNxbGR1bXAuc3FsJzsKICAgICAgICAgICAgdW5zZXQoJGR1bXBlcik7CiAgICAgICAgfQoKICAgICAgICBpZiggJHRoaXMtPmZpbGVzICYmICR0aGlzLT5teXNxbGR1bXAgKSB7CiAgICAgICAgICAgICRyZXN0b3JlX3NjcmlwdCA9ICRtb2QtPkdldE1vZHVsZVBhdGgoKS4nL3BoYXIvQ0dTbmFwc2hvdC1SZXN0b3JlLnBocCc7CiAgICAgICAgICAgIGlmKCBmaWxlX2V4aXN0cygkcmVzdG9yZV9zY3JpcHQpICkgewogICAgICAgICAgICAgICAgJG91dGZpbGUgPSAkY29uZmlnWydyb290X3BhdGgnXS4nL3RtcC9yZXN0b3JlLnBocCc7CiAgICAgICAgICAgICAgICBAY29weSgkcmVzdG9yZV9zY3JpcHQsJG91dGZpbGUpOwogICAgICAgICAgICAgICAgJGxpc3RbXSA9ICd0bXAvcmVzdG9yZS5waHAnOwogICAgICAgICAgICAgICAgJHRtcGZpbGVzW10gPSAndG1wL3Jlc3RvcmUucGhwJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gZG8gdGhlIC5jZ3NuYXBzaG90IGRhdGEgZmlsZQogICAgICAgICRtYWluID0gYXJyYXkoKTsKICAgICAgICAkbWFpblsnY3JlYXRlZCddID0gdGltZSgpOwogICAgICAgICRtYWluWydjcmVhdGVkX2J5J10gPSBnZXRfdXNlcmlkKCk7CiAgICAgICAgJG1haW5bJ3ZlcnNpb24nXSA9ICRtb2QtPkdldFZlcnNpb24oKTsKICAgICAgICAkbWFpblsnZmlsZXNfZXhwb3J0ZWQnXSA9ICgkdGhpcy0+ZmlsZXMpID8gJ3llcycgOiAnbm8nOwogICAgICAgICRtYWluWydkYl9leHBvcnRlZCddID0gKCR0aGlzLT5teXNxbGR1bXApID8gJ3llcycgOiAnbm8nOwogICAgICAgICR3ZWJzaXRlID0gYXJyYXkoKTsKICAgICAgICAkd2Vic2l0ZVsnY21zX3ZlcnNpb24nXSA9IENNU19WRVJTSU9OOwogICAgICAgICR3ZWJzaXRlWydyb290X3VybCddID0gJGNvbmZpZ1sncm9vdF91cmwnXTsKICAgICAgICAkd2Vic2l0ZVsncm9vdF9wYXRoJ10gPSAkY29uZmlnWydyb290X3BhdGgnXTsKICAgICAgICAkd2Vic2l0ZVsndXJsX3Jld3JpdGluZyddID0gJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddOwogICAgICAgICR3ZWJzaXRlWydzaXRlbmFtZSddID0gXGNtc19zaXRlcHJlZnM6OmdldCgnc2l0ZW5hbWUnKTsKICAgICAgICAkZGF0YSA9IGFycmF5KCdtYWluJz0+JG1haW4sJ3dlYnNpdGUnPT4kd2Vic2l0ZSk7CiAgICAgICAgJGluaSA9IG5ldyBzZWN1cmVfaW5pX2ZpbGUoJ3RtcC8uY2dzbmFwc2hvdCcpOwogICAgICAgICRvdXQgPSAkaW5pLT5nZW5lcmF0ZSgkZGF0YSk7CiAgICAgICAgJGNnc25hcHNob3RfZmlsZSA9ICRjb25maWdbJ3Jvb3RfcGF0aCddLicvdG1wLy5jZ3NuYXBzaG90JzsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkY2dzbmFwc2hvdF9maWxlLCRvdXQpOwogICAgICAgICRsaXN0W10gPSAndG1wLy5jZ3NuYXBzaG90JzsKICAgICAgICAkdG1wZmlsZXNbXSA9ICd0bXAvLmNnc25hcHNob3QnOwogICAgICAgIHVuc2V0KCRkYXRhKTsKCiAgICAgICAgLy8gY3JlYXRlIHRoZSBhcmNoaXZlCiAgICAgICAgJHRoaXMtPnZlcmJvc2UoJ2xhbmc6Y3JlYXRvcl9ta2FyY2hpdmUnKTsKICAgICAgICAkemlwID0gbmV3IFxaaXBBcmNoaXZlKCk7CiAgICAgICAgJGZuMSA9IHRlbXBuYW0oVE1QX0NBQ0hFX0xPQ0FUSU9OLCdfc3AnKTsKICAgICAgICAkZm4gPSAkZm4xLicuemlwJzsKICAgICAgICB1bmxpbmsoJGZuMSk7CiAgICAgICAgJHppcC0+b3BlbigkZm4sXFppcEFyY2hpdmU6OkNSRUFURSB8IFxaaXBBcmNoaXZlOjpPVkVSV1JJVEUpOwogICAgICAgIGZvcmVhY2goICRsaXN0IGFzICRvbmUgKSB7CiAgICAgICAgICAgICRzcmNmaWxlID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy8nLiRvbmU7CiAgICAgICAgICAgICR6aXAtPmFkZEZpbGUoICRzcmNmaWxlLCAkb25lICk7CiAgICAgICAgfQogICAgICAgICR6aXAtPmNsb3NlKCk7CiAgICAgICAgdW5zZXQoJGxpc3QpOwoKICAgICAgICAvLyBjbGVhbnVwCiAgICAgICAgZm9yZWFjaCggJHRtcGZpbGVzIGFzICRmaWxlICkgewogICAgICAgICAgICAkdGZuID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWydyb290X3BhdGgnXSwkZmlsZSk7CiAgICAgICAgICAgIEB1bmxpbmsoJHRmbik7CiAgICAgICAgfQogICAgICAgIGlmKCAkdGhpcy0+bXlzcWxkdW1wICYmICRkdW1wZmlsZSApIEB1bmxpbmsoJGR1bXBmaWxlKTsKICAgICAgICBpZiggJGNnc25hcHNob3RfZmlsZSApIEB1bmxpbmsoJGNnc25hcHNob3RfZmlsZSk7CiAgICAgICAgcmV0dXJuICRmbjsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/class.sp_mysqldump.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90OwoKY2xhc3Mgc3BfbXlzcWxkdW1wCnsKICAgIHByaXZhdGUgJF9kdW1wZmg7CiAgICBwcml2YXRlICRfY29ubjsKICAgIHByaXZhdGUgJF9jb25maWc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXJhbXMgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5fY29uZmlnID0gYXJyYXkoJ3NraXBfZm9yZWlnbl9rZXknPT4xLCdzZXRfbmFtZXMnPT4xKTsKICAgICAgICAkY29uZmlnID0gbnVsbDsKICAgICAgICBpZiggJHBhcmFtcyBpbnN0YW5jZW9mIFxjbXNfY29uZmlnICkgewogICAgICAgICAgICAkY29uZmlnID0gYXJyYXkoKTsKICAgICAgICAgICAgJGNvbmZpZ1snaG9zdCddID0gJHBhcmFtc1snZGJfaG9zdG5hbWUnXTsKICAgICAgICAgICAgJGNvbmZpZ1sndXNlciddID0gJHBhcmFtc1snZGJfdXNlcm5hbWUnXTsKICAgICAgICAgICAgJGNvbmZpZ1sncGFzc3dvcmQnXSA9ICRwYXJhbXNbJ2RiX3Bhc3N3b3JkJ107CiAgICAgICAgICAgICRjb25maWdbJ2RiJ10gPSAkcGFyYW1zWydkYl9uYW1lJ107CiAgICAgICAgICAgICRjb25maWdbJ3ByZWZpeCddID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgZWxzZWlmKCBpc19hcnJheSgkcGFyYW1zKSApIHsKICAgICAgICAgICAgJGNvbmZpZyA9ICRwYXJhbXM7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5fY29uZmlnID0gYXJyYXlfbWVyZ2UoJHRoaXMtPl9jb25maWcsJGNvbmZpZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2RiX2hvc3RuYW1lJzoKICAgICAgICBjYXNlICdob3N0JzoKICAgICAgICBjYXNlICdob3N0bmFtZSc6CiAgICAgICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2NvbmZpZ1snaG9zdCddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1snaG9zdCddOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfdXNlcm5hbWUnOgogICAgICAgIGNhc2UgJ3VzZXInOgogICAgICAgIGNhc2UgJ3VzZXJuYW1lJzoKICAgICAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fY29uZmlnWyd1c2VyJ10pICkgcmV0dXJuICR0aGlzLT5fY29uZmlnWyd1c2VyJ107CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkYl9wYXNzd29yZCc6CiAgICAgICAgY2FzZSAncHcnOgogICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoKICAgICAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fY29uZmlnWydwYXNzd29yZCddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1sncGFzc3dvcmQnXTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RiX25hbWUnOgogICAgICAgIGNhc2UgJ2RiJzoKICAgICAgICBjYXNlICdkYm5hbWUnOgogICAgICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9jb25maWdbJ2RiJ10pICkgcmV0dXJuICR0aGlzLT5fY29uZmlnWydkYiddOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZHJvcF90YWJsZSc6CiAgICAgICAgY2FzZSAndGFibGVfc3RydWN0dXJlJzoKICAgICAgICBjYXNlICd2aWV3cyc6CiAgICAgICAgY2FzZSAndGFibGVfZGF0YSc6CiAgICAgICAgY2FzZSAnc2tpcF9mb3JlaWduX2tleSc6CiAgICAgICAgY2FzZSAnc2V0X25hbWVzJzoKICAgICAgICAgICAgJG91dCA9IChpc3NldCgkdGhpcy0+X2NvbmZpZ1ska2V5XSkpID8gJHRoaXMtPl9jb25maWdbJGtleV0gOiBUUlVFOwogICAgICAgICAgICByZXR1cm4gJG91dDsKCiAgICAgICAgY2FzZSAnZGJfcHJlZml4JzoKICAgICAgICBjYXNlICdwcmVmaXgnOgogICAgICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9jb25maWdbJ3ByZWZpeCddKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1sncHJlZml4J107CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkdW1wZmlsZSc6CiAgICAgICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2NvbmZpZ1snZHVtcGZpbGUnXSkgKSByZXR1cm4gJHRoaXMtPl9jb25maWdbJ2R1bXBmaWxlJ107CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCIka2V5IGlzIG5vdCBhIHZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWwpCiAgICB7CiAgICAgICAgc3dpdGNoKCAka2V5ICkgewogICAgICAgIGNhc2UgJ2RiX2hvc3RuYW1lJzoKICAgICAgICBjYXNlICdob3N0JzoKICAgICAgICBjYXNlICdob3N0bmFtZSc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWydob3N0J10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfdXNlcm5hbWUnOgogICAgICAgIGNhc2UgJ3VzZXInOgogICAgICAgIGNhc2UgJ3VzZXJuYW1lJzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3VzZXInXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdkYl9wYXNzd29yZCc6CiAgICAgICAgY2FzZSAncHcnOgogICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnZGJfbmFtZSc6CiAgICAgICAgY2FzZSAnZGInOgogICAgICAgIGNhc2UgJ2RibmFtZSc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWydkYiddID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2RiX3ByZWZpeCc6CiAgICAgICAgY2FzZSAncHJlZml4JzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3ByZWZpeCddID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2Ryb3BfdGFibGUnOgogICAgICAgIGNhc2UgJ3RhYmxlX3N0cnVjdHVyZSc6CiAgICAgICAgY2FzZSAndmlld3MnOgogICAgICAgIGNhc2UgJ3RhYmxlX2RhdGEnOgogICAgICAgIGNhc2UgJ3NraXBfZm9yZWlnbl9rZXknOgogICAgICAgIGNhc2UgJ3NldF9uYW1lcyc6CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWyRrZXldID0gXGNnZV91dGlsczo6dG9fYm9vbCgkdmFsKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2R1bXBmaWxlJzoKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ2R1bXBmaWxlJ10gPSB0cmltKCR2YWwpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiJGtleSBpcyBub3QgYSB2YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ2hvc3QnXSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiTm8gZGF0YWJhc2UgaG9zdCBzcGVjaWZpZWQgZm9yICIuX19DTEFTU19fKTsKICAgICAgICBpZiggISR0aGlzLT5fY29uZmlnWyd1c2VyJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIHVzZXJuYW1lIHNwZWNpZmllZCBmb3IgIi5fX0NMQVNTX18pOwogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIHBhc3N3b3JkIHNwZWNpZmllZCBmb3IgIi5fX0NMQVNTX18pOwogICAgICAgIGlmKCAhJHRoaXMtPl9jb25maWdbJ2RiJ10gKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIk5vIGRhdGFiYXNlIG5hbWUgc3BlY2lmaWVkIGZvciAiLl9fQ0xBU1NfXyk7CiAgICAgICAgaWYoICEkdGhpcy0+ZHVtcGZpbGUgKSB7CiAgICAgICAgICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICAgICAgICAgIGlmKCAhJGRpciApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGdldCBzeXN0ZW0gdGVtcG9yYXJ5IGRpcmVjdG9yeScpOwogICAgICAgICAgICAkdGhpcy0+ZHVtcGZpbGUgPSAkZGlyLicvJy5tZDUoX19DTEFTU19fLl9fRklMRV9fLnRpbWUoKSkuJy50bXAnOwogICAgICAgIH0KICAgICAgICAkZG4gPSBkaXJuYW1lKCR0aGlzLT5kdW1wZmlsZSk7CiAgICAgICAgaWYoICFpc193cml0YWJsZSgkZG4pICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdXZSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIGRlc3RpbmF0aW9uIGRpcmVjdG9yeScpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiB3cml0ZSgkdHh0KQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9kdW1wZmggKSAkdGhpcy0+X2R1bXBmaCA9IGZvcGVuKCR0aGlzLT5kdW1wZmlsZSwndycpOwogICAgICAgIGlmKCAhJHRoaXMtPl9kdW1wZmggKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1dlIGNvdWxkIG5vdCBvcGVuIHRoZSBkdW1wIGZpbGUgZm9yIHdyaXRpbmcnKTsKCiAgICAgICAgZndyaXRlKCR0aGlzLT5fZHVtcGZoLCR0eHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkdW1wKCkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsaWRhdGUoKTsKICAgICAgICAkdGhpcy0+X2Nvbm4gPSBteXNxbGlfY29ubmVjdCgkdGhpcy0+X2NvbmZpZ1snaG9zdCddLCR0aGlzLT5fY29uZmlnWyd1c2VyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJ3Bhc3N3b3JkJ10sJHRoaXMtPl9jb25maWdbJ2RiJ10pOwogICAgICAgIGlmKCBteXNxbGlfY29ubmVjdF9lcnJubygpICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oX19DTEFTU19fLicgY291bGQgbm90IGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlJyk7CiAgICAgICAgfQoKICAgICAgICBpZiggJHRoaXMtPnNldF9uYW1lcyApIHsKICAgICAgICAgICAgbXlzcWxpX3F1ZXJ5KCR0aGlzLT5fY29ubiwiU0VUIE5BTUVTIHV0ZjgiKTsKICAgICAgICAgICAgJHRoaXMtPndyaXRlKCJTRVQgTkFNRVMgdXRmODtcbiIpOwogICAgICAgIH0KICAgICAgICBpZiggJHRoaXMtPnNraXBfZm9yZWlnbl9rZXkgKSAkdGhpcy0+d3JpdGUoIlNFVCBGT1JFSUdOX0tFWV9DSEVDS1M9MDtcbiIpOwoKICAgICAgICAkdGFibGVzID0gW107CiAgICAgICAgJHZpZXdzID0gW107CiAgICAgICAgJHNxbCA9ICdTSE9XIFRBQkxFUzsnOwogICAgICAgICRyZXMgPSBteXNxbGlfcXVlcnkoJHRoaXMtPl9jb25uLCRzcWwpOwogICAgICAgIGlmKCAhJHJlcyApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihfX0NMQVNTX18uJyBjb3VsZCBub3QgZ2V0IHRhYmxlIGxpc3QnKTsKICAgICAgICB3aGlsZSggJHJvdyA9IG15c3FsaV9mZXRjaF9yb3coJHJlcykgKSB7CiAgICAgICAgICAgICR0YWJsZXNbXSA9ICRyb3dbMF07CiAgICAgICAgfQoKICAgICAgICAkc3FsID0gJ1NIT1cgRlVMTCBUQUJMRVMgSU4gJy4kdGhpcy0+X2NvbmZpZ1snZGInXS4nIFdIRVJFIFRBQkxFX1RZUEUgTElLRSBcJ1ZJRVdcJyc7CiAgICAgICAgJHJlcyA9IG15c3FsaV9xdWVyeSgkdGhpcy0+X2Nvbm4sJHNxbCk7CiAgICAgICAgaWYoICRyZXMgKSB7CiAgICAgICAgICAgIHdoaWxlKCAkcm93ID0gbXlzcWxpX2ZldGNoX3JvdygkcmVzKSApIHsKICAgICAgICAgICAgICAgICR2aWV3c1tdID0gJHJvd1swXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYoICR0aGlzLT50YWJsZV9zdHJ1Y3R1cmUgJiYgY291bnQoJHRhYmxlcykgKSB7CiAgICAgICAgICAgIGZvcmVhY2goICR0YWJsZXMgYXMgJHRhYmxlICkgewogICAgICAgICAgICAgICAgaWYoICFpbl9hcnJheSgkdGFibGUsJHZpZXdzKSApIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZG9fdGFibGVfc3RydWN0dXJlKCR0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT50YWJsZV9kYXRhICkgJHRoaXMtPmRvX3RhYmxlX2RhdGEoJHRhYmxlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiggJHRoaXMtPnZpZXdzKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRvX3ZpZXcoJHRhYmxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXlzcWxpX2Nsb3NlKCR0aGlzLT5fY29ubik7CiAgICAgICAgJHRoaXMtPl9jb25uID0gbnVsbDsKICAgICAgICBmY2xvc2UoJHRoaXMtPl9kdW1wZmgpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb192aWV3KCR0YWJsZSkKICAgIHsKICAgICAgICAkdHh0ID0gIi8qIHN0cnVjdHVyZSBmb3IgdmlldyBgJHRhYmxlYCAqL1xuIjsKICAgICAgICBpZiggJHRoaXMtPmRyb3BfdGFibGUgKSB7CiAgICAgICAgICAgICR0eHQgLj0gIkRST1AgVklFVyBJRiBFWElTVFMgYCR0YWJsZWA7XG5cbiI7CiAgICAgICAgfQogICAgICAgICRzcWwgPSAiU0hPVyBDUkVBVEUgVklFVyBgJHRhYmxlYDsiOwogICAgICAgICRyZXMgPSBteXNxbGlfcXVlcnkoJHRoaXMtPl9jb25uLCRzcWwpOwogICAgICAgIGlmKCAkcmVzICkgewogICAgICAgICAgICBpZiggJHJvdyA9IG15c3FsaV9mZXRjaF9hc3NvYygkcmVzKSApIHsKICAgICAgICAgICAgICAgICR0bXAgPSAkcm93WydDcmVhdGUgVmlldyddOwogICAgICAgICAgICAgICAgLy8gZGVsZXRlIERFRklORVIgLi4uLiBERUZJTkVSCiAgICAgICAgICAgICAgICAka2V5ID0gJ0RFRklORVInOwogICAgICAgICAgICAgICAgJHNfcG9zID0gc3RycG9zKCR0bXAsJGtleSk7CiAgICAgICAgICAgICAgICAkZV9wb3MgPSBzdHJycG9zKCR0bXAsJGtleSk7CiAgICAgICAgICAgICAgICBpZiggJHNfcG9zICE9PSBGQUxTRSAmJiAkZV9wb3MgIT09IEZBTFNFICkgewogICAgICAgICAgICAgICAgICAgICR0bXAyID0gc3Vic3RyKCR0bXAsMCwkc19wb3MpOwogICAgICAgICAgICAgICAgICAgICR0bXAyIC49IHN1YnN0cigkdG1wLCRlX3BvcytzdHJsZW4oJGtleSkpOwogICAgICAgICAgICAgICAgICAgICR0bXAgPSAkdG1wMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0eHQgLj0gJHRtcC4iO1xuXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG15c3FsaV9mcmVlX3Jlc3VsdCgkcmVzKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPndyaXRlKCR0eHQpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkb190YWJsZV9zdHJ1Y3R1cmUoJHRhYmxlKQogICAgewogICAgICAgICR0eHQgPSAiLyogVGFibGUgc3RydWN0dXJlIGZvciB0YWJsZSBgJHRhYmxlYCAqL1xuIjsKICAgICAgICBpZiggJHRoaXMtPmRyb3BfdGFibGUgKSB7CiAgICAgICAgICAgICR0eHQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAkdGFibGVgO1xuXG4iOwogICAgICAgIH0KICAgICAgICAkc3FsID0gIlNIT1cgQ1JFQVRFIFRBQkxFIGAkdGFibGVgOyI7CiAgICAgICAgJHJlcyA9IG15c3FsaV9xdWVyeSgkdGhpcy0+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[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCi8vIGRvIHN5c3RlbXMgY2hlY2tzCnRyeSB7CiAgICBpZiggIWNsYXNzX2V4aXN0cygnXFppcEFyY2hpdmUnKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignWW91ciBpbnN0YWxsYXRpb24gZG9lcyBub3Qgc3VwcG9ydCB0aGUgUEhQIFppcEFyY2hpdmUgY2xhc3MnKTsKICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICBpZiggISRkaXIgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1lvdXIgaW5zdGFsbGF0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbGlkIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5Jyk7CiAgICBpZiggIWlzX3dyaXRhYmxlKCRkaXIpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdZb3VyIGluc3RhbGxhdGlvbiBjYW5ub3Qgd3JpdGUgdG8gdGhlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5Jyk7CgogICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBTbmFwc2hvdHMnLCdNYW5hZ2UgU25hcHNob3RzJyk7CiAgICAkdGhpcy0+Q3JlYXRlRXZlbnQoJ0JlZm9yZUNyZWF0ZVNuYXBzaG90Jyk7Cn0KY2F0Y2goIFxFeGNlcHRpb24gJGUgKSB7CiAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCdJbnN0YWxsYXRpb24gUHJvYmxlbTogJy4kZS0+R2V0TWVzc2FnZSgpKTsKICAgIGRlYnVnX3RvX2xvZyhfX0ZJTEVfXyk7CiAgICBkZWJ1Z190b19sb2coJGUtPkdldE1lc3NhZ2UoKSk7CiAgICByZXR1cm4gJGUtPkdldE1lc3NhZ2UoKTsKfQoKIwojIEVPRgojCg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdNYW5hZ2UgU25hcHNob3RzJyk7CiR0aGlzLT5SZW1vdmVFdmVudCgnQmVmb3JlQ3JlYXRlU25hcHNob3QnKTsKCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHU25hcHNob3QgKGMpIDIwMTUgYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gY3JlYXRlIHNuYXBzaG90cyBvZiB0aGUgc3lzdGVtCiMgIGluY2x1ZGluZyBkYXRhYmFzZSBzbmFwc2hvdHMgYW5kIGFsbG93IGRvd25sb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGVtLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKCi8vIGRvIHN5c3RlbXMgY2hlY2tzCnRyeSB7CiAgICBpZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjInKSA8IDAgKSB7CiAgICAgICAgJHRoaXMtPkNyZWF0ZUV2ZW50KCdCZWZvcmVDcmVhdGVTbmFwc2hvdCcpOwogICAgfQp9CmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnSW5zdGFsbGF0aW9uIFByb2JsZW06ICcuJGUtPkdldE1lc3NhZ2UoKSk7CiAgICBkZWJ1Z190b19sb2coX19GSUxFX18pOwogICAgZGVidWdfdG9fbG9nKCRlLT5HZXRNZXNzYWdlKCkpOwogICAgcmV0dXJuICRlLT5HZXRNZXNzYWdlKCk7Cn0KCiMKIyBFT0YKIwo=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IENHU25hcHNob3QKdmVyc2lvbiA9IDEuMy4xCmRlc2NyaXB0aW9uID0gCmF1dGhvciA9IGNhbGd1eTEwMDAKYXV0aG9yZW1haWwgPSBjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnCm1pbmNtc3ZlcnNpb24gPSAyLjEuNgpsYXp5bG9hZGFkbWluID0gMQpsYXp5bG9hZGZyb250ZW5kID0gMQpbZGVwZW5kc10KQ0dFeHRlbnNpb25zID0gMS41Mwo=]]></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/Pg0KlQEAAAgAAAARAAAAAQAXAAAAQ0dTbmFwc2hvdC1SZXN0b3JlLnBoYXIAAAAABwAAAGNsaS5waHBDJAAAVwZjWEMkAAD8Th8ntgEAAAAAAAAiAAAAbGliL2NsYXNzLmNvbXBhdGliaWxpdHlfdGVzdGVyLnBocBUaAABXBmNYFRoAAPirlTG2AQAAAAAAABAAAABsaWIvZGJfdXRpbHMucGhwNggAAFcGY1g2CAAA9AK7VbYBAAAAAAAADQAAAGxpYi91dGlscy5waHANDgAAVwZjWA0OAACmZgshtgEAAAAAAAAdAAAAbGliL2NsYXNzLnNlY3VyZV9pbmlfZmlsZS5waHAZHgAAVwZjWBkeAACxApGotgEAAAAAAAAZAAAAbGliL2NsYXNzLnNpbXBsZV90ZXN0LnBocHELAABXBmNYcQsAAHsepCy2AQAAAAAAAAcAAAB3d3cucGhw9wEAAFcGY1j3AQAA5v7PBbYBAAAAAAAACQAAAGJ1aWxkLnBocFoBAABXBmNYWgEAADt++Dm2AQAAAAAAADw/cGhwCgppbmNsdWRlX29uY2UoJ2xpYi91dGlscy5waHAnKTsKaW5jbHVkZV9vbmNlKCdsaWIvZGJfdXRpbHMucGhwJyk7CmluY2x1ZGVfb25jZSgnbGliL2NsYXNzLmNvbXBhdGliaWxpdHlfdGVzdGVyLnBocCcpOwoKJHNjcmlwdCA9IGJhc2VuYW1lKCRhcmd2WzBdKTsKJGRiY29uZmlnID0gbnVsbDsgLy8gZGIgY29uZmlnIGFycmF5CiRkYmZpbGUgPSBudWxsOyAvLyBwYXRoIHRvIGltcG9ydCBmaWxlLgokc25hcHNob3QgPSBudWxsOyAvLyBwYXRobmFtZSB0byBzbmFwc2hvdAokb2xkX2NvbmZpZyA9IG51bGw7IC8vIG9sZCBjb25maWcgdmFsdWVzCiRhcmNoID0gbnVsbDsgIC8vIHRoZSBhcmNoaXZlIG9iamVjdAokZGlyID0gZ2V0Y3dkKCk7CiRjb25maWdfZmlsZSA9IG51bGw7Cgokb3V0ID0gPDw8RU9UCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPT09IENHU25hcHNob3QgUmVzdG9yZSBVdGlsaXR5ID09PQpUaGlzIHByb2dyYW0gd2lsbCBhdHRlbXB0IHRvIHJlc3RvcmUgYSBDR1NuYXBzaG90IGZpbGUgaW50byBhIHdvcmtpbmcgQ01TTVMgRGlzdHJpYnV0aW9uLgpUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc3RlcHMgaW4gdGhpcyBvcGVyYXRpb246CjEuICBEbyBhIGJhc2ljIGNoZWNrIGZvciBzeXN0ZW0gY29tcGF0aWJpbGl0eQoyLiAgQXNrIGZvciwgYW5kIHZhbGlkYXRlIHRoZSBDR1NuYXBzaG90IGZpbGUKMy4gIENoZWNrIGZvciBhbiBlbXB0eSBkaXJlY3RvcnkuCjQuICBHZXQgYW5kIHZhbGlkYXRlIGRhdGFiYXNlIGNyZWRlbnRpYWxzLCBhbmQgdGhlIGRhdGFiYXNlCjUuICBFeHRyYWN0IENHU25hcHNob3QgRmlsZXMKNi4gIFJlc3RvcmUgdGhlIGRhdGFiYXNlCjcuICBTZWN1cmUgdGhlIGluc3RhbGxhdGlvbgo4LiAgR2VuZXJhdGUgYSBuZXcgY29uZmlnLnBocAoKVGhlcmUgYXJlIHN0ZXBzIHlvdSBtYXkgbmVlZCB0byB0YWtlIGFmdGVyIHRoaXMgb3BlcmF0aW9uIGlzIGNvbXBsZXRlIHRvIGVuc3VyZSBhIHdvcmtpbmcgc3lzdGVtLApQYXJ0aWN1bGFybHkgaWYgeW91IGFyZSBtb3ZpbmcgdG8gYSBuZXcgaG9zdC4KVGhlc2UgSW5jbHVkZQoxLiAgQWRqdXN0aW5nIHlvdXIgLmh0YWNjZXNzIGZpbGUKMi4gIEFkanVzdGluZyBhbnkgaGFyZCBjb2RlZCBsaW5rcwozLiAgQWRqdXN0aW5nIG1vZHVsZSBwcmVmZXJlbmNlcyBhbmQgc2V0dGluZ3MKNC4gIFRlc3RpbmcKCk5PVEVTOgoxLiAgVGhpcyBzY3JpcHQgcmVxdWlyZXMgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBzaGVsbCBjb21tYW5kcy4KMi4gIFRoaXMgc2NyaXB0IHJlcXVpcmVzIHRoYXQgdGhlIG15c3FsIHByb2dyYW0gYmUgaW4gdGhlIGN1cnJlbnQgUEFUSC4KMy4gIFRoaXMgc2NyaXB0IHJlcXVpcmVzIHRoZSBaaXBBcmNoaXZlIHBocCBjbGFzcyAodXN1YWxseSBidWlsdCBpbikKNC4gIFRoaXMgc2NyaXB0IGRvZXMgY29tcGF0aWJpbGl0eSBjaGVja3MgdGhhdCBtYXkgYmUgbGVzcyBleHRlbnNpdmUgdGhhbiB0aG9zZSBidWlsdCBpbnRvIENNU01TLCBvciBtYXkgYmUgbW9yZSBleHRlbnNpdmUuCkVPVDsKY2xzKCk7Cm91dHB1dCgkb3V0KTsKCiRyZXMgPSBhc2tfYm9vbCgnQXJlIHlvdSByZWFkeSB0byBiZWdpbj8nKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgb3V0cHV0KCJUaGFuayB5b3UsIGNvbWUgYWdhaW4iKTsKICAgIGV4aXQ7Cn0KCi8vIDEuICBwcm9tcHQgZm9yIHppcCBmaWxlCiRvdXQgPSA8PDxFT1QKPT0gRW50ZXIgdGhlIENHU25hcHNob3QgbmFtZSA9PQpQbGVhc2UgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIENHU25hcHNob3QgZmlsZSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHJlc3RvcmUuCgpOb3RlOiBUaGUgZmlsZW5hbWUgc2hvdWxkIGJlIGFuIGFic29sdXRlIHBhdGgsIG9yIHNob3VsZCByZXNpZGUgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgpFT1Q7CiRzbmFwc2hvdCA9IG51bGw7CmNscygpOwp3aGlsZSggISRzbmFwc2hvdCApIHsKICAgIG91dHB1dCgkb3V0KTsKICAgICRyZXMgPSBhc2tfc3RyaW5nX3JlcXVpcmVkKCAiQ0dTbmFwc2hvdCBGaWxlIE5hbWU6IiApOwogICAgaWYoICRyZXMgKSB7CiAgICAgICAgJGZuID0gJGRpci4nLycuJHJlczsKICAgICAgICBpZiggIWlzX2ZpbGUoJGZuKSB8fCAhaXNfcmVhZGFibGUoJGZuKSApIHsKICAgICAgICAgICAgbmV3bGluZSgpOwogICAgICAgICAgICBlcnJvcigiQ291bGQgbm90IGZpbmQgdGhlIGZpbGU6ICRyZXMiKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiggIWlzX2Nnc25hcHNob3QoJGZuKSApIHsKICAgICAgICAgICAgbmV3bGluZSgpOwogICAgICAgICAgICBlcnJvcigiJHJlcyBpcyBub3QgYSBDR1NuYXBzaG90IGFyY2hpdmUgZmlsZSIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHNuYXBzaG90ID0gJHJlczsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CgovLyAyLiAgR2V0IGNvbmZpZyBhbmQgZGF0YWJhc2UgZmlsZXMgZnJvbSB0aGUgc25hcHNob3QKJGNvbmZpZ19maWxlcyA9IGFycmF5KCdjb25maWcucGhwJywnbGliL2NvbmZpZy5waHAnKTsKJG9sZF9jb25maWcgPSBudWxsOwokdG1wZmlsZSA9ICcudG1wLmNvbmZpZy5waHAnOwokYXJjaCA9IG5ldyBcWmlwQXJjaGl2ZTsKJGFyY2gtPm9wZW4oJHNuYXBzaG90KTsKJGRiZmlsZSA9IGNvcHlfYXJjaGZpbGVfdG9fdG1wKCRhcmNoLCd0bXAvX19teXNxbGR1bXAuc3FsJyk7CmZvcmVhY2goICRjb25maWdfZmlsZXMgYXMgJGZpbGUgKSB7CiAgICAkZm4gPSBjb3B5X2FyY2hmaWxlX3RvX3RtcCgkYXJjaCwkZmlsZSk7CiAgICBpZiggJGZuICkgewogICAgICAgICRjb25maWdfZmlsZSA9ICRmaWxlOwogICAgICAgIGluY2x1ZGUoJGZuKTsKICAgICAgICAkb2xkX2NvbmZpZyA9ICRjb25maWc7CiAgICAgICAgdW5zZXQoJGNvbmZpZyk7CiAgICAgICAgdW5saW5rKCRmbik7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KaWYoICEkb2xkX2NvbmZpZyB8fCAhaXNzZXQoJG9sZF9jb25maWdbJ2RiX25hbWUnXSkgKSB7CiAgICBlcnJvcigiQ291bGQgbm90IGZpbmQgY29uZmlnIGRhdGEgaW4gQ0dTbmFwc2hvdCIpOwogICAgZXhpdCgxKTsKfQoKLy8gMy4gIERpc3BsYXkgaW5mbyBmcm9tIHRoZSBzbmFwc2hvdAokY2dzbmFwc2hvdF9maWxlID0gJGFyY2gtPmdldEZyb21OYW1lKCd0bXAvLmNnc25hcHNob3QnKTsKJGluaSA9IG5ldyBcQ0dTbmFwc2hvdFxwaGFyXHNlY3VyZV9pbmlfZmlsZTsKJGNnc25hcHNob3RfZGF0YSA9ICRpbmktPnBhcnNlKCRjZ3NuYXBzaG90X2ZpbGUsRkFMU0UpOwpjbHMoKTsKb3V0cHV0KCc9PSBDR1NuYXBzaG90IERldGFpbHMgPT0nKTsKb3V0cHV0KCdTaXRlIE5hbWU6ICcuJGNnc25hcHNob3RfZGF0YVsnd2Vic2l0ZSddWydzaXRlbmFtZSddKTsKb3V0cHV0KCdTaXRlIFVSTDogJy4kY2dzbmFwc2hvdF9kYXRhWyd3ZWJzaXRlJ11bJ3Jvb3RfdXJsJ10pOwpvdXRwdXQoJ0NNU01TIFZlcnNpb246ICcuJGNnc25hcHNob3RfZGF0YVsnd2Vic2l0ZSddWydjbXNfdmVyc2lvbiddKTsKb3V0cHV0KCdDcmVhdGVkOiAnLnN0cmZ0aW1lKCcleCAlWCcsJGNnc25hcHNob3RfZGF0YVsnbWFpbiddWydjcmVhdGVkJ10pKTsKJHJlcyA9IGFza19ib29sKCdEbyB5b3Ugd2FudCB0byBjb250aW51ZT8nKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgb3V0cHV0KCJUaGFuayB5b3UsIGNvbWUgYWdhaW4iKTsKICAgIGV4aXQ7Cn0KCi8vIDQuICBDb21wYXRpYmlsaXR5IGNoZWNrCmNscygpOwpvdXRwdXQoJz09IENoZWNrIGZvciBDb21wYXRpYmlsaXR5ID09Jyk7CiRwYXJtcyA9IGFycmF5KCdkaXInPT4kZGlyLCdleGNsdWRlcyc9PmFycmF5KGJhc2VuYW1lKCRzbmFwc2hvdCksJHNjcmlwdCkpOwokdGVzdGVyID0gbmV3IFxDR1NuYXBzaG90XHBoYXJcY29tcGF0aWJpbGl0eV90ZXN0ZXIoJHBhcm1zKTsKJHJlcyA9ICR0ZXN0ZXItPnRlc3QoKTsKaWYoICEkcmVzICkgewogICAgbmV3bGluZSgpOwogICAgZXJyb3IoIk9uZSBvciBtb3JlIGNvbXBhdGliaWxpdHkgdGVzdHMgZmFpbGVkIik7CiAgICAkZmFpbGVkID0gJHRlc3Rlci0+Z2V0X2ZhaWxlZCgpOwogICAgZm9yZWFjaCggJGZhaWxlZCBhcyAkb25lICkgewogICAgICAgIGVycm9yKCIgICAgJG9uZSA6ICIuJHRlc3Rlci0+Z2V0X2Vycm9ybXNnKCRvbmUpLEZBTFNFKTsKICAgIH0KICAgIGVycm9yKCJOb3QgYWxsIHRlc3RzIHBhc3NzZWQuLi4gbXVzdCBleGl0LiIpOwogICAgZXhpdCgxKTsKfQoKJG91dCA9IGFycmF5KCk7CiRsaXN0ID0gYXJyYXkoKTsKJGxpc3RbJ2EnXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgSG9zdCcsJ2tleSc9PidkYl9ob3N0bmFtZScsJ3ZhbCc9Pidsb2NhbGhvc3QnKTsKJGxpc3RbJ2InXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgTmFtZScsJ2tleSc9PidkYl9uYW1lJywndmFsJz0+bnVsbCk7CiRsaXN0WydjJ10gPSBhcnJheSgncHJvbXB0Jz0+J0RhdGFiYXNlIFVzZXInLCdrZXknPT4nZGJfdXNlcm5hbWUnLCd2YWwnPT5udWxsKTsKJGxpc3RbJ2QnXSA9IGFycmF5KCdwcm9tcHQnPT4nRGF0YWJhc2UgUGFzc3dvcmQnLCdrZXknPT4nZGJfcGFzc3dvcmQnLCd2YWwnPT5udWxsKTsKJGxpc3RbJ2UnXSA9IGFycmF5KCdwcm9tcHQnPT4nREJNUyAobXlzcWwvbXlzcWxpKScsJ2tleSc9PidkYm1zJywndmFsJz0+J215c3FsaScsJ29wdGlvbnMnPT5hcnJheSgnbXlzcWxpJywnbXlzcWwnKSk7CiRsaXN0Wyd6J10gPSBhcnJheSgncHJvbXB0Jz0+J0RvbmUvRmluaXNoZWQnKTsKJHZhbGlkID0gZmFsc2U7CiRidWlsZF9wcm9tcHQgPSBmdW5jdGlvbigkbGlzdCkgewogICAgJHByb21wdCA9ICc9PSBEYXRhYmFzZSBDb25uZWN0aW9uIEluZm9ybWF0aW9uID09Jy4iXG4iOwogICAgZm9yZWFjaCggJGxpc3QgYXMgJGtleSA9PiAkcmVjICkgewogICAgICAgIGlmKCBpc3NldCgkcmVjWydrZXknXSkgKSB7CiAgICAgICAgICAgICRwcm9tcHQgLj0gc3ByaW50ZigiJXM6ICUyMHMgPSAlc1xuIiwka2V5LCRyZWNbJ3Byb21wdCddLCRyZWNbJ3ZhbCddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcHJvbXB0IC49IHNwcmludGYoIiVzOiAlMjBzXG4iLCRrZXksJHJlY1sncHJvbXB0J10pOwogICAgICAgIH0KICAgIH0KICAgICRwcm9tcHQgLj0gIlxuT3B0aW9uIFthLGIsYyxkLGUgcS9xdWl0L2V4aXRdOiAiOwogICAgcmV0dXJuICRwcm9tcHQ7Cn07CgpjbHMoKTsKd2hpbGUoICEkdmFsaWQgKSB7CiAgICB3aGlsZSggMSApIHsKICAgICAgICAvLyBkaXNwbGF5IHRoZSBsaXN0CiAgICAgICAgJGxpc3RrZXkgPSBhc2tfb3B0aW9uKCRidWlsZF9wcm9tcHQoJGxpc3QpLGFycmF5X2tleXMoJGxpc3QpKTsKICAgICAgICBpZiggJGxpc3RrZXkgPT0gJ3onICkgYnJlYWs7CiAgICAgICAgaWYoIGlzc2V0KCRsaXN0WyRsaXN0a2V5XVsnb3B0aW9ucyddKSApIHsKICAgICAgICAgICAgJHZhbCA9IGFza19vcHRpb24oJGxpc3RbJGxpc3RrZXldWydwcm9tcHQnXS4nOicsJGxpc3RbJGxpc3RrZXldWydvcHRpb25zJ10pOwogICAgICAgICAgICAkbGlzdFskbGlzdGtleV1bJ3ZhbCddID0gdHJpbSgkdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR2YWwgPSBhc2tfc3RyaW5nX3JlcXVpcmVkKCRsaXN0WyRsaXN0a2V5XVsncHJvbXB0J10uJzonKTsKICAgICAgICAgICAgJGxpc3RbJGxpc3RrZXldWyd2YWwnXSA9IHRyaW0oJHZhbCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHdlIGhhdmUgYSB2YWx1ZSBmb3IgZXZlcnl0aGluZwogICAgJGZuZCA9IHRydWU7CiAgICBmb3JlYWNoKCAkbGlzdCBhcyAka2V5ID0+ICRyZWMgKSB7CiAgICAgICAgaWYoICFpc3NldCgkcmVjWydrZXknXSkgKSBjb250aW51ZTsKICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ3ZhbCddKSB8fCAkcmVjWyd2YWwnXSA9PSAnJyApIHsKICAgICAgICAgICAgJGZuZCA9IGZhbHNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBpZiggJGZuZCApIHsKICAgICAgICAvLyBkbyBhIHRlc3QgY29ubmVjdGlvbgogICAgICAgICRkYmNvbmZpZyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJGtleSA9PiAkcmVjICkgewogICAgICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ2tleSddKSApIGNvbnRpbnVlOwogICAgICAgICAgICBpZiggIWlzc2V0KCRyZWNbJ3ZhbCddKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkZGJjb25maWdbJHJlY1sna2V5J11dID0gJHJlY1sndmFsJ107CiAgICAgICAgfQogICAgICAgICRyZXMgPSBcQ0dTbmFwc2hvdFxwaGFyXHRlc3RfZGJfY29ubmVjdCgkZGJjb25maWcpOwogICAgICAgIGlmKCAhJHJlcyApIHsKICAgICAgICAgICAgbmV3bGluZSgpOwogICAgICAgICAgICBlcnJvcignUHJvYmxlbSBjb25uZWN0aW5nIHRvIHRoZSBkYXRhYmFzZS4uLiBwbGVhc2UgZG91YmxlY2hlY2sgeW91ciBpbmZvcm1hdGlvbicpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIC8vIGNvbm5lY3RlZCBva2F5LCBzZWUgaWYgdGhlIGRiIGlzIGVtcHR5CiAgICAgICAgJHJlcyA9IFxDR1NuYXBzaG90XHBoYXJcdGVzdF9kYl9lbXB0eSgkcmVzLCRkYmNvbmZpZyk7CiAgICAgICAgaWYoICEkcmVzICkgewogICAgICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgICAgIGVycm9yKCdUaGUgZGF0YWJhc2UgeW91IHNlbGVjdGVkIGFwcGVhcnMgdG8gYWxyZWFkeSBjb250YWluIHRhYmxlcy4uLiBwbGVhc2UgcGljayBhbm90aGVyIGRhdGFiYXNlLCBvciBjbGVhciB0aGlzIG9uZS4nKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAkdmFsaWQgPSB0cnVlOwogICAgfQp9CgovLyA1LiAgaW1wb3J0IGRhdGFiYXNlCmNscygpOwpvdXRwdXQoJz09IGltcG9ydGluZyBkYXRhYmFzZSA9PScpOwokcmVzID0gXENHU25hcHNob3RccGhhclxkYl9pbXBvcnQoJGRiY29uZmlnLCRkYmZpbGUpOwppZiggISRyZXMgKSB7CiAgICBuZXdsaW5lKCk7CiAgICBlcnJvcignUHJvYmxlbSBpbXBvcnRpbmcgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZS4uLiBwbGVhc2UgY2xlYW51cCBhbmQgcmV0cnknKTsKICAgIGV4aXQoMSk7Cn0Kb3V0cHV0KCdkb25lJyk7CgovLyA2LiAgZXh0cmFjdCB6aXAgZmlsZXMKJG9wID0gbnVsbDsKbmV3bGluZSgpOwpvdXRwdXQoJz09IHJlc3RvcmluZyBmaWxlcyA9PScpOwpmb3IoICRpID0gMDsgJGkgPCAkYXJjaC0+bnVtRmlsZXM7ICRpKysgKSB7CiAgICAkZW50cnkgPSAkYXJjaC0+Z2V0TmFtZUluZGV4KCRpKTsKICAgICRhcmNoLT5leHRyYWN0VG8oJy4nLCRlbnRyeSk7CiAgICAkcCA9IChpbnQpICgoZmxvYXQpJGkgLyAoZmxvYXQpJGFyY2gtPm51bUZpbGVzICogMTAwKTsKICAgIGlmKCAkcCA+IDAgJiYgJHAgJSA1ID09IDAgJiYgJHAgIT0gJG9wICkgewogICAgICAgICRvcCA9ICRwOwogICAgICAgIG91dHB1dCgkcC4nJS4uLiAnLEZBTFNFKTsKICAgIH0KfQpvdXRwdXQoJ2RvbmUnKTsKCi8vIDYuICBnZW5lcmF0ZSBjb25maWcucGhwCmlmKCAkY29uZmlnX2ZpbGUgKSB7CiAgIC8vIGFsbCBvZiB0aGlzIGFzc3VtZXMgJGRpciA9PSBjd2QKICAgbmV3bGluZSgpOwogICBvdXRwdXQoJz09IGdlbmVyYXRpbmcgbmV3IGNvbmZpZyBmaWxlID09Jyk7CiAgIG91dHB1dCgnV0FSTklORzogIEFueSBhZHZhbmNlZCBwaHAgcHJvY2Vzc2luZyBpbiB0aGUgb3JpZ2luYWwgZmlsZSB3aWxsIGJlIHJlbW92ZWQsIGFuZCBtYXkgcmVxdWlyZSBmaXhpbmcnKTsKICAgb3V0cHV0KCdUaGUgb3JpZ2luYWwgY29uZmlnIGZpbGUgY2FuIGJlIGZvdW5kIGluIGJhay5jb25maWcucGhwIGluIHRoZSBzaXRlIHJvb3QgZGlyZWN0b3J5Jyk7CiAgICRibiA9IGJhc2VuYW1lKCRjb25maWdfZmlsZSk7CiAgICRkbiA9IGRpcm5hbWUoJGNvbmZpZ19maWxlKTsKICAgcmVuYW1lKCRjb25maWdfZmlsZSwiJGRuL2Jhay57JGJufSIpOwoKICAgaWYoICRvbGRfY29uZmlnICYmICRkYmNvbmZpZyApIHsKICAgICAgJG5ld19jb25maWcgPSBhcnJheV9tZXJnZSgkb2xkX2NvbmZpZywkZGJjb25maWcpOwogICAgICB3cml0ZV9jb25maWdfcGhwKCRjb25maWdfZmlsZSwkbmV3X2NvbmZpZyk7CiAgIH0KfQoKLy8gNi4gIHNlY3VyaXR5Li4uCm5ld2xpbmUoKTsKb3V0cHV0KCc9PSBpbXByb3Zpbmcgc2VjdXJpdHkgPT09Jyk7CiRpdGVyID0gbmV3IFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKAogICAgbmV3IFxSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZGlyLCBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3I6OlNLSVBfRE9UUyksCiAgICBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6U0VMRl9GSVJTVCwKICAgIFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpDQVRDSF9HRVRfQ0hJTEQgLy8gSWdub3JlICJQZXJtaXNzaW9uIGRlbmllZCIKICAgICk7CiRzdHIgPSAnPCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+JzsKZm9yZWFjaCggJGl0ZXIgYXMgJHBhdGggPT4gJGRpciApIHsKICAgIGlmKCAhJGRpci0+aXNEaXIoKSApIGNvbnRpbnVlOwogICAgaWYoIGZpbGVfZXhpc3RzKCRwYXRoLicvaW5kZXgucGhwJykgfHwgZmlsZV9leGlzdHMoJHBhdGguJy9pbmRleC5odG1sJykgKSBjb250aW51ZTsKCiAgICBmaWxlX3B1dF9jb250ZW50cygkcGF0aC4nL2luZGV4Lmh0bWwnLCRzdHIpOwp9CgovLyA5ICAgY2xlYW51cApuZXdsaW5lKCk7Cm91dHB1dCgnPT0gY2xlYW5pbmcgdXAgPT09Jyk7CkB1bmxpbmsoJHNuYXBzaG90KTsKQHVubGluaygkc2NyaXB0KTsKQHVubGluaygndG1wL19fbXlzcWxkdW1wLnNxbCcpOwpAdW5saW5rKCd0bXAvLmNnc25hcHNob3QnKTsKQG1rZGlyKCd0bXAvY2FjaGUnLDA3NzcpOwpAbWtkaXIoJ3RtcC90ZW1wbGF0ZXNfYycsMDc3Nyk7CgovLyAxMC4gIERPTkUKbmV3bGluZSgpOwpvdXRwdXQoJz09IEZpbmlzaGVkID09PScpOwokb3V0ID0gPDw8RU9UClRoZSByZXN0b3JlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS4gIFRoZSBkYXRhYmFzZSBhbmQgYWxsIGZpbGVzIGhhdmUgYmVuIHJlc3RvcmVkLgpZb3UgbWF5IG5lZWQgdG8gcmV2aWV3IHlvdXIgY29uZmlnLnBocCBmaWxlLCBhbmQgYWRqdXN0IHlvdXIgLmh0YWNjZXNzIGZpbGUgZm9yIHRoZSBuZXcgc2l0ZSBsb2NhdGlvbi4KQWxzbywgeW91IHNob3VsZCB1bmRlcnRha2UgZXh0ZW5zaXZlIHRlc3RpbmcuCgpUaGFuayB5b3UgZm9yIHVzaW5nIENHU25hcHNob3QuCkVPVDsKb3V0cHV0KCRvdXQpOwpleGl0Owo8P3BocAoKbmFtZXNwYWNlIENHU25hcHNob3RccGhhcjsKCmluY2x1ZGVfb25jZShfX0RJUl9fLicvY2xhc3Muc2ltcGxlX3Rlc3QucGhwJyk7CgpjbGFzcyBjb21wYXRpYmlsaXR5X3Rlc3Rlcgp7CiAgICBjb25zdCBNSU5QSFAgPSAnNS40LjExJzsKICAgIGNvbnN0IFRFU1RfTUlOUEhQVkVSID0gJ21pbnBocHZlcic7CiAgICBjb25zdCBURVNUX0RJUldSSVRBQkxFID0gJ2RpcndyaXRhYmxlJzsKICAgIGNvbnN0IFRFU1RfRElSRU1QVFkgPSAnZGlyZW1wdHknOwogICAgY29uc3QgVEVTVF9UTVBGSUxFID0gJ2Z1bmNfdG1wZmlsZSc7CiAgICBjb25zdCBURVNUX1RFTVBOQU0gPSAnZnVuY190ZW1wbmFtJzsKICAgIGNvbnN0IFRFU1RfR1pPUEVOID0gJ2Z1bmNfZ3pvcGVuJzsKICAgIGNvbnN0IFRFU1RfRVhUX01VTFRJQllURSA9ICdleHRfbXVsdGlieXRlJzsKICAgIGNvbnN0IFRFU1RfRVhUX0ZJTkZPID0gJ2V4dF9maW5mbyc7CiAgICBjb25zdCBURVNUX0VYVF9NWVNRTCA9ICdleHRfbXlzcWwnOwogICAgY29uc3QgVEVTVF9NRDUgPSAnZnVuY19tZDUnOwogICAgY29uc3QgVEVTVF9TSEExID0gJ2Z1bmNfc2hhMSc7CiAgICBjb25zdCBURVNUX0pTT04gPSAnZnVuY19qc29uJzsKICAgIGNvbnN0IFRFU1RfT1BFTkJBU0VESVIgPSAnb3BlbmJhc2VkaXInOwogICAgY29uc3QgVEVTVF9TRVNTSU9OQ09PS0lFUyA9ICdzZXNzaW9uLnVzZV9jb29raWVzJzsKICAgIGNvbnN0IFRFU1RfU0VTU0lPTlNBVkUgPSAnc2Vzc2lvbi5zYXZlcGF0aCc7CiAgICBjb25zdCBURVNUX1NBRkVNT0RFID0gJ3NhZmVfbW9kZSc7CiAgICBjb25zdCBURVNUX0ZJTEVVUExPQURTID0gJ2ZpbGVfdXBsb2Fkcyc7CiAgICBjb25zdCBURVNUX0VYVF9YTUwgPSAnZXh0X3htbCc7CiAgICBjb25zdCBURVNUX0ZJTEVHRVQgPSAnZnVuY19maWxlZ2V0Y29udGVudHMnOwogICAgY29uc3QgVEVTVF9GSUxFUFVUID0gJ2Z1bmNfZmlsZXB1dGNvbnRlbnRzJzsKCiAgICBwcml2YXRlICRfdGVzdHMgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkX3Jlc3VsdHMgPSBhcnJheSgpOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGFyYW1zID0gbnVsbCkKICAgIHsKICAgICAgICAvLyBidWlsZCBsaXN0IG9mIHRlc3RzIGJhc2VkIG9uIHBhcmFtcyBpbiB0aGUgY29uc3RydWNvdHIKICAgICAgICAkZGlyID0gaXNzZXQoJHBhcmFtc1snZGlyJ10pID8gJHBhcmFtc1snZGlyJ10gOiBnZXRjd2QoKTsKICAgICAgICAkZXhjbHVkZXMgPSBpc3NldCgkcGFyYW1zWydleGNsdWRlcyddKSA/ICRwYXJhbXNbJ2V4Y2x1ZGVzJ10gOiBudWxsOwoKICAgICAgICAvLyBjaGVjayBmb3Igd3JpdGUgYWNjZXNzCiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IG1pbnZlcnNpb25fdGVzdChzZWxmOjpURVNUX01JTlBIUFZFUixzZWxmOjpNSU5QSFAscGhwdmVyc2lvbigpKTsKICAgICAgICAkdGhpcy0+X3Rlc3RzW10gPSBuZXcgZGlyX3dyaXRhYmxlX3Rlc3Qoc2VsZjo6VEVTVF9ESVJXUklUQUJMRSwkZGlyKTsKICAgICAgICAkdGhpcy0+X3Rlc3RzW10gPSBuZXcgZGlyX2VtcHR5X3Rlc3Qoc2VsZjo6VEVTVF9ESVJFTVBUWSwkZGlyLCRleGNsdWRlcyk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfVE1QRklMRSxmdW5jdGlvbigpewogICAgICAgICAgICAgICAgJGZoID0gdG1wZmlsZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuICgkZmggPT09IEZBTFNFKSA/IEZBTFNFIDogVFJVRTsKICAgICAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9URU1QTkFNLCd0ZW1wbmFtJyk7CiAgICAgICAgJHRoaXMtPl90ZXN0c1tdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfR1pPUEVOLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25fZXhpc3RzKCdnem9wZW4nKSB8fCBmdW5jdGlvbl9leGlzdHMoJ2d6b3BlbjY0Jyk7CiAgICAgICAgICAgIH0pOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGV4dGVuc2lvbl90ZXN0KHNlbGY6OlRFU1RfRVhUX01VTFRJQllURSwnbWJzdHJpbmcnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfRVhUX0ZJTkZPLCdmaW5mb19vcGVuJyk7CiAgICAgICAgJHRoaXMtPl90ZXN0W10gPSBuZXcgc2ltcGxlX3Rlc3Qoc2VsZjo6VEVTVF9FWFRfTVlTUUwsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHRlc3RfZXh0ZW5zaW9uX2xvYWRlZCgnbXlzcWxpJykgfHwgdGVzdF9leHRlbnNpb25fbG9hZGVkKCdteXNxbCcpOwogICAgICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfTUQ1LCdtZDUnKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmdW5jdGlvbl90ZXN0KHNlbGY6OlRFU1RfU0hBMSwnc2hhMScpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9KU09OLCdqc29uX2VuY29kZScpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfT1BFTkJBU0VESVIsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHJldHVybiAoaW5pX2dldCgnb3Blbl9iYXNlZGlyJykgPT0gJycpOwogICAgICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBzaW1wbGVfdGVzdChzZWxmOjpURVNUX1NFU1NJT05DT09LSUVTLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByZXR1cm4gKGluaV9nZXQoJ3Nlc3Npb24udXNlX2Nvb2tpZXMnKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIGlmKCBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfaGFuZGxlcicpID09ICdmaWxlcycgKSB7CiAgICAgICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHNpbXBsZV90ZXN0KHNlbGY6OlRFU1RfU0VTU0lPTlNBVkUsZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAkcGF0aCA9IGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoICgkcG9zID0gc3RycG9zKCRwYXRoLCc7JykpICE9PSBGQUxTRSApICRwYXRoID0gc3Vic3RyKCRwYXRoLCRwb3MrMSk7CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc19kaXIoJHRtcCkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc193cml0YWJsZSgkdG1wKSApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gdG9kbzogdGVzdCBtZW1vcnkgbGltaXQKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBmYWxzZV90ZXN0KHNlbGY6OlRFU1RfU0FGRU1PREUsaW5pX2dldCgnc2FmZV9tb2RlJykpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IHRydWVfdGVzdChzZWxmOjpURVNUX0ZJTEVVUExPQURTLGluaV9nZXQoJ2ZpbGVfdXBsb2FkcycpKTsKICAgICAgICAkdGhpcy0+X3Rlc3RbXSA9IG5ldyBleHRlbnNpb25fdGVzdChzZWxmOjpURVNUX0VYVF9YTUwsJ3htbCcpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9GSUxFR0VULCdmaWxlX2dldF9jb250ZW50cycpOwogICAgICAgICR0aGlzLT5fdGVzdFtdID0gbmV3IGZ1bmN0aW9uX3Rlc3Qoc2VsZjo6VEVTVF9GSUxFUFVULCdmaWxlX3B1dF9jb250ZW50cycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZXJyb3Jtc2coJGNvZGUpCiAgICB7CiAgICAgICAgc3dpdGNoKCAkY29kZSApIHsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfTUlOUEhQVkVSOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb25maWd1cmVkIFBIUCB2ZXJzaW9uIGlzIHRvbyBsb3cuICBNaW5pbXVtIHJlcXVpcmVkIGlzICcuc2VsZjo6TUlOUEhQOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9ESVJXUklUQUJMRToKICAgICAgICAgICAgcmV0dXJuICdUaGUgUEhQIHByb2Nlc3MgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHdyaXRlIHRvIHRoaXMgZGlyZWN0b3J5Lic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0RJUkVNUFRZOgogICAgICAgICAgICByZXR1cm4gIlRoZSBkZXN0aW5hdGlvbiBkaXJlY3Rvcnkgc3BlY2lmaWVkIGRvZXMgbm90IGFwcGVhciB0byBiZSBlbXB0eSBleGNlcHQgZm9yIENHU25hcHNob3QgZmlsZXMgYW5kIHRoaXMgc2NyaXB0XG4KICAgSGludDogIENoZWNrIGZvciBoaWRkZW4gZmlsZXMuIjsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfVE1QRklMRToKICAgICAgICAgICAgcmV0dXJuICdUaGUgdG1wZmlsZSgpIG1ldGhvZCBkb2VzIG5vdCBhcHBlYXIgdG8gb3BlcmF0ZSBwcm9wZXJseSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1RFTVBOQU06CiAgICAgICAgICAgIHJldHVybiAnVGhlIHRlbXBuYW0oKSBmdW5jdGlvbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfR1pPUEVOOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBnem9wZW4vZ3pvcGVuNjQgZnVuY3Rpb25zIGRvIG5vdCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0VYVF9NVUxUSUJZVEU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIG11bHRpYnl0ZSBleHRlbnNpb25zIGRvIG5vdCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0VYVF9GSU5GTzoKICAgICAgICAgICAgcmV0dXJuICdUaGUgZmlsZWluZm8gZXh0ZW5zaW9ucyBkbyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9FWFRfTVlTUUw6CiAgICAgICAgICAgIHJldHVybiAnV2UgY291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBkYXRhYmFzZSBkcml2ZXIuJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfTUQ1OgogICAgICAgICAgICByZXR1cm4gJ1RoZSBtZDUgZnVuY3Rpb24gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1NIQTE6CiAgICAgICAgICAgIHJldHVybiAnVGhlIHNoYTEgZnVuY3Rpb24gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGF2YWlsYWJsZSc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0pTT046CiAgICAgICAgICAgIHJldHVybiAnVGhlIGpzb24gZnVuY3Rpb25zIGRvIG5vdCBhcHBlYXIgdG8gYmUgYXZhaWxhYmxlJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfT1BFTkJBU0VESVI6CiAgICAgICAgICAgIHJldHVybiAnT3BlbiBiYXNlZGlyIGlzIGVuYWJsZWQuLi4gdGhpcyBpcyBwcm9ibGVtYXRpYyc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX1NFU1NJT05DT09LSUVTOgogICAgICAgICAgICByZXR1cm4gJ1Nlc3Npb24gY29va2llcyBhcmUgbm90IGVuYWJsZWQuLi4gdGhpcyB3aWxsIGNhdXNlIHByb2JsZW1zJzsKICAgICAgICBjYXNlIHNlbGY6OlRFU1RfU0VTU0lPTlNBVkU6CiAgICAgICAgICAgIHJldHVybiAnVGhlIHNlc3Npb24gc2F2ZSBwYXRoIGRvZXMgbm90IGFwcGVhciB0byBiZSB3cml0YWJsZS4nOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9TQUZFTU9ERToKICAgICAgICAgICAgcmV0dXJuICdTYWZlIG1vZGUgaXMgZW5hYmxlZC4uLiB3ZSBjYW5ub3QgY29udGludWUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9GSUxFVVBMT0FEUzoKICAgICAgICAgICAgcmV0dXJuICdGaWxlIHVwbG9hZHMgYXJlIG5vdCBlbmFibGVkLiAgVGhpcyBpcyBwcm9ibGVtYXRpYyc7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0VYVF9YTUw6CiAgICAgICAgICAgIHJldHVybiAnWE1MIEV4dGVuc2lvbnMgYXJlIG5vdCBlbmFib2VkLic7CiAgICAgICAgY2FzZSBzZWxmOjpURVNUX0ZJTEVHRVQ6CiAgICAgICAgICAgIHJldHVybiAnVGhlIGZpbGVfZ2V0X2NvbnRlbnRzIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUnOwogICAgICAgIGNhc2Ugc2VsZjo6VEVTVF9GSUxFUFVUOgogICAgICAgICAgICByZXR1cm4gJ1RoZSBmaWxlX3B1dF9jb250ZW50cyBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLic7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICdVbmtub3duIEVycm9yOiAnLiRjb2RlOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZhaWxlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzdWx0czsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdCgpCiAgICB7CiAgICAgICAgJGZhaWxlZCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJHRoaXMtPl90ZXN0cyBhcyAkdGVzdCApIHsKICAgICAgICAgICAgJHJlcyA9ICR0ZXN0LT5leGVjdXRlKCk7CiAgICAgICAgICAgIGlmKCAhJHJlcyApIHsKICAgICAgICAgICAgICAgICRmYWlsZWRbXSA9ICR0ZXN0LT5nZXRfbGFiZWwoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiggY291bnQoJGZhaWxlZCkgKSB7CiAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0cyA9ICRmYWlsZWQ7CiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9Cn0gLy8gZW5kIG9mIGNsYXNzCjw/cGhwCgpuYW1lc3BhY2UgQ0dTbmFwc2hvdFxwaGFyOwoKZnVuY3Rpb24gdGVzdF9kYmNvbmZpZygkZGJjb25maWcpCnsKICAgIGlmKCAhaXNfYXJyYXkoJGRiY29uZmlnKSApIHJldHVybiBGQUxTRTsKICAgICRrZXlzID0gYXJyYXkoJ2RibXMnLCdkYl9ob3N0bmFtZScsJ2RiX3VzZXJuYW1lJywnZGJfcGFzc3dvcmQnLCdkYl9uYW1lJyk7CiAgICAka2V5czIgPSBhcnJheV9rZXlzKCRkYmNvbmZpZyk7CiAgICBmb3JlYWNoKCAka2V5cyBhcyAka2V5ICkgewogICAgICAgIGlmKCAhaW5fYXJyYXkoJGtleSwka2V5czIpICkgcmV0dXJuIEZBTFNFOwogICAgfQogICAgcmV0dXJuIFRSVUU7Cn0KCmZ1bmN0aW9uIHRlc3RfZGJfY29ubmVjdCgkZGJjb25maWcpCnsKICAgIGlmKCAhdGVzdF9kYmNvbmZpZygkZGJjb25maWcpICkgcmV0dXJuIEZBTFNFOwoKICAgICRvdXQgPSBudWxsOwogICAgc3dpdGNoKCAkZGJjb25maWdbJ2RibXMnXSApIHsKICAgIGNhc2UgJ215c3FsJzoKICAgICAgICBpZiggIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpICkgcmV0dXJuIEZBTFNFOwogICAgICAgICRvdXQgPSBteXNxbF9jb25uZWN0KCRkYmNvbmZpZ1snZGJfaG9zdG5hbWUnXSwkZGJjb25maWdbJ2RiX3VzZXJuYW1lJ10sJGRiY29uZmlnWydkYl9wYXNzd29yZCddLCRkYmNvbmZpZ1snZGJfbmFtZSddKTsKICAgICAgICBpZiggISRvdXQgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSAnbXlzcWxpJzoKICAgICAgICBpZiggIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxpX2Nvbm5lY3QnKSApIHJldHVybiBGQUxTRTsKICAgICAgICAkb3V0ID0gbXlzcWxpX2Nvbm5lY3QoJGRiY29uZmlnWydkYl9ob3N0bmFtZSddLCRkYmNvbmZpZ1snZGJfdXNlcm5hbWUnXSwkZGJjb25maWdbJ2RiX3Bhc3N3b3JkJ10sJGRiY29uZmlnWydkYl9uYW1lJ10pOwogICAgICAgIGlmKCAhJG91dCApIHJldHVybiBGQUxTRTsKICAgICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICByZXR1cm4gJG91dDsKfQoKZnVuY3Rpb24gdGVzdF9kYl9lbXB0eSgkaGFuZGxlLCRkYmNvbmZpZykKewogICAgaWYoICF0ZXN0X2RiY29uZmlnKCRkYmNvbmZpZykgKSByZXR1cm4gRkFMU0U7CgogICAgJG91dCA9IG51bGw7CiAgICAkc3FsID0gJ1NIT1cgVEFCTEVTJzsKICAgIHN3aXRjaCggJGRiY29uZmlnWydkYm1zJ10gKSB7CiAgICBjYXNlICdteXNxbCc6CiAgICAgICAgaWYoICgkcmVzdWx0ID0gbXlzcWxpX3F1ZXJ5KCRoYW5kbGUsJHNxbCkpICkgewogICAgICAgICAgICAkbnRhYmxlcyA9IG15c3FsaV9udW1fcm93cygkcmVzdWx0KTsKICAgICAgICAgICAgaWYoICRudGFibGVzID4gMCApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBGQUxTRTsKCiAgICBjYXNlICdteXNxbGknOgogICAgICAgIGlmKCAoJHJlc3VsdCA9IG15c3FsaV9xdWVyeSgkaGFuZGxlLCRzcWwpKSApIHsKICAgICAgICAgICAgJG50YWJsZXMgPSBteXNxbGlfbnVtX3Jvd3MoJHJlc3VsdCk7CiAgICAgICAgICAgIGlmKCAkbnRhYmxlcyA+IDAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRkFMU0U7CgogICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9Cn0KCmZ1bmN0aW9uIGRiX2ltcG9ydCgkZGJjb25maWcsJGRiZmlsZSkKewogICAgLy8gdGhpcyB1c2VzIHNoZWxsIGNvbW1hbmRzLgogICAgJGNvbW1hbmQ9Im15c3FsIC0taG9zdD17JGRiY29uZmlnWydkYl9ob3N0bmFtZSddfSAtLXVzZXI9eyRkYmNvbmZpZ1snZGJfdXNlcm5hbWUnXX0gLS1wYXNzd29yZD17JGRiY29uZmlnWydkYl9wYXNzd29yZCddfSB7JGRiY29uZmlnWydkYl9uYW1lJ119IDwgeyRkYmZpbGV9IjsKICAgIGV4ZWMoJGNvbW1hbmQsJG91dHB1dD1hcnJheSgpLCR3b3JrZWQpOwogICAgaWYoICR3b3JrZWQgPT0gMCApIHJldHVybiBUUlVFOwogICAgcHJpbnRfcigkb3V0cHV0KTsgZGllKCk7IC8vIGRlYnVnLgogICAgcmV0dXJuIEZBTFNFOwp9Cj8+PD9waHAKCmluY2x1ZGVfb25jZShfX0RJUl9fLicvY2xhc3Muc2VjdXJlX2luaV9maWxlLnBocCcpOwoKZnVuY3Rpb24gZW5kc3dpdGgoICRzdHIsICRzdWIgKQp7CglyZXR1cm4gKCBzdWJzdHIoICRzdHIsIHN0cmxlbiggJHN0ciApIC0gc3RybGVuKCAkc3ViICkgKSA9PSAkc3ViICk7Cn0KCmZ1bmN0aW9uIHN0YXJ0c3dpdGgoICRzdHIsICRzdWIgKQp7CglyZXR1cm4gKCBzdWJzdHIoICRzdHIsIDAsIHN0cmxlbiggJHN1YiApICkgPT0gJHN1YiApOwp9CgpmdW5jdGlvbiBjbHMoKQp7CiAgICBwcmludCBjaHIoMjcpIC4gIlsySiIgLiBjaHIoMjcpIC4gIls7SCI7Cn0KCmZ1bmN0aW9uIG91dHB1dCgkc3RyLCRuZXdsaW5lID0gVFJVRSkKewogICAgJHN0ciA9IHRyaW0oJHN0cik7CiAgICBpZiggISRzdHIgKSByZXR1cm47CiAgICBpZiggJG5ld2xpbmUgKSB7CiAgICAgICAgaWYoICFlbmRzd2l0aCgkc3RyLCJcbiIpICkgJHN0ciAuPSAiXG4iOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgaWYoICFlbmRzd2l0aCgkc3RyLCcgJykgKSAkc3RyIC49ICcgJzsKICAgIH0KICAgIGVjaG8gJHN0cjsKfQoKZnVuY3Rpb24gZXJyb3IoJG1zZywkcHJlZml4ID0gVFJVRSwkbmV3bGluZSA9IFRSVUUpCnsKICAgICRtc2cgPSAoc3RyaW5nKSRtc2c7CiAgICBpZiggISRtc2cgKSByZXR1cm47CgogICAgaWYoICRwcmVmaXggKSAkbXNnID0gIkVSUk9SOiAiLiRtc2c7CiAgICBpZiggJG5ld2xpbmUgJiYgIWVuZHN3aXRoKCRtc2csIlxuIikgKSAkbXNnIC49ICJcbiI7CiAgICBmd3JpdGUoU1RERVJSLCRtc2cpOwp9CgpmdW5jdGlvbiBuZXdsaW5lKCkKewogICAgZWNobyAiXG4iOwp9CgpmdW5jdGlvbiBhc2tfYm9vbCgkcHJvbXB0LCRhY2NlcHQgPSAtMSwkYXV0b3Byb21wdCA9IFRSVUUpCnsKICAgIHdoaWxlKCAxICkgewogICAgICAgIG5ld2xpbmUoKTsKICAgICAgICBpZiggJGF1dG9wcm9tcHQgKSAkcHJvbXB0IC49ICcgW1kvbl06JzsKICAgICAgICBvdXRwdXQoJHByb21wdCxGQUxTRSk7CiAgICAgICAgJGluID0gZmdldHMoU1RESU4pOwogICAgICAgICRpbiA9IHRyaW0oJGluKTsKICAgICAgICBpZiggISRpbiApIHsKICAgICAgICAgICAgaWYoICRhY2NlcHQgPT0gRkFMU0UgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIGlmKCAkYWNjZXB0ID09IFRSVUUgKSByZXR1cm4gVFJVRTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKCAkaW4gPT0gJ2V4aXQnIHx8ICRpbiA9PSAncXVpdCcgKSBleGl0OwogICAgICAgICAgICAkaW4gPSBzdHJ0b2xvd2VyKCRpbik7CiAgICAgICAgICAgIGlmKCAkaW4gPT0gJzEnIHx8ICRpbiA9PSAneScgKSByZXR1cm4gVFJVRTsKICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgIH0KICAgIH0KfQoKZnVuY3Rpb24gYXNrX29wdGlvbigkcHJvbXB0LCRvcHRpb25zKQp7CiAgICB3aGlsZSggMSApIHsKICAgICAgICBuZXdsaW5lKCk7CiAgICAgICAgb3V0cHV0KCRwcm9tcHQsRkFMU0UpOwogICAgICAgICRpbiA9IHRyaW0oZmdldHMoU1RESU4pKTsKICAgICAgICBpZiggJGluICYmIGluX2FycmF5KCRpbixhcnJheSgncScsJ3F1aXQnLCdleGl0JykpICkgZXhpdDsKICAgICAgICBpZiggJGluICYmIGluX2FycmF5KCRpbiwkb3B0aW9ucykgKSByZXR1cm4gJGluOwogICAgfQogICAgZXJyb3IoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIG9wdGlvbicpOwp9CgpmdW5jdGlvbiBhc2tfc3RyaW5nX3JlcXVpcmVkKCRwcm9tcHQsJGVycnN0ciA9IG51bGwpCnsKICAgIHdoaWxlKCAxICkgewogICAgICAgIG5ld2xpbmUoKTsKICAgICAgICBvdXRwdXQoJHByb21wdCxGQUxTRSk7CiAgICAgICAgJHN0ciA9IGZnZXRzKFNURElOKTsKICAgICAgICAkc3RyID0gdHJpbSgkc3RyKTsKICAgICAgICBpZiggISRzdHIgKSB7CiAgICAgICAgICAgIGlmKCAhJGVycm9yc3RyICkgJGVycm9yc3RyID0gJ0ludmFsaWQgUmVzcG9uc2UnOwogICAgICAgICAgICBlcnJvcigkZXJyb3JzdHIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmKCAkc3RyID09ICdxJyB8fCAkc3RyID09ICdleGl0JyB8fCAkc3RyID09ICdxdWl0JyApIGV4aXQ7CiAgICAgICAgICAgIHJldHVybiAkc3RyOwogICAgICAgIH0KICAgIH0KfQoKLy8vLy8vLy8vLy8vLy8vLy8vLwoKZnVuY3Rpb24gaXNfY2dzbmFwc2hvdCgkZmlsZW5hbWUpCnsKICAgICRmaWxlbmFtZSA9IHRyaW0oJGZpbGVuYW1lKTsKICAgIGlmKCAhJGZpbGVuYW1lICkgcmV0dXJuIEZBTFNFOwoKICAgICRsb3dlciA9IHN0cnRvbG93ZXIoJGZpbGVuYW1lKTsKICAgIGlmKCAhZW5kc3dpdGgoJGZpbGVuYW1lLCcuemlwJykgKSBSRVRVUk4gRkFMU0U7CgogICAgJGFyY2ggPSBuZXcgXFppcEFyY2hpdmU7CiAgICBpZiggKCRyZXMgPSAkYXJjaC0+b3BlbigkZmlsZW5hbWUpKSAhPT0gVFJVRSApIHsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgJGluaV90ZXh0ID0gJGFyY2gtPmdldEZyb21OYW1lKCd0bXAvLmNnc25hcHNob3QnKTsKICAgIGlmKCAhJGluaV90ZXh0ICkgcmV0dXJuIEZBTFNFOwoKICAgICRkdW1wZmlsZSA9ICRhcmNoLT5nZXRGcm9tTmFtZSgndG1wL19fbXlzcWxkdW1wLnNxbCcpOwogICAgaWYoICEkZHVtcGZpbGUgKSByZXR1cm4gRkFMU0U7CgogICAgdHJ5IHsKICAgICAgICAkaW5pID0gbmV3IFxDR1NuYXBzaG90XHBoYXJcc2VjdXJlX2luaV9maWxlKCk7CiAgICAgICAgJGluaS0+cGFyc2UoJGluaV90ZXh0LGZhbHNlKTsKICAgIH0KICAgIGNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgICAgIGRpZSgkZS0+R2V0TWVzc2FnZSgpKTsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CiAgICByZXR1cm4gVFJVRTsKfQoKZnVuY3Rpb24gY29weV9hcmNoZmlsZV90b190bXAoXFppcEFyY2hpdmUgJGFyY2gsJG5hbWUpCnsKICAgICRuYW1lID0gdHJpbSgkbmFtZSk7CiAgICBpZiggISRuYW1lICkgcmV0dXJuOwoKICAgICRkaXIgPSBzeXNfZ2V0X3RlbXBfZGlyKCk7CiAgICBpZiggISRkaXIgKSB7CiAgICAgICAgZXJyb3IoJ0NvdWxkIG5vdCBnZXQgc3lzdGVtIHRlbXBvcmFyeSBkaXJlY3RvcnkuLi4gZXhpdGluZycpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgJGZuID0gdGVtcG5hbSgkZGlyLCdjZ3MnKTsKICAgICRkYXRhID0gJGFyY2gtPmdldEZyb21OYW1lKCRuYW1lKTsKICAgIGlmKCAkZGF0YSApIHsKICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZm4sJGRhdGEpOwogICAgICAgIHJldHVybiAkZm47CiAgICB9Cn0KCmZ1bmN0aW9uIHdyaXRlX2NvbmZpZ19waHAoJGZpbGVuYW1lLCRkYXRhKQp7CiAgICAkbm93ID0gc3RyZnRpbWUoJyV4Jyk7CiAgICAkb3V0ID0gIjw/cGhwXG4vLyBHZW5lcmF0ZWQgYnkgQ0dTbmFwc2hvdC1SZXN0b3JlIG9uIHskbm93fVxuIjsKICAgICRmbXQgPSAiXCRjb25maWdbJyVzJ10gPSAnJXMnO1xuIjsKICAgIGZvcmVhY2goICRkYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAkb3V0IC49IHNwcmludGYoJGZtdCwka2V5LCR2YWwpOwogICAgfQogICAgJG91dCAuPSAiXG4iOwogICAgZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCRvdXQpOwp9PD9waHAKCm5hbWVzcGFjZSBDR1NuYXBzaG90XHBoYXI7CgpjbGFzcyBzZWN1cmVfaW5pX2ZpbGUKewogICAgcHJpdmF0ZSAkX2ZpbGVuYW1lOwogICAgcHJpdmF0ZSAkX2ZpcnN0X3NlY3Rpb24gPSBUUlVFOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmlsZW5hbWUgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5zZXRfZmlsZW5hbWUoJGZpbGVuYW1lKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkdGhpcy0+X2ZpbGVuYW1lID0gdHJpbSgkZmlsZW5hbWUpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX3NvcnRfZGF0YSgkZGF0YSkKICAgIHsKICAgICAgICAkb3V0ID0gJGRhdGE7CiAgICAgICAgZm9yZWFjaCggJG91dCBhcyAka2V5ID0+ICYkdmFsICkgewogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHZhbCkgKSAkdmFsID0gJHRoaXMtPl9zb3J0X2RhdGEoJHZhbCk7CiAgICAgICAgfQogICAgICAgIGtzb3J0KCRvdXQpOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmaW5hbCBmdW5jdGlvbiBfY2FsY19jaGVja3N1bSgkZGF0YSkKICAgIHsKICAgICAgICAkc29ydGVkID0gJHRoaXMtPl9zb3J0X2RhdGEoJGRhdGEpOwogICAgICAgICRzYWx0ID0gJ2Vyd2VyaWRmYXNkcyBuZGZhc2RmYXNoZGZhc2Q5MzQ5OCooIGRpZmFvdWRmYXNkZmFhZGYgc2RmMGFkZmExMjMpJzsgLy8ganVzdCBzb21lIHJhbmRvbSBjaGFyYWN0ZXJzCiAgICAgICAgJHNpZyA9IG1kNSgkc2FsdC5zZXJpYWxpemUoJHNvcnRlZCkpOwogICAgICAgIHJldHVybiAkc2lnOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfaW5pX3NlY3Rpb24oJHNlY3Rpb24pCiAgICB7CiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgaWYoICEkdGhpcy0+X2ZpcnN0X3NlY3Rpb24gKSB7CiAgICAgICAgICAgICR0aGlzLT5fZmlyc3Rfc2VjdGlvbiA9IEZBTFNFOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJG91dCAuPSAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJG91dCAuPSAnWycudHJpbSgkc2VjdGlvbikuIl1cbiI7CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF93cml0ZV9pbmlfdmFsKCRrZXksJHZhbCkKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICAvLyBAdG9kbyBjaGVjayBmb3IgaW52YWxpZCBjaGFycyBpbiB0aGUga2V5IGFuZCB0aHJvdyBhbiBleGNlcHRpb24KICAgICAgICAkbmtleSA9IHRyaW0oJGtleSk7CiAgICAgICAgJG52YWwgPSB0cmltKCR2YWwpOwogICAgICAgIGlmKCAhJG5rZXkgKSByZXR1cm47CiAgICAgICAgJHR5cGUgPSBnZXR0eXBlKCR2YWwpOwogICAgICAgIGlmKCAkdHlwZSA9PSAnb2JqZWN0JyApIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ09iamVjdHMgY2Fubm90IGJlIHN0b3JlZCcpOwoKICAgICAgICAkZm5kID0gMDsKICAgICAgICAkYmFkY2hhcnMgPSBhcnJheSgiXG4iLCJcciIsIjsiLCInIiwnIicpOwogICAgICAgIGZvcmVhY2goICRiYWRjaGFycyBhcyAkY2ggKSB7CiAgICAgICAgICAgIGlmKCBzdHJwb3MoJG52YWwsJGNoKSAhPT0gRkFMU0UgKSB7CiAgICAgICAgICAgICAgICAkZm5kID0gMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAkZm5kICkgewogICAgICAgICAgICAvLyB0aGVyZSBhcmUgYmFkIGNoYXJhY3Rycy4gZ290dGEgZXNjYXBlIHRoZSBkb3VibGUgcXVvdGVzCiAgICAgICAgICAgICRudmFsID0gc3RyX3JlcGxhY2UoJyInLCdcIicsJG52YWwpOwogICAgICAgIH0KICAgICAgICAkbnZhbCA9ICInIi4kdHlwZS4nfDp8Jy4kbnZhbC4iJyI7CiAgICAgICAgJG91dCAuPSBzcHJpbnRmKCIlcyA9ICVzXG4iLCRrZXksJG52YWwpOwogICAgICAgIHJldHVybiAkb3V0OwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfd3JpdGVfZmlsZV9oZWFkZXIoJGNoZWNrc3VtKQogICAgewogICAgICAgICRvdXQgPSAnOzw/cGhwIGRpZSgpOyAvKiBTSUc9Jy4kY2hlY2tzdW0uJyAqLyA/PicuIlxuIjsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3dyaXRlX2luaV9hcnJheSgkYXJyLCRzZWN0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICAkb3V0ID0gbnVsbDsKICAgICAgICAkc2VjdGlvbiA9IHRyaW0oJHNlY3Rpb24pOwogICAgICAgICRpc19hc3NvYyA9IChhcnJheV9rZXlzKCRhcnIpICE9PSByYW5nZSgwLCBjb3VudCgkYXJyKSAtIDEpKTsKCiAgICAgICAgaWYoICRpc19hc3NvYyApIHsKICAgICAgICAgICAgLy8gcGFzcyBvbmUsIG5vcm1hbCB2YWx1ZXMKICAgICAgICAgICAgZm9yZWFjaCggJGFyciBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgICAgICBpZiggIWlzX2FycmF5KCR2YWwpICkgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV92YWwoJGtleSwkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggJG91dCApIHsKICAgICAgICAgICAgICAgIGlmKCAhJHNlY3Rpb24gKSAkc2VjdGlvbiA9ICdtYWluJzsKICAgICAgICAgICAgICAgICRvdXQgPSAkdGhpcy0+X3dyaXRlX2luaV9zZWN0aW9uKCRzZWN0aW9uKSAuICRvdXQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHBhc3MgdHdvLCBuZXN0ZWQgYXJyYXlzCiAgICAgICAgICAgIGZvcmVhY2goICRhcnIgYXMgJGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdmFsKSApIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYoIGFycmF5X2tleXMoJHZhbCkgIT09IHJhbmdlKDAsIGNvdW50KCR2YWwpIC0gMSkgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gYXNzb2NpYXRpdmUgY2hpbGQgYXJyYXkKICAgICAgICAgICAgICAgICAgICAkdG1wID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZiggJHNlY3Rpb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0bXAgPSAkc2VjdGlvbi4iIDogJGtleSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdG1wID0gJGtleTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkdmFsLCR0bXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGNoaWxkIGFycmF5CiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV9hcnJheSgkdmFsLCRrZXkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiggISRzZWN0aW9uICkgJHNlY3Rpb24gPSAnbWFpbic7CiAgICAgICAgICAgIGZvciggJGkgPSAwLCAkbiA9IGNvdW50KCRhcnIpOyAkaSA8ICRuOyAkaSsrICkgewogICAgICAgICAgICAgICAgJG91dCAuPSAkdGhpcy0+X3dyaXRlX2luaV92YWwoJHNlY3Rpb24uJ1tdJywkYXJyWyRpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKCRkYXRhKQogICAgewogICAgICAgICRja3N1bSA9ICR0aGlzLT5fY2FsY19jaGVja3N1bSgkZGF0YSk7CiAgICAgICAgJG91dCA9ICR0aGlzLT5fd3JpdGVfZmlsZV9oZWFkZXIoJGNrc3VtKTsKICAgICAgICAkb3V0IC49ICR0aGlzLT5fd3JpdGVfaW5pX2FycmF5KCRkYXRhKTsKICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGRhdGEsJGZpbGVuYW1lID0gbnVsbCkKICAgIHsKICAgICAgICBpZiggISRmaWxlbmFtZSApICRmaWxlbmFtZSA9ICR0aGlzLT5fZmlsZW5hbWU7CiAgICAgICAgaWYoICEkZmlsZW5hbWUgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ05vIGZpbGVuYW1lIHNwZWNpZmllZCB0byBpbnN0YW5jZSBvZiAnLl9fQ0xBU1NfXyk7CiAgICAgICAgJGRpciA9IGRpcm5hbWUoJHRoaXMtPl9maWxlbmFtZSk7CiAgICAgICAgaWYoIChpc19maWxlKCRmaWxlbmFtZSkgJiYgIWlzX3dyaXRhYmxlKCR0aGlzLT5fZmlsZW5hbWUpKSB8fCAhaXNfd3JpdGFibGUoJGRpcikgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiTm8gcGVybWlzc2lvbiB0byB3cml0ZSB0byAiLiR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIH0KCiAgICAgICAgJGZoID0gZm9wZW4oJGZpbGVuYW1lLCd3Jyk7CiAgICAgICAgZndyaXRlKCRmaCwkdGhpcy0+Z2VuZXJhdGUoKSk7CiAgICAgICAgZmNsb3NlKCRmaCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoJGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53cml0ZSgkZGF0YSk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9jb252ZXJ0X3ZhbHVlcygkZGF0YSkKICAgIHsKICAgICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkZGF0YSBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdmFsKSApIHsKICAgICAgICAgICAgICAgICRvdXRbJGtleV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbGlzdCgkdHlwZSwkdmFsKSA9IGV4cGxvZGUoJ3w6fCcsJHZhbCwyKTsKICAgICAgICAgICAgICAgIHN3aXRjaCggJHR5cGUgKSB7CiAgICAgICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGJvb2wpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdpbnRlZ2VyJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGludCkgJHZhbDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3JlYWwnOgogICAgICAgICAgICAgICAgY2FzZSAnZmxvYXQnOgogICAgICAgICAgICAgICAgY2FzZSAnZG91YmxlJzoKICAgICAgICAgICAgICAgICAgICAkb3V0WyRrZXldID0gKGZsb2F0KSAkdmFsOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgJG91dFska2V5XSA9IChzdHJpbmcpICR2YWw7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50cywkdmVyaWZ5ID0gVFJVRSkKICAgIHsKICAgICAgICBpZiggJHZlcmlmeSApIGRpZSgnb29wcycpOwogICAgICAgIC8vIGdldCB0aGUgZmlyc3QgbGluZQogICAgICAgICRmaXJzdF9saW5lID0gZXhwbG9kZSgiXG4iLCRjb250ZW50cywyKVswXTsKICAgICAgICAkZmlsZV9zaWcgPSBudWxsOwogICAgICAgICRtYXRjaGVzID0gbnVsbDsKICAgICAgICBwcmVnX21hdGNoKCcvXHMrU0lHPShbMC05QS1aYS16XXszMn0pXHMrLycsJGZpcnN0X2xpbmUsJG1hdGNoZXMpOwogICAgICAgIGlmKCAkbWF0Y2hlc1sxXSApICRmaWxlX3NpZyA9ICRtYXRjaGVzWzFdOwogICAgICAgIHVuc2V0KCRtYXRjaGVzKTsKCiAgICAgICAgJHJhd19kYXRhID0gcGFyc2VfaW5pX3N0cmluZygkY29udGVudHMsVFJVRSk7CgogICAgICAgIC8vIHdlIGhhdmUgYSBmbGF0IGxpc3Qgb2Ygc2VjdGlvbnMsIGVhY2ggc2VjdGlvbiBpcyBhbiBhcnJheQogICAgICAgIC8vIHRoZSB0b3Agc2VjdGlvbiBzaG91bGQgbm90IGhhdmUgYW55IG5lc3RpbmcKICAgICAgICAkYWxsX2tleXMgPSBhcnJheV9rZXlzKCRyYXdfZGF0YSk7CiAgICAgICAgJGtleTAgPSAkYWxsX2tleXNbMF07CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnIDogJywka2V5MCk7CiAgICAgICAgaWYoICRwYXJ0c1swXSAhPSAka2V5MCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBmaWxlIGZvcm1hdCwgZm91bmQgbmVzdGVkIGNoaWxkIGFzIGZpcnN0IGVsZW1lbnQnKTsKCiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJHJhd19kYXRhIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnIDogJywka2V5KTsKICAgICAgICAgICAgLy9pZiggJHBhcnRzWzBdICE9ICRrZXkwICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIGZpbGUgZm9ybWF0Jyk7CgogICAgICAgICAgICBpZiggY291bnQoJHBhcnRzKSA9PSAxICkgewogICAgICAgICAgICAgICAgJG91dFska2V5XSA9ICR0aGlzLT5fY29udmVydF92YWx1ZXMoJHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkdG1wID0mICRvdXQ7CiAgICAgICAgICAgICAgICAkaSA9IG51bGw7CiAgICAgICAgICAgICAgICBmb3IoICRpID0gMSwgJG4gPSBjb3VudCgkcGFydHMpIC0gMTsgJGkgPCAkbjsgJGkrKyApIHsKICAgICAgICAgICAgICAgICAgICAkcGFydCA9ICRwYXJ0c1skaV07CiAgICAgICAgICAgICAgICAgICAgaWYoICFpc19hcnJheSgkdG1wWyRwYXJ0XSkgKSAkdG1wWyRwYXJ0XSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgJHRtcCA9JiAkdG1wWyRwYXJ0XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0bXBbJHBhcnRzWyRpXV0gPSAkdGhpcy0+X2NvbnZlcnRfdmFsdWVzKCR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiggY291bnQoJG91dCkgPT0gMSAmJiBpc3NldCgkb3V0WyRrZXkwXSkgKSB7CiAgICAgICAgICAgICRvdXQgPSAkb3V0WyRrZXkwXTsKICAgICAgICB9CgogICAgICAgIGlmKCAkdmVyaWZ5ICkgewogICAgICAgICAgICAkY2FsY19zaWcgPSAkdGhpcy0+X2NhbGNfY2hlY2tzdW0oJG91dCk7CiAgICAgICAgICAgIGlmKCAkZmlsZV9zaWcgIT0gJGNhbGNfc2lnICkgdGhyb3cgbmV3IFxSYW5nZUV4Y2VwdGlvbigiSU5JIEZpbGUgc2lnbmF0dXJlIGRpZCBub3QgbWF0Y2ggdGhlIHNpZ25hdHVyZSBvZiB0aGUgZmlsZSBjb250ZW50cyIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG91dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkZmlsZW5hbWUgPSBudWxsLCR2ZXJpZnkgPSBUUlVFKQogICAgewogICAgICAgIGlmKCAkZmlsZW5hbWUgKSAkdGhpcy0+c2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSk7CgogICAgICAgIGlmKCAhaXNfZmlsZSgkdGhpcy0+X2ZpbGVuYW1lKSB8fCAhaXNfcmVhZGFibGUoJHRoaXMtPl9maWxlbmFtZSkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigiRmlsZSAlcyBjb3VsZCBub3QgYmUgcmVhZCIsJHRoaXMtPl9maWxlbmFtZSkpOwogICAgICAgICRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2UoJGNvbnRlbnRzLCR2ZXJpZnkpOwogICAgfQp9Cjw/cGhwCgpuYW1lc3BhY2UgQ0dTbmFwc2hvdFxwaGFyOwoKYWJzdHJhY3QgY2xhc3MgdGVzdF9iYXNlCnsKICAgIHByb3RlY3RlZCAkX2xhYmVsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbGFiZWwoKSB7IHJldHVybiAkdGhpcy0+X2xhYmVsOyB9CiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpOwp9CgpjbGFzcyBmYWxzZV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF92YWw7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl92YWwgPSAoYm9vbCkgJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fdmFsID09IEZBTFNFOwogICAgfQp9CgpjbGFzcyB0cnVlX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX3ZhbDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X3ZhbCA9IChib29sKSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl92YWwgPT0gVFJVRTsKICAgIH0KfQoKY2xhc3MgZXh0ZW5zaW9uX3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2V4dDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRleHQpCiAgICB7CiAgICAgICAgJHRoaXMtPl9sYWJlbCA9IHRyaW0oJGxhYmVsKTsKICAgICAgICAkdGhpcy0+X2V4dCA9IHRyaW0oJGV4dCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiBleHRlbnNpb25fbG9hZGVkKCR0aGlzLT5fZXh0KTsKICAgIH0KfQoKY2xhc3MgbWludmVyc2lvbl90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9taW52YWw7CiAgICBwcml2YXRlICRfdmFsOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsJG1pbnZhbCwkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9taW52YWwgPSB0cmltKCRtaW52YWwpOwogICAgICAgICR0aGlzLT5fdmFsID0gdHJpbSgkdmFsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICh2ZXJzaW9uX2NvbXBhcmUoJHRoaXMtPl92YWwsJHRoaXMtPl9taW52YWwpID49IDApOwogICAgfQp9CgpjbGFzcyBmdW5jdGlvbl90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9mbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRmbikKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fZm4gPSB0cmltKCRmbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbl9leGlzdHMoJHRoaXMtPl9mbik7CiAgICB9Cn0KCmNsYXNzIHNpbXBsZV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9mbjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLGNhbGxhYmxlICRmbikKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gdHJpbSgkbGFiZWwpOwogICAgICAgICR0aGlzLT5fZm4gPSAkZm47CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKQogICAgewogICAgICAgICR0bXAgPSAkdGhpcy0+X2ZuOwogICAgICAgIHJldHVybiAkdG1wKCk7CiAgICB9Cn0KCmNsYXNzIGRpcl93cml0YWJsZV90ZXN0IGV4dGVuZHMgdGVzdF9iYXNlCnsKICAgIHByaXZhdGUgJF9kaXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsYWJlbCwkZGlyKQogICAgewogICAgICAgICR0aGlzLT5fbGFiZWwgPSB0cmltKCRsYWJlbCk7CiAgICAgICAgJHRoaXMtPl9kaXIgPSB0cmltKCRkaXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gKGlzX2RpcigkdGhpcy0+X2RpcikgJiYgaXNfd3JpdGFibGUoJHRoaXMtPl9kaXIpKTsKICAgIH0KfQoKY2xhc3MgZGlyX2VtcHR5X3Rlc3QgZXh0ZW5kcyB0ZXN0X2Jhc2UKewogICAgcHJpdmF0ZSAkX2RpcjsKICAgIHByaXZhdGUgJF9leGNsdWRlczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxhYmVsLCRkaXIsJGV4Y2x1ZGVzID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2xhYmVsID0gJGxhYmVsOwogICAgICAgICR0aGlzLT5fZGlyID0gJGRpcjsKICAgICAgICAkdGhpcy0+X2V4Y2x1ZGVzID0gJGV4Y2x1ZGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICAkZmlsZXMxID0gZ2xvYigkdGhpcy0+X2Rpci4nLy4/PyonKTsKICAgICAgICAkZmlsZXMyID0gZ2xvYigkdGhpcy0+X2Rpci4nLyonKTsKICAgICAgICAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMxLCRmaWxlczIpOwogICAgICAgIGZvcmVhY2goICRmaWxlcyBhcyAkZmlsZSApIHsKICAgICAgICAgICAgJGJuID0gc3RyX3JlcGxhY2UoJHRoaXMtPl9kaXIuJy8nLCcnLCRmaWxlKTsKICAgICAgICAgICAgb3V0cHV0KCd0ZXN0OiAnLiRibik7CiAgICAgICAgICAgIGlmKCAhY291bnQoJHRoaXMtPl9leGNsdWRlcykgfHwgIWluX2FycmF5KCRibiwkdGhpcy0+X2V4Y2x1ZGVzKSApIHJldHVybiBGQUxTRTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9Cn08P3BocAo/Pgo8aHRtbD4KICA8aGVhZD4KICAgIDx0aXRsZT5DR1NuYXBzaG90IC0gV2ViIEludGVyZmFjZSBVbnN1cHBvcnRlZDwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNHU25hcHNob3QgLVdlYiBJbnRlcmZhY2UgVW5zdXBwb3J0ZWQhPC9oMT4KICAgIDxoMyBzdHlsZT0iY29sb3I6IHJlZDsiPlNvcnJ5ITwvaDM+CiAgICA8cCBzdHlsZT0iY29sb3I6IHJlZDsiPlRoZSBDR1NuYXBzaG90IHJlc3RvcmUgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgYSB3ZWIgaW50ZXJmYWNlIGF0IHRoaXMgdGltZS48L3A+CgogICAgPHA+WW91IG1heSBiZSBhYmxlIHRvIHNwb25zb3IgaXQgdGhvdWdoLi4uLiBwbGVhc2UgY29udGFjdCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBnbWFpbC5jb20iPmNhbGd1eTEwMDBAZ21haWwuY29tPC9hPiB0byBzZWUgYWJvdXQgc3BvbnNvcmluZyBhIHdlYiBiYXNlZCByZXN0b3JlIHBhY2thZ2UuPC9wPgogIDxib2R5Pgo8L2h0bWw+Cjw/cGhwCkB1bmxpbmsoJ0NHU25hcHNob3QtUmVzdG9yZS5waHAnKTsKJHBoYXIyID0gbmV3IFBoYXIoJ0NHU25hcHNob3QtUmVzdG9yZS5waGFyJywgMCwgJ0NHU25hcHNob3QtUmVzdG9yZS5waGFyJyk7Ci8vIGFkZCBhbGwgZmlsZXMgaW4gdGhlIHByb2plY3QsIG9ubHkgaW5jbHVkZSBwaHAgZmlsZXMKJHBoYXIyLT5idWlsZEZyb21EaXJlY3RvcnkoZGlybmFtZShfX0ZJTEVfXykpOwokcGhhcjItPnNldFN0dWIoJHBoYXIyLT5jcmVhdGVEZWZhdWx0U3R1YignY2xpLnBocCcsICd3d3cucGhwJykpOwpyZW5hbWUoJ0NHU25hcHNob3QtUmVzdG9yZS5waGFyJywnQ0dTbmFwc2hvdC1SZXN0b3JlLnBocCcpOwp3rAli8rILB+kF37yJJShAMtQYDAIAAABHQk1C]]></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+TGFuZygnaW5mb19jcmVhdGVfc25hcHNob3QnKX08L2Rpdj4KCjxkaXYgY2xhc3M9Indhcm5pbmciPnskbW9kLT5MYW5nKCd3YXJuX2NyZWF0ZV9zbmFwc2hvdCcpfTwvZGl2PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2xlZ2VuZF93aGF0Jyl9PC9sZWdlbmQ+CiAgPGRpdiBjbGFzcz0iY19mdWxsIj4KICAgICA8ZGl2IGNsYXNzPSJncmlkXzIgdGV4dC1yaWdodCI+CiAgICAgICAgeyRtb2QtPkxhbmcoJ3Byb21wdF93aGF0Jyl9OgogICAgIDwvZGl2PgogICAgIDxkaXYgY2xhc3M9ImdyaWRfMTAiPgogICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1wcmVmX3doYXQiPgoJe2h0bWxfb3B0aW9ucyBvcHRpb25zPSR3aGF0bGlzdCBzZWxlY3RlZD0kcHJlZl93aGF0fQoJPC9zZWxlY3Q+CiAgICAgPC9kaXY+CiAgICAgPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJjX2Z1bGwiPgogICAgIDxkaXYgY2xhc3M9ImdyaWRfMiB0ZXh0LXJpZ2h0Ij4KICAgICAgICB7JG1vZC0+TGFuZygncHJvbXB0X2V4Y2x1ZGVzJyl9OgogICAgIDwvZGl2PgogICAgIDxkaXYgY2xhc3M9ImdyaWRfMTAiPgogICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ7JGFjdGlvbmlkfXByZWZfZXhjbHVkZXMiIGNvbHM9IjUwIiByb3dzPSI1Ij4KCXskcHJlZl9leGNsdWRlc30KCTwvdGV4dGFyZWE+Cgk8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2V4Y2x1ZGVzJyl9CiAgICAgPC9kaXY+CiAgPC9kaXY+CjwvZmllbGRzZXQ+Cgo8ZmllbGRzZXQ+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>
