<?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>GoogleMaps</name>
	<version>0.1.7</version>
  <mincmsversion>1.0-beta6</mincmsversion>
	<help>CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBpbnRlbnRlZCBmb3IgaW50ZWdyYXRpbmcgR29vZ2xlTWFwcyBhcyBhIHBhcnQgb2YgeW91ciBzaXRlLjwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPkZpcnN0IHlvdSBtdXN0IGluc2VydCB5b3VyIEdvb2dsZU1hcHMgYXBpIGtleSAocGxlYXNlIHJlZ2lzdGVyIGluIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWwpLjwvcD4KPHA+VGhlbiB5b3UgY2FuIGNhbGwgdGhpcyBtb2R1bGUgaW4geW91ciB0ZW1wbGF0ZSB3aXRoIHtjbXNfbW9kdWxlIG1vZHVsZT0nR29vZ2xlTWFwcycgbWFwPSd0ZXN0J30gPC9wPgo8cD5Vc2VyIGRlZmluZWQgbWFya2VycyBjYW4gYmUgbG9hZGVkIGludG8gdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnMuIFRoZSBjb25uZWN0ZWQgc2hhZG93IGltYWdlcyBzaG91bGQgYmUgbG9hZGVkIGluIAoJdXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNoYWRvd3MuPGJyPgoJTmFtaW5nIGNvbnZlbnRpb24gaXMgW21hcmtlcmljb25dcy5wbmcgKGllLiBtYXJrZXIgaXMgYmlnYmx1ZS5wbmcsIG1hcmtlcnNoYWRvdyBpcyBiaWdibHVlcy5wbmcpLjxicj4KCUlmIGEgc2hhZG93IGlzIG5vdCBmb3VuZCwgdGhlIGRlZmF1bHQgdmVyc2lvbiB3aWxsIGJlIHVzZWQgKHdoaWNoIG1heSBub3QgYmUgdGhlIGNvcnJlY3Qgc2hhZG93IG9mIHRoZSBtYXJrZXIgYXQgYWxsKS48YnI+CglJbiB0aGUgc2V0dGluZ3MgdXNlIHRoZSBwcmVmZXJlbmNlICdVc2UgbWFya2VyIHNoYWRvd3MnIHRvIHNob3cvaGlkZSB0aGVtLiBTaG93aW5nIHRoZSBzaGFkb3dzIHNsb3dzIGRvd24gdGhlIGJ1aWxkdXAgb2YgdGhlCgltYXAsIGR1ZSB0byBtb3JlIGludGVybmFsIGNoZWNrcy48YnI+CglPbmx5IGltYWdlcyB3aXRoIGV4dGVuc2lvbiAucG5nIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaXMgZXZlbiBtb3JlIGZsZXhpYmxlIHRocm91Z2ggdGhlIHVzYWdlIG9mIHRoZSBwYXJhbWV0ZXJzIChzZWUgdGhlIHBhcmFtZXRlciBsaXN0KS4gRWFjaCBwYXJhbWV0ZXIgYXMgYXZhaWxhYmxlIGR1cmluZyB0aGUgcHJlcGFyYXRpb24gb2YgYSBtYXAsIGNhbiBiZSAKCW92ZXJyaWRlbiBmb3IgdGhlIGZyb250IGVuZC4gU28geW91IGFyZSBhYmxlIHRvIHByZXBhcmUgb25lIG1hcCBhbmQgZGlzcGxheSBpdCBpbiB2YXJpb3VzIHdheXMgYnkgdXNpbmcgb25lIG9yIG1vcmUgcGFyYW1ldGVycy48YnI+Cgk8aT5Ob3RlOjwvaT4gRHVlIHRvIHRoZSBnZW5lcmF0aW9uIGZvcm0gdXNlZCBmb3IgdGhlIG1hcCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgbWFwcyBvbiBvbmUgcGFnZSE8L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PGJyPgo8dWw+Cgk8bGk+VGhlIENNUyBNYWRlIFNpbXBsZSBmb3J1bTs8L2xpPgo8L3VsPgo8L3A+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+U2VjdXJpdHk8L2gzPgo8cD5Vc2VyIG11c3QgaGF2ZSAiVXNlIEdvb2dsZU1hcHMiIHBlcm1pc3Npb25zIHNldCB0byBlZGl0IG1hcHM8L3A+CjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjxsaT5ib3VuZHNfZnVkZ2U9IiIgLSBUaGlzIHdpbGwgYWRqdXN0IGhvdyBtdWNoIG1hcCBib3VuZGFyeSBlbmNvbXBhc3NlcyB0aGUgbWFwIG1hcmtlcnMuPC9saT48bGk+Y2VudGVybGF0PSIiIC0gVGhlIGxhdGl0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLjwvbGk+PGxpPmNlbnRlcmxvbj0iIiAtIFRoZSBsb25naXR1ZGUgdG8gd2hpY2ggdGhlIG1hcCBzaG91bGQgYmUgY2VudGVyZWQuPC9saT48bGk+Y29udHJvbHM9IiIgLSBJZiBzZXQgdG8gMCAoemVybyksIHRoZXJlIHdpbGwgYmUgbm8gY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLjwvbGk+PGxpPmNvbnRyb2xzX3NpemU9IiIgLSBUaGlzIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIGNvbnRyb2xzIGFyZQplbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQgc2xpZGVyLiBMYXJnZSBpcyBkZWZhdWx0LjwvbGk+PGxpPmRpcmVjdGlvbnM9IiIgLSBUaGlzIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW4gdGhlIGJvdHRvbSBvZiB0aGUgcG9wLXVwIGluZm8gd2luZG93LiBEZWZhdWx0IGlzIGRpc2FibGVkLgonMScgV2lsbCBlbmFibGUgdGhlIGRpcmVjdGlvbnMuPC9saT48bGk+aGVpZ2h0PSIiIC0gU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS48L2xpPjxsaT5pbmZvX3RyaWdnZXI9IiIgLSBUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcgb3ZlciBhIG1hcmtlci48L2xpPjxsaT5pbmZvX3dpbmRvdz0iIiAtIEVuYWJsZXMgaW5mbyB3aW5kb3dzIG9uIG1hcCBtYXJrZXJzLjwvbGk+PGxpPm1hcD0idGVzdCIgLSBTZXQgd2hpY2ggbWFwIHRvIHNob3c8L2xpPjxsaT5sYW5ndWFnZT0iIiAtIFNlZTogPGEgaHJlZj0iaHR0cDovL3NwcmVhZHNoZWV0cy5nb29nbGUuY29tL3B1Yj9rZXk9cDlwZHdzYWkyaERNc0xrWHNvTTA1S1EmZ2lkPTEiIHRhcmdldD0iX2JsYW5rIj4KdGhlIGxpc3Qgb2YgbGFuZ3VhZ2VzPC9hPjwvbGk+PGxpPnNjYWxlX2NvbnRyb2w9IiIgLSBVc2UgJzEnIG9yIHRydWUgdG8gc2hvdyBzY2FsZS48L2xpPjxsaT5zaWRlYmFyPSIiIC0gVXNlICcxJyB0byBlbmFibGUgdGhlIG1hcCBzaWRlYmFyLjwvbGk+PGxpPnR5cGU9IiIgLSBUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFwIHR5cGUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIHR5cGUgY29udHJvbHMgYXJlIGVuYWJsZWQuIAoJbWFwID0gZGVmYXVsdCBtYXAuIHNhdGVsbGl0ZSA9IHNhdGVsbGl0ZSB2aWV3LiBoeWJyaWQgPSBoeWJyaWQgdmlldy4gdGVycmFpbiA9IHBoeXNpY2FsIHZpZXcgd2l0aCByb2FkczwvbGk+PGxpPnR5cGVfY29udHJvbHM9IiIgLSBVc2UgJzEnIGVuYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkL3RlcnJhaW4pPC9saT48bGk+d2lkdGg9IiIgLSBTZXRzIHRoZSB3aWR0aCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuPC9saT48bGk+em9vbT0iIiAtIFRoaXMgc2V0cyB0aGUgbWFwIHpvb20gbGV2ZWwuPC9saT48bGk+em9vbV9lbmNvbXBhc3M9IiIgLSBVc2UgJzEnIHRvIGVuYWJsZSB0aGUgem9vbSBlbmNvbXBhc3Mgc28gbWFwIHpvb20gaXMgYXMgc21hbGwgYXMgcG9zc2libGUKICAgICAgICBhbmQgaW5jbHVkZSBhbGwgbWFwIG1hcmtlcnMuPC9saT48L3VsPg==</help>
	<about>PGJyIC8+QXV0aG9yOiB0c3cgJmx0O3RhdHUud2lrbWFuIFthdF0gZ21haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuMS43PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgoJPGxpPlZlcnNpb24gMC4xLjcgTm92ZW1iZXIgMjAwOSBCeSBEdWtldG93bjxicj4KCQk8dWw+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi4wIHRvIDIuNSAoRmVhdHVyZSBSZXF1ZXN0IDQyNDkpOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBhbGxvdyB6b29taW5nIHVzaW5nIHRoZSBzY3JvbGwgd2hlZWw7PC9saT4KCQkJPGxpPlBlciBtYXAgb3B0aW9uIHRvIHNob3cvaGlkZSB0aGUgc2NhbGUuIEFsc28gYXZhaWxhYmxlIGFzIHBhcmFtZXRlcjs8L2xpPgoJCQk8bGk+Tm8gbG9uZ2VyIG5lZWQgdG8gcmVsb2dpbiBhZnRlciBhZGRyZXNzIGxvb2t1cCAoQnVnIzMxOTMpLiBGb3VuZCBsYXQvbG9uIHJlbWFpbnMgc2hvd24gZm9yIGVhc3kgY29weWluZzs8L2xpPgoJCQk8bGk+TGFuZ3VhZ2UgZm9yIHRoZSBjb250cm9sZXMgaXMgbm93IGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPkNoZWNrZWQvc29sdmVkIHZhbGlkYXRpb24gWEhUTUwgdXNpbmcgVzNDIChCdWcjMjAxNCk7PC9saT4KCQkJPGxpPk5vdyBtdWx0aXBsZSBtYXBzIG9uIG9uZSBwYWdlIHBvc3NpYmxlIChCdWcjIDQyNDgpOzwvbGk+CgkJCTxsaT5CZXR0ZXIgdXNhZ2Ugb2YgZGlyZWN0b3J5IHNlcGFyYXRvciB0byBhdm9pZCBub3QgZm91bmQgZmlsZXMgKEJ1ZyMzMzQ2KTs8L2xpPgoJCQk8bGk+TmV3IG1hcCB0eXBlICdUZXJyYWluJyBpbXBsZW1lbnRlZC48L2xpPgoJCQk8bGk+RHVyaW5nIHVwZGF0ZSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIGlzIHJlbW92ZWQgKGxpYi9Hb29nbGVNYXBBUEktMi4wKS4gWW91IG1heSBmaW5kIGl0IGlzIHN0aWxsIHRoZXJlIGFmdGVyIHRoaXMgdXBncmFkZS4KCQkJVGhhdCBpcyB0aGVuIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncy4gWW91IG1heSBkZWxldGUgZGlyZWN0b3J5IEdvb2dsZU1hcEFQSS0yLjAgd2l0aG91dCBhbnkgcHJvYmxlbS48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjYgMTUgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+SW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZVwncyBBUEkuIFBhcmFtZXRlcnMgYXJlIGRpc2N1c3NlZCBpbiBoZWxwIHRleHQuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS41IDEwIEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlVzZXIgZGVmaW5lZCBtYXJrZXJzIG5vdyB3b3JrLiBTdXBwbGllZCBtYXJrZXJzIGJ1aWxkIHZpYTogaHR0cDovL3d3dy5nbWFwbGl2ZS5jb20vbWFya2VyX21ha2VyLnBocCBvZiBEaXhvbiBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBDYW5hZGE8YnIgLz48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLiAyOCBBdWd1c3QgMjAwNi48YnI+CgkJPHVsPgoJCQk8bGk+SW5pdGlhbCBSZWxlYXNlLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+CjxoMz5UaGFua3MgZ28gdG88L2gzPgo8cD5Sb2JlcnQgQnJvd24gZm9yIFJDUlVEIENsYXNzIHVzZWQgaW4gYWRtaW4gZXh0ZW5zaXZlbHk8L3A+CjxwPmFuZDwvcD4KPHA+TW9udGUgT2hydCBmb3IgR29vZ2xlTWFwQVBJPC9wPjxiciAvPg==</about>
	<description>Prepare multiple Google maps, multiple coordinates with custom markers.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlNb2R1bGVPdXRwdXQoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKICAgc29tZXRoaW5nIHdoZXJlIGEgcGFnZSBvciB0ZW1wbGF0ZSBoYXMgYSB0YWcgY2FsbGluZwogICB0aGlzIG1vZHVsZS4KICAgCiAgIE5vdGUgdGhhdCBpdCB1c2VzIGEgdGVtcGxhdGUsIGFuZCBpcyB0aHVzIHZlcnkgcG93ZXJmdWwsCiAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKI0F2b2lkIGZsb2F0IHByb2JsZW0gaW4gbG9jYWxlCiRjdXJyZW50TG9jYWxlID0gc2V0bG9jYWxlKExDX0FMTCwgMCk7CnNldGxvY2FsZShMQ19BTEwsICdlbl9VUycpOwoKCmlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhcGlrZXknKSA9PSAnJykKewogICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkdGhpcy0+TGFuZygnbm9rZXknKSk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIHJldHVybjsKfQoKJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi4gY21zX2RiX3ByZWZpeCgpIC4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyBXSEVSRSBuYW1lIExJS0UgJyIuICRwYXJhbXNbJ21hcCddLiAiJyBMSU1JVCAxIjsKJG1hcF9kYXRhID0gYXJyYXkoKTsKJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwppZigkZGJyZXN1bHQpIHsKICAkbWFwX2RhdGEgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7Cn0KCmlmKCFpc3NldCgkbWFwX2RhdGFbJ21hcF9pZCddKSkgewogICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkdGhpcy0+TGFuZygnbm9tYXAnKSk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIHJldHVybjsKfQoKLy8gTm93IHRoYXQgYSBjaGVjayBpcyBkb25lIGlmIGFsbCBzZWVtcyBvaywgaGFuZGxlIHRoZSBvdmVycmlkZXMgdGhhdCBhcmUgcGFzc2VkCmlmIChpc3NldCgkcGFyYW1zWyd3aWR0aCddKSkgJG1hcF9kYXRhWyd3aWR0aCddID0gJHBhcmFtc1snd2lkdGgnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2hlaWdodCddKSkgJG1hcF9kYXRhWydoZWlnaHQnXSA9ICRwYXJhbXNbJ2hlaWdodCddOwppZiAoaXNzZXQoJHBhcmFtc1snY29udHJvbHMnXSkpIHsJLy8gVHJpZWQgdG8gdXNlIGludHZhbCgkcGFyYW1zWydjb250cm9scyddKSwgYnV0IHNtYXJ0eSBzdGlsbCBmZWxsIG92ZXIgdGhhdAoJJHBhcmFtc1snY29udHJvbHMnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ2NvbnRyb2xzJ10gPSAxIDogJG1hcF9kYXRhWydjb250cm9scyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1sndHlwZV9jb250cm9scyddKSkgewoJJHBhcmFtc1sndHlwZV9jb250cm9scyddID09ICcxJyA/ICRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID0gMSA6ICRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbSddKSkgJG1hcF9kYXRhWyd6b29tJ10gPSAkcGFyYW1zWyd6b29tJ107CmlmIChpc3NldCgkcGFyYW1zWydjb250cm9sc19zaXplJ10pKSAkbWFwX2RhdGFbJ2NvbnRyb2xzX3NpemUnXSA9ICRwYXJhbXNbJ2NvbnRyb2xzX3NpemUnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ3R5cGUnXSkpICRtYXBfZGF0YVsndHlwZSddID0gJHBhcmFtc1sndHlwZSddOwppZiAoaXNzZXQoJHBhcmFtc1snc2lkZWJhciddKSkgewoJJHBhcmFtc1snc2lkZWJhciddID09ICcxJyA/ICRtYXBfZGF0YVsnc2lkZWJhciddID0gMSA6ICRtYXBfZGF0YVsnc2lkZWJhciddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snZGlyZWN0aW9ucyddKSkgewoJJHBhcmFtc1snZGlyZWN0aW9ucyddID09ICcxJyA/ICRtYXBfZGF0YVsnZGlyZWN0aW9ucyddID0gMSA6ICRtYXBfZGF0YVsnZGlyZWN0aW9ucyddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbV9zY3JvbGx3aGVlbCddKSkgewoJJHBhcmFtc1snem9vbV9zY3JvbGx3aGVlbCddID09ICcxJyA/ICRtYXBfZGF0YVsnem9vbV9zY3JvbGx3aGVlbCddID0gMSA6ICRtYXBfZGF0YVsnem9vbV9zY3JvbGx3aGVlbCddID0gMDsKfQppZiAoaXNzZXQoJHBhcmFtc1snem9vbV9lbmNvbXBhc3MnXSkpIHsKCSRwYXJhbXNbJ3pvb21fZW5jb21wYXNzJ10gPT0gJzEnID8gJG1hcF9kYXRhWyd6b29tX2VuY29tcGFzcyddID0gMSA6ICRtYXBfZGF0YVsnem9vbV9lbmNvbXBhc3MnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXSkpIHsKCSRwYXJhbXNbJ3NjYWxlX2NvbnRyb2wnXSA9PSAnMScgPyAkbWFwX2RhdGFbJ3NjYWxlX2NvbnRyb2wnXSA9IDEgOiAkbWFwX2RhdGFbJ3NjYWxlX2NvbnRyb2wnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ2JvdW5kc19mdWRnZSddKSkgJG1hcF9kYXRhWydib3VuZHNfZnVkZ2UnXSA9ICRwYXJhbXNbJ2JvdW5kc19mdWRnZSddOwppZiAoaXNzZXQoJHBhcmFtc1snaW5mb193aW5kb3cnXSkpIHsKCSRwYXJhbXNbJ2luZm9fd2luZG93J10gPT0gJzEnID8gJG1hcF9kYXRhWydpbmZvX3dpbmRvdyddID0gMSA6ICRtYXBfZGF0YVsnaW5mb193aW5kb3cnXSA9IDA7Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcmxvbiddKSkgJG1hcF9kYXRhWydjZW50ZXJfbG9uJ10gPSAkcGFyYW1zWydjZW50ZXJsb24nXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2NlbnRlcmxhdCddKSkgJG1hcF9kYXRhWydjZW50ZXJfbGF0J10gPSAkcGFyYW1zWydjZW50ZXJsYXQnXTsKaWYgKGlzc2V0KCRwYXJhbXNbJ2luZm9fdHJpZ2dlciddKSkgJG1hcF9kYXRhWydpbmZvX3RyaWdnZXInXSA9ICRwYXJhbXNbJ2luZm9fdHJpZ2dlciddOwppZiAoaXNzZXQoJHBhcmFtc1snbGFuZ3VhZ2UnXSkpICRtYXBfZGF0YVsnbGFuZ3VhZ2UnXSA9ICRwYXJhbXNbJ2xhbmd1YWdlJ107CgkKcmVxdWlyZV9vbmNlKCdsaWIvR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi4nL0dvb2dsZU1hcEFQSS5jbGFzcy5waHAnKTsKLy8kbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkbWFwX2RhdGFbJ21hcF9pZCddLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwokbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgkdGhpcy0+R2V0TmFtZSgpLiRtYXBfZGF0YVsnbWFwX2lkJ10sICR0aGlzLT5HZXROYW1lKCkpOwoKLy8gc2V0IHZhbHVlcyBmb3IgZGlzcGxheWluZwokbWFwLT5zZXRBUElLZXkoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FwaWtleScsMSkpOwokbWFwLT5zZXRMb29rdXBTZXJ2aWNlKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbG9va3Vwc2VydmljZScsICdHT09HTEUnKSApOwoKJG1hcC0+c2V0V2lkdGgoJG1hcF9kYXRhWyd3aWR0aCddKTsKJG1hcC0+c2V0SGVpZ2h0KCRtYXBfZGF0YVsnaGVpZ2h0J10pOwoKaWYgKCRtYXBfZGF0YVsnY29udHJvbHMnXSA9PSAwKSB7CiAgJG1hcC0+ZGlzYWJsZU1hcENvbnRyb2xzKCk7Cn0KaWYgKCRtYXBfZGF0YVsndHlwZV9jb250cm9scyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlVHlwZUNvbnRyb2xzKCRtYXBfZGF0YVsndHlwZV9jb250cm9scyddKTsKfQoKJG1hcC0+c2V0Wm9vbUxldmVsKCRtYXBfZGF0YVsnem9vbSddKTsKJG1hcC0+c2V0Q29udHJvbFNpemUoJG1hcF9kYXRhWydjb250cm9sc19zaXplJ10pOwoKJG1hcC0+c2V0TWFwVHlwZSgkbWFwX2RhdGFbJ3R5cGUnXSk7CgokbWFwLT5zZXRMYW5ndWFnZSgkbWFwX2RhdGFbJ2xhbmd1YWdlJ10pOwoKaWYgKCRtYXBfZGF0YVsnc2lkZWJhciddID09IDApIHsKICAkbWFwLT5kaXNhYmxlU2lkZWJhcigpOwp9CgppZiAoJG1hcF9kYXRhWydkaXJlY3Rpb25zJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVEaXJlY3Rpb25zKCk7Cn0KCmlmKCRtYXBfZGF0YVsnem9vbXNjcm9sbHdoZWVsJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVab29tU2Nyb2xsV2hlZWwoKTsKfQplbHNlCnsKICAkbWFwLT5lbmFibGVab29tU2Nyb2xsV2hlZWwoKTsKfQoKaWYoJG1hcF9kYXRhWyd6b29tX2VuY29tcGFzcyddID09IDApIHsKICAkbWFwLT5kaXNhYmxlWm9vbUVuY29tcGFzcygpOwp9CgppZiAoJG1hcF9kYXRhWydzY2FsZV9jb250cm9sJ10gPT0gMCkgewogICRtYXAtPmRpc2FibGVTY2FsZUNvbnRyb2woKTsKfQoKJG1hcC0+c2V0Qm91bmRzRnVkZ2UoJG1hcF9kYXRhWydib3VuZHNfZnVkZ2UnXSk7CgppZigkbWFwX2RhdGFbJ2luZm9fd2luZG93J10gPT0gMCkgewogICRtYXAtPmRpc2FibGVJbmZvV2luZG93KCk7Cn0KCiRtYXAtPnNldEluZm9XaW5kb3dUcmlnZ2VyKCRtYXBfZGF0YVsnaW5mb190cmlnZ2VyJ10pOwoKLy8gZ2V0IG1hcmtlcnMgZm9yIHRoaXMgbWFwCiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuIGNtc19kYl9wcmVmaXgoKSAuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMgV0hFUkUgbWFwID0gJyIuICRtYXBfZGF0YVsnbWFwX2lkJ10gLiInIjsKJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJGVycm9yID0gJyc7CndoaWxlICgkZGJyZXN1bHQgJiYgJG1hcF9tYXJrZXIgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKICAKICAkbGF0ID0gJyc7CiAgJGxvbiA9ICcnOwogIAogIGlmKCRtYXBfbWFya2VyWydsYXQnXSA9PSAnJyAmJiAkbWFwX21hcmtlclsnbGF0J10gPT0gJycpIHsKICAgIC8vZmluZCBhZGRyZXNzCiAgICAkZ2VvY29kZSA9ICcnOwogICAgaWYoJG1hcF9tYXJrZXJbJ2FkZHJlc3MnXSAhPSAnJykgewogICAgICAkZ2VvY29kZSA9ICRtYXAtPmdldEdlb2NvZGUoJG1hcF9tYXJrZXJbJ2FkZHJlc3MnXSk7CiAgICB9CiAgICAkbGF0ID0gJGdlb2NvZGVbJ2xhdCddOwogICAgJGxvbiA9ICRnZW9jb2RlWydsb24nXTsKICB9IGVsc2UgewogICAgLy8gdXNlIHByb3ZpZGVkIGxhdCBsb24KICAgICRsYXQgPSAkbWFwX21hcmtlclsnbGF0J107CiAgICAkbG9uID0gJG1hcF9tYXJrZXJbJ2xvbiddOwogIH0KICAKICBpZigkbGF0ICE9ICcnICYmICRsb24gIT0gJycpIHsKICAgICRtYXAtPmFkZE1hcmtlckJ5Q29vcmRzKAoJCQkgICAgc3RyX3JlcGxhY2UoJywnLCAnLicsICRsb24pLCAKCQkJICAgIHN0cl9yZXBsYWNlKCcsJywgJy4nLCAkbGF0KSwgCgkJCSAgICAkbWFwX21hcmtlclsnbmFtZSddLCAKCQkJICAgICRtYXBfbWFya2VyWydpbmZvJ10KCQkJICAgICk7CgkvLyBBZGQgdGhlIGNvcnJlY3QgaWNvbgoJJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKCSRtYXJrZXJkaXIgPSAkdGhpcy0+Y29uZmlnWydyb290X3VybCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21vZHVsZXMnLgoJCURJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKS4KCQlESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1I7CglpZiAoJG1hcF9tYXJrZXJbJ2ljb24nXSAhPSAnJykgewogCQkvLyBQcmVwYXJlIHRoZSB1cmwgdG8gdGhlIG1hcmtlcgogIAkJJGljb250b3VzZSA9ICRtYXJrZXJkaXIuJ21hcmtlcnMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG1hcF9tYXJrZXJbJ2ljb24nXTsKCX0gZWxzZSB7CiAgCQkkaWNvbnRvdXNlID0gJG1hcmtlcmRpci4nbWFya2VycycuRElSRUNUT1JZX1NFUEFSQVRPUi4nZGVmYXVsdC5wbmcnOwoJfQoJLy8gTm93IGNoZWNrIGlmIGEgc2hhZG93IGlzIHRvIGJlIGluY2x1ZGVkCglpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZW1hcmtlcnNoYWRvd3MnLCAwKSA9PSAwKSB7CgkJJG1hcC0+YWRkTWFya2VySWNvbigkaWNvbnRvdXNlKTsKCX0gZWxzZSB7CgkJLy8gQnVpbGQgdGhlIG5hbWUgb2YgdGhlIHNoYWRvdyBpY29uLiBTcGxpdCBuYW1lIGluIGZpcnN0IHBhcnQgYW5kIGV4dGVuc2lvbgoJCSRmaWxlbmFtZXNwbGl0ID0gYXJyYXkoKTsKCQkkZmlsZW5hbWVzcGxpdCA9IHN0cnRvaygkbWFwX21hcmtlclsnaWNvbiddLCAnLicpOwoJCSRzaGFkb3d0b3VzZSA9ICRtYXJrZXJkaXIuJ21hcmtlcnNoYWRvd3MnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGVuYW1lc3BsaXQuJ3MucG5nJzsKICAJCS8vIENoZWNrIGlmIHRoZSBzaGFkb3cgaWNvbiBleGlzdHMKICAJCWlmICghZmlsZV9leGlzdHMoJHNoYWRvd3RvdXNlKSkgewoJCQkkc2hhZG93dG91c2UgPSAkbWFya2VyZGlyLidtYXJrZXJzaGFkb3dzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidkZWZhdWx0cy5wbmcnOwoJCX0KCQkkbWFwLT5hZGRNYXJrZXJJY29uKCRpY29udG91c2UsICRzaGFkb3d0b3VzZSk7Cgl9CiAgfSAKfQoKCgovLyBjZW50ZXIgdGhlIG1hcCBpZiBjZW50ZXIgY29vcmRpbmF0ZXMgYXJlIHNldCEKaWYgKCAkbWFwX2RhdGFbJ2NlbnRlcl9sYXQnXSAmJiAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSApIHsKICAkbWFwLT5zZXRDZW50ZXJDb29yZHMoCgkJCXN0cl9yZXBsYWNlKCcsJywgJy4nLCAkbWFwX2RhdGFbJ2NlbnRlcl9sb24nXSksIAoJCQlzdHJfcmVwbGFjZSgnLCcsICcuJywgJG1hcF9kYXRhWydjZW50ZXJfbGF0J10pCgkJCSk7Cn0KCiMkbWFwLT5kaXNhYmxlT25Mb2FkKCk7Ci8vIGFzc2lnbiBTbWFydHkgdmFyaWFibGVzOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfaGVhZGVyJywkbWFwLT5nZXRIZWFkZXJKUygpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX2pzJywkbWFwLT5nZXRNYXBKUygpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX3NpZGViYXInLCRtYXAtPmdldFNpZGViYXIoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZ29vZ2xlX21hcCcsJG1hcC0+Z2V0TWFwKCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21hcF9kZXNjcmlwdGlvbicsICRtYXBfZGF0YVsnZGVzY3JpcHRpb24nXSk7CgovLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdtYXAudHBsJyk7CgojU2V0IGJhY2sgbG9jYWxlIGFnYWluCnNldGxvY2FsZShMQ19BTEwsICRjdXJyZW50TG9jYWxlKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokdGhpcy0+QWRtaW5TdHlsZSgnaDMge2NvbG9yOnJlZH0nKTsKCi8vIFRhYnMKaWYgKEZBTFNFID09IGVtcHR5KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpCnsKICAkdGFiID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwp9IGVsc2UgewogICR0YWIgPSAnJzsKfQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKSkKewoKICBpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0X2dlbmVyYWwnXSkpCiAgICB7CiAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhcGlrZXkiLCBpc3NldCgkcGFyYW1zWydhcGlrZXknXSkgPyAkcGFyYW1zWydhcGlrZXknXSA6ICcnICk7CiAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ1c2VjYWNoZSIsIGlzc2V0KCRwYXJhbXNbJ3VzZWNhY2hlJ10pID8gJzEnIDogJzAnICk7CiAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJsb29rdXBzZXJ2aWNlIiwgaXNzZXQoJHBhcmFtc1snbG9va3Vwc2VydmljZSddKSA/ICRwYXJhbXNbJ2xvb2t1cHNlcnZpY2UnXSA6ICdZQUhPTycpOwogICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgieWFob29hcGlkIiwgaXNzZXQoJHBhcmFtc1sneWFob29hcGlkJ10pID8gJHBhcmFtc1sneWFob29hcGlkJ10gOiAkaWQpOwogICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlbWFya2Vyc2hhZG93cycsIGlzc2V0KCRwYXJhbXNbJ3VzZW1hcmtlcnNoYWRvd3MnXSkgPyAnMScgOiAnMCcgKTsKICAgICAgZWNobyAnPGRpdiBjbGFzcz0icGFnZW1jb250YWluZXIiPjxwIGNsYXNzPSJwYWdlbWVzc2FnZSI+Jy4kdGhpcy0+TGFuZygnc2V0dGluZ3Nfc2F2ZWQnKS4nPC9wPjwvZGl2Pic7CiAgICB9CgogIGlmIChpc3NldCgkcGFyYW1zWydzdWJtaXRfYWRkcmVzc19xdWVyeSddKSkgewogICAgcmVxdWlyZV9vbmNlKCdsaWInLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ0dvb2dsZU1hcEFQSS0nLiR0aGlzLT5fZ29vZ2xlYXBpX3ZlcnNpb24uRElSRUNUT1JZX1NFUEFSQVRPUi4nR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwogICAgJHF1ZXJ5X21hcCA9IG5ldyBHb29nbGVNYXBBUEkoMCwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3lhaG9vYXBwaWQnLCAnMTIzNCcpKTsKICAgICRxdWVyeV9tYXAtPnNldExvb2t1cFNlcnZpY2UoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdsb29rdXBzZXJ2aWNlJywgJ0dPT0dMRScpICk7CiAgICAkZ2VvY29kZSA9ICRxdWVyeV9tYXAtPmdldEdlb2NvZGUoJHBhcmFtc1snYWRkcmVzcyddKTsKCiAgICBpZiggJGdlb2NvZGUgPT09IGZhbHNlICkKICAgIHsKCQkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnZV9iYWRhZGRyZXNzJykpOwogICAgfQogICAgZWxzZQogICAgewoJCQllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygnbG9jYXRpb25fZm9yJykuJyA8Yj4nLiAkcGFyYW1zWydhZGRyZXNzJ10gLic8L2I+ICcuICR0aGlzLT5MYW5nKCdpcycpLic6PGJyLz4KCQkJPGRsPgoJCQkJPGR0PicuJHRoaXMtPkxhbmcoJ3RfbGFuJykuJzombmJzcDsnLiRnZW9jb2RlWydsYXQnXSAuJzwvZHQ+CgkJCQk8ZHQ+Jy4kdGhpcy0+TGFuZygndF9sb24nKS4nOiZuYnNwOycuJGdlb2NvZGVbJ2xvbiddIC4nPC9kZD4KCQkJPC9kbD4nKTsKICB9CiAgfQoKICAvL3RhYnMgIAogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignbWFwcycsJHRoaXMtPkxhbmcoJ21hcHMnKSwgKCdtYXBzJyA9PSAkdGFiKT90cnVlOmZhbHNlKTsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2FkZHJlc3MnLCR0aGlzLT5MYW5nKCdxdWVyeV9hZGRyZXNzJyksICgnYWRkcmVzcycgPT0gJHRhYik/dHJ1ZTpmYWxzZSk7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZXR0aW5ncycsJHRoaXMtPkxhbmcoJ3NldHRpbmdzJyksICgnc2V0dGluZ3MnID09ICR0YWIpP3RydWU6ZmFsc2UpOwogIGVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKICAvL2VuZCB0YWJzCgogIC8vVGhlIGNvbnRlbnQgb2YgdGhlIHRhYnMKICBlY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKICAKICAvLyBtYXBzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdtYXBzJywgJHBhcmFtcyk7CgogIHJlcXVpcmVfb25jZSAoICdsaWIvcmNydWQuaW5jLnBocCcgKTsKICAkY28gPSBuZXcgcmNydWQoICRkYiAsIGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2dvb2dsZW1hcHNfbWFwcycgKTsKICAvL3NldHRpbmdzIGZvciByY3J1ZAogICRjby0+aGVhZGVyID0gJHRoaXMtPkxhbmcoJ3lvdXJtYXBzJyk7CgogIC8vZmllbGQgc2V0dGluZ3MKICAkY28tPmZpZWxkc1snbWFwX2lkJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygnbWFwX2lkJyk7CgogICRjby0+ZmllbGRzWyduYW1lJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9uYW1lJyk7CgogICRjby0+ZmllbGRzWydvd25lcl9pZCddWyd2aXNpYmxlX2luX2VkaXQnXSA9IGZhbHNlOwoKICAkY28tPmZpZWxkc1snY2VudGVyX2xhdCddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ2NlbnRlcl9sYXQnKTsKICAkY28tPmZpZWxkc1snY2VudGVyX2xvbiddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ2NlbnRlcl9sb24nKTsKICAKICAkY28tPmZpZWxkc1sndHlwZSddWydmaWVsZF90eXBlJ10gPSAicmFkaW98bWFwfHNhdGVsbGl0ZXxoeWJyaWR8dGVycmFpbiI7CiAgJGNvLT5maWVsZHNbJ3R5cGUnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X3R5cGUnKTsKCiAgJGNvLT5maWVsZHNbJ3dpZHRoJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF93aWR0aCcpOwogICRjby0+ZmllbGRzWydoZWlnaHQnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2hlaWdodCcpOwoKICAkY28tPmZpZWxkc1snY29udHJvbHMnXVsnZmllbGRfdHlwZSddID0gImNoZWNrYm94X29uIjsKICAkY28tPmZpZWxkc1snY29udHJvbHMnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2NvbnRyb2xzJyk7CgogICRjby0+ZmllbGRzWydjb250cm9sc19zaXplJ11bJ2ZpZWxkX3R5cGUnXSA9ICJyYWRpb3xsYXJnZXxzbWFsbCI7CiAgJGNvLT5maWVsZHNbJ2NvbnRyb2xzX3NpemUnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2NvbnRyb2xzX3NpemUnKTsKICAKICAkY28tPmZpZWxkc1sndHlwZV9jb250cm9scyddWydmaWVsZF90eXBlJ10gPSAiY2hlY2tib3hfb24iOwogICRjby0+ZmllbGRzWyd0eXBlX2NvbnRyb2xzJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF90eXBlX2NvbnRyb2xzJyk7CgogICRjby0+ZmllbGRzWydzaWRlYmFyJ11bJ2ZpZWxkX3R5cGUnXSA9ICJjaGVja2JveF9vbiI7CiAgJGNvLT5maWVsZHNbJ3NpZGViYXInXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X3NpZGViYXInKTsKCiAgJGNvLT5maWVsZHNbJ2RpcmVjdGlvbnMnXVsnZmllbGRfdHlwZSddID0gImNoZWNrYm94IjsKICAkY28tPmZpZWxkc1snZGlyZWN0aW9ucyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfZGlyZWN0aW9ucycpOwoKICAkY28tPmZpZWxkc1snem9vbSddWydmaWVsZF90eXBlJ10gPSAic2VsZWN0fHJhbmdlfDF8MjAiOwogICRjby0+ZmllbGRzWyd6b29tJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF96b29tJyk7CgogICRjby0+ZmllbGRzWyd6b29tc2Nyb2xsd2hlZWwnXVsnZmllbGRfdHlwZSddID0gJ2NoZWNrYm94X29uJzsKICAkY28tPmZpZWxkc1snem9vbXNjcm9sbHdoZWVsJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF96b29tc2Nyb2xsd2hlZWwnKTsKCiAgJGNvLT5maWVsZHNbJ3NjYWxlX2NvbnRyb2wnXVsnZmllbGRfdHlwZSddID0gJ2NoZWNrYm94X29uJzsKICAkY28tPmZpZWxkc1snc2NhbGVfY29udHJvbCddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3Rfc2NhbGVfY29udHJvbCcpOwoKICAkY28tPmZpZWxkc1snZGVzY3JpcHRpb24nXVsnZmllbGRfdHlwZSddID0gJ3RleHRhcmVhJzsKICAkY28tPmZpZWxkc1snZGVzY3JpcHRpb24nXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2Rlc2NyaXB0aW9uJyk7CgogICRjby0+ZmllbGRzWyd6b29tX2VuY29tcGFzcyddWydmaWVsZF90eXBlJ10gPSAiY2hlY2tib3giOwogICRjby0+ZmllbGRzWyd6b29tX2VuY29tcGFzcyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3Rfem9vbV9lbmNvbXBhc3MnKTsKCiAgJGNvLT5maWVsZHNbJ2JvdW5kc19mdWRnZSddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfYm91bmRzX2Z1ZGdlJyk7CgogICRjby0+ZmllbGRzWydpbmZvX3dpbmRvdyddWydmaWVsZF90eXBlJ10gPSAiY2hlY2tib3hfb24iOwogICRjby0+ZmllbGRzWydpbmZvX3dpbmRvdyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfaW5mb193aW5kb3cnKTsKCiAgJGNvLT5maWVsZHNbJ2luZm9fdHJpZ2dlciddWydmaWVsZF90eXBlJ10gPSAicmFkaW98Y2xpY2t8bW91c2VvdmVyIjsKICAkY28tPmZpZWxkc1snaW5mb190cmlnZ2VyJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9pbmZvX3RyaWdnZXInKTsKCiAgLy8gTGlzdCB2aXNpYmlsaXR5IAogICRjby0+ZmllbGRzWydtYXBfaWQnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snb3duZXJfaWQnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snZGVzY3JpcHRpb24nXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snd2lkdGgnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snaGVpZ2h0J11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3dpZHRoJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2NvbnRyb2xzJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ3R5cGVfY29udHJvbHMnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snY29udHJvbHNfc2l6ZSddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWydzaWRlYmFyJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNvLT5maWVsZHNbJ2RpcmVjdGlvbnMnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snem9vbSddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWyd6b29tc2Nyb2xsd2hlZWwnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snem9vbV9lbmNvbXBhc3MnXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKICAkY28tPmZpZWxkc1snc2NhbGVfY29udHJvbCddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwoJJGNvLT5maWVsZHNbJ2JvdW5kc19mdWRnZSddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWydpbmZvX3dpbmRvdyddWyd2aXNpYmxlX2luX2xpc3QnXSA9IGZhbHNlOwogICRjby0+ZmllbGRzWydpbmZvX3RyaWdnZXInXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKCgogIC8vcHJpbnQgaXQhCiAgJGNvLT5nbygpOwoKICAvL21hcmtlcnMgY3J1ZAogICRjbSA9IG5ldyByY3J1ZCggJGRiICwgY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzJyApOwogICRjbS0+aGVhZGVyID0gJHRoaXMtPkxhbmcoJ3lvdXJtYXJrZXJzJyk7CgogIC8vc2V0dGluZ3MKICAkY20tPmZpZWxkc1snbWFwJ11bJ2ZpZWxkX3R5cGUnXSA9ICdzZWxlY3R8dGFibGV8JyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfZ29vZ2xlbWFwc19tYXBzfG1hcF9pZHxuYW1lJzsKCiAgLy9sYW5nIHNldHRpbmdzCiAgJGNtLT5maWVsZHNbJ25hbWUnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X25hbWUnKTsKICAkY20tPmZpZWxkc1snbWFwJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9iZWxvbmdzX3RvJyk7CiAgJGNtLT5maWVsZHNbJ2luZm8nXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2luZm8nKTsKICAkY20tPmZpZWxkc1snYWRkcmVzcyddWydsYWJlbCddID0gJHRoaXMtPkxhbmcoJ3RfYWRkcmVzcycpOwogICRjbS0+ZmllbGRzWydsYXQnXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2xhbicpOwogICRjbS0+ZmllbGRzWydsb24nXVsnbGFiZWwnXSA9ICR0aGlzLT5MYW5nKCd0X2xvbicpOwogICRjbS0+ZmllbGRzWydpY29uJ11bJ2xhYmVsJ10gPSAkdGhpcy0+TGFuZygndF9pY29uJyk7CgogICRjbS0+ZmllbGRzWydpbmZvJ11bJ2ZpZWxkX3R5cGUnXSA9ICd0ZXh0YXJlYSc7CgoKICAvL3Zpc2liaWxpdHlfc2V0dGluZ3MKICAvL2xpc3QKICAkY20tPmZpZWxkc1snbWFya2VyX2lkJ11bJ3Zpc2libGVfaW5fbGlzdCddID0gZmFsc2U7CiAgJGNtLT5maWVsZHNbJ2luZm8nXVsndmlzaWJsZV9pbl9saXN0J10gPSBmYWxzZTsKCiAgJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKICAvLyBSZWFkIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWluIHRoZSBpbWFnZXMgb2YgdGhlIG1hcmtlcnMKICAkcGF0aCA9ICR0aGlzLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKS4nL21hcmtlcnMnOwogICRjbS0+c2V0UGF0aCgkcGF0aCwgJHRoaXMtPkxhbmcoJ3BhdGhlcnJvcicpLCAkdGhpcy0+TGFuZygnbWFya2VyZXJyb3InKSk7CgogICRjbS0+Z28oKTsKICAKCiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy9lbmQgbWFwcyB0YWIKCiAgLy9zdGFydCBhZGRyZXNzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdhZGRyZXNzJywgJHBhcmFtcyk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwnJywnJyx0cnVlKTsKICBlY2hvICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KCRpZCwgJ0FkZHJlc3MgcXVlcmllcycsICdBZGRyZXNzIHF1ZXJpZXMnICk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0V2l0aExhYmVsKCRpZCwgJ2FkZHJlc3MnLCAnJywgMTAwLCAxMDI0LCAgJycsICR0aGlzLT5MYW5nKCdhZGRyZXNzX2xvb2t1cCcpLic6Jm5ic3A7JyApOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnbW9kdWxlJywgJ2dvb2dsZW1hcHMnKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXRfYWRkcmVzc19xdWVyeScsICR0aGlzLT5MYW5nKCdTdWJtaXQnKSk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKICAvL2VuZCBhZGRyZXNzIHRhYgoKICAvL1NldHRpbmdzIHRhYgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdzZXR0aW5ncycsICRwYXJhbXMpOwoKICBlY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJyk7CiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydCgkaWQsICdnZW5lcmFsJywgJ0dlbmVyYWwgc2V0dGluZ3MnICk7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAnYXBpa2V5JywgJHRoaXMtPkdldFByZWZlcmVuY2UoImFwaWtleSIsIDEpICwgMTAwLCAxMDI0LCAnJywgJHRoaXMtPkxhbmcoJ2FwaWtleScpICk7CiAgZWNobyAiPC9wPiI7CiAgZWNobyAiPHA+IjsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ3VzZWNhY2hlJywgJHRoaXMtPkxhbmcoJ3VzZWNhY2hlJykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAndXNlY2FjaGUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgidXNlY2FjaGUiLCAwKSAsICcxJyk7CiAgZWNobyAiPC9wPiI7CiAgZWNobyAnPHA+JzsKICBlY2hvICR0aGlzLT5DcmVhdGVMYWJlbEZvcklucHV0KCRpZCwgJ3VzZW1hcmtlcnNoYWRvd3MnLCAkdGhpcy0+TGFuZygndXNlbWFya2Vyc2hhZG93cycpKTsKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3VzZW1hcmtlcnNoYWRvd3MnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlbWFya2Vyc2hhZG93cycsIDApICwgJzEnKTsKICBlY2hvICI8L3A+IjsgCgogIGVjaG8gIjxwPiI7IAogIGVjaG8gJHRoaXMtPkNyZWF0ZUxhYmVsRm9ySW5wdXQoJGlkLCAnbG9va3Vwc2VydmljZScsICR0aGlzLT5MYW5nKCdsb29rdXBzZXJ2aWNlJykpOwogICRsb29rdXBzZXJ2aWNlcyA9IGFycmF5KCk7CiAgJGxvb2t1cHNlcnZpY2VzWyJZQUhPTyJdID0gIllBSE9PIjsKICAkbG9va3Vwc2VydmljZXNbIkdPT0dMRSJdID0gIkdPT0dMRSI7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdsb29rdXBzZXJ2aWNlJywgJGxvb2t1cHNlcnZpY2VzLCAtMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoImxvb2t1cHNlcnZpY2UiKSk7CiAgZWNobyAiPC9wPiI7IAoKICBlY2hvICI8cD4iOyAKICBlY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHRXaXRoTGFiZWwoJGlkLCAneWFob29hcGlkJywgJHRoaXMtPkdldFByZWZlcmVuY2UoInlhaG9vYXBpZCIsICcnKSAsIDEwMCwgMTAyNCwgJycsICR0aGlzLT5MYW5nKCd5YWhvb2FwcGlkJykgKTsKICBlY2hvICI8L3A+IjsgCiAgZWNobyAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsKCiAgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0X2dlbmVyYWwnLCAkdGhpcy0+TGFuZygnU3VibWl0JykpOwogIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgLy9FTkQgU2V0dGluZ3MgdGFiCgogIGVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsgIAp9ICAKPz4K]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPlZlcnNpb24gMC4xLjcgTm92ZW1iZXIgMjAwOSBCeSBEdWtldG93bjxicj4KCQk8dWw+CgkJCTxsaT5VcGdyYWRlZCBHb29nbGVNYXBzIEFQSSBmcm9tIHZlcnNpb24gMi4wIHRvIDIuNSAoRmVhdHVyZSBSZXF1ZXN0IDQyNDkpOzwvbGk+CgkJCTxsaT5QZXIgbWFwIG9wdGlvbiB0byBhbGxvdyB6b29taW5nIHVzaW5nIHRoZSBzY3JvbGwgd2hlZWw7PC9saT4KCQkJPGxpPlBlciBtYXAgb3B0aW9uIHRvIHNob3cvaGlkZSB0aGUgc2NhbGUuIEFsc28gYXZhaWxhYmxlIGFzIHBhcmFtZXRlcjs8L2xpPgoJCQk8bGk+Tm8gbG9uZ2VyIG5lZWQgdG8gcmVsb2dpbiBhZnRlciBhZGRyZXNzIGxvb2t1cCAoQnVnIzMxOTMpLiBGb3VuZCBsYXQvbG9uIHJlbWFpbnMgc2hvd24gZm9yIGVhc3kgY29weWluZzs8L2xpPgoJCQk8bGk+TGFuZ3VhZ2UgZm9yIHRoZSBjb250cm9sZXMgaXMgbm93IGF2YWlsYWJsZSBhcyBwYXJhbWV0ZXI7PC9saT4KCQkJPGxpPkNoZWNrZWQvc29sdmVkIHZhbGlkYXRpb24gWEhUTUwgdXNpbmcgVzNDIChCdWcjMjAxNCk7PC9saT4KCQkJPGxpPk5vdyBtdWx0aXBsZSBtYXBzIG9uIG9uZSBwYWdlIHBvc3NpYmxlIChCdWcjIDQyNDgpOzwvbGk+CgkJCTxsaT5CZXR0ZXIgdXNhZ2Ugb2YgZGlyZWN0b3J5IHNlcGFyYXRvciB0byBhdm9pZCBub3QgZm91bmQgZmlsZXMgKEJ1ZyMzMzQ2KTs8L2xpPgoJCQk8bGk+TmV3IG1hcCB0eXBlICdUZXJyYWluJyBpbXBsZW1lbnRlZC48L2xpPgoJCQk8bGk+RHVyaW5nIHVwZGF0ZSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIGlzIHJlbW92ZWQgKGxpYi9Hb29nbGVNYXBBUEktMi4wKS4gWW91IG1heSBmaW5kIGl0IGlzIHN0aWxsIHRoZXJlIGFmdGVyIHRoaXMgdXBncmFkZS4KCQkJVGhhdCBpcyB0aGVuIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncy4gWW91IG1heSBkZWxldGUgZGlyZWN0b3J5IEdvb2dsZU1hcEFQSS0yLjAgd2l0aG91dCBhbnkgcHJvYmxlbS48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLjYgMTUgSmFudWFyeSAyMDA5IEJ5IER1a2V0b3duPGJyIC8+CgkJPHVsPgoJCQk8bGk+SW5jbHVkZWQgdGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgYWxzbyB1c2VkIGJ5IEdvb2dsZVwncyBBUEkuIFBhcmFtZXRlcnMgYXJlIGRpc2N1c3NlZCBpbiBoZWxwIHRleHQuPC9saT4KCQk8L3VsPgoJPC9saT4KCTxsaT5WZXJzaW9uIDAuMS41IDEwIEphbnVhcnkgMjAwOSBCeSBEdWtldG93bjxiciAvPgoJCTx1bD4KCQkJPGxpPlVzZXIgZGVmaW5lZCBtYXJrZXJzIG5vdyB3b3JrLiBTdXBwbGllZCBtYXJrZXJzIGJ1aWxkIHZpYTogaHR0cDovL3d3dy5nbWFwbGl2ZS5jb20vbWFya2VyX21ha2VyLnBocCBvZiBEaXhvbiBJbmZvcm1hdGlvbiBTeXN0ZW1zLCBDYW5hZGE8YnIgLz48L2xpPgoJCTwvdWw+Cgk8L2xpPgoJPGxpPlZlcnNpb24gMC4xLiAyOCBBdWd1c3QgMjAwNi48YnI+CgkJPHVsPgoJCQk8bGk+SW5pdGlhbCBSZWxlYXNlLjwvbGk+CgkJPC91bD4KCTwvbGk+CjwvdWw+CjxoMz5UaGFua3MgZ28gdG88L2gzPgo8cD5Sb2JlcnQgQnJvd24gZm9yIFJDUlVEIENsYXNzIHVzZWQgaW4gYWRtaW4gZXh0ZW5zaXZlbHk8L3A+CjxwPmFuZDwvcD4KPHA+TW9udGUgT2hydCBmb3IgR29vZ2xlTWFwQVBJPC9wPg==]]></data>
	</file>
	<file>
	  <filename>/GoogleMaps.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEdvb2dsZU1hcHMgLSBNb2R1bGUgZm9yIEdvb2dsZU1hcHMKIyBWZXJzaW9uOiAwLjEsIHRzdwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKY2xhc3MgR29vZ2xlTWFwcyBleHRlbmRzIENNU01vZHVsZQp7Cgl2YXIgJF9nb29nbGVhcGlfdmVyc2lvbiA9ICIyLjUiOwoKCWZ1bmN0aW9uIEdldE5hbWUoKQoJewoJCXJldHVybiAnR29vZ2xlTWFwcyc7Cgl9CglmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7Cgl9CglmdW5jdGlvbiBHZXRWZXJzaW9uKCkKCXsKCQlyZXR1cm4gJzAuMS43JzsKCX0KCWZ1bmN0aW9uIEdldEhlbHAoKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwoJfQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkKCXsKCQlyZXR1cm4gJ3Rzdyc7Cgl9CglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCgl7CgkJcmV0dXJuICd0YXR1Lndpa21hbiBbYXRdIGdtYWlsLmNvbSc7Cgl9CglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQoJewoJCXJldHVybiBmaWxlX2dldF9jb250ZW50cyhkaXJuYW1lKF9fRklMRV9fKS4nL2NoYW5nZWxvZy5pbmMnKTsKCX0KCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWZ1bmN0aW9uIEhhc0FkbWluKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KICAvKglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQoJewoJCXJldHVybiAnRXh0ZW5zaW9ucyc7Cgl9Ki8KCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQoJewoJCXJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsKCX0KCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQoJewoJICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnKTsKCX0KCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKCXsKCQlyZXR1cm4gIjEuMC1iZXRhNiI7Cgl9CgkKCQoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFNldFBhcmFtZXRlcnMoKQoJICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBjcmVhdGUgbWFwcGluZ3MgZm9yCgkgICB5b3VyIG1vZHVsZSB3aGVuIHVzaW5nICJQcmV0dHkgVXJscyIuCgkgICAKCSAgIFR5cGljYWxseSwgbW9kdWxlcyBjcmVhdGUgaW50ZXJuYWwgbGlua3MgdGhhdCBoYXZlCgkgICBiaWcgdWdseSBzdHJpbmdzIGFsb25nIHRoZSBsaW5lcyBvZjoKCSAgIGluZGV4LnBocD9tYWN0PU1vZE5hbWUsY250bnQwMSxhY3Rpb25OYW1lLDAmY250bnQwMXBhcmFtMT0xJmNudG50MDFwYXJhbTI9MiZjbnRudDAxcmV0dXJuaWQ9MwoJICAgCgkgICBZb3UgbWlnaHQgcHJlZmVyIHRoZXNlIHRvIGxvb2sgbGlrZToKCSAgIC9Nb2R1bGVGdW5jdGlvbi8yLzMKCSAgIAoJICAgVG8gZG8gdGhpcywgeW91IGhhdmUgdG8gcmVnaXN0ZXIgcm91dGVzIGFuZCBtYXAKCSAgIHlvdXIgcGFyYW1ldGVycyBpbiBhIHdheSB0aGF0IHRoZSBBUEkgd2lsbCBiZSBhYmxlCgkgICB0byB1bmRlcnN0YW5kLgoKCSAgIEFsc28gbm90ZSB0aGF0IGFueSBjYWxscyB0byBDcmVhdGVMaW5rIHdpbGwgbmVlZCB0bwoJICAgYmUgdXBkYXRlZCB0byBwYXNzIHRoZSBwcmV0dHkgdXJsIHBhcmFtZXRlci4KCSAgIAoJICAgU2luY2UgdGhlIFNrZWxldG9uIGRvZXNuJ3QgcmVhbGx5IGNyZWF0ZSBhbnkgbGlua3MsCgkgICB0aGUgc2VjdGlvbiBiZWxvdyBpcyBjb21tZW50ZWQgb3V0LCBidXQgeW91IGNhbgoJICAgdXNlIGl0IHRvIGZpZ3VyZSBvdXQgcHJldHR5IHVybHMuCgkgICAKCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKCXsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignYm91bmRzX2Z1ZGdlJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2JvdW5kc19mdWRnZScpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2NlbnRlcmxhdCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9jZW50ZXJsYXQnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjZW50ZXJsb24nLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY2VudGVybG9uJyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY29udHJvbHMnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fY29udHJvbHMnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjb250cm9sc19zaXplJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2NvbnRyb2xzX3NpemUnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdkaXJlY3Rpb25zJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2RpcmVjdGlvbnMnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdoZWlnaHQnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1faGVpZ2h0JyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaW5mb190cmlnZ2VyJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2luZm9fdHJpZ2dlcicpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2luZm9fd2luZG93JywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX2luZm9fd2luZG93JyksIGZhbHNlKTsKCSAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbWFwJywgJ3Rlc3QnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9tYXAnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdsYW5ndWFnZScsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV9sYW5ndWFnZScpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3NjYWxlX2NvbnRyb2wnLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fc2NhbGUnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzaWRlYmFyJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3NpZGViYXInKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0eXBlJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3R5cGUnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0eXBlX2NvbnRyb2xzJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3R5cGVfY29udHJvbHMnKSwgZmFsc2UpOwoJICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd3aWR0aCcsICcnLCAkdGhpcy0+bGFuZygnaGVscF9wYXJhbV93aWR0aCcpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3pvb20nLCAnJywgJHRoaXMtPmxhbmcoJ2hlbHBfcGFyYW1fem9vbScpLCBmYWxzZSk7CgkgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3pvb21fZW5jb21wYXNzJywgJycsICR0aGlzLT5sYW5nKCdoZWxwX3BhcmFtX3pvb21fZW5jb21wYXNzJyksIGZhbHNlKTsKCX0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEV2ZW50RGVzY3JpcHRpb24oKQogICBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZAogICB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIHdoYXQKICAgdGhhdCBldmVudCBkb2VzLiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQogICByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAvKiAgZnVuY3Rpb24gR2V0RXZlbnREZXNjcmlwdGlvbiAoICRldmVudG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaW5mb18nLiRldmVudG5hbWUgKTsKICB9Ki8KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEV2ZW50SGVscCgpCiAgIElmIHlvdXIgbW9kdWxlIGNhbiBjcmVhdGUgZXZlbnRzLCB5b3Ugd2lsbCBuZWVkCiAgIHRvIHByb3ZpZGUgdGhlIEFQSSB3aXRoIGRvY3VtZW50YXRpb24gb2YgaG93IHRvCiAgIHVzZSB0aGUgZXZlbnQuIFRoaXMgbWV0aG9kIHdyYXBzIHVwIGEgc2ltcGxlCiAgIHJldHVybiBvZiB0aGUgbG9jYWxpemVkIGRlc2NyaXB0aW9uLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIC8qICBmdW5jdGlvbiBHZXRFdmVudEhlbHAgKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lICk7CiAgfSovCgoJCgoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7Cgl9CglmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7Cgl9CglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsKCX0KCQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKCSAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgoJICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBkaXNwbGF5CgkgICBlcnJvciBpbmZvcm1hdGlvbiBvbiB0aGUgYWRtaW4gc2lkZS4KCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBmdW5jdGlvbiBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgICB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKCQlpZiAoJG1lc3NhZ2UgIT0gJycpCgkJCXsKCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKCQkJfQoKICAgICAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgICAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogICAgfQoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgICBEaXNwbGF5QWRtaW5OYXYoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQoJICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCgkgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIHByZXNlbnQgYQoJICAgY29tbW9uIGFkbWluIG1lbnUuCgkgICAJICAgCgkgICBJdCBzaW1wbHkgc2V0cyBhIGNvbGxlY3Rpb24gc21hcnR5IHRhZyB2YWx1ZXMuICAgCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICBmdW5jdGlvbiBEaXNwbGF5QWRtaW5OYXYoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogICAgICAgIHsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkbWluX25hdicsCgkJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ3RpdGxlX21vZF9hZG1pbicpLCBhcnJheSgpKSAuCgkJCScgOiAnIC4KCQkJJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRtaW5fcHJlZnMnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCd0aXRsZV9tb2RfcHJlZnMnKSwgYXJyYXkoKSkpOwogICAgICAgIH0KCgoKICBmdW5jdGlvbiBQcmludE1hcFdpdGhNYXJrZXJzKCRtYXBuYW1lLCAkbWFya2VycykgewogICAgcmVxdWlyZV9vbmNlKCdsaWIvR29vZ2xlTWFwQVBJLScuJHRoaXMtPl9nb29nbGVhcGlfdmVyc2lvbi4nL0dvb2dsZU1hcEFQSS5jbGFzcy5waHAnKTsKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCRtYXBuYW1lLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgneWFob29hcHBpZCcsICcxMjM0JykpOwogICAgd2hpbGUgKCAkbWFya2VyID0gYXJyYXlfcG9wKCRtYXJrZXJzKSApIHsKICAgICAgJG1hcC0+YWRkTWFya2VyQnlDb29yZHMoJG1hcmtlclsnbGF0J10sJG1hcmtlclsnbG9uJ10sICRtYXJrZXJbJ25hbWUnXSwgJG1hcmtlclsnaW5mbyddKTsKICAgIH0KICB9CiAgCiAgZnVuY3Rpb24gR2V0QWRkcmVzc0xvY2F0aW9uKCRhZGRyZXNzKSB7CiAgICByZXF1aXJlX29uY2UoJ2xpYi9Hb29nbGVNYXBBUEktJy4kdGhpcy0+X2dvb2dsZWFwaV92ZXJzaW9uLicvR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwogICAgJG1hcCA9IG5ldyBHb29nbGVNYXBBUEkoJG1hcG5hbWUsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd5YWhvb2FwcGlkJywgJzEyMzQnKSk7CiAgICAkZ2VvY29kZSA9ICRtYXAtPmdldEdlb2NvZGUoJGFkZHJlc3MpOwogICAgcmV0dXJuICRnZW9jb2RlOwogIH0KCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAPcAAAAAAAQCAQcFAwYHBgcHBwgEAgoGAwoJBgoIBw4IBAsLCg0ODBAJBBIKBRAPCxgOBx4RCBQVExgYFCITCSYWCykXCysYDCwZDDohED4jESIlICotKTA1Ljk+Njw7Oj8+PUElEkgpFEwrFVEuF1UwGFcyGVw0GkE/O2Y6HWk8Hm8/H3ZDIXlFIkZFQ0dGRUZJQ09NSV9dRl5dW15oWWtoXWRjYGdmY3Jxbnp/dIhNJpBSKZNUKpVVKptYLJ1aLaFcLqVeL6phMK1iMbBkMrRnM7hpNLtqNbxrNcNvN8ZxOM92O9F3O9t9Ptx9Ptx+P6+MHbOPHbeSHrORKbaXNLeZOoSUfa6WTLqcQL2iTKm8d6m8eMCZH9GmIdGmItmsIeGyIuq5I+68JPK/JPK/JcytT8GnV+KBQOWCQeeEQumFQuuGQ+2HQ+2IRM/Mf9DGf9XMftrSfeDYe+Xdeurjee/pd/Xvdvr0dP/6c4iTgYucg42ahY+bh5CPipeTjJqYk6GZjaueia+ijqaglqSinaakn6C1laixn6i0mKm7kbCkiLaqhruvhbOnk7avk7armLqvna+qobCuqLKvqr60ormzqb+4q6fMlarNma7Mn6/PnbPQorXRpbfSpr/VrsC1hMW7gsK4p8vBgdDGgMrBsc3FtczEtsjYt9rNqdHJutXNv9Dav+Xegvfzgv/9uc/U1NXOwtTcw9nSxNrTx93Wydjdx93Z0d/b09/f0d7d1+HYweDazuLe1eTf0+Dg0OPg1+Tg1+Xh2Ojj2Ojj2fzvyO3p4fLv6fTx7PXz7vn49QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAIAAgAAAI/wCD8QoWbJcfDwQUtBgEjKDDYMSMHTNWjKAxZMaIBWs1LBisTXgEjPAxZAiPEAokPVzJMpanO3KCCZtBIcmamziLPODDkuCslalezjGlp0ITNkiTIlXyANKkQICiRlUkVeqbO28wHbCJs+tNIRJW2blDtqxZs3X2mFDKNmmGNnXmyJ1LV27ZF0DYEjnCNgcNRo8CCx7sCBBZQAuQ3GSzJgQAACgWrwHioudDl3foBBqgJOmSxwAKnEk65INlh6RCYZ20YUhSJwEeN1CTdEeN0wRHXX0DCkeKriwCGNDRlQQh3MFQfVpdiYGZrmbOdDWC4BdyzHMciYqhom1SMxMiIf8Php3RHVYOhHhnU8LGeIKG7wAKlegPBOlIFw+JcGslrE6ccLKSI3PcsQgqugQjwwpspWGBIb2sxIklFNLy0CiqueGQLQkwoVQPHAjDEoUUmnLZS3Q8dAMLSa1xQSE9kWiJhQ7xAshYD9Xi3FcaXNKTJiSa+NAjBbryEAw6IEVCHpaYQqNDqsj4ZDCgxHHHSoKIwAYaBmBCYoQE+YKLKSQK6JBuVz5UigFOBNGBlA/5komMvQyUnGosnfADClVw0gmFqrA0IYWXmIkZS32gcMEhvfTiZ6AP8XKJjJYIiNkTT0hRxinBUAICAK9ESgsvvdBiIpCUmoLhHWKIAYYXUWCM0QgGAMjy0KR0kkkpJ4zQcccYwALbhRUW1JrLKchqoUUWWVAoIKWWXJIIWa1WKwYZj1EBxRbcdhvFE1NkMSeliCwnh7XWgvEFutbCOgUilDICB1bcchEGu/hay4UU8JJ4o4GnZHFFFOvmm68XUpCIyCKZMUILhVlAYS+66n5RMLpcXEEhIm7cEccUAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/markers/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/markers/default.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAD8UlEQVQokYVTb0xbVRT/3XdfX0vbRAPKiMaJFUoHGZBaCWkIKsNmMTOyD0YDlWzZ0mH0A8aASAiJH8g0YowGNWqNEbcP2xKC0UysCYH9gWaDMVg7KpZCcGQIC5Xtwejzvl4/0D4o0HmSX97LPb9zzzm/cw8YY8JWjIyM2D0ez9cWi2VaFMV/JUmK2Wy2ycbGxk9DoZB1Ox+cc3DOIcuysaGh4StJFNTDxXv4d7X7ee9xO+89budfvFrID+57hEuSFGtvb/9AURQxGUc451hdXTXW1NT8NDcxXP1D3X5Ys00AAAKAY9Ouzq3gyOkbcNW81u31eo/pdDomqKoqtLW1dczfGK4+f+IZFOwxgxACQgiQ+CZR9uTD+LXBAV/vmfqurq63AYAEAoFCh710vP8th1iQyPx/NhhexpFz03fD4fDTVJKk1tzYrPONssdTsj0IuVlGDIQW9MyYNU9lWe48WmzOznt0Z/bhmSiWZAU5Dxl2+O6tMwxEVlQxHA7n7T1QAvCEXIQAnKOuexx9k3cAAB7nEzj5sjXFvzczA5GrEYvAGBPNenGzRAC3/lnXggGg+8o8Yiyu+QkhMEkUiqJIQnZ29uJc9L42Lg7ApBchCkS7wChR6Kig+TmAueg6cnJyFgSn0znUN3kHhHNg42EgM0NE04GnoKMbmdoP5oESaH7COQbDyygrK7tC+vr6XK8fPvTbREsFTBJNEWpNUSEQAoNOSDm/9tddHPp2jI2OXS8Rqqqq+m0lDv8n/TM7xmXSi8iQaMrZmqLixJkAmt5r+dBms4UI5xzBYLDwWYdj9FTdPsML+VkPfERvng3itjn/gs/ne1Gv1ysCABQVFd38uLPz3Xd6JrGmqBsLlhQssTQcwMXpZZyfuid7vd5jer1eAQBBVVVBVVXB4/F881hBqf/zwdnNcSVGRggBU+No/XkK77e2dlgslkgyjjDGNIX8fn/5S9XPXx5tciLTJG28m0QlPdcX0OGXZwOBQJHBYFhPxgiU0ngS5eXl/vLKKt/3/ltaBUi08dngLJqbmz8ymUxrW2NS5kMpjbe0tJz88tIcVmNM63/gz2UsqsZFt9t9aruomgZJVFZWXsgrKh3pmfhb6//c2G3U19d3G43Gte38lBaSqK2tPf17aGMXYiyOX4JLcLvdP+7G3RzTFoTDYYtBR9Xp9uf42aOl3Gq1/sEYE3bjiqqqCtv7ys3NnbXkF4QuRaKFlyNRuFyv+ABgN+6Og6S5XC7fUCSKoZkoKioqLqbj7aoBpTReXFw8PrW0ipsLMux2+7V0vLQVGAyG9RiLI84Bs9ksp+PtqkHSVu4z7T8dT6SUxtNdEFzYTJyO9x8AWR3pU2l8CAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_dblue.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAC+0lEQVQokZWUUWhTZxiGn/zn9KRLgzdjseDFQoY1M5BJCCWUEKTUXPdmN7UEVktW2C4KY1VKKXhRplD0pjA2403FCxVEkd2EEtBhCVK3qcmMI3YyGdTeCCHV5vj//XfRnBLTnM6+8MJ/zvd+532/8x0OUkrRypWVlVg2m/0pFAo9N03znWVZjXA4/HRycvJipVLpa9ejtUZrTb1e901MTPwohKkgqmFEw3iTX2r4XFuW1ZidnT1r27bp9Hm01mxsbPiGh4dvLy09HoKTQIDO+Ae4SiYzvJjL5U51dXVJoZQSMzMzc0tLT4bga+Ag4HHhp8AEi4u3MgsLC98CeEql0tFjx2KPpPzGdHduR5UDB27UqtXqZ4ZlWdPLy40B6N/DuZ0f02hUvIcO+f416vX6/Pp6NACffKC7g01Mc1UZtVrtgpRJE/zNggfQezQ69Q1MsyxNKaUJ3mahVbQXPICFbduWCAQC6/B6n/EBXtPb27smBgYGluFpM9Z+WKW/v/+BGB8fvwQPAXsf7i8xzbIcGxu7LAYHBwuJxBdFKPBhK7SBa5w5c/pcOByueLTWlMvlo/F4/OHm5sluOPw/7tdJpfz38vn8Ca/XawuASCTy5/z8/Hdws+nQukbdcv0cv/+vei6XO+X1em0AoZQSSimRzWZ/TiSOFOEuu1fqARRwh+np6blQKLTq9HmklMKRFovFRDI5dB++B3raov9BMFh8USqVIt3d3ZvOXWEYxpbDRCJRTKdTeSi2NWvgLlNTU+d7enretPbs/FAcFgqF4/CRhrMafmhyTAcCgVe1Ws3frt95Bw5TqdS9eDyyAo9b5v+dTCaz6PP53rTr3xvB4cjIyFWoNONLoMzo6OiVTtpdI2itqVarISG6FMxq+Er39fU9k1KKTtpdIyilRDAYfBEOH67AKvCMdDqdB+ikFbhgu2kV+JtkMvmrm840DGOrUyEajT6CX4A1YrHYb2461wTbH4sENH6/v+6aQCnl+hB4u3Ny07mOsI21nZOb7j+g2r1aU9FEigAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_green.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAACpElEQVQokZWUQUhUURSGv948npNO4iIGQZBhkGGycCEiMoi0kEeLNq1aJbQRadMsJEJEiMBNMRKYEdEi2kVF7SYNUZIRSsrgVWajhRXlkIL6IOd5n6dFM+M4zhO98MO53P+c89/z3n9RSmnFmJmZae7u7r4bDocXdF3fMgwjG41GP8Xj8aG5ublIKR8RQUSwbbuyp6fnjmZoLucQ7iM8y+E2whnEMIzswMDANcdx9HxeIbmzs3OMCMI0wkoOq0XxCkISoRbp6up6kC+CUkqLx+NDnEBI55L2w7v/RRKJRFxEwLKsRt2vb5Eq6bYfniLV1dVrmUzmuM8wjL5UKBXjAnDkgAhBdiJbUafqfvps276ZuZgJ0sDh1gboE7qrpdPpBuoPmQxQD4uLi2FdKaUTyEk7zKoCx3EMLRgMZlgCJHcgJcAjXoLa2trfWiwWS5EsUlA6MDziSWhtbX1NMpk0qUFYOsRnHEP0Cn3LsqxGHMfR29raprl8gJ9oFeE7Qhjp7++/XvCCZVmN/qP+vzw5QIHzSEdHx+Tm5qZR8IKIMDw8fIl6hB/7SH+OBI4FNubn5xsKZsrbsnCVKx6dlxFOIoODg1d32bl4MzU1FaMa4UsZR95DQqHQV9u2K8u+ByKCUkozTfMFfSXd/yCcQkZGRnqK+btmkMf4+PhpanLTzqt4jASDweX19fXAngKlT5RSSmtpaXnDrd2T7+3tvVGOu0eBiJBIJOKczSX/QqhCZmdnm8pxyxZIp9Nhza+5LCA8QiKRyGellFaOq7muuwehUOhbNBydYwp4CaZpjgKU42pebjVNc5QUkIL29vZXXjzd5/Ntlztoamp6z0PgIzQ3N7/14nkq8Pv9m2SBbQgEAranAtd1PYuwthN68TyvAMCHndCL9w/vEZwQMSw5eAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_lblue.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAC7ElEQVQokZVUS0gbURQ9ToZxjDG4KCFQCMMQgj9cSBEJErqQwYUbV64MuJHQjVlJERFKwVWJG7UUcdEu/aG7VEG0jRFKqBZGa2O0JVqsQQV1aM34JreLkJjExM+FA3fenHvfmfveGTDGuFxEIpGm3t7ed7Is7/E8fy0IQrKmpua73+8f2dnZcRXyQUQgImiaZvb5fG85QTDQ2UmYnCTMz6cxNkZobydBEJJDQ0OvdF3nM3XZ4ra2tiW4XIT1dcLpaRpnZzf56SkhGCTY7eT1et9nmoAxxvn9/hHU1hJisXTRXdjYINjtFAgE/EQEqKpax4viNcLh/N3uwtwcWa3W80Qi8cQkCMJAWJLc6O4GysoeBklCcmWl/Cljv02apr1J9PTY4HTiUXF5CX5lxeBisZgTDsfjigHA4cD+/r7MM8Z4WCxpaY+Jykroui5wNpstgXgcIEq/SJ/tDXLXcvN4HHa7/Q/ndrvDCAZvFBQOLHctN19dRXNz8xcEg0EF1dWEePzhx7i0RHx5+bWqqnXQdZ1vaWlZR1/f/Zfo7IxwcECQZRocHHyd9YKqqnViRcU/zM7e36Crizwez+rV1ZWQ9QIRYXR09AUcDsLhYWnpCwtkqaq6jEajzqyZMrbMfkp/f/Gdj48J9fU0PDz8Ms/OuQ+hUMgNq5Wwu3vbkRMTJEnST03TzEX/B0QExhinKMpHDAzk735yQmhooPHxcV8uP28GGSwvLz9HdXV62hkVMzNks9mOLy4uLIV8zjCMPHg8nk/PnM4I5uZuLs30NLxe7wez2fy3kH9LAREhEAj40dGRln90RKispM3NzcZi3KINYrGYzImigb09wtQUuVyuH4wxrhiXNwyDKzSaJEm/amR5ZzsUqsPaGhRFWQSAYtxbC5lQFGUR4TAQDqO1tfVzKR5nMplSxdDY2PgN0SiwvY2mpqavpXglFYiieIVkEkilYLFYtFK8ojPIxvl5Ni3F400mU6pkg62tbFqK9x/SYvkb2LkzxAAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_orange.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADXElEQVQokY1Ub2gTZxx+7s31EpMg/sFb2aALt5rGBqKELoRSwixdGH6qH/al1qC1xA79UBGrK6XQD0VlHUPpGG4pY3UyplIU/xJLsP4pQdtNXVKjXKNUxCqIrF5rc77X1w/JNWnNlT7wwO/ufX78nuf3HgdKKSnkyMiINxwOn5AkaZzn+feCIGRcLtfD1tbWn1KplHOxHowxMMagKIq1paXlF4En2lYPWF8D2LnmLH/+FuybDWCCIGQ6Ozu7VFXl9T6OMYbp6WlrfX39+YkHg3V/bAOcIgAAHACGPO5OADtOAcH6UH8kEtlVUlJCiaZppKOjo/v5f4N1l3cDFZ8AHJcluHzNcYDvc+BKCxA91x/q7e3dCwBcIpGorPJuuh/bQ/kKEcvCkAzsOLNySpblL0yCILQ7MsPV230Lpy1Fx1rgeipjptbPnpsURenZ6Xkllq9b3nQdb2eB62leI7Isl5etzm1L3xhbgrnzsjVAOp2WeEopbzfnlqajsC4GDrAJgKqqAhFF8dXEG+PhMKgn3gClpaWTpLq6evjqQ4DLnXCLCIN6SAZ8Pt8d0tzc/Ntfo4CiLh29kKPPgAtJnjY1NfWR2tramGujP/5jbHlXOKMCu/8GDhw8dMTlcqU4xhiSyWTll1VVo39um7VsXr/0/r47DbywB25Eo9GvzWazSgDA7XaP/dDTs3/fQHYCYwWWWf755jhw+bFdiUQiu8xmswoARNM0omkaCYfDv35a4Y8fH8rZzd2mbp1qQPsF4Pv29m5JktJ6H0cpJbq9eDzu31JXc3v0ALDGlv8kGICBe0B33PE0kUi4LRbLrN5DTCbTnE6/3x/3B4LR3+N5B8jFODYEtLW1HbXZbDOFPfM/FJ2xWOyrVSvAnnWBvT6c5dkmMFEUX05NTdkX6+d3oDMQCNwod1eNDDzI5z/zLxAKhfqtVuvMYv2CCDobGhpOXUtl7WcocDEJNDY2niym/SgCYwyyLEuWEqKNd4Kd3gnmdDofUUpJMS2vadr8LehwOBxPpfWu1K30WOXtNBAMBqMAUEz70QsdwWAwOpwGhp8ANTU1N410vMlkmit24PF47p+8BIxNAl6v9x8jnaEDi8Uym6HAHAPsdrti6KBYLh3/v8vXRjrDCACQnMzXRroPdVP0GwrIn3kAAAAASUVORK5CYIIgCgo=]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_red.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADMklEQVQokY1UXWgTWRg988MkpoMIaiwIErM1ja3WGmMJoWTdNDv4UBDffDEoQq3gQ0WUIqXgg0Ww1pdaEeuDsi+6y7JPbswuwZ/aitQapalRp1UUqRWbYhy1He/08yGJSdMZ6YHDnHvvufd83Dv3gjHGl3J4eNjX0tJy0e12j4ui+E2SpDmv1/u0ra3tXDqd9pT7QUQgImia5mhtbb0g8byxew3o8mbQP74cz9eAdq4CSZI019nZeVLXdbEw78fkSCTyn6cCNBQATTflmGkq6ukmUMwPqrSBotHolcIivGEYfEdHx6m3Q/9HbmwDqmWA43IEV9QcBzSsAP71A/FrV6O9vb2HAYAbHR2t8dfXP074mVhdgSXhdgbYN748q6rqL4IkSSdcrwaDe9cuTPsZXQ7g1rs5G1u59q2gaVr3fvm9s2qJ6QV8YsCtj6LBq6patc4OgPJEiTZjfnzdMmBiYsItMsZEWcxvWgGl2gwcUCEA+mdd4p1O5/vXX63DYaFfzwKVlZXv+GAwOBj7AHD5Ea6MsNC3M0BDQ8MDLhaLKXuad9580pgraykYyQLNj0T2MJncwofD4YTXH7h/9uXSjvCLARwcBY61t5/2er1pjoiQSqVqtvv9D//YOGv/beXP0w+lgMkNoTvxePx3m82m8wBQW1s7dqa7++iRp7kEopKNpGL7bga48UnW+vv7D9hsNh0AULiWuq6LgUBg6Ph6UCaymFNhUK0M6urqal9wnUsbAwMDweUi6EUINB3JMZP/XtoEcrlcLzVNc5i+B0QExhivKMrNE+6F6R+aQJtkUF9fX2up/8d7UMpEIrFjhQh6s6P4Dvy1FeR0Oqey2axc7ucNw1jAUCh0p6reP/z3VPHo/pwEotHoVYfD8aXcv6gCIkJPT09b8+pc+ZNhUIUASiaTdWZe0wVUVXXbBd4Y/xV0vR7k8XieMcZ4M69oGAZf/rO4XK5X7mpvemBmrObeDKDsUuIAYOZd1FGAoijxwRlgcAZobGy8a+XjBUGYN2NdXd3j55+BMQ3w+XwjVj7LCux2++zcPDAPQJZlzcpnugcFfGRFbeUTBUGYt1ogVZJr5fsOUMpRssTzyyoAAAAASUVORK5CYIIgCgo=]]></data>
	</file>
	<file>
	  <filename>/images/markers/m_28_yellow.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAADkUlEQVQokY1Ub2gTZxh/3rvjkuWCFHRZcFCOW5Zkreu6LIYQSqdpFvwQGH7zi0ERYoV9qAzLLKWwD8KG2qFUxmZFNvwyFemnmmUQWhvTIm1XpamxXmupK1HxUpqemc3u8uxDcue1JtIHftzv3vs9f97ned8DRVEoIyYnJz2xWOwXQRAWGIb5j2XZDbfb/bCrq+unbDbr3KoHRAREBFmWLZ2dnT+zLKUePPgBXrnyKQ4NeXBoyIOXLjXhgQO7kGXZjb6+vu9LpRKj+enOoVDoL6eTw/FxP0pSB0pSB+bzHTqXpA6Mx71ot5swGo3+pgWhVFWlent7z6ysjIeGh78Al8sKhBAghAAA0TkhBHy+Brh92wuJxB/RgYGBbwAAyOzsbJPX23o/mfQyLhcH27HR0TwcObJQEEXxI5pl2R6eXwocPvzhpmzvAs9bYGTkmUlRdq7QsiyfO3rUanM4tpdds/V1BUZG1lRKFEVHY6MZALAKMPBaqHxvbHwPFhcXBUZRFMZqZapN08zIaxkBjqOhVHrFUjab7cXy8r+A1eCV0b6Bcc3Il5dfg91uf0YFAoF0PP4SCKmUSMhmGNeMfHQ0Dz6f7x6Jx+PhQ4cifz540AYcR2+rgdPTBYhE/lampmY+o4LBYNLt9k6cP/9kWyMsFlU4fnwWTp367ge3250liAiZTKZp717v1LVrn5j379/5zuwnTmQgl/v4TiKR+MpkMpUoAIDm5ua5s2fPfXvy5EMoFtXqBdMahvr72FgehofX5cHBwWMmk6kEAJW7oKoqFYvFft29u3Xi4sWlarlQRaV0RSlDT888nD7dc0YQhEXND4x3O5VKBXbsYPDx43aUpBBKUgjz+crz8uU9yPP8E1mWLUYfiqbpsga/3z/h9wcTV6/+o1dQmT3ChQtL0N3d/SPHcUWjj2GPFSSTyX0NDQw+fbpP/w/cvPk52my254VCwbpVr/dAQ3t7+x2Ho3Xy1q3n+v5v3MhBNBr93WKxFLfq36oAEaG/v78rEnkf8/kQ5nJB5DgaZ2ZmWmppawYQRVEwm2l1YeFLvH69FZ1O5yNFUahaWkZVVWrrYeF5fkkQXNlUarXp7t1VCIe/TgAA1NK+taBZOBxOpNOrkE6vQltb21g93aYxGtHS0nJ/fv4VzM3J4PF4puvp6lZgNptfb2yUoVwGsFqtcj1dzR5otram6LyejqFpulwvQCbzJnE93f9Yc3B0u5KYlwAAAABJRU5ErkJggiAKCg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/markershadows/defaults.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_dblues.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_greens.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_lblues.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_oranges.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_reds.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/markershadows/m_28_yellows.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAO5SURBVHja7JbNThpRGIY5M/yJIH/+1WDTpJo0MTFx5VZjvAS9ALd6AS69GHfehS5dNeqiaRtJKlgEVEBghGGmz5ccEtpUGRGNaXqSN2cYZuY8834/Z5Trur63PAzfGx//Af95QP9LPHRjY0P9cUp+/1aNBwcHnqpTDauKNZTSUfFrdSMkizhaHS3HC6R/SGAmCqMoipmmKfOInO8wmC107/f7LcMwGolEoh6JRJpnZ2f2wsKC+yKAPWARlEKTLD4hx47jjGlgQyllMzeZ68xVrinZtn3JSxTz+XwDQEc7rIYGqOECKIlmWfQ9qTKD0trFUM+zBaDFf+JiFV1wbKO7k5MTa3193elJA/XsKtZwsrjAzAG3yGKLHM+jaTSmAU2tgHY5ibNprpWXGsFF//j4uOJ5w8vBnrAKxHvgPrHgR47jfZ6leuYO97QCgYBdq9VcCsX3UHgHcdDQbkwD94GFZjWslxd1dbFUcLIieamreTiNGvcMHbo0cLPAZTw41ztsCuWWuQDgTbPZvN/e3u7XZlzDa2hnZmb8wWBwjOp7x6mMzsHQY+HpGVIIVV7qkq6T5wUrVLCtXXWf7aAA8tYhHpzAhWk0iUY93i9wNfSDe84pjkK1WrXIPcdDSngOsRFi4GAcSKnEmK5O1WeBNrpBWeC+4F5Wtxqnz33uU6pY6S0xyDyqnQvx23jgwd3tTArilusvmb+TGuepVOp6Z2enu3sor1XZL7y+YrFoACSOhZm7Pa4XTPLpXoeyjHKAfUNn6DNb3NdYLFZcXV1tAfdYW3EH6oPlctlst9shQjSinewCClgLNTRcBSAJ4Q05WwZMtrVr7musra21Nzc33X4592TAlZUVdXp6GmShURaK6j3WB4g4VgdYoEocl5jLXCOt5E7EPbLXtohCRzvnGcwToFRvJpMxLcsawZE4iiETENn8K8BdcdlPjgsCR57VAJQG3Jqbm7OXlpacQVx7EuDR0ZHkXRw3UsxhqripKzEPVI5zBUJ5Q5E3kslkO5vNdvb29txHHPMM9xig4lvNd3h4GKjX61FckaYc07uBNNocukBFybmpqal7D24N95N/f39fCiMiXyD6e8/AqSsBxC2p0hLhb9A62h62rIHc+yughJXwmHT7iHzfoQlpLbh1iyScuXQ6fT0/P99cXl7ueAjlwHAPAh4fHwdxLkHeTZH4cdxqoSs+kXLRaPQ6Ho9bW1tbju8VhtHdKboi0ZXsagDFkHytBIFssM2Vw+HwLflm7e7uvgqcjF8CDADrddBoSMpibQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2VfYmFkYWRkcmVzcyddID0gJ1RoZSBhZGRyZXNzIHNwZWNpZmllZCB3YXMgaW52YWxpZCBvciBjb3VsZCBub3QgYmUgZm91bmQnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnR29vZ2xlTWFwcyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1ByZXBhcmUgbXVsdGlwbGUgR29vZ2xlIG1hcHMsIG11bHRpcGxlIGNvb3JkaW5hdGVzIHdpdGggY3VzdG9tIG1hcmtlcnMuJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUGxlYXNlIHByb3ZpZGUgR29vZ2xlTWFwcyBhcGkga2V5ISBVc2luZyBHb29nbGVNYXBzIHJlcXVpcmVzICJVc2UgR29vZ2xlTWFwcyIgcmlnaHRzJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdCeWUgYnllJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHkgdW5pbnN0YWxsLCBhbGwgZGF0YSB3aWxsIGJlIGxvc3QnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGUgUHJlZmVyZW5jZXMnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnR29vZ2xlTWFwcyBNb2R1bGUnOwokbGFuZ1snc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWydtYXBzJ10gPSAnTWFwcyc7CiRsYW5nWydtYXBfaWQnXSA9ICdNYXAgSUQnOwokbGFuZ1snc2V0dGluZ3Nfc2F2ZWQnXSA9ICdTZXR0aW5ncyBzYXZlZCc7CiRsYW5nWydhcGlrZXknXSA9ICdHb29nbGVNYXBzIGFwaWtleSc7CiRsYW5nWyd1c2VjYWNoZSddID0gJ1VzZSBjYWNoaW5nIGZvciBnZW9jb2RlcyAobm90IHdvcmtpbmcgeWV0KSc7CiRsYW5nWydsb29rdXBzZXJ2aWNlJ10gPSAnV2hpY2ggbG9va3VwIHNlcnZpY2UgdG8gdXNlJzsKJGxhbmdbJ3lhaG9vYXBwaWQnXSA9ICdBcHBsaWNhdGlvbiBJRCBmb3IgeWFob28nOyAKJGxhbmdbJ25va2V5J10gPSAnR29vZ2xlTWFwcyBhcGlrZXkgbWlzc2luZyBpbiBjb25maWd1cmF0aW9uJzsKJGxhbmdbJ25vbWFwJ10gPSAnTm8gbWFwIHByb3ZpZGVkJzsKJGxhbmdbJ3F1ZXJ5X2FkZHJlc3MnXSA9ICdBZGRyZXNzIGxvb2t1cCc7CiRsYW5nWydhZGRyZXNzX2xvb2t1cCddID0gJ1NlYXJjaCBsb2NhdGlvbiBmb3IgYWRkcmVzcyc7CiRsYW5nWydTdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1snbG9jYXRpb25fZm9yJ10gPSAnTG9jYXRpb24gZm9yJzsKJGxhbmdbJ2lzJ10gPSAnaXMnOwokbGFuZ1sncGF0aGVycm9yJ10gPSAnUGF0aCB0byBtYXJrZXIgZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyBkb2VzblwndCBleGlzdCc7CiRsYW5nWydtYXJrZXJlcnJvciddID0gJ05vIG1hcmtlcnMgZm91bmQgaW4gZGlyZWN0b3J5IFwndXBsb2Fkcy9Hb29nbGVNYXBzL21hcmtlcnNcJyc7CiRsYW5nWyd1c2VtYXJrZXJzaGFkb3dzJ10gPSAnVXNlIG1hcmtlciBzaGFkb3dzPyc7CiRsYW5nWyd5b3VybWFwcyddID0gJ1lvdXIgTWFwcyc7CiRsYW5nWyd5b3VybWFya2VycyddID0gJ1lvdXIgTWFya2Vycyc7CgokbGFuZ1snaGVscCddID0gJwo8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+VGhpcyBtb2R1bGUgaXMgaW50ZW50ZWQgZm9yIGludGVncmF0aW5nIEdvb2dsZU1hcHMgYXMgYSBwYXJ0IG9mIHlvdXIgc2l0ZS48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5GaXJzdCB5b3UgbXVzdCBpbnNlcnQgeW91ciBHb29nbGVNYXBzIGFwaSBrZXkgKHBsZWFzZSByZWdpc3RlciBpbiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vYXBpcy9tYXBzL3NpZ251cC5odG1sKS48L3A+CjxwPlRoZW4geW91IGNhbiBjYWxsIHRoaXMgbW9kdWxlIGluIHlvdXIgdGVtcGxhdGUgd2l0aCB7Y21zX21vZHVsZSBtb2R1bGU9XCdHb29nbGVNYXBzXCcgbWFwPVwndGVzdFwnfSA8L3A+CjxwPlVzZXIgZGVmaW5lZCBtYXJrZXJzIGNhbiBiZSBsb2FkZWQgaW50byB1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vycy4gVGhlIGNvbm5lY3RlZCBzaGFkb3cgaW1hZ2VzIHNob3VsZCBiZSBsb2FkZWQgaW4gCgl1cGxvYWRzL0dvb2dsZU1hcHMvbWFya2Vyc2hhZG93cy48YnI+CglOYW1pbmcgY29udmVudGlvbiBpcyBbbWFya2VyaWNvbl1zLnBuZyAoaWUuIG1hcmtlciBpcyBiaWdibHVlLnBuZywgbWFya2Vyc2hhZG93IGlzIGJpZ2JsdWVzLnBuZykuPGJyPgoJSWYgYSBzaGFkb3cgaXMgbm90IGZvdW5kLCB0aGUgZGVmYXVsdCB2ZXJzaW9uIHdpbGwgYmUgdXNlZCAod2hpY2ggbWF5IG5vdCBiZSB0aGUgY29ycmVjdCBzaGFkb3cgb2YgdGhlIG1hcmtlciBhdCBhbGwpLjxicj4KCUluIHRoZSBzZXR0aW5ncyB1c2UgdGhlIHByZWZlcmVuY2UgXCdVc2UgbWFya2VyIHNoYWRvd3NcJyB0byBzaG93L2hpZGUgdGhlbS4gU2hvd2luZyB0aGUgc2hhZG93cyBzbG93cyBkb3duIHRoZSBidWlsZHVwIG9mIHRoZQoJbWFwLCBkdWUgdG8gbW9yZSBpbnRlcm5hbCBjaGVja3MuPGJyPgoJT25seSBpbWFnZXMgd2l0aCBleHRlbnNpb24gLnBuZyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGlzIGV2ZW4gbW9yZSBmbGV4aWJsZSB0aHJvdWdoIHRoZSB1c2FnZSBvZiB0aGUgcGFyYW1ldGVycyAoc2VlIHRoZSBwYXJhbWV0ZXIgbGlzdCkuIEVhY2ggcGFyYW1ldGVyIGFzIGF2YWlsYWJsZSBkdXJpbmcgdGhlIHByZXBhcmF0aW9uIG9mIGEgbWFwLCBjYW4gYmUgCglvdmVycmlkZW4gZm9yIHRoZSBmcm9udCBlbmQuIFNvIHlvdSBhcmUgYWJsZSB0byBwcmVwYXJlIG9uZSBtYXAgYW5kIGRpc3BsYXkgaXQgaW4gdmFyaW91cyB3YXlzIGJ5IHVzaW5nIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMuPGJyPgoJPGk+Tm90ZTo8L2k+IER1ZSB0byB0aGUgZ2VuZXJhdGlvbiBmb3JtIHVzZWQgZm9yIHRoZSBtYXAsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIG1hcHMgb24gb25lIHBhZ2UhPC9wPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0Ojxicj4KPHVsPgoJPGxpPlRoZSBDTVMgTWFkZSBTaW1wbGUgZm9ydW07PC9saT4KPC91bD4KPC9wPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoKPGgzPlNlY3VyaXR5PC9oMz4KPHA+VXNlciBtdXN0IGhhdmUgIlVzZSBHb29nbGVNYXBzIiBwZXJtaXNzaW9ucyBzZXQgdG8gZWRpdCBtYXBzPC9wPgonOwoKLy8gcGFyYW0gaGVscAokbGFuZ1snaGVscF9wYXJhbV9ib3VuZHNfZnVkZ2UnXSA9ICdUaGlzIHdpbGwgYWRqdXN0IGhvdyBtdWNoIG1hcCBib3VuZGFyeSBlbmNvbXBhc3NlcyB0aGUgbWFwIG1hcmtlcnMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fY2VudGVybGF0J10gPSAnVGhlIGxhdGl0dWRlIHRvIHdoaWNoIHRoZSBtYXAgc2hvdWxkIGJlIGNlbnRlcmVkLic7CiRsYW5nWydoZWxwX3BhcmFtX2NlbnRlcmxvbiddID0gJ1RoZSBsb25naXR1ZGUgdG8gd2hpY2ggdGhlIG1hcCBzaG91bGQgYmUgY2VudGVyZWQuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fY29udHJvbHMnXSA9ICdJZiBzZXQgdG8gMCAoemVybyksIHRoZXJlIHdpbGwgYmUgbm8gY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLic7CiRsYW5nWydoZWxwX3BhcmFtX2NvbnRyb2xzX3NpemUnXSA9ICdUaGlzIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIGNvbnRyb2xzIGFyZQplbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQgc2xpZGVyLiBMYXJnZSBpcyBkZWZhdWx0Lic7CiRsYW5nWydoZWxwX3BhcmFtX2RpcmVjdGlvbnMnXSA9ICdUaGlzIGVuYWJsZXMgbWFwIGRpcmVjdGlvbnMgaW4gdGhlIGJvdHRvbSBvZiB0aGUgcG9wLXVwIGluZm8gd2luZG93LiBEZWZhdWx0IGlzIGRpc2FibGVkLgpcJzFcJyBXaWxsIGVuYWJsZSB0aGUgZGlyZWN0aW9ucy4nOwokbGFuZ1snaGVscF9wYXJhbV9oZWlnaHQnXSA9ICdTZXRzIHRoZSBoZWlnaHQgb2YgdGhlIG1hcCB3aW5kb3cuIFRoaXMgY2FuIGJlIGVpdGhlciBweCBvciAlLic7CiRsYW5nWydoZWxwX3BhcmFtX2luZm9fdHJpZ2dlciddID0gJ1RoaXMgc2V0cyB0aGUgaW5mbyB3aW5kb3cgdHJpZ2dlciBiZWhhdmlvci4gY2xpY2sgPSBpbmZvIHdpbmRvdyBjb21lcyB1cAogICAgICAgIHdoZW4gY2xpY2tpbmcgb24gYSBtYXJrZXIuIG1vdXNlb3ZlciA9IGluZm8gd2luZG93IGNvbWVzIHVwIHdoZW4gbW91c2luZyBvdmVyIGEgbWFya2VyLic7CiRsYW5nWydoZWxwX3BhcmFtX2luZm9fd2luZG93J10gPSAnRW5hYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fbGFuZ3VhZ2UnXSA9ICdTZWU6IDxhIGhyZWY9Imh0dHA6Ly9zcHJlYWRzaGVldHMuZ29vZ2xlLmNvbS9wdWI/a2V5PXA5cGR3c2FpMmhETXNMa1hzb00wNUtRJmdpZD0xIiB0YXJnZXQ9Il9ibGFuayI+CnRoZSBsaXN0IG9mIGxhbmd1YWdlczwvYT4nOwokbGFuZ1snaGVscF9wYXJhbV9tYXAnXSA9ICdTZXQgd2hpY2ggbWFwIHRvIHNob3cnOwokbGFuZ1snaGVscF9wYXJhbV9zY2FsZSddID0gJ1VzZSBcJzFcJyBvciB0cnVlIHRvIHNob3cgc2NhbGUuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fc2lkZWJhciddID0gJ1VzZSBcJzFcJyB0byBlbmFibGUgdGhlIG1hcCBzaWRlYmFyLic7CiRsYW5nWydoZWxwX3BhcmFtX3R5cGUnXSA9ICdUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWFwIHR5cGUuIFJlbGV2YW50IG9ubHkgaWYgbWFwIHR5cGUgY29udHJvbHMgYXJlIGVuYWJsZWQuIAoJbWFwID0gZGVmYXVsdCBtYXAuIHNhdGVsbGl0ZSA9IHNhdGVsbGl0ZSB2aWV3LiBoeWJyaWQgPSBoeWJyaWQgdmlldy4gdGVycmFpbiA9IHBoeXNpY2FsIHZpZXcgd2l0aCByb2Fkcyc7CiRsYW5nWydoZWxwX3BhcmFtX3R5cGVfY29udHJvbHMnXSA9ICdVc2UgXCcxXCcgZW5hYmxlIHRoZSBtYXAgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbiknOwokbGFuZ1snaGVscF9wYXJhbV93aWR0aCddID0gJ1NldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tJ10gPSAnVGhpcyBzZXRzIHRoZSBtYXAgem9vbSBsZXZlbC4nOwokbGFuZ1snaGVscF9wYXJhbV96b29tX2VuY29tcGFzcyddID0gJ1VzZSBcJzFcJyB0byBlbmFibGUgdGhlIHpvb20gZW5jb21wYXNzIHNvIG1hcCB6b29tIGlzIGFzIHNtYWxsIGFzIHBvc3NpYmxlCiAgICAgICAgYW5kIGluY2x1ZGUgYWxsIG1hcCBtYXJrZXJzLic7CgovL3RhYmxlIGZpZWxkcwokbGFuZ1sndF9uYW1lJ10gPSAnTmFtZSc7CiRsYW5nWyd0X2JlbG9uZ3NfdG8nXSA9ICdCZWxvbmdzIHRvIG1hcCc7CiRsYW5nWyd0X2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snY2VudGVyX2xhdCddID0gJ0RlZmF1bHQgY2VudGVyIGxhdGl0dWRlJzsKJGxhbmdbJ2NlbnRlcl9sb24nXSA9ICdEZWZhdWx0IGNlbnRlciBsb25naXR1ZGUnOwokbGFuZ1sndF90eXBlJ10gPSAnRGlzcGxheSB0eXBlJzsKJGxhbmdbJ3Rfd2lkdGgnXSA9ICdXaWR0aCc7CiRsYW5nWyd0X2hlaWdodCddID0gJ0hlaWdodCc7CiRsYW5nWyd0X2NvbnRyb2xzJ10gPSAnRW5hYmxlIGNvbnRyb2xzJzsKJGxhbmdbJ3RfY29udHJvbHNfc2l6ZSddID0gJ0NvbnRyb2xzIHNpemUnOwokbGFuZ1sndF9zaWRlYmFyJ10gPSAnU2lkZWJhciBmb3IgbWFya2Vycyc7CiRsYW5nWyd0X3R5cGVfY29udHJvbHMnXSA9ICdEaXNwbGF5IHR5cGUgY29udHJvbHMgZW5hYmxlZCc7CiRsYW5nWyd0X2RpcmVjdGlvbnMnXSA9ICdTaG93IGRpcmVjdGlvbnMnOwokbGFuZ1sndF96b29tJ10gPSAnWm9vbSBsZXZlbCc7CiRsYW5nWyd0X3pvb21fZW5jb21wYXNzJ10gPSAnVHJ5IHRvIGZpdCBhbGwgbWFya2Vycyc7CiRsYW5nWyd0X3pvb21zY3JvbGx3aGVlbCddID0gJ0FsbG93IHdoZWVsIHNjcm9sbCB6b29taW5nJzsKJGxhbmdbJ3Rfc2NhbGVfY29udHJvbCddID0gJ1Nob3cgc2NhbGUnOwokbGFuZ1sndF9ib3VuZHNfZnVkZ2UnXSA9ICdCb3VuZHNfZnVkZ2UnOwokbGFuZ1sndF9pbmZvX3dpbmRvdyddID0gJ0VuYWJsZSBtYXJrZXIgaW5mbyB3aW5kb3dzJzsKJGxhbmdbJ3RfaW5mb190cmlnZ2VyJ10gPSAnSW5mbyB3aW5kb3cgdHJpZ2dlcic7CgokbGFuZ1sndF9pbmZvJ10gPSAnTWFya2VyIGluZm8gKGh0bWwgYWxsb3dlZCknOwokbGFuZ1sndF9sYW4nXSA9ICdMYXRpdHVkZSc7CiRsYW5nWyd0X2xvbiddID0gJ0xvbmdpdHVkZSc7CiRsYW5nWyd0X2ljb24nXSA9ICdNYXJrZXIgaWNvbic7CiRsYW5nWyd0X2FkZHJlc3MnXSA9ICdNYXJrZXIgYWRkcmVzcyc7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/COPYING.lib</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQoJCSAgICAgICBWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQoKIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cwogYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQoKCQkJICAgIFByZWFtYmxlCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQpmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCgogIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQpGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgp0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgpzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KCiAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLApub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0CnlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAppdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCnRoZXNlIHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZApkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCnJpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgp5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCm9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKeW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQpjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCmNvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQp3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZwppdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KCiAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQpsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbApwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KCiAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0CnRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93CnRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAphdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKaW50cm9kdWNlZCBieSBvdGhlcnMuCgwKICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgphbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CmVmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQpyZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAphbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCmNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgoKICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQpvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKdGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQpsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KCiAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCmNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQplbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbApQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAp0aGUgbGlicmFyeS4KCiAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdApkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbApQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcwphcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgpzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCgogIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCmVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCmEgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQpsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCnNvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCgogIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQpwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgpub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKc3lzdGVtLgoKICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQp1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcwpsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KCiAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCiJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCmZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCgwKCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCnByb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCm90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKdGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgpFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KCiAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQpwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KCiAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQpMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgpjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQpwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCnN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKCiAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucwphbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAppbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KCiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCnN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgp3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCmFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgogIAogIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncwpjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAp5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgphcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAphbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQp3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQpMaWJyYXJ5LgoKICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAphbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCmZlZS4KDAogIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24Kb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZApkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKCiAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCgogICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubwogICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCgogICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCiAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCiAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CiAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgogICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KCiAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcwogICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQogICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CiAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQogICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKClRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCnRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CmRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZApvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCml0LgoKVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CnlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwpleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KCkluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCmEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCnRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCgogIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCkxpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwp0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCmluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQp0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCnRoZXNlIG5vdGljZXMuCgwKICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCnRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCnN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCgogIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgp0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCgogIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCmRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCnVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQppdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCm11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQptZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCgogIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CmZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCnNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bwpkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CmNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCgogIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCkxpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAp0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgoKICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CmNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdApjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQpsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCgogIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCnRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQpkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KCiAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCmZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQp3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQpMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQoKICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQpkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCndoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KDAogIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCmxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCndvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCnVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgoKICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5CnRoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQpkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCm9mIHRoZXNlIHRoaW5nczoKCiAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZwogICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCiAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgogICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAogICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCiAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAogICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCiAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgogICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCgogICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCiAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQogICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCiAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcwogICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCgogICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscwogICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQogICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgoKICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CiAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KCiAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgoKICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCnRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCm5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgpjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCndoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKdGhlIGV4ZWN1dGFibGUuCgogIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCnJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAp1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CmRpc3RyaWJ1dGUuCgwKICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCkxpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CmZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCnRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQpwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgoKICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCiAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CiAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKICAgIFNlY3Rpb25zIGFib3ZlLgoKICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CiAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZwogICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgoKICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQp0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQphdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCnJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwp0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQpzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAp0aGlzIExpY2Vuc2UuCgwKICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLApjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Cm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQphbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bwpyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgoKSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQpwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCmFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCgpJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CnBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CnN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCmdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKaW1wb3NlIHRoYXQgY2hvaWNlLgoKVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCmJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgoKICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCm9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAphbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCmV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCndyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgoKICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgpTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCmJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCiJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCmxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgwKICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCnByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgpkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCm9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCmFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCgoJCQkgICAgTk8gV0FSUkFOVFkKCiAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCldBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCkVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCk9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQpJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCkxJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FClRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgpDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQpMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HClJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCkZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSApEQU1BR0VTLgoKCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwo=]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/GoogleMapAPI.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBQcm9qZWN0OiAgICAgR29vZ2xlTWFwQVBJOiBhIFBIUCBsaWJyYXJ5IGludGVmYWNlIHRvIHRoZSBHb29nbGUgTWFwIEFQSQogKiBGaWxlOiAgICAgICAgR29vZ2xlTWFwQVBJLmNsYXNzLnBocAogKiAKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIEZvciBxdWVzdGlvbnMsIGhlbHAsIGNvbW1lbnRzLCBkaXNjdXNzaW9uLCBldGMuLCBwbGVhc2Ugam9pbiB0aGUKICogU21hcnR5IG1haWxpbmcgbGlzdC4gU2VuZCBhIGJsYW5rIGUtbWFpbCB0bwogKiBzbWFydHktZ2VuZXJhbC1zdWJzY3JpYmVAbGlzdHMucGhwLm5ldAogKgogKiBAbGluayBodHRwOi8vd3d3LnBocGluc2lkZXIuY29tL3BocC9jb2RlL0dvb2dsZU1hcEFQSS8KICogQGNvcHlyaWdodCAyMDA1IE5ldyBEaWdpdGFsIEdyb3VwLCBJbmMuCiAqIEBhdXRob3IgTW9udGUgT2hydCA8bW9udGUgYXQgb2hydCBkb3QgY29tPgogKiBAcGFja2FnZSBHb29nbGVNYXBBUEkKICogQHZlcnNpb24gMi41CiAqLwoKLyogJElkOiBHb29nbGVNYXBBUEkuY2xhc3MucGhwLHYgMS42MyAyMDA3LzA4LzAzIDE2OjI5OjQwIG1vaHJ0IEV4cCAkICovCgovKgoKRm9yIGJlc3QgcmVzdWx0cyB3aXRoIEdvb2dsZU1hcHMsIHVzZSBYSFRNTCBjb21wbGlhbnQgd2ViIHBhZ2VzIHdpdGggdGhpcyBoZWFkZXI6Cgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczp2PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCI+CgpGb3IgZGF0YWJhc2UgY2FjaGluZywgeW91IHdpbGwgd2FudCB0byB1c2UgdGhpcyBzY2hlbWE6CgpDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogIGFkZHJlc3MgdmFyY2hhcigyNTUpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgbG9uIGZsb2F0IGRlZmF1bHQgTlVMTCwKICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogIFBSSU1BUlkgS0VZICAoYWRkcmVzcykKKTsKCiovCgpjbGFzcyBHb29nbGVNYXBBUEkgewoKICAgIC8qKgogICAgICogUEVBUjo6REIgRFNOIGZvciBnZW9jb2RlIGNhY2hpbmcuIGV4YW1wbGU6CiAgICAgKiAkZHNuID0gJ215c3FsOi8vdXNlcjpwYXNzQGxvY2FsaG9zdC9kYm5hbWUnOwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkZHNuID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBZT1VSIEdvb2dsTWFwIEFQSSBLRVkgZm9yIHlvdXIgc2l0ZS4KICAgICAqIChodHRwOi8vbWFwcy5nb29nbGUuY29tL2FwaXMvbWFwcy9zaWdudXAuaHRtbCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwaV9rZXkgPSAnJzsKCiAgICAvKioKICAgICAqIGN1cnJlbnQgbWFwIGlkLCBzZXQgd2hlbiB5b3UgaW5zdGFudGlhdGUKICAgICAqIHRoZSBHb29nbGVNYXBBUEkgb2JqZWN0LgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkbWFwX2lkID0gbnVsbDsKCiAgICAvKioKICAgICAqIHNpZGViYXIgPGRpdj4gdXNlZCBhbG9uZyB3aXRoIHRoaXMgbWFwLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkc2lkZWJhcl9pZCA9IG51bGw7ICAgIAogICAgCiAgICAvKioKICAgICAqIEdvb2dsZU1hcEFQSSB1c2VzIHRoZSBZYWhvbyBnZW9jb2RlIGxvb2t1cCBBUEkuCiAgICAgKiBUaGlzIGlzIHRoZSBhcHBsaWNhdGlvbiBJRCBmb3IgWU9VUiBhcHBsaWNhdGlvbi4KICAgICAqIFRoaXMgaXMgc2V0IHVwb24gaW5zdGFudGlhdGluZyB0aGUgR29vZ2xlTWFwQVBJIG9iamVjdC4KICAgICAqIChodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLm5ldC9mYXEvaW5kZXguaHRtbCNhcHBpZCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGFwcF9pZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiB1c2Ugb25Mb2FkKCkgdG8gbG9hZCB0aGUgbWFwIGphdmFzY3JpcHQuCiAgICAgKiBpZiBlbmFibGVkLCBiZSBzdXJlIHRvIGluY2x1ZGUgb24geW91ciB3ZWJwYWdlOgogICAgICogPGh0bWwgb25sb2FkPSJvbkxvYWQoKSI+CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRvbmxvYWQgPSBmYWxzZTsKICAgIAogICAgLyoqCiAgICAgKiBtYXAgY2VudGVyIGxhdGl0dWRlIChob3Jpem9udGFsKQogICAgICogY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGFzIG1hcmtlcnMKICAgICAqIGFyZSBhZGRlZCB0byB0aGUgbWFwLgogICAgICoKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRjZW50ZXJfbGF0ID0gbnVsbDsKCiAgICAvKioKICAgICAqIG1hcCBjZW50ZXIgbG9uZ2l0dWRlICh2ZXJ0aWNhbCkKICAgICAqIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBhcyBtYXJrZXJzCiAgICAgKiBhcmUgYWRkZWQgdG8gdGhlIG1hcC4KICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkY2VudGVyX2xvbiA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBtYXAgY29udHJvbHMgKHpvb20vbW92ZS9jZW50ZXIpCiAgICAgKgogICAgICogQHZhciBib29sZWFuCiAgICAgKi8KICAgIHZhciAkbWFwX2NvbnRyb2xzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgdGhlIG1hcCBjb250cm9sIHR5cGUKICAgICAqIHNtYWxsIC0+IHNob3cgbW92ZS9jZW50ZXIgY29udHJvbHMKICAgICAqIGxhcmdlIC0+IHNob3cgbW92ZS9jZW50ZXIvem9vbSBjb250cm9scwogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHZhciAkY29udHJvbF9zaXplID0gJ2xhcmdlJzsKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCB0eXBlIGNvbnRyb2xzIChtYXAvc2F0ZWxsaXRlL2h5YnJpZCkKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICR0eXBlX2NvbnRyb2xzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGRlZmF1bHQgbWFwIHR5cGUgKEdfTk9STUFMX01BUC9HX1NBVEVMTElURV9NQVAvR19IWUJSSURfTUFQKQogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJG1hcF90eXBlID0gJ0dfTk9STUFMX01BUCc7CiAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHNjYWxlX2NvbnRyb2wgPSB0cnVlOwogICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgb3ZlcnZpZXcgbWFwIGNvbnRyb2wKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRvdmVydmlld19jb250cm9sID0gZmFsc2U7ICAgIAogICAgIAogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHpvb20gbGV2ZWwKICAgICAqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgdmFyICR6b29tID0gMTY7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIHRoZSBtYXAgd2lkdGgKICAgICAqCiAgICAgKiBAdmFyIGludGVnZXIKICAgICAqLwogICAgdmFyICR3aWR0aCA9ICc1MDBweCc7CiAgICAKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgbWFwIGhlaWdodAogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICB2YXIgJGhlaWdodCA9ICc1MDBweCc7CgogICAgLyoqCiAgICAgKiBtZXNzYWdlIHRoYXQgcG9wcyB1cCB3aGVuIHRoZSBicm93c2VyIGlzIGluY29tcGF0aWJsZSB3aXRoIEdvb2dsZSBNYXBzLgogICAgICogc2V0IHRvIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlLgogICAgICoKICAgICAqIEB2YXIgaW50ZWdlcgogICAgICovCiAgICB2YXIgJGJyb3dzZXJfYWxlcnQgPSAnU29ycnksIHRoZSBHb29nbGUgTWFwcyBBUEkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIGJyb3dzZXIuJzsKICAgIAogICAgLyoqCiAgICAgKiBtZXNzYWdlIHRoYXQgYXBwZWFycyB3aGVuIGphdmFzY3JpcHQgaXMgZGlzYWJsZWQuCiAgICAgKiBzZXQgdG8gZW1wdHkgc3RyaW5nIHRvIGRpc2FibGUuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRqc19hbGVydCA9ICc8Yj5KYXZhc2NyaXB0IG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byB1c2UgR29vZ2xlIE1hcHMuPC9iPic7CgogICAgLyoqCiAgICAgKiBkZXRlcm1pbmVzIGlmIHNpZGViYXIgaXMgZW5hYmxlZAogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHNpZGViYXIgPSB0cnVlOyAgICAKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgdG8vZnJvbSBkaXJlY3Rpb25zIGFyZSBpbmNsdWRlZCBpbnNpZGUgaW5mbyB3aW5kb3cKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRkaXJlY3Rpb25zID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgbWFwIG1hcmtlcnMgYnJpbmcgdXAgYW4gaW5mbyB3aW5kb3cKICAgICAqCiAgICAgKiBAdmFyIGJvb2xlYW4KICAgICAqLwogICAgdmFyICRpbmZvX3dpbmRvdyA9IHRydWU7ICAgIAoKICAgIC8qKgogICAgICogZGV0ZXJtaW5lcyB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIGNvbnRyb2xzCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICRsYW5ndWFnZSA9ICdlbic7ICAgIAogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgaW5mbyB3aW5kb3cgYXBwZWFycyB3aXRoIGEgY2xpY2sgb3IgbW91c2VvdmVyCiAgICAgKgogICAgICogQHZhciBzdHJpbmcgY2xpY2svbW91c2VvdmVyCiAgICAgKi8KICAgIHZhciAkd2luZG93X3RyaWdnZXIgPSAnY2xpY2snOyAgICAKCiAgICAvKioKICAgICAqIHdoYXQgc2VydmVyIGdlb2NvZGUgbG9va3VwcyBjb21lIGZyb20KICAgICAqCiAgICAgKiBhdmFpbGFibGU6IFlBSE9PICBZYWhvbyEgQVBJLiBVUyBnZW9jb2RlIGxvb2t1cHMgb25seS4KICAgICAqICAgICAgICAgICAgR09PR0xFIEdvb2dsZSBNYXBzLiBUaGlzIGNhbiBkbyBpbnRlcm5hdGlvbmFsIGxvb2t1cHMsCiAgICAgKiAgICAgICAgICAgICAgICAgICBidXQgbm90IGFuIG9mZmljaWFsIEFQSSBzZXJ2aWNlIHNvIG5vIGd1YXJhbnRlZXMuCiAgICAgKiAgICAgICAgICAgIE5vdGU6IEdPT0dMRSBpcyB0aGUgZGVmYXVsdCBsb29rdXAgc2VydmljZSwgcGxlYXNlIHJlYWQKICAgICAqICAgICAgICAgICAgICAgICAgdGhlIFlhaG9vISB0ZXJtcyBvZiBzZXJ2aWNlIGJlZm9yZSB1c2luZyB0aGVpciBBUEkuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcgc2VydmljZSBuYW1lCiAgICAgKi8KICAgIHZhciAkbG9va3VwX3NlcnZpY2UgPSAnR09PR0xFJzsKCXZhciAkbG9va3VwX3NlcnZlciA9IGFycmF5KCdHT09HTEUnID0+ICdtYXBzLmdvb2dsZS5jb20nLCAnWUFIT08nID0+ICdhcGkubG9jYWwueWFob28uY29tJyk7CiAgICAKICAgIHZhciAkZHJpdmluZ19kaXJfdGV4dCA9IGFycmF5KAogICAgICAgICAgICAnZGlyX3RvJyA9PiAnU3RhcnQgYWRkcmVzczogKGluY2x1ZGUgYWRkciwgY2l0eSBzdC9yZWdpb24pJywKICAgICAgICAgICAgJ3RvX2J1dHRvbl92YWx1ZScgPT4gJ0dldCBEaXJlY3Rpb25zJywKICAgICAgICAgICAgJ3RvX2J1dHRvbl90eXBlJyA9PiAnc3VibWl0JywKICAgICAgICAgICAgJ2Rpcl9mcm9tJyA9PiAnRW5kIGFkZHJlc3M6IChpbmNsdWRlIGFkZHIsIGNpdHkgc3QvcmVnaW9uKScsCiAgICAgICAgICAgICdmcm9tX2J1dHRvbl92YWx1ZScgPT4gJ0dldCBEaXJlY3Rpb25zJywKICAgICAgICAgICAgJ2Zyb21fYnV0dG9uX3R5cGUnID0+ICdzdWJtaXQnLAogICAgICAgICAgICAnZGlyX3RleHQnID0+ICdEaXJlY3Rpb25zOiAnLAogICAgICAgICAgICAnZGlyX3RvaGVyZScgPT4gJ1RvIGhlcmUnLAogICAgICAgICAgICAnZGlyX2Zyb21oZXJlJyA9PiAnRnJvbSBoZXJlJwogICAgICAgICAgICApOyAgICAgICAgICAgICAKICAgICAgICAgICAgICAgCiAgICAKICAgIC8qKgogICAgICogdmVyc2lvbiBudW1iZXIKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJF92ZXJzaW9uID0gJzIuNSc7CgogICAgLyoqCiAgICAgKiBsaXN0IG9mIGFkZGVkIG1hcmtlcnMKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX21hcmtlcnMgPSBhcnJheSgpOwogICAgCiAgICAvKioKICAgICAqIG1heGltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKiAKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgdmFyICRfbWF4X2xvbiA9IC0xMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIG1pbmltdW0gbG9uZ2l0dWRlIG9mIGFsbCBtYXJrZXJzCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJF9taW5fbG9uID0gMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtYXggbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21heF9sYXQgPSAtMTAwMDAwMDsKICAgIAogICAgLyoqCiAgICAgKiBtaW4gbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkX21pbl9sYXQgPSAxMDAwMDAwOwogICAgCiAgICAvKioKICAgICAqIGRldGVybWluZXMgaWYgd2Ugc2hvdWxkIHpvb20gdG8gbWluaW11bSBsZXZlbCAoYWJvdmUgdGhpcy0+em9vbSB2YWx1ZSkgdGhhdCB3aWxsIGVuY29tcGFzcyBhbGwgbWFya2VycwogICAgICoKICAgICAqIEB2YXIgYm9vbGVhbgogICAgICovCiAgICB2YXIgJHpvb21fZW5jb21wYXNzID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIGZhY3RvciBieSB3aGljaCB0byBmdWRnZSB0aGUgYm91bmRhcmllcyBzbyB0aGF0IHdoZW4gd2Ugem9vbSBlbmNvbXBhc3MsIHRoZSBtYXJrZXJzIGFyZW4ndCB0b28gY2xvc2UgdG8gdGhlIGVkZ2UKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHZhciAkYm91bmRzX2Z1ZGdlID0gMC4wMTsKCiAgICAvKioKICAgICAqIHVzZSB0aGUgZmlyc3Qgc3VnZ2VzdGlvbiBieSBhIGdvb2dsZSBsb29rdXAgaWYgZXhhY3QgbWF0Y2ggbm90IGZvdW5kCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICB2YXIgJHVzZV9zdWdnZXN0ID0gZmFsc2U7CgogICAgCiAgICAvKioKICAgICAqIGxpc3Qgb2YgYWRkZWQgcG9seWxpbmVzCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJF9wb2x5bGluZXMgPSBhcnJheSgpOyAgICAKICAgIAogICAgLyoqCiAgICAgKiBpY29uIGluZm8gYXJyYXkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHZhciAkX2ljb25zID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIGRhdGFiYXNlIGNhY2hlIHRhYmxlIG5hbWUKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJF9kYl9jYWNoZV90YWJsZSA9ICdHRU9DT0RFUyc7CiAgICAgICAgCiAgICAgICAgCiAgICAvKioKICAgICAqIGNsYXNzIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFwX2lkIHRoZSBpZCBmb3IgdGhpcyBtYXAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFwcF9pZCBZT1VSIFlhaG9vIEFwcCBJRAogICAgICovCiAgICBmdW5jdGlvbiBHb29nbGVNYXBBUEkoJG1hcF9pZCA9ICdtYXAnLCAkYXBwX2lkID0gJ015TWFwQXBwJykgewogICAgICAgICR0aGlzLT5tYXBfaWQgPSAkbWFwX2lkOwogICAgICAgICR0aGlzLT5zaWRlYmFyX2lkID0gJ3NpZGViYXJfJyAuICRtYXBfaWQ7CiAgICAgICAgJHRoaXMtPmFwcF9pZCA9ICRhcHBfaWQ7CiAgICB9CiAgIAogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBQRUFSOjpEQiBkc24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc24KICAgICAqLwogICAgZnVuY3Rpb24gc2V0RFNOKCRkc24pIHsKICAgICAgICAkdGhpcy0+ZHNuID0gJGRzbjsgICAKICAgIH0KICAgCiAgICAvKioKICAgICAqIHNldHMgdGhlIGxhbmd1YWdlIG9uIHRoZSBjb250cm9scwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhbmd1YWdlCiAgICAgKiBTZWUgaHR0cDovL3NwcmVhZHNoZWV0cy5nb29nbGUuY29tL3B1Yj9rZXk9cDlwZHdzYWkyaERNc0xrWHNvTTA1S1EmZ2lkPTEKICAgICAqIGZvciBsaXN0IG9mIGxhbmd1YWdlcwkJICAgICAgCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldExhbmd1YWdlKCRsYW5ndWFnZSkgewogICAgICAgICR0aGlzLT5sYW5ndWFnZSA9ICRsYW5ndWFnZTsgICAKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBzZXRzIFlPVVIgR29vZ2xlIE1hcCBBUEkga2V5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldEFQSUtleSgka2V5KSB7CiAgICAgICAgJHRoaXMtPmFwaV9rZXkgPSAka2V5OyAgIAogICAgfQoKICAgIC8qKgogICAgICogc2V0cyB0aGUgd2lkdGggb2YgdGhlIG1hcAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdpZHRoCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldFdpZHRoKCR3aWR0aCkgewogICAgICAgIGlmKCFwcmVnX21hdGNoKCchXihcZCspKC4qKSQhJywkd2lkdGgsJF9tYXRjaCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgJF93aWR0aCA9ICRfbWF0Y2hbMV07CiAgICAgICAgJF90eXBlID0gJF9tYXRjaFsyXTsKICAgICAgICBpZigkX3R5cGUgPT0gJyUnKQogICAgICAgICAgICAkdGhpcy0+d2lkdGggPSAkX3dpZHRoIC4gJyUnOwogICAgICAgIGVsc2UKICAgICAgICAgICAgJHRoaXMtPndpZHRoID0gJF93aWR0aCAuICdweCc7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBzZXRzIHRoZSBoZWlnaHQgb2YgdGhlIG1hcAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhlaWdodAogICAgICovCiAgICBmdW5jdGlvbiBzZXRIZWlnaHQoJGhlaWdodCkgewogICAgICAgIGlmKCFwcmVnX21hdGNoKCchXihcZCspKC4qKSQhJywkaGVpZ2h0LCRfbWF0Y2gpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgICRfaGVpZ2h0ID0gJF9tYXRjaFsxXTsKICAgICAgICAkX3R5cGUgPSAkX21hdGNoWzJdOwogICAgICAgIGlmKCRfdHlwZSA9PSAnJScpCiAgICAgICAgICAgICR0aGlzLT5oZWlnaHQgPSAkX2hlaWdodCAuICclJzsKICAgICAgICBlbHNlCiAgICAgICAgICAgICR0aGlzLT5oZWlnaHQgPSAkX2hlaWdodCAuICdweCc7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9ICAgICAgICAKCiAgICAvKioKICAgICAqIHNldHMgdGhlIGRlZmF1bHQgbWFwIHpvb20gbGV2ZWwKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsZXZlbAogICAgICovCiAgICBmdW5jdGlvbiBzZXRab29tTGV2ZWwoJGxldmVsKSB7CiAgICAgICAgJHRoaXMtPnpvb20gPSAoaW50KSAkbGV2ZWw7CiAgICB9ICAgIAogICAgICAgICAgICAKICAgIC8qKgogICAgICogZW5hYmxlcyB0aGUgbWFwIGNvbnRyb2xzICh6b29tL21vdmUpCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVNYXBDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+bWFwX2NvbnRyb2xzID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIHRoZSBtYXAgY29udHJvbHMgKHpvb20vbW92ZSkKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVNYXBDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+bWFwX2NvbnRyb2xzID0gZmFsc2U7CiAgICB9ICAgIAogICAgCiAgICAvKioKICAgICAqIHNldHMgdGhlIG1hcCBjb250cm9sIHNpemUgKGxhcmdlL3NtYWxsKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNpemUKICAgICAqLwogICAgZnVuY3Rpb24gc2V0Q29udHJvbFNpemUoJHNpemUpIHsKICAgICAgICBpZihpbl9hcnJheSgkc2l6ZSxhcnJheSgnbGFyZ2UnLCdzbWFsbCcpKSkKICAgICAgICAgICAgJHRoaXMtPmNvbnRyb2xfc2l6ZSA9ICRzaXplOwogICAgfSAgICAgICAgICAgIAoKICAgIC8qKgogICAgICogZW5hYmxlcyB0aGUgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbikKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVR5cGVDb250cm9scygpIHsKICAgICAgICAkdGhpcy0+dHlwZV9jb250cm9scyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyB0aGUgdHlwZSBjb250cm9scyAobWFwL3NhdGVsbGl0ZS9oeWJyaWQvdGVycmFpbikKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVUeXBlQ29udHJvbHMoKSB7CiAgICAgICAgJHRoaXMtPnR5cGVfY29udHJvbHMgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCBkZWZhdWx0IG1hcCB0eXBlIChtYXAvc2F0ZWxsaXRlL2h5YnJpZC90ZXJyYWluKQogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gc2V0TWFwVHlwZSgkdHlwZSkgewogICAgICAgIHN3aXRjaCgkdHlwZSkgewogICAgICAgICAgICBjYXNlICd0ZXJyYWluJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdHX1BIWVNJQ0FMX01BUCc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaHlicmlkJzoKICAgICAgICAgICAgICAgICR0aGlzLT5tYXBfdHlwZSA9ICdHX0hZQlJJRF9NQVAnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3NhdGVsbGl0ZSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bWFwX3R5cGUgPSAnR19TQVRFTExJVEVfTUFQJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdtYXAnOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJHRoaXMtPm1hcF90eXBlID0gJ0dfTk9STUFMX01BUCc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgIAogICAgfSAgICAKICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIG9ubG9hZAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlT25Mb2FkKCkgewogICAgICAgICR0aGlzLT5vbmxvYWQgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgb25sb2FkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlT25Mb2FkKCkgewogICAgICAgICR0aGlzLT5vbmxvYWQgPSBmYWxzZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHNpZGViYXIKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVNpZGViYXIoKSB7CiAgICAgICAgJHRoaXMtPnNpZGViYXIgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgc2lkZWJhcgogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVNpZGViYXIoKSB7CiAgICAgICAgJHRoaXMtPnNpZGViYXIgPSBmYWxzZTsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluc2lkZSBpbmZvIHdpbmRvdwogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlRGlyZWN0aW9ucygpIHsKICAgICAgICAkdGhpcy0+ZGlyZWN0aW9ucyA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBkaXNhYmxlcyBtYXAgZGlyZWN0aW9ucyBpbnNpZGUgaW5mbyB3aW5kb3cKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc2FibGVEaXJlY3Rpb25zKCkgewogICAgICAgICR0aGlzLT5kaXJlY3Rpb25zID0gZmFsc2U7CiAgICB9ICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBzZXQgYnJvd3NlciBhbGVydCBtZXNzYWdlIGZvciBpbmNvbXBhdGlibGUgYnJvd3NlcnMKICAgICAqCiAgICAgKiBAcGFyYW1zICRtZXNzYWdlIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzZXRCcm93c2VyQWxlcnQoJG1lc3NhZ2UpIHsKICAgICAgICAkdGhpcy0+YnJvd3Nlcl9hbGVydCA9ICRtZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogc2V0IDxub3NjcmlwdD4gbWVzc2FnZSB3aGVuIGphdmFzY3JpcHQgaXMgZGlzYWJsZWQKICAgICAqCiAgICAgKiBAcGFyYW1zICRtZXNzYWdlIHN0cmluZwogICAgICovCiAgICBmdW5jdGlvbiBzZXRKU0FsZXJ0KCRtZXNzYWdlKSB7CiAgICAgICAgJHRoaXMtPmpzX2FsZXJ0ID0gJG1lc3NhZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmFibGUgbWFwIG1hcmtlciBpbmZvIHdpbmRvd3MKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlSW5mb1dpbmRvdygpIHsKICAgICAgICAkdGhpcy0+aW5mb193aW5kb3cgPSB0cnVlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIGRpc2FibGUgbWFwIG1hcmtlciBpbmZvIHdpbmRvd3MKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZUluZm9XaW5kb3coKSB7CiAgICAgICAgJHRoaXMtPmluZm9fd2luZG93ID0gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogc2V0IHRoZSBpbmZvIHdpbmRvdyB0cmlnZ2VyIGFjdGlvbgogICAgICoKICAgICAqIEBwYXJhbXMgJG1lc3NhZ2Ugc3RyaW5nIGNsaWNrL21vdXNlb3ZlcgogICAgICovCiAgICBmdW5jdGlvbiBzZXRJbmZvV2luZG93VHJpZ2dlcigkdHlwZSkgewogICAgICAgIHN3aXRjaCgkdHlwZSkgewogICAgICAgICAgICBjYXNlICdtb3VzZW92ZXInOgogICAgICAgICAgICAgICAgJHRoaXMtPndpbmRvd190cmlnZ2VyID0gJ21vdXNlb3Zlcic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICR0aGlzLT53aW5kb3dfdHJpZ2dlciA9ICdjbGljayc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogZW5hYmxlIHpvb20gdXNpbmcgc2Nyb2xsIHdoZWVsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVpvb21TY3JvbGxXaGVlbCgpIHsKICAgICAgICAkdGhpcy0+em9vbV9zY3JvbGx3aGVlbCA9IHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogZGlzYWJsZSB6b29tIHVzaW5nIHNjcm9sbCB3aGVlbAogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlWm9vbVNjcm9sbFdoZWVsKCkgewogICAgICAgICR0aGlzLT56b29tX3Njcm9sbHdoZWVsID0gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBlbmFibGUgem9vbSB0byBlbmNvbXBhc3MgbWFrZXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVuYWJsZVpvb21FbmNvbXBhc3MoKSB7CiAgICAgICAgJHRoaXMtPnpvb21fZW5jb21wYXNzID0gdHJ1ZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBkaXNhYmxlIHpvb20gdG8gZW5jb21wYXNzIG1ha2VycwogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlWm9vbUVuY29tcGFzcygpIHsKICAgICAgICAkdGhpcy0+em9vbV9lbmNvbXBhc3MgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCB0aGUgYm91bmRhcnkgZnVkZ2UgZmFjdG9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldEJvdW5kc0Z1ZGdlKCR2YWwpIHsKICAgICAgICAkdGhpcy0+Ym91bmRzX2Z1ZGdlID0gJHZhbDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBlbmFibGVzIHRoZSBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZW5hYmxlU2NhbGVDb250cm9sKCkgewogICAgICAgICR0aGlzLT5zY2FsZV9jb250cm9sID0gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIGRpc2FibGVzIHRoZSBzY2FsZSBtYXAgY29udHJvbAogICAgICoKICAgICAqLwogICAgZnVuY3Rpb24gZGlzYWJsZVNjYWxlQ29udHJvbCgpIHsKICAgICAgICAkdGhpcy0+c2NhbGVfY29udHJvbCA9IGZhbHNlOwogICAgfSAgICAKICAgICAgICAgICAgCiAgICAvKioKICAgICAqIGVuYWJsZXMgdGhlIG92ZXJ2aWV3IG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBlbmFibGVPdmVydmlld0NvbnRyb2woKSB7CiAgICAgICAgJHRoaXMtPm92ZXJ2aWV3X2NvbnRyb2wgPSB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogZGlzYWJsZXMgdGhlIG92ZXJ2aWV3IG1hcCBjb250cm9sCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBkaXNhYmxlT3ZlcnZpZXdDb250cm9sKCkgewogICAgICAgICR0aGlzLT5vdmVydmlld19jb250cm9sID0gZmFsc2U7CiAgICAgfSAgICAKICAgIAogICAgCiAgICAvKioKICAgICAqIHNldCB0aGUgbG9va3VwIHNlcnZpY2UgdG8gdXNlIGZvciBnZW9jb2RlIGxvb2t1cHMKICAgICAqIGRlZmF1bHQgaXMgWUFIT08sIHlvdSBjYW4gYWxzbyB1c2UgR09PR0xFLgogICAgICogTk9URTogR09PR0xFIGNhbiB0byBpbnRsIGxvb2t1cHMsIGJ1dCBpcyBub3QgYW4KICAgICAqIG9mZmljaWFsIEFQSSwgc28gdXNlIGF0IHlvdXIgb3duIHJpc2suCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiBzZXRMb29rdXBTZXJ2aWNlKCRzZXJ2aWNlKSB7CiAgICAgICAgc3dpdGNoKCRzZXJ2aWNlKSB7CiAgICAgICAgICAgIGNhc2UgJ0dPT0dMRSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnR09PR0xFJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdZQUhPTyc6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9va3VwX3NlcnZpY2UgPSAnWUFIT08nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAgICAgICAKICAgIH0KICAgIAogICAgICAgIAogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBhZGRyZXNzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MgdGhlIG1hcCBhZGRyZXNzIHRvIG1hcmsgKHN0cmVldC9jaXR5L3N0YXRlL3ppcCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIHRoZSB0aXRsZSBkaXNwbGF5IGluIHRoZSBzaWRlYmFyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sIHRoZSBIVE1MIGJsb2NrIHRvIGRpc3BsYXkgaW4gdGhlIGluZm8gYnViYmxlIChpZiBlbXB0eSwgdGl0bGUgaXMgdXNlZCkKICAgICAqLwogICAgZnVuY3Rpb24gYWRkTWFya2VyQnlBZGRyZXNzKCRhZGRyZXNzLCR0aXRsZSA9ICcnLCRodG1sID0gJycsJHRvb2x0aXAgPSAnJykgewogICAgICAgIGlmKCgkX2dlb2NvZGUgPSAkdGhpcy0+Z2V0R2VvY29kZSgkYWRkcmVzcykpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAkdGhpcy0+YWRkTWFya2VyQnlDb29yZHMoJF9nZW9jb2RlWydsb24nXSwkX2dlb2NvZGVbJ2xhdCddLCR0aXRsZSwkaHRtbCwkdG9vbHRpcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBhZGRzIGEgbWFwIG1hcmtlciBieSBnZW9jb2RlCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbiB0aGUgbWFwIGxvbmdpdHVkZSAoaG9yaXpvbnRhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhdCB0aGUgbWFwIGxhdGl0dWRlICh2ZXJ0aWNhbCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlIHRoZSB0aXRsZSBkaXNwbGF5IGluIHRoZSBzaWRlYmFyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sfGFycmF5ICRodG1sIAogICAgICogICAgIHN0cmluZzogdGhlIEhUTUwgYmxvY2sgdG8gZGlzcGxheSBpbiB0aGUgaW5mbyBidWJibGUgKGlmIGVtcHR5LCB0aXRsZSBpcyB1c2VkKQogICAgICogICAgIGFycmF5OiBUaGUgdGl0bGUgPT4gY29udGVudCBwYWlycyBmb3IgYSB0YWJiZWQgaW5mbyBidWJibGUgICAgIAogICAgICovCiAgICAvLyBUT0RPIG1ha2UgaXQgc28geW91IGNhbiBzcGVjaWZ5IHdoaWNoIHRhYiB5b3Ugd2FudCB0aGUgZGlyZWN0aW9ucyB0byBhcHBlYXIgaW4gKGFkZCBhbm90aGVyIGFyZykKICAgIGZ1bmN0aW9uIGFkZE1hcmtlckJ5Q29vcmRzKCRsb24sJGxhdCwkdGl0bGUgPSAnJywkaHRtbCA9ICcnLCR0b29sdGlwID0gJycpIHsKICAgICAgICAkX21hcmtlclsnbG9uJ10gPSAkbG9uOwogICAgICAgICRfbWFya2VyWydsYXQnXSA9ICRsYXQ7CiAgICAgICAgJF9tYXJrZXJbJ2h0bWwnXSA9IChpc19hcnJheSgkaHRtbCkgfHwgc3RybGVuKCRodG1sKSA+IDApID8gJGh0bWwgOiAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3RpdGxlJ10gPSAkdGl0bGU7CiAgICAgICAgJF9tYXJrZXJbJ3Rvb2x0aXAnXSA9ICR0b29sdGlwOwogICAgICAgICR0aGlzLT5fbWFya2Vyc1tdID0gJF9tYXJrZXI7CiAgICAgICAgJHRoaXMtPmFkanVzdENlbnRlckNvb3JkcygkX21hcmtlclsnbG9uJ10sJF9tYXJrZXJbJ2xhdCddKTsKICAgICAgICAvLyByZXR1cm4gaW5kZXggb2YgbWFya2VyCiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fbWFya2VycykgLSAxOwogICAgfQoKICAgIC8qKgogICAgICogYWRkcyBhIG1hcCBwb2x5bGluZSBieSBhZGRyZXNzCiAgICAgKiBpZiBjb2xvciwgd2VpZ2h0IGFuZCBvcGFjaXR5IGFyZSBub3QgZGVmaW5lZCwgdXNlIHRoZSBnb29nbGUgbWFwcyBkZWZhdWx0cwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzMSB0aGUgbWFwIGFkZHJlc3MgdG8gZHJhdyBmcm9tCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzMiB0aGUgbWFwIGFkZHJlc3MgdG8gZHJhdyB0bwogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKICAgICAqLwogICAgZnVuY3Rpb24gYWRkUG9seUxpbmVCeUFkZHJlc3MoJGFkZHJlc3MxLCRhZGRyZXNzMiwkY29sb3I9JycsJHdlaWdodD0wLCRvcGFjaXR5PTApIHsKICAgICAgICBpZigoJF9nZW9jb2RlMSA9ICR0aGlzLT5nZXRHZW9jb2RlKCRhZGRyZXNzMSkpID09PSBmYWxzZSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKCgkX2dlb2NvZGUyID0gJHRoaXMtPmdldEdlb2NvZGUoJGFkZHJlc3MyKSkgPT09IGZhbHNlKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGRQb2x5TGluZUJ5Q29vcmRzKCRfZ2VvY29kZTFbJ2xvbiddLCRfZ2VvY29kZTFbJ2xhdCddLCRfZ2VvY29kZTJbJ2xvbiddLCRfZ2VvY29kZTJbJ2xhdCddLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KTsKICAgIH0KCiAgICAvKioKICAgICAqIGFkZHMgYSBtYXAgcG9seWxpbmUgYnkgbWFwIGNvb3JkaW5hdGVzCiAgICAgKiBpZiBjb2xvciwgd2VpZ2h0IGFuZCBvcGFjaXR5IGFyZSBub3QgZGVmaW5lZCwgdXNlIHRoZSBnb29nbGUgbWFwcyBkZWZhdWx0cwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb24xIHRoZSBtYXAgbG9uZ2l0dWRlIHRvIGRyYXcgZnJvbQogICAgICogQHBhcmFtIHN0cmluZyAkbGF0MSB0aGUgbWFwIGxhdGl0dWRlIHRvIGRyYXcgZnJvbQogICAgICogQHBhcmFtIHN0cmluZyAkbG9uMiB0aGUgbWFwIGxvbmdpdHVkZSB0byBkcmF3IHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQyIHRoZSBtYXAgbGF0aXR1ZGUgdG8gZHJhdyB0bwogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgdGhlIGNvbG9yIG9mIHRoZSBsaW5lIChmb3JtYXQ6ICMwMDAwMDApCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3ZWlnaHQgdGhlIHdlaWdodCBvZiB0aGUgbGluZSBpbiBwaXhlbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wYWNpdHkgdGhlIGxpbmUgb3BhY2l0eSAocGVyY2VudGFnZSkKICAgICAqLwogICAgZnVuY3Rpb24gYWRkUG9seUxpbmVCeUNvb3JkcygkbG9uMSwkbGF0MSwkbG9uMiwkbGF0MiwkY29sb3I9JycsJHdlaWdodD0wLCRvcGFjaXR5PTApIHsKICAgICAgICAkX3BvbHlsaW5lWydsb24xJ10gPSAkbG9uMTsKICAgICAgICAkX3BvbHlsaW5lWydsYXQxJ10gPSAkbGF0MTsKICAgICAgICAkX3BvbHlsaW5lWydsb24yJ10gPSAkbG9uMjsKICAgICAgICAkX3BvbHlsaW5lWydsYXQyJ10gPSAkbGF0MjsKICAgICAgICAkX3BvbHlsaW5lWydjb2xvciddID0gJGNvbG9yOwogICAgICAgICRfcG9seWxpbmVbJ3dlaWdodCddID0gJHdlaWdodDsKICAgICAgICAkX3BvbHlsaW5lWydvcGFjaXR5J10gPSAkb3BhY2l0eTsKICAgICAgICAkdGhpcy0+X3BvbHlsaW5lc1tdID0gJF9wb2x5bGluZTsKICAgICAgICAkdGhpcy0+YWRqdXN0Q2VudGVyQ29vcmRzKCRfcG9seWxpbmVbJ2xvbjEnXSwkX3BvbHlsaW5lWydsYXQxJ10pOwogICAgICAgICR0aGlzLT5hZGp1c3RDZW50ZXJDb29yZHMoJF9wb2x5bGluZVsnbG9uMiddLCRfcG9seWxpbmVbJ2xhdDInXSk7CiAgICAgICAgLy8gcmV0dXJuIGluZGV4IG9mIHBvbHlsaW5lCiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5fcG9seWxpbmVzKSAtIDE7CiAgICB9ICAgICAgICAKICAgICAgICAKICAgIC8qKgogICAgICogYWRqdXN0IG1hcCBjZW50ZXIgY29vcmRpbmF0ZXMgYnkgdGhlIGdpdmVuIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkanVzdENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICBpZihzdHJsZW4oKHN0cmluZykkbG9uKSA9PSAwIHx8IHN0cmxlbigoc3RyaW5nKSRsYXQpID09IDApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAkdGhpcy0+X21heF9sb24gPSAoZmxvYXQpIG1heCgkbG9uLCAkdGhpcy0+X21heF9sb24pOwogICAgICAgICR0aGlzLT5fbWluX2xvbiA9IChmbG9hdCkgbWluKCRsb24sICR0aGlzLT5fbWluX2xvbik7CiAgICAgICAgJHRoaXMtPl9tYXhfbGF0ID0gKGZsb2F0KSBtYXgoJGxhdCwgJHRoaXMtPl9tYXhfbGF0KTsKICAgICAgICAkdGhpcy0+X21pbl9sYXQgPSAoZmxvYXQpIG1pbigkbGF0LCAkdGhpcy0+X21pbl9sYXQpOwogICAgICAgIAogICAgICAgICR0aGlzLT5jZW50ZXJfbG9uID0gKGZsb2F0KSAoJHRoaXMtPl9taW5fbG9uICsgJHRoaXMtPl9tYXhfbG9uKSAvIDI7CiAgICAgICAgJHRoaXMtPmNlbnRlcl9sYXQgPSAoZmxvYXQpICgkdGhpcy0+X21pbl9sYXQgKyAkdGhpcy0+X21heF9sYXQpIC8gMjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIHNldCBtYXAgY2VudGVyIGNvb3JkaW5hdGVzIHRvIGxhdC9sb24gcG9pbnQKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkbG9uIHRoZSBtYXAgbGF0aXR1ZGUgKGhvcml6b250YWwpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYXQgdGhlIG1hcCBsYXRpdHVkZSAodmVydGljYWwpCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldENlbnRlckNvb3JkcygkbG9uLCRsYXQpIHsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xhdCA9IChmbG9hdCkgJGxhdDsKICAgICAgICAkdGhpcy0+Y2VudGVyX2xvbiA9IChmbG9hdCkgJGxvbjsKICAgIH0gICAgCgogICAgLyoqCiAgICAgKiBnZW5lcmF0ZSBhbiBhcnJheSBvZiBwYXJhbXMgZm9yIGEgbmV3IG1hcmtlciBpY29uIGltYWdlCiAgICAgKiBpY29uU2hhZG93SW1hZ2UgaXMgb3B0aW9uYWwKICAgICAqIElmIGFuY2hvciBjb29yZHMgYXJlIG5vdCBzdXBwbGllZCwgd2UgdXNlIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGltYWdlIGJ5IGRlZmF1bHQuIAogICAgICogQ2FuIGJlIGNhbGxlZCBzdGF0aWNhbGx5LiBGb3IgcHJpdmF0ZSB1c2UgYnkgYWRkTWFya2VySWNvbigpIGFuZCBzZXRNYXJrZXJJY29uKCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uSW1hZ2UgVVJMIHRvIGljb24gaW1hZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb25TaGFkb3dJbWFnZSBVUkwgdG8gc2hhZG93IGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpY29uQW5jaG9yWSBZIGNvb3JkaW5hdGUgZm9yIGljb24gYW5jaG9yIHBvaW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvV2luZG93QW5jaG9yWCBYIGNvb3JkaW5hdGUgZm9yIGluZm8gd2luZG93IGFuY2hvciBwb2ludAogICAgICogQHBhcmFtIHN0cmluZyAkaW5mb1dpbmRvd0FuY2hvclkgWSBjb29yZGluYXRlIGZvciBpbmZvIHdpbmRvdyBhbmNob3IgcG9pbnQKICAgICAqLwogICAgZnVuY3Rpb24gY3JlYXRlTWFya2VySWNvbigkaWNvbkltYWdlLCRpY29uU2hhZG93SW1hZ2UgPSAnJywkaWNvbkFuY2hvclggPSAneCcsJGljb25BbmNob3JZID0gJ3gnLCRpbmZvV2luZG93QW5jaG9yWCA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclkgPSAneCcpIHsKICAgICAgICAkX2ljb25faW1hZ2VfcGF0aCA9IHN0cnBvcygkaWNvbkltYWdlLCdodHRwJykgPT09IDAgPyAkaWNvbkltYWdlIDogJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICRpY29uSW1hZ2U7CiAgICAgICAgaWYoISgkX2ltYWdlX2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRfaWNvbl9pbWFnZV9wYXRoKSkpIHsKICAgICAgICAgICAgZGllKCdHb29nbGVNYXBBUEk6Y3JlYXRlTWFya2VySWNvbjogRXJyb3IgcmVhZGluZyBpbWFnZTogJyAuICRpY29uSW1hZ2UpOyAgIAogICAgICAgIH0KICAgICAgICBpZigkaWNvblNoYWRvd0ltYWdlKSB7CiAgICAgICAgICAgICRfc2hhZG93X2ltYWdlX3BhdGggPSBzdHJwb3MoJGljb25TaGFkb3dJbWFnZSwnaHR0cCcpID09PSAwID8gJGljb25TaGFkb3dJbWFnZSA6ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAkaWNvblNoYWRvd0ltYWdlOwogICAgICAgICAgICBpZighKCRfc2hhZG93X2luZm8gPSBAZ2V0aW1hZ2VzaXplKCRfc2hhZG93X2ltYWdlX3BhdGgpKSkgewogICAgICAgICAgICAgICAgZGllKCdHb29nbGVNYXBBUEk6Y3JlYXRlTWFya2VySWNvbjogRXJyb3IgcmVhZGluZyBpbWFnZTogJyAuICRpY29uU2hhZG93SW1hZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmKCRpY29uQW5jaG9yWCA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpY29uQW5jaG9yWCA9IChpbnQpICgkX2ltYWdlX2luZm9bMF0gLyAyKTsKICAgICAgICB9CiAgICAgICAgaWYoJGljb25BbmNob3JZID09PSAneCcpIHsKICAgICAgICAgICAgJGljb25BbmNob3JZID0gKGludCkgKCRfaW1hZ2VfaW5mb1sxXSAvIDIpOwogICAgICAgIH0KICAgICAgICBpZigkaW5mb1dpbmRvd0FuY2hvclggPT09ICd4JykgewogICAgICAgICAgICAkaW5mb1dpbmRvd0FuY2hvclggPSAoaW50KSAoJF9pbWFnZV9pbmZvWzBdIC8gMik7CiAgICAgICAgfQogICAgICAgIGlmKCRpbmZvV2luZG93QW5jaG9yWSA9PT0gJ3gnKSB7CiAgICAgICAgICAgICRpbmZvV2luZG93QW5jaG9yWSA9IChpbnQpICgkX2ltYWdlX2luZm9bMV0gLyAyKTsKICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICRpY29uX2luZm8gPSBhcnJheSgKICAgICAgICAgICAgICAgICdpbWFnZScgPT4gJGljb25JbWFnZSwKICAgICAgICAgICAgICAgICdpY29uV2lkdGgnID0+ICRfaW1hZ2VfaW5mb1swXSwKICAgICAgICAgICAgICAgICdpY29uSGVpZ2h0JyA9PiAkX2ltYWdlX2luZm9bMV0sCiAgICAgICAgICAgICAgICAnaWNvbkFuY2hvclgnID0+ICRpY29uQW5jaG9yWCwKICAgICAgICAgICAgICAgICdpY29uQW5jaG9yWScgPT4gJGljb25BbmNob3JZLAogICAgICAgICAgICAgICAgJ2luZm9XaW5kb3dBbmNob3JYJyA9PiAkaW5mb1dpbmRvd0FuY2hvclgsCiAgICAgICAgICAgICAgICAnaW5mb1dpbmRvd0FuY2hvclknID0+ICRpbmZvV2luZG93QW5jaG9yWQogICAgICAgICAgICAgICAgKTsKICAgICAgICBpZigkaWNvblNoYWRvd0ltYWdlKSB7CiAgICAgICAgICAgICRpY29uX2luZm8gPSBhcnJheV9tZXJnZSgkaWNvbl9pbmZvLCBhcnJheSgnc2hhZG93JyA9PiAkaWNvblNoYWRvd0ltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYWRvd1dpZHRoJyA9PiAkX3NoYWRvd19pbmZvWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYWRvd0hlaWdodCcgPT4gJF9zaGFkb3dfaW5mb1sxXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGljb25faW5mbzsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBzZXQgdGhlIG1hcmtlciBpY29uIGZvciBBTEwgbWFya2VycyBvbiB0aGUgbWFwCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNldE1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlID0gJycsJGljb25BbmNob3JYID0gJ3gnLCRpY29uQW5jaG9yWSA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclggPSAneCcsJGluZm9XaW5kb3dBbmNob3JZID0gJ3gnKSB7CiAgICAgICAgJHRoaXMtPl9pY29ucyA9IGFycmF5KCR0aGlzLT5jcmVhdGVNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSwkaWNvbkFuY2hvclgsJGljb25BbmNob3JZLCRpbmZvV2luZG93QW5jaG9yWCwkaW5mb1dpbmRvd0FuY2hvclkpKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBhZGQgYW4gaWNvbiB0byBnbyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nbHkgYWRkZWQgbWFya2VyCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZE1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlID0gJycsJGljb25BbmNob3JYID0gJ3gnLCRpY29uQW5jaG9yWSA9ICd4JywkaW5mb1dpbmRvd0FuY2hvclggPSAneCcsJGluZm9XaW5kb3dBbmNob3JZID0gJ3gnKSB7CiAgICAgICAgJHRoaXMtPl9pY29uc1tdID0gJHRoaXMtPmNyZWF0ZU1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSk7CiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5faWNvbnMpIC0gMTsKICAgIH0KCiAgICAvKioKICAgICAqIHByaW50IG1hcCBoZWFkZXIgamF2YXNjcmlwdCAoZ29lcyBiZXR3ZWVuIDxoZWFkPjwvaGVhZD4pCiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gcHJpbnRIZWFkZXJKUygpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRIZWFkZXJKUygpOyAgIAogICAgfQogICAgCiAgICAvKioKICAgICAqIHJldHVybiBtYXAgaGVhZGVyIGphdmFzY3JpcHQgKGdvZXMgYmV0d2VlbiA8aGVhZD48L2hlYWQ+KQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEhlYWRlckpTKCkgewogICAgCQlpZiAoaXNzZXQoJHRoaXMtPmxhbmd1YWdlKSkKICAgIAkJewoJICAgICAgICByZXR1cm4gc3ByaW50ZignPHNjcmlwdCBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9maWxlPWFwaSZhbXA7dj0yJmFtcDtrZXk9JXMmYW1wO2hsPSVzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4nLCAkdGhpcy0+YXBpX2tleSwgJHRoaXMtPmxhbmd1YWdlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCSAgICAgICAgcmV0dXJuIHNwcmludGYoJzxzY3JpcHQgc3JjPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/ZmlsZT1hcGkmYW1wO3Y9MiZhbXA7a2V5PSVzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4nLCAkdGhpcy0+YXBpX2tleSk7CgkJCQl9CiAgICB9ICAgIAogICAgCiAgIC8qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAqIHByaW50cyBvbkxvYWQoKSB3aXRob3V0IGhhdmluZyB0byBtYW5pcHVsYXRlIGJvZHkgdGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgKiBjYWxsIHRoaXMgYWZ0ZXIgdGhlIHByaW50IG1hcCBsaWtlIHNvLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICogICAgICAkbWFwLT5wcmludE1hcCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAqICAgICAgJG1hcC0+cHJpbnRPbkxvYWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGZ1bmN0aW9uIHByaW50T25Mb2FkKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldE9uTG9hZCgpOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJuIGpzIHRvIHNldCBvbmxvYWQgZnVuY3Rpb24KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0T25Mb2FkKCkgewogICAgICAgIHJldHVybiAnPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+d2luZG93Lm9ubG9hZD1vbkxvYWQ7PC9zY3JpcHQ+JzsgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQoKICAgIC8qKgogICAgICogcHJpbnQgbWFwIGphdmFzY3JpcHQgKHB1dCBqdXN0IGJlZm9yZSA8L2JvZHk+LCBvciBpbiA8aGVhZGVyPiBpZiB1c2luZyBvbkxvYWQoKSkKICAgICAqIAogICAgICovCiAgICBmdW5jdGlvbiBwcmludE1hcEpTKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldE1hcEpTKCk7CiAgICB9ICAgIAoKICAgIC8qKgogICAgICogcmV0dXJuIG1hcCBqYXZhc2NyaXB0CiAgICAgKiAKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0TWFwSlMoKSB7CiAgICAgICAgJF9vdXRwdXQgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnLy88IVtDREFUQVsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIENyZWF0ZWQgd2l0aCBHb29nbGVNYXBBUEkgIiAuICR0aGlzLT5fdmVyc2lvbiAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gIiAqIEF1dGhvcjogTW9udGUgT2hydCA8bW9udGUgQVQgb2hydCBET1QgY29tPlxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogQ29weXJpZ2h0IDIwMDUtMjAwNiBOZXcgRGlnaXRhbCBHcm91cFxuIjsKICAgICAgICAkX291dHB1dCAuPSAiICogaHR0cDovL3d3dy5waHBpbnNpZGVyLmNvbS9waHAvY29kZS9Hb29nbGVNYXBBUEkvXG4iOwogICAgICAgICRfb3V0cHV0IC49ICIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiI7CgogICAgICAgICRfb3V0cHV0IC49ICd2YXIgcG9pbnRzID0gW107JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBtYXJrZXJzID0gW107JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciBjb3VudGVyID0gMDsnIC4gIlxuIjsKICAgICAgICBpZigkdGhpcy0+c2lkZWJhcikgeyAgICAgICAgCiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgc2lkZWJhcl9odG1sID0gIiI7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgbWFya2VyX2h0bWwgPSBbXTsnIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgIGlmKCR0aGlzLT5kaXJlY3Rpb25zKSB7ICAgICAgICAKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ3ZhciB0b19odG1scyA9IFtdOycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAndmFyIGZyb21faHRtbHMgPSBbXTsnIC4gIlxuIjsKICAgICAgICB9ICAgICAgICAKCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5faWNvbnMpKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgaWNvbiA9IFtdOycgLiAiXG4iOwogICAgICAgICAgICBmb3IoJGkgPSAwLCAkaiA9IGNvdW50KCR0aGlzLT5faWNvbnMpOyAkaTwkajsgJGkrKykgewogICAgICAgICAgICAgICAgJGluZm8gPSAkdGhpcy0+X2ljb25zWyRpXTsKCiAgICAgICAgICAgICAgICAvLyBoYXNoIHRoZSBpY29uIGRhdGEgdG8gc2VlIGlmIHdlJ3ZlIGFscmVhZHkgZ290IHRoaXMgb25lOyBpZiBzbywgc2F2ZSBzb21lIGphdmFzY3JpcHQKICAgICAgICAgICAgICAgICRpY29uX2tleSA9IG1kNShzZXJpYWxpemUoJGluZm8pKTsKICAgICAgICAgICAgICAgIGlmKCFpc3NldCgkZXhpc3RfaWNuWyRpY29uX2tleV0pKSB7CgogICAgICAgICAgICAgICAgICAgICRfb3V0cHV0IC49ICJpY29uWyRpXSA9IG5ldyBHSWNvbigpO1xuIjsgICAKICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5pbWFnZSA9ICIlcyI7JywkaSwkaW5mb1snaW1hZ2UnXSkgLiAiXG4iOyAgIAogICAgICAgICAgICAgICAgICAgIGlmKCRpbmZvWydzaGFkb3cnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5zaGFkb3cgPSAiJXMiOycsJGksJGluZm9bJ3NoYWRvdyddKSAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2ljb25bJXNdLnNoYWRvd1NpemUgPSBuZXcgR1NpemUoJXMsJXMpOycsJGksJGluZm9bJ3NoYWRvd1dpZHRoJ10sJGluZm9bJ3NoYWRvd0hlaWdodCddKSAuICJcbiI7ICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2ljb25bJXNdLmljb25TaXplID0gbmV3IEdTaXplKCVzLCVzKTsnLCRpLCRpbmZvWydpY29uV2lkdGgnXSwkaW5mb1snaWNvbkhlaWdodCddKSAuICJcbiI7ICAgCiAgICAgICAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignaWNvblslc10uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoJXMsJXMpOycsJGksJGluZm9bJ2ljb25BbmNob3JYJ10sJGluZm9bJ2ljb25BbmNob3JZJ10pIC4gIlxuIjsgICAKICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdpY29uWyVzXS5pbmZvV2luZG93QW5jaG9yID0gbmV3IEdQb2ludCglcywlcyk7JywkaSwkaW5mb1snaW5mb1dpbmRvd0FuY2hvclgnXSwkaW5mb1snaW5mb1dpbmRvd0FuY2hvclknXSkgLiAiXG4iOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkX291dHB1dCAuPSAiaWNvblskaV0gPSBpY29uWyRleGlzdF9pY25bJGljb25fa2V5XV07XG4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkX291dHB1dCAuPSAndmFyIG1hcCA9IG51bGw7JyAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGlmKCR0aGlzLT5vbmxvYWQpIHsKICAgICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gb25Mb2FkKCkgeycgLiAiXG4iOyAgIAogICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+YnJvd3Nlcl9hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2lmIChHQnJvd3NlcklzQ29tcGF0aWJsZSgpKSB7JyAuICJcbiI7CiAgICAgICAgfQoKICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCd2YXIgbWFwT2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiVzIik7JywkdGhpcy0+bWFwX2lkKSAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ2lmIChtYXBPYmogIT0gInVuZGVmaW5lZCIgJiYgbWFwT2JqICE9IG51bGwpIHsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdtYXAgPSBuZXcgR01hcDIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiVzIikpOycsJHRoaXMtPm1hcF9pZCkgLiAiXG4iOwoKICAgICAgICBpZihpc3NldCgkdGhpcy0+Y2VudGVyX2xhdCkgJiYgaXNzZXQoJHRoaXMtPmNlbnRlcl9sb24pKSB7CgkJCS8vIFNwZWNpYWwgY2FyZSBmb3IgZGVjaW1hbCBwb2ludCBpbiBsb24gYW5kIGxhdCwgd291bGQgZ2V0IGxvc3QgaWYgIndyb25nIiBsb2NhbGUgaXMgc2V0OyBhcHBsaWVzIHRvIChzKXByaW50ZiBvbmx5CgkJCSRfb3V0cHV0IC49IHNwcmludGYoJ21hcC5zZXRDZW50ZXIobmV3IEdMYXRMbmcoJXMsICVzKSwgJWQsICVzKTsnLCBudW1iZXJfZm9ybWF0KCR0aGlzLT5jZW50ZXJfbGF0LCA2LCAiLiIsICIiKSwgbnVtYmVyX2Zvcm1hdCgkdGhpcy0+Y2VudGVyX2xvbiwgNiwgIi4iLCAiIiksICR0aGlzLT56b29tLCAkdGhpcy0+bWFwX3R5cGUpIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgLy8kX291dHB1dCAuPSAnbWFwLnNldFVJVG9EZWZhdWx0KCk7JyAuICJcbiI7CiAgICAgICAKICAgICAgICAvLyB6b29tIHNvIHRoYXQgYWxsIG1hcmtlcnMgYXJlIGluIHRoZSB2aWV3cG9ydAogICAgICAgIGlmKCR0aGlzLT56b29tX2VuY29tcGFzcyAmJiBjb3VudCgkdGhpcy0+X21hcmtlcnMpID4gMSkgewogICAgICAgICAgICAvLyBpbmNyZWFzZSBib3VuZHMgYnkgZnVkZ2UgZmFjdG9yIHRvIGtlZXAKICAgICAgICAgICAgLy8gbWFya2VycyBhd2F5IGZyb20gdGhlIGVkZ2VzCiAgICAgICAgICAgICRfbGVuX2xvbiA9ICR0aGlzLT5fbWF4X2xvbiAtICR0aGlzLT5fbWluX2xvbjsKICAgICAgICAgICAgJF9sZW5fbGF0ID0gJHRoaXMtPl9tYXhfbGF0IC0gJHRoaXMtPl9taW5fbGF0OwogICAgICAgICAgICAkdGhpcy0+X21pbl9sb24gLT0gJF9sZW5fbG9uICogJHRoaXMtPmJvdW5kc19mdWRnZTsKICAgICAgICAgICAgJHRoaXMtPl9tYXhfbG9uICs9ICRfbGVuX2xvbiAqICR0aGlzLT5ib3VuZHNfZnVkZ2U7CiAgICAgICAgICAgICR0aGlzLT5fbWluX2xhdCAtPSAkX2xlbl9sYXQgKiAkdGhpcy0+Ym91bmRzX2Z1ZGdlOwogICAgICAgICAgICAkdGhpcy0+X21heF9sYXQgKz0gJF9sZW5fbGF0ICogJHRoaXMtPmJvdW5kc19mdWRnZTsKCiAgICAgICAgICAgICRfb3V0cHV0IC49ICJ2YXIgYmRzID0gbmV3IEdMYXRMbmdCb3VuZHMobmV3IEdMYXRMbmcoJHRoaXMtPl9taW5fbGF0LCAkdGhpcy0+X21pbl9sb24pLCBuZXcgR0xhdExuZygkdGhpcy0+X21heF9sYXQsICR0aGlzLT5fbWF4X2xvbikpO1xuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5zZXRab29tKG1hcC5nZXRCb3VuZHNab29tTGV2ZWwoYmRzKSk7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICd2YXIgY3VzdG9tVUkgPSBtYXAuZ2V0RGVmYXVsdFVJKCk7Jy4iXG4iOwoKICAgICAgICBpZigkdGhpcy0+c2NhbGVfY29udHJvbCkgewogICAgICAgICAgICAkX291dHB1dCAuPSAnY3VzdG9tVUkuY29udHJvbHMuc2NhbGVjb250cm9sID0gdHJ1ZTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5zY2FsZWNvbnRyb2wgPSBmYWxzZTsnIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgIGlmKCR0aGlzLT5tYXBfY29udHJvbHMpIHsKICAgICAgICAgIGlmKCR0aGlzLT5jb250cm9sX3NpemUgPT0gJ2xhcmdlJykgewogICAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5zbWFsbHpvb21jb250cm9sM2QgPSBmYWxzZTsnIC4gIlxuIjsKICAgICAgICAgICAgICAkX291dHB1dCAuPSAnY3VzdG9tVUkuY29udHJvbHMubGFyZ2VtYXBjb250cm9sM2QgPSB0cnVlOycgLiAiXG4iOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLmNvbnRyb2xzLnNtYWxsem9vbWNvbnRyb2wzZCA9IHRydWU7JyAuICJcbiI7CiAgICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLmNvbnRyb2xzLmxhcmdlbWFwY29udHJvbDNkID0gZmFsc2U7JyAuICJcbiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CgkJCQkJJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLmNvbnRyb2xzLnNtYWxsem9vbWNvbnRyb2wzZCA9IGZhbHNlOycgLiAiXG4iOwoJCQkJCSRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5sYXJnZW1hcGNvbnRyb2wzZCA9IGZhbHNlOycgLiAiXG4iOwoJCQkJfQogICAgICAgIGlmKCR0aGlzLT56b29tX3Njcm9sbHdoZWVsKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS56b29tLnNjcm9sbHdoZWVsID0gdHJ1ZTsnIC4gIlxuIjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2N1c3RvbVVJLnpvb20uc2Nyb2xsd2hlZWwgPSBmYWxzZTsnIC4gIlxuIjsKCQkJCX0KCQkJCWlmKCR0aGlzLT50eXBlX2NvbnRyb2xzKSB7CiAgICAgICAgICAgIC8vJF9vdXRwdXQgLj0gJ21hcC5hZGRDb250cm9sKG5ldyBHTWFwVHlwZUNvbnRyb2woKSk7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5tYXB0eXBlY29udHJvbCA9IHRydWU7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdjdXN0b21VSS5jb250cm9scy5tYXB0eXBlY29udHJvbCA9IGZhbHNlOycgLiAiXG4iOwoJCQkJfQogICAgICAgICRfb3V0cHV0IC49ICdtYXAuc2V0VUkoY3VzdG9tVUkpOycuIlxuIjsgICAgICAgIAoKICAgICAgICBpZigkdGhpcy0+b3ZlcnZpZXdfY29udHJvbCkgewogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFwLmFkZENvbnRyb2wobmV3IEdPdmVydmlld01hcENvbnRyb2woKSk7JyAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICR0aGlzLT5nZXRBZGRNYXJrZXJzSlMoKTsKCiAgICAgICAgJF9vdXRwdXQgLj0gJHRoaXMtPmdldFBvbHlsaW5lSlMoKTsKIAogICAgICAgIGlmKCR0aGlzLT5zaWRlYmFyKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIlcyIpLmlubmVySFRNTCA9ICI8dWwgY2xhc3M9XCJnbWFwU2lkZWJhclwiPiIrIHNpZGViYXJfaHRtbCArIjxcL3VsPiI7JywgJHRoaXMtPnNpZGViYXJfaWQpIC4gIlxuIjsKICAgICAgICB9CgogICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7ICAgICAgICAKICAgICAgIAogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+YnJvd3Nlcl9hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30gZWxzZSB7JyAuICJcbiI7CgkJCSRfb3V0cHV0IC49ICdhbGVydCgiJyAuIHN0cl9yZXBsYWNlKCciJywnXCInLCR0aGlzLT5icm93c2VyX2FsZXJ0KSAuICciKTsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgCgogICAgICAgIGlmKCR0aGlzLT5vbmxvYWQpIHsKICAgICAgICAgICAkX291dHB1dCAuPSAnfScgLiAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJF9vdXRwdXQgLj0gJHRoaXMtPmdldENyZWF0ZU1hcmtlckpTKCk7CgogICAgICAgIC8vIFV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0YWJiZWQgYW5kIG5vbi10YWJiZWQgaW5mbyB3aW5kb3dzCiAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIGlzQXJyYXkoYSkge3JldHVybiBpc09iamVjdChhKSAmJiBhLmNvbnN0cnVjdG9yID09IEFycmF5O30nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gaXNPYmplY3QoYSkge3JldHVybiAoYSAmJiB0eXBlb2YgYSA9PSBcJ29iamVjdFwnKSB8fCBpc0Z1bmN0aW9uKGEpO30nIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gaXNGdW5jdGlvbihhKSB7cmV0dXJuIHR5cGVvZiBhID09IFwnZnVuY3Rpb25cJzt9JyAuICJcbiI7CgogICAgICAgIGlmKCR0aGlzLT5zaWRlYmFyKSB7ICAgICAgICAKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIGNsaWNrX3NpZGViYXIoaWR4KSB7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICcgIGlmKGlzQXJyYXkobWFya2VyX2h0bWxbaWR4XSkpIHsgbWFya2Vyc1tpZHhdLm9wZW5JbmZvV2luZG93VGFic0h0bWwobWFya2VyX2h0bWxbaWR4XSk7IH0nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJyAgZWxzZSB7IG1hcmtlcnNbaWR4XS5vcGVuSW5mb1dpbmRvd0h0bWwobWFya2VyX2h0bWxbaWR4XSk7IH0nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIHNob3dJbmZvV2luZG93KGlkeCxodG1sKSB7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5jZW50ZXJBdExhdExuZyhwb2ludHNbaWR4XSk7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ21hcmtlcnNbaWR4XS5vcGVuSW5mb1dpbmRvd0h0bWwoaHRtbCk7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICBpZigkdGhpcy0+ZGlyZWN0aW9ucykgewogICAgICAgICAgICAkX291dHB1dCAuPSAnZnVuY3Rpb24gdG9oZXJlKGlkeCkgeycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFya2Vyc1tpZHhdLm9wZW5JbmZvV2luZG93SHRtbCh0b19odG1sc1tpZHhdKTsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ30nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ2Z1bmN0aW9uIGZyb21oZXJlKGlkeCkgeycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAnbWFya2Vyc1tpZHhdLm9wZW5JbmZvV2luZG93SHRtbChmcm9tX2h0bWxzW2lkeF0pOycgLiAiXG4iOwogICAgICAgICAgICAkX291dHB1dCAuPSAnfScgLiAiXG4iOwogICAgICAgIH0KCiAgICAgICAgJF9vdXRwdXQgLj0gJy8vXV0+JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJzwvc2NyaXB0PicgLiAiXG4iOwogICAgICAgIHJldHVybiAkX291dHB1dDsKICAgIH0KCiAgICAvKioKICAgICAqIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGpzIHRvIGFkZCBtYXJrZXJzCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldEFkZE1hcmtlcnNKUygpIHsKICAgICAgICAkU0lOR0xFX1RBQl9XSURUSCA9IDg4OyAgICAvLyBjb25zdGFudDogd2lkdGggaW4gcGl4ZWxzIG9mIGVhY2ggdGFiIGhlYWRpbmcgKHNldCBieSBnb29nbGUpCiAgICAgICAgJGkgPSAwOwogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X21hcmtlcnMgYXMgJF9tYXJrZXIpIHsKICAgICAgICAgICAgaWYoaXNfYXJyYXkoJF9tYXJrZXJbJ2h0bWwnXSkpIHsKICAgICAgICAgICAgICAgIC8vIHdhcm5pbmc6IHlvdSBjYW4ndCBoYXZlIHR3byB0YWJzIHdpdGggdGhlIHNhbWUgaGVhZGVyLiBidXQgd2h5IHdvdWxkIHlvdSB3YW50IHRvPwogICAgICAgICAgICAgICAgJHRpID0gMDsKICAgICAgICAgICAgICAgICRudW1fdGFicyA9IGNvdW50KCRfbWFya2VyWydodG1sJ10pOwogICAgICAgICAgICAgICAgJHRhYl9vYnMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yZWFjaCgkX21hcmtlclsnaHRtbCddIGFzICR0YWIgPT4gJGluZm8pIHsKICAgICAgICAgICAgICAgICAgICBpZigkdGkgPT0gMCAmJiAkbnVtX3RhYnMgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aF9zdHlsZSA9IHNwcmludGYoJyBzdHlsZT1cIndpZHRoOiAlc3B4XCInLCAkbnVtX3RhYnMgKiAkU0lOR0xFX1RBQl9XSURUSCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHdpZHRoX3N0eWxlID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0YWIgPSBzdHJfcmVwbGFjZSgnIicsJ1wiJywkdGFiKTsKICAgICAgICAgICAgICAgICAgICAkaW5mbyA9IHN0cl9yZXBsYWNlKCciJywnXCInLCRpbmZvKTsKCQkJCQkkaW5mbyA9IHN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICJcciIpLCAiIiwgJGluZm8pOwogICAgICAgICAgICAgICAgICAgICR0YWJfb2JzW10gPSBzcHJpbnRmKCduZXcgR0luZm9XaW5kb3dUYWIoIiVzIiwgIiVzIiknLCAkdGFiLCAnPGRpdiBpZD1cImdtYXBtYXJrZXJcIicuJHdpZHRoX3N0eWxlLic+JyAuICRpbmZvIC4gJzwvZGl2PicpOwogICAgICAgICAgICAgICAgICAgICR0aSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGl3X2h0bWwgPSAnWycgLiBqb2luKCcsJywkdGFiX29icykgLiAnXSc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaXdfaHRtbCA9IHNwcmludGYoJyIlcyInLHN0cl9yZXBsYWNlKCciJywnXCInLCc8ZGl2IGlkPSJnbWFwbWFya2VyIj4nIC4gc3RyX3JlcGxhY2UoYXJyYXkoIlxuIiwgIlxyIiksICIiLCAkX21hcmtlclsnaHRtbCddKSAuICc8L2Rpdj4nKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZigndmFyIHBvaW50ID0gbmV3IEdMYXRMbmcoJXMsJXMpOycsJF9tYXJrZXJbJ2xhdCddLCRfbWFya2VyWydsb24nXSkgLiAiXG4iOyAgICAgICAgIAogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCd2YXIgbWFya2VyID0gY3JlYXRlTWFya2VyKHBvaW50LCIlcyIsJXMsICVzLCIlcyIpOycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2UoJyInLCdcIicsJF9tYXJrZXJbJ3RpdGxlJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlKCcvJywnXC8nLCRpd19odG1sKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfcmVwbGFjZSgnIicsJ1wiJywkX21hcmtlclsndG9vbHRpcCddKSkgLiAiXG4iOwogICAgICAgICAgICAvL1RPRE86IGluIGFib3ZlIGNyZWF0ZU1hcmtlciBjYWxsLCBwYXNzIHRoZSBpbmRleCBvZiB0aGUgdGFiIGluIHdoaWNoIHRvIHB1dCBkaXJlY3Rpb25zLCBpZiBhcHBsaWNhYmxlCiAgICAgICAgICAgICRfb3V0cHV0IC49ICdtYXAuYWRkT3ZlcmxheShtYXJrZXIpOycgLiAiXG4iOwogICAgICAgICAgICAkaSsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBvdmVycmlkYWJsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBwb2x5bGluZSBqcwogICAgICovCiAgICBmdW5jdGlvbiBnZXRQb2x5bGluZUpTKCkgewogICAgICAgICRfb3V0cHV0ID0gJyc7CiAgICAgICAgZm9yZWFjaCgkdGhpcy0+X3BvbHlsaW5lcyBhcyAkX3BvbHlsaW5lKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49IHNwcmludGYoJ3ZhciBwb2x5bGluZSA9IG5ldyBHUG9seWxpbmUoW25ldyBHTGF0TG5nKCVzLCVzKSxuZXcgR0xhdExuZyglcywlcyldLCIlcyIsJXMsJXMpOycsCiAgICAgICAgICAgICAgICAgICAgJF9wb2x5bGluZVsnbGF0MSddLCRfcG9seWxpbmVbJ2xvbjEnXSwkX3BvbHlsaW5lWydsYXQyJ10sJF9wb2x5bGluZVsnbG9uMiddLCRfcG9seWxpbmVbJ2NvbG9yJ10sJF9wb2x5bGluZVsnd2VpZ2h0J10sJF9wb2x5bGluZVsnb3BhY2l0eSddIC8gMTAwLjApIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJ21hcC5hZGRPdmVybGF5KHBvbHlsaW5lKTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoKICAgIC8qKgogICAgICogb3ZlcnJpZGFibGUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIGpzIGZvciB0aGUganMgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbWFya2VyLgogICAgICovCiAgICBmdW5jdGlvbiBnZXRDcmVhdGVNYXJrZXJKUygpIHsKICAgICAgICAkX291dHB1dCA9ICdmdW5jdGlvbiBjcmVhdGVNYXJrZXIocG9pbnQsIHRpdGxlLCBodG1sLCBuLCB0b29sdGlwKSB7JyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ2lmKG4gPj0gJy4gc2l6ZW9mKCR0aGlzLT5faWNvbnMpIC4nKSB7IG4gPSAnLiAoc2l6ZW9mKCR0aGlzLT5faWNvbnMpIC0gMSkgLiI7IH1cbiI7CiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5faWNvbnMpKSB7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgbWFya2VyID0gbmV3IEdNYXJrZXIocG9pbnQse1wnaWNvblwnOiBpY29uW25dLCBcJ3RpdGxlXCc6IHRvb2x0aXB9KTsnIC4gIlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkX291dHB1dCAuPSAndmFyIG1hcmtlciA9IG5ldyBHTWFya2VyKHBvaW50LHtcJ3RpdGxlXCc6IHRvb2x0aXB9KTsnIC4gIlxuIjsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETzogbWFrZSBpdCBzbyB5b3UgY2FuIHNwZWNpZnkgd2hpY2ggdGFiIHlvdSB3YW50IHRoZSBkaXJlY3Rpb25zIGluLgogICAgICAgIGlmKCR0aGlzLT5kaXJlY3Rpb25zKSB7CiAgICAgICAgICAgIC8vIFdBUk5JTkc6IElmIHlvdSBhcmUgdXNpbmcgYSB0YWJiZWQgaW5mbyB3aW5kb3cgQU5EIGRpcmVjdGlvbnM6IHRoaXMgdXNlcyBhbiBVTkRPQ1VNRU5URUQgZmllbGQKICAgICAgICAgICAgLy8gb2YgdGhlIEdJbmZvV2luZG93VGFiIG9iamVjdCwgY29udGVudEVsZW0uIEdvb2dsZSBtYXkgQ0hBTkdFIHRoaXMgbmFtZSBvciBvdGhlciBhc3BlY3RzIG9mIHRoZWlyCiAgICAgICAgICAgIC8vIEdJbmZvV2luZG93VGFiIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgd2FybmluZyBhbmQgQlJFQUsgdGhpcyBjb2RlLgogICAgICAgICAgICAvLyBOT1RFOiBJZiB5b3UgYXJlIE5PVCB1c2luZyBhIHRhYmJlZCBpbmZvIHdpbmRvdywgeW91J2xsIGJlIGZpbmUuCiAgICAgICAgICAgICRfb3V0cHV0IC49ICd2YXIgdGFiRmxhZyA9IGlzQXJyYXkoaHRtbCk7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICdpZighdGFiRmxhZykgeyBodG1sID0gW3siY29udGVudEVsZW0iOiBodG1sfV07IH0nIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgInRvX2h0bWxzW2NvdW50ZXJdID0gaHRtbFswXS5jb250ZW50RWxlbSArICc8Zm9ybSBjbGFzcz1cImdtYXBEaXJcIiBpZD1cImdtYXBEaXJUb1wiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIiBhY3Rpb249XCJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHNcIiBtZXRob2Q9XCJnZXRcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nICsKICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZ21hcERpckhlYWRcIiBpZD1cImdtYXBEaXJIZWFkVG9cIj4lczxzdHJvbmc+JXM8L3N0cm9uZz4gLSA8YSBocmVmPVwiamF2YXNjcmlwdDpmcm9taGVyZSgnICsgY291bnRlciArICcpXCI+JXM8L2E+PC9zcGFuPicgKwogICAgICAgICAgICAgICAgICAgICAnPHAgY2xhc3M9XCJnbWFwRGlySXRlbVwiIGlkPVwiZ21hcERpckl0ZW1Ub1wiPjxsYWJlbCBmb3I9XCJnbWFwRGlyU2FkZHJcIiBjbGFzcz1cImdtYXBEaXJMYWJlbFwiIGlkPVwiZ21hcERpckxhYmVsVG9cIj4lczxiciAvPjwvbGFiZWw+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiNDBcIiBtYXhsZW5ndGg9XCI0MFwiIG5hbWU9XCJzYWRkclwiIGNsYXNzPVwiZ21hcFRleHRCb3hcIiBpZD1cImdtYXBEaXJTYWRkclwiIHZhbHVlPVwiXCIgb25mb2N1cz1cInRoaXMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCcjZTBlMGUwXCc7XCIgb25ibHVyPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcJyNmZmZmZmZcJztcIiAvPicgKwogICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJnbWFwRGlyQnRuc1wiIGlkPVwiZ21hcERpckJ0bnNUb1wiPjxpbnB1dCB2YWx1ZT1cIiVzXCIgdHlwZT1cIiVzXCIgY2xhc3M9XCJnbWFwRGlyQnV0dG9uXCIgaWQ9XCJnbWFwRGlyQnV0dG9uVG9cIiAvPjwvc3Bhbj48L3A+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkYWRkclwiIHZhbHVlPVwiJyArCiAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkgKyAnLCcgKyBwb2ludC54ICsgXCIoXCIgKyB0aXRsZS5yZXBsYWNlKG5ldyBSZWdFeHAoL1wiL2cpLCcmcXVvdDsnKSArIFwiKVwiICsgJ1wiIC8+PC9mb3JtPic7CiAgICAgICAgICAgICAgICAgICAgICBmcm9tX2h0bWxzW2NvdW50ZXJdID0gaHRtbFswXS5jb250ZW50RWxlbSArICc8cCAvPjxmb3JtIGNsYXNzPVwiZ21hcERpclwiIGlkPVwiZ21hcERpckZyb21cIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCIgYWN0aW9uPVwiaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzXCIgbWV0aG9kPVwiZ2V0XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArCiAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdtYXBEaXJIZWFkXCIgaWQ9XCJnbWFwRGlySGVhZEZyb21cIj4lczxhIGhyZWY9XCJqYXZhc2NyaXB0OnRvaGVyZSgnICsgY291bnRlciArICcpXCI+JXM8L2E+IC0gPHN0cm9uZz4lczwvc3Ryb25nPjwvc3Bhbj4nICsKICAgICAgICAgICAgICAgICAgICAgJzxwIGNsYXNzPVwiZ21hcERpckl0ZW1cIiBpZD1cImdtYXBEaXJJdGVtRnJvbVwiPjxsYWJlbCBmb3I9XCJnbWFwRGlyU2FkZHJcIiBjbGFzcz1cImdtYXBEaXJMYWJlbFwiIGlkPVwiZ21hcERpckxhYmVsRnJvbVwiPiVzPGJyIC8+PC9sYWJlbD4nICsKICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCI0MFwiIG1heGxlbmd0aD1cIjQwXCIgbmFtZT1cImRhZGRyXCIgY2xhc3M9XCJnbWFwVGV4dEJveFwiIGlkPVwiZ21hcERpclNhZGRyXCIgdmFsdWU9XCJcIiBvbmZvY3VzPVwidGhpcy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcJyNlMGUwZTBcJztcIiBvbmJsdXI9XCJ0aGlzLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwnI2ZmZmZmZlwnO1wiIC8+JyArCiAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImdtYXBEaXJCdG5zXCIgaWQ9XCJnbWFwRGlyQnRuc0Zyb21cIj48aW5wdXQgdmFsdWU9XCIlc1wiIHR5cGU9XCIlc1wiIGNsYXNzPVwiZ21hcERpckJ1dHRvblwiIGlkPVwiZ21hcERpckJ1dHRvbkZyb21cIiAvPjwvc3Bhbj48L3A+JyArCiAgICAgICAgICAgICAgICAgICAgICc8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzYWRkclwiIHZhbHVlPVwiJyArCiAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkgKyAnLCcgKyBwb2ludC54ICsgZW5jb2RlVVJJQ29tcG9uZW50KFwiKFwiICsgdGl0bGUucmVwbGFjZShuZXcgUmVnRXhwKC9cIi9nKSwnJnF1b3Q7JykgKyBcIilcIikgKyAnXCIgLz48L2Zvcm0+JzsKICAgICAgICAgICAgICAgICAgICAgaHRtbFswXS5jb250ZW50RWxlbSA9IGh0bWxbMF0uY29udGVudEVsZW0gKyAnPHAgLz48ZGl2IGlkPVwiZ21hcERpckhlYWRcIiBjbGFzcz1cImdtYXBEaXJcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXA7XCI+JXM8YSBocmVmPVwiamF2YXNjcmlwdDp0b2hlcmUoJyArIGNvdW50ZXIgKyAnKVwiPiVzPC9hPiAtIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmZyb21oZXJlKCcgKyBjb3VudGVyICsgJylcIj4lczwvYT48L2Rpdj4nO1xuIiwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90ZXh0J10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfdG9oZXJlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfZnJvbWhlcmUnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90byddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsndG9fYnV0dG9uX3ZhbHVlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0Wyd0b19idXR0b25fdHlwZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX3RleHQnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl90b2hlcmUnXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Rpcl9mcm9taGVyZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX2Zyb20nXSwKICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRyaXZpbmdfZGlyX3RleHRbJ2Zyb21fYnV0dG9uX3ZhbHVlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0Wydmcm9tX2J1dHRvbl90eXBlJ10sCiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kcml2aW5nX2Rpcl90ZXh0WydkaXJfdGV4dCddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX3RvaGVyZSddLAogICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHJpdmluZ19kaXJfdGV4dFsnZGlyX2Zyb21oZXJlJ10KICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAkX291dHB1dCAuPSAnaWYoIXRhYkZsYWcpIHsgaHRtbCA9IGh0bWxbMF0uY29udGVudEVsZW07IH0nOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZigkdGhpcy0+aW5mb193aW5kb3cpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignaWYoaXNBcnJheShodG1sKSkgeyBHRXZlbnQuYWRkTGlzdGVuZXIobWFya2VyLCAiJXMiLCBmdW5jdGlvbigpIHsgbWFya2VyLm9wZW5JbmZvV2luZG93VGFic0h0bWwoaHRtbCk7IH0pOyB9JywkdGhpcy0+d2luZG93X3RyaWdnZXIpIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZWxzZSB7IEdFdmVudC5hZGRMaXN0ZW5lcihtYXJrZXIsICIlcyIsIGZ1bmN0aW9uKCkgeyBtYXJrZXIub3BlbkluZm9XaW5kb3dIdG1sKGh0bWwpOyB9KTsgfScsJHRoaXMtPndpbmRvd190cmlnZ2VyKSAuICJcbiI7CiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICdwb2ludHNbY291bnRlcl0gPSBwb2ludDsnIC4gIlxuIjsKICAgICAgICAkX291dHB1dCAuPSAnbWFya2Vyc1tjb3VudGVyXSA9IG1hcmtlcjsnIC4gIlxuIjsKICAgICAgICBpZigkdGhpcy0+c2lkZWJhcikgeyAgICAgICAgCiAgICAgICAgICAgICRfb3V0cHV0IC49ICdtYXJrZXJfaHRtbFtjb3VudGVyXSA9IGh0bWw7JyAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICJzaWRlYmFyX2h0bWwgKz0gJzxsaSBjbGFzcz1cImdtYXBTaWRlYmFySXRlbVwiIGlkPVwiZ21hcFNpZGViYXJJdGVtXycrIGNvdW50ZXIgKydcIj48YSBocmVmPVwiamF2YXNjcmlwdDpjbGlja19zaWRlYmFyKCcgKyBjb3VudGVyICsgJylcIj4nICsgdGl0bGUgKyAnPFwvYT48XC9saT4nOyIgLiAiXG4iOwogICAgICAgIH0KICAgICAgICAkX291dHB1dCAuPSAnY291bnRlcisrOycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICdyZXR1cm4gbWFya2VyOycgLiAiXG4iOwogICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgcmV0dXJuICRfb3V0cHV0OwogICAgfQoKICAgIC8qKgogICAgICogcHJpbnQgbWFwIChwdXQgYXQgbG9jYXRpb24gbWFwIHdpbGwgYXBwZWFyKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50TWFwKCkgewogICAgICAgIGVjaG8gJHRoaXMtPmdldE1hcCgpOwogICAgfQoKICAgIC8qKgogICAgICogcmV0dXJuIG1hcAogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldE1hcCgpIHsKICAgICAgICAkX291dHB1dCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPicgLiAiXG4iIC4gJy8vPCFbQ0RBVEFbJyAuICJcbiI7CiAgICAgICAgJF9vdXRwdXQgLj0gJ2lmIChHQnJvd3NlcklzQ29tcGF0aWJsZSgpKSB7JyAuICJcbiI7CiAgICAgICAgaWYoc3RybGVuKCR0aGlzLT53aWR0aCkgPiAwICYmIHN0cmxlbigkdGhpcy0+aGVpZ2h0KSA+IDApIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCc8ZGl2IGlkPSIlcyIgc3R5bGU9IndpZHRoOiAlczsgaGVpZ2h0OiAlcyI+PFwvZGl2PlwnKTsnLCR0aGlzLT5tYXBfaWQsJHRoaXMtPndpZHRoLCR0aGlzLT5oZWlnaHQpIC4gIlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkX291dHB1dCAuPSBzcHJpbnRmKCdkb2N1bWVudC53cml0ZShcJzxkaXYgaWQ9IiVzIj48XC9kaXY+XCcpOycsJHRoaXMtPm1hcF9pZCkgLiAiXG4iOyAgICAgCiAgICAgICAgfQogICAgICAgICRfb3V0cHV0IC49ICd9JzsKCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5qc19hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJyBlbHNlIHsnIC4gIlxuIjsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gc3ByaW50ZignZG9jdW1lbnQud3JpdGUoXCclc1wnKTsnLCBzdHJfcmVwbGFjZSgnLycsJ1wvJywkdGhpcy0+anNfYWxlcnQpKSAuICJcbiI7CiAgICAgICAgICAgICRfb3V0cHV0IC49ICd9JyAuICJcbiI7CiAgICAgICAgfQoKICAgICAgICAkX291dHB1dCAuPSAnLy9dXT4nIC4gIlxuIiAuICc8L3NjcmlwdD4nIC4gIlxuIjsKCiAgICAgICAgaWYoIWVtcHR5KCR0aGlzLT5qc19hbGVydCkpIHsKICAgICAgICAgICAgJF9vdXRwdXQgLj0gJzxub3NjcmlwdD4nIC4gJHRoaXMtPmpzX2FsZXJ0IC4gJzwvbm9zY3JpcHQ+JyAuICJcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJF9vdXRwdXQ7CiAgICB9CgogICAgCiAgICAvKioKICAgICAqIHByaW50IHNpZGViYXIgKHB1dCBhdCBsb2NhdGlvbiBzaWRlYmFyIHdpbGwgYXBwZWFyKQogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIHByaW50U2lkZWJhcigpIHsKICAgICAgICBlY2hvICR0aGlzLT5nZXRTaWRlYmFyKCk7CiAgICB9ICAgIAoKICAgIC8qKgogICAgICogcmV0dXJuIHNpZGViYXIgaHRtbAogICAgICogCiAgICAgKi8KICAgIGZ1bmN0aW9uIGdldFNpZGViYXIoKSB7CiAgICAgICAgcmV0dXJuIHNwcmludGYoJzxkaXYgaWQ9IiVzIj48L2Rpdj4nLCR0aGlzLT5zaWRlYmFyX2lkKSAuICJcbiI7CiAgICB9ICAgIAogICAgICAgICAgICAKICAgIC8qKgogICAgICogZ2V0IHRoZSBnZW9jb2RlIGxhdC9sb24gcG9pbnRzIGZyb20gZ2l2ZW4gYWRkcmVzcwogICAgICogbG9vayBpbiBjYWNoZSBmaXJzdCwgb3RoZXJ3aXNlIGdldCBmcm9tIFlhaG9vCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0R2VvY29kZSgkYWRkcmVzcykgewogICAgICAgIGlmKGVtcHR5KCRhZGRyZXNzKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICAkX2dlb2NvZGUgPSBmYWxzZTsKCiAgICAgICAgaWYoKCRfZ2VvY29kZSA9ICR0aGlzLT5nZXRDYWNoZSgkYWRkcmVzcykpID09PSBmYWxzZSkgewogICAgICAgICAgICBpZigoJF9nZW9jb2RlID0gJHRoaXMtPmdlb0dldENvb3JkcygkYWRkcmVzcykpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnB1dENhY2hlKCRhZGRyZXNzLCAkX2dlb2NvZGVbJ2xvbiddLCAkX2dlb2NvZGVbJ2xhdCddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJF9nZW9jb2RlOwogICAgfQogICAKICAgIC8qKgogICAgICogZ2V0IHRoZSBnZW9jb2RlIGxhdC9sb24gcG9pbnRzIGZyb20gY2FjaGUgZm9yIGdpdmVuIGFkZHJlc3MKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICovCiAgICBmdW5jdGlvbiBnZXRDYWNoZSgkYWRkcmVzcykgewogICAgICAgIGlmKCFpc3NldCgkdGhpcy0+ZHNuKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIAogICAgICAgICRfcmV0ID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICAvLyBQRUFSIERCCiAgICAgICAgcmVxdWlyZV9vbmNlKCdEQi5waHAnKTsgICAgICAgICAgCiAgICAgICAgJF9kYiA9JiBEQjo6Y29ubmVjdCgkdGhpcy0+ZHNuKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX2RiKSkgewogICAgICAgICAgICBkaWUoJF9kYi0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CgkJJF9yZXMgPSYgJF9kYi0+cXVlcnkoIlNFTEVDVCBsb24sbGF0IEZST00geyR0aGlzLT5fZGJfY2FjaGVfdGFibGV9IHdoZXJlIGFkZHJlc3MgPSA/IiwgJGFkZHJlc3MpOwogICAgICAgIGlmIChQRUFSOjppc0Vycm9yKCRfcmVzKSkgewogICAgICAgICAgICBkaWUoJF9yZXMtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIGlmKCRfcm93ID0gJF9yZXMtPmZldGNoUm93KCkpIHsgICAgICAgICAgICAKICAgICAgICAgICAgJF9yZXRbJ2xvbiddID0gJF9yb3dbMF07CiAgICAgICAgICAgICRfcmV0WydsYXQnXSA9ICRfcm93WzFdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAkX2RiLT5kaXNjb25uZWN0KCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuICFlbXB0eSgkX3JldCkgPyAkX3JldCA6IGZhbHNlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIHB1dCB0aGUgZ2VvY29kZSBsYXQvbG9uIHBvaW50cyBpbnRvIGNhY2hlIGZvciBnaXZlbiBhZGRyZXNzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvbiB0aGUgbWFwIGxhdGl0dWRlIChob3Jpem9udGFsKQogICAgICogQHBhcmFtIHN0cmluZyAkbGF0IHRoZSBtYXAgbGF0aXR1ZGUgKHZlcnRpY2FsKQogICAgICovCiAgICBmdW5jdGlvbiBwdXRDYWNoZSgkYWRkcmVzcywgJGxvbiwgJGxhdCkgewogICAgICAgIGlmKCFpc3NldCgkdGhpcy0+ZHNuKSB8fCAoc3RybGVuKCRhZGRyZXNzKSA9PSAwIHx8IHN0cmxlbigkbG9uKSA9PSAwIHx8IHN0cmxlbigkbGF0KSA9PSAwKSkKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgLy8gUEVBUiBEQgogICAgICAgIHJlcXVpcmVfb25jZSgnREIucGhwJyk7ICAgICAgICAgIAogICAgICAgICRfZGIgPSYgREI6OmNvbm5lY3QoJHRoaXMtPmRzbik7CiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJF9kYikpIHsKICAgICAgICAgICAgZGllKCRfZGItPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRfcmVzID0mICRfZGItPnF1ZXJ5KCdpbnNlcnQgaW50byAnLiR0aGlzLT5fZGJfY2FjaGVfdGFibGUuJyB2YWx1ZXMgKD8sID8sID8pJywgYXJyYXkoJGFkZHJlc3MsICRsb24sICRsYXQpKTsKICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkX3JlcykpIHsKICAgICAgICAgICAgZGllKCRfcmVzLT5nZXRNZXNzYWdlKCkpOwogICAgICAgIH0KICAgICAgICAkX2RiLT5kaXNjb25uZWN0KCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgCiAgICB9CiAgIAogICAgLyoqCiAgICAgKiBnZXQgZ2VvY29kZSBsYXQvbG9uIHBvaW50cyBmb3IgZ2l2ZW4gYWRkcmVzcyBmcm9tIFlhaG9vCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFkZHJlc3MKICAgICAqLwogICAgZnVuY3Rpb24gZ2VvR2V0Q29vcmRzKCRhZGRyZXNzLCRkZXB0aD0wKSB7CiAgICAgICAgCiAgICAgICAgc3dpdGNoKCR0aGlzLT5sb29rdXBfc2VydmljZSkgewogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgY2FzZSAnR09PR0xFJzoKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJF91cmwgPSBzcHJpbnRmKCdodHRwOi8vJXMvbWFwcy9nZW8/JnE9JXMmb3V0cHV0PWNzdiZrZXk9JXMnLCR0aGlzLT5sb29rdXBfc2VydmVyWydHT09HTEUnXSxyYXd1cmxlbmNvZGUoJGFkZHJlc3MpLCR0aGlzLT5hcGlfa2V5KTsKCiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZigkX3Jlc3VsdCA9ICR0aGlzLT5mZXRjaFVSTCgkX3VybCkpIHsKCiAgICAgICAgICAgICAgICAgICAgJF9yZXN1bHRfcGFydHMgPSBleHBsb2RlKCcsJywkX3Jlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgaWYoJF9yZXN1bHRfcGFydHNbMF0gIT0gMjAwKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJF9jb29yZHNbJ2xhdCddID0gJF9yZXN1bHRfcGFydHNbMl07CiAgICAgICAgICAgICAgICAgICAgJF9jb29yZHNbJ2xvbiddID0gJF9yZXN1bHRfcGFydHNbM107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAKICAgICAgICAgICAgY2FzZSAnWUFIT08nOgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICRfdXJsID0gJ2h0dHA6Ly8lcy9NYXBzU2VydmljZS9WMS9nZW9jb2RlJzsKICAgICAgICAgICAgICAgICRfdXJsIC49IHNwcmludGYoJz9hcHBpZD0lcyZsb2NhdGlvbj0lcycsJHRoaXMtPmxvb2t1cF9zZXJ2ZXJbJ1lBSE9PJ10sJHRoaXMtPmFwcF9pZCxyYXd1cmxlbmNvZGUoJGFkZHJlc3MpKTsKCiAgICAgICAgICAgICAgICAkX3Jlc3VsdCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGlmKCRfcmVzdWx0ID0gJHRoaXMtPmZldGNoVVJMKCRfdXJsKSkgewoKICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoKCchPExhdGl0dWRlPiguKik8L0xhdGl0dWRlPjxMb25naXR1ZGU+KC4qKTwvTG9uZ2l0dWRlPiFVJywgJF9yZXN1bHQsICRfbWF0Y2gpOwoKICAgICAgICAgICAgICAgICAgICAkX2Nvb3Jkc1snbG9uJ10gPSAkX21hdGNoWzJdOwogICAgICAgICAgICAgICAgICAgICRfY29vcmRzWydsYXQnXSA9ICRfbWF0Y2hbMV07CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9ICAgICAgICAgCiAgICAgICAgCiAgICAgICAgcmV0dXJuICRfY29vcmRzOyAgICAgICAKICAgIH0KICAgIAogICAgCgogICAgLyoqCiAgICAgKiBmZXRjaCBhIFVSTC4gT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY2hhbmdlIHRoZSB3YXkgVVJMcyBhcmUgZmV0Y2hlZC4KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkdXJsCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZldGNoVVJMKCR1cmwpIHsKCiAgICAgICAgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpOwoKICAgIH0KCiAgICAvKioKICAgICAqIGdldCBkaXN0YW5jZSBiZXR3ZWVuIHRvIGdlb2Nvb3JkcyB1c2luZyBncmVhdCBjaXJjbGUgZGlzdGFuY2UgZm9ybXVsYQogICAgICogCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxhdDEKICAgICAqIEBwYXJhbSBmbG9hdCAkbGF0MgogICAgICogQHBhcmFtIGZsb2F0ICRsb24xCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxvbjIKICAgICAqIEBwYXJhbSBmbG9hdCAkdW5pdCAgIE09bWlsZXMsIEs9a2lsb21ldGVycywgTj1uYXV0aWNhbCBtaWxlcywgST1pbmNoZXMsIEY9ZmVldAogICAgICovCiAgICBmdW5jdGlvbiBnZW9HZXREaXN0YW5jZSgkbGF0MSwkbG9uMSwkbGF0MiwkbG9uMiwkdW5pdD0nTScpIHsKICAgICAgICAKICAgICAgLy8gY2FsY3VsYXRlIG1pbGVzCiAgICAgICRNID0gIDY5LjA5ICogcmFkMmRlZyhhY29zKHNpbihkZWcycmFkKCRsYXQxKSkgKiBzaW4oZGVnMnJhZCgkbGF0MikpICsgIGNvcyhkZWcycmFkKCRsYXQxKSkgKiBjb3MoZGVnMnJhZCgkbGF0MikpICogY29zKGRlZzJyYWQoJGxvbjEgLSAkbG9uMikpKSk7IAoKICAgICAgc3dpdGNoKHN0cnRvdXBwZXIoJHVuaXQpKQogICAgICB7CiAgICAgICAgY2FzZSAnSyc6CiAgICAgICAgICAvLyBraWxvbWV0ZXJzCiAgICAgICAgICByZXR1cm4gJE0gKiAxLjYwOTM0NDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ04nOgogICAgICAgICAgLy8gbmF1dGljYWwgbWlsZXMKICAgICAgICAgIHJldHVybiAkTSAqIDAuODY4OTc2MjQyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAvLyBmZWV0CiAgICAgICAgICByZXR1cm4gJE0gKiA1MjgwOwogICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgY2FzZSAnSSc6CiAgICAgICAgICAvLyBpbmNoZXMKICAgICAgICAgIHJldHVybiAkTSAqIDYzMzYwOwogICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgY2FzZSAnTSc6CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIC8vIG1pbGVzCiAgICAgICAgICByZXR1cm4gJE07CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICAKICAgIH0gICAgCiAgICAKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/NEWS</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Mi4wCi0tLQoKKiBjb252ZXJ0ZWQgbWFwIHR5cGUgY29uc3RhbnRzIHRvIEdfTk9STUFMX01BUCwgR19TQVRFTExJVEVfTUFQLCBHX0hZQlJJRF9NQVAsCiAgZm9yIHZlcnNpb24gMiBvZiBHb29nbGUgTWFwIGFwaS4KKiBmaXhlZCB1cCBkcml2aW5nIGRpcmVjdGlvbiBIVE1MLCByZW1vdmUgPHA+LCBhZGQgPGRpdj4gKEpvaG4gU2NodWx6LCBtb250ZSkKKiBNb3ZlZCB0byB2ZXJzaW9uIDIgb2YgdGhlIEdvb2dsZSBNYXBzIEpTIEFQSS4gKGNsYXJrKQogIE5vdyB1c2UgdGhlIEdNYXAyIGNsYXNzIGluc3RlYWQgb2YgR01hcCBhbmQgR0xhdExuZyBpbnN0ZWFkIG9mCiAgR1BvaW50IChmb3IgbGF0L2xvbiBwYWlycykgYWxvbmcgd2l0aCBvdGhlciBtaW5vciBjaGFuZ2VzLiAKKiB6b29tIGVuY29tcGFzcyBsb29wIHJlcGxhY2VkIGJ5IGEgbmV3IG9mZmljaWFsIGZ1bmN0aW9uLCBtYXAuZ2V0Qm91bmRzWm9vbUxldmVsKGJkcyksCiAgd2hpY2ggcmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgem9vbSBsZXZlbCBmb3IgYSBnaXZlbiBHQm91bmRzIG9iamVjdC4gKGNsYXJrKQoqIENvbnZlcnRlZCB0aHJlZSBzZWN0aW9ucyBvZiB0aGUgZ2V0TWFwSlMoKSBmdW5jdGlvbiBpbnRvIHRoZWlyIG93biBmdW5jdGlvbnM6CiAgZ2V0QWRkTWFya2Vyc0pTKCksIGdldFBvbHlsaW5lSlMoKSwgYW5kIGdldENyZWF0ZU1hcmtlckpTKCksIHNvIHRoYXQgdGhleSBjYW4gYmUgZXh0ZW5kZWQKICBieSBzdWJjbGFzc2VzLiAoY2xhcmspCiogZml4IHpvb20gZW5jb21wYXNzIGZ1ZGdlIGZhY3RvciBidWc7IG5vdyBhcHBseSB0aGUgZnVkZ2UgZmFjdG9yIGluCiAgZ2V0TWFwSlMoKSwganVzdCBiZWZvcmUgd2Ugem9vbS4gKGNsYXJrKQoqIGFkZE1hcmtlckJ5QWRkcmVzcyBhbmQgYWRkUG9seUxpbmVCeUFkZHJlc3Mgbm93IGNhbGwgYWRkTWFya2VyQnlDb29yZHMKICBhbmQgYWRkUG9seUxpbmVCeUNvb3JkcyBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoZSBjb2RlIChjbGFyaykKKiBhZGRlZCBzZXRCb3VuZHNGdWRnZSgpIChjbGFyaykKCjEuNwotLS0KCiogZml4IGNvbXBhdGFiaWxpdHkgcHJvYmxlbSB3aXRoIG9sZGVyIFBIUAogIChjaGFuZ2UgcHJpbnRfciB0byBzZXJpYWxpemUpIChtb250ZSkKKiBmaXggYnVnIHdpdGggc2lkZWJhciBpbmRleCBjb3VudGVyIChtb250ZSkKKiBtYWtlIG1hcCBkaXJlY3Rpb24gaHRtbCBtb3JlIGNvbmZpZ3VyYWJsZSB3aXRoIGNzcyBhbmQganMgKG1vbnRlKQoqIGFkZGVkIG1vcmUgZXJyb3IgY2hlY2tpbmcgdG8gZ29vZ2xlIGdlb2Nvb3JkIGxvb2t1cHMgKG1vbnRlKQoqIGFkZCBmdWRnZSBmYWN0b3IgdG8gem9vbV9lbmNvbXBhc3Mgc28gbWFya2VycwogIGFyZSBhd2F5IGZyb20gdGhlIGVkZ2VzIChtb250ZSkKCjEuNgotLS0KCiogbW92ZSBkcml2aW5nIGRpciBvdXRwdXQgdG8gcHJvcGVydHkgdmFyIChtb250ZSkKKiBhZGQgPGRpdj4gaWRzIHRvIGRyaXZpbmcgZGlycyAobW9udGUpCiogZml4IHByb2JsZW0gd2l0aCBxdW90ZXMgaW4gdGl0bGVzIG9mIGRyaXZpbmcgZGlyIChtb250ZSkKKiBmaXggZHJpdmluZyBkaXIgd3JhcHBpbmcgKG1vbnRlKQoqIGZpeCBwcm9ibGVtIHdpdGggZW1wdHkgbGF0L2xvbiB2YWx1ZXMgKG1vbnRlKQoqIG1vdmUgc29tZSBqcyBmdW5jcyBhcm91bmQsIHRlc3QgZm9yIG1hcCA8ZGl2PiB0YWcgKG1vbnRlKQoqIGRvbid0IHN1cHBseSBzdHlsZSB0YWdzIHRvIDxkaXY+IGlmIHdpZHRoIGFuZCBoZWlnaHQgZW1wdHkgKG1vbnRlKQoqIGFkZCBqcyBmdW5jdGlvbiBzaG93X2luZm9fd2luZG93KCkgKG1vbnRlKQoqIHRyYWNrIHBvaW50cyBhbmQgbWFya2VycyBpbiBnbG9iYWwganMgYXJyYXlzIChtb250ZSkKKiBtYWtlIHRoZSBtYXAganMgdmFyIGdsb2JhbCAobW9udGUpCiogZml4IGJ1ZyB3aXRoIGljb24gYW5jaG9yIHBvc2l0aW9uaW5nIChtb250ZSkKKiBhZGQgZW5hYmxlSW5mb1dpbmRvdygpIGFuZCBkaXNhYmxlSW5mb1dpbmRvdygpIChtb250ZSkKKiByZW1vdmUgdW51c2VkIG1lc3NhZ2VfaWQgKG1vbnRlKQoKMS41Ci0tLQoKKiBhZGQgc2V0TG9va3VwU2VydmljZSgpIHRvIHN3aXRjaCBiZXR3ZWVuIGdlb2NvZGUgbG9va3VwIHNlcnZpY2VzIChtb250ZSkKKiBhZGQgYWRkTWFya2VySWNvbigpIGZvciBzZXR0aW5nIGljb25zIGZvciBpbmRpdmlkdWFsIG1hcCBtYXJrZXJzIChDbGFyayBGcmVpZmVsZCkKKiBhZGQgJHpvb21fZW5jb21wYXNzIHNvIGRlZmF1bHQgbWFwIHpvb20gY2xvc2VseSBlbmNvbXBhc3NlcyBtYXAgbWFya2VycyAoQ2xhcmsKRnJpZWZlbGQpCiogY2hhbmdlIG1hcmtkZXIgZGVmYXVsdHMgdG8gbW9yZSBjbG9zZWx5IG1hdGNoIGdvb2dsZSBtYXAgZGVmYXVsdHMgd2hlbiBub25lCmFyZSBnaXZlbiAoQ2xhcmsgRnJlaWZlbGQpCgoxLjQKLS0tCgoqIHNwbGl0IG91dCBVUkwgZmV0Y2hpbmcgdG8gaXRzIG93biBtZXRob2Qgc28gaXQgY2FuIGJlIGVhc2lseSBvdmVycmlkZGVuIChtb250ZSkKKiB3cmFwIDxkaXY+IHRhZ3MgaW5zaWRlIGphdmFzY3JpcHQgZm9yIGJyb3dzZXIgY29tcGF0YWJpbGl0eSAoSmFrZSBLcm9obiwgbW9udGUpCiogbWFrZSBIVE1MIG1hcmtlcnMgZGlzcGxheSBwcm9wZXJseSBpbiBmaXJlZm94IDEuNSAoSmFrZSBLcm9obiwgbW9udGUpCiogZml4ZWQgYnVnIHdpdGggc2lkZWJhciBkaXNhYmxlZCAobW9udGUpCgoxLjMKLS0tCgoqIHJlbW92ZSBkZWJ1ZyBwcmludF9yIHN0YXRlbWVudCBmcm9tIGdlb0dldENvb3JkcygpIGZ1bmN0aW9uIChtb250ZSkKKiBmaXhlZCBidWcgd2hlbiBzZXR0aW5nIG1hcCB0eXBlIGFuZCBkaXNhYmxpbmcgbWFwIGNvbnRyb2xzIChKb2huIEZyYW5jaXMgTGVlLCBtb250ZSkKCjEuMgotLS0KCiogYWRkZWQgVVRGLTggY2hhcnNldCBzZXR0aW5nIHRvIDxqYXZhc2NyaXB0PiB0YWdzIHRvIHdvcmsgd2l0aCBJRSBpbiBhbGwgbGFuZ3MgKEtBRE8sIG1vbnRlKQoqIGZpeCBpc3N1ZSB3aXRoIG11bHRpcGxlIGxhdC9sb24gZmluZGluZ3MgZnJvbSB5YWhvbyAoYW5kaWcsbW9udGUpCiogYWRkIHNldE1hcFR5cGUoKSBmdW5jdGlvbiAoSXNpZG9yMTI4LG1vbnRlKQoqIGFsbG93IGRvdWJsZSBxdW90ZXMgaW4gdGl0bGUvaHRtbCBvZiBtYXJrZXJzIChtb250ZSkKKiBhbGxvdyB3aWR0aC9oZWlnaHQgaW4gZWl0aGVyIHB4IG9yICUgKFRHS25JZ2h0LG1vbnRlKQoqIGFkZCBzZXRab29tTGV2ZWwoKSBmdW5jdGlvbiAobW9udGUpCgoxLjEKLS0tCgoqIHJlcGxhY2VkIEdvb2dsZU1hcEFQSS5jbGFzcy5waHAgd2l0aCBHT09EIHZlcnNpb24sIDEuMCBoYWQgaW5jb3JyZWN0IGZpbGUhCgoxLjAKLS0tCgppbml0aWFsIHJlbGVhc2UK]]></data>
	</file>
	<file>
	  <filename>/lib/GoogleMapAPI-2.5/README</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TkFNRToKCiAgICBHb29nbGVNYXBBUEkgLSBBIGxpYnJhcnkgdXNlZCBmb3IgY3JlYXRpbmcgZ29vZ2xlIG1hcHMuCgpBVVRIT1I6CiAgICBNb250ZSBPaHJ0IDxtb250ZSBbQVRdIG9ocnQgW0RPVF0gY29tPgoKTEFURVNUIFZFUlNJT046CiAgICAyLjAgLSBBcHJpbCAyN3RoLCAyMDA2CgpTWU5PUFNJUzoKCiAgICA8P3BocAogICAgcmVxdWlyZSgnR29vZ2xlTWFwQVBJLmNsYXNzLnBocCcpOwoKICAgIC8vIHBhc3MgeWFob28gYXBwIGlkIChzb21ldGhpbmcgdW5pcXVlKSBpZiB5b3UgYXJlIHVzaW5nIHRoZQogICAgLy8gWUFIT08gbG9va3VwIHNlcnZpY2UsIHdoaWNoIGlzIGRlZmF1bHQKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCdtYXAnLCAnWW91cllhaG9vQXBwSWQnKTsKICAgIC8vIHNldHVwIGRhdGFiYXNlIGZvciBnZW9jb2RlIGNhY2hpbmcKICAgICRtYXAtPnNldERTTignbXlzcWw6Ly9VU0VSOlBBU1NAbG9jYWxob3N0L0dFT0NPREVTJyk7CiAgICAvLyBlbnRlciBZT1VSIEdvb2dsZSBNYXAgS2V5CiAgICAkbWFwLT5zZXRBUElLZXkoJ1lPVVJHT09HTEVNQVBLRVknKTsKICAgIAogICAgLy8gY3JlYXRlIHNvbWUgbWFwIG1hcmtlcnMKICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAkbWFwLT5hZGRNYXJrZXJCeUFkZHJlc3MoJzgyNiBQIFN0IExpbmNvbG4gTkUgNjg1MDInLCdPbGQgQ2hpY2FnbycsJzxiPk9sZCBDaGljYWdvPC9iPicpOwogICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKCczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLCJWYWxlbnRpbm8ncyIsIjxiPlZhbGVudGlubydzPC9iPiIpOwogICAgPz4KCiAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CiAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiPgogICAgPGhlYWQ+CiAgICA8P3BocCAkbWFwLT5wcmludEhlYWRlckpTKCk7ID8+CiAgICA8P3BocCAkbWFwLT5wcmludE1hcEpTKCk7ID8+CiAgICA8IS0tIG5lY2Vzc2FyeSBmb3IgZ29vZ2xlIG1hcHMgcG9seWxpbmUgZHJhd2luZyBpbiBJRSAtLT4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIHZcOiogewogICAgICAgIGJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPC9oZWFkPgogICAgPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CiAgICA8dGFibGUgYm9yZGVyPTE+CiAgICA8dHI+PHRkPgogICAgPD9waHAgJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgIDwvdGQ+PHRkPgogICAgPD9waHAgJG1hcC0+cHJpbnRTaWRlYmFyKCk7ID8+CiAgICA8L3RkPjwvdHI+CiAgICA8L3RhYmxlPgogICAgPC9ib2R5PgogICAgPC9odG1sPgoKCgpPVVRQVVQ6CgogICAgVmlldyB0aGUgb3V0cHV0IG9mIHRoZSBhYm92ZSBleGFtcGxlIGhlcmU6CgogICAgaHR0cDovL3d3dy5waHBpbnNpZGVyLmNvbS9waHAvY29kZS9Hb29nbGVNYXBBUEkvZGVtby8KCiAgICAKREVTQ1JJUFRJT046CgogICAgR29vZ2xlTWFwQVBJIC0gQSBsaWJyYXJ5IHVzZWQgZm9yIGNyZWF0aW5nIGdvb2dsZSBtYXBzIHVzaW5nIHRoZQogICAgR29vZ2xlIE1hcCBwdWJsaWMgQVBJLiBGZWF0dXJlcyBpbmNsdWRlIG11bHRpcGxlIG1hcCBtYXJrZXJzLCBjdXN0b21pemFibGUKICAgIGljb25zLCBtYXAgZGlyZWN0aW9ucyBidWlsdCBpbnRvIGluZm8gd2luZG93LCBhbmQgc2lkZWJhciBnZW5lcmF0aW9uLgogICAgCiAgICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBHb29nbGUgTWFwIEFQSSBjYW4gYmUgZm91bmQgaGVyZToKICAgIAogICAgaHR0cDovL3d3dy5nb29nbGUuY29tL2FwaXMvbWFwcy8KICAgIAoKQkFTRSBDTEFTUyBNRVRIT0RTOgotLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgR29vZ2xlTWFwQVBJKCRtYXBfaWQgPSAnbWFwJywgJGFwcF9pZCA9ICdNeU1hcEFwcCcpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIENsYXNzIENvbnN0cnVjdG9yLgogICAgICAgIFRoZSBtYXAgaWQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IGhhdmUgbXVsdGlwbGUgbWFwcyBvbiB0aGUgc2FtZSBwYWdlLgogICAgICAgIFRoZSBBcHAgSUQgaXMgdXNlZCBmb3IgdGhlIFlhaG9vIEdlb0NvZGUgQVBJLCB3aGljaCBpcyB0aGUgZGVmYXVsdAogICAgICAgIGxvb2t1cCBzZXJ2aWNlLiBVc2UgYSB1bmlxdWUgQXBwIElEIHBlciBhcHBsaWNhdGlvbi4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIC8vIHVzZSBkZWZhdWx0cwogICAgICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCk7CgogICAgICAgIC8vIHNldCBjdXN0b20gbWFwIGlkIGFuZCBhcHAgaWQKICAgICAgICAkbWFwID0gbmV3IEdvb2dsZU1hcEFQSSgnbXltYXAnLCdteWFwcCcpOwoKCiAgICBzZXREU04oJGRzbikKICAgIC0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVXNlZCB0byBzZXQgdGhlIGRhdGFiYXNlIERTTi4gVGhlIGRhdGFiYXNlIGlzIHVzZWQgdG8gY2FjaGUKICAgICAgICBnZW9jb2RlIGxvb2t1cHMgKGhpZ2hseSByZWNvbW1lbmRlZCEpIFRoZSBQRUFSOjpEQiBtb2R1bGUKICAgICAgICBpcyByZXF1aXJlZCBmb3IgZGF0YWJhc2UgYWNjZXNzLiBZb3Ugd2lsbCBuZWVkIHRvIGNyZWF0ZQogICAgICAgIHRoZSBmb2xsb3dpbmcgZGF0YWJhc2Ugc2NoZW1hIChteXNxbCBleGFtcGxlIGdpdmVuKToKICAgICAgICAKICAgICAgICBDUkVBVEUgVEFCTEUgR0VPQ09ERVMgKAogICAgICAgICAgYWRkcmVzcyB2YXJjaGFyKDI1NSkgTk9UIE5VTEwgZGVmYXVsdCAnJywKICAgICAgICAgIGxvbiBmbG9hdCBkZWZhdWx0IE5VTEwsCiAgICAgICAgICBsYXQgZmxvYXQgZGVmYXVsdCBOVUxMLAogICAgICAgICAgUFJJTUFSWSBLRVkgIChhZGRyZXNzKQogICAgICAgICk7CiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXREU04oJ215c3FsOi8vREJVU0VSOkRCUEFTU0BEQkhPU1QvREJOQU1FJyk7CiAgICAgICAgJG1hcC0+c2V0RFNOKCdteXNxbDovL2dlbzpmb29iYXJAbG9jYWxob3N0L0dFT0NPREVTJyk7CgogICAgCiAgICBzZXRBUElLZXkoJGtleSkKICAgIC0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgU2V0cyB0aGUgR29vZ2xlIE1hcCBBUEkgS2V5LiBUaGlzIGlzIG1hbmRhdG9yeSwgeW91IHdpbGwgbmVlZAogICAgICAgIGFuIEFQSSBLZXkgZm9yIHlvdXIgaG9zdG5hbWUhIFlvdSBjYW4gcmVnaXN0ZXIgZnJlZSBoZXJlOgogICAgICAgIAogICAgICAgIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWwKCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAvLyBlbnRlciBZT1VSIHJlZ2lzdGVyZWQgQVBJIEtleQogICAgICAgICRtYXAtPnNldEFQSUtleSgnQUJRSUFBQUF4cDVGRi1BMFJoSE9ublRCd3JsUmJ4Jyk7CgoKICAgIHNldFdpZHRoKCR3aWR0aCkKICAgIC0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBtYXAgd2luZG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgcHggb3IgJS4KICAgICAgICBEZWZhdWx0IGlzIDUwMHB4LgogICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRXaWR0aCgnNTAwcHgnKTsKICAgICAgICAkbWFwLT5zZXRXaWR0aCgnMTAwJScpOwoKICAgIAogICAgc2V0SGVpZ2h0KCRoZWlnaHQpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgbWFwIHdpbmRvdy4gVGhpcyBjYW4gYmUgZWl0aGVyIHB4IG9yICUuCiAgICAgICAgRGVmYXVsdCBpcyAnNTAwcHgnLgogICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRIZWlnaHQoJzUwMHB4Jyk7CiAgICAgICAgJG1hcC0+c2V0SGVpZ2h0KCcxMDAlJyk7CiAgICAgICAgCiAgICAgICAgCiAgICBlbmFibGVNYXBDb250cm9scygpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBtYXAgY29udHJvbHMgdG8gem9vbS9tb3ZlIGFyb3VuZCB0aGUgbWFwLgogICAgICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KCgogICAgZGlzYWJsZU1hcENvbnRyb2xzKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbWFwIGNvbnRyb2xzIHRvIHpvb20vbW92ZSBhcm91bmQgdGhlIG1hcC4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIHNldFpvb21MZXZlbCgpCiAgICAtLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB6b29tIGxldmVsLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+c2V0Wm9vbUxldmVsKDQpOwoKCiAgICBzZXRDb250cm9sU2l6ZSgkc2l6ZSkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBtYXAgY29udHJvbCBzaXplLiBSZWxldmFudCBvbmx5IGlmIG1hcCBjb250cm9scyBhcmUKICAgICAgICBlbmFibGVkLiBsYXJnZSA9IG1hcCB6b29tL21vdmUgd2l0aCBzbGlkZXIuIHNtYWxsID0gem9vbS9tb3ZlIHdpdGhvdXQKICAgICAgICBzbGlkZXIuIExhcmdlIGlzIGRlZmF1bHQuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5zZXRDb250cm9sU2l6ZSA9ICdzbWFsbCc7CgoKICAgIGVuYWJsZVR5cGVDb250cm9scygpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKS4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIGRpc2FibGVUeXBlQ29udHJvbHMoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgZGlzYWJsZSB0aGUgbWFwIHR5cGUgY29udHJvbHMgKG1hcC9zYXRlbGxpdGUvaHlicmlkKS4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIHNldE1hcFR5cGUoJHR5cGUpCiAgICAtLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1hcCB0eXBlLiBSZWxldmFudCBvbmx5IGlmIG1hcCB0eXBlIGNvbnRyb2xzIGFyZQogICAgICAgIGVuYWJsZWQuIG1hcCA9IGRlZmF1bHQgbWFwLiBzYXRlbGxpdGUgPSBzYXRlbGxpdGUgdmlldy4gaHlicmlkID0gaHlicmlkCiAgICAgICAgdmlldy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldE1hcFR5cGUoJ21hcCcpOyAvLyBkZWZhdWx0CiAgICAgICAgJG1hcC0+c2V0TWFwVHlwZSgnc2F0ZWxsaXRlJyk7CiAgICAgICAgJG1hcC0+c2V0TWFwVHlwZSgnaHlicmlkJyk7CiAgICAgICAgCiAgICAgICAgCiAgICBlbmFibGVTaWRlYmFyKCkKICAgIC0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBtYXAgc2lkZWJhci4gVXNlIHByaW50U2lkZUJhcigpIG9yIGdldFNpZGVCYXIoKSB0bwogICAgICAgIG91dHB1dCB0aGUgc2lkZWJhciB0ZXh0LiBFbmFibGVkIGJ5IGRlZmF1bHQuCgoKICAgIGRpc2FibGVTaWRlYmFyKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgZGlzYWJsZXMgdGhlIG1hcCBzaWRlYmFyLiBFbmFibGVkIGJ5IGRlZmF1bHQuCgogICAgCiAgICBlbmFibGVEaXJlY3Rpb25zKCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIG1hcCBkaXJlY3Rpb25zIGluIHRoZSBib3R0b20gb2YgdGhlIHBvcC11cCBpbmZvIHdpbmRvdy4KICAgICAgICBFbmFibGVkIGJ5IGRlZmF1bHQuICAgICAgICAKCgogICAgZGlzYWJsZURpcmVjdGlvbnMoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBkaXNhYmxlcyBtYXAgZGlyZWN0aW9ucyBpbiB0aGUgYm90dG9tIG9mIHRoZSBwb3AtdXAgaW5mbyB3aW5kb3cuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgoKICAgIGVuYWJsZVpvb21FbmNvbXBhc3MoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGVuYWJsZXMgem9vbSBlbmNvbXBhc3Mgc28gZGVmYXVsdCBtYXAgem9vbSBpcyBhcyBzbWFsbCBhcyBwb3NzaWJsZQogICAgICAgIGFuZCBpbmNsdWRlIGFsbCBtYXAgbWFya2Vycy4KICAgICAgICBFbmFibGVkIGJ5IERlZmF1bHQuCgogICAgZGlzYWJsZVpvb21FbmNvbXBhc3MoKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBkaXNhYmxlcyB6b29tIGVuY29tcGFzcy4KICAgICAgICBFbmFibGVkIGJ5IERlZmF1bHQuICAgICAgICAKCgogICAgc2V0Qm91bmRzRnVkZ2UoJHZhbCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBTZXQgdGhlIG1hcCBib3VuZGFyeSBmdWRnZSBmYWN0b3IuIFRoaXMgd2lsbCBhZGp1c3QgaG93IG11Y2ggbWFwCiAgICAgICAgYm91bmRhcnkgZW5jb21wYXNzZXMgdGhlIG1hcCBtYXJrZXJzLiAoMC4wMSBpcyBkZWZhdWx0LikKICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldEJvdW5kc0Z1ZGdlKDAuMDEpOwogICAgICAgIAogICAgICAgIAogICAgc2V0QnJvd3NlckFsZXJ0KCRtZXNzYWdlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBzZXRzIHRoZSBhbGVydCBtZXNzYWdlIHRoYXQgcG9wcyB1cCB3aGVuIGEgYnJvd3NlciBpcyBub3QKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIEdvb2dsZSBNYXAgQVBJLiBEZWZhdWx0IGlzOgogICAgICAgICJTb3JyeSwgdGhlIEdvb2dsZSBNYXBzIEFQSSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgYnJvd3Nlci4iCiAgICAgICAgCiAgICAgICAgCiAgICBzZXRKU0FsZXJ0KCRtZXNzYWdlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgYWxlcnQgbWVzc2FnZSB0aGF0IGRpc3BsYXlzIHdoZW4gamF2YXNjcmlwdCBpcyBkaXNhYmxlZC4KICAgICAgICBEZWZhdWx0OiAiPGI+SmF2YXNjcmlwdCBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIEdvb2dsZSBNYXBzLjwvYj4iCiAgICAKICAgICAgICAKICAgIGVuYWJsZU9uTG9hZCgpCiAgICAtLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyBlbmFibGVzIHRoZSBvbkxvYWQoKSBqYXZhc2NyaXB0IGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VkIGJ5IGRlZmF1bHQuCiAgICAgICAgVGhpcyBhbGxvd3MgdGhlIG1hcCBqYXZhc2NyaXB0IHRvIGJlIHB1dCBpbnRvIHRoZSA8aGVhZD48L2hlYWQ+IHRhZywKICAgICAgICB0aGVuIGxvYWRlZCB1cG9uIHBhZ2UgZW50cnkgd2l0aCA8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4uIFdpdGggb25Mb2FkCiAgICAgICAgZGlzYWJsZWQsIHRoZSBtYXAgamF2YXNjcmlwdCBtdXN0IGJlIGVtYmVkZGVkIGluc2lkZSB0aGUgPGJvZHk+PC9ib2R5PgogICAgICAgIHRhZ3MuIFVzaW5nIG9uTG9hZCgpIGlzIHRoZSBiZXN0IG1ldGhvZCB0byB1c2UgZm9yIGJyb3dzZXIKICAgICAgICBjb21wYXRhYmlsaXR5LgoKCiAgICBlbmFibGVJbmZvV2luZG93KCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgZW5hYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgogICAgCgogICAgZGlzYWJsZUluZm9XaW5kb3coKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICBkaXNhYmxlcyBpbmZvIHdpbmRvd3Mgb24gbWFwIG1hcmtlcnMuCiAgICAgICAgRW5hYmxlZCBieSBkZWZhdWx0LgoKICAgICAgICAKICAgIGRpc2FibGVPbkxvYWQoKQogICAgLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGRpc2FibGVzIHRoZSBvbkxvYWQoKSBqYXZhc2NyaXB0IGZ1bmN0aW9uLiAoc2VlIGVuYWJsZU9uTG9hZCgpKQogICAgICAgIEVuYWJsZWQgYnkgZGVmYXVsdC4KICAgICAgICAKICAgICAgICAKICAgIHNldEluZm9XaW5kb3dUcmlnZ2VyKCR0eXBlKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIGluZm8gd2luZG93IHRyaWdnZXIgYmVoYXZpb3IuIGNsaWNrID0gaW5mbyB3aW5kb3cgY29tZXMgdXAKICAgICAgICB3aGVuIGNsaWNraW5nIG9uIGEgbWFya2VyLiBtb3VzZW92ZXIgPSBpbmZvIHdpbmRvdyBjb21lcyB1cCB3aGVuIG1vdXNpbmcKICAgICAgICBvdmVyIGEgbWFya2VyLiBEZWZhdWx0IGlzIGNsaWNrLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+c2V0SW5mb1dpbmRvd1RyaWdnZXIoJ21vdXNlb3ZlcicpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgIGFkZE1hcmtlckJ5QWRkcmVzcygkYWRkcmVzcywkdGl0bGUgPSAnJywkaHRtbCA9ICcnKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGFkZHMgYSBtYXJrZXIgdG8gdGhlIG1hcC4gVGhlIGFkZHJlc3MgbXVzdCBiZSBhIGZ1bGx5IHF1YWxpZmllZAogICAgICAgIGFkZHJlc3MgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgYXZhaWxhYmxlIGdlb2NvZGUgbG9va3VwIHNlcnZpY2VzLgogICAgICAgIAogICAgICAgIFRvIGFkZCBtYXJrZXJzIHdpdGggZ2VvY29kZXMgZGlyZWN0bHksIHNlZSBhZGRNYXJrZXJCeUNvb3JkcygpLgogICAgICAgIAogICAgICAgIFRoZSB0aXRsZSBpcyB1c2VkIGZvciB0aGUgc2lkZWJhciBuYXZpZ2F0aW9uIGxpbmsuIFRoZSBodG1sIGlzIHVzZWQKICAgICAgICBpbiB0aGUgaW5mbyB3aW5kb3cgdGhhdCBwb3BzIHVwIHdoZW4geW91IGNsaWNrIG9uIHRoZSBtYXAgbWFya2VyLiBJZgogICAgICAgIG5vIGh0bWwgaXMgcHJvdmlkZWQsIHRoZSB0aXRsZSB3aWxsIGJlIHVzZWQuCiAgICAgICAgCiAgICAgICAgTm90ZTogbWFwIGNlbnRlcmluZyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYXMgbWFya2VycyBhcmUgYWRkZWQuCiAgICAgICAgICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgYWRkTWFya2VyQnlDb29yZHMoJGxvbiwkbGF0LCR0aXRsZSA9ICcnLCRodG1sID0gJycpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIG1hcCBtYXJrZXIgYnkgZ2VvY29kZSAobG9uL2xhdCkgZGlyZWN0bHkuIFNlZQogICAgICAgIGFkZE1hcmtlckJ5QWRkcmVzcygpIGZvciBtb3JlIGRldGFpbHMuCgogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKC05Ni42NTM5LDQwLjgxOTEsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAgICAgCiAgICAKICAgCiAgICBhZGRQb2x5TGluZUJ5QWRkcmVzcygkYWRkcmVzczEsJGFkZHJlc3MyLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIHBvbHlsaW5lIGJldHdlZW4gdGhlIHR3byBnaXZlbiBhZGRyZXNzZXMuIFlvdSBjYW4gb3B0aW9uYWxseQogICAgICAgIHN1cHBseSBhIGNvbG9yIChpbiAjZmZmZmZmIGhleCBub3RhdGlvbiksIHdlaWdodCAodGhpY2tuZXNzIGluIHBpeGVscyksCiAgICAgICAgYW5kIG9wYWNpdHkgKGluIHBlcmNlbnRhZ2UgMC0xMDApLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkUG9seUxpbmVCeUFkZHJlc3MoCiAgICAgICAgICAgICczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLAogICAgICAgICAgICAnODI2IFAgU3QgTGluY29sbiBORSA2ODUwMicsJyNlZWVlZWUnLDUsNTApOwogICAgICAgICAgICAgICAgCiAgICAgICAgCiAgICBhZGRQb2x5TGluZUJ5Q29vcmRzKCRsb24xLCRsYXQxLCRsb24yLCRsYXQyLCRjb2xvciwkd2VpZ2h0LCRvcGFjaXR5KQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgYWRkcyBhIHBvbHlsaW5lIGJldHdlZW4gdGhlIHR3byBnaXZlbiBnZW9jb29yZGluYXRlIHBvaW50cy4gWW91IGNhbiBvcHRpb25hbGx5CiAgICAgICAgc3VwcGx5IGEgY29sb3IgKGluICNmZmZmZmYgaGV4IG5vdGF0aW9uKSwgd2VpZ2h0IChsaW5lIHRoaWNrbmVzcyBpbiBwaXhlbHMpLAogICAgICAgIGFuZCBvcGFjaXR5IChpbiBwZXJjZW50YWdlIDAtMTAwKS4KCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICAkbWFwLT5hZGRQb2x5TGluZUJ5Q29vcmRzKC05Ni42Nyw0MC44Mjc5LC05Ni43MDk1LDQwLjgxNDksJyNlZWVlZWUnLDUsNTApOwoKICAgICAgICAgICAgICAgIAogICAgYWRqdXN0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIGFkanVzdHMgdGhlIG1hcCBjZW50ZXIgY29vcmRzIGJ5IHRoZSBnaXZlbiBsb24vbGF0LiBUaGlzIGlzIGRvbmUKICAgICAgICBhdXRvbWF0aWNhbGx5IGFzIHlvdSBhZGQgbWFya2VycyB0byB0aGUgbWFwLCBvciB5b3UgY2FuIGRvIGl0IG1hbnVhbGx5CiAgICAgICAgd2l0aCB0aGlzIGZ1bmN0aW9uLiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUKICAgICAgICBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseSBuZWNlc3NhcnkgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZCBhbmQKICAgICAgICB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCgogICAgICAgIAogICAgc2V0Q2VudGVyQ29vcmRzKCRsb24sJGxhdCkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIG1hcCBjZW50ZXIgY29vcmRzIHRvIHRoZSBnaXZlbiBsb24vbGF0LiBDZW50ZXIgY29vcmRzIGFyZQogICAgICAgIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBhcyB5b3UgYWRkIG1hcmtlcnMgdG8gdGhlIG1hcCwgb3IgeW91IHJlc2V0IGl0CiAgICAgICAgbWFudWFsbHkgd2l0aCB0aGlzIGZ1bmN0aW9uLiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSBieQogICAgICAgIHRoZSBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseSBuZWNlc3NhcnkgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZAogICAgICAgIGFuZCB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCgoKICAgIHNldExvb2t1cFNlcnZpY2UoJ1lBSE9PJykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgZ2VvY29kZSBsb29rdXAgc2VydmljZS4gRGVmYXVsdCBpcyBZQUhPTywgd2hpY2ggdXNlcyB0aGUKICAgICAgICBZYWhvbyBHZW9jb2RlIEFQSS4gVGhpcyAoY3VycmVudGx5KSB3b3JrcyBmb3IgVVMgYWRkcmVzc2VzIG9ubHkuIEFsc28KICAgICAgICBhdmFpbGFibGUgaXMgR09PR0xFIHdoaWNoIGNhbiBkbyBpbnRsIGFkZHJlc3Nlcy4gQmUgd2FybmVkIHRoaXMgaXMgYQogICAgICAgIGhhY2ssIG5vdCBhbiBvZmZpY2lhbCBBUEkuIFVzZSBhdCB5b3VyIG93biByaXNrLCBubyBndWFyYW50ZWVzLgogICAgCiAgICAKICAgIHNldE1hcmtlckljb24oJGljb25JbWFnZSwkaWNvblNoYWRvd0ltYWdlLCRpY29uQW5jaG9yWCwkaWNvbkFuY2hvclksJGluZm9XaW5kb3dBbmNob3JYLCRpbmZvV2luZG93QW5jaG9yWSkKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgc2V0cyB0aGUgaWNvbiBpbWFnZSBmb3IgQUxMIHRoZSBtYXAgbWFya2Vycy4gQ2FsbCB0aGlzIG9uY2UuIElmIHlvdQogICAgICAgIHdhbnQgdG8gc2V0IGEgZGlmZmVyZW50IGljb24gZm9yIGVhY2ggbWFya2VyLCB1c2UgYWRkTWFya2VySWNvbigpCiAgICAgICAgaW5zdGVhZC4KICAgICAgICAKICAgICAgICBZb3UgbXVzdCBzdXBwbHkgYSBzZXBhcmF0ZSBpbWFnZSBmb3IgdGhlIGljb24gYW5kIGl0cyBzaGFkb3cuCiAgICAgICAgaWNvbkFuY2hvclgvWSBpcyB0aGUgWC9ZIGNvb3JkaW5hdGVzIG9mIHRoZSBpY29uIGZvciB0aGUgbWFwIHBvaW50LgogICAgICAgIGluZm9XaW5kb3dBbmNob3JYL1kgaXMgdGhlIFgvWSBjb29yZGluYXRlcyBvZiB0aGUgaWNvbiB3aGVyZSB0aGUgaW5mbwogICAgICAgIHdpbmRvdyBjb25uZWN0cy4KICAgICAgICAKICAgICAgICBUaGUgaWNvbkltYWdlIGFuZCBpY29uU2hhZG93SW1hZ2UgY2FuIGJlIGVpdGhlciBmdWxseSBxdWFsaWZpZWQgVVJMcywgb3IKICAgICAgICBhIHJlbGF0aXZlIHBhdGggZnJvbSB5b3VyIHdlYiBzZXJ2ZXIgRE9DVU1FTlRfUk9PVC4gVGhlc2UgaW1hZ2VzIE1VU1QKICAgICAgICBleGlzdCBhbmQgcmVhZGFibGUgc28gdGhlIGxpYnJhcnkgY2FuIGNhbGN1bGF0ZSB0aGUgZGltZW5zaW9ucy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRtYXAtPnNldE1hcmtlckljb24oJy9pbWFnZXMvaG91c2UucG5nJywnL2ltYWdlcy9ob3VzZV9zaGFkb3cucG5nJywwLDAsMTAsMTApOwoKCiAgICBhZGRNYXJrZXJJY29uKCRpY29uSW1hZ2UsJGljb25TaGFkb3dJbWFnZSwkaWNvbkFuY2hvclgsJGljb25BbmNob3JZLCRpbmZvV2luZG93QW5jaG9yWCwkaW5mb1dpbmRvd0FuY2hvclkpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHNldHMgdGhlIGljb24gaW1hZ2UgZm9yIHRoZSBDVVJSRU5UIG1hcCBtYXJrZXIuIElNUE9SVEFOVDogeW91IE1VU1QKICAgICAgICBjYWxsIGFkZE1hcmtlckljb24oKSBvbmNlIGZvciBldmVyeSBtYXJrZXIuIERvIG5vdCB1c2Ugc2V0TWFya2VySWNvbigpCiAgICAgICAgaWYgeW91IHVzZSB0aGlzIGZ1bmN0aW9uLgogICAgICAgIAogICAgICAgIFlvdSBtdXN0IHN1cHBseSBhIHNlcGFyYXRlIGltYWdlIGZvciB0aGUgaWNvbiBhbmQgaXRzIHNoYWRvdy4KICAgICAgICBpY29uQW5jaG9yWC9ZIGlzIHRoZSBYL1kgY29vcmRpbmF0ZXMgb2YgdGhlIGljb24gZm9yIHRoZSBtYXAgcG9pbnQuCiAgICAgICAgaW5mb1dpbmRvd0FuY2hvclgvWSBpcyB0aGUgWC9ZIGNvb3JkaW5hdGVzIG9mIHRoZSBpY29uIHdoZXJlIHRoZSBpbmZvCiAgICAgICAgd2luZG93IGNvbm5lY3RzLgogICAgICAgIAogICAgICAgIFRoZSBpY29uSW1hZ2UgYW5kIGljb25TaGFkb3dJbWFnZSBjYW4gYmUgZWl0aGVyIGZ1bGx5IHF1YWxpZmllZCBVUkxzLCBvcgogICAgICAgIGEgcmVsYXRpdmUgcGF0aCBmcm9tIHlvdXIgd2ViIHNlcnZlciBET0NVTUVOVF9ST09ULiBUaGVzZSBpbWFnZXMgTVVTVAogICAgICAgIGV4aXN0IGFuZCByZWFkYWJsZSBzbyB0aGUgbGlicmFyeSBjYW4gY2FsY3VsYXRlIHRoZSBkaW1lbnNpb25zLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+YWRkTWFya2VySWNvbignL2ltYWdlcy9ob3VzZS5wbmcnLCcvaW1hZ2VzL2hvdXNlX3NoYWRvdy5wbmcnLDAsMCwxMCwxMCk7CgoKICAgIHByaW50SGVhZGVySlMoKQogICAgLS0tLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBoZWFkZXIgamF2YXNjcmlwdCB0aGF0IGdvZXMgaW50byB0aGUgPGhlYWQ+PC9oZWFkPiB0YWdzLgogICAgICAgIFRvIHJldHVybiB0aGUgaGVhZGVyIGphdmFzY3JpcHQgaW4gYSB2YXJpYWJsZSwgdXNlIGdldEhlYWRlckpTKCkuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICA8aGVhZD4KICAgICAgICA8P3BocCAkbWFwLT5wcmludEhlYWRlckpTKCk7ID8+CiAgICAgICAgPC9oZWFkPgogICAgCgogICAgZ2V0SGVhZGVySlMoKQogICAgLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyByZXR1cm5zIHRoZSBoZWFkZXIgamF2YXNjcmlwdCB0aGF0IGdvZXMgaW50byB0aGUgPGhlYWQ+PC9oZWFkPiB0YWdzLgogICAgICAgIFRvIHByaW50IHRoZSBoZWFkZXIgamF2YXNjcmlwdCBkaXJlY3RseSwgdXNlIHByaW50SGVhZGVySlMoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDw/cGhwCiAgICAgICAgJGhlYWRlcmpzID0gZ2V0SGVhZGVySlMoKTsKICAgICAgICA/PgogICAgICAgIDxoZWFkPgogICAgICAgIDw/cGhwIGVjaG8gJGhlYWRlcmpzOyA/PgogICAgICAgIDwvaGVhZD4KICAgICAgICAKICAgICAgICAKICAgIHByaW50TWFwSlMoKQogICAgLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBtYXAgamF2YXNjcmlwdC4gSWYgb25Mb2FkKCkgaXMgZW5hYmxlZCwgcHV0IHRoaXMgaW4gdGhlCiAgICAgICAgPGhlYWQ+PC9oZWFkPiB0YWdzLCBhbmQgc3VwcGx5IDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPiBpbiB0aGUgYm9keSB0YWcuCiAgICAgICAgT3RoZXJ3aXNlLCBwdXQgdGhpcyBqdXN0IGJlZm9yZSB0aGUgPC9ib2R5PiB0YWcuCiAgICAgICAgCiAgICAgICAgVG8gcmV0dXJuIHRoZSBtYXAgamF2YXNjcmlwdCBpbiBhIHZhcmlhYmxlLCB1c2UgZ2V0TWFwSlMoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDxoZWFkPgogICAgICAgIDw/cGhwICRtYXAtPnByaW50TWFwSlMoKTsgPz4KICAgICAgICA8L2hlYWQ+CiAgICAKICAgIAogICAgZ2V0TWFwSlMoKQogICAgLS0tLS0tLS0tLQoKICAgICAgICBUaGlzIHJldHVybnMgdGhlIG1hcCBqYXZhc2NyaXB0IHRoYXQgZ29lcyBpbnRvIHRoZSA8aGVhZD48L2hlYWQ+IHRhZ3MuCiAgICAgICAgVG8gcHJpbnQgdGhlIG1hcCBqYXZhc2NyaXB0IGRpcmVjdGx5LCB1c2UgcHJpbnRNYXBKUygpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAkbWFwanMgPSAkbWFwLT5wcmludE1hcEpTKCk7CiAgICAgICAgPz4KICAgICAgICA8aGVhZD4KICAgICAgICA8P3BocCBlY2hvICRtYXBqczsgPz4KICAgICAgICA8L2hlYWQ+CiAgICAgICAgCiAgICAgICAgCiAgICBwcmludE1hcCgpCiAgICAtLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcHJpbnRzIHRoZSBtYXAgaHRtbC4KICAgICAgICBUbyByZXR1cm4gdGhlIG1hcCBodG1sIGluIGEgdmFyaWFibGUsIHVzZSBnZXRNYXAoKS4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgICAgIDw/cGhwIGVjaG8gJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgICAgICA8L2JvZHk+CiAgICAKICAgIAogICAgZ2V0TWFwKCkKICAgIC0tLS0tLS0tCgogICAgICAgIFRoaXMgcmV0dXJucyB0aGUgbWFwIGh0bWwgaW4gYSB2YXJpYWJsZS4KICAgICAgICBUbyBwcmludCB0aGUgbWFwIGh0bWwgZGlyZWN0bHksIHVzZSBwcmludE1hcCgpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPD9waHAKICAgICAgICAkbWFwID0gJG1hcC0+Z2V0TWFwKCk7CiAgICAgICAgPz4KICAgICAgICA8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KICAgICAgICA8P3BocCBlY2hvICRtYXA7ID8+CiAgICAgICAgPC9ib2R5PgoKCiAgICBwcmludFNpZGViYXIoKQogICAgLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgVGhpcyBwcmludHMgdGhlIHNpZGViYXIgaHRtbC4KICAgICAgICBUbyByZXR1cm4gdGhlIHNpZGViYXIgaHRtbCBpbiBhIHZhcmlhYmxlLCB1c2UgZ2V0U2lkZWJhcigpLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CiAgICAgICAgPHRhYmxlPgogICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgPD9waHAgJG1hcC0+cHJpbnRNYXAoKTsgPz4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgPD9waHAgJG1hcC0+cHJpbnRTaWRlYmFyKCk7ID8+CiAgICAgICAgICA8L3RkPgogICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9ib2R5PgogICAgCiAgICAKICAgIGdldFNpZGViYXIoKQogICAgLS0tLS0tLS0tLS0tCgogICAgICAgIFRoaXMgcmV0dXJucyB0aGUgc2lkZWJhciBodG1sIGluIGEgdmFyaWFibGUuCiAgICAgICAgVG8gcHJpbnQgdGhlIHNpZGJhciBodG1sIGRpcmVjdGx5LCB1c2UgcHJpbnRTaWRlYmFyKCkuCiAgICAgICAgCiAgICAgICAgRXhhbXBsZToKICAgICAgICAKICAgICAgICA8P3BocAogICAgICAgICRtYXAgPSAkbWFwLT5nZXRNYXAoKTsKICAgICAgICAkc2lkZWJhciA9ICRtYXAtPmdldFNpZGViYXIoKTsKICAgICAgICA/PgogICAgICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgICAgIDx0YWJsZT4KICAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgogICAgICAgICAgPD9waHAgZWNobyAkbWFwOyA/PgogICAgICAgICAgPC90ZD4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICA8P3BocCBlY2hvICRzaWRlYmFyOyA/PgogICAgICAgICAgPC90ZD4KICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvYm9keT4KICAgICAgICAgICAgICAgIAogICAgCiAgICBnZXRHZW9jb2RlKCRhZGRyZXNzKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgbG9va3MgdXAgdGhlIGdlb2NvZGUgb2YgYW4gYWRkcmVzcy4gSXQgd2lsbCB1c2UgdGhlIGRhdGFiYXNlIGNhY2hlCiAgICAgICAgaWYgYXZhaWxhYmxlLiBJZiB5b3Ugd2FudCB0byBsb29rdXAgYSBnZW9jb2RlIHdpdGhvdXQgdXNpbmcgdGhlIGRhdGFiYXNlCiAgICAgICAgY2FjaGUsIHVzZSBnZW9HZXRDb29yZHMoKS4gTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlCiAgICAgICAgbGlicmFyeSwgaXQgaXNuJ3Qgbm9ybWFsbHkgbmVjZXNzYXJ5IHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kCiAgICAgICAgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJGdlb2NvZGUgPSAkbWFwLT5nZXRHZW9jb2RlKCcyMzcgUyA3MHRoIHN1aXRlIDIyMCBMaW5jb2xuIE5FIDY4NTEwJyk7CiAgICAgICAgCiAgICAgICAgZWNobyAkZ2VvY29kZVsnbGF0J107CiAgICAgICAgZWNobyAkZ2VvY29kZVsnbG9uJ107CiAgICAgICAgCiAgICAgICAgCiAgICBnZXRDYWNoZSgkYWRkcmVzcykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICAgICAgVGhpcyB3aWxsIGdldCB0aGUgY2FjaGVkIGdlb2NvZGUgaW5mbyBmb3IgYW4gYWRkcmVzcyBmcm9tIHRoZSBkYXRhYmFzZQogICAgICAgIGNhY2hlLCBvciByZXR1cm4gRkFMU0UgaWYgbm90aGluZyBpcyBhdmFpbGFibGUuIE5vdGU6IHRoaXMgZnVuY3Rpb24gaXMKICAgICAgICB1c2VkIGludGVybmFsbHkgYnkgdGhlIGxpYnJhcnksIGl0IGlzbid0IG5vcm1hbGx5IG5lY2Vzc2FyeSB1bmxlc3MgeW91CiAgICAgICAgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRnZW9jb2RlID0gJG1hcC0+Z2V0Q2FjaGUoJzIzNyBTIDcwdGggc3VpdGUgMjIwIExpbmNvbG4gTkUgNjg1MTAnKTsKICAgICAgICAKICAgICAgICBlY2hvICRnZW9jb2RlWydsYXQnXTsKICAgICAgICBlY2hvICRnZW9jb2RlWydsb24nXTsKICAgICAgICAKCiAgICBwdXRDYWNoZSgkYWRkcmVzcywkbG9uLCRsYXQpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAKICAgICAgICBUaGlzIHdpbGwgaW5zZXJ0IGdlb2NvZGUgaW5mbyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MgaW50byB0aGUgZGF0YWJhc2UKICAgICAgICBjYWNoZS4gTm90ZTogdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGxpYnJhcnksIGl0IGlzbid0CiAgICAgICAgbm9ybWFsbHkgbmVjZXNzYXJ5IHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIG5lZWQgYW5kIHlvdSBrbm93IHdoYXQgeW91CiAgICAgICAgYXJlIGRvaW5nLgogICAgICAgIAogICAgICAgIEV4YW1wbGU6CiAgICAgICAgCiAgICAgICAgJG1hcC0+cHV0Q2FjaGUoJzIzNyBTIDcwdGggc3VpdGUgMjIwIExpbmNvbG4gTkUgNjg1MTAnLC05Ni42MjUzOCw0MC44MTI0MzgpOwogICAgICAgIAoKICAgIGdlb0dldENvb3JkcygkYWRkcmVzcykKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIAogICAgICAgIFRoaXMgbG9va3MgdXAgdGhlIGdlb2NvZGUgb2YgYW4gYWRkcmVzcyBkaXJlY3RseSAobm90IGZyb20gY2FjaGUuKSBOb3RlOgogICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBsaWJyYXJ5LCBpdCBpc24ndCBub3JtYWxseQogICAgICAgIG5lY2Vzc2FyeSB1bmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyBuZWVkIGFuZCB5b3Uga25vdyB3aGF0IHlvdSBhcmUKICAgICAgICBkb2luZy4KICAgICAgICAKICAgICAgICBFeGFtcGxlOgogICAgICAgIAogICAgICAgICRnZW9jb2RlID0gJG1hcC0+Z2VvR2V0Q29vcmRzKCcyMzcgUyA3MHRoIHN1aXRlIDIyMCBMaW5jb2xuIE5FIDY4NTEwJyk7CiAgICAgICAgCiAgICAgICAgZWNobyAkZ2VvY29kZVsnbG9uJ107CiAgICAgICAgZWNobyAkZ2VvY29kZVsnbGF0J107CgogICAgICAgIAogICAgICAgIApJTlRFR1JBVElORyBHT09HTEUgTUFQUyBXSVRIIFNNQVJUWSBURU1QTEFURVMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgSW50ZWdyYXRpbmcgd2l0aCBTbWFydHkgaXMgYXMgc2ltcGxlIGFzIGFzc2lnbmluZyB0aGUgbmVjZXNzYXJ5IHZhcnMgdG8gdGhlCiAgICB0ZW1wbGF0ZSBhbmQgdGhlbiBkaXNwbGF5aW5nIHRoZW0uIE5vdGU6IFRoaXMgZXhhbXBsZSBkb2VzIG5vdCBjb3ZlciBob3cgdG8KICAgIHNldHVwIFNtYXJ0eSwgcGxlYXNlIHVzZSB0aGUgU21hcnR5IGRvY3VtZW50YXRpb24uCiAgICAKICAgIEV4YW1wbGU6CiAgICAKICAgIDw/cGhwCiAgICByZXF1aXJlKCdTbWFydHkuY2xhc3MucGhwJyk7CiAgICByZXF1aXJlKCdHb29nbGVNYXBBUEkuY2xhc3MucGhwJyk7CgogICAgJHNtYXJ0eSA9IG5ldyBTbWFydHkoKTsKICAgICRtYXAgPSBuZXcgR29vZ2xlTWFwQVBJKCk7CiAgICAKICAgIC8vIHNldHVwIGRhdGFiYXNlIGZvciBnZW9jb2RlIGNhY2hpbmcKICAgICRtYXAtPnNldERTTignbXlzcWw6Ly9VU0VSOlBBU1NAbG9jYWxob3N0L0dFT0NPREVTJyk7CiAgICAvLyBlbnRlciBZT1VSIEdvb2dsZSBNYXAgS2V5CiAgICAkbWFwLT5zZXRBUElLZXkoJ1lPVVJHT09HTEVNQVBLRVknKTsKICAgIAogICAgLy8gY3JlYXRlIHNvbWUgbWFwIG1hcmtlcnMKICAgICRtYXAtPmFkZE1hcmtlckJ5QWRkcmVzcygnNjIxIE4gNDh0aCBTdCAjIDYgTGluY29sbiBORSA2ODUwMicsJ1BKIFBpenphJywnPGI+UEogUGl6emE8L2I+Jyk7CiAgICAkbWFwLT5hZGRNYXJrZXJCeUFkZHJlc3MoJzgyNiBQIFN0IExpbmNvbG4gTkUgNjg1MDInLCdPbGQgQ2hpY2FnbycsJzxiPk9sZCBDaGljYWdvPC9iPicpOwogICAgJG1hcC0+YWRkTWFya2VyQnlBZGRyZXNzKCczNDU3IEhvbGRyZWdlIFN0IExpbmNvbG4gTkUgNjg1MDInLCJWYWxlbnRpbm8ncyIsIjxiPlZhbGVudGlubydzPC9iPiIpOwogICAgCiAgICAvLyBhc3NpZ24gU21hcnR5IHZhcmlhYmxlczsKICAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX2hlYWRlcicsJG1hcC0+Z2V0SGVhZGVySlMoKSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXBfanMnLCRtYXAtPmdldE1hcEpTKCkpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdnb29nbGVfbWFwX3NpZGViYXInLCRtYXAtPmdldFNpZGViYXIoKSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2dvb2dsZV9tYXAnLCRtYXAtPmdldE1hcCgpKTsKICAgIAogICAgLy8gZGlzcGxheSB0aGUgdGVtcGxhdGUKICAgICRzbWFydHktPmRpc3BsYXkoJ2luZGV4LnRwbCcpOwogICAgPz4KICAgIAogICAgY29udGVudHMgb2YgaW5kZXgudHBsOgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgCiAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CiAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiPgogICAgPGhlYWQ+CiAgICB7JGdvb2dsZV9tYXBfaGVhZGVyfQogICAgeyRnb29nbGVfbWFwX2pzfQogICAgPCEtLSBuZWNlc3NhcnkgZm9yIGdvb2dsZSBtYXBzIHBvbHlsaW5lIGRyYXdpbmcgaW4gSUUgLS0+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICB2XDoqIHsKICAgICAgICBiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDwvaGVhZD4KICAgIDxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgogICAgPHRhYmxlPgogICAgICA8dHI+CiAgICAgICAgPHRkPnskZ29vZ2xlX21hcH08L3RkPgogICAgICAgIDx0ZD57JGdvb2dsZV9tYXBfc2lkZWJhcn08L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KICAgIDwvYm9keT4KICAgIDwvaHRtbD4KCgpDUkVESVRTOgotLS0tLS0tLQoKRXhjZWxsZW50IEdvb2dsZSBNYXBzIHR1dG9yaWFscyBieSBNaWtlOgpodHRwOi8vd3d3LmVjb255bS5kZW1vbi5jby51ay9nb29nbGVtYXBzL2luZGV4Lmh0bQoKUGVvcGxlIHdobyBoYXZlIGhlbHBlZC9jb250cmlidXRlZDoKCkNoYXJsaWUgRGF3ZXMKSmFrZSBLcm9obgpDbGFyayBGcmVpZmVsZCA8Y2xhcmsgQVQgdXNlcnMgRE9UIHNvdXJjZWZvcmdlIERPVCBuZXQ+CgpBbnlvbmUgSSBtaXNzZWQsIGRyb3AgbWUgYSBsaW5lIQoKTW9udGUgT2hydCA8bW9udGUgW0FUXSBvaHJ0IFtET1RdIGNvbT4K]]></data>
	</file>
	<file>
	  <filename>/lib/rcrud.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgIC8qCiAgIAogICAgICBSQ1JVRCBDbGFzcwogICAgICBieSBSb2JlcnQgQnJvd24KICAgICAgYnJvd25ybEBnbWFpbC5jb20KICAgICAgCiAgICAgIHZlcnNpb246IC4wNCAyMDA2LTA3LTIwCiAgICAgIAogICAgICBVc2VhZ2U6CiAgICAgIAogICAgICByZXF1aXJlX29uY2UoICdyY3J1ZC5pbmMucGhwJyApOwogICAgICAkY28gPSBuZXcgcmNydWQoICRhZG9kYmxpdGVfZGJfY29ubmVjdGlvbiAsICd0YWJsZV9uYW1lJyApOwogICAgICAkY28tPmdvKCk7CiAgIAogICAKICAgKi8KCgogICBjbGFzcyByY3J1ZAogICB7CgogICAgICAjdGhpcyB2YXIgaXMgdGhlIHRhYmxlIHRoYXQgdGhpcyBvYmplY3Qgd2lsbCBjcnVkIG9uICAgCiAgICAgIHZhciAkdGFibGU7CiAgICAgIAogICAgICAjdGhpcyB2YXIgd2lsbCBob2xkcyBmaWVsZHMgYW5kIGNvbmZpZyBpbmZvCiAgICAgIHZhciAkZmllbGRzID0gYXJyYXkoKTsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUgYWRvZGJsaXRlIGRiIGNvbm5lY3Rpb24KICAgICAgdmFyICRkYjsKICAgICAgCiAgICAgICN0aGlzIHZhciBob2xkcyB0aGUga2V5IGZpZWxkCiAgICAgIHZhciAka2V5OwogICAgICAKICAgICAgI3RoaXMgdmFyIGhvbGRzIHRoZSBjb2xvciBmb3IgdGhlIGVycm9ycyBpbiBhIGZvcm0sIGllLCByZWQgLCAjRkYwMDAwCiAgICAgIHZhciAkZXJyb3Jjb2xvciA9ICIjRkYwMDAwIjsKICAgICAgCiAgICAgICN0aGlzIHZhcmlhYmxlIGhvbGRzIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZCBhYm92ZSBnZXRzIHNldCBpbiB0aGUgY29uc3RydWN0b3IKICAgICAgdmFyICRoZWFkZXI7CiAgICAgIAogICAgICAjdGhpcyB2YXJpYWJsZSBob2xkcyB3aGljaCBmaWVsZCB0aGF0IHdlIHNob3VsZCBzb3J0IGJ5IGluIHRoZSBsaXN0aW5nCiAgICAgICNnZXRzIHNldCB0byB0aGUga2V5IGluIHRoZSBjb25zdHJ1Y3RvcgogICAgICB2YXIgJGRlZl9zb3J0OwogICAKICAgCiAgIAogICAgICBmdW5jdGlvbiByY3J1ZCggJGRiICwgJHRhYmxlbmFtZSApCiAgICAgIHsKICAgICAgICAgJHRoaXMtPmRiID0gJGRiOwogICAgICAgICAkdGhpcy0+dGFibGUgPSAkdGFibGVuYW1lOwogICAgICAgICAKICAgICAgICAgJHEgPSAiREVTQ1JJQkUgIi4kdGhpcy0+dGFibGU7CiAgICAgICAgICRxciA9ICRkYi0+RXhlY3V0ZSggJHEgKSBvciBkaWUoICJUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvciB0YWJsZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkLCBwbGVhc2UgY2hlY2sgY29kZSBhbmQgdHJ5IGFnYWluLiIgKTsKICAgICAgICAgCiAgICAgICAgIGlmKCAkcXItPlJlY29yZENvdW50KCkgPCAxICkKICAgICAgICAgewogICAgICAgICAgICBkaWUoICJUaGUgdGFibGUgbmFtZSBzdXBwbGllZCB0byByY3J1ZCBpcyBpbnZhbGlkIiApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+aGVhZGVyID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkdGhpcy0+dGFibGUgKTsKICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICB3aGlsZSAoJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApIAogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV0gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ29yZGVyJ10gPSAkaSsrOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsndmlzaWJsZV9pbl9saXN0J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fYWRkJ10gPSB0cnVlOwogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ3Zpc2libGVfaW5fZWRpdCddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF93aWR0aCddID0gMzA7CiAgICAgICAgICAgICAgICAgJHRoaXMtPmZpZWxkc1skcm93WydGaWVsZCddXVsnZmllbGRfaGVpZ2h0J10gPSAxMDsgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJ0ZXh0IjsKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF9lcnJvciddID0gIkVycm9yOiBJbnZhbGlkIEZvcm0gRGF0YSI7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmKCAkcm93WydLZXknXSA9PSAiUFJJIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2lzS2V5J10gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXkgPSAkcm93WydGaWVsZCddOwogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkaXNwbGF5IjsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWyd2aXNpYmxlX2luX2FkZCddID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRlZl9zb3J0ID0gJHJvd1snRmllbGQnXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoICRyb3dbJ1R5cGUnXSA9PSAidGV4dCIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAidGV4dGFyZWEiOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRldGltZSIgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiZGF0ZXRpbWUiOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiggJHJvd1snVHlwZSddID09ICJkYXRlIiApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJHJvd1snRmllbGQnXV1bJ2ZpZWxkX3R5cGUnXSA9ICJkYXRlIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYoIGVyZWcoICJpcHN0YW1wIiAsICRyb3dbJ0ZpZWxkJ10gICkgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydmaWVsZF90eXBlJ10gPSAiaXBzdGFtcCI7CiAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAkdGhpcy0+ZmllbGRzWyRyb3dbJ0ZpZWxkJ11dWydsYWJlbCddID0gJHRoaXMtPmZpZWxkMmxhYmVsKCAkcm93WydGaWVsZCddICk7CiAgICAgICAgICAgIH0jZW5kIHdoaWxlCgogICAgICAgICAgICAKICAgICAgICAgfSNlbmQgaWYKICAgICAgfSNlbmQgY29uc3RydWN0b3IKICAgICAgCiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBmaWVsZF9uYW1lIHRvIEZpZWxkIE5hbWUKICAgICAgZnVuY3Rpb24gZmllbGQybGFiZWwoICRmaWVsZCApCiAgICAgIHsKICAgICAgICAgcmV0dXJuIHVjd29yZHMoIGVyZWdfcmVwbGFjZSggIl8iICwgIiAiICwgJGZpZWxkICkgKTsKICAgICAgfQogICAgICAKCiAgICAgICN0aGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRoYXQgd2lsbCBkbyBldmVyeSB0aGluZyBvciBhdGxlYXN0IGNhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyAgICAgIAogICAgICBmdW5jdGlvbiBnbygpCiAgICAgIHsKICAgICAgICAgICAgI21ha2UgdGhhdCB0aGUgcmNydWQgc3R1ZmYgaGFwcGVuaW5nIGluICRfR0VUIGlzIGZvciB0aGlzIGluc3RhbmNlIGFuZCBub3QgZm9yIGFub3RoZXIKICAgICAgICAgICAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfdGFibGUnXSApICYmICRfR0VUWydyY3J1ZF90YWJsZSddICE9ICR0aGlzLT50YWJsZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgCiAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCAhIGlzc2V0KCAkX0dFVFsncmNydWRfYWN0aW9uJ10gKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHJjcnVkX2FjdGlvbiA9ICJzaG93IjsgLy9kZWZhdWx0IGlzIHRvIHNob3cgd2hhdCBpcyBpbiB0aGUgZGIgdGFibGUuCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICRyY3J1ZF9hY3Rpb24gPSAkX0dFVFsncmNydWRfYWN0aW9uJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGVjaG8gIjxoMz4iLiR0aGlzLT5oZWFkZXIuIjwvaDM+XG4iOwogICAgICAgICAgICAKICAgICAgICAgICAgc3dpdGNoKCAkcmNydWRfYWN0aW9uICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlICJzaG93IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPnNob3coKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgImRlbGV0ZSI6CiAgICAgICAgICAgICAgICAgICR0aGlzLT5kZWxldGUoICRfR0VUWydyY3J1ZF9pZCddICk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJhZGQiOgogICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkKCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlICJlZGl0IjoKICAgICAgICAgICAgICAgICAgJHRoaXMtPmVkaXQoKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgfSNlbmQgc3dpdGNoCiAgICAgIAogICAgICB9I2VuZCBnbyBmdW5jdGlvbgogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBhZGRlZCAqKk1BSk9SKioKICAgICAgZnVuY3Rpb24gYWRkKCkKICAgICAgewoJJGVycm9ycyA9ICcnOwoJJHNxbCA9ICcnOwogICAgICAgICAjaGFzIHRoZSBmb3JtIGJlZW4gc3VibWl0dGVkCiAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWydyY3J1ZF9zdWInXSApICkKICAgICAgICAgewogCiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZG8gYW4gaW5zZXJ0CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAjZmlyc3QgYnVpbGQgdGhlIFNFVCBwb3J0aW9uCiAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJGtdICkgKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAkc3FsIC4gJGsgLiAiID0gIiAuICR0aGlzLT5kYi0+cXN0ciggJF9QT1NUWyRrXSApIC4gIiwgIjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgI3NlY29uZCB0YWtlIG9mZiB0aGUgbGFzdCAnLCAnCiAgICAgICAgICAgICAgICAgICRzcWwgPSBlcmVnX3JlcGxhY2UoICIsICQiICwgIiIgLCAkc3FsICk7CiAgICAgICAgICAgICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gIi4kdGhpcy0+dGFibGUuIiBTRVQgIi4kc3FsOwogICAgICAgICAgICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRzcWwgKSBvciBkaWUoICJSQ1JVRDogQ3JlYXRlIE5ldyBTUUwgUHJvYmxlbTogIi4kdGhpcy0+ZGItPkVycm9yTXNnKCkgKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjxwPllvdXIgaXRlbSBoYXMgYmVlbiBjcmVhdGVkLjwvcD4iOwogICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICB9CgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkdGhpcy0+bWFrZV9mb3JtKCAidmlzaWJsZV9pbl9hZGQiICwgIkNyZWF0ZSBOZXciICwgJGVycm9ycyApOwogICAgICAgICAkdGhpcy0+bWFrZV9yZXR1cm5fbGluaygpOwogICAgICAgICAKICAgICAgCiAgICAgIH0jZW5kIGFkZCBmdW5jdGlvbiAgICAgIAogICAgICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIGFsbG93cyBhIHJlY29yZCB0byBiZSBlZGl0ZWQgKipNQUpPUioqCiAgICAgIGZ1bmN0aW9uIGVkaXQoKQogICAgICB7CgkkZXJyb3JzID0gJyc7Cgkkc3FsID0gIiI7CiAgICAgICAgICNoYXMgdGhlIGZvcm0gYmVlbiBzdWJtaXR0ZWQKICAgICAgICAgaWYoIGlzc2V0KCAkX1BPU1RbJ3JjcnVkX3N1YiddICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAgICNjb21waWxlIGFueSBkYXRldGltZXMgaW50byBvbmUgZmllbGQgYWdhaW4uCiAgICAgICAgICAgICAgICR0aGlzLT5jb21waWxlX2RhdGV0aW1lcygpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgI2Zvcm0gaGFkIG5vIGVycm9ycwogICAgICAgICAgICAgICBpZiggISAkZXJyb3JzID0gJHRoaXMtPmZvcm1fZXJyb3JzKCkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICNkbyBhbiB1cGRhdGUKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNmaXJzdCBidWlsZCB0aGUgU0VUIHBvcnRpb24KICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgICAgICAgIHsKCQkgCiAgICAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJF9QT1NUWyRrXSApICkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJHNxbCAuICRrIC4gIiA9ICIgLiAkdGhpcy0+ZGItPnFzdHIoICRfUE9TVFska10gKSAuICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICNzZWNvbmQgdGFrZSBvZmYgdGhlIGxhc3QgJywgJwogICAgICAgICAgICAgICAgICAkc3FsID0gZXJlZ19yZXBsYWNlKCAiLCAkIiAsICIiICwgJHNxbCApOwogICAgICAgICAgICAgICAgICAkc3FsID0gIlVQREFURSAiLiR0aGlzLT50YWJsZS4iIFNFVCAiLiRzcWwuIiBXSEVSRSAiLiR0aGlzLT5rZXkuIiA9ICIuJHRoaXMtPmRiLT5xc3RyKCAkX0dFVFsncmNydWRfaWQnXSApLiIgTElNSVQgMSI7CiAgICAgICAgICAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHNxbCApIG9yIGRpZSggIlJDUlVEIEVkaXQgU1FMIFByb2JsZW06ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBlY2hvICI8cD5Zb3VyIGl0ZW0gaGFzIGJlZW4gdXBkYXRlZC48L3A+IjsKICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfcmV0dXJuX2xpbmsoKTsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgfQoKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgCiAgICAgICAgICAgICNmaWxsICRfUE9TVCB3aXRoIHRoZSB2YWx1ZXMgb25lIHRpbWUsIG9uIGZpcnN0IHZpc2l0LgogICAgICAgICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRoaXMtPnRhYmxlLiIgV0hFUkUgIi4kdGhpcy0+a2V5LiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJF9HRVRbJ3JjcnVkX2lkJ10gKTsKICAgICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIEVkaXQgVmFsdWVzIEZpbGw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgICAgICRyb3cgPSAkcXItPkZldGNoUm93KCk7CiAgICAgICAgICAgICRfUE9TVCA9ICRyb3c7CiAgICAgICAgIH0KICAgICAgCiAgICAgICAgICNtYWtlIHRoZSBmb3JtCiAgICAgICAgICR0aGlzLT5tYWtlX2Zvcm0oICJ2aXNpYmxlX2luX2VkaXQiLCAiU2F2ZSIgLCAkZXJyb3JzICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JldHVybl9saW5rKCk7CiAgICAgICAgIAogICAgICB9ICAgICAgCgoKCiAgICAgICN0aGlzIG1ha2VzIHRoZSBmb3JtIGZvciBhZGQgYW5kIGVkaXQKICAgICAgI3Nob3cgdGhlIG9uZXMgdGhhdCBoYXZlIHRoZSB2aXNpYmlsaXR5CiAgICAgICNwbGFjZSBzdWJsYWJlbCBvbiB0aGUgc3VibWl0IGJ1dHRvbgogICAgICAjc2hvdyB0aGVzZSBlcnJvcnMgd2hlcmUgbmVlZGVkCiAgICAgIGZ1bmN0aW9uIG1ha2VfZm9ybSggJHZpc2liaWxpdHksICRzdWJsYWJlbCwgJGVycm9ycyApCiAgICAgIHsKICAgICAgICAgICAgI3RoaXMgZm9ybSBwb3N0cyB0byBpdHNlbGYgc28gbm8gYWN0aW9uIHNwZWNpZmllZAogICAgICAgICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+XG4iOwogICAgICAgICAgICBlY2hvICI8dGFibGUgY2xhc3M9XCJwYWdldGFibGVcIiB3aWR0aD1cIjEwMCVcIj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yZWFjaCggJHRoaXMtPmZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgICAgIGlmKCAkdlskdmlzaWJpbGl0eV0gKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCggJGVycm9yc1ska10gKSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCBjb2xzcGFuPVwiMlwiPiI7CiAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzcGFuIHN0eWxlPVwiY29sb3I6ICIuJHRoaXMtPmVycm9yY29sb3IuIjtcIj4iOwogICAgICAgICAgICAgICAgICAgICBlY2hvICR2WydmaWVsZF9lcnJvciddOwogICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3NwYW4+PC90ZD48L3RyPlxuIjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGVjaG8gIjx0cj5cbiI7CiAgIAogICAgICAgICAgICAgICAgICBlY2hvICIgPHRkPiIuJHZbJ2xhYmVsJ10uIjwvdGQ+XG4iOwogICAKICAgICAgICAgICAgICAgICAgZWNobyAiIDx0ZD5cbiI7CgoJCSAgaWYoIWlzc2V0KCRfUE9TVFska10pKSB7CgkJICAgICRfUE9TVFska10gPSAnJzsKCQkgIH0KCiAgICAgICAgICAgICAgICAgIHN3aXRjaCggJHZbJ2ZpZWxkX3R5cGUnXSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgdHJlYXRlbWVudCBvZiB0aGUgaWNvbiBmaWVsZCwgc2luY2UgaXQgc2hvdWxkIGJlIGEgZHJvcGRvd24gbGlzdCBvZiBhdmFpbGFibGUgbWFya2VyIGltYWdlcwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRrID09ICdpY29uJyApIHsKICAgICAgICAgICAgICAgICAgICAgCS8vIE9wZW4gaW1hZ2VzIGRpcmVjdG9yeSBhbmQgbGlzdCBpdHMgY29udGVudHMKICAgICAgICAgICAgICAgICAgICAgCWlmIChmaWxlX2V4aXN0cyggJHRoaXMtPnBhdGggKSkgewoJICAgICAgICAgICAgICAgICAgICAgCSRmaWxlY291bnQgPSAwOwoJCQkJCQkkZGlyID0gb3BlbmRpcigkdGhpcy0+cGF0aCk7CgkJCQkJCS8vIEZpbHRlciBvdXQgdGhlIGRpcmVjdG9yeSBjb250cm9saW5nIGNoYXJhY3RlcnMgYW5kIGJ1aWxkIHNlbGVjdGFibGUgb3B0aW9ucyBvZiB0aGUgb3RoZXJzCgkJCQkJCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpCgkJCQkJCSAgewoJCQkJCQkgIAlpZiAoJGZpbGUgIT0nLicgJiYgJGZpbGUhPScuLicpIHsKCQkJCQkJCSAgCWlmICgkZmlsZWNvdW50ID09IDApIHsKCQkJCQkJCSAgCQllY2hvICc8c2VsZWN0IG5hbWU9IicuJGsuJyI+XG4nOwoJCQkJCQkJICAJCWVjaG8gJyAgPG9wdGlvbiB2YWx1ZT0iIj4gPC9vcHRpb24+XG4nOwoJCQkJCQkJICAJfQoJCQkJCQkJICAJaWYgKCAkX1BPU1RbJGtdID09ICRmaWxlICkgewoJCQkJCQkJCSAgCWVjaG8gJyAgPG9wdGlvbiB2YWx1ZT0iJyAuICRmaWxlIC4gJyIgU0VMRUNURUQ+JyAuICRmaWxlIC4gJzwvb3B0aW9uPlxuJzsKCQkJCQkJCSAgCX0gZWxzZSB7CgkJCQkJCQkJICAJZWNobyAnICA8b3B0aW9uIHZhbHVlPSInIC4gJGZpbGUgLiAnIj4nIC4gJGZpbGUgLiAnPC9vcHRpb24+XG4nOwoJCQkJCQkJICAJfQoJCQkJCQkJICAJJGZpbGVjb3VudCsrOwoJCQkJCQkgIAl9CgkJCQkJCSAgfQoJCQkJCQljbG9zZWRpcigkZGlyKTsKCQkJCQkJLy8gU2hvdyBlcnJvciBtZXNzYWdlIHRoYXQgbm8gaW1hZ2VzIHdlcmUgZm91bmQgYXQgYWxsCgkJCQkJCWlmICgkZmlsZWNvdW50ID09IDApIHsKCQkJCQkJCWVjaG8gJHRoaXMtPm1hcmtlcmVycm9yOwoJCQkJCQl9IGVsc2UgewoJICAgICAgICAgICAgICAgICAgICAgCQllY2hvICI8L3NlbGVjdD4iOwoJICAgICAgICAgICAgICAgICAgICAJCX0KCQkJCQl9IGVsc2UgewoJCQkJCQllY2hvICR0aGlzLT5wYXRoZXJyb3I7CgkJCQkJfQkJCQkJIAogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAJCWVjaG8gIiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiIi4kay4iXCIgdmFsdWU9XCIiLiAkX1BPU1RbJGtdIC4gIlwiIHNpemU9XCIiLiR2WydmaWVsZF93aWR0aCddLiJcIj5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHRhcmVhIjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDx0ZXh0YXJlYSBuYW1lPVwiIi4kay4iXCIgUk9XUz0iLiR2WydmaWVsZF9oZWlnaHQnXS4iIENPTFM9Ii4kdlsnZmllbGRfd2lkdGgnXS4iPiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJF9QT1NUWyRrXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlICJkaXNwbGF5IjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkX1BPU1RbJGtdOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiaXBzdGFtcCI6CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiIi4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iXCI+XG4iOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRfU0VSVkVSWydSRU1PVEVfQUREUiddOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiIi4kay4iXCIgdmFsdWU9XCIwXCIgPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiIi4kay4iXCIgdmFsdWU9XCIxXCIiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggJF9QT1NUWyRrXSA9PSAiMSIgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiBDSEVDS0VEICI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNoZWNrYm94X29uIjoKICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMFwiID5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIiIuJGsuIlwiIHZhbHVlPVwiMVwiIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRfUE9TVFska10gPT0gIjEiICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgQ0hFQ0tFRCAiOwogICAgICAgICAgICAgICAgICAgICAgICB9CgkJCWlmKCAkX1BPU1RbJGtdID09ICcnICkgewoJCQkgIC8vc2hvdWxkIG9ubHkgYWZmZWN0IGFkZAoJCQkgIGVjaG8gIiBDSEVDS0VEICI7CgkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9kYXRlKCAkayApOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZGF0ZXRpbWUiOgogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bWFrZV9kYXRldGltZSggJGsgKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIGlmKCBlcmVnKCAiXnNlbGVjdCIgLCAkdlsnZmllbGRfdHlwZSddICkgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICRwYXJ0cyA9IHNwbGl0KCAiXHwiICwgJHZbJ2ZpZWxkX3R5cGUnXSApOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCAkcGFydHNbMV0gKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInJhbmdlIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoICRwYXJ0c1syXSAsICRwYXJ0c1szXSAsICRrICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ0YWJsZSI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYWtlX3RhYmxlX3NlbGVjdG9yKCAkcGFydHNbMl0gLCAkcGFydHNbM10gLCAkcGFydHNbNF0gLCAkayApOwogICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBpZiggZXJlZyggIl5yYWRpbyIgLCAkdlsnZmllbGRfdHlwZSddICkgKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5tYWtlX3JhZGlvcyggJGsgKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgZWNobyAiIDwvdGQ+XG4iOyAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICBlY2hvICI8L3RyPlxuIjsgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIH0jZW5kIGZvciBlYWNoCiAgICAgICAgICAgIAogICAgICAgICAgICBlY2hvICI8dHI+PHRkIGNvbHNwYW49XCIyXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwicmNydWRfc3ViXCIgdmFsdWU9XCIiLiRzdWJsYWJlbC4iXCIvPjwvdGQ+PC90cj5cbiI7CiAgICAgICAgICAgIAogICAgICAgICAgICBlY2hvICI8L3RhYmxlPlxuIjsKICAgICAgICAgICAgZWNobyAiPC9mb3JtPlxuIjsKICAgICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIH0jZW5kIGZvcm0gZnVuY3Rpb24gICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb25zIGRlbGV0ZXMgYSByZWNvcmQKICAgICAgZnVuY3Rpb24gZGVsZXRlKCAkaWQgKQogICAgICB7CiAgICAgICAgICRxID0gIkRFTEVURSBGUk9NICIuJHRoaXMtPnRhYmxlLiIgV0hFUkUgIi4kdGhpcy0+a2V5LiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJGlkICkuIiBMSU1JVCAxIjsKICAgICAgICAgJHFyID0gJHRoaXMtPmRiLT5FeGVjdXRlKCAkcSApIG9yIGRpZSggIlJDUlVEIERFTEVURSBTUUw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgIGVjaG8gIlRoYXQgcmVjb3JkIGhhcyBiZWVuIGRlbGV0ZWQuPC9wPiI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JldHVybl9saW5rKCk7CiAgICAgICAgIAogICAgICB9CiAgICAgIAogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIHNob3dzIHRoZSBkYXRhIGluIGEgdGFibGUgaWYgeW91IG5lZWQgc29tZXRoaW5nIGZhbmN5IGVkaXQgYWxsIHlvdSB3YW50IEkgd29udCBzdG9wIHlvdQogICAgICBmdW5jdGlvbiBzaG93KCkKICAgICAgewoJJHVwZG93biA9ICcnOwoKICAgICAgICAgaWYoIGlzc2V0KCAkX0dFVFsncmNydWRfdXBkb3duJ10gKSAmJiAoICRfR0VUWydyY3J1ZF91cGRvd24nXSA9PSAiQVNDIiB8fCAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkRFU0MiICkgKQogICAgICAgICB7CiAgICAgICAgICAgICAkdXBkb3duID0gJF9HRVRbJ3JjcnVkX3VwZG93biddOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAkdXBkb3duID0gIkFTQyI7CiAgICAgICAgICAgICRfR0VUWydyY3J1ZF91cGRvd24nXSA9ICJBU0MiOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiggISBpc3NldCggJF9HRVRbJ3JjcnVkX3NvcnRieSddICkgfHwgISBpc3NldCggJHRoaXMtPmZpZWxkc1skX0dFVFsncmNydWRfc29ydGJ5J11dICkgKQogICAgICAgICB7CiAgICAgICAgICAgICRzb3J0YnkgPSAkdGhpcy0+ZGVmX3NvcnQ7CiAgICAgICAgICAgICRfR0VUWydyY3J1ZF9zb3J0YnknXSA9ICRzb3J0Ynk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICRzb3J0YnkgPSAkX0dFVFsncmNydWRfc29ydGJ5J107CiAgICAgICAgIH0KCiAgICAgICAgIAogICAgICAgICBlY2hvICc8dGFibGUgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIyIiBjbGFzcz0icGFnZXRhYmxlIiB3aWR0aD0iMTAwJSI+JzsKICAgICAgICAgZWNobyAiPHRoZWFkPlxuIjsKICAgICAgICAgZWNobyAnPHRyPic7CiAgICAgICAgIGVjaG8gIlxuIjsKICAgICAgICAgICAgICAgCiAgICAgICAgICNzaG93IHRoZSB0YWJsZSBoZWFkZXJzCiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgIGlmKCAkdGhpcy0+ZmllbGRzWyRrXVsndmlzaWJsZV9pbl9saXN0J10gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGVjaG8gIiAgIDx0aD4iOwogICAgICAgICAgICAgICBlY2hvICR2WydsYWJlbCddOwoKICAgICAgICAgICAgICAgZWNobyAiJm5ic3A7IjsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiR0aGlzLT5tYWtldXJsKCAic2hvdyIgLCAtMSApLiImYW1wO3JjcnVkX3NvcnRieT0iLiRrLiImYW1wO3JjcnVkX3VwZG93bj1BU0NcIj4mYW5kOzwvYT4iOwogICAgICAgICAgICAgICBpZiggJGsgPT0gJF9HRVRbJ3JjcnVkX3NvcnRieSddICYmICRfR0VUWydyY3J1ZF91cGRvd24nXSA9PSAiQVNDIiApCiAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZWNobyAiLiI7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGVjaG8gIiZuYnNwOyI7CiAgICAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kdGhpcy0+bWFrZXVybCggInNob3ciICwgLTEgKS4iJmFtcDtyY3J1ZF9zb3J0Ynk9Ii4kay4iJmFtcDtyY3J1ZF91cGRvd249REVTQ1wiPiZvcjs8L2E+IjsKICAgICAgICAgICAgICAgaWYoICRrID09ICRfR0VUWydyY3J1ZF9zb3J0YnknXSAmJiAkX0dFVFsncmNydWRfdXBkb3duJ10gPT0gIkRFU0MiICkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBlY2hvICIuIjsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBlY2hvICI8L3RoPlxuIjsKICAgICAgICAgICAgfQogICAgICAgICB9CgogICAgICAgICBlY2hvICI8dGggd2lkdGg9XCIxJVwiPiZuYnNwOzwvdGg+XG4iOwogICAgICAgICBlY2hvICI8dGggd2lkdGg9XCIxJVwiPiZuYnNwOzwvdGg+XG4iOwoKICAgICAgICAgZWNobyAnPC90cj4nOwogICAgICAgICBlY2hvICJcbiI7CiAgICAgICAgIGVjaG8gIjwvdGhlYWQ+XG4iOwogICAgICAgICAKICAgICAgICAgI25vdyB0aGUgZGF0YSAgIAogICAgICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuJHRoaXMtPnRhYmxlLiIgT1JERVIgQlkgIi4kc29ydGJ5LiIgIi4kdXBkb3duOwogICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRxICkgb3IgZGllKCAiUkNSVUQgU0hPVyBTUUw6ICIuJHRoaXMtPmRiLT5FcnJvck1zZygpICk7CiAgICAgICAgIAogICAgICAgICAkaSA9IDA7CiAgICAgICAgIHdoaWxlKCAkcm93ID0gJHFyLT5GZXRjaFJvdygpICkKICAgICAgICAgewogICAgICAgICAgICBlY2hvICI8dHIgY2xhc3M9XCJyb3ciLigoJGkgJSAyKSsxKS4iXCIgIjsKICAgICAgICAgICAgZWNobyAib25tb3VzZW92ZXI9XCJ0aGlzLmNsYXNzTmFtZT0ncm93Ii4oKCRpICUgMikrMSkuImhvdmVyJztcIiBvbm1vdXNlb3V0PVwidGhpcy5jbGFzc05hbWU9J3JvdyIuKCgkaSAlIDIpKzEpLiInO1wiPlxuIjsKICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAKICAgICAgICAgICAgICBmb3JlYWNoKCAkcm93IGFzICRrID0+ICR2ICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2xpc3QnXSApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVjaG8gIiAgIDx0ZD4iOwogICAgICAgICAgICAgICAgICAgIGlmKCBlcmVnKCAiXnNlbGVjdFx8dGFibGUiICwgJHRoaXMtPmZpZWxkc1ska11bJ2ZpZWxkX3R5cGUnXSApICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgJHBhcnRzID0gc3BsaXQoICJcfCIgLCAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfdHlwZSddICk7CiAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiKCIuJHYuIikgIi4kdGhpcy0+Z2V0X2ZvcmVpZ25fbGFiZWwoICRwYXJ0c1syXSAsICRwYXJ0c1szXSAsICR2ICwgJHBhcnRzWzRdICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkdjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZD5cbiI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICNlZGl0IGFuZCBkZWxldGUgY29sdW1ucwogICAgICAgICAgICBlY2hvICI8dGQ+PGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJlZGl0IiAsICRyb3dbJHRoaXMtPmtleV0gKS4iXCI+ZWRpdDwvYT4mbmJzcDs8L3RkPiI7CiAgICAgICAgICAgIGVjaG8gIjx0ZD4mbmJzcDs8YSBocmVmPVwiIi4kdGhpcy0+bWFrZXVybCggImRlbGV0ZSIgLCAkcm93WyR0aGlzLT5rZXldICkuIlwiPmRlbGV0ZTwvYT48L3RkPiI7CgogICAgICAgICAgICBlY2hvICI8L3RyPlxuIjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIGVjaG8gIjwvdGFibGU+XG4iOwogICAgICAgICAgICAgICAgICAKICAgICAgICAgZWNobyAiPHA+PGEgaHJlZj1cIiIuJHRoaXMtPm1ha2V1cmwoICJhZGQiICwgMCApLiJcIj5DcmVhdGUgTmV3PC9hPjwvcD5cbiI7CiAgICAgIAogICAgICB9I2VuZCBzaG93IGZ1bmN0aW9uCiAgICAgIAogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXhhY3QgdXJsIHRoYXQgd2Ugd2VyZSBjYWxsZWQgd2l0aCBzdHJpcHMgb3V0IHByZXZpb3VzIHJjcnVkIGFuZCBhcHBsaWVzIG5ldwogICAgICAjaG9wZWZ1bGx5IHRoaXMgYWxsb3dzIHVzIHRvIHVzZSByY3J1ZCBpbiBvdGhlciBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCiAgICAgIGZ1bmN0aW9uIG1ha2V1cmwoICRhY3Rpb24gLCAkaWQgKQogICAgICB7CiAgICAgICAgIAoJJHQ9Jyc7CiAgICAgICAgIGZvcmVhY2goICRfR0VUIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBpZiggISBlcmVnKCAiXnJjcnVkIiwgJGsgKSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHQgPSAkdCAuICRrIC4gIj0iIC4kdi4gIiZhbXA7IjsKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAoJIC8vY2hlY2sgdGhhdCBtb2R1bGU9ICBpcyBjYXJyaWVkIHRocm91Z2gKCSBpZiAoIWlzc2V0KCRfR0VUWydtb2R1bGUnXSkpIAoJICAgewoJICAgICAkbSA9IGlzc2V0KCRfUE9TVFsnbWFjdCddKSA/IGV4cGxvZGUoJywnLCRfUE9TVFsnbWFjdCddKSA6ICIiOwoJICAgICAkbSA9ICJtb2R1bGU9Ii4gJG1bMF07CgkgICAgICR0ID0gJF9TRVJWRVJbIlBIUF9TRUxGIl0gLiAiPyIgLiAkdCAuICRtIC4iJmFtcDtyY3J1ZF9hY3Rpb249Ii4kYWN0aW9uLiImYW1wO3JjcnVkX2lkPSIuJGlkOwoJICAgfQoJIGVsc2UKCSAgIHsKCSAgICAgJHQgPSAkX1NFUlZFUlsiUEhQX1NFTEYiXSAuICI/IiAuICR0IC4icmNydWRfYWN0aW9uPSIuJGFjdGlvbi4iJmFtcDtyY3J1ZF9pZD0iLiRpZDsKCSAgIH0KCiAgICAgICAgIGlmKCAkYWN0aW9uID09ICJlZGl0IiB8fCAkYWN0aW9uID09ICJkZWxldGUiIHx8ICRhY3Rpb24gPT0gImFkZCIgKQogICAgICAgICB7CiAgICAgICAgICAgICR0ID0gJHQgLiAiJmFtcDtyY3J1ZF90YWJsZT0iLiR0aGlzLT50YWJsZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuICR0OwogICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgI3NldCBhbGwgdGhlIGZpZWxkcyB2aXNpYmlsdHkgdG8gJGIKICAgICAgI2V4LCBzZXQgYWxsIGZpZWxkcyB0byBmYWxzZSwgdGhlbiBlbmFibGUgdGhlIG9uZXMgeW91IG5lZWQKICAgICAgZnVuY3Rpb24gc2V0VmlzaWJsZUluTGlzdEFsbCggJGIgKQogICAgICB7CiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2xpc3QnXSA9ICRiOwogICAgICAgICB9CiAgICAgIH0KCiAgICAgICNzZXQgYWxsIHRoZSBmaWVsZHMgdmlzaWJpbHR5IHRvICRiCiAgICAgICNleCwgc2V0IGFsbCBmaWVsZHMgdG8gZmFsc2UsIHRoZW4gZW5hYmxlIHRoZSBvbmVzIHlvdSBuZWVkCiAgICAgIGZ1bmN0aW9uIHNldFZpc2libGVJbkFkZEFsbCggJGIgKQogICAgICB7CiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2FkZCddID0gJGI7CiAgICAgICAgIH0KICAgICAgfSAgICAgIAoKICAgICAgI3NldCBhbGwgdGhlIGZpZWxkcyB2aXNpYmlsdHkgdG8gJGIKICAgICAgI2V4LCBzZXQgYWxsIGZpZWxkcyB0byBmYWxzZSwgdGhlbiBlbmFibGUgdGhlIG9uZXMgeW91IG5lZWQKICAgICAgZnVuY3Rpb24gc2V0VmlzaWJsZUluRWRpdEFsbCggJGIgKQogICAgICB7CiAgICAgICAgIGZvcmVhY2goICR0aGlzLT5maWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5maWVsZHNbJGtdWyd2aXNpYmxlX2luX2VkaXQnXSA9ICRiOwogICAgICAgICB9CiAgICAgIH0KCiAgICAgIAogICAgICAjcHJpbnQgb3Vyc2VsdmVzIG91dCBzbyB3ZSBjYW4gd2hhdCBpcyBiZWluZyBzZXQgYW5kL29yIG5vdC4uLgogICAgICBmdW5jdGlvbiBkZWJ1ZygpCiAgICAgIHsKICAgICAgICAgZWNobyAiPHByZT5cbiI7CiAgICAgICAgIHByaW50X3IoJHRoaXMpOwogICAgICAgICBlY2hvICI8L3ByZT5cbiI7CiAgICAgIH0KICAgICAKICAgICAKICAgICAgCiAgICAgICNyZXR1cm5zIHRoZSBlcnJvcnMgaWYgdGhlcmUgd2VyZSBzb21lIG90aGVyd2lzZSBubywgdGhlbiByZXR1cm4gZmFsc2UuCiAgICAgIGZ1bmN0aW9uIGZvcm1fZXJyb3JzKCkKICAgICAgewogICAgICAgICAjcHJvY2VzcyB0aGUgcmVnZXggdmFsaWRhdGlvbnMKICAgICAgICAgICAgZm9yZWFjaCggJF9QT1NUIGFzICRrID0+ICR2ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiggaXNzZXQoICR0aGlzLT5maWVsZHNbJGtdWydmaWVsZF9yZWdleCddICkgKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmKCAhIGVyZWcoICR0aGlzLT5maWVsZHNbJGtdWydmaWVsZF9yZWdleCddICwgJHYgKSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgJGVycm9yc1ska10gPSAkdGhpcy0+ZmllbGRzWyRrXVsnZmllbGRfZXJyb3InXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKCBpc3NldCggJGVycm9ycyApICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgcmV0dXJuICRlcnJvcnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICB9I2VuZCBmb3JtIGVycm9ycwogICAKCiAgICAgICN0aGlzIGZ1bmN0aW9uIG1ha2VzIGEgcmFkaW8gYnV0dG9uIGJhc2VkIG9uIHRoZSBmaWVsZCB0eXBlCiAgICAgIGZ1bmN0aW9uIG1ha2VfcmFkaW9zKCAkZmllbGQgKQogICAgICB7CiAgICAgICAgICRwYXJ0cyA9IHNwbGl0KCAiXHwiICwgJHRoaXMtPmZpZWxkc1skZmllbGRdWydmaWVsZF90eXBlJ10gKTsKICAgICAgICAgCiAgICAgICAgICNwb3AgdGhlIGZpcnN0IGVsZW1lbnQgb2ZmIHRoZSBhcnJheSAKICAgICAgICAgJHBhcnRzID0gYXJyYXlfcmV2ZXJzZSggJHBhcnRzICk7CiAgICAgICAgIGFycmF5X3BvcCggJHBhcnRzICk7CiAgICAgICAgICRwYXJ0cyA9IGFycmF5X3JldmVyc2UoICRwYXJ0cyApOwoJIAoJICRzZWxlY3RlZCA9ICcnOwoKCSBpZiAoaXNzZXQoICRfUE9TVFskZmllbGRdICkgJiYgJF9QT1NUWyRmaWVsZF0gIT0gJycpIHsKCSAgICRzZWxlY3RlZCA9ICRfUE9TVFskZmllbGRdOwoJIH0gZWxzZSB7CgkgICAkc2VsZWN0ZWQgPSAkcGFydHNbMF07CgkgfQogICAgICAgICAKICAgICAgICAgZm9yZWFjaCggJHBhcnRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBlY2hvICR2IC4gIiA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cIiIuJGZpZWxkLiJcIiB2YWx1ZT1cIiIuJHYuIlwiLyI7CiAgICAgICAgICAgIGlmKCAkc2VsZWN0ZWQgPT09ICR2ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgY2hlY2tlZD1cImNoZWNrZWRcIiAiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gIj5cbiI7CiAgICAgICAgIH0KICAgICAgfQogICAKICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIG1ha2UgYSBzZWxlY3RvciB3aXRoIGFuIGludCByYW5nZQogICAgICBmdW5jdGlvbiBtYWtlX3JhbmdlX3NlbGVjdG9yKCAkbWluICwgJG1heCAsICRmb3JtX2ZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgZWNobyAiPHNlbGVjdCBuYW1lPVwiIi4kZm9ybV9maWVsZC4iXCI+XG4iOwogICAgICAgICAkaSA9ICRtaW47CiAgICAgICAgIHdoaWxlKCAkaSAtIDEgPCAkbWF4ICkKICAgICAgICAgewogICAgICAgICAgICBlY2hvICIgIDxvcHRpb24gdmFsdWU9XCIiLiRpLiJcIiI7CiAgICAgICAgICAgIGlmKCAkX1BPU1RbJGZvcm1fZmllbGRdID09ICRpICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgU0VMRUNURUQgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI+Ii4kaS4iPC9vcHRpb24+XG4iOwogICAgICAgICAgICAkaSsrOwogICAgICAgICB9CiAgICAgICAgIGVjaG8gIjwvc2VsZWN0PlxuIjsKICAgICAgCiAgICAgIH0jZW5kIGZ1bmMKIAogCiAKIAogICAgICAjdGhpcyBmdW5jdGlvbiBtYWtlIGEgc2VsZWN0b3Igd2l0aCBhbiBpbnQgcmFuZ2UKICAgICAgZnVuY3Rpb24gbWFrZV90YWJsZV9zZWxlY3RvciggJHRhYmxlICwgJHZhbHVlICwgJGxhYmVsICwgJGZvcm1fZmllbGQgKQogICAgICB7CiAgICAgIAogICAgICAgICBlY2hvICI8c2VsZWN0IG5hbWU9XCIiLiRmb3JtX2ZpZWxkLiJcIj5cbiI7CgogICAgICAgICAkcSA9ICJTRUxFQ1QgIi4kdmFsdWUuIiwgIi4kbGFiZWwuIiBGUk9NICIuJHRhYmxlLiIgT1JERVIgQlkgIi4kbGFiZWwuIiBBU0MiOwogICAgICAgICAkcXIgPSAkdGhpcy0+ZGItPkV4ZWN1dGUoICRxICkgb3IgZGllKCAiUkNSVUQgTUFLRSBUQUJMRSBTRUxFQ1QgU1FMOiAiLiR0aGlzLT5kYi0+RXJyb3JNc2coKSApOwogICAgICAgCiAgICAgICAgIAogICAgICAgICB3aGlsZSggJHJvdyA9ICRxci0+RmV0Y2hSb3coKSApCiAgICAgICAgIHsKICAgICAgICAgICAgZWNobyAiICA8b3B0aW9uIHZhbHVlPVwiIi4kcm93WyR2YWx1ZV0uIlwiIjsKICAgICAgICAgICAgaWYoIGlzc2V0KCRfUE9TVFskZm9ybV9maWVsZF0pICYmICRfUE9TVFskZm9ybV9maWVsZF0gPT0gJHJvd1skdmFsdWVdICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICBlY2hvICIgU0VMRUNURUQgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvICI+Ii4kcm93WyRsYWJlbF0uIjwvb3B0aW9uPlxuIjsKICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgZWNobyAiPC9zZWxlY3Q+XG4iOwogICAgICAKICAgICAgfSNlbmQgZnVuYwogICAgICAKICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9ucyBnZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIGEgZm9yZWlnbiBrZXkKICAgICAgZnVuY3Rpb24gZ2V0X2ZvcmVpZ25fbGFiZWwoICR0YWJsZSAsICR2YWx1ZV9maWVsZCAsICR2YWx1ZSAsICRsYWJlbCApICAKICAgICAgewogICAgICAKICAgICAgICAgJHEgPSAiU0VMRUNUICIuJGxhYmVsLiIgRlJPTSAiLiR0YWJsZS4iIFdIRVJFICIuJHZhbHVlX2ZpZWxkLiIgPSAiLiR0aGlzLT5kYi0+cXN0ciggJHZhbHVlICk7CiAgICAgICAgICRxciA9ICR0aGlzLT5kYi0+RXhlY3V0ZSggJHEgKTsKICAgICAgICAgJHJvdyA9ICRxci0+RmV0Y2hSb3coKTsKICAgICAgICAgaWYoICRxci0+UmVjb3JkQ291bnQoKSA9PSAwICkKICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gIk1pc3NpbmcgTGFiZWwiOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHJvd1skbGFiZWxdOwogICAgICAgICB9CiAgICAgICAgIAogICAgICB9CiAgICAgIAogICAgICAKICAgICAgI3RoaXMgZnVuY3Rpb25zIG1ha2UgYSBkYXRldGltZSBodG1sIGZpZWxkCiAgICAgIGZ1bmN0aW9uIG1ha2VfZGF0ZXRpbWUoICRmaWVsZCApCiAgICAgIHsKICAgICAgCiAgICAgICAgIGlmKCAhIGlzc2V0KCAkX1BPU1RbJGZpZWxkXSApIHx8ICRfUE9TVFskZmllbGRdID09ICIwMDAwLTAwLTAwIDAwOjAwOjAwIiApCiAgICAgICAgIHsKICAgICAgICAgICAgJF9QT1NUWyRmaWVsZF0gPSBkYXRlKCAiWS1tLWQgSDppOnMiICk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICRfUE9TVFskZmllbGQuJy15ZWFyJ10gPSBkYXRlKCAiWSIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLW1vbnRoJ10gPSBkYXRlKCAibSIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLWRheSddID0gZGF0ZSggImQiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1ob3VyJ10gPSBkYXRlKCAiSCIgLCBzdHJ0b3RpbWUoICRfUE9TVFskZmllbGRdICkgKTsKICAgICAgICAgJF9QT1NUWyRmaWVsZC4nLW1pbnV0ZSddID0gZGF0ZSggImkiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1zZWNvbmQnXSA9IGRhdGUoICJzIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIAogICAgICAgICBlY2hvICJZWVlZLU1NLUREICI7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCBkYXRlKCAiWSIgKSAtIDEwMCAsIGRhdGUoICJZIiApICsgMTAgLCAkZmllbGQuIi15ZWFyIiApOwogICAgICAgICAkdGhpcy0+bWFrZV9yYW5nZV9zZWxlY3RvciggMSAsIDEyICwgJGZpZWxkLiItbW9udGgiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAxICwgMzEgLCAkZmllbGQuIi1kYXkiICk7CiAgICAgICAgIGVjaG8gIiAmbmJzcDsgSEg6TU06U1MgIjsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIDAgLCAyMyAsICRmaWVsZC4iLWhvdXIiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAwICwgNTkgLCAkZmllbGQuIi1taW51dGUiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAwICwgNTkgLCAkZmllbGQuIi1zZWNvbmQiICk7CiAgICAgIAogICAgICB9CiAgICAgIAogICAgICAjdGhpcyBmdW5jdGlvbiBqdXN0IG1ha2VzIHRoZSBkYXRlIG5vIGgsbSxzCiAgICAgIGZ1bmN0aW9uIG1ha2VfZGF0ZSggJGZpZWxkICkKICAgICAgewogICAgICAgICBpZiggISBpc3NldCggJF9QT1NUWyRmaWVsZF0gKSB8fCAkX1BPU1RbJGZpZWxkXSA9PSAiMDAwMC0wMC0wMCIgKQogICAgICAgICB7CiAgICAgICAgICAgICRfUE9TVFskZmllbGRdID0gZGF0ZSggIlktbS1kIiApOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAkX1BPU1RbJGZpZWxkLicteWVhciddID0gZGF0ZSggIlkiICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1tb250aCddID0gZGF0ZSggIm0iICwgc3RydG90aW1lKCAkX1BPU1RbJGZpZWxkXSApICk7CiAgICAgICAgICRfUE9TVFskZmllbGQuJy1kYXknXSA9IGRhdGUoICJkIiAsIHN0cnRvdGltZSggJF9QT1NUWyRmaWVsZF0gKSApOwogICAgICAgICAKICAgICAgICAgCiAgICAgICAgIGVjaG8gIllZWVktTU0tREQgIjsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIGRhdGUoICJZIiApIC0gMTAwICwgZGF0ZSggIlkiICkgKyAxMCAsICRmaWVsZC4iLXllYXIiICk7CiAgICAgICAgICR0aGlzLT5tYWtlX3JhbmdlX3NlbGVjdG9yKCAxICwgMTIgLCAkZmllbGQuIi1tb250aCIgKTsKICAgICAgICAgJHRoaXMtPm1ha2VfcmFuZ2Vfc2VsZWN0b3IoIDEgLCAzMSAsICRmaWVsZC4iLWRheSIgKTsKCiAgICAgIAogICAgICB9CiAgICAgIAogICAgICAjdGhpcyBjb21waWxlcyBiYWNrIHRoZSBkYXRldGltZSBmaWVsZCBmcm9tIGh0bWwgcG9zdAogICAgICBmdW5jdGlvbiBjb21waWxlX2RhdGV0aW1lKCAkZmllbGQgKQogICAgICB7CiAgICAgIAogICAgICAgICAkX1BPU1RbJGZpZWxkXSA9ICRfUE9TVFskZmllbGQuJy15ZWFyJ10uIi0iLiRfUE9TVFskZmllbGQuJy1tb250aCddLiItIi4kX1BPU1RbJGZpZWxkLictZGF5J10uIiAiLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1BPU1RbJGZpZWxkLictaG91ciddLiI6Ii4kX1BPU1RbJGZpZWxkLictbWludXRlJ10uIjoiLiRfUE9TVFskZmllbGQuJy1zZWNvbmQnXTsKICAgICAgCiAgICAgIH0KICAgICAgCiAgICAgICN0aGlzIGZ1bmN0aW9uIGNvbXBpbGVzIGp1c3QgYSBkYXRlIGludG8gb25lIGZpZWxkIGFnYWluCiAgICAgIGZ1bmN0aW9uIGNvbXBpbGVfZGF0ZSggJGZpZWxkICkKICAgICAgewogICAgICAKICAgICAgICAgJF9QT1NUWyRmaWVsZF0gPSAkX1BPU1RbJGZpZWxkLicteWVhciddLiItIi4kX1BPU1RbJGZpZWxkLictbW9udGgnXS4iLSIuJF9QT1NUWyRmaWVsZC4nLWRheSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgfQogICAgICAKICAgICAgI3RoaXMgY292ZXJ0cyBhbGwgdGhlIGRhdGV0aW1lcyBmcm9tIHBvc3QgaW50byB0aGUgb3JpZ2luYWwgZmllbGQKICAgICAgZnVuY3Rpb24gY29tcGlsZV9kYXRldGltZXMoKQogICAgICB7CiAgICAgIAogICAgICAgICBmb3JlYWNoKCAkdGhpcy0+ZmllbGRzIGFzICRrID0+ICR2ICkKICAgICAgICAgewogICAgICAgICAgICBpZiggJHZbJ2ZpZWxkX3R5cGUnXSA9PSAiZGF0ZXRpbWUiICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAkdGhpcy0+Y29tcGlsZV9kYXRldGltZSggJGsgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYoICR2WydmaWVsZF90eXBlJ10gPT0gImRhdGUiICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAkdGhpcy0+Y29tcGlsZV9kYXRlKCAkayApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIAogICAgICB9CiAgICAgIAogICAgICN0aGlzIGZ1bmN0aW9uIG1ha2VzIGEgcmV0dXJuIHRvIGxpc3QgbGluayBzbyB3aXRoIGFueSByY3J1ZCBzdHVmZgogICAgIGZ1bmN0aW9uIG1ha2VfcmV0dXJuX2xpbmsoKQogICAgIHsKICAgICAgICR0ID0gJyc7CiAgICAgICAgZm9yZWFjaCggJF9HRVQgYXMgJGsgPT4gJHYgKQogICAgICAgIHsKICAgICAgICAgICBpZiggISBlcmVnKCAiXnJjcnVkIiwgJGsgKSApCiAgICAgICAgICAgewogICAgICAgICAgICAgICR0ID0gJHQgLiAkayAuICI9IiAuJHYuICImIjsKICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICAKICAgICAgICAgJHQgPSBlcmVnX3JlcGxhY2UoICJcJiQiICwgIiIgLCAkdCApOwogICAgICAgICAgICAKICAgICAgICAgJHQgPSAkX1NFUlZFUlsiUEhQX1NFTEYiXSAuICI/IiAuICR0OwogICAgICAgICBlY2hvICI8cD48YSBocmVmPVwiIi4gJHQgLiAiXCI+cmV0dXJuIHRvIGxpc3Q8L2E+PC9wPlxuIjsKICAgICAgICAgCiAgICAgfQogICAKCWZ1bmN0aW9uIHNldFBhdGgoJHBhdGgsICRwYXRoZXJyb3IsICRtYXJrZXJlcnJvcikKCXsKCQkkdGhpcy0+cGF0aCA9ICRwYXRoOwoJCSR0aGlzLT5wYXRoZXJyb3IgPSAkcGF0aGVycm9yOwoJCSR0aGlzLT5tYXJrZXJlcnJvciA9ICRtYXJrZXJlcnJvcjsgCgl9CiAgIH0jZW5kY2xhc3MKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7CgovLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCi8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgokZmxkcyA9ICIKCQltYXBfaWQgSSBBVVRPIEtFWSwKCSAgbmFtZSBDKDgwKSBOT1ROVUxMLAoJCWRlc2NyaXB0aW9uIFgsCgkgIGNlbnRlcl9sYXQgQyg1MCksCgkgIGNlbnRlcl9sb24gQyg1MCksCgkgIG93bmVyX2lkIEksCgkgIHR5cGUgQyg1MCksCgkgIHdpZHRoIEMoNTApLAoJICBoZWlnaHQgQyg1MCksCgkgIGNvbnRyb2xzIEwsCgkgIGNvbnRyb2xzX3NpemUgQygxMCksCgkgIHR5cGVfY29udHJvbHMgTCwKCSAgc2lkZWJhciBMLAoJICBkaXJlY3Rpb25zIEwsCgkgIHpvb20gQygxMCksCgkgIHpvb21zY3JvbGx3aGVlbCBMLAoJICB6b29tX2VuY29tcGFzcyBMLAoJICBzY2FsZV9jb250cm9sIEwsCgkgIGJvdW5kc19mdWRnZSBGLAoJICBpbmZvX3dpbmRvdyBMLAoJICBpbmZvX3RyaWdnZXIgQyg4MCkKCSI7CgovLyBjcmVhdGUgaXQuIFRoaXMgc2hvdWxkIGRvIGVycm9yIGNoZWNraW5nLCBidXQgSSdtIGEgbGF6eSBzb2QuCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy9pbmRleCBmb3IgbWFwcwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJ2lfbmFtZScsIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICduYW1lJyk7CgovLyBjcmVhdGUgYSBzZXF1ZW5jZQojJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHNfc2VxIik7CgoKLy8gTWFya2VycwokZmxkcyA9ICIKCSAgbWFya2VyX2lkIEkgQVVUTyBLRVksCgkgIG1hcCBDKDEwMCksCgkgIG5hbWUgQyg4MCksCgkgIGluZm8gWCwKCSAgYWRkcmVzcyBDKDI1NSksCgkgIGxhdCBDKDEwMCksCgkgIGxvbiBDKDEwMCksCgkgIGljb24gQygxMDApCiAgIjsKCi8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Ci8vIGNyZWF0ZSBhIHNlcXVlbmNlCiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIpOwoKCi8vIENhY2hlIG5vdCB1c2VkIHlldAokZmxkcyA9ICIKICAgICAgICBhZGRyZXNzIEMoMjU1KSBLRVkgREVGQVVMVCAnJywgCiAgICAgICAgbG9uIEYsCiAgICAgICAgbGF0IEYKICAgICAgICAiOwoKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGUiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwovLyBjcmVhdGUgYSBzZXF1ZW5jZQokZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfY2FjaGVfc2VxIik7CgoKLy8gY3JlYXRlIGEgcGVybWlzc2lvbgokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignVXNlIEdvb2dsZU1hcHMnLCAnVXNlIEdvb2dsZU1hcHMnKTsKCgovLyBjcmVhdGUgYSBwcmVmZXJlbmNlCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhcGlrZXkiLCAnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCJsb29rdXBzZXJ2aWNlIiwgJ0dPT0dMRScpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgidXNlY2FjaGUiLCAnMCcpOwokdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlbWFya2Vyc2hhZG93cycsIDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgieWFob29hcHBpZCIsICcnKTsKCiRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7Ci8vIFByZXBhcmUgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGltYWdlcyBvZiB0aGUgbWFya2VycyBhbmQgb25lIGZvciB0aGUgc2hhZG93cyBvZiB0aGUgbWFya2VycwokcGF0aCA9ICR0aGlzLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLicvJy4kdGhpcy0+Z2V0TmFtZSgpOwovLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBjYW4gYmUgZm91bmQuIENyZWF0ZSBpdCwgZXJyb3IgaGFuZGxpbmcgd2lsbCBjb3ZlciBhbnkgcHJvYmxlbXMgZm91bmQKbWtkaXIoJHBhdGgsIDA3NzcpOwokbWFya2Vyc3BhdGggPSAkcGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLidtYXJrZXJzJzsKbWtkaXIoJG1hcmtlcnNwYXRoLCAwNzc3KTsKJG1hcmtlcnNoYWRvd3NwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vyc2hhZG93cyc7Cm1rZGlyKCRtYXJrZXJzaGFkb3dzcGF0aCwgMDc3Nyk7Ci8vIENvcHkgb3ZlciB0aGUgZGVmYXVsdCBzdXBwbGllZCBtYXJrZXJzCiRtYXJrZXJkaXIgPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnMnOwppZiAoZmlsZV9leGlzdHMoICRtYXJrZXJkaXIgKSApIHsKCSRkaXIgPSBvcGVuZGlyKCRtYXJrZXJkaXIpOwoJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCXdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaXIpKSAhPT0gZmFsc2UpCgkgIHsKCSAgCWlmICgkZmlsZSAhPScuJyAmJiAkZmlsZSE9Jy4uJykgewogIAkJCWNvcHkoJG1hcmtlcmRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlLCAkbWFya2Vyc3BhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSk7CgkgIAl9CgkgIH0KCWNsb3NlZGlyKCRkaXIpOwp9CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKJGRiID0mICRnQ21zLT5HZXREYigpOwoKLy8gcmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZQokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCi8vIG1hcHMKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXBzIiApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcHNfc2VxIiApOwoKLy9tYXJrZXJzCiRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFya2VycyIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19tYXJrZXJzX3NlcSIgKTsKCi8vY2FjaGUKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZSIgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZV9zZXEiICk7CgoKCgovLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgR29vZ2xlTWFwcycpOwoKLy8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlCiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJhcGlrZXkiKTsKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoImxvb2t1cHNlcnZpY2UiKTsKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoInVzZWNhY2hlIik7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCd1c2VtYXJrZXJzaGFkb3dzJyk7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJ5YWhvb2FwcGlkIik7CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CnN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQp7CiBjYXNlICIwLjEuMiI6CiAgIGJyZWFrOwogY2FzZSAiMC4xLjMiOgogICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgogICAjY2hhbmdlIG1hcCBpbmZvIHRvIHRleHQKICAgJHNxbGFycmF5ID0gJGRpY3QtPkFsdGVyQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2dvb2dsZW1hcHNfbWFwcyIsICJkZXNjcmlwdGlvbiBYIik7CiAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgI2NoYW5nZSBtYXJrZXIgaW5mbyB0byB0ZXh0CiAgICRzcWxhcnJheSA9ICRkaWN0LT5BbHRlckNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9nb29nbGVtYXBzX21hcmtlcnMiLCAiaW5mbyBYIik7CiAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgYnJlYWs7CiBjYXNlICIwLjEuNCI6CiAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiAgICNjaGFuZ2UgbWFwIGluZm8gdG8gdGV4dAogICAkc3FsYXJyYXkgPSAkZGljdC0+QWx0ZXJDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZ29vZ2xlbWFwc19jYWNoZSIsICJsYXQgRiIpOwogICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgIAogICAkY3VycmVudF92ZXJzaW9uID0gIjAuMS40IjsKIGNhc2UgIjAuMS40IjoKIAkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwoJLy8gUHJlcGFyZSBhIGRpcmVjdG9yeSB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW1hZ2VzIG9mIHRoZSBtYXJrZXJzIGFuZCBvbmUgZm9yIHRoZSBzaGFkb3dzIG9mIHRoZSBtYXJrZXJzCgkkcGF0aCA9ICR0aGlzLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRoaXMtPmdldE5hbWUoKTsKCS8vIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGNhbiBiZSBmb3VuZC4gQ3JlYXRlIGl0LCBlcnJvciBoYW5kbGluZyB3aWxsIGNvdmVyIGFueSBwcm9ibGVtcyBmb3VuZAoJbWtkaXIoJHBhdGgsIDA3NzcpOwoJJG1hcmtlcnNwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vycyc7Cglta2RpcigkbWFya2Vyc3BhdGgsIDA3NzcpOwoJJG1hcmtlcnNoYWRvd3NwYXRoID0gJHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4nbWFya2Vyc2hhZG93cyc7Cglta2RpcigkbWFya2Vyc2hhZG93c3BhdGgsIDA3NzcpOwoJLy8gQ29weSBvdmVyIHRoZSBkZWZhdWx0IHN1cHBsaWVkIG1hcmtlcnMKCSRtYXJrZXJkaXIgPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLidpbWFnZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ21hcmtlcnMnOwoJaWYgKGZpbGVfZXhpc3RzKCAkbWFya2VyZGlyICkgKSB7CgkJJGRpciA9IG9wZW5kaXIoJG1hcmtlcmRpcik7CgkJLy8gRmlsdGVyIG91dCB0aGUgZGlyZWN0b3J5IGNvbnRyb2xpbmcgY2hhcmFjdGVycyBhbmQgYnVpbGQgc2VsZWN0YWJsZSBvcHRpb25zIG9mIHRoZSBvdGhlcnMKCQl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZGlyKSkgIT09IGZhbHNlKQoJCSAgewoJCSAgCWlmICgkZmlsZSAhPScuJyAmJiAkZmlsZSE9Jy4uJykgewoJICAJCQljb3B5KCRtYXJrZXJkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSwgJG1hcmtlcnNwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGUpOwoJCSAgCX0KCQkgIH0KCQljbG9zZWRpcigkZGlyKTsKCX0KCgkkY3VycmVudF92ZXJzaW9uID0gIjAuMS41IjsKIGNhc2UgIjAuMS41IjoKCS8vIE5vIGRhdGFiYXNlIGNoYW5nZXMuIE9ubHkgaW50ZXJuYWwgY2hhbmdlcyBmb3IgdGhlIHVzZSBvZiBwYXJhbWV0ZXJzICAgCgkkY3VycmVudF92ZXJzaW9uID0gIjAuMS42IjsKIGNhc2UgIjAuMS42IjoKIAkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwoJLy8gUHJlcGFyZSBuYW1lIG9mIGRpcmVjdG9yeSB3aXRoIG9sZCAyLjAgQVBJCgkkQVBJZGlyID0gJHRoaXMtPmNvbmZpZ1sncm9vdF91cmwnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLidtb2R1bGVzJy4KCQlESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGlzLT5nZXROYW1lKCkuCgkJRElSRUNUT1JZX1NFUEFSQVRPUi4nbGliJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidHb29nbGVNYXBBUEktMi4wJzsKCSRwYXRoID0gJEFQSWRpcjsKCS8vIENsZWFyIHRoZSBkaXJlY3RvcnkKCSRoYW5kbGUgPSBvcGVuZGlyKCRBUElkaXIpOwoJd2hpbGUgKEZBTFNFICE9PSAoJGVudHJ5ID0gcmVhZGRpcigkaGFuZGxlKSkpIHsKCQlpZiAoJGVudHJ5ICE9ICcuJyAmJiAkZW50cnkgIT0gJy4uJykKCQl7CgkJCWlmKCEoc3Vic3RyKCRwYXRoLC0xKSA9PSBESVJFQ1RPUllfU0VQQVJBVE9SKSkJJHBhdGggLj0gRElSRUNUT1JZX1NFUEFSQVRPUjsKCQkJJG9iaiA9ICRwYXRoLiRlbnRyeTsKCQkJaWYgKGlzX2ZpbGUoJG9iaikpCgkJCXsKCQkJCXVubGluaygkb2JqKTsJCQkJCQoJCQl9CgkJfQoJfQoJY2xvc2VkaXIoJGhhbmRsZSk7CgkvLyBOb3cgdGhhdCBpdHMgY2xlYXIsIHJlbW92ZSB0aGUgZGlyZWN0b3J5CglpZihpc19kaXIoJEFQSWRpcikpIHJtZGlyKCRBUElkaXIpOwoKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZ29vZ2xlbWFwc19tYXBzJywgJ3pvb21zY3JvbGx3aGVlbCBMJyApOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9nb29nbGVtYXBzX21hcHMnLCAnc2NhbGVfY29udHJvbCBMJyApOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKCSRjdXJyZW50X3ZlcnNpb24gPSAnMC4xLjcnOwogZGVmYXVsdDoKICAgIGJyZWFrOwp9CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGV9PC9oMz4Ke2lmICRlcnJvciE9Jyd9PHA+eyRlcnJvcn08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/map.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRnb29nbGVfbWFwX2hlYWRlcn0KCnsqCjwhLS0gbmVjZXNzYXJ5IGZvciBnb29nbGUgbWFwcyBwb2x5bGluZSBkcmF3aW5nIGluIElFIC0tPgp7bGl0ZXJhbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4Kdlw6KiB7CiBiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsKfQp7L2xpdGVyYWx9Cjwvc3R5bGU+Cip9Cgo8dGFibGU+CiAgPHRyPgogICAgIDx0ZD57JGdvb2dsZV9tYXB9PC90ZD4KICAgICA8dGQ+eyRnb29nbGVfbWFwX3NpZGViYXJ9PC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKeyRnb29nbGVfbWFwX2pzfQp7JG1hcF9kZXNjcmlwdGlvbn0=]]></data>
	</file>
</module>
