<?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>OrdersToIIF</name>
	<version>1.1</version>
  <mincmsversion>1.6.6</mincmsversion>
	<help><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IHBhZ2V3YXJuaW5nIj4KICAgPHA+PHN0cm9uZz5XYXJuaW5nPC9zdHJvbmc+PC9wPgogICA8cD5Vc2UgZXh0cmVtZSBjYXV0aW9uIHdoZW4gaW1wb3J0aW5nIElJRiBkYXRhIGludG8gYSBsaXZlIGNvbXBhbnkgYWNjb3VudC4gICBJSUYgZm9ybWF0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgaW50dWl0IGFuZCBoYXMgc2V2ZXJlIGxpbWl0YXRpb25zLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHRyeSB0aGUgZXhwb3J0IG91dCBvbiBhIHRlc3QgY29tcGFueSB0byBlbnN1cmUgcHJvcGVyIG9wZXJhdGlvbiBiZWZvcmUgaW1wb3J0aW5nIHRvIGEgbGl2ZSBjb21wYW55IGZpbGUuICBQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGFkZXF1YXRlIGFuZCB2ZXJpZmllZCBiYWNrdXBzIGF0IGFsbCB0aW1lcyB3aGVuIHVzaW5nIHRoaXMgbW9kdWxlLiAgVXNlIGF0IHlvdXIgb3duIHJpc2suIDwvcD4KPC9kaXY+CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBhbGxvd3MgYXV0aG9yaXplZCBwZXJzb25lbGwgdG8gZXhwb3J0IGluZm9ybWF0aW9uIGZyb20gdGhlIE9yZGVycyBtb2R1bGUgaW50byBBU0NJSSBJSUYgRm9ybWF0IHN1aXRhYmxlIGZvciB1c2UgaW4gdGhlIGNvbW1vbmx5IHVzZWQgYWNjb3VudGluZyBwYWNrYWdlICZxdW90O1F1aWNrYm9va3MmcXVvdDsuPC9wPgo8aDM+RmVhdHVyZXM6PC9oMz4KPHVsPgogIDxsaT5FeHBvcnRzIEN1c3RvbWVyIEluZm9ybWF0aW9uIGZyb20gdGhlIE9yZGVycyBtb2R1bGUgdG8gSUlGPC9saT4KICA8bGk+RXhwb3J0cyBJbnZvaWNlcyBmcm9tIHRoZSBPcmRlcnMgbW9kdWxlIHRvIElJRgogICAgPHVsPgogICAgICA8bGk+T3JkZXJzIHdpdGggbXVsdGlwbGUgc2hpcG1lbnRzIGFyZSBleHBvcnRlZCBhcyBzZXBhcmF0ZSB0cmFuc2FjdGlvbnMuPC9saT4KICAgICAgPGxpPkhhbmRsZXMgYmlsbGluZyBhbmQgc2hpcHBpbmcgYWRkcmVzc2VzIHByb3Blcmx5LjwvbGk+CiAgICAgIDxsaT5TZXRzIHRoZSByZWZlcmVuY2UgbnVtYmVyIHRvIHRoZSBPcmRlcnMgbW9kdWxlIGludm9pY2UgbnVtYmVyLjwvbGk+CiAgICAgIDxsaT5FeHBvcnRzIGxpbmUgaXRlbXMgcHJvcGVybHkuPC9saT4KICAgICAgPGxpPkV4cG9ydHMgc2hpcHBpbmcgY29zdHMgYXMgYSBsaW5lIGl0ZW0uPC9saT4KICAgICAgPGxpPkV4cG9ydHMgc2FsZXMgdGF4IGFzIGEgbGluZSBpdGVtLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPkV4cG9ydHMgcGF5bWVudHMgZnJvbSBnYXRld2F5IG1vZHVsZXMsIGV0Yy4gdG8gSUlGCiAgICAgPHVsPgogICAgICAgPGxpPlNldHMgdGhlIHJlZmVyZW5jZSBudW1iZXIgdG8gdGhlIE9yZGVycyBtb2R1bGUgaW52b2ljZSBudW1iZXIuPC9saT4KICAgICAgIDxsaT5EZWJpdHMgdGhlIHNwZWNpZmllZCBBUiBhY2NvdW50LCBhbmQgY3JlZGl0cyB0aGUgc3BlY2lmaWVkIGFzc2V0IGFjY291bnQuPC9saT4KICAgICA8L3VsPgogIDwvbGk+CjwvdWw+CjxoMz5MaW1pdGF0aW9uczo8L2gzPgo8cD5EdWUgdG8gbGltaXRhdGlvbnMgaW4gdGhlIElJRiBmaWxlIGZvcm1hdCwgYW5kIGluIHRoZSBxdWlja2Jvb2tzIGltcGxlbWVudGF0aW9uIG9mIElJRiwgdGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHdoZW4gdXNpbmcgSUlGIGZpbGVzOjwvcD4KPHVsPgo8bGk+SXQgaXMgcG9zc2libGUgdG8gaW1wb3J0IHRoZSBzYW1lIHRyYXNhY3Rpb24gbXVsdGlwbGUgdGltZXMuCjxwPkFsdGhvdWdoIHF1aWNrYm9va3Mgd2lsbCB3YXJuIHlvdSBhYm91dCBpbXBvcnRpbmcgZHVwbGljYXRlIHRyYW5zYWN0aW9ucyA8ZW0+KHRyYW5zYWN0aW9ucyB3aXRoIGEgcmVmZXJlbmNlIG51bWJlciB0aGF0IGFscmVhZHkgZXhpc3RzKTwvZW0+LCBpdCB3aWxsIGFsbG93IHlvdSB0byBpbXBvcnQgdGhlbSwgdGh1cyBjcmVhdGluZyBkdXBsaWNhdGUgdHJhbnNhY3Rpb25zIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGVycm9ycyBpbiB0aGUgYWNjb3VudGluZy4gIFRoaXMgaXMgd2h5IGRhdGUgbGltaXRpbmcgaXMgaW1wb3J0YW50LCBhbmQgeW91IHNob3VsZCBoYXZlIHZlcmlmaWVkIGJhY2t1cHMgYmVmb3JlIGRvaW5nIGFueSBJSUYgaW1wb3J0aW5nIGZyb20gYW55IGFwcGxpY2F0aW9uLjwvcD4KPC9saT4KPGxpPlBheW1lbnRzIGFyZSBub3QgYXV0b21hdGljYWxseSBjcmVkaXRlZCB0byB0aGUgYXBwcm9wcmlhdGUgaW52b2ljZS4KPHA+QWx0aG91Z2ggcGF5bWVudHMgYXJlIGltcG9ydGVkLCBhbmQgdGhlIHJlZmVyZW5jZSBudW1iZXIgaW4gdGhlIHBheW1lbnQgY29udGFpbnMgdGhlIGFwcHJvcHJpYXRlIGludm9pY2Uvb3JkZXIgbnVtYmVyLCBRdWlja2Jvb2tzIHdpbGwgbm90IGFzc29jaWF0ZSB0aGVtIHdpdGggdGhlIHByb3BlciBpbnZvaWNlLiAgVGhpcyBtdXN0IGJlIGRvbmUgbWFudWFsbHkgZm9yIGVhY2ggcGF5bWVudC48L3A+CjwvbGk+CjxsaT5Pbmx5IG9uZSBzYWxlcyB0YXggaXMgc3VwcG9ydGVkLjwvbGk+CjxsaT5UZXN0ZWQgb25seSB3aXRoIFVTIFZlcnNpb24gb2YgUXVpY2tib29rcy4KPHA+VGhpcyBtb2R1bGUgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgVVMgdmVyc2lvbiBvZiAmcXVvdDtRdWlja2Jvb2tzIFBybyAyMDA5JnF1b3Q7IElmIHlvdSBhcmUgdXNpbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiBRdWlja2Jvb2tzLCBvciB1c2luZyBhIGN1cnJlbmN5IG90aGVyIHRoYW4gVVNEIDxlbT4oVGhvdWdoIEkgY2Fubm90IGZvcnNlZSBhIHByb2JsZW0gd2l0aCBDQUQpPC9lbT4sIHlvdXIgbWlsZWFnZSBtYXkgdmFyeS4gIEkgd291bGQgYXBwcmVjaWF0ZSBoZWFyaW5nIGZyb20geW91IGlmIHlvdSBleHBlcmllbmNlIHByb2JsZW1zIHdpdGggb3RoZXIgdmVyc2lvbnMgb2YgcXVpY2tib29rcywgYW5kIGhhdmUgdGhlIHRpbWUgdG8gYXNzaXN0IG1lIGluIGRlYnVnZ2luZyB0aGUgaXNzdWVzLjwvcD4KPC9saT4KPC91bD4KPGgzPkhvdyBEbyBJIFVzZSBJdDo8L2gzPgo8cD5UaGlzIG1vZHVsZSBwZXJmb3JtcyBhbGwgb2YgaXRzIG9wZXJhdGlvbnMgZnJvbSB0aGUgQ01TTVMgYWRtaW4gY29uc29sZSwgdW5kZXIgdGhlICZxdW90O0V4dGVuc2lvbnMgJmd0OyZndDsgT3JkZXIgVG8gSUlGJnF1b3Q7IG1lbnUgaXRlbS4gIEluIG9yZGVyIHRvIGFjY2VzcyB0aGlzIHBhbmVsLCB5b3VyIGFkbWluaXN0cmF0b3IgYWNjb3VudCBtdXN0IGhhdmUgdGhlICZxdW90O01hbmFnZSBPcmRlcnMmcXVvdDsgcGVybWlzc2lvbiwgYW5kIHRoZSBPcmRlcnMgbW9kdWxlIG11c3QgYmUgaW5zdGFsbGVkLCBhbmQgaGF2ZSB2YWxpZCB0cmFuc2FjdGlvbiBkYXRhIGluIGl0cyB0YWJsZXMuPC9wPgo8cD5JbW1lZGlhdGVseSBhZnRlciBpbnN0YWxsYXRpb24sIHlvdSBzaG91bGQgZ28gdG8gdGhlICZxdW90O1NldHRpbmdzJnF1b3Q7IHRhYiBhbmQgY29uZmlndXJlIHRoZSBuYW1lcyBvZiB0aGUgdmFyaW91cyBhY2NvdW50cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBleHBvcnQgcHJvY2Vzcy4gVGhlc2UgYXJlIHRoZSBhY2NvdW50IG5hbWVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGV4cG9ydCBmaWxlLCBhbmQgc2hvdWxkIG1hdGNoIGV4aXN0aW5nIGFjY291bnRzIGluIHlvdXIgcXVpY2tib29rcyBjaGFydCBvZiBhY2NvdW50cy48L3A+CjxwPkluIHRoZSAmcXVvdDtFeHBvcnQmcXVvdDsgdGFiIHlvdSBjYW4gc2VsZWN0IHdoYXQgaXRlbXMgdG8gZXhwb3J0IHRvIElJRiwgYW5kIGEgZGF0ZS4gIFRoZSBkYXRlIGFsbG93cyBmaWx0ZXJpbmcgb3V0IHNvbWUgdHJhbnNhY3Rpb25zLCBhbmQgbWluaW1pemVzIHRoZSBwb3NzaWJpbGl0eSBvZiBleHBvcnRpbmcgZHVwbGljYXRlIHRyYW5zYWN0aW9ucy4gQ2xpY2tpbmcgb24gdGhlICZxdW90O0V4cG9ydCZxdW90OyBidXR0b24gd2lsbCBwcm9tcHQgeW91IHRvIGRvd25sb2FkIHRoZSBJSUYgZmlsZS48L2xpPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiAgSG93ZXZlciB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcyBvciB0byBmaWxlIGEgYnVnIHJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgbWFkZSBzaW1wbGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVycyBGb3JnZTwvYT4gYW5kIGRvIGEgc2VhcmNoIGZvciAnUHJvZHVjdHMnPC9saT4KPGxpPlRvIG9idGFpbiBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IgYXQgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPlJvYmVydCBDYW1wYmVsbDwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ybXMuPC9hPjwvbGk+CjxsaT5Gb3Igc29tZSBxdWVzdGlvbnMgYW5kIGxpbWl0ZWQgdGVjaG5pY2FsIHN1cHBvcnQsIHRoZSBhdXRob3IgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPC91bD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD48aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNHRXh0ZW5zaW9ucyA9Jmd0OyAxLjE4LjM8L2xpPjxsaT5PcmRlcnMgPSZndDsgMS44LjM8L2xpPjwvdWw+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KICA8bGk+VmVyc2lvbiAxLjAgLSBBdWd1c3QgMjAwOQogICAgPHVsPgogICAgICA8bGk+SW5pdGlhbCBSZWxlYXNlLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CjwvdWw+PGJyIC8+]]></about>
	<description><![CDATA[A module to allow exporting information from the Orders module in a format suitalbe importing into Quickbooks]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.18.3</requiredversion>
	</requires>
	<requires>
	  <requiredname>Orders</requiredname>
	  <requiredversion>1.8.3</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_export.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIHJldHVybjsKJGV4cG9ydGRhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGF0ZV9vZl9sYXN0X2V4cG9ydCcsJycpOwoKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKE9SREVSU19QRVJNX01BTkFHRU9SREVSUykgKQogIHsKICAgIGRpZSgncGVybWlzc2lvbiBkZW5pZWQnKTsKICB9CmlmKCAhaXNzZXQoJHBhcmFtc1snZXhwb3J0aXRlbXMnXSkgfHwgZW1wdHkoJHBhcmFtc1snZXhwb3J0aXRlbXMnXSkgKQogIHsKICAgICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3Jfbm9pdGVtc3NlbGVjdGVkJykpOwogICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICB9CmlmKCAkcGFyYW1zWyd1c2VsYXN0ZGF0ZSddID09IDEgKQogIHsKICAgIGlmKCAkZXhwb3J0ZGF0ZSA9PSAnJyApCiAgICAgIHsKCS8vIG5vIHByZXZpb3VzIGV4cG9ydCBkYXRlLi4uIGV4cG9ydCBldmVyeXRoaW5nCgkkZXhwb3J0ZGF0ZSA9IDA7CiAgICAgIH0KICB9CmVsc2UKICB7CiAgICAvLyB1c2Ugc3BlY2lmaWVkIGRhdGUKICAgICRleHBvcnRkYXRlID0gbWt0aW1lKDAsMCwwLAoJCQkgJHBhcmFtc1snZXhwb3J0ZGF0ZV9Nb250aCddLAoJCQkgJHBhcmFtc1snZXhwb3J0ZGF0ZV9EYXknXSwKCQkJICRwYXJhbXNbJ2V4cG9ydGRhdGVfWWVhciddKTsKICB9CgpzZXRfcHJlZmVyZW5jZShnZXRfdXNlcmlkKCksJ29yZGVyc3RvaWlmX3NlbGVjdGVkJywKCSAgICAgICBpbXBsb2RlKCcsJywkcGFyYW1zWydleHBvcnRpdGVtcyddKSk7CnNldF9wcmVmZXJlbmNlKGdldF91c2VyaWQoKSwnb3JkZXJzdG9paWZfdXNlZGF0ZW9mbGFzdGV4cG9ydCcsCgkgICAgICAgJHBhcmFtc1sndXNlbGFzdGRhdGUnXSk7CgpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9saWIvY2xhc3MuaWlmX3dyaXRlci5waHAnKTsKCgpmdW5jdGlvbiAmY3JlYXRlX3BheW1lbnRfdHJhbnNhY3Rpb24ob3JkZXJzX29yZGVyICYkb3JkZXIsCgkJCQkgICAgIG9yZGVyc19wYXltZW50ICYkcGF5bWVudCwKCQkJCSAgICAgaWlmX2N1c3RvbWVyICYkY3VzdG9tZXIpCnsKICBnbG9iYWwgJGdDbXM7CiAgJGRiID0gJGdDbXMtPkdldERiKCk7CgogICRuYW1lID0gJHBheW1lbnQtPmdldF90eG5faWQoKTsKICBpZiggISRuYW1lICkKICAgIHsKICAgICAgJG5hbWUgPSAkb3JkZXItPmdldF9pbnZvaWNlKCkuJy0nLiRwYXltZW50LT5nZXRfaWQoKTsKICAgIH0KCiAgJHRyYW5zID0gbmV3IGlpZl90cmFuc2FjdGlvbigpOwogICR0cmFucy0+c2V0X2FtdCgkcGF5bWVudC0+Z2V0X2Ftb3VudCgpKTsKICAkdHJhbnMtPnNldF9kYXRlKCRkYi0+RGJUaW1lU3RhbXAoJHBheW1lbnQtPmdldF9wYXltZW50X2RhdGUoKSkpOwogICR0cmFucy0+c2V0X2JpbGxpbmdfY3VzdG9tZXIoJGN1c3RvbWVyKTsKICAkdHJhbnMtPnNldF90eXBlKElJRl9UUkFOU19QQVlNRU5UKTsKICAkdHJhbnMtPnNldF9kb2NudW0oJG9yZGVyLT5nZXRfaW52b2ljZSgpKTsKICAkdHJhbnMtPnNldF90aXRsZSgkbmFtZSk7CgogICR0aXRlbSA9IG5ldyBpaWZfdHJhbnNhY3Rpb25faXRlbSgpOwogICR0aXRlbS0+c2V0X3F0eSgxKTsKICAkdGl0ZW0tPnNldF9wcmljZSgkcGF5bWVudC0+Z2V0X2Ftb3VudCgpKTsKICAkdGl0ZW0tPnNldF9pdGVtbmFtZSgkbmFtZSk7CiAgJHRpdGVtLT5zZXRfaXRlbXR5cGUoSUlGX0lURU1UWVBFX1BBWU1FTlQpOwogICR0cmFucy0+YWRkX2l0ZW0oJHRpdGVtKTsKICByZXR1cm4gJHRyYW5zOwp9CgoKCmZ1bmN0aW9uICZjcmVhdGVfcHVyY2hhc2VfdHJhbnNhY3Rpb24oJHVzZV9kaXNjb3VudHMsb3JkZXJzX29yZGVyICYkb3JkZXIpCnsKICBnbG9iYWwgJGdDbXM7CiAgJGRiID0gJGdDbXMtPkdldERiKCk7CgogICRiY3VzdG9tZXIgPSBvcmRlcl90b19jdXN0b21lcigkb3JkZXIpOwoKICAkdHJhbnMgPSBuZXcgaWlmX3RyYW5zYWN0aW9uKCk7CiAgJHRyYW5zLT5zZXRfYW10KCRvcmRlci0+Z2V0X3RvdGFsKCkpOwogICR0cmFucy0+c2V0X2RhdGUoJGRiLT5EYlRpbWVTdGFtcCgkb3JkZXItPmdldF9jcmVhdGVfZGF0ZSgpKSk7CiAgJHRyYW5zLT5zZXRfYmlsbGluZ19jdXN0b21lcigkYmN1c3RvbWVyKTsKICAvLyR0cmFucy0+c2V0X3NoaXBwaW5nX2N1c3RvbWVyKCRzY3VzdG9tZXIpOwogICR0cmFucy0+c2V0X2RvY251bSgkb3JkZXItPmdldF9pbnZvaWNlKCkpOwogICR0cmFucy0+c2V0X3RpdGxlKCRvcmRlci0+Z2V0X2ludm9pY2UoKSk7CiAgJHRyYW5zLT5zZXRfdHlwZShJSUZfVFJBTlNfSU5WT0lDRSk7CiAgJHRyYW5zX2Rpc2NvdW50ID0gMDsKCiAgLy8gYWRkIGFsbCBvZiB0aGUgaXRlbXMuCiAgZm9yKCAkc2kgPSAwOyAkc2kgPCAkb3JkZXItPmNvdW50X2Rlc3RpbmF0aW9ucygpOyAkc2krKyApCiAgICB7CiAgICAgICRzaGlwcGluZyA9ICRvcmRlci0+Z2V0X3NoaXBwaW5nKCRzaSk7CgogICAgICBmb3IoICRqID0gMDsgJGogPCAkc2hpcHBpbmctPmNvdW50X2FsbF9pdGVtcygpOyAkaisrICkKCXsKCSAgJGl0ZW0gPSAkc2hpcHBpbmctPmdldF9pdGVtKCRqKTsKCSAgCgkgICR0aXRlbSA9IG5ldyBpaWZfdHJhbnNhY3Rpb25faXRlbTsKCSAgaWYoICR1c2VfZGlzY291bnRzICkKCSAgICB7CgkgICAgICAkdGl0ZW0tPnNldF9wcmljZSgkaXRlbS0+Z2V0X25ldF9wcmljZSgpKTsKCSAgICAgICR0cmFuc19kaXNjb3VudCArPSAkaXRlbS0+Z2V0X2Rpc2NvdW50KCk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRpdGVtLT5zZXRfcHJpY2UoJGl0ZW0tPmdldF91bml0X3ByaWNlKCkpOwoJICAgIH0KCSAgJHRpdGVtLT5zZXRfcXR5KCRpdGVtLT5nZXRfcXVhbnRpdHkoKSk7CgkgICRzdHIgPSBzdHJpcF90YWdzKCRpdGVtLT5nZXRfZGVzY3JpcHRpb24oKSk7CgkgICRzdHIgPSBzdHJfcmVwbGFjZSgnJm5ic3A7JywnICcsJHN0cik7CgkgICR0aXRlbS0+c2V0X2l0ZW1uYW1lKHRyaW0oJHN0cikpOwoKCSAgc3dpdGNoKCRpdGVtLT5nZXRfaXRlbV90eXBlKCkpCgkgICAgewoJICAgIGNhc2UgbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUOgoJICAgICAgJHRpdGVtLT5zZXRfaXRlbXR5cGUoSUlGX0lURU1UWVBFX1BST0RVQ1QpOwoJICAgICAgYnJlYWs7CgkgICAgY2FzZSBsaW5lX2l0ZW06OklURU1UWVBFX1NFUlZJQ0U6CgkgICAgICAkdGl0ZW0tPnNldF9pdGVtdHlwZShJSUZfSVRFTVRZUEVfU0VSVklDRSk7CgkgICAgICBicmVhazsKCSAgICBjYXNlIGxpbmVfaXRlbTo6SVRFTVRZUEVfRElTQ09VTlQ6CgkgICAgICAkdGl0ZW0tPnNldF9pdGVtdHlwZShJSUZfSVRFTVRZUEVfRElTQ09VTlQpOwoJICAgICAgYnJlYWs7CgkgICAgY2FzZSBsaW5lX2l0ZW06OklURU1UWVBFX1NISVBQSU5HOgoJICAgICAgJHRpdGVtLT5zZXRfaXRlbXR5cGUoSUlGX0lURU1UWVBFX1NISVBQSU5HKTsKCSAgICAgIGJyZWFrOwoJICAgIGNhc2UgbGluZV9pdGVtOjpJVEVNVFlQRV9UQVg6CgkgICAgICAkdGl0ZW0tPnNldF9pdGVtdHlwZShJSUZfSVRFTVRZUEVfVEFYKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgJHRyYW5zLT5hZGRfaXRlbSgkdGl0ZW0pOwoJfQogICAgfQoKCiAgaWYoICR1c2VfZGlzY291bnRzICkKICAgIHsKICAgICAgJHRpdGVtID0gbmV3IGlpZl90cmFuc2FjdGlvbl9pdGVtKCk7CiAgICAgICR0aXRlbS0+c2V0X2l0ZW10eXBlKElJRl9JVEVNVFlQRV9ESVNDT1VOVCk7CiAgICAgICR0aXRlbS0+c2V0X3ByaWNlKCR0cmFuc19kaXNjb3VudCk7CiAgICAgICR0aXRlbS0+c2V0X3F0eSgxKTsKICAgICAgJHRpdGVtLT5zZXRfaXRlbW5hbWUoJ2Rpc2NvdW50Jyk7IC8vIGl0J2QgYmUgbmljZSB0byBrbm93IHRoZSBwcm9tb3Rpb24gbmFtZS4KICAgICAgJHRyYW5zLT5hZGRfaXRlbSgkdGl0ZW0pOwogICAgfQogIHJldHVybiAkdHJhbnM7Cn0KCgpmdW5jdGlvbiAmYWRkcmVzc190b19paWYob3JkZXJzX2FkZHJlc3MgJiRhZGRyZXNzKQp7CiAgJGlpZl9hZGRyZXNzID0gbmV3IGlpZl9hZGRyZXNzKCk7CiAgJGlpZl9hZGRyZXNzLT5zZXRfZmlyc3RuYW1lKCRhZGRyZXNzLT5nZXRfZmlyc3RuYW1lKCkpOwogICRpaWZfYWRkcmVzcy0+c2V0X2xhc3RuYW1lKCRhZGRyZXNzLT5nZXRfbGFzdG5hbWUoKSk7CiAgJGlpZl9hZGRyZXNzLT5zZXRfYWRkcjEoJGFkZHJlc3MtPmdldF9hZGRyZXNzMSgpKTsKICAkaWlmX2FkZHJlc3MtPnNldF9hZGRyMigkYWRkcmVzcy0+Z2V0X2FkZHJlc3MyKCkpOwogICRpaWZfYWRkcmVzcy0+c2V0X2NpdHkoJGFkZHJlc3MtPmdldF9jaXR5KCkpOwogICRpaWZfYWRkcmVzcy0+c2V0X3N0YXRlKCRhZGRyZXNzLT5nZXRfc3RhdGUoKSk7CiAgJGlpZl9hZGRyZXNzLT5zZXRfcG9zdGFsKCRhZGRyZXNzLT5nZXRfcG9zdGFsKCkpOwogICRpaWZfYWRkcmVzcy0+c2V0X2NvdW50cnkoJGFkZHJlc3MtPmdldF9jb3VudHJ5KCkpOwogICRpaWZfYWRkcmVzcy0+c2V0X3Bob25lKCRhZGRyZXNzLT5nZXRfcGhvbmUoKSk7CiAgJGlpZl9hZGRyZXNzLT5zZXRfZmF4KCRhZGRyZXNzLT5nZXRfZmF4KCkpOwogICRpaWZfYWRkcmVzcy0+c2V0X2VtYWlsKCRhZGRyZXNzLT5nZXRfZW1haWwoKSk7CgogIHJldHVybiAkaWlmX2FkZHJlc3M7Cn0KCgpmdW5jdGlvbiAmb3JkZXJfdG9fY3VzdG9tZXIob3JkZXJzX29yZGVyICYkb3JkZXIpCnsKICAkYl9hZGRyID0gJG9yZGVyLT5nZXRfYmlsbGluZygpOwogICRiaWxsaW5nID0gYWRkcmVzc190b19paWYoJGJfYWRkcik7CgogICRjdXN0b21lciA9IG5ldyBpaWZfY3VzdG9tZXIoKTsKICAkY3VzdG9tZXItPnNldF9uYW1lKCJ7JGJfYWRkci0+Z2V0X2ZpcnN0bmFtZSgpfSB7JGJfYWRkci0+Z2V0X2xhc3RuYW1lKCl9Iik7CiAgJGN1c3RvbWVyLT5zZXRfYmlsbGluZygkYmlsbGluZyk7CiAgJGN1c3RvbWVyLT5zZXRfdGF4YWJsZSh0cnVlKTsgLy8gYWxsIGN1c3RvbWVycyBhcmUgdGF4YWJsZSBmb3Igbm93LgoKICByZXR1cm4gJGN1c3RvbWVyOwp9CgoKZnVuY3Rpb24gJnNoaXBwaW5nX3RvX2N1c3RvbWVyKG9yZGVyc19zaGlwcGluZyAmJG9yZGVyKQp7CiAgJHNfYWRkciA9ICRvcmRlci0+Z2V0X3NoaXBwaW5nX2FkZHJlc3MoKTsKICAkYWRkciA9IGFkZHJlc3NfdG9faWlmKCRzX2FkZHIpOwoKICAkY3VzdG9tZXIgPSBuZXcgaWlmX2N1c3RvbWVyKCk7CiAgJGN1c3RvbWVyLT5zZXRfbmFtZSgieyRzX2FkZHItPmdldF9maXJzdG5hbWUoKX0geyRzX2FkZHItPmdldF9sYXN0bmFtZSgpfSIpOwogICRjdXN0b21lci0+c2V0X3NoaXBwaW5nKCRhZGRyKTsKICAkY3VzdG9tZXItPnNldF90YXhhYmxlKGZhbHNlKTsgLy8gc2hpcHBpbmcgY3VzdG9tZXJzIGFyZSBub3QgdGF4YWJsZS4KCiAgcmV0dXJuICRjdXN0b21lcjsKfQoKCgoKLy8KLy8gc2VlIGFib3V0IGdhdGhlcmluZyBjdXN0b21lcnMKLy8KJGRhdGEgPSBuZXcgaWlmX2ZpbGUoKTsKJGRhdGEtPnNldF9hY2NvdW50KElJRl9BQ0NUX0FSLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdBUl9BQ0NPVU5UX05BTUUnKSk7CiRkYXRhLT5zZXRfYWNjb3VudChJSUZfQUNDVF9BUCwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnQVBfQUNDT1VOVF9OQU1FJykpOwokZGF0YS0+c2V0X2FjY291bnQoSUlGX0FDQ1RfR0FURVdBWSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnR0FURVdBWV9BQ0NPVU5UX05BTUUnKSk7CiRkYXRhLT5zZXRfYWNjb3VudChJSUZfQUNDVF9JTlZFTlRPUlksJHRoaXMtPkdldFByZWZlcmVuY2UoJ0lOVkVOVE9SWV9BQ0NPVU5UX05BTUUnKSk7CiRkYXRhLT5zZXRfYWNjb3VudChJSUZfQUNDVF9JTlZPSUNFLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdJTlZPSUNFX0FDQ09VTlRfTkFNRScpKTsKJGRhdGEtPnNldF9hY2NvdW50KElJRl9BQ0NUX1NFUlZJQ0UsJHRoaXMtPkdldFByZWZlcmVuY2UoJ1NFUlZJQ0VfQUNDT1VOVF9OQU1FJykpOwokZGF0YS0+c2V0X2FjY291bnQoSUlGX0FDQ1RfU0hJUFBJTkcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ1NISVBQSU5HX0FDQ09VTlRfTkFNRScpKTsKJGRhdGEtPnNldF9hY2NvdW50KElJRl9BQ0NUX1NBTEVTVEFYLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdTQUxFU1RBWF9BQ0NPVU5UX05BTUUnKSk7CgovLwovLyBnZXQgdGhlIGxpc3Qgb2Ygb3JkZXJzIHRoYXQgbWF0Y2ggdGhlIGRhdGUKLy8KJG9yZGVyc19tb2R1bGUgPSYgJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdPcmRlcnMnKTsKJGV4cG9ydGRhdGUgPSAkZGItPkRiVGltZVN0YW1wKCRleHBvcnRkYXRlKTsKJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfb3JkZXJzCiAgICAgICAgICAgV0hFUkUgY3JlYXRlX2RhdGUgPj0gJGV4cG9ydGRhdGUKICAgICAgICAgICAgIEFORCBzdGF0dXMgIT0gPwogICAgICAgICAgICAgQU5EIHN0YXR1cyAhPSA/IjsKJGlkbGlzdCA9ICRkYi0+R2V0Q29sKCRxdWVyeSxhcnJheShPUkRFUlNUQVRVU19DQU5DRUxMRUQsT1JERVJTVEFUVVNfUFJPUE9TRUQpKTsKaWYoICFpc19hcnJheSgkaWRsaXN0KSApIAogIHsKICAgIHJldHVybjsKICB9Cgpmb3JlYWNoKCAkaWRsaXN0IGFzICRvcmRlcl9pZCApCnsKICAkdXNlX2Rpc2NvdW50cyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdleHBvcnRkaXNjb3VudHMnLDApICYmICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdESVNDT1VOVF9BQ0NPVU5UX05BTUUnLCcnKTsKCiAgJG9yZGVyID0gb3JkZXJzX29wczo6bG9hZF9ieV9pZCgkb3JkZXJfaWQpOwogIGlmKCBpc19vYmplY3QoJG9yZGVyKSApCiAgICB7CiAgICAgICRiY3VzdG9tZXIgPSBvcmRlcl90b19jdXN0b21lcigkb3JkZXIpOwogICAgICAkdG90YWxfZGlzY291bnQgPSAwOwogICAgICBpZiggYXJyYXlfc2VhcmNoKCdjdXN0b21lcnMnLCRwYXJhbXNbJ2V4cG9ydGl0ZW1zJ10pICE9PSBGQUxTRSApCgl7CgkgICRkYXRhLT5hZGRfY3VzdG9tZXIoJGJjdXN0b21lcik7Cgl9CiAgICAgIAogICAgICBmb3IoICRzaSA9IDA7ICRzaSA8ICRvcmRlci0+Y291bnRfZGVzdGluYXRpb25zKCk7ICRzaSsrICkKCXsKCSAgJHNoaXBwaW5nID0gJG9yZGVyLT5nZXRfc2hpcHBpbmcoJHNpKTsKCSAgJHNjdXN0b21lciA9IHNoaXBwaW5nX3RvX2N1c3RvbWVyKCRzaGlwcGluZyk7CgkgIGlmKCBhcnJheV9zZWFyY2goJ2N1c3RvbWVycycsJHBhcmFtc1snZXhwb3J0aXRlbXMnXSkgIT09IEZBTFNFICkKCSAgICB7CgkgICAgICAkZGF0YS0+YWRkX2N1c3RvbWVyKCRzY3VzdG9tZXIpOwoJICAgIH0KCX0KCSAgCiAgICAgIGlmKCBhcnJheV9zZWFyY2goJ29yZGVycycsJHBhcmFtc1snZXhwb3J0aXRlbXMnXSkgIT09IEZBTFNFICkKCXsKCSAgJHRyYW5zID0gY3JlYXRlX3B1cmNoYXNlX3RyYW5zYWN0aW9uKCR1c2VfZGlzY291bnRzLCRvcmRlcik7CgkgICR0b3RhbF9kaXNjb3VudCArPSAkdHJhbnNfZGlzY291bnQ7CgkgICRkYXRhLT5hZGRfdHJhbnNhY3Rpb24oJHRyYW5zKTsKCX0KCiAgICAgIGZvciggJHBpID0gMDsgJHBpIDwgJG9yZGVyLT5jb3VudF9wYXltZW50cygpOyAkcGkrKyApCgl7CgkgICR0cmFucyA9IGNyZWF0ZV9wYXltZW50X3RyYW5zYWN0aW9uKCRvcmRlciwkb3JkZXItPmdldF9wYXltZW50KCRwaSksJGJjdXN0b21lcik7CgkgICAgCgkgIGlmKCAkdHJhbnMtPnZlcmlmeSgpICYmCgkgICAgICAoYXJyYXlfc2VhcmNoKCdwYXltZW50cycsJHBhcmFtc1snZXhwb3J0aXRlbXMnXSkgIT09IEZBTFNFKSkKCSAgICB7CgkgICAgICAkZGF0YS0+YWRkX3RyYW5zYWN0aW9uKCR0cmFucyk7CgkgICAgfQoJfSAvLyBmb3IKICAgIH0KIH0KICAgIAovLwovLyBiZWdpbiBleHBvcnRpbmcsIGlmIHdlIGhhdmUgc29tZXRoaW5nIHRvIGV4cG9ydC4KLy8KaWYoICRkYXRhLT5oYXNfY3VzdG9tZXJzKCkgfHwgJGRhdGEtPmhhc190cmFuc2FjdGlvbnMoKSApCiAgewogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RhdGVfb2ZfbGFzdF9leHBvcnQnLHRpbWUoKSk7CiAgICAkd3JpdGVyID0gbmV3IGlpZl93cml0ZXIoJ1NURE9VVCcpOwoKICAgICR0bXAgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnREVMSU1JVEVSJywnVEFCJyk7CiAgICBpZiggJHRtcCA9PSAnVEFCJyApIHsKICAgICAgJHRtcCA9ICJcdCI7CiAgICB9CiAgICAkd3JpdGVyLT5zZXRfZGVsaW1pdGVyKCR0bXApOwogICAgJHdyaXRlci0+c2V0X2RhdGEoJGRhdGEpOwogICAgCiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcpOwogICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1PcmRlcnMuaWlmJyk7CgogICAgd2hpbGUoQG9iX2VuZF9jbGVhbigpKTsKICAgICR3cml0ZXItPndyaXRlKCk7CiAgICBleGl0KCk7CiAgfQoKLy8gCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_save_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIHJldHVybjsKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkKICBkaWUoJ1Blcm1pc3Npb24gZGVuaWVkJyk7CgokdGhpcy0+U2V0Q3VycmVudFRhYignc2V0dGluZ3MnKTsKCiR0bXAgPSB0cmltKCRwYXJhbXNbJ2RlbGltaXRlciddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ0RFTElNSVRFUicsJHRtcCk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdBUl9BQ0NPVU5UX05BTUUnLCRwYXJhbXNbJ2FyX2FjY291bnQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdBUF9BQ0NPVU5UX05BTUUnLCRwYXJhbXNbJ2FwX2FjY291bnQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdHQVRFV0FZX0FDQ09VTlRfTkFNRScsJHBhcmFtc1snZ2F0ZXdheV9hY2NvdW50J10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnSU5WRU5UT1JZX0FDQ09VTlRfTkFNRScsJHBhcmFtc1snaW52ZW50b3J5X2FjY291bnQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdTSElQUElOR0FDQ09VTlRfTkFNRScsJHBhcmFtc1snc2hpcHBpbmdhY2NvdW50J10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnU0FMRVNUQVhBQ0NPVU5UX05BTUUnLCRwYXJhbXNbJ3NhbGVzdGF4YWNjb3VudCddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ1NFUlZJQ0VfQUNDT1VOVF9OQU1FJywkcGFyYW1zWydzZXJ2aWNlX2FjY291bnQnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdJTlZPSUNFX0FDQ09VTlRfTkFNRScsJHBhcmFtc1snaW52b2ljZV9hY2NvdW50J10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnRElTQ09VTlRfQUNDT1VOVF9OQU1FJywkcGFyYW1zWydkaXNjb3VudF9hY2NvdW50J10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZXhwb3J0ZGlzY291bnRzJywoaW50KSRwYXJhbXNbJ2V4cG9ydGRpc2NvdW50cyddKTsKCiR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oT1JERVJTX1BFUk1fTUFOQUdFT1JERVJTKSApCiAgewogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdleHBvcnQnLCR0aGlzLT5MYW5nKCdsYmxfZXhwb3J0JykpOwogIH0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKQogIHsKICAgIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2V0dGluZ3MnLCR0aGlzLT5MYW5nKCdsYmxfc2V0dGluZ3MnKSk7CiAgfQplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oT1JERVJTX1BFUk1fTUFOQUdFT1JERVJTKSApCiAgewogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2V4cG9ydCcpOwogICAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2V4cG9ydHRhYi5waHAnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwogIH0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKQogIHsKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycpOwogICAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX3NldHRpbmdzdGFiLnBocCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgfQplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEF1Z3VzdCAyMDA5CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2UuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/function.admin_exporttab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX2V4cG9ydCcpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Y3JlYXRlRm9ybUVuZCgpKTsKCiRzbWFydHktPmFzc2lnbignc2VsZWN0ZWQnLAoJCWdldF9wcmVmZXJlbmNlKGdldF91c2VyaWQoKSwnb3JkZXJzdG9paWZfc2VsZWN0ZWQnLCcnKSk7Cgokc21hcnR5LT5hc3NpZ24oJ29wdF9kYXRlX29mX2xhc3RfZXhwb3J0JyxnZXRfcHJlZmVyZW5jZShnZXRfdXNlcmlkKCksJ29yZGVyc3RvaWlmX3VzZWRhdGVvZmxhc3RleHBvcnQnLDEpKTsKJHNtYXJ0eS0+YXNzaWduKCdkYXRlX29mX2xhc3RfZXhwb3J0JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGF0ZV9vZl9sYXN0X2V4cG9ydCcsJycpKTsKJHNtYXJ0eS0+YXNzaWduKCdleHBvcnRpdGVtcycsCgkJYXJyYXkoJ2N1c3RvbWVycycgPT4gJHRoaXMtPkxhbmcoJ2xibF9jdXN0b21lcnMnKSwKCQkgICAgICAnb3JkZXJzJyA9PiAkdGhpcy0+TGFuZygnbGJsX29yZGVycycpLAoJCSAgICAgICdwYXltZW50cycgPT4gJHRoaXMtPkxhbmcoJ2xibF9wYXltZW50cycpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2V4cG9ydHRhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_settingstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX3NhdmVfc2V0dGluZ3MnKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2RlbGltaXRlcicsJHRoaXMtPkdldFByZWZlcmVuY2UoJ0RFTElNSVRFUicsJ1RBQicpKTsKJHNtYXJ0eS0+YXNzaWduKCdhcl9hY2NvdW50JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnQVJfQUNDT1VOVF9OQU1FJywnJykpOwokc21hcnR5LT5hc3NpZ24oJ2FwX2FjY291bnQnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdBUF9BQ0NPVU5UX05BTUUnLCcnKSk7CiRzbWFydHktPmFzc2lnbignZ2F0ZXdheV9hY2NvdW50JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnR0FURVdBWV9BQ0NPVU5UX05BTUUnLCcnKSk7CiRzbWFydHktPmFzc2lnbignc2VydmljZV9hY2NvdW50JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnU0VSVklDRV9BQ0NPVU5UX05BTUUnLCcnKSk7CiRzbWFydHktPmFzc2lnbignaW52b2ljZV9hY2NvdW50JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnSU5WT0lDRV9BQ0NPVU5UX05BTUUnLCcnKSk7CiRzbWFydHktPmFzc2lnbignaW52ZW50b3J5X2FjY291bnQnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdJTlZFTlRPUllfQUNDT1VOVF9OQU1FJywnJykpOwokc21hcnR5LT5hc3NpZ24oJ3NoaXBwaW5nX2FjY291bnQnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdTSElQUElOR19BQ0NPVU5UX05BTUUnLCcnKSk7CiRzbWFydHktPmFzc2lnbignc2FsZXN0YXhfYWNjb3VudCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ1NBTEVTVEFYX0FDQ09VTlRfTkFNRScsJycpKTsKJHNtYXJ0eS0+YXNzaWduKCdkaXNjb3VudF9hY2NvdW50JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnRElTQ09VTlRfQUNDT1VOVF9OQU1FJywnJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2V4cG9ydGRpc2NvdW50cycsCgkJJHRoaXMtPkNyZWF0ZUlucHV0WWVzTm9Ecm9wZG93bigkaWQsJ2V4cG9ydGRpc2NvdW50cycsCgkJCQkJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdleHBvcnRkaXNjb3VudHMnKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9zZXR0aW5nc3RhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiNBCgoKI0IKCgojQwoKCiNECiRsYW5nWydkaXNjb3VudCddID0gJ0Rpc2NvdW50JzsKCiNFCiRsYW5nWydlcnJvcl9leHBvcnRpdGVtcyddID0gJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0gdG8gZXhwb3J0JzsKCiNGCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdPcmRlcnMgdG8gSUlGJzsKCgojRwoKCiNICiRsYW5nWydoZWxwJ10gPSA8PDxFT1QKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IHBhZ2V3YXJuaW5nIj4KICAgPHA+PHN0cm9uZz5XYXJuaW5nPC9zdHJvbmc+PC9wPgogICA8cD5Vc2UgZXh0cmVtZSBjYXV0aW9uIHdoZW4gaW1wb3J0aW5nIElJRiBkYXRhIGludG8gYSBsaXZlIGNvbXBhbnkgYWNjb3VudC4gICBJSUYgZm9ybWF0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgaW50dWl0IGFuZCBoYXMgc2V2ZXJlIGxpbWl0YXRpb25zLiAgWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHRyeSB0aGUgZXhwb3J0IG91dCBvbiBhIHRlc3QgY29tcGFueSB0byBlbnN1cmUgcHJvcGVyIG9wZXJhdGlvbiBiZWZvcmUgaW1wb3J0aW5nIHRvIGEgbGl2ZSBjb21wYW55IGZpbGUuICBQbGVhc2UgZW5zdXJlIHlvdSBoYXZlIGFkZXF1YXRlIGFuZCB2ZXJpZmllZCBiYWNrdXBzIGF0IGFsbCB0aW1lcyB3aGVuIHVzaW5nIHRoaXMgbW9kdWxlLiAgVXNlIGF0IHlvdXIgb3duIHJpc2suIDwvcD4KPC9kaXY+CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBhbGxvd3MgYXV0aG9yaXplZCBwZXJzb25lbGwgdG8gZXhwb3J0IGluZm9ybWF0aW9uIGZyb20gdGhlIE9yZGVycyBtb2R1bGUgaW50byBBU0NJSSBJSUYgRm9ybWF0IHN1aXRhYmxlIGZvciB1c2UgaW4gdGhlIGNvbW1vbmx5IHVzZWQgYWNjb3VudGluZyBwYWNrYWdlICZxdW90O1F1aWNrYm9va3MmcXVvdDsuPC9wPgo8aDM+RmVhdHVyZXM6PC9oMz4KPHVsPgogIDxsaT5FeHBvcnRzIEN1c3RvbWVyIEluZm9ybWF0aW9uIGZyb20gdGhlIE9yZGVycyBtb2R1bGUgdG8gSUlGPC9saT4KICA8bGk+RXhwb3J0cyBJbnZvaWNlcyBmcm9tIHRoZSBPcmRlcnMgbW9kdWxlIHRvIElJRgogICAgPHVsPgogICAgICA8bGk+T3JkZXJzIHdpdGggbXVsdGlwbGUgc2hpcG1lbnRzIGFyZSBleHBvcnRlZCBhcyBzZXBhcmF0ZSB0cmFuc2FjdGlvbnMuPC9saT4KICAgICAgPGxpPkhhbmRsZXMgYmlsbGluZyBhbmQgc2hpcHBpbmcgYWRkcmVzc2VzIHByb3Blcmx5LjwvbGk+CiAgICAgIDxsaT5TZXRzIHRoZSByZWZlcmVuY2UgbnVtYmVyIHRvIHRoZSBPcmRlcnMgbW9kdWxlIGludm9pY2UgbnVtYmVyLjwvbGk+CiAgICAgIDxsaT5FeHBvcnRzIGxpbmUgaXRlbXMgcHJvcGVybHkuPC9saT4KICAgICAgPGxpPkV4cG9ydHMgc2hpcHBpbmcgY29zdHMgYXMgYSBsaW5lIGl0ZW0uPC9saT4KICAgICAgPGxpPkV4cG9ydHMgc2FsZXMgdGF4IGFzIGEgbGluZSBpdGVtLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPkV4cG9ydHMgcGF5bWVudHMgZnJvbSBnYXRld2F5IG1vZHVsZXMsIGV0Yy4gdG8gSUlGCiAgICAgPHVsPgogICAgICAgPGxpPlNldHMgdGhlIHJlZmVyZW5jZSBudW1iZXIgdG8gdGhlIE9yZGVycyBtb2R1bGUgaW52b2ljZSBudW1iZXIuPC9saT4KICAgICAgIDxsaT5EZWJpdHMgdGhlIHNwZWNpZmllZCBBUiBhY2NvdW50LCBhbmQgY3JlZGl0cyB0aGUgc3BlY2lmaWVkIGFzc2V0IGFjY291bnQuPC9saT4KICAgICA8L3VsPgogIDwvbGk+CjwvdWw+CjxoMz5MaW1pdGF0aW9uczo8L2gzPgo8cD5EdWUgdG8gbGltaXRhdGlvbnMgaW4gdGhlIElJRiBmaWxlIGZvcm1hdCwgYW5kIGluIHRoZSBxdWlja2Jvb2tzIGltcGxlbWVudGF0aW9uIG9mIElJRiwgdGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIHdoZW4gdXNpbmcgSUlGIGZpbGVzOjwvcD4KPHVsPgo8bGk+SXQgaXMgcG9zc2libGUgdG8gaW1wb3J0IHRoZSBzYW1lIHRyYXNhY3Rpb24gbXVsdGlwbGUgdGltZXMuCjxwPkFsdGhvdWdoIHF1aWNrYm9va3Mgd2lsbCB3YXJuIHlvdSBhYm91dCBpbXBvcnRpbmcgZHVwbGljYXRlIHRyYW5zYWN0aW9ucyA8ZW0+KHRyYW5zYWN0aW9ucyB3aXRoIGEgcmVmZXJlbmNlIG51bWJlciB0aGF0IGFscmVhZHkgZXhpc3RzKTwvZW0+LCBpdCB3aWxsIGFsbG93IHlvdSB0byBpbXBvcnQgdGhlbSwgdGh1cyBjcmVhdGluZyBkdXBsaWNhdGUgdHJhbnNhY3Rpb25zIGFuZCBwb3RlbnRpYWxseSBjYXVzaW5nIGVycm9ycyBpbiB0aGUgYWNjb3VudGluZy4gIFRoaXMgaXMgd2h5IGRhdGUgbGltaXRpbmcgaXMgaW1wb3J0YW50LCBhbmQgeW91IHNob3VsZCBoYXZlIHZlcmlmaWVkIGJhY2t1cHMgYmVmb3JlIGRvaW5nIGFueSBJSUYgaW1wb3J0aW5nIGZyb20gYW55IGFwcGxpY2F0aW9uLjwvcD4KPC9saT4KPGxpPlBheW1lbnRzIGFyZSBub3QgYXV0b21hdGljYWxseSBjcmVkaXRlZCB0byB0aGUgYXBwcm9wcmlhdGUgaW52b2ljZS4KPHA+QWx0aG91Z2ggcGF5bWVudHMgYXJlIGltcG9ydGVkLCBhbmQgdGhlIHJlZmVyZW5jZSBudW1iZXIgaW4gdGhlIHBheW1lbnQgY29udGFpbnMgdGhlIGFwcHJvcHJpYXRlIGludm9pY2Uvb3JkZXIgbnVtYmVyLCBRdWlja2Jvb2tzIHdpbGwgbm90IGFzc29jaWF0ZSB0aGVtIHdpdGggdGhlIHByb3BlciBpbnZvaWNlLiAgVGhpcyBtdXN0IGJlIGRvbmUgbWFudWFsbHkgZm9yIGVhY2ggcGF5bWVudC48L3A+CjwvbGk+CjxsaT5Pbmx5IG9uZSBzYWxlcyB0YXggaXMgc3VwcG9ydGVkLjwvbGk+CjxsaT5UZXN0ZWQgb25seSB3aXRoIFVTIFZlcnNpb24gb2YgUXVpY2tib29rcy4KPHA+VGhpcyBtb2R1bGUgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgVVMgdmVyc2lvbiBvZiAmcXVvdDtRdWlja2Jvb2tzIFBybyAyMDA5JnF1b3Q7IElmIHlvdSBhcmUgdXNpbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiBRdWlja2Jvb2tzLCBvciB1c2luZyBhIGN1cnJlbmN5IG90aGVyIHRoYW4gVVNEIDxlbT4oVGhvdWdoIEkgY2Fubm90IGZvcnNlZSBhIHByb2JsZW0gd2l0aCBDQUQpPC9lbT4sIHlvdXIgbWlsZWFnZSBtYXkgdmFyeS4gIEkgd291bGQgYXBwcmVjaWF0ZSBoZWFyaW5nIGZyb20geW91IGlmIHlvdSBleHBlcmllbmNlIHByb2JsZW1zIHdpdGggb3RoZXIgdmVyc2lvbnMgb2YgcXVpY2tib29rcywgYW5kIGhhdmUgdGhlIHRpbWUgdG8gYXNzaXN0IG1lIGluIGRlYnVnZ2luZyB0aGUgaXNzdWVzLjwvcD4KPC9saT4KPC91bD4KPGgzPkhvdyBEbyBJIFVzZSBJdDo8L2gzPgo8cD5UaGlzIG1vZHVsZSBwZXJmb3JtcyBhbGwgb2YgaXRzIG9wZXJhdGlvbnMgZnJvbSB0aGUgQ01TTVMgYWRtaW4gY29uc29sZSwgdW5kZXIgdGhlICZxdW90O0V4dGVuc2lvbnMgJmd0OyZndDsgT3JkZXIgVG8gSUlGJnF1b3Q7IG1lbnUgaXRlbS4gIEluIG9yZGVyIHRvIGFjY2VzcyB0aGlzIHBhbmVsLCB5b3VyIGFkbWluaXN0cmF0b3IgYWNjb3VudCBtdXN0IGhhdmUgdGhlICZxdW90O01hbmFnZSBPcmRlcnMmcXVvdDsgcGVybWlzc2lvbiwgYW5kIHRoZSBPcmRlcnMgbW9kdWxlIG11c3QgYmUgaW5zdGFsbGVkLCBhbmQgaGF2ZSB2YWxpZCB0cmFuc2FjdGlvbiBkYXRhIGluIGl0cyB0YWJsZXMuPC9wPgo8cD5JbW1lZGlhdGVseSBhZnRlciBpbnN0YWxsYXRpb24sIHlvdSBzaG91bGQgZ28gdG8gdGhlICZxdW90O1NldHRpbmdzJnF1b3Q7IHRhYiBhbmQgY29uZmlndXJlIHRoZSBuYW1lcyBvZiB0aGUgdmFyaW91cyBhY2NvdW50cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBleHBvcnQgcHJvY2Vzcy4gVGhlc2UgYXJlIHRoZSBhY2NvdW50IG5hbWVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGV4cG9ydCBmaWxlLCBhbmQgc2hvdWxkIG1hdGNoIGV4aXN0aW5nIGFjY291bnRzIGluIHlvdXIgcXVpY2tib29rcyBjaGFydCBvZiBhY2NvdW50cy48L3A+CjxwPkluIHRoZSAmcXVvdDtFeHBvcnQmcXVvdDsgdGFiIHlvdSBjYW4gc2VsZWN0IHdoYXQgaXRlbXMgdG8gZXhwb3J0IHRvIElJRiwgYW5kIGEgZGF0ZS4gIFRoZSBkYXRlIGFsbG93cyBmaWx0ZXJpbmcgb3V0IHNvbWUgdHJhbnNhY3Rpb25zLCBhbmQgbWluaW1pemVzIHRoZSBwb3NzaWJpbGl0eSBvZiBleHBvcnRpbmcgZHVwbGljYXRlIHRyYW5zYWN0aW9ucy4gQ2xpY2tpbmcgb24gdGhlICZxdW90O0V4cG9ydCZxdW90OyBidXR0b24gd2lsbCBwcm9tcHQgeW91IHRvIGRvd25sb2FkIHRoZSBJSUYgZmlsZS48L2xpPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiAgSG93ZXZlciB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcyBvciB0byBmaWxlIGEgYnVnIHJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBjbXMgbWFkZSBzaW1wbGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVycyBGb3JnZTwvYT4gYW5kIGRvIGEgc2VhcmNoIGZvciAnUHJvZHVjdHMnPC9saT4KPGxpPlRvIG9idGFpbiBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IgYXQgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPlJvYmVydCBDYW1wYmVsbDwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ybXMuPC9hPjwvbGk+CjxsaT5Gb3Igc29tZSBxdWVzdGlvbnMgYW5kIGxpbWl0ZWQgdGVjaG5pY2FsIHN1cHBvcnQsIHRoZSBhdXRob3IgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPC91bD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4KRU9UOwoKI0kKJGxhbmdbJ2luZm9fYXJfYWNjb3VudCddID0gJ1RoZSBhY2NvdW50IG5hbWUgKGZyb20gUXVpY2tib29rcykgdG8gdXNlIHdoZW4gY3JlYXRpbmcgaW52b2ljZSBvciBwYXltZW50IHRyYW5zYWN0aW9ucyc7CiRsYW5nWydpbmZvX2RlbGltaXRlciddID0gJ0lJRiBmaWVsZCBkZWxpbWl0ZXIsIHZhbGlkIHZhbHVlcyBhcmUgLCBvciBUQUInOwokbGFuZ1snaW5mb19kaXNjb3VudF9hY2NvdW50J10gPSAnVGhlIGFjY291bnQgbmFtZSAoZnJvbSBRdWlja2Jvb2tzKSB0byB1c2UgdG8gaW5kaWNhdGUgdmFsdWVzIGRpc2NvdW50ZWQgZnJvbSByZWd1bGFyIHByaWNlcyc7CiRsYW5nWydpbmZvX2V4cG9ydCddID0gJ1RoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIHRha2UgYWxsIG9yZGVycyBjcmVhdGVkIHNpbmNlIHRoZSBkYXRlIHNwZWNpZmllZCBhbmQgZXhwb3J0IHRoZSBzZWxlY3RlZCBkYXRhLiAgaS5lOiBzZWxlY3RpbmcgJnF1b3Q7Y3VzdG9tZXJzJnF1b3Q7IGFuZCBlbnRlcmluZyBhIGRhdGUgd2lsbCBvbmx5IGV4cG9ydCBjdXN0b21lcnMgZnJvbSBvcmRlcnMgY3JlYXRlZCBzaW5jZSB0aGUgZGF0ZSB5b3Ugc2VsZWN0LiAgVGhpcyBtb2R1bGUgd2lsbCBub3QgZXhwb3J0IHBheW1lbnQgaW5mb3JtYXRpb24gZnJvbSBvcmRlcnMgdGhhdCB3ZXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBzZWxlY3RlZCBkYXRlJzsKJGxhbmdbJ2luZm9fZXhwb3J0ZGlzY291bnRzJ10gPSAnSWYgc2VsZWN0ZWQsIGFueSBkaXNjb3VudCBhbW91bnQgaW4gdGhlIG9yZGVyIHdpbGwgYmUgZXhwb3J0ZWQgYXMgYSBkZWJpdCB0byB0aGUgYWNjb3VudCBzcGVjaWZpZWQuICBUaGlzIGNhbiBiZSB1c2VkIGZvciBjcmVkaXRpbmcgZGlzY291bnRzIHRvIGEgbWFya2V0aW5nIGV4cGVuc2UgYWNvdW50IGV0Yyc7CiRsYW5nWydpbmZvX2dhdGV3YXlfYWNjb3VudCddID0gJ1RoZSBhY2NvdW50IG5hbWUgKGZyb20gUXVpY2tib29rcykgdG8gdXNlIHRvIGluZGljYXRlIGFtb3VudHMgcmVjZWl2ZWQgdGhyb3VnaCBhIHBheW1lbnQgZ2F0ZXdheSc7CiRsYW5nWydpbmZvX2ludmVudG9yeV9hY2NvdW50J10gPSAnVGhlIGFjY291bnQgbmFtZSAoZnJvbSBRdWlja2Jvb2tzKSB0byB1c2UgaW4gaW52b2ljZSB0cmFuc2FjdGlvbnMgdG8gaW5kaWNhdGUgcHVyY2hhc2VzJzsKJGxhbmdbJ2luZm9faW52b2ljZV9hY2NvdW50J10gPSAnVGhlIGFjY291bnQgbmFtZSAoZnJvbSBRdWlja2Jvb2tzKSB0byB1c2UgZm9yIGludm9pY2UgdHlwZSB0cmFuc2FjdGlvbnMnOwokbGFuZ1snaW5mb19zZXJ2aWNlX2FjY291bnQnXSA9ICdUaGUgYWNjb3VudCBuYW1lIChmcm9tIFF1aWNrYm9va3MpIHRvIGNyZWRpdCBmb3Igc2VydmljZSBpdGVtcyBpbiBhbiBpbnZvaWNlJzsKJGxhbmdbJ2luZm9fc2hpcHBpbmdfYWNjb3VudCddID0gJ1RoZSBhY2NvdW50IG5hbWUgKGZyb20gUXVpY2tib29rcykgdG8gY3JlZGl0IGZvciBzaGlwcGluZyBjb3N0cyBpbiBpbnZvaWNlcyc7CiRsYW5nWydpbmZvX3NhbGVzdGF4X2FjY291bnQnXSA9ICdUaGUgYWNjb3VudCBuYW1lIChmcm9tIFF1aWNrYm9va3MpIHRvIGNyZWRpdCBmb3Igc2FsZXMgdGF4ZXMgaW4gaW52b2ljZXMnOwojSgoKCiNLCgoKI0wKJGxhbmdbJ2xibF9hY2NvdW50X3NldHRpbmdzJ10gPSAnUXVpY2tib29rcyBBY2NvdW50IFNldHRpbmdzJzsKJGxhbmdbJ2xibF9jdXN0b21lcnMnXSA9ICdDdXN0b21lcnMnOwokbGFuZ1snbGJsX2V4cG9ydCddID0gJ0V4cG9ydCc7CiRsYW5nWydsYmxfZ2VuZXJhbF9zZXR0aW5ncyddID0gJ0dlbmVyYWwgU2V0dGluZ3MnOwokbGFuZ1snbGJsX29yZGVycyddID0gJ09yZGVycyc7CiRsYW5nWydsYmxfcGF5bWVudHMnXSA9ICdQYXltZW50cyc7CiRsYW5nWydsYmxfc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CgojTQokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdBIG1vZHVsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgT3JkZXJzIG1vZHVsZSBpbiBhIGZvcm1hdCBzdWl0YWxiZSBpbXBvcnRpbmcgaW50byBRdWlja2Jvb2tzJzsKCiNOCgoKI08KCgojUAokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdUaGUgT3JkZXJzIHRvIElJRiBtb2R1bGUgaGFzIGJlZW4gaW5zdGFsbGVkLCBwbGVhc2UgdmlldyB0aGlzIG1vZHVsZXMgYWRtaW5pc3RyYXRpb24gbW9kdWxlIHRvIGVuc3VyZSB0aGF0IGl0IGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdBbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIE9yZGVycyB0byBJSUYgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQnOwokbGFuZ1sncHJvbXB0X2FyX2FjY291bnQnXSA9ICdRdWlja2Jvb2tzIEFSIEFjY291bnQgTmFtZSc7CiRsYW5nWydwcm9tcHRfYXBfYWNjb3VudCddID0gJ1F1aWNrYm9va3MgQVAgQWNjb3VudCBOYW1lJzsKJGxhbmdbJ3Byb21wdF9kZWxpbWl0ZXInXSA9ICdJSUYgRmllbGQgRGVsaW1pdGVyJzsKJGxhbmdbJ3Byb21wdF9kaXNjb3VudF9hY2NvdW50J10gPSAnUXVpY2tib29rcyBEaXNjb3VudCBBY2NvdW50IE5hbWUnOwokbGFuZ1sncHJvbXB0X2V4cG9ydGRpc2NvdW50cyddID0gJ0V4cG9ydCBEaXNjb3VudHMnOwokbGFuZ1sncHJvbXB0X2dhdGV3YXlfYWNjb3VudCddID0gJ1F1aWNrYm9va3MgUGF5bWVudCBHYXRld2F5IEFjY291bnQgTmFtZSc7CiRsYW5nWydwcm9tcHRfaW52ZW50b3J5X2FjY291bnQnXSA9ICdRdWlja2Jvb2tzIEludmVudG9yeSBBY2NvdW50IE5hbWUnOwokbGFuZ1sncHJvbXB0X2ludm9pY2VfYWNjb3VudCddID0gJ3F1aWNrYm9va3MgSW52b2ljZSBBY2NvdW50IE5hbWUnOwokbGFuZ1sncHJvbXB0X3NlcnZpY2VfYWNjb3VudCddID0gJ1F1aWNrYm9va3MgU2VydmljZSBBY2NvdW50IE5hbWUnOwokbGFuZ1sncHJvbXB0X3NoaXBwaW5nX2FjY291bnQnXSA9ICdRdWlja2Jvb2tzIFNoaXBwaW5nIEFjY291bnQgTmFtZSc7CiRsYW5nWydwcm9tcHRfc2FsZXN0YXhfYWNjb3VudCddID0gJ1F1aWNrYm9va3MgU2FsZXMgVGF4IEFjY291bnQgTmFtZSc7CiRsYW5nWydwcm9tcHRfZGF0ZV9vZl9sYXN0X2V4cG9ydCddID0gJ0RhdGUgb2YgTGFzdCBFeHBvcnQnOwokbGFuZ1sncHJvbXB0X2V4cG9ydF9mcm9tX2RhdGUnXSA9ICdFeHBvcnQgcmVjb3JkcyBmcm9tIHRoaXMgZGF0ZSc7CiRsYW5nWydwcm9tcHRfaXRlbXNfdG9fZXhwb3J0J10gPSAnSXRlbXMgdG8gRXhwb3J0JzsKJGxhbmdbJ3Byb21wdF91c2VfbGFzdF9kYXRlJ10gPSAnVXNlIHRoZSBkYXRlIG9mIGxhc3QgZXhwb3J0JzsKCiNRCgoKI1IKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdBcmUgeW91IHJlYWxseSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgbW9kdWxlPyc7CgojUwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKCiNUCgoKI1UKJGxhbmdbJ3Vua25vd24nXSA9ICdVbmtub3duJzsKCiNWCgoKI1cKJGxhbmdbJ3dhcm5pbmcnXSA9ICdXYXJuaW5nJzsKJGxhbmdbJ3dhcm5pbmdfaWlmX2V4cG9ydCddID0gJzxzdHJvbmcgc3R5bGU9ImNvbG9yOiByZWQ7Ij5FeGVyY2lzZSBleHRyZW1lIGNhdXRpb246PC9zdHJvbmc+IFRoZSBJSUYgZm9ybWF0IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gUXVpY2tCb29rcywgYW5kIHNpZ25pZmljYW50IGVycm9ycyBpbiB5b3VyIGJvb2tzIGNvdWxkIHJlc3VsdCBmcm9tIGFuIGltcG9yb3Blcmx5IGZvcm1hdHRlZCBmaWxlcy4gIFVzZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXQgeW91ciBvd24gcmlzay48YnIvPjxici8+RW5zdXJlIHlvdSBoYXZlIGFkZXF1YXRlIGJhY2t1cHMgb2YgYWxsIGZpbmFuY2lhbCBkYXRhIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuPGJyLz48YnIvPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHByZXZpZXcgdGhlIGdlbmVyYXRlZCBJSUYgZmlsZSBpbiBhIHNwcmVhZHNoZWV0IGJlZm9yZSBpbXBvcnRpbmcuPGJyLz48YnIvPic7CgojWAoKCiNZCgoKI1oKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.iif_address.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgaWlmX2FkZHJlc3MKewogIHZhciAkX2NvbXBhbnk7CiAgdmFyICRfZmlyc3RuYW1lOwogIHZhciAkX2xhc3RuYW1lOwogIHZhciAkX2FkZHIxOwogIHZhciAkX2FkZHIyOwogIHZhciAkX2NpdHk7CiAgdmFyICRfc3RhdGU7CiAgdmFyICRfcG9zdGFsOwogIHZhciAkX2NvdW50cnk7CiAgdmFyICRfcGhvbmUxOwogIHZhciAkX2ZheDsKICB2YXIgJF9lbWFpbDsKCgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY29tcGFueSgkY29tcGFueSkKICB7CiAgICBpZiggaXNfc3RyaW5nKCRjb21wYW55KSApCiAgICAgICR0aGlzLT5fY29tcGFueSA9IGlpZl91dGlsczo6Y2xlYW5fc3RyaW5nKCRjb21wYW55KTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfY29tcGFueSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fY29tcGFueTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmlyc3RuYW1lKCRmaXJzdG5hbWUpCiAgewogICAgaWYoIGlzX3N0cmluZygkZmlyc3RuYW1lKSApCiAgICAgICR0aGlzLT5fZmlyc3RuYW1lID0gaWlmX3V0aWxzOjpjbGVhbl9zdHJpbmcoJGZpcnN0bmFtZSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZpcnN0bmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZmlyc3RuYW1lOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9sYXN0bmFtZSgkbGFzdG5hbWUpCiAgewogICAgaWYoIGlzX3N0cmluZygkbGFzdG5hbWUpICkKICAgICAgJHRoaXMtPl9sYXN0bmFtZSA9IGlpZl91dGlsczo6Y2xlYW5fc3RyaW5nKCRsYXN0bmFtZSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2xhc3RuYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9sYXN0bmFtZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZW1haWwoJGVtYWlsKQogIHsKICAgIGlmKCBpc19zdHJpbmcoJGVtYWlsKSApCiAgICAgICR0aGlzLT5fZW1haWwgPSBpaWZfdXRpbHM6OmNsZWFuX3N0cmluZygkZW1haWwpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9lbWFpbCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZW1haWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3Bob25lKCRwaG9uZSkKICB7CiAgICBpZiggaXNfc3RyaW5nKCRwaG9uZSkgKQogICAgICAkdGhpcy0+X3Bob25lID0gJHBob25lOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9waG9uZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fcGhvbmU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZheCgkZmF4KQogIHsKICAgIGlmKCBpc19zdHJpbmcoJGZheCkgKQogICAgICAkdGhpcy0+X2ZheCA9ICRmYXg7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZheCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZmF4OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9hZGRyMSgkYWRkcjEpCiAgewogICAgaWYoIGlzX3N0cmluZygkYWRkcjEpICkKICAgICAgJHRoaXMtPl9hZGRyMSA9IGlpZl91dGlsczo6Y2xlYW5fc3RyaW5nKCRhZGRyMSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2FkZHIxKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9hZGRyMTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfYWRkcjIoJGFkZHIyKQogIHsKICAgIGlmKCBpc19zdHJpbmcoJGFkZHIyKSApCiAgICAgICR0aGlzLT5fYWRkcjIgPSBpaWZfdXRpbHM6OmNsZWFuX3N0cmluZygkYWRkcjIpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9hZGRyMigpCiAgewogICAgcmV0dXJuICR0aGlzLT5fYWRkcjI7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NpdHkoJGNpdHkpCiAgewogICAgaWYoIGlzX3N0cmluZygkY2l0eSkgKQogICAgICAkdGhpcy0+X2NpdHkgPSBpaWZfdXRpbHM6OmNsZWFuX3N0cmluZygkY2l0eSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NpdHkoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2NpdHk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3N0YXRlKCRzdGF0ZSkKICB7CiAgICBpZiggaXNfc3RyaW5nKCRzdGF0ZSkgKQogICAgICAkdGhpcy0+X3N0YXRlID0gaWlmX3V0aWxzOjpjbGVhbl9zdHJpbmcoJHN0YXRlKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfc3RhdGUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X3N0YXRlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9wb3N0YWwoJHBvc3RhbCkKICB7CiAgICBpZiggaXNfc3RyaW5nKCRwb3N0YWwpICkKICAgICAgJHRoaXMtPl9wb3N0YWwgPSBpaWZfdXRpbHM6OmNsZWFuX3N0cmluZygkcG9zdGFsKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcG9zdGFsKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9wb3N0YWw7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NvdW50cnkoJGNvdW50cnkpCiAgewogICAgaWYoIGlzX3N0cmluZygkY291bnRyeSkgKQogICAgICAkdGhpcy0+X2NvdW50cnkgPSBpaWZfdXRpbHM6OmNsZWFuX3N0cmluZygkY291bnRyeSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvdW50cnkoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2NvdW50cnk7CiAgfQoKfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.iif_customer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKCmNsYXNzIGlpZl9jdXN0b21lcgp7CiAgdmFyICRfbmFtZTsKICB2YXIgJF9iaWxsaW5nOwogIHZhciAkX3NoaXBwaW5nOwogIHZhciAkX3RheGFibGU7CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfbmFtZSgkbmFtZSkKICB7CiAgICBpZiggaXNfc3RyaW5nKCRuYW1lKSApCiAgICAgICR0aGlzLT5fbmFtZSA9IGlpZl91dGlsczo6Y2xlYW5fc3RyaW5nKCRuYW1lKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fbmFtZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfYmlsbGluZygkYmlsbGluZykKICB7CiAgICBpZiggaXNfYSgkYmlsbGluZywnaWlmX2FkZHJlc3MnKSApCiAgICAgIHsKCSR0aGlzLT5fYmlsbGluZyA9ICRiaWxsaW5nOwogICAgICB9CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2JpbGxpbmcoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2JpbGxpbmc7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9zaGlwcGluZygkc2hpcHBpbmcpCiAgewogICAgaWYoIGlzX2EoJHNoaXBwaW5nLCdpaWZfYWRkcmVzcycpICkKICAgICAgewoJJHRoaXMtPl9zaGlwcGluZyA9ICRzaGlwcGluZzsKICAgICAgfQogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9zaGlwcGluZygpCiAgewogICAgcmV0dXJuICR0aGlzLT5fc2hpcHBpbmc7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF90YXhhYmxlKCR0YXhhYmxlKQogIHsKICAgICR0aGlzLT5fdGF4YWJsZSA9ICR0YXhhYmxlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF90YXhhYmxlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl90YXhhYmxlOwogIH0KCn0gLy8gY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.iif_file.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZGVmaW5lKCdJSUZfQUNDVF9BUicsJ0lJRl9BQ0NUX0FSJyk7CmRlZmluZSgnSUlGX0FDQ1RfQVAnLCdJSUZfQUNDVF9BUCcpOwpkZWZpbmUoJ0lJRl9BQ0NUX0dBVEVXQVknLCdJSUZfQUNDVF9HQVRFV0FZJyk7CmRlZmluZSgnSUlGX0FDQ1RfSU5WT0lDRScsJ0lJRl9BQ0NUX0lOVk9JQ0UnKTsKZGVmaW5lKCdJSUZfQUNDVF9JTlZFTlRPUlknLCdJSUZfQUNDVF9JTlZFTlRPUlknKTsKZGVmaW5lKCdJSUZfQUNDVF9TQUxFU1RBWCcsJ0lJRl9BQ0NUX1NBTEVTVEFYJyk7CmRlZmluZSgnSUlGX0FDQ1RfU0hJUFBJTkcnLCdJSUZfQUNDVF9TSElQUElORycpOwpkZWZpbmUoJ0lJRl9BQ0NUX1NFUlZJQ0UnLCdJSUZfQUNDVF9TRVJWSUNFJyk7CmRlZmluZSgnSUlGX0FDQ1RfRElTQ09VTlQnLCdJSUZfQUNDVF9ESVNDT1VOVCcpOwoKZGVmaW5lKCdJSUZfVFJBTlNfSU5WT0lDRScsJ0lJRl9UUkFOU19JTlZPSUNFJyk7CmRlZmluZSgnSUlGX1RSQU5TX1BBWU1FTlQnLCdJSUZfVFJBTlNfUEFZTUVOVCcpOwoKY2xhc3MgaWlmX2ZpbGUKewogIHZhciAkX2FjY291bnRzOwogIHZhciAkX3RyYW5zYWN0aW9uczsKICB2YXIgJF9jdXN0b21lcnM7CiAgdmFyICRfYWNjdF90eXBlczsKICB2YXIgJF90cmFuc190eXBlczsKCiAgZnVuY3Rpb24gaWlmX2ZpbGUoKSAKICB7CiAgICAkdGhpcy0+X2FjY3RfdHlwZXMgID0gYXJyYXkoSUlGX0FDQ1RfQVIsSUlGX0FDQ1RfQVAsCgkJCQlJSUZfQUNDVF9HQVRFV0FZLElJRl9BQ0NUX0lOVkVOVE9SWSwKCQkJCUlJRl9BQ0NUX1NBTEVTVEFYLElJRl9BQ0NUX1NISVBQSU5HLAoJCQkJSUlGX0FDQ1RfSU5WRU5UT1JZLCBJSUZfQUNDVF9TRVJWSUNFKTsKICAgICR0aGlzLT5fdHJhbnNfdHlwZXMgPSBhcnJheShJSUZfVFJBTlNfSU5WT0lDRSxJSUZfVFJBTlNfUEFZTUVOVCk7CgogICAgJHRoaXMtPnNldF9hY2NvdW50KElJRl9BQ0NUX0FSLCdBY2NvdW50cyBSZWNlaXZhYmxlJyk7CiAgICAkdGhpcy0+c2V0X2FjY291bnQoSUlGX0FDQ1RfQVAsJ0FjY291bnRzIFBheWFibGUnKTsKICB9CgoKICBmdW5jdGlvbiBzZXRfYWNjb3VudCgkYWNjb3VudF90eXBlLCRuYW1lKQogIHsKICAgIGlmKCAhaW5fYXJyYXkoJGFjY291bnRfdHlwZSwkdGhpcy0+X2FjY3RfdHlwZXMpICkKICAgICAgcmV0dXJuIEZBTFNFOwoKICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9hY2NvdW50cykgKQogICAgICB7CgkkdGhpcy0+X2FjY291bnRzID0gYXJyYXkoKTsKICAgICAgfQogICAgJHRoaXMtPl9hY2NvdW50c1skYWNjb3VudF90eXBlXSA9ICRuYW1lOwogICAgcmV0dXJuIFRSVUU7CiAgfQoKICBmdW5jdGlvbiBnZXRfYWNjb3VudCgkYWNjb3VudCkKICB7CiAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5fYWNjb3VudHMpICkKICAgICAgewoJcmV0dXJuIEZBTFNFOwogICAgICB9CiAgICBpZiggIWlzc2V0KCR0aGlzLT5fYWNjb3VudHNbJGFjY291bnRdKSApCiAgICAgIHsKCXJldHVybiBGQUxTRTsKICAgICAgfQogICAgcmV0dXJuICR0aGlzLT5fYWNjb3VudHNbJGFjY291bnRdOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RyYW5zYWN0aW9uKCR0cmFuc2FjdGlvbikKICB7CiAgICBpZiggIWluX2FycmF5KCR0cmFuc2FjdGlvbi0+Z2V0X3R5cGUoKSwkdGhpcy0+X3RyYW5zX3R5cGVzKSApCiAgICAgIHJldHVybiBGQUxTRTsKCiAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5fdHJhbnNhY3Rpb25zKSApCiAgICAgIHsKCSR0aGlzLT5fdHJhbnNhY3Rpb25zID0gYXJyYXkoKTsKICAgICAgfQogICAgJHRoaXMtPl90cmFuc2FjdGlvbnNbXSA9ICR0cmFuc2FjdGlvbjsKICAgIHJldHVybiBUUlVFOwogIH0KCgogIGZ1bmN0aW9uIGFkZF9jdXN0b21lcigkY3VzdG9tZXIpCiAgewogICAgaWYoICFpc19hKCRjdXN0b21lciwnaWlmX2N1c3RvbWVyJykgKQogICAgICB7CglyZXR1cm4gRkFMU0U7CiAgICAgIH0KICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9jdXN0b21lcnMpICkKICAgICAgewoJJHRoaXMtPl9jdXN0b21lcnMgPSBhcnJheSgpOwogICAgICB9CiAgICBpZiggIWlzc2V0KCR0aGlzLT5fY3VzdG9tZXJzWyRjdXN0b21lci0+Z2V0X25hbWUoKV0pICkKICAgICAgewoJJHRoaXMtPl9jdXN0b21lcnNbJGN1c3RvbWVyLT5nZXRfbmFtZSgpXSA9ICRjdXN0b21lcjsKICAgICAgfQogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBoYXNfY3VzdG9tZXJzKCkKICB7CiAgICBpZiggaXNfbnVsbCgkdGhpcy0+X2N1c3RvbWVycykgKSByZXR1cm4gRkFMU0U7CiAgICByZXR1cm4gY291bnQoJHRoaXMtPl9jdXN0b21lcnMpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGhhc190cmFuc2FjdGlvbnMoKQogIHsKICAgIGlmKCBpc19udWxsKCR0aGlzLT5fdHJhbnNhY3Rpb25zKSApIHJldHVybiBGQUxTRTsKICAgIHJldHVybiBjb3VudCgkdGhpcy0+X3RyYW5zYWN0aW9ucyk7CiAgfQoKfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.iif_transaction.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZGVmaW5lKCdJSUZfSVRFTVRZUEVfUFJPRFVDVCcsJ0lJRl9JVEVNVFlQRV9QUk9EVUNUJyk7CmRlZmluZSgnSUlGX0lURU1UWVBFX1NFUlZJQ0UnLCdJSUZfSVRFTVRZUEVfU0VSVklDRScpOwpkZWZpbmUoJ0lJRl9JVEVNVFlQRV9TSElQUElORycsJ0lJRl9JVEVNVFlQRV9TSElQUElORycpOwpkZWZpbmUoJ0lJRl9JVEVNVFlQRV9ESVNDT1VOVCcsJ0lJRl9JVEVNVFlQRV9ESVNDT1VOVCcpOwpkZWZpbmUoJ0lJRl9JVEVNVFlQRV9UQVgnLCdJSUZfSVRFTVRZUEVfVEFYJyk7CmRlZmluZSgnSUlGX0lURU1UWVBFX1BBWU1FTlQnLCdJSUZfSVRFTVRZUEVfUEFZTUVOVCcpOwoKY2xhc3MgaWlmX3RyYW5zYWN0aW9uX2l0ZW0KewogIHZhciAkX3ByaWNlOwogIHZhciAkX3F0eTsKICB2YXIgJF9pdGVtbmFtZTsKICB2YXIgJF9pdGVtdHlwZTsKCiAgcHVibGljIGZ1bmN0aW9uIGlpZl90cmFuc2FjdGlvbl9pdGVtKCkKICB7CiAgICAkdGhpcy0+X2l0ZW10eXBlID0gSUlGX0lURU1UWVBFX1BST0RVQ1Q7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3ByaWNlKCR2YWwpCiAgewogICAgICAkdGhpcy0+X3ByaWNlID0gJHZhbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcHJpY2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X3ByaWNlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9xdHkoJHZhbCkKICB7CiAgICAgICR0aGlzLT5fcXR5ID0gJHZhbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcXR5KCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9xdHk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2FtdCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fcXR5ICogJHRoaXMtPl9wcmljZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfaXRlbW5hbWUoJHZhbCkKICB7CiAgICAkdGhpcy0+X2l0ZW1uYW1lID0gaWlmX3V0aWxzOjpjbGVhbl9zdHJpbmcoJHZhbCk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2l0ZW1uYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9pdGVtbmFtZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfaXRlbXR5cGUoJHZhbCkKICB7CiAgICAkdGhpcy0+X2l0ZW10eXBlID0gJHZhbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfaXRlbXR5cGUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2l0ZW10eXBlOwogIH0KCn0gLy8gY2xhc3MKCgpjbGFzcyBpaWZfdHJhbnNhY3Rpb24KewogIHZhciAkX3R5cGU7CiAgdmFyICRfZG9jbnVtOwogIHZhciAkX2FtdDsKICB2YXIgJF9kYXRlOwogIHZhciAkX3RpdGxlOwogIHZhciAkX2JpbGxpbmdfY3VzdG9tZXI7CiAgdmFyICRfc2hpcHBpbmdfY3VzdG9tZXI7CiAgdmFyICRfaXRlbXM7CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2FtdCgkYW10KQogIHsKICAgICAgJHRoaXMtPl9hbXQgPSAkYW10OwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfYW10KCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9hbXQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF90eXBlKCR0eXBlKQogIHsKICAgICAgJHRoaXMtPl90eXBlID0gJHR5cGU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF90eXBlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl90eXBlOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGF0ZSgkZGF0ZSkKICB7CiAgICAkdGhpcy0+X2RhdGUgPSAkZGF0ZTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2RhdGUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2RhdGU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9kb2NudW0oJGRvY251bSkKICB7CiAgICAkdGhpcy0+X2RvY251bSA9IGlpZl91dGlsczo6Y2xlYW5fc3RyaW5nKCRkb2NudW0pOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZG9jbnVtKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9kb2NudW07CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9iaWxsaW5nX2N1c3RvbWVyKCRjdXN0b21lcikKICB7CiAgICBpZiggaXNfYSgkY3VzdG9tZXIsJ2lpZl9jdXN0b21lcicpICkKICAgICAgJHRoaXMtPl9iaWxsaW5nX2N1c3RvbWVyID0gJGN1c3RvbWVyOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfYmlsbGluZ19jdXN0b21lcigpCiAgewogICAgcmV0dXJuICR0aGlzLT5fYmlsbGluZ19jdXN0b21lcjsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3NoaXBwaW5nX2N1c3RvbWVyKCRjdXN0b21lcikKICB7CiAgICBpZiggaXNfYSgkY3VzdG9tZXIsJ2lpZl9jdXN0b21lcicpICkKICAgICAgJHRoaXMtPl9zaGlwcGluZ19jdXN0b21lciA9ICRjdXN0b21lcjsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3NoaXBwaW5nX2N1c3RvbWVyKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl9iaWxsaW5nX2N1c3RvbWVyOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdGl0bGUoJHRpdGxlKQogIHsKICAgICR0aGlzLT5fdGl0bGUgPSAkdGl0bGU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF90aXRsZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fdGl0bGU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGFkZF9pdGVtKCRpdGVtKQogIHsKICAgIGlmKCAhaXNfYSgkaXRlbSwnaWlmX3RyYW5zYWN0aW9uX2l0ZW0nKSApCiAgICAgIHsKCXJldHVybiBGQUxTRTsKICAgICAgfQogICAgaWYoICFpc19hcnJheSgkdGhpcy0+X2l0ZW1zKSApCiAgICAgIHsKCSR0aGlzLT5faXRlbXMgPSBhcnJheSgpOwogICAgICB9CiAgICAkdGhpcy0+X2l0ZW1zW10gPSAkaXRlbTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gJmdldF9pdGVtKCRpZHgpCiAgewogICAgaWYoaXNfYXJyYXkoJHRoaXMtPl9pdGVtcykgCiAgICAgICAmJiBjb3VudCgkdGhpcy0+X2l0ZW1zKSA+ICRpZHgpCiAgICAgIHsKCXJldHVybiAkdGhpcy0+X2l0ZW1zWyRpZHhdOwogICAgICB9CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uICZkZWxfaXRlbSgkaWR4KQogIHsKICAgIGlmKGlzX2FycmF5KCR0aGlzLT5faXRlbXMpIAogICAgICAgJiYgY291bnQoJHRoaXMtPl9pdGVtcykgPiAkaWR4KQogICAgICB7CgkkdG1wID0gYXJyYXkoKTsKCWZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0aGlzLT5faXRlbXMpOyAkaSsrICkKCSAgewoJICAgIGlmKCAkaSA9PSAkaWR4ICkgY29udGludWU7CgkgICAgJHRtcFtdID0gJHRoaXMtPl9pdGVtczsKCSAgfQoJJHRoaXMtPl9pdGVtcyA9ICR0bXA7CiAgICAgIH0KICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gY291bnRfaXRlbXMoKQogIHsKICAgIHJldHVybiBjb3VudCgkdGhpcy0+X2l0ZW1zKTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KCkKICB7CiAgICAkc3VtID0gMDsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0aGlzLT5faXRlbXMpOyAkaSsrICkKICAgICAgewoJJHN1bSArPSAkdGhpcy0+X2l0ZW1zWyRpXS0+Z2V0X2FtdCgpOwogICAgICB9CiAgICBpZiggYWJzKCRzdW0gLSAkdGhpcy0+X2FtdCkgPiAwLjAwMSApCiAgICAgIHsKCXJldHVybiBGQUxTRTsKICAgICAgfQogICAgcmV0dXJuIFRSVUU7CiAgfQp9IC8vIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.iif_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgaWlmX3V0aWxzCnsKICBwcml2YXRlIHN0YXRpYyAkX2RlbGltID0gJywnOwogIHByaXZhdGUgc3RhdGljICRfZmxkbGVuID0gMzE7CgogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gc2V0X2RlbGltKCRjaGFyKQogIHsKICAgIGlmKCBpc19zdHJpbmcoJGNoYXIpICYmIHN0cmxlbigkY2hhcikgPT0gMSApCiAgICAgIHsKCXNlbGY6OiRfZGVsaW0gPSAkY2hhcjsKICAgICAgfQogIH0KCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmllbGRsZW5ndGgoJGxlbikKICB7CiAgICBpZiggaXNfaW50KCRsZW4pICYmICRsZW4gPiAwICkKICAgICAgewoJc2VsZjo6JF9mbGRsZW4gPSAkbGVuOwogICAgICB9CiAgfQoKICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGZvcm1hdF9udW1iZXIoJHZhbCkKICB7CiAgICByZXR1cm4gbnVtYmVyX2Zvcm1hdCgkdmFsLDIpOwogIH0KCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjbGVhbl9zdHJpbmcoJHN0cikKICB7CiAgICBpZiggZW1wdHkoJHN0cikgKSByZXR1cm4gJyc7CgogICAgLy8gYTogcmVtb3ZlIGh0bWwgdGFncy4KICAgICRzdHIgPSBzdHJpcF90YWdzKCRzdHIpOwoKICAgIC8vIGI6IGNvbnZlcnQgZW50aXRpZXMgaW50byBwcmludGFibGUgY2hhcnMKICAgICRzdHIgPSBwcmVnX3JlcGxhY2UoJy8mLipcOy8nLCcnLCRzdHIpOwoKICAgIC8vIGM6IHJlbW92ZSBpbGxlZ2FsIGNoYXJzIChzdHVwaWQgSUlGKQogICAgJHN0ciA9IHByZWdfcmVwbGFjZSgiL1skXHJcblx0XS8iLCcnLCRzdHIpOwoKICAgIC8vIGQ6IHJlbW92ZSBkZWxpbWl0ZXIKICAgICRzdHIgPSBwcmVnX3JlcGxhY2UoJy8nLnNlbGY6OiRfZGVsaW0uJy8nLCcnLCRzdHIpOwoKICAgIC8vIGU6IHJlbW92ZSBtdWx0aXBsZSBzcGFjZXMKICAgIGlmKCAhZW1wdHkoJHN0cikgKQogICAgICB7CgkkdG1wID0gJHN0clswXTsKCWZvciggJGkgPSAxOyAkaSA8IHN0cmxlbigkc3RyKTsgJGkrKyApCgkgIHsKCSAgICBpZiggJHN0clskaV0gPT0gJyAnICYmICRzdHJbJGktMV0gPT0gJyAnKQoJICAgICAgewoJCWNvbnRpbnVlOwoJICAgICAgfQoJICAgICR0bXAgLj0gJHN0clskaV07CgkgIH0KCSRzdHIgPSAkdG1wOwogICAgICB9CiAgICAKICAgIC8vIGY6IHRyaW0gd2hpdGVzcGFjZQogICAgJHN0ciA9IHRyaW0oJHN0cik7CgogICAgLy8gZzogdHJpbSB0byBtYXhpbXVtbCBsZW5ndGg7CiAgICAkc3RyID0gc3Vic3RyKCRzdHIsMCxzZWxmOjokX2ZsZGxlbik7CgogICAgcmV0dXJuICRzdHI7CiAgfQp9IC8vIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.iif_writer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgaWlmX3dyaXRlcgp7CiAgdmFyICRfZmlsZW5hbWU7CiAgdmFyICRfZmg7CiAgdmFyICRfZGF0YTsKICB2YXIgJF9jdXN0ZmllbGRzOwogIHZhciAkX3RyYW5zZmllbGRzOwogIHZhciAkX3NwbGZpZWxkczsKICB2YXIgJF9udW07CiAgdmFyICRfZGVsaW1pdGVyOwoKCiAgZnVuY3Rpb24gaWlmX3dyaXRlcigkZmlsZW5hbWUpCiAgewogICAgJHRoaXMtPl9kZWxpbWl0ZXIgPSAiLCI7CiAgICAkdGhpcy0+X251bSA9IDA7CiAgICAkdGhpcy0+X2ZpbGVuYW1lID0gJGZpbGVuYW1lOwoKICAgICRmaWVsZHMgPSBhcnJheSgpOwogICAgJGZpZWxkc1tdID0gJ05BTUUnOwogICAgJGZpZWxkc1tdID0gJ0JBRERSMSc7CiAgICAkZmllbGRzW10gPSAnQkFERFIyJzsKICAgICRmaWVsZHNbXSA9ICdCQUREUjMnOwogICAgJGZpZWxkc1tdID0gJ0JBRERSNCc7CiAgICAkZmllbGRzW10gPSAnQkFERFI1JzsKICAgICRmaWVsZHNbXSA9ICdTQUREUjEnOwogICAgJGZpZWxkc1tdID0gJ1NBRERSMic7CiAgICAkZmllbGRzW10gPSAnU0FERFIzJzsKICAgICRmaWVsZHNbXSA9ICdTQUREUjQnOwogICAgJGZpZWxkc1tdID0gJ1NBRERSNSc7CiAgICAkZmllbGRzW10gPSAnUEhPTkUxJzsKICAgICRmaWVsZHNbXSA9ICdGQVhOVU0nOwogICAgJGZpZWxkc1tdID0gJ1RBWEFCTEUnOwogICAgJGZpZWxkc1tdID0gJ0ZJUlNUTkFNRSc7CiAgICAkZmllbGRzW10gPSAnTEFTVE5BTUUnOwogICAgJHRoaXMtPl9jdXN0ZmllbGRzID0gJGZpZWxkczsgICAgCgogICAgJGZpZWxkcyA9IGFycmF5KCk7CiAgICAkZmllbGRzW10gPSAnVFJOU0lEJzsKICAgICRmaWVsZHNbXSA9ICdUUk5TVFlQRSc7CiAgICAkZmllbGRzW10gPSAnREFURSc7CiAgICAkZmllbGRzW10gPSAnQUNDTlQnOwogICAgJGZpZWxkc1tdID0gJ05BTUUnOwogICAgJGZpZWxkc1tdID0gJ0FNT1VOVCc7CiAgICAkZmllbGRzW10gPSAnRE9DTlVNJzsKICAgICRmaWVsZHNbXSA9ICdBRERSMSc7CiAgICAkZmllbGRzW10gPSAnQUREUjInOwogICAgJGZpZWxkc1tdID0gJ0FERFIzJzsKICAgICRmaWVsZHNbXSA9ICdBRERSNCc7CiAgICAkZmllbGRzW10gPSAnQUREUjUnOwogICAgJGZpZWxkc1tdID0gJ1BBSUQnOwogICAgJGZpZWxkc1tdID0gJ0lOVlRJVExFJzsKICAgICRmaWVsZHNbXSA9ICdJTlZNRU1PJzsKICAgICRmaWVsZHNbXSA9ICdTQUREUjEnOwogICAgJGZpZWxkc1tdID0gJ1NBRERSMic7CiAgICAkZmllbGRzW10gPSAnU0FERFIzJzsKICAgICRmaWVsZHNbXSA9ICdTQUREUjQnOwogICAgJGZpZWxkc1tdID0gJ1NBRERSNSc7CiAgICAkZmllbGRzW10gPSAnTkFNRUlTVEFYQUJMRSc7CiAgICAkdGhpcy0+X3RyYW5zZmllbGRzID0gJGZpZWxkczsKCiAgICAkZmllbGRzID0gYXJyYXkoKTsKICAgICRmaWVsZHNbXSA9ICdTUExJRCc7CiAgICAkZmllbGRzW10gPSAnVFJOU1RZUEUnOwogICAgJGZpZWxkc1tdID0gJ0RBVEUnOwogICAgJGZpZWxkc1tdID0gJ0FDQ05UJzsKICAgICRmaWVsZHNbXSA9ICdOQU1FJzsKICAgICRmaWVsZHNbXSA9ICdBTU9VTlQnOwogICAgJGZpZWxkc1tdID0gJ0RPQ05VTSc7CiAgICAkZmllbGRzW10gPSAnUU5UWSc7CiAgICAkZmllbGRzW10gPSAnUFJJQ0UnOwogICAgJGZpZWxkc1tdID0gJ0lOVklURU0nOwogICAgJGZpZWxkc1tdID0gJ1RBWEFCTEUnOwogICAgJGZpZWxkc1tdID0gJ0VYVFJBJzsKICAgICR0aGlzLT5fc3BsZmllbGRzID0gJGZpZWxkczsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZpbGVuYW1lKCRmaWxlbmFtZSkKICB7CiAgICBpZiggIWlzX251bGwoJHRoaXMtPl9maCkgKQogICAgICB7CgkkdGhpcy0+X2ZpbGVuYW1lID0gJGZpbGVuYW1lOwogICAgICB9CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF9maWxlbmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZmlsZW5hbWU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9kYXRhKCYkZGF0YSkKICB7CiAgICBpZiggaXNfYSgkZGF0YSwnaWlmX2ZpbGUnKSApCiAgICAgIHsKCSR0aGlzLT5fZGF0YSA9ICRkYXRhOwogICAgICB9CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uICZnZXRfZGF0YSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZGF0YTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGVsaW1pdGVyKCRkZWxpbSkKICB7CiAgICAkdGhpcy0+X2RlbGltaXRlciA9ICRkZWxpbTsKICAgIGlpZl91dGlsczo6c2V0X2RlbGltKCRkZWxpbSk7CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfdW5pcXVlX2lkKCkKICB7CiAgICAkdGhpcy0+X251bSsrOwogICAgcmV0dXJuICR0aGlzLT5fbnVtOwogIH0KCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZm9ybWF0X2RhdGUoJHN0cmluZykKICB7CiAgICAvLyBzbmFyZmVkIGZyb20gc21hcnR5LgogICAgJHN0cmluZyA9IHRyaW0oJHN0cmluZyk7CiAgICAkdGltZSA9ICcnOwogICAgaWYoZW1wdHkoJHN0cmluZykpIHsKICAgICAgLy8gdXNlICJub3ciOgogICAgICAkdGltZSA9IHRpbWUoKTsKCiAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgnL15cZHsxNH0kLycsICRzdHJpbmcpKSB7CiAgICAgIC8vIGl0IGlzIG15c3FsIHRpbWVzdGFtcCBmb3JtYXQgb2YgWVlZWU1NRERISE1NU1M/CiAgICAgICR0aW1lID0gbWt0aW1lKHN1YnN0cigkc3RyaW5nLCA4LCAyKSxzdWJzdHIoJHN0cmluZywgMTAsIDIpLHN1YnN0cigkc3RyaW5nLCAxMiwgMiksCgkJICAgICBzdWJzdHIoJHN0cmluZywgNCwgMiksc3Vic3RyKCRzdHJpbmcsIDYsIDIpLHN1YnN0cigkc3RyaW5nLCAwLCA0KSk7CgogICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goIi8oXGR7NH0pLShcZHsyfSktKFxkezJ9KVxzKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkvIiwgJHN0cmluZywgJGR0KSkgewogICAgICAkdGltZSA9IG1rdGltZSgkZHRbNF0sJGR0WzVdLCRkdFs2XSwkZHRbMl0sJGR0WzNdLCRkdFsxXSk7CiAgICB9IGVsc2VpZiAoaXNfbnVtZXJpYygkc3RyaW5nKSkgewogICAgICAvLyBpdCBpcyBhIG51bWVyaWMgc3RyaW5nLCB3ZSBoYW5kbGUgaXQgYXMgdGltZXN0YW1wCiAgICAgICR0aW1lID0gKGludCkkc3RyaW5nOwoKICAgIH0gZWxzZSB7CiAgICAgIC8vIHN0cnRvdGltZSBzaG91bGQgaGFuZGxlIGl0CiAgICAgICR0aW1lID0gc3RydG90aW1lKCRzdHJpbmcpOwogICAgICBpZiAoJHRpbWUgPT0gLTEgfHwgJHRpbWUgPT09IGZhbHNlKSB7CgkvLyBzdHJ0b3RpbWUoKSB3YXMgbm90IGFibGUgdG8gcGFyc2UgJHN0cmluZywgdXNlICJub3ciOgoJLy8gYnV0IHRyeSBvbmUgbW9yZSB0aGluZwoJbGlzdCgkcDEsJHAyKSA9IGV4cGxvZGUoJyAnLCRzdHJpbmcsMik7CgkKCWdsb2JhbCAkZ0NtczsKCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCSR0aW1lID0gJGRiLT5Vbml4VGltZVN0YW1wKCRzdHJpbmcpOwoJaWYoICEkdGltZSApCgkgIHsKCSAgICAkdGltZSA9IHRpbWUoKTsKCSAgfQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHN0cmZ0aW1lKCclbS8lZC8leScsJHRpbWUpOwogIH0KCgogIHByaXZhdGUgZnVuY3Rpb24gX2ZpZWxkc190b19oYXNoKCRmaWVsZHMpCiAgewogICAgJGhhc2ggPSBhcnJheSgpOwogICAgZm9yZWFjaCggJGZpZWxkcyBhcyAkb25lICkKICAgICAgewoJJGhhc2hbJG9uZV0gPSAnJzsKICAgICAgfQogICAgcmV0dXJuICRoYXNoOwogIH0KCgogIHByaXZhdGUgZnVuY3Rpb24gX3B1dF9saW5lKCRmaWVsZHMpCiAgewogICAgaWYoICFpc19hcnJheSgkZmllbGRzKSApCiAgICAgIHsKCXJldHVybiBGQUxTRTsKICAgICAgfQogICAgJGxpbmUgPSBpbXBsb2RlKCR0aGlzLT5fZGVsaW1pdGVyLGFycmF5X3ZhbHVlcygkZmllbGRzKSk7CgogICAgaWYoICR0aGlzLT5fZmggKQogICAgICB7CglmcHV0cygkdGhpcy0+X2ZoLCRsaW5lLiJcclxuIik7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJZWNobyAkbGluZS4iXHJcbiI7CiAgICAgIH0KICB9CgoKICBwcml2YXRlIGZ1bmN0aW9uIF9wdXRfY3VzdF9oZWFkZXIoKQogIHsKICAgICR0bXAgPSBhcnJheSgpOwogICAgJHRtcFtdID0gJyFDVVNUJzsKCiAgICAkdG1wID0gYXJyYXlfbWVyZ2UoJHRtcCwkdGhpcy0+X2N1c3RmaWVsZHMpOwogICAgJHRoaXMtPl9wdXRfbGluZSgkdG1wKTsKICB9CgoKICBwcml2YXRlIGZ1bmN0aW9uIF9wdXRfdHJhbnNfaGVhZGVyKCkKICB7CiAgICAkdG1wID0gYXJyYXkoKTsKICAgICR0bXBbXSA9ICchVFJOUyc7CiAgICAkdG1wID0gYXJyYXlfbWVyZ2UoJHRtcCwkdGhpcy0+X3RyYW5zZmllbGRzKTsKICAgICR0aGlzLT5fcHV0X2xpbmUoJHRtcCk7CgogICAgJHRtcCA9IGFycmF5KCk7CiAgICAkdG1wW10gPSAnIVNQTCc7CiAgICAkdG1wID0gYXJyYXlfbWVyZ2UoJHRtcCwkdGhpcy0+X3NwbGZpZWxkcyk7CiAgICAkdGhpcy0+X3B1dF9saW5lKCR0bXApOwoKICAgICR0bXAgPSBhcnJheSgpOwogICAgJHRtcFtdID0gJyFFTkRUUk5TJzsKICAgICR0aGlzLT5fcHV0X2xpbmUoJHRtcCk7CiAgfQoKCiAgcHJpdmF0ZSBmdW5jdGlvbiBfcHV0X2hlYWRlcnMoKQogIHsKICAgIGlmKCAkdGhpcy0+X2RhdGEtPmhhc19jdXN0b21lcnMoKSApCiAgICAgIHsKCSR0aGlzLT5fcHV0X2N1c3RfaGVhZGVyKCk7CiAgICAgIH0KICAgIGlmKCAkdGhpcy0+X2RhdGEtPmhhc190cmFuc2FjdGlvbnMoKSApCiAgICAgIHsKCSR0aGlzLT5fcHV0X3RyYW5zX2hlYWRlcigpOwogICAgICB9CiAgfQoKCiAgcHJpdmF0ZSBmdW5jdGlvbiBfYWRkcmVzc190b19paWYoaWlmX2FkZHJlc3MgJiRhZGRyZXNzLCRwcmVmaXgpCiAgewogICAgJHRtcCA9IGFycmF5KCk7CiAgICAkdG1wWyRwcmVmaXguJ0FERFIxJ10gPSAkYWRkcmVzcy0+Z2V0X2FkZHIxKCk7CiAgICAkdG1wWyRwcmVmaXguJ0FERFIyJ10gPSAkYWRkcmVzcy0+Z2V0X2FkZHIyKCk7CiAgICAkdDIgPSAkYWRkcmVzcy0+Z2V0X2NpdHkoKTsKICAgICR0MyA9ICRhZGRyZXNzLT5nZXRfc3RhdGUoKTsKICAgIGlmKCAkdDMgKQogICAgICB7CgkkdG1wWyRwcmVmaXguJ0FERFIzJ10gPSAieyR0Mn0geyR0M30iOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0bXBbJHByZWZpeC4nQUREUjMnXSA9ICR0MjsKICAgICAgfQoKICAgICR0bXBbJHByZWZpeC4nQUREUjQnXSA9ICRhZGRyZXNzLT5nZXRfY291bnRyeSgpOwogICAgJHRtcFskcHJlZml4LidBRERSNSddID0gJGFkZHJlc3MtPmdldF9wb3N0YWwoKTsKCiAgICByZXR1cm4gJHRtcDsKICB9CgoKICBwcml2YXRlIGZ1bmN0aW9uIF9wdXRfY3VzdG9tZXIoJiRjdXN0b21lcikKICB7CiAgICAvLyBidWlsZCBhIGhhc2ggb2YgY3VzdG9tZXIgZmllbGRzCiAgICAkaGFzaCA9IGFycmF5KCk7CiAgICAkaGFzaFsnS0VZJ10gPSAnQ1VTVCc7CgogICAgJHRtcCA9ICR0aGlzLT5fZmllbGRzX3RvX2hhc2goJHRoaXMtPl9jdXN0ZmllbGRzKTsKICAgICRoYXNoID0gYXJyYXlfbWVyZ2UoJGhhc2gsJHRtcCk7CgogICAgLy8gbWFwIGN1c3RvbWVyIGludG8gZmllbGRzCiAgICAkaGFzaFsnTkFNRSddID0gJGN1c3RvbWVyLT5nZXRfbmFtZSgpOwogICAgJG9iaiA9ICRjdXN0b21lci0+Z2V0X2JpbGxpbmcoKTsKICAgIGlmKCAkb2JqICkKICAgICAgewoJJHRtcCA9ICR0aGlzLT5fYWRkcmVzc190b19paWYoJG9iaiwnQicpOwoJJGhhc2ggPSBhcnJheV9tZXJnZSgkaGFzaCwkdG1wKTsKCSRoYXNoWydQSE9ORTEnXSA9ICRvYmotPmdldF9waG9uZSgpOwoJJGhhc2hbJ0ZBWE5VTSddID0gJG9iai0+Z2V0X2ZheCgpOwoJJGhhc2hbJ0ZJUlNUTkFNRSddID0gJG9iai0+Z2V0X2ZpcnN0bmFtZSgpOwoJJGhhc2hbJ0xBU1ROQU1FJ10gPSAkb2JqLT5nZXRfbGFzdG5hbWUoKTsKICAgICAgfQogICAgJG9iaiA9ICRjdXN0b21lci0+Z2V0X3NoaXBwaW5nKCk7CiAgICBpZiggJG9iaiApCiAgICAgIHsKCSR0bXAgPSAkdGhpcy0+X2FkZHJlc3NfdG9faWlmKCRvYmosJ1MnKTsKCSRoYXNoID0gYXJyYXlfbWVyZ2UoJGhhc2gsJHRtcCk7CgkkaGFzaFsnUEhPTkUxJ10gPSAkb2JqLT5nZXRfcGhvbmUoKTsKCSRoYXNoWydGQVhOVU0nXSA9ICRvYmotPmdldF9mYXgoKTsKCSRoYXNoWydGSVJTVE5BTUUnXSA9ICRvYmotPmdldF9maXJzdG5hbWUoKTsKCSRoYXNoWydMQVNUTkFNRSddID0gJG9iai0+Z2V0X2xhc3RuYW1lKCk7CiAgICAgIH0KICAgICRoYXNoWydUQVhBQkxFJ10gPSAkY3VzdG9tZXItPmdldF90YXhhYmxlKCk7CgogICAgLy8gcHV0IHRoZSByZWNvcmQKICAgICR0aGlzLT5fcHV0X2xpbmUoJGhhc2gpOwogIH0KCgogIHByaXZhdGUgZnVuY3Rpb24gX3B1dF9pbnZvaWNlX3RyYW5zYWN0aW9uKCYkdHJhbnMpCiAgewogICAgLy8gYnVpbGQgYSB0cmFuc2FjdGlvbiByZWNvcmQuCiAgICAkaGFzaCA9IGFycmF5KCk7CiAgICAkaGFzaFsnS0VZJ10gPSAnVFJOUyc7CgogICAgJHRtcCA9ICR0aGlzLT5fZmllbGRzX3RvX2hhc2goJHRoaXMtPl90cmFuc2ZpZWxkcyk7CiAgICAkaGFzaCA9IGFycmF5X21lcmdlKCRoYXNoLCR0bXApOwoKICAgICRoYXNoWydUUk5TSUQnXSA9ICR0aGlzLT5fZ2V0X3VuaXF1ZV9pZCgpOwogICAgJGhhc2hbJ1RSTlNUWVBFJ10gPSAnSU5WT0lDRSc7CiAgICAkaGFzaFsnREFURSddID0gJHRoaXMtPl9mb3JtYXRfZGF0ZSgkdHJhbnMtPmdldF9kYXRlKCkpOwogICAgJGhhc2hbJ0FDQ05UJ10gPSAkdGhpcy0+Z2V0X2RhdGEoKS0+Z2V0X2FjY291bnQoSUlGX0FDQ1RfQVIpOwogICAgJGhhc2hbJ0FNT1VOVCddID0gaWlmX3V0aWxzOjpmb3JtYXRfbnVtYmVyKCR0cmFucy0+Z2V0X2FtdCgpKTsKICAgICRoYXNoWydOQU1FJ10gPSAkdHJhbnMtPmdldF9iaWxsaW5nX2N1c3RvbWVyKCktPmdldF9uYW1lKCk7CiAgICAkaGFzaFsnRE9DTlVNJ10gPSAkdHJhbnMtPmdldF9kb2NudW0oKTsKLy8gICAgICRvYmogPSAkdHJhbnMtPmdldF9iaWxsaW5nX2N1c3RvbWVyKCktPmdldF9iaWxsaW5nKCk7Ci8vICAgICBpZiggJG9iaiApCi8vICAgICAgIHsKLy8gCSR0bXAgPSAkdGhpcy0+X2FkZHJlc3NfdG9faWlmKCRvYmosJycpOwovLyAJJGhhc2ggPSBhcnJheV9tZXJnZSgkaGFzaCwkdG1wKTsKLy8gICAgICAgfQovLyAgICAgJG9iaiA9ICR0cmFucy0+Z2V0X3NoaXBwaW5nX2N1c3RvbWVyKCktPmdldF9zaGlwcGluZygpOwovLyAgICAgaWYoICRvYmogKQovLyAgICAgICB7Ci8vIAkkdG1wID0gJHRoaXMtPl9hZGRyZXNzX3RvX2lpZigkb2JqLCdTJyk7Ci8vIAkkaGFzaCA9IGFycmF5X21lcmdlKCRoYXNoLCR0bXApOwovLyAgICAgICB9CiAgICAkaGFzaFsnUEFJRCddID0gJ04nOwogICAgJGhhc2hbJ0lOVlRJVExFJ10gPSAkdHJhbnMtPmdldF90aXRsZSgpOwogICAgJGhhc2hbJ05BTUVJU1RBWEFCTEUnXSA9ICdZJzsgICAgCgogICAgLy8gcHV0IHRoZSByZWNvcmQKICAgICR0aGlzLT5fcHV0X2xpbmUoJGhhc2gpOwoKICAgIC8vIFB1dCBhbiBTUEwgcmVjb3JkIGZvciBlYWNoIGl0ZW0KICAgIGZvciggJGkgPSAwOyAkaSA8ICR0cmFucy0+Y291bnRfaXRlbXMoKTsgJGkrKyApCiAgICAgIHsKCSRpdGVtID0mICR0cmFucy0+Z2V0X2l0ZW0oJGkpOwoJJGhhc2ggPSBhcnJheSgpOwoJJGhhc2hbJ0tFWSddID0gJ1NQTCc7CgkkdG1wID0gJHRoaXMtPl9maWVsZHNfdG9faGFzaCgkdGhpcy0+X3NwbGZpZWxkcyk7CgkkaGFzaCA9IGFycmF5X21lcmdlKCRoYXNoLCR0bXApOwoJJGhhc2hbJ1NQTElEJ10gPSAkdGhpcy0+X2dldF91bmlxdWVfaWQoKTsKCSRoYXNoWydUUk5TVFlQRSddID0gJ0lOVk9JQ0UnOwoJJGhhc2hbJ0RBVEUnXSA9ICR0aGlzLT5fZm9ybWF0X2RhdGUoJHRyYW5zLT5nZXRfZGF0ZSgpKTsKCSRoYXNoWydBTU9VTlQnXSA9IGlpZl91dGlsczo6Zm9ybWF0X251bWJlcigkaXRlbS0+Z2V0X2FtdCgpICogLTEpOwoJJGhhc2hbJ0RPQ05VTSddID0gJHRyYW5zLT5nZXRfZG9jbnVtKCk7Cglzd2l0Y2goICRpdGVtLT5nZXRfaXRlbXR5cGUoKSApCgkgIHsKCSAgY2FzZSBJSUZfSVRFTVRZUEVfU0VSVklDRToKCSAgICAkaGFzaFsnQUNDTlQnXSA9ICR0aGlzLT5nZXRfZGF0YSgpLT5nZXRfYWNjb3VudChJSUZfQUNDVF9TRVJWSUNFKTsKCSAgICAkaGFzaFsnVEFYQUJMRSddID0gJ1knOwoJICAgIGJyZWFrOwoJICBjYXNlIElJRl9JVEVNVFlQRV9TSElQUElORzoKCSAgICAkaGFzaFsnQUNDTlQnXSA9ICR0aGlzLT5nZXRfZGF0YSgpLT5nZXRfYWNjb3VudChJSUZfQUNDVF9TSElQUElORyk7CgkgICAgJGhhc2hbJ1RBWEFCTEUnXSA9ICdOJzsKCSAgICBicmVhazsKCSAgY2FzZSBJSUZfSVRFTVRZUEVfVEFYOgoJICAgICRoYXNoWydBQ0NOVCddID0gJHRoaXMtPmdldF9kYXRhKCktPmdldF9hY2NvdW50KElJRl9BQ0NUX1NBTEVTVEFYKTsKCSAgICAkaGFzaFsnVEFYQUJMRSddID0gJ04nOwoJICAgICRoYXNoWydFWFRSQSddID0gJ0FVVE9TVEFYJzsKCSAgICBicmVhazsKCSAgY2FzZSBJSUZfSVRFTVRZUEVfRElTQ09VTlQ6CgkgICAgJGhhc2hbJ0FDQ05UJ10gPSAkdGhpcy0+Z2V0X2RhdGEoKS0+Z2V0X2FjY291bnQoSUlGX0FDQ1RfRElTQ09VTlQpOwoJICAgICRoYXNoWydUQVhBQkxFJ10gPSAnTic7CgkgICAgYnJlYWs7CgkgIGNhc2UgSUlGX0lURU1UWVBFX1BST0RVQ1Q6CgkgIGRlZmF1bHQ6CgkgICAgJGhhc2hbJ0FDQ05UJ10gPSAkdGhpcy0+Z2V0X2RhdGEoKS0+Z2V0X2FjY291bnQoSUlGX0FDQ1RfSU5WRU5UT1JZKTsKCSAgICAkaGFzaFsnVEFYQUJMRSddID0gJ1knOwoJICAgIGJyZWFrOwoJICB9CgkkaGFzaFsnSU5WSVRFTSddID0gJGl0ZW0tPmdldF9pdGVtbmFtZSgpOwoJJGhhc2hbJ1BSSUNFJ10gPSBpaWZfdXRpbHM6OmZvcm1hdF9udW1iZXIoJGl0ZW0tPmdldF9wcmljZSgpICogLTEuMCk7CgkkaGFzaFsnUU5UWSddID0gJGl0ZW0tPmdldF9xdHkoKTsKCgkvLyBwdXQgdGhlIHJlY29yZAoJJHRoaXMtPl9wdXRfbGluZSgkaGFzaCk7CiAgICAgIH0KCiAgICAvLyBwdXQgYW4gZW5kdHJhbnMgcmVjb3JkCiAgICAkdG1wID0gYXJyYXkoKTsKICAgICR0bXBbXSA9ICdFTkRUUk5TJzsKICAgICR0aGlzLT5fcHV0X2xpbmUoJHRtcCk7CiAgfQoKCiAgcHJpdmF0ZSBmdW5jdGlvbiBfcHV0X3BheW1lbnRfdHJhbnNhY3Rpb24oJiR0cmFucykKICB7CiAgICAvLyBidWlsZCBhIHRyYW5zYWN0aW9uIHJlY29yZC4KICAgICRoYXNoID0gYXJyYXkoKTsKICAgICRoYXNoWydLRVknXSA9ICdUUk5TJzsKICAgICR0bXAgPSAkdGhpcy0+X2ZpZWxkc190b19oYXNoKCR0aGlzLT5fdHJhbnNmaWVsZHMpOwogICAgJGhhc2ggPSBhcnJheV9tZXJnZSgkaGFzaCwkdG1wKTsKICAgICRoYXNoWydUUk5TSUQnXSAgPSAkdGhpcy0+X2dldF91bmlxdWVfaWQoKTsKICAgICRoYXNoWydUUk5TVFlQRSddID0gJ1BBWU1FTlQnOwogICAgJGhhc2hbJ0RBVEUnXSAgICAgPSAkdGhpcy0+X2Zvcm1hdF9kYXRlKCR0cmFucy0+Z2V0X2RhdGUoKSk7CiAgICAkaGFzaFsnQUNDTlQnXSAgICA9ICR0aGlzLT5nZXRfZGF0YSgpLT5nZXRfYWNjb3VudChJSUZfQUNDVF9HQVRFV0FZKTsKICAgICRoYXNoWydBTU9VTlQnXSAgID0gaWlmX3V0aWxzOjpmb3JtYXRfbnVtYmVyKCR0cmFucy0+Z2V0X2FtdCgpKTsKICAgICRoYXNoWydOQU1FJ10gICAgID0gJHRyYW5zLT5nZXRfYmlsbGluZ19jdXN0b21lcigpLT5nZXRfbmFtZSgpOwogICAgJGhhc2hbJ0RPQ05VTSddICAgPSAkdHJhbnMtPmdldF9kb2NudW0oKTsKICAgICRoYXNoWydQQUlEJ10gICAgID0gJ1knOwogICAgJGhhc2hbJ0lOVlRJVExFJ10gPSAkdHJhbnMtPmdldF90aXRsZSgpOwovLyAgICAgJHRtcCA9ICR0aGlzLT5fYWRkcmVzc190b19paWYoJHRyYW5zLT5nZXRfYmlsbGluZ19jdXN0b21lcigpLT5nZXRfYmlsbGluZygpLCcnKTsKLy8gICAgICRoYXNoID0gYXJyYXlfbWVyZ2UoJGhhc2gsJHRtcCk7CiAgICAkdGhpcy0+X3B1dF9saW5lKCRoYXNoKTsKCiAgICAkaGFzaCA9IGFycmF5KCk7CiAgICAkaGFzaFsnS0VZJ10gICAgPSAnU1BMJzsKICAgICR0bXAgPSAkdGhpcy0+X2ZpZWxkc190b19oYXNoKCR0aGlzLT5fc3BsZmllbGRzKTsKICAgICRoYXNoID0gYXJyYXlfbWVyZ2UoJGhhc2gsJHRtcCk7CiAgICAkaGFzaFsnVFJOU1RZUEUnXSA9ICdQQVlNRU5UJzsKICAgICRoYXNoWydTUExJRCddICAgID0gJHRoaXMtPl9nZXRfdW5pcXVlX2lkKCk7CiAgICAkaGFzaFsnREFURSddICAgICA9ICR0aGlzLT5fZm9ybWF0X2RhdGUoJHRyYW5zLT5nZXRfZGF0ZSgpKTsKICAgICRoYXNoWydBQ0NOVCddICAgID0gJHRoaXMtPmdldF9kYXRhKCktPmdldF9hY2NvdW50KElJRl9BQ0NUX0FSKTsKICAgICRoYXNoWydBTU9VTlQnXSAgID0gaWlmX3V0aWxzOjpmb3JtYXRfbnVtYmVyKCR0cmFucy0+Z2V0X2FtdCgpICogLTEpOwogICAgJGhhc2hbJ0RPQ05VTSddICAgPSAkdHJhbnMtPmdldF9kb2NudW0oKTsKICAgIC8vIHB1dCB0aGUgcmVjb3JkCiAgICAkdGhpcy0+X3B1dF9saW5lKCRoYXNoKTsKCiAgICAvLyBwdXQgYW4gZW5kdHJhbnMgcmVjb3JkCiAgICAkdG1wID0gYXJyYXkoKTsKICAgICR0bXBbXSA9ICdFTkRUUk5TJzsKICAgICR0aGlzLT5fcHV0X2xpbmUoJHRtcCk7CiAgfQoKCiAgcHJpdmF0ZSBmdW5jdGlvbiBfcHV0X3RyYW5zYWN0aW9uKCYkdHJhbnMpCiAgewogICAgc3dpdGNoKCAkdHJhbnMtPmdldF90eXBlKCkgKQogICAgICB7CiAgICAgIGNhc2UgSUlGX1RSQU5TX0lOVk9JQ0U6CgkkdGhpcy0+X3B1dF9pbnZvaWNlX3RyYW5zYWN0aW9uKCR0cmFucyk7CglicmVhazsKCiAgICAgIGNhc2UgSUlGX1RSQU5TX1BBWU1FTlQ6CgkkdGhpcy0+X3B1dF9wYXltZW50X3RyYW5zYWN0aW9uKCR0cmFucyk7CglicmVhazsKICAgICAgfQogICAgLy8gdG9kbwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgpCiAgewogICAgaWYoICFpc19udWxsKCR0aGlzLT5fZmgpICkKICAgICAgewoJcmV0dXJuIEZBTFNFOwogICAgICB9CiAgICBpZiggaXNfbnVsbCgkdGhpcy0+X2RhdGEpICkKICAgICAgewoJcmV0dXJuIEZBTFNFOwogICAgICB9CgogICAgaWYoICR0aGlzLT5fZmlsZW5hbWUgIT0gJ1NURE9VVCcgKQogICAgICB7CgkkdGhpcy0+X2ZoID0gZm9wZW4oJHRtcCwndycpOwogICAgICB9CiAgICAkdGhpcy0+X3B1dF9oZWFkZXJzKCk7CiAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9kYXRhLT5fY3VzdG9tZXJzKSApCiAgICAgIHsKCWZvcmVhY2goICR0aGlzLT5fZGF0YS0+X2N1c3RvbWVycyBhcyAka2V5ID0+ICYkY3VzdCApCgkgIHsKCSAgICAkdGhpcy0+X3B1dF9jdXN0b21lcigkY3VzdCk7CgkgIH0KICAgICAgfQogICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fZGF0YS0+X3RyYW5zYWN0aW9ucykgKQogICAgICB7Cglmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkdGhpcy0+X2RhdGEtPl90cmFuc2FjdGlvbnMpOyAkaSsrICkKCSAgewoJICAgICR0cmFucyA9JiAkdGhpcy0+X2RhdGEtPl90cmFuc2FjdGlvbnNbJGldOwoJICAgICR0aGlzLT5fcHV0X3RyYW5zYWN0aW9uKCR0cmFucyk7CgkgIH0KICAgICAgfQogICAgaWYoICR0aGlzLT5fZmggKQogICAgICBmY2xvc2UoJHRoaXMtPl9maCk7CiAgfQoKfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKIyBQcmVmZXJlbmNlcwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnQVJfQUNDT1VOVF9OQU1FJywnQWNjb3VudHMgUmVjZWl2YWJsZScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnQVBfQUNDT1VOVF9OQU1FJywnQWNjb3VudHMgUGF5YWJsZScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnR0FURVdBWV9BQ0NPVU5UX05BTUUnLCdQYXltZW50IEdhdGV3YXknKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ0lOVkVOVE9SWV9BQ0NPVU5UX05BTUUnLCdJbnZlbnRvcnknKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ1NISVBQSU5HX0FDQ09VTlRfTkFNRScsJ1NoaXBwaW5nJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdTQUxFU1RBWF9BQ0NPVU5UX05BTUUnLCdTYWxlcyBUYXgnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ1NFUlZJQ0VfQUNDT1VOVF9OQU1FJywnU2VydmljZXMnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ0lOVk9JQ0VfQUNDT1VOVF9OQU1FJywnSW52b2ljZXMnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ0RJU0NPVU5UX0FDQ09VTlRfTkFNRScsJ0Rpc2NvdW50cycpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKIyBSZW1vdmUgYWxsIHByZWZlcmVuY2VzCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/OrdersToIIF.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJGNnZXh0ZW5zaW9ucyA9IGNtc19qb2luX3BhdGgoJGdDbXMtPmNvbmZpZ1sncm9vdF9wYXRoJ10sJ21vZHVsZXMnLAoJCQkgICAgICAnQ0dFeHRlbnNpb25zJywnQ0dFeHRlbnNpb25zLm1vZHVsZS5waHAnKTsKaWYoICFpc19yZWFkYWJsZSggJGNnZXh0ZW5zaW9ucyApICkKewogIGVjaG8gJzxoMT48Zm9udCBjb2xvcj0icmVkIj5FUlJPUjogVGhlIENHRXh0ZW5zaW9ucyBtb2R1bGUgY291bGQgbm90IGJlIGZvdW5kLjwvZm9udD48L2gxPic7CiAgcmV0dXJuOwp9CnJlcXVpcmVfb25jZSgkY2dleHRlbnNpb25zKTsKCgpjbGFzcyBPcmRlcnNUb0lJRiBleHRlbmRzIENHRXh0ZW5zaW9ucwp7CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldE5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldE5hbWUoKQogIHsKICAgIHJldHVybiAnT3JkZXJzVG9JSUYnOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RnJpZW5kbHlOYW1lKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CiAgfQoKCQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldFZlcnNpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS4xJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRIZWxwKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3IoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgewogICAgcmV0dXJuICdjYWxndXkxMDAwJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3JFbWFpbCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0Q2hhbmdlTG9nKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoZGlybmFtZShfX0ZJTEVfXykuJy9jaGFuZ2Vsb2cuaW5jJyk7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBIYXNBZG1pbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSGFzQWRtaW4oKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluU2VjdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICB7CiAgICByZXR1cm4gJ2V4dGVuc2lvbnMnOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluRGVzY3JpcHRpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBWaXNpYmxlVG9BZG1pblVzZXIoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgewogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oT1JERVJTX1BFUk1fTUFOQUdFT1JERVJTKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXREZXBlbmRlbmNpZXMoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgewogICAgcmV0dXJuIGFycmF5KCdDR0V4dGVuc2lvbnMnPT4nMS4xOC4zJywKCQkgJ09yZGVycyc9PicxLjguMycpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1pbmltdW1DTVNWZXJzaW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpCiAgewogICAgcmV0dXJuICIxLjYuNiI7CiAgfQoJCgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsUHJlTWVzc2FnZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7CiAgfQkKCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEFsbG93QXV0b0luc3RhbGwoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEFsbG93QXV0b0luc3RhbGwoKQogIHsKICAgIHJldHVybiBGQUxTRTsKICB9CQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgQWxsb3dBdXRvVXBncmFkZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gQWxsb3dBdXRvVXBncmFkZSgpCiAgewogICAgcmV0dXJuIEZBTFNFOwogIH0JCgoKfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/skeleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE9yZGVyc1RvSUlGIChjKSAyMDA4IGJ5IFJvYmVydCBDYW1wYmVsbCAKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBleHBvcnRpbmcgaW5mb3JtYXRpb24gZnJvbQojICB0aGUgb3JkZXJzIG1vZHVsZSB0byBJSUYgc3VpdGFibGUgZm9yIGltcG9ydGluZyBpbmZvcm1hdGlvbiBpbnRvIAojICBxdWlja2Jvb2tzLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_exporttab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZXdhcm5pbmciPgogICA8cD48c3Ryb25nPnskbW9kLT5MYW5nKCd3YXJuaW5nJyl9PC9zdHJvbmc+PC9wPgogICA8cD57JG1vZC0+TGFuZygnd2FybmluZ19paWZfZXhwb3J0Jyl9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VtY29udGFpbmVyIj4KICA8cCBjbGFzcz0icGFnZW1lc3NhZ2UiPnskbW9kLT5MYW5nKCdpbmZvX2V4cG9ydCcpfTwvcD4KPC9kaXY+Cgp7JGZvcm1zdGFydH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGF0ZV9vZl9sYXN0X2V4cG9ydCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7aWYgJGRhdGVfb2ZfbGFzdF9leHBvcnQgPT0gJyd9CiAgICAgIHskbW9kLT5MYW5nKCd1bmtub3duJyl9CiAgICB7ZWxzZX0KICAgICAgeyRkYXRlX29mX2xhc3RfZXhwb3J0fGNtc19kYXRlX2Zvcm1hdH0KICAgIHsvaWZ9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2l0ZW1zX3RvX2V4cG9ydCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1leHBvcnRpdGVtc3svY2FwdHVyZX0KICAgIHtodG1sX2NoZWNrYm94ZXMgbmFtZT0kdG1wIG9wdGlvbnM9JGV4cG9ydGl0ZW1zIHNlbGVjdGVkPSRzZWxlY3RlZCBzZXBhcmF0b3I9Jzxici8+J30KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZXhwb3J0X2Zyb21fZGF0ZScpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InskYWN0aW9uaWR9dXNlbGFzdGRhdGUiIHZhbHVlPSIwIi8+CiAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9dXNlbGFzdGRhdGUiIHZhbHVlPSIxIntpZiAkb3B0X2RhdGVfb2ZfbGFzdF9leHBvcnR9IGNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPgogICAgJm5ic3A7eyRtb2QtPkxhbmcoJ3Byb21wdF91c2VfbGFzdF9kYXRlJyl9PGJyLz4KICAgIHtjYXB0dXJlIGFzc2lnbj0ndG1wJ317JGFjdGlvbmlkfWV4cG9ydGRhdGVfey9jYXB0dXJlfQogICAge2h0bWxfc2VsZWN0X2RhdGUgcHJlZml4PSR0bXAgc3RhcnRfeWVhcj0xOTcwfQogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnbGJsX2V4cG9ydCcpfSIvPgogIDwvcD4KPC9kaXY+CnskZm9ybWVuZH0=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogYWRtaW4gc2V0dGluZ3MgdGFiIHRlbXBsYXRlICp9CnskZm9ybXN0YXJ0fQoKPGZpZWxkc2V0Pgo8bGVnZW5kPnskbW9kLT5MYW5nKCdsYmxfZ2VuZXJhbF9zZXR0aW5ncycpfTombmJzcDs8L2xlZ2VuZD4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGVsaW1pdGVyJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZGVsaW1pdGVyIiB2YWx1ZT0ieyRkZWxpbWl0ZXJ9IiBzaXplPSI1IiBtYXhsZW5ndGg9IjUiLz4KICAgPGJyLz4KICAgeyRtb2QtPkxhbmcoJ2luZm9fZGVsaW1pdGVyJyl9CiAgPC9wPgo8L2Rpdj4KPC9maWVsZHNldD4KPGJyLz4KCjxmaWVsZHNldD4KPGxlZ2VuZD57JG1vZC0+TGFuZygnbGJsX2FjY291bnRfc2V0dGluZ3MnKX06Jm5ic3A7PC9sZWdlbmQ+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2FyX2FjY291bnQnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1hcl9hY2NvdW50IiB2YWx1ZT0ieyRhcl9hY2NvdW50fSIgc2l6ZT0iODAiIG1heGxlbmd0aD0iODAiLz4KICAgPGJyLz4KICAgeyRtb2QtPkxhbmcoJ2luZm9fYXJfYWNjb3VudCcpfQogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9hcF9hY2NvdW50Jyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9YXBfYWNjb3VudCIgdmFsdWU9InskYXBfYWNjb3VudH0iIHNpemU9IjgwIiBtYXhsZW5ndGg9IjgwIi8+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2dhdGV3YXlfYWNjb3VudCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWdhdGV3YXlfYWNjb3VudCIgdmFsdWU9InskZ2F0ZXdheV9hY2NvdW50fSIgc2l6ZT0iODAiIG1heGxlbmd0aD0iODAiLz4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfaW52ZW50b3J5X2FjY291bnQnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnZlbnRvcnlfYWNjb3VudCIgdmFsdWU9InskaW52ZW50b3J5X2FjY291bnR9IiBzaXplPSI4MCIgbWF4bGVuZ3RoPSI4MCIvPgogICA8YnIvPgogICB7JG1vZC0+TGFuZygnaW5mb19pbnZlbnRvcnlfYWNjb3VudCcpfQogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9zaGlwcGluZ19hY2NvdW50Jyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9c2hpcHBpbmdfYWNjb3VudCIgdmFsdWU9Inskc2hpcHBpbmdfYWNjb3VudH0iIHNpemU9IjgwIiBtYXhsZW5ndGg9IjgwIi8+CiAgIDxici8+CiAgIHskbW9kLT5MYW5nKCdpbmZvX3NoaXBwaW5nX2FjY291bnQnKX0KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfc2FsZXN0YXhfYWNjb3VudCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXNhbGVzdGF4X2FjY291bnQiIHZhbHVlPSJ7JHNhbGVzdGF4X2FjY291bnR9IiBzaXplPSI4MCIgbWF4bGVuZ3RoPSI4MCIvPgogICA8YnIvPgogICB7JG1vZC0+TGFuZygnaW5mb19zYWxlc3RheF9hY2NvdW50Jyl9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3NlcnZpY2VfYWNjb3VudCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXNlcnZpY2VfYWNjb3VudCIgdmFsdWU9Inskc2VydmljZV9hY2NvdW50fSIgc2l6ZT0iODAiIG1heGxlbmd0aD0iODAiLz4KICAgPGJyLz4KICAgeyRtb2QtPkxhbmcoJ2luZm9fc2VydmljZV9hY2NvdW50Jyl9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2ludm9pY2VfYWNjb3VudCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWludm9pY2VfYWNjb3VudCIgdmFsdWU9InskaW52b2ljZV9hY2NvdW50fSIgc2l6ZT0iODAiIG1heGxlbmd0aD0iODAiLz4KICAgPGJyLz4KICAgeyRtb2QtPkxhbmcoJ2luZm9faW52b2ljZV9hY2NvdW50Jyl9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2Rpc2NvdW50X2FjY291bnQnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1kaXNjb3VudF9hY2NvdW50IiB2YWx1ZT0ieyRkaXNjb3VudF9hY2NvdW50fSIgc2l6ZT0iODAiIG1heGxlbmd0aD0iODAiLz4KICAgPGJyLz4KICAgeyRtb2QtPkxhbmcoJ2luZm9fZGlzY291bnRfYWNjb3VudCcpfQogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9leHBvcnRkaXNjb3VudHMnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICB7JGlucHV0X2V4cG9ydGRpc2NvdW50c30KICAgPGJyLz4KICAgeyRtb2QtPkxhbmcoJ2luZm9fZXhwb3J0ZGlzY291bnRzJyl9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogIDwvcD4KPC9kaXY+Cgo8L2ZpZWxkc2V0Pgp7JGZvcm1lbmR9]]></data>
	</file>
</module>
