  <dtdversion>1.2</dtdversion>
  <name>ThemeManager</name>
  <version>1.0.5</version>
  <help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gaW1wb3J0IGFuZCBleHBvcnQgdGVtcGxhdGVzIGFuZCB0aGVpciBhdHRhY2hlZCBzdHlsZXNoZWV0cyBhcyAidGhlbWVzIi4gIFRoaXMgYWxsb3dzIHlvdSB0byBzaGFyZSB5b3VyIGxvb2sgYW5kIGZlZWwgd2l0aCBvdGhlciBjbXMgdXNlcnMuPC9wCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBoYXMgbm8gZnJvbnQgZW5kIGludGVyZmFjZSwgb25seSBhbiBhZG1pbiBpbnRlcmZhY2UuICBJdCBhbGxvd3MgeW91IHRvIHNlbGVjdCBhbiBleGlzdGluZyAoYWN0aXZlKSB0ZW1wbGF0ZSwgYW5kIGNsaWNrICJFeHBvcnQiLiAgQW4gWE1MIGZpbGUgY29udGFpbmluZyB0aGUgdGVtcGxhdGUgYW5kIGl0cyBhdHRhY2hlZCBzdHlsZXNoZWV0cyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHNlbnQgeW91IHlvdSB2aWEgZG93bmxvYWQuPC9wPgo8aDM+UGVybWlzc2lvbnM8L2gzPgo8cD5UaGUgcGVybWlzc2lvbnMgbW9kZWwgaXMgc3RyaWN0IGZvciB0aGUgVGhlbWUgTWFuYWdlciB0byBlbnN1cmUgZGF0YWJhc2UgaW50ZWdyaXR5LiAgVGhlIHBlcm1pc3Npb24gIk1hbmFnZSBUaGVtZXMiIGlzIHJlcXVpcmVkIHRvIGV4cG9ydCB0aGVtZXMsIGFuZCB0aGVzZSB0aHJlZSBwZXJtaXNzaW9ucyAoIkFkZCBTdHlsZXNoZWV0cyIsICJBZGQgU3R5bGVTaGVldCBBc3NvY2F0aW9ucyIsIGFuZCAiQWRkIFRlbXBsYXRlcyIpIGFyZSByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGltcG9ydCBhIHRoZW1lLjwvcD4KPHA+QXMgd2VsbCwgdGhlIG9wcG9zaXRlIGZ1bmN0aW9uYWxpdHkgZXhpc3RzLCB5b3UgbWF5IHVwbG9hZCBhIHRoZW1lIGZpbGUgKHhtbCBmb3JtYXQpIGFuZCBoYXZlIHRoZSBlbmNsb3NlZCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgaW50byB5b3VyIGNtc21zIGluc3RhbGxhdGlvbi48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIG1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnIj5kZXYuY21zbWFkZXNpbXBsZS5vcmc8L2E+LjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAaG90bWFpbC5jb20iPiZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
  <about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC41PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgo8bGk+CjxwPlZlcnNpb24gMS4wLjUuIEphbnVhcnksIDIwMDY8L3A+CjxwPkZpeGVkIGhhbmRsaW5nIGZvciBtdWx0aXBsZSB0ZW1wbGF0ZXMgaW4gb25lIHhtbCBmaWxlLCBhZGRlZCBjc3MgdG8gdGVtcGxhdGUgYXNzb2NpYXRpb25zIGluIHRoZSB4bWwgZmlsZSwgZml4ZWQgc29tZSB1cmwgcGFyc2luZyBpbiBjc3MgZmlsZXMsIGFuZCBhIGNvdXBsZSBvZiBsYW5nIHN0cmluZ3MgKHRoYW5rcyBwYXQpPC9wPgo8cD48Yj5Ob3RlOjwvYj4gWE1MIGZpbGVzIGNyZWF0ZWQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiB0aGVtZSBtYW5hZ2VyIHdpbGwgPGVtPmFnYWluPC9lbT4gbm90IGltcG9ydC4gIFRoaXMgaXMgYmVjYXVzZSBvZiB0aGUgZHRkIHZlcnNpb25pbiBjaGFuZ2UsIGFuZCB0aGlzIGlzIGEgc2VjdXJpdHkgZmVhdHVyZS4gIFNvcnJ5IGZvbGtzLjwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjQuIEphbnVhcnksIDIwMDY8L3A+CjxwPkVuc3VyZSB3ZSBvbmx5IG91dHB1dCB0aGUgc2FtZSB0ZW1wbGF0ZSwgc3R5bHNoZWV0LCBhbmQgZmlsZSBvbmNlIChvciBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgYXQgaXQpLCBhbmQgYWRkZWQgYSBkdGR2ZXJzaW9uIHRhZyB0byB0aGUgb3V0cHV0LiAgQWxzbyBhIG11Y2ggc3RyaWN0ZXIgcGVybWlzc29ucyBtb2RlbC4gIFJlbW92ZWQgdGhlIGV4dHJhIGRlYnVnIG1lc3NhZ2VzIHRvby48L3A+CjxwPjxiPk5vdGU6PC9iPiBYTUwgZmlsZXMgY3JlYXRlZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIHRoZW1lIG1hbmFnZXIgd2lsbCBub3QgaW1wb3J0LiAgVGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBkdGQgdmVyc2lvbmluZyBzY2hlbWUgaW5jbHVkZWQsIGFuZCB0aGlzIGlzIGEgc2VjdXJpdHkgZmVhdHVyZS4gIFNvcnJ5IGZvbGtzLjwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjMuIEphbnVhcnksIDIwMDY8L3A+CjxwPk5vdyBzdXBwb3J0cyBtdWx0aXBsZSB0ZW1wbGF0ZXMgaW4gb25lIHRoZW1lLCByZWN1cnNpdmUgZGlyZWN0b3J5IGNyZWF0aW9uLCBhbmQgYmFzZTY0X2VuY29kZXMgb2YgYWxsIHN0eWxlc2hlZXRzIGFuZCB0ZW1wbGF0ZXM8L3A+CjwvbGk+CjxsaT48cD5WZXJzaW9uIDEuMC4yLiBEZWNlbWJlciwgMjAwNTwvcD4KPHA+Tm93IGhhbmRsZXMgaW5jbHVkZWQgaW1hZ2VzIGFuZCBqYXZhc2NyaXB0IGluIGJvdGggdGhlIHN0eWxlc2hlZXRzIGFuZCB0aGUgdGVtcGxhdGVzLiAgV2hlbiByZXN0b3JpbmcgZmlsZXMgYXJlIHJlc3RvcmVkIHRvIGEgZGlyZWN0b3J5IGNyZWF0ZWQgdW5kZXIgdXBsb2Fkcy90aGVtZW5hbWUuPC9wPjwvbGk+CjxsaT5WZXJzaW9uIDEuMC4xLiBEZWNlbWJlciwgMjAwNSAtIEZpeGVkIGRlcGVuZGVuY2llcywgaGVscCwgYW5kIGdlbmVyYWwgY2xlYW51cC48L2xpPgo8bGk+VmVyc2lvbiAxLjAuMC4gMzEgTm92ZW1iZXIsIDIwMDUgLSBJbml0aWFsIFJlbGVhc2UuPC9saT4KPC91bD48YnIgLz4=</about>
  <description>A module to allow importing and exporting of content themes (templates and stylesheets)</description>
  <file>
    <filename>/</filename>
    <isdir>1</isdir>
  </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[PD9waHAKJGxhbmdbJ2FjdGl2ZSddID0gJ0FjdGl2ZSc7CiRsYW5nWydkZWZhdWx0J10gPSAnRGVmYXVsdCc7CiRsYW5nWydwcm9tcHRfdGhlbWVuYW1lJ10gPSAnVGhlbWUgTmFtZTonOwokbGFuZ1snZXJyb3JfZWRpdGluZ3Byb2JsZW0nXSA9ICdQcm9ibGVtIGNsZWFuaW5nIHVwIGFuZCBjaGFuZ2luZyB0aGUgcmVmZXJlbmNlZCBmaWxlcyBpbiB0aGlzIHRoZW1lLic7CiRsYW5nWydlcnJvcl9wcm9ibGVtc2F2aW5naW5jbHVkZXMnXSA9ICdQcm9ibGVtIHNhdmluZyB0aGUgZmlsZXMgZW5jb2RlZCBpbiB0aGUgdGhlbWUuJzsKJGxhbmdbJ2Vycm9yX25vZmlsZXN1cGxvYWRlZCddID0gJ05vIGZpbGVzIHdlcmUgdXBsb2FkZWQuIE1ha2Ugc3VyZSB5b3VyIGZvcm0gdGFnXCdzIGVuY3R5cGUgd2FzIHNldCB0byBtdWx0aXBhcnQvZm9ybS1kYXRhIGFuZCB0aGF0IHRoZSByaWdodCBmaWVsZCBpcyBiZWluZyBjaGVja2VkIGZvciB0aGUgdXBsb2FkZWQgZmlsZS4nOwokbGFuZ1snZXJyb3JfdGVtcGxhdGVleGlzdHMnXSA9ICdBIHRlbXBsYXRlIHdpdGggdGhlIG5hbWUgIiVzIiBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9zdHlsZXNoZWV0ZXhpc3RzJ10gPSAnQSBzdHlsZXNoZWV0IHdpdGggdGhlIG5hbWUgIiVzIiBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9ub3N0eWxlc2hlZXRzJ10gPSAnTm8gc3R5bGVzaGVldHMgd2VyZSBkZXRlY3RlZCBpbiB0aGlzIHRoZW1lJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90Y3JlYXRldGVtcGxhdGUnXSA9ICdDb3VsZCBub3QgY3JlYXRlIHRoZSB0ZW1wbGF0ZSBkZWZpbml0aW9uJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90YXNzb2Njc3MnXSA9ICdQcm9ibGVtIGFzc29jaWF0aW5nIHN0eWxlc2hlZXRzIHdpdGggdGhlIHRlbXBsYXRlJzsKJGxhbmdbJ2Vycm9yX25vb3V0cHV0J10gPSAnTm90aGluZyB0byBvdXRwdXQnOwokbGFuZ1snZXJyb3Jfbm90ZW1wbGF0ZSddID0gJ0NvdWxkIG5vdCBmaW5kIHRlbXBsYXRlJzsKJGxhbmdbJ2Vycm9yX2R0ZG1pc21hdGNoJ10gPSAnRFREIFZlcnNpb24gbWlzbWF0Y2gsIGNhbm5vdCBpbXBvcnQnOwokbGFuZ1snaW1wb3J0J10gPSAnSW1wb3J0JzsKJGxhbmdbJ3VwbG9hZCddID0gJ1VwbG9hZCBUaGVtZSc7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ2FjdGl2ZSddID0gJ0FjdGl2ZSc7CiRsYW5nWydkZWZhdWx0J10gPSAnRGVmYXVsdCc7CiRsYW5nWydleHBvcnQnXSA9ICdFeHBvcnQnOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1RoZW1lIE1hbmFnZXInOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdCZSBzdXJlIHRvIHNldCAiTWFuYWdlIFRoZW1lcyIgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnIkN1cnNlcyEgRm9pbGVkIEFnYWluISInOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0EgbW9kdWxlIHRvIGFsbG93IGltcG9ydGluZyBhbmQgZXhwb3J0aW5nIG9mIGNvbnRlbnQgdGhlbWVzICh0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzKSc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+CjxsaT4KPHA+VmVyc2lvbiAxLjAuNS4gSmFudWFyeSwgMjAwNjwvcD4KPHA+Rml4ZWQgaGFuZGxpbmcgZm9yIG11bHRpcGxlIHRlbXBsYXRlcyBpbiBvbmUgeG1sIGZpbGUsIGFkZGVkIGNzcyB0byB0ZW1wbGF0ZSBhc3NvY2lhdGlvbnMgaW4gdGhlIHhtbCBmaWxlLCBmaXhlZCBzb21lIHVybCBwYXJzaW5nIGluIGNzcyBmaWxlcywgYW5kIGEgY291cGxlIG9mIGxhbmcgc3RyaW5ncyAodGhhbmtzIHBhdCk8L3A+CjxwPjxiPk5vdGU6PC9iPiBYTUwgZmlsZXMgY3JlYXRlZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIHRoZW1lIG1hbmFnZXIgd2lsbCA8ZW0+YWdhaW48L2VtPiBub3QgaW1wb3J0LiAgVGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBkdGQgdmVyc2lvbmluIGNoYW5nZSwgYW5kIHRoaXMgaXMgYSBzZWN1cml0eSBmZWF0dXJlLiAgU29ycnkgZm9sa3MuPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjAuNC4gSmFudWFyeSwgMjAwNjwvcD4KPHA+RW5zdXJlIHdlIG9ubHkgb3V0cHV0IHRoZSBzYW1lIHRlbXBsYXRlLCBzdHlsc2hlZXQsIGFuZCBmaWxlIG9uY2UgKG9yIG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCBhdCBpdCksIGFuZCBhZGRlZCBhIGR0ZHZlcnNpb24gdGFnIHRvIHRoZSBvdXRwdXQuICBBbHNvIGEgbXVjaCBzdHJpY3RlciBwZXJtaXNzb25zIG1vZGVsLiAgUmVtb3ZlZCB0aGUgZXh0cmEgZGVidWcgbWVzc2FnZXMgdG9vLjwvcD4KPHA+PGI+Tm90ZTo8L2I+IFhNTCBmaWxlcyBjcmVhdGVkIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgdGhlbWUgbWFuYWdlciB3aWxsIG5vdCBpbXBvcnQuICBUaGlzIGlzIGJlY2F1c2Ugb2YgdGhlIGR0ZCB2ZXJzaW9uaW5nIHNjaGVtZSBpbmNsdWRlZCwgYW5kIHRoaXMgaXMgYSBzZWN1cml0eSBmZWF0dXJlLiAgU29ycnkgZm9sa3MuPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjAuMy4gSmFudWFyeSwgMjAwNjwvcD4KPHA+Tm93IHN1cHBvcnRzIG11bHRpcGxlIHRlbXBsYXRlcyBpbiBvbmUgdGhlbWUsIHJlY3Vyc2l2ZSBkaXJlY3RvcnkgY3JlYXRpb24sIGFuZCBiYXNlNjRfZW5jb2RlcyBvZiBhbGwgc3R5bGVzaGVldHMgYW5kIHRlbXBsYXRlczwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjIuIERlY2VtYmVyLCAyMDA1PC9wPgo8cD5Ob3cgaGFuZGxlcyBpbmNsdWRlZCBpbWFnZXMgYW5kIGphdmFzY3JpcHQgaW4gYm90aCB0aGUgc3R5bGVzaGVldHMgYW5kIHRoZSB0ZW1wbGF0ZXMuICBXaGVuIHJlc3RvcmluZyBmaWxlcyBhcmUgcmVzdG9yZWQgdG8gYSBkaXJlY3RvcnkgY3JlYXRlZCB1bmRlciB1cGxvYWRzL3RoZW1lbmFtZS48L3A+PC9saT4KPGxpPlZlcnNpb24gMS4wLjEuIERlY2VtYmVyLCAyMDA1IC0gRml4ZWQgZGVwZW5kZW5jaWVzLCBoZWxwLCBhbmQgZ2VuZXJhbCBjbGVhbnVwLjwvbGk+CjxsaT5WZXJzaW9uIDEuMC4wLiAzMSBOb3ZlbWJlciwgMjAwNSAtIEluaXRpYWwgUmVsZWFzZS48L2xpPgo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gaW1wb3J0IGFuZCBleHBvcnQgdGVtcGxhdGVzIGFuZCB0aGVpciBhdHRhY2hlZCBzdHlsZXNoZWV0cyBhcyAidGhlbWVzIi4gIFRoaXMgYWxsb3dzIHlvdSB0byBzaGFyZSB5b3VyIGxvb2sgYW5kIGZlZWwgd2l0aCBvdGhlciBjbXMgdXNlcnMuPC9wCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBoYXMgbm8gZnJvbnQgZW5kIGludGVyZmFjZSwgb25seSBhbiBhZG1pbiBpbnRlcmZhY2UuICBJdCBhbGxvd3MgeW91IHRvIHNlbGVjdCBhbiBleGlzdGluZyAoYWN0aXZlKSB0ZW1wbGF0ZSwgYW5kIGNsaWNrICJFeHBvcnQiLiAgQW4gWE1MIGZpbGUgY29udGFpbmluZyB0aGUgdGVtcGxhdGUgYW5kIGl0cyBhdHRhY2hlZCBzdHlsZXNoZWV0cyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHNlbnQgeW91IHlvdSB2aWEgZG93bmxvYWQuPC9wPgo8aDM+UGVybWlzc2lvbnM8L2gzPgo8cD5UaGUgcGVybWlzc2lvbnMgbW9kZWwgaXMgc3RyaWN0IGZvciB0aGUgVGhlbWUgTWFuYWdlciB0byBlbnN1cmUgZGF0YWJhc2UgaW50ZWdyaXR5LiAgVGhlIHBlcm1pc3Npb24gIk1hbmFnZSBUaGVtZXMiIGlzIHJlcXVpcmVkIHRvIGV4cG9ydCB0aGVtZXMsIGFuZCB0aGVzZSB0aHJlZSBwZXJtaXNzaW9ucyAoIkFkZCBTdHlsZXNoZWV0cyIsICJBZGQgU3R5bGVTaGVldCBBc3NvY2F0aW9ucyIsIGFuZCAiQWRkIFRlbXBsYXRlcyIpIGFyZSByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGltcG9ydCBhIHRoZW1lLjwvcD4KPHA+QXMgd2VsbCwgdGhlIG9wcG9zaXRlIGZ1bmN0aW9uYWxpdHkgZXhpc3RzLCB5b3UgbWF5IHVwbG9hZCBhIHRoZW1lIGZpbGUgKHhtbCBmb3JtYXQpIGFuZCBoYXZlIHRoZSBlbmNsb3NlZCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgaW50byB5b3VyIGNtc21zIGluc3RhbGxhdGlvbi48L3A+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIG1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnIj5kZXYuY21zbWFkZXNpbXBsZS5vcmc8L2E+LjwvbGk+CjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgCjwvdWw+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dApvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAaG90bWFpbC5jb20iPiZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KJzsKPz4K]]></data>
  </file>
  <file>
    <filename>/templates/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>/templates/error.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
  </file>
  <file>
    <filename>/templates/export.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[eyRzdGFydGZvcm19CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aD57JGlkdGV4dH08L3RoPgoJCQk8dGg+eyRuYW1ldGV4dH08L3RoPgoJCQk8dGg+eyRhY3RpdmV0ZXh0fTwvdGg+CgkJCTx0aD57JGRlZmF1bHR0ZXh0fTwvdGg+CgkJCTx0aD57JGV4cG9ydHRleHR9PC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KCQkJPHRkPnskZW50cnktPm5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPmFjdGl2ZX08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVmYXVsdH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+c2VsZWN0fTwvdGQ+CgkJPC90cj4KCXsvZm9yZWFjaH0KCTwvdGJvZHk+CjwvdGFibGU+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90aGVtZW5hbWV9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGhlbWVuYW1lfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgo8L2Rpdj4Key9pZn0KeyRlbmRmb3JtfQo=]]></data>
  </file>
  <file>
    <filename>/templates/import.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9icm93c2V9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYnJvd3NlfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgo8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
  </file>
  <file>
    <filename>/ThemeManager.module.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFRoZW1lTWFuYWdlciAtIGEgbW9kdWxlIGZvciBpbXBvcnRpbmcgYW5kIGV4cG9ydGluZyB0ZW1wbGF0ZQojICAgYW5kIHN0eWxlc2hlZXQgcGFja2FnZXMuCiMgVmVyc2lvbjogMS4wLjUsIENhbGd1eTEwMDAKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKZGVmaW5lKCAiRFREX1ZFUlNJT04iLCAiMS4yIiApOwoKZnVuY3Rpb24gZ2V0X3VybHMoJHN0cmluZywgJHN0cmljdD10cnVlKSB7CiAgJHR5cGVzID0gYXJyYXkoImhyZWYiLCAic3JjIiwgInVybCIpOwogIHdoaWxlKGxpc3QoLCR0eXBlKSA9IGVhY2goJHR5cGVzKSkgewogICAgJGlubmVyVCA9ICRzdHJpY3Q/J1thLXowLTk6Pz0mQC8uXy1dKz8nOicuKz8nOwogICAgcHJlZ19tYXRjaF9hbGwgKCJ8JHR5cGVcPShbXCInYF0pKCIuJGlubmVyVC4iKVxcMXxpIiwgJHN0cmluZywgJG1hdGNoZXMpOwogICAgJHJldFskdHlwZV0gPSAkbWF0Y2hlc1syXTsKICB9CiAgCiAgcmV0dXJuICRyZXQ7Cn07CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBUaGVtZU1hbmFnZXIgZXh0ZW5kcyBDTVNNb2R1bGUKewogIHZhciAkZHRkID0gJwo8IURPQ1RZUEUgdGhlbWUgWwogIDwhRUxFTUVOVCB0aGVtZSAobmFtZSxkdGR2ZXJzaW9uLHRlbXBsYXRlKyxzdHlsZXNoZWV0Kyxhc3NvYysscmVmZXJlbmNlKik+CiAgPCFFTEVNRU5UIG5hbWUgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCBkdGR2ZXJzaW9uICgjUENEQVRBKT4KICA8IUVMRU1FTlQgdGVtcGxhdGUgKHRuYW1lLHRlbmNvZGluZyx0ZGF0YSk+CiAgPCFFTEVNRU5UIHRuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgdGVuY29kaW5nICgjUENEQVRBKT4KICA8IUVMRU1FTlQgdGRhdGEgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCBzdHlsZXNoZWV0IChjc3NuYW1lLGNzc21lZGlhdHlwZSxjc3NlbmNvZGluZyxjc3NkYXRhKT4KICA8IUVMRU1FTlQgY3NzbmFtZSAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIGNzc21lZGlhdHlwZSAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIGNzc2RhdGEgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCBhc3NvYyAoYXNzb2NfdG5hbWUsYXNzb2NfY3NzbmFtZSk+CiAgPCFFTEVNRU5UIGFzc29jX3RuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgYXNzb2NfY3NzbmFtZSAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIHJlZmVyZW5jZSAocmVmbmFtZSxyZWZlbmNvZGVkLHJlZmxvY2F0aW9uLHJlZmRhdGEpPgogIDwhRUxFTUVOVCByZWZuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgcmVmZW5jb2RlZCAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIHJlZmxvY2F0aW9uICgjUENEQVRBKT4KICA8IUVMRU1FTlQgcmVmZGF0YSAoI1BDREFUQSk+Cl0+JzsKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0TmFtZSgpCiAgewogICAgcmV0dXJuICdUaGVtZU1hbmFnZXInOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEZyaWVuZGx5TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRWZXJzaW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzEuMC41JzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNaW5pbXVtQ1ZTVmVyc2lvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMC4xMi1iZXRhMSI7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0SGVscCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMCc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yRW1haWwoKQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIE1vZHVsZQogICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlICJBYm91dCIgbGluay4gSXQgaGVscHMgdXNlcnMKICAgb2YgeW91ciBtb2R1bGUgZ2V0IGluIHRvdWNoIHdpdGggeW91IHRvIHNlbmQgYnVnIHJlcG9ydHMsCiAgIHF1ZXN0aW9ucywgY2FzZXMgb2YgYmVlciwgYW5kL29yIGxhcmdlIHN1bXMgb2YgbW9uZXkuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMEBob3RtYWlsLmNvbSc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0Q2hhbmdlTG9nKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBtb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSBBYm91dCBsaW5rLiBJdCBoZWxwcyB1c2VycwogICBmaWd1cmUgb3V0IHdoYXQncyBjaGFuZ2VkIGJldHdlZW4gcmVsZWFzZXMuCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIElzUGx1Z2luTW9kdWxlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5TZWN0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQogIHsKICAgIHJldHVybiAnbGF5b3V0JzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVGhlbWVzJykgfHwKICAgICAgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBTdHlsZXNoZWV0cycpICYmCiAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBUZW1wbGF0ZXMnKSAmJgogICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdBZGQgU3R5bGVzaGVldCBBc3NvYycpKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldERlcGVuZGVuY2llcygpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKICB7CiAgICByZXR1cm4gYXJyYXkoKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJbnN0YWxsKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJbnN0YWxsKCkKICB7CiAgICAvLyB0aGlzIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGFueSB0YWJsZXMgb2YgaXRzIG93bgoKICAgIC8vIGNyZWF0ZSBhIHBlcm1pc3Npb24KICAgICR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2UgVGhlbWVzJywgJ01hbmFnZSBUaGVtZXMnKTsKICAgICAgICAKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVXBncmFkZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pCiAgewogICAgLy8gbm90aGluZyB0byBkbyBoZXJlLCB5ZXQKCQkKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwogIH0KCQoJCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVbmluc3RhbGwoKQogIHsKICAgIC8vIHJlbW92ZSB0aGUgcGVybWlzc2lvbnMKICAgICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdNYW5hZ2UgVGhlbWVzJyk7CgogICAgLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybl9pZCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBEb0FjdGlvbigkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5faWQ9LTEpCiAgewogICAgc3dpdGNoICgkYWN0aW9uKQogICAgICB7CiAgICAgIGNhc2UgJ2RlZmF1bHQnOgoJewoJICAvLyBtb2R1bGUgaGFzIG5vIHVzZXIgb3V0cHV0CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkZWZhdWx0YWRtaW4nOgoJewoJICAvLyBvbmx5IGxldCBwZW9wbGUgYWNjZXNzIG1vZHVsZSBwcmVmZXJlbmNlcyBpZiB0aGV5IGhhdmUgcGVybWlzc2lvbgoJICAkdGhpcy0+RGlzcGxheUFkbWluUGFuZWwoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKTsKCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2V4cG9ydHRoZW1lJzoKCXsKCSAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBUaGVtZXMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+RG9FeHBvcnRUaGVtZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KICAgICAgY2FzZSAnaW1wb3J0dGhlbWUnOgoJewoJICBpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQWRkIFN0eWxlc2hlZXRzJykgJiYKCSAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBUZW1wbGF0ZXMnKSAmJgoJICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQWRkIFN0eWxlc2hlZXQgQXNzb2MnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+RG9JbXBvcnRUaGVtZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KICAgICAgfQoKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfY2xlYW51cFJlZmVyZW5jZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfY2xlYW51cFJlZmVyZW5jZXMoICRwcmVmaXgsICRyZWZlcmVuY2VzLCAmJGlucHV0ICkKICB7CiAgICAkZGF0YSA9ICRpbnB1dDsKICAgIGZvcmVhY2goICRyZWZlcmVuY2VzIGFzICRyZWYgKQogICAgICB7CgkkZGF0YSA9IHByZWdfcmVwbGFjZSggJ3wnLiRyZWZbJ2xvY2F0aW9uJ10uJ3wnLCAkcHJlZml4LiIvIi4kcmVmWydsb2NhdGlvbiddLAoJCQkgICAgICAkZGF0YSApOwoJaWYoICRkYXRhID09ICcnICkKCSAgewoJICAgIHJldHVybiBmYWxzZTsKCSAgfQogICAgICB9CiAgICAkaW5wdXQgPSAkZGF0YTsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9leHRyYWN0SFRNTEltYWdlcwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9leHRyYWN0VGVtcGxhdGVJbWFnZXMoJHRlbXBsYXRlKQogIHsKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgJHVybHMgPSBnZXRfdXJscygkdGVtcGxhdGUtPmNvbnRlbnQpOwogICAgLy8gd2UncmUgb25seSBjb25jZXJuZWQgYWJvdXQgdGhlIHNyYyB1cmxzCiAgICBmb3JlYWNoKCAkdXJsc1snc3JjJ10gYXMgJHNyYyApCiAgICAgIHsKCS8vIGlmIGl0J3MgYW4gZXh0ZXJuYWwgbGluayB3ZSBpZ25vcmUgaXQKCS8vIGlmIGl0J3MgYW4gaW50ZXJuYWwgbGluaywgd2UgYWRkIGl0CglpZiggIXByZWdfbWF0Y2goJy9eaHR0cFw6LycsJHNyYykgKSAKCSAgewoJICAgICRyZXN1bHRbXSA9ICRzcmM7CgkgIH0KICAgICAgfQoKICAgIHJldHVybiAkcmVzdWx0OwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9leHRyYWN0U3R5bGVzaGVldEltYWdlcwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9leHRyYWN0U3R5bGVzaGVldEltYWdlcygkc3R5bGVzaGVldCkKICB7CiAgICAkcmVnZXg9Jy91cmxccypcKFwiKiguKilcIipcKS9pJzsKICAgIHByZWdfbWF0Y2hfYWxsKCAkcmVnZXgsICRzdHlsZXNoZWV0LT52YWx1ZSwgJG1hdGNoZXMgKTsKICAgIC8vICRtYXRjaGVzWzFdIGlzIGFsbCBpbW1wb3J0YW50CiAgICAvLyBub3cgc3RyaXAgb3V0IGFueSB0aGF0IGhhdmUgXmh0dHAgaW4gdGhlbQogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkbWF0Y2hlc1sxXSBhcyAkbWF0Y2ggKQogICAgICB7CglpZiggIXByZWdfbWF0Y2goICcvXmh0dHBcOi8nLCAkbWF0Y2ggKSApCgkgIHsKCSAgICAkcmVzdWx0W10gPSAkbWF0Y2g7CgkgIH0KICAgICAgfQoKICAgIHJldHVybiAkcmVzdWx0OwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9zYXZlRW5jb2RlZEZpbGUKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfc2F2ZUVuY29kZWRGaWxlKCAkcHJlZml4LCAkbmFtZSwgJiRsb2NhdGlvbiwgJGVuY29kZWQsICRkYXRhICkKICB7CiAgICAvLyBjbGVhbiB1cCB0aGUgbG9jYXRpb24KICAgIGlmKCBzdWJzdHIoJGxvY2F0aW9uLDAsMSkgPT0gJy8nICkKICAgICAgewoJJGxvY2F0aW9uID0gc3Vic3RyKCRsb2NhdGlvbiwxKTsKICAgICAgfQogICAgCiAgICBpZiggJGVuY29kZWQgKQogICAgICB7CgkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoICRkYXRhICk7CiAgICAgIH0KCiAgICAvLyB0cmFuc2xhdGUgc2xhc2hlcyBpZiB3ZSBoYXZlIHRvCiAgICAkbmV3bG9jID0gcHJlZ19yZXBsYWNlKCAnfFwvfCcsIERJUkVDVE9SWV9TRVBBUkFUT1IsICRsb2NhdGlvbiApOwoKICAgICRkaXIgPSAkcHJlZml4LkRJUkVDVE9SWV9TRVBBUkFUT1IuZGlybmFtZSggJGxvY2F0aW9uICk7CiAgICBpZiggIWZpbGVfZXhpc3RzKCAkZGlyICkgKQogICAgICB7CgkkdGhpcy0+X21rZGlyciggJGRpciApOwoJaWYoICFmaWxlX2V4aXN0cyggJGRpciApICkKCSAgewoJICAgIHJldHVybiAwOwoJICB9CiAgICAgIH0KCiAgICAvLyBhbmQgcHV0IGl0IG91dCB0aGVyZQogICAgZ2xvYmFsICRnQ21zOwogICAgJGZuID0gJHByZWZpeC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRuZXdsb2M7CiAgICAkZnAgPSBmb3BlbiggJGZuLCAidyIgKTsKICAgIGlmKCAhJGZwICkKICAgICAgewoJcmV0dXJuIDA7CiAgICAgIH0KICAgIGZ3cml0ZSggJGZwLCAkZGF0YSApOwogICAgZmNsb3NlKCAkZnAgKTsKICAgIHJldHVybiAxOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICAgIGlmICgkbWVzc2FnZSAhPSAnJykKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJG1lc3NhZ2UpOwogICAgICB9CgogICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlBZG1pblBhbmVsKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gRGlzcGxheUFkbWluUGFuZWwoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CiAgICBlY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKICAgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVGhlbWVzJykpCiAgICAgIHsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZXhwb3J0JywgJHRoaXMtPkxhbmcoJ2V4cG9ydCcpKTsKICAgICAgfQogICAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBTdHlsZXNoZWV0cycpICYmCgkkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdBZGQgVGVtcGxhdGVzJykgJiYKCSR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBTdHlsZXNoZWV0IEFzc29jJykpCiAgICAgIHsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignaW1wb3J0JywgJHRoaXMtPkxhbmcoJ2ltcG9ydCcpKTsKICAgICAgfQogICAgZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOwoKICAgIC8vIHRoZSBleHBvcnQgdGFiCiAgICBpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIFRoZW1lcycpKQogICAgICB7CgllY2hvICR0aGlzLT5TdGFydFRhYignZXhwb3J0Jyk7CgkkYWxsdGVtcGxhdGVzID0gVGVtcGxhdGVPcGVyYXRpb25zOjpMb2FkVGVtcGxhdGVzKCk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2V4cG9ydHRoZW1lJywkcmV0dXJuaWQpKTsKCQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpZHRleHQnLCAkdGhpcy0+TGFuZygnaWQnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWV0ZXh0JywgJHRoaXMtPkxhbmcoJ25hbWUnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FjdGl2ZXRleHQnLCAkdGhpcy0+TGFuZygnYWN0aXZlJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZWZhdWx0dGV4dCcsICR0aGlzLT5MYW5nKCdkZWZhdWx0JykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdleHBvcnR0ZXh0JywgJHRoaXMtPkxhbmcoJ2V4cG9ydCcpKTsKCQoJLy8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgdGVtcGxhdGVzCglnbG9iYWwgJGdDbXM7Cgkkcm93Y2xhc3MgPSAncm93MSc7Cgkkcm93YXJyYXkgPSBhcnJheSgpOwoJZm9yZWFjaCggJGFsbHRlbXBsYXRlcyBhcyAkdGVtcGwgKQoJICB7CgkgICAgJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoJICAgICRvbmVyb3ctPmlkID0gJHRlbXBsLT5pZDsKCSAgICAkb25lcm93LT5uYW1lID0gJHRlbXBsLT5uYW1lOwoJICAgIGlmKCAkdGVtcGwtPmFjdGl2ZSApCgkgICAgICB7CgkJJG9uZXJvdy0+YWN0aXZlID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicpOwoJICAgICAgfQoJICAgIGlmKCAkdGVtcGwtPmRlZmF1bHQgKQoJICAgICAgewoJCSRvbmVyb3ctPmRlZmF1bHQgPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJyk7CgkgICAgICB9CgkgICAgJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgkgICAgaWYoICR0ZW1wbC0+YWN0aXZlICkKCSAgICAgIHsKCQkkb25lcm93LT5zZWxlY3QgPSAKCQkgICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCAkaWQsICdleHBvcnQnLiRvbmVyb3ctPmlkLCAkb25lcm93LT5pZCApOwoJICAgICAgfQoJICAgIGFycmF5X3B1c2goICRyb3dhcnJheSwgJG9uZXJvdyApOwoJICAgICgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzID0gInJvdzIiIDogJHJvd2NsYXNzID0gInJvdzEiKTsKCSAgfQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaXRlbXMnLCAkcm93YXJyYXkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RoZW1lbmFtZScsCgkJCSAgICAgICR0aGlzLT5MYW5nKCdwcm9tcHRfdGhlbWVuYW1lJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90aGVtZW5hbWUnLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfdGhlbWVuYW1lJywnJywyMCwyMCkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLCR0aGlzLT5MYW5nKCdleHBvcnQnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2V4cG9ydC50cGwnKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogICAgICB9CgogICAgLy8gdGhlIGltcG9ydCB0YWIKICAgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdBZGQgU3R5bGVzaGVldHMnKSAmJgoJJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQWRkIFRlbXBsYXRlcycpICYmCgkkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdBZGQgU3R5bGVzaGVldCBBc3NvYycpKQogICAgICB7CgllY2hvICR0aGlzLT5TdGFydFRhYignaW1wb3J0Jyk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdpbXBvcnR0aGVtZScsJHJldHVybmlkLCdwb3N0JywgJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9icm93c2UnLCAkdGhpcy0+TGFuZygndXBsb2FkJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9icm93c2UnLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlRmlsZVVwbG9hZElucHV0KCRpZCwnaW5wdXRfYnJvd3NlJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0JywKCQkJCQkJICAgICAgICR0aGlzLT5MYW5nKCdpbXBvcnQnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2ltcG9ydC50cGwnKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogICAgICB9CiAgfQoKCiAgZnVuY3Rpb24gRG9FeHBvcnRUaGVtZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgZ2xvYmFsICRnQ21zOwoKCiAgICAkdGhlbWVuYW1lID0gdHJpbSgkcGFyYW1zWydpbnB1dF90aGVtZW5hbWUnXSApOwogICAgaWYoICR0aGVtZW5hbWUgPT0gJycgKQogICAgICB7CgkkdGhlbWVuYW1lID0gJ3RoZW1lJzsKICAgICAgfQogICAgJHRoZW1lbmFtZSA9IHN0cl9yZXBsYWNlKCcgJywnXycsJHRoZW1lbmFtZSk7CgogICAgJHRlbXBsYXRlX2lkcyA9IGFycmF5KCk7CiAgICAkc3R5bGVzaGVldF9pZHMgPSBhcnJheSgpOwogICAgJGFzc29jaWF0aW9ucyA9IGFycmF5KCk7CiAgICAkdXJscyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlICkKICAgICAgewoJaWYoICFwcmVnX21hdGNoKCAnL15leHBvcnQvJywgJGtleSApICkKCSAgewoJICAgIGNvbnRpbnVlOwoJICB9CgoJJGlkID0gc3Vic3RyKCAka2V5LCBzdHJsZW4oJ2V4cG9ydCcpICk7CgkkdGVtcGxhdGVfaWRzW10gPSAkaWQ7CgoJLy8gd2UgYXJlIGV4cG9ydGluZyBhIHRlbXBsYXRlCgkvLyBnZXQgdGhlIHRlbXBsYXRlCgkkdGVtcGxhdGUgPSBUZW1wbGF0ZU9wZXJhdGlvbnM6OkxvYWRUZW1wbGF0ZUJ5SUQoICRpZCApOwoJaWYoICEkdGVtcGxhdGUgKQoJICB7CgkgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX3RlbXBsYXRlbm90Zm91bmQnKSk7CgkgICAgcmV0dXJuOwoJICB9CgoJLy8gZ2V0IHRoZSBpbWFnZXMsIGV0YyBhdHRhY2hlZCB0byB0aGUgdGVtcGxhdGUKCSR0X3VybHMgPSAkdGhpcy0+X2V4dHJhY3RUZW1wbGF0ZUltYWdlcygkdGVtcGxhdGUpOwoJJHVybHMgPSBhcnJheV9tZXJnZSggJHVybHMsICR0X3VybHMgKTsKCgkvLyBnZXQgdGhlIHN0eWxlc2hlZXRzIGF0dGFjaGVkIHRvIHRoYXQgdGVtcGxhdGUKCSRzdHlsZXNoZWV0cyA9IFN0eWxlc2hlZXRPcGVyYXRpb25zOjpHZXRUZW1wbGF0ZUFzc29jaWF0ZWRTdHlsZXNoZWV0cyggJGlkICk7CgkkYXNzb2MgPSBhcnJheSgpOwoJJGFzc29jWyd0bmFtZSddID0gJHRlbXBsYXRlLT5uYW1lOwoJJHRtcCA9IGFycmF5KCk7Cglmb3JlYWNoKCAkc3R5bGVzaGVldHMgYXMgJGNzc2lkICkKCSAgewoJICAgICRzdHlsZXNoZWV0X2lkc1tdID0gJGNzc2lkOwoJICAgICRjc3MgPSBTdHlsZXNoZWV0T3BlcmF0aW9uczo6TG9hZFN0eWxlc2hlZXRCeUlEKCAkY3NzaWQgKTsKCSAgICAkdG1wW10gPSAkY3NzLT5uYW1lOwoJICAgICRjc3N1cmxzID0gJHRoaXMtPl9leHRyYWN0U3R5bGVzaGVldEltYWdlcygkY3NzKTsKCSAgICBwcmludF9yKCAkY3NzdXJscyApOyBlY2hvICI8YnIvPjxici8+IjsKCSAgICAkdXJscyA9IGFycmF5X21lcmdlKCAkdXJscywgJGNzc3VybHMgKTsKCSAgfQoJJGFzc29jWydjc3MnXSA9ICR0bXA7CgkkYXNzb2NpYXRpb25zW10gPSAkYXNzb2M7CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgd2UncmUgbm90IG91dHB1dHRpbmcgdGhlIHNhbWUgdGhpbmcgdHdpY2UKICAgICR0ZW1wbGF0ZV9pZHMgPSBhcnJheV91bmlxdWUoICR0ZW1wbGF0ZV9pZHMgKTsKICAgICRzdHlsZXNoZWV0X2lkcyA9IGFycmF5X3VuaXF1ZSggJHN0eWxlc2hlZXRfaWRzICk7CiAgICAkdXJscyA9IGFycmF5X3VuaXF1ZSggJHVybHMgKTsKCiAgICAvLyBjaGVja3MgdG8gc2VlIGlmIHRoZXJlIGlzIGFjdHVhbGx5IGFueXRoaW5nIHRvIG91dHB1dAogICAgaWYoIGNvdW50KCAkdGVtcGxhdGVfaWRzICkgPT0gMCB8fCBjb3VudCggJHN0eWxlc2hlZXRfaWRzICkgPT0gMCApCiAgICAgIHsKCS8vIG5vdGhpbmcgdG8gb3V0cHV0CgkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9ub291dHB1dCcpKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIG91dHB1dCB0aGUgeG1sIGhlYWRlcgogICAgJG91dHB1dCA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+JzsKICAgICRvdXRwdXQgLj0gJHRoaXMtPmR0ZDsKICAgICRvdXRwdXQgLj0gIjx0aGVtZT5cbiI7CiAgICAkb3V0cHV0IC49ICIgIDxuYW1lPiIuJHRoZW1lbmFtZS4iPC9uYW1lPlxuIjsKICAgICRvdXRwdXQgLj0gIiAgPGR0ZHZlcnNpb24+Ii5EVERfVkVSU0lPTi4iPC9kdGR2ZXJzaW9uPlxuIjsKCiAgICAvLyBvdXRwdXQgdGhlIHRlbXBsYXRlcwogICAgZm9yZWFjaCggJHRlbXBsYXRlX2lkcyBhcyAkaWQgKQogICAgICB7CgkkdGVtcGxhdGUgPSBUZW1wbGF0ZU9wZXJhdGlvbnM6OkxvYWRUZW1wbGF0ZUJ5SUQoICRpZCApOwoJLy8gcGFyc2UgdGhyb3VnaCB0aGUgaHRtbCBhbmQgZXh0cmFjdCB0aGUgaW1hZ2UgdGFncwoJLy8gYW5kIGltYWdlcywgZXRjLgoKCSRvdXRwdXQgLj0gIiAgPHRlbXBsYXRlPlxuIjsKCSRvdXRwdXQgLj0gIiAgICA8dG5hbWU+Ii4kdGVtcGxhdGUtPm5hbWUuIjwvdG5hbWU+XG4iOwoJJG91dHB1dCAuPSAiICAgIDx0ZW5jb2Rpbmc+Ii4kdGVtcGxhdGUtPmVuY29kaW5nLiI8L3RlbmNvZGluZz5cbiI7Cgkkb3V0cHV0IC49ICIgICAgPHRkYXRhPjwhW0NEQVRBWyIuYmFzZTY0X2VuY29kZSgkdGVtcGxhdGUtPmNvbnRlbnQpLiJdXT48L3RkYXRhPlxuIjsKCSRvdXRwdXQgLj0gIiAgPC90ZW1wbGF0ZT5cbiI7CglpZiggJHRlbXBsYXRlLT5zdHlsZXNoZWV0ICE9ICcnICkgCgkgIHsKCSAgICAkb3V0cHV0IC49ICIgIDxzdHlsZXNoZWV0PlxuIjsKCSAgICAkb3V0cHV0IC49ICIgICAgPGNzc25hbWU+Ii4kdGVtcGxhdGUtPm5hbWUuIiAtQXR0YWNoZWQtPC9jc3NuYW1lPlxuIjsKCSAgICAkb3V0cHV0IC49ICIgICAgPGNzc21lZGlhdHlwZT48L2Nzc21lZGlhdHlwZT5cbiI7CgkgICAgJG91dHB1dCAuPSAiICAgIDxjc3NkYXRhPjwhW0NEQVRBWyIuYmFzZTY0X2VuY29kZSgkdGVtcGxhdGUtPnN0eWxlc2hlZXQpLiJdXT48L2Nzc2RhdGE+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgPC9zdHlsZXNoZWV0PlxuIjsKCSAgfQogICAgICB9CgkKICAgIC8vIHRoZSBzdHlsZXNoZWV0cwogICAgZm9yZWFjaCggJHN0eWxlc2hlZXRfaWRzIGFzICRpZCApCiAgICAgIHsKCSRzdHlsZXNoZWV0ID0gU3R5bGVzaGVldE9wZXJhdGlvbnM6OkxvYWRTdHlsZXNoZWV0QnlJRCggJGlkICk7Cgkkb3V0cHV0IC49ICIgIDxzdHlsZXNoZWV0PlxuIjsKCSRvdXRwdXQgLj0gIiAgICA8Y3NzbmFtZT4iLiRzdHlsZXNoZWV0LT5uYW1lLiI8L2Nzc25hbWU+XG4iOwoJJG91dHB1dCAuPSAiICAgIDxjc3NtZWRpYXR5cGU+Ii4kc3R5bGVzaGVldC0+bWVkaWFfdHlwZS4iPC9jc3NtZWRpYXR5cGU+XG4iOwoJJG91dHB1dCAuPSAiICAgIDxjc3NkYXRhPjwhW0NEQVRBWyIuYmFzZTY0X2VuY29kZSgkc3R5bGVzaGVldC0+dmFsdWUpLiJdXT48L2Nzc2RhdGE+XG4iOwoJJG91dHB1dCAuPSAiICA8L3N0eWxlc2hlZXQ+XG4iOwkKICAgICAgfQoKICAgIC8vIHRoZSBhc3NvY2lhdGlvbnMKICAgIGZvcmVhY2goICRhc3NvY2lhdGlvbnMgYXMgJGFzc29jMSApCiAgICAgIHsKCWZvcmVhY2goICRhc3NvYzFbJ2NzcyddIGFzICRhc3NvYzIgKQoJICB7CgkgICAgJG91dHB1dCAuPSAiICA8YXNzb2M+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgICA8YXNzb2NfdG5hbWU+Ii4kYXNzb2MxWyd0bmFtZSddLiI8L2Fzc29jX3RuYW1lPlxuIjsKCSAgICAkb3V0cHV0IC49ICIgICAgPGFzc29jX2Nzc25hbWU+Ii4kYXNzb2MyLiI8L2Fzc29jX2Nzc25hbWU+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgPC9hc3NvYz5cbiI7CgkgIH0KICAgICAgfQoKICAgIC8vIHRoZSBmaWxlcwogICAgZm9yZWFjaCggJHVybHMgYXMgJG9uZXVybCApCiAgICAgIHsKCSRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCAkZ0Ntcy0+Y29uZmlnWydyb290X3BhdGgnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvbmV1cmwgKTsKCWlmKCAhJGNvbnRlbnRzICkgCgkgIHsKCSAgICBjb250aW51ZTsKCSAgfQoJJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKCAkY29udGVudHMgKTsKCSRvdXRwdXQgLj0gIiAgPHJlZmVyZW5jZT5cbiI7Cgkkb3V0cHV0IC49ICIgICAgPHJlZm5hbWU+Ii5iYXNlbmFtZSgkb25ldXJsKS4iPC9yZWZuYW1lPlxuIjsKCSRvdXRwdXQgLj0gIiAgICA8cmVmZW5jb2RlZD4xPC9yZWZlbmNvZGVkPlxuIjsKCSRvdXRwdXQgLj0gIiAgICA8cmVmbG9jYXRpb24+JG9uZXVybDwvcmVmbG9jYXRpb24+XG4iOwoJJG91dHB1dCAuPSAiICAgIDxyZWZkYXRhPjwhW0NEQVRBWyIuJGVuY29kZWQuIl1dPjwvcmVmZGF0YT5cbiI7Cgkkb3V0cHV0IC49ICIgIDwvcmVmZXJlbmNlPlxuIjsKICAgICAgfQoKICAgIC8vIGFuZCB0aGUgdGhlbWUgdGFpbAogICAgJG91dHB1dCAuPSAiPC90aGVtZT5cbiI7CgogICAgLy8gYW5kIHNwaXQgaXQgb3V0CiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcpOwogICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0nLiR0aGVtZW5hbWUuJy54bWwnKTsKLy8gICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC94bWwnKTsKLy8gICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigkb3V0cHV0KSk7CgogICAgLy8gdG9kbywgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCiAgICB3aGlsZShAb2JfZW5kX2NsZWFuKCkpOwogICAgZWNobyAkb3V0cHV0OwogICAgZXhpdCgpOwogIH0KCgogIGZ1bmN0aW9uIERvSW1wb3J0VGhlbWUoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRmaWVsZE5hbWU9JGlkLidpbnB1dF9icm93c2UnOwogICAgaWYgKCFpc3NldCAoJF9GSUxFU1skZmllbGROYW1lXSkgfHwgIWlzc2V0ICgkX0ZJTEVTKQoJfHwgIWlzX2FycmF5ICgkX0ZJTEVTWyRmaWVsZE5hbWVdKSB8fCAhJF9GSUxFU1skZmllbGROYW1lXVsnbmFtZSddKQogICAgICB7CgkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZpbGVzdXBsb2FkZWQnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZHRkdmVyc2lvbgogICAgJGhhdmVkdGR2ZXJzaW9uID0gZmFsc2U7CgogICAgLy8gbm9ybWFsaXplIHRoZSBmaWxlIHZhcmlhYmxlCiAgICAkZmlsZSA9ICRfRklMRVNbJGZpZWxkTmFtZV07CiAgICAKICAgIC8vICRmaWxlWyd0bXBfbmFtZSddIGlzIHRoZSBmaWxlIHdlIGhhdmUgdG8gcGFyc2UKICAgICR4bWwgPSBmaWxlX2dldF9jb250ZW50cyggJGZpbGVbJ3RtcF9uYW1lJ10gKTsKCiAgICAvLyBsb2FkIGFsbCB0aGUgc3R5bGVzaGVldHMKICAgICRhbGxzdHlsZXNoZWV0cyA9IFN0eWxlc2hlZXRPcGVyYXRpb25zOjpMb2FkU3R5bGVzaGVldHMoKTsKCiAgICAvLyBhbmQgdGhlIHRlbXBsYXRlcwogICAgJGFsbHRlbXBsYXRlcyA9IFRlbXBsYXRlT3BlcmF0aW9uczo6TG9hZFRlbXBsYXRlcygpOwoKICAgIC8vIHBhcnNlIHRoZSB4bWwgc3R1ZmYKICAgICRwYXJzZXIgPSB4bWxfcGFyc2VyX2NyZWF0ZSgpOwogICAgeG1sX3BhcnNlX2ludG9fc3RydWN0KCAkcGFyc2VyLCAkeG1sLCAkdmFsLCAkaWR4ICk7CiAgICB4bWxfcGFyc2VyX2ZyZWUoICRwYXJzZXIgKTsKCiAgICAkdGhlbWUgPSAnJzsKICAgICRjdXJlbGVtZW50ID0gYXJyYXkoKTsKICAgICR0ZW1wbGF0ZXMgPSBhcnJheSgpOwogICAgJGFzc29jaWF0aW9ucyA9IGFycmF5KCk7CiAgICAkYWxscmVmZXJlbmNlcyA9IGFycmF5KCk7CiAgICAkc3R5bGVzaGVldHMgPSBhcnJheSgpOwoKICAgICRvbmV0ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSgpOwogICAgJG9uZXNoZWV0ID0gJyc7CiAgICAkb25lcmVmZXJlbmNlID0gYXJyYXkoKTsKICAgICRvbmVhc3NvYyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkdmFsIGFzICRlbGVtICkKICAgICAgewoJJHZhbHVlID0gJyc7CglpZiggaXNzZXQoICRlbGVtWyd2YWx1ZSddICkgKSAkdmFsdWUgPSAkZWxlbVsndmFsdWUnXTsKCSR0eXBlID0gJGVsZW1bJ3R5cGUnXTsKCXN3aXRjaCggJGVsZW1bJ3RhZyddICkKCSAgewoJICBjYXNlICdOQU1FJzoKCSAgICB7CgkgICAgICBpZiggJHR5cGUgIT0gJ2NvbXBsZXRlJyAmJiAkdHlwZSAhPSAnY2xvc2UnICkKCQl7CgkJICBjb250aW51ZTsKCQl9CgkgICAgICAkdGhlbWUgPSAkdmFsdWU7CgkgICAgICBicmVhazsKCSAgICB9CgoJICBjYXNlICdEVERWRVJTSU9OJzoKCSAgICB7CgkgICAgICBpZiggJHR5cGUgIT0gJ2NvbXBsZXRlJyAmJiAkdHlwZSAhPSAnY2xvc2UnICkKCQl7CgkJICBjb250aW51ZTsKCQl9CgkgICAgICBpZiggJHZhbHVlICE9IERURF9WRVJTSU9OICkKCQl7CgkJICAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJCSAgICR0aGlzLT5MYW5nKCdlcnJvcl9kdGRtaXNtYXRjaCcpKTsKCQkgIHJldHVybjsKCQl9CgkgICAgICAkaGF2ZWR0ZHZlcnNpb24gPSB0cnVlOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBjYXNlICdUTkFNRSc6CgkgICAgaWYoICR0eXBlICE9ICdjb21wbGV0ZScgJiYgJHR5cGUgIT0gJ2Nsb3NlJyApCgkgICAgICB7CgkJY29udGludWU7CgkgICAgICB9CgkgICAgJG9uZXRlbXBsYXRlLT5uYW1lID0gJHRoZW1lLiIgOiAiLiR2YWx1ZTsKCSAgICBmb3JlYWNoKCAkYWxsdGVtcGxhdGVzIGFzICR0bXBsICkKCSAgICAgIHsKCQlpZiggJHRtcGwtPm5hbWUgPT0gJG9uZXRlbXBsYXRlLT5uYW1lICkKCQkgIHsKCQkgICAgLy8gdGVtcGxhdGUgbmFtZSBleGlzdHMKCQkgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl90ZW1wbGF0ZWV4aXN0cycsJG9uZXRlbXBsYXRlLT5uYW1lKSk7CgkJICAgIHJldHVybjsKCQkgIH0KCSAgICAgIH0KCSAgICBicmVhazsKCgkgIGNhc2UgJ1RFTkNPRElORyc6CgkgICAgaWYoICR0eXBlICE9ICdjb21wbGV0ZScgJiYgJHR5cGUgIT0gJ2Nsb3NlJyApCgkgICAgICB7CgkJY29udGludWU7CgkgICAgICB9CgkgICAgJG9uZXRlbXBsYXRlLT5lbmNvZGluZyA9ICR2YWx1ZTsKCSAgICBicmVhazsKCSAgICAKCSAgY2FzZSAnVERBVEEnOgoJICAgIGlmKCAkdHlwZSAhPSAnY29tcGxldGUnICYmICR0eXBlICE9ICdjbG9zZScgKQoJICAgICAgewoJCWNvbnRpbnVlOwoJICAgICAgfQoJICAgICRvbmV0ZW1wbGF0ZS0+Y29udGVudCA9IGJhc2U2NF9kZWNvZGUoJHZhbHVlKTsKCSAgICBicmVhazsKCSAgICAKCSAgY2FzZSAnVEVNUExBVEUnOgoJICAgIGlmKCAkdHlwZSAhPSAnY2xvc2UnICkKCSAgICAgIHsKCQljb250aW51ZTsKCSAgICAgIH0KCSAgICAkdGVtcGxhdGVzW10gPSAkb25ldGVtcGxhdGU7CgkgICAgJG9uZXRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKCk7CgkgICAgYnJlYWs7CgkgICAgCgkgIGNhc2UgJ0NTU05BTUUnOgoJICAgICRvbmVzaGVldC0+bmFtZSA9ICR0aGVtZS4iIDogIi4kdmFsdWU7CgkgICAgZm9yZWFjaCggJGFsbHN0eWxlc2hlZXRzIGFzICRjc3NvYmogKQoJICAgICAgewoJCWlmKCAkY3Nzb2JqLT5uYW1lID09ICRvbmVzaGVldC0+bmFtZSApCgkJICB7CgkJICAgIC8vIHN0eWxlc2hlZXQgbmFtZSBleGlzdHMKCQkgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9zdHlsZXNoZWV0ZXhpc3RzJywkb25lc2hlZXQtPm5hbWUpKTsKCQkgICAgcmV0dXJuOwoJCSAgfQoJICAgICAgfQoJICAgIGJyZWFrOwoKCSAgY2FzZSAnQ1NTTUVESUFUWVBFJzoKCSAgICAkb25lc2hlZXQtPm1lZGlhX3R5cGUgPSAkdmFsdWU7CgkgICAgYnJlYWs7CgoJICBjYXNlICdDU1NEQVRBJzoKCSAgICAkb25lc2hlZXQtPnZhbHVlID0gYmFzZTY0X2RlY29kZSgkdmFsdWUpOwoJICAgIGJyZWFrOwoKCSAgY2FzZSAnU1RZTEVTSEVFVCc6CgkgICAgaWYoICR0eXBlID09ICdvcGVuJyApCgkgICAgICB7CgkJJG9uZXNoZWV0ID0gbmV3IFN0eWxlc2hlZXQoKTsKCSAgICAgIH0KCSAgICBlbHNlIGlmKCAkdHlwZSA9PSAnY2xvc2UnICkKCSAgICAgIHsKCQkkc3R5bGVzaGVldHNbXSA9ICRvbmVzaGVldDsKCSAgICAgIH0KCgkgIGNhc2UgJ0FTU09DX1ROQU1FJzoKCSAgICAkb25lYXNzb2NbJ3RuYW1lJ10gPSAkdmFsdWU7CgkgICAgYnJlYWs7CgoJICBjYXNlICdBU1NPQ19DU1NOQU1FJzoKCSAgICAkb25lYXNzb2NbJ2Nzc25hbWUnXSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ0FTU09DJzoKCSAgICBpZiggJHR5cGUgIT0gJ2Nsb3NlJyApCgkgICAgICB7CgkJY29udGludWU7CgkgICAgICB9CgkgICAgaWYoIGNvdW50KCAkb25lYXNzb2MgKSAhPSAyICkKCSAgICAgIHsKCQkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJCSAkdGhpcy0+TGFuZygnZXJyb3JfYmFkYXNzb2MnLCRvbmVhc3NvY1sndG5hbWUnXSkpOwoJICAgICAgfQoJICAgIGFycmF5X3B1c2goICRhc3NvY2lhdGlvbnMsICRvbmVhc3NvYyApOwoJICAgICRvbmVhc3NvYyA9IGFycmF5KCk7CgkgICAgYnJlYWs7CgoJICBjYXNlICdSRUZOQU1FJzoKCSAgICAkcmVmZXJlbmNlWyduYW1lJ10gPSAkdmFsdWU7CgkgICAgYnJlYWs7CgoJICBjYXNlICdSRUZFTkNPREVEJzoKCSAgICAkcmVmZXJlbmNlWydlbmNvZGVkJ10gPSAkdmFsdWU7CgkgICAgYnJlYWs7CgoJICBjYXNlICdSRUZMT0NBVElPTic6CgkgICAgJHJlZmVyZW5jZVsnbG9jYXRpb24nXSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ1JFRkRBVEEnOgoJICAgICRyZWZlcmVuY2VbJ2RhdGEnXSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ1JFRkVSRU5DRSc6CgkgICAgaWYoICR0eXBlICE9ICdjbG9zZScgKQoJICAgICAgewoJCWNvbnRpbnVlOwoJICAgICAgfQoJICAgIGlmKCBjb3VudCggJHJlZmVyZW5jZSApICE9IDQgKQoJICAgICAgewoJCS8vIHN0eWxlc2hlZXQgbmFtZSBleGlzdHMKCQkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJCSAkdGhpcy0+TGFuZygnZXJyb3JfYmFkZW1iZWQnLCRvbmVzaGVldC0+bmFtZSkpOwoJICAgICAgfQoJICAgIGFycmF5X3B1c2goICRhbGxyZWZlcmVuY2VzLCAkcmVmZXJlbmNlICk7CgkgICAgJHJlZmVyZW5jZSA9IGFycmF5KCk7CgkgICAgYnJlYWs7CgkgIH0KICAgICAgfQoKICAgIC8vIGNoZWNrIHRoZSBkdGQgdmVyc2lvbiBvbmUgbGFzdCB0aW1lLgogICAgaWYoICRoYXZlZHRkdmVyc2lvbiA9PSBmYWxzZSApCiAgICAgIHsKCSR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX2R0ZG1pc21hdGNoJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3Qgb25lIHN0eWxlc2hlZXQKICAgIGlmKCBjb3VudCggJHN0eWxlc2hlZXRzICkgPT0gMCApCiAgICAgIHsKCSR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX25vc3R5bGVzaGVldHMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBjbGVhbiB1cCB0aGUgdGVtcGxhdGUgYW5kIHN0eWxlc2hlZXRzIGFuZCBhZGp1c3QgZXZlcnl0aGluZyB0byB0aGVpciBuZXcgbG9jYXRpb25zCiAgICAkcHJlZml4ID0gYmFzZW5hbWUoJGdDbXMtPmNvbmZpZ1sndXBsb2Fkc191cmwnXSkuIi8iLiR0aGVtZTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRzdHlsZXNoZWV0cyk7ICRpKysgKQogICAgICB7CgkkcmVzdWx0ID0gJHRoaXMtPl9jbGVhbnVwUmVmZXJlbmNlcyggJHByZWZpeCwgJGFsbHJlZmVyZW5jZXMsICRzdHlsZXNoZWV0c1skaV0tPnZhbHVlICk7CglpZiggISRyZXN1bHQgKQoJICB7CgkgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX2VkaXRpbmdwcm9ibGVtJykpOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgogICAgZm9yZWFjaCggJHRlbXBsYXRlcyBhcyAkb25ldGVtcGxhdGUgKQogICAgICB7CgkkcmVzdWx0ID0gJHRoaXMtPl9jbGVhbnVwUmVmZXJlbmNlcyggJHByZWZpeCwgJGFsbHJlZmVyZW5jZXMsICRvbmV0ZW1wbGF0ZS0+Y29udGVudCApOwoJaWYoICEkcmVzdWx0ICkKCSAgewoJICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9lZGl0aW5ncHJvYmxlbScpKTsKCSAgICByZXR1cm47CgkgIH0KICAgICAgfQoJCiAgICAvLyBzYXZlIG91ciByZWZlcmVuY2VzIGFzIGZpbGVzCiAgICAvLyBmaXJzdCB3ZSBjcmVhdGUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QKICAgICRkZXN0ID0gJGdDbXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kdGhlbWU7CiAgICAkdGhpcy0+X21rZGlyciggJGRlc3QgKTsKCiAgICBmb3JlYWNoKCAkYWxscmVmZXJlbmNlcyBhcyAkcmVmICkKICAgICAgewoJLy8kcmVzID0gJHRoaXMtPl9zYXZlRW5jb2RlZEZpbGUoICRkZXN0LCAkcmVmWyduYW1lJ10sICRyZWZbJ2xvY2F0aW9uJ10sCgkkcmVzID0gJHRoaXMtPl9zYXZlRW5jb2RlZEZpbGUoICRkZXN0LCAkcmVmWyduYW1lJ10sICRyZWZbJ25hbWUnXSwKCQkJCQkkcmVmWydlbmNvZGVkJ10sICRyZWZbJ2RhdGEnXSApOwoJaWYoICRyZXMgIT0gMSApIAoJICB7CgkgICAgLy8gdGhpcyBjb3VsZCBiZSBhIHByb2JsZW0gd2UgY291bGQgaGF2ZSBhIGJ1bmNoIG8gZmlsZXMgbHlpbmcgYXJvdW5kCgkgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX3Byb2JsZW1zYXZpbmdpbmNsdWRlcycpKTsKCSAgICByZXR1cm47CgkgIH0KICAgICAgfQogICAgCiAgICAKICAgIC8vCiAgICAvLyBub3cgd2UgaGF2ZSBzb21lIG5pY2UsIGNsZWFuIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMsIGRvIG91ciBtYWdpYwogICAgLy8KCiAgICAvLyBzdHlsZXNoZWV0cyBmaXJzdAogICAgJGNzc2lkcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkc3R5bGVzaGVldHMgYXMgJGNzcyApCiAgICAgIHsKCSRuZXdpZCA9IFN0eWxlU2hlZXRPcGVyYXRpb25zOjpJbnNlcnRTdHlsZXNoZWV0KCAkY3NzICk7CglpZiggJG5ld2lkID09IC0xICkKCSAgewoJICAgIC8vIGNvdWxkbid0IGluc2VydCB0aGUgc3R5bGVzaGVldAoJICAgIGNvbnRpbnVlOwoJICB9CgkkY3NzaWRzW10gPSBhcnJheSggJGNzcy0+bmFtZSwgJG5ld2lkICk7CiAgICAgIH0KCiAgICAvLyB0aGVuIHRlbXBsYXRlcwogICAgZm9yZWFjaCggJHRlbXBsYXRlcyBhcyAkb25ldGVtcGxhdGUgKQogICAgICB7CgkvLyBpbnNlcnQgdGhlIHRlbXBsYXRlCgkkbmV3dG1wbGlkID0gVGVtcGxhdGVPcGVyYXRpb25zOjpJbnNlcnRUZW1wbGF0ZSggJG9uZXRlbXBsYXRlICk7CglpZiggJG5ld3RtcGxpZCA9PSAtMSApCgkgIHsKCSAgICAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAgICAkdGhpcy0+TGFuZygnZXJyb3JfY291bGRub3RjcmVhdGV0ZW1wbGF0ZScpKTsKCSAgICByZXR1cm47CgkgIH0KCWVsc2UKCSAgewoJICAgIC8vIG5vdyBhc3NvY2lhdGUgdGhlIHN0eWxlc2hlZXRzIHdpdGggdGhpcyB0ZW1wbGF0ZQoJICAgIAoJICAgIC8vIG9ubHkgYWRkIHRoZSBhc3NvY2lhdGlvbnMgZm9yIHRoaXMgdGVtcGxhdGUuCgkgICAgZm9yZWFjaCggJGFzc29jaWF0aW9ucyBhcyAkYXNzb2MgKQoJICAgICAgewoJCSR0bXBfbmFtZSA9ICR0aGVtZS4iIDogIi4kYXNzb2NbJ3RuYW1lJ107CgkJaWYoICR0bXBfbmFtZSAhPSAkb25ldGVtcGxhdGUtPm5hbWUgKQoJCSAgewoJCSAgICBjb250aW51ZTsKCQkgIH0KCQkKCQlmb3JlYWNoKCAkY3NzaWRzIGFzICRyZWMgKQoJCSAgewoJCSAgICAkdG1wX25hbWUyID0gJHRoZW1lLiIgOiAiLiRhc3NvY1snY3NzbmFtZSddOwoJCSAgICBpZiggJHRtcF9uYW1lMiA9PSAkcmVjWzBdICkKCQkgICAgICB7CgkJCS8vIGhhdmUgYSB0ZW1wbGF0ZWlkIGFuZCBhIGNzc2lkLCBzbyBnbyBmb3IgaXQuCgkJCWlmKCAhU3R5bGVzaGVldE9wZXJhdGlvbnM6OkFzc29jaWF0ZVN0eWxlc2hlZXRUb1RlbXBsYXRlKCAkcmVjWzFdLCAkbmV3dG1wbGlkICkgKQoJCQkgIHsKCQkJICAgIC8vIHJlYWxseSByZWFsbHkgYmFkIGlmIHRoaXMgZGlkbid0IHdvcmsuCgkJCSAgICAvLyBjdXogdGhlb3JldGljYWxseSB3ZSB3b3VsZCBoYXZlIHRvIGNsZWFuIHVwLgoJCQkgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCQkJICAgICAkdGhpcy0+TGFuZygnZXJyb3JfY291bGRub3Rhc3NvY2NzcycpKTsKCQkJICAgIHJldHVybjsKCQkJICB9CgkJCSRhc3NvY1sndXNlZCddID0gMTsKCQkgICAgICB9CgkJICB9CgkgICAgICB9IC8vIGZvcmVhY2gKCSAgfSAvLyBlbHNlCiAgICAgIH0gLy8gZm9yZWFjaAoKCiAgICAvLyBpZiB3ZSBnb3QgaGVyZSwgZXZlcnl0aGluZyBzaG91bGQgYmUgYS1va2F5CiAgICAkdGhpcy0+UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCApOwogIH0gLy8gZnVuY3Rpb24KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBfbWtkaXJyKCAkcGF0aG5hbWUsICRtb2RlICkKICAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICAgTWFrZSBhIGRpcmVjdG9yeSByZWN1cnNpdmVseQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfbWtkaXJyICgkcGF0aG5hbWUsICRtb2RlID0gMDc3NykKICB7CiAgICAvLyBDaGVjayBpZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMKICAgIGlmIChpc19kaXIgKCRwYXRobmFtZSkgfHwgZW1wdHkgKCRwYXRobmFtZSkpCiAgICB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIEVuc3VyZSBhIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUKICAgIGlmIChpc19maWxlICgkcGF0aG5hbWUpKQogICAgewogICAgICAvLyBSQzogTW9kaWZpY2F0aW9uIHN1Y2ggdGhhdCB0aGlzIGlzbid0IGFuIGVycm9yCiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIENyYXdsIHVwIHRoZSBkaXJlY3RvcnkgdHJlZQogICAgJG5leHRfcGF0aG5hbWUgPQogICAgICBzdWJzdHIgKCRwYXRobmFtZSwgMCwgc3RycnBvcyAoJHBhdGhuYW1lLCBESVJFQ1RPUllfU0VQQVJBVE9SKSk7CiAgICBpZiAoJHRoaXMtPl9ta2RpcnIgKCRuZXh0X3BhdGhuYW1lLCAkbW9kZSkpCiAgICB7CiAgICAgIGlmICghZmlsZV9leGlzdHMgKCRwYXRobmFtZSkpCiAgICAgIHsKCSByZXR1cm4gQG1rZGlyICgkcGF0aG5hbWUsICRtb2RlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9Cgp9Cgo/Pgo=]]></data>
  </file>
</module>
