<?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>SimplePieMgr</name>
	<version>1.0.1</version>
    <mincmsversion>2.2</mincmsversion>
	<help><![CDATA[PGRpdiBpZD0icGFnZV90YWJzIj48ZGl2IGlkPSJzdXBwb3J0Ij5TdXBwb3J0PC9kaXY+CjxkaXYgaWQ9ImdlbmVyYWwiPkdlbmVyYWw8L2Rpdj4KPGRpdiBpZD0iaG93dG91c2UiPkhvdyBUbyBVc2U8L2Rpdj4KPGRpdiBpZD0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2Rpdj4KCgo8L2Rpdj48IS0tIEVuZFRhYkhlYWRlcnMgLS0+PGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj48ZGl2IGlkPSJwYWdlX2NvbnRlbnQiPjxkaXYgaWQ9InN1cHBvcnRfYyI+Cgk8aDM+VGhpcyBtb2R1bGUgaXMgYnJvdWdodCB0byB5b3UgYnk6PC9oMz4KCTxwPjxhIGhyZWY9Imh0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnL2J1eS1yb2xmLWEtY3VwLW9mLWNvZmZlZSIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+CgkJPGltZyBzcmM9Ii4uL21vZHVsZXMvU2ltcGxlUGllTWdyL2ltYWdlcy9jbXMtY2FuLWJlLXNpbXBsZS1vcmcucG5nIiBhbHQ9IiIgd2lkdGg9IjUwMCIgLz4KCQk8L2E+PC9wPgoJPGJyIC8+Cgk8cD48Yj5UaXBzLCB0cmlja3MgYW5kIHR1dG9yaWFscyB0byBtYWtlIGl0IGV2ZW4gZWFzaWVyIHRvIHdvcmsgd2l0aCBDTVMgTWFkZSBTaW1wbGUmdHJhZGU7LjwvYj48L3A+Cgk8YnIgLz4KCTxwPllvdSBjYW4gZmluZCBtZSBhdDo8L3A+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5jbXNjYW5iZXNpbXBsZS5vcmc8L2E+ICZyYXF1bzs8L2xpPgoJCTxsaT48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2Ntc2NhbmJlc2ltcGxlIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj50d2l0dGVyLmNvbTwvYT4gJnJhcXVvOzwvbGk+Cgk8L3VsPgogICAgCgk8aDM+U3VwcG9ydCBtZSBmb3Igc3VwcG9ydGluZyB5b3UhPC9oMz4KCTxwPkRvIHlvdSBsaWtlIHRoaXMgbW9kdWxlIGFuZCB0aGUgaGVscCB5b3UgZ2V0IGF0IENNUyBDYW4gQmUgU2ltcGxlPzxwPgoJPHA+WW91IGNhbiBkb25hdGUgc29tZSBtb25leSB0byBidXkgbWUgYSB2aXJ0dWFsIGN1cCBvZiBjb2ZmZWUgYXMgYSBzbWFsbCB0b2tlbiBvZiBhcHByZWNpYXRpb24uPHA+Cgk8cD48Yj48YSBocmVmPSJodHRwczovL2Ntc2NhbmJlc2ltcGxlLm9yZy9idXktcm9sZi1hLWN1cC1vZi1jb2ZmZWUiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPkRPTkFURSBOT1c8L2E+ICZyYXF1bzs8L2I+PC9wPgogIAoJPGgzPlN1cHBvcnQ8L2gzPgoJPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgY29udGFpbiBhbnkgY29tbWVyY2lhbCBzdXBwb3J0LiBJZiB5b3UgaGF2ZSBwcm9ibGVtcywgYXNrIGZvciBoZWxwIGluIHRoZTo8L3A+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcvIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5DTVMgTWFkZSBTaW1wbGUgZm9ydW1zPC9hPjs8L2xpPgoJCTxsaT48YSBocmVmPSJodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9zdXBwb3J0L2RvY3VtZW50YXRpb24vY2hhdC8iIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPlNsYWNrIGNoYXQ8L2E+OzwvbGk+CgkJPGxpPm9yIHdyaXRlIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IuPC9saT4KCTwvdWw+CgoKPC9kaXY+IDwhLS0gRW5kVGFiIC0tPjxkaXYgaWQ9ImdlbmVyYWxfYyI+Cgk8aDM+VGhhbmtzIGZvciB1c2luZyBTaW1wbGVQaWVNZ3IuPC9oMz4KCgk8cD5UaGlzIG1vZHVsZSBhbGxvd3MgZGlzcGxheWluZyB0aGUgY29udGVudCBmcm9tIFJTUyBmZWVkcyBpbiB5b3VyIHdlYiBwYWdlLjwvcD4KCTxiciAvPgoJPHA+PGI+Tm90ZTo8L2I+IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuPC9wPgoKCjwvZGl2PiA8IS0tIEVuZFRhYiAtLT48ZGl2IGlkPSJob3d0b3VzZV9jIj4KCTxoMz5Ib3cgZG8gSSB1c2UgaXQ8L2gzPgoJPHA+U2ltcGxlLCBqdXN0IGFkZCBpdCB0byB5b3VyIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZSBsaWtlIHRoaXM6CgkJPGNvZGU+e1NpbXBsZVBpZU1nciBmZWVkPSdodHRwczovL2Ntc2NhbmJlc2ltcGxlLm9yZy9mZWVkcy9ibG9nLnJzcyd9PC9jb2RlPgoJCTwvcD4KCgk8cD5UbyBhZ2dyZWdhdGUgbXVsdGlwbGUgUlNTIGZlZWRzOgoJCTxjb2RlPntTaW1wbGVQaWVNZ3IgZmVlZHM9J2h0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnL2ZlZWRzL2Jsb2cucnNzLCBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9mZWVkLnJzcyd9PC9jb2RlPgoJCTwvcD4KCgo8L2Rpdj4gPCEtLSBFbmRUYWIgLS0+PGRpdiBpZD0iY29weXJpZ2h0X2MiPgoJPGJyIC8+Cgk8cD5UaGlzIG1vZHVsZSBpcyBhIGZvcmsgb2YgdGhlIENHX1JTU19SZWFkZXIgbW9kdWxlLjxiciAvPgoJCUNvcHlyaWdodCAmY29weTsgMjAxNiAtIDIwMjEsIFJvYmVydCBDYW1wYmVsbCBbY2FsZ3V5MTAwMC5jb21dLjwvcD4KCgk8aDM+U2ltcGxlUGllTWdyPC9oMz4KCTxwPkNvcHlyaWdodCAmY29weTsgMjAyMSBhbmQgYmV5b25kLCBSb2xmIFRqYXNzZW5zIFtpbmZvIGF0IGNtc2NhbmJlc2ltcGxlIGRvdCBvcmddLiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+Cgk8YnIgLz4KCTxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8Yj48YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPkdOVSBQdWJsaWMgTGljZW5zZSB2MzwvYT48L2I+LjwvcD4KCTxwPjxiPkhvd2V2ZXI8L2I+LCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZSZ0cmFkZTsuPGJyIC8+CgkJWW91IG1heSBvbmx5IHVzZSB0aGlzIHNvZnR3YXJlIHdoZW4gdGhlcmUgaXMgYSBjbGVhciBhbmQgb2J2aW91cyBpbmRpY2F0aW9uIGluIHRoZSBhZG1pbiBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggPGI+Q01TIE1hZGUgU2ltcGxlJnRyYWRlOzwvYj4uPC9wPgoKPC9kaXY+IDwhLS0gRW5kVGFiIC0tPjwvZGl2PiA8IS0tIEVuZFRhYkNvbnRlbnQgLS0+Cgo8c2NyaXB0PgoJJCgiaW1nIikuZXJyb3IoZnVuY3Rpb24oKSB7IAoJCSQodGhpcykuYXR0cignc3JjJywgJy4uL2Fzc2V0cy9tb2R1bGVzL1NpbXBsZVBpZU1nci9pbWFnZXMvY21zLWNhbi1iZS1zaW1wbGUtb3JnLnBuZycpOwoJfSApOwo8L3NjcmlwdD48aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNNU01TRXh0ID0mZ3Q7IDEuMDwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGZlZWRzPSIiIC0gV2hlbiBhZ2dyZWdhdGluZyBtdWx0aXBsZSBSU1MgZmVlZCBVUkxzLiBJLmU6IHtTaW1wbGVQaWVNZ3IgZmVlZHM9J2h0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnL2ZlZWRzL2Jsb2cucnNzLCBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9mZWVkLnJzcyd9LjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZmVlZD0iIiAtIFRoaXMgaXMgeW91ciBmZWVkIHVybC4gSS5lOiB7U2ltcGxlUGllTWdyIGZlZWQ9J2h0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnL2ZlZWRzL2Jsb2cucnNzJ30uPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsaW1pdD0iMTUiIC0gRGVmYXVsdCBpcyAnMTUnLCBhbGwgaXRlbXMgdG8gYSBtYXhpbXVtIG9mIDE1IGFyZSBzaG93bi4gVXNlIGxpbWl0PSc1JyB0byBqdXN0IGluY2x1ZGUgNSBmZWVkIGl0ZW1zLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gY2FjaGVfdGltZW91dD0iMzYwMCIgLSBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdGhhdCB0aGUgZmVlZChzKSBzaG91bGQgYmUgY2FjaGVkIGZvciBiZWZvcmUgcmVmcmVzaGluZy4gRGVmYXVsdCBvbmUgaG91ci48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHRlbXBsYXRlPSIiIC0gU2V0IHlvdXIgb3duIGN1c3RvbSB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZS48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBSb2xmIFRqYXNzZW5zICZsdDtpbmZvIGF0IGNtc2NhbmJlc2ltcGxlIGRvdCBvcmcmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4wLjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+Cgk8bGk+PGI+VmVyc2lvbiAxLjA8L2I+IDI2IE1hcmNoIDIwMjE8YnIgLz4KCQktIEluaXRpYWwgUmVsZWFzZS48L2xpPgoJPGxpPjxiPlZlcnNpb24gMS4wLjE8L2I+IDI2IE1hcmNoIDIwMjE8YnIgLz4KCQktIE1pbm9yIGZpeCB0byBkZWZhdWx0IHRlbXBsYXRlIGNhbGwuPC9saT4KPC91bD48YnIgLz4=]]></about>
	<description><![CDATA[SimplePieMgr is an RSS to HTML parser.]]></description>
	<requires>
	  <requiredname>CMSMSExt</requiredname>
	  <requiredversion>1.0</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAQKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAA4AAAABAAAQAABvAG4ALgBkAGUAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAABIAYQBjAHQAaQBvAG4ALgBkAGUAZgBhAHUAbAB0AC4AcABoAHBJbG9jYmxvYgAAABAAAAJnAAAALv///////wAAAAAAAwBkAG8AY0lsb2NibG9iAAAAEAAAAEEAAAAu////////AAAAAAAGAGkAbQBhAGcAZQBzSWxvY2Jsb2IAAAAQAAAArwAAAC7///////8AAAAAAAoAaQBuAGQAZQB4AC4AaAB0AG0AbElsb2NibG9iAAAAEAAAAtUAAAAu////////AAAAAAAEAGwAYQBuAGdJbG9jYmxvYgAAABAAAAEdAAAALv///////wAAAAAAAwBsAGkAYklsb2NibG9iAAAAEAAAAYsAAAAu////////AAAAAAADAGwAaQBiYndzcGJsb2IAAADKYnBsaXN0MDDXAQIDBAUGBwgICAsIDQhdU2hvd1N0YXR1c0JhcltTaG93UGF0aGJhcltTaG93VG9vbGJhcltTaG93VGFiVmlld18QFENvbnRhaW5lclNob3dTaWRlYmFyXFdpbmRvd0JvdW5kc1tTaG93U2lkZWJhcgkJCQgJXxAZe3sxNTMsIC0zNn0sIHsxMjkxLCA4NDJ9fQkIFyUxPUlgbXl6e3x9fpoAAAAAAAABAQAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAmwAAAAMAbABpAGJ2U3JubG9uZwAAAAEAAAASAG0AZQB0AGgAbwBkAC4AaQBuAHMAdABhAGwAbAAuAHAAaABwSWxvY2Jsb2IAAAAQAAADQwAAAC7///////8AAAAAABQAbQBlAHQAaABvAGQALgB1AG4AaQBuAHMAdABhAGwAbAAuAHAAaABwSWxvY2Jsb2IAAAAQAAADsQAAAC7///////8AAAAAABIAbQBlAHQAaABvAGQALgB1AHAAZwByAGEAZABlAC4AcABoAHBJbG9jYmxvYgAAABAAAABBAAAAnv///////wAAAAAADgBtAG8AZAB1AGwAZQBpAG4AZgBvAC4AaQBuAGlJbG9jYmxvYgAAABAAAACvAAAAnv///////wAAAAAAFwBTAGkAbQBwAGwAZQBQAGkAZQBNAGcAcgAuAG0AbwBkAHUAbABlAC4AcABoAHBJbG9jYmxvYgAAABAAAAEdAAAAnv///////wAAAAAACQB0AGUAbQBwAGwAYQB0AGUAc0lsb2NibG9iAAAAEAAAAfkAAAAu////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAECgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAAAAAAAAQAAAIAAAAABAAABAAAAAAEAAAIAAAAAAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBTaW1wbGVQaWVNZ3IKIyBBdXRob3I6IFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zaW1wbGVwaWVtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dfUlNTX1JlYWRlciBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykgKSBleGl0OwoKJGZlZWQgPSAnJzsKJGZlZWRzID0gJyc7CiRzdGFydCA9IDA7CiRwYWdlID0gMTsKJGlubGluZSA9IDA7CiRpc19jYWNoZSA9IGZhbHNlOwoKaWYoIGlzc2V0KCRwYXJhbXNbJ2ZlZWQnXSkgKSB7CiAgICAkZmVlZCA9ICRwYXJhbXNbJ2ZlZWQnXTsKICAgICR1cmwgPSAkZmVlZDsKfSBlbHNlaWYgKCBpc3NldCgkcGFyYW1zWydmZWVkcyddKSApIHsKICAgICRmZWVkcyA9ICRwYXJhbXNbJ2ZlZWRzJ107CiAgICAkdXJsID0gZXhwbG9kZSgnLCcsICgkZmVlZHMpKTsKICAgIGZvcmVhY2goICR1cmwgYXMgJiRvbmUgKSB7CiAgICAgICAgJG9uZSA9IHRyaW0oJG9uZSk7CiAgICB9Cn0gZWxzZSB7CiAgICBlY2hvICR0aGlzLT5MYW5nKCdmcm9udF9wYXJhbV9mZWVkJyk7CiAgICByZXR1cm47Cn0KCi8vIHByZWZlcmVuY2VzCiRsaW1pdCA9IFx4dF9wYXJhbTo6Z2V0X2ludCgkcGFyYW1zLCdsaW1pdCcsMTUpOwokY2FjaGVfbGlmZXRpbWUgPSBceHRfcGFyYW06OmdldF9pbnQoJHBhcmFtcywnY2FjaGVfbGlmZXRpbWUnLDM2MDApOwokaW5saW5lID0gXHh0X3BhcmFtOjpnZXRfYm9vbCgkcGFyYW1zLCdpbmxpbmUnKTsKCmlmICgkY2FjaGVfbGlmZXRpbWUpICRpc19jYWNoZSA9IHRydWU7CgovLyBncmFiIHRoZSBmZWVkCiRmZWVkID0gbmV3IFNpbXBsZVBpZSgpOwokZmVlZC0+c2V0X2ZlZWRfdXJsKCR1cmwpOwokZmVlZC0+c2V0X2NhY2hlX2xvY2F0aW9uKFRNUF9DQUNIRV9MT0NBVElPTik7CiRmZWVkLT5lbmFibGVfY2FjaGUoJGlzX2NhY2hlKTsKJGZlZWQtPnNldF9jYWNoZV9kdXJhdGlvbigkY2FjaGVfbGlmZXRpbWUpOwoKLy8gaW5pdCB0aGUgcHJvY2VzcwokZmVlZC0+aW5pdCgpOwokZmVlZC0+aGFuZGxlX2NvbnRlbnRfdHlwZSgpOwoKJGNvdW50ID0gJGZlZWQtPmdldF9pdGVtX3F1YW50aXR5KCk7CiRwYWdlID0gXHh0X3BhcmFtOjpnZXRfaW50KCRwYXJhbXMsJ3BhZ2UnLDEpOwokc3RhcnRlbGVtZW50ID0gKCRwYWdlIC0gMSkgKiAkbGltaXQ7CgovLyBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwYWdlcwokbnBhZ2VzID0gaW50dmFsKCRjb3VudCAvICRsaW1pdCk7IC8vIHRvZG86IHVzZSBjZWlsCmlmICgkY291bnQgJSAkbGltaXQgIT0gMCkgJG5wYWdlcysrOwoKJHRlbXBsYXRlID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3RlbXBsYXRlJyk7CmlmKCAhJHRlbXBsYXRlICkgewogICAgJHRwbCA9IFxDbXNMYXlvdXRUZW1wbGF0ZTo6bG9hZF9kZmx0X2J5X3R5cGUoJ1NpbXBsZVBpZU1ncjo6UlNTX0ZlZWQnKTsKICAgIGlmKCAhaXNfb2JqZWN0KCR0cGwpICkgewogICAgICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ05vIGRlZmF1bHQgUlNTIGZlZWQgdGVtcGxhdGUgZm91bmQnKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAkdGVtcGxhdGUgPSAkdHBsLT5nZXRfbmFtZSgpOwp9CgokdHBsID0gJHRoaXMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCR0ZW1wbGF0ZSk7CiR0cGwtPmFzc2lnbigncGFnZWNvdW50JywgJG5wYWdlcyk7CiR0cGwtPmFzc2lnbigncGFnZW51bWJlcicsICRwYWdlKTsKCmlmICgkcGFnZSA9PSAxKSB7CiAgICAkdHBsLT5hc3NpZ24oJ2ZpcnN0bGluaycsICR0aGlzLT5MYW5nKCdmaXJzdHBhZ2UnKSk7CiAgICAkdHBsLT5hc3NpZ24oJ3ByZXZsaW5rJywgJHRoaXMtPkxhbmcoJ3ByZXZwYWdlJykpOwp9IGVsc2UgewogICAgJHBhcm1zID0gJHBhcmFtczsKICAgICRwYXJtc1sncGFnZSddID0gMTsKICAgICR0cGwtPmFzc2lnbignZmlyc3R1cmwnLCAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwkcGFybXMsJGlubGluZSkpOwogICAgJHBhcm1zWydwYWdlJ10gPSAkcGFnZSAtIDE7CiAgICAkdHBsLT5hc3NpZ24oJ3ByZXZ1cmwnLCAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwkcGFybXMsJGlubGluZSkpOwp9CgppZiAoJHBhZ2UgPT0gJG5wYWdlcykgewogICAgJHRwbC0+YXNzaWduKCdsYXN0bGluaycsICR0aGlzLT5MYW5nKCdsYXN0cGFnZScpKTsKICAgICR0cGwtPmFzc2lnbignbmV4dGxpbmsnLCAkdGhpcy0+TGFuZygnbmV4dHBhZ2UnKSk7Cn0gZWxzZSB7CiAgICAkcGFybXMgPSAkcGFyYW1zOwogICAgJHBhcm1zWydwYWdlJ10gPSAkbnBhZ2VzOwogICAgJHRwbC0+YXNzaWduKCdsYXN0dXJsJywgJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJHBhcm1zLCRpbmxpbmUpKTsKICAgICRwYXJtc1sncGFnZSddID0gJHBhZ2UgKyAxOwogICAgJHRwbC0+YXNzaWduKCduZXh0dXJsJywgJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJHBhcm1zLCRpbmxpbmUpKTsKfQoKJGZlZWRzID0gJGZlZWQtPmdldF9pdGVtcygkc3RhcnRlbGVtZW50LCAkbGltaXQpOwoKJHRwbC0+YXNzaWduKCdmZWVkcycsICRmZWVkcyk7CiR0cGwtPmRpc3BsYXkoKTsKCiMKIyBFT0YKIw==]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/authors</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhpcyBtb2R1bGUgaGFzIGhhZCBtdWx0aXBsZSBjb250cmlidXRpbmcgYXV0aG9yczoKCi0gVGhpcyBtb2R1bGUgdXNlcyB0aGUgU2ltcGxlUGllIFBIUCBsaWJyYXJ5IGF0OiBodHRwOi8vc2ltcGxlcGllLm9yZwogIENvcHlyaWdodCAoYykgMjAwNC0yMDIxLCBSeWFuIFBhcm1hbiwgR2VvZmZyZXkgU25lZGRvbiwgUnlhbiBNY0N1ZSBhbmQgY29udHJpYnV0b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoKLSBDTVNTaW1wbGVQaWUgYnkgTnVubyBDb3N0YSAoYykgMjAwOQoKLSBSU1NTaW1wbGVQaWUgYnkgWmRlbm8gS3V6bWFueSBba3V6bWFueS5iaXpdIChjKSAyMDEyCgotIENHX1JTU19SZWFkZXIgYnkgUm9iZXJ0IENhbXBiZWxsIFtjYWxndXkxMDAwLmNvbV0gKGMpIDIwMTYKCi0gU2ltcGxlUGllTWdyIGJ5IFJvbGYgVGphc3NlbnMgW2Ntc2NhbmJlc2ltcGxlLm9yZ10gKGMpIDIwMjE=]]></data>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCgogQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgpmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCnNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCkdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQp0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAppZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAppbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCgogIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgpUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQpkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCgogIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CnlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCnNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKcmlnaHRzLgoKICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCigyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCmRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCgogIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCnRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCnNvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQp3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwp0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAphdXRob3JzJyByZXB1dGF0aW9ucy4KCiAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQpwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCnByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQpwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgoKICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAptb2RpZmljYXRpb24gZm9sbG93LgoKICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KCiAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucwphIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAp1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCnJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgptZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3Ogp0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAplaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgpsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCnRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgoKQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgpydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCmlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlClByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCldoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgoKICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQpub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CmFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KCllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAp5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgoKICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCmFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgoKICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgogICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CiAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAogICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgoKICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQogICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCiAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCiAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwogICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQoKVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAphbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCm9uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQplbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCgpUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgpjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgoKSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQp3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KCiAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCnVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgpTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CgogICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQogICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCiAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKCiAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQogICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCgogICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCiAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQogICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAogICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCgpUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCm1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCmNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CmFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwpjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCnNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQphbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQpmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQpvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAppdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCgpJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCmFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCmRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdApjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgoKICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdApvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgpIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaApwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCgogIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdApzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgpkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQptb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwp0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KCiAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQpQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCnRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCnJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KdGhpcyBMaWNlbnNlLgoKICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CmluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCmNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdApkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudApsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgp0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCnJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCgpJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwphcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgpjaXJjdW1zdGFuY2VzLgoKSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQpwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQpzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcwppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAp0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdApzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCnRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAppbXBvc2UgdGhhdCBjaG9pY2UuCgpUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCgogIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQpvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCm1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwp0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCmNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwp0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KCiAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCkVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0Kc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwplaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCnRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4KCiAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQpwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCnRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQpTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZApvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWQoKICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCk9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUwpUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFClBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLApSRVBBSVIgT1IgQ09SUkVDVElPTi4KCiAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SClJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCklOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORwpPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEClRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQpZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgpQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgoKICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgogICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKCiAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CmZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgoKICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAp0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CmNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CnRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgoKICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CiAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwogICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KCklmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKCiAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KClRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQpwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CmJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQptb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgoKWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgoKICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCiAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCgogIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQogIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCgpUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCmxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgo=]]></data>
	</file>
	<file>
	  <filename>/doc/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/cms-can-be-simple-org.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAtEAAABHCAYAAADBaRtwAAAACXBIWXMAAAsTAAALEwEAmpwYAAA4JWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMwNjcgNzkuMTU3NzQ3LCAyMDE1LzAzLzMwLTIzOjQwOjQyICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMDUtMDdUMTM6NDU6NDErMDI6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNy0wNS0wN1QxNDo1NTowOCswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTctMDUtMDdUMTQ6NTU6MDgrMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NmM4NTczM2UtZTJiMS01MDQ1LTgxNjktOTZhYzZkMjY3N2YwPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjZjODU3MzNlLWUyYjEtNTA0NS04MTY5LTk2YWM2ZDI2NzdmMDwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjZjODU3MzNlLWUyYjEtNTA0NS04MTY5LTk2YWM2ZDI2NzdmMDwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo2Yzg1NzMzZS1lMmIxLTUwNDUtODE2OS05NmFjNmQyNjc3ZjA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMDUtMDdUMTM6NDU6NDErMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NzIxPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjcxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5H6g/qAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAABkqSURBVHja7J1BbttI04bfGNl/HGhLYGiA+1FOEPoEpk9g6QCSzRPYPoFk6QCST2DlBFZOEM5egDmAtsTwP8H8C5YUxpGtarKbbJH1AEYyE5oSm9XVb3VXV3+CQUbjqA/Aof/06AcA1vRnNp9NYgjWUHhnDoA+/e8YQNaG95W6/lGb7G03YpOC0B761M/7H1wTA0joT0EQBBafNIovD0AA4Cs5q77Cr8f08x3Aaj6bZPJqahHMDr2zS8V3ti68K2sHndT1tdlkb7sRmxSE0xHNIfX7oMTvrwF8oz91+LdA4XNN3PcQWQMBQ1Dx91Xax1H09yrE1H4m8fBzgucjEvqpG+73qxMt74V0A+fZ4t52k1US0STCBgCuNRvsGsDTfDZZlvhO9wDuSn7uxXw2WZt+06Nx9FrSANfz2eRCU8BzRwONU/F2CYBHAEuV4Cd1/XsA6G0395qFs1Gb7G03yzq9ArXTMXs+7203iSXf5bc+1dtu1g1+n3Vvu7louA1U7SwG8Lfu4C11/f9sGOl6280nA7fd9fsbzYN7TP5tVWGA5rb7J0P3fc9vn9csul4r3kOlfQIAL4afaSdgv5OdrDWKa66feaBr68a0Hyyl30oEolV8/EVvu1mflRVho3G0oE4xMRDxBQAWo3H0OhpHgxpfwnUNArrfVAQ3GkdO4b0NNAjonXOcAHilAKYRUtf3Utc3bpOp67+mrj+o6ZkcEgXHGMBeJhBU7ewWwALAv6nrP6euH0izfMhtod/r9q19ehevDYkVk6I2rPHzblpodx711zsAzwD+pT8H0iW7g5KIJhF2r1mEHTPSnZiuYyAJaXa9dc5kNI7CwnszgQPgbjSOflCgUJd4dihyrNUmSUybtsmQ+Tw2D1D93aqDUNoGXlLXf6FlRuFXgfuDxLPpfu+QWPoBc2kCdXNdsx13pb8uDI+1wimKaBKxP9DMFL4H4GU0jkzPajk1dPbanQnN5j/XMNDsB7Y6VhBIxDZqk6nrm7RJ7nM5dc2Olw0cRQBWJgDwgzbGCrmfeWlA0O6EexsEEjdI1/E5Xev/Honpl5raWLBZRNPs84sFHeF2NI5eDM8WXxoUs2HdHYrE7KIJ4WRYQFtjkzRL6Gh+vkDx2WyejXYgaR262vFFhPReQDcpTr62pC3rCAauO2yrAfJZaQl+uyqiKYf2zjKjNCkKQ9p4d/LOhFYPmhDQMfIkf1MCugs2qfp8fctzZ8PU9UNxudqEtNPR5/csENBLAMOWtOdNDe8rlD4rM9KdFNEkoHVFqhn0lQwKDacLaO/0NHtetzMpI+xiGiQeCj9ThfeWIa9ykhkU0FbapK6UikJpPquDtBJMOiz+dA/Ki44++6KkGFmTLxtSgH8B4Ir+36qjAnonck0G3wPprvs++yzN0D4+GxLQGTmm78jLsiXviMoA+bJYCP7SdQYgKlP+TlGMTG0X5kdE+z3U0gGWAB4OvavCPT2auRi8M5DZLKB/sclDJeFI4JW2SY3l78rOsg9S13+oo9xdhQH7DkDUcr+aKQRmHsqlJIWp6wemygdaykBR8GWg8pt4v5buqiByQrJPryMCujjerQ3e23ZUnr1KwBGQDS8htFtEkwArI1YSEmJHjYSE1op+IsoXvjlipAmAqxoO+OiPxlFf8+fU7UyuFd4Zq01JYEejcfSAfEYoPCCgjbwbyoEubZMcgUs1efc2SekHLJvUdcohCfkqAdcAdpfiuk1d/6nlp0LGqrWpydYuFW3chPh50F27XSMqqQcx8plmbkCZkbhZIi+Zd/dmoqCtAnrnMyLoP0AkwGlsKFRNPdz56MsSvvquYyK6qTrWtXF2QEAHKDcT9jCfTc7LzhDPZ5MVHSTyXmdeA/hS4wl52kRv4TTHWlCoRV1K+M5nk2w+m1y9GVSGBgV0aZvsbTfnZWeIe9vNisTQhzapWRAOUC137hTqsXY1FeGYrQ2RH4DBtaegQ03UB39zVkzCKCn5WVMAXwrvoc0Cuuh3rB1DLWMXcF0p9ldAcsTbLaIpxUJ1gEtI3GqJNuazyZQcYFG0TOezic40Ac59dBp63Z2G+3nRR+kbjHe1G1yG89lkZUhAl7ZJXTNqve3moE32tpsLA8eBVxXBtpe7A/JNkLfifg/aWnLA1t4dkDuUY64SMOiYVd29h4cTF9Bc/647+HaYwjw+cbtMKOBSGf++QminiEa+jOUp/H4MA7PDdL/dQDKczya6cyg5Bu9RikldwkinCP1TQQRXfVdLw/nppWxSd7oA3W9vk73tRnteL4lfj/F8dQ+IJriTTYbv2lqGPJeXFZB0pFkchf6/1vSZGU5/KfqJG5BptiVuIP/YEvscKgRuXemz3RLRNAutmnNmbBPZfDaJ57PJH4YE2j9MR1u5ZjQztSIB8LfG5+OIzrXtxqlw7PUvNmlgdngvpHvbzR8aNxC+hbP8ecVx0g2Xu+PYlgNJ6zjp/lkzX6XdSsP1VzqDb44vy9Ce/GCVZxER3UYRjXzGz1EwmKEpAV1jhH4MHceAc5zJo5jiQZRt0pSAriFg6OP4kvWSlvs5zrrJ2Wju8ndoeW3rJomlCUrxf9IEpceXEHpqGfeZQnHZsnb+xrzOEZNsp4hWGXQfatzgZ4oVji+/OKiezzyw1Jl4J/COlGzyxCs+cJ71m0oA2NRR2yT0H5iXLySto9JAm0lT/YLkm/5OAv7qUKjh87h+WyaPhHaIaDq4hOu017T576QplNg7RukdxsxjvlcNzeh7Bk9mrAzlB7Ntkjb/nSQkIo8FW0lvu1mRSF2Dt2GoydnoKfM7eshXHIRf6TMDlrgj7ZEwrwsgM32HeGJeV3ljM1OIr1G+eoog2CWioZb7+9Ci5+c4lqCC2LzU9B1U+c68bmLxu+mSTd6WsBOO3QyamuWltBpuWscdpbMIava/7lB7/KNwreTa/84SvFWLPqrl7IbMIOaphW3siZl1V0SHzOvj+WzSGsdNz5IwHYMSlEs9OHJZZqg0HDfCD+lkShth22QLTm3jzP4sj/z3IRw0WJOU3gvXvicQAOzz4weMS5861CwqfTwUIc3yIVX80Xt0bUOh6rMDst+hXSKaDlfh0kanzXmmMk6FI15MORKVAWcwGkcvNqV2KG42O2mbZKat/HZMOf035z3fNfyI3Jq9wQnUt65LQL9wAmWDVWJsFdGZwvUDAK/o1oE0xzC9wdBjtncbc6FDBVsTEd0mEQ21pZtVR6Nzj0rVqdBUKsfueG4VIR0AeB2No2eNtbGr0CWbvKlgJxz78ZqsgKG4yXDS1U2Gqet7dLT9D6aAGXawmVT7ukcBySvU6823Ee644KDcChZ3sqltwV8AtZWP7xBaw2cAf3E7YJXT7WxlPpsko3G0ZkSR19wIkmZ1jzmh2HCFkweoz8KEyFM8Mhqwvpk6ifAIbJt8O0N7YsIpYAQM2QczjivkaRDHRNcNGsyf7W0309T1rxnP6tDznLpAdBiBS5+e93/UT1UCx6HBFKY/DQZdWcWNkA8oN0vqkV1NyId/o74To3s8MceF6xJid8AMhNqiIzzkK30Dxd9bdcje/kQ9q0GNjW+fFaLzdYtfNMexDJAvTXPFKOczTQYH69E4WpWcUXDoeQcNCequ2CQnh271gTjNUtdfMZx4mLq+13DAEYGXpjBIXf/pxPPc+8xnVRahACLDaRyDEqJAZaC7qPD7CQnpScV30yfxs/dtHRI2S2bgHZAfThTshhPcnHL6nYefJzt+LTm2TtGtspQm/UmRT0094JnCtf+0+EWvGIbtKKQ6cMTRsobnGqL6bMtOUD+PxtG/o3G0KJHaYoqTtUmq4cxxLo8V/31Ho0eBkyieMi+XTWHvCNCO5UG/J0J0tcHetwH4l+wu7EAbcttPxWdw0hcTS4OV/5g/rxQcT0raSYZ2VTcTSEQHCrMArUShZvRRR0EC85jIrKU2NH3GUGPkuxt0fozG0Q+qL26CLtgkZ4CKjy1/079z2mFgQb7xA9MWd/nBwk/xfNGhmtCcyQHdwURRUL8CuEd7601zA2+uf/dgwerrCXAFORyplSKaS9LytuAc2TlgHAPOmYWuzZlQ3vU59Of/9QEsqLJHv6F3dpI2yTxcRWWw41znoOFZNqodzU2JumvqxEULuZQ62geFdGTo3h7ydI/dhsS2kYC/wZDjp7hie9lxe11Lt+22iG41lO/LEWVhxX9P6t6sN59Nsvls8gX8mUAVAuQz0wOxIjYheLNcXDvhXtd0uTtQOgJ3MJG0jrx/3QL4kbr+q5QB/IUpgC8GxYmDfOn+Be2r7MGdyLnWdM0S3TyhMIOZlRNBRLSVcMTIu8vwlDPtafgMU2L6ngadqQExvbD44Bbb4IjZJc3ccoRpwrSrRsvdFeDOIErt6DfvD8Aidf2XrpYCPECMfLPihUGhEiAvPdhvUbstmWNAcGRM44x5KqK9TawN26VwYiK634H24CyL9z84mORS02eYFNLJfDaJkKd46F5iGozG0X2Nj3NyNkki1sSg84153U3TbUC5vVI7uqKokxSP3wTLEMAfFKTFmu/vIJ+RbpuQruozuBsK1x2yxZhs8QJysErr+UzGHTCdSKuhmtExw1EOkG882UO50uGxzmVLrW3adLgEsCzUtebU8j3G3WgcrSseD99mm+TMQieqJd56280ydX1O6Sobyt0B+WrINSOgcKjNohN6x5ni4OmU6HcegOfU9b9wVyyYJDC37B7X1PZT+tn55Evo2Q+wE9LnaMcGsUfwcr4H7/Q/B3r3dpwyCfLVwCcRzrX5E2tENJe/OvLSH3E8F/P6rYgGL8/VSmdCwn4KYKpJUC9ooDHNSdkkbZTjBAdllz5XzEHtDg0faEI1riPk1RCOcZu6/rcTqh0d97abixL20Sf7uAFvtcKjvnal8bs/9bab+5b48v1EQcFHX6L8sdY74ai7zZsWfiHjmUP8njI2YH7OskX6YBcgZwD+pr/H6Ga+N8ufHNBKreJMIWryOvLSV5y2OFCR4lLTvRsX1PPZZEobEc9RbjOiV3GjYVttkruxr+ygww3SQhtSJHrbzUqhT0zQcnrbTdzbbqa97WaXapUx32UAgevbdykfVxX6WYj2pHVU2WDISQ1bwv5Z+08KP38gT9O4InG4EgHdbT5TNMWhPxpHXhuP/n4jIrPROFoyouwbcsjcVI5lHbWhdQtqAPejcTQlAXir8OuXFQYptk1akppwFBKtIePSBHlN57IfleH4LJtD9j21oGki5LOvDuNd37dolvSYoF6mrh8j39DGEThrGc6UBfUKP09ADBV/f+//W9AOCWNCIsSvJxj2IRsKBQGfoZa/E6AbO02/MUR0WHCiA+Y9TzawABCNxtE35MvvDuPXwgof2UabHDDbzUM9pehubBDRve0mSV3/kfnMN6nrL08haNLUNnHq+pyAPmyJoGuCBPms4gBqJRWDFrXBE7P/DfBzaf6G2bYS3Amt5owO48iY1193oVGYNaOLx4Afa5faa0Mbape1ymA9GkelBhqq3tA2m7yx7Pt4qeuHNnwRml3mBE4Oulc7mnWQjlTqqMxSMRDx0J7N9txJiOtCP+T4DjniWmi/iKY/uQIvaPB0urrhtMk1bcTra7jXKQUYS0vaH8hrCVttk1Tr2BNh/yEqtaNDdASFo74dCDrEpIpva8tYmDD9rUfiOWTYW9amcU8QjololVSDu460DWcGKGS2R9tK/Hyz7DNst0lbZ8sDW47WpsobXAEjtaPbK+hOwe+3EZUNhpzge4V2lAEUuhlMXzB+4r2IVjjyGgDCssv0pwRtqosZlw6O/Pu6hZsxjT8PVW5g26StFQoKZctsxaYAJGIOvF6HgnkuElToIe7oc3P9bcgM2B7FlIRTpLfdJL3tZs34yfYiWjESBfIjnrvgtJ8suUdXUbJJS2cnbyxv49CWdiOnxE3ruEUHatcrrBTEEAQ7xqpY7FHoCkURPQV/+cUD75CESozG0X3Nx0i/ZVnx9zNYkBdmIOCpS3RZZ5Op69+nrn/PvNYB/0CCprDqO/a2myX4O/rDDvjoQMHXCPX6tra1+VLTfWQWWugM+xMLqT7yrmYmy7mPxtFiPpsYKa1Eh3Xc0d8vAVzVnRZBbbKqMFivmq4NTRtBX0bj6KriUdxFLpnXVZqNoFPtlGwydf1Fb7sxYpO0QfCO/n4J4OpIubVb5q3XAL4b+MpfmSLMinJ3BSLw6iO3GgrCuGkrSYeaxin4BN19XcXXxy1r1wS8EwyPBRYrkVZC50Q0icbpaBypHPc8oOoUVzrFIs0+FwePPoAfo3EUzWeTZc1t9FTBqTSaykGByIQGnefROLqgkoZV7umAN3OZ6LCJ3nYzTV1fySZpCfxql7OkSdActMnU9SOaPX1PnHIYmqh9TO3wyrjUS10/pDz0xqH6yA/ocN4zCegX8Kq6JF2pnU2+7OWNP9AppLk2t25p+1YZ74DTOKFQELjjZ4g8bdCjoPlvAKuitjg7NKArflYA4LVQM7mKQPNG4+jlHUfmIM/Ffq4zH5s2XZZxConGmd+yAnqBn8uTDgUitxVvzT1sRacgK2WTOkqhpa7vpa7/oU2mrv/8Nq+YZq057bQ2JYDovlwbtC13e4qOHqdLm2RfFALHVUeapo98haLYLgNqKx1jwgL8UpTfWtrGq4r9TlI5hDb44AnyCagJ+ZgA+cry4q22+HxANMajcRSBv4S+ExPPo3G0BvCoerAIzWYPaCA/5gxD5KkkVzWK1CXUjrzeRfRNC+hDTCg9ZqiSHkOByzP4OZranp9mJkvZZOr6awCPqrOsFIUq2WTq+ldUqk1FlJq2kyfmOwtsOkKdUnki1JDnbonT7tN7Ull1MSFc/qyp0o3q7Hn/A7Ec0ID3CLV9FEVfsRssVcRmW+GeYPjbhEBXA1+hVb54ccQX7LTFsLfdLD8fuoLSOv6C+oajgARuRk7mOw7MyJIg69PPV6gvHznI83zPa8qTfiohopcNCehbhtgMkK8erAA8fRT0KAY4e2daNW3kgKiapq5f2iZT1//FJgtid9dxtNhk6vrnyGezOEIo+yAVRFe7LSmq5ry7O1h0fHRvu1lREBTgtOjT6gVXHDoVPkv3MegD1LPR9AE/j5DmfKcFo//dkZ9aks+OGb8T0u95ir69zWJxWVJESyWq+rmD2bS3C1RLXTL9/Q4FchcVBLSK/1ukrr/+/N6/zmeT4WgcoaRDdYrOmO6jm2FdGw1pdj4Gf4aokdrQo3G0UHxfIfK638VZhH/o3/5SEINvMfLCe9vNMHV9LTZJ99Fuk73tJkldn+s06gq0lswgMKQc78yiQWKIfAnfweng1CT8M1N9zSLuFQdhh2z9lvxZjDyPscj/yK8F0uYHSaC+wTBDQxNHgqAR1bTGm89HxGMVIW10YG1og2Ff4dpTQ9eg/6B7FlqjkDZqkzTr6yl8t7ryBx+ZInonQO5taVQKSh4hh6scEi0XlgU8Jris8Lsefh5VrTOoyzpgX6obDEVAC22gr3r92bErqITdtOMCWsVJZGgoX47eVZPObD2fTYwLMCphZ5VNFtIyuJFsXFf+MX0O1yatO6K8t93cQ3ItDwnouAPPuj9e1wKm6M4mzpVin5MNhUInOeNcNJ9NIgBXDUfgGYCLhgQ0qFwbx4E2Whu6waAnJhupS1hZY5M7Aa14uErdgw53dcSjvDDbGELY9bOuCOh9H7NAvC7R/jSOsj5DVXALgq2o2vH3M+6VtPnsHM3MdK4AnDdZMk7BqTQekTcQ9Czns8mXuoMHqrjRqE2+2aAYgpe7yw3IdLcV10HYOBu9RreXjBPkKx5fOiSgi/3likRs1sBnDzsaxHH7m2woFLoWOO77yJnK1fPZJKOZzrqES4x89vmq6ZP/CoHER98jMZkPXOK7niPfBW+q7RLkB+00NsD0tpuM0jtqtcnednPoMBdu3u6qoVxWroMIqOSabTQhoppmReL53HQllxNgWoNPK7IG8KXDwVvCCPY51wjCSUCpg1wNN+xtN8lZmQ+azyZJQUxPoX8pZ0Xi+YsFs8+Hvtt7WJUXRkHPPb2nSON7SpDnpp+r1gQ3aPxJQUwbs0maCfzNJqn4use8V1N2oiIGbDt8BRR4PLTYh8ck3B6Qz7z+QcFa18VzkQz5xlfdPu23vk4/Scfb+6nivwvCqXFxZKzMUNgH9UnXp47GUR/5cvZXqNc+TWjw+I6Gc4rbDr2nAPmud5X3tKZB/smW2fZj0GyqFpvsQBUEQThVij4tKCnM933dgHDmfqe1gfsmGp4nOBL4ZRa2jwOFkrQW2rQHtdrlJgP7zOLvd6gva9Enb/TD7t7fkdfm37fJJ1NPUjhQ5VCD71+MhTPNXRPVxXcTHHhH2amIZkanYNnkoZlmQRBOSlQ7DHG21iQyBUEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQBEEQ7OVT6vr/STMIgiAIgiAIApv1mbSBIAiCIAiCIKghIloQBEEQBEEQREQLgiAIgiAIgohoQRAEQRAEQRARLQiCIAiCIAgiogVBEARBEAShQ/z/AHrjb9oIFu5qAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></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[PD9waHAKCi8vIEYKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NpbXBsZVBpZU1ncic7CiRsYW5nWydmcm9udF9wYXJhbV9mZWVkJ10gPSAnUGFyYW1ldGVyICJmZWVkIiBvciAiZmVlZHMiIGlzIG1pc3NpbmchJzsKCi8vIEgKJGxhbmdbJ2hlbHBfY2FjaGVfdGltZW91dCddID0gJ1RoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IHRoZSBmZWVkKHMpIHNob3VsZCBiZSBjYWNoZWQgZm9yIGJlZm9yZSByZWZyZXNoaW5nLiBEZWZhdWx0IG9uZSBob3VyLic7CiRsYW5nWydoZWxwX2ZlZWQnXSA9ICJUaGlzIGlzIHlvdXIgZmVlZCB1cmwuIEkuZToge1NpbXBsZVBpZU1nciBmZWVkPSdodHRwczovL2Ntc2NhbmJlc2ltcGxlLm9yZy9mZWVkcy9ibG9nLnJzcyd9LiI7CiRsYW5nWydoZWxwX2ZlZWRzJ10gPSAiV2hlbiBhZ2dyZWdhdGluZyBtdWx0aXBsZSBSU1MgZmVlZCBVUkxzLiBJLmU6IHtTaW1wbGVQaWVNZ3IgZmVlZHM9J2h0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnL2ZlZWRzL2Jsb2cucnNzLCBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9mZWVkLnJzcyd9LiI7CiRsYW5nWydoZWxwX2xpbWl0J10gPSAiRGVmYXVsdCBpcyAnMTUnLCBhbGwgaXRlbXMgdG8gYSBtYXhpbXVtIG9mIDE1IGFyZSBzaG93bi4gVXNlIGxpbWl0PSc1JyB0byBqdXN0IGluY2x1ZGUgNSBmZWVkIGl0ZW1zLiI7CiRsYW5nWydoZWxwX3RlbXBsYXRlJ10gPSAnU2V0IHlvdXIgb3duIGN1c3RvbSB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZS4nOwoKLy8gSQokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLiBUaGUgbW9kdWxlIGRvZXMgbm90IGhhdmUgYW4gQWRtaW4gcGFnZS4gQ2hlY2sgaGVscCB0ZXh0IGZvciBtb3JlIGluZm9ybWF0aW9uLic7CgovLyBNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1NpbXBsZVBpZU1nciBpcyBhbiBSU1MgdG8gSFRNTCBwYXJzZXIuJzsKCi8vIFAKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnU2ltcGxlUGllTWdyIGlzIGluc3RhbGxlZC4gVGhlIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGFuIEFkbWluIHBhZ2UsIGNoZWNrIGhlbHAgdGV4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1RoZSBTaW1wbGVQaWVNZ3IgbW9kdWxlIGhhcyBiZWVuIHVuaW5zdGFsbGVkISc7CgovLyBSCiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGUgU2ltcGxlUGllTWdyIG1vZHVsZT8nOwoKLy8gVAokbGFuZ1sndHlwZV9TaW1wbGVQaWVNZ3InXSA9ICdTaW1wbGVQaWVNZ3InOwokbGFuZ1sndHlwZV9SU1NfRmVlZCddID0gJ1JTUyBGZWVkIGFzIEhUTUwnOwoKLy8gVQokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdUaGUgU2ltcGxlUGllTWdyIG1vZHVsZSBpcyB1bmluc3RhbGxlZC4nOwoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAQAAB4AC4AaAB0AG0AbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAGkAbgBkAGUAeAAuAGgAdABtAGxJbG9jYmxvYgAAABAAAACvAAAALv///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAABAAAAwAAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAAIAAAAGAAAAAAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lib/autoloader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovLyBhdXRvbG9hZGVyCnNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheShuZXcgU2ltcGxlUGllX0F1dG9sb2FkZXIoKSwgJ2F1dG9sb2FkJykpOwoKaWYgKCFjbGFzc19leGlzdHMoJ1NpbXBsZVBpZScpKQp7Cgl0cmlnZ2VyX2Vycm9yKCdBdXRvbG9hZGVyIG5vdCByZWdpc3RlcmVkIHByb3Blcmx5JywgRV9VU0VSX0VSUk9SKTsKfQoKLyoqCiAqIEF1dG9sb2FkZXIgY2xhc3MKICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIEFQSQogKi8KY2xhc3MgU2ltcGxlUGllX0F1dG9sb2FkZXIKewoJLyoqCgkgKiBDb25zdHJ1Y3RvcgoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQoJewoJCSR0aGlzLT5wYXRoID0gZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2xpYnJhcnknOwoJfQoKCS8qKgoJICogQXV0b2xvYWRlcgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byBhdHRlbXB0IHRvIGxvYWQuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZCgkY2xhc3MpCgl7CgkJLy8gT25seSBsb2FkIHRoZSBjbGFzcyBpZiBpdCBzdGFydHMgd2l0aCAiU2ltcGxlUGllIgoJCWlmIChzdHJwb3MoJGNsYXNzLCAnU2ltcGxlUGllJykgIT09IDApCgkJewoJCQlyZXR1cm47CgkJfQoKCQkkZmlsZW5hbWUgPSAkdGhpcy0+cGF0aCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzdHJfcmVwbGFjZSgnXycsIERJUkVDVE9SWV9TRVBBUkFUT1IsICRjbGFzcykgLiAnLnBocCc7CgkJaW5jbHVkZSAkZmlsZW5hbWU7Cgl9Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/library/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE3LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHZlcnNpb24gMS41LjYKICogQGNvcHlyaWdodCAyMDA0LTIwMTcgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBTaW1wbGVQaWUgTmFtZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRScsICdTaW1wbGVQaWUnKTsKCi8qKgogKiBTaW1wbGVQaWUgVmVyc2lvbgogKi8KZGVmaW5lKCdTSU1QTEVQSUVfVkVSU0lPTicsICcxLjUuNicpOwoKLyoqCiAqIFNpbXBsZVBpZSBCdWlsZAogKiBAdG9kbyBIYXJkY29kZSBmb3IgcmVsZWFzZSAodGhlcmUncyBubyBuZWVkIHRvIGhhdmUgdG8gY2FsbCBTaW1wbGVQaWVfTWlzYzo6Z2V0X2J1aWxkKCkgb25seSBldmVyeSBsb2FkIG9mIHNpbXBsZXBpZS5pbmMpCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9CVUlMRCcsIGdtZGF0ZSgnWW1kSGlzJywgU2ltcGxlUGllX01pc2M6OmdldF9idWlsZCgpKSk7CgovKioKICogU2ltcGxlUGllIFdlYnNpdGUgVVJMCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9VUkwnLCAnaHR0cDovL3NpbXBsZXBpZS5vcmcnKTsKCi8qKgogKiBTaW1wbGVQaWUgVXNlcmFnZW50CiAqIEBzZWUgU2ltcGxlUGllOjpzZXRfdXNlcmFnZW50KCkKICovCmRlZmluZSgnU0lNUExFUElFX1VTRVJBR0VOVCcsIFNJTVBMRVBJRV9OQU1FIC4gJy8nIC4gU0lNUExFUElFX1ZFUlNJT04gLiAnIChGZWVkIFBhcnNlcjsgJyAuIFNJTVBMRVBJRV9VUkwgLiAnOyBBbGxvdyBsaWtlIEdlY2tvKSBCdWlsZC8nIC4gU0lNUExFUElFX0JVSUxEKTsKCi8qKgogKiBTaW1wbGVQaWUgTGlua2JhY2sKICovCmRlZmluZSgnU0lNUExFUElFX0xJTktCQUNLJywgJzxhIGhyZWY9IicgLiBTSU1QTEVQSUVfVVJMIC4gJyIgdGl0bGU9IicgLiBTSU1QTEVQSUVfTkFNRSAuICcgJyAuIFNJTVBMRVBJRV9WRVJTSU9OIC4gJyI+JyAuIFNJTVBMRVBJRV9OQU1FIC4gJzwvYT4nKTsKCi8qKgogKiBObyBBdXRvZGlzY292ZXJ5CiAqIEBzZWUgU2ltcGxlUGllOjpzZXRfYXV0b2Rpc2NvdmVyeV9sZXZlbCgpCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9MT0NBVE9SX05PTkUnLCAwKTsKCi8qKgogKiBGZWVkIExpbmsgRWxlbWVudCBBdXRvZGlzY292ZXJ5CiAqIEBzZWUgU2ltcGxlUGllOjpzZXRfYXV0b2Rpc2NvdmVyeV9sZXZlbCgpCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9MT0NBVE9SX0FVVE9ESVNDT1ZFUlknLCAxKTsKCi8qKgogKiBMb2NhbCBGZWVkIEV4dGVuc2lvbiBBdXRvZGlzY292ZXJ5CiAqIEBzZWUgU2ltcGxlUGllOjpzZXRfYXV0b2Rpc2NvdmVyeV9sZXZlbCgpCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9MT0NBVE9SX0xPQ0FMX0VYVEVOU0lPTicsIDIpOwoKLyoqCiAqIExvY2FsIEZlZWQgQm9keSBBdXRvZGlzY292ZXJ5CiAqIEBzZWUgU2ltcGxlUGllOjpzZXRfYXV0b2Rpc2NvdmVyeV9sZXZlbCgpCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9MT0NBVE9SX0xPQ0FMX0JPRFknLCA0KTsKCi8qKgogKiBSZW1vdGUgRmVlZCBFeHRlbnNpb24gQXV0b2Rpc2NvdmVyeQogKiBAc2VlIFNpbXBsZVBpZTo6c2V0X2F1dG9kaXNjb3ZlcnlfbGV2ZWwoKQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTE9DQVRPUl9SRU1PVEVfRVhURU5TSU9OJywgOCk7CgovKioKICogUmVtb3RlIEZlZWQgQm9keSBBdXRvZGlzY292ZXJ5CiAqIEBzZWUgU2ltcGxlUGllOjpzZXRfYXV0b2Rpc2NvdmVyeV9sZXZlbCgpCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9MT0NBVE9SX1JFTU9URV9CT0RZJywgMTYpOwoKLyoqCiAqIEFsbCBGZWVkIEF1dG9kaXNjb3ZlcnkKICogQHNlZSBTaW1wbGVQaWU6OnNldF9hdXRvZGlzY292ZXJ5X2xldmVsKCkKICovCmRlZmluZSgnU0lNUExFUElFX0xPQ0FUT1JfQUxMJywgMzEpOwoKLyoqCiAqIE5vIGtub3duIGZlZWQgdHlwZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfVFlQRV9OT05FJywgMCk7CgovKioKICogUlNTIDAuOTAKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfUlNTXzA5MCcsIDEpOwoKLyoqCiAqIFJTUyAwLjkxIChOZXRzY2FwZSkKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfUlNTXzA5MV9ORVRTQ0FQRScsIDIpOwoKLyoqCiAqIFJTUyAwLjkxIChVc2VybGFuZCkKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfUlNTXzA5MV9VU0VSTEFORCcsIDQpOwoKLyoqCiAqIFJTUyAwLjkxIChib3RoIE5ldHNjYXBlIGFuZCBVc2VybGFuZCkKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfUlNTXzA5MScsIDYpOwoKLyoqCiAqIFJTUyAwLjkyCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9UWVBFX1JTU18wOTInLCA4KTsKCi8qKgogKiBSU1MgMC45MwogKi8KZGVmaW5lKCdTSU1QTEVQSUVfVFlQRV9SU1NfMDkzJywgMTYpOwoKLyoqCiAqIFJTUyAwLjk0CiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9UWVBFX1JTU18wOTQnLCAzMik7CgovKioKICogUlNTIDEuMAogKi8KZGVmaW5lKCdTSU1QTEVQSUVfVFlQRV9SU1NfMTAnLCA2NCk7CgovKioKICogUlNTIDIuMAogKi8KZGVmaW5lKCdTSU1QTEVQSUVfVFlQRV9SU1NfMjAnLCAxMjgpOwoKLyoqCiAqIFJERi1iYXNlZCBSU1MKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfUlNTX1JERicsIDY1KTsKCi8qKgogKiBOb24tUkRGLWJhc2VkIFJTUyAodHJ1bHkgaW50ZW5kZWQgYXMgc3luZGljYXRpb24gZm9ybWF0KQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfVFlQRV9SU1NfU1lORElDQVRJT04nLCAxOTApOwoKLyoqCiAqIEFsbCBSU1MKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfUlNTX0FMTCcsIDI1NSk7CgovKioKICogQXRvbSAwLjMKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfQVRPTV8wMycsIDI1Nik7CgovKioKICogQXRvbSAxLjAKICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfQVRPTV8xMCcsIDUxMik7CgovKioKICogQWxsIEF0b20KICovCmRlZmluZSgnU0lNUExFUElFX1RZUEVfQVRPTV9BTEwnLCA3NjgpOwoKLyoqCiAqIEFsbCBmZWVkIHR5cGVzCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9UWVBFX0FMTCcsIDEwMjMpOwoKLyoqCiAqIE5vIGNvbnN0cnVjdAogKi8KZGVmaW5lKCdTSU1QTEVQSUVfQ09OU1RSVUNUX05PTkUnLCAwKTsKCi8qKgogKiBUZXh0IGNvbnN0cnVjdAogKi8KZGVmaW5lKCdTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQnLCAxKTsKCi8qKgogKiBIVE1MIGNvbnN0cnVjdAogKi8KZGVmaW5lKCdTSU1QTEVQSUVfQ09OU1RSVUNUX0hUTUwnLCAyKTsKCi8qKgogKiBYSFRNTCBjb25zdHJ1Y3QKICovCmRlZmluZSgnU0lNUExFUElFX0NPTlNUUlVDVF9YSFRNTCcsIDQpOwoKLyoqCiAqIGJhc2U2NC1lbmNvZGVkIGNvbnN0cnVjdAogKi8KZGVmaW5lKCdTSU1QTEVQSUVfQ09OU1RSVUNUX0JBU0U2NCcsIDgpOwoKLyoqCiAqIElSSSBjb25zdHJ1Y3QKICovCmRlZmluZSgnU0lNUExFUElFX0NPTlNUUlVDVF9JUkknLCAxNik7CgovKioKICogQSBjb25zdHJ1Y3QgdGhhdCBtaWdodCBiZSBIVE1MCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9DT05TVFJVQ1RfTUFZQkVfSFRNTCcsIDMyKTsKCi8qKgogKiBBbGwgY29uc3RydWN0cwogKi8KZGVmaW5lKCdTSU1QTEVQSUVfQ09OU1RSVUNUX0FMTCcsIDYzKTsKCi8qKgogKiBEb24ndCBjaGFuZ2UgY2FzZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfU0FNRV9DQVNFJywgMSk7CgovKioKICogQ2hhbmdlIHRvIGxvd2VyY2FzZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTE9XRVJDQVNFJywgMik7CgovKioKICogQ2hhbmdlIHRvIHVwcGVyY2FzZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfVVBQRVJDQVNFJywgNCk7CgovKioKICogUENSRSBmb3IgSFRNTCBhdHRyaWJ1dGVzCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9QQ1JFX0hUTUxfQVRUUklCVVRFJywgJygoPzpbXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXStbXlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4MkZceDNFXVteXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHgyRlx4M0RceDNFXSooPzpbXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXSo9W1x4MDlceDBBXHgwQlx4MENceDBEXHgyMF0qKD86Iig/OlteIl0qKSJ8XCcoPzpbXlwnXSopXCd8KD86W15ceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceDIyXHgyN1x4M0VdW15ceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceDNFXSopPykpPykqKVtceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBdKicpOwoKLyoqCiAqIFBDUkUgZm9yIFhNTCBhdHRyaWJ1dGVzCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9QQ1JFX1hNTF9BVFRSSUJVVEUnLCAnKCg/OlxzKyg/Oig/OlteXHM6XSs6KT9bXlxzOl0rKVxzKj1ccyooPzoiKD86W14iXSopInxcJyg/OlteXCddKilcJykpKilccyonKTsKCi8qKgogKiBYTUwgTmFtZXNwYWNlCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9OQU1FU1BBQ0VfWE1MJywgJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScpOwoKLyoqCiAqIEF0b20gMS4wIE5hbWVzcGFjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwNS9BdG9tJyk7CgovKioKICogQXRvbSAwLjMgTmFtZXNwYWNlCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMycsICdodHRwOi8vcHVybC5vcmcvYXRvbS9ucyMnKTsKCi8qKgogKiBSREYgTmFtZXNwYWNlCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9OQU1FU1BBQ0VfUkRGJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMnKTsKCi8qKgogKiBSU1MgMC45MCBOYW1lc3BhY2UKICovCmRlZmluZSgnU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMDkwJywgJ2h0dHA6Ly9teS5uZXRzY2FwZS5jb20vcmRmL3NpbXBsZS8wLjkvJyk7CgovKioKICogUlNTIDEuMCBOYW1lc3BhY2UKICovCmRlZmluZSgnU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTAnLCAnaHR0cDovL3B1cmwub3JnL3Jzcy8xLjAvJyk7CgovKioKICogUlNTIDEuMCBDb250ZW50IE1vZHVsZSBOYW1lc3BhY2UKICovCmRlZmluZSgnU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTBfTU9EVUxFU19DT05URU5UJywgJ2h0dHA6Ly9wdXJsLm9yZy9yc3MvMS4wL21vZHVsZXMvY29udGVudC8nKTsKCi8qKgogKiBSU1MgMi4wIE5hbWVzcGFjZQogKiAoU3R1cGlkLCBJIGtub3csIGJ1dCBJJ20gY2VydGFpbiBpdCB3aWxsIGNvbmZ1c2UgcGVvcGxlIGxlc3Mgd2l0aCBzdXBwb3J0LikKICovCmRlZmluZSgnU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAnLCAnJyk7CgovKioKICogREMgMS4wIE5hbWVzcGFjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwJywgJ2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjAvJyk7CgovKioKICogREMgMS4xIE5hbWVzcGFjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzExJywgJ2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJyk7CgovKioKICogVzNDIEJhc2ljIEdlbyAoV0dTODQgbGF0L2xvbmcpIFZvY2FidWxhcnkgTmFtZXNwYWNlCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9OQU1FU1BBQ0VfVzNDX0JBU0lDX0dFTycsICdodHRwOi8vd3d3LnczLm9yZy8yMDAzLzAxL2dlby93Z3M4NF9wb3MjJyk7CgovKioKICogR2VvUlNTIE5hbWVzcGFjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX0dFT1JTUycsICdodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzJyk7CgovKioKICogTWVkaWEgUlNTIE5hbWVzcGFjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTJywgJ2h0dHA6Ly9zZWFyY2gueWFob28uY29tL21yc3MvJyk7CgovKioKICogV3JvbmcgTWVkaWEgUlNTIE5hbWVzcGFjZS4gQ2F1c2VkIGJ5IGEgbG9uZy1zdGFuZGluZyB0eXBvIGluIHRoZSBzcGVjLgogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTX1dST05HJywgJ2h0dHA6Ly9zZWFyY2gueWFob28uY29tL21yc3MnKTsKCi8qKgogKiBXcm9uZyBNZWRpYSBSU1MgTmFtZXNwYWNlICMyLiBOZXcgbmFtZXNwYWNlIGludHJvZHVjZWQgaW4gTWVkaWEgUlNTIDEuNS4KICovCmRlZmluZSgnU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU19XUk9ORzInLCAnaHR0cDovL3ZpZGVvLnNlYXJjaC55YWhvby5jb20vbXJzcycpOwoKLyoqCiAqIFdyb25nIE1lZGlhIFJTUyBOYW1lc3BhY2UgIzMuIEEgcG9zc2libGUgdHlwbyBvZiB0aGUgTWVkaWEgUlNTIDEuNSBuYW1lc3BhY2UuCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NfV1JPTkczJywgJ2h0dHA6Ly92aWRlby5zZWFyY2gueWFob28uY29tL21yc3MvJyk7CgovKioKICogV3JvbmcgTWVkaWEgUlNTIE5hbWVzcGFjZSAjNC4gTmV3IHNwZWMgbG9jYXRpb24gYWZ0ZXIgdGhlIFJTUyBBZHZpc29yeSBCb2FyZCB0YWtlcyBpdCBvdmVyLCBidXQgbm90IGEgdmFsaWQgbmFtZXNwYWNlLgogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTX1dST05HNCcsICdodHRwOi8vd3d3LnJzc2JvYXJkLm9yZy9tZWRpYS1yc3MnKTsKCi8qKgogKiBXcm9uZyBNZWRpYSBSU1MgTmFtZXNwYWNlICM1LiBBIHBvc3NpYmxlIHR5cG8gb2YgdGhlIFJTUyBBZHZpc29yeSBCb2FyZCBVUkwuCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NfV1JPTkc1JywgJ2h0dHA6Ly93d3cucnNzYm9hcmQub3JnL21lZGlhLXJzcy8nKTsKCi8qKgogKiBpVHVuZXMgUlNTIE5hbWVzcGFjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfTkFNRVNQQUNFX0lUVU5FUycsICdodHRwOi8vd3d3Lml0dW5lcy5jb20vZHRkcy9wb2RjYXN0LTEuMC5kdGQnKTsKCi8qKgogKiBYSFRNTCBOYW1lc3BhY2UKICovCmRlZmluZSgnU0lNUExFUElFX05BTUVTUEFDRV9YSFRNTCcsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyk7CgovKioKICogSUFOQSBMaW5rIFJlbGF0aW9ucyBSZWdpc3RyeQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWScsICdodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3JlbGF0aW9uLycpOwoKLyoqCiAqIE5vIGZpbGUgc291cmNlCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9GSUxFX1NPVVJDRV9OT05FJywgMCk7CgovKioKICogUmVtb3RlIGZpbGUgc291cmNlCiAqLwpkZWZpbmUoJ1NJTVBMRVBJRV9GSUxFX1NPVVJDRV9SRU1PVEUnLCAxKTsKCi8qKgogKiBMb2NhbCBmaWxlIHNvdXJjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfRklMRV9TT1VSQ0VfTE9DQUwnLCAyKTsKCi8qKgogKiBmc29ja29wZW4oKSBmaWxlIHNvdXJjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfRklMRV9TT1VSQ0VfRlNPQ0tPUEVOJywgNCk7CgovKioKICogY1VSTCBmaWxlIHNvdXJjZQogKi8KZGVmaW5lKCdTSU1QTEVQSUVfRklMRV9TT1VSQ0VfQ1VSTCcsIDgpOwoKLyoqCiAqIGZpbGVfZ2V0X2NvbnRlbnRzKCkgZmlsZSBzb3VyY2UKICovCmRlZmluZSgnU0lNUExFUElFX0ZJTEVfU09VUkNFX0ZJTEVfR0VUX0NPTlRFTlRTJywgMTYpOwoKCgovKioKICogU2ltcGxlUGllCiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBBUEkKICovCmNsYXNzIFNpbXBsZVBpZQp7CgkvKioKCSAqIEB2YXIgYXJyYXkgUmF3IGRhdGEKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGRhdGEgPSBhcnJheSgpOwoKCS8qKgoJICogQHZhciBtaXhlZCBFcnJvciBzdHJpbmcKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGVycm9yOwoKCS8qKgoJICogQHZhciBvYmplY3QgSW5zdGFuY2Ugb2YgU2ltcGxlUGllX1Nhbml0aXplIChvciBvdGhlciBjbGFzcykKCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfc2FuaXRpemVfY2xhc3MoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkc2FuaXRpemU7CgoJLyoqCgkgKiBAdmFyIHN0cmluZyBTaW1wbGVQaWUgVXNlcmFnZW50CgkgKiBAc2VlIFNpbXBsZVBpZTo6c2V0X3VzZXJhZ2VudCgpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICR1c2VyYWdlbnQgPSBTSU1QTEVQSUVfVVNFUkFHRU5UOwoKCS8qKgoJICogQHZhciBzdHJpbmcgRmVlZCBVUkwKCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfZmVlZF91cmwoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkZmVlZF91cmw7CgoJLyoqCgkgKiBAdmFyIHN0cmluZyBPcmlnaW5hbCBmZWVkIFVSTCwgb3IgbmV3IGZlZWQgVVJMIGlmZiBIVFRQIDMwMSBNb3ZlZCBQZXJtYW5lbnRseQoJICogQHNlZSBTaW1wbGVQaWU6OnN1YnNjcmliZV91cmwoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkcGVybWFuZW50X3VybCA9IG51bGw7CgoJLyoqCgkgKiBAdmFyIG9iamVjdCBJbnN0YW5jZSBvZiBTaW1wbGVQaWVfRmlsZSB0byB1c2UgYXMgYSBmZWVkCgkgKiBAc2VlIFNpbXBsZVBpZTo6c2V0X2ZpbGUoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkZmlsZTsKCgkvKioKCSAqIEB2YXIgc3RyaW5nIFJhdyBmZWVkIGRhdGEKCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfcmF3X2RhdGEoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkcmF3X2RhdGE7CgoJLyoqCgkgKiBAdmFyIGludCBUaW1lb3V0IGZvciBmZXRjaGluZyByZW1vdGUgZmlsZXMKCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfdGltZW91dCgpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICR0aW1lb3V0ID0gMTA7CgoJLyoqCgkgKiBAdmFyIGFycmF5IEN1c3RvbSBjdXJsIG9wdGlvbnMKCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfY3VybF9vcHRpb25zKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGN1cmxfb3B0aW9ucyA9IGFycmF5KCk7CgoJLyoqCgkgKiBAdmFyIGJvb2wgRm9yY2VzIGZzb2Nrb3BlbigpIHRvIGJlIHVzZWQgZm9yIHJlbW90ZSBmaWxlcyBpbnN0ZWFkCgkgKiBvZiBjVVJMLCBldmVuIGlmIGEgbmV3IGVub3VnaCB2ZXJzaW9uIGlzIGluc3RhbGxlZAoJICogQHNlZSBTaW1wbGVQaWU6OmZvcmNlX2Zzb2Nrb3BlbigpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICRmb3JjZV9mc29ja29wZW4gPSBmYWxzZTsKCgkvKioKCSAqIEB2YXIgYm9vbCBGb3JjZSB0aGUgZ2l2ZW4gZGF0YS9VUkwgdG8gYmUgdHJlYXRlZCBhcyBhIGZlZWQgbm8gbWF0dGVyIHdoYXQKCSAqIGl0IGFwcGVhcnMgbGlrZQoJICogQHNlZSBTaW1wbGVQaWU6OmZvcmNlX2ZlZWQoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkZm9yY2VfZmVlZCA9IGZhbHNlOwoKCS8qKgoJICogQHZhciBib29sIEVuYWJsZS9EaXNhYmxlIENhY2hpbmcKCSAqIEBzZWUgU2ltcGxlUGllOjplbmFibGVfY2FjaGUoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkY2FjaGUgPSB0cnVlOwoKCS8qKgoJICogQHZhciBib29sIEZvcmNlIFNpbXBsZVBpZSB0byBmYWxsYmFjayB0byBleHBpcmVkIGNhY2hlLCBpZiBlbmFibGVkLAoJICogd2hlbiBmZWVkIGlzIHVuYXZhaWxhYmxlLgoJICogQHNlZSBTaW1wbGVQaWU6OmZvcmNlX2NhY2hlX2ZhbGxiYWNrKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGZvcmNlX2NhY2hlX2ZhbGxiYWNrID0gZmFsc2U7CgoJLyoqCgkgKiBAdmFyIGludCBDYWNoZSBkdXJhdGlvbiAoaW4gc2Vjb25kcykKCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfY2FjaGVfZHVyYXRpb24oKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkY2FjaGVfZHVyYXRpb24gPSAzNjAwOwoKCS8qKgoJICogQHZhciBpbnQgQXV0by1kaXNjb3ZlcnkgY2FjaGUgZHVyYXRpb24gKGluIHNlY29uZHMpCgkgKiBAc2VlIFNpbXBsZVBpZTo6c2V0X2F1dG9kaXNjb3ZlcnlfY2FjaGVfZHVyYXRpb24oKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkYXV0b2Rpc2NvdmVyeV9jYWNoZV9kdXJhdGlvbiA9IDYwNDgwMDsgLy8gNyBEYXlzLgoKCS8qKgoJICogQHZhciBzdHJpbmcgQ2FjaGUgbG9jYXRpb24gKHJlbGF0aXZlIHRvIGV4ZWN1dGluZyBzY3JpcHQpCgkgKiBAc2VlIFNpbXBsZVBpZTo6c2V0X2NhY2hlX2xvY2F0aW9uKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGNhY2hlX2xvY2F0aW9uID0gJy4vY2FjaGUnOwoKCS8qKgoJICogQHZhciBzdHJpbmcgRnVuY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSBjYWNoZSBmaWxlbmFtZQoJICogQHNlZSBTaW1wbGVQaWU6OnNldF9jYWNoZV9uYW1lX2Z1bmN0aW9uKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGNhY2hlX25hbWVfZnVuY3Rpb24gPSAnbWQ1JzsKCgkvKioKCSAqIEB2YXIgYm9vbCBSZW9yZGVyIGZlZWQgYnkgZGF0ZSBkZXNjZW5kaW5nCgkgKiBAc2VlIFNpbXBsZVBpZTo6ZW5hYmxlX29yZGVyX2J5X2RhdGUoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkb3JkZXJfYnlfZGF0ZSA9IHRydWU7CgoJLyoqCgkgKiBAdmFyIG1peGVkIEZvcmNlIGlucHV0IGVuY29kaW5nIHRvIGJlIHNldCB0byB0aGUgZm9sbG93IHZhbHVlCgkgKiAoZmFsc2UsIG9yIGFueXRoaW5nIHR5cGUtY2FzdCB0byBmYWxzZSwgZGlzYWJsZXMgdGhpcyBmZWF0dXJlKQoJICogQHNlZSBTaW1wbGVQaWU6OnNldF9pbnB1dF9lbmNvZGluZygpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICRpbnB1dF9lbmNvZGluZyA9IGZhbHNlOwoKCS8qKgoJICogQHZhciBpbnQgRmVlZCBBdXRvZGlzY292ZXJ5IExldmVsCgkgKiBAc2VlIFNpbXBsZVBpZTo6c2V0X2F1dG9kaXNjb3ZlcnlfbGV2ZWwoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkYXV0b2Rpc2NvdmVyeSA9IFNJTVBMRVBJRV9MT0NBVE9SX0FMTDsKCgkvKioKCSAqIENsYXNzIHJlZ2lzdHJ5IG9iamVjdAoJICoKCSAqIEB2YXIgU2ltcGxlUGllX1JlZ2lzdHJ5CgkgKi8KCXB1YmxpYyAkcmVnaXN0cnk7CgoJLyoqCgkgKiBAdmFyIGludCBNYXhpbXVtIG51bWJlciBvZiBmZWVkcyB0byBjaGVjayB3aXRoIGF1dG9kaXNjb3ZlcnkKCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfbWF4X2NoZWNrZWRfZmVlZHMoKQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyAkbWF4X2NoZWNrZWRfZmVlZHMgPSAxMDsKCgkvKioKCSAqIEB2YXIgYXJyYXkgQWxsIHRoZSBmZWVkcyBmb3VuZCBkdXJpbmcgdGhlIGF1dG9kaXNjb3ZlcnkgcHJvY2VzcwoJICogQHNlZSBTaW1wbGVQaWU6OmdldF9hbGxfZGlzY292ZXJlZF9mZWVkcygpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICRhbGxfZGlzY292ZXJlZF9mZWVkcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBAdmFyIHN0cmluZyBXZWItYWNjZXNzaWJsZSBwYXRoIHRvIHRoZSBoYW5kbGVyX2ltYWdlLnBocCBmaWxlLgoJICogQHNlZSBTaW1wbGVQaWU6OnNldF9pbWFnZV9oYW5kbGVyKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGltYWdlX2hhbmRsZXIgPSAnJzsKCgkvKioKCSAqIEB2YXIgYXJyYXkgU3RvcmVzIHRoZSBVUkxzIHdoZW4gbXVsdGlwbGUgZmVlZHMgYXJlIGJlaW5nIGluaXRpYWxpemVkLgoJICogQHNlZSBTaW1wbGVQaWU6OnNldF9mZWVkX3VybCgpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICRtdWx0aWZlZWRfdXJsID0gYXJyYXkoKTsKCgkvKioKCSAqIEB2YXIgYXJyYXkgU3RvcmVzIFNpbXBsZVBpZSBvYmplY3RzIHdoZW4gbXVsdGlwbGUgZmVlZHMgaW5pdGlhbGl6ZWQuCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICRtdWx0aWZlZWRfb2JqZWN0cyA9IGFycmF5KCk7CgoJLyoqCgkgKiBAdmFyIGFycmF5IFN0b3JlcyB0aGUgZ2V0X29iamVjdF92YXJzKCkgYXJyYXkgZm9yIHVzZSB3aXRoIG11bHRpZmVlZHMuCgkgKiBAc2VlIFNpbXBsZVBpZTo6c2V0X2ZlZWRfdXJsKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGNvbmZpZ19zZXR0aW5ncyA9IG51bGw7CgoJLyoqCgkgKiBAdmFyIGludGVnZXIgU3RvcmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuIHBlci1mZWVkIHdpdGggbXVsdGlmZWVkcy4KCSAqIEBzZWUgU2ltcGxlUGllOjpzZXRfaXRlbV9saW1pdCgpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICRpdGVtX2xpbWl0ID0gMDsKCgkvKioKCSAqIEB2YXIgYm9vbCBTdG9yZXMgaWYgbGFzdC1tb2RpZmllZCBhbmQvb3IgZXRhZyBoZWFkZXJzIHdlcmUgc2VudCB3aXRoIHRoZQoJICogcmVxdWVzdCB3aGVuIGNoZWNraW5nIGEgZmVlZC4KCSAqLwoJcHVibGljICRjaGVja19tb2RpZmllZCA9IGZhbHNlOwoKCS8qKgoJICogQHZhciBhcnJheSBTdG9yZXMgdGhlIGRlZmF1bHQgYXR0cmlidXRlcyB0byBiZSBzdHJpcHBlZCBieSBzdHJpcF9hdHRyaWJ1dGVzKCkuCgkgKiBAc2VlIFNpbXBsZVBpZTo6c3RyaXBfYXR0cmlidXRlcygpCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljICRzdHJpcF9hdHRyaWJ1dGVzID0gYXJyYXkoJ2Jnc291bmQnLCAnY2xhc3MnLCAnZXhwcicsICdpZCcsICdzdHlsZScsICdvbmNsaWNrJywgJ29uZXJyb3InLCAnb25maW5pc2gnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZW91dCcsICdvbmZvY3VzJywgJ29uYmx1cicsICdsb3dzcmMnLCAnZHluc3JjJyk7CgoJLyoqCgkgKiBAdmFyIGFycmF5IFN0b3JlcyB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIHRvIGFkZCB0byBkaWZmZXJlbnQgdGFncyBieSBhZGRfYXR0cmlidXRlcygpLgoJICogQHNlZSBTaW1wbGVQaWU6OmFkZF9hdHRyaWJ1dGVzKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGFkZF9hdHRyaWJ1dGVzID0gYXJyYXkoJ2F1ZGlvJyA9PiBhcnJheSgncHJlbG9hZCcgPT4gJ25vbmUnKSwgJ2lmcmFtZScgPT4gYXJyYXkoJ3NhbmRib3gnID0+ICdhbGxvdy1zY3JpcHRzIGFsbG93LXNhbWUtb3JpZ2luJyksICd2aWRlbycgPT4gYXJyYXkoJ3ByZWxvYWQnID0+ICdub25lJykpOwoKCS8qKgoJICogQHZhciBhcnJheSBTdG9yZXMgdGhlIGRlZmF1bHQgdGFncyB0byBiZSBzdHJpcHBlZCBieSBzdHJpcF9odG1sdGFncygpLgoJICogQHNlZSBTaW1wbGVQaWU6OnN0cmlwX2h0bWx0YWdzKCkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJHN0cmlwX2h0bWx0YWdzID0gYXJyYXkoJ2Jhc2UnLCAnYmxpbmsnLCAnYm9keScsICdkb2N0eXBlJywgJ2VtYmVkJywgJ2ZvbnQnLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdodG1sJywgJ2lmcmFtZScsICdpbnB1dCcsICdtYXJxdWVlJywgJ21ldGEnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ3BhcmFtJywgJ3NjcmlwdCcsICdzdHlsZScpOwoKCS8qKgoJICogQHZhciBib29sIFNob3VsZCB3ZSB0aHJvdyBleGNlcHRpb25zLCBvciB1c2UgdGhlIG9sZC1zdHlsZSBlcnJvciBwcm9wZXJ0eT8KCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgJGVuYWJsZV9leGNlcHRpb25zID0gZmFsc2U7CgoJLyoqCgkgKiBUaGUgU2ltcGxlUGllIGNsYXNzIGNvbnRhaW5zIGZlZWQgbGV2ZWwgZGF0YSBhbmQgb3B0aW9ucwoJICoKCSAqIFRvIHVzZSBTaW1wbGVQaWUsIGNyZWF0ZSB0aGUgU2ltcGxlUGllIG9iamVjdCB3aXRoIG5vIHBhcmFtZXRlcnMuIFlvdSBjYW4KCSAqIHRoZW4gc2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB1c2luZyB0aGUgcHJvdmlkZWQgbWV0aG9kcy4gQWZ0ZXIgc2V0dGluZwoJICogdGhlbSwgeW91IG11c3QgaW5pdGlhbGlzZSB0aGUgZmVlZCB1c2luZyAkZmVlZC0+aW5pdCgpLiBBdCB0aGF0IHBvaW50IHRoZQoJICogb2JqZWN0J3MgbWV0aG9kcyBhbmQgcHJvcGVydGllcyB3aWxsIGJlIGF2YWlsYWJsZSB0byB5b3UuCgkgKgoJICogUHJldmlvdXNseSwgaXQgd2FzIHBvc3NpYmxlIHRvIHBhc3MgaW4gdGhlIGZlZWQgVVJMIGFsb25nIHdpdGggY2FjaGUKCSAqIG9wdGlvbnMgZGlyZWN0bHkgaW50byB0aGUgY29uc3RydWN0b3IuIFRoaXMgaGFzIGJlZW4gcmVtb3ZlZCBhcyBvZiAxLjMgYXMKCSAqIGl0IGNhdXNlZCBhIGxvdCBvZiBjb25mdXNpb24uCgkgKgoJICogQHNpbmNlIDEuMCBQcmV2aWV3IFJlbGVhc2UKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCXsKCQlpZiAodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNS42JywgJzwnKSkKCQl7CgkJCXRyaWdnZXJfZXJyb3IoJ1BsZWFzZSB1cGdyYWRlIHRvIFBIUCA1LjYgb3IgbmV3ZXIuJyk7CgkJCWRpZSgpOwoJCX0KCgkJLy8gT3RoZXIgb2JqZWN0cywgaW5zdGFuY2VzIGNyZWF0ZWQgaGVyZSBzbyB3ZSBjYW4gc2V0IG9wdGlvbnMgb24gdGhlbQoJCSR0aGlzLT5zYW5pdGl6ZSA9IG5ldyBTaW1wbGVQaWVfU2FuaXRpemUoKTsKCQkkdGhpcy0+cmVnaXN0cnkgPSBuZXcgU2ltcGxlUGllX1JlZ2lzdHJ5KCk7CgoJCWlmIChmdW5jX251bV9hcmdzKCkgPiAwKQoJCXsKCQkJJGxldmVsID0gZGVmaW5lZCgnRV9VU0VSX0RFUFJFQ0FURUQnKSA/IEVfVVNFUl9ERVBSRUNBVEVEIDogRV9VU0VSX1dBUk5JTkc7CgkJCXRyaWdnZXJfZXJyb3IoJ1Bhc3NpbmcgcGFyYW1ldGVycyB0byB0aGUgY29uc3RydWN0b3IgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBzZXRfZmVlZF91cmwoKSwgc2V0X2NhY2hlX2xvY2F0aW9uKCksIGFuZCBzZXRfY2FjaGVfZHVyYXRpb24oKSBkaXJlY3RseS4nLCAkbGV2ZWwpOwoKCQkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CgkJCXN3aXRjaCAoY291bnQoJGFyZ3MpKSB7CgkJCQljYXNlIDM6CgkJCQkJJHRoaXMtPnNldF9jYWNoZV9kdXJhdGlvbigkYXJnc1syXSk7CgkJCQljYXNlIDI6CgkJCQkJJHRoaXMtPnNldF9jYWNoZV9sb2NhdGlvbigkYXJnc1sxXSk7CgkJCQljYXNlIDE6CgkJCQkJJHRoaXMtPnNldF9mZWVkX3VybCgkYXJnc1swXSk7CgkJCQkJJHRoaXMtPmluaXQoKTsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIFVzZWQgZm9yIGNvbnZlcnRpbmcgb2JqZWN0IHRvIGEgc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKCXsKCQlyZXR1cm4gbWQ1KHNlcmlhbGl6ZSgkdGhpcy0+ZGF0YSkpOwoJfQoKCS8qKgoJICogUmVtb3ZlIGl0ZW1zIHRoYXQgbGluayBiYWNrIHRvIHRoaXMgYmVmb3JlIGRlc3Ryb3lpbmcgdGhpcyBvYmplY3QKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQoJewoJCWlmICghZ2NfZW5hYmxlZCgpKQoJCXsKCQkJaWYgKCFlbXB0eSgkdGhpcy0+ZGF0YVsnaXRlbXMnXSkpCgkJCXsKCQkJCWZvcmVhY2ggKCR0aGlzLT5kYXRhWydpdGVtcyddIGFzICRpdGVtKQoJCQkJewoJCQkJCSRpdGVtLT5fX2Rlc3RydWN0KCk7CgkJCQl9CgkJCQl1bnNldCgkaXRlbSwgJHRoaXMtPmRhdGFbJ2l0ZW1zJ10pOwoJCQl9CgkJCWlmICghZW1wdHkoJHRoaXMtPmRhdGFbJ29yZGVyZWRfaXRlbXMnXSkpCgkJCXsKCQkJCWZvcmVhY2ggKCR0aGlzLT5kYXRhWydvcmRlcmVkX2l0ZW1zJ10gYXMgJGl0ZW0pCgkJCQl7CgkJCQkJJGl0ZW0tPl9fZGVzdHJ1Y3QoKTsKCQkJCX0KCQkJCXVuc2V0KCRpdGVtLCAkdGhpcy0+ZGF0YVsnb3JkZXJlZF9pdGVtcyddKTsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEZvcmNlIHRoZSBnaXZlbiBkYXRhL1VSTCB0byBiZSB0cmVhdGVkIGFzIGEgZmVlZAoJICoKCSAqIFRoaXMgdGVsbHMgU2ltcGxlUGllIHRvIGlnbm9yZSB0aGUgY29udGVudC10eXBlIHByb3ZpZGVkIGJ5IHRoZSBzZXJ2ZXIuCgkgKiBCZSBjYXJlZnVsIHdoZW4gdXNpbmcgdGhpcyBvcHRpb24sIGFzIGl0IHdpbGwgYWxzbyBkaXNhYmxlIGF1dG9kaXNjb3ZlcnkuCgkgKgoJICogQHNpbmNlIDEuMQoJICogQHBhcmFtIGJvb2wgJGVuYWJsZSBGb3JjZSB0aGUgZ2l2ZW4gZGF0YS9VUkwgdG8gYmUgdHJlYXRlZCBhcyBhIGZlZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZvcmNlX2ZlZWQoJGVuYWJsZSA9IGZhbHNlKQoJewoJCSR0aGlzLT5mb3JjZV9mZWVkID0gKGJvb2wpICRlbmFibGU7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIFVSTCBvZiB0aGUgZmVlZCB5b3Ugd2FudCB0byBwYXJzZQoJICoKCSAqIFRoaXMgYWxsb3dzIHlvdSB0byBlbnRlciB0aGUgVVJMIG9mIHRoZSBmZWVkIHlvdSB3YW50IHRvIHBhcnNlLCBvciB0aGUKCSAqIHdlYnNpdGUgeW91IHdhbnQgdG8gdHJ5IHRvIHVzZSBhdXRvLWRpc2NvdmVyeSBvbi4gVGhpcyB0YWtlcyBwcmlvcml0eQoJICogb3ZlciBhbnkgc2V0IHJhdyBkYXRhLgoJICoKCSAqIFlvdSBjYW4gc2V0IG11bHRpcGxlIGZlZWRzIHRvIG1hc2ggdG9nZXRoZXIgYnkgcGFzc2luZyBhbiBhcnJheSBpbnN0ZWFkCgkgKiBvZiBhIHN0cmluZyBmb3IgdGhlICR1cmwuIFJlbWVtYmVyIHRoYXQgd2l0aCBlYWNoIGFkZGl0aW9uYWwgZmVlZCBjb21lcwoJICogYWRkaXRpb25hbCBwcm9jZXNzaW5nIGFuZCByZXNvdXJjZXMuCgkgKgoJICogQHNpbmNlIDEuMCBQcmV2aWV3IFJlbGVhc2UKCSAqIEBzZWUgc2V0X3Jhd19kYXRhKCkKCSAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJHVybCBUaGlzIGlzIHRoZSBVUkwgKG9yIGFycmF5IG9mIFVSTHMpIHRoYXQgeW91IHdhbnQgdG8gcGFyc2UuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfZmVlZF91cmwoJHVybCkKCXsKCQkkdGhpcy0+bXVsdGlmZWVkX3VybCA9IGFycmF5KCk7CgkJaWYgKGlzX2FycmF5KCR1cmwpKQoJCXsKCQkJZm9yZWFjaCAoJHVybCBhcyAkdmFsdWUpCgkJCXsKCQkJCSR0aGlzLT5tdWx0aWZlZWRfdXJsW10gPSAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnZml4X3Byb3RvY29sJywgYXJyYXkoJHZhbHVlLCAxKSk7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPmZlZWRfdXJsID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2ZpeF9wcm90b2NvbCcsIGFycmF5KCR1cmwsIDEpKTsKCQkJJHRoaXMtPnBlcm1hbmVudF91cmwgPSAkdGhpcy0+ZmVlZF91cmw7CgkJfQoJfQoKCS8qKgoJICogU2V0IGFuIGluc3RhbmNlIG9mIHtAc2VlIFNpbXBsZVBpZV9GaWxlfSB0byB1c2UgYXMgYSBmZWVkCgkgKgoJICogQHBhcmFtIFNpbXBsZVBpZV9GaWxlICYkZmlsZQoJICogQHJldHVybiBib29sIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2ZpbGUoJiRmaWxlKQoJewoJCWlmICgkZmlsZSBpbnN0YW5jZW9mIFNpbXBsZVBpZV9GaWxlKQoJCXsKCQkJJHRoaXMtPmZlZWRfdXJsID0gJGZpbGUtPnVybDsKCQkJJHRoaXMtPnBlcm1hbmVudF91cmwgPSAkdGhpcy0+ZmVlZF91cmw7CgkJCSR0aGlzLT5maWxlID0mICRmaWxlOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogU2V0IHRoZSByYXcgWE1MIGRhdGEgdG8gcGFyc2UKCSAqCgkgKiBBbGxvd3MgeW91IHRvIHVzZSBhIHN0cmluZyBvZiBSU1MvQXRvbSBkYXRhIGluc3RlYWQgb2YgYSByZW1vdGUgZmVlZC4KCSAqCgkgKiBJZiB5b3UgaGF2ZSBhIGZlZWQgYXZhaWxhYmxlIGFzIGEgc3RyaW5nIGluIFBIUCwgeW91IGNhbiB0ZWxsIFNpbXBsZVBpZQoJICogdG8gcGFyc2UgdGhhdCBkYXRhIHN0cmluZyBpbnN0ZWFkIG9mIGEgcmVtb3RlIGZlZWQuIEFueSBzZXQgZmVlZCBVUkwKCSAqIHRha2VzIHByZWNlZGVuY2UuCgkgKgoJICogQHNpbmNlIDEuMCBCZXRhIDMKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgUlNTIG9yIEF0b20gZGF0YSBhcyBhIHN0cmluZy4KCSAqIEBzZWUgc2V0X2ZlZWRfdXJsKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9yYXdfZGF0YSgkZGF0YSkKCXsKCQkkdGhpcy0+cmF3X2RhdGEgPSAkZGF0YTsKCX0KCgkvKioKCSAqIFNldCB0aGUgZGVmYXVsdCB0aW1lb3V0IGZvciBmZXRjaGluZyByZW1vdGUgZmVlZHMKCSAqCgkgKiBUaGlzIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBtYXhpbXVtIHRpbWUgdGhlIGZlZWQncyBzZXJ2ZXIgdG8gcmVzcG9uZAoJICogYW5kIHNlbmQgdGhlIGZlZWQgYmFjay4KCSAqCgkgKiBAc2luY2UgMS4wIEJldGEgMwoJICogQHBhcmFtIGludCAkdGltZW91dCBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byBzcGVuZCB3YWl0aW5nIHRvIHJldHJpZXZlIGEgZmVlZC4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF90aW1lb3V0KCR0aW1lb3V0ID0gMTApCgl7CgkJJHRoaXMtPnRpbWVvdXQgPSAoaW50KSAkdGltZW91dDsKCX0KCgkvKioKCSAqIFNldCBjdXN0b20gY3VybCBvcHRpb25zCgkgKgoJICogVGhpcyBhbGxvd3MgeW91IHRvIGNoYW5nZSBkZWZhdWx0IGN1cmwgb3B0aW9ucwoJICoKCSAqIEBzaW5jZSAxLjAgQmV0YSAzCgkgKiBAcGFyYW0gYXJyYXkgJGN1cmxfb3B0aW9ucyBDdXJsIG9wdGlvbnMgdG8gYWRkIHRvIGRlZmF1bHQgc2V0dGluZ3MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9jdXJsX29wdGlvbnMoYXJyYXkgJGN1cmxfb3B0aW9ucyA9IGFycmF5KCkpCgl7CgkJJHRoaXMtPmN1cmxfb3B0aW9ucyA9ICRjdXJsX29wdGlvbnM7Cgl9CgoJLyoqCgkgKiBGb3JjZSBTaW1wbGVQaWUgdG8gdXNlIGZzb2Nrb3BlbigpIGluc3RlYWQgb2YgY1VSTAoJICoKCSAqIEBzaW5jZSAxLjAgQmV0YSAzCgkgKiBAcGFyYW0gYm9vbCAkZW5hYmxlIEZvcmNlIGZzb2Nrb3BlbigpIHRvIGJlIHVzZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZvcmNlX2Zzb2Nrb3BlbigkZW5hYmxlID0gZmFsc2UpCgl7CgkJJHRoaXMtPmZvcmNlX2Zzb2Nrb3BlbiA9IChib29sKSAkZW5hYmxlOwoJfQoKCS8qKgoJICogRW5hYmxlL2Rpc2FibGUgY2FjaGluZyBpbiBTaW1wbGVQaWUuCgkgKgoJICogVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBkaXNhYmxlIGNhY2hpbmcgYWxsLXRvZ2V0aGVyIGluIFNpbXBsZVBpZS4KCSAqIEhvd2V2ZXIsIGRpc2FibGluZyB0aGUgY2FjaGUgY2FuIGxlYWQgdG8gbG9uZ2VyIGxvYWQgdGltZXMuCgkgKgoJICogQHNpbmNlIDEuMCBQcmV2aWV3IFJlbGVhc2UKCSAqIEBwYXJhbSBib29sICRlbmFibGUgRW5hYmxlIGNhY2hpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGVuYWJsZV9jYWNoZSgkZW5hYmxlID0gdHJ1ZSkKCXsKCQkkdGhpcy0+Y2FjaGUgPSAoYm9vbCkgJGVuYWJsZTsKCX0KCgkvKioKCSAqIFNpbXBsZVBpZSB0byBjb250aW51ZSB0byBmYWxsIGJhY2sgdG8gZXhwaXJlZCBjYWNoZSwgaWYgZW5hYmxlZCwgd2hlbgoJICogZmVlZCBpcyB1bmF2YWlsYWJsZS4KCSAqCgkgKiBUaGlzIHRlbGxzIFNpbXBsZVBpZSB0byBpZ25vcmUgYW55IGZpbGUgZXJyb3JzIGFuZCBmYWxsIGJhY2sgdG8gY2FjaGUKCSAqIGluc3RlYWQuIFRoaXMgb25seSB3b3JrcyBpZiBjYWNoaW5nIGlzIGVuYWJsZWQgYW5kIGNhY2hlZCBjb250ZW50CgkgKiBzdGlsbCBleGlzdHMuCgoJICogQHBhcmFtIGJvb2wgJGVuYWJsZSBGb3JjZSB1c2Ugb2YgY2FjaGUgb24gZmFpbC4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZvcmNlX2NhY2hlX2ZhbGxiYWNrKCRlbmFibGUgPSBmYWxzZSkKCXsKCQkkdGhpcy0+Zm9yY2VfY2FjaGVfZmFsbGJhY2s9IChib29sKSAkZW5hYmxlOwoJfQoKCS8qKgoJICogU2V0IHRoZSBsZW5ndGggb2YgdGltZSAoaW4gc2Vjb25kcykgdGhhdCB0aGUgY29udGVudHMgb2YgYSBmZWVkIHdpbGwgYmUKCSAqIGNhY2hlZAoJICoKCSAqIEBwYXJhbSBpbnQgJHNlY29uZHMgVGhlIGZlZWQgY29udGVudCBjYWNoZSBkdXJhdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2NhY2hlX2R1cmF0aW9uKCRzZWNvbmRzID0gMzYwMCkKCXsKCQkkdGhpcy0+Y2FjaGVfZHVyYXRpb24gPSAoaW50KSAkc2Vjb25kczsKCX0KCgkvKioKCSAqIFNldCB0aGUgbGVuZ3RoIG9mIHRpbWUgKGluIHNlY29uZHMpIHRoYXQgdGhlIGF1dG9kaXNjb3ZlcmVkIGZlZWQgVVJMIHdpbGwKCSAqIGJlIGNhY2hlZAoJICoKCSAqIEBwYXJhbSBpbnQgJHNlY29uZHMgVGhlIGF1dG9kaXNjb3ZlcmVkIGZlZWQgVVJMIGNhY2hlIGR1cmF0aW9uLgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2F1dG9kaXNjb3ZlcnlfY2FjaGVfZHVyYXRpb24oJHNlY29uZHMgPSA2MDQ4MDApCgl7CgkJJHRoaXMtPmF1dG9kaXNjb3ZlcnlfY2FjaGVfZHVyYXRpb24gPSAoaW50KSAkc2Vjb25kczsKCX0KCgkvKioKCSAqIFNldCB0aGUgZmlsZSBzeXN0ZW0gbG9jYXRpb24gd2hlcmUgdGhlIGNhY2hlZCBmaWxlcyBzaG91bGQgYmUgc3RvcmVkCgkgKgoJICogQHBhcmFtIHN0cmluZyAkbG9jYXRpb24gVGhlIGZpbGUgc3lzdGVtIGxvY2F0aW9uLgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2NhY2hlX2xvY2F0aW9uKCRsb2NhdGlvbiA9ICcuL2NhY2hlJykKCXsKCQkkdGhpcy0+Y2FjaGVfbG9jYXRpb24gPSAoc3RyaW5nKSAkbG9jYXRpb247Cgl9CgoJLyoqCgkgKiBTZXQgd2hldGhlciBmZWVkIGl0ZW1zIHNob3VsZCBiZSBzb3J0ZWQgaW50byByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIKCSAqCgkgKiBAcGFyYW0gYm9vbCAkZW5hYmxlIFNvcnQgYXMgcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgoJICovCglwdWJsaWMgZnVuY3Rpb24gZW5hYmxlX29yZGVyX2J5X2RhdGUoJGVuYWJsZSA9IHRydWUpCgl7CgkJJHRoaXMtPm9yZGVyX2J5X2RhdGUgPSAoYm9vbCkgJGVuYWJsZTsKCX0KCgkvKioKCSAqIFNldCB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHVzZWQgdG8gcGFyc2UgdGhlIGZlZWQKCSAqCgkgKiBUaGlzIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcgcmVwb3J0ZWQgYnkgdGhlIGZlZWQsIGhvd2V2ZXIgaXQgd2lsbCBmYWxsCgkgKiBiYWNrIHRvIHRoZSBub3JtYWwgZW5jb2RpbmcgZGV0ZWN0aW9uIGlmIHRoZSBvdmVycmlkZSBmYWlscwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIENoYXJhY3RlciBlbmNvZGluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2lucHV0X2VuY29kaW5nKCRlbmNvZGluZyA9IGZhbHNlKQoJewoJCWlmICgkZW5jb2RpbmcpCgkJewoJCQkkdGhpcy0+aW5wdXRfZW5jb2RpbmcgPSAoc3RyaW5nKSAkZW5jb2Rpbmc7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5pbnB1dF9lbmNvZGluZyA9IGZhbHNlOwoJCX0KCX0KCgkvKioKCSAqIFNldCBob3cgbXVjaCBmZWVkIGF1dG9kaXNjb3ZlcnkgdG8gZG8KCSAqCgkgKiBAc2VlIFNJTVBMRVBJRV9MT0NBVE9SX05PTkUKCSAqIEBzZWUgU0lNUExFUElFX0xPQ0FUT1JfQVVUT0RJU0NPVkVSWQoJICogQHNlZSBTSU1QTEVQSUVfTE9DQVRPUl9MT0NBTF9FWFRFTlNJT04KCSAqIEBzZWUgU0lNUExFUElFX0xPQ0FUT1JfTE9DQUxfQk9EWQoJICogQHNlZSBTSU1QTEVQSUVfTE9DQVRPUl9SRU1PVEVfRVhURU5TSU9OCgkgKiBAc2VlIFNJTVBMRVBJRV9MT0NBVE9SX1JFTU9URV9CT0RZCgkgKiBAc2VlIFNJTVBMRVBJRV9MT0NBVE9SX0FMTAoJICogQHBhcmFtIGludCAkbGV2ZWwgRmVlZCBBdXRvZGlzY292ZXJ5IExldmVsIChsZXZlbCBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgYWJvdmUgY29uc3RhbnRzLCBzZWUgYml0d2lzZSBPUiBvcGVyYXRvcikKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9hdXRvZGlzY292ZXJ5X2xldmVsKCRsZXZlbCA9IFNJTVBMRVBJRV9MT0NBVE9SX0FMTCkKCXsKCQkkdGhpcy0+YXV0b2Rpc2NvdmVyeSA9IChpbnQpICRsZXZlbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgY2xhc3MgcmVnaXN0cnkKCSAqCgkgKiBVc2UgdGhpcyB0byBvdmVycmlkZSBTaW1wbGVQaWUncyBkZWZhdWx0IGNsYXNzZXMKCSAqIEBzZWUgU2ltcGxlUGllX1JlZ2lzdHJ5CgkgKiBAcmV0dXJuIFNpbXBsZVBpZV9SZWdpc3RyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gJmdldF9yZWdpc3RyeSgpCgl7CgkJcmV0dXJuICR0aGlzLT5yZWdpc3RyeTsKCX0KCgkvKiojQCsKCSAqIFVzZWZ1bCB3aGVuIHlvdSBhcmUgb3ZlcmxvYWRpbmcgb3IgZXh0ZW5kaW5nIFNpbXBsZVBpZSdzIGRlZmF1bHQgY2xhc3Nlcy4KCSAqCgkgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgZ2V0X3JlZ2lzdHJ5KCl9IGluc3RlYWQKCSAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS5vb3A1LmJhc2ljLnBocCNsYW5ndWFnZS5vb3A1LmJhc2ljLmV4dGVuZHMgUEhQNSBleHRlbmRzIGRvY3VtZW50YXRpb24KCSAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIE5hbWUgb2YgY3VzdG9tIGNsYXNzCgkgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UKCSAqLwoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgZm9yIGNhY2hpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9jYWNoZV9jbGFzcygkY2xhc3MgPSAnU2ltcGxlUGllX0NhY2hlJykKCXsKCQlyZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5LT5yZWdpc3RlcignQ2FjaGUnLCAkY2xhc3MsIHRydWUpOwoJfQoKCS8qKgoJICogU2V0IHdoaWNoIGNsYXNzIFNpbXBsZVBpZSB1c2VzIGZvciBhdXRvLWRpc2NvdmVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2xvY2F0b3JfY2xhc3MoJGNsYXNzID0gJ1NpbXBsZVBpZV9Mb2NhdG9yJykKCXsKCQlyZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5LT5yZWdpc3RlcignTG9jYXRvcicsICRjbGFzcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgZm9yIFhNTCBwYXJzaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfcGFyc2VyX2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfUGFyc2VyJykKCXsKCQlyZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5LT5yZWdpc3RlcignUGFyc2VyJywgJGNsYXNzLCB0cnVlKTsKCX0KCgkvKioKCSAqIFNldCB3aGljaCBjbGFzcyBTaW1wbGVQaWUgdXNlcyBmb3IgcmVtb3RlIGZpbGUgZmV0Y2hpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9maWxlX2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfRmlsZScpCgl7CgkJcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+cmVnaXN0ZXIoJ0ZpbGUnLCAkY2xhc3MsIHRydWUpOwoJfQoKCS8qKgoJICogU2V0IHdoaWNoIGNsYXNzIFNpbXBsZVBpZSB1c2VzIGZvciBkYXRhIHNhbml0aXphdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3Nhbml0aXplX2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfU2FuaXRpemUnKQoJewoJCXJldHVybiAkdGhpcy0+cmVnaXN0cnktPnJlZ2lzdGVyKCdTYW5pdGl6ZScsICRjbGFzcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgZm9yIGhhbmRsaW5nIGZlZWQgaXRlbXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9pdGVtX2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfSXRlbScpCgl7CgkJcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+cmVnaXN0ZXIoJ0l0ZW0nLCAkY2xhc3MsIHRydWUpOwoJfQoKCS8qKgoJICogU2V0IHdoaWNoIGNsYXNzIFNpbXBsZVBpZSB1c2VzIGZvciBoYW5kbGluZyBhdXRob3IgZGF0YQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2F1dGhvcl9jbGFzcygkY2xhc3MgPSAnU2ltcGxlUGllX0F1dGhvcicpCgl7CgkJcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+cmVnaXN0ZXIoJ0F1dGhvcicsICRjbGFzcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgZm9yIGhhbmRsaW5nIGNhdGVnb3J5IGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9jYXRlZ29yeV9jbGFzcygkY2xhc3MgPSAnU2ltcGxlUGllX0NhdGVnb3J5JykKCXsKCQlyZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5LT5yZWdpc3RlcignQ2F0ZWdvcnknLCAkY2xhc3MsIHRydWUpOwoJfQoKCS8qKgoJICogU2V0IHdoaWNoIGNsYXNzIFNpbXBsZVBpZSB1c2VzIGZvciBmZWVkIGVuY2xvc3VyZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9lbmNsb3N1cmVfY2xhc3MoJGNsYXNzID0gJ1NpbXBsZVBpZV9FbmNsb3N1cmUnKQoJewoJCXJldHVybiAkdGhpcy0+cmVnaXN0cnktPnJlZ2lzdGVyKCdFbmNsb3N1cmUnLCAkY2xhc3MsIHRydWUpOwoJfQoKCS8qKgoJICogU2V0IHdoaWNoIGNsYXNzIFNpbXBsZVBpZSB1c2VzIGZvciBgPG1lZGlhOnRleHQ+YCBjYXB0aW9ucwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2NhcHRpb25fY2xhc3MoJGNsYXNzID0gJ1NpbXBsZVBpZV9DYXB0aW9uJykKCXsKCQlyZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5LT5yZWdpc3RlcignQ2FwdGlvbicsICRjbGFzcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgZm9yIGA8bWVkaWE6Y29weXJpZ2h0PmAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9jb3B5cmlnaHRfY2xhc3MoJGNsYXNzID0gJ1NpbXBsZVBpZV9Db3B5cmlnaHQnKQoJewoJCXJldHVybiAkdGhpcy0+cmVnaXN0cnktPnJlZ2lzdGVyKCdDb3B5cmlnaHQnLCAkY2xhc3MsIHRydWUpOwoJfQoKCS8qKgoJICogU2V0IHdoaWNoIGNsYXNzIFNpbXBsZVBpZSB1c2VzIGZvciBgPG1lZGlhOmNyZWRpdD5gCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfY3JlZGl0X2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfQ3JlZGl0JykKCXsKCQlyZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5LT5yZWdpc3RlcignQ3JlZGl0JywgJGNsYXNzLCB0cnVlKTsKCX0KCgkvKioKCSAqIFNldCB3aGljaCBjbGFzcyBTaW1wbGVQaWUgdXNlcyBmb3IgYDxtZWRpYTpyYXRpbmc+YAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3JhdGluZ19jbGFzcygkY2xhc3MgPSAnU2ltcGxlUGllX1JhdGluZycpCgl7CgkJcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+cmVnaXN0ZXIoJ1JhdGluZycsICRjbGFzcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgZm9yIGA8bWVkaWE6cmVzdHJpY3Rpb24+YAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3Jlc3RyaWN0aW9uX2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfUmVzdHJpY3Rpb24nKQoJewoJCXJldHVybiAkdGhpcy0+cmVnaXN0cnktPnJlZ2lzdGVyKCdSZXN0cmljdGlvbicsICRjbGFzcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgZm9yIGNvbnRlbnQtdHlwZSBzbmlmZmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2NvbnRlbnRfdHlwZV9zbmlmZmVyX2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfQ29udGVudF9UeXBlX1NuaWZmZXInKQoJewoJCXJldHVybiAkdGhpcy0+cmVnaXN0cnktPnJlZ2lzdGVyKCdDb250ZW50X1R5cGVfU25pZmZlcicsICRjbGFzcywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBTZXQgd2hpY2ggY2xhc3MgU2ltcGxlUGllIHVzZXMgaXRlbSBzb3VyY2VzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfc291cmNlX2NsYXNzKCRjbGFzcyA9ICdTaW1wbGVQaWVfU291cmNlJykKCXsKCQlyZXR1cm4gJHRoaXMtPnJlZ2lzdHJ5LT5yZWdpc3RlcignU291cmNlJywgJGNsYXNzLCB0cnVlKTsKCX0KCS8qKiNALSovCgoJLyoqCgkgKiBTZXQgdGhlIHVzZXIgYWdlbnQgc3RyaW5nCgkgKgoJICogQHBhcmFtIHN0cmluZyAkdWEgTmV3IHVzZXIgYWdlbnQgc3RyaW5nLgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3VzZXJhZ2VudCgkdWEgPSBTSU1QTEVQSUVfVVNFUkFHRU5UKQoJewoJCSR0aGlzLT51c2VyYWdlbnQgPSAoc3RyaW5nKSAkdWE7Cgl9CgoJLyoqCgkgKiBTZXQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY3JlYXRlIGNhY2hlIGZpbGVuYW1lIHdpdGgKCSAqCgkgKiBAcGFyYW0gbWl4ZWQgJGZ1bmN0aW9uIENhbGxiYWNrIGZ1bmN0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfY2FjaGVfbmFtZV9mdW5jdGlvbigkZnVuY3Rpb24gPSAnbWQ1JykKCXsKCQlpZiAoaXNfY2FsbGFibGUoJGZ1bmN0aW9uKSkKCQl7CgkJCSR0aGlzLT5jYWNoZV9uYW1lX2Z1bmN0aW9uID0gJGZ1bmN0aW9uOwoJCX0KCX0KCgkvKioKCSAqIFNldCBvcHRpb25zIHRvIG1ha2UgU1AgYXMgZmFzdCBhcyBwb3NzaWJsZQoJICoKCSAqIEZvcmdvZXMgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgZGF0YSBzYW5pdGl6YXRpb24gaW4gZmF2b3Igb2Ygc3BlZWQuIFRoaXMKCSAqIHR1cm5zIFNpbXBsZVBpZSBpbnRvIGEgZHVtYiBwYXJzZXIgb2YgZmVlZHMuCgkgKgoJICogQHBhcmFtIGJvb2wgJHNldCBXaGV0aGVyIHRvIHNldCB0aGVtIG9yIG5vdAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3N0dXBpZGx5X2Zhc3QoJHNldCA9IGZhbHNlKQoJewoJCWlmICgkc2V0KQoJCXsKCQkJJHRoaXMtPmVuYWJsZV9vcmRlcl9ieV9kYXRlKGZhbHNlKTsKCQkJJHRoaXMtPnJlbW92ZV9kaXYoZmFsc2UpOwoJCQkkdGhpcy0+c3RyaXBfY29tbWVudHMoZmFsc2UpOwoJCQkkdGhpcy0+c3RyaXBfaHRtbHRhZ3MoZmFsc2UpOwoJCQkkdGhpcy0+c3RyaXBfYXR0cmlidXRlcyhmYWxzZSk7CgkJCSR0aGlzLT5hZGRfYXR0cmlidXRlcyhmYWxzZSk7CgkJCSR0aGlzLT5zZXRfaW1hZ2VfaGFuZGxlcihmYWxzZSk7CgkJfQoJfQoKCS8qKgoJICogU2V0IG1heGltdW0gbnVtYmVyIG9mIGZlZWRzIHRvIGNoZWNrIHdpdGggYXV0b2Rpc2NvdmVyeQoJICoKCSAqIEBwYXJhbSBpbnQgJG1heCBNYXhpbXVtIG51bWJlciBvZiBmZWVkcyB0byBjaGVjawoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X21heF9jaGVja2VkX2ZlZWRzKCRtYXggPSAxMCkKCXsKCQkkdGhpcy0+bWF4X2NoZWNrZWRfZmVlZHMgPSAoaW50KSAkbWF4OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiByZW1vdmVfZGl2KCRlbmFibGUgPSB0cnVlKQoJewoJCSR0aGlzLT5zYW5pdGl6ZS0+cmVtb3ZlX2RpdigkZW5hYmxlKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc3RyaXBfaHRtbHRhZ3MoJHRhZ3MgPSAnJywgJGVuY29kZSA9IG51bGwpCgl7CgkJaWYgKCR0YWdzID09PSAnJykKCQl7CgkJCSR0YWdzID0gJHRoaXMtPnN0cmlwX2h0bWx0YWdzOwoJCX0KCQkkdGhpcy0+c2FuaXRpemUtPnN0cmlwX2h0bWx0YWdzKCR0YWdzKTsKCQlpZiAoJGVuY29kZSAhPT0gbnVsbCkKCQl7CgkJCSR0aGlzLT5zYW5pdGl6ZS0+ZW5jb2RlX2luc3RlYWRfb2Zfc3RyaXAoJHRhZ3MpOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gZW5jb2RlX2luc3RlYWRfb2Zfc3RyaXAoJGVuYWJsZSA9IHRydWUpCgl7CgkJJHRoaXMtPnNhbml0aXplLT5lbmNvZGVfaW5zdGVhZF9vZl9zdHJpcCgkZW5hYmxlKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc3RyaXBfYXR0cmlidXRlcygkYXR0cmlicyA9ICcnKQoJewoJCWlmICgkYXR0cmlicyA9PT0gJycpCgkJewoJCQkkYXR0cmlicyA9ICR0aGlzLT5zdHJpcF9hdHRyaWJ1dGVzOwoJCX0KCQkkdGhpcy0+c2FuaXRpemUtPnN0cmlwX2F0dHJpYnV0ZXMoJGF0dHJpYnMpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBhZGRfYXR0cmlidXRlcygkYXR0cmlicyA9ICcnKQoJewoJCWlmICgkYXR0cmlicyA9PT0gJycpCgkJewoJCQkkYXR0cmlicyA9ICR0aGlzLT5hZGRfYXR0cmlidXRlczsKCQl9CgkJJHRoaXMtPnNhbml0aXplLT5hZGRfYXR0cmlidXRlcygkYXR0cmlicyk7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIG91dHB1dCBlbmNvZGluZwoJICoKCSAqIEFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgU2ltcGxlUGllJ3Mgb3V0cHV0IHRvIG1hdGNoIHRoYXQgb2YgeW91ciB3ZWJwYWdlLgoJICogVGhpcyBpcyB1c2VmdWwgZm9yIHRpbWVzIHdoZW4geW91ciB3ZWJwYWdlcyBhcmUgbm90IGJlaW5nIHNlcnZlZCBhcwoJICogVVRGLTguIFRoaXMgc2V0dGluZyB3aWxsIGJlIG9iZXllZCBieSB7QHNlZSBoYW5kbGVfY29udGVudF90eXBlKCl9LCBhbmQKCSAqIGlzIHNpbWlsYXIgdG8ge0BzZWUgc2V0X2lucHV0X2VuY29kaW5nKCl9LgoJICoKCSAqIEl0IHNob3VsZCBiZSBub3RlZCwgaG93ZXZlciwgdGhhdCBub3QgYWxsIGNoYXJhY3RlciBlbmNvZGluZ3MgY2FuIHN1cHBvcnQKCSAqIGFsbCBjaGFyYWN0ZXJzLiBJZiB5b3VyIHBhZ2UgaXMgYmVpbmcgc2VydmVkIGFzIElTTy04ODU5LTEgYW5kIHlvdSB0cnkKCSAqIHRvIGRpc3BsYXkgYSBKYXBhbmVzZSBmZWVkLCB5b3UnbGwgbGlrZWx5IHNlZSBnYXJibGVkIGNoYXJhY3RlcnMuCgkgKiBCZWNhdXNlIG9mIHRoaXMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhhdCB5b3VyIHdlYnBhZ2VzCgkgKiBhcmUgc2VydmVkIGFzIFVURi04LgoJICoKCSAqIFRoZSBudW1iZXIgb2Ygc3VwcG9ydGVkIGNoYXJhY3RlciBlbmNvZGluZ3MgZGVwZW5kcyBvbiB3aGV0aGVyIHlvdXIgd2ViCgkgKiBob3N0IHN1cHBvcnRzIHtAbGluayBodHRwOi8vcGhwLm5ldC9tYnN0cmluZyBtYnN0cmluZ30sCgkgKiB7QGxpbmsgaHR0cDovL3BocC5uZXQvaWNvbnYgaWNvbnZ9LCBvciBib3RoLiBTZWUKCSAqIHtAbGluayBodHRwOi8vc2ltcGxlcGllLm9yZy93aWtpL2ZhcS9TdXBwb3J0ZWRfQ2hhcmFjdGVyX0VuY29kaW5nc30gZm9yCgkgKiBtb3JlIGluZm9ybWF0aW9uLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfb3V0cHV0X2VuY29kaW5nKCRlbmNvZGluZyA9ICdVVEYtOCcpCgl7CgkJJHRoaXMtPnNhbml0aXplLT5zZXRfb3V0cHV0X2VuY29kaW5nKCRlbmNvZGluZyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHN0cmlwX2NvbW1lbnRzKCRzdHJpcCA9IGZhbHNlKQoJewoJCSR0aGlzLT5zYW5pdGl6ZS0+c3RyaXBfY29tbWVudHMoJHN0cmlwKTsKCX0KCgkvKioKCSAqIFNldCBlbGVtZW50L2F0dHJpYnV0ZSBrZXkvdmFsdWUgcGFpcnMgb2YgSFRNTCBhdHRyaWJ1dGVzCgkgKiBjb250YWluaW5nIFVSTHMgdGhhdCBuZWVkIHRvIGJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZSBmZWVkCgkgKgoJICogRGVmYXVsdHMgdG8gfGF8QGhyZWYsIHxhcmVhfEBocmVmLCB8YmxvY2txdW90ZXxAY2l0ZSwgfGRlbHxAY2l0ZSwKCSAqIHxmb3JtfEBhY3Rpb24sIHxpbWd8QGxvbmdkZXNjLCB8aW1nfEBzcmMsIHxpbnB1dHxAc3JjLCB8aW5zfEBjaXRlLAoJICogfHF8QGNpdGUKCSAqCgkgKiBAc2luY2UgMS4wCgkgKiBAcGFyYW0gYXJyYXl8bnVsbCAkZWxlbWVudF9hdHRyaWJ1dGUgRWxlbWVudC9hdHRyaWJ1dGUga2V5L3ZhbHVlIHBhaXJzLCBudWxsIGZvciBkZWZhdWx0CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfdXJsX3JlcGxhY2VtZW50cygkZWxlbWVudF9hdHRyaWJ1dGUgPSBudWxsKQoJewoJCSR0aGlzLT5zYW5pdGl6ZS0+c2V0X3VybF9yZXBsYWNlbWVudHMoJGVsZW1lbnRfYXR0cmlidXRlKTsKCX0KCgkvKioKCSAqIFNldCB0aGUgaGFuZGxlciB0byBlbmFibGUgdGhlIGRpc3BsYXkgb2YgY2FjaGVkIGltYWdlcy4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRwYWdlIFdlYi1hY2Nlc3NpYmxlIHBhdGggdG8gdGhlIGhhbmRsZXJfaW1hZ2UucGhwIGZpbGUuCgkgKiBAcGFyYW0gc3RyaW5nICRxcyBUaGUgcXVlcnkgc3RyaW5nIHRoYXQgdGhlIHZhbHVlIHNob3VsZCBiZSBwYXNzZWQgdG8uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfaW1hZ2VfaGFuZGxlcigkcGFnZSA9IGZhbHNlLCAkcXMgPSAnaScpCgl7CgkJaWYgKCRwYWdlICE9PSBmYWxzZSkKCQl7CgkJCSR0aGlzLT5zYW5pdGl6ZS0+c2V0X2ltYWdlX2hhbmRsZXIoJHBhZ2UgLiAnPycgLiAkcXMgLiAnPScpOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+aW1hZ2VfaGFuZGxlciA9ICcnOwoJCX0KCX0KCgkvKioKCSAqIFNldCB0aGUgbGltaXQgZm9yIGl0ZW1zIHJldHVybmVkIHBlci1mZWVkIHdpdGggbXVsdGlmZWVkcwoJICoKCSAqIEBwYXJhbSBpbnRlZ2VyICRsaW1pdCBUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuLgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X2l0ZW1fbGltaXQoJGxpbWl0ID0gMCkKCXsKCQkkdGhpcy0+aXRlbV9saW1pdCA9IChpbnQpICRsaW1pdDsKCX0KCgkvKioKCSAqIEVuYWJsZSB0aHJvd2luZyBleGNlcHRpb25zCgkgKgoJICogQHBhcmFtIGJvb2xlYW4gJGVuYWJsZSBTaG91bGQgd2UgdGhyb3cgZXhjZXB0aW9ucywgb3IgdXNlIHRoZSBvbGQtc3R5bGUgZXJyb3IgcHJvcGVydHk/CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBlbmFibGVfZXhjZXB0aW9ucygkZW5hYmxlID0gdHJ1ZSkKCXsKCQkkdGhpcy0+ZW5hYmxlX2V4Y2VwdGlvbnMgPSAkZW5hYmxlOwoJfQoKCS8qKgoJICogSW5pdGlhbGl6ZSB0aGUgZmVlZCBvYmplY3QKCSAqCgkgKiBUaGlzIGlzIHdoYXQgbWFrZXMgZXZlcnl0aGluZyBoYXBwZW4uIFBlcmlvZC4gVGhpcyBpcyB3aGVyZSBhbGwgb2YgdGhlCgkgKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgZ2V0IHByb2Nlc3NlZCwgZmVlZHMgYXJlIGZldGNoZWQsIGNhY2hlZCwgYW5kCgkgKiBwYXJzZWQsIGFuZCBhbGwgb2YgdGhhdCBvdGhlciBnb29kIHN0dWZmLgoJICoKCSAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZQoJICovCglwdWJsaWMgZnVuY3Rpb24gaW5pdCgpCgl7CgkJLy8gQ2hlY2sgYWJzb2x1dGUgYmFyZSBtaW5pbXVtIHJlcXVpcmVtZW50cy4KCQlpZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ3htbCcpIHx8ICFleHRlbnNpb25fbG9hZGVkKCdwY3JlJykpCgkJewoJCQkkdGhpcy0+ZXJyb3IgPSAnWE1MIG9yIFBDUkUgZXh0ZW5zaW9ucyBub3QgbG9hZGVkISc7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy8gVGhlbiBjaGVjayB0aGUgeG1sIGV4dGVuc2lvbiBpcyBzYW5lIChpLmUuLCBsaWJ4bWwgMi43LnggaXNzdWUgb24gUEhQIDwgNS4yLjkgYW5kIGxpYnhtbCAyLjcuMCB0byAyLjcuMiBvbiBhbnkgdmVyc2lvbikgaWYgd2UgZG9uJ3QgaGF2ZSB4bWxyZWFkZXIuCgkJZWxzZWlmICghZXh0ZW5zaW9uX2xvYWRlZCgneG1scmVhZGVyJykpCgkJewoJCQlzdGF0aWMgJHhtbF9pc19zYW5lID0gbnVsbDsKCQkJaWYgKCR4bWxfaXNfc2FuZSA9PT0gbnVsbCkKCQkJewoJCQkJJHBhcnNlcl9jaGVjayA9IHhtbF9wYXJzZXJfY3JlYXRlKCk7CgkJCQl4bWxfcGFyc2VfaW50b19zdHJ1Y3QoJHBhcnNlcl9jaGVjaywgJzxmb28+JmFtcDs8L2Zvbz4nLCAkdmFsdWVzKTsKCQkJCXhtbF9wYXJzZXJfZnJlZSgkcGFyc2VyX2NoZWNrKTsKCQkJCSR4bWxfaXNfc2FuZSA9IGlzc2V0KCR2YWx1ZXNbMF1bJ3ZhbHVlJ10pOwoJCQl9CgkJCWlmICghJHhtbF9pc19zYW5lKQoJCQl7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgoJCS8vIFRoZSBkZWZhdWx0IHNhbml0aXplIGNsYXNzIGdldHMgc2V0IGluIHRoZSBjb25zdHJ1Y3RvciwgY2hlY2sgaWYgaXQgaGFzCgkJLy8gY2hhbmdlZC4KCQlpZiAoJHRoaXMtPnJlZ2lzdHJ5LT5nZXRfY2xhc3MoJ1Nhbml0aXplJykgIT09ICdTaW1wbGVQaWVfU2FuaXRpemUnKSB7CgkJCSR0aGlzLT5zYW5pdGl6ZSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdTYW5pdGl6ZScpOwoJCX0KCQlpZiAobWV0aG9kX2V4aXN0cygkdGhpcy0+c2FuaXRpemUsICdzZXRfcmVnaXN0cnknKSkKCQl7CgkJCSR0aGlzLT5zYW5pdGl6ZS0+c2V0X3JlZ2lzdHJ5KCR0aGlzLT5yZWdpc3RyeSk7CgkJfQoKCQkvLyBQYXNzIHdoYXRldmVyIHdhcyBzZXQgd2l0aCBjb25maWcgb3B0aW9ucyBvdmVyIHRvIHRoZSBzYW5pdGl6ZXIuCgkJLy8gUGFzcyB0aGUgY2xhc3NlcyBpbiBmb3IgbGVnYWN5IHN1cHBvcnQ7IG5ldyBjbGFzc2VzIHNob3VsZCB1c2UgdGhlIHJlZ2lzdHJ5IGluc3RlYWQKCQkkdGhpcy0+c2FuaXRpemUtPnBhc3NfY2FjaGVfZGF0YSgkdGhpcy0+Y2FjaGUsICR0aGlzLT5jYWNoZV9sb2NhdGlvbiwgJHRoaXMtPmNhY2hlX25hbWVfZnVuY3Rpb24sICR0aGlzLT5yZWdpc3RyeS0+Z2V0X2NsYXNzKCdDYWNoZScpKTsKCQkkdGhpcy0+c2FuaXRpemUtPnBhc3NfZmlsZV9kYXRhKCR0aGlzLT5yZWdpc3RyeS0+Z2V0X2NsYXNzKCdGaWxlJyksICR0aGlzLT50aW1lb3V0LCAkdGhpcy0+dXNlcmFnZW50LCAkdGhpcy0+Zm9yY2VfZnNvY2tvcGVuLCAkdGhpcy0+Y3VybF9vcHRpb25zKTsKCgkJaWYgKCFlbXB0eSgkdGhpcy0+bXVsdGlmZWVkX3VybCkpCgkJewoJCQkkaSA9IDA7CgkJCSRzdWNjZXNzID0gMDsKCQkJJHRoaXMtPm11bHRpZmVlZF9vYmplY3RzID0gYXJyYXkoKTsKCQkJJHRoaXMtPmVycm9yID0gYXJyYXkoKTsKCQkJZm9yZWFjaCAoJHRoaXMtPm11bHRpZmVlZF91cmwgYXMgJHVybCkKCQkJewoJCQkJJHRoaXMtPm11bHRpZmVlZF9vYmplY3RzWyRpXSA9IGNsb25lICR0aGlzOwoJCQkJJHRoaXMtPm11bHRpZmVlZF9vYmplY3RzWyRpXS0+c2V0X2ZlZWRfdXJsKCR1cmwpOwoJCQkJJHNpbmdsZV9zdWNjZXNzID0gJHRoaXMtPm11bHRpZmVlZF9vYmplY3RzWyRpXS0+aW5pdCgpOwoJCQkJJHN1Y2Nlc3MgfD0gJHNpbmdsZV9zdWNjZXNzOwoJCQkJaWYgKCEkc2luZ2xlX3N1Y2Nlc3MpCgkJCQl7CgkJCQkJJHRoaXMtPmVycm9yWyRpXSA9ICR0aGlzLT5tdWx0aWZlZWRfb2JqZWN0c1skaV0tPmVycm9yKCk7CgkJCQl9CgkJCQkkaSsrOwoJCQl9CgkJCXJldHVybiAoYm9vbCkgJHN1Y2Nlc3M7CgkJfQoJCWVsc2VpZiAoJHRoaXMtPmZlZWRfdXJsID09PSBudWxsICYmICR0aGlzLT5yYXdfZGF0YSA9PT0gbnVsbCkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCSR0aGlzLT5lcnJvciA9IG51bGw7CgkJJHRoaXMtPmRhdGEgPSBhcnJheSgpOwoJCSR0aGlzLT5jaGVja19tb2RpZmllZCA9IGZhbHNlOwoJCSR0aGlzLT5tdWx0aWZlZWRfb2JqZWN0cyA9IGFycmF5KCk7CgkJJGNhY2hlID0gZmFsc2U7CgoJCWlmICgkdGhpcy0+ZmVlZF91cmwgIT09IG51bGwpCgkJewoJCQkkcGFyc2VkX2ZlZWRfdXJsID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ3BhcnNlX3VybCcsIGFycmF5KCR0aGlzLT5mZWVkX3VybCkpOwoKCQkJLy8gRGVjaWRlIHdoZXRoZXIgdG8gZW5hYmxlIGNhY2hpbmcKCQkJaWYgKCR0aGlzLT5jYWNoZSAmJiAkcGFyc2VkX2ZlZWRfdXJsWydzY2hlbWUnXSAhPT0gJycpCgkJCXsKCQkJCSR1cmwgPSAkdGhpcy0+ZmVlZF91cmwgLiAoJHRoaXMtPmZvcmNlX2ZlZWQgPyAnI2ZvcmNlX2ZlZWQnIDogJycpOwoJCQkJJGNhY2hlID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdDYWNoZScsICdnZXRfaGFuZGxlcicsIGFycmF5KCR0aGlzLT5jYWNoZV9sb2NhdGlvbiwgY2FsbF91c2VyX2Z1bmMoJHRoaXMtPmNhY2hlX25hbWVfZnVuY3Rpb24sICR1cmwpLCAnc3BjJykpOwoJCQl9CgoJCQkvLyBGZXRjaCB0aGUgZGF0YSB2aWEgU2ltcGxlUGllX0ZpbGUgaW50byAkdGhpcy0+cmF3X2RhdGEKCQkJaWYgKCgkZmV0Y2hlZCA9ICR0aGlzLT5mZXRjaF9kYXRhKCRjYWNoZSkpID09PSB0cnVlKQoJCQl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQllbHNlaWYgKCRmZXRjaGVkID09PSBmYWxzZSkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQlsaXN0KCRoZWFkZXJzLCAkc25pZmZlZCkgPSAkZmV0Y2hlZDsKCQl9CgoJCS8vIEVtcHR5IHJlc3BvbnNlIGNoZWNrCgkJaWYoZW1wdHkoJHRoaXMtPnJhd19kYXRhKSl7CgkJCSR0aGlzLT5lcnJvciA9ICJBIGZlZWQgY291bGQgbm90IGJlIGZvdW5kIGF0IGAkdGhpcy0+ZmVlZF91cmxgLiBFbXB0eSBib2R5LiI7CgkJCSR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdlcnJvcicsIGFycmF5KCR0aGlzLT5lcnJvciwgRV9VU0VSX05PVElDRSwgX19GSUxFX18sIF9fTElORV9fKSk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCS8vIFNldCB1cCBhcnJheSBvZiBwb3NzaWJsZSBlbmNvZGluZ3MKCQkkZW5jb2RpbmdzID0gYXJyYXkoKTsKCgkJLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIGlucHV0IGhhcyBiZWVuIG92ZXJyaWRkZW4uCgkJaWYgKCR0aGlzLT5pbnB1dF9lbmNvZGluZyAhPT0gZmFsc2UpCgkJewoJCQkkZW5jb2RpbmdzW10gPSBzdHJ0b3VwcGVyKCR0aGlzLT5pbnB1dF9lbmNvZGluZyk7CgkJfQoKCQkkYXBwbGljYXRpb25fdHlwZXMgPSBhcnJheSgnYXBwbGljYXRpb24veG1sJywgJ2FwcGxpY2F0aW9uL3htbC1kdGQnLCAnYXBwbGljYXRpb24veG1sLWV4dGVybmFsLXBhcnNlZC1lbnRpdHknKTsKCQkkdGV4dF90eXBlcyA9IGFycmF5KCd0ZXh0L3htbCcsICd0ZXh0L3htbC1leHRlcm5hbC1wYXJzZWQtZW50aXR5Jyk7CgoJCS8vIFJGQyAzMDIzIChvbmx5IGFwcGxpZXMgdG8gc25pZmZlZCBjb250ZW50KQoJCWlmIChpc3NldCgkc25pZmZlZCkpCgkJewoJCQlpZiAoaW5fYXJyYXkoJHNuaWZmZWQsICRhcHBsaWNhdGlvbl90eXBlcykgfHwgc3Vic3RyKCRzbmlmZmVkLCAwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nICYmIHN1YnN0cigkc25pZmZlZCwgLTQpID09PSAnK3htbCcpCgkJCXsKCQkJCWlmIChpc3NldCgkaGVhZGVyc1snY29udGVudC10eXBlJ10pICYmIHByZWdfbWF0Y2goJy87XHgyMD9jaGFyc2V0PShbXjtdKikvaScsICRoZWFkZXJzWydjb250ZW50LXR5cGUnXSwgJGNoYXJzZXQpKQoJCQkJewoJCQkJCSRlbmNvZGluZ3NbXSA9IHN0cnRvdXBwZXIoJGNoYXJzZXRbMV0pOwoJCQkJfQoJCQkJJGVuY29kaW5ncyA9IGFycmF5X21lcmdlKCRlbmNvZGluZ3MsICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICd4bWxfZW5jb2RpbmcnLCBhcnJheSgkdGhpcy0+cmF3X2RhdGEsICYkdGhpcy0+cmVnaXN0cnkpKSk7CgkJCQkkZW5jb2RpbmdzW10gPSAnVVRGLTgnOwoJCQl9CgkJCWVsc2VpZiAoaW5fYXJyYXkoJHNuaWZmZWQsICR0ZXh0X3R5cGVzKSB8fCBzdWJzdHIoJHNuaWZmZWQsIDAsIDUpID09PSAndGV4dC8nICYmIHN1YnN0cigkc25pZmZlZCwgLTQpID09PSAnK3htbCcpCgkJCXsKCQkJCWlmIChpc3NldCgkaGVhZGVyc1snY29udGVudC10eXBlJ10pICYmIHByZWdfbWF0Y2goJy87XHgyMD9jaGFyc2V0PShbXjtdKikvaScsICRoZWFkZXJzWydjb250ZW50LXR5cGUnXSwgJGNoYXJzZXQpKQoJCQkJewoJCQkJCSRlbmNvZGluZ3NbXSA9IHN0cnRvdXBwZXIoJGNoYXJzZXRbMV0pOwoJCQkJfQoJCQkJJGVuY29kaW5nc1tdID0gJ1VTLUFTQ0lJJzsKCQkJfQoJCQkvLyBUZXh0IE1JTUUtdHlwZSBkZWZhdWx0CgkJCWVsc2VpZiAoc3Vic3RyKCRzbmlmZmVkLCAwLCA1KSA9PT0gJ3RleHQvJykKCQkJewoJCQkJJGVuY29kaW5nc1tdID0gJ1VURi04JzsKCQkJfQoJCX0KCgkJLy8gRmFsbGJhY2sgdG8gWE1MIDEuMCBBcHBlbmRpeCBGLjEvVVRGLTgvSVNPLTg4NTktMQoJCSRlbmNvZGluZ3MgPSBhcnJheV9tZXJnZSgkZW5jb2RpbmdzLCAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAneG1sX2VuY29kaW5nJywgYXJyYXkoJHRoaXMtPnJhd19kYXRhLCAmJHRoaXMtPnJlZ2lzdHJ5KSkpOwoJCSRlbmNvZGluZ3NbXSA9ICdVVEYtOCc7CgkJJGVuY29kaW5nc1tdID0gJ0lTTy04ODU5LTEnOwoKCQkvLyBUaGVyZSdzIG5vIHBvaW50IGluIHRyeWluZyBhbiBlbmNvZGluZyB0d2ljZQoJCSRlbmNvZGluZ3MgPSBhcnJheV91bmlxdWUoJGVuY29kaW5ncyk7CgoJCS8vIExvb3AgdGhyb3VnaCBlYWNoIHBvc3NpYmxlIGVuY29kaW5nLCB0aWxsIHdlIHJldHVybiBzb21ldGhpbmcsIG9yIHJ1biBvdXQgb2YgcG9zc2liaWxpdGllcwoJCWZvcmVhY2ggKCRlbmNvZGluZ3MgYXMgJGVuY29kaW5nKQoJCXsKCQkJLy8gQ2hhbmdlIHRoZSBlbmNvZGluZyB0byBVVEYtOCAoYXMgd2UgYWx3YXlzIHVzZSBVVEYtOCBpbnRlcm5hbGx5KQoJCQlpZiAoJHV0ZjhfZGF0YSA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdjaGFuZ2VfZW5jb2RpbmcnLCBhcnJheSgkdGhpcy0+cmF3X2RhdGEsICRlbmNvZGluZywgJ1VURi04JykpKQoJCQl7CgkJCQkvLyBDcmVhdGUgbmV3IHBhcnNlcgoJCQkJJHBhcnNlciA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdQYXJzZXInKTsKCgkJCQkvLyBJZiBpdCdzIHBhcnNlZCBmaW5lCgkJCQlpZiAoJHBhcnNlci0+cGFyc2UoJHV0ZjhfZGF0YSwgJ1VURi04JywgJHRoaXMtPnBlcm1hbmVudF91cmwpKQoJCQkJewoJCQkJCSR0aGlzLT5kYXRhID0gJHBhcnNlci0+Z2V0X2RhdGEoKTsKCQkJCQlpZiAoISgkdGhpcy0+Z2V0X3R5cGUoKSAmIH5TSU1QTEVQSUVfVFlQRV9OT05FKSkKCQkJCQl7CgkJCQkJCSR0aGlzLT5lcnJvciA9ICJBIGZlZWQgY291bGQgbm90IGJlIGZvdW5kIGF0IGAkdGhpcy0+ZmVlZF91cmxgLiBUaGlzIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIFJTUyBvciBBdG9tIGZlZWQuIjsKCQkJCQkJJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2Vycm9yJywgYXJyYXkoJHRoaXMtPmVycm9yLCBFX1VTRVJfTk9USUNFLCBfX0ZJTEVfXywgX19MSU5FX18pKTsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCgkJCQkJaWYgKGlzc2V0KCRoZWFkZXJzKSkKCQkJCQl7CgkJCQkJCSR0aGlzLT5kYXRhWydoZWFkZXJzJ10gPSAkaGVhZGVyczsKCQkJCQl9CgkJCQkJJHRoaXMtPmRhdGFbJ2J1aWxkJ10gPSBTSU1QTEVQSUVfQlVJTEQ7CgoJCQkJCS8vIENhY2hlIHRoZSBmaWxlIGlmIGNhY2hpbmcgaXMgZW5hYmxlZAoJCQkJCWlmICgkY2FjaGUgJiYgISRjYWNoZS0+c2F2ZSgkdGhpcykpCgkJCQkJewoJCQkJCQl0cmlnZ2VyX2Vycm9yKCIkdGhpcy0+Y2FjaGVfbG9jYXRpb24gaXMgbm90IHdyaXRhYmxlLiBNYWtlIHN1cmUgeW91J3ZlIHNldCB0aGUgY29ycmVjdCByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBhbmQgdGhhdCB0aGUgbG9jYXRpb24gaXMgc2VydmVyLXdyaXRhYmxlLiIsIEVfVVNFUl9XQVJOSU5HKTsKCQkJCQl9CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgoJCWlmIChpc3NldCgkcGFyc2VyKSkKCQl7CgkJCS8vIFdlIGhhdmUgYW4gZXJyb3IsIGp1c3Qgc2V0IFNpbXBsZVBpZV9NaXNjOjplcnJvciB0byBpdCBhbmQgcXVpdAoJCQkkdGhpcy0+ZXJyb3IgPSAkdGhpcy0+ZmVlZF91cmw7CgkJCSR0aGlzLT5lcnJvciAuPSBzcHJpbnRmKCcgaXMgaW52YWxpZCBYTUwsIGxpa2VseSBkdWUgdG8gaW52YWxpZCBjaGFyYWN0ZXJzLiBYTUwgZXJyb3I6ICVzIGF0IGxpbmUgJWQsIGNvbHVtbiAlZCcsICRwYXJzZXItPmdldF9lcnJvcl9zdHJpbmcoKSwgJHBhcnNlci0+Z2V0X2N1cnJlbnRfbGluZSgpLCAkcGFyc2VyLT5nZXRfY3VycmVudF9jb2x1bW4oKSk7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5lcnJvciA9ICdUaGUgZGF0YSBjb3VsZCBub3QgYmUgY29udmVydGVkIHRvIFVURi04Lic7CgkJCWlmICghZXh0ZW5zaW9uX2xvYWRlZCgnbWJzdHJpbmcnKSAmJiAhZXh0ZW5zaW9uX2xvYWRlZCgnaWNvbnYnKSAmJiAhY2xhc3NfZXhpc3RzKCdcVUNvbnZlcnRlcicpKSB7CgkJCQkkdGhpcy0+ZXJyb3IgLj0gJyBZb3UgTVVTVCBoYXZlIGVpdGhlciB0aGUgaWNvbnYsIG1ic3RyaW5nIG9yIGludGwgKFBIUCA1LjUrKSBleHRlbnNpb24gaW5zdGFsbGVkIGFuZCBlbmFibGVkLic7CgkJCX0gZWxzZSB7CgkJCQkkbWlzc2luZ0V4dGVuc2lvbnMgPSBhcnJheSgpOwoJCQkJaWYgKCFleHRlbnNpb25fbG9hZGVkKCdpY29udicpKSB7CgkJCQkJJG1pc3NpbmdFeHRlbnNpb25zW10gPSAnaWNvbnYnOwoJCQkJfQoJCQkJaWYgKCFleHRlbnNpb25fbG9hZGVkKCdtYnN0cmluZycpKSB7CgkJCQkJJG1pc3NpbmdFeHRlbnNpb25zW10gPSAnbWJzdHJpbmcnOwoJCQkJfQoJCQkJaWYgKCFjbGFzc19leGlzdHMoJ1xVQ29udmVydGVyJykpIHsKCQkJCQkkbWlzc2luZ0V4dGVuc2lvbnNbXSA9ICdpbnRsIChQSFAgNS41KyknOwoJCQkJfQoJCQkJJHRoaXMtPmVycm9yIC49ICcgVHJ5IGluc3RhbGxpbmcvZW5hYmxpbmcgdGhlICcgLiBpbXBsb2RlKCcgb3IgJywgJG1pc3NpbmdFeHRlbnNpb25zKSAuICcgZXh0ZW5zaW9uLic7CgkJCX0KCQl9CgoJCSR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdlcnJvcicsIGFycmF5KCR0aGlzLT5lcnJvciwgRV9VU0VSX05PVElDRSwgX19GSUxFX18sIF9fTElORV9fKSk7CgoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIEZldGNoIHRoZSBkYXRhIHZpYSBTaW1wbGVQaWVfRmlsZQoJICoKCSAqIElmIHRoZSBkYXRhIGlzIGFscmVhZHkgY2FjaGVkLCBhdHRlbXB0IHRvIGZldGNoIGl0IGZyb20gdGhlcmUgaW5zdGVhZAoJICogQHBhcmFtIFNpbXBsZVBpZV9DYWNoZXxmYWxzZSAkY2FjaGUgQ2FjaGUgaGFuZGxlciwgb3IgZmFsc2UgdG8gbm90IGxvYWQgZnJvbSB0aGUgY2FjaGUKCSAqIEByZXR1cm4gYXJyYXl8dHJ1ZSBSZXR1cm5zIHRydWUgaWYgdGhlIGRhdGEgd2FzIGxvYWRlZCBmcm9tIHRoZSBjYWNoZSwgb3IgYW4gYXJyYXkgb2YgSFRUUCBoZWFkZXJzIGFuZCBzbmlmZmVkIHR5cGUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoX2RhdGEoJiRjYWNoZSkKCXsKCQkvLyBJZiBpdCdzIGVuYWJsZWQsIHVzZSB0aGUgY2FjaGUKCQlpZiAoJGNhY2hlKQoJCXsKCQkJLy8gTG9hZCB0aGUgQ2FjaGUKCQkJJHRoaXMtPmRhdGEgPSAkY2FjaGUtPmxvYWQoKTsKCQkJaWYgKCFlbXB0eSgkdGhpcy0+ZGF0YSkpCgkJCXsKCQkJCS8vIElmIHRoZSBjYWNoZSBpcyBmb3IgYW4gb3V0ZGF0ZWQgYnVpbGQgb2YgU2ltcGxlUGllCgkJCQlpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWydidWlsZCddKSB8fCAkdGhpcy0+ZGF0YVsnYnVpbGQnXSAhPT0gU0lNUExFUElFX0JVSUxEKQoJCQkJewoJCQkJCSRjYWNoZS0+dW5saW5rKCk7CgkJCQkJJHRoaXMtPmRhdGEgPSBhcnJheSgpOwoJCQkJfQoJCQkJLy8gSWYgd2UndmUgaGl0IGEgY29sbGlzaW9uIGp1c3QgcmVydW4gaXQgd2l0aCBjYWNoaW5nIGRpc2FibGVkCgkJCQllbHNlaWYgKGlzc2V0KCR0aGlzLT5kYXRhWyd1cmwnXSkgJiYgJHRoaXMtPmRhdGFbJ3VybCddICE9PSAkdGhpcy0+ZmVlZF91cmwpCgkJCQl7CgkJCQkJJGNhY2hlID0gZmFsc2U7CgkJCQkJJHRoaXMtPmRhdGEgPSBhcnJheSgpOwoJCQkJfQoJCQkJLy8gSWYgd2UndmUgZ290IGEgbm9uIGZlZWRfdXJsIHN0b3JlZCAoaWYgdGhlIHBhZ2UgaXNuJ3QgYWN0dWFsbHkgYSBmZWVkLCBvciBpcyBhIHJlZGlyZWN0KSB1c2UgdGhhdCBVUkwuCgkJCQllbHNlaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydmZWVkX3VybCddKSkKCQkJCXsKCQkJCQkvLyBJZiB0aGUgYXV0b2Rpc2NvdmVyeSBjYWNoZSBpcyBzdGlsbCB2YWxpZCB1c2UgaXQuCgkJCQkJaWYgKCRjYWNoZS0+bXRpbWUoKSArICR0aGlzLT5hdXRvZGlzY292ZXJ5X2NhY2hlX2R1cmF0aW9uID4gdGltZSgpKQoJCQkJCXsKCQkJCQkJLy8gRG8gbm90IG5lZWQgdG8gZG8gZmVlZCBhdXRvZGlzY292ZXJ5IHlldC4KCQkJCQkJaWYgKCR0aGlzLT5kYXRhWydmZWVkX3VybCddICE9PSAkdGhpcy0+ZGF0YVsndXJsJ10pCgkJCQkJCXsKCQkJCQkJCSR0aGlzLT5zZXRfZmVlZF91cmwoJHRoaXMtPmRhdGFbJ2ZlZWRfdXJsJ10pOwoJCQkJCQkJcmV0dXJuICR0aGlzLT5pbml0KCk7CgkJCQkJCX0KCgkJCQkJCSRjYWNoZS0+dW5saW5rKCk7CgkJCQkJCSR0aGlzLT5kYXRhID0gYXJyYXkoKTsKCQkJCQl9CgkJCQl9CgkJCQkvLyBDaGVjayBpZiB0aGUgY2FjaGUgaGFzIGJlZW4gdXBkYXRlZAoJCQkJZWxzZWlmICgkY2FjaGUtPm10aW1lKCkgKyAkdGhpcy0+Y2FjaGVfZHVyYXRpb24gPCB0aW1lKCkpCgkJCQl7CgkJCQkJLy8gV2FudCB0byBrbm93IGlmIHdlIHRyaWVkIHRvIHNlbmQgbGFzdC1tb2RpZmllZCBhbmQvb3IgZXRhZyBoZWFkZXJzCgkJCQkJLy8gd2hlbiByZXF1ZXN0aW5nIHRoaXMgZmlsZS4gKE5vdGUgdGhhdCBpdCdzIHVwIHRvIHRoZSBmaWxlIHRvCgkJCQkJLy8gc3VwcG9ydCB0aGlzLCBidXQgd2UgZG9uJ3QgYWx3YXlzIHNlbmQgdGhlIGhlYWRlcnMgZWl0aGVyLikKCQkJCQkkdGhpcy0+Y2hlY2tfbW9kaWZpZWQgPSB0cnVlOwoJCQkJCWlmIChpc3NldCgkdGhpcy0+ZGF0YVsnaGVhZGVycyddWydsYXN0LW1vZGlmaWVkJ10pIHx8IGlzc2V0KCR0aGlzLT5kYXRhWydoZWFkZXJzJ11bJ2V0YWcnXSkpCgkJCQkJewoJCQkJCQkkaGVhZGVycyA9IGFycmF5KAoJCQkJCQkJJ0FjY2VwdCcgPT4gJ2FwcGxpY2F0aW9uL2F0b20reG1sLCBhcHBsaWNhdGlvbi9yc3MreG1sLCBhcHBsaWNhdGlvbi9yZGYreG1sO3E9MC45LCBhcHBsaWNhdGlvbi94bWw7cT0wLjgsIHRleHQveG1sO3E9MC44LCB0ZXh0L2h0bWw7cT0wLjcsIHVua25vd24vdW5rbm93bjtxPTAuMSwgYXBwbGljYXRpb24vdW5rbm93bjtxPTAuMSwgKi8qO3E9MC4xJywKCQkJCQkJKTsKCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydoZWFkZXJzJ11bJ2xhc3QtbW9kaWZpZWQnXSkpCgkJCQkJCXsKCQkJCQkJCSRoZWFkZXJzWydpZi1tb2RpZmllZC1zaW5jZSddID0gJHRoaXMtPmRhdGFbJ2hlYWRlcnMnXVsnbGFzdC1tb2RpZmllZCddOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkdGhpcy0+ZGF0YVsnaGVhZGVycyddWydldGFnJ10pKQoJCQkJCQl7CgkJCQkJCQkkaGVhZGVyc1snaWYtbm9uZS1tYXRjaCddID0gJHRoaXMtPmRhdGFbJ2hlYWRlcnMnXVsnZXRhZyddOwoJCQkJCQl9CgoJCQkJCQkkZmlsZSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdGaWxlJywgYXJyYXkoJHRoaXMtPmZlZWRfdXJsLCAkdGhpcy0+dGltZW91dC8xMCwgNSwgJGhlYWRlcnMsICR0aGlzLT51c2VyYWdlbnQsICR0aGlzLT5mb3JjZV9mc29ja29wZW4sICR0aGlzLT5jdXJsX29wdGlvbnMpKTsKCgkJCQkJCWlmICgkZmlsZS0+c3VjY2VzcykKCQkJCQkJewoJCQkJCQkJaWYgKCRmaWxlLT5zdGF0dXNfY29kZSA9PT0gMzA0KQoJCQkJCQkJewoJCQkJCQkJCS8vIFNldCByYXdfZGF0YSB0byBmYWxzZSBoZXJlIHRvbywgdG8gc2lnbmlmeSB0aGF0IHRoZSBjYWNoZQoJCQkJCQkJCS8vIGlzIHN0aWxsIHZhbGlkLgoJCQkJCQkJCSR0aGlzLT5yYXdfZGF0YSA9IGZhbHNlOwoJCQkJCQkJCSRjYWNoZS0+dG91Y2goKTsKCQkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSR0aGlzLT5jaGVja19tb2RpZmllZCA9IGZhbHNlOwoJCQkJCQkJaWYoJHRoaXMtPmZvcmNlX2NhY2hlX2ZhbGxiYWNrKQoJCQkJCQkJewoJCQkJCQkJCSRjYWNoZS0+dG91Y2goKTsKCQkJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQkJCX0KCgkJCQkJCQl1bnNldCgkZmlsZSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkvLyBJZiB0aGUgY2FjaGUgaXMgc3RpbGwgdmFsaWQsIGp1c3QgcmV0dXJuIHRydWUKCQkJCWVsc2UKCQkJCXsKCQkJCQkkdGhpcy0+cmF3X2RhdGEgPSBmYWxzZTsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJfQoJCQkvLyBJZiB0aGUgY2FjaGUgaXMgZW1wdHksIGRlbGV0ZSBpdAoJCQllbHNlCgkJCXsKCQkJCSRjYWNoZS0+dW5saW5rKCk7CgkJCQkkdGhpcy0+ZGF0YSA9IGFycmF5KCk7CgkJCX0KCQl9CgkJLy8gSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIHRoZSBmaWxlIChpdCdsbCBvbmx5IGV4aXN0IGlmIHdlJ3ZlIG9wZW5lZCBpdCB0byBjaGVjayBpZiB0aGUgY2FjaGUgaGFzIGJlZW4gbW9kaWZpZWQpLCBvcGVuIGl0LgoJCWlmICghaXNzZXQoJGZpbGUpKQoJCXsKCQkJaWYgKCR0aGlzLT5maWxlIGluc3RhbmNlb2YgU2ltcGxlUGllX0ZpbGUgJiYgJHRoaXMtPmZpbGUtPnVybCA9PT0gJHRoaXMtPmZlZWRfdXJsKQoJCQl7CgkJCQkkZmlsZSA9JiAkdGhpcy0+ZmlsZTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRoZWFkZXJzID0gYXJyYXkoCgkJCQkJJ0FjY2VwdCcgPT4gJ2FwcGxpY2F0aW9uL2F0b20reG1sLCBhcHBsaWNhdGlvbi9yc3MreG1sLCBhcHBsaWNhdGlvbi9yZGYreG1sO3E9MC45LCBhcHBsaWNhdGlvbi94bWw7cT0wLjgsIHRleHQveG1sO3E9MC44LCB0ZXh0L2h0bWw7cT0wLjcsIHVua25vd24vdW5rbm93bjtxPTAuMSwgYXBwbGljYXRpb24vdW5rbm93bjtxPTAuMSwgKi8qO3E9MC4xJywKCQkJCSk7CgkJCQkkZmlsZSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdGaWxlJywgYXJyYXkoJHRoaXMtPmZlZWRfdXJsLCAkdGhpcy0+dGltZW91dCwgNSwgJGhlYWRlcnMsICR0aGlzLT51c2VyYWdlbnQsICR0aGlzLT5mb3JjZV9mc29ja29wZW4sICR0aGlzLT5jdXJsX29wdGlvbnMpKTsKCQkJfQoJCX0KCQkvLyBJZiB0aGUgZmlsZSBjb25uZWN0aW9uIGhhcyBhbiBlcnJvciwgc2V0IFNpbXBsZVBpZTo6ZXJyb3IgdG8gdGhhdCBhbmQgcXVpdAoJCWlmICghJGZpbGUtPnN1Y2Nlc3MgJiYgISgkZmlsZS0+bWV0aG9kICYgU0lNUExFUElFX0ZJTEVfU09VUkNFX1JFTU9URSA9PT0gMCB8fCAoJGZpbGUtPnN0YXR1c19jb2RlID09PSAyMDAgfHwgJGZpbGUtPnN0YXR1c19jb2RlID4gMjA2ICYmICRmaWxlLT5zdGF0dXNfY29kZSA8IDMwMCkpKQoJCXsKCQkJJHRoaXMtPmVycm9yID0gJGZpbGUtPmVycm9yOwoJCQlyZXR1cm4gIWVtcHR5KCR0aGlzLT5kYXRhKTsKCQl9CgoJCWlmICghJHRoaXMtPmZvcmNlX2ZlZWQpCgkJewoJCQkvLyBDaGVjayBpZiB0aGUgc3VwcGxpZWQgVVJMIGlzIGEgZmVlZCwgaWYgaXQgaXNuJ3QsIGxvb2sgZm9yIGl0LgoJCQkkbG9jYXRlID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0xvY2F0b3InLCBhcnJheSgmJGZpbGUsICR0aGlzLT50aW1lb3V0LCAkdGhpcy0+dXNlcmFnZW50LCAkdGhpcy0+bWF4X2NoZWNrZWRfZmVlZHMsICR0aGlzLT5mb3JjZV9mc29ja29wZW4sICR0aGlzLT5jdXJsX29wdGlvbnMpKTsKCgkJCWlmICghJGxvY2F0ZS0+aXNfZmVlZCgkZmlsZSkpCgkJCXsKCQkJCSRjb3B5U3RhdHVzQ29kZSA9ICRmaWxlLT5zdGF0dXNfY29kZTsKCQkJCSRjb3B5Q29udGVudFR5cGUgPSAkZmlsZS0+aGVhZGVyc1snY29udGVudC10eXBlJ107CgkJCQl0cnkKCQkJCXsKCQkJCQkkbWljcm9mb3JtYXRzID0gZmFsc2U7CgkJCQkJaWYgKGNsYXNzX2V4aXN0cygnRE9NWHBhdGgnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ01mMlxwYXJzZScpKSB7CgkJCQkJCSRkb2MgPSBuZXcgRE9NRG9jdW1lbnQoKTsKCQkJCQkJQCRkb2MtPmxvYWRIVE1MKCRmaWxlLT5ib2R5KTsKCQkJCQkJJHhwYXRoID0gbmV3IERPTVhwYXRoKCRkb2MpOwoJCQkJCQkvLyBDaGVjayBmb3IgYm90aCBoLWZlZWQgYW5kIGgtZW50cnksIGFzIGJvdGggYSBmZWVkIHdpdGggbm8gZW50cmllcwoJCQkJCQkvLyBhbmQgYSBsaXN0IG9mIGVudHJpZXMgd2l0aG91dCBhbiBoLWZlZWQgd3JhcHBlciBhcmUgYm90aCB2YWxpZC4KCQkJCQkJJHF1ZXJ5ID0gJy8vKltjb250YWlucyhjb25jYXQoIiAiLCBAY2xhc3MsICIgIiksICIgaC1mZWVkICIpIG9yICcuCgkJCQkJCQknY29udGFpbnMoY29uY2F0KCIgIiwgQGNsYXNzLCAiICIpLCAiIGgtZW50cnkgIildJzsKCQkJCQkJJHJlc3VsdCA9ICR4cGF0aC0+cXVlcnkoJHF1ZXJ5KTsKCQkJCQkJJG1pY3JvZm9ybWF0cyA9ICRyZXN1bHQtPmxlbmd0aCAhPT0gMDsKCQkJCQl9CgkJCQkJLy8gTm93IGFsc28gZG8gZmVlZCBkaXNjb3ZlcnksIGJ1dCBpZiBtaWNyb2Zvcm1hdHMgd2VyZSBmb3VuZCBkb24ndAoJCQkJCS8vIG92ZXJ3cml0ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiBmaWxlLgoJCQkJCSRkaXNjb3ZlcmVkID0gJGxvY2F0ZS0+ZmluZCgkdGhpcy0+YXV0b2Rpc2NvdmVyeSwKCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFsbF9kaXNjb3ZlcmVkX2ZlZWRzKTsKCQkJCQlpZiAoJG1pY3JvZm9ybWF0cykKCQkJCQl7CgkJCQkJCWlmICgkaHViID0gJGxvY2F0ZS0+Z2V0X3JlbF9saW5rKCdodWInKSkKCQkJCQkJewoJCQkJCQkJJHNlbGYgPSAkbG9jYXRlLT5nZXRfcmVsX2xpbmsoJ3NlbGYnKTsKCQkJCQkJCSR0aGlzLT5zdG9yZV9saW5rcygkZmlsZSwgJGh1YiwgJHNlbGYpOwoJCQkJCQl9CgkJCQkJCS8vIFB1c2ggdGhlIGN1cnJlbnQgZmlsZSBvbnRvIGFsbF9kaXNjb3ZlcmVkIGZlZWRzIHNvIHRoZSB1c2VyIGNhbgoJCQkJCQkvLyBiZSBzaG93biB0aGlzIGFzIG9uZSBvZiB0aGUgb3B0aW9ucy4KCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5hbGxfZGlzY292ZXJlZF9mZWVkcykpIHsKCQkJCQkJCSR0aGlzLT5hbGxfZGlzY292ZXJlZF9mZWVkc1tdID0gJGZpbGU7CgkJCQkJCX0KCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJaWYgKCRkaXNjb3ZlcmVkKQoJCQkJCQl7CgkJCQkJCQkkZmlsZSA9ICRkaXNjb3ZlcmVkOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJLy8gV2UgbmVlZCB0byB1bnNldCB0aGlzIHNvIHRoYXQgaWYgU2ltcGxlUGllOjpzZXRfZmlsZSgpIGhhcwoJCQkJCQkJLy8gYmVlbiBjYWxsZWQgdGhhdCBvYmplY3QgaXMgdW50b3VjaGVkCgkJCQkJCQl1bnNldCgkZmlsZSk7CgkJCQkJCQkkdGhpcy0+ZXJyb3IgPSAiQSBmZWVkIGNvdWxkIG5vdCBiZSBmb3VuZCBhdCBgJHRoaXMtPmZlZWRfdXJsYDsgdGhlIHN0YXR1cyBjb2RlIGlzIGAkY29weVN0YXR1c0NvZGVgIGFuZCBjb250ZW50LXR5cGUgaXMgYCRjb3B5Q29udGVudFR5cGVgIjsKCQkJCQkJCSR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdlcnJvcicsIGFycmF5KCR0aGlzLT5lcnJvciwgRV9VU0VSX05PVElDRSwgX19GSUxFX18sIF9fTElORV9fKSk7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQljYXRjaCAoU2ltcGxlUGllX0V4Y2VwdGlvbiAkZSkKCQkJCXsKCQkJCQkvLyBXZSBuZWVkIHRvIHVuc2V0IHRoaXMgc28gdGhhdCBpZiBTaW1wbGVQaWU6OnNldF9maWxlKCkgaGFzIGJlZW4gY2FsbGVkIHRoYXQgb2JqZWN0IGlzIHVudG91Y2hlZAoJCQkJCXVuc2V0KCRmaWxlKTsKCQkJCQkvLyBUaGlzIGlzIHVzdWFsbHkgYmVjYXVzZSBET01Eb2N1bWVudCBkb2Vzbid0IGV4aXN0CgkJCQkJJHRoaXMtPmVycm9yID0gJGUtPmdldE1lc3NhZ2UoKTsKCQkJCQkkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnZXJyb3InLCBhcnJheSgkdGhpcy0+ZXJyb3IsIEVfVVNFUl9OT1RJQ0UsICRlLT5nZXRGaWxlKCksICRlLT5nZXRMaW5lKCkpKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQlpZiAoJGNhY2hlKQoJCQkJewoJCQkJCSR0aGlzLT5kYXRhID0gYXJyYXkoJ3VybCcgPT4gJHRoaXMtPmZlZWRfdXJsLCAnZmVlZF91cmwnID0+ICRmaWxlLT51cmwsICdidWlsZCcgPT4gU0lNUExFUElFX0JVSUxEKTsKCQkJCQlpZiAoISRjYWNoZS0+c2F2ZSgkdGhpcykpCgkJCQkJewoJCQkJCQl0cmlnZ2VyX2Vycm9yKCIkdGhpcy0+Y2FjaGVfbG9jYXRpb24gaXMgbm90IHdyaXRhYmxlLiBNYWtlIHN1cmUgeW91J3ZlIHNldCB0aGUgY29ycmVjdCByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRoLCBhbmQgdGhhdCB0aGUgbG9jYXRpb24gaXMgc2VydmVyLXdyaXRhYmxlLiIsIEVfVVNFUl9XQVJOSU5HKTsKCQkJCQl9CgkJCQkJJGNhY2hlID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdDYWNoZScsICdnZXRfaGFuZGxlcicsIGFycmF5KCR0aGlzLT5jYWNoZV9sb2NhdGlvbiwgY2FsbF91c2VyX2Z1bmMoJHRoaXMtPmNhY2hlX25hbWVfZnVuY3Rpb24sICRmaWxlLT51cmwpLCAnc3BjJykpOwoJCQkJfQoJCQl9CgkJCSR0aGlzLT5mZWVkX3VybCA9ICRmaWxlLT51cmw7CgkJCSRsb2NhdGUgPSBudWxsOwoJCX0KCgkJJHRoaXMtPnJhd19kYXRhID0gJGZpbGUtPmJvZHk7CgkJJHRoaXMtPnBlcm1hbmVudF91cmwgPSAkZmlsZS0+cGVybWFuZW50X3VybDsKCQkkaGVhZGVycyA9ICRmaWxlLT5oZWFkZXJzOwoJCSRzbmlmZmVyID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NvbnRlbnRfVHlwZV9TbmlmZmVyJywgYXJyYXkoJiRmaWxlKSk7CgkJJHNuaWZmZWQgPSAkc25pZmZlci0+Z2V0X3R5cGUoKTsKCgkJcmV0dXJuIGFycmF5KCRoZWFkZXJzLCAkc25pZmZlZCk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBvY2N1cmVkIGVycm9yCgkgKgoJICogQHJldHVybiBzdHJpbmd8YXJyYXkgRXJyb3IgbWVzc2FnZSwgb3IgYXJyYXkgb2YgbWVzc2FnZXMgZm9yIG11bHRpZmVlZHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGVycm9yKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmVycm9yOwoJfQoKCS8qKgoJICogR2V0IHRoZSByYXcgWE1MCgkgKgoJICogVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgb2xkIGAkZmVlZC0+ZW5hYmxlX3htbF9kdW1wKHRydWUpYCwgYnV0IHJldHVybnMKCSAqIHRoZSBkYXRhIGluc3RlYWQgb2YgcHJpbnRpbmcgaXQuCgkgKgoJICogQHJldHVybiBzdHJpbmd8Ym9vbGVhbiBSYXcgWE1MIGRhdGEsIGZhbHNlIGlmIHRoZSBjYWNoZSBpcyB1c2VkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfcmF3X2RhdGEoKQoJewoJCXJldHVybiAkdGhpcy0+cmF3X2RhdGE7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGNoYXJhY3RlciBlbmNvZGluZyB1c2VkIGZvciBvdXRwdXQKCSAqCgkgKiBAc2luY2UgUHJldmlldyBSZWxlYXNlCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2VuY29kaW5nKCkKCXsKCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplLT5vdXRwdXRfZW5jb2Rpbmc7Cgl9CgoJLyoqCgkgKiBTZW5kIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIHdpdGggY29ycmVjdCBlbmNvZGluZwoJICoKCSAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgU2ltcGxlUGllLWVuYWJsZWQgcGFnZSBpcyBiZWluZyBzZXJ2ZWQgd2l0aAoJICogdGhlIGNvcnJlY3Qge0BsaW5rIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvIG1pbWUtdHlwZX0KCSAqIGFuZCBjaGFyYWN0ZXIgZW5jb2RpbmcgSFRUUCBoZWFkZXJzIChjaGFyYWN0ZXIgZW5jb2RpbmcgZGV0ZXJtaW5lZCBieSB0aGUKCSAqIHtAc2VlIHNldF9vdXRwdXRfZW5jb2Rpbmd9IGNvbmZpZyBvcHRpb24pLgoJICoKCSAqIFRoaXMgd29uJ3Qgd29yayBwcm9wZXJseSBpZiBhbnkgY29udGVudCBvciB3aGl0ZXNwYWNlIGhhcyBhbHJlYWR5IGJlZW4KCSAqIHNlbnQgdG8gdGhlIGJyb3dzZXIsIGJlY2F1c2UgaXQgcmVsaWVzIG9uIFBIUCdzCgkgKiB7QGxpbmsgaHR0cDovL3BocC5uZXQvaGVhZGVyIGhlYWRlcigpfSBmdW5jdGlvbiwgYW5kIHRoZXNlIGFyZSB0aGUKCSAqIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggdGhlIGZ1bmN0aW9uIHdvcmtzLgoJICoKCSAqIEJlY2F1c2UgaXQncyBzZXR0aW5nIHRoZXNlIHNldHRpbmdzIGZvciB0aGUgZW50aXJlIHBhZ2UgKGFzIGlzIHRoZSBuYXR1cmUKCSAqIG9mIEhUVFAgaGVhZGVycyksIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlIHBlciBwYWdlIChhZ2FpbiwgYXQgdGhlCgkgKiB0b3ApLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJG1pbWUgTUlNRSB0eXBlIHRvIHNlcnZlIHRoZSBwYWdlIGFzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBoYW5kbGVfY29udGVudF90eXBlKCRtaW1lID0gJ3RleHQvaHRtbCcpCgl7CgkJaWYgKCFoZWFkZXJzX3NlbnQoKSkKCQl7CgkJCSRoZWFkZXIgPSAiQ29udGVudC10eXBlOiAkbWltZTsiOwoJCQlpZiAoJHRoaXMtPmdldF9lbmNvZGluZygpKQoJCQl7CgkJCQkkaGVhZGVyIC49ICcgY2hhcnNldD0nIC4gJHRoaXMtPmdldF9lbmNvZGluZygpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGhlYWRlciAuPSAnIGNoYXJzZXQ9VVRGLTgnOwoJCQl9CgkJCWhlYWRlcigkaGVhZGVyKTsKCQl9Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIGZlZWQKCSAqCgkgKiBUaGlzIHJldHVybnMgYSBTSU1QTEVQSUVfVFlQRV8qIGNvbnN0YW50LCB3aGljaCBjYW4gYmUgdGVzdGVkIGFnYWluc3QKCSAqIHVzaW5nIHtAbGluayBodHRwOi8vcGhwLm5ldC9sYW5ndWFnZS5vcGVyYXRvcnMuYml0d2lzZSBiaXR3aXNlIG9wZXJhdG9yc30KCSAqCgkgKiBAc2luY2UgMC44ICh1c2FnZSBjaGFuZ2VkIHRvIHVzaW5nIGNvbnN0YW50cyBpbiAxLjApCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX05PTkUgVW5rbm93bi4KCSAqIEBzZWUgU0lNUExFUElFX1RZUEVfUlNTXzA5MCBSU1MgMC45MC4KCSAqIEBzZWUgU0lNUExFUElFX1RZUEVfUlNTXzA5MV9ORVRTQ0FQRSBSU1MgMC45MSAoTmV0c2NhcGUpLgoJICogQHNlZSBTSU1QTEVQSUVfVFlQRV9SU1NfMDkxX1VTRVJMQU5EIFJTUyAwLjkxIChVc2VybGFuZCkuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX1JTU18wOTEgUlNTIDAuOTEuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX1JTU18wOTIgUlNTIDAuOTIuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX1JTU18wOTMgUlNTIDAuOTMuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX1JTU18wOTQgUlNTIDAuOTQuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX1JTU18xMCBSU1MgMS4wLgoJICogQHNlZSBTSU1QTEVQSUVfVFlQRV9SU1NfMjAgUlNTIDIuMC54LgoJICogQHNlZSBTSU1QTEVQSUVfVFlQRV9SU1NfUkRGIFJERi1iYXNlZCBSU1MuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX1JTU19TWU5ESUNBVElPTiBOb24tUkRGLWJhc2VkIFJTUyAodHJ1bHkgaW50ZW5kZWQgYXMgc3luZGljYXRpb24gZm9ybWF0KS4KCSAqIEBzZWUgU0lNUExFUElFX1RZUEVfUlNTX0FMTCBBbnkgdmVyc2lvbiBvZiBSU1MuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX0FUT01fMDMgQXRvbSAwLjMuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX0FUT01fMTAgQXRvbSAxLjAuCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX0FUT01fQUxMIEFueSB2ZXJzaW9uIG9mIEF0b20uCgkgKiBAc2VlIFNJTVBMRVBJRV9UWVBFX0FMTCBBbnkga25vd24vc3VwcG9ydGVkIGZlZWQgdHlwZS4KCSAqIEByZXR1cm4gaW50IFNJTVBMRVBJRV9UWVBFXyogY29uc3RhbnQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF90eXBlKCkKCXsKCQlpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyd0eXBlJ10pKQoJCXsKCQkJJHRoaXMtPmRhdGFbJ3R5cGUnXSA9IFNJTVBMRVBJRV9UWVBFX0FMTDsKCQkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ2ZlZWQnXSkpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0eXBlJ10gJj0gU0lNUExFUElFX1RZUEVfQVRPTV8xMDsKCQkJfQoJCQllbHNlaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2ZlZWQnXSkpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0eXBlJ10gJj0gU0lNUExFUElFX1RZUEVfQVRPTV8wMzsKCQkJfQoJCQllbHNlaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUkRGXVsnUkRGJ10pKQoJCQl7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMF1bJ2NoYW5uZWwnXSkKCQkJCXx8IGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUkRGXVsnUkRGJ11bMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTBdWydpbWFnZSddKQoJCQkJfHwgaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMF1bJ2l0ZW0nXSkKCQkJCXx8IGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUkRGXVsnUkRGJ11bMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTBdWyd0ZXh0aW5wdXQnXSkpCgkJCQl7CgkJCQkJJHRoaXMtPmRhdGFbJ3R5cGUnXSAmPSBTSU1QTEVQSUVfVFlQRV9SU1NfMTA7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18wOTBdWydjaGFubmVsJ10pCgkJCQl8fCBpc3NldCgkdGhpcy0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JERl1bJ1JERiddWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MF1bJ2ltYWdlJ10pCgkJCQl8fCBpc3NldCgkdGhpcy0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JERl1bJ1JERiddWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MF1bJ2l0ZW0nXSkKCQkJCXx8IGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUkRGXVsnUkRGJ11bMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMDkwXVsndGV4dGlucHV0J10pKQoJCQkJewoJCQkJCSR0aGlzLT5kYXRhWyd0eXBlJ10gJj0gU0lNUExFUElFX1RZUEVfUlNTXzA5MDsKCQkJCX0KCQkJfQoJCQllbHNlaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwXVsncnNzJ10pKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsndHlwZSddICY9IFNJTVBMRVBJRV9UWVBFX1JTU19BTEw7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydyc3MnXVswXVsnYXR0cmlicyddWycnXVsndmVyc2lvbiddKSkKCQkJCXsKCQkJCQlzd2l0Y2ggKHRyaW0oJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydyc3MnXVswXVsnYXR0cmlicyddWycnXVsndmVyc2lvbiddKSkKCQkJCQl7CgkJCQkJCWNhc2UgJzAuOTEnOgoJCQkJCQkJJHRoaXMtPmRhdGFbJ3R5cGUnXSAmPSBTSU1QTEVQSUVfVFlQRV9SU1NfMDkxOwoJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwXVsncnNzJ11bMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydza2lwaG91cnMnXVsnaG91ciddWzBdWydkYXRhJ10pKQoJCQkJCQkJewoJCQkJCQkJCXN3aXRjaCAodHJpbSgkdGhpcy0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMF1bJ3JzcyddWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwXVsnc2tpcGhvdXJzJ11bJ2hvdXInXVswXVsnZGF0YSddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCWNhc2UgJzAnOgoJCQkJCQkJCQkJJHRoaXMtPmRhdGFbJ3R5cGUnXSAmPSBTSU1QTEVQSUVfVFlQRV9SU1NfMDkxX05FVFNDQVBFOwoJCQkJCQkJCQkJYnJlYWs7CgoJCQkJCQkJCQljYXNlICcyNCc6CgkJCQkJCQkJCQkkdGhpcy0+ZGF0YVsndHlwZSddICY9IFNJTVBMRVBJRV9UWVBFX1JTU18wOTFfVVNFUkxBTkQ7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCgkJCQkJCWNhc2UgJzAuOTInOgoJCQkJCQkJJHRoaXMtPmRhdGFbJ3R5cGUnXSAmPSBTSU1QTEVQSUVfVFlQRV9SU1NfMDkyOwoJCQkJCQkJYnJlYWs7CgoJCQkJCQljYXNlICcwLjkzJzoKCQkJCQkJCSR0aGlzLT5kYXRhWyd0eXBlJ10gJj0gU0lNUExFUElFX1RZUEVfUlNTXzA5MzsKCQkJCQkJCWJyZWFrOwoKCQkJCQkJY2FzZSAnMC45NCc6CgkJCQkJCQkkdGhpcy0+ZGF0YVsndHlwZSddICY9IFNJTVBMRVBJRV9UWVBFX1JTU18wOTQ7CgkJCQkJCQlicmVhazsKCgkJCQkJCWNhc2UgJzIuMCc6CgkJCQkJCQkkdGhpcy0+ZGF0YVsndHlwZSddICY9IFNJTVBMRVBJRV9UWVBFX1JTU18yMDsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0eXBlJ10gPSBTSU1QTEVQSUVfVFlQRV9OT05FOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+ZGF0YVsndHlwZSddOwoJfQoKCS8qKgoJICogR2V0IHRoZSBVUkwgZm9yIHRoZSBmZWVkCgkgKgoJICogV2hlbiB0aGUgJ3Blcm1hbmVudCcgbW9kZSBpcyBlbmFibGVkLCByZXR1cm5zIHRoZSBvcmlnaW5hbCBmZWVkIFVSTCwKCSAqIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhbiBgSFRUUCAzMDEgTW92ZWQgUGVybWFuZW50bHlgIHN0YXR1cyByZXNwb25zZSwKCSAqIGluIHdoaWNoIGNhc2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCByZWRpcmVjdGlvbiBpcyByZXR1cm5lZC4KCSAqCgkgKiBXaGVuIHRoZSAncGVybWFuZW50JyBtb2RlIGlzIGRpc2FibGVkIChkZWZhdWx0KSwKCSAqIG1heSBvciBtYXkgbm90IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBVUkwgcGFzc2VkIHRvIHtAc2VlIHNldF9mZWVkX3VybCgpfSwKCSAqIGRlcGVuZGluZyBvbiB3aGV0aGVyIGF1dG8tZGlzY292ZXJ5IHdhcyB1c2VkLCBhbmQgd2hldGhlciB0aGVyZSB3ZXJlCgkgKiBhbnkgcmVkaXJlY3RzIGFsb25nIHRoZSB3YXkuCgkgKgoJICogQHNpbmNlIFByZXZpZXcgUmVsZWFzZSAocHJldmlvdXNseSBjYWxsZWQgYGdldF9mZWVkX3VybCgpYCBzaW5jZSBTaW1wbGVQaWUgMC44LikKCSAqIEB0b2RvIFN1cHBvcnQgPGl0dW5lczpuZXctZmVlZC11cmw+CgkgKiBAdG9kbyBBbHNvLCB8YXRvbTpsaW5rfEByZWw9c2VsZgoJICogQHBhcmFtIGJvb2wgJHBlcm1hbmVudCBQZXJtYW5lbnQgbW9kZSB0byByZXR1cm4gb25seSB0aGUgb3JpZ2luYWwgVVJMIG9yIHRoZSBmaXJzdCByZWRpcmVjdGlvbgoJICogaWZmIGl0IGlzIGEgMzAxIHJlZGlyZWN0aW9uCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzdWJzY3JpYmVfdXJsKCRwZXJtYW5lbnQgPSBmYWxzZSkKCXsKCQlpZiAoJHBlcm1hbmVudCkKCQl7CgkJCWlmICgkdGhpcy0+cGVybWFuZW50X3VybCAhPT0gbnVsbCkKCQkJewoJCQkJLy8gc2FuaXRpemUgZW5jb2RlcyBhbXBlcnNhbmRzIHdoaWNoIGFyZSByZXF1aXJlZCB3aGVuIHVzZWQgaW4gYSB1cmwuCgkJCQlyZXR1cm4gc3RyX3JlcGxhY2UoJyZhbXA7JywgJyYnLAoJCQkJICAgICAgICAgICAgICAgICAgICR0aGlzLT5zYW5pdGl6ZSgkdGhpcy0+cGVybWFuZW50X3VybCwKCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lNUExFUElFX0NPTlNUUlVDVF9JUkkpKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlpZiAoJHRoaXMtPmZlZWRfdXJsICE9PSBudWxsKQoJCQl7CgkJCQlyZXR1cm4gc3RyX3JlcGxhY2UoJyZhbXA7JywgJyYnLAoJCQkJICAgICAgICAgICAgICAgICAgICR0aGlzLT5zYW5pdGl6ZSgkdGhpcy0+ZmVlZF91cmwsCgkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKSk7CgkJCX0KCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgZGF0YSBmb3IgYW4gZmVlZC1sZXZlbCBlbGVtZW50CgkgKgoJICogVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBnZXQgYWNjZXNzIHRvIEFOWSBlbGVtZW50L2F0dHJpYnV0ZSB0aGF0IGlzIGEKCSAqIHN1Yi1lbGVtZW50IG9mIHRoZSBvcGVuaW5nIGZlZWQgdGFnLgoJICoKCSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW5kZXhlZCBhcnJheSBvZiBlbGVtZW50cyBtYXRjaGluZyB0aGUgZ2l2ZW4KCSAqIG5hbWVzcGFjZSBhbmQgdGFnIG5hbWUuIEVhY2ggZWxlbWVudCBoYXMgYGF0dHJpYnNgLCBgZGF0YWAgYW5kIGBjaGlsZGAKCSAqIHN1YmtleXMuIEZvciBgYXR0cmlic2AgYW5kIGBjaGlsZGAsIHRoZXNlIGNvbnRhaW4gbmFtZXNwYWNlIHN1YmtleXMuCgkgKiBgYXR0cmlic2AgdGhlbiBoYXMgb25lIGxldmVsIG9mIGFzc29jaWF0aXZlIG5hbWUgPT4gdmFsdWUgZGF0YSAod2hlcmUKCSAqIGB2YWx1ZWAgaXMgYSBzdHJpbmcpIGFmdGVyIHRoZSBuYW1lc3BhY2UuIGBjaGlsZGAgaGFzIHRhZy1pbmRleGVkIGtleXMKCSAqIGFmdGVyIHRoZSBuYW1lc3BhY2UsIGVhY2ggbWVtYmVyIG9mIHdoaWNoIGlzIGFuIGluZGV4ZWQgYXJyYXkgbWF0Y2hpbmcKCSAqIHRoaXMgc2FtZSBmb3JtYXQuCgkgKgoJICogRm9yIGV4YW1wbGU6CgkgKiA8cHJlPgoJICogLy8gVGhpcyBpcyBwcm9iYWJseSBhIGJhZCBleGFtcGxlIGJlY2F1c2Ugd2UgYWxyZWFkeSBzdXBwb3J0CgkgKiAvLyA8bWVkaWE6Y29udGVudD4gbmF0aXZlbHksIGJ1dCBpdCBzaG93cyB5b3UgaG93IHRvIHBhcnNlIHRocm91Z2gKCSAqIC8vIHRoZSBub2Rlcy4KCSAqICRncm91cCA9ICRpdGVtLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1MsICdncm91cCcpOwoJICogJGNvbnRlbnQgPSAkZ3JvdXBbMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NvbnRlbnQnXTsKCSAqICRmaWxlID0gJGNvbnRlbnRbMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddOwoJICogZWNobyAkZmlsZTsKCSAqIDwvcHJlPgoJICoKCSAqIEBzaW5jZSAxLjAKCSAqIEBzZWUgaHR0cDovL3NpbXBsZXBpZS5vcmcvd2lraS9mYXEvc3VwcG9ydGVkX3htbF9uYW1lc3BhY2VzCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgVGhlIFVSTCBvZiB0aGUgWE1MIG5hbWVzcGFjZSBvZiB0aGUgZWxlbWVudHMgeW91J3JlIHRyeWluZyB0byBhY2Nlc3MKCSAqIEBwYXJhbSBzdHJpbmcgJHRhZyBUYWcgbmFtZQoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZlZWRfdGFncygkbmFtZXNwYWNlLCAkdGFnKQoJewoJCSR0eXBlID0gJHRoaXMtPmdldF90eXBlKCk7CgkJaWYgKCR0eXBlICYgU0lNUExFUElFX1RZUEVfQVRPTV8xMCkKCQl7CgkJCWlmIChpc3NldCgkdGhpcy0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydmZWVkJ11bMF1bJ2NoaWxkJ11bJG5hbWVzcGFjZV1bJHRhZ10pKQoJCQl7CgkJCQlyZXR1cm4gJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnZmVlZCddWzBdWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddOwoJCQl9CgkJfQoJCWlmICgkdHlwZSAmIFNJTVBMRVBJRV9UWVBFX0FUT01fMDMpCgkJewoJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnZmVlZCddWzBdWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddKSkKCQkJewoJCQkJcmV0dXJuICR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2ZlZWQnXVswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXTsKCQkJfQoJCX0KCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfVFlQRV9SU1NfUkRGKQoJCXsKCQkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUkRGXVsnUkRGJ11bMF1bJ2NoaWxkJ11bJG5hbWVzcGFjZV1bJHRhZ10pKQoJCQl7CgkJCQlyZXR1cm4gJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXTsKCQkJfQoJCX0KCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfVFlQRV9SU1NfU1lORElDQVRJT04pCgkJewoJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydyc3MnXVswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXSkpCgkJCXsKCQkJCXJldHVybiAkdGhpcy0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMF1bJ3JzcyddWzBdWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddOwoJCQl9CgkJfQoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGRhdGEgZm9yIGFuIGNoYW5uZWwtbGV2ZWwgZWxlbWVudAoJICoKCSAqIFRoaXMgbWV0aG9kIGFsbG93cyB5b3UgdG8gZ2V0IGFjY2VzcyB0byBBTlkgZWxlbWVudC9hdHRyaWJ1dGUgaW4gdGhlCgkgKiBjaGFubmVsL2hlYWRlciBzZWN0aW9uIG9mIHRoZSBmZWVkLgoJICoKCSAqIFNlZSB7QHNlZSBTaW1wbGVQaWU6OmdldF9mZWVkX3RhZ3MoKX0gZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHJldHVybiB2YWx1ZQoJICoKCSAqIEBzaW5jZSAxLjAKCSAqIEBzZWUgaHR0cDovL3NpbXBsZXBpZS5vcmcvd2lraS9mYXEvc3VwcG9ydGVkX3htbF9uYW1lc3BhY2VzCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgVGhlIFVSTCBvZiB0aGUgWE1MIG5hbWVzcGFjZSBvZiB0aGUgZWxlbWVudHMgeW91J3JlIHRyeWluZyB0byBhY2Nlc3MKCSAqIEBwYXJhbSBzdHJpbmcgJHRhZyBUYWcgbmFtZQoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2NoYW5uZWxfdGFncygkbmFtZXNwYWNlLCAkdGFnKQoJewoJCSR0eXBlID0gJHRoaXMtPmdldF90eXBlKCk7CgkJaWYgKCR0eXBlICYgU0lNUExFUElFX1RZUEVfQVRPTV9BTEwpCgkJewoJCQlpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfZmVlZF90YWdzKCRuYW1lc3BhY2UsICR0YWcpKQoJCQl7CgkJCQlyZXR1cm4gJHJldHVybjsKCQkJfQoJCX0KCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfVFlQRV9SU1NfMTApCgkJewoJCQlpZiAoJGNoYW5uZWwgPSAkdGhpcy0+Z2V0X2ZlZWRfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMCwgJ2NoYW5uZWwnKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRjaGFubmVsWzBdWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddKSkKCQkJCXsKCQkJCQlyZXR1cm4gJGNoYW5uZWxbMF1bJ2NoaWxkJ11bJG5hbWVzcGFjZV1bJHRhZ107CgkJCQl9CgkJCX0KCQl9CgkJaWYgKCR0eXBlICYgU0lNUExFUElFX1RZUEVfUlNTXzA5MCkKCQl7CgkJCWlmICgkY2hhbm5lbCA9ICR0aGlzLT5nZXRfZmVlZF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCwgJ2NoYW5uZWwnKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRjaGFubmVsWzBdWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddKSkKCQkJCXsKCQkJCQlyZXR1cm4gJGNoYW5uZWxbMF1bJ2NoaWxkJ11bJG5hbWVzcGFjZV1bJHRhZ107CgkJCQl9CgkJCX0KCQl9CgkJaWYgKCR0eXBlICYgU0lNUExFUElFX1RZUEVfUlNTX1NZTkRJQ0FUSU9OKQoJCXsKCQkJaWYgKCRjaGFubmVsID0gJHRoaXMtPmdldF9mZWVkX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAsICdjaGFubmVsJykpCgkJCXsKCQkJCWlmIChpc3NldCgkY2hhbm5lbFswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXSkpCgkJCQl7CgkJCQkJcmV0dXJuICRjaGFubmVsWzBdWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGRhdGEgZm9yIGFuIGNoYW5uZWwtbGV2ZWwgZWxlbWVudAoJICoKCSAqIFRoaXMgbWV0aG9kIGFsbG93cyB5b3UgdG8gZ2V0IGFjY2VzcyB0byBBTlkgZWxlbWVudC9hdHRyaWJ1dGUgaW4gdGhlCgkgKiBpbWFnZS9sb2dvIHNlY3Rpb24gb2YgdGhlIGZlZWQuCgkgKgoJICogU2VlIHtAc2VlIFNpbXBsZVBpZTo6Z2V0X2ZlZWRfdGFncygpfSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcmV0dXJuIHZhbHVlCgkgKgoJICogQHNpbmNlIDEuMAoJICogQHNlZSBodHRwOi8vc2ltcGxlcGllLm9yZy93aWtpL2ZhcS9zdXBwb3J0ZWRfeG1sX25hbWVzcGFjZXMKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSBUaGUgVVJMIG9mIHRoZSBYTUwgbmFtZXNwYWNlIG9mIHRoZSBlbGVtZW50cyB5b3UncmUgdHJ5aW5nIHRvIGFjY2VzcwoJICogQHBhcmFtIHN0cmluZyAkdGFnIFRhZyBuYW1lCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfaW1hZ2VfdGFncygkbmFtZXNwYWNlLCAkdGFnKQoJewoJCSR0eXBlID0gJHRoaXMtPmdldF90eXBlKCk7CgkJaWYgKCR0eXBlICYgU0lNUExFUElFX1RZUEVfUlNTXzEwKQoJCXsKCQkJaWYgKCRpbWFnZSA9ICR0aGlzLT5nZXRfZmVlZF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzEwLCAnaW1hZ2UnKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRpbWFnZVswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXSkpCgkJCQl7CgkJCQkJcmV0dXJuICRpbWFnZVswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXTsKCQkJCX0KCQkJfQoJCX0KCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfVFlQRV9SU1NfMDkwKQoJCXsKCQkJaWYgKCRpbWFnZSA9ICR0aGlzLT5nZXRfZmVlZF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCwgJ2ltYWdlJykpCgkJCXsKCQkJCWlmIChpc3NldCgkaW1hZ2VbMF1bJ2NoaWxkJ11bJG5hbWVzcGFjZV1bJHRhZ10pKQoJCQkJewoJCQkJCXJldHVybiAkaW1hZ2VbMF1bJ2NoaWxkJ11bJG5hbWVzcGFjZV1bJHRhZ107CgkJCQl9CgkJCX0KCQl9CgkJaWYgKCR0eXBlICYgU0lNUExFUElFX1RZUEVfUlNTX1NZTkRJQ0FUSU9OKQoJCXsKCQkJaWYgKCRpbWFnZSA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnaW1hZ2UnKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRpbWFnZVswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXSkpCgkJCQl7CgkJCQkJcmV0dXJuICRpbWFnZVswXVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgYmFzZSBVUkwgdmFsdWUgZnJvbSB0aGUgZmVlZAoJICoKCSAqIFVzZXMgYDx4bWw6YmFzZT5gIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZXMgdGhlIGZpcnN0IGxpbmsgaW4gdGhlCgkgKiBmZWVkLCBvciBmYWlsaW5nIHRoYXQsIHRoZSBVUkwgb2YgdGhlIGZlZWQgaXRzZWxmLgoJICoKCSAqIEBzZWUgZ2V0X2xpbmsKCSAqIEBzZWUgc3Vic2NyaWJlX3VybAoJICoKCSAqIEBwYXJhbSBhcnJheSAkZWxlbWVudAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9iYXNlKCRlbGVtZW50ID0gYXJyYXkoKSkKCXsKCQlpZiAoISgkdGhpcy0+Z2V0X3R5cGUoKSAmIFNJTVBMRVBJRV9UWVBFX1JTU19TWU5ESUNBVElPTikgJiYgIWVtcHR5KCRlbGVtZW50Wyd4bWxfYmFzZV9leHBsaWNpdCddKSAmJiBpc3NldCgkZWxlbWVudFsneG1sX2Jhc2UnXSkpCgkJewoJCQlyZXR1cm4gJGVsZW1lbnRbJ3htbF9iYXNlJ107CgkJfQoJCWVsc2VpZiAoJHRoaXMtPmdldF9saW5rKCkgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmdldF9saW5rKCk7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPnN1YnNjcmliZV91cmwoKTsKCX0KCgkvKioKCSAqIFNhbml0aXplIGZlZWQgZGF0YQoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHNlZSBTaW1wbGVQaWVfU2FuaXRpemU6OnNhbml0aXplKCkKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgRGF0YSB0byBzYW5pdGl6ZQoJICogQHBhcmFtIGludCAkdHlwZSBPbmUgb2YgdGhlIFNJTVBMRVBJRV9DT05TVFJVQ1RfKiBjb25zdGFudHMKCSAqIEBwYXJhbSBzdHJpbmcgJGJhc2UgQmFzZSBVUkwgdG8gcmVzb2x2ZSBVUkxzIGFnYWluc3QKCSAqIEByZXR1cm4gc3RyaW5nIFNhbml0aXplZCBkYXRhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzYW5pdGl6ZSgkZGF0YSwgJHR5cGUsICRiYXNlID0gJycpCgl7CgkJdHJ5CgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplLT5zYW5pdGl6ZSgkZGF0YSwgJHR5cGUsICRiYXNlKTsKCQl9CgkJY2F0Y2ggKFNpbXBsZVBpZV9FeGNlcHRpb24gJGUpCgkJewoJCQlpZiAoISR0aGlzLT5lbmFibGVfZXhjZXB0aW9ucykKCQkJewoJCQkJJHRoaXMtPmVycm9yID0gJGUtPmdldE1lc3NhZ2UoKTsKCQkJCSR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdlcnJvcicsIGFycmF5KCR0aGlzLT5lcnJvciwgRV9VU0VSX1dBUk5JTkcsICRlLT5nZXRGaWxlKCksICRlLT5nZXRMaW5lKCkpKTsKCQkJCXJldHVybiAnJzsKCQkJfQoKCQkJdGhyb3cgJGU7CgkJfQoJfQoKCS8qKgoJICogR2V0IHRoZSB0aXRsZSBvZiB0aGUgZmVlZAoJICoKCSAqIFVzZXMgYDxhdG9tOnRpdGxlPmAsIGA8dGl0bGU+YCBvciBgPGRjOnRpdGxlPmAKCSAqCgkgKiBAc2luY2UgMS4wIChwcmV2aW91c2x5IGNhbGxlZCBgZ2V0X2ZlZWRfdGl0bGVgIHNpbmNlIDAuOCkKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF90aXRsZSgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzEwX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHJldHVyblswXVsnYXR0cmlicyddKSksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ3RpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2F0b21fMDNfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkcmV0dXJuWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTAsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfTUFZQkVfSFRNTCwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMDkwLCAndGl0bGUnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX01BWUJFX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAndGl0bGUnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX01BWUJFX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTEsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTAsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhIGNhdGVnb3J5IGZvciB0aGUgZmVlZAoJICoKCSAqIEBzaW5jZSBVbmtub3duCgkgKiBAcGFyYW0gaW50ICRrZXkgVGhlIGNhdGVnb3J5IHRoYXQgeW91IHdhbnQgdG8gcmV0dXJuLiBSZW1lbWJlciB0aGF0IGFycmF5cyBiZWdpbiB3aXRoIDAsIG5vdCAxCgkgKiBAcmV0dXJuIFNpbXBsZVBpZV9DYXRlZ29yeXxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY2F0ZWdvcnkoJGtleSA9IDApCgl7CgkJJGNhdGVnb3JpZXMgPSAkdGhpcy0+Z2V0X2NhdGVnb3JpZXMoKTsKCQlpZiAoaXNzZXQoJGNhdGVnb3JpZXNbJGtleV0pKQoJCXsKCQkJcmV0dXJuICRjYXRlZ29yaWVzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYWxsIGNhdGVnb3JpZXMgZm9yIHRoZSBmZWVkCgkgKgoJICogVXNlcyBgPGF0b206Y2F0ZWdvcnk+YCwgYDxjYXRlZ29yeT5gIG9yIGA8ZGM6c3ViamVjdD5gCgkgKgoJICogQHNpbmNlIFVua25vd24KCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBMaXN0IG9mIHtAc2VlIFNpbXBsZVBpZV9DYXRlZ29yeX0gb2JqZWN0cwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2NhdGVnb3JpZXMoKQoJewoJCSRjYXRlZ29yaWVzID0gYXJyYXkoKTsKCgkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdjYXRlZ29yeScpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSR0ZXJtID0gbnVsbDsKCQkJJHNjaGVtZSA9IG51bGw7CgkJCSRsYWJlbCA9IG51bGw7CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3Rlcm0nXSkpCgkJCXsKCQkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsndGVybSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJewoJCQkJJHNjaGVtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10pKQoJCQl7CgkJCQkkbGFiZWwgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydsYWJlbCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGVybSwgJHNjaGVtZSwgJGxhYmVsKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAsICdjYXRlZ29yeScpIGFzICRjYXRlZ29yeSkKCQl7CgkJCS8vIFRoaXMgaXMgcmVhbGx5IHRoZSBsYWJlbCwgYnV0IGtlZXAgdGhpcyBhcyB0aGUgdGVybSBhbHNvIGZvciBCQy4KCQkJLy8gTGFiZWwgd2lsbCBhbHNvIHdvcmsgb24gcmV0cmlldmluZyBiZWNhdXNlIHRoYXQgZmFsbHMgYmFjayB0byB0ZXJtLgoJCQkkdGVybSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJaWYgKGlzc2V0KCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnZG9tYWluJ10pKQoJCQl7CgkJCQkkc2NoZW1lID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnZG9tYWluJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkc2NoZW1lID0gbnVsbDsKCQkJfQoJCQkkY2F0ZWdvcmllc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NhdGVnb3J5JywgYXJyYXkoJHRlcm0sICRzY2hlbWUsIG51bGwpKTsKCQl9CgkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzExLCAnc3ViamVjdCcpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCksIG51bGwsIG51bGwpKTsKCQl9CgkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAnc3ViamVjdCcpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCksIG51bGwsIG51bGwpKTsKCQl9CgoJCWlmICghZW1wdHkoJGNhdGVnb3JpZXMpKQoJCXsKCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgkY2F0ZWdvcmllcyk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhbiBhdXRob3IgZm9yIHRoZSBmZWVkCgkgKgoJICogQHNpbmNlIDEuMQoJICogQHBhcmFtIGludCAka2V5IFRoZSBhdXRob3IgdGhhdCB5b3Ugd2FudCB0byByZXR1cm4uIFJlbWVtYmVyIHRoYXQgYXJyYXlzIGJlZ2luIHdpdGggMCwgbm90IDEKCSAqIEByZXR1cm4gU2ltcGxlUGllX0F1dGhvcnxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfYXV0aG9yKCRrZXkgPSAwKQoJewoJCSRhdXRob3JzID0gJHRoaXMtPmdldF9hdXRob3JzKCk7CgkJaWYgKGlzc2V0KCRhdXRob3JzWyRrZXldKSkKCQl7CgkJCXJldHVybiAkYXV0aG9yc1ska2V5XTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGFsbCBhdXRob3JzIGZvciB0aGUgZmVlZAoJICoKCSAqIFVzZXMgYDxhdG9tOmF1dGhvcj5gLCBgPGF1dGhvcj5gLCBgPGRjOmNyZWF0b3I+YCBvciBgPGl0dW5lczphdXRob3I+YAoJICoKCSAqIEBzaW5jZSAxLjEKCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBMaXN0IG9mIHtAc2VlIFNpbXBsZVBpZV9BdXRob3J9IG9iamVjdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9hdXRob3JzKCkKCXsKCQkkYXV0aG9ycyA9IGFycmF5KCk7CgkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdhdXRob3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJG5hbWUgPSBudWxsOwoJCQkkdXJpID0gbnVsbDsKCQkJJGVtYWlsID0gbnVsbDsKCQkJaWYgKGlzc2V0KCRhdXRob3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnbmFtZSddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkbmFtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ25hbWUnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkYXV0aG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkdXJpID0gJHRoaXMtPnNhbml0aXplKCRhdXRob3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsndXJpJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkYXV0aG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdKSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRhdXRob3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnZW1haWwnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJGVtYWlsID0gJHRoaXMtPnNhbml0aXplKCRhdXRob3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnZW1haWwnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmICgkbmFtZSAhPT0gbnVsbCB8fCAkZW1haWwgIT09IG51bGwgfHwgJHVyaSAhPT0gbnVsbCkKCQkJewoJCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkbmFtZSwgJHVyaSwgJGVtYWlsKSk7CgkJCX0KCQl9CgkJaWYgKCRhdXRob3IgPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdhdXRob3InKSkKCQl7CgkJCSRuYW1lID0gbnVsbDsKCQkJJHVybCA9IG51bGw7CgkJCSRlbWFpbCA9IG51bGw7CgkJCWlmIChpc3NldCgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ25hbWUnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJG5hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGF1dGhvclswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyduYW1lJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGF1dGhvclswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyd1cmwnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJHVybCA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ3VybCddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGF1dGhvclswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyd1cmwnXVswXSkpOwoJCQl9CgkJCWlmIChpc3NldCgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2VtYWlsJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSRlbWFpbCA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2VtYWlsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoJG5hbWUgIT09IG51bGwgfHwgJGVtYWlsICE9PSBudWxsIHx8ICR1cmwgIT09IG51bGwpCgkJCXsKCQkJCSRhdXRob3JzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQXV0aG9yJywgYXJyYXkoJG5hbWUsICR1cmwsICRlbWFpbCkpOwoJCQl9CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ2NyZWF0b3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMCwgJ2NyZWF0b3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdhdXRob3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoKCQlpZiAoIWVtcHR5KCRhdXRob3JzKSkKCQl7CgkJCXJldHVybiBhcnJheV91bmlxdWUoJGF1dGhvcnMpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYSBjb250cmlidXRvciBmb3IgdGhlIGZlZWQKCSAqCgkgKiBAc2luY2UgMS4xCgkgKiBAcGFyYW0gaW50ICRrZXkgVGhlIGNvbnRyYnV0b3IgdGhhdCB5b3Ugd2FudCB0byByZXR1cm4uIFJlbWVtYmVyIHRoYXQgYXJyYXlzIGJlZ2luIHdpdGggMCwgbm90IDEKCSAqIEByZXR1cm4gU2ltcGxlUGllX0F1dGhvcnxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY29udHJpYnV0b3IoJGtleSA9IDApCgl7CgkJJGNvbnRyaWJ1dG9ycyA9ICR0aGlzLT5nZXRfY29udHJpYnV0b3JzKCk7CgkJaWYgKGlzc2V0KCRjb250cmlidXRvcnNbJGtleV0pKQoJCXsKCQkJcmV0dXJuICRjb250cmlidXRvcnNbJGtleV07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhbGwgY29udHJpYnV0b3JzIGZvciB0aGUgZmVlZAoJICoKCSAqIFVzZXMgYDxhdG9tOmNvbnRyaWJ1dG9yPmAKCSAqCgkgKiBAc2luY2UgMS4xCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgTGlzdCBvZiB7QHNlZSBTaW1wbGVQaWVfQXV0aG9yfSBvYmplY3RzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY29udHJpYnV0b3JzKCkKCXsKCQkkY29udHJpYnV0b3JzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ2NvbnRyaWJ1dG9yJykgYXMgJGNvbnRyaWJ1dG9yKQoJCXsKCQkJJG5hbWUgPSBudWxsOwoJCQkkdXJpID0gbnVsbDsKCQkJJGVtYWlsID0gbnVsbDsKCQkJaWYgKGlzc2V0KCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyduYW1lJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSRuYW1lID0gJHRoaXMtPnNhbml0aXplKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyduYW1lJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkdXJpID0gJHRoaXMtPnNhbml0aXplKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyd1cmknXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyd1cmknXVswXSkpOwoJCQl9CgkJCWlmIChpc3NldCgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnZW1haWwnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJGVtYWlsID0gJHRoaXMtPnNhbml0aXplKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbWFpbCddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJaWYgKCRuYW1lICE9PSBudWxsIHx8ICRlbWFpbCAhPT0gbnVsbCB8fCAkdXJpICE9PSBudWxsKQoJCQl7CgkJCQkkY29udHJpYnV0b3JzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQXV0aG9yJywgYXJyYXkoJG5hbWUsICR1cmksICRlbWFpbCkpOwoJCQl9CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzLCAnY29udHJpYnV0b3InKSBhcyAkY29udHJpYnV0b3IpCgkJewoJCQkkbmFtZSA9IG51bGw7CgkJCSR1cmwgPSBudWxsOwoJCQkkZW1haWwgPSBudWxsOwoJCQlpZiAoaXNzZXQoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ25hbWUnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJG5hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ25hbWUnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsndXJsJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSR1cmwgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ3VybCddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ3VybCddWzBdKSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWydlbWFpbCddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkZW1haWwgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2VtYWlsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoJG5hbWUgIT09IG51bGwgfHwgJGVtYWlsICE9PSBudWxsIHx8ICR1cmwgIT09IG51bGwpCgkJCXsKCQkJCSRjb250cmlidXRvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkbmFtZSwgJHVybCwgJGVtYWlsKSk7CgkJCX0KCQl9CgoJCWlmICghZW1wdHkoJGNvbnRyaWJ1dG9ycykpCgkJewoJCQlyZXR1cm4gYXJyYXlfdW5pcXVlKCRjb250cmlidXRvcnMpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYSBzaW5nbGUgbGluayBmb3IgdGhlIGZlZWQKCSAqCgkgKiBAc2luY2UgMS4wIChwcmV2aW91c2x5IGNhbGxlZCBgZ2V0X2ZlZWRfbGlua2Agc2luY2UgUHJldmlldyBSZWxlYXNlLCBgZ2V0X2ZlZWRfcGVybWFsaW5rKClgIHNpbmNlIDAuOCkKCSAqIEBwYXJhbSBpbnQgJGtleSBUaGUgbGluayB0aGF0IHlvdSB3YW50IHRvIHJldHVybi4gUmVtZW1iZXIgdGhhdCBhcnJheXMgYmVnaW4gd2l0aCAwLCBub3QgMQoJICogQHBhcmFtIHN0cmluZyAkcmVsIFRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIGxpbmsgdG8gcmV0dXJuCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsIExpbmsgVVJMCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGluaygka2V5ID0gMCwgJHJlbCA9ICdhbHRlcm5hdGUnKQoJewoJCSRsaW5rcyA9ICR0aGlzLT5nZXRfbGlua3MoJHJlbCk7CgkJaWYgKGlzc2V0KCRsaW5rc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGxpbmtzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHBlcm1hbGluayBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBSZXR1cm5zIHRoZSBmaXJzdCBsaW5rIGF2YWlsYWJsZSB3aXRoIGEgcmVsYXRpb25zaGlwIG9mICJhbHRlcm5hdGUiLgoJICogSWRlbnRpY2FsIHRvIHtAc2VlIGdldF9saW5rKCl9IHdpdGgga2V5IDAKCSAqCgkgKiBAc2VlIGdldF9saW5rCgkgKiBAc2luY2UgMS4wIChwcmV2aW91c2x5IGNhbGxlZCBgZ2V0X2ZlZWRfbGlua2Agc2luY2UgUHJldmlldyBSZWxlYXNlLCBgZ2V0X2ZlZWRfcGVybWFsaW5rKClgIHNpbmNlIDAuOCkKCSAqIEBpbnRlcm5hbCBBZGRlZCBmb3IgcGFyaXR5IGJldHdlZW4gdGhlIHBhcmVudC1sZXZlbCBhbmQgdGhlIGl0ZW0vZW50cnktbGV2ZWwuCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsIExpbmsgVVJMCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfcGVybWFsaW5rKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmdldF9saW5rKDApOwoJfQoKCS8qKgoJICogR2V0IGFsbCBsaW5rcyBmb3IgdGhlIGZlZWQKCSAqCgkgKiBVc2VzIGA8YXRvbTpsaW5rPmAgb3IgYDxsaW5rPmAKCSAqCgkgKiBAc2luY2UgQmV0YSAyCgkgKiBAcGFyYW0gc3RyaW5nICRyZWwgVGhlIHJlbGF0aW9uc2hpcCBvZiBsaW5rcyB0byByZXR1cm4KCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBMaW5rcyBmb3VuZCBmb3IgdGhlIGZlZWQgKHN0cmluZ3MpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGlua3MoJHJlbCA9ICdhbHRlcm5hdGUnKQoJewoJCWlmICghaXNzZXQoJHRoaXMtPmRhdGFbJ2xpbmtzJ10pKQoJCXsKCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ10gPSBhcnJheSgpOwoJCQlpZiAoJGxpbmtzID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnbGluaycpKQoJCQl7CgkJCQlmb3JlYWNoICgkbGlua3MgYXMgJGxpbmspCgkJCQl7CgkJCQkJaWYgKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWydocmVmJ10pKQoJCQkJCXsKCQkJCQkJJGxpbmtfcmVsID0gKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWydyZWwnXSkpID8gJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddIDogJ2FsdGVybmF0ZSc7CgkJCQkJCSR0aGlzLT5kYXRhWydsaW5rcyddWyRsaW5rX3JlbF1bXSA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua1snYXR0cmlicyddWycnXVsnaHJlZiddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRsaW5rKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmICgkbGlua3MgPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdsaW5rJykpCgkJCXsKCQkJCWZvcmVhY2ggKCRsaW5rcyBhcyAkbGluaykKCQkJCXsKCQkJCQlpZiAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ2hyZWYnXSkpCgkJCQkJewoJCQkJCQkkbGlua19yZWwgPSAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddKSkgPyAkbGlua1snYXR0cmlicyddWycnXVsncmVsJ10gOiAnYWx0ZXJuYXRlJzsKCQkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGxpbmtfcmVsXVtdID0gJHRoaXMtPnNhbml0aXplKCRsaW5rWydhdHRyaWJzJ11bJyddWydocmVmJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmspKTsKCgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmICgkbGlua3MgPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMCwgJ2xpbmsnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJ2FsdGVybmF0ZSddW10gPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmtzWzBdKSk7CgkJCX0KCQkJaWYgKCRsaW5rcyA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCwgJ2xpbmsnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJ2FsdGVybmF0ZSddW10gPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmtzWzBdKSk7CgkJCX0KCQkJaWYgKCRsaW5rcyA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnbGluaycpKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVsnYWx0ZXJuYXRlJ11bXSA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua3NbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkbGlua3NbMF0pKTsKCQkJfQoKCQkJJGtleXMgPSBhcnJheV9rZXlzKCR0aGlzLT5kYXRhWydsaW5rcyddKTsKCQkJZm9yZWFjaCAoJGtleXMgYXMgJGtleSkKCQkJewoJCQkJaWYgKCR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdpc19pc2VnbWVudF9uel9uYycsIGFycmF5KCRrZXkpKSkKCQkJCXsKCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2xpbmtzJ11bU0lNUExFUElFX0lBTkFfTElOS19SRUxBVElPTlNfUkVHSVNUUlkgLiAka2V5XSkpCgkJCQkJewoJCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVtTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWSAuICRrZXldID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGtleV0sICR0aGlzLT5kYXRhWydsaW5rcyddW1NJTVBMRVBJRV9JQU5BX0xJTktfUkVMQVRJT05TX1JFR0lTVFJZIC4gJGtleV0pOwoJCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVska2V5XSA9JiAkdGhpcy0+ZGF0YVsnbGlua3MnXVtTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWSAuICRrZXldOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVtTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWSAuICRrZXldID0mICR0aGlzLT5kYXRhWydsaW5rcyddWyRrZXldOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2VpZiAoc3Vic3RyKCRrZXksIDAsIDQxKSA9PT0gU0lNUExFUElFX0lBTkFfTElOS19SRUxBVElPTlNfUkVHSVNUUlkpCgkJCQl7CgkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bc3Vic3RyKCRrZXksIDQxKV0gPSYgJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGtleV07CgkJCQl9CgkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVska2V5XSA9IGFycmF5X3VuaXF1ZSgkdGhpcy0+ZGF0YVsnbGlua3MnXVska2V5XSk7CgkJCX0KCQl9CgoJCWlmIChpc3NldCgkdGhpcy0+ZGF0YVsnaGVhZGVycyddWydsaW5rJ10pICYmCgkJICAgIHByZWdfbWF0Y2goJy88KFtePl0rKT47IHJlbD0nLnByZWdfcXVvdGUoJHJlbCkuJy8nLAoJCSAgICAgICAgICAgICAgICR0aGlzLT5kYXRhWydoZWFkZXJzJ11bJ2xpbmsnXSwgJG1hdGNoKSkKCQl7CgkJCXJldHVybiBhcnJheSgkbWF0Y2hbMV0pOwoJCX0KCQllbHNlIGlmIChpc3NldCgkdGhpcy0+ZGF0YVsnbGlua3MnXVskcmVsXSkpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJHJlbF07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2FsbF9kaXNjb3ZlcmVkX2ZlZWRzKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmFsbF9kaXNjb3ZlcmVkX2ZlZWRzOwoJfQoKCS8qKgoJICogR2V0IHRoZSBjb250ZW50IGZvciB0aGUgaXRlbQoJICoKCSAqIFVzZXMgYDxhdG9tOnN1YnRpdGxlPmAsIGA8YXRvbTp0YWdsaW5lPmAsIGA8ZGVzY3JpcHRpb24+YCwKCSAqIGA8ZGM6ZGVzY3JpcHRpb24+YCwgYDxpdHVuZXM6c3VtbWFyeT5gIG9yIGA8aXR1bmVzOnN1YnRpdGxlPmAKCSAqCgkgKiBAc2luY2UgMS4wIChwcmV2aW91c2x5IGNhbGxlZCBgZ2V0X2ZlZWRfZGVzY3JpcHRpb24oKWAgc2luY2UgMC44KQoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc2NyaXB0aW9uKCkKCXsKCQlpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ3N1YnRpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2F0b21fMTBfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkcmV0dXJuWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzLCAndGFnbGluZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzAzX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHJldHVyblswXVsnYXR0cmlicyddKSksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzEwLCAnZGVzY3JpcHRpb24nKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX01BWUJFX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCwgJ2Rlc2NyaXB0aW9uJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ2Rlc2NyaXB0aW9uJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzExLCAnZGVzY3JpcHRpb24nKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAnZGVzY3JpcHRpb24nKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0lUVU5FUywgJ3N1bW1hcnknKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfSVRVTkVTLCAnc3VidGl0bGUnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgY29weXJpZ2h0IGluZm8gZm9yIHRoZSBmZWVkCgkgKgoJICogVXNlcyBgPGF0b206cmlnaHRzPmAsIGA8YXRvbTpjb3B5cmlnaHQ+YCBvciBgPGRjOnJpZ2h0cz5gCgkgKgoJICogQHNpbmNlIDEuMCAocHJldmlvdXNseSBjYWxsZWQgYGdldF9mZWVkX2NvcHlyaWdodCgpYCBzaW5jZSAwLjgpCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY29weXJpZ2h0KCkKCXsKCQlpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ3JpZ2h0cycpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzEwX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHJldHVyblswXVsnYXR0cmlicyddKSksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ2NvcHlyaWdodCcpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzAzX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHJldHVyblswXVsnYXR0cmlicyddKSksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnY29weXJpZ2h0JykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ3JpZ2h0cycpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTAsICdyaWdodHMnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGxhbmd1YWdlIGZvciB0aGUgZmVlZAoJICoKCSAqIFVzZXMgYDxsYW5ndWFnZT5gLCBgPGRjOmxhbmd1YWdlPmAsIG9yIEB4bWxfbGFuZwoJICoKCSAqIEBzaW5jZSAxLjAgKHByZXZpb3VzbHkgY2FsbGVkIGBnZXRfZmVlZF9sYW5ndWFnZSgpYCBzaW5jZSAwLjgpCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGFuZ3VhZ2UoKQoJewoJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAsICdsYW5ndWFnZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTEsICdsYW5ndWFnZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTAsICdsYW5ndWFnZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnZmVlZCddWzBdWyd4bWxfbGFuZyddKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnZmVlZCddWzBdWyd4bWxfbGFuZyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCQllbHNlaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2ZlZWQnXVswXVsneG1sX2xhbmcnXSkpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCR0aGlzLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2ZlZWQnXVswXVsneG1sX2xhbmcnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQl9CgkJZWxzZWlmIChpc3NldCgkdGhpcy0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JERl1bJ1JERiddWzBdWyd4bWxfbGFuZyddKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXVsneG1sX2xhbmcnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQl9CgkJZWxzZWlmIChpc3NldCgkdGhpcy0+ZGF0YVsnaGVhZGVycyddWydjb250ZW50LWxhbmd1YWdlJ10pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkdGhpcy0+ZGF0YVsnaGVhZGVycyddWydjb250ZW50LWxhbmd1YWdlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgbGF0aXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBpdGVtCgkgKgoJICogQ29tcGF0aWJsZSB3aXRoIHRoZSBXM0MgV0dTODQgQmFzaWMgR2VvIGFuZCBHZW9SU1Mgc3BlY2lmaWNhdGlvbnMKCSAqCgkgKiBVc2VzIGA8Z2VvOmxhdD5gIG9yIGA8Z2VvcnNzOnBvaW50PmAKCSAqCgkgKiBAc2luY2UgMS4wCgkgKiBAbGluayBodHRwOi8vd3d3LnczLm9yZy8yMDAzLzAxL2dlby8gVzNDIFdHUzg0IEJhc2ljIEdlbwoJICogQGxpbmsgaHR0cDovL3d3dy5nZW9yc3Mub3JnLyBHZW9SU1MKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9sYXRpdHVkZSgpCgl7CgoJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9XM0NfQkFTSUNfR0VPLCAnbGF0JykpCgkJewoJCQlyZXR1cm4gKGZsb2F0KSAkcmV0dXJuWzBdWydkYXRhJ107CgkJfQoJCWVsc2VpZiAoKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0dFT1JTUywgJ3BvaW50JykpICYmIHByZWdfbWF0Y2goJy9eKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkgKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkkLycsIHRyaW0oJHJldHVyblswXVsnZGF0YSddKSwgJG1hdGNoKSkKCQl7CgkJCXJldHVybiAoZmxvYXQpICRtYXRjaFsxXTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBmZWVkCgkgKgoJICogQ29tcGF0aWJsZSB3aXRoIHRoZSBXM0MgV0dTODQgQmFzaWMgR2VvIGFuZCBHZW9SU1Mgc3BlY2lmaWNhdGlvbnMKCSAqCgkgKiBVc2VzIGA8Z2VvOmxvbmc+YCwgYDxnZW86bG9uPmAgb3IgYDxnZW9yc3M6cG9pbnQ+YAoJICoKCSAqIEBzaW5jZSAxLjAKCSAqIEBsaW5rIGh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDEvZ2VvLyBXM0MgV0dTODQgQmFzaWMgR2VvCgkgKiBAbGluayBodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvIEdlb1JTUwoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xvbmdpdHVkZSgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1czQ19CQVNJQ19HRU8sICdsb25nJykpCgkJewoJCQlyZXR1cm4gKGZsb2F0KSAkcmV0dXJuWzBdWydkYXRhJ107CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfVzNDX0JBU0lDX0dFTywgJ2xvbicpKQoJCXsKCQkJcmV0dXJuIChmbG9hdCkgJHJldHVyblswXVsnZGF0YSddOwoJCX0KCQllbHNlaWYgKCgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9HRU9SU1MsICdwb2ludCcpKSAmJiBwcmVnX21hdGNoKCcvXigoPzotKT9bMC05XSsoPzpcLlswLTldKykpICgoPzotKT9bMC05XSsoPzpcLlswLTldKykpJC8nLCB0cmltKCRyZXR1cm5bMF1bJ2RhdGEnXSksICRtYXRjaCkpCgkJewoJCQlyZXR1cm4gKGZsb2F0KSAkbWF0Y2hbMl07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgZmVlZCBsb2dvJ3MgdGl0bGUKCSAqCgkgKiBSU1MgMC45LjAsIDEuMCBhbmQgMi4wIGZlZWRzIGFyZSBhbGxvd2VkIHRvIGhhdmUgYSAiZmVlZCBsb2dvIiB0aXRsZS4KCSAqCgkgKiBVc2VzIGA8aW1hZ2U+PHRpdGxlPmAgb3IgYDxpbWFnZT48ZGM6dGl0bGU+YAoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9pbWFnZV90aXRsZSgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2ltYWdlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTAsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18wOTAsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ3RpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pbWFnZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTEsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAndGl0bGUnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGZlZWQgbG9nbydzIFVSTAoJICoKCSAqIFJTUyAwLjkuMCwgMi4wLCBBdG9tIDEuMCwgYW5kIGZlZWRzIHdpdGggaVR1bmVzIFJTUyB0YWdzIGFyZSBhbGxvd2VkIHRvCgkgKiBoYXZlIGEgImZlZWQgbG9nbyIgVVJMLiBUaGlzIHBvaW50cyBkaXJlY3RseSB0byB0aGUgaW1hZ2UgaXRzZWxmLgoJICoKCSAqIFVzZXMgYDxpdHVuZXM6aW1hZ2U+YCwgYDxhdG9tOmxvZ28+YCwgYDxhdG9tOmljb24+YCwKCSAqIGA8aW1hZ2U+PHRpdGxlPmAgb3IgYDxpbWFnZT48ZGM6dGl0bGU+YAoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9pbWFnZV91cmwoKQoJewoJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdpbWFnZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydhdHRyaWJzJ11bJyddWydocmVmJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnbG9nbycpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdpY29uJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMCwgJ3VybCcpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2ltYWdlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMDkwLCAndXJsJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ3VybCcpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoKCS8qKgoJICogR2V0IHRoZSBmZWVkIGxvZ28ncyBsaW5rCgkgKgoJICogUlNTIDAuOS4wLCAxLjAgYW5kIDIuMCBmZWVkcyBhcmUgYWxsb3dlZCB0byBoYXZlIGEgImZlZWQgbG9nbyIgbGluay4gVGhpcwoJICogcG9pbnRzIHRvIGEgaHVtYW4tcmVhZGFibGUgcGFnZSB0aGF0IHRoZSBpbWFnZSBzaG91bGQgbGluayB0by4KCSAqCgkgKiBVc2VzIGA8aXR1bmVzOmltYWdlPmAsIGA8YXRvbTpsb2dvPmAsIGA8YXRvbTppY29uPmAsCgkgKiBgPGltYWdlPjx0aXRsZT5gIG9yIGA8aW1hZ2U+PGRjOnRpdGxlPmAKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfaW1hZ2VfbGluaygpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2ltYWdlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTAsICdsaW5rJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18wOTAsICdsaW5rJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ2xpbmsnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBmZWVkIGxvZ28ncyBsaW5rCgkgKgoJICogUlNTIDIuMCBmZWVkcyBhcmUgYWxsb3dlZCB0byBoYXZlIGEgImZlZWQgbG9nbyIgd2lkdGguCgkgKgoJICogVXNlcyBgPGltYWdlPjx3aWR0aD5gIG9yIGRlZmF1bHRzIHRvIDg4LjAgaWYgbm8gd2lkdGggaXMgc3BlY2lmaWVkIGFuZAoJICogdGhlIGZlZWQgaXMgYW4gUlNTIDIuMCBmZWVkLgoJICoKCSAqIEByZXR1cm4gaW50fGZsb2F0fG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9pbWFnZV93aWR0aCgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2ltYWdlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAsICd3aWR0aCcpKQoJCXsKCQkJcmV0dXJuIHJvdW5kKCRyZXR1cm5bMF1bJ2RhdGEnXSk7CgkJfQoJCWVsc2VpZiAoJHRoaXMtPmdldF90eXBlKCkgJiBTSU1QTEVQSUVfVFlQRV9SU1NfU1lORElDQVRJT04gJiYgJHRoaXMtPmdldF9pbWFnZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAndXJsJykpCgkJewoJCQlyZXR1cm4gODguMDsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBmZWVkIGxvZ28ncyBoZWlnaHQKCSAqCgkgKiBSU1MgMi4wIGZlZWRzIGFyZSBhbGxvd2VkIHRvIGhhdmUgYSAiZmVlZCBsb2dvIiBoZWlnaHQuCgkgKgoJICogVXNlcyBgPGltYWdlPjxoZWlnaHQ+YCBvciBkZWZhdWx0cyB0byAzMS4wIGlmIG5vIGhlaWdodCBpcyBzcGVjaWZpZWQgYW5kCgkgKiB0aGUgZmVlZCBpcyBhbiBSU1MgMi4wIGZlZWQuCgkgKgoJICogQHJldHVybiBpbnR8ZmxvYXR8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2ltYWdlX2hlaWdodCgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2ltYWdlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAsICdoZWlnaHQnKSkKCQl7CgkJCXJldHVybiByb3VuZCgkcmV0dXJuWzBdWydkYXRhJ10pOwoJCX0KCQllbHNlaWYgKCR0aGlzLT5nZXRfdHlwZSgpICYgU0lNUExFUElFX1RZUEVfUlNTX1NZTkRJQ0FUSU9OICYmICR0aGlzLT5nZXRfaW1hZ2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ3VybCcpKQoJCXsKCQkJcmV0dXJuIDMxLjA7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBmZWVkCgkgKgoJICogVGhpcyBpcyB3ZWxsLXN1aXRlZCBmb3Ige0BsaW5rIGh0dHA6Ly9waHAubmV0L2ZvciBmb3IoKX0gbG9vcHMgd2l0aAoJICoge0BzZWUgZ2V0X2l0ZW0oKX0KCSAqCgkgKiBAcGFyYW0gaW50ICRtYXggTWF4aW11bSB2YWx1ZSB0byByZXR1cm4uIDAgZm9yIG5vIGxpbWl0CgkgKiBAcmV0dXJuIGludCBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIGZlZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9pdGVtX3F1YW50aXR5KCRtYXggPSAwKQoJewoJCSRtYXggPSAoaW50KSAkbWF4OwoJCSRxdHkgPSBjb3VudCgkdGhpcy0+Z2V0X2l0ZW1zKCkpOwoJCWlmICgkbWF4ID09PSAwKQoJCXsKCQkJcmV0dXJuICRxdHk7CgkJfQoKCQlyZXR1cm4gKCRxdHkgPiAkbWF4KSA/ICRtYXggOiAkcXR5OwoJfQoKCS8qKgoJICogR2V0IGEgc2luZ2xlIGl0ZW0gZnJvbSB0aGUgZmVlZAoJICoKCSAqIFRoaXMgaXMgYmV0dGVyIHN1aXRlZCBmb3Ige0BsaW5rIGh0dHA6Ly9waHAubmV0L2ZvciBmb3IoKX0gbG9vcHMsIHdoZXJlYXMKCSAqIHtAc2VlIGdldF9pdGVtcygpfSBpcyBiZXR0ZXIgc3VpdGVkIGZvcgoJICoge0BsaW5rIGh0dHA6Ly9waHAubmV0L2ZvcmVhY2ggZm9yZWFjaCgpfSBsb29wcy4KCSAqCgkgKiBAc2VlIGdldF9pdGVtX3F1YW50aXR5KCkKCSAqIEBzaW5jZSBCZXRhIDIKCSAqIEBwYXJhbSBpbnQgJGtleSBUaGUgaXRlbSB0aGF0IHlvdSB3YW50IHRvIHJldHVybi4gUmVtZW1iZXIgdGhhdCBhcnJheXMgYmVnaW4gd2l0aCAwLCBub3QgMQoJICogQHJldHVybiBTaW1wbGVQaWVfSXRlbXxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfaXRlbSgka2V5ID0gMCkKCXsKCQkkaXRlbXMgPSAkdGhpcy0+Z2V0X2l0ZW1zKCk7CgkJaWYgKGlzc2V0KCRpdGVtc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGl0ZW1zWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYWxsIGl0ZW1zIGZyb20gdGhlIGZlZWQKCSAqCgkgKiBUaGlzIGlzIGJldHRlciBzdWl0ZWQgZm9yIHtAbGluayBodHRwOi8vcGhwLm5ldC9mb3IgZm9yKCl9IGxvb3BzLCB3aGVyZWFzCgkgKiB7QHNlZSBnZXRfaXRlbXMoKX0gaXMgYmV0dGVyIHN1aXRlZCBmb3IKCSAqIHtAbGluayBodHRwOi8vcGhwLm5ldC9mb3JlYWNoIGZvcmVhY2goKX0gbG9vcHMuCgkgKgoJICogQHNlZSBnZXRfaXRlbV9xdWFudGl0eQoJICogQHNpbmNlIEJldGEgMgoJICogQHBhcmFtIGludCAkc3RhcnQgSW5kZXggdG8gc3RhcnQgYXQKCSAqIEBwYXJhbSBpbnQgJGVuZCBOdW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuLiAwIGZvciBhbGwgaXRlbXMgYWZ0ZXIgYCRzdGFydGAKCSAqIEByZXR1cm4gU2ltcGxlUGllX0l0ZW1bXXxudWxsIExpc3Qgb2Yge0BzZWUgU2ltcGxlUGllX0l0ZW19IG9iamVjdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9pdGVtcygkc3RhcnQgPSAwLCAkZW5kID0gMCkKCXsKCQlpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWydpdGVtcyddKSkKCQl7CgkJCWlmICghZW1wdHkoJHRoaXMtPm11bHRpZmVlZF9vYmplY3RzKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2l0ZW1zJ10gPSBTaW1wbGVQaWU6Om1lcmdlX2l0ZW1zKCR0aGlzLT5tdWx0aWZlZWRfb2JqZWN0cywgJHN0YXJ0LCAkZW5kLCAkdGhpcy0+aXRlbV9saW1pdCk7CgkJCQlpZiAoZW1wdHkoJHRoaXMtPmRhdGFbJ2l0ZW1zJ10pKQoJCQkJewoJCQkJCXJldHVybiBhcnJheSgpOwoJCQkJfQoJCQkJcmV0dXJuICR0aGlzLT5kYXRhWydpdGVtcyddOwoJCQl9CgkJCSR0aGlzLT5kYXRhWydpdGVtcyddID0gYXJyYXkoKTsKCQkJaWYgKCRpdGVtcyA9ICR0aGlzLT5nZXRfZmVlZF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ2VudHJ5JykpCgkJCXsKCQkJCSRrZXlzID0gYXJyYXlfa2V5cygkaXRlbXMpOwoJCQkJZm9yZWFjaCAoJGtleXMgYXMgJGtleSkKCQkJCXsKCQkJCQkkdGhpcy0+ZGF0YVsnaXRlbXMnXVtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0l0ZW0nLCBhcnJheSgkdGhpcywgJGl0ZW1zWyRrZXldKSk7CgkJCQl9CgkJCX0KCQkJaWYgKCRpdGVtcyA9ICR0aGlzLT5nZXRfZmVlZF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ2VudHJ5JykpCgkJCXsKCQkJCSRrZXlzID0gYXJyYXlfa2V5cygkaXRlbXMpOwoJCQkJZm9yZWFjaCAoJGtleXMgYXMgJGtleSkKCQkJCXsKCQkJCQkkdGhpcy0+ZGF0YVsnaXRlbXMnXVtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0l0ZW0nLCBhcnJheSgkdGhpcywgJGl0ZW1zWyRrZXldKSk7CgkJCQl9CgkJCX0KCQkJaWYgKCRpdGVtcyA9ICR0aGlzLT5nZXRfZmVlZF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzEwLCAnaXRlbScpKQoJCQl7CgkJCQkka2V5cyA9IGFycmF5X2tleXMoJGl0ZW1zKTsKCQkJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkpCgkJCQl7CgkJCQkJJHRoaXMtPmRhdGFbJ2l0ZW1zJ11bXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdJdGVtJywgYXJyYXkoJHRoaXMsICRpdGVtc1ska2V5XSkpOwoJCQkJfQoJCQl9CgkJCWlmICgkaXRlbXMgPSAkdGhpcy0+Z2V0X2ZlZWRfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18wOTAsICdpdGVtJykpCgkJCXsKCQkJCSRrZXlzID0gYXJyYXlfa2V5cygkaXRlbXMpOwoJCQkJZm9yZWFjaCAoJGtleXMgYXMgJGtleSkKCQkJCXsKCQkJCQkkdGhpcy0+ZGF0YVsnaXRlbXMnXVtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0l0ZW0nLCBhcnJheSgkdGhpcywgJGl0ZW1zWyRrZXldKSk7CgkJCQl9CgkJCX0KCQkJaWYgKCRpdGVtcyA9ICR0aGlzLT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnaXRlbScpKQoJCQl7CgkJCQkka2V5cyA9IGFycmF5X2tleXMoJGl0ZW1zKTsKCQkJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkpCgkJCQl7CgkJCQkJJHRoaXMtPmRhdGFbJ2l0ZW1zJ11bXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdJdGVtJywgYXJyYXkoJHRoaXMsICRpdGVtc1ska2V5XSkpOwoJCQkJfQoJCQl9CgkJfQoKCQlpZiAoZW1wdHkoJHRoaXMtPmRhdGFbJ2l0ZW1zJ10pKQoJCXsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfQoKCQlpZiAoJHRoaXMtPm9yZGVyX2J5X2RhdGUpCgkJewoJCQlpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWydvcmRlcmVkX2l0ZW1zJ10pKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnb3JkZXJlZF9pdGVtcyddID0gJHRoaXMtPmRhdGFbJ2l0ZW1zJ107CgkJCQl1c29ydCgkdGhpcy0+ZGF0YVsnb3JkZXJlZF9pdGVtcyddLCBhcnJheShnZXRfY2xhc3MoJHRoaXMpLCAnc29ydF9pdGVtcycpKTsKCQkgCX0KCQkJJGl0ZW1zID0gJHRoaXMtPmRhdGFbJ29yZGVyZWRfaXRlbXMnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJGl0ZW1zID0gJHRoaXMtPmRhdGFbJ2l0ZW1zJ107CgkJfQoJCS8vIFNsaWNlIHRoZSBkYXRhIGFzIGRlc2lyZWQKCQlpZiAoJGVuZCA9PT0gMCkKCQl7CgkJCXJldHVybiBhcnJheV9zbGljZSgkaXRlbXMsICRzdGFydCk7CgkJfQoKCQlyZXR1cm4gYXJyYXlfc2xpY2UoJGl0ZW1zLCAkc3RhcnQsICRlbmQpOwoJfQoKCS8qKgoJICogU2V0IHRoZSBmYXZpY29uIGhhbmRsZXIKCSAqCgkgKiBAZGVwcmVjYXRlZCBVc2UgeW91ciBvd24gZmF2aWNvbiBoYW5kbGluZyBpbnN0ZWFkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfZmF2aWNvbl9oYW5kbGVyKCRwYWdlID0gZmFsc2UsICRxcyA9ICdpJykKCXsKCQkkbGV2ZWwgPSBkZWZpbmVkKCdFX1VTRVJfREVQUkVDQVRFRCcpID8gRV9VU0VSX0RFUFJFQ0FURUQgOiBFX1VTRVJfV0FSTklORzsKCQl0cmlnZ2VyX2Vycm9yKCdGYXZpY29uIGhhbmRsaW5nIGhhcyBiZWVuIHJlbW92ZWQsIHBsZWFzZSB1c2UgeW91ciBvd24gaGFuZGxpbmcnLCAkbGV2ZWwpOwoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIEdldCB0aGUgZmF2aWNvbiBmb3IgdGhlIGN1cnJlbnQgZmVlZAoJICoKCSAqIEBkZXByZWNhdGVkIFVzZSB5b3VyIG93biBmYXZpY29uIGhhbmRsaW5nIGluc3RlYWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9mYXZpY29uKCkKCXsKCQkkbGV2ZWwgPSBkZWZpbmVkKCdFX1VTRVJfREVQUkVDQVRFRCcpID8gRV9VU0VSX0RFUFJFQ0FURUQgOiBFX1VTRVJfV0FSTklORzsKCQl0cmlnZ2VyX2Vycm9yKCdGYXZpY29uIGhhbmRsaW5nIGhhcyBiZWVuIHJlbW92ZWQsIHBsZWFzZSB1c2UgeW91ciBvd24gaGFuZGxpbmcnLCAkbGV2ZWwpOwoKCQlpZiAoKCR1cmwgPSAkdGhpcy0+Z2V0X2xpbmsoKSkgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/ZG9tYWluPScgLiB1cmxlbmNvZGUoJHVybCk7CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBNYWdpYyBtZXRob2QgaGFuZGxlcgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBNZXRob2QgbmFtZQoJICogQHBhcmFtIGFycmF5ICRhcmdzIEFyZ3VtZW50cyB0byB0aGUgbWV0aG9kCgkgKiBAcmV0dXJuIG1peGVkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG1ldGhvZCwgJGFyZ3MpCgl7CgkJaWYgKHN0cnBvcygkbWV0aG9kLCAnc3Vic2NyaWJlXycpID09PSAwKQoJCXsKCQkJJGxldmVsID0gZGVmaW5lZCgnRV9VU0VSX0RFUFJFQ0FURUQnKSA/IEVfVVNFUl9ERVBSRUNBVEVEIDogRV9VU0VSX1dBUk5JTkc7CgkJCXRyaWdnZXJfZXJyb3IoJ3N1YnNjcmliZV8qKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgaW1wbGVtZW50IHRoZSBjYWxsYmFjayB5b3Vyc2VsZicsICRsZXZlbCk7CgkJCXJldHVybiAnJzsKCQl9CgkJaWYgKCRtZXRob2QgPT09ICdlbmFibGVfeG1sX2R1bXAnKQoJCXsKCQkJJGxldmVsID0gZGVmaW5lZCgnRV9VU0VSX0RFUFJFQ0FURUQnKSA/IEVfVVNFUl9ERVBSRUNBVEVEIDogRV9VU0VSX1dBUk5JTkc7CgkJCXRyaWdnZXJfZXJyb3IoJ2VuYWJsZV94bWxfZHVtcCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHVzZSBnZXRfcmF3X2RhdGEoKSBpbnN0ZWFkJywgJGxldmVsKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJGNsYXNzID0gZ2V0X2NsYXNzKCR0aGlzKTsKCQkkdHJhY2UgPSBkZWJ1Z19iYWNrdHJhY2UoKTsKCQkkZmlsZSA9ICR0cmFjZVswXVsnZmlsZSddOwoJCSRsaW5lID0gJHRyYWNlWzBdWydsaW5lJ107CgkJdHJpZ2dlcl9lcnJvcigiQ2FsbCB0byB1bmRlZmluZWQgbWV0aG9kICRjbGFzczo6JG1ldGhvZCgpIGluICRmaWxlIG9uIGxpbmUgJGxpbmUiLCBFX1VTRVJfRVJST1IpOwoJfQoKCS8qKgoJICogU29ydGluZyBjYWxsYmFjayBmb3IgaXRlbXMKCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEBwYXJhbSBTaW1wbGVQaWUgJGEKCSAqIEBwYXJhbSBTaW1wbGVQaWUgJGIKCSAqIEByZXR1cm4gYm9vbGVhbgoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnRfaXRlbXMoJGEsICRiKQoJewoJCSRhX2RhdGUgPSAkYS0+Z2V0X2RhdGUoJ1UnKTsKCQkkYl9kYXRlID0gJGItPmdldF9kYXRlKCdVJyk7CgkJaWYgKCRhX2RhdGUgJiYgJGJfZGF0ZSkgewoJCQlyZXR1cm4gJGFfZGF0ZSA+ICRiX2RhdGUgPyAtMSA6IDE7CgkJfQoJCS8vIFNvcnQgaXRlbXMgd2l0aG91dCBkYXRlcyB0byB0aGUgdG9wLgoJCWlmICgkYV9kYXRlKSB7CgkJCXJldHVybiAxOwoJCX0KCQlpZiAoJGJfZGF0ZSkgewoJCQlyZXR1cm4gLTE7CgkJfQoJCXJldHVybiAwOwoJfQoKCS8qKgoJICogTWVyZ2UgaXRlbXMgZnJvbSBzZXZlcmFsIGZlZWRzIGludG8gb25lCgkgKgoJICogSWYgeW91J3JlIG1lcmdpbmcgbXVsdGlwbGUgZmVlZHMgdG9nZXRoZXIsIHRoZXkgbmVlZCB0byBhbGwgaGF2ZSBkYXRlcwoJICogZm9yIHRoZSBpdGVtcyBvciBlbHNlIFNpbXBsZVBpZSB3aWxsIHJlZnVzZSB0byBzb3J0IHRoZW0uCgkgKgoJICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvd2lraS90dXRvcmlhbC9zb3J0X211bHRpcGxlX2ZlZWRzX2J5X3RpbWVfYW5kX2RhdGUjaWZfZmVlZHNfcmVxdWlyZV9zZXBhcmF0ZV9wZXItZmVlZF9zZXR0aW5ncwoJICogQHBhcmFtIGFycmF5ICR1cmxzIExpc3Qgb2YgU2ltcGxlUGllIGZlZWQgb2JqZWN0cyB0byBtZXJnZQoJICogQHBhcmFtIGludCAkc3RhcnQgU3RhcnRpbmcgaXRlbQoJICogQHBhcmFtIGludCAkZW5kIE51bWJlciBvZiBpdGVtcyB0byByZXR1cm4KCSAqIEBwYXJhbSBpbnQgJGxpbWl0IE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHBlciBmZWVkCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWVyZ2VfaXRlbXMoJHVybHMsICRzdGFydCA9IDAsICRlbmQgPSAwLCAkbGltaXQgPSAwKQoJewoJCWlmIChpc19hcnJheSgkdXJscykgJiYgc2l6ZW9mKCR1cmxzKSA+IDApCgkJewoJCQkkaXRlbXMgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkdXJscyBhcyAkYXJnKQoJCQl7CgkJCQlpZiAoJGFyZyBpbnN0YW5jZW9mIFNpbXBsZVBpZSkKCQkJCXsKCQkJCQkkaXRlbXMgPSBhcnJheV9tZXJnZSgkaXRlbXMsICRhcmctPmdldF9pdGVtcygwLCAkbGltaXQpKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl0cmlnZ2VyX2Vycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBTaW1wbGVQaWUgb2JqZWN0cycsIEVfVVNFUl9XQVJOSU5HKTsKCQkJCX0KCQkJfQoKCQkJdXNvcnQoJGl0ZW1zLCBhcnJheShnZXRfY2xhc3MoJHVybHNbMF0pLCAnc29ydF9pdGVtcycpKTsKCgkJCWlmICgkZW5kID09PSAwKQoJCQl7CgkJCQlyZXR1cm4gYXJyYXlfc2xpY2UoJGl0ZW1zLCAkc3RhcnQpOwoJCQl9CgoJCQlyZXR1cm4gYXJyYXlfc2xpY2UoJGl0ZW1zLCAkc3RhcnQsICRlbmQpOwoJCX0KCgkJdHJpZ2dlcl9lcnJvcignQ2Fubm90IG1lcmdlIHplcm8gU2ltcGxlUGllIG9iamVjdHMnLCBFX1VTRVJfV0FSTklORyk7CgkJcmV0dXJuIGFycmF5KCk7Cgl9CgoJLyoqCgkgKiBTdG9yZSBQdWJTdWJIdWJidWIgbGlua3MgYXMgaGVhZGVycwoJICoKCSAqIFRoZXJlIGlzIG5vIHdheSB0byBmaW5kIFB1U0ggbGlua3MgaW4gdGhlIGJvZHkgb2YgYSBtaWNyb2Zvcm1hdHMgZmVlZCwKCSAqIHNvIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBoZWFkZXJzIHdoZW4gZm91bmQsIHRvIGJlIHVzZWQgbGF0ZXIgYnkgZ2V0X2xpbmtzLgoJICogQHBhcmFtIFNpbXBsZVBpZV9GaWxlICRmaWxlCgkgKiBAcGFyYW0gc3RyaW5nICRodWIKCSAqIEBwYXJhbSBzdHJpbmcgJHNlbGYKCSAqLwoJcHJpdmF0ZSBmdW5jdGlvbiBzdG9yZV9saW5rcygmJGZpbGUsICRodWIsICRzZWxmKSB7CgkJaWYgKGlzc2V0KCRmaWxlLT5oZWFkZXJzWydsaW5rJ11bJ2h1YiddKSB8fAoJCQkgIChpc3NldCgkZmlsZS0+aGVhZGVyc1snbGluayddKSAmJgoJCQkgICBwcmVnX21hdGNoKCcvcmVsPWh1Yi8nLCAkZmlsZS0+aGVhZGVyc1snbGluayddKSkpCgkJewoJCQlyZXR1cm47CgkJfQoKCQlpZiAoJGh1YikKCQl7CgkJCWlmIChpc3NldCgkZmlsZS0+aGVhZGVyc1snbGluayddKSkKCQkJewoJCQkJaWYgKCRmaWxlLT5oZWFkZXJzWydsaW5rJ10gIT09ICcnKQoJCQkJewoJCQkJCSRmaWxlLT5oZWFkZXJzWydsaW5rJ10gPSAnLCAnOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGZpbGUtPmhlYWRlcnNbJ2xpbmsnXSA9ICcnOwoJCQl9CgkJCSRmaWxlLT5oZWFkZXJzWydsaW5rJ10gLj0gJzwnLiRodWIuJz47IHJlbD1odWInOwoJCQlpZiAoJHNlbGYpCgkJCXsKCQkJCSRmaWxlLT5oZWFkZXJzWydsaW5rJ10gLj0gJywgPCcuJHNlbGYuJz47IHJlbD1zZWxmJzsKCQkJfQoJCX0KCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Author.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBNYW5hZ2VzIGFsbCBhdXRob3ItcmVsYXRlZCBkYXRhCiAqCiAqIFVzZWQgYnkge0BzZWUgU2ltcGxlUGllX0l0ZW06OmdldF9hdXRob3IoKX0gYW5kIHtAc2VlIFNpbXBsZVBpZTo6Z2V0X2F1dGhvcnMoKX0KICoKICogVGhpcyBjbGFzcyBjYW4gYmUgb3ZlcmxvYWRlZCB3aXRoIHtAc2VlIFNpbXBsZVBpZTo6c2V0X2F1dGhvcl9jbGFzcygpfQogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgQVBJCiAqLwpjbGFzcyBTaW1wbGVQaWVfQXV0aG9yCnsKCS8qKgoJICogQXV0aG9yJ3MgbmFtZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9uYW1lKCkKCSAqLwoJdmFyICRuYW1lOwoKCS8qKgoJICogQXV0aG9yJ3MgbGluawoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9saW5rKCkKCSAqLwoJdmFyICRsaW5rOwoKCS8qKgoJICogQXV0aG9yJ3MgZW1haWwgYWRkcmVzcwoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9lbWFpbCgpCgkgKi8KCXZhciAkZW1haWw7CgoJLyoqCgkgKiBDb25zdHJ1Y3RvciwgdXNlZCB0byBpbnB1dCB0aGUgZGF0YQoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKCSAqIEBwYXJhbSBzdHJpbmcgJGxpbmsKCSAqIEBwYXJhbSBzdHJpbmcgJGVtYWlsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSA9IG51bGwsICRsaW5rID0gbnVsbCwgJGVtYWlsID0gbnVsbCkKCXsKCQkkdGhpcy0+bmFtZSA9ICRuYW1lOwoJCSR0aGlzLT5saW5rID0gJGxpbms7CgkJJHRoaXMtPmVtYWlsID0gJGVtYWlsOwoJfQoKCS8qKgoJICogU3RyaW5nLWlmaWVkIHZlcnNpb24KCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCgl7CgkJLy8gVGhlcmUgaXMgbm8gJHRoaXMtPmRhdGEgaGVyZQoJCXJldHVybiBtZDUoc2VyaWFsaXplKCR0aGlzKSk7Cgl9CgoJLyoqCgkgKiBBdXRob3IncyBuYW1lCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKQoJewoJCWlmICgkdGhpcy0+bmFtZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+bmFtZTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogQXV0aG9yJ3MgbGluawoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9saW5rKCkKCXsKCQlpZiAoJHRoaXMtPmxpbmsgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmxpbms7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEF1dGhvcidzIGVtYWlsIGFkZHJlc3MKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfZW1haWwoKQoJewoJCWlmICgkdGhpcy0+ZW1haWwgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmVtYWlsOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBVc2VkIHRvIGNyZWF0ZSBjYWNoZSBvYmplY3RzCiAqCiAqIFRoaXMgY2xhc3MgY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCB7QHNlZSBTaW1wbGVQaWU6OnNldF9jYWNoZV9jbGFzcygpfSwKICogYWx0aG91Z2ggdGhlIHByZWZlcnJlZCB3YXkgaXMgdG8gY3JlYXRlIHlvdXIgb3duIGhhbmRsZXIKICogdmlhIHtAc2VlIHJlZ2lzdGVyKCl9CiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBDYWNoaW5nCiAqLwpjbGFzcyBTaW1wbGVQaWVfQ2FjaGUKewoJLyoqCgkgKiBDYWNoZSBoYW5kbGVyIGNsYXNzZXMKCSAqCgkgKiBUaGVzZSByZWNlaXZlIDMgcGFyYW1ldGVycyB0byB0aGVpciBjb25zdHJ1Y3RvciwgYXMgZG9jdW1lbnRlZCBpbgoJICoge0BzZWUgcmVnaXN0ZXIoKX0KCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHJvdGVjdGVkIHN0YXRpYyAkaGFuZGxlcnMgPSBhcnJheSgKCQknbXlzcWwnICAgICA9PiAnU2ltcGxlUGllX0NhY2hlX015U1FMJywKCQknbWVtY2FjaGUnICA9PiAnU2ltcGxlUGllX0NhY2hlX01lbWNhY2hlJywKCQknbWVtY2FjaGVkJyA9PiAnU2ltcGxlUGllX0NhY2hlX01lbWNhY2hlZCcsCgkJJ3JlZGlzJyAgICAgPT4gJ1NpbXBsZVBpZV9DYWNoZV9SZWRpcycKCSk7CgoJLyoqCgkgKiBEb24ndCBjYWxsIHRoZSBjb25zdHJ1Y3Rvci4gUGxlYXNlLgoJICovCglwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgeyB9CgoJLyoqCgkgKiBDcmVhdGUgYSBuZXcgU2ltcGxlUGllX0NhY2hlIG9iamVjdAoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGxvY2F0aW9uIFVSTCBsb2NhdGlvbiAoc2NoZW1lIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhhbmRsZXIpCgkgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBVbmlxdWUgaWRlbnRpZmllciBmb3IgY2FjaGUgb2JqZWN0CgkgKiBAcGFyYW0gc3RyaW5nICRleHRlbnNpb24gJ3NwaScgb3IgJ3NwYycKCSAqIEByZXR1cm4gU2ltcGxlUGllX0NhY2hlX0Jhc2UgVHlwZSBvZiBvYmplY3QgZGVwZW5kcyBvbiBzY2hlbWUgb2YgYCRsb2NhdGlvbmAKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfaGFuZGxlcigkbG9jYXRpb24sICRmaWxlbmFtZSwgJGV4dGVuc2lvbikKCXsKCQkkdHlwZSA9IGV4cGxvZGUoJzonLCAkbG9jYXRpb24sIDIpOwoJCSR0eXBlID0gJHR5cGVbMF07CgkJaWYgKCFlbXB0eShzZWxmOjokaGFuZGxlcnNbJHR5cGVdKSkKCQl7CgkJCSRjbGFzcyA9IHNlbGY6OiRoYW5kbGVyc1skdHlwZV07CgkJCXJldHVybiBuZXcgJGNsYXNzKCRsb2NhdGlvbiwgJGZpbGVuYW1lLCAkZXh0ZW5zaW9uKTsKCQl9CgoJCXJldHVybiBuZXcgU2ltcGxlUGllX0NhY2hlX0ZpbGUoJGxvY2F0aW9uLCAkZmlsZW5hbWUsICRleHRlbnNpb24pOwoJfQoKCS8qKgoJICogQ3JlYXRlIGEgbmV3IFNpbXBsZVBpZV9DYWNoZSBvYmplY3QKCSAqCgkgKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgZ2V0X2hhbmRsZXJ9IGluc3RlYWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNyZWF0ZSgkbG9jYXRpb24sICRmaWxlbmFtZSwgJGV4dGVuc2lvbikKCXsKCQl0cmlnZ2VyX2Vycm9yKCdDYWNoZTo6Y3JlYXRlKCkgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBDYWNoZTo6Z2V0X2hhbmRsZXIoKS4gU3dpdGNoIHRvIHRoZSByZWdpc3RyeSBzeXN0ZW0gdG8gdXNlIHRoaXMuJywgRV9VU0VSX0RFUFJFQ0FURUQpOwoJCXJldHVybiBzZWxmOjpnZXRfaGFuZGxlcigkbG9jYXRpb24sICRmaWxlbmFtZSwgJGV4dGVuc2lvbik7Cgl9CgoJLyoqCgkgKiBSZWdpc3RlciBhIGhhbmRsZXIKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICR0eXBlIERTTiB0eXBlIHRvIHJlZ2lzdGVyIGZvcgoJICogQHBhcmFtIHN0cmluZyAkY2xhc3MgTmFtZSBvZiBoYW5kbGVyIGNsYXNzLiBNdXN0IGltcGxlbWVudCBTaW1wbGVQaWVfQ2FjaGVfQmFzZQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCR0eXBlLCAkY2xhc3MpCgl7CgkJc2VsZjo6JGhhbmRsZXJzWyR0eXBlXSA9ICRjbGFzczsKCX0KCgkvKioKCSAqIFBhcnNlIGEgVVJMIGludG8gYW4gYXJyYXkKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICR1cmwKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZV9VUkwoJHVybCkKCXsKCQkkcGFyYW1zID0gcGFyc2VfdXJsKCR1cmwpOwoJCSRwYXJhbXNbJ2V4dHJhcyddID0gYXJyYXkoKTsKCQlpZiAoaXNzZXQoJHBhcmFtc1sncXVlcnknXSkpCgkJewoJCQlwYXJzZV9zdHIoJHBhcmFtc1sncXVlcnknXSwgJHBhcmFtc1snZXh0cmFzJ10pOwoJCX0KCQlyZXR1cm4gJHBhcmFtczsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/Base.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBCYXNlIGZvciBjYWNoZSBvYmplY3RzCiAqCiAqIENsYXNzZXMgdG8gYmUgdXNlZCB3aXRoIHtAc2VlIFNpbXBsZVBpZV9DYWNoZTo6cmVnaXN0ZXIoKX0gYXJlIGV4cGVjdGVkCiAqIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIENhY2hpbmcKICovCmludGVyZmFjZSBTaW1wbGVQaWVfQ2FjaGVfQmFzZQp7CgkvKioKCSAqIEZlZWQgY2FjaGUgdHlwZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCWNvbnN0IFRZUEVfRkVFRCA9ICdzcGMnOwoKCS8qKgoJICogSW1hZ2UgY2FjaGUgdHlwZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCWNvbnN0IFRZUEVfSU1BR0UgPSAnc3BpJzsKCgkvKioKCSAqIENyZWF0ZSBhIG5ldyBjYWNoZSBvYmplY3QKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRsb2NhdGlvbiBMb2NhdGlvbiBzdHJpbmcgKGZyb20gU2ltcGxlUGllOjokY2FjaGVfbG9jYXRpb24pCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFVuaXF1ZSBJRCBmb3IgdGhlIGNhY2hlCgkgKiBAcGFyYW0gc3RyaW5nICR0eXBlIEVpdGhlciBUWVBFX0ZFRUQgZm9yIFNpbXBsZVBpZSBkYXRhLCBvciBUWVBFX0lNQUdFIGZvciBpbWFnZSBkYXRhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbG9jYXRpb24sICRuYW1lLCAkdHlwZSk7CgoJLyoqCgkgKiBTYXZlIGRhdGEgdG8gdGhlIGNhY2hlCgkgKgoJICogQHBhcmFtIGFycmF5fFNpbXBsZVBpZSAkZGF0YSBEYXRhIHRvIHN0b3JlIGluIHRoZSBjYWNoZS4gSWYgcGFzc2VkIGEgU2ltcGxlUGllIG9iamVjdCwgb25seSBjYWNoZSB0aGUgJGRhdGEgcHJvcGVydHkKCSAqIEByZXR1cm4gYm9vbCBTdWNjZXNzZnVsbmVzcwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkZGF0YSk7CgoJLyoqCgkgKiBSZXRyaWV2ZSB0aGUgZGF0YSBzYXZlZCB0byB0aGUgY2FjaGUKCSAqCgkgKiBAcmV0dXJuIGFycmF5IERhdGEgZm9yIFNpbXBsZVBpZTo6JGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGxvYWQoKTsKCgkvKioKCSAqIFJldHJpZXZlIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgZm9yIHRoZSBjYWNoZQoJICoKCSAqIEByZXR1cm4gaW50IFRpbWVzdGFtcAoJICovCglwdWJsaWMgZnVuY3Rpb24gbXRpbWUoKTsKCgkvKioKCSAqIFNldCB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIHRvIHRoZSBjdXJyZW50IHRpbWUKCSAqCgkgKiBAcmV0dXJuIGJvb2wgU3VjY2VzcyBzdGF0dXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvdWNoKCk7CgoJLyoqCgkgKiBSZW1vdmUgdGhlIGNhY2hlCgkgKgoJICogQHJldHVybiBib29sIFN1Y2Nlc3Mgc3RhdHVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB1bmxpbmsoKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/DB.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBkYXRhYmFzZS1iYXNlZCBjYWNoZXMKICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIENhY2hpbmcKICovCmFic3RyYWN0IGNsYXNzIFNpbXBsZVBpZV9DYWNoZV9EQiBpbXBsZW1lbnRzIFNpbXBsZVBpZV9DYWNoZV9CYXNlCnsKCS8qKgoJICogSGVscGVyIGZvciBkYXRhYmFzZSBjb252ZXJzaW9uCgkgKgoJICogQ29udmVydHMgYSBnaXZlbiB7QHNlZSBTaW1wbGVQaWV9IG9iamVjdCBpbnRvIGRhdGEgdG8gYmUgc3RvcmVkCgkgKgoJICogQHBhcmFtIFNpbXBsZVBpZSAkZGF0YQoJICogQHJldHVybiBhcnJheSBGaXJzdCBpdGVtIGlzIHRoZSBzZXJpYWxpemVkIGRhdGEgZm9yIHN0b3JhZ2UsIHNlY29uZCBpdGVtIGlzIHRoZSB1bmlxdWUgSUQgZm9yIHRoaXMgaXRlbQoJICovCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHByZXBhcmVfc2ltcGxlcGllX29iamVjdF9mb3JfY2FjaGUoJGRhdGEpCgl7CgkJJGl0ZW1zID0gJGRhdGEtPmdldF9pdGVtcygpOwoJCSRpdGVtc19ieV9pZCA9IGFycmF5KCk7CgoJCWlmICghZW1wdHkoJGl0ZW1zKSkKCQl7CgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkKCQkJewoJCQkJJGl0ZW1zX2J5X2lkWyRpdGVtLT5nZXRfaWQoKV0gPSAkaXRlbTsKCQkJfQoKCQkJaWYgKGNvdW50KCRpdGVtc19ieV9pZCkgIT09IGNvdW50KCRpdGVtcykpCgkJCXsKCQkJCSRpdGVtc19ieV9pZCA9IGFycmF5KCk7CgkJCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pCgkJCQl7CgkJCQkJJGl0ZW1zX2J5X2lkWyRpdGVtLT5nZXRfaWQodHJ1ZSldID0gJGl0ZW07CgkJCQl9CgkJCX0KCgkJCWlmIChpc3NldCgkZGF0YS0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydmZWVkJ11bMF0pKQoJCQl7CgkJCQkkY2hhbm5lbCA9JiAkZGF0YS0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydmZWVkJ11bMF07CgkJCX0KCQkJZWxzZWlmIChpc3NldCgkZGF0YS0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWydmZWVkJ11bMF0pKQoJCQl7CgkJCQkkY2hhbm5lbCA9JiAkZGF0YS0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWydmZWVkJ11bMF07CgkJCX0KCQkJZWxzZWlmIChpc3NldCgkZGF0YS0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JERl1bJ1JERiddWzBdKSkKCQkJewoJCQkJJGNoYW5uZWwgPSYgJGRhdGEtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXTsKCQkJfQoJCQllbHNlaWYgKGlzc2V0KCRkYXRhLT5kYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwXVsncnNzJ11bMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydjaGFubmVsJ11bMF0pKQoJCQl7CgkJCQkkY2hhbm5lbCA9JiAkZGF0YS0+ZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMF1bJ3JzcyddWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwXVsnY2hhbm5lbCddWzBdOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGNoYW5uZWwgPSBudWxsOwoJCQl9CgoJCQlpZiAoJGNoYW5uZWwgIT09IG51bGwpCgkJCXsKCQkJCWlmIChpc3NldCgkY2hhbm5lbFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbnRyeSddKSkKCQkJCXsKCQkJCQl1bnNldCgkY2hhbm5lbFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbnRyeSddKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkY2hhbm5lbFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWydlbnRyeSddKSkKCQkJCXsKCQkJCQl1bnNldCgkY2hhbm5lbFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWydlbnRyeSddKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkY2hhbm5lbFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMF1bJ2l0ZW0nXSkpCgkJCQl7CgkJCQkJdW5zZXQoJGNoYW5uZWxbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTBdWydpdGVtJ10pOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRjaGFubmVsWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MF1bJ2l0ZW0nXSkpCgkJCQl7CgkJCQkJdW5zZXQoJGNoYW5uZWxbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMDkwXVsnaXRlbSddKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkY2hhbm5lbFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMF1bJ2l0ZW0nXSkpCgkJCQl7CgkJCQkJdW5zZXQoJGNoYW5uZWxbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydpdGVtJ10pOwoJCQkJfQoJCQl9CgkJCWlmIChpc3NldCgkZGF0YS0+ZGF0YVsnaXRlbXMnXSkpCgkJCXsKCQkJCXVuc2V0KCRkYXRhLT5kYXRhWydpdGVtcyddKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGRhdGEtPmRhdGFbJ29yZGVyZWRfaXRlbXMnXSkpCgkJCXsKCQkJCXVuc2V0KCRkYXRhLT5kYXRhWydvcmRlcmVkX2l0ZW1zJ10pOwoJCQl9CgkJfQoJCXJldHVybiBhcnJheShzZXJpYWxpemUoJGRhdGEtPmRhdGEpLCAkaXRlbXNfYnlfaWQpOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/File.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBDYWNoZXMgZGF0YSB0byB0aGUgZmlsZXN5c3RlbQogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgQ2FjaGluZwogKi8KY2xhc3MgU2ltcGxlUGllX0NhY2hlX0ZpbGUgaW1wbGVtZW50cyBTaW1wbGVQaWVfQ2FjaGVfQmFzZQp7CgkvKioKCSAqIExvY2F0aW9uIHN0cmluZwoJICoKCSAqIEBzZWUgU2ltcGxlUGllOjokY2FjaGVfbG9jYXRpb24KCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXByb3RlY3RlZCAkbG9jYXRpb247CgoJLyoqCgkgKiBGaWxlbmFtZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXByb3RlY3RlZCAkZmlsZW5hbWU7CgoJLyoqCgkgKiBGaWxlIGV4dGVuc2lvbgoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXByb3RlY3RlZCAkZXh0ZW5zaW9uOwoKCS8qKgoJICogRmlsZSBwYXRoCgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRuYW1lOwoKCS8qKgoJICogQ3JlYXRlIGEgbmV3IGNhY2hlIG9iamVjdAoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGxvY2F0aW9uIExvY2F0aW9uIHN0cmluZyAoZnJvbSBTaW1wbGVQaWU6OiRjYWNoZV9sb2NhdGlvbikKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVW5pcXVlIElEIGZvciB0aGUgY2FjaGUKCSAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgRWl0aGVyIFRZUEVfRkVFRCBmb3IgU2ltcGxlUGllIGRhdGEsIG9yIFRZUEVfSU1BR0UgZm9yIGltYWdlIGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsb2NhdGlvbiwgJG5hbWUsICR0eXBlKQoJewoJCSR0aGlzLT5sb2NhdGlvbiA9ICRsb2NhdGlvbjsKCQkkdGhpcy0+ZmlsZW5hbWUgPSAkbmFtZTsKCQkkdGhpcy0+ZXh0ZW5zaW9uID0gJHR5cGU7CgkJJHRoaXMtPm5hbWUgPSAiJHRoaXMtPmxvY2F0aW9uLyR0aGlzLT5maWxlbmFtZS4kdGhpcy0+ZXh0ZW5zaW9uIjsKCX0KCgkvKioKCSAqIFNhdmUgZGF0YSB0byB0aGUgY2FjaGUKCSAqCgkgKiBAcGFyYW0gYXJyYXl8U2ltcGxlUGllICRkYXRhIERhdGEgdG8gc3RvcmUgaW4gdGhlIGNhY2hlLiBJZiBwYXNzZWQgYSBTaW1wbGVQaWUgb2JqZWN0LCBvbmx5IGNhY2hlIHRoZSAkZGF0YSBwcm9wZXJ0eQoJICogQHJldHVybiBib29sIFN1Y2Nlc3NmdWxuZXNzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCRkYXRhKQoJewoJCWlmIChmaWxlX2V4aXN0cygkdGhpcy0+bmFtZSkgJiYgaXNfd3JpdGFibGUoJHRoaXMtPm5hbWUpIHx8IGZpbGVfZXhpc3RzKCR0aGlzLT5sb2NhdGlvbikgJiYgaXNfd3JpdGFibGUoJHRoaXMtPmxvY2F0aW9uKSkKCQl7CgkJCWlmICgkZGF0YSBpbnN0YW5jZW9mIFNpbXBsZVBpZSkKCQkJewoJCQkJJGRhdGEgPSAkZGF0YS0+ZGF0YTsKCQkJfQoKCQkJJGRhdGEgPSBzZXJpYWxpemUoJGRhdGEpOwoJCQlyZXR1cm4gKGJvb2wpIGZpbGVfcHV0X2NvbnRlbnRzKCR0aGlzLT5uYW1lLCAkZGF0YSk7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFJldHJpZXZlIHRoZSBkYXRhIHNhdmVkIHRvIHRoZSBjYWNoZQoJICoKCSAqIEByZXR1cm4gYXJyYXkgRGF0YSBmb3IgU2ltcGxlUGllOjokZGF0YQoJICovCglwdWJsaWMgZnVuY3Rpb24gbG9hZCgpCgl7CgkJaWYgKGZpbGVfZXhpc3RzKCR0aGlzLT5uYW1lKSAmJiBpc19yZWFkYWJsZSgkdGhpcy0+bmFtZSkpCgkJewoJCQlyZXR1cm4gdW5zZXJpYWxpemUoZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPm5hbWUpKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogUmV0cmlldmUgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBmb3IgdGhlIGNhY2hlCgkgKgoJICogQHJldHVybiBpbnQgVGltZXN0YW1wCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtdGltZSgpCgl7CgkJcmV0dXJuIEBmaWxlbXRpbWUoJHRoaXMtPm5hbWUpOwoJfQoKCS8qKgoJICogU2V0IHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgdG8gdGhlIGN1cnJlbnQgdGltZQoJICoKCSAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIHN0YXR1cwoJICovCglwdWJsaWMgZnVuY3Rpb24gdG91Y2goKQoJewoJCXJldHVybiBAdG91Y2goJHRoaXMtPm5hbWUpOwoJfQoKCS8qKgoJICogUmVtb3ZlIHRoZSBjYWNoZQoJICoKCSAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIHN0YXR1cwoJICovCglwdWJsaWMgZnVuY3Rpb24gdW5saW5rKCkKCXsKCQlpZiAoZmlsZV9leGlzdHMoJHRoaXMtPm5hbWUpKQoJCXsKCQkJcmV0dXJuIHVubGluaygkdGhpcy0+bmFtZSk7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/Memcache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBDYWNoZXMgZGF0YSB0byBtZW1jYWNoZQogKgogKiBSZWdpc3RlcmVkIGZvciBVUkxzIHdpdGggdGhlICJtZW1jYWNoZSIgcHJvdG9jb2wKICoKICogRm9yIGV4YW1wbGUsIGBtZW1jYWNoZTovL2xvY2FsaG9zdDoxMTIxMS8/dGltZW91dD0zNjAwJnByZWZpeD1zcF9gIHdpbGwKICogY29ubmVjdCB0byBtZW1jYWNoZSBvbiBgbG9jYWxob3N0YCBvbiBwb3J0IDExMjExLiBBbGwgdGFibGVzIHdpbGwgYmUKICogcHJlZml4ZWQgd2l0aCBgc3BfYCBhbmQgZGF0YSB3aWxsIGV4cGlyZSBhZnRlciAzNjAwIHNlY29uZHMKICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIENhY2hpbmcKICogQHVzZXMgTWVtY2FjaGUKICovCmNsYXNzIFNpbXBsZVBpZV9DYWNoZV9NZW1jYWNoZSBpbXBsZW1lbnRzIFNpbXBsZVBpZV9DYWNoZV9CYXNlCnsKCS8qKgoJICogTWVtY2FjaGUgaW5zdGFuY2UKCSAqCgkgKiBAdmFyIE1lbWNhY2hlCgkgKi8KCXByb3RlY3RlZCAkY2FjaGU7CgoJLyoqCgkgKiBPcHRpb25zCgkgKgoJICogQHZhciBhcnJheQoJICovCglwcm90ZWN0ZWQgJG9wdGlvbnM7CgoJLyoqCgkgKiBDYWNoZSBuYW1lCgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRuYW1lOwoKCS8qKgoJICogQ3JlYXRlIGEgbmV3IGNhY2hlIG9iamVjdAoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGxvY2F0aW9uIExvY2F0aW9uIHN0cmluZyAoZnJvbSBTaW1wbGVQaWU6OiRjYWNoZV9sb2NhdGlvbikKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVW5pcXVlIElEIGZvciB0aGUgY2FjaGUKCSAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgRWl0aGVyIFRZUEVfRkVFRCBmb3IgU2ltcGxlUGllIGRhdGEsIG9yIFRZUEVfSU1BR0UgZm9yIGltYWdlIGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRsb2NhdGlvbiwgJG5hbWUsICR0eXBlKQoJewoJCSR0aGlzLT5vcHRpb25zID0gYXJyYXkoCgkJCSdob3N0JyA9PiAnMTI3LjAuMC4xJywKCQkJJ3BvcnQnID0+IDExMjExLAoJCQknZXh0cmFzJyA9PiBhcnJheSgKCQkJCSd0aW1lb3V0JyA9PiAzNjAwLCAvLyBvbmUgaG91cgoJCQkJJ3ByZWZpeCcgPT4gJ3NpbXBsZXBpZV8nLAoJCQkpLAoJCSk7CgkJJHRoaXMtPm9wdGlvbnMgPSBTaW1wbGVQaWVfTWlzYzo6YXJyYXlfbWVyZ2VfcmVjdXJzaXZlKCR0aGlzLT5vcHRpb25zLCBTaW1wbGVQaWVfQ2FjaGU6OnBhcnNlX1VSTCgkbG9jYXRpb24pKTsKCgkJJHRoaXMtPm5hbWUgPSAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gbWQ1KCIkbmFtZTokdHlwZSIpOwoKCQkkdGhpcy0+Y2FjaGUgPSBuZXcgTWVtY2FjaGUoKTsKCQkkdGhpcy0+Y2FjaGUtPmFkZFNlcnZlcigkdGhpcy0+b3B0aW9uc1snaG9zdCddLCAoaW50KSAkdGhpcy0+b3B0aW9uc1sncG9ydCddKTsKCX0KCgkvKioKCSAqIFNhdmUgZGF0YSB0byB0aGUgY2FjaGUKCSAqCgkgKiBAcGFyYW0gYXJyYXl8U2ltcGxlUGllICRkYXRhIERhdGEgdG8gc3RvcmUgaW4gdGhlIGNhY2hlLiBJZiBwYXNzZWQgYSBTaW1wbGVQaWUgb2JqZWN0LCBvbmx5IGNhY2hlIHRoZSAkZGF0YSBwcm9wZXJ0eQoJICogQHJldHVybiBib29sIFN1Y2Nlc3NmdWxuZXNzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCRkYXRhKQoJewoJCWlmICgkZGF0YSBpbnN0YW5jZW9mIFNpbXBsZVBpZSkKCQl7CgkJCSRkYXRhID0gJGRhdGEtPmRhdGE7CgkJfQoJCXJldHVybiAkdGhpcy0+Y2FjaGUtPnNldCgkdGhpcy0+bmFtZSwgc2VyaWFsaXplKCRkYXRhKSwgTUVNQ0FDSEVfQ09NUFJFU1NFRCwgKGludCkgJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWyd0aW1lb3V0J10pOwoJfQoKCS8qKgoJICogUmV0cmlldmUgdGhlIGRhdGEgc2F2ZWQgdG8gdGhlIGNhY2hlCgkgKgoJICogQHJldHVybiBhcnJheSBEYXRhIGZvciBTaW1wbGVQaWU6OiRkYXRhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBsb2FkKCkKCXsKCQkkZGF0YSA9ICR0aGlzLT5jYWNoZS0+Z2V0KCR0aGlzLT5uYW1lKTsKCgkJaWYgKCRkYXRhICE9PSBmYWxzZSkKCQl7CgkJCXJldHVybiB1bnNlcmlhbGl6ZSgkZGF0YSk7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFJldHJpZXZlIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgZm9yIHRoZSBjYWNoZQoJICoKCSAqIEByZXR1cm4gaW50IFRpbWVzdGFtcAoJICovCglwdWJsaWMgZnVuY3Rpb24gbXRpbWUoKQoJewoJCSRkYXRhID0gJHRoaXMtPmNhY2hlLT5nZXQoJHRoaXMtPm5hbWUpOwoKCQlpZiAoJGRhdGEgIT09IGZhbHNlKQoJCXsKCQkJLy8gZXNzZW50aWFsbHkgaWdub3JlIHRoZSBtdGltZSBiZWNhdXNlIE1lbWNhY2hlIGV4cGlyZXMgb24gaXRzIG93bgoJCQlyZXR1cm4gdGltZSgpOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogU2V0IHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgdG8gdGhlIGN1cnJlbnQgdGltZQoJICoKCSAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIHN0YXR1cwoJICovCglwdWJsaWMgZnVuY3Rpb24gdG91Y2goKQoJewoJCSRkYXRhID0gJHRoaXMtPmNhY2hlLT5nZXQoJHRoaXMtPm5hbWUpOwoKCQlpZiAoJGRhdGEgIT09IGZhbHNlKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5jYWNoZS0+c2V0KCR0aGlzLT5uYW1lLCAkZGF0YSwgTUVNQ0FDSEVfQ09NUFJFU1NFRCwgKGludCkgJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWyd0aW1lb3V0J10pOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogUmVtb3ZlIHRoZSBjYWNoZQoJICoKCSAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIHN0YXR1cwoJICovCglwdWJsaWMgZnVuY3Rpb24gdW5saW5rKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmNhY2hlLT5kZWxldGUoJHRoaXMtPm5hbWUsIDApOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/Memcached.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBDYWNoZXMgZGF0YSB0byBtZW1jYWNoZWQKICoKICogUmVnaXN0ZXJlZCBmb3IgVVJMcyB3aXRoIHRoZSAibWVtY2FjaGVkIiBwcm90b2NvbAogKgogKiBGb3IgZXhhbXBsZSwgYG1lbWNhY2hlZDovL2xvY2FsaG9zdDoxMTIxMS8/dGltZW91dD0zNjAwJnByZWZpeD1zcF9gIHdpbGwKICogY29ubmVjdCB0byBtZW1jYWNoZWQgb24gYGxvY2FsaG9zdGAgb24gcG9ydCAxMTIxMS4gQWxsIHRhYmxlcyB3aWxsIGJlCiAqIHByZWZpeGVkIHdpdGggYHNwX2AgYW5kIGRhdGEgd2lsbCBleHBpcmUgYWZ0ZXIgMzYwMCBzZWNvbmRzCiAqCiAqIEBwYWNrYWdlICAgIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBDYWNoaW5nCiAqIEBhdXRob3IgICAgIFBhdWwgTC4gTWNOZWVseQogKiBAdXNlcyAgICAgICBNZW1jYWNoZWQKICovCmNsYXNzIFNpbXBsZVBpZV9DYWNoZV9NZW1jYWNoZWQgaW1wbGVtZW50cyBTaW1wbGVQaWVfQ2FjaGVfQmFzZQp7CiAgICAvKioKICAgICAqIE1lbWNhY2hlZCBpbnN0YW5jZQogICAgICogQHZhciBNZW1jYWNoZWQKICAgICAqLwogICAgcHJvdGVjdGVkICRjYWNoZTsKCiAgICAvKioKICAgICAqIE9wdGlvbnMKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRvcHRpb25zOwoKICAgIC8qKgogICAgICogQ2FjaGUgbmFtZQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRuYW1lOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGNhY2hlIG9iamVjdAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYXRpb24gTG9jYXRpb24gc3RyaW5nIChmcm9tIFNpbXBsZVBpZTo6JGNhY2hlX2xvY2F0aW9uKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICAgVW5pcXVlIElEIGZvciB0aGUgY2FjaGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgICAgIEVpdGhlciBUWVBFX0ZFRUQgZm9yIFNpbXBsZVBpZSBkYXRhLCBvciBUWVBFX0lNQUdFIGZvciBpbWFnZSBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbG9jYXRpb24sICRuYW1lLCAkdHlwZSkgewogICAgICAgICR0aGlzLT5vcHRpb25zID0gYXJyYXkoCiAgICAgICAgICAgICdob3N0JyAgID0+ICcxMjcuMC4wLjEnLAogICAgICAgICAgICAncG9ydCcgICA9PiAxMTIxMSwKICAgICAgICAgICAgJ2V4dHJhcycgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndGltZW91dCcgPT4gMzYwMCwgLy8gb25lIGhvdXIKICAgICAgICAgICAgICAgICdwcmVmaXgnICA9PiAnc2ltcGxlcGllXycsCiAgICAgICAgICAgICksCiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+b3B0aW9ucyA9IFNpbXBsZVBpZV9NaXNjOjphcnJheV9tZXJnZV9yZWN1cnNpdmUoJHRoaXMtPm9wdGlvbnMsIFNpbXBsZVBpZV9DYWNoZTo6cGFyc2VfVVJMKCRsb2NhdGlvbikpOwoKICAgICAgICAkdGhpcy0+bmFtZSA9ICR0aGlzLT5vcHRpb25zWydleHRyYXMnXVsncHJlZml4J10gLiBtZDUoIiRuYW1lOiR0eXBlIik7CgogICAgICAgICR0aGlzLT5jYWNoZSA9IG5ldyBNZW1jYWNoZWQoKTsKICAgICAgICAkdGhpcy0+Y2FjaGUtPmFkZFNlcnZlcigkdGhpcy0+b3B0aW9uc1snaG9zdCddLCAoaW50KSR0aGlzLT5vcHRpb25zWydwb3J0J10pOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSBkYXRhIHRvIHRoZSBjYWNoZQogICAgICogQHBhcmFtIGFycmF5fFNpbXBsZVBpZSAkZGF0YSBEYXRhIHRvIHN0b3JlIGluIHRoZSBjYWNoZS4gSWYgcGFzc2VkIGEgU2ltcGxlUGllIG9iamVjdCwgb25seSBjYWNoZSB0aGUgJGRhdGEgcHJvcGVydHkKICAgICAqIEByZXR1cm4gYm9vbCBTdWNjZXNzZnVsbmVzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkZGF0YSkgewogICAgICAgIGlmICgkZGF0YSBpbnN0YW5jZW9mIFNpbXBsZVBpZSkgewogICAgICAgICAgICAkZGF0YSA9ICRkYXRhLT5kYXRhOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5zZXREYXRhKHNlcmlhbGl6ZSgkZGF0YSkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGRhdGEgc2F2ZWQgdG8gdGhlIGNhY2hlCiAgICAgKiBAcmV0dXJuIGFycmF5IERhdGEgZm9yIFNpbXBsZVBpZTo6JGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWQoKSB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+Y2FjaGUtPmdldCgkdGhpcy0+bmFtZSk7CgogICAgICAgIGlmICgkZGF0YSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIHVuc2VyaWFsaXplKCRkYXRhKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBmb3IgdGhlIGNhY2hlCiAgICAgKiBAcmV0dXJuIGludCBUaW1lc3RhbXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG10aW1lKCkgewogICAgICAgICRkYXRhID0gJHRoaXMtPmNhY2hlLT5nZXQoJHRoaXMtPm5hbWUgLiAnX210aW1lJyk7CiAgICAgICAgcmV0dXJuIChpbnQpICRkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgdG8gdGhlIGN1cnJlbnQgdGltZQogICAgICogQHJldHVybiBib29sIFN1Y2Nlc3Mgc3RhdHVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b3VjaCgpIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5jYWNoZS0+Z2V0KCR0aGlzLT5uYW1lKTsKICAgICAgICByZXR1cm4gJHRoaXMtPnNldERhdGEoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIHRoZSBjYWNoZQogICAgICogQHJldHVybiBib29sIFN1Y2Nlc3Mgc3RhdHVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmxpbmsoKSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWNoZS0+ZGVsZXRlKCR0aGlzLT5uYW1lLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIGFuZCBkYXRhIHRvIE1lbWNhY2hlZAogICAgICogQHJldHVybiBib29sIFN1Y2Nlc3Mgc3RhdHVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0RGF0YSgkZGF0YSkgewoKICAgICAgICBpZiAoJGRhdGEgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICR0aGlzLT5jYWNoZS0+c2V0KCR0aGlzLT5uYW1lIC4gJ19tdGltZScsIHRpbWUoKSwgKGludCkkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3RpbWVvdXQnXSk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y2FjaGUtPnNldCgkdGhpcy0+bmFtZSwgJGRhdGEsIChpbnQpJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWyd0aW1lb3V0J10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/MySQL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBDYWNoZXMgZGF0YSB0byBhIE15U1FMIGRhdGFiYXNlCiAqCiAqIFJlZ2lzdGVyZWQgZm9yIFVSTHMgd2l0aCB0aGUgIm15c3FsIiBwcm90b2NvbAogKgogKiBGb3IgZXhhbXBsZSwgYG15c3FsOi8vcm9vdDpwYXNzd29yZEBsb2NhbGhvc3Q6MzMwNi9teWRiP3ByZWZpeD1zcF9gIHdpbGwKICogY29ubmVjdCB0byB0aGUgYG15ZGJgIGRhdGFiYXNlIG9uIGBsb2NhbGhvc3RgIG9uIHBvcnQgMzMwNiwgd2l0aCB0aGUgdXNlcgogKiBgcm9vdGAgYW5kIHRoZSBwYXNzd29yZCBgcGFzc3dvcmRgLiBBbGwgdGFibGVzIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBgc3BfYAogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgQ2FjaGluZwogKi8KY2xhc3MgU2ltcGxlUGllX0NhY2hlX015U1FMIGV4dGVuZHMgU2ltcGxlUGllX0NhY2hlX0RCCnsKCS8qKgoJICogUERPIGluc3RhbmNlCgkgKgoJICogQHZhciBQRE8KCSAqLwoJcHJvdGVjdGVkICRteXNxbDsKCgkvKioKCSAqIE9wdGlvbnMKCSAqCgkgKiBAdmFyIGFycmF5CgkgKi8KCXByb3RlY3RlZCAkb3B0aW9uczsKCgkvKioKCSAqIENhY2hlIElECgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRpZDsKCgkvKioKCSAqIENyZWF0ZSBhIG5ldyBjYWNoZSBvYmplY3QKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRsb2NhdGlvbiBMb2NhdGlvbiBzdHJpbmcgKGZyb20gU2ltcGxlUGllOjokY2FjaGVfbG9jYXRpb24pCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFVuaXF1ZSBJRCBmb3IgdGhlIGNhY2hlCgkgKiBAcGFyYW0gc3RyaW5nICR0eXBlIEVpdGhlciBUWVBFX0ZFRUQgZm9yIFNpbXBsZVBpZSBkYXRhLCBvciBUWVBFX0lNQUdFIGZvciBpbWFnZSBkYXRhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbG9jYXRpb24sICRuYW1lLCAkdHlwZSkKCXsKCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5KAoJCQkndXNlcicgPT4gbnVsbCwKCQkJJ3Bhc3MnID0+IG51bGwsCgkJCSdob3N0JyA9PiAnMTI3LjAuMC4xJywKCQkJJ3BvcnQnID0+ICczMzA2JywKCQkJJ3BhdGgnID0+ICcnLAoJCQknZXh0cmFzJyA9PiBhcnJheSgKCQkJCSdwcmVmaXgnID0+ICcnLAoJCQkJJ2NhY2hlX3B1cmdlX3RpbWUnID0+IDI1OTIwMDAKCQkJKSwKCQkpOwoKCQkkdGhpcy0+b3B0aW9ucyA9IFNpbXBsZVBpZV9NaXNjOjphcnJheV9tZXJnZV9yZWN1cnNpdmUoJHRoaXMtPm9wdGlvbnMsIFNpbXBsZVBpZV9DYWNoZTo6cGFyc2VfVVJMKCRsb2NhdGlvbikpOwoKCQkvLyBQYXRoIGlzIHByZWZpeGVkIHdpdGggYSAiLyIKCQkkdGhpcy0+b3B0aW9uc1snZGJuYW1lJ10gPSBzdWJzdHIoJHRoaXMtPm9wdGlvbnNbJ3BhdGgnXSwgMSk7CgoJCXRyeQoJCXsKCQkJJHRoaXMtPm15c3FsID0gbmV3IFBETygibXlzcWw6ZGJuYW1lPXskdGhpcy0+b3B0aW9uc1snZGJuYW1lJ119O2hvc3Q9eyR0aGlzLT5vcHRpb25zWydob3N0J119O3BvcnQ9eyR0aGlzLT5vcHRpb25zWydwb3J0J119IiwgJHRoaXMtPm9wdGlvbnNbJ3VzZXInXSwgJHRoaXMtPm9wdGlvbnNbJ3Bhc3MnXSwgYXJyYXkoUERPOjpNWVNRTF9BVFRSX0lOSVRfQ09NTUFORCA9PiAnU0VUIE5BTUVTIHV0ZjgnKSk7CgkJfQoJCWNhdGNoIChQRE9FeGNlcHRpb24gJGUpCgkJewoJCQkkdGhpcy0+bXlzcWwgPSBudWxsOwoJCQlyZXR1cm47CgkJfQoKCQkkdGhpcy0+aWQgPSAkbmFtZSAuICR0eXBlOwoKCQlpZiAoISRxdWVyeSA9ICR0aGlzLT5teXNxbC0+cXVlcnkoJ1NIT1cgVEFCTEVTJykpCgkJewoJCQkkdGhpcy0+bXlzcWwgPSBudWxsOwoJCQlyZXR1cm47CgkJfQoKCQkkZGIgPSBhcnJheSgpOwoJCXdoaWxlICgkcm93ID0gJHF1ZXJ5LT5mZXRjaENvbHVtbigpKQoJCXsKCQkJJGRiW10gPSAkcm93OwoJCX0KCgkJaWYgKCFpbl9hcnJheSgkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2NhY2hlX2RhdGEnLCAkZGIpKQoJCXsKCQkJJHF1ZXJ5ID0gJHRoaXMtPm15c3FsLT5leGVjKCdDUkVBVEUgVEFCTEUgYCcgLiAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2NhY2hlX2RhdGFgIChgaWRgIFRFWFQgQ0hBUkFDVEVSIFNFVCB1dGY4IE5PVCBOVUxMLCBgaXRlbXNgIFNNQUxMSU5UIE5PVCBOVUxMIERFRkFVTFQgMCwgYGRhdGFgIEJMT0IgTk9UIE5VTEwsIGBtdGltZWAgSU5UIFVOU0lHTkVEIE5PVCBOVUxMLCBVTklRVUUgKGBpZGAoMTI1KSkpJyk7CgkJCWlmICgkcXVlcnkgPT09IGZhbHNlKQoJCQl7CgkJCQl0cmlnZ2VyX2Vycm9yKCJDYW4ndCBjcmVhdGUgIiAuICR0aGlzLT5vcHRpb25zWydleHRyYXMnXVsncHJlZml4J10gLiAiY2FjaGVfZGF0YSB0YWJsZSwgY2hlY2sgcGVybWlzc2lvbnMiLCBFX1VTRVJfV0FSTklORyk7CgkJCQkkdGhpcy0+bXlzcWwgPSBudWxsOwoJCQkJcmV0dXJuOwoJCQl9CgkJfQoKCQlpZiAoIWluX2FycmF5KCR0aGlzLT5vcHRpb25zWydleHRyYXMnXVsncHJlZml4J10gLiAnaXRlbXMnLCAkZGIpKQoJCXsKCQkJJHF1ZXJ5ID0gJHRoaXMtPm15c3FsLT5leGVjKCdDUkVBVEUgVEFCTEUgYCcgLiAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2l0ZW1zYCAoYGZlZWRfaWRgIFRFWFQgQ0hBUkFDVEVSIFNFVCB1dGY4IE5PVCBOVUxMLCBgaWRgIFRFWFQgQ0hBUkFDVEVSIFNFVCB1dGY4IE5PVCBOVUxMLCBgZGF0YWAgTUVESVVNQkxPQiBOT1QgTlVMTCwgYHBvc3RlZGAgSU5UIFVOU0lHTkVEIE5PVCBOVUxMLCBJTkRFWCBgZmVlZF9pZGAgKGBmZWVkX2lkYCgxMjUpKSknKTsKCQkJaWYgKCRxdWVyeSA9PT0gZmFsc2UpCgkJCXsKCQkJCXRyaWdnZXJfZXJyb3IoIkNhbid0IGNyZWF0ZSAiIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICJpdGVtcyB0YWJsZSwgY2hlY2sgcGVybWlzc2lvbnMiLCBFX1VTRVJfV0FSTklORyk7CgkJCQkkdGhpcy0+bXlzcWwgPSBudWxsOwoJCQkJcmV0dXJuOwoJCQl9CgkJfQoJfQoKCS8qKgoJICogU2F2ZSBkYXRhIHRvIHRoZSBjYWNoZQoJICoKCSAqIEBwYXJhbSBhcnJheXxTaW1wbGVQaWUgJGRhdGEgRGF0YSB0byBzdG9yZSBpbiB0aGUgY2FjaGUuIElmIHBhc3NlZCBhIFNpbXBsZVBpZSBvYmplY3QsIG9ubHkgY2FjaGUgdGhlICRkYXRhIHByb3BlcnR5CgkgKiBAcmV0dXJuIGJvb2wgU3VjY2Vzc2Z1bG5lc3MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNhdmUoJGRhdGEpCgl7CgkJaWYgKCR0aGlzLT5teXNxbCA9PT0gbnVsbCkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCSRxdWVyeSA9ICR0aGlzLT5teXNxbC0+cHJlcGFyZSgnREVMRVRFIGksIGNkIEZST00gYCcgLiAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2NhY2hlX2RhdGFgIGNkLCAnIC4KCQkJJ2AnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdpdGVtc2AgaSAnIC4KCQkJJ1dIRVJFIGNkLmlkID0gaS5mZWVkX2lkICcgLgoJCQknQU5EIGNkLm10aW1lIDwgKHVuaXhfdGltZXN0YW1wKCkgLSA6cHVyZ2VfdGltZSknKTsKCQkkcXVlcnktPmJpbmRWYWx1ZSgnOnB1cmdlX3RpbWUnLCAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ2NhY2hlX3B1cmdlX3RpbWUnXSk7CgoJCWlmICghJHF1ZXJ5LT5leGVjdXRlKCkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiAoJGRhdGEgaW5zdGFuY2VvZiBTaW1wbGVQaWUpCgkJewoJCQkkZGF0YSA9IGNsb25lICRkYXRhOwoKCQkJJHByZXBhcmVkID0gc2VsZjo6cHJlcGFyZV9zaW1wbGVwaWVfb2JqZWN0X2Zvcl9jYWNoZSgkZGF0YSk7CgoJCQkkcXVlcnkgPSAkdGhpcy0+bXlzcWwtPnByZXBhcmUoJ1NFTEVDVCBDT1VOVCgqKSBGUk9NIGAnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdjYWNoZV9kYXRhYCBXSEVSRSBgaWRgID0gOmZlZWQnKTsKCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzpmZWVkJywgJHRoaXMtPmlkKTsKCQkJaWYgKCRxdWVyeS0+ZXhlY3V0ZSgpKQoJCQl7CgkJCQlpZiAoJHF1ZXJ5LT5mZXRjaENvbHVtbigpID4gMCkKCQkJCXsKCQkJCQkkaXRlbXMgPSBjb3VudCgkcHJlcGFyZWRbMV0pOwoJCQkJCWlmICgkaXRlbXMpCgkJCQkJewoJCQkJCQkkc3FsID0gJ1VQREFURSBgJyAuICR0aGlzLT5vcHRpb25zWydleHRyYXMnXVsncHJlZml4J10gLiAnY2FjaGVfZGF0YWAgU0VUIGBpdGVtc2AgPSA6aXRlbXMsIGBkYXRhYCA9IDpkYXRhLCBgbXRpbWVgID0gOnRpbWUgV0hFUkUgYGlkYCA9IDpmZWVkJzsKCQkJCQkJJHF1ZXJ5ID0gJHRoaXMtPm15c3FsLT5wcmVwYXJlKCRzcWwpOwoJCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOml0ZW1zJywgJGl0ZW1zKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHNxbCA9ICdVUERBVEUgYCcgLiAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2NhY2hlX2RhdGFgIFNFVCBgZGF0YWAgPSA6ZGF0YSwgYG10aW1lYCA9IDp0aW1lIFdIRVJFIGBpZGAgPSA6ZmVlZCc7CgkJCQkJCSRxdWVyeSA9ICR0aGlzLT5teXNxbC0+cHJlcGFyZSgkc3FsKTsKCQkJCQl9CgoJCQkJCSRxdWVyeS0+YmluZFZhbHVlKCc6ZGF0YScsICRwcmVwYXJlZFswXSk7CgkJCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzp0aW1lJywgdGltZSgpKTsKCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmZlZWQnLCAkdGhpcy0+aWQpOwoJCQkJCWlmICghJHF1ZXJ5LT5leGVjdXRlKCkpCgkJCQkJewoJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRxdWVyeSA9ICR0aGlzLT5teXNxbC0+cHJlcGFyZSgnSU5TRVJUIElOVE8gYCcgLiAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2NhY2hlX2RhdGFgIChgaWRgLCBgaXRlbXNgLCBgZGF0YWAsIGBtdGltZWApIFZBTFVFUyg6ZmVlZCwgOmNvdW50LCA6ZGF0YSwgOnRpbWUpJyk7CgkJCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzpmZWVkJywgJHRoaXMtPmlkKTsKCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmNvdW50JywgY291bnQoJHByZXBhcmVkWzFdKSk7CgkJCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzpkYXRhJywgJHByZXBhcmVkWzBdKTsKCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOnRpbWUnLCB0aW1lKCkpOwoJCQkJCWlmICghJHF1ZXJ5LT5leGVjdXRlKCkpCgkJCQkJewoJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJfQoJCQkJfQoKCQkJCSRpZHMgPSBhcnJheV9rZXlzKCRwcmVwYXJlZFsxXSk7CgkJCQlpZiAoIWVtcHR5KCRpZHMpKQoJCQkJewoJCQkJCWZvcmVhY2ggKCRpZHMgYXMgJGlkKQoJCQkJCXsKCQkJCQkJJGRhdGFiYXNlX2lkc1tdID0gJHRoaXMtPm15c3FsLT5xdW90ZSgkaWQpOwoJCQkJCX0KCgkJCQkJJHF1ZXJ5ID0gJHRoaXMtPm15c3FsLT5wcmVwYXJlKCdTRUxFQ1QgYGlkYCBGUk9NIGAnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdpdGVtc2AgV0hFUkUgYGlkYCA9ICcgLiBpbXBsb2RlKCcgT1IgYGlkYCA9ICcsICRkYXRhYmFzZV9pZHMpIC4gJyBBTkQgYGZlZWRfaWRgID0gOmZlZWQnKTsKCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmZlZWQnLCAkdGhpcy0+aWQpOwoKCQkJCQlpZiAoJHF1ZXJ5LT5leGVjdXRlKCkpCgkJCQkJewoJCQkJCQkkZXhpc3RpbmdfaWRzID0gYXJyYXkoKTsKCQkJCQkJd2hpbGUgKCRyb3cgPSAkcXVlcnktPmZldGNoQ29sdW1uKCkpCgkJCQkJCXsKCQkJCQkJCSRleGlzdGluZ19pZHNbXSA9ICRyb3c7CgkJCQkJCX0KCgkJCQkJCSRuZXdfaWRzID0gYXJyYXlfZGlmZigkaWRzLCAkZXhpc3RpbmdfaWRzKTsKCgkJCQkJCWZvcmVhY2ggKCRuZXdfaWRzIGFzICRuZXdfaWQpCgkJCQkJCXsKCQkJCQkJCWlmICghKCRkYXRlID0gJHByZXBhcmVkWzFdWyRuZXdfaWRdLT5nZXRfZGF0ZSgnVScpKSkKCQkJCQkJCXsKCQkJCQkJCQkkZGF0ZSA9IHRpbWUoKTsKCQkJCQkJCX0KCgkJCQkJCQkkcXVlcnkgPSAkdGhpcy0+bXlzcWwtPnByZXBhcmUoJ0lOU0VSVCBJTlRPIGAnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdpdGVtc2AgKGBmZWVkX2lkYCwgYGlkYCwgYGRhdGFgLCBgcG9zdGVkYCkgVkFMVUVTKDpmZWVkLCA6aWQsIDpkYXRhLCA6ZGF0ZSknKTsKCQkJCQkJCSRxdWVyeS0+YmluZFZhbHVlKCc6ZmVlZCcsICR0aGlzLT5pZCk7CgkJCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmlkJywgJG5ld19pZCk7CgkJCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmRhdGEnLCBzZXJpYWxpemUoJHByZXBhcmVkWzFdWyRuZXdfaWRdLT5kYXRhKSk7CgkJCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmRhdGUnLCAkZGF0ZSk7CgkJCQkJCQlpZiAoISRxdWVyeS0+ZXhlY3V0ZSgpKQoJCQkJCQkJewoJCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJHF1ZXJ5ID0gJHRoaXMtPm15c3FsLT5wcmVwYXJlKCdTRUxFQ1QgYGlkYCBGUk9NIGAnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdjYWNoZV9kYXRhYCBXSEVSRSBgaWRgID0gOmZlZWQnKTsKCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzpmZWVkJywgJHRoaXMtPmlkKTsKCQkJaWYgKCRxdWVyeS0+ZXhlY3V0ZSgpKQoJCQl7CgkJCQlpZiAoJHF1ZXJ5LT5yb3dDb3VudCgpID4gMCkKCQkJCXsKCQkJCQkkcXVlcnkgPSAkdGhpcy0+bXlzcWwtPnByZXBhcmUoJ1VQREFURSBgJyAuICR0aGlzLT5vcHRpb25zWydleHRyYXMnXVsncHJlZml4J10gLiAnY2FjaGVfZGF0YWAgU0VUIGBpdGVtc2AgPSAwLCBgZGF0YWAgPSA6ZGF0YSwgYG10aW1lYCA9IDp0aW1lIFdIRVJFIGBpZGAgPSA6ZmVlZCcpOwoJCQkJCSRxdWVyeS0+YmluZFZhbHVlKCc6ZGF0YScsIHNlcmlhbGl6ZSgkZGF0YSkpOwoJCQkJCSRxdWVyeS0+YmluZFZhbHVlKCc6dGltZScsIHRpbWUoKSk7CgkJCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzpmZWVkJywgJHRoaXMtPmlkKTsKCQkJCQlpZiAoJHRoaXMtPmV4ZWN1dGUoKSkKCQkJCQl7CgkJCQkJCXJldHVybiB0cnVlOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcXVlcnkgPSAkdGhpcy0+bXlzcWwtPnByZXBhcmUoJ0lOU0VSVCBJTlRPIGAnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdjYWNoZV9kYXRhYCAoYGlkYCwgYGl0ZW1zYCwgYGRhdGFgLCBgbXRpbWVgKSBWQUxVRVMoOmlkLCAwLCA6ZGF0YSwgOnRpbWUpJyk7CgkJCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzppZCcsICR0aGlzLT5pZCk7CgkJCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzpkYXRhJywgc2VyaWFsaXplKCRkYXRhKSk7CgkJCQkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzp0aW1lJywgdGltZSgpKTsKCQkJCQlpZiAoJHF1ZXJ5LT5leGVjdXRlKCkpCgkJCQkJewoJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogUmV0cmlldmUgdGhlIGRhdGEgc2F2ZWQgdG8gdGhlIGNhY2hlCgkgKgoJICogQHJldHVybiBhcnJheSBEYXRhIGZvciBTaW1wbGVQaWU6OiRkYXRhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBsb2FkKCkKCXsKCQlpZiAoJHRoaXMtPm15c3FsID09PSBudWxsKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJHF1ZXJ5ID0gJHRoaXMtPm15c3FsLT5wcmVwYXJlKCdTRUxFQ1QgYGl0ZW1zYCwgYGRhdGFgIEZST00gYCcgLiAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2NhY2hlX2RhdGFgIFdIRVJFIGBpZGAgPSA6aWQnKTsKCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmlkJywgJHRoaXMtPmlkKTsKCQlpZiAoJHF1ZXJ5LT5leGVjdXRlKCkgJiYgKCRyb3cgPSAkcXVlcnktPmZldGNoKCkpKQoJCXsKCQkJJGRhdGEgPSB1bnNlcmlhbGl6ZSgkcm93WzFdKTsKCgkJCWlmIChpc3NldCgkdGhpcy0+b3B0aW9uc1snaXRlbXMnXVswXSkpCgkJCXsKCQkJCSRpdGVtcyA9IChpbnQpICR0aGlzLT5vcHRpb25zWydpdGVtcyddWzBdOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGl0ZW1zID0gKGludCkgJHJvd1swXTsKCQkJfQoKCQkJaWYgKCRpdGVtcyAhPT0gMCkKCQkJewoJCQkJaWYgKGlzc2V0KCRkYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ2ZlZWQnXVswXSkpCgkJCQl7CgkJCQkJJGZlZWQgPSYgJGRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnZmVlZCddWzBdOwoJCQkJfQoJCQkJZWxzZWlmIChpc3NldCgkZGF0YVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWydmZWVkJ11bMF0pKQoJCQkJewoJCQkJCSRmZWVkID0mICRkYXRhWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2ZlZWQnXVswXTsKCQkJCX0KCQkJCWVsc2VpZiAoaXNzZXQoJGRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXSkpCgkJCQl7CgkJCQkJJGZlZWQgPSYgJGRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SREZdWydSREYnXVswXTsKCQkJCX0KCQkJCWVsc2VpZiAoaXNzZXQoJGRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydyc3MnXVswXSkpCgkJCQl7CgkJCQkJJGZlZWQgPSYgJGRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjBdWydyc3MnXVswXTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkZmVlZCA9IG51bGw7CgkJCQl9CgoJCQkJaWYgKCRmZWVkICE9PSBudWxsKQoJCQkJewoJCQkJCSRzcWwgPSAnU0VMRUNUIGBkYXRhYCBGUk9NIGAnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdpdGVtc2AgV0hFUkUgYGZlZWRfaWRgID0gOmZlZWQgT1JERVIgQlkgYHBvc3RlZGAgREVTQyc7CgkJCQkJaWYgKCRpdGVtcyA+IDApCgkJCQkJewoJCQkJCQkkc3FsIC49ICcgTElNSVQgJyAuICRpdGVtczsKCQkJCQl9CgoJCQkJCSRxdWVyeSA9ICR0aGlzLT5teXNxbC0+cHJlcGFyZSgkc3FsKTsKCQkJCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmZlZWQnLCAkdGhpcy0+aWQpOwoJCQkJCWlmICgkcXVlcnktPmV4ZWN1dGUoKSkKCQkJCQl7CgkJCQkJCXdoaWxlICgkcm93ID0gJHF1ZXJ5LT5mZXRjaENvbHVtbigpKQoJCQkJCQl7CgkJCQkJCQkkZmVlZFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbnRyeSddW10gPSB1bnNlcmlhbGl6ZSgkcm93KTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCXJldHVybiAkZGF0YTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogUmV0cmlldmUgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBmb3IgdGhlIGNhY2hlCgkgKgoJICogQHJldHVybiBpbnQgVGltZXN0YW1wCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtdGltZSgpCgl7CgkJaWYgKCR0aGlzLT5teXNxbCA9PT0gbnVsbCkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCSRxdWVyeSA9ICR0aGlzLT5teXNxbC0+cHJlcGFyZSgnU0VMRUNUIGBtdGltZWAgRlJPTSBgJyAuICR0aGlzLT5vcHRpb25zWydleHRyYXMnXVsncHJlZml4J10gLiAnY2FjaGVfZGF0YWAgV0hFUkUgYGlkYCA9IDppZCcpOwoJCSRxdWVyeS0+YmluZFZhbHVlKCc6aWQnLCAkdGhpcy0+aWQpOwoJCWlmICgkcXVlcnktPmV4ZWN1dGUoKSAmJiAoJHRpbWUgPSAkcXVlcnktPmZldGNoQ29sdW1uKCkpKQoJCXsKCQkJcmV0dXJuICR0aW1lOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogU2V0IHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgdG8gdGhlIGN1cnJlbnQgdGltZQoJICoKCSAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIHN0YXR1cwoJICovCglwdWJsaWMgZnVuY3Rpb24gdG91Y2goKQoJewoJCWlmICgkdGhpcy0+bXlzcWwgPT09IG51bGwpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkkcXVlcnkgPSAkdGhpcy0+bXlzcWwtPnByZXBhcmUoJ1VQREFURSBgJyAuICR0aGlzLT5vcHRpb25zWydleHRyYXMnXVsncHJlZml4J10gLiAnY2FjaGVfZGF0YWAgU0VUIGBtdGltZWAgPSA6dGltZSBXSEVSRSBgaWRgID0gOmlkJyk7CgkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzp0aW1lJywgdGltZSgpKTsKCQkkcXVlcnktPmJpbmRWYWx1ZSgnOmlkJywgJHRoaXMtPmlkKTsKCgkJcmV0dXJuICRxdWVyeS0+ZXhlY3V0ZSgpICYmICRxdWVyeS0+cm93Q291bnQoKSA+IDA7Cgl9CgoJLyoqCgkgKiBSZW1vdmUgdGhlIGNhY2hlCgkgKgoJICogQHJldHVybiBib29sIFN1Y2Nlc3Mgc3RhdHVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB1bmxpbmsoKQoJewoJCWlmICgkdGhpcy0+bXlzcWwgPT09IG51bGwpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkkcXVlcnkgPSAkdGhpcy0+bXlzcWwtPnByZXBhcmUoJ0RFTEVURSBGUk9NIGAnIC4gJHRoaXMtPm9wdGlvbnNbJ2V4dHJhcyddWydwcmVmaXgnXSAuICdjYWNoZV9kYXRhYCBXSEVSRSBgaWRgID0gOmlkJyk7CgkJJHF1ZXJ5LT5iaW5kVmFsdWUoJzppZCcsICR0aGlzLT5pZCk7CgkJJHF1ZXJ5MiA9ICR0aGlzLT5teXNxbC0+cHJlcGFyZSgnREVMRVRFIEZST00gYCcgLiAkdGhpcy0+b3B0aW9uc1snZXh0cmFzJ11bJ3ByZWZpeCddIC4gJ2l0ZW1zYCBXSEVSRSBgZmVlZF9pZGAgPSA6aWQnKTsKCQkkcXVlcnkyLT5iaW5kVmFsdWUoJzppZCcsICR0aGlzLT5pZCk7CgoJCXJldHVybiAkcXVlcnktPmV4ZWN1dGUoKSAmJiAkcXVlcnkyLT5leGVjdXRlKCk7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Cache/Redis.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBTaW1wbGVQaWUgUmVkaXMgQ2FjaGUgRXh0ZW5zaW9uCiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAYXV0aG9yIEphbiBLb3phayA8Z2FsdmFuaTc4QGdtYWlsLmNvbT4KICogQGxpbmsgaHR0cDovL2dhbHZhbmkuY3ovCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwIEJTRCBMaWNlbnNlCiAqIEB2ZXJzaW9uIDAuMi45CiAqLwoKCi8qKgogKiBDYWNoZXMgZGF0YSB0byByZWRpcwogKgogKiBSZWdpc3RlcmVkIGZvciBVUkxzIHdpdGggdGhlICJyZWRpcyIgcHJvdG9jb2wKICoKICogRm9yIGV4YW1wbGUsIGByZWRpczovL2xvY2FsaG9zdDo2Mzc5Lz90aW1lb3V0PTM2MDAmcHJlZml4PXNwXyZkYkluZGV4PTBgIHdpbGwKICogY29ubmVjdCB0byByZWRpcyBvbiBgbG9jYWxob3N0YCBvbiBwb3J0IDYzNzkuIEFsbCB0YWJsZXMgd2lsbCBiZQogKiBwcmVmaXhlZCB3aXRoIGBzaW1wbGVfcHJpbWFyeS1gIGFuZCBkYXRhIHdpbGwgZXhwaXJlIGFmdGVyIDM2MDAgc2Vjb25kcwogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgQ2FjaGluZwogKiBAdXNlcyBSZWRpcwogKi8KY2xhc3MgU2ltcGxlUGllX0NhY2hlX1JlZGlzIGltcGxlbWVudHMgU2ltcGxlUGllX0NhY2hlX0Jhc2UgewogICAgLyoqCiAgICAgKiBSZWRpcyBpbnN0YW5jZQogICAgICoKICAgICAqIEB2YXIgXFJlZGlzCiAgICAgKi8KICAgIHByb3RlY3RlZCAkY2FjaGU7CgogICAgLyoqCiAgICAgKiBPcHRpb25zCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJG9wdGlvbnM7CgogICAgLyoqCiAgICAgKiBDYWNoZSBuYW1lCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRuYW1lOwoKICAgIC8qKgogICAgICogQ2FjaGUgRGF0YQogICAgICoKICAgICAqIEB2YXIgdHlwZQogICAgICovCiAgICBwcm90ZWN0ZWQgJGRhdGE7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgY2FjaGUgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYXRpb24gTG9jYXRpb24gc3RyaW5nIChmcm9tIFNpbXBsZVBpZTo6JGNhY2hlX2xvY2F0aW9uKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBVbmlxdWUgSUQgZm9yIHRoZSBjYWNoZQogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSBFaXRoZXIgVFlQRV9GRUVEIGZvciBTaW1wbGVQaWUgZGF0YSwgb3IgVFlQRV9JTUFHRSBmb3IgaW1hZ2UgZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxvY2F0aW9uLCAkbmFtZSwgJG9wdGlvbnMgPSBudWxsKSB7CiAgICAgICAgLy8kdGhpcy0+Y2FjaGUgPSBcZmxvd1xzaW1wbGVcY2FjaGVcUmVkaXM6OmdldFJlZGlzQ2xpZW50SW5zdGFuY2UoKTsKICAgICAgICAkcGFyc2VkID0gU2ltcGxlUGllX0NhY2hlOjpwYXJzZV9VUkwoJGxvY2F0aW9uKTsKICAgICAgICAkcmVkaXMgPSBuZXcgUmVkaXMoKTsKICAgICAgICAkcmVkaXMtPmNvbm5lY3QoJHBhcnNlZFsnaG9zdCddLCAkcGFyc2VkWydwb3J0J10pOwogICAgICAgIGlmIChpc3NldCgkcGFyc2VkWydwYXNzJ10pKSB7CiAgICAgICAgICAgICRyZWRpcy0+YXV0aCgkcGFyc2VkWydwYXNzJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcnNlZFsncGF0aCddKSkgewogICAgICAgICAgICAkcmVkaXMtPnNlbGVjdCgoaW50KXN1YnN0cigkcGFyc2VkWydwYXRoJ10sIDEpKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNhY2hlID0gJHJlZGlzOwoKICAgICAgICBpZiAoIWlzX251bGwoJG9wdGlvbnMpICYmIGlzX2FycmF5KCRvcHRpb25zKSkgewogICAgICAgICAgICAkdGhpcy0+b3B0aW9ucyA9ICRvcHRpb25zOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5vcHRpb25zID0gYXJyYXkgKAogICAgICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJ3JzczpzaW1wbGVfcHJpbWFyeTonLAogICAgICAgICAgICAgICAgJ2V4cGlyZScgPT4gMCwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5uYW1lID0gJHRoaXMtPm9wdGlvbnNbJ3ByZWZpeCddIC4gJG5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXFJlZGlzICRjYWNoZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVkaXNDbGllbnQoXFJlZGlzICRjYWNoZSkgewogICAgICAgICR0aGlzLT5jYWNoZSA9ICRjYWNoZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmUgZGF0YSB0byB0aGUgY2FjaGUKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXl8U2ltcGxlUGllICRkYXRhIERhdGEgdG8gc3RvcmUgaW4gdGhlIGNhY2hlLiBJZiBwYXNzZWQgYSBTaW1wbGVQaWUgb2JqZWN0LCBvbmx5IGNhY2hlIHRoZSAkZGF0YSBwcm9wZXJ0eQogICAgICogQHJldHVybiBib29sIFN1Y2Nlc3NmdWxuZXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCRkYXRhKSB7CiAgICAgICAgaWYgKCRkYXRhIGluc3RhbmNlb2YgU2ltcGxlUGllKSB7CiAgICAgICAgICAgICRkYXRhID0gJGRhdGEtPmRhdGE7CiAgICAgICAgfQogICAgICAgICRyZXNwb25zZSA9ICR0aGlzLT5jYWNoZS0+c2V0KCR0aGlzLT5uYW1lLCBzZXJpYWxpemUoJGRhdGEpKTsKICAgICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbJ2V4cGlyZSddKSB7CiAgICAgICAgICAgICR0aGlzLT5jYWNoZS0+ZXhwaXJlKCR0aGlzLT5uYW1lLCAkdGhpcy0+b3B0aW9uc1snZXhwaXJlJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBkYXRhIHNhdmVkIHRvIHRoZSBjYWNoZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgRGF0YSBmb3IgU2ltcGxlUGllOjokZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZCgpIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5jYWNoZS0+Z2V0KCR0aGlzLT5uYW1lKTsKCiAgICAgICAgaWYgKCRkYXRhICE9PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gdW5zZXJpYWxpemUoJGRhdGEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIGZvciB0aGUgY2FjaGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBUaW1lc3RhbXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG10aW1lKCkgewoKICAgICAgICAkZGF0YSA9ICR0aGlzLT5jYWNoZS0+Z2V0KCR0aGlzLT5uYW1lKTsKCiAgICAgICAgaWYgKCRkYXRhICE9PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gdGltZSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgdG8gdGhlIGN1cnJlbnQgdGltZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIHN0YXR1cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG91Y2goKSB7CgogICAgICAgICRkYXRhID0gJHRoaXMtPmNhY2hlLT5nZXQoJHRoaXMtPm5hbWUpOwoKICAgICAgICBpZiAoJGRhdGEgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRyZXR1cm4gPSAkdGhpcy0+Y2FjaGUtPnNldCgkdGhpcy0+bmFtZSwgJGRhdGEpOwogICAgICAgICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbJ2V4cGlyZSddKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNhY2hlLT5leHBpcmUoJHRoaXMtPm5hbWUsICR0aGlzLT50dGwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIHRoZSBjYWNoZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBTdWNjZXNzIHN0YXR1cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5saW5rKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2FjaGUtPnNldCgkdGhpcy0+bmFtZSwgbnVsbCk7CiAgICB9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Caption.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogSGFuZGxlcyBgPG1lZGlhOnRleHQ+YCBjYXB0aW9ucyBhcyBkZWZpbmVkIGluIE1lZGlhIFJTUy4KICoKICogVXNlZCBieSB7QHNlZSBTaW1wbGVQaWVfRW5jbG9zdXJlOjpnZXRfY2FwdGlvbigpfSBhbmQge0BzZWUgU2ltcGxlUGllX0VuY2xvc3VyZTo6Z2V0X2NhcHRpb25zKCl9CiAqCiAqIFRoaXMgY2xhc3MgY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCB7QHNlZSBTaW1wbGVQaWU6OnNldF9jYXB0aW9uX2NsYXNzKCl9CiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBBUEkKICovCmNsYXNzIFNpbXBsZVBpZV9DYXB0aW9uCnsKCS8qKgoJICogQ29udGVudCB0eXBlCgkgKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X3R5cGUoKQoJICovCgl2YXIgJHR5cGU7CgoJLyoqCgkgKiBMYW5ndWFnZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9sYW5ndWFnZSgpCgkgKi8KCXZhciAkbGFuZzsKCgkvKioKCSAqIFN0YXJ0IHRpbWUKCSAqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfc3RhcnR0aW1lKCkKCSAqLwoJdmFyICRzdGFydFRpbWU7CgoJLyoqCgkgKiBFbmQgdGltZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9lbmR0aW1lKCkKCSAqLwoJdmFyICRlbmRUaW1lOwoKCS8qKgoJICogQ2FwdGlvbiB0ZXh0CgkgKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X3RleHQoKQoJICovCgl2YXIgJHRleHQ7CgoJLyoqCgkgKiBDb25zdHJ1Y3RvciwgdXNlZCB0byBpbnB1dCB0aGUgZGF0YQoJICoKCSAqIEZvciBkb2N1bWVudGF0aW9uIG9uIGFsbCB0aGUgcGFyYW1ldGVycywgc2VlIHRoZSBjb3JyZXNwb25kaW5nCgkgKiBwcm9wZXJ0aWVzIGFuZCB0aGVpciBhY2Nlc3NvcnMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR0eXBlID0gbnVsbCwgJGxhbmcgPSBudWxsLCAkc3RhcnRUaW1lID0gbnVsbCwgJGVuZFRpbWUgPSBudWxsLCAkdGV4dCA9IG51bGwpCgl7CgkJJHRoaXMtPnR5cGUgPSAkdHlwZTsKCQkkdGhpcy0+bGFuZyA9ICRsYW5nOwoJCSR0aGlzLT5zdGFydFRpbWUgPSAkc3RhcnRUaW1lOwoJCSR0aGlzLT5lbmRUaW1lID0gJGVuZFRpbWU7CgkJJHRoaXMtPnRleHQgPSAkdGV4dDsKCX0KCgkvKioKCSAqIFN0cmluZy1pZmllZCB2ZXJzaW9uCgkgKgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQoJewoJCS8vIFRoZXJlIGlzIG5vICR0aGlzLT5kYXRhIGhlcmUKCQlyZXR1cm4gbWQ1KHNlcmlhbGl6ZSgkdGhpcykpOwoJfQoKCS8qKgoJICogR2V0IHRoZSBlbmQgdGltZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGltZSBpbiB0aGUgZm9ybWF0ICdoaDptbTpzcy5TU1MnCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfZW5kdGltZSgpCgl7CgkJaWYgKCR0aGlzLT5lbmRUaW1lICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5lbmRUaW1lOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGxhbmd1YWdlCgkgKgoJICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzA2NgoJICogQHJldHVybiBzdHJpbmd8bnVsbCBMYW5ndWFnZSBjb2RlIGFzIHBlciBSRkMgMzA2NgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xhbmd1YWdlKCkKCXsKCQlpZiAoJHRoaXMtPmxhbmcgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmxhbmc7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgc3RhcnQgdGltZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGltZSBpbiB0aGUgZm9ybWF0ICdoaDptbTpzcy5TU1MnCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfc3RhcnR0aW1lKCkKCXsKCQlpZiAoJHRoaXMtPnN0YXJ0VGltZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+c3RhcnRUaW1lOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHRleHQgb2YgdGhlIGNhcHRpb24KCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfdGV4dCgpCgl7CgkJaWYgKCR0aGlzLT50ZXh0ICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT50ZXh0OwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGNvbnRlbnQgdHlwZSAobm90IE1JTUUgdHlwZSkKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsIEVpdGhlciAndGV4dCcgb3IgJ2h0bWwnCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfdHlwZSgpCgl7CgkJaWYgKCR0aGlzLT50eXBlICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT50eXBlOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Category.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBNYW5hZ2VzIGFsbCBjYXRlZ29yeS1yZWxhdGVkIGRhdGEKICoKICogVXNlZCBieSB7QHNlZSBTaW1wbGVQaWVfSXRlbTo6Z2V0X2NhdGVnb3J5KCl9IGFuZCB7QHNlZSBTaW1wbGVQaWVfSXRlbTo6Z2V0X2NhdGVnb3JpZXMoKX0KICoKICogVGhpcyBjbGFzcyBjYW4gYmUgb3ZlcmxvYWRlZCB3aXRoIHtAc2VlIFNpbXBsZVBpZTo6c2V0X2NhdGVnb3J5X2NsYXNzKCl9CiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBBUEkKICovCmNsYXNzIFNpbXBsZVBpZV9DYXRlZ29yeQp7CgkvKioKCSAqIENhdGVnb3J5IGlkZW50aWZpZXIKCSAqCgkgKiBAdmFyIHN0cmluZ3xudWxsCgkgKiBAc2VlIGdldF90ZXJtCgkgKi8KCXZhciAkdGVybTsKCgkvKioKCSAqIENhdGVnb3JpemF0aW9uIHNjaGVtZSBpZGVudGlmaWVyCgkgKgoJICogQHZhciBzdHJpbmd8bnVsbAoJICogQHNlZSBnZXRfc2NoZW1lKCkKCSAqLwoJdmFyICRzY2hlbWU7CgoJLyoqCgkgKiBIdW1hbiByZWFkYWJsZSBsYWJlbAoJICoKCSAqIEB2YXIgc3RyaW5nfG51bGwKCSAqIEBzZWUgZ2V0X2xhYmVsKCkKCSAqLwoJdmFyICRsYWJlbDsKCgkvKioKCSAqIENhdGVnb3J5IHR5cGUKCSAqIAoJICogY2F0ZWdvcnkgZm9yIDxjYXRlZ29yeT4KCSAqIHN1YmplY3QgZm9yIDxkYzpzdWJqZWN0PgoJICoKCSAqIEB2YXIgc3RyaW5nfG51bGwKCSAqIEBzZWUgZ2V0X3R5cGUoKQoJICovCgl2YXIgJHR5cGU7CgoJLyoqCgkgKiBDb25zdHJ1Y3RvciwgdXNlZCB0byBpbnB1dCB0aGUgZGF0YQoJICoKCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGVybQoJICogQHBhcmFtIHN0cmluZ3xudWxsICRzY2hlbWUKCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbGFiZWwKCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdHlwZQoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRlcm0gPSBudWxsLCAkc2NoZW1lID0gbnVsbCwgJGxhYmVsID0gbnVsbCwgJHR5cGUgPSBudWxsKQoJewoJCSR0aGlzLT50ZXJtID0gJHRlcm07CgkJJHRoaXMtPnNjaGVtZSA9ICRzY2hlbWU7CgkJJHRoaXMtPmxhYmVsID0gJGxhYmVsOwoJCSR0aGlzLT50eXBlID0gJHR5cGU7Cgl9CgoJLyoqCgkgKiBTdHJpbmctaWZpZWQgdmVyc2lvbgoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKCXsKCQkvLyBUaGVyZSBpcyBubyAkdGhpcy0+ZGF0YSBoZXJlCgkJcmV0dXJuIG1kNShzZXJpYWxpemUoJHRoaXMpKTsKCX0KCgkvKioKCSAqIEdldCB0aGUgY2F0ZWdvcnkgaWRlbnRpZmllcgoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF90ZXJtKCkKCXsKCQlyZXR1cm4gJHRoaXMtPnRlcm07Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGNhdGVnb3JpemF0aW9uIHNjaGVtZSBpZGVudGlmaWVyCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3NjaGVtZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5zY2hlbWU7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxhYmVsCgkgKgoJICogQHBhcmFtIGJvb2wgJHN0cmljdAoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xhYmVsKCRzdHJpY3QgPSBmYWxzZSkKCXsKCQlpZiAoJHRoaXMtPmxhYmVsID09PSBudWxsICYmICRzdHJpY3QgIT09IHRydWUpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmdldF90ZXJtKCk7CgkJfQoJCXJldHVybiAkdGhpcy0+bGFiZWw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGNhdGVnb3J5IHR5cGUKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfdHlwZSgpCgl7CgkJcmV0dXJuICR0aGlzLT50eXBlOwoJfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Content/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Content/Type/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Content/Type/Sniffer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogQ29udGVudC10eXBlIHNuaWZmaW5nCiAqCiAqIEJhc2VkIG9uIHRoZSBydWxlcyBpbiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1hYmFydGgtbWltZS1zbmlmZi0wNgogKgogKiBUaGlzIGlzIHVzZWQgc2luY2Ugd2UgY2FuJ3QgYWx3YXlzIHRydXN0IENvbnRlbnQtVHlwZSBoZWFkZXJzLCBhbmQgaXMgYmFzZWQKICogdXBvbiB0aGUgSFRNTDUgcGFyc2luZyBydWxlcy4KICoKICoKICogVGhpcyBjbGFzcyBjYW4gYmUgb3ZlcmxvYWRlZCB3aXRoIHtAc2VlIFNpbXBsZVBpZTo6c2V0X2NvbnRlbnRfdHlwZV9zbmlmZmVyX2NsYXNzKCl9CiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBIVFRQCiAqLwpjbGFzcyBTaW1wbGVQaWVfQ29udGVudF9UeXBlX1NuaWZmZXIKewoJLyoqCgkgKiBGaWxlIG9iamVjdAoJICoKCSAqIEB2YXIgU2ltcGxlUGllX0ZpbGUKCSAqLwoJdmFyICRmaWxlOwoKCS8qKgoJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB3aXRoIHRoZSBpbnB1dCBmaWxlCgkgKgoJICogQHBhcmFtIFNpbXBsZVBpZV9Db250ZW50X1R5cGVfU25pZmZlciAkZmlsZSBJbnB1dCBmaWxlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmlsZSkKCXsKCQkkdGhpcy0+ZmlsZSA9ICRmaWxlOwoJfQoKCS8qKgoJICogR2V0IHRoZSBDb250ZW50LVR5cGUgb2YgdGhlIHNwZWNpZmllZCBmaWxlCgkgKgoJICogQHJldHVybiBzdHJpbmcgQWN0dWFsIENvbnRlbnQtVHlwZQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3R5cGUoKQoJewoJCWlmIChpc3NldCgkdGhpcy0+ZmlsZS0+aGVhZGVyc1snY29udGVudC10eXBlJ10pKQoJCXsKCQkJaWYgKCFpc3NldCgkdGhpcy0+ZmlsZS0+aGVhZGVyc1snY29udGVudC1lbmNvZGluZyddKQoJCQkJJiYgKCR0aGlzLT5maWxlLT5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ3RleHQvcGxhaW4nCgkJCQkJfHwgJHRoaXMtPmZpbGUtPmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xJwoJCQkJCXx8ICR0aGlzLT5maWxlLT5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMScKCQkJCQl8fCAkdGhpcy0+ZmlsZS0+aGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICd0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04JykpCgkJCXsKCQkJCXJldHVybiAkdGhpcy0+dGV4dF9vcl9iaW5hcnkoKTsKCQkJfQoKCQkJaWYgKCgkcG9zID0gc3RycG9zKCR0aGlzLT5maWxlLT5oZWFkZXJzWydjb250ZW50LXR5cGUnXSwgJzsnKSkgIT09IGZhbHNlKQoJCQl7CgkJCQkkb2ZmaWNpYWwgPSBzdWJzdHIoJHRoaXMtPmZpbGUtPmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddLCAwLCAkcG9zKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRvZmZpY2lhbCA9ICR0aGlzLT5maWxlLT5oZWFkZXJzWydjb250ZW50LXR5cGUnXTsKCQkJfQoJCQkkb2ZmaWNpYWwgPSB0cmltKHN0cnRvbG93ZXIoJG9mZmljaWFsKSk7CgoJCQlpZiAoJG9mZmljaWFsID09PSAndW5rbm93bi91bmtub3duJwoJCQkJfHwgJG9mZmljaWFsID09PSAnYXBwbGljYXRpb24vdW5rbm93bicpCgkJCXsKCQkJCXJldHVybiAkdGhpcy0+dW5rbm93bigpOwoJCQl9CgkJCWVsc2VpZiAoc3Vic3RyKCRvZmZpY2lhbCwgLTQpID09PSAnK3htbCcKCQkJCXx8ICRvZmZpY2lhbCA9PT0gJ3RleHQveG1sJwoJCQkJfHwgJG9mZmljaWFsID09PSAnYXBwbGljYXRpb24veG1sJykKCQkJewoJCQkJcmV0dXJuICRvZmZpY2lhbDsKCQkJfQoJCQllbHNlaWYgKHN1YnN0cigkb2ZmaWNpYWwsIDAsIDYpID09PSAnaW1hZ2UvJykKCQkJewoJCQkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+aW1hZ2UoKSkKCQkJCXsKCQkJCQlyZXR1cm4gJHJldHVybjsKCQkJCX0KCgkJCQlyZXR1cm4gJG9mZmljaWFsOwoJCQl9CgkJCWVsc2VpZiAoJG9mZmljaWFsID09PSAndGV4dC9odG1sJykKCQkJewoJCQkJcmV0dXJuICR0aGlzLT5mZWVkX29yX2h0bWwoKTsKCQkJfQoKCQkJcmV0dXJuICRvZmZpY2lhbDsKCQl9CgoJCXJldHVybiAkdGhpcy0+dW5rbm93bigpOwoJfQoKCS8qKgoJICogU25pZmYgdGV4dCBvciBiaW5hcnkKCSAqCgkgKiBAcmV0dXJuIHN0cmluZyBBY3R1YWwgQ29udGVudC1UeXBlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0ZXh0X29yX2JpbmFyeSgpCgl7CgkJaWYgKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgMCwgMikgPT09ICJceEZFXHhGRiIKCQkJfHwgc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAwLCAyKSA9PT0gIlx4RkZceEZFIgoJCQl8fCBzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDQpID09PSAiXHgwMFx4MDBceEZFXHhGRiIKCQkJfHwgc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAwLCAzKSA9PT0gIlx4RUZceEJCXHhCRiIpCgkJewoJCQlyZXR1cm4gJ3RleHQvcGxhaW4nOwoJCX0KCQllbHNlaWYgKHByZWdfbWF0Y2goJy9bXHgwMC1ceDA4XHgwRS1ceDFBXHgxQy1ceDFGXS8nLCAkdGhpcy0+ZmlsZS0+Ym9keSkpCgkJewoJCQlyZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CgkJfQoKCQlyZXR1cm4gJ3RleHQvcGxhaW4nOwoJfQoKCS8qKgoJICogU25pZmYgdW5rbm93bgoJICoKCSAqIEByZXR1cm4gc3RyaW5nIEFjdHVhbCBDb250ZW50LVR5cGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVua25vd24oKQoJewoJCSR3cyA9IHN0cnNwbigkdGhpcy0+ZmlsZS0+Ym9keSwgIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMCIpOwoJCWlmIChzdHJ0b2xvd2VyKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgJHdzLCAxNCkpID09PSAnPCFkb2N0eXBlIGh0bWwnCgkJCXx8IHN0cnRvbG93ZXIoc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAkd3MsIDUpKSA9PT0gJzxodG1sJwoJCQl8fCBzdHJ0b2xvd2VyKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgJHdzLCA3KSkgPT09ICc8c2NyaXB0JykKCQl7CgkJCXJldHVybiAndGV4dC9odG1sJzsKCQl9CgkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDUpID09PSAnJVBERi0nKQoJCXsKCQkJcmV0dXJuICdhcHBsaWNhdGlvbi9wZGYnOwoJCX0KCQllbHNlaWYgKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgMCwgMTEpID09PSAnJSFQUy1BZG9iZS0nKQoJCXsKCQkJcmV0dXJuICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JzsKCQl9CgkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDYpID09PSAnR0lGODdhJwoJCQl8fCBzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDYpID09PSAnR0lGODlhJykKCQl7CgkJCXJldHVybiAnaW1hZ2UvZ2lmJzsKCQl9CgkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDgpID09PSAiXHg4OVx4NTBceDRFXHg0N1x4MERceDBBXHgxQVx4MEEiKQoJCXsKCQkJcmV0dXJuICdpbWFnZS9wbmcnOwoJCX0KCQllbHNlaWYgKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgMCwgMykgPT09ICJceEZGXHhEOFx4RkYiKQoJCXsKCQkJcmV0dXJuICdpbWFnZS9qcGVnJzsKCQl9CgkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDIpID09PSAiXHg0Mlx4NEQiKQoJCXsKCQkJcmV0dXJuICdpbWFnZS9ibXAnOwoJCX0KCQllbHNlaWYgKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgMCwgNCkgPT09ICJceDAwXHgwMFx4MDFceDAwIikKCQl7CgkJCXJldHVybiAnaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uJzsKCQl9CgoJCXJldHVybiAkdGhpcy0+dGV4dF9vcl9iaW5hcnkoKTsKCX0KCgkvKioKCSAqIFNuaWZmIGltYWdlcwoJICoKCSAqIEByZXR1cm4gc3RyaW5nIEFjdHVhbCBDb250ZW50LVR5cGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGltYWdlKCkKCXsKCQlpZiAoc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAwLCA2KSA9PT0gJ0dJRjg3YScKCQkJfHwgc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAwLCA2KSA9PT0gJ0dJRjg5YScpCgkJewoJCQlyZXR1cm4gJ2ltYWdlL2dpZic7CgkJfQoJCWVsc2VpZiAoc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAwLCA4KSA9PT0gIlx4ODlceDUwXHg0RVx4NDdceDBEXHgwQVx4MUFceDBBIikKCQl7CgkJCXJldHVybiAnaW1hZ2UvcG5nJzsKCQl9CgkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDMpID09PSAiXHhGRlx4RDhceEZGIikKCQl7CgkJCXJldHVybiAnaW1hZ2UvanBlZyc7CgkJfQoJCWVsc2VpZiAoc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAwLCAyKSA9PT0gIlx4NDJceDREIikKCQl7CgkJCXJldHVybiAnaW1hZ2UvYm1wJzsKCQl9CgkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksIDAsIDQpID09PSAiXHgwMFx4MDBceDAxXHgwMCIpCgkJewoJCQlyZXR1cm4gJ2ltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbic7CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBTbmlmZiBIVE1MCgkgKgoJICogQHJldHVybiBzdHJpbmcgQWN0dWFsIENvbnRlbnQtVHlwZQoJICovCglwdWJsaWMgZnVuY3Rpb24gZmVlZF9vcl9odG1sKCkKCXsKCQkkbGVuID0gc3RybGVuKCR0aGlzLT5maWxlLT5ib2R5KTsKCQkkcG9zID0gc3Ryc3BuKCR0aGlzLT5maWxlLT5ib2R5LCAiXHgwOVx4MEFceDBEXHgyMFx4RUZceEJCXHhCRiIpOwoKCQl3aGlsZSAoJHBvcyA8ICRsZW4pCgkJewoJCQlzd2l0Y2ggKCR0aGlzLT5maWxlLT5ib2R5WyRwb3NdKQoJCQl7CgkJCQljYXNlICJceDA5IjoKCQkJCWNhc2UgIlx4MEEiOgoJCQkJY2FzZSAiXHgwRCI6CgkJCQljYXNlICJceDIwIjoKCQkJCQkkcG9zICs9IHN0cnNwbigkdGhpcy0+ZmlsZS0+Ym9keSwgIlx4MDlceDBBXHgwRFx4MjAiLCAkcG9zKTsKCQkJCQljb250aW51ZSAyOwoKCQkJCWNhc2UgJzwnOgoJCQkJCSRwb3MrKzsKCQkJCQlicmVhazsKCgkJCQlkZWZhdWx0OgoJCQkJCXJldHVybiAndGV4dC9odG1sJzsKCQkJfQoKCQkJaWYgKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgJHBvcywgMykgPT09ICchLS0nKQoJCQl7CgkJCQkkcG9zICs9IDM7CgkJCQlpZiAoJHBvcyA8ICRsZW4gJiYgKCRwb3MgPSBzdHJwb3MoJHRoaXMtPmZpbGUtPmJvZHksICctLT4nLCAkcG9zKSkgIT09IGZhbHNlKQoJCQkJewoJCQkJCSRwb3MgKz0gMzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXR1cm4gJ3RleHQvaHRtbCc7CgkJCQl9CgkJCX0KCQkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksICRwb3MsIDEpID09PSAnIScpCgkJCXsKCQkJCWlmICgkcG9zIDwgJGxlbiAmJiAoJHBvcyA9IHN0cnBvcygkdGhpcy0+ZmlsZS0+Ym9keSwgJz4nLCAkcG9zKSkgIT09IGZhbHNlKQoJCQkJewoJCQkJCSRwb3MrKzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXR1cm4gJ3RleHQvaHRtbCc7CgkJCQl9CgkJCX0KCQkJZWxzZWlmIChzdWJzdHIoJHRoaXMtPmZpbGUtPmJvZHksICRwb3MsIDEpID09PSAnPycpCgkJCXsKCQkJCWlmICgkcG9zIDwgJGxlbiAmJiAoJHBvcyA9IHN0cnBvcygkdGhpcy0+ZmlsZS0+Ym9keSwgJz8+JywgJHBvcykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQkkcG9zICs9IDI7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcmV0dXJuICd0ZXh0L2h0bWwnOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoc3Vic3RyKCR0aGlzLT5maWxlLT5ib2R5LCAkcG9zLCAzKSA9PT0gJ3JzcycKCQkJCXx8IHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgJHBvcywgNykgPT09ICdyZGY6UkRGJykKCQkJewoJCQkJcmV0dXJuICdhcHBsaWNhdGlvbi9yc3MreG1sJzsKCQkJfQoJCQllbHNlaWYgKHN1YnN0cigkdGhpcy0+ZmlsZS0+Ym9keSwgJHBvcywgNCkgPT09ICdmZWVkJykKCQkJewoJCQkJcmV0dXJuICdhcHBsaWNhdGlvbi9hdG9tK3htbCc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlyZXR1cm4gJ3RleHQvaHRtbCc7CgkJCX0KCQl9CgoJCXJldHVybiAndGV4dC9odG1sJzsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Copyright.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBNYW5hZ2VzIGA8bWVkaWE6Y29weXJpZ2h0PmAgY29weXJpZ2h0IHRhZ3MgYXMgZGVmaW5lZCBpbiBNZWRpYSBSU1MKICoKICogVXNlZCBieSB7QHNlZSBTaW1wbGVQaWVfRW5jbG9zdXJlOjpnZXRfY29weXJpZ2h0KCl9CiAqCiAqIFRoaXMgY2xhc3MgY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCB7QHNlZSBTaW1wbGVQaWU6OnNldF9jb3B5cmlnaHRfY2xhc3MoKX0KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIEFQSQogKi8KY2xhc3MgU2ltcGxlUGllX0NvcHlyaWdodAp7CgkvKioKCSAqIENvcHlyaWdodCBVUkwKCSAqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfdXJsKCkKCSAqLwoJdmFyICR1cmw7CgoJLyoqCgkgKiBBdHRyaWJ1dGlvbgoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9hdHRyaWJ1dGlvbigpCgkgKi8KCXZhciAkbGFiZWw7CgoJLyoqCgkgKiBDb25zdHJ1Y3RvciwgdXNlZCB0byBpbnB1dCB0aGUgZGF0YQoJICoKCSAqIEZvciBkb2N1bWVudGF0aW9uIG9uIGFsbCB0aGUgcGFyYW1ldGVycywgc2VlIHRoZSBjb3JyZXNwb25kaW5nCgkgKiBwcm9wZXJ0aWVzIGFuZCB0aGVpciBhY2Nlc3NvcnMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR1cmwgPSBudWxsLCAkbGFiZWwgPSBudWxsKQoJewoJCSR0aGlzLT51cmwgPSAkdXJsOwoJCSR0aGlzLT5sYWJlbCA9ICRsYWJlbDsKCX0KCgkvKioKCSAqIFN0cmluZy1pZmllZCB2ZXJzaW9uCgkgKgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQoJewoJCS8vIFRoZXJlIGlzIG5vICR0aGlzLT5kYXRhIGhlcmUKCQlyZXR1cm4gbWQ1KHNlcmlhbGl6ZSgkdGhpcykpOwoJfQoKCS8qKgoJICogR2V0IHRoZSBjb3B5cmlnaHQgVVJMCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbCBVUkwgdG8gY29weXJpZ2h0IGluZm9ybWF0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfdXJsKCkKCXsKCQlpZiAoJHRoaXMtPnVybCAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+dXJsOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGF0dHJpYnV0aW9uIHRleHQKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfYXR0cmlidXRpb24oKQoJewoJCWlmICgkdGhpcy0+bGFiZWwgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmxhYmVsOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Core.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBTaW1wbGVQaWUgY2xhc3MuCiAqCiAqIENsYXNzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogKgogKiBAZGVwcmVjYXRlZCBVc2Uge0BzZWUgU2ltcGxlUGllfSBkaXJlY3RseQogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgQVBJCiAqLwpjbGFzcyBTaW1wbGVQaWVfQ29yZSBleHRlbmRzIFNpbXBsZVBpZQp7Cgp9]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Credit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBIYW5kbGVzIGA8bWVkaWE6Y3JlZGl0PmAgYXMgZGVmaW5lZCBpbiBNZWRpYSBSU1MKICoKICogVXNlZCBieSB7QHNlZSBTaW1wbGVQaWVfRW5jbG9zdXJlOjpnZXRfY3JlZGl0KCl9IGFuZCB7QHNlZSBTaW1wbGVQaWVfRW5jbG9zdXJlOjpnZXRfY3JlZGl0cygpfQogKgogKiBUaGlzIGNsYXNzIGNhbiBiZSBvdmVybG9hZGVkIHdpdGgge0BzZWUgU2ltcGxlUGllOjpzZXRfY3JlZGl0X2NsYXNzKCl9CiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBBUEkKICovCmNsYXNzIFNpbXBsZVBpZV9DcmVkaXQKewoJLyoqCgkgKiBDcmVkaXRlZCByb2xlCgkgKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X3JvbGUoKQoJICovCgl2YXIgJHJvbGU7CgoJLyoqCgkgKiBPcmdhbml6YXRpb25hbCBzY2hlbWUKCSAqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfc2NoZW1lKCkKCSAqLwoJdmFyICRzY2hlbWU7CgoJLyoqCgkgKiBDcmVkaXRlZCBuYW1lCgkgKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X25hbWUoKQoJICovCgl2YXIgJG5hbWU7CgoJLyoqCgkgKiBDb25zdHJ1Y3RvciwgdXNlZCB0byBpbnB1dCB0aGUgZGF0YQoJICoKCSAqIEZvciBkb2N1bWVudGF0aW9uIG9uIGFsbCB0aGUgcGFyYW1ldGVycywgc2VlIHRoZSBjb3JyZXNwb25kaW5nCgkgKiBwcm9wZXJ0aWVzIGFuZCB0aGVpciBhY2Nlc3NvcnMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyb2xlID0gbnVsbCwgJHNjaGVtZSA9IG51bGwsICRuYW1lID0gbnVsbCkKCXsKCQkkdGhpcy0+cm9sZSA9ICRyb2xlOwoJCSR0aGlzLT5zY2hlbWUgPSAkc2NoZW1lOwoJCSR0aGlzLT5uYW1lID0gJG5hbWU7Cgl9CgoJLyoqCgkgKiBTdHJpbmctaWZpZWQgdmVyc2lvbgoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKCXsKCQkvLyBUaGVyZSBpcyBubyAkdGhpcy0+ZGF0YSBoZXJlCgkJcmV0dXJuIG1kNShzZXJpYWxpemUoJHRoaXMpKTsKCX0KCgkvKioKCSAqIEdldCB0aGUgcm9sZSBvZiB0aGUgcGVyc29uIHJlY2VpdmluZyBjcmVkaXQKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfcm9sZSgpCgl7CgkJaWYgKCR0aGlzLT5yb2xlICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5yb2xlOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIG9yZ2FuaXphdGlvbmFsIHNjaGVtZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9zY2hlbWUoKQoJewoJCWlmICgkdGhpcy0+c2NoZW1lICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zY2hlbWU7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgY3JlZGl0ZWQgcGVyc29uL2VudGl0eSdzIG5hbWUKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpCgl7CgkJaWYgKCR0aGlzLT5uYW1lICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5uYW1lOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Decode/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Decode/HTML/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Decode/HTML/Entities.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogRGVjb2RlIEhUTUwgRW50aXRpZXMKICoKICogVGhpcyBpbXBsZW1lbnRzIEhUTUw1IGFzIG9mIHJldmlzaW9uIDk2NyAoMjAwNy0wNi0yOCkKICoKICogQGRlcHJlY2F0ZWQgVXNlIERPTURvY3VtZW50IGluc3RlYWQhCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKi8KY2xhc3MgU2ltcGxlUGllX0RlY29kZV9IVE1MX0VudGl0aWVzCnsKCS8qKgoJICogRGF0YSB0byBiZSBwYXJzZWQKCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXZhciAkZGF0YSA9ICcnOwoKCS8qKgoJICogQ3VycmVudGx5IGNvbnN1bWVkIGJ5dGVzCgkgKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGNvbnN1bWVkID0gJyc7CgoJLyoqCgkgKiBQb3NpdGlvbiBvZiB0aGUgY3VycmVudCBieXRlIGJlaW5nIHBhcnNlZAoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBpbnQKCSAqLwoJdmFyICRwb3NpdGlvbiA9IDA7CgoJLyoqCgkgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGggdGhlIGlucHV0IGRhdGEKCSAqCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHBhcmFtIHN0cmluZyAkZGF0YSBJbnB1dCBkYXRhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGF0YSkKCXsKCQkkdGhpcy0+ZGF0YSA9ICRkYXRhOwoJfQoKCS8qKgoJICogUGFyc2UgdGhlIGlucHV0IGRhdGEKCSAqCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHJldHVybiBzdHJpbmcgT3V0cHV0IGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHBhcnNlKCkKCXsKCQl3aGlsZSAoKCR0aGlzLT5wb3NpdGlvbiA9IHN0cnBvcygkdGhpcy0+ZGF0YSwgJyYnLCAkdGhpcy0+cG9zaXRpb24pKSAhPT0gZmFsc2UpCgkJewoJCQkkdGhpcy0+Y29uc3VtZSgpOwoJCQkkdGhpcy0+ZW50aXR5KCk7CgkJCSR0aGlzLT5jb25zdW1lZCA9ICcnOwoJCX0KCQlyZXR1cm4gJHRoaXMtPmRhdGE7Cgl9CgoJLyoqCgkgKiBDb25zdW1lIHRoZSBuZXh0IGJ5dGUKCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEByZXR1cm4gbWl4ZWQgVGhlIG5leHQgYnl0ZSwgb3IgZmFsc2UsIGlmIHRoZXJlIGlzIG5vIG1vcmUgZGF0YQoJICovCglwdWJsaWMgZnVuY3Rpb24gY29uc3VtZSgpCgl7CgkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWyR0aGlzLT5wb3NpdGlvbl0pKQoJCXsKCQkJJHRoaXMtPmNvbnN1bWVkIC49ICR0aGlzLT5kYXRhWyR0aGlzLT5wb3NpdGlvbl07CgkJCXJldHVybiAkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb24rK107CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBDb25zdW1lIGEgcmFuZ2Ugb2YgY2hhcmFjdGVycwoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHBhcmFtIHN0cmluZyAkY2hhcnMgQ2hhcmFjdGVycyB0byBjb25zdW1lCgkgKiBAcmV0dXJuIG1peGVkIEEgc2VyaWVzIG9mIGNoYXJhY3RlcnMgdGhhdCBtYXRjaCB0aGUgcmFuZ2UsIG9yIGZhbHNlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjb25zdW1lX3JhbmdlKCRjaGFycykKCXsKCQlpZiAoJGxlbiA9IHN0cnNwbigkdGhpcy0+ZGF0YSwgJGNoYXJzLCAkdGhpcy0+cG9zaXRpb24pKQoJCXsKCQkJJGRhdGEgPSBzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbiwgJGxlbik7CgkJCSR0aGlzLT5jb25zdW1lZCAuPSAkZGF0YTsKCQkJJHRoaXMtPnBvc2l0aW9uICs9ICRsZW47CgkJCXJldHVybiAkZGF0YTsKCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFVuY29uc3VtZSBvbmUgYnl0ZQoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gdW5jb25zdW1lKCkKCXsKCQkkdGhpcy0+Y29uc3VtZWQgPSBzdWJzdHIoJHRoaXMtPmNvbnN1bWVkLCAwLCAtMSk7CgkJJHRoaXMtPnBvc2l0aW9uLS07Cgl9CgoJLyoqCgkgKiBEZWNvZGUgYW4gZW50aXR5CgkgKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBlbnRpdHkoKQoJewoJCXN3aXRjaCAoJHRoaXMtPmNvbnN1bWUoKSkKCQl7CgkJCWNhc2UgIlx4MDkiOgoJCQljYXNlICJceDBBIjoKCQkJY2FzZSAiXHgwQiI6CgkJCWNhc2UgIlx4MEMiOgoJCQljYXNlICJceDIwIjoKCQkJY2FzZSAiXHgzQyI6CgkJCWNhc2UgIlx4MjYiOgoJCQljYXNlIGZhbHNlOgoJCQkJYnJlYWs7CgoJCQljYXNlICJceDIzIjoKCQkJCXN3aXRjaCAoJHRoaXMtPmNvbnN1bWUoKSkKCQkJCXsKCQkJCQljYXNlICJceDc4IjoKCQkJCQljYXNlICJceDU4IjoKCQkJCQkJJHJhbmdlID0gJzAxMjM0NTY3ODlBQkNERUZhYmNkZWYnOwoJCQkJCQkkaGV4ID0gdHJ1ZTsKCQkJCQkJYnJlYWs7CgoJCQkJCWRlZmF1bHQ6CgkJCQkJCSRyYW5nZSA9ICcwMTIzNDU2Nzg5JzsKCQkJCQkJJGhleCA9IGZhbHNlOwoJCQkJCQkkdGhpcy0+dW5jb25zdW1lKCk7CgkJCQkJCWJyZWFrOwoJCQkJfQoKCQkJCWlmICgkY29kZXBvaW50ID0gJHRoaXMtPmNvbnN1bWVfcmFuZ2UoJHJhbmdlKSkKCQkJCXsKCQkJCQlzdGF0aWMgJHdpbmRvd3NfMTI1Ml9zcGVjaWFscyA9IGFycmF5KDB4MEQgPT4gIlx4MEEiLCAweDgwID0+ICJceEUyXHg4Mlx4QUMiLCAweDgxID0+ICJceEVGXHhCRlx4QkQiLCAweDgyID0+ICJceEUyXHg4MFx4OUEiLCAweDgzID0+ICJceEM2XHg5MiIsIDB4ODQgPT4gIlx4RTJceDgwXHg5RSIsIDB4ODUgPT4gIlx4RTJceDgwXHhBNiIsIDB4ODYgPT4gIlx4RTJceDgwXHhBMCIsIDB4ODcgPT4gIlx4RTJceDgwXHhBMSIsIDB4ODggPT4gIlx4Q0JceDg2IiwgMHg4OSA9PiAiXHhFMlx4ODBceEIwIiwgMHg4QSA9PiAiXHhDNVx4QTAiLCAweDhCID0+ICJceEUyXHg4MFx4QjkiLCAweDhDID0+ICJceEM1XHg5MiIsIDB4OEQgPT4gIlx4RUZceEJGXHhCRCIsIDB4OEUgPT4gIlx4QzVceEJEIiwgMHg4RiA9PiAiXHhFRlx4QkZceEJEIiwgMHg5MCA9PiAiXHhFRlx4QkZceEJEIiwgMHg5MSA9PiAiXHhFMlx4ODBceDk4IiwgMHg5MiA9PiAiXHhFMlx4ODBceDk5IiwgMHg5MyA9PiAiXHhFMlx4ODBceDlDIiwgMHg5NCA9PiAiXHhFMlx4ODBceDlEIiwgMHg5NSA9PiAiXHhFMlx4ODBceEEyIiwgMHg5NiA9PiAiXHhFMlx4ODBceDkzIiwgMHg5NyA9PiAiXHhFMlx4ODBceDk0IiwgMHg5OCA9PiAiXHhDQlx4OUMiLCAweDk5ID0+ICJceEUyXHg4NFx4QTIiLCAweDlBID0+ICJceEM1XHhBMSIsIDB4OUIgPT4gIlx4RTJceDgwXHhCQSIsIDB4OUMgPT4gIlx4QzVceDkzIiwgMHg5RCA9PiAiXHhFRlx4QkZceEJEIiwgMHg5RSA9PiAiXHhDNVx4QkUiLCAweDlGID0+ICJceEM1XHhCOCIpOwoKCQkJCQlpZiAoJGhleCkKCQkJCQl7CgkJCQkJCSRjb2RlcG9pbnQgPSBoZXhkZWMoJGNvZGVwb2ludCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRjb2RlcG9pbnQgPSBpbnR2YWwoJGNvZGVwb2ludCk7CgkJCQkJfQoKCQkJCQlpZiAoaXNzZXQoJHdpbmRvd3NfMTI1Ml9zcGVjaWFsc1skY29kZXBvaW50XSkpCgkJCQkJewoJCQkJCQkkcmVwbGFjZW1lbnQgPSAkd2luZG93c18xMjUyX3NwZWNpYWxzWyRjb2RlcG9pbnRdOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkcmVwbGFjZW1lbnQgPSBTaW1wbGVQaWVfTWlzYzo6Y29kZXBvaW50X3RvX3V0ZjgoJGNvZGVwb2ludCk7CgkJCQkJfQoKCQkJCQlpZiAoIWluX2FycmF5KCR0aGlzLT5jb25zdW1lKCksIGFycmF5KCc7JywgZmFsc2UpLCB0cnVlKSkKCQkJCQl7CgkJCQkJCSR0aGlzLT51bmNvbnN1bWUoKTsKCQkJCQl9CgoJCQkJCSRjb25zdW1lZF9sZW5ndGggPSBzdHJsZW4oJHRoaXMtPmNvbnN1bWVkKTsKCQkJCQkkdGhpcy0+ZGF0YSA9IHN1YnN0cl9yZXBsYWNlKCR0aGlzLT5kYXRhLCAkcmVwbGFjZW1lbnQsICR0aGlzLT5wb3NpdGlvbiAtICRjb25zdW1lZF9sZW5ndGgsICRjb25zdW1lZF9sZW5ndGgpOwoJCQkJCSR0aGlzLT5wb3NpdGlvbiArPSBzdHJsZW4oJHJlcGxhY2VtZW50KSAtICRjb25zdW1lZF9sZW5ndGg7CgkJCQl9CgkJCQlicmVhazsKCgkJCWRlZmF1bHQ6CgkJCQlzdGF0aWMgJGVudGl0aWVzID0gYXJyYXkoCgkJCQkJJ0FhY3V0ZScgPT4gIlx4QzNceDgxIiwKCQkJCQknYWFjdXRlJyA9PiAiXHhDM1x4QTEiLAoJCQkJCSdBYWN1dGU7JyA9PiAiXHhDM1x4ODEiLAoJCQkJCSdhYWN1dGU7JyA9PiAiXHhDM1x4QTEiLAoJCQkJCSdBY2lyYycgPT4gIlx4QzNceDgyIiwKCQkJCQknYWNpcmMnID0+ICJceEMzXHhBMiIsCgkJCQkJJ0FjaXJjOycgPT4gIlx4QzNceDgyIiwKCQkJCQknYWNpcmM7JyA9PiAiXHhDM1x4QTIiLAoJCQkJCSdhY3V0ZScgPT4gIlx4QzJceEI0IiwKCQkJCQknYWN1dGU7JyA9PiAiXHhDMlx4QjQiLAoJCQkJCSdBRWxpZycgPT4gIlx4QzNceDg2IiwKCQkJCQknYWVsaWcnID0+ICJceEMzXHhBNiIsCgkJCQkJJ0FFbGlnOycgPT4gIlx4QzNceDg2IiwKCQkJCQknYWVsaWc7JyA9PiAiXHhDM1x4QTYiLAoJCQkJCSdBZ3JhdmUnID0+ICJceEMzXHg4MCIsCgkJCQkJJ2FncmF2ZScgPT4gIlx4QzNceEEwIiwKCQkJCQknQWdyYXZlOycgPT4gIlx4QzNceDgwIiwKCQkJCQknYWdyYXZlOycgPT4gIlx4QzNceEEwIiwKCQkJCQknYWxlZnN5bTsnID0+ICJceEUyXHg4NFx4QjUiLAoJCQkJCSdBbHBoYTsnID0+ICJceENFXHg5MSIsCgkJCQkJJ2FscGhhOycgPT4gIlx4Q0VceEIxIiwKCQkJCQknQU1QJyA9PiAiXHgyNiIsCgkJCQkJJ2FtcCcgPT4gIlx4MjYiLAoJCQkJCSdBTVA7JyA9PiAiXHgyNiIsCgkJCQkJJ2FtcDsnID0+ICJceDI2IiwKCQkJCQknYW5kOycgPT4gIlx4RTJceDg4XHhBNyIsCgkJCQkJJ2FuZzsnID0+ICJceEUyXHg4OFx4QTAiLAoJCQkJCSdhcG9zOycgPT4gIlx4MjciLAoJCQkJCSdBcmluZycgPT4gIlx4QzNceDg1IiwKCQkJCQknYXJpbmcnID0+ICJceEMzXHhBNSIsCgkJCQkJJ0FyaW5nOycgPT4gIlx4QzNceDg1IiwKCQkJCQknYXJpbmc7JyA9PiAiXHhDM1x4QTUiLAoJCQkJCSdhc3ltcDsnID0+ICJceEUyXHg4OVx4ODgiLAoJCQkJCSdBdGlsZGUnID0+ICJceEMzXHg4MyIsCgkJCQkJJ2F0aWxkZScgPT4gIlx4QzNceEEzIiwKCQkJCQknQXRpbGRlOycgPT4gIlx4QzNceDgzIiwKCQkJCQknYXRpbGRlOycgPT4gIlx4QzNceEEzIiwKCQkJCQknQXVtbCcgPT4gIlx4QzNceDg0IiwKCQkJCQknYXVtbCcgPT4gIlx4QzNceEE0IiwKCQkJCQknQXVtbDsnID0+ICJceEMzXHg4NCIsCgkJCQkJJ2F1bWw7JyA9PiAiXHhDM1x4QTQiLAoJCQkJCSdiZHF1bzsnID0+ICJceEUyXHg4MFx4OUUiLAoJCQkJCSdCZXRhOycgPT4gIlx4Q0VceDkyIiwKCQkJCQknYmV0YTsnID0+ICJceENFXHhCMiIsCgkJCQkJJ2JydmJhcicgPT4gIlx4QzJceEE2IiwKCQkJCQknYnJ2YmFyOycgPT4gIlx4QzJceEE2IiwKCQkJCQknYnVsbDsnID0+ICJceEUyXHg4MFx4QTIiLAoJCQkJCSdjYXA7JyA9PiAiXHhFMlx4ODhceEE5IiwKCQkJCQknQ2NlZGlsJyA9PiAiXHhDM1x4ODciLAoJCQkJCSdjY2VkaWwnID0+ICJceEMzXHhBNyIsCgkJCQkJJ0NjZWRpbDsnID0+ICJceEMzXHg4NyIsCgkJCQkJJ2NjZWRpbDsnID0+ICJceEMzXHhBNyIsCgkJCQkJJ2NlZGlsJyA9PiAiXHhDMlx4QjgiLAoJCQkJCSdjZWRpbDsnID0+ICJceEMyXHhCOCIsCgkJCQkJJ2NlbnQnID0+ICJceEMyXHhBMiIsCgkJCQkJJ2NlbnQ7JyA9PiAiXHhDMlx4QTIiLAoJCQkJCSdDaGk7JyA9PiAiXHhDRVx4QTciLAoJCQkJCSdjaGk7JyA9PiAiXHhDRlx4ODciLAoJCQkJCSdjaXJjOycgPT4gIlx4Q0JceDg2IiwKCQkJCQknY2x1YnM7JyA9PiAiXHhFMlx4OTlceEEzIiwKCQkJCQknY29uZzsnID0+ICJceEUyXHg4OVx4ODUiLAoJCQkJCSdDT1BZJyA9PiAiXHhDMlx4QTkiLAoJCQkJCSdjb3B5JyA9PiAiXHhDMlx4QTkiLAoJCQkJCSdDT1BZOycgPT4gIlx4QzJceEE5IiwKCQkJCQknY29weTsnID0+ICJceEMyXHhBOSIsCgkJCQkJJ2NyYXJyOycgPT4gIlx4RTJceDg2XHhCNSIsCgkJCQkJJ2N1cDsnID0+ICJceEUyXHg4OFx4QUEiLAoJCQkJCSdjdXJyZW4nID0+ICJceEMyXHhBNCIsCgkJCQkJJ2N1cnJlbjsnID0+ICJceEMyXHhBNCIsCgkJCQkJJ0RhZ2dlcjsnID0+ICJceEUyXHg4MFx4QTEiLAoJCQkJCSdkYWdnZXI7JyA9PiAiXHhFMlx4ODBceEEwIiwKCQkJCQknZEFycjsnID0+ICJceEUyXHg4N1x4OTMiLAoJCQkJCSdkYXJyOycgPT4gIlx4RTJceDg2XHg5MyIsCgkJCQkJJ2RlZycgPT4gIlx4QzJceEIwIiwKCQkJCQknZGVnOycgPT4gIlx4QzJceEIwIiwKCQkJCQknRGVsdGE7JyA9PiAiXHhDRVx4OTQiLAoJCQkJCSdkZWx0YTsnID0+ICJceENFXHhCNCIsCgkJCQkJJ2RpYW1zOycgPT4gIlx4RTJceDk5XHhBNiIsCgkJCQkJJ2RpdmlkZScgPT4gIlx4QzNceEI3IiwKCQkJCQknZGl2aWRlOycgPT4gIlx4QzNceEI3IiwKCQkJCQknRWFjdXRlJyA9PiAiXHhDM1x4ODkiLAoJCQkJCSdlYWN1dGUnID0+ICJceEMzXHhBOSIsCgkJCQkJJ0VhY3V0ZTsnID0+ICJceEMzXHg4OSIsCgkJCQkJJ2VhY3V0ZTsnID0+ICJceEMzXHhBOSIsCgkJCQkJJ0VjaXJjJyA9PiAiXHhDM1x4OEEiLAoJCQkJCSdlY2lyYycgPT4gIlx4QzNceEFBIiwKCQkJCQknRWNpcmM7JyA9PiAiXHhDM1x4OEEiLAoJCQkJCSdlY2lyYzsnID0+ICJceEMzXHhBQSIsCgkJCQkJJ0VncmF2ZScgPT4gIlx4QzNceDg4IiwKCQkJCQknZWdyYXZlJyA9PiAiXHhDM1x4QTgiLAoJCQkJCSdFZ3JhdmU7JyA9PiAiXHhDM1x4ODgiLAoJCQkJCSdlZ3JhdmU7JyA9PiAiXHhDM1x4QTgiLAoJCQkJCSdlbXB0eTsnID0+ICJceEUyXHg4OFx4ODUiLAoJCQkJCSdlbXNwOycgPT4gIlx4RTJceDgwXHg4MyIsCgkJCQkJJ2Vuc3A7JyA9PiAiXHhFMlx4ODBceDgyIiwKCQkJCQknRXBzaWxvbjsnID0+ICJceENFXHg5NSIsCgkJCQkJJ2Vwc2lsb247JyA9PiAiXHhDRVx4QjUiLAoJCQkJCSdlcXVpdjsnID0+ICJceEUyXHg4OVx4QTEiLAoJCQkJCSdFdGE7JyA9PiAiXHhDRVx4OTciLAoJCQkJCSdldGE7JyA9PiAiXHhDRVx4QjciLAoJCQkJCSdFVEgnID0+ICJceEMzXHg5MCIsCgkJCQkJJ2V0aCcgPT4gIlx4QzNceEIwIiwKCQkJCQknRVRIOycgPT4gIlx4QzNceDkwIiwKCQkJCQknZXRoOycgPT4gIlx4QzNceEIwIiwKCQkJCQknRXVtbCcgPT4gIlx4QzNceDhCIiwKCQkJCQknZXVtbCcgPT4gIlx4QzNceEFCIiwKCQkJCQknRXVtbDsnID0+ICJceEMzXHg4QiIsCgkJCQkJJ2V1bWw7JyA9PiAiXHhDM1x4QUIiLAoJCQkJCSdldXJvOycgPT4gIlx4RTJceDgyXHhBQyIsCgkJCQkJJ2V4aXN0OycgPT4gIlx4RTJceDg4XHg4MyIsCgkJCQkJJ2Zub2Y7JyA9PiAiXHhDNlx4OTIiLAoJCQkJCSdmb3JhbGw7JyA9PiAiXHhFMlx4ODhceDgwIiwKCQkJCQknZnJhYzEyJyA9PiAiXHhDMlx4QkQiLAoJCQkJCSdmcmFjMTI7JyA9PiAiXHhDMlx4QkQiLAoJCQkJCSdmcmFjMTQnID0+ICJceEMyXHhCQyIsCgkJCQkJJ2ZyYWMxNDsnID0+ICJceEMyXHhCQyIsCgkJCQkJJ2ZyYWMzNCcgPT4gIlx4QzJceEJFIiwKCQkJCQknZnJhYzM0OycgPT4gIlx4QzJceEJFIiwKCQkJCQknZnJhc2w7JyA9PiAiXHhFMlx4ODFceDg0IiwKCQkJCQknR2FtbWE7JyA9PiAiXHhDRVx4OTMiLAoJCQkJCSdnYW1tYTsnID0+ICJceENFXHhCMyIsCgkJCQkJJ2dlOycgPT4gIlx4RTJceDg5XHhBNSIsCgkJCQkJJ0dUJyA9PiAiXHgzRSIsCgkJCQkJJ2d0JyA9PiAiXHgzRSIsCgkJCQkJJ0dUOycgPT4gIlx4M0UiLAoJCQkJCSdndDsnID0+ICJceDNFIiwKCQkJCQknaEFycjsnID0+ICJceEUyXHg4N1x4OTQiLAoJCQkJCSdoYXJyOycgPT4gIlx4RTJceDg2XHg5NCIsCgkJCQkJJ2hlYXJ0czsnID0+ICJceEUyXHg5OVx4QTUiLAoJCQkJCSdoZWxsaXA7JyA9PiAiXHhFMlx4ODBceEE2IiwKCQkJCQknSWFjdXRlJyA9PiAiXHhDM1x4OEQiLAoJCQkJCSdpYWN1dGUnID0+ICJceEMzXHhBRCIsCgkJCQkJJ0lhY3V0ZTsnID0+ICJceEMzXHg4RCIsCgkJCQkJJ2lhY3V0ZTsnID0+ICJceEMzXHhBRCIsCgkJCQkJJ0ljaXJjJyA9PiAiXHhDM1x4OEUiLAoJCQkJCSdpY2lyYycgPT4gIlx4QzNceEFFIiwKCQkJCQknSWNpcmM7JyA9PiAiXHhDM1x4OEUiLAoJCQkJCSdpY2lyYzsnID0+ICJceEMzXHhBRSIsCgkJCQkJJ2lleGNsJyA9PiAiXHhDMlx4QTEiLAoJCQkJCSdpZXhjbDsnID0+ICJceEMyXHhBMSIsCgkJCQkJJ0lncmF2ZScgPT4gIlx4QzNceDhDIiwKCQkJCQknaWdyYXZlJyA9PiAiXHhDM1x4QUMiLAoJCQkJCSdJZ3JhdmU7JyA9PiAiXHhDM1x4OEMiLAoJCQkJCSdpZ3JhdmU7JyA9PiAiXHhDM1x4QUMiLAoJCQkJCSdpbWFnZTsnID0+ICJceEUyXHg4NFx4OTEiLAoJCQkJCSdpbmZpbjsnID0+ICJceEUyXHg4OFx4OUUiLAoJCQkJCSdpbnQ7JyA9PiAiXHhFMlx4ODhceEFCIiwKCQkJCQknSW90YTsnID0+ICJceENFXHg5OSIsCgkJCQkJJ2lvdGE7JyA9PiAiXHhDRVx4QjkiLAoJCQkJCSdpcXVlc3QnID0+ICJceEMyXHhCRiIsCgkJCQkJJ2lxdWVzdDsnID0+ICJceEMyXHhCRiIsCgkJCQkJJ2lzaW47JyA9PiAiXHhFMlx4ODhceDg4IiwKCQkJCQknSXVtbCcgPT4gIlx4QzNceDhGIiwKCQkJCQknaXVtbCcgPT4gIlx4QzNceEFGIiwKCQkJCQknSXVtbDsnID0+ICJceEMzXHg4RiIsCgkJCQkJJ2l1bWw7JyA9PiAiXHhDM1x4QUYiLAoJCQkJCSdLYXBwYTsnID0+ICJceENFXHg5QSIsCgkJCQkJJ2thcHBhOycgPT4gIlx4Q0VceEJBIiwKCQkJCQknTGFtYmRhOycgPT4gIlx4Q0VceDlCIiwKCQkJCQknbGFtYmRhOycgPT4gIlx4Q0VceEJCIiwKCQkJCQknbGFuZzsnID0+ICJceEUzXHg4MFx4ODgiLAoJCQkJCSdsYXF1bycgPT4gIlx4QzJceEFCIiwKCQkJCQknbGFxdW87JyA9PiAiXHhDMlx4QUIiLAoJCQkJCSdsQXJyOycgPT4gIlx4RTJceDg3XHg5MCIsCgkJCQkJJ2xhcnI7JyA9PiAiXHhFMlx4ODZceDkwIiwKCQkJCQknbGNlaWw7JyA9PiAiXHhFMlx4OENceDg4IiwKCQkJCQknbGRxdW87JyA9PiAiXHhFMlx4ODBceDlDIiwKCQkJCQknbGU7JyA9PiAiXHhFMlx4ODlceEE0IiwKCQkJCQknbGZsb29yOycgPT4gIlx4RTJceDhDXHg4QSIsCgkJCQkJJ2xvd2FzdDsnID0+ICJceEUyXHg4OFx4OTciLAoJCQkJCSdsb3o7JyA9PiAiXHhFMlx4OTdceDhBIiwKCQkJCQknbHJtOycgPT4gIlx4RTJceDgwXHg4RSIsCgkJCQkJJ2xzYXF1bzsnID0+ICJceEUyXHg4MFx4QjkiLAoJCQkJCSdsc3F1bzsnID0+ICJceEUyXHg4MFx4OTgiLAoJCQkJCSdMVCcgPT4gIlx4M0MiLAoJCQkJCSdsdCcgPT4gIlx4M0MiLAoJCQkJCSdMVDsnID0+ICJceDNDIiwKCQkJCQknbHQ7JyA9PiAiXHgzQyIsCgkJCQkJJ21hY3InID0+ICJceEMyXHhBRiIsCgkJCQkJJ21hY3I7JyA9PiAiXHhDMlx4QUYiLAoJCQkJCSdtZGFzaDsnID0+ICJceEUyXHg4MFx4OTQiLAoJCQkJCSdtaWNybycgPT4gIlx4QzJceEI1IiwKCQkJCQknbWljcm87JyA9PiAiXHhDMlx4QjUiLAoJCQkJCSdtaWRkb3QnID0+ICJceEMyXHhCNyIsCgkJCQkJJ21pZGRvdDsnID0+ICJceEMyXHhCNyIsCgkJCQkJJ21pbnVzOycgPT4gIlx4RTJceDg4XHg5MiIsCgkJCQkJJ011OycgPT4gIlx4Q0VceDlDIiwKCQkJCQknbXU7JyA9PiAiXHhDRVx4QkMiLAoJCQkJCSduYWJsYTsnID0+ICJceEUyXHg4OFx4ODciLAoJCQkJCSduYnNwJyA9PiAiXHhDMlx4QTAiLAoJCQkJCSduYnNwOycgPT4gIlx4QzJceEEwIiwKCQkJCQknbmRhc2g7JyA9PiAiXHhFMlx4ODBceDkzIiwKCQkJCQknbmU7JyA9PiAiXHhFMlx4ODlceEEwIiwKCQkJCQknbmk7JyA9PiAiXHhFMlx4ODhceDhCIiwKCQkJCQknbm90JyA9PiAiXHhDMlx4QUMiLAoJCQkJCSdub3Q7JyA9PiAiXHhDMlx4QUMiLAoJCQkJCSdub3RpbjsnID0+ICJceEUyXHg4OFx4ODkiLAoJCQkJCSduc3ViOycgPT4gIlx4RTJceDhBXHg4NCIsCgkJCQkJJ050aWxkZScgPT4gIlx4QzNceDkxIiwKCQkJCQknbnRpbGRlJyA9PiAiXHhDM1x4QjEiLAoJCQkJCSdOdGlsZGU7JyA9PiAiXHhDM1x4OTEiLAoJCQkJCSdudGlsZGU7JyA9PiAiXHhDM1x4QjEiLAoJCQkJCSdOdTsnID0+ICJceENFXHg5RCIsCgkJCQkJJ251OycgPT4gIlx4Q0VceEJEIiwKCQkJCQknT2FjdXRlJyA9PiAiXHhDM1x4OTMiLAoJCQkJCSdvYWN1dGUnID0+ICJceEMzXHhCMyIsCgkJCQkJJ09hY3V0ZTsnID0+ICJceEMzXHg5MyIsCgkJCQkJJ29hY3V0ZTsnID0+ICJceEMzXHhCMyIsCgkJCQkJJ09jaXJjJyA9PiAiXHhDM1x4OTQiLAoJCQkJCSdvY2lyYycgPT4gIlx4QzNceEI0IiwKCQkJCQknT2NpcmM7JyA9PiAiXHhDM1x4OTQiLAoJCQkJCSdvY2lyYzsnID0+ICJceEMzXHhCNCIsCgkJCQkJJ09FbGlnOycgPT4gIlx4QzVceDkyIiwKCQkJCQknb2VsaWc7JyA9PiAiXHhDNVx4OTMiLAoJCQkJCSdPZ3JhdmUnID0+ICJceEMzXHg5MiIsCgkJCQkJJ29ncmF2ZScgPT4gIlx4QzNceEIyIiwKCQkJCQknT2dyYXZlOycgPT4gIlx4QzNceDkyIiwKCQkJCQknb2dyYXZlOycgPT4gIlx4QzNceEIyIiwKCQkJCQknb2xpbmU7JyA9PiAiXHhFMlx4ODBceEJFIiwKCQkJCQknT21lZ2E7JyA9PiAiXHhDRVx4QTkiLAoJCQkJCSdvbWVnYTsnID0+ICJceENGXHg4OSIsCgkJCQkJJ09taWNyb247JyA9PiAiXHhDRVx4OUYiLAoJCQkJCSdvbWljcm9uOycgPT4gIlx4Q0VceEJGIiwKCQkJCQknb3BsdXM7JyA9PiAiXHhFMlx4OEFceDk1IiwKCQkJCQknb3I7JyA9PiAiXHhFMlx4ODhceEE4IiwKCQkJCQknb3JkZicgPT4gIlx4QzJceEFBIiwKCQkJCQknb3JkZjsnID0+ICJceEMyXHhBQSIsCgkJCQkJJ29yZG0nID0+ICJceEMyXHhCQSIsCgkJCQkJJ29yZG07JyA9PiAiXHhDMlx4QkEiLAoJCQkJCSdPc2xhc2gnID0+ICJceEMzXHg5OCIsCgkJCQkJJ29zbGFzaCcgPT4gIlx4QzNceEI4IiwKCQkJCQknT3NsYXNoOycgPT4gIlx4QzNceDk4IiwKCQkJCQknb3NsYXNoOycgPT4gIlx4QzNceEI4IiwKCQkJCQknT3RpbGRlJyA9PiAiXHhDM1x4OTUiLAoJCQkJCSdvdGlsZGUnID0+ICJceEMzXHhCNSIsCgkJCQkJJ090aWxkZTsnID0+ICJceEMzXHg5NSIsCgkJCQkJJ290aWxkZTsnID0+ICJceEMzXHhCNSIsCgkJCQkJJ290aW1lczsnID0+ICJceEUyXHg4QVx4OTciLAoJCQkJCSdPdW1sJyA9PiAiXHhDM1x4OTYiLAoJCQkJCSdvdW1sJyA9PiAiXHhDM1x4QjYiLAoJCQkJCSdPdW1sOycgPT4gIlx4QzNceDk2IiwKCQkJCQknb3VtbDsnID0+ICJceEMzXHhCNiIsCgkJCQkJJ3BhcmEnID0+ICJceEMyXHhCNiIsCgkJCQkJJ3BhcmE7JyA9PiAiXHhDMlx4QjYiLAoJCQkJCSdwYXJ0OycgPT4gIlx4RTJceDg4XHg4MiIsCgkJCQkJJ3Blcm1pbDsnID0+ICJceEUyXHg4MFx4QjAiLAoJCQkJCSdwZXJwOycgPT4gIlx4RTJceDhBXHhBNSIsCgkJCQkJJ1BoaTsnID0+ICJceENFXHhBNiIsCgkJCQkJJ3BoaTsnID0+ICJceENGXHg4NiIsCgkJCQkJJ1BpOycgPT4gIlx4Q0VceEEwIiwKCQkJCQkncGk7JyA9PiAiXHhDRlx4ODAiLAoJCQkJCSdwaXY7JyA9PiAiXHhDRlx4OTYiLAoJCQkJCSdwbHVzbW4nID0+ICJceEMyXHhCMSIsCgkJCQkJJ3BsdXNtbjsnID0+ICJceEMyXHhCMSIsCgkJCQkJJ3BvdW5kJyA9PiAiXHhDMlx4QTMiLAoJCQkJCSdwb3VuZDsnID0+ICJceEMyXHhBMyIsCgkJCQkJJ1ByaW1lOycgPT4gIlx4RTJceDgwXHhCMyIsCgkJCQkJJ3ByaW1lOycgPT4gIlx4RTJceDgwXHhCMiIsCgkJCQkJJ3Byb2Q7JyA9PiAiXHhFMlx4ODhceDhGIiwKCQkJCQkncHJvcDsnID0+ICJceEUyXHg4OFx4OUQiLAoJCQkJCSdQc2k7JyA9PiAiXHhDRVx4QTgiLAoJCQkJCSdwc2k7JyA9PiAiXHhDRlx4ODgiLAoJCQkJCSdRVU9UJyA9PiAiXHgyMiIsCgkJCQkJJ3F1b3QnID0+ICJceDIyIiwKCQkJCQknUVVPVDsnID0+ICJceDIyIiwKCQkJCQkncXVvdDsnID0+ICJceDIyIiwKCQkJCQkncmFkaWM7JyA9PiAiXHhFMlx4ODhceDlBIiwKCQkJCQkncmFuZzsnID0+ICJceEUzXHg4MFx4ODkiLAoJCQkJCSdyYXF1bycgPT4gIlx4QzJceEJCIiwKCQkJCQkncmFxdW87JyA9PiAiXHhDMlx4QkIiLAoJCQkJCSdyQXJyOycgPT4gIlx4RTJceDg3XHg5MiIsCgkJCQkJJ3JhcnI7JyA9PiAiXHhFMlx4ODZceDkyIiwKCQkJCQkncmNlaWw7JyA9PiAiXHhFMlx4OENceDg5IiwKCQkJCQkncmRxdW87JyA9PiAiXHhFMlx4ODBceDlEIiwKCQkJCQkncmVhbDsnID0+ICJceEUyXHg4NFx4OUMiLAoJCQkJCSdSRUcnID0+ICJceEMyXHhBRSIsCgkJCQkJJ3JlZycgPT4gIlx4QzJceEFFIiwKCQkJCQknUkVHOycgPT4gIlx4QzJceEFFIiwKCQkJCQkncmVnOycgPT4gIlx4QzJceEFFIiwKCQkJCQkncmZsb29yOycgPT4gIlx4RTJceDhDXHg4QiIsCgkJCQkJJ1JobzsnID0+ICJceENFXHhBMSIsCgkJCQkJJ3JobzsnID0+ICJceENGXHg4MSIsCgkJCQkJJ3JsbTsnID0+ICJceEUyXHg4MFx4OEYiLAoJCQkJCSdyc2FxdW87JyA9PiAiXHhFMlx4ODBceEJBIiwKCQkJCQkncnNxdW87JyA9PiAiXHhFMlx4ODBceDk5IiwKCQkJCQknc2JxdW87JyA9PiAiXHhFMlx4ODBceDlBIiwKCQkJCQknU2Nhcm9uOycgPT4gIlx4QzVceEEwIiwKCQkJCQknc2Nhcm9uOycgPT4gIlx4QzVceEExIiwKCQkJCQknc2RvdDsnID0+ICJceEUyXHg4Qlx4ODUiLAoJCQkJCSdzZWN0JyA9PiAiXHhDMlx4QTciLAoJCQkJCSdzZWN0OycgPT4gIlx4QzJceEE3IiwKCQkJCQknc2h5JyA9PiAiXHhDMlx4QUQiLAoJCQkJCSdzaHk7JyA9PiAiXHhDMlx4QUQiLAoJCQkJCSdTaWdtYTsnID0+ICJceENFXHhBMyIsCgkJCQkJJ3NpZ21hOycgPT4gIlx4Q0ZceDgzIiwKCQkJCQknc2lnbWFmOycgPT4gIlx4Q0ZceDgyIiwKCQkJCQknc2ltOycgPT4gIlx4RTJceDg4XHhCQyIsCgkJCQkJJ3NwYWRlczsnID0+ICJceEUyXHg5OVx4QTAiLAoJCQkJCSdzdWI7JyA9PiAiXHhFMlx4OEFceDgyIiwKCQkJCQknc3ViZTsnID0+ICJceEUyXHg4QVx4ODYiLAoJCQkJCSdzdW07JyA9PiAiXHhFMlx4ODhceDkxIiwKCQkJCQknc3VwOycgPT4gIlx4RTJceDhBXHg4MyIsCgkJCQkJJ3N1cDEnID0+ICJceEMyXHhCOSIsCgkJCQkJJ3N1cDE7JyA9PiAiXHhDMlx4QjkiLAoJCQkJCSdzdXAyJyA9PiAiXHhDMlx4QjIiLAoJCQkJCSdzdXAyOycgPT4gIlx4QzJceEIyIiwKCQkJCQknc3VwMycgPT4gIlx4QzJceEIzIiwKCQkJCQknc3VwMzsnID0+ICJceEMyXHhCMyIsCgkJCQkJJ3N1cGU7JyA9PiAiXHhFMlx4OEFceDg3IiwKCQkJCQknc3psaWcnID0+ICJceEMzXHg5RiIsCgkJCQkJJ3N6bGlnOycgPT4gIlx4QzNceDlGIiwKCQkJCQknVGF1OycgPT4gIlx4Q0VceEE0IiwKCQkJCQkndGF1OycgPT4gIlx4Q0ZceDg0IiwKCQkJCQkndGhlcmU0OycgPT4gIlx4RTJceDg4XHhCNCIsCgkJCQkJJ1RoZXRhOycgPT4gIlx4Q0VceDk4IiwKCQkJCQkndGhldGE7JyA9PiAiXHhDRVx4QjgiLAoJCQkJCSd0aGV0YXN5bTsnID0+ICJceENGXHg5MSIsCgkJCQkJJ3RoaW5zcDsnID0+ICJceEUyXHg4MFx4ODkiLAoJCQkJCSdUSE9STicgPT4gIlx4QzNceDlFIiwKCQkJCQkndGhvcm4nID0+ICJceEMzXHhCRSIsCgkJCQkJJ1RIT1JOOycgPT4gIlx4QzNceDlFIiwKCQkJCQkndGhvcm47JyA9PiAiXHhDM1x4QkUiLAoJCQkJCSd0aWxkZTsnID0+ICJceENCXHg5QyIsCgkJCQkJJ3RpbWVzJyA9PiAiXHhDM1x4OTciLAoJCQkJCSd0aW1lczsnID0+ICJceEMzXHg5NyIsCgkJCQkJJ1RSQURFOycgPT4gIlx4RTJceDg0XHhBMiIsCgkJCQkJJ3RyYWRlOycgPT4gIlx4RTJceDg0XHhBMiIsCgkJCQkJJ1VhY3V0ZScgPT4gIlx4QzNceDlBIiwKCQkJCQkndWFjdXRlJyA9PiAiXHhDM1x4QkEiLAoJCQkJCSdVYWN1dGU7JyA9PiAiXHhDM1x4OUEiLAoJCQkJCSd1YWN1dGU7JyA9PiAiXHhDM1x4QkEiLAoJCQkJCSd1QXJyOycgPT4gIlx4RTJceDg3XHg5MSIsCgkJCQkJJ3VhcnI7JyA9PiAiXHhFMlx4ODZceDkxIiwKCQkJCQknVWNpcmMnID0+ICJceEMzXHg5QiIsCgkJCQkJJ3VjaXJjJyA9PiAiXHhDM1x4QkIiLAoJCQkJCSdVY2lyYzsnID0+ICJceEMzXHg5QiIsCgkJCQkJJ3VjaXJjOycgPT4gIlx4QzNceEJCIiwKCQkJCQknVWdyYXZlJyA9PiAiXHhDM1x4OTkiLAoJCQkJCSd1Z3JhdmUnID0+ICJceEMzXHhCOSIsCgkJCQkJJ1VncmF2ZTsnID0+ICJceEMzXHg5OSIsCgkJCQkJJ3VncmF2ZTsnID0+ICJceEMzXHhCOSIsCgkJCQkJJ3VtbCcgPT4gIlx4QzJceEE4IiwKCQkJCQkndW1sOycgPT4gIlx4QzJceEE4IiwKCQkJCQkndXBzaWg7JyA9PiAiXHhDRlx4OTIiLAoJCQkJCSdVcHNpbG9uOycgPT4gIlx4Q0VceEE1IiwKCQkJCQkndXBzaWxvbjsnID0+ICJceENGXHg4NSIsCgkJCQkJJ1V1bWwnID0+ICJceEMzXHg5QyIsCgkJCQkJJ3V1bWwnID0+ICJceEMzXHhCQyIsCgkJCQkJJ1V1bWw7JyA9PiAiXHhDM1x4OUMiLAoJCQkJCSd1dW1sOycgPT4gIlx4QzNceEJDIiwKCQkJCQknd2VpZXJwOycgPT4gIlx4RTJceDg0XHg5OCIsCgkJCQkJJ1hpOycgPT4gIlx4Q0VceDlFIiwKCQkJCQkneGk7JyA9PiAiXHhDRVx4QkUiLAoJCQkJCSdZYWN1dGUnID0+ICJceEMzXHg5RCIsCgkJCQkJJ3lhY3V0ZScgPT4gIlx4QzNceEJEIiwKCQkJCQknWWFjdXRlOycgPT4gIlx4QzNceDlEIiwKCQkJCQkneWFjdXRlOycgPT4gIlx4QzNceEJEIiwKCQkJCQkneWVuJyA9PiAiXHhDMlx4QTUiLAoJCQkJCSd5ZW47JyA9PiAiXHhDMlx4QTUiLAoJCQkJCSd5dW1sJyA9PiAiXHhDM1x4QkYiLAoJCQkJCSdZdW1sOycgPT4gIlx4QzVceEI4IiwKCQkJCQkneXVtbDsnID0+ICJceEMzXHhCRiIsCgkJCQkJJ1pldGE7JyA9PiAiXHhDRVx4OTYiLAoJCQkJCSd6ZXRhOycgPT4gIlx4Q0VceEI2IiwKCQkJCQknendqOycgPT4gIlx4RTJceDgwXHg4RCIsCgkJCQkJJ3p3bmo7JyA9PiAiXHhFMlx4ODBceDhDIgoJCQkJKTsKCgkJCQlmb3IgKCRpID0gMCwgJG1hdGNoID0gbnVsbDsgJGkgPCA5ICYmICR0aGlzLT5jb25zdW1lKCkgIT09IGZhbHNlOyAkaSsrKQoJCQkJewoJCQkJCSRjb25zdW1lZCA9IHN1YnN0cigkdGhpcy0+Y29uc3VtZWQsIDEpOwoJCQkJCWlmIChpc3NldCgkZW50aXRpZXNbJGNvbnN1bWVkXSkpCgkJCQkJewoJCQkJCQkkbWF0Y2ggPSAkY29uc3VtZWQ7CgkJCQkJfQoJCQkJfQoKCQkJCWlmICgkbWF0Y2ggIT09IG51bGwpCgkJCQl7CiAJCQkJCSR0aGlzLT5kYXRhID0gc3Vic3RyX3JlcGxhY2UoJHRoaXMtPmRhdGEsICRlbnRpdGllc1skbWF0Y2hdLCAkdGhpcy0+cG9zaXRpb24gLSBzdHJsZW4oJGNvbnN1bWVkKSAtIDEsIHN0cmxlbigkbWF0Y2gpICsgMSk7CgkJCQkJJHRoaXMtPnBvc2l0aW9uICs9IHN0cmxlbigkZW50aXRpZXNbJG1hdGNoXSkgLSBzdHJsZW4oJGNvbnN1bWVkKSAtIDE7CgkJCQl9CgkJCQlicmVhazsKCQl9Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Enclosure.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBIYW5kbGVzIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBlbmNsb3N1cmVzIChpbmNsdWRpbmcgTWVkaWEgUlNTIGFuZCBpVHVuZXMgUlNTKQogKgogKiBVc2VkIGJ5IHtAc2VlIFNpbXBsZVBpZV9JdGVtOjpnZXRfZW5jbG9zdXJlKCl9IGFuZCB7QHNlZSBTaW1wbGVQaWVfSXRlbTo6Z2V0X2VuY2xvc3VyZXMoKX0KICoKICogVGhpcyBjbGFzcyBjYW4gYmUgb3ZlcmxvYWRlZCB3aXRoIHtAc2VlIFNpbXBsZVBpZTo6c2V0X2VuY2xvc3VyZV9jbGFzcygpfQogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgQVBJCiAqLwpjbGFzcyBTaW1wbGVQaWVfRW5jbG9zdXJlCnsKCS8qKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X2JpdHJhdGUoKQoJICovCgl2YXIgJGJpdHJhdGU7CgoJLyoqCgkgKiBAdmFyIGFycmF5CgkgKiBAc2VlIGdldF9jYXB0aW9ucygpCgkgKi8KCXZhciAkY2FwdGlvbnM7CgoJLyoqCgkgKiBAdmFyIGFycmF5CgkgKiBAc2VlIGdldF9jYXRlZ29yaWVzKCkKCSAqLwoJdmFyICRjYXRlZ29yaWVzOwoKCS8qKgoJICogQHZhciBpbnQKCSAqIEBzZWUgZ2V0X2NoYW5uZWxzKCkKCSAqLwoJdmFyICRjaGFubmVsczsKCgkvKioKCSAqIEB2YXIgU2ltcGxlUGllX0NvcHlyaWdodAoJICogQHNlZSBnZXRfY29weXJpZ2h0KCkKCSAqLwoJdmFyICRjb3B5cmlnaHQ7CgoJLyoqCgkgKiBAdmFyIGFycmF5CgkgKiBAc2VlIGdldF9jcmVkaXRzKCkKCSAqLwoJdmFyICRjcmVkaXRzOwoKCS8qKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X2Rlc2NyaXB0aW9uKCkKCSAqLwoJdmFyICRkZXNjcmlwdGlvbjsKCgkvKioKCSAqIEB2YXIgaW50CgkgKiBAc2VlIGdldF9kdXJhdGlvbigpCgkgKi8KCXZhciAkZHVyYXRpb247CgoJLyoqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfZXhwcmVzc2lvbigpCgkgKi8KCXZhciAkZXhwcmVzc2lvbjsKCgkvKioKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9mcmFtZXJhdGUoKQoJICovCgl2YXIgJGZyYW1lcmF0ZTsKCgkvKioKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9oYW5kbGVyKCkKCSAqLwoJdmFyICRoYW5kbGVyOwoKCS8qKgoJICogQHZhciBhcnJheQoJICogQHNlZSBnZXRfaGFzaGVzKCkKCSAqLwoJdmFyICRoYXNoZXM7CgoJLyoqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfaGVpZ2h0KCkKCSAqLwoJdmFyICRoZWlnaHQ7CgoJLyoqCgkgKiBAZGVwcmVjYXRlZAoJICogQHZhciBudWxsCgkgKi8KCXZhciAkamF2YXNjcmlwdDsKCgkvKioKCSAqIEB2YXIgYXJyYXkKCSAqIEBzZWUgZ2V0X2tleXdvcmRzKCkKCSAqLwoJdmFyICRrZXl3b3JkczsKCgkvKioKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9sYW5ndWFnZSgpCgkgKi8KCXZhciAkbGFuZzsKCgkvKioKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9sZW5ndGgoKQoJICovCgl2YXIgJGxlbmd0aDsKCgkvKioKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF9saW5rKCkKCSAqLwoJdmFyICRsaW5rOwoKCS8qKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X21lZGl1bSgpCgkgKi8KCXZhciAkbWVkaXVtOwoKCS8qKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X3BsYXllcigpCgkgKi8KCXZhciAkcGxheWVyOwoKCS8qKgoJICogQHZhciBhcnJheQoJICogQHNlZSBnZXRfcmF0aW5ncygpCgkgKi8KCXZhciAkcmF0aW5nczsKCgkvKioKCSAqIEB2YXIgYXJyYXkKCSAqIEBzZWUgZ2V0X3Jlc3RyaWN0aW9ucygpCgkgKi8KCXZhciAkcmVzdHJpY3Rpb25zOwoKCS8qKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X3NhbXBsaW5nX3JhdGUoKQoJICovCgl2YXIgJHNhbXBsaW5ncmF0ZTsKCgkvKioKCSAqIEB2YXIgYXJyYXkKCSAqIEBzZWUgZ2V0X3RodW1ibmFpbHMoKQoJICovCgl2YXIgJHRodW1ibmFpbHM7CgoJLyoqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfdGl0bGUoKQoJICovCgl2YXIgJHRpdGxlOwoKCS8qKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X3R5cGUoKQoJICovCgl2YXIgJHR5cGU7CgoJLyoqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfd2lkdGgoKQoJICovCgl2YXIgJHdpZHRoOwoKCS8qKgoJICogQ29uc3RydWN0b3IsIHVzZWQgdG8gaW5wdXQgdGhlIGRhdGEKCSAqCgkgKiBGb3IgZG9jdW1lbnRhdGlvbiBvbiBhbGwgdGhlIHBhcmFtZXRlcnMsIHNlZSB0aGUgY29ycmVzcG9uZGluZwoJICogcHJvcGVydGllcyBhbmQgdGhlaXIgYWNjZXNzb3JzCgkgKgoJICogQHVzZXMgaWRuYV9jb252ZXJ0IElmIGF2YWlsYWJsZSwgdGhpcyB3aWxsIGNvbnZlcnQgYW4gSUROCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGluayA9IG51bGwsICR0eXBlID0gbnVsbCwgJGxlbmd0aCA9IG51bGwsICRqYXZhc2NyaXB0ID0gbnVsbCwgJGJpdHJhdGUgPSBudWxsLCAkY2FwdGlvbnMgPSBudWxsLCAkY2F0ZWdvcmllcyA9IG51bGwsICRjaGFubmVscyA9IG51bGwsICRjb3B5cmlnaHQgPSBudWxsLCAkY3JlZGl0cyA9IG51bGwsICRkZXNjcmlwdGlvbiA9IG51bGwsICRkdXJhdGlvbiA9IG51bGwsICRleHByZXNzaW9uID0gbnVsbCwgJGZyYW1lcmF0ZSA9IG51bGwsICRoYXNoZXMgPSBudWxsLCAkaGVpZ2h0ID0gbnVsbCwgJGtleXdvcmRzID0gbnVsbCwgJGxhbmcgPSBudWxsLCAkbWVkaXVtID0gbnVsbCwgJHBsYXllciA9IG51bGwsICRyYXRpbmdzID0gbnVsbCwgJHJlc3RyaWN0aW9ucyA9IG51bGwsICRzYW1wbGluZ3JhdGUgPSBudWxsLCAkdGh1bWJuYWlscyA9IG51bGwsICR0aXRsZSA9IG51bGwsICR3aWR0aCA9IG51bGwpCgl7CgkJJHRoaXMtPmJpdHJhdGUgPSAkYml0cmF0ZTsKCQkkdGhpcy0+Y2FwdGlvbnMgPSAkY2FwdGlvbnM7CgkJJHRoaXMtPmNhdGVnb3JpZXMgPSAkY2F0ZWdvcmllczsKCQkkdGhpcy0+Y2hhbm5lbHMgPSAkY2hhbm5lbHM7CgkJJHRoaXMtPmNvcHlyaWdodCA9ICRjb3B5cmlnaHQ7CgkJJHRoaXMtPmNyZWRpdHMgPSAkY3JlZGl0czsKCQkkdGhpcy0+ZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb247CgkJJHRoaXMtPmR1cmF0aW9uID0gJGR1cmF0aW9uOwoJCSR0aGlzLT5leHByZXNzaW9uID0gJGV4cHJlc3Npb247CgkJJHRoaXMtPmZyYW1lcmF0ZSA9ICRmcmFtZXJhdGU7CgkJJHRoaXMtPmhhc2hlcyA9ICRoYXNoZXM7CgkJJHRoaXMtPmhlaWdodCA9ICRoZWlnaHQ7CgkJJHRoaXMtPmtleXdvcmRzID0gJGtleXdvcmRzOwoJCSR0aGlzLT5sYW5nID0gJGxhbmc7CgkJJHRoaXMtPmxlbmd0aCA9ICRsZW5ndGg7CgkJJHRoaXMtPmxpbmsgPSAkbGluazsKCQkkdGhpcy0+bWVkaXVtID0gJG1lZGl1bTsKCQkkdGhpcy0+cGxheWVyID0gJHBsYXllcjsKCQkkdGhpcy0+cmF0aW5ncyA9ICRyYXRpbmdzOwoJCSR0aGlzLT5yZXN0cmljdGlvbnMgPSAkcmVzdHJpY3Rpb25zOwoJCSR0aGlzLT5zYW1wbGluZ3JhdGUgPSAkc2FtcGxpbmdyYXRlOwoJCSR0aGlzLT50aHVtYm5haWxzID0gJHRodW1ibmFpbHM7CgkJJHRoaXMtPnRpdGxlID0gJHRpdGxlOwoJCSR0aGlzLT50eXBlID0gJHR5cGU7CgkJJHRoaXMtPndpZHRoID0gJHdpZHRoOwoKCQlpZiAoY2xhc3NfZXhpc3RzKCdpZG5hX2NvbnZlcnQnKSkKCQl7CgkJCSRpZG4gPSBuZXcgaWRuYV9jb252ZXJ0KCk7CgkJCSRwYXJzZWQgPSBTaW1wbGVQaWVfTWlzYzo6cGFyc2VfdXJsKCRsaW5rKTsKCQkJJHRoaXMtPmxpbmsgPSBTaW1wbGVQaWVfTWlzYzo6Y29tcHJlc3NfcGFyc2VfdXJsKCRwYXJzZWRbJ3NjaGVtZSddLCAkaWRuLT5lbmNvZGUoJHBhcnNlZFsnYXV0aG9yaXR5J10pLCAkcGFyc2VkWydwYXRoJ10sICRwYXJzZWRbJ3F1ZXJ5J10sICRwYXJzZWRbJ2ZyYWdtZW50J10pOwoJCX0KCQkkdGhpcy0+aGFuZGxlciA9ICR0aGlzLT5nZXRfaGFuZGxlcigpOyAvLyBOZWVkcyB0byBsb2FkIGxhc3QKCX0KCgkvKioKCSAqIFN0cmluZy1pZmllZCB2ZXJzaW9uCgkgKgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQoJewoJCS8vIFRoZXJlIGlzIG5vICR0aGlzLT5kYXRhIGhlcmUKCQlyZXR1cm4gbWQ1KHNlcmlhbGl6ZSgkdGhpcykpOwoJfQoKCS8qKgoJICogR2V0IHRoZSBiaXRyYXRlCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2JpdHJhdGUoKQoJewoJCWlmICgkdGhpcy0+Yml0cmF0ZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+Yml0cmF0ZTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGEgc2luZ2xlIGNhcHRpb24KCSAqCgkgKiBAcGFyYW0gaW50ICRrZXkKCSAqIEByZXR1cm4gU2ltcGxlUGllX0NhcHRpb258bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2NhcHRpb24oJGtleSA9IDApCgl7CgkJJGNhcHRpb25zID0gJHRoaXMtPmdldF9jYXB0aW9ucygpOwoJCWlmIChpc3NldCgkY2FwdGlvbnNbJGtleV0pKQoJCXsKCQkJcmV0dXJuICRjYXB0aW9uc1ska2V5XTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGFsbCBjYXB0aW9ucwoJICoKCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBBcnJheSBvZiB7QHNlZSBTaW1wbGVQaWVfQ2FwdGlvbn0gb2JqZWN0cwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2NhcHRpb25zKCkKCXsKCQlpZiAoJHRoaXMtPmNhcHRpb25zICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5jYXB0aW9uczsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGEgc2luZ2xlIGNhdGVnb3J5CgkgKgoJICogQHBhcmFtIGludCAka2V5CgkgKiBAcmV0dXJuIFNpbXBsZVBpZV9DYXRlZ29yeXxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY2F0ZWdvcnkoJGtleSA9IDApCgl7CgkJJGNhdGVnb3JpZXMgPSAkdGhpcy0+Z2V0X2NhdGVnb3JpZXMoKTsKCQlpZiAoaXNzZXQoJGNhdGVnb3JpZXNbJGtleV0pKQoJCXsKCQkJcmV0dXJuICRjYXRlZ29yaWVzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYWxsIGNhdGVnb3JpZXMKCSAqCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgQXJyYXkgb2Yge0BzZWUgU2ltcGxlUGllX0NhdGVnb3J5fSBvYmplY3RzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY2F0ZWdvcmllcygpCgl7CgkJaWYgKCR0aGlzLT5jYXRlZ29yaWVzICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5jYXRlZ29yaWVzOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIG51bWJlciBvZiBhdWRpbyBjaGFubmVscwoJICoKCSAqIEByZXR1cm4gaW50fG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9jaGFubmVscygpCgl7CgkJaWYgKCR0aGlzLT5jaGFubmVscyAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+Y2hhbm5lbHM7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgY29weXJpZ2h0IGluZm9ybWF0aW9uCgkgKgoJICogQHJldHVybiBTaW1wbGVQaWVfQ29weXJpZ2h0fG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9jb3B5cmlnaHQoKQoJewoJCWlmICgkdGhpcy0+Y29weXJpZ2h0ICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5jb3B5cmlnaHQ7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhIHNpbmdsZSBjcmVkaXQKCSAqCgkgKiBAcGFyYW0gaW50ICRrZXkKCSAqIEByZXR1cm4gU2ltcGxlUGllX0NyZWRpdHxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY3JlZGl0KCRrZXkgPSAwKQoJewoJCSRjcmVkaXRzID0gJHRoaXMtPmdldF9jcmVkaXRzKCk7CgkJaWYgKGlzc2V0KCRjcmVkaXRzWyRrZXldKSkKCQl7CgkJCXJldHVybiAkY3JlZGl0c1ska2V5XTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGFsbCBjcmVkaXRzCgkgKgoJICogQHJldHVybiBhcnJheXxudWxsIEFycmF5IG9mIHtAc2VlIFNpbXBsZVBpZV9DcmVkaXR9IG9iamVjdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9jcmVkaXRzKCkKCXsKCQlpZiAoJHRoaXMtPmNyZWRpdHMgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmNyZWRpdHM7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGVuY2xvc3VyZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCgl7CgkJaWYgKCR0aGlzLT5kZXNjcmlwdGlvbiAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+ZGVzY3JpcHRpb247CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgZHVyYXRpb24gb2YgdGhlIGVuY2xvc3VyZQoJICoKCSAqIEBwYXJhbSBib29sICRjb252ZXJ0IENvbnZlcnQgc2Vjb25kcyBpbnRvIGhoOm1tOnNzCgkgKiBAcmV0dXJuIHN0cmluZ3xpbnR8bnVsbCAnaGg6bW06c3MnIHN0cmluZyBpZiBgJGNvbnZlcnRgIHdhcyBzcGVjaWZpZWQsIG90aGVyd2lzZSBpbnRlZ2VyIChvciBudWxsIGlmIG5vbmUgZm91bmQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfZHVyYXRpb24oJGNvbnZlcnQgPSBmYWxzZSkKCXsKCQlpZiAoJHRoaXMtPmR1cmF0aW9uICE9PSBudWxsKQoJCXsKCQkJaWYgKCRjb252ZXJ0KQoJCQl7CgkJCQkkdGltZSA9IFNpbXBsZVBpZV9NaXNjOjp0aW1lX2htcygkdGhpcy0+ZHVyYXRpb24pOwoJCQkJcmV0dXJuICR0aW1lOwoJCQl9CgoJCQlyZXR1cm4gJHRoaXMtPmR1cmF0aW9uOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGV4cHJlc3Npb24KCSAqCgkgKiBAcmV0dXJuIHN0cmluZyBQcm9iYWJseSBvbmUgb2YgJ3NhbXBsZScsICdmdWxsJywgJ25vbnN0b3AnLCAnY2xpcCcuIERlZmF1bHRzIHRvICdmdWxsJwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2V4cHJlc3Npb24oKQoJewoJCWlmICgkdGhpcy0+ZXhwcmVzc2lvbiAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+ZXhwcmVzc2lvbjsKCQl9CgoJCXJldHVybiAnZnVsbCc7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGZpbGUgZXh0ZW5zaW9uCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2V4dGVuc2lvbigpCgl7CgkJaWYgKCR0aGlzLT5saW5rICE9PSBudWxsKQoJCXsKCQkJJHVybCA9IFNpbXBsZVBpZV9NaXNjOjpwYXJzZV91cmwoJHRoaXMtPmxpbmspOwoJCQlpZiAoJHVybFsncGF0aCddICE9PSAnJykKCQkJewoJCQkJcmV0dXJuIHBhdGhpbmZvKCR1cmxbJ3BhdGgnXSwgUEFUSElORk9fRVhURU5TSU9OKTsKCQkJfQoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgZnJhbWVyYXRlIChpbiBmcmFtZXMtcGVyLXNlY29uZCkKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfZnJhbWVyYXRlKCkKCXsKCQlpZiAoJHRoaXMtPmZyYW1lcmF0ZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+ZnJhbWVyYXRlOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHByZWZlcnJlZCBoYW5kbGVyCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbCBPbmUgb2YgJ2ZsYXNoJywgJ2ZtZWRpYScsICdxdWlja3RpbWUnLCAnd21lZGlhJywgJ21wMycKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9oYW5kbGVyKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmdldF9yZWFsX3R5cGUodHJ1ZSk7Cgl9CgoJLyoqCgkgKiBHZXQgYSBzaW5nbGUgaGFzaAoJICoKCSAqIEBsaW5rIGh0dHA6Ly93d3cucnNzYm9hcmQub3JnL21lZGlhLXJzcyNtZWRpYS1oYXNoCgkgKiBAcGFyYW0gaW50ICRrZXkKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgSGFzaCBhcyBwZXIgYG1lZGlhOmhhc2hgLCBwcmVmaXhlZCB3aXRoICIkYWxnbzoiCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfaGFzaCgka2V5ID0gMCkKCXsKCQkkaGFzaGVzID0gJHRoaXMtPmdldF9oYXNoZXMoKTsKCQlpZiAoaXNzZXQoJGhhc2hlc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGhhc2hlc1ska2V5XTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGFsbCBjcmVkaXRzCgkgKgoJICogQHJldHVybiBhcnJheXxudWxsIEFycmF5IG9mIHN0cmluZ3MsIHNlZSB7QHNlZSBnZXRfaGFzaCgpfQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2hhc2hlcygpCgl7CgkJaWYgKCR0aGlzLT5oYXNoZXMgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmhhc2hlczsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBoZWlnaHQKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfaGVpZ2h0KCkKCXsKCQlpZiAoJHRoaXMtPmhlaWdodCAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+aGVpZ2h0OwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGxhbmd1YWdlCgkgKgoJICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzA2NgoJICogQHJldHVybiBzdHJpbmd8bnVsbCBMYW5ndWFnZSBjb2RlIGFzIHBlciBSRkMgMzA2NgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xhbmd1YWdlKCkKCXsKCQlpZiAoJHRoaXMtPmxhbmcgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmxhbmc7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhIHNpbmdsZSBrZXl3b3JkCgkgKgoJICogQHBhcmFtIGludCAka2V5CgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfa2V5d29yZCgka2V5ID0gMCkKCXsKCQkka2V5d29yZHMgPSAkdGhpcy0+Z2V0X2tleXdvcmRzKCk7CgkJaWYgKGlzc2V0KCRrZXl3b3Jkc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGtleXdvcmRzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYWxsIGtleXdvcmRzCgkgKgoJICogQHJldHVybiBhcnJheXxudWxsIEFycmF5IG9mIHN0cmluZ3MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9rZXl3b3JkcygpCgl7CgkJaWYgKCR0aGlzLT5rZXl3b3JkcyAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+a2V5d29yZHM7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBsZW5ndGgKCSAqCgkgKiBAcmV0dXJuIGZsb2F0IExlbmd0aCBpbiBieXRlcwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xlbmd0aCgpCgl7CgkJaWYgKCR0aGlzLT5sZW5ndGggIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPmxlbmd0aDsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBVUkwKCSAqCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGluaygpCgl7CgkJaWYgKCR0aGlzLT5saW5rICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuIHVybGRlY29kZSgkdGhpcy0+bGluayk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgbWVkaXVtCgkgKgoJICogQGxpbmsgaHR0cDovL3d3dy5yc3Nib2FyZC5vcmcvbWVkaWEtcnNzI21lZGlhLWNvbnRlbnQKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgU2hvdWxkIGJlIG9uZSBvZiAnaW1hZ2UnLCAnYXVkaW8nLCAndmlkZW8nLCAnZG9jdW1lbnQnLCAnZXhlY3V0YWJsZScKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9tZWRpdW0oKQoJewoJCWlmICgkdGhpcy0+bWVkaXVtICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5tZWRpdW07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgcGxheWVyIFVSTAoJICoKCSAqIFR5cGljYWxseSB0aGUgc2FtZSBhcyB7QHNlZSBnZXRfcGVybWFsaW5rKCl9CgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFBsYXllciBVUkwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9wbGF5ZXIoKQoJewoJCWlmICgkdGhpcy0+cGxheWVyICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5wbGF5ZXI7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhIHNpbmdsZSByYXRpbmcKCSAqCgkgKiBAcGFyYW0gaW50ICRrZXkKCSAqIEByZXR1cm4gU2ltcGxlUGllX1JhdGluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfcmF0aW5nKCRrZXkgPSAwKQoJewoJCSRyYXRpbmdzID0gJHRoaXMtPmdldF9yYXRpbmdzKCk7CgkJaWYgKGlzc2V0KCRyYXRpbmdzWyRrZXldKSkKCQl7CgkJCXJldHVybiAkcmF0aW5nc1ska2V5XTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGFsbCByYXRpbmdzCgkgKgoJICogQHJldHVybiBhcnJheXxudWxsIEFycmF5IG9mIHtAc2VlIFNpbXBsZVBpZV9SYXRpbmd9IG9iamVjdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9yYXRpbmdzKCkKCXsKCQlpZiAoJHRoaXMtPnJhdGluZ3MgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnJhdGluZ3M7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhIHNpbmdsZSByZXN0cmljdGlvbgoJICoKCSAqIEBwYXJhbSBpbnQgJGtleQoJICogQHJldHVybiBTaW1wbGVQaWVfUmVzdHJpY3Rpb258bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3Jlc3RyaWN0aW9uKCRrZXkgPSAwKQoJewoJCSRyZXN0cmljdGlvbnMgPSAkdGhpcy0+Z2V0X3Jlc3RyaWN0aW9ucygpOwoJCWlmIChpc3NldCgkcmVzdHJpY3Rpb25zWyRrZXldKSkKCQl7CgkJCXJldHVybiAkcmVzdHJpY3Rpb25zWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYWxsIHJlc3RyaWN0aW9ucwoJICoKCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBBcnJheSBvZiB7QHNlZSBTaW1wbGVQaWVfUmVzdHJpY3Rpb259IG9iamVjdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9yZXN0cmljdGlvbnMoKQoJewoJCWlmICgkdGhpcy0+cmVzdHJpY3Rpb25zICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5yZXN0cmljdGlvbnM7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgc2FtcGxpbmcgcmF0ZSAoaW4ga0h6KQoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9zYW1wbGluZ19yYXRlKCkKCXsKCQlpZiAoJHRoaXMtPnNhbXBsaW5ncmF0ZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FtcGxpbmdyYXRlOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGZpbGUgc2l6ZSAoaW4gTWlCKQoJICoKCSAqIEByZXR1cm4gZmxvYXR8bnVsbCBGaWxlIHNpemUgaW4gbWViaWJ5dGVzICgxMDQ4IGJ5dGVzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3NpemUoKQoJewoJCSRsZW5ndGggPSAkdGhpcy0+Z2V0X2xlbmd0aCgpOwoJCWlmICgkbGVuZ3RoICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuIHJvdW5kKCRsZW5ndGgvMTA0ODU3NiwgMik7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhIHNpbmdsZSB0aHVtYm5haWwKCSAqCgkgKiBAcGFyYW0gaW50ICRrZXkKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGh1bWJuYWlsIFVSTAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3RodW1ibmFpbCgka2V5ID0gMCkKCXsKCQkkdGh1bWJuYWlscyA9ICR0aGlzLT5nZXRfdGh1bWJuYWlscygpOwoJCWlmIChpc3NldCgkdGh1bWJuYWlsc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJHRodW1ibmFpbHNbJGtleV07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhbGwgdGh1bWJuYWlscwoJICoKCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBBcnJheSBvZiB0aHVtYm5haWwgVVJMcwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3RodW1ibmFpbHMoKQoJewoJCWlmICgkdGhpcy0+dGh1bWJuYWlscyAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+dGh1bWJuYWlsczsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSB0aXRsZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF90aXRsZSgpCgl7CgkJaWYgKCR0aGlzLT50aXRsZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+dGl0bGU7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBtaW1ldHlwZSBvZiB0aGUgZW5jbG9zdXJlCgkgKgoJICogQHNlZSBnZXRfcmVhbF90eXBlKCkKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgTUlNRSB0eXBlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfdHlwZSgpCgl7CgkJaWYgKCR0aGlzLT50eXBlICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT50eXBlOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHdpZHRoCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3dpZHRoKCkKCXsKCQlpZiAoJHRoaXMtPndpZHRoICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT53aWR0aDsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogRW1iZWQgdGhlIGVuY2xvc3VyZSB1c2luZyBgPGVtYmVkPmAKCSAqCgkgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8ge0BzZWUgZW1iZWR9IGluc3RlYWQKCSAqCgkgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRvcHRpb25zIFNlZSBmaXJzdCBwYXJhbXRlciB0byB7QHNlZSBlbWJlZH0KCSAqIEByZXR1cm4gc3RyaW5nIEhUTUwgc3RyaW5nIHRvIG91dHB1dAoJICovCglwdWJsaWMgZnVuY3Rpb24gbmF0aXZlX2VtYmVkKCRvcHRpb25zPScnKQoJewoJCXJldHVybiAkdGhpcy0+ZW1iZWQoJG9wdGlvbnMsIHRydWUpOwoJfQoKCS8qKgoJICogRW1iZWQgdGhlIGVuY2xvc3VyZSB1c2luZyBKYXZhc2NyaXB0CgkgKgoJICogYCRvcHRpb25zYCBpcyBhbiBhcnJheSBvciBjb21tYS1zZXBhcmF0ZWQga2V5OnZhbHVlIHN0cmluZywgd2l0aCB0aGUKCSAqIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgoJICoKCSAqIC0gYGFsdGAgKHN0cmluZyk6IEFsdGVybmF0ZSBjb250ZW50IGZvciB3aGVuIGFuIGVuZC11c2VyIGRvZXMgbm90IGhhdmUKCSAqICAgIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGluc3RhbGxlZCBvciB3aGVuIGEgZmlsZSB0eXBlIGlzCgkgKiAgICB1bnN1cHBvcnRlZC4gQ2FuIGJlIGFueSB0ZXh0IG9yIEhUTUwuIERlZmF1bHRzIHRvIGJsYW5rLgoJICogLSBgYWx0Y2xhc3NgIChzdHJpbmcpOiBJZiBhIGZpbGUgdHlwZSBpcyB1bnN1cHBvcnRlZCwgdGhlIGVuZC11c2VyIHdpbGwKCSAqICAgIHNlZSB0aGUgYWx0IHRleHQgKGFib3ZlKSBsaW5rZWQgZGlyZWN0bHkgdG8gdGhlIGNvbnRlbnQuIFRoYXQgbGluawoJICogICAgd2lsbCBoYXZlIHRoaXMgdmFsdWUgYXMgaXRzIGNsYXNzIG5hbWUuIERlZmF1bHRzIHRvIGJsYW5rLgoJICogLSBgYXVkaW9gIChzdHJpbmcpOiBUaGlzIGlzIGFuIGltYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgYQoJICogICAgcGxhY2Vob2xkZXIgZm9yIGF1ZGlvIGZpbGVzIGJlZm9yZSB0aGV5J3JlIGxvYWRlZCAoUXVpY2tUaW1lLW9ubHkpLgoJICogICAgQ2FuIGJlIGFueSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBVUkwuIERlZmF1bHRzIHRvIGJsYW5rLgoJICogLSBgYmdjb2xvcmAgKHN0cmluZyk6IFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgbWVkaWEsIGlmIG5vdAoJICogICAgYWxyZWFkeSB0cmFuc3BhcmVudC4gRGVmYXVsdHMgdG8gYCNmZmZmZmZgLgoJICogLSBgaGVpZ2h0YCAoaW50ZWdlcik6IFRoZSBoZWlnaHQgb2YgdGhlIGVtYmVkZGVkIG1lZGlhLiBBY2NlcHRzIGFueQoJICogICAgbnVtZXJpYyBwaXhlbCB2YWx1ZSAoc3VjaCBhcyBgMzYwYCkgb3IgYGF1dG9gLiBEZWZhdWx0cyB0byBgYXV0b2AsCgkgKiAgICBhbmQgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoaXMgZGVmYXVsdC4KCSAqIC0gYGxvb3BgIChib29sZWFuKTogRG8geW91IHdhbnQgdGhlIG1lZGlhIHRvIGxvb3Agd2hlbiBpdCdzIGRvbmU/CgkgKiAgICBEZWZhdWx0cyB0byBgZmFsc2VgLgoJICogLSBgbWVkaWFwbGF5ZXJgIChzdHJpbmcpOiBUaGUgbG9jYXRpb24gb2YgdGhlIGluY2x1ZGVkCgkgKiAgICBgbWVkaWFwbGF5ZXIuc3dmYCBmaWxlLiBUaGlzIGFsbG93cyBmb3IgdGhlIHBsYXliYWNrIG9mIEZsYXNoIFZpZGVvCgkgKiAgICAoYC5mbHZgKSBmaWxlcywgYW5kIGlzIHRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yIG5vbi1PZGVvIE1QMydzLgoJICogICAgRGVmYXVsdHMgdG8gYmxhbmsuCgkgKiAtIGB2aWRlb2AgKHN0cmluZyk6IFRoaXMgaXMgYW4gaW1hZ2UgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBhCgkgKiAgICBwbGFjZWhvbGRlciBmb3IgdmlkZW8gZmlsZXMgYmVmb3JlIHRoZXkncmUgbG9hZGVkIChRdWlja1RpbWUtb25seSkuCgkgKiAgICBDYW4gYmUgYW55IHJlbGF0aXZlIG9yIGFic29sdXRlIFVSTC4gRGVmYXVsdHMgdG8gYmxhbmsuCgkgKiAtIGB3aWR0aGAgKGludGVnZXIpOiBUaGUgd2lkdGggb2YgdGhlIGVtYmVkZGVkIG1lZGlhLiBBY2NlcHRzIGFueQoJICogICAgbnVtZXJpYyBwaXhlbCB2YWx1ZSAoc3VjaCBhcyBgNDgwYCkgb3IgYGF1dG9gLiBEZWZhdWx0cyB0byBgYXV0b2AsCgkgKiAgICBhbmQgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoaXMgZGVmYXVsdC4KCSAqIC0gYHdpZGVzY3JlZW5gIChib29sZWFuKTogSXMgdGhlIGVuY2xvc3VyZSB3aWRlc2NyZWVuIG9yIHN0YW5kYXJkPwoJICogICAgVGhpcyBhcHBsaWVzIG9ubHkgdG8gdmlkZW8gZW5jbG9zdXJlcywgYW5kIHdpbGwgYXV0b21hdGljYWxseSByZXNpemUKCSAqICAgIHRoZSBjb250ZW50IGFwcHJvcHJpYXRlbHkuICBEZWZhdWx0cyB0byBgZmFsc2VgLCBpbXBseWluZyA0OjMgbW9kZS4KCSAqCgkgKiBOb3RlOiBOb24td2lkZXNjcmVlbiAoNDozKSBtb2RlIHdpdGggYHdpZHRoYCBhbmQgYGhlaWdodGAgc2V0IHRvIGBhdXRvYAoJICogd2lsbCBkZWZhdWx0IHRvIDQ4MHgzNjAgdmlkZW8gcmVzb2x1dGlvbi4gIFdpZGVzY3JlZW4gKDE2OjkpIG1vZGUgd2l0aAoJICogYHdpZHRoYCBhbmQgYGhlaWdodGAgc2V0IHRvIGBhdXRvYCB3aWxsIGRlZmF1bHQgdG8gNDgweDI3MCB2aWRlbyByZXNvbHV0aW9uLgoJICoKCSAqIEB0b2RvIElmIHRoZSBkaW1lbnNpb25zIGZvciBtZWRpYTpjb250ZW50IGFyZSBkZWZpbmVkLCB1c2UgdGhlbSB3aGVuIHdpZHRoL2hlaWdodCBhcmUgc2V0IHRvICdhdXRvJy4KCSAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJG9wdGlvbnMgQ29tbWEtc2VwYXJhdGVkIGtleTp2YWx1ZSBsaXN0LCBvciBhcnJheQoJICogQHBhcmFtIGJvb2wgJG5hdGl2ZSBVc2UgYDxlbWJlZD5gCgkgKiBAcmV0dXJuIHN0cmluZyBIVE1MIHN0cmluZyB0byBvdXRwdXQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGVtYmVkKCRvcHRpb25zID0gJycsICRuYXRpdmUgPSBmYWxzZSkKCXsKCQkvLyBTZXQgdXAgZGVmYXVsdHMKCQkkYXVkaW8gPSAnJzsKCQkkdmlkZW8gPSAnJzsKCQkkYWx0ID0gJyc7CgkJJGFsdGNsYXNzID0gJyc7CgkJJGxvb3AgPSAnZmFsc2UnOwoJCSR3aWR0aCA9ICdhdXRvJzsKCQkkaGVpZ2h0ID0gJ2F1dG8nOwoJCSRiZ2NvbG9yID0gJyNmZmZmZmYnOwoJCSRtZWRpYXBsYXllciA9ICcnOwoJCSR3aWRlc2NyZWVuID0gZmFsc2U7CgkJJGhhbmRsZXIgPSAkdGhpcy0+Z2V0X2hhbmRsZXIoKTsKCQkkdHlwZSA9ICR0aGlzLT5nZXRfcmVhbF90eXBlKCk7CgoJCS8vIFByb2Nlc3Mgb3B0aW9ucyBhbmQgcmVhc3NpZ24gdmFsdWVzIGFzIG5lY2Vzc2FyeQoJCWlmIChpc19hcnJheSgkb3B0aW9ucykpCgkJewoJCQlleHRyYWN0KCRvcHRpb25zKTsKCQl9CgkJZWxzZQoJCXsKCQkJJG9wdGlvbnMgPSBleHBsb2RlKCcsJywgJG9wdGlvbnMpOwoJCQlmb3JlYWNoKCRvcHRpb25zIGFzICRvcHRpb24pCgkJCXsKCQkJCSRvcHQgPSBleHBsb2RlKCc6JywgJG9wdGlvbiwgMik7CgkJCQlpZiAoaXNzZXQoJG9wdFswXSwgJG9wdFsxXSkpCgkJCQl7CgkJCQkJJG9wdFswXSA9IHRyaW0oJG9wdFswXSk7CgkJCQkJJG9wdFsxXSA9IHRyaW0oJG9wdFsxXSk7CgkJCQkJc3dpdGNoICgkb3B0WzBdKQoJCQkJCXsKCQkJCQkJY2FzZSAnYXVkaW8nOgoJCQkJCQkJJGF1ZGlvID0gJG9wdFsxXTsKCQkJCQkJCWJyZWFrOwoKCQkJCQkJY2FzZSAndmlkZW8nOgoJCQkJCQkJJHZpZGVvID0gJG9wdFsxXTsKCQkJCQkJCWJyZWFrOwoKCQkJCQkJY2FzZSAnYWx0JzoKCQkJCQkJCSRhbHQgPSAkb3B0WzFdOwoJCQkJCQkJYnJlYWs7CgoJCQkJCQljYXNlICdhbHRjbGFzcyc6CgkJCQkJCQkkYWx0Y2xhc3MgPSAkb3B0WzFdOwoJCQkJCQkJYnJlYWs7CgoJCQkJCQljYXNlICdsb29wJzoKCQkJCQkJCSRsb29wID0gJG9wdFsxXTsKCQkJCQkJCWJyZWFrOwoKCQkJCQkJY2FzZSAnd2lkdGgnOgoJCQkJCQkJJHdpZHRoID0gJG9wdFsxXTsKCQkJCQkJCWJyZWFrOwoKCQkJCQkJY2FzZSAnaGVpZ2h0JzoKCQkJCQkJCSRoZWlnaHQgPSAkb3B0WzFdOwoJCQkJCQkJYnJlYWs7CgoJCQkJCQljYXNlICdiZ2NvbG9yJzoKCQkJCQkJCSRiZ2NvbG9yID0gJG9wdFsxXTsKCQkJCQkJCWJyZWFrOwoKCQkJCQkJY2FzZSAnbWVkaWFwbGF5ZXInOgoJCQkJCQkJJG1lZGlhcGxheWVyID0gJG9wdFsxXTsKCQkJCQkJCWJyZWFrOwoKCQkJCQkJY2FzZSAnd2lkZXNjcmVlbic6CgkJCQkJCQkkd2lkZXNjcmVlbiA9ICRvcHRbMV07CgkJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCSRtaW1lID0gZXhwbG9kZSgnLycsICR0eXBlLCAyKTsKCQkkbWltZSA9ICRtaW1lWzBdOwoKCQkvLyBQcm9jZXNzIHZhbHVlcyBmb3IgJ2F1dG8nCgkJaWYgKCR3aWR0aCA9PT0gJ2F1dG8nKQoJCXsKCQkJaWYgKCRtaW1lID09PSAndmlkZW8nKQoJCQl7CgkJCQlpZiAoJGhlaWdodCA9PT0gJ2F1dG8nKQoJCQkJewoJCQkJCSR3aWR0aCA9IDQ4MDsKCQkJCX0KCQkJCWVsc2VpZiAoJHdpZGVzY3JlZW4pCgkJCQl7CgkJCQkJJHdpZHRoID0gcm91bmQoKGludHZhbCgkaGVpZ2h0KS85KSoxNik7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHdpZHRoID0gcm91bmQoKGludHZhbCgkaGVpZ2h0KS8zKSo0KTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR3aWR0aCA9ICcxMDAlJzsKCQkJfQoJCX0KCgkJaWYgKCRoZWlnaHQgPT09ICdhdXRvJykKCQl7CgkJCWlmICgkbWltZSA9PT0gJ2F1ZGlvJykKCQkJewoJCQkJJGhlaWdodCA9IDA7CgkJCX0KCQkJZWxzZWlmICgkbWltZSA9PT0gJ3ZpZGVvJykKCQkJewoJCQkJaWYgKCR3aWR0aCA9PT0gJ2F1dG8nKQoJCQkJewoJCQkJCWlmICgkd2lkZXNjcmVlbikKCQkJCQl7CgkJCQkJCSRoZWlnaHQgPSAyNzA7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRoZWlnaHQgPSAzNjA7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZWlmICgkd2lkZXNjcmVlbikKCQkJCXsKCQkJCQkkaGVpZ2h0ID0gcm91bmQoKGludHZhbCgkd2lkdGgpLzE2KSo5KTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkaGVpZ2h0ID0gcm91bmQoKGludHZhbCgkd2lkdGgpLzQpKjMpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGhlaWdodCA9IDM3NjsKCQkJfQoJCX0KCQllbHNlaWYgKCRtaW1lID09PSAnYXVkaW8nKQoJCXsKCQkJJGhlaWdodCA9IDA7CgkJfQoKCQkvLyBTZXQgcHJvcGVyIHBsYWNlaG9sZGVyIHZhbHVlCgkJaWYgKCRtaW1lID09PSAnYXVkaW8nKQoJCXsKCQkJJHBsYWNlaG9sZGVyID0gJGF1ZGlvOwoJCX0KCQllbHNlaWYgKCRtaW1lID09PSAndmlkZW8nKQoJCXsKCQkJJHBsYWNlaG9sZGVyID0gJHZpZGVvOwoJCX0KCgkJJGVtYmVkID0gJyc7CgoJCS8vIEZsYXNoCgkJaWYgKCRoYW5kbGVyID09PSAnZmxhc2gnKQoJCXsKCQkJaWYgKCRuYXRpdmUpCgkJCXsKCQkJCSRlbWJlZCAuPSAiPGVtYmVkIHNyYz1cIiIgLiAkdGhpcy0+Z2V0X2xpbmsoKSAuICJcIiBwbHVnaW5zcGFnZT1cImh0dHA6Ly9hZG9iZS5jb20vZ28vZ2V0Zmxhc2hwbGF5ZXJcIiB0eXBlPVwiJHR5cGVcIiBxdWFsaXR5PVwiaGlnaFwiIHdpZHRoPVwiJHdpZHRoXCIgaGVpZ2h0PVwiJGhlaWdodFwiIGJnY29sb3I9XCIkYmdjb2xvclwiIGxvb3A9XCIkbG9vcFwiPjwvZW1iZWQ+IjsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRlbWJlZCAuPSAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPmVtYmVkX2ZsYXNoKCckYmdjb2xvcicsICckd2lkdGgnLCAnJGhlaWdodCcsICciIC4gJHRoaXMtPmdldF9saW5rKCkgLiAiJywgJyRsb29wJywgJyR0eXBlJyk7PC9zY3JpcHQ+IjsKCQkJfQoJCX0KCgkJLy8gRmxhc2ggTWVkaWEgUGxheWVyIGZpbGUgdHlwZXMuCgkJLy8gUHJlZmVycmVkIGhhbmRsZXIgZm9yIE1QMyBmaWxlIHR5cGVzLgoJCWVsc2VpZiAoJGhhbmRsZXIgPT09ICdmbWVkaWEnIHx8ICgkaGFuZGxlciA9PT0gJ21wMycgJiYgJG1lZGlhcGxheWVyICE9PSAnJykpCgkJewoJCQkkaGVpZ2h0ICs9IDIwOwoJCQlpZiAoJG5hdGl2ZSkKCQkJewoJCQkJJGVtYmVkIC49ICI8ZW1iZWQgc3JjPVwiJG1lZGlhcGxheWVyXCIgcGx1Z2luc3BhZ2U9XCJodHRwOi8vYWRvYmUuY29tL2dvL2dldGZsYXNocGxheWVyXCIgdHlwZT1cImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCIgcXVhbGl0eT1cImhpZ2hcIiB3aWR0aD1cIiR3aWR0aFwiIGhlaWdodD1cIiRoZWlnaHRcIiB3bW9kZT1cInRyYW5zcGFyZW50XCIgZmxhc2h2YXJzPVwiZmlsZT0iIC4gcmF3dXJsZW5jb2RlKCR0aGlzLT5nZXRfbGluaygpLic/ZmlsZV9leHRlbnNpb249LicuJHRoaXMtPmdldF9leHRlbnNpb24oKSkgLiAiJmF1dG9zdGFydD1mYWxzZSZyZXBlYXQ9JGxvb3Amc2hvd2RpZ2l0cz10cnVlJnNob3dmc2J1dHRvbj1mYWxzZVwiPjwvZW1iZWQ+IjsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRlbWJlZCAuPSAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPmVtYmVkX2ZsdignJHdpZHRoJywgJyRoZWlnaHQnLCAnIiAuIHJhd3VybGVuY29kZSgkdGhpcy0+Z2V0X2xpbmsoKS4nP2ZpbGVfZXh0ZW5zaW9uPS4nLiR0aGlzLT5nZXRfZXh0ZW5zaW9uKCkpIC4gIicsICckcGxhY2Vob2xkZXInLCAnJGxvb3AnLCAnJG1lZGlhcGxheWVyJyk7PC9zY3JpcHQ+IjsKCQkJfQoJCX0KCgkJLy8gUXVpY2tUaW1lIDcgZmlsZSB0eXBlcy4gIE5lZWQgdG8gdGVzdCB3aXRoIFF1aWNrVGltZSA2LgoJCS8vIE9ubHkgaGFuZGxlIE1QMydzIGlmIHRoZSBGbGFzaCBNZWRpYSBQbGF5ZXIgaXMgbm90IHByZXNlbnQuCgkJZWxzZWlmICgkaGFuZGxlciA9PT0gJ3F1aWNrdGltZScgfHwgKCRoYW5kbGVyID09PSAnbXAzJyAmJiAkbWVkaWFwbGF5ZXIgPT09ICcnKSkKCQl7CgkJCSRoZWlnaHQgKz0gMTY7CgkJCWlmICgkbmF0aXZlKQoJCQl7CgkJCQlpZiAoJHBsYWNlaG9sZGVyICE9PSAnJykKCQkJCXsKCQkJCQkkZW1iZWQgLj0gIjxlbWJlZCB0eXBlPVwiJHR5cGVcIiBzdHlsZT1cImN1cnNvcjpoYW5kOyBjdXJzb3I6cG9pbnRlcjtcIiBocmVmPVwiIiAuICR0aGlzLT5nZXRfbGluaygpIC4gIlwiIHNyYz1cIiRwbGFjZWhvbGRlclwiIHdpZHRoPVwiJHdpZHRoXCIgaGVpZ2h0PVwiJGhlaWdodFwiIGF1dG9wbGF5PVwiZmFsc2VcIiB0YXJnZXQ9XCJteXNlbGZcIiBjb250cm9sbGVyPVwiZmFsc2VcIiBsb29wPVwiJGxvb3BcIiBzY2FsZT1cImFzcGVjdFwiIGJnY29sb3I9XCIkYmdjb2xvclwiIHBsdWdpbnNwYWdlPVwiaHR0cDovL2FwcGxlLmNvbS9xdWlja3RpbWUvZG93bmxvYWQvXCI+PC9lbWJlZD4iOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRlbWJlZCAuPSAiPGVtYmVkIHR5cGU9XCIkdHlwZVwiIHN0eWxlPVwiY3Vyc29yOmhhbmQ7IGN1cnNvcjpwb2ludGVyO1wiIHNyYz1cIiIgLiAkdGhpcy0+Z2V0X2xpbmsoKSAuICJcIiB3aWR0aD1cIiR3aWR0aFwiIGhlaWdodD1cIiRoZWlnaHRcIiBhdXRvcGxheT1cImZhbHNlXCIgdGFyZ2V0PVwibXlzZWxmXCIgY29udHJvbGxlcj1cInRydWVcIiBsb29wPVwiJGxvb3BcIiBzY2FsZT1cImFzcGVjdFwiIGJnY29sb3I9XCIkYmdjb2xvclwiIHBsdWdpbnNwYWdlPVwiaHR0cDovL2FwcGxlLmNvbS9xdWlja3RpbWUvZG93bmxvYWQvXCI+PC9lbWJlZD4iOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGVtYmVkIC49ICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+ZW1iZWRfcXVpY2t0aW1lKCckdHlwZScsICckYmdjb2xvcicsICckd2lkdGgnLCAnJGhlaWdodCcsICciIC4gJHRoaXMtPmdldF9saW5rKCkgLiAiJywgJyRwbGFjZWhvbGRlcicsICckbG9vcCcpOzwvc2NyaXB0PiI7CgkJCX0KCQl9CgoJCS8vIFdpbmRvd3MgTWVkaWEKCQllbHNlaWYgKCRoYW5kbGVyID09PSAnd21lZGlhJykKCQl7CgkJCSRoZWlnaHQgKz0gNDU7CgkJCWlmICgkbmF0aXZlKQoJCQl7CgkJCQkkZW1iZWQgLj0gIjxlbWJlZCB0eXBlPVwiYXBwbGljYXRpb24veC1tcGxheWVyMlwiIHNyYz1cIiIgLiAkdGhpcy0+Z2V0X2xpbmsoKSAuICJcIiBhdXRvc2l6ZT1cIjFcIiB3aWR0aD1cIiR3aWR0aFwiIGhlaWdodD1cIiRoZWlnaHRcIiBzaG93Y29udHJvbHM9XCIxXCIgc2hvd3N0YXR1c2Jhcj1cIjBcIiBzaG93ZGlzcGxheT1cIjBcIiBhdXRvc3RhcnQ9XCIwXCI+PC9lbWJlZD4iOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGVtYmVkIC49ICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+ZW1iZWRfd21lZGlhKCckd2lkdGgnLCAnJGhlaWdodCcsICciIC4gJHRoaXMtPmdldF9saW5rKCkgLiAiJyk7PC9zY3JpcHQ+IjsKCQkJfQoJCX0KCgkJLy8gRXZlcnl0aGluZyBlbHNlCgkJZWxzZSAkZW1iZWQgLj0gJzxhIGhyZWY9IicgLiAkdGhpcy0+Z2V0X2xpbmsoKSAuICciIGNsYXNzPSInIC4gJGFsdGNsYXNzIC4gJyI+JyAuICRhbHQgLiAnPC9hPic7CgoJCXJldHVybiAkZW1iZWQ7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHJlYWwgbWVkaWEgdHlwZQoJICoKCSAqIE9mdGVuLCBmZWVkcyBsaWUgdG8gdXMsIG5lY2Vzc2l0YXRpbmcgYSBiaXQgb2YgZGVlcGVyIGluc3BlY3Rpb24uIFRoaXMKCSAqIGNvbnZlcnRzIHR5cGVzIHRvIHRoZWlyIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbnMgYmFzZWQgb24gdGhlIGZpbGUKCSAqIGV4dGVuc2lvbgoJICoKCSAqIEBzZWUgZ2V0X3R5cGUoKQoJICogQHBhcmFtIGJvb2wgJGZpbmRfaGFuZGxlciBJbnRlcm5hbCB1c2Ugb25seSwgdXNlIHtAc2VlIGdldF9oYW5kbGVyKCl9IGluc3RlYWQKCSAqIEByZXR1cm4gc3RyaW5nIE1JTUUgdHlwZQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3JlYWxfdHlwZSgkZmluZF9oYW5kbGVyID0gZmFsc2UpCgl7CgkJLy8gTWltZS10eXBlcyBieSBoYW5kbGVyLgoJCSR0eXBlc19mbGFzaCA9IGFycmF5KCdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsICdhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2gnKTsgLy8gRmxhc2gKCQkkdHlwZXNfZm1lZGlhID0gYXJyYXkoJ3ZpZGVvL2ZsdicsICd2aWRlby94LWZsdicsJ2Zsdi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsgLy8gRmxhc2ggTWVkaWEgUGxheWVyCgkJJHR5cGVzX3F1aWNrdGltZSA9IGFycmF5KCdhdWRpby8zZ3BwJywgJ2F1ZGlvLzNncHAyJywgJ2F1ZGlvL2FhYycsICdhdWRpby94LWFhYycsICdhdWRpby9haWZmJywgJ2F1ZGlvL3gtYWlmZicsICdhdWRpby9taWQnLCAnYXVkaW8vbWlkaScsICdhdWRpby94LW1pZGknLCAnYXVkaW8vbXA0JywgJ2F1ZGlvL200YScsICdhdWRpby94LW00YScsICdhdWRpby93YXYnLCAnYXVkaW8veC13YXYnLCAndmlkZW8vM2dwcCcsICd2aWRlby8zZ3BwMicsICd2aWRlby9tNHYnLCAndmlkZW8veC1tNHYnLCAndmlkZW8vbXA0JywgJ3ZpZGVvL21wZWcnLCAndmlkZW8veC1tcGVnJywgJ3ZpZGVvL3F1aWNrdGltZScsICd2aWRlby9zZC12aWRlbycpOyAvLyBRdWlja1RpbWUKCQkkdHlwZXNfd21lZGlhID0gYXJyYXkoJ2FwcGxpY2F0aW9uL2FzeCcsICdhcHBsaWNhdGlvbi94LW1wbGF5ZXIyJywgJ2F1ZGlvL3gtbXMtd21hJywgJ2F1ZGlvL3gtbXMtd2F4JywgJ3ZpZGVvL3gtbXMtYXNmLXBsdWdpbicsICd2aWRlby94LW1zLWFzZicsICd2aWRlby94LW1zLXdtJywgJ3ZpZGVvL3gtbXMtd212JywgJ3ZpZGVvL3gtbXMtd3Z4Jyk7IC8vIFdpbmRvd3MgTWVkaWEKCQkkdHlwZXNfbXAzID0gYXJyYXkoJ2F1ZGlvL21wMycsICdhdWRpby94LW1wMycsICdhdWRpby9tcGVnJywgJ2F1ZGlvL3gtbXBlZycpOyAvLyBNUDMKCgkJaWYgKCR0aGlzLT5nZXRfdHlwZSgpICE9PSBudWxsKQoJCXsKCQkJJHR5cGUgPSBzdHJ0b2xvd2VyKCR0aGlzLT50eXBlKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHR5cGUgPSBudWxsOwoJCX0KCgkJLy8gSWYgd2UgZW5jb3VudGVyIGFuIHVuc3VwcG9ydGVkIG1pbWUtdHlwZSwgY2hlY2sgdGhlIGZpbGUgZXh0ZW5zaW9uIGFuZCBndWVzcyBpbnRlbGxpZ2VudGx5LgoJCWlmICghaW5fYXJyYXkoJHR5cGUsIGFycmF5X21lcmdlKCR0eXBlc19mbGFzaCwgJHR5cGVzX2ZtZWRpYSwgJHR5cGVzX3F1aWNrdGltZSwgJHR5cGVzX3dtZWRpYSwgJHR5cGVzX21wMykpKQoJCXsKCQkJc3dpdGNoIChzdHJ0b2xvd2VyKCR0aGlzLT5nZXRfZXh0ZW5zaW9uKCkpKQoJCQl7CgkJCQkvLyBBdWRpbyBtaW1lLXR5cGVzCgkJCQljYXNlICdhYWMnOgoJCQkJY2FzZSAnYWR0cyc6CgkJCQkJJHR5cGUgPSAnYXVkaW8vYWNjJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICdhaWYnOgoJCQkJY2FzZSAnYWlmYyc6CgkJCQljYXNlICdhaWZmJzoKCQkJCWNhc2UgJ2NkZGEnOgoJCQkJCSR0eXBlID0gJ2F1ZGlvL2FpZmYnOwoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ2J3Zic6CgkJCQkJJHR5cGUgPSAnYXVkaW8vd2F2JzsKCQkJCQlicmVhazsKCgkJCQljYXNlICdrYXInOgoJCQkJY2FzZSAnbWlkJzoKCQkJCWNhc2UgJ21pZGknOgoJCQkJY2FzZSAnc21mJzoKCQkJCQkkdHlwZSA9ICdhdWRpby9taWRpJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICdtNGEnOgoJCQkJCSR0eXBlID0gJ2F1ZGlvL3gtbTRhJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICdtcDMnOgoJCQkJY2FzZSAnc3dhJzoKCQkJCQkkdHlwZSA9ICdhdWRpby9tcDMnOwoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ3dhdic6CgkJCQkJJHR5cGUgPSAnYXVkaW8vd2F2JzsKCQkJCQlicmVhazsKCgkJCQljYXNlICd3YXgnOgoJCQkJCSR0eXBlID0gJ2F1ZGlvL3gtbXMtd2F4JzsKCQkJCQlicmVhazsKCgkJCQljYXNlICd3bWEnOgoJCQkJCSR0eXBlID0gJ2F1ZGlvL3gtbXMtd21hJzsKCQkJCQlicmVhazsKCgkJCQkvLyBWaWRlbyBtaW1lLXR5cGVzCgkJCQljYXNlICczZ3AnOgoJCQkJY2FzZSAnM2dwcCc6CgkJCQkJJHR5cGUgPSAndmlkZW8vM2dwcCc7CgkJCQkJYnJlYWs7CgoJCQkJY2FzZSAnM2cyJzoKCQkJCWNhc2UgJzNncDInOgoJCQkJCSR0eXBlID0gJ3ZpZGVvLzNncHAyJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICdhc2YnOgoJCQkJCSR0eXBlID0gJ3ZpZGVvL3gtbXMtYXNmJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICdmbHYnOgoJCQkJCSR0eXBlID0gJ3ZpZGVvL3gtZmx2JzsKCQkJCQlicmVhazsKCgkJCQljYXNlICdtMWEnOgoJCQkJY2FzZSAnbTFzJzoKCQkJCWNhc2UgJ20xdic6CgkJCQljYXNlICdtMTUnOgoJCQkJY2FzZSAnbTc1JzoKCQkJCWNhc2UgJ21wMic6CgkJCQljYXNlICdtcGEnOgoJCQkJY2FzZSAnbXBlZyc6CgkJCQljYXNlICdtcGcnOgoJCQkJY2FzZSAnbXBtJzoKCQkJCWNhc2UgJ21wdic6CgkJCQkJJHR5cGUgPSAndmlkZW8vbXBlZyc7CgkJCQkJYnJlYWs7CgoJCQkJY2FzZSAnbTR2JzoKCQkJCQkkdHlwZSA9ICd2aWRlby94LW00dic7CgkJCQkJYnJlYWs7CgoJCQkJY2FzZSAnbW92JzoKCQkJCWNhc2UgJ3F0JzoKCQkJCQkkdHlwZSA9ICd2aWRlby9xdWlja3RpbWUnOwoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ21wNCc6CgkJCQljYXNlICdtcGc0JzoKCQkJCQkkdHlwZSA9ICd2aWRlby9tcDQnOwoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ3Nkdic6CgkJCQkJJHR5cGUgPSAndmlkZW8vc2QtdmlkZW8nOwoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ3dtJzoKCQkJCQkkdHlwZSA9ICd2aWRlby94LW1zLXdtJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICd3bXYnOgoJCQkJCSR0eXBlID0gJ3ZpZGVvL3gtbXMtd212JzsKCQkJCQlicmVhazsKCgkJCQljYXNlICd3dngnOgoJCQkJCSR0eXBlID0gJ3ZpZGVvL3gtbXMtd3Z4JzsKCQkJCQlicmVhazsKCgkJCQkvLyBGbGFzaCBtaW1lLXR5cGVzCgkJCQljYXNlICdzcGwnOgoJCQkJCSR0eXBlID0gJ2FwcGxpY2F0aW9uL2Z1dHVyZXNwbGFzaCc7CgkJCQkJYnJlYWs7CgoJCQkJY2FzZSAnc3dmJzoKCQkJCQkkdHlwZSA9ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCc7CgkJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCWlmICgkZmluZF9oYW5kbGVyKQoJCXsKCQkJaWYgKGluX2FycmF5KCR0eXBlLCAkdHlwZXNfZmxhc2gpKQoJCQl7CgkJCQlyZXR1cm4gJ2ZsYXNoJzsKCQkJfQoJCQllbHNlaWYgKGluX2FycmF5KCR0eXBlLCAkdHlwZXNfZm1lZGlhKSkKCQkJewoJCQkJcmV0dXJuICdmbWVkaWEnOwoJCQl9CgkJCWVsc2VpZiAoaW5fYXJyYXkoJHR5cGUsICR0eXBlc19xdWlja3RpbWUpKQoJCQl7CgkJCQlyZXR1cm4gJ3F1aWNrdGltZSc7CgkJCX0KCQkJZWxzZWlmIChpbl9hcnJheSgkdHlwZSwgJHR5cGVzX3dtZWRpYSkpCgkJCXsKCQkJCXJldHVybiAnd21lZGlhJzsKCQkJfQoJCQllbHNlaWYgKGluX2FycmF5KCR0eXBlLCAkdHlwZXNfbXAzKSkKCQkJewoJCQkJcmV0dXJuICdtcDMnOwoJCQl9CgoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCXJldHVybiAkdHlwZTsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Exception.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBHZW5lcmFsIFNpbXBsZVBpZSBleGNlcHRpb24gY2xhc3MKICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqLwpjbGFzcyBTaW1wbGVQaWVfRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCnsKfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/File.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBVc2VkIGZvciBmZXRjaGluZyByZW1vdGUgZmlsZXMgYW5kIHJlYWRpbmcgbG9jYWwgZmlsZXMKICoKICogU3VwcG9ydHMgSFRUUCAxLjAgdmlhIGNVUkwgb3IgZnNvY2tvcGVuLCB3aXRoIHNwb3R0eSBIVFRQIDEuMSBzdXBwb3J0CiAqCiAqIFRoaXMgY2xhc3MgY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCB7QHNlZSBTaW1wbGVQaWU6OnNldF9maWxlX2NsYXNzKCl9CiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKiBAc3VicGFja2FnZSBIVFRQCiAqIEB0b2RvIE1vdmUgdG8gcHJvcGVybHkgc3VwcG9ydGluZyBSRkMyNjE2IChIVFRQLzEuMSkKICovCmNsYXNzIFNpbXBsZVBpZV9GaWxlCnsKCXZhciAkdXJsOwoJdmFyICR1c2VyYWdlbnQ7Cgl2YXIgJHN1Y2Nlc3MgPSB0cnVlOwoJdmFyICRoZWFkZXJzID0gYXJyYXkoKTsKCXZhciAkYm9keTsKCXZhciAkc3RhdHVzX2NvZGU7Cgl2YXIgJHJlZGlyZWN0cyA9IDA7Cgl2YXIgJGVycm9yOwoJdmFyICRtZXRob2QgPSBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfTk9ORTsKCXZhciAkcGVybWFuZW50X3VybDsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHVybCwgJHRpbWVvdXQgPSAxMCwgJHJlZGlyZWN0cyA9IDUsICRoZWFkZXJzID0gbnVsbCwgJHVzZXJhZ2VudCA9IG51bGwsICRmb3JjZV9mc29ja29wZW4gPSBmYWxzZSwgJGN1cmxfb3B0aW9ucyA9IGFycmF5KCkpCgl7CgkJaWYgKGNsYXNzX2V4aXN0cygnaWRuYV9jb252ZXJ0JykpCgkJewoJCQkkaWRuID0gbmV3IGlkbmFfY29udmVydCgpOwoJCQkkcGFyc2VkID0gU2ltcGxlUGllX01pc2M6OnBhcnNlX3VybCgkdXJsKTsKCQkJJHVybCA9IFNpbXBsZVBpZV9NaXNjOjpjb21wcmVzc19wYXJzZV91cmwoJHBhcnNlZFsnc2NoZW1lJ10sICRpZG4tPmVuY29kZSgkcGFyc2VkWydhdXRob3JpdHknXSksICRwYXJzZWRbJ3BhdGgnXSwgJHBhcnNlZFsncXVlcnknXSwgTlVMTCk7CgkJfQoJCSR0aGlzLT51cmwgPSAkdXJsOwoJCSR0aGlzLT5wZXJtYW5lbnRfdXJsID0gJHVybDsKCQkkdGhpcy0+dXNlcmFnZW50ID0gJHVzZXJhZ2VudDsKCQlpZiAocHJlZ19tYXRjaCgnL15odHRwKHMpPzpcL1wvL2knLCAkdXJsKSkKCQl7CgkJCWlmICgkdXNlcmFnZW50ID09PSBudWxsKQoJCQl7CgkJCQkkdXNlcmFnZW50ID0gaW5pX2dldCgndXNlcl9hZ2VudCcpOwoJCQkJJHRoaXMtPnVzZXJhZ2VudCA9ICR1c2VyYWdlbnQ7CgkJCX0KCQkJaWYgKCFpc19hcnJheSgkaGVhZGVycykpCgkJCXsKCQkJCSRoZWFkZXJzID0gYXJyYXkoKTsKCQkJfQoJCQlpZiAoISRmb3JjZV9mc29ja29wZW4gJiYgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2V4ZWMnKSkKCQkJewoJCQkJJHRoaXMtPm1ldGhvZCA9IFNJTVBMRVBJRV9GSUxFX1NPVVJDRV9SRU1PVEUgfCBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfQ1VSTDsKCQkJCSRmcCA9IGN1cmxfaW5pdCgpOwoJCQkJJGhlYWRlcnMyID0gYXJyYXkoKTsKCQkJCWZvcmVhY2ggKCRoZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKQoJCQkJewoJCQkJCSRoZWFkZXJzMltdID0gIiRrZXk6ICR2YWx1ZSI7CgkJCQl9CgkJCQlpZiAodmVyc2lvbl9jb21wYXJlKFNpbXBsZVBpZV9NaXNjOjpnZXRfY3VybF92ZXJzaW9uKCksICc3LjEwLjUnLCAnPj0nKSkKCQkJCXsKCQkJCQljdXJsX3NldG9wdCgkZnAsIENVUkxPUFRfRU5DT0RJTkcsICcnKTsKCQkJCX0KCQkJCWN1cmxfc2V0b3B0KCRmcCwgQ1VSTE9QVF9VUkwsICR1cmwpOwoJCQkJY3VybF9zZXRvcHQoJGZwLCBDVVJMT1BUX0hFQURFUiwgMSk7CgkJCQljdXJsX3NldG9wdCgkZnAsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOwoJCQkJY3VybF9zZXRvcHQoJGZwLCBDVVJMT1BUX0ZBSUxPTkVSUk9SLCAxKTsKCQkJCWN1cmxfc2V0b3B0KCRmcCwgQ1VSTE9QVF9USU1FT1VULCAkdGltZW91dCk7CgkJCQljdXJsX3NldG9wdCgkZnAsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsICR0aW1lb3V0KTsKCQkJCWN1cmxfc2V0b3B0KCRmcCwgQ1VSTE9QVF9SRUZFUkVSLCAkdXJsKTsKCQkJCWN1cmxfc2V0b3B0KCRmcCwgQ1VSTE9QVF9VU0VSQUdFTlQsICR1c2VyYWdlbnQpOwoJCQkJY3VybF9zZXRvcHQoJGZwLCBDVVJMT1BUX0hUVFBIRUFERVIsICRoZWFkZXJzMik7CgkJCQlmb3JlYWNoICgkY3VybF9vcHRpb25zIGFzICRjdXJsX3BhcmFtID0+ICRjdXJsX3ZhbHVlKSB7CgkJCQkJY3VybF9zZXRvcHQoJGZwLCAkY3VybF9wYXJhbSwgJGN1cmxfdmFsdWUpOwoJCQkJfQoKCQkJCSR0aGlzLT5oZWFkZXJzID0gY3VybF9leGVjKCRmcCk7CgkJCQlpZiAoY3VybF9lcnJubygkZnApID09PSAyMyB8fCBjdXJsX2Vycm5vKCRmcCkgPT09IDYxKQoJCQkJewoJCQkJCWN1cmxfc2V0b3B0KCRmcCwgQ1VSTE9QVF9FTkNPRElORywgJ25vbmUnKTsKCQkJCQkkdGhpcy0+aGVhZGVycyA9IGN1cmxfZXhlYygkZnApOwoJCQkJfQoJCQkJaWYgKGN1cmxfZXJybm8oJGZwKSkKCQkJCXsKCQkJCQkkdGhpcy0+ZXJyb3IgPSAnY1VSTCBlcnJvciAnIC4gY3VybF9lcnJubygkZnApIC4gJzogJyAuIGN1cmxfZXJyb3IoJGZwKTsKCQkJCQkkdGhpcy0+c3VjY2VzcyA9IGZhbHNlOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCS8vIFVzZSB0aGUgdXBkYXRlZCB1cmwgcHJvdmlkZWQgYnkgY3VybF9nZXRpbmZvIGFmdGVyIGFueSByZWRpcmVjdHMuCgkJCQkJaWYgKCRpbmZvID0gY3VybF9nZXRpbmZvKCRmcCkpIHsKCQkJCQkJJHRoaXMtPnVybCA9ICRpbmZvWyd1cmwnXTsKCQkJCQl9CgkJCQkJY3VybF9jbG9zZSgkZnApOwoJCQkJCSR0aGlzLT5oZWFkZXJzID0gU2ltcGxlUGllX0hUVFBfUGFyc2VyOjpwcmVwYXJlSGVhZGVycygkdGhpcy0+aGVhZGVycywgJGluZm9bJ3JlZGlyZWN0X2NvdW50J10gKyAxKTsKCQkJCQkkcGFyc2VyID0gbmV3IFNpbXBsZVBpZV9IVFRQX1BhcnNlcigkdGhpcy0+aGVhZGVycyk7CgkJCQkJaWYgKCRwYXJzZXItPnBhcnNlKCkpCgkJCQkJewoJCQkJCQkkdGhpcy0+aGVhZGVycyA9ICRwYXJzZXItPmhlYWRlcnM7CgkJCQkJCSR0aGlzLT5ib2R5ID0gdHJpbSgkcGFyc2VyLT5ib2R5KTsKCQkJCQkJJHRoaXMtPnN0YXR1c19jb2RlID0gJHBhcnNlci0+c3RhdHVzX2NvZGU7CgkJCQkJCWlmICgoaW5fYXJyYXkoJHRoaXMtPnN0YXR1c19jb2RlLCBhcnJheSgzMDAsIDMwMSwgMzAyLCAzMDMsIDMwNykpIHx8ICR0aGlzLT5zdGF0dXNfY29kZSA+IDMwNyAmJiAkdGhpcy0+c3RhdHVzX2NvZGUgPCA0MDApICYmIGlzc2V0KCR0aGlzLT5oZWFkZXJzWydsb2NhdGlvbiddKSAmJiAkdGhpcy0+cmVkaXJlY3RzIDwgJHJlZGlyZWN0cykKCQkJCQkJewoJCQkJCQkJJHRoaXMtPnJlZGlyZWN0cysrOwoJCQkJCQkJJGxvY2F0aW9uID0gU2ltcGxlUGllX01pc2M6OmFic29sdXRpemVfdXJsKCR0aGlzLT5oZWFkZXJzWydsb2NhdGlvbiddLCAkdXJsKTsKCQkJCQkJCSRwcmV2aW91c1N0YXR1c0NvZGUgPSAkdGhpcy0+c3RhdHVzX2NvZGU7CgkJCQkJCQkkdGhpcy0+X19jb25zdHJ1Y3QoJGxvY2F0aW9uLCAkdGltZW91dCwgJHJlZGlyZWN0cywgJGhlYWRlcnMsICR1c2VyYWdlbnQsICRmb3JjZV9mc29ja29wZW4sICRjdXJsX29wdGlvbnMpOwoJCQkJCQkJJHRoaXMtPnBlcm1hbmVudF91cmwgPSAoJHByZXZpb3VzU3RhdHVzQ29kZSA9PSAzMDEpID8gJGxvY2F0aW9uIDogJHVybDsKCQkJCQkJCXJldHVybjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5tZXRob2QgPSBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfUkVNT1RFIHwgU0lNUExFUElFX0ZJTEVfU09VUkNFX0ZTT0NLT1BFTjsKCQkJCSR1cmxfcGFydHMgPSBwYXJzZV91cmwoJHVybCk7CgkJCQkkc29ja2V0X2hvc3QgPSAkdXJsX3BhcnRzWydob3N0J107CgkJCQlpZiAoaXNzZXQoJHVybF9wYXJ0c1snc2NoZW1lJ10pICYmIHN0cnRvbG93ZXIoJHVybF9wYXJ0c1snc2NoZW1lJ10pID09PSAnaHR0cHMnKQoJCQkJewoJCQkJCSRzb2NrZXRfaG9zdCA9ICJzc2w6Ly8kdXJsX3BhcnRzW2hvc3RdIjsKCQkJCQkkdXJsX3BhcnRzWydwb3J0J10gPSA0NDM7CgkJCQl9CgkJCQlpZiAoIWlzc2V0KCR1cmxfcGFydHNbJ3BvcnQnXSkpCgkJCQl7CgkJCQkJJHVybF9wYXJ0c1sncG9ydCddID0gODA7CgkJCQl9CgkJCQkkZnAgPSBAZnNvY2tvcGVuKCRzb2NrZXRfaG9zdCwgJHVybF9wYXJ0c1sncG9ydCddLCAkZXJybm8sICRlcnJzdHIsICR0aW1lb3V0KTsKCQkJCWlmICghJGZwKQoJCQkJewoJCQkJCSR0aGlzLT5lcnJvciA9ICdmc29ja29wZW4gZXJyb3I6ICcgLiAkZXJyc3RyOwoJCQkJCSR0aGlzLT5zdWNjZXNzID0gZmFsc2U7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJc3RyZWFtX3NldF90aW1lb3V0KCRmcCwgJHRpbWVvdXQpOwoJCQkJCWlmIChpc3NldCgkdXJsX3BhcnRzWydwYXRoJ10pKQoJCQkJCXsKCQkJCQkJaWYgKGlzc2V0KCR1cmxfcGFydHNbJ3F1ZXJ5J10pKQoJCQkJCQl7CgkJCQkJCQkkZ2V0ID0gIiR1cmxfcGFydHNbcGF0aF0/JHVybF9wYXJ0c1txdWVyeV0iOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJGdldCA9ICR1cmxfcGFydHNbJ3BhdGgnXTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkZ2V0ID0gJy8nOwoJCQkJCX0KCQkJCQkkb3V0ID0gIkdFVCAkZ2V0IEhUVFAvMS4xXHJcbiI7CgkJCQkJJG91dCAuPSAiSG9zdDogJHVybF9wYXJ0c1tob3N0XVxyXG4iOwoJCQkJCSRvdXQgLj0gIlVzZXItQWdlbnQ6ICR1c2VyYWdlbnRcclxuIjsKCQkJCQlpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnemxpYicpKQoJCQkJCXsKCQkJCQkJJG91dCAuPSAiQWNjZXB0LUVuY29kaW5nOiB4LWd6aXAsZ3ppcCxkZWZsYXRlXHJcbiI7CgkJCQkJfQoKCQkJCQlpZiAoaXNzZXQoJHVybF9wYXJ0c1sndXNlciddKSAmJiBpc3NldCgkdXJsX3BhcnRzWydwYXNzJ10pKQoJCQkJCXsKCQkJCQkJJG91dCAuPSAiQXV0aG9yaXphdGlvbjogQmFzaWMgIiAuIGJhc2U2NF9lbmNvZGUoIiR1cmxfcGFydHNbdXNlcl06JHVybF9wYXJ0c1twYXNzXSIpIC4gIlxyXG4iOwoJCQkJCX0KCQkJCQlmb3JlYWNoICgkaGVhZGVycyBhcyAka2V5ID0+ICR2YWx1ZSkKCQkJCQl7CgkJCQkJCSRvdXQgLj0gIiRrZXk6ICR2YWx1ZVxyXG4iOwoJCQkJCX0KCQkJCQkkb3V0IC49ICJDb25uZWN0aW9uOiBDbG9zZVxyXG5cclxuIjsKCQkJCQlmd3JpdGUoJGZwLCAkb3V0KTsKCgkJCQkJJGluZm8gPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkZnApOwoKCQkJCQkkdGhpcy0+aGVhZGVycyA9ICcnOwoJCQkJCXdoaWxlICghJGluZm9bJ2VvZiddICYmICEkaW5mb1sndGltZWRfb3V0J10pCgkJCQkJewoJCQkJCQkkdGhpcy0+aGVhZGVycyAuPSBmcmVhZCgkZnAsIDExNjApOwoJCQkJCQkkaW5mbyA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRmcCk7CgkJCQkJfQoJCQkJCWlmICghJGluZm9bJ3RpbWVkX291dCddKQoJCQkJCXsKCQkJCQkJJHBhcnNlciA9IG5ldyBTaW1wbGVQaWVfSFRUUF9QYXJzZXIoJHRoaXMtPmhlYWRlcnMpOwoJCQkJCQlpZiAoJHBhcnNlci0+cGFyc2UoKSkKCQkJCQkJewoJCQkJCQkJJHRoaXMtPmhlYWRlcnMgPSAkcGFyc2VyLT5oZWFkZXJzOwoJCQkJCQkJJHRoaXMtPmJvZHkgPSAkcGFyc2VyLT5ib2R5OwoJCQkJCQkJJHRoaXMtPnN0YXR1c19jb2RlID0gJHBhcnNlci0+c3RhdHVzX2NvZGU7CgkJCQkJCQlpZiAoKGluX2FycmF5KCR0aGlzLT5zdGF0dXNfY29kZSwgYXJyYXkoMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDcpKSB8fCAkdGhpcy0+c3RhdHVzX2NvZGUgPiAzMDcgJiYgJHRoaXMtPnN0YXR1c19jb2RlIDwgNDAwKSAmJiBpc3NldCgkdGhpcy0+aGVhZGVyc1snbG9jYXRpb24nXSkgJiYgJHRoaXMtPnJlZGlyZWN0cyA8ICRyZWRpcmVjdHMpCgkJCQkJCQl7CgkJCQkJCQkJJHRoaXMtPnJlZGlyZWN0cysrOwoJCQkJCQkJCSRsb2NhdGlvbiA9IFNpbXBsZVBpZV9NaXNjOjphYnNvbHV0aXplX3VybCgkdGhpcy0+aGVhZGVyc1snbG9jYXRpb24nXSwgJHVybCk7CgkJCQkJCQkJJHByZXZpb3VzU3RhdHVzQ29kZSA9ICR0aGlzLT5zdGF0dXNfY29kZTsKCQkJCQkJCQkkdGhpcy0+X19jb25zdHJ1Y3QoJGxvY2F0aW9uLCAkdGltZW91dCwgJHJlZGlyZWN0cywgJGhlYWRlcnMsICR1c2VyYWdlbnQsICRmb3JjZV9mc29ja29wZW4sICRjdXJsX29wdGlvbnMpOwoJCQkJCQkJCSR0aGlzLT5wZXJtYW5lbnRfdXJsID0gKCRwcmV2aW91c1N0YXR1c0NvZGUgPT0gMzAxKSA/ICRsb2NhdGlvbiA6ICR1cmw7CgkJCQkJCQkJcmV0dXJuOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pKQoJCQkJCQkJewoJCQkJCQkJCS8vIEhleSwgd2UgYWN0IGR1bWIgZWxzZXdoZXJlLCBzbyBsZXQncyBkbyB0aGF0IGhlcmUgdG9vCgkJCQkJCQkJc3dpdGNoIChzdHJ0b2xvd2VyKHRyaW0oJHRoaXMtPmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSwgIlx4MDlceDBBXHgwRFx4MjAiKSkpCgkJCQkJCQkJewoJCQkJCQkJCQljYXNlICdnemlwJzoKCQkJCQkJCQkJY2FzZSAneC1nemlwJzoKCQkJCQkJCQkJCSRkZWNvZGVyID0gbmV3IFNpbXBsZVBpZV9nemRlY29kZSgkdGhpcy0+Ym9keSk7CgkJCQkJCQkJCQlpZiAoISRkZWNvZGVyLT5wYXJzZSgpKQoJCQkJCQkJCQkJewoJCQkJCQkJCQkJCSR0aGlzLT5lcnJvciA9ICdVbmFibGUgdG8gZGVjb2RlIEhUVFAgImd6aXAiIHN0cmVhbSc7CgkJCQkJCQkJCQkJJHRoaXMtPnN1Y2Nlc3MgPSBmYWxzZTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkdGhpcy0+Ym9keSA9IHRyaW0oJGRlY29kZXItPmRhdGEpOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJYnJlYWs7CgoJCQkJCQkJCQljYXNlICdkZWZsYXRlJzoKCQkJCQkJCQkJCWlmICgoJGRlY29tcHJlc3NlZCA9IGd6aW5mbGF0ZSgkdGhpcy0+Ym9keSkpICE9PSBmYWxzZSkKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkdGhpcy0+Ym9keSA9ICRkZWNvbXByZXNzZWQ7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQllbHNlIGlmICgoJGRlY29tcHJlc3NlZCA9IGd6dW5jb21wcmVzcygkdGhpcy0+Ym9keSkpICE9PSBmYWxzZSkKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkdGhpcy0+Ym9keSA9ICRkZWNvbXByZXNzZWQ7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQllbHNlIGlmIChmdW5jdGlvbl9leGlzdHMoJ2d6ZGVjb2RlJykgJiYgKCRkZWNvbXByZXNzZWQgPSBnemRlY29kZSgkdGhpcy0+Ym9keSkpICE9PSBmYWxzZSkKCQkJCQkJCQkJCXsKCQkJCQkJCQkJCQkkdGhpcy0+Ym9keSA9ICRkZWNvbXByZXNzZWQ7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQllbHNlCgkJCQkJCQkJCQl7CgkJCQkJCQkJCQkJJHRoaXMtPmVycm9yID0gJ1VuYWJsZSB0byBkZWNvZGUgSFRUUCAiZGVmbGF0ZSIgc3RyZWFtJzsKCQkJCQkJCQkJCQkkdGhpcy0+c3VjY2VzcyA9IGZhbHNlOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJYnJlYWs7CgoJCQkJCQkJCQlkZWZhdWx0OgoJCQkJCQkJCQkJJHRoaXMtPmVycm9yID0gJ1Vua25vd24gY29udGVudCBjb2RpbmcnOwoJCQkJCQkJCQkJJHRoaXMtPnN1Y2Nlc3MgPSBmYWxzZTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHRoaXMtPmVycm9yID0gJ2Zzb2NrZXQgdGltZWQgb3V0JzsKCQkJCQkJJHRoaXMtPnN1Y2Nlc3MgPSBmYWxzZTsKCQkJCQl9CgkJCQkJZmNsb3NlKCRmcCk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPm1ldGhvZCA9IFNJTVBMRVBJRV9GSUxFX1NPVVJDRV9MT0NBTCB8IFNJTVBMRVBJRV9GSUxFX1NPVVJDRV9GSUxFX0dFVF9DT05URU5UUzsKCQkJaWYgKGVtcHR5KCR1cmwpIHx8ICEoJHRoaXMtPmJvZHkgPSB0cmltKGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpKSkpCgkJCXsKCQkJCSR0aGlzLT5lcnJvciA9ICdmaWxlX2dldF9jb250ZW50cyBjb3VsZCBub3QgcmVhZCB0aGUgZmlsZSc7CgkJCQkkdGhpcy0+c3VjY2VzcyA9IGZhbHNlOwoJCQl9CgkJfQoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/gzdecode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogRGVjb2RlICdnemlwJyBlbmNvZGVkIEhUVFAgZGF0YQogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgSFRUUAogKiBAbGluayBodHRwOi8vd3d3Lmd6aXAub3JnL2Zvcm1hdC50eHQKICovCmNsYXNzIFNpbXBsZVBpZV9nemRlY29kZQp7CgkvKioKCSAqIENvbXByZXNzZWQgZGF0YQoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ3pkZWNvZGU6OiRkYXRhCgkgKi8KCXZhciAkY29tcHJlc3NlZF9kYXRhOwoKCS8qKgoJICogU2l6ZSBvZiBjb21wcmVzc2VkIGRhdGEKCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgaW50CgkgKi8KCXZhciAkY29tcHJlc3NlZF9zaXplOwoKCS8qKgoJICogTWluaW11bSBzaXplIG9mIGEgdmFsaWQgZ3ppcCBzdHJpbmcKCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgaW50CgkgKi8KCXZhciAkbWluX2NvbXByZXNzZWRfc2l6ZSA9IDE4OwoKCS8qKgoJICogQ3VycmVudCBwb3NpdGlvbiBvZiBwb2ludGVyCgkgKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIGludAoJICovCgl2YXIgJHBvc2l0aW9uID0gMDsKCgkvKioKCSAqIEZsYWdzIChGTEcpCgkgKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIGludAoJICovCgl2YXIgJGZsYWdzOwoKCS8qKgoJICogVW5jb21wcmVzc2VkIGRhdGEKCSAqCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHNlZSBnemRlY29kZTo6JGNvbXByZXNzZWRfZGF0YQoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICRkYXRhOwoKCS8qKgoJICogTW9kaWZpZWQgdGltZQoJICoKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAdmFyIGludAoJICovCgl2YXIgJE1USU1FOwoKCS8qKgoJICogRXh0cmEgRmxhZ3MKCSAqCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHZhciBpbnQKCSAqLwoJdmFyICRYRkw7CgoJLyoqCgkgKiBPcGVyYXRpbmcgU3lzdGVtCgkgKgoJICogQGFjY2VzcyBwdWJsaWMKCSAqIEB2YXIgaW50CgkgKi8KCXZhciAkT1M7CgoJLyoqCgkgKiBTdWJmaWVsZCBJRCAxCgkgKgoJICogQGFjY2VzcyBwdWJsaWMKCSAqIEBzZWUgZ3pkZWNvZGU6OiRleHRyYV9maWVsZAoJICogQHNlZSBnemRlY29kZTo6JFNJMgoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICRTSTE7CgoJLyoqCgkgKiBTdWJmaWVsZCBJRCAyCgkgKgoJICogQGFjY2VzcyBwdWJsaWMKCSAqIEBzZWUgZ3pkZWNvZGU6OiRleHRyYV9maWVsZAoJICogQHNlZSBnemRlY29kZTo6JFNJMQoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICRTSTI7CgoJLyoqCgkgKiBFeHRyYSBmaWVsZCBjb250ZW50CgkgKgoJICogQGFjY2VzcyBwdWJsaWMKCSAqIEBzZWUgZ3pkZWNvZGU6OiRTSTEKCSAqIEBzZWUgZ3pkZWNvZGU6OiRTSTIKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXZhciAkZXh0cmFfZmllbGQ7CgoJLyoqCgkgKiBPcmlnaW5hbCBmaWxlbmFtZQoJICoKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGZpbGVuYW1lOwoKCS8qKgoJICogSHVtYW4gcmVhZGFibGUgY29tbWVudAoJICoKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGNvbW1lbnQ7CgoJLyoqCgkgKiBEb24ndCBhbGxvdyBhbnl0aGluZyB0byBiZSBzZXQKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lCgkgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlKQoJewoJCXRyaWdnZXJfZXJyb3IoIkNhbm5vdCB3cml0ZSBwcm9wZXJ0eSAkbmFtZSIsIEVfVVNFUl9FUlJPUik7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGNvbXByZXNzZWQgc3RyaW5nIGFuZCByZWxhdGVkIHByb3BlcnRpZXMKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRkYXRhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGF0YSkKCXsKCQkkdGhpcy0+Y29tcHJlc3NlZF9kYXRhID0gJGRhdGE7CgkJJHRoaXMtPmNvbXByZXNzZWRfc2l6ZSA9IHN0cmxlbigkZGF0YSk7Cgl9CgoJLyoqCgkgKiBEZWNvZGUgdGhlIEdaSVAgc3RyZWFtCgkgKgoJICogQHJldHVybiBib29sIFN1Y2Nlc3NmdWxuZXNzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwYXJzZSgpCgl7CgkJaWYgKCR0aGlzLT5jb21wcmVzc2VkX3NpemUgPj0gJHRoaXMtPm1pbl9jb21wcmVzc2VkX3NpemUpCgkJewoJCQkvLyBDaGVjayBJRDEsIElEMiwgYW5kIENNCgkJCWlmIChzdWJzdHIoJHRoaXMtPmNvbXByZXNzZWRfZGF0YSwgMCwgMykgIT09ICJceDFGXHg4Qlx4MDgiKQoJCQl7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCgkJCS8vIEdldCB0aGUgRkxHIChGTGFHcykKCQkJJHRoaXMtPmZsYWdzID0gb3JkKCR0aGlzLT5jb21wcmVzc2VkX2RhdGFbM10pOwoKCQkJLy8gRkxHIGJpdHMgYWJvdmUgKDEgPDwgNCkgYXJlIHJlc2VydmVkCgkJCWlmICgkdGhpcy0+ZmxhZ3MgPiAweDFGKQoJCQl7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCgkJCS8vIEFkdmFuY2UgdGhlIHBvaW50ZXIgYWZ0ZXIgdGhlIGFib3ZlCgkJCSR0aGlzLT5wb3NpdGlvbiArPSA0OwoKCQkJLy8gTVRJTUUKCQkJJG10aW1lID0gc3Vic3RyKCR0aGlzLT5jb21wcmVzc2VkX2RhdGEsICR0aGlzLT5wb3NpdGlvbiwgNCk7CgkJCS8vIFJldmVyc2UgdGhlIHN0cmluZyBpZiB3ZSdyZSBvbiBhIGJpZy1lbmRpYW4gYXJjaCBiZWNhdXNlIGwgaXMgdGhlIG9ubHkgc2lnbmVkIGxvbmcgYW5kIGlzIG1hY2hpbmUgZW5kaWFubmVzcwoJCQlpZiAoY3VycmVudCh1bnBhY2soJ1MnLCAiXHgwMFx4MDEiKSkgPT09IDEpCgkJCXsKCQkJCSRtdGltZSA9IHN0cnJldigkbXRpbWUpOwoJCQl9CgkJCSR0aGlzLT5NVElNRSA9IGN1cnJlbnQodW5wYWNrKCdsJywgJG10aW1lKSk7CgkJCSR0aGlzLT5wb3NpdGlvbiArPSA0OwoKCQkJLy8gR2V0IHRoZSBYRkwgKGVYdHJhIEZMYWdzKQoJCQkkdGhpcy0+WEZMID0gb3JkKCR0aGlzLT5jb21wcmVzc2VkX2RhdGFbJHRoaXMtPnBvc2l0aW9uKytdKTsKCgkJCS8vIEdldCB0aGUgT1MgKE9wZXJhdGluZyBTeXN0ZW0pCgkJCSR0aGlzLT5PUyA9IG9yZCgkdGhpcy0+Y29tcHJlc3NlZF9kYXRhWyR0aGlzLT5wb3NpdGlvbisrXSk7CgoJCQkvLyBQYXJzZSB0aGUgRkVYVFJBCgkJCWlmICgkdGhpcy0+ZmxhZ3MgJiA0KQoJCQl7CgkJCQkvLyBSZWFkIHN1YmZpZWxkIElEcwoJCQkJJHRoaXMtPlNJMSA9ICR0aGlzLT5jb21wcmVzc2VkX2RhdGFbJHRoaXMtPnBvc2l0aW9uKytdOwoJCQkJJHRoaXMtPlNJMiA9ICR0aGlzLT5jb21wcmVzc2VkX2RhdGFbJHRoaXMtPnBvc2l0aW9uKytdOwoKCQkJCS8vIFNJMiBzZXQgdG8gemVybyBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoJCQkJaWYgKCR0aGlzLT5TSTIgPT09ICJceDAwIikKCQkJCXsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgoJCQkJLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGV4dHJhIGZpZWxkCgkJCQkkbGVuID0gY3VycmVudCh1bnBhY2soJ3YnLCBzdWJzdHIoJHRoaXMtPmNvbXByZXNzZWRfZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAyKSkpOwoJCQkJJHRoaXMtPnBvc2l0aW9uICs9IDI7CgoJCQkJLy8gQ2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIHN0aWxsIHZhbGlkCgkJCQkkdGhpcy0+bWluX2NvbXByZXNzZWRfc2l6ZSArPSAkbGVuICsgNDsKCQkJCWlmICgkdGhpcy0+Y29tcHJlc3NlZF9zaXplID49ICR0aGlzLT5taW5fY29tcHJlc3NlZF9zaXplKQoJCQkJewoJCQkJCS8vIFNldCB0aGUgZXh0cmEgZmllbGQgdG8gdGhlIGdpdmVuIGRhdGEKCQkJCQkkdGhpcy0+ZXh0cmFfZmllbGQgPSBzdWJzdHIoJHRoaXMtPmNvbXByZXNzZWRfZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAkbGVuKTsKCQkJCQkkdGhpcy0+cG9zaXRpb24gKz0gJGxlbjsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCS8vIFBhcnNlIHRoZSBGTkFNRQoJCQlpZiAoJHRoaXMtPmZsYWdzICYgOCkKCQkJewoJCQkJLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGZpbGVuYW1lCgkJCQkkbGVuID0gc3RyY3NwbigkdGhpcy0+Y29tcHJlc3NlZF9kYXRhLCAiXHgwMCIsICR0aGlzLT5wb3NpdGlvbik7CgoJCQkJLy8gQ2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIHN0aWxsIHZhbGlkCgkJCQkkdGhpcy0+bWluX2NvbXByZXNzZWRfc2l6ZSArPSAkbGVuICsgMTsKCQkJCWlmICgkdGhpcy0+Y29tcHJlc3NlZF9zaXplID49ICR0aGlzLT5taW5fY29tcHJlc3NlZF9zaXplKQoJCQkJewoJCQkJCS8vIFNldCB0aGUgb3JpZ2luYWwgZmlsZW5hbWUgdG8gdGhlIGdpdmVuIHN0cmluZwoJCQkJCSR0aGlzLT5maWxlbmFtZSA9IHN1YnN0cigkdGhpcy0+Y29tcHJlc3NlZF9kYXRhLCAkdGhpcy0+cG9zaXRpb24sICRsZW4pOwoJCQkJCSR0aGlzLT5wb3NpdGlvbiArPSAkbGVuICsgMTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCS8vIFBhcnNlIHRoZSBGQ09NTUVOVAoJCQlpZiAoJHRoaXMtPmZsYWdzICYgMTYpCgkJCXsKCQkJCS8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tZW50CgkJCQkkbGVuID0gc3RyY3NwbigkdGhpcy0+Y29tcHJlc3NlZF9kYXRhLCAiXHgwMCIsICR0aGlzLT5wb3NpdGlvbik7CgoJCQkJLy8gQ2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlzIHN0aWxsIHZhbGlkCgkJCQkkdGhpcy0+bWluX2NvbXByZXNzZWRfc2l6ZSArPSAkbGVuICsgMTsKCQkJCWlmICgkdGhpcy0+Y29tcHJlc3NlZF9zaXplID49ICR0aGlzLT5taW5fY29tcHJlc3NlZF9zaXplKQoJCQkJewoJCQkJCS8vIFNldCB0aGUgb3JpZ2luYWwgY29tbWVudCB0byB0aGUgZ2l2ZW4gc3RyaW5nCgkJCQkJJHRoaXMtPmNvbW1lbnQgPSBzdWJzdHIoJHRoaXMtPmNvbXByZXNzZWRfZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAkbGVuKTsKCQkJCQkkdGhpcy0+cG9zaXRpb24gKz0gJGxlbiArIDE7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQl9CgoJCQkvLyBQYXJzZSB0aGUgRkhDUkMKCQkJaWYgKCR0aGlzLT5mbGFncyAmIDIpCgkJCXsKCQkJCS8vIENoZWNrIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBpcyBzdGlsbCB2YWxpZAoJCQkJJHRoaXMtPm1pbl9jb21wcmVzc2VkX3NpemUgKz0gJGxlbiArIDI7CgkJCQlpZiAoJHRoaXMtPmNvbXByZXNzZWRfc2l6ZSA+PSAkdGhpcy0+bWluX2NvbXByZXNzZWRfc2l6ZSkKCQkJCXsKCQkJCQkvLyBSZWFkIHRoZSBDUkMKCQkJCQkkY3JjID0gY3VycmVudCh1bnBhY2soJ3YnLCBzdWJzdHIoJHRoaXMtPmNvbXByZXNzZWRfZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAyKSkpOwoKCQkJCQkvLyBDaGVjayB0aGUgQ1JDIG1hdGNoZXMKCQkJCQlpZiAoKGNyYzMyKHN1YnN0cigkdGhpcy0+Y29tcHJlc3NlZF9kYXRhLCAwLCAkdGhpcy0+cG9zaXRpb24pKSAmIDB4RkZGRikgPT09ICRjcmMpCgkJCQkJewoJCQkJCQkkdGhpcy0+cG9zaXRpb24gKz0gMjsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCS8vIERlY29tcHJlc3MgdGhlIGFjdHVhbCBkYXRhCgkJCWlmICgoJHRoaXMtPmRhdGEgPSBnemluZmxhdGUoc3Vic3RyKCR0aGlzLT5jb21wcmVzc2VkX2RhdGEsICR0aGlzLT5wb3NpdGlvbiwgLTgpKSkgPT09IGZhbHNlKQoJCQl7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCgkJCSR0aGlzLT5wb3NpdGlvbiA9ICR0aGlzLT5jb21wcmVzc2VkX3NpemUgLSA4OwoKCQkJLy8gQ2hlY2sgQ1JDIG9mIGRhdGEKCQkJJGNyYyA9IGN1cnJlbnQodW5wYWNrKCdWJywgc3Vic3RyKCR0aGlzLT5jb21wcmVzc2VkX2RhdGEsICR0aGlzLT5wb3NpdGlvbiwgNCkpKTsKCQkJJHRoaXMtPnBvc2l0aW9uICs9IDQ7CgkJCS8qaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ2hhc2gnKSAmJiBzcHJpbnRmKCcldScsIGN1cnJlbnQodW5wYWNrKCdWJywgaGFzaCgnY3JjMzJiJywgJHRoaXMtPmRhdGEpKSkpICE9PSBzcHJpbnRmKCcldScsICRjcmMpKQoJCQl7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0qLwoKCQkJLy8gQ2hlY2sgSVNJWkUgb2YgZGF0YQoJCQkkaXNpemUgPSBjdXJyZW50KHVucGFjaygnVicsIHN1YnN0cigkdGhpcy0+Y29tcHJlc3NlZF9kYXRhLCAkdGhpcy0+cG9zaXRpb24sIDQpKSk7CgkJCSR0aGlzLT5wb3NpdGlvbiArPSA0OwoJCQlpZiAoc3ByaW50ZignJXUnLCBzdHJsZW4oJHRoaXMtPmRhdGEpICYgMHhGRkZGRkZGRikgIT09IHNwcmludGYoJyV1JywgJGlzaXplKSkKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQkvLyBXb3csIGFnYWluc3QgYWxsIG9kZHMsIHdlJ3ZlIGFjdHVhbGx5IGdvdCBhIHZhbGlkIGd6aXAgc3RyaW5nCgkJCXJldHVybiB0cnVlOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/HTTP/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/HTTP/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogSFRUUCBSZXNwb25zZSBQYXJzZXIKICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIEhUVFAKICovCmNsYXNzIFNpbXBsZVBpZV9IVFRQX1BhcnNlcgp7CgkvKioKCSAqIEhUVFAgVmVyc2lvbgoJICoKCSAqIEB2YXIgZmxvYXQKCSAqLwoJcHVibGljICRodHRwX3ZlcnNpb24gPSAwLjA7CgoJLyoqCgkgKiBTdGF0dXMgY29kZQoJICoKCSAqIEB2YXIgaW50CgkgKi8KCXB1YmxpYyAkc3RhdHVzX2NvZGUgPSAwOwoKCS8qKgoJICogUmVhc29uIHBocmFzZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXB1YmxpYyAkcmVhc29uID0gJyc7CgoJLyoqCgkgKiBLZXkvdmFsdWUgcGFpcnMgb2YgdGhlIGhlYWRlcnMKCSAqCgkgKiBAdmFyIGFycmF5CgkgKi8KCXB1YmxpYyAkaGVhZGVycyA9IGFycmF5KCk7CgoJLyoqCgkgKiBCb2R5IG9mIHRoZSByZXNwb25zZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXB1YmxpYyAkYm9keSA9ICcnOwoKCS8qKgoJICogQ3VycmVudCBzdGF0ZSBvZiB0aGUgc3RhdGUgbWFjaGluZQoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXByb3RlY3RlZCAkc3RhdGUgPSAnaHR0cF92ZXJzaW9uJzsKCgkvKioKCSAqIElucHV0IGRhdGEKCSAqCgkgKiBAdmFyIHN0cmluZwoJICovCglwcm90ZWN0ZWQgJGRhdGEgPSAnJzsKCgkvKioKCSAqIElucHV0IGRhdGEgbGVuZ3RoICh0byBhdm9pZCBjYWxsaW5nIHN0cmxlbigpIGV2ZXJ5dGltZSB0aGlzIGlzIG5lZWRlZCkKCSAqCgkgKiBAdmFyIGludAoJICovCglwcm90ZWN0ZWQgJGRhdGFfbGVuZ3RoID0gMDsKCgkvKioKCSAqIEN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHBvaW50ZXIKCSAqCgkgKiBAdmFyIGludAoJICovCglwcm90ZWN0ZWQgJHBvc2l0aW9uID0gMDsKCgkvKioKCSAqIE5hbWUgb2YgdGhlIGhlZGFlciBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRuYW1lID0gJyc7CgoJLyoqCgkgKiBWYWx1ZSBvZiB0aGUgaGVkYWVyIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKCSAqCgkgKiBAdmFyIHN0cmluZwoJICovCglwcm90ZWN0ZWQgJHZhbHVlID0gJyc7CgoJLyoqCgkgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGggdGhlIGlucHV0IGRhdGEKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRkYXRhIElucHV0IGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYXRhKQoJewoJCSR0aGlzLT5kYXRhID0gJGRhdGE7CgkJJHRoaXMtPmRhdGFfbGVuZ3RoID0gc3RybGVuKCR0aGlzLT5kYXRhKTsKCX0KCgkvKioKCSAqIFBhcnNlIHRoZSBpbnB1dCBkYXRhCgkgKgoJICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZQoJICovCglwdWJsaWMgZnVuY3Rpb24gcGFyc2UoKQoJewoJCXdoaWxlICgkdGhpcy0+c3RhdGUgJiYgJHRoaXMtPnN0YXRlICE9PSAnZW1pdCcgJiYgJHRoaXMtPmhhc19kYXRhKCkpCgkJewoJCQkkc3RhdGUgPSAkdGhpcy0+c3RhdGU7CgkJCSR0aGlzLT4kc3RhdGUoKTsKCQl9CgkJJHRoaXMtPmRhdGEgPSAnJzsKCQlpZiAoJHRoaXMtPnN0YXRlID09PSAnZW1pdCcgfHwgJHRoaXMtPnN0YXRlID09PSAnYm9keScpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgoJCSR0aGlzLT5odHRwX3ZlcnNpb24gPSAnJzsKCQkkdGhpcy0+c3RhdHVzX2NvZGUgPSAnJzsKCQkkdGhpcy0+cmVhc29uID0gJyc7CgkJJHRoaXMtPmhlYWRlcnMgPSBhcnJheSgpOwoJCSR0aGlzLT5ib2R5ID0gJyc7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBkYXRhIGJleW9uZCB0aGUgcG9pbnRlcgoJICoKCSAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZXJlIGlzIGZ1cnRoZXIgZGF0YSwgZmFsc2UgaWYgbm90CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBoYXNfZGF0YSgpCgl7CgkJcmV0dXJuIChib29sKSAoJHRoaXMtPnBvc2l0aW9uIDwgJHRoaXMtPmRhdGFfbGVuZ3RoKTsKCX0KCgkvKioKCSAqIFNlZSBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgTFdTCgkgKgoJICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIExXUywgZmFsc2UgaWYgbm90CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBpc19saW5lYXJfd2hpdGVzcGFjZSgpCgl7CgkJcmV0dXJuIChib29sKSAoJHRoaXMtPmRhdGFbJHRoaXMtPnBvc2l0aW9uXSA9PT0gIlx4MDkiCgkJCXx8ICR0aGlzLT5kYXRhWyR0aGlzLT5wb3NpdGlvbl0gPT09ICJceDIwIgoJCQl8fCAoJHRoaXMtPmRhdGFbJHRoaXMtPnBvc2l0aW9uXSA9PT0gIlx4MEEiCgkJCQkmJiBpc3NldCgkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb24gKyAxXSkKCQkJCSYmICgkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb24gKyAxXSA9PT0gIlx4MDkiIHx8ICR0aGlzLT5kYXRhWyR0aGlzLT5wb3NpdGlvbiArIDFdID09PSAiXHgyMCIpKSk7Cgl9CgoJLyoqCgkgKiBQYXJzZSB0aGUgSFRUUCB2ZXJzaW9uCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBodHRwX3ZlcnNpb24oKQoJewoJCWlmIChzdHJwb3MoJHRoaXMtPmRhdGEsICJceDBBIikgIT09IGZhbHNlICYmIHN0cnRvdXBwZXIoc3Vic3RyKCR0aGlzLT5kYXRhLCAwLCA1KSkgPT09ICdIVFRQLycpCgkJewoJCQkkbGVuID0gc3Ryc3BuKCR0aGlzLT5kYXRhLCAnMDEyMzQ1Njc4OS4nLCA1KTsKCQkJJHRoaXMtPmh0dHBfdmVyc2lvbiA9IHN1YnN0cigkdGhpcy0+ZGF0YSwgNSwgJGxlbik7CgkJCSR0aGlzLT5wb3NpdGlvbiArPSA1ICsgJGxlbjsKCQkJaWYgKHN1YnN0cl9jb3VudCgkdGhpcy0+aHR0cF92ZXJzaW9uLCAnLicpIDw9IDEpCgkJCXsKCQkJCSR0aGlzLT5odHRwX3ZlcnNpb24gPSAoZmxvYXQpICR0aGlzLT5odHRwX3ZlcnNpb247CgkJCQkkdGhpcy0+cG9zaXRpb24gKz0gc3Ryc3BuKCR0aGlzLT5kYXRhLCAiXHgwOVx4MjAiLCAkdGhpcy0+cG9zaXRpb24pOwoJCQkJJHRoaXMtPnN0YXRlID0gJ3N0YXR1cyc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQl9Cgl9CgoJLyoqCgkgKiBQYXJzZSB0aGUgc3RhdHVzIGNvZGUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHN0YXR1cygpCgl7CgkJaWYgKCRsZW4gPSBzdHJzcG4oJHRoaXMtPmRhdGEsICcwMTIzNDU2Nzg5JywgJHRoaXMtPnBvc2l0aW9uKSkKCQl7CgkJCSR0aGlzLT5zdGF0dXNfY29kZSA9IChpbnQpIHN1YnN0cigkdGhpcy0+ZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAkbGVuKTsKCQkJJHRoaXMtPnBvc2l0aW9uICs9ICRsZW47CgkJCSR0aGlzLT5zdGF0ZSA9ICdyZWFzb24nOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQl9Cgl9CgoJLyoqCgkgKiBQYXJzZSB0aGUgcmVhc29uIHBocmFzZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcmVhc29uKCkKCXsKCQkkbGVuID0gc3RyY3NwbigkdGhpcy0+ZGF0YSwgIlx4MEEiLCAkdGhpcy0+cG9zaXRpb24pOwoJCSR0aGlzLT5yZWFzb24gPSB0cmltKHN1YnN0cigkdGhpcy0+ZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAkbGVuKSwgIlx4MDlceDBEXHgyMCIpOwoJCSR0aGlzLT5wb3NpdGlvbiArPSAkbGVuICsgMTsKCQkkdGhpcy0+c3RhdGUgPSAnbmV3X2xpbmUnOwoJfQoKCS8qKgoJICogRGVhbCB3aXRoIGEgbmV3IGxpbmUsIHNoaWZ0aW5nIGRhdGEgYXJvdW5kIGFzIG5lZWRlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gbmV3X2xpbmUoKQoJewoJCSR0aGlzLT52YWx1ZSA9IHRyaW0oJHRoaXMtPnZhbHVlLCAiXHgwRFx4MjAiKTsKCQlpZiAoJHRoaXMtPm5hbWUgIT09ICcnICYmICR0aGlzLT52YWx1ZSAhPT0gJycpCgkJewoJCQkkdGhpcy0+bmFtZSA9IHN0cnRvbG93ZXIoJHRoaXMtPm5hbWUpOwoJCQkvLyBXZSBzaG91bGQgb25seSB1c2UgdGhlIGxhc3QgQ29udGVudC1UeXBlIGhlYWRlci4gYy5mLiBpc3N1ZSAjMQoJCQlpZiAoaXNzZXQoJHRoaXMtPmhlYWRlcnNbJHRoaXMtPm5hbWVdKSAmJiAkdGhpcy0+bmFtZSAhPT0gJ2NvbnRlbnQtdHlwZScpCgkJCXsKCQkJCSR0aGlzLT5oZWFkZXJzWyR0aGlzLT5uYW1lXSAuPSAnLCAnIC4gJHRoaXMtPnZhbHVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRoaXMtPmhlYWRlcnNbJHRoaXMtPm5hbWVdID0gJHRoaXMtPnZhbHVlOwoJCQl9CgkJfQoJCSR0aGlzLT5uYW1lID0gJyc7CgkJJHRoaXMtPnZhbHVlID0gJyc7CgkJaWYgKHN1YnN0cigkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb25dLCAwLCAyKSA9PT0gIlx4MERceDBBIikKCQl7CgkJCSR0aGlzLT5wb3NpdGlvbiArPSAyOwoJCQkkdGhpcy0+c3RhdGUgPSAnYm9keSc7CgkJfQoJCWVsc2VpZiAoJHRoaXMtPmRhdGFbJHRoaXMtPnBvc2l0aW9uXSA9PT0gIlx4MEEiKQoJCXsKCQkJJHRoaXMtPnBvc2l0aW9uKys7CgkJCSR0aGlzLT5zdGF0ZSA9ICdib2R5JzsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnN0YXRlID0gJ25hbWUnOwoJCX0KCX0KCgkvKioKCSAqIFBhcnNlIGEgaGVhZGVyIG5hbWUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIG5hbWUoKQoJewoJCSRsZW4gPSBzdHJjc3BuKCR0aGlzLT5kYXRhLCAiXHgwQToiLCAkdGhpcy0+cG9zaXRpb24pOwoJCWlmIChpc3NldCgkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb24gKyAkbGVuXSkpCgkJewoJCQlpZiAoJHRoaXMtPmRhdGFbJHRoaXMtPnBvc2l0aW9uICsgJGxlbl0gPT09ICJceDBBIikKCQkJewoJCQkJJHRoaXMtPnBvc2l0aW9uICs9ICRsZW47CgkJCQkkdGhpcy0+c3RhdGUgPSAnbmV3X2xpbmUnOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRoaXMtPm5hbWUgPSBzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbiwgJGxlbik7CgkJCQkkdGhpcy0+cG9zaXRpb24gKz0gJGxlbiArIDE7CgkJCQkkdGhpcy0+c3RhdGUgPSAndmFsdWUnOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5zdGF0ZSA9IGZhbHNlOwoJCX0KCX0KCgkvKioKCSAqIFBhcnNlIExXUywgcmVwbGFjaW5nIGNvbnNlY3V0aXZlIExXUyBjaGFyYWN0ZXJzIHdpdGggYSBzaW5nbGUgc3BhY2UKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxpbmVhcl93aGl0ZXNwYWNlKCkKCXsKCQlkbwoJCXsKCQkJaWYgKHN1YnN0cigkdGhpcy0+ZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAyKSA9PT0gIlx4MERceDBBIikKCQkJewoJCQkJJHRoaXMtPnBvc2l0aW9uICs9IDI7CgkJCX0KCQkJZWxzZWlmICgkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb25dID09PSAiXHgwQSIpCgkJCXsKCQkJCSR0aGlzLT5wb3NpdGlvbisrOwoJCQl9CgkJCSR0aGlzLT5wb3NpdGlvbiArPSBzdHJzcG4oJHRoaXMtPmRhdGEsICJceDA5XHgyMCIsICR0aGlzLT5wb3NpdGlvbik7CgkJfSB3aGlsZSAoJHRoaXMtPmhhc19kYXRhKCkgJiYgJHRoaXMtPmlzX2xpbmVhcl93aGl0ZXNwYWNlKCkpOwoJCSR0aGlzLT52YWx1ZSAuPSAiXHgyMCI7Cgl9CgoJLyoqCgkgKiBTZWUgd2hhdCBzdGF0ZSB0byBtb3ZlIHRvIHdoaWxlIHdpdGhpbiBub24tcXVvdGVkIGhlYWRlciB2YWx1ZXMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbHVlKCkKCXsKCQlpZiAoJHRoaXMtPmlzX2xpbmVhcl93aGl0ZXNwYWNlKCkpCgkJewoJCQkkdGhpcy0+bGluZWFyX3doaXRlc3BhY2UoKTsKCQl9CgkJZWxzZQoJCXsKCQkJc3dpdGNoICgkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb25dKQoJCQl7CgkJCQljYXNlICciJzoKCQkJCQkvLyBXb3JrYXJvdW5kIGZvciBFVGFnczogd2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBxdW90ZXMgYXMKCQkJCQkvLyBwYXJ0IG9mIHRoZSB0YWcuCgkJCQkJaWYgKHN0cnRvbG93ZXIoJHRoaXMtPm5hbWUpID09PSAnZXRhZycpCgkJCQkJewoJCQkJCQkkdGhpcy0+dmFsdWUgLj0gJyInOwoJCQkJCQkkdGhpcy0+cG9zaXRpb24rKzsKCQkJCQkJJHRoaXMtPnN0YXRlID0gJ3ZhbHVlX2NoYXInOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJJHRoaXMtPnBvc2l0aW9uKys7CgkJCQkJJHRoaXMtPnN0YXRlID0gJ3F1b3RlJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICJceDBBIjoKCQkJCQkkdGhpcy0+cG9zaXRpb24rKzsKCQkJCQkkdGhpcy0+c3RhdGUgPSAnbmV3X2xpbmUnOwoJCQkJCWJyZWFrOwoKCQkJCWRlZmF1bHQ6CgkJCQkJJHRoaXMtPnN0YXRlID0gJ3ZhbHVlX2NoYXInOwoJCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoKCS8qKgoJICogUGFyc2UgYSBoZWFkZXIgdmFsdWUgd2hpbGUgb3V0c2lkZSBxdW90ZXMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbHVlX2NoYXIoKQoJewoJCSRsZW4gPSBzdHJjc3BuKCR0aGlzLT5kYXRhLCAiXHgwOVx4MjBceDBBXCIiLCAkdGhpcy0+cG9zaXRpb24pOwoJCSR0aGlzLT52YWx1ZSAuPSBzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbiwgJGxlbik7CgkJJHRoaXMtPnBvc2l0aW9uICs9ICRsZW47CgkJJHRoaXMtPnN0YXRlID0gJ3ZhbHVlJzsKCX0KCgkvKioKCSAqIFNlZSB3aGF0IHN0YXRlIHRvIG1vdmUgdG8gd2hpbGUgd2l0aGluIHF1b3RlZCBoZWFkZXIgdmFsdWVzCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdW90ZSgpCgl7CgkJaWYgKCR0aGlzLT5pc19saW5lYXJfd2hpdGVzcGFjZSgpKQoJCXsKCQkJJHRoaXMtPmxpbmVhcl93aGl0ZXNwYWNlKCk7CgkJfQoJCWVsc2UKCQl7CgkJCXN3aXRjaCAoJHRoaXMtPmRhdGFbJHRoaXMtPnBvc2l0aW9uXSkKCQkJewoJCQkJY2FzZSAnIic6CgkJCQkJJHRoaXMtPnBvc2l0aW9uKys7CgkJCQkJJHRoaXMtPnN0YXRlID0gJ3ZhbHVlJzsKCQkJCQlicmVhazsKCgkJCQljYXNlICJceDBBIjoKCQkJCQkkdGhpcy0+cG9zaXRpb24rKzsKCQkJCQkkdGhpcy0+c3RhdGUgPSAnbmV3X2xpbmUnOwoJCQkJCWJyZWFrOwoKCQkJCWNhc2UgJ1xcJzoKCQkJCQkkdGhpcy0+cG9zaXRpb24rKzsKCQkJCQkkdGhpcy0+c3RhdGUgPSAncXVvdGVfZXNjYXBlZCc7CgkJCQkJYnJlYWs7CgoJCQkJZGVmYXVsdDoKCQkJCQkkdGhpcy0+c3RhdGUgPSAncXVvdGVfY2hhcic7CgkJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBQYXJzZSBhIGhlYWRlciB2YWx1ZSB3aGlsZSB3aXRoaW4gcXVvdGVzCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBxdW90ZV9jaGFyKCkKCXsKCQkkbGVuID0gc3RyY3NwbigkdGhpcy0+ZGF0YSwgIlx4MDlceDIwXHgwQVwiXFwiLCAkdGhpcy0+cG9zaXRpb24pOwoJCSR0aGlzLT52YWx1ZSAuPSBzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbiwgJGxlbik7CgkJJHRoaXMtPnBvc2l0aW9uICs9ICRsZW47CgkJJHRoaXMtPnN0YXRlID0gJ3ZhbHVlJzsKCX0KCgkvKioKCSAqIFBhcnNlIGFuIGVzY2FwZWQgY2hhcmFjdGVyIHdpdGhpbiBxdW90ZXMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHF1b3RlX2VzY2FwZWQoKQoJewoJCSR0aGlzLT52YWx1ZSAuPSAkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb25dOwoJCSR0aGlzLT5wb3NpdGlvbisrOwoJCSR0aGlzLT5zdGF0ZSA9ICdxdW90ZSc7Cgl9CgoJLyoqCgkgKiBQYXJzZSB0aGUgYm9keQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gYm9keSgpCgl7CgkJJHRoaXMtPmJvZHkgPSBzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbik7CgkJaWYgKCFlbXB0eSgkdGhpcy0+aGVhZGVyc1sndHJhbnNmZXItZW5jb2RpbmcnXSkpCgkJewoJCQl1bnNldCgkdGhpcy0+aGVhZGVyc1sndHJhbnNmZXItZW5jb2RpbmcnXSk7CgkJCSR0aGlzLT5zdGF0ZSA9ICdjaHVua2VkJzsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnN0YXRlID0gJ2VtaXQnOwoJCX0KCX0KCgkvKioKCSAqIFBhcnNlZCBhICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgYm9keQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gY2h1bmtlZCgpCgl7CgkJaWYgKCFwcmVnX21hdGNoKCcvXihbMC05YS1mXSspW15cclxuXSpcclxuL2knLCB0cmltKCR0aGlzLT5ib2R5KSkpCgkJewoJCQkkdGhpcy0+c3RhdGUgPSAnZW1pdCc7CgkJCXJldHVybjsKCQl9CgoJCSRkZWNvZGVkID0gJyc7CgkJJGVuY29kZWQgPSAkdGhpcy0+Ym9keTsKCgkJd2hpbGUgKHRydWUpCgkJewoJCQkkaXNfY2h1bmtlZCA9IChib29sKSBwcmVnX21hdGNoKCAnL14oWzAtOWEtZl0rKVteXHJcbl0qXHJcbi9pJywgJGVuY29kZWQsICRtYXRjaGVzICk7CgkJCWlmICghJGlzX2NodW5rZWQpCgkJCXsKCQkJCS8vIExvb2tzIGxpa2UgaXQncyBub3QgY2h1bmtlZCBhZnRlciBhbGwKCQkJCSR0aGlzLT5zdGF0ZSA9ICdlbWl0JzsKCQkJCXJldHVybjsKCQkJfQoKCQkJJGxlbmd0aCA9IGhleGRlYyh0cmltKCRtYXRjaGVzWzFdKSk7CgkJCWlmICgkbGVuZ3RoID09PSAwKQoJCQl7CgkJCQkvLyBJZ25vcmUgdHJhaWxlciBoZWFkZXJzCgkJCQkkdGhpcy0+c3RhdGUgPSAnZW1pdCc7CgkJCQkkdGhpcy0+Ym9keSA9ICRkZWNvZGVkOwoJCQkJcmV0dXJuOwoJCQl9CgoJCQkkY2h1bmtfbGVuZ3RoID0gc3RybGVuKCRtYXRjaGVzWzBdKTsKCQkJJGRlY29kZWQgLj0gJHBhcnQgPSBzdWJzdHIoJGVuY29kZWQsICRjaHVua19sZW5ndGgsICRsZW5ndGgpOwoJCQkkZW5jb2RlZCA9IHN1YnN0cigkZW5jb2RlZCwgJGNodW5rX2xlbmd0aCArICRsZW5ndGggKyAyKTsKCgkJCWlmICh0cmltKCRlbmNvZGVkKSA9PT0gJzAnIHx8IGVtcHR5KCRlbmNvZGVkKSkKCQkJewoJCQkJJHRoaXMtPnN0YXRlID0gJ2VtaXQnOwoJCQkJJHRoaXMtPmJvZHkgPSAkZGVjb2RlZDsKCQkJCXJldHVybjsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIFByZXBhcmUgaGVhZGVycyAodGFrZSBjYXJlIG9mIHByb3hpZXMgaGVhZGVycykKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICAkaGVhZGVycyBSYXcgaGVhZGVycwoJICogQHBhcmFtIGludGVnZXIgJGNvdW50ICAgUmVkaXJlY3Rpb24gY291bnQuIERlZmF1bHQgdG8gMS4KCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHByZXBhcmVIZWFkZXJzKCRoZWFkZXJzLCAkY291bnQgPSAxKQoJewoJCSRkYXRhID0gZXhwbG9kZSgiXHJcblxyXG4iLCAkaGVhZGVycywgJGNvdW50KTsKCQkkZGF0YSA9IGFycmF5X3BvcCgkZGF0YSk7CgkJaWYgKGZhbHNlICE9PSBzdHJpcG9zKCRkYXRhLCAiSFRUUC8xLjAgMjAwIENvbm5lY3Rpb24gZXN0YWJsaXNoZWRcclxuXHJcbiIpKSB7CgkJCSRkYXRhID0gc3RyX2lyZXBsYWNlKCJIVFRQLzEuMCAyMDAgQ29ubmVjdGlvbiBlc3RhYmxpc2hlZFxyXG5cclxuIiwgJycsICRkYXRhKTsKCQl9CgkJaWYgKGZhbHNlICE9PSBzdHJpcG9zKCRkYXRhLCAiSFRUUC8xLjEgMjAwIENvbm5lY3Rpb24gZXN0YWJsaXNoZWRcclxuXHJcbiIpKSB7CgkJCSRkYXRhID0gc3RyX2lyZXBsYWNlKCJIVFRQLzEuMSAyMDAgQ29ubmVjdGlvbiBlc3RhYmxpc2hlZFxyXG5cclxuIiwgJycsICRkYXRhKTsKCQl9CgkJcmV0dXJuICRkYXRhOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/IRI.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBJUkkgcGFyc2VyL3NlcmlhbGlzZXIvbm9ybWFsaXNlcgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgSFRUUAogKiBAYXV0aG9yIFNhbSBTbmVkZG9uCiAqIEBhdXRob3IgU3RldmUgTWludXRpbGxvCiAqIEBhdXRob3IgUnlhbiBNY0N1ZQogKiBAY29weXJpZ2h0IDIwMDctMjAxMiBTYW0gU25lZGRvbiwgU3RldmUgTWludXRpbGxvLCBSeWFuIE1jQ3VlCiAqIEBsaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwCiAqLwpjbGFzcyBTaW1wbGVQaWVfSVJJCnsKCS8qKgoJICogU2NoZW1lCgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRzY2hlbWUgPSBudWxsOwoKCS8qKgoJICogVXNlciBJbmZvcm1hdGlvbgoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXByb3RlY3RlZCAkaXVzZXJpbmZvID0gbnVsbDsKCgkvKioKCSAqIGlob3N0CgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRpaG9zdCA9IG51bGw7CgoJLyoqCgkgKiBQb3J0CgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRwb3J0ID0gbnVsbDsKCgkvKioKCSAqIGlwYXRoCgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRpcGF0aCA9ICcnOwoKCS8qKgoJICogaXF1ZXJ5CgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRpcXVlcnkgPSBudWxsOwoKCS8qKgoJICogaWZyYWdtZW50CgkgKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkICRpZnJhZ21lbnQgPSBudWxsOwoKCS8qKgoJICogTm9ybWFsaXphdGlvbiBkYXRhYmFzZQoJICoKCSAqIEVhY2gga2V5IGlzIHRoZSBzY2hlbWUsIGVhY2ggdmFsdWUgaXMgYW4gYXJyYXkgd2l0aCBlYWNoIGtleSBhcyB0aGUgSVJJCgkgKiBwYXJ0IGFuZCB2YWx1ZSBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhhdCBwYXJ0LgoJICovCglwcm90ZWN0ZWQgJG5vcm1hbGl6YXRpb24gPSBhcnJheSgKCQknYWNhcCcgPT4gYXJyYXkoCgkJCSdwb3J0JyA9PiA2NzQKCQkpLAoJCSdkaWN0JyA9PiBhcnJheSgKCQkJJ3BvcnQnID0+IDI2MjgKCQkpLAoJCSdmaWxlJyA9PiBhcnJheSgKCQkJJ2lob3N0JyA9PiAnbG9jYWxob3N0JwoJCSksCgkJJ2h0dHAnID0+IGFycmF5KAoJCQkncG9ydCcgPT4gODAsCgkJCSdpcGF0aCcgPT4gJy8nCgkJKSwKCQknaHR0cHMnID0+IGFycmF5KAoJCQkncG9ydCcgPT4gNDQzLAoJCQknaXBhdGgnID0+ICcvJwoJCSksCgkpOwoKCS8qKgoJICogUmV0dXJuIHRoZSBlbnRpcmUgSVJJIHdoZW4geW91IHRyeSBhbmQgcmVhZCB0aGUgb2JqZWN0IGFzIGEgc3RyaW5nCgkgKgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0X2lyaSgpOwoJfQoKCS8qKgoJICogT3ZlcmxvYWQgX19zZXQoKSB0byBwcm92aWRlIGFjY2VzcyB2aWEgcHJvcGVydGllcwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgUHJvcGVydHkgbmFtZQoJICogQHBhcmFtIG1peGVkICR2YWx1ZSBQcm9wZXJ0eSB2YWx1ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkKCXsKCQlpZiAobWV0aG9kX2V4aXN0cygkdGhpcywgJ3NldF8nIC4gJG5hbWUpKQoJCXsKCQkJY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMsICdzZXRfJyAuICRuYW1lKSwgJHZhbHVlKTsKCQl9CgkJZWxzZWlmICgKCQkJICAgJG5hbWUgPT09ICdpYXV0aG9yaXR5JwoJCQl8fCAkbmFtZSA9PT0gJ2l1c2VyaW5mbycKCQkJfHwgJG5hbWUgPT09ICdpaG9zdCcKCQkJfHwgJG5hbWUgPT09ICdpcGF0aCcKCQkJfHwgJG5hbWUgPT09ICdpcXVlcnknCgkJCXx8ICRuYW1lID09PSAnaWZyYWdtZW50JwoJCSkKCQl7CgkJCWNhbGxfdXNlcl9mdW5jKGFycmF5KCR0aGlzLCAnc2V0XycgLiBzdWJzdHIoJG5hbWUsIDEpKSwgJHZhbHVlKTsKCQl9Cgl9CgoJLyoqCgkgKiBPdmVybG9hZCBfX2dldCgpIHRvIHByb3ZpZGUgYWNjZXNzIHZpYSBwcm9wZXJ0aWVzCgkgKgoJICogQHBhcmFtIHN0cmluZyAkbmFtZSBQcm9wZXJ0eSBuYW1lCgkgKiBAcmV0dXJuIG1peGVkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkKCXsKCQkvLyBpc3NldCgpIHJldHVybnMgZmFsc2UgZm9yIG51bGwsIHdlIGRvbid0IHdhbnQgdG8gZG8gdGhhdAoJCS8vIEFsc28gd2h5IHdlIHVzZSBhcnJheV9rZXlfZXhpc3RzIGJlbG93IGluc3RlYWQgb2YgaXNzZXQoKQoJCSRwcm9wcyA9IGdldF9vYmplY3RfdmFycygkdGhpcyk7CgoJCWlmICgKCQkJJG5hbWUgPT09ICdpcmknIHx8CgkJCSRuYW1lID09PSAndXJpJyB8fAoJCQkkbmFtZSA9PT0gJ2lhdXRob3JpdHknIHx8CgkJCSRuYW1lID09PSAnYXV0aG9yaXR5JwoJCSkKCQl7CgkJCSRyZXR1cm4gPSAkdGhpcy0+eyJnZXRfJG5hbWUifSgpOwoJCX0KCQllbHNlaWYgKGFycmF5X2tleV9leGlzdHMoJG5hbWUsICRwcm9wcykpCgkJewoJCQkkcmV0dXJuID0gJHRoaXMtPiRuYW1lOwoJCX0KCQkvLyBob3N0IC0+IGlob3N0CgkJZWxzZWlmICgoJHByb3AgPSAnaScgLiAkbmFtZSkgJiYgYXJyYXlfa2V5X2V4aXN0cygkcHJvcCwgJHByb3BzKSkKCQl7CgkJCSRuYW1lID0gJHByb3A7CgkJCSRyZXR1cm4gPSAkdGhpcy0+JHByb3A7CgkJfQoJCS8vIGlzY2hlbWUgLT4gc2NoZW1lCgkJZWxzZWlmICgoJHByb3AgPSBzdWJzdHIoJG5hbWUsIDEpKSAmJiBhcnJheV9rZXlfZXhpc3RzKCRwcm9wLCAkcHJvcHMpKQoJCXsKCQkJJG5hbWUgPSAkcHJvcDsKCQkJJHJldHVybiA9ICR0aGlzLT4kcHJvcDsKCQl9CgkJZWxzZQoJCXsKCQkJdHJpZ2dlcl9lcnJvcignVW5kZWZpbmVkIHByb3BlcnR5OiAnIC4gZ2V0X2NsYXNzKCR0aGlzKSAuICc6OicgLiAkbmFtZSwgRV9VU0VSX05PVElDRSk7CgkJCSRyZXR1cm4gPSBudWxsOwoJCX0KCgkJaWYgKCRyZXR1cm4gPT09IG51bGwgJiYgaXNzZXQoJHRoaXMtPm5vcm1hbGl6YXRpb25bJHRoaXMtPnNjaGVtZV1bJG5hbWVdKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+bm9ybWFsaXphdGlvblskdGhpcy0+c2NoZW1lXVskbmFtZV07CgkJfQoKCQlyZXR1cm4gJHJldHVybjsKCX0KCgkvKioKCSAqIE92ZXJsb2FkIF9faXNzZXQoKSB0byBwcm92aWRlIGFjY2VzcyB2aWEgcHJvcGVydGllcwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgUHJvcGVydHkgbmFtZQoJICogQHJldHVybiBib29sCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRuYW1lKQoJewoJCXJldHVybiBtZXRob2RfZXhpc3RzKCR0aGlzLCAnZ2V0XycgLiAkbmFtZSkgfHwgaXNzZXQoJHRoaXMtPiRuYW1lKTsKCX0KCgkvKioKCSAqIE92ZXJsb2FkIF9fdW5zZXQoKSB0byBwcm92aWRlIGFjY2VzcyB2aWEgcHJvcGVydGllcwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgUHJvcGVydHkgbmFtZQoJICovCglwdWJsaWMgZnVuY3Rpb24gX191bnNldCgkbmFtZSkKCXsKCQlpZiAobWV0aG9kX2V4aXN0cygkdGhpcywgJ3NldF8nIC4gJG5hbWUpKQoJCXsKCQkJY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMsICdzZXRfJyAuICRuYW1lKSwgJycpOwoJCX0KCX0KCgkvKioKCSAqIENyZWF0ZSBhIG5ldyBJUkkgb2JqZWN0LCBmcm9tIGEgc3BlY2lmaWVkIHN0cmluZwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGlyaQoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGlyaSA9IG51bGwpCgl7CgkJJHRoaXMtPnNldF9pcmkoJGlyaSk7Cgl9CgoJLyoqCgkgKiBDbGVhbiB1cAoJICovCglwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpIHsKCSAgICAkdGhpcy0+c2V0X2lyaShudWxsLCB0cnVlKTsKCSAgICAkdGhpcy0+c2V0X3BhdGgobnVsbCwgdHJ1ZSk7CgkgICAgJHRoaXMtPnNldF9hdXRob3JpdHkobnVsbCwgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBDcmVhdGUgYSBuZXcgSVJJIG9iamVjdCBieSByZXNvbHZpbmcgYSByZWxhdGl2ZSBJUkkKCSAqCgkgKiBSZXR1cm5zIGZhbHNlIGlmICRiYXNlIGlzIG5vdCBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGFuIElSSS4KCSAqCgkgKiBAcGFyYW0gSVJJfHN0cmluZyAkYmFzZSAoQWJzb2x1dGUpIEJhc2UgSVJJCgkgKiBAcGFyYW0gSVJJfHN0cmluZyAkcmVsYXRpdmUgUmVsYXRpdmUgSVJJCgkgKiBAcmV0dXJuIElSSXxmYWxzZQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFic29sdXRpemUoJGJhc2UsICRyZWxhdGl2ZSkKCXsKCQlpZiAoISgkcmVsYXRpdmUgaW5zdGFuY2VvZiBTaW1wbGVQaWVfSVJJKSkKCQl7CgkJCSRyZWxhdGl2ZSA9IG5ldyBTaW1wbGVQaWVfSVJJKCRyZWxhdGl2ZSk7CgkJfQoJCWlmICghJHJlbGF0aXZlLT5pc192YWxpZCgpKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlaWYgKCRyZWxhdGl2ZS0+c2NoZW1lICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuIGNsb25lICRyZWxhdGl2ZTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKCEoJGJhc2UgaW5zdGFuY2VvZiBTaW1wbGVQaWVfSVJJKSkKCQkJewoJCQkJJGJhc2UgPSBuZXcgU2ltcGxlUGllX0lSSSgkYmFzZSk7CgkJCX0KCQkJaWYgKCRiYXNlLT5zY2hlbWUgIT09IG51bGwgJiYgJGJhc2UtPmlzX3ZhbGlkKCkpCgkJCXsKCQkJCWlmICgkcmVsYXRpdmUtPmdldF9pcmkoKSAhPT0gJycpCgkJCQl7CgkJCQkJaWYgKCRyZWxhdGl2ZS0+aXVzZXJpbmZvICE9PSBudWxsIHx8ICRyZWxhdGl2ZS0+aWhvc3QgIT09IG51bGwgfHwgJHJlbGF0aXZlLT5wb3J0ICE9PSBudWxsKQoJCQkJCXsKCQkJCQkJJHRhcmdldCA9IGNsb25lICRyZWxhdGl2ZTsKCQkJCQkJJHRhcmdldC0+c2NoZW1lID0gJGJhc2UtPnNjaGVtZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHRhcmdldCA9IG5ldyBTaW1wbGVQaWVfSVJJOwoJCQkJCQkkdGFyZ2V0LT5zY2hlbWUgPSAkYmFzZS0+c2NoZW1lOwoJCQkJCQkkdGFyZ2V0LT5pdXNlcmluZm8gPSAkYmFzZS0+aXVzZXJpbmZvOwoJCQkJCQkkdGFyZ2V0LT5paG9zdCA9ICRiYXNlLT5paG9zdDsKCQkJCQkJJHRhcmdldC0+cG9ydCA9ICRiYXNlLT5wb3J0OwoJCQkJCQlpZiAoJHJlbGF0aXZlLT5pcGF0aCAhPT0gJycpCgkJCQkJCXsKCQkJCQkJCWlmICgkcmVsYXRpdmUtPmlwYXRoWzBdID09PSAnLycpCgkJCQkJCQl7CgkJCQkJCQkJJHRhcmdldC0+aXBhdGggPSAkcmVsYXRpdmUtPmlwYXRoOwoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmICgoJGJhc2UtPml1c2VyaW5mbyAhPT0gbnVsbCB8fCAkYmFzZS0+aWhvc3QgIT09IG51bGwgfHwgJGJhc2UtPnBvcnQgIT09IG51bGwpICYmICRiYXNlLT5pcGF0aCA9PT0gJycpCgkJCQkJCQl7CgkJCQkJCQkJJHRhcmdldC0+aXBhdGggPSAnLycgLiAkcmVsYXRpdmUtPmlwYXRoOwoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmICgoJGxhc3Rfc2VnbWVudCA9IHN0cnJwb3MoJGJhc2UtPmlwYXRoLCAnLycpKSAhPT0gZmFsc2UpCgkJCQkJCQl7CgkJCQkJCQkJJHRhcmdldC0+aXBhdGggPSBzdWJzdHIoJGJhc2UtPmlwYXRoLCAwLCAkbGFzdF9zZWdtZW50ICsgMSkgLiAkcmVsYXRpdmUtPmlwYXRoOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSR0YXJnZXQtPmlwYXRoID0gJHJlbGF0aXZlLT5pcGF0aDsKCQkJCQkJCX0KCQkJCQkJCSR0YXJnZXQtPmlwYXRoID0gJHRhcmdldC0+cmVtb3ZlX2RvdF9zZWdtZW50cygkdGFyZ2V0LT5pcGF0aCk7CgkJCQkJCQkkdGFyZ2V0LT5pcXVlcnkgPSAkcmVsYXRpdmUtPmlxdWVyeTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSR0YXJnZXQtPmlwYXRoID0gJGJhc2UtPmlwYXRoOwoJCQkJCQkJaWYgKCRyZWxhdGl2ZS0+aXF1ZXJ5ICE9PSBudWxsKQoJCQkJCQkJewoJCQkJCQkJCSR0YXJnZXQtPmlxdWVyeSA9ICRyZWxhdGl2ZS0+aXF1ZXJ5OwoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmICgkYmFzZS0+aXF1ZXJ5ICE9PSBudWxsKQoJCQkJCQkJewoJCQkJCQkJCSR0YXJnZXQtPmlxdWVyeSA9ICRiYXNlLT5pcXVlcnk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJHRhcmdldC0+aWZyYWdtZW50ID0gJHJlbGF0aXZlLT5pZnJhZ21lbnQ7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSR0YXJnZXQgPSBjbG9uZSAkYmFzZTsKCQkJCQkkdGFyZ2V0LT5pZnJhZ21lbnQgPSBudWxsOwoJCQkJfQoJCQkJJHRhcmdldC0+c2NoZW1lX25vcm1hbGl6YXRpb24oKTsKCQkJCXJldHVybiAkdGFyZ2V0OwoJCQl9CgoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCS8qKgoJICogUGFyc2UgYW4gSVJJIGludG8gc2NoZW1lL2F1dGhvcml0eS9wYXRoL3F1ZXJ5L2ZyYWdtZW50IHNlZ21lbnRzCgkgKgoJICogQHBhcmFtIHN0cmluZyAkaXJpCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZV9pcmkoJGlyaSkKCXsKCQkkaXJpID0gdHJpbSgkaXJpLCAiXHgyMFx4MDlceDBBXHgwQ1x4MEQiKTsKCQlpZiAocHJlZ19tYXRjaCgnL14oKD9QPHNjaGVtZT5bXjpcLz8jXSspOik/KFwvXC8oP1A8YXV0aG9yaXR5PlteXC8/I10qKSk/KD9QPHBhdGg+W14/I10qKShcPyg/UDxxdWVyeT5bXiNdKikpPygjKD9QPGZyYWdtZW50Pi4qKSk/JC8nLCAkaXJpLCAkbWF0Y2gpKQoJCXsKCQkJaWYgKCRtYXRjaFsxXSA9PT0gJycpCgkJCXsKCQkJCSRtYXRjaFsnc2NoZW1lJ10gPSBudWxsOwoJCQl9CgkJCWlmICghaXNzZXQoJG1hdGNoWzNdKSB8fCAkbWF0Y2hbM10gPT09ICcnKQoJCQl7CgkJCQkkbWF0Y2hbJ2F1dGhvcml0eSddID0gbnVsbDsKCQkJfQoJCQlpZiAoIWlzc2V0KCRtYXRjaFs1XSkpCgkJCXsKCQkJCSRtYXRjaFsncGF0aCddID0gJyc7CgkJCX0KCQkJaWYgKCFpc3NldCgkbWF0Y2hbNl0pIHx8ICRtYXRjaFs2XSA9PT0gJycpCgkJCXsKCQkJCSRtYXRjaFsncXVlcnknXSA9IG51bGw7CgkJCX0KCQkJaWYgKCFpc3NldCgkbWF0Y2hbOF0pIHx8ICRtYXRjaFs4XSA9PT0gJycpCgkJCXsKCQkJCSRtYXRjaFsnZnJhZ21lbnQnXSA9IG51bGw7CgkJCX0KCQkJcmV0dXJuICRtYXRjaDsKCQl9CgoJCS8vIFRoaXMgY2FuIG9jY3VyIHdoZW4gYSBwYXJhZ3JhcGggaXMgYWNjaWRlbnRhbGx5IHBhcnNlZCBhcyBhIFVSSQoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFJlbW92ZSBkb3Qgc2VnbWVudHMgZnJvbSBhIHBhdGgKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRpbnB1dAoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHJlbW92ZV9kb3Rfc2VnbWVudHMoJGlucHV0KQoJewoJCSRvdXRwdXQgPSAnJzsKCQl3aGlsZSAoc3RycG9zKCRpbnB1dCwgJy4vJykgIT09IGZhbHNlIHx8IHN0cnBvcygkaW5wdXQsICcvLicpICE9PSBmYWxzZSB8fCAkaW5wdXQgPT09ICcuJyB8fCAkaW5wdXQgPT09ICcuLicpCgkJewoJCQkvLyBBOiBJZiB0aGUgaW5wdXQgYnVmZmVyIGJlZ2lucyB3aXRoIGEgcHJlZml4IG9mICIuLi8iIG9yICIuLyIsIHRoZW4gcmVtb3ZlIHRoYXQgcHJlZml4IGZyb20gdGhlIGlucHV0IGJ1ZmZlcjsgb3RoZXJ3aXNlLAoJCQlpZiAoc3RycG9zKCRpbnB1dCwgJy4uLycpID09PSAwKQoJCQl7CgkJCQkkaW5wdXQgPSBzdWJzdHIoJGlucHV0LCAzKTsKCQkJfQoJCQllbHNlaWYgKHN0cnBvcygkaW5wdXQsICcuLycpID09PSAwKQoJCQl7CgkJCQkkaW5wdXQgPSBzdWJzdHIoJGlucHV0LCAyKTsKCQkJfQoJCQkvLyBCOiBpZiB0aGUgaW5wdXQgYnVmZmVyIGJlZ2lucyB3aXRoIGEgcHJlZml4IG9mICIvLi8iIG9yICIvLiIsIHdoZXJlICIuIiBpcyBhIGNvbXBsZXRlIHBhdGggc2VnbWVudCwgdGhlbiByZXBsYWNlIHRoYXQgcHJlZml4IHdpdGggIi8iIGluIHRoZSBpbnB1dCBidWZmZXI7IG90aGVyd2lzZSwKCQkJZWxzZWlmIChzdHJwb3MoJGlucHV0LCAnLy4vJykgPT09IDApCgkJCXsKCQkJCSRpbnB1dCA9IHN1YnN0cigkaW5wdXQsIDIpOwoJCQl9CgkJCWVsc2VpZiAoJGlucHV0ID09PSAnLy4nKQoJCQl7CgkJCQkkaW5wdXQgPSAnLyc7CgkJCX0KCQkJLy8gQzogaWYgdGhlIGlucHV0IGJ1ZmZlciBiZWdpbnMgd2l0aCBhIHByZWZpeCBvZiAiLy4uLyIgb3IgIi8uLiIsIHdoZXJlICIuLiIgaXMgYSBjb21wbGV0ZSBwYXRoIHNlZ21lbnQsIHRoZW4gcmVwbGFjZSB0aGF0IHByZWZpeCB3aXRoICIvIiBpbiB0aGUgaW5wdXQgYnVmZmVyIGFuZCByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBhbmQgaXRzIHByZWNlZGluZyAiLyIgKGlmIGFueSkgZnJvbSB0aGUgb3V0cHV0IGJ1ZmZlcjsgb3RoZXJ3aXNlLAoJCQllbHNlaWYgKHN0cnBvcygkaW5wdXQsICcvLi4vJykgPT09IDApCgkJCXsKCQkJCSRpbnB1dCA9IHN1YnN0cigkaW5wdXQsIDMpOwoJCQkJJG91dHB1dCA9IHN1YnN0cl9yZXBsYWNlKCRvdXRwdXQsICcnLCBzdHJycG9zKCRvdXRwdXQsICcvJykpOwoJCQl9CgkJCWVsc2VpZiAoJGlucHV0ID09PSAnLy4uJykKCQkJewoJCQkJJGlucHV0ID0gJy8nOwoJCQkJJG91dHB1dCA9IHN1YnN0cl9yZXBsYWNlKCRvdXRwdXQsICcnLCBzdHJycG9zKCRvdXRwdXQsICcvJykpOwoJCQl9CgkJCS8vIEQ6IGlmIHRoZSBpbnB1dCBidWZmZXIgY29uc2lzdHMgb25seSBvZiAiLiIgb3IgIi4uIiwgdGhlbiByZW1vdmUgdGhhdCBmcm9tIHRoZSBpbnB1dCBidWZmZXI7IG90aGVyd2lzZSwKCQkJZWxzZWlmICgkaW5wdXQgPT09ICcuJyB8fCAkaW5wdXQgPT09ICcuLicpCgkJCXsKCQkJCSRpbnB1dCA9ICcnOwoJCQl9CgkJCS8vIEU6IG1vdmUgdGhlIGZpcnN0IHBhdGggc2VnbWVudCBpbiB0aGUgaW5wdXQgYnVmZmVyIHRvIHRoZSBlbmQgb2YgdGhlIG91dHB1dCBidWZmZXIsIGluY2x1ZGluZyB0aGUgaW5pdGlhbCAiLyIgY2hhcmFjdGVyIChpZiBhbnkpIGFuZCBhbnkgc3Vic2VxdWVudCBjaGFyYWN0ZXJzIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIG5leHQgIi8iIGNoYXJhY3RlciBvciB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIKCQkJZWxzZWlmICgoJHBvcyA9IHN0cnBvcygkaW5wdXQsICcvJywgMSkpICE9PSBmYWxzZSkKCQkJewoJCQkJJG91dHB1dCAuPSBzdWJzdHIoJGlucHV0LCAwLCAkcG9zKTsKCQkJCSRpbnB1dCA9IHN1YnN0cl9yZXBsYWNlKCRpbnB1dCwgJycsIDAsICRwb3MpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJG91dHB1dCAuPSAkaW5wdXQ7CgkJCQkkaW5wdXQgPSAnJzsKCQkJfQoJCX0KCQlyZXR1cm4gJG91dHB1dCAuICRpbnB1dDsKCX0KCgkvKioKCSAqIFJlcGxhY2UgaW52YWxpZCBjaGFyYWN0ZXIgd2l0aCBwZXJjZW50IGVuY29kaW5nCgkgKgoJICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIElucHV0IHN0cmluZwoJICogQHBhcmFtIHN0cmluZyAkZXh0cmFfY2hhcnMgVmFsaWQgY2hhcmFjdGVycyBub3QgaW4gaXVucmVzZXJ2ZWQgb3IKCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwcml2YXRlICh0aGlzIGlzIEFTQ0lJLW9ubHkpCgkgKiBAcGFyYW0gYm9vbCAkaXByaXZhdGUgQWxsb3cgaXByaXZhdGUKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiByZXBsYWNlX2ludmFsaWRfd2l0aF9wY3RfZW5jb2RpbmcoJHN0cmluZywgJGV4dHJhX2NoYXJzLCAkaXByaXZhdGUgPSBmYWxzZSkKCXsKCQkvLyBOb3JtYWxpemUgYXMgbWFueSBwY3QtZW5jb2RlZCBzZWN0aW9ucyBhcyBwb3NzaWJsZQoJCSRzdHJpbmcgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJy8oPzolW0EtRmEtZjAtOV17Mn0pKy8nLCBhcnJheSgkdGhpcywgJ3JlbW92ZV9pdW5yZXNlcnZlZF9wZXJjZW50X2VuY29kZWQnKSwgJHN0cmluZyk7CgoJCS8vIFJlcGxhY2UgaW52YWxpZCBwZXJjZW50IGNoYXJhY3RlcnMKCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvJSg/IVtBLUZhLWYwLTldezJ9KS8nLCAnJTI1JywgJHN0cmluZyk7CgoJCS8vIEFkZCB1bnJlc2VydmVkIGFuZCAlIHRvICRleHRyYV9jaGFycyAodGhlIGxhdHRlciBpcyBzYWZlIGJlY2F1c2UgYWxsCgkJLy8gcGN0LWVuY29kZWQgc2VjdGlvbnMgYXJlIG5vdyB2YWxpZCkuCgkJJGV4dHJhX2NoYXJzIC49ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS0uX34lJzsKCgkJLy8gTm93IHJlcGxhY2UgYW55IGJ5dGVzIHRoYXQgYXJlbid0IGFsbG93ZWQgd2l0aCB0aGVpciBwY3QtZW5jb2RlZCB2ZXJzaW9ucwoJCSRwb3NpdGlvbiA9IDA7CgkJJHN0cmxlbiA9IHN0cmxlbigkc3RyaW5nKTsKCQl3aGlsZSAoKCRwb3NpdGlvbiArPSBzdHJzcG4oJHN0cmluZywgJGV4dHJhX2NoYXJzLCAkcG9zaXRpb24pKSA8ICRzdHJsZW4pCgkJewoJCQkkdmFsdWUgPSBvcmQoJHN0cmluZ1skcG9zaXRpb25dKTsKCgkJCS8vIFN0YXJ0IHBvc2l0aW9uCgkJCSRzdGFydCA9ICRwb3NpdGlvbjsKCgkJCS8vIEJ5IGRlZmF1bHQgd2UgYXJlIHZhbGlkCgkJCSR2YWxpZCA9IHRydWU7CgoJCQkvLyBObyBvbmUgYnl0ZSBzZXF1ZW5jZXMgYXJlIHZhbGlkIGR1ZSB0byB0aGUgd2hpbGUuCgkJCS8vIFR3byBieXRlIHNlcXVlbmNlOgoJCQlpZiAoKCR2YWx1ZSAmIDB4RTApID09PSAweEMwKQoJCQl7CgkJCQkkY2hhcmFjdGVyID0gKCR2YWx1ZSAmIDB4MUYpIDw8IDY7CgkJCQkkbGVuZ3RoID0gMjsKCQkJCSRyZW1haW5pbmcgPSAxOwoJCQl9CgkJCS8vIFRocmVlIGJ5dGUgc2VxdWVuY2U6CgkJCWVsc2VpZiAoKCR2YWx1ZSAmIDB4RjApID09PSAweEUwKQoJCQl7CgkJCQkkY2hhcmFjdGVyID0gKCR2YWx1ZSAmIDB4MEYpIDw8IDEyOwoJCQkJJGxlbmd0aCA9IDM7CgkJCQkkcmVtYWluaW5nID0gMjsKCQkJfQoJCQkvLyBGb3VyIGJ5dGUgc2VxdWVuY2U6CgkJCWVsc2VpZiAoKCR2YWx1ZSAmIDB4RjgpID09PSAweEYwKQoJCQl7CgkJCQkkY2hhcmFjdGVyID0gKCR2YWx1ZSAmIDB4MDcpIDw8IDE4OwoJCQkJJGxlbmd0aCA9IDQ7CgkJCQkkcmVtYWluaW5nID0gMzsKCQkJfQoJCQkvLyBJbnZhbGlkIGJ5dGU6CgkJCWVsc2UKCQkJewoJCQkJJHZhbGlkID0gZmFsc2U7CgkJCQkkbGVuZ3RoID0gMTsKCQkJCSRyZW1haW5pbmcgPSAwOwoJCQl9CgoJCQlpZiAoJHJlbWFpbmluZykKCQkJewoJCQkJaWYgKCRwb3NpdGlvbiArICRsZW5ndGggPD0gJHN0cmxlbikKCQkJCXsKCQkJCQlmb3IgKCRwb3NpdGlvbisrOyAkcmVtYWluaW5nOyAkcG9zaXRpb24rKykKCQkJCQl7CgkJCQkJCSR2YWx1ZSA9IG9yZCgkc3RyaW5nWyRwb3NpdGlvbl0pOwoKCQkJCQkJLy8gQ2hlY2sgdGhhdCB0aGUgYnl0ZSBpcyB2YWxpZCwgdGhlbiBhZGQgaXQgdG8gdGhlIGNoYXJhY3RlcjoKCQkJCQkJaWYgKCgkdmFsdWUgJiAweEMwKSA9PT0gMHg4MCkKCQkJCQkJewoJCQkJCQkJJGNoYXJhY3RlciB8PSAoJHZhbHVlICYgMHgzRikgPDwgKC0tJHJlbWFpbmluZyAqIDYpOwoJCQkJCQl9CgkJCQkJCS8vIElmIGl0IGlzIGludmFsaWQsIGNvdW50IHRoZSBzZXF1ZW5jZSBhcyBpbnZhbGlkIGFuZCByZXByb2Nlc3MgdGhlIGN1cnJlbnQgYnl0ZToKCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkdmFsaWQgPSBmYWxzZTsKCQkJCQkJCSRwb3NpdGlvbi0tOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHBvc2l0aW9uID0gJHN0cmxlbiAtIDE7CgkJCQkJJHZhbGlkID0gZmFsc2U7CgkJCQl9CgkJCX0KCgkJCS8vIFBlcmNlbnQgZW5jb2RlIGFueXRoaW5nIGludmFsaWQgb3Igbm90IGluIHVjc2NoYXIKCQkJaWYgKAoJCQkJLy8gSW52YWxpZCBzZXF1ZW5jZXMKCQkJCSEkdmFsaWQKCQkJCS8vIE5vbi1zaG9ydGVzdCBmb3JtIHNlcXVlbmNlcyBhcmUgaW52YWxpZAoJCQkJfHwgJGxlbmd0aCA+IDEgJiYgJGNoYXJhY3RlciA8PSAweDdGCgkJCQl8fCAkbGVuZ3RoID4gMiAmJiAkY2hhcmFjdGVyIDw9IDB4N0ZGCgkJCQl8fCAkbGVuZ3RoID4gMyAmJiAkY2hhcmFjdGVyIDw9IDB4RkZGRgoJCQkJLy8gT3V0c2lkZSBvZiByYW5nZSBvZiB1Y3NjaGFyIGNvZGVwb2ludHMKCQkJCS8vIE5vbmNoYXJhY3RlcnMKCQkJCXx8ICgkY2hhcmFjdGVyICYgMHhGRkZFKSA9PT0gMHhGRkZFCgkJCQl8fCAkY2hhcmFjdGVyID49IDB4RkREMCAmJiAkY2hhcmFjdGVyIDw9IDB4RkRFRgoJCQkJfHwgKAoJCQkJCS8vIEV2ZXJ5dGhpbmcgZWxzZSBub3QgaW4gdWNzY2hhcgoJCQkJCSAgICRjaGFyYWN0ZXIgPiAweEQ3RkYgJiYgJGNoYXJhY3RlciA8IDB4RjkwMAoJCQkJCXx8ICRjaGFyYWN0ZXIgPCAweEEwCgkJCQkJfHwgJGNoYXJhY3RlciA+IDB4RUZGRkQKCQkJCSkKCQkJCSYmICgKCQkJCQkvLyBFdmVyeXRoaW5nIG5vdCBpbiBpcHJpdmF0ZSwgaWYgaXQgYXBwbGllcwoJCQkJCSAgICEkaXByaXZhdGUKCQkJCQl8fCAkY2hhcmFjdGVyIDwgMHhFMDAwCgkJCQkJfHwgJGNoYXJhY3RlciA+IDB4MTBGRkZECgkJCQkpCgkJCSkKCQkJewoJCQkJLy8gSWYgd2Ugd2VyZSBhIGNoYXJhY3RlciwgcHJldGVuZCB3ZSB3ZXJlbid0LCBidXQgcmF0aGVyIGFuIGVycm9yLgoJCQkJaWYgKCR2YWxpZCkKCQkJCQkkcG9zaXRpb24tLTsKCgkJCQlmb3IgKCRqID0gJHN0YXJ0OyAkaiA8PSAkcG9zaXRpb247ICRqKyspCgkJCQl7CgkJCQkJJHN0cmluZyA9IHN1YnN0cl9yZXBsYWNlKCRzdHJpbmcsIHNwcmludGYoJyUlJTAyWCcsIG9yZCgkc3RyaW5nWyRqXSkpLCAkaiwgMSk7CgkJCQkJJGogKz0gMjsKCQkJCQkkcG9zaXRpb24gKz0gMjsKCQkJCQkkc3RybGVuICs9IDI7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiAkc3RyaW5nOwoJfQoKCS8qKgoJICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHByZWdfcmVwbGFjZV9jYWxsYmFjay4KCSAqCgkgKiBSZW1vdmVzIHNlcXVlbmNlcyBvZiBwZXJjZW50IGVuY29kZWQgYnl0ZXMgdGhhdCByZXByZXNlbnQgVVRGLTgKCSAqIGVuY29kZWQgY2hhcmFjdGVycyBpbiBpdW5yZXNlcnZlZAoJICoKCSAqIEBwYXJhbSBhcnJheSAkbWF0Y2ggUENSRSBtYXRjaAoJICogQHJldHVybiBzdHJpbmcgUmVwbGFjZW1lbnQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHJlbW92ZV9pdW5yZXNlcnZlZF9wZXJjZW50X2VuY29kZWQoJG1hdGNoKQoJewoJCS8vIEFzIHdlIGp1c3QgaGF2ZSB2YWxpZCBwZXJjZW50IGVuY29kZWQgc2VxdWVuY2VzIHdlIGNhbiBqdXN0IGV4cGxvZGUKCQkvLyBhbmQgaWdub3JlIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHJldHVybmVkIGFycmF5IChhbiBlbXB0eSBzdHJpbmcpLgoJCSRieXRlcyA9IGV4cGxvZGUoJyUnLCAkbWF0Y2hbMF0pOwoKCQkvLyBJbml0aWFsaXplIHRoZSBuZXcgc3RyaW5nICh0aGlzIGlzIHdoYXQgd2lsbCBiZSByZXR1cm5lZCkgYW5kIHRoYXQKCQkvLyB0aGVyZSBhcmUgbm8gYnl0ZXMgcmVtYWluaW5nIGluIHRoZSBjdXJyZW50IHNlcXVlbmNlICh1bnN1cnByaXNpbmcKCQkvLyBhdCB0aGUgZmlyc3QgYnl0ZSEpLgoJCSRzdHJpbmcgPSAnJzsKCQkkcmVtYWluaW5nID0gMDsKCgkJLy8gTG9vcCBvdmVyIGVhY2ggYW5kIGV2ZXJ5IGJ5dGUsIGFuZCBzZXQgJHZhbHVlIHRvIGl0cyB2YWx1ZQoJCWZvciAoJGkgPSAxLCAkbGVuID0gY291bnQoJGJ5dGVzKTsgJGkgPCAkbGVuOyAkaSsrKQoJCXsKCQkJJHZhbHVlID0gaGV4ZGVjKCRieXRlc1skaV0pOwoKCQkJLy8gSWYgd2UncmUgdGhlIGZpcnN0IGJ5dGUgb2Ygc2VxdWVuY2U6CgkJCWlmICghJHJlbWFpbmluZykKCQkJewoJCQkJLy8gU3RhcnQgcG9zaXRpb24KCQkJCSRzdGFydCA9ICRpOwoKCQkJCS8vIEJ5IGRlZmF1bHQgd2UgYXJlIHZhbGlkCgkJCQkkdmFsaWQgPSB0cnVlOwoKCQkJCS8vIE9uZSBieXRlIHNlcXVlbmNlOgoJCQkJaWYgKCR2YWx1ZSA8PSAweDdGKQoJCQkJewoJCQkJCSRjaGFyYWN0ZXIgPSAkdmFsdWU7CgkJCQkJJGxlbmd0aCA9IDE7CgkJCQl9CgkJCQkvLyBUd28gYnl0ZSBzZXF1ZW5jZToKCQkJCWVsc2VpZiAoKCR2YWx1ZSAmIDB4RTApID09PSAweEMwKQoJCQkJewoJCQkJCSRjaGFyYWN0ZXIgPSAoJHZhbHVlICYgMHgxRikgPDwgNjsKCQkJCQkkbGVuZ3RoID0gMjsKCQkJCQkkcmVtYWluaW5nID0gMTsKCQkJCX0KCQkJCS8vIFRocmVlIGJ5dGUgc2VxdWVuY2U6CgkJCQllbHNlaWYgKCgkdmFsdWUgJiAweEYwKSA9PT0gMHhFMCkKCQkJCXsKCQkJCQkkY2hhcmFjdGVyID0gKCR2YWx1ZSAmIDB4MEYpIDw8IDEyOwoJCQkJCSRsZW5ndGggPSAzOwoJCQkJCSRyZW1haW5pbmcgPSAyOwoJCQkJfQoJCQkJLy8gRm91ciBieXRlIHNlcXVlbmNlOgoJCQkJZWxzZWlmICgoJHZhbHVlICYgMHhGOCkgPT09IDB4RjApCgkJCQl7CgkJCQkJJGNoYXJhY3RlciA9ICgkdmFsdWUgJiAweDA3KSA8PCAxODsKCQkJCQkkbGVuZ3RoID0gNDsKCQkJCQkkcmVtYWluaW5nID0gMzsKCQkJCX0KCQkJCS8vIEludmFsaWQgYnl0ZToKCQkJCWVsc2UKCQkJCXsKCQkJCQkkdmFsaWQgPSBmYWxzZTsKCQkJCQkkcmVtYWluaW5nID0gMDsKCQkJCX0KCQkJfQoJCQkvLyBDb250aW51YXRpb24gYnl0ZToKCQkJZWxzZQoJCQl7CgkJCQkvLyBDaGVjayB0aGF0IHRoZSBieXRlIGlzIHZhbGlkLCB0aGVuIGFkZCBpdCB0byB0aGUgY2hhcmFjdGVyOgoJCQkJaWYgKCgkdmFsdWUgJiAweEMwKSA9PT0gMHg4MCkKCQkJCXsKCQkJCQkkcmVtYWluaW5nLS07CgkJCQkJJGNoYXJhY3RlciB8PSAoJHZhbHVlICYgMHgzRikgPDwgKCRyZW1haW5pbmcgKiA2KTsKCQkJCX0KCQkJCS8vIElmIGl0IGlzIGludmFsaWQsIGNvdW50IHRoZSBzZXF1ZW5jZSBhcyBpbnZhbGlkIGFuZCByZXByb2Nlc3MgdGhlIGN1cnJlbnQgYnl0ZSBhcyB0aGUgc3RhcnQgb2YgYSBzZXF1ZW5jZToKCQkJCWVsc2UKCQkJCXsKCQkJCQkkdmFsaWQgPSBmYWxzZTsKCQkJCQkkcmVtYWluaW5nID0gMDsKCQkJCQkkaS0tOwoJCQkJfQoJCQl9CgoJCQkvLyBJZiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgYnl0ZSBzZXF1ZW5jZSwgYXBwZW5kIGl0IHRvIFVuaWNvZGU6OiRkYXRhCgkJCWlmICghJHJlbWFpbmluZykKCQkJewoJCQkJLy8gUGVyY2VudCBlbmNvZGUgYW55dGhpbmcgaW52YWxpZCBvciBub3QgaW4gaXVucmVzZXJ2ZWQKCQkJCWlmICgKCQkJCQkvLyBJbnZhbGlkIHNlcXVlbmNlcwoJCQkJCSEkdmFsaWQKCQkJCQkvLyBOb24tc2hvcnRlc3QgZm9ybSBzZXF1ZW5jZXMgYXJlIGludmFsaWQKCQkJCQl8fCAkbGVuZ3RoID4gMSAmJiAkY2hhcmFjdGVyIDw9IDB4N0YKCQkJCQl8fCAkbGVuZ3RoID4gMiAmJiAkY2hhcmFjdGVyIDw9IDB4N0ZGCgkJCQkJfHwgJGxlbmd0aCA+IDMgJiYgJGNoYXJhY3RlciA8PSAweEZGRkYKCQkJCQkvLyBPdXRzaWRlIG9mIHJhbmdlIG9mIGl1bnJlc2VydmVkIGNvZGVwb2ludHMKCQkJCQl8fCAkY2hhcmFjdGVyIDwgMHgyRAoJCQkJCXx8ICRjaGFyYWN0ZXIgPiAweEVGRkZECgkJCQkJLy8gTm9uY2hhcmFjdGVycwoJCQkJCXx8ICgkY2hhcmFjdGVyICYgMHhGRkZFKSA9PT0gMHhGRkZFCgkJCQkJfHwgJGNoYXJhY3RlciA+PSAweEZERDAgJiYgJGNoYXJhY3RlciA8PSAweEZERUYKCQkJCQkvLyBFdmVyeXRoaW5nIGVsc2Ugbm90IGluIGl1bnJlc2VydmVkICh0aGlzIGlzIGFsbCBCTVApCgkJCQkJfHwgJGNoYXJhY3RlciA9PT0gMHgyRgoJCQkJCXx8ICRjaGFyYWN0ZXIgPiAweDM5ICYmICRjaGFyYWN0ZXIgPCAweDQxCgkJCQkJfHwgJGNoYXJhY3RlciA+IDB4NUEgJiYgJGNoYXJhY3RlciA8IDB4NjEKCQkJCQl8fCAkY2hhcmFjdGVyID4gMHg3QSAmJiAkY2hhcmFjdGVyIDwgMHg3RQoJCQkJCXx8ICRjaGFyYWN0ZXIgPiAweDdFICYmICRjaGFyYWN0ZXIgPCAweEEwCgkJCQkJfHwgJGNoYXJhY3RlciA+IDB4RDdGRiAmJiAkY2hhcmFjdGVyIDwgMHhGOTAwCgkJCQkpCgkJCQl7CgkJCQkJZm9yICgkaiA9ICRzdGFydDsgJGogPD0gJGk7ICRqKyspCgkJCQkJewoJCQkJCQkkc3RyaW5nIC49ICclJyAuIHN0cnRvdXBwZXIoJGJ5dGVzWyRqXSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWZvciAoJGogPSAkc3RhcnQ7ICRqIDw9ICRpOyAkaisrKQoJCQkJCXsKCQkJCQkJJHN0cmluZyAuPSBjaHIoaGV4ZGVjKCRieXRlc1skal0pKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCS8vIElmIHdlIGhhdmUgYW55IGJ5dGVzIGxlZnQgb3ZlciB0aGV5IGFyZSBpbnZhbGlkIChpLmUuLCB3ZSBhcmUKCQkvLyBtaWQtd2F5IHRocm91Z2ggYSBtdWx0aS1ieXRlIHNlcXVlbmNlKQoJCWlmICgkcmVtYWluaW5nKQoJCXsKCQkJZm9yICgkaiA9ICRzdGFydDsgJGogPCAkbGVuOyAkaisrKQoJCQl7CgkJCQkkc3RyaW5nIC49ICclJyAuIHN0cnRvdXBwZXIoJGJ5dGVzWyRqXSk7CgkJCX0KCQl9CgoJCXJldHVybiAkc3RyaW5nOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBzY2hlbWVfbm9ybWFsaXphdGlvbigpCgl7CgkJaWYgKGlzc2V0KCR0aGlzLT5ub3JtYWxpemF0aW9uWyR0aGlzLT5zY2hlbWVdWydpdXNlcmluZm8nXSkgJiYgJHRoaXMtPml1c2VyaW5mbyA9PT0gJHRoaXMtPm5vcm1hbGl6YXRpb25bJHRoaXMtPnNjaGVtZV1bJ2l1c2VyaW5mbyddKQoJCXsKCQkJJHRoaXMtPml1c2VyaW5mbyA9IG51bGw7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+bm9ybWFsaXphdGlvblskdGhpcy0+c2NoZW1lXVsnaWhvc3QnXSkgJiYgJHRoaXMtPmlob3N0ID09PSAkdGhpcy0+bm9ybWFsaXphdGlvblskdGhpcy0+c2NoZW1lXVsnaWhvc3QnXSkKCQl7CgkJCSR0aGlzLT5paG9zdCA9IG51bGw7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+bm9ybWFsaXphdGlvblskdGhpcy0+c2NoZW1lXVsncG9ydCddKSAmJiAkdGhpcy0+cG9ydCA9PT0gJHRoaXMtPm5vcm1hbGl6YXRpb25bJHRoaXMtPnNjaGVtZV1bJ3BvcnQnXSkKCQl7CgkJCSR0aGlzLT5wb3J0ID0gbnVsbDsKCQl9CgkJaWYgKGlzc2V0KCR0aGlzLT5ub3JtYWxpemF0aW9uWyR0aGlzLT5zY2hlbWVdWydpcGF0aCddKSAmJiAkdGhpcy0+aXBhdGggPT09ICR0aGlzLT5ub3JtYWxpemF0aW9uWyR0aGlzLT5zY2hlbWVdWydpcGF0aCddKQoJCXsKCQkJJHRoaXMtPmlwYXRoID0gJyc7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+bm9ybWFsaXphdGlvblskdGhpcy0+c2NoZW1lXVsnaXF1ZXJ5J10pICYmICR0aGlzLT5pcXVlcnkgPT09ICR0aGlzLT5ub3JtYWxpemF0aW9uWyR0aGlzLT5zY2hlbWVdWydpcXVlcnknXSkKCQl7CgkJCSR0aGlzLT5pcXVlcnkgPSBudWxsOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPm5vcm1hbGl6YXRpb25bJHRoaXMtPnNjaGVtZV1bJ2lmcmFnbWVudCddKSAmJiAkdGhpcy0+aWZyYWdtZW50ID09PSAkdGhpcy0+bm9ybWFsaXphdGlvblskdGhpcy0+c2NoZW1lXVsnaWZyYWdtZW50J10pCgkJewoJCQkkdGhpcy0+aWZyYWdtZW50ID0gbnVsbDsKCQl9Cgl9CgoJLyoqCgkgKiBDaGVjayBpZiB0aGUgb2JqZWN0IHJlcHJlc2VudHMgYSB2YWxpZCBJUkkuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBvbiBlYWNoCgkgKiBjYWxsIGFzIHNvbWUgdGhpbmdzIGNoYW5nZSBkZXBlbmRpbmcgb24gYW5vdGhlciBwYXJ0IG9mIHRoZSBJUkkuCgkgKgoJICogQHJldHVybiBib29sCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc192YWxpZCgpCgl7CgkJaWYgKCR0aGlzLT5pcGF0aCA9PT0gJycpIHJldHVybiB0cnVlOwoKCQkkaXNhdXRob3JpdHkgPSAkdGhpcy0+aXVzZXJpbmZvICE9PSBudWxsIHx8ICR0aGlzLT5paG9zdCAhPT0gbnVsbCB8fAoJCQkkdGhpcy0+cG9ydCAhPT0gbnVsbDsKCQlpZiAoJGlzYXV0aG9yaXR5ICYmICR0aGlzLT5pcGF0aFswXSA9PT0gJy8nKSByZXR1cm4gdHJ1ZTsKCgkJaWYgKCEkaXNhdXRob3JpdHkgJiYgKHN1YnN0cigkdGhpcy0+aXBhdGgsIDAsIDIpID09PSAnLy8nKSkgcmV0dXJuIGZhbHNlOwoKCQkvLyBSZWxhdGl2ZSB1cmxzIGNhbm5vdCBoYXZlIGEgY29sb24gaW4gdGhlIGZpcnN0IHBhdGggc2VnbWVudCAoYW5kIHRoZQoJCS8vIHNsYXNoZXMgdGhlbXNlbHZlcyBhcmUgbm90IGluY2x1ZGVkIHNvIHNraXAgdGhlIGZpcnN0IGNoYXJhY3RlcikuCgkJaWYgKCEkdGhpcy0+c2NoZW1lICYmICEkaXNhdXRob3JpdHkgJiYKCQkgICAgc3RycG9zKCR0aGlzLT5pcGF0aCwgJzonKSAhPT0gZmFsc2UgJiYKCQkgICAgc3RycG9zKCR0aGlzLT5pcGF0aCwgJy8nLCAxKSAhPT0gZmFsc2UgJiYKCQkgICAgc3RycG9zKCR0aGlzLT5pcGF0aCwgJzonKSA8IHN0cnBvcygkdGhpcy0+aXBhdGgsICcvJywgMSkpIHJldHVybiBmYWxzZTsKCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGVudGlyZSBJUkkuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlIChpZiB0aGVyZQoJICogYXJlIGFueSBpbnZhbGlkIGNoYXJhY3RlcnMpLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGlyaQoJICogQHJldHVybiBib29sCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfaXJpKCRpcmksICRjbGVhcl9jYWNoZSA9IGZhbHNlKQoJewoJCXN0YXRpYyAkY2FjaGU7CgkJaWYgKCRjbGVhcl9jYWNoZSkKCQl7CgkJCSRjYWNoZSA9IG51bGw7CgkJCXJldHVybjsKCQl9CgkJaWYgKCEkY2FjaGUpCgkJewoJCQkkY2FjaGUgPSBhcnJheSgpOwoJCX0KCgkJaWYgKCRpcmkgPT09IG51bGwpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZWlmIChpc3NldCgkY2FjaGVbJGlyaV0pKQoJCXsKCQkJbGlzdCgkdGhpcy0+c2NoZW1lLAoJCQkJICR0aGlzLT5pdXNlcmluZm8sCgkJCQkgJHRoaXMtPmlob3N0LAoJCQkJICR0aGlzLT5wb3J0LAoJCQkJICR0aGlzLT5pcGF0aCwKCQkJCSAkdGhpcy0+aXF1ZXJ5LAoJCQkJICR0aGlzLT5pZnJhZ21lbnQsCgkJCQkgJHJldHVybikgPSAkY2FjaGVbJGlyaV07CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCgkJJHBhcnNlZCA9ICR0aGlzLT5wYXJzZV9pcmkoKHN0cmluZykgJGlyaSk7CgkJaWYgKCEkcGFyc2VkKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJHJldHVybiA9ICR0aGlzLT5zZXRfc2NoZW1lKCRwYXJzZWRbJ3NjaGVtZSddKQoJCQkmJiAkdGhpcy0+c2V0X2F1dGhvcml0eSgkcGFyc2VkWydhdXRob3JpdHknXSkKCQkJJiYgJHRoaXMtPnNldF9wYXRoKCRwYXJzZWRbJ3BhdGgnXSkKCQkJJiYgJHRoaXMtPnNldF9xdWVyeSgkcGFyc2VkWydxdWVyeSddKQoJCQkmJiAkdGhpcy0+c2V0X2ZyYWdtZW50KCRwYXJzZWRbJ2ZyYWdtZW50J10pOwoKCQkkY2FjaGVbJGlyaV0gPSBhcnJheSgkdGhpcy0+c2NoZW1lLAoJCQkJCQkJICR0aGlzLT5pdXNlcmluZm8sCgkJCQkJCQkgJHRoaXMtPmlob3N0LAoJCQkJCQkJICR0aGlzLT5wb3J0LAoJCQkJCQkJICR0aGlzLT5pcGF0aCwKCQkJCQkJCSAkdGhpcy0+aXF1ZXJ5LAoJCQkJCQkJICR0aGlzLT5pZnJhZ21lbnQsCgkJCQkJCQkgJHJldHVybik7CgkJcmV0dXJuICRyZXR1cm47Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHNjaGVtZS4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUgKGlmIHRoZXJlIGFyZQoJICogYW55IGludmFsaWQgY2hhcmFjdGVycykuCgkgKgoJICogQHBhcmFtIHN0cmluZyAkc2NoZW1lCgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9zY2hlbWUoJHNjaGVtZSkKCXsKCQlpZiAoJHNjaGVtZSA9PT0gbnVsbCkKCQl7CgkJCSR0aGlzLT5zY2hlbWUgPSBudWxsOwoJCX0KCQllbHNlaWYgKCFwcmVnX21hdGNoKCcvXltBLVphLXpdWzAtOUEtWmEteitcLS5dKiQvJywgJHNjaGVtZSkpCgkJewoJCQkkdGhpcy0+c2NoZW1lID0gbnVsbDsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c2NoZW1lID0gc3RydG9sb3dlcigkc2NoZW1lKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGF1dGhvcml0eS4gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUgKGlmIHRoZXJlIGFyZQoJICogYW55IGludmFsaWQgY2hhcmFjdGVycykuCgkgKgoJICogQHBhcmFtIHN0cmluZyAkYXV0aG9yaXR5CgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9hdXRob3JpdHkoJGF1dGhvcml0eSwgJGNsZWFyX2NhY2hlID0gZmFsc2UpCgl7CgkJc3RhdGljICRjYWNoZTsKCQlpZiAoJGNsZWFyX2NhY2hlKQoJCXsKCQkJJGNhY2hlID0gbnVsbDsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoISRjYWNoZSkKCQkJJGNhY2hlID0gYXJyYXkoKTsKCgkJaWYgKCRhdXRob3JpdHkgPT09IG51bGwpCgkJewoJCQkkdGhpcy0+aXVzZXJpbmZvID0gbnVsbDsKCQkJJHRoaXMtPmlob3N0ID0gbnVsbDsKCQkJJHRoaXMtPnBvcnQgPSBudWxsOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZWlmIChpc3NldCgkY2FjaGVbJGF1dGhvcml0eV0pKQoJCXsKCQkJbGlzdCgkdGhpcy0+aXVzZXJpbmZvLAoJCQkJICR0aGlzLT5paG9zdCwKCQkJCSAkdGhpcy0+cG9ydCwKCQkJCSAkcmV0dXJuKSA9ICRjYWNoZVskYXV0aG9yaXR5XTsKCgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCgkJJHJlbWFpbmluZyA9ICRhdXRob3JpdHk7CgkJaWYgKCgkaXVzZXJpbmZvX2VuZCA9IHN0cnJwb3MoJHJlbWFpbmluZywgJ0AnKSkgIT09IGZhbHNlKQoJCXsKCQkJJGl1c2VyaW5mbyA9IHN1YnN0cigkcmVtYWluaW5nLCAwLCAkaXVzZXJpbmZvX2VuZCk7CgkJCSRyZW1haW5pbmcgPSBzdWJzdHIoJHJlbWFpbmluZywgJGl1c2VyaW5mb19lbmQgKyAxKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGl1c2VyaW5mbyA9IG51bGw7CgkJfQoJCWlmICgoJHBvcnRfc3RhcnQgPSBzdHJwb3MoJHJlbWFpbmluZywgJzonLCBzdHJwb3MoJHJlbWFpbmluZywgJ10nKSkpICE9PSBmYWxzZSkKCQl7CgkJCWlmICgoJHBvcnQgPSBzdWJzdHIoJHJlbWFpbmluZywgJHBvcnRfc3RhcnQgKyAxKSkgPT09IGZhbHNlKQoJCQl7CgkJCQkkcG9ydCA9IG51bGw7CgkJCX0KCQkJJHJlbWFpbmluZyA9IHN1YnN0cigkcmVtYWluaW5nLCAwLCAkcG9ydF9zdGFydCk7CgkJfQoJCWVsc2UKCQl7CgkJCSRwb3J0ID0gbnVsbDsKCQl9CgoJCSRyZXR1cm4gPSAkdGhpcy0+c2V0X3VzZXJpbmZvKCRpdXNlcmluZm8pICYmCgkJCQkgICR0aGlzLT5zZXRfaG9zdCgkcmVtYWluaW5nKSAmJgoJCQkJICAkdGhpcy0+c2V0X3BvcnQoJHBvcnQpOwoKCQkkY2FjaGVbJGF1dGhvcml0eV0gPSBhcnJheSgkdGhpcy0+aXVzZXJpbmZvLAoJCQkJCQkJCSAgICR0aGlzLT5paG9zdCwKCQkJCQkJCQkgICAkdGhpcy0+cG9ydCwKCQkJCQkJCQkgICAkcmV0dXJuKTsKCgkJcmV0dXJuICRyZXR1cm47Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGl1c2VyaW5mby4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRpdXNlcmluZm8KCSAqIEByZXR1cm4gYm9vbAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3VzZXJpbmZvKCRpdXNlcmluZm8pCgl7CgkJaWYgKCRpdXNlcmluZm8gPT09IG51bGwpCgkJewoJCQkkdGhpcy0+aXVzZXJpbmZvID0gbnVsbDsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPml1c2VyaW5mbyA9ICR0aGlzLT5yZXBsYWNlX2ludmFsaWRfd2l0aF9wY3RfZW5jb2RpbmcoJGl1c2VyaW5mbywgJyEkJlwnKCkqKyw7PTonKTsKCQkJJHRoaXMtPnNjaGVtZV9ub3JtYWxpemF0aW9uKCk7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKioKCSAqIFNldCB0aGUgaWhvc3QuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlIChpZiB0aGVyZSBhcmUKCSAqIGFueSBpbnZhbGlkIGNoYXJhY3RlcnMpLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGlob3N0CgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9ob3N0KCRpaG9zdCkKCXsKCQlpZiAoJGlob3N0ID09PSBudWxsKQoJCXsKCQkJJHRoaXMtPmlob3N0ID0gbnVsbDsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCWVsc2VpZiAoc3Vic3RyKCRpaG9zdCwgMCwgMSkgPT09ICdbJyAmJiBzdWJzdHIoJGlob3N0LCAtMSkgPT09ICddJykKCQl7CgkJCWlmIChTaW1wbGVQaWVfTmV0X0lQdjY6OmNoZWNrX2lwdjYoc3Vic3RyKCRpaG9zdCwgMSwgLTEpKSkKCQkJewoJCQkJJHRoaXMtPmlob3N0ID0gJ1snIC4gU2ltcGxlUGllX05ldF9JUHY2Ojpjb21wcmVzcyhzdWJzdHIoJGlob3N0LCAxLCAtMSkpIC4gJ10nOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRoaXMtPmlob3N0ID0gbnVsbDsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkaWhvc3QgPSAkdGhpcy0+cmVwbGFjZV9pbnZhbGlkX3dpdGhfcGN0X2VuY29kaW5nKCRpaG9zdCwgJyEkJlwnKCkqKyw7PScpOwoKCQkJLy8gTG93ZXJjYXNlLCBidXQgaWdub3JlIHBjdC1lbmNvZGVkIHNlY3Rpb25zIChhcyB0aGV5IHNob3VsZAoJCQkvLyByZW1haW4gdXBwZXJjYXNlKS4gVGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgdGhlIHByZXZpb3VzIHN0ZXAKCQkJLy8gYXMgdGhhdCBjYW4gYWRkIHVuZXNjYXBlZCBjaGFyYWN0ZXJzLgoJCQkkcG9zaXRpb24gPSAwOwoJCQkkc3RybGVuID0gc3RybGVuKCRpaG9zdCk7CgkJCXdoaWxlICgoJHBvc2l0aW9uICs9IHN0cmNzcG4oJGlob3N0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVolJywgJHBvc2l0aW9uKSkgPCAkc3RybGVuKQoJCQl7CgkJCQlpZiAoJGlob3N0WyRwb3NpdGlvbl0gPT09ICclJykKCQkJCXsKCQkJCQkkcG9zaXRpb24gKz0gMzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkaWhvc3RbJHBvc2l0aW9uXSA9IHN0cnRvbG93ZXIoJGlob3N0WyRwb3NpdGlvbl0pOwoJCQkJCSRwb3NpdGlvbisrOwoJCQkJfQoJCQl9CgoJCQkkdGhpcy0+aWhvc3QgPSAkaWhvc3Q7CgkJfQoKCQkkdGhpcy0+c2NoZW1lX25vcm1hbGl6YXRpb24oKTsKCgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHBvcnQuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlIChpZiB0aGVyZSBhcmUKCSAqIGFueSBpbnZhbGlkIGNoYXJhY3RlcnMpLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJHBvcnQKCSAqIEByZXR1cm4gYm9vbAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3BvcnQoJHBvcnQpCgl7CgkJaWYgKCRwb3J0ID09PSBudWxsKQoJCXsKCQkJJHRoaXMtPnBvcnQgPSBudWxsOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZWlmIChzdHJzcG4oJHBvcnQsICcwMTIzNDU2Nzg5JykgPT09IHN0cmxlbigkcG9ydCkpCgkJewoJCQkkdGhpcy0+cG9ydCA9IChpbnQpICRwb3J0OwoJCQkkdGhpcy0+c2NoZW1lX25vcm1hbGl6YXRpb24oKTsKCQkJcmV0dXJuIHRydWU7CgkJfQoKCQkkdGhpcy0+cG9ydCA9IG51bGw7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogU2V0IHRoZSBpcGF0aC4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRpcGF0aAoJICogQHJldHVybiBib29sCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRfcGF0aCgkaXBhdGgsICRjbGVhcl9jYWNoZSA9IGZhbHNlKQoJewoJCXN0YXRpYyAkY2FjaGU7CgkJaWYgKCRjbGVhcl9jYWNoZSkKCQl7CgkJCSRjYWNoZSA9IG51bGw7CgkJCXJldHVybjsKCQl9CgkJaWYgKCEkY2FjaGUpCgkJewoJCQkkY2FjaGUgPSBhcnJheSgpOwoJCX0KCgkJJGlwYXRoID0gKHN0cmluZykgJGlwYXRoOwoKCQlpZiAoaXNzZXQoJGNhY2hlWyRpcGF0aF0pKQoJCXsKCQkJJHRoaXMtPmlwYXRoID0gJGNhY2hlWyRpcGF0aF1bKGludCkgKCR0aGlzLT5zY2hlbWUgIT09IG51bGwpXTsKCQl9CgkJZWxzZQoJCXsKCQkJJHZhbGlkID0gJHRoaXMtPnJlcGxhY2VfaW52YWxpZF93aXRoX3BjdF9lbmNvZGluZygkaXBhdGgsICchJCZcJygpKissOz1AOi8nKTsKCQkJJHJlbW92ZWQgPSAkdGhpcy0+cmVtb3ZlX2RvdF9zZWdtZW50cygkdmFsaWQpOwoKCQkJJGNhY2hlWyRpcGF0aF0gPSBhcnJheSgkdmFsaWQsICRyZW1vdmVkKTsKCQkJJHRoaXMtPmlwYXRoID0gICgkdGhpcy0+c2NoZW1lICE9PSBudWxsKSA/ICRyZW1vdmVkIDogJHZhbGlkOwoJCX0KCgkJJHRoaXMtPnNjaGVtZV9ub3JtYWxpemF0aW9uKCk7CgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGlxdWVyeS4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRpcXVlcnkKCSAqIEByZXR1cm4gYm9vbAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3F1ZXJ5KCRpcXVlcnkpCgl7CgkJaWYgKCRpcXVlcnkgPT09IG51bGwpCgkJewoJCQkkdGhpcy0+aXF1ZXJ5ID0gbnVsbDsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPmlxdWVyeSA9ICR0aGlzLT5yZXBsYWNlX2ludmFsaWRfd2l0aF9wY3RfZW5jb2RpbmcoJGlxdWVyeSwgJyEkJlwnKCkqKyw7PTpALz8nLCB0cnVlKTsKCQkJJHRoaXMtPnNjaGVtZV9ub3JtYWxpemF0aW9uKCk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCS8qKgoJICogU2V0IHRoZSBpZnJhZ21lbnQuCgkgKgoJICogQHBhcmFtIHN0cmluZyAkaWZyYWdtZW50CgkgKiBAcmV0dXJuIGJvb2wKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldF9mcmFnbWVudCgkaWZyYWdtZW50KQoJewoJCWlmICgkaWZyYWdtZW50ID09PSBudWxsKQoJCXsKCQkJJHRoaXMtPmlmcmFnbWVudCA9IG51bGw7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5pZnJhZ21lbnQgPSAkdGhpcy0+cmVwbGFjZV9pbnZhbGlkX3dpdGhfcGN0X2VuY29kaW5nKCRpZnJhZ21lbnQsICchJCZcJygpKissOz06QC8/Jyk7CgkJCSR0aGlzLT5zY2hlbWVfbm9ybWFsaXphdGlvbigpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKioKCSAqIENvbnZlcnQgYW4gSVJJIHRvIGEgVVJJIChvciBwYXJ0cyB0aGVyZW9mKQoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0b191cmkoJHN0cmluZykKCXsKCQlzdGF0aWMgJG5vbl9hc2NpaTsKCQlpZiAoISRub25fYXNjaWkpCgkJewoJCQkkbm9uX2FzY2lpID0gaW1wbG9kZSgnJywgcmFuZ2UoIlx4ODAiLCAiXHhGRiIpKTsKCQl9CgoJCSRwb3NpdGlvbiA9IDA7CgkJJHN0cmxlbiA9IHN0cmxlbigkc3RyaW5nKTsKCQl3aGlsZSAoKCRwb3NpdGlvbiArPSBzdHJjc3BuKCRzdHJpbmcsICRub25fYXNjaWksICRwb3NpdGlvbikpIDwgJHN0cmxlbikKCQl7CgkJCSRzdHJpbmcgPSBzdWJzdHJfcmVwbGFjZSgkc3RyaW5nLCBzcHJpbnRmKCclJSUwMlgnLCBvcmQoJHN0cmluZ1skcG9zaXRpb25dKSksICRwb3NpdGlvbiwgMSk7CgkJCSRwb3NpdGlvbiArPSAzOwoJCQkkc3RybGVuICs9IDI7CgkJfQoKCQlyZXR1cm4gJHN0cmluZzsKCX0KCgkvKioKCSAqIEdldCB0aGUgY29tcGxldGUgSVJJCgkgKgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9pcmkoKQoJewoJCWlmICghJHRoaXMtPmlzX3ZhbGlkKCkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQkkaXJpID0gJyc7CgkJaWYgKCR0aGlzLT5zY2hlbWUgIT09IG51bGwpCgkJewoJCQkkaXJpIC49ICR0aGlzLT5zY2hlbWUgLiAnOic7CgkJfQoJCWlmICgoJGlhdXRob3JpdHkgPSAkdGhpcy0+Z2V0X2lhdXRob3JpdHkoKSkgIT09IG51bGwpCgkJewoJCQkkaXJpIC49ICcvLycgLiAkaWF1dGhvcml0eTsKCQl9CgkJaWYgKCR0aGlzLT5pcGF0aCAhPT0gJycpCgkJewoJCQkkaXJpIC49ICR0aGlzLT5pcGF0aDsKCQl9CiAgICAgICAgZWxzZWlmICghZW1wdHkoJHRoaXMtPm5vcm1hbGl6YXRpb25bJHRoaXMtPnNjaGVtZV1bJ2lwYXRoJ10pICYmICRpYXV0aG9yaXR5ICE9PSBudWxsICYmICRpYXV0aG9yaXR5ICE9PSAnJykKCQl7CgkJCSRpcmkgLj0gJHRoaXMtPm5vcm1hbGl6YXRpb25bJHRoaXMtPnNjaGVtZV1bJ2lwYXRoJ107CgkJfQoJCWlmICgkdGhpcy0+aXF1ZXJ5ICE9PSBudWxsKQoJCXsKCQkJJGlyaSAuPSAnPycgLiAkdGhpcy0+aXF1ZXJ5OwoJCX0KCQlpZiAoJHRoaXMtPmlmcmFnbWVudCAhPT0gbnVsbCkKCQl7CgkJCSRpcmkgLj0gJyMnIC4gJHRoaXMtPmlmcmFnbWVudDsKCQl9CgoJCXJldHVybiAkaXJpOwoJfQoKCS8qKgoJICogR2V0IHRoZSBjb21wbGV0ZSBVUkkKCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3VyaSgpCgl7CgkJcmV0dXJuICR0aGlzLT50b191cmkoJHRoaXMtPmdldF9pcmkoKSk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGNvbXBsZXRlIGlhdXRob3JpdHkKCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0X2lhdXRob3JpdHkoKQoJewoJCWlmICgkdGhpcy0+aXVzZXJpbmZvICE9PSBudWxsIHx8ICR0aGlzLT5paG9zdCAhPT0gbnVsbCB8fCAkdGhpcy0+cG9ydCAhPT0gbnVsbCkKCQl7CgkJCSRpYXV0aG9yaXR5ID0gJyc7CgkJCWlmICgkdGhpcy0+aXVzZXJpbmZvICE9PSBudWxsKQoJCQl7CgkJCQkkaWF1dGhvcml0eSAuPSAkdGhpcy0+aXVzZXJpbmZvIC4gJ0AnOwoJCQl9CgkJCWlmICgkdGhpcy0+aWhvc3QgIT09IG51bGwpCgkJCXsKCQkJCSRpYXV0aG9yaXR5IC49ICR0aGlzLT5paG9zdDsKCQkJfQogICAgICAgICAgICBpZiAoJHRoaXMtPnBvcnQgIT09IG51bGwgJiYgJHRoaXMtPnBvcnQgIT09IDApCgkJCXsKCQkJCSRpYXV0aG9yaXR5IC49ICc6JyAuICR0aGlzLT5wb3J0OwoJCQl9CgkJCXJldHVybiAkaWF1dGhvcml0eTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBjb21wbGV0ZSBhdXRob3JpdHkKCSAqCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0X2F1dGhvcml0eSgpCgl7CgkJJGlhdXRob3JpdHkgPSAkdGhpcy0+Z2V0X2lhdXRob3JpdHkoKTsKCQlpZiAoaXNfc3RyaW5nKCRpYXV0aG9yaXR5KSkKCQkJcmV0dXJuICR0aGlzLT50b191cmkoJGlhdXRob3JpdHkpOwoKCQlyZXR1cm4gJGlhdXRob3JpdHk7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Item.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogTWFuYWdlcyBhbGwgaXRlbS1yZWxhdGVkIGRhdGEKICoKICogVXNlZCBieSB7QHNlZSBTaW1wbGVQaWU6OmdldF9pdGVtKCl9IGFuZCB7QHNlZSBTaW1wbGVQaWU6OmdldF9pdGVtcygpfQogKgogKiBUaGlzIGNsYXNzIGNhbiBiZSBvdmVybG9hZGVkIHdpdGgge0BzZWUgU2ltcGxlUGllOjpzZXRfaXRlbV9jbGFzcygpfQogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgQVBJCiAqLwpjbGFzcyBTaW1wbGVQaWVfSXRlbQp7CgkvKioKCSAqIFBhcmVudCBmZWVkCgkgKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAdmFyIFNpbXBsZVBpZQoJICovCgl2YXIgJGZlZWQ7CgoJLyoqCgkgKiBSYXcgZGF0YQoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBhcnJheQoJICovCgl2YXIgJGRhdGEgPSBhcnJheSgpOwoKCS8qKgoJICogUmVnaXN0cnkgb2JqZWN0CgkgKgoJICogQHNlZSBzZXRfcmVnaXN0cnkKCSAqIEB2YXIgU2ltcGxlUGllX1JlZ2lzdHJ5CgkgKi8KCXByb3RlY3RlZCAkcmVnaXN0cnk7CgoJLyoqCgkgKiBDcmVhdGUgYSBuZXcgaXRlbSBvYmplY3QKCSAqCgkgKiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBieSB7QHNlZSBTaW1wbGVQaWU6OmdldF9pdGVtc30gYW5kCgkgKiB7QHNlZSBTaW1wbGVQaWU6OmdldF9pdGVtfS4gQXZvaWQgY3JlYXRpbmcgdGhpcyBtYW51YWxseS4KCSAqCgkgKiBAcGFyYW0gU2ltcGxlUGllICRmZWVkIFBhcmVudCBmZWVkCgkgKiBAcGFyYW0gYXJyYXkgJGRhdGEgUmF3IGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmZWVkLCAkZGF0YSkKCXsKCQkkdGhpcy0+ZmVlZCA9ICRmZWVkOwoJCSR0aGlzLT5kYXRhID0gJGRhdGE7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHJlZ2lzdHJ5IGhhbmRsZXIKCSAqCgkgKiBUaGlzIGlzIHVzdWFsbHkgdXNlZCBieSB7QHNlZSBTaW1wbGVQaWVfUmVnaXN0cnk6OmNyZWF0ZX0KCSAqCgkgKiBAc2luY2UgMS4zCgkgKiBAcGFyYW0gU2ltcGxlUGllX1JlZ2lzdHJ5ICRyZWdpc3RyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3JlZ2lzdHJ5KFNpbXBsZVBpZV9SZWdpc3RyeSAkcmVnaXN0cnkpCgl7CgkJJHRoaXMtPnJlZ2lzdHJ5ID0gJHJlZ2lzdHJ5OwoJfQoKCS8qKgoJICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpdGVtCgkgKgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQoJewoJCXJldHVybiBtZDUoc2VyaWFsaXplKCR0aGlzLT5kYXRhKSk7Cgl9CgoJLyoqCgkgKiBSZW1vdmUgaXRlbXMgdGhhdCBsaW5rIGJhY2sgdG8gdGhpcyBiZWZvcmUgZGVzdHJveWluZyB0aGlzIG9iamVjdAoJICovCglwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCgl7CgkJaWYgKCFnY19lbmFibGVkKCkpCgkJewoJCQl1bnNldCgkdGhpcy0+ZmVlZCk7CgkJfQoJfQoKCS8qKgoJICogR2V0IGRhdGEgZm9yIGFuIGl0ZW0tbGV2ZWwgZWxlbWVudAoJICoKCSAqIFRoaXMgbWV0aG9kIGFsbG93cyB5b3UgdG8gZ2V0IGFjY2VzcyB0byBBTlkgZWxlbWVudC9hdHRyaWJ1dGUgdGhhdCBpcyBhCgkgKiBzdWItZWxlbWVudCBvZiB0aGUgaXRlbS9lbnRyeSB0YWcuCgkgKgoJICogU2VlIHtAc2VlIFNpbXBsZVBpZTo6Z2V0X2ZlZWRfdGFncygpfSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgcmV0dXJuIHZhbHVlCgkgKgoJICogQHNpbmNlIDEuMAoJICogQHNlZSBodHRwOi8vc2ltcGxlcGllLm9yZy93aWtpL2ZhcS9zdXBwb3J0ZWRfeG1sX25hbWVzcGFjZXMKCSAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSBUaGUgVVJMIG9mIHRoZSBYTUwgbmFtZXNwYWNlIG9mIHRoZSBlbGVtZW50cyB5b3UncmUgdHJ5aW5nIHRvIGFjY2VzcwoJICogQHBhcmFtIHN0cmluZyAkdGFnIFRhZyBuYW1lCgkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfaXRlbV90YWdzKCRuYW1lc3BhY2UsICR0YWcpCgl7CgkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+ZGF0YVsnY2hpbGQnXVskbmFtZXNwYWNlXVskdGFnXTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBiYXNlIFVSTCB2YWx1ZSBmcm9tIHRoZSBwYXJlbnQgZmVlZAoJICoKCSAqIFVzZXMgYDx4bWw6YmFzZT5gCgkgKgoJICogQHBhcmFtIGFycmF5ICRlbGVtZW50CgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2Jhc2UoJGVsZW1lbnQgPSBhcnJheSgpKQoJewoJCXJldHVybiAkdGhpcy0+ZmVlZC0+Z2V0X2Jhc2UoJGVsZW1lbnQpOwoJfQoKCS8qKgoJICogU2FuaXRpemUgZmVlZCBkYXRhCgkgKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAc2VlIFNpbXBsZVBpZTo6c2FuaXRpemUoKQoJICogQHBhcmFtIHN0cmluZyAkZGF0YSBEYXRhIHRvIHNhbml0aXplCgkgKiBAcGFyYW0gaW50ICR0eXBlIE9uZSBvZiB0aGUgU0lNUExFUElFX0NPTlNUUlVDVF8qIGNvbnN0YW50cwoJICogQHBhcmFtIHN0cmluZyAkYmFzZSBCYXNlIFVSTCB0byByZXNvbHZlIFVSTHMgYWdhaW5zdAoJICogQHJldHVybiBzdHJpbmcgU2FuaXRpemVkIGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNhbml0aXplKCRkYXRhLCAkdHlwZSwgJGJhc2UgPSAnJykKCXsKCQlyZXR1cm4gJHRoaXMtPmZlZWQtPnNhbml0aXplKCRkYXRhLCAkdHlwZSwgJGJhc2UpOwoJfQoKCS8qKgoJICogR2V0IHRoZSBwYXJlbnQgZmVlZAoJICoKCSAqIE5vdGU6IHRoaXMgbWF5IG5vdCB3b3JrIGFzIHlvdSB0aGluayBmb3IgbXVsdGlmZWVkcyEKCSAqCgkgKiBAbGluayBodHRwOi8vc2ltcGxlcGllLm9yZy9mYXEvdHlwaWNhbF9tdWx0aWZlZWRfZ290Y2hhcyNtaXNzaW5nX2RhdGFfZnJvbV9mZWVkCgkgKiBAc2luY2UgMS4wCgkgKiBAcmV0dXJuIFNpbXBsZVBpZQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZlZWQoKQoJewoJCXJldHVybiAkdGhpcy0+ZmVlZDsKCX0KCgkvKioKCSAqIEdldCB0aGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBpdGVtCgkgKgoJICogVGhpcyBpcyB1c3VhbGx5IHVzZWQgd2hlbiB3cml0aW5nIGNvZGUgdG8gY2hlY2sgZm9yIG5ldyBpdGVtcyBpbiBhIGZlZWQuCgkgKgoJICogVXNlcyBgPGF0b206aWQ+YCwgYDxndWlkPmAsIGA8ZGM6aWRlbnRpZmllcj5gIG9yIHRoZSBgYWJvdXRgIGF0dHJpYnV0ZQoJICogZm9yIFJERi4gSWYgbm9uZSBvZiB0aGVzZSBhcmUgc3VwcGxpZWQgKG9yIGAkaGFzaGAgaXMgdHJ1ZSksIGNyZWF0ZXMgYW4KCSAqIE1ENSBoYXNoIGJhc2VkIG9uIHRoZSBwZXJtYWxpbmssIHRpdGxlIGFuZCBjb250ZW50LgoJICoKCSAqIEBzaW5jZSBCZXRhIDIKCSAqIEBwYXJhbSBib29sZWFuICRoYXNoIFNob3VsZCB3ZSBmb3JjZSB1c2luZyBhIGhhc2ggaW5zdGVhZCBvZiB0aGUgc3VwcGxpZWQgSUQ/CgkgKiBAcGFyYW0gc3RyaW5nfGZhbHNlICRmbiBVc2VyLXN1cHBsaWVkIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGFuIGhhc2gKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9pZCgkaGFzaCA9IGZhbHNlLCAkZm4gPSAnbWQ1JykKCXsKCQlpZiAoISRoYXNoKQoJCXsKCQkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdpZCcpKQoJCQl7CgkJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdpZCcpKQoJCQl7CgkJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ2d1aWQnKSkKCQkJewoJCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ2lkZW50aWZpZXInKSkKCQkJewoJCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMCwgJ2lkZW50aWZpZXInKSkKCQkJewoJCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJZWxzZWlmIChpc3NldCgkdGhpcy0+ZGF0YVsnYXR0cmlicyddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfUkRGXVsnYWJvdXQnXSkpCgkJCXsKCQkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHRoaXMtPmRhdGFbJ2F0dHJpYnMnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX1JERl1bJ2Fib3V0J10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQl9CgkJaWYgKCRmbiA9PT0gZmFsc2UpCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJZWxzZWlmICghaXNfY2FsbGFibGUoJGZuKSkKCQl7CgkJCXRyaWdnZXJfZXJyb3IoJ1VzZXItc3VwcGxpZWQgZnVuY3Rpb24gJGZuIG11c3QgYmUgY2FsbGFibGUnLCBFX1VTRVJfV0FSTklORyk7CgkJCSRmbiA9ICdtZDUnOwoJCX0KCQlyZXR1cm4gY2FsbF91c2VyX2Z1bmMoJGZuLAoJCSAgICAgICAkdGhpcy0+Z2V0X3Blcm1hbGluaygpLiR0aGlzLT5nZXRfdGl0bGUoKS4kdGhpcy0+Z2V0X2NvbnRlbnQoKSk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHRpdGxlIG9mIHRoZSBpdGVtCgkgKgoJICogVXNlcyBgPGF0b206dGl0bGU+YCwgYDx0aXRsZT5gIG9yIGA8ZGM6dGl0bGU+YAoJICoKCSAqIEBzaW5jZSBCZXRhIDIgKHByZXZpb3VzbHkgY2FsbGVkIGBnZXRfaXRlbV90aXRsZWAgc2luY2UgMC44KQoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3RpdGxlKCkKCXsKCQlpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyd0aXRsZSddKSkKCQl7CgkJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAndGl0bGUnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ3RpdGxlJ10gPSAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnYXRvbV8xMF9jb25zdHJ1Y3RfdHlwZScsIGFycmF5KCRyZXR1cm5bMF1bJ2F0dHJpYnMnXSkpLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCQl9CgkJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ3RpdGxlJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0aXRsZSddID0gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2F0b21fMDNfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkcmV0dXJuWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMCwgJ3RpdGxlJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0aXRsZSddID0gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCQl9CgkJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCwgJ3RpdGxlJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0aXRsZSddID0gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCQl9CgkJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAndGl0bGUnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ3RpdGxlJ10gPSAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX01BWUJFX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJCX0KCQkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ3RpdGxlJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0aXRsZSddID0gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAndGl0bGUnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ3RpdGxlJ10gPSAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ3RpdGxlJ10gPSBudWxsOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+ZGF0YVsndGl0bGUnXTsKCX0KCgkvKioKCSAqIEdldCB0aGUgY29udGVudCBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBQcmVmZXJzIHN1bW1hcmllcyBvdmVyIGZ1bGwgY29udGVudCAsIGJ1dCB3aWxsIHJldHVybiBmdWxsIGNvbnRlbnQgaWYgYQoJICogc3VtbWFyeSBkb2VzIG5vdCBleGlzdC4KCSAqCgkgKiBUbyBwcmVmZXIgZnVsbCBjb250ZW50IGluc3RlYWQsIHVzZSB7QHNlZSBnZXRfY29udGVudH0KCSAqCgkgKiBVc2VzIGA8YXRvbTpzdW1tYXJ5PmAsIGA8ZGVzY3JpcHRpb24+YCwgYDxkYzpkZXNjcmlwdGlvbj5gIG9yCgkgKiBgPGl0dW5lczpzdWJ0aXRsZT5gCgkgKgoJICogQHNpbmNlIDAuOAoJICogQHBhcmFtIGJvb2xlYW4gJGRlc2NyaXB0aW9uX29ubHkgU2hvdWxkIHdlIGF2b2lkIGZhbGxpbmcgYmFjayB0byB0aGUgY29udGVudD8KCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigkZGVzY3JpcHRpb25fb25seSA9IGZhbHNlKQoJewoJCWlmICgoJHRhZ3MgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdzdW1tYXJ5JykpICYmCgkJICAgICgkcmV0dXJuID0gJHRoaXMtPnNhbml0aXplKCR0YWdzWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzEwX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHRhZ3NbMF1bJ2F0dHJpYnMnXSkpLCAkdGhpcy0+Z2V0X2Jhc2UoJHRhZ3NbMF0pKSkpCgkJewoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgkJZWxzZWlmICgoJHRhZ3MgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdzdW1tYXJ5JykpICYmCgkJICAgICAgICAoJHJldHVybiA9ICR0aGlzLT5zYW5pdGl6ZSgkdGFnc1swXVsnZGF0YSddLCAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnYXRvbV8wM19jb25zdHJ1Y3RfdHlwZScsIGFycmF5KCR0YWdzWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCR0YWdzWzBdKSkpKQoJCXsKCQkJcmV0dXJuICRyZXR1cm47CgkJfQoJCWVsc2VpZiAoKCR0YWdzID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTAsICdkZXNjcmlwdGlvbicpKSAmJgoJCSAgICAgICAgKCRyZXR1cm4gPSAkdGhpcy0+c2FuaXRpemUoJHRhZ3NbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHRhZ3NbMF0pKSkpCgkJewoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgkJZWxzZWlmICgoJHRhZ3MgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ2Rlc2NyaXB0aW9uJykpICYmCgkJICAgICAgICAoJHJldHVybiA9ICR0aGlzLT5zYW5pdGl6ZSgkdGFnc1swXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkdGFnc1swXSkpKSkKCQl7CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQllbHNlaWYgKCgkdGFncyA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTEsICdkZXNjcmlwdGlvbicpKSAmJgoJCSAgICAgICAgKCRyZXR1cm4gPSAkdGhpcy0+c2FuaXRpemUoJHRhZ3NbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKSkpCgkJewoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgkJZWxzZWlmICgoJHRhZ3MgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAnZGVzY3JpcHRpb24nKSkgJiYKCQkgICAgICAgICgkcmV0dXJuID0gJHRoaXMtPnNhbml0aXplKCR0YWdzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCkpKQoJCXsKCQkJcmV0dXJuICRyZXR1cm47CgkJfQoJCWVsc2VpZiAoKCR0YWdzID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdzdW1tYXJ5JykpICYmCgkJICAgICAgICAoJHJldHVybiA9ICR0aGlzLT5zYW5pdGl6ZSgkdGFnc1swXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkdGFnc1swXSkpKSkKCQl7CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQllbHNlaWYgKCgkdGFncyA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfSVRVTkVTLCAnc3VidGl0bGUnKSkgJiYKCQkgICAgICAgICgkcmV0dXJuID0gJHRoaXMtPnNhbml0aXplKCR0YWdzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCkpKQoJCXsKCQkJcmV0dXJuICRyZXR1cm47CgkJfQoJCWVsc2VpZiAoKCR0YWdzID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMDkwLCAnZGVzY3JpcHRpb24nKSkgJiYKCQkgICAgICAgICgkcmV0dXJuID0gJHRoaXMtPnNhbml0aXplKCR0YWdzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSFRNTCkpKQoJCXsKCQkJcmV0dXJuICRyZXR1cm47CgkJfQoKCQllbHNlaWYgKCEkZGVzY3JpcHRpb25fb25seSkKCQl7CgkJCXJldHVybiAkdGhpcy0+Z2V0X2NvbnRlbnQodHJ1ZSk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgY29udGVudCBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBQcmVmZXJzIGZ1bGwgY29udGVudCBvdmVyIHN1bW1hcmllcywgYnV0IHdpbGwgcmV0dXJuIGEgc3VtbWFyeSBpZiBmdWxsCgkgKiBjb250ZW50IGRvZXMgbm90IGV4aXN0LgoJICoKCSAqIFRvIHByZWZlciBzdW1tYXJpZXMgaW5zdGVhZCwgdXNlIHtAc2VlIGdldF9kZXNjcmlwdGlvbn0KCSAqCgkgKiBVc2VzIGA8YXRvbTpjb250ZW50PmAgb3IgYDxjb250ZW50OmVuY29kZWQ+YCAoUlNTIDEuMCBDb250ZW50IE1vZHVsZSkKCSAqCgkgKiBAc2luY2UgMS4wCgkgKiBAcGFyYW0gYm9vbGVhbiAkY29udGVudF9vbmx5IFNob3VsZCB3ZSBhdm9pZCBmYWxsaW5nIGJhY2sgdG8gdGhlIGRlc2NyaXB0aW9uPwoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbnRlbnQoJGNvbnRlbnRfb25seSA9IGZhbHNlKQoJewoJCWlmICgoJHRhZ3MgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdjb250ZW50JykpICYmCgkJICAgICgkcmV0dXJuID0gJHRoaXMtPnNhbml0aXplKCR0YWdzWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzEwX2NvbnRlbnRfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkdGFnc1swXVsnYXR0cmlicyddKSksICR0aGlzLT5nZXRfYmFzZSgkdGFnc1swXSkpKSkKCQl7CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQllbHNlaWYgKCgkdGFncyA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ2NvbnRlbnQnKSkgJiYKCQkgICAgICAgICgkcmV0dXJuID0gJHRoaXMtPnNhbml0aXplKCR0YWdzWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzAzX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHRhZ3NbMF1bJ2F0dHJpYnMnXSkpLCAkdGhpcy0+Z2V0X2Jhc2UoJHRhZ3NbMF0pKSkpCgkJewoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgkJZWxzZWlmICgoJHRhZ3MgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMF9NT0RVTEVTX0NPTlRFTlQsICdlbmNvZGVkJykpICYmCgkJICAgICAgICAoJHJldHVybiA9ICR0aGlzLT5zYW5pdGl6ZSgkdGFnc1swXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkdGFnc1swXSkpKSkKCQl7CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQllbHNlaWYgKCEkY29udGVudF9vbmx5KQoJCXsKCQkJcmV0dXJuICR0aGlzLT5nZXRfZGVzY3JpcHRpb24odHJ1ZSk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgbWVkaWE6dGh1bWJuYWlsIG9mIHRoZSBpdGVtCgkgKgoJICogVXNlcyBgPG1lZGlhOnRodW1ibmFpbD5gCgkgKgoJICoKCSAqIEByZXR1cm4gYXJyYXl8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3RodW1ibmFpbCgpCgl7CgkJaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVsndGh1bWJuYWlsJ10pKQoJCXsKCQkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAndGh1bWJuYWlsJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd0aHVtYm5haWwnXSA9ICRyZXR1cm5bMF1bJ2F0dHJpYnMnXVsnJ107CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsndGh1bWJuYWlsJ10gPSBudWxsOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+ZGF0YVsndGh1bWJuYWlsJ107Cgl9CgoJLyoqCgkgKiBHZXQgYSBjYXRlZ29yeSBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBAc2luY2UgQmV0YSAzIChwcmV2aW91c2x5IGNhbGxlZCBgZ2V0X2NhdGVnb3JpZXMoKWAgc2luY2UgQmV0YSAyKQoJICogQHBhcmFtIGludCAka2V5IFRoZSBjYXRlZ29yeSB0aGF0IHlvdSB3YW50IHRvIHJldHVybi4gIFJlbWVtYmVyIHRoYXQgYXJyYXlzIGJlZ2luIHdpdGggMCwgbm90IDEKCSAqIEByZXR1cm4gU2ltcGxlUGllX0NhdGVnb3J5fG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9jYXRlZ29yeSgka2V5ID0gMCkKCXsKCQkkY2F0ZWdvcmllcyA9ICR0aGlzLT5nZXRfY2F0ZWdvcmllcygpOwoJCWlmIChpc3NldCgkY2F0ZWdvcmllc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGNhdGVnb3JpZXNbJGtleV07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhbGwgY2F0ZWdvcmllcyBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBVc2VzIGA8YXRvbTpjYXRlZ29yeT5gLCBgPGNhdGVnb3J5PmAgb3IgYDxkYzpzdWJqZWN0PmAKCSAqCgkgKiBAc2luY2UgQmV0YSAzCgkgKiBAcmV0dXJuIFNpbXBsZVBpZV9DYXRlZ29yeVtdfG51bGwgTGlzdCBvZiB7QHNlZSBTaW1wbGVQaWVfQ2F0ZWdvcnl9IG9iamVjdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9jYXRlZ29yaWVzKCkKCXsKCQkkY2F0ZWdvcmllcyA9IGFycmF5KCk7CgoJCSR0eXBlID0gJ2NhdGVnb3J5JzsKCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJHR5cGUpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSR0ZXJtID0gbnVsbDsKCQkJJHNjaGVtZSA9IG51bGw7CgkJCSRsYWJlbCA9IG51bGw7CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3Rlcm0nXSkpCgkJCXsKCQkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsndGVybSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJewoJCQkJJHNjaGVtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10pKQoJCQl7CgkJCQkkbGFiZWwgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydsYWJlbCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGVybSwgJHNjaGVtZSwgJGxhYmVsLCAkdHlwZSkpOwoJCX0KCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAkdHlwZSkgYXMgJGNhdGVnb3J5KQoJCXsKCQkJLy8gVGhpcyBpcyByZWFsbHkgdGhlIGxhYmVsLCBidXQga2VlcCB0aGlzIGFzIHRoZSB0ZXJtIGFsc28gZm9yIEJDLgoJCQkvLyBMYWJlbCB3aWxsIGFsc28gd29yayBvbiByZXRyaWV2aW5nIGJlY2F1c2UgdGhhdCBmYWxscyBiYWNrIHRvIHRlcm0uCgkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQlpZiAoaXNzZXQoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydkb21haW4nXSkpCgkJCXsKCQkJCSRzY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydkb21haW4nXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRzY2hlbWUgPSBudWxsOwoJCQl9CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGVybSwgJHNjaGVtZSwgbnVsbCwgJHR5cGUpKTsKCQl9CgoJCSR0eXBlID0gJ3N1YmplY3QnOwoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJHR5cGUpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCksIG51bGwsIG51bGwsICR0eXBlKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMCwgJHR5cGUpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCksIG51bGwsIG51bGwsICR0eXBlKSk7CgkJfQoKCQlpZiAoIWVtcHR5KCRjYXRlZ29yaWVzKSkKCQl7CgkJCXJldHVybiBhcnJheV91bmlxdWUoJGNhdGVnb3JpZXMpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYW4gYXV0aG9yIGZvciB0aGUgaXRlbQoJICoKCSAqIEBzaW5jZSBCZXRhIDIKCSAqIEBwYXJhbSBpbnQgJGtleSBUaGUgYXV0aG9yIHRoYXQgeW91IHdhbnQgdG8gcmV0dXJuLiAgUmVtZW1iZXIgdGhhdCBhcnJheXMgYmVnaW4gd2l0aCAwLCBub3QgMQoJICogQHJldHVybiBTaW1wbGVQaWVfQXV0aG9yfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9hdXRob3IoJGtleSA9IDApCgl7CgkJJGF1dGhvcnMgPSAkdGhpcy0+Z2V0X2F1dGhvcnMoKTsKCQlpZiAoaXNzZXQoJGF1dGhvcnNbJGtleV0pKQoJCXsKCQkJcmV0dXJuICRhdXRob3JzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYSBjb250cmlidXRvciBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBAc2luY2UgMS4xCgkgKiBAcGFyYW0gaW50ICRrZXkgVGhlIGNvbnRyYnV0b3IgdGhhdCB5b3Ugd2FudCB0byByZXR1cm4uICBSZW1lbWJlciB0aGF0IGFycmF5cyBiZWdpbiB3aXRoIDAsIG5vdCAxCgkgKiBAcmV0dXJuIFNpbXBsZVBpZV9BdXRob3J8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbnRyaWJ1dG9yKCRrZXkgPSAwKQoJewoJCSRjb250cmlidXRvcnMgPSAkdGhpcy0+Z2V0X2NvbnRyaWJ1dG9ycygpOwoJCWlmIChpc3NldCgkY29udHJpYnV0b3JzWyRrZXldKSkKCQl7CgkJCXJldHVybiAkY29udHJpYnV0b3JzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYWxsIGNvbnRyaWJ1dG9ycyBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBVc2VzIGA8YXRvbTpjb250cmlidXRvcj5gCgkgKgoJICogQHNpbmNlIDEuMQoJICogQHJldHVybiBTaW1wbGVQaWVfQXV0aG9yW118bnVsbCBMaXN0IG9mIHtAc2VlIFNpbXBsZVBpZV9BdXRob3J9IG9iamVjdHMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9jb250cmlidXRvcnMoKQoJewoJCSRjb250cmlidXRvcnMgPSBhcnJheSgpOwoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnY29udHJpYnV0b3InKSBhcyAkY29udHJpYnV0b3IpCgkJewoJCQkkbmFtZSA9IG51bGw7CgkJCSR1cmkgPSBudWxsOwoJCQkkZW1haWwgPSBudWxsOwoJCQlpZiAoaXNzZXQoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ25hbWUnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJG5hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ25hbWUnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsndXJpJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSR1cmkgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdKSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbWFpbCddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkZW1haWwgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ2VtYWlsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoJG5hbWUgIT09IG51bGwgfHwgJGVtYWlsICE9PSBudWxsIHx8ICR1cmkgIT09IG51bGwpCgkJCXsKCQkJCSRjb250cmlidXRvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkbmFtZSwgJHVyaSwgJGVtYWlsKSk7CgkJCX0KCQl9CgkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdjb250cmlidXRvcicpIGFzICRjb250cmlidXRvcikKCQl7CgkJCSRuYW1lID0gbnVsbDsKCQkJJHVybCA9IG51bGw7CgkJCSRlbWFpbCA9IG51bGw7CgkJCWlmIChpc3NldCgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnbmFtZSddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkbmFtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnbmFtZSddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJaWYgKGlzc2V0KCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyd1cmwnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJHVybCA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsndXJsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsndXJsJ11bMF0pKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2VtYWlsJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSRlbWFpbCA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnZW1haWwnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmICgkbmFtZSAhPT0gbnVsbCB8fCAkZW1haWwgIT09IG51bGwgfHwgJHVybCAhPT0gbnVsbCkKCQkJewoJCQkJJGNvbnRyaWJ1dG9yc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0F1dGhvcicsIGFycmF5KCRuYW1lLCAkdXJsLCAkZW1haWwpKTsKCQkJfQoJCX0KCgkJaWYgKCFlbXB0eSgkY29udHJpYnV0b3JzKSkKCQl7CgkJCXJldHVybiBhcnJheV91bmlxdWUoJGNvbnRyaWJ1dG9ycyk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhbGwgYXV0aG9ycyBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBVc2VzIGA8YXRvbTphdXRob3I+YCwgYDxhdXRob3I+YCwgYDxkYzpjcmVhdG9yPmAgb3IgYDxpdHVuZXM6YXV0aG9yPmAKCSAqCgkgKiBAc2luY2UgQmV0YSAyCgkgKiBAcmV0dXJuIFNpbXBsZVBpZV9BdXRob3JbXXxudWxsIExpc3Qgb2Yge0BzZWUgU2ltcGxlUGllX0F1dGhvcn0gb2JqZWN0cwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2F1dGhvcnMoKQoJewoJCSRhdXRob3JzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ2F1dGhvcicpIGFzICRhdXRob3IpCgkJewoJCQkkbmFtZSA9IG51bGw7CgkJCSR1cmkgPSBudWxsOwoJCQkkZW1haWwgPSBudWxsOwoJCQlpZiAoaXNzZXQoJGF1dGhvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyduYW1lJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSRuYW1lID0gJHRoaXMtPnNhbml0aXplKCRhdXRob3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsnbmFtZSddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJaWYgKGlzc2V0KCRhdXRob3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsndXJpJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSR1cmkgPSAkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyd1cmknXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRhdXRob3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsndXJpJ11bMF0pKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGF1dGhvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbWFpbCddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkZW1haWwgPSAkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbWFpbCddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJaWYgKCRuYW1lICE9PSBudWxsIHx8ICRlbWFpbCAhPT0gbnVsbCB8fCAkdXJpICE9PSBudWxsKQoJCQl7CgkJCQkkYXV0aG9yc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0F1dGhvcicsIGFycmF5KCRuYW1lLCAkdXJpLCAkZW1haWwpKTsKCQkJfQoJCX0KCQlpZiAoJGF1dGhvciA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ2F1dGhvcicpKQoJCXsKCQkJJG5hbWUgPSBudWxsOwoJCQkkdXJsID0gbnVsbDsKCQkJJGVtYWlsID0gbnVsbDsKCQkJaWYgKGlzc2V0KCRhdXRob3JbMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnbmFtZSddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkbmFtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ25hbWUnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ3VybCddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkdXJsID0gJHRoaXMtPnNhbml0aXplKCRhdXRob3JbMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsndXJsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ3VybCddWzBdKSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRhdXRob3JbMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnZW1haWwnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJGVtYWlsID0gJHRoaXMtPnNhbml0aXplKCRhdXRob3JbMF1bJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnZW1haWwnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmICgkbmFtZSAhPT0gbnVsbCB8fCAkZW1haWwgIT09IG51bGwgfHwgJHVybCAhPT0gbnVsbCkKCQkJewoJCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkbmFtZSwgJHVybCwgJGVtYWlsKSk7CgkJCX0KCQl9CgkJaWYgKCRhdXRob3IgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ2F1dGhvcicpKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheShudWxsLCBudWxsLCAkdGhpcy0+c2FuaXRpemUoJGF1dGhvclswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ2NyZWF0b3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMCwgJ2NyZWF0b3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdhdXRob3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoKCQlpZiAoIWVtcHR5KCRhdXRob3JzKSkKCQl7CgkJCXJldHVybiBhcnJheV91bmlxdWUoJGF1dGhvcnMpOwoJCX0KCQllbHNlaWYgKCgkc291cmNlID0gJHRoaXMtPmdldF9zb3VyY2UoKSkgJiYgKCRhdXRob3JzID0gJHNvdXJjZS0+Z2V0X2F1dGhvcnMoKSkpCgkJewoJCQlyZXR1cm4gJGF1dGhvcnM7CgkJfQoJCWVsc2VpZiAoJGF1dGhvcnMgPSAkdGhpcy0+ZmVlZC0+Z2V0X2F1dGhvcnMoKSkKCQl7CgkJCXJldHVybiAkYXV0aG9yczsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBjb3B5cmlnaHQgaW5mbyBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBVc2VzIGA8YXRvbTpyaWdodHM+YCBvciBgPGRjOnJpZ2h0cz5gCgkgKgoJICogQHNpbmNlIDEuMQoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9jb3B5cmlnaHQoKQoJewoJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAncmlnaHRzJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2F0b21fMTBfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkcmV0dXJuWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ3JpZ2h0cycpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTAsICdyaWdodHMnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHBvc3RpbmcgZGF0ZS90aW1lIGZvciB0aGUgaXRlbQoJICoKCSAqIFVzZXMgYDxhdG9tOnB1Ymxpc2hlZD5gLCBgPGF0b206dXBkYXRlZD5gLCBgPGF0b206aXNzdWVkPmAsCgkgKiBgPGF0b206bW9kaWZpZWQ+YCwgYDxwdWJEYXRlPmAgb3IgYDxkYzpkYXRlPmAKCSAqCgkgKiBOb3RlOiBvYmV5cyBQSFAncyB0aW1lem9uZSBzZXR0aW5nLiBUbyBnZXQgYSBVVEMgZGF0ZS90aW1lLCB1c2UKCSAqIHtAc2VlIGdldF9nbWRhdGV9CgkgKgoJICogQHNpbmNlIEJldGEgMiAocHJldmlvdXNseSBjYWxsZWQgYGdldF9pdGVtX2RhdGVgIHNpbmNlIDAuOCkKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRkYXRlX2Zvcm1hdCBTdXBwb3J0cyBhbnkgUEhQIGRhdGUgZm9ybWF0IGZyb20ge0BzZWUgaHR0cDovL3BocC5uZXQvZGF0ZX0gKGVtcHR5IGZvciB0aGUgcmF3IGRhdGEpCgkgKiBAcmV0dXJuIGludHxzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2RhdGUoJGRhdGVfZm9ybWF0ID0gJ2ogRiBZLCBnOmkgYScpCgl7CgkJaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVsnZGF0ZSddKSkKCQl7CgkJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAncHVibGlzaGVkJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWydkYXRlJ11bJ3JhdyddID0gJHJldHVyblswXVsnZGF0YSddOwoJCQl9CgkJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAncHViRGF0ZScpKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnZGF0ZSddWydyYXcnXSA9ICRyZXR1cm5bMF1bJ2RhdGEnXTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzExLCAnZGF0ZScpKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnZGF0ZSddWydyYXcnXSA9ICRyZXR1cm5bMF1bJ2RhdGEnXTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAnZGF0ZScpKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnZGF0ZSddWydyYXcnXSA9ICRyZXR1cm5bMF1bJ2RhdGEnXTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICd1cGRhdGVkJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWydkYXRlJ11bJ3JhdyddID0gJHJldHVyblswXVsnZGF0YSddOwoJCQl9CgkJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ2lzc3VlZCcpKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnZGF0ZSddWydyYXcnXSA9ICRyZXR1cm5bMF1bJ2RhdGEnXTsKCQkJfQoJCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdjcmVhdGVkJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWydkYXRlJ11bJ3JhdyddID0gJHJldHVyblswXVsnZGF0YSddOwoJCQl9CgkJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ21vZGlmaWVkJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWydkYXRlJ11bJ3JhdyddID0gJHJldHVyblswXVsnZGF0YSddOwoJCQl9CgoJCQlpZiAoIWVtcHR5KCR0aGlzLT5kYXRhWydkYXRlJ11bJ3JhdyddKSkKCQkJewoJCQkJJHBhcnNlciA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnUGFyc2VfRGF0ZScsICdnZXQnKTsKCQkJCSR0aGlzLT5kYXRhWydkYXRlJ11bJ3BhcnNlZCddID0gJHBhcnNlci0+cGFyc2UoJHRoaXMtPmRhdGFbJ2RhdGUnXVsncmF3J10pOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2RhdGUnXSA9IG51bGw7CgkJCX0KCQl9CgkJaWYgKCR0aGlzLT5kYXRhWydkYXRlJ10pCgkJewoJCQkkZGF0ZV9mb3JtYXQgPSAoc3RyaW5nKSAkZGF0ZV9mb3JtYXQ7CgkJCXN3aXRjaCAoJGRhdGVfZm9ybWF0KQoJCQl7CgkJCQljYXNlICcnOgoJCQkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHRoaXMtPmRhdGFbJ2RhdGUnXVsncmF3J10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgoJCQkJY2FzZSAnVSc6CgkJCQkJcmV0dXJuICR0aGlzLT5kYXRhWydkYXRlJ11bJ3BhcnNlZCddOwoKCQkJCWRlZmF1bHQ6CgkJCQkJcmV0dXJuIGRhdGUoJGRhdGVfZm9ybWF0LCAkdGhpcy0+ZGF0YVsnZGF0ZSddWydwYXJzZWQnXSk7CgkJCX0KCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSB1cGRhdGUgZGF0ZS90aW1lIGZvciB0aGUgaXRlbQoJICoKCSAqIFVzZXMgYDxhdG9tOnVwZGF0ZWQ+YAoJICoKCSAqIE5vdGU6IG9iZXlzIFBIUCdzIHRpbWV6b25lIHNldHRpbmcuIFRvIGdldCBhIFVUQyBkYXRlL3RpbWUsIHVzZQoJICoge0BzZWUgZ2V0X2dtZGF0ZX0KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRkYXRlX2Zvcm1hdCBTdXBwb3J0cyBhbnkgUEhQIGRhdGUgZm9ybWF0IGZyb20ge0BzZWUgaHR0cDovL3BocC5uZXQvZGF0ZX0gKGVtcHR5IGZvciB0aGUgcmF3IGRhdGEpCgkgKiBAcmV0dXJuIGludHxzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3VwZGF0ZWRfZGF0ZSgkZGF0ZV9mb3JtYXQgPSAnaiBGIFksIGc6aSBhJykKCXsKCQlpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyd1cGRhdGVkJ10pKQoJCXsKCQkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICd1cGRhdGVkJykpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWyd1cGRhdGVkJ11bJ3JhdyddID0gJHJldHVyblswXVsnZGF0YSddOwoJCQl9CgoJCQlpZiAoIWVtcHR5KCR0aGlzLT5kYXRhWyd1cGRhdGVkJ11bJ3JhdyddKSkKCQkJewoJCQkJJHBhcnNlciA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnUGFyc2VfRGF0ZScsICdnZXQnKTsKCQkJCSR0aGlzLT5kYXRhWyd1cGRhdGVkJ11bJ3BhcnNlZCddID0gJHBhcnNlci0+cGFyc2UoJHRoaXMtPmRhdGFbJ3VwZGF0ZWQnXVsncmF3J10pOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ3VwZGF0ZWQnXSA9IG51bGw7CgkJCX0KCQl9CgkJaWYgKCR0aGlzLT5kYXRhWyd1cGRhdGVkJ10pCgkJewoJCQkkZGF0ZV9mb3JtYXQgPSAoc3RyaW5nKSAkZGF0ZV9mb3JtYXQ7CgkJCXN3aXRjaCAoJGRhdGVfZm9ybWF0KQoJCQl7CgkJCQljYXNlICcnOgoJCQkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHRoaXMtPmRhdGFbJ3VwZGF0ZWQnXVsncmF3J10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgoJCQkJY2FzZSAnVSc6CgkJCQkJcmV0dXJuICR0aGlzLT5kYXRhWyd1cGRhdGVkJ11bJ3BhcnNlZCddOwoKCQkJCWRlZmF1bHQ6CgkJCQkJcmV0dXJuIGRhdGUoJGRhdGVfZm9ybWF0LCAkdGhpcy0+ZGF0YVsndXBkYXRlZCddWydwYXJzZWQnXSk7CgkJCX0KCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBsb2NhbGl6ZWQgcG9zdGluZyBkYXRlL3RpbWUgZm9yIHRoZSBpdGVtCgkgKgoJICogUmV0dXJucyB0aGUgZGF0ZSBmb3JtYXR0ZWQgaW4gdGhlIGxvY2FsaXplZCBsYW5ndWFnZS4gVG8gZGlzcGxheSBpbgoJICogbGFuZ3VhZ2VzIG90aGVyIHRoYW4gdGhlIHNlcnZlcidzIGRlZmF1bHQsIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgbG9jYWxlCgkgKiB3aXRoIHtAbGluayBodHRwOi8vcGhwLm5ldC9zZXRsb2NhbGUgc2V0bG9jYWxlKCl9LiBUaGUgYXZhaWxhYmxlCgkgKiBsb2NhbGl6YXRpb25zIGRlcGVuZCBvbiB3aGljaCBvbmVzIGFyZSBpbnN0YWxsZWQgb24geW91ciB3ZWIgc2VydmVyLgoJICoKCSAqIEBzaW5jZSAxLjAKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRkYXRlX2Zvcm1hdCBTdXBwb3J0cyBhbnkgUEhQIGRhdGUgZm9ybWF0IGZyb20ge0BzZWUgaHR0cDovL3BocC5uZXQvc3RyZnRpbWV9IChlbXB0eSBmb3IgdGhlIHJhdyBkYXRhKQoJICogQHJldHVybiBpbnR8c3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9sb2NhbF9kYXRlKCRkYXRlX2Zvcm1hdCA9ICclYycpCgl7CgkJaWYgKCEkZGF0ZV9mb3JtYXQpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCR0aGlzLT5nZXRfZGF0ZSgnJyksIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoKCRkYXRlID0gJHRoaXMtPmdldF9kYXRlKCdVJykpICE9PSBudWxsICYmICRkYXRlICE9PSBmYWxzZSkKCQl7CgkJCXJldHVybiBzdHJmdGltZSgkZGF0ZV9mb3JtYXQsICRkYXRlKTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBwb3N0aW5nIGRhdGUvdGltZSBmb3IgdGhlIGl0ZW0gKFVUQyB0aW1lKQoJICoKCSAqIEBzZWUgZ2V0X2RhdGUKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGVfZm9ybWF0IFN1cHBvcnRzIGFueSBQSFAgZGF0ZSBmb3JtYXQgZnJvbSB7QHNlZSBodHRwOi8vcGhwLm5ldC9kYXRlfQoJICogQHJldHVybiBpbnR8c3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9nbWRhdGUoJGRhdGVfZm9ybWF0ID0gJ2ogRiBZLCBnOmkgYScpCgl7CgkJJGRhdGUgPSAkdGhpcy0+Z2V0X2RhdGUoJ1UnKTsKCQlpZiAoJGRhdGUgPT09IG51bGwpCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCXJldHVybiBnbWRhdGUoJGRhdGVfZm9ybWF0LCAkZGF0ZSk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHVwZGF0ZSBkYXRlL3RpbWUgZm9yIHRoZSBpdGVtIChVVEMgdGltZSkKCSAqCgkgKiBAc2VlIGdldF91cGRhdGVkX2RhdGUKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGVfZm9ybWF0IFN1cHBvcnRzIGFueSBQSFAgZGF0ZSBmb3JtYXQgZnJvbSB7QHNlZSBodHRwOi8vcGhwLm5ldC9kYXRlfQoJICogQHJldHVybiBpbnR8c3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF91cGRhdGVkX2dtZGF0ZSgkZGF0ZV9mb3JtYXQgPSAnaiBGIFksIGc6aSBhJykKCXsKCQkkZGF0ZSA9ICR0aGlzLT5nZXRfdXBkYXRlZF9kYXRlKCdVJyk7CgkJaWYgKCRkYXRlID09PSBudWxsKQoJCXsKCQkJcmV0dXJuIG51bGw7CgkJfQoKCQlyZXR1cm4gZ21kYXRlKCRkYXRlX2Zvcm1hdCwgJGRhdGUpOwoJfQoKCS8qKgoJICogR2V0IHRoZSBwZXJtYWxpbmsgZm9yIHRoZSBpdGVtCgkgKgoJICogUmV0dXJucyB0aGUgZmlyc3QgbGluayBhdmFpbGFibGUgd2l0aCBhIHJlbGF0aW9uc2hpcCBvZiAiYWx0ZXJuYXRlIi4KCSAqIElkZW50aWNhbCB0byB7QHNlZSBnZXRfbGluaygpfSB3aXRoIGtleSAwCgkgKgoJICogQHNlZSBnZXRfbGluawoJICogQHNpbmNlIDAuOAoJICogQHJldHVybiBzdHJpbmd8bnVsbCBQZXJtYWxpbmsgVVJMCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfcGVybWFsaW5rKCkKCXsKCQkkbGluayA9ICR0aGlzLT5nZXRfbGluaygpOwoJCSRlbmNsb3N1cmUgPSAkdGhpcy0+Z2V0X2VuY2xvc3VyZSgwKTsKCQlpZiAoJGxpbmsgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJGxpbms7CgkJfQoJCWVsc2VpZiAoJGVuY2xvc3VyZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkZW5jbG9zdXJlLT5nZXRfbGluaygpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgYSBzaW5nbGUgbGluayBmb3IgdGhlIGl0ZW0KCSAqCgkgKiBAc2luY2UgQmV0YSAzCgkgKiBAcGFyYW0gaW50ICRrZXkgVGhlIGxpbmsgdGhhdCB5b3Ugd2FudCB0byByZXR1cm4uICBSZW1lbWJlciB0aGF0IGFycmF5cyBiZWdpbiB3aXRoIDAsIG5vdCAxCgkgKiBAcGFyYW0gc3RyaW5nICRyZWwgVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgbGluayB0byByZXR1cm4KCSAqIEByZXR1cm4gc3RyaW5nfG51bGwgTGluayBVUkwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9saW5rKCRrZXkgPSAwLCAkcmVsID0gJ2FsdGVybmF0ZScpCgl7CgkJJGxpbmtzID0gJHRoaXMtPmdldF9saW5rcygkcmVsKTsKCQlpZiAoJGxpbmtzICYmICRsaW5rc1ska2V5XSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkbGlua3NbJGtleV07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhbGwgbGlua3MgZm9yIHRoZSBpdGVtCgkgKgoJICogVXNlcyBgPGF0b206bGluaz5gLCBgPGxpbms+YCBvciBgPGd1aWQ+YAoJICoKCSAqIEBzaW5jZSBCZXRhIDIKCSAqIEBwYXJhbSBzdHJpbmcgJHJlbCBUaGUgcmVsYXRpb25zaGlwIG9mIGxpbmtzIHRvIHJldHVybgoJICogQHJldHVybiBhcnJheXxudWxsIExpbmtzIGZvdW5kIGZvciB0aGUgaXRlbSAoc3RyaW5ncykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9saW5rcygkcmVsID0gJ2FsdGVybmF0ZScpCgl7CgkJaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVsnbGlua3MnXSkpCgkJewoJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXSA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnbGluaycpIGFzICRsaW5rKQoJCQl7CgkJCQlpZiAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ2hyZWYnXSkpCgkJCQl7CgkJCQkJJGxpbmtfcmVsID0gKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWydyZWwnXSkpID8gJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddIDogJ2FsdGVybmF0ZSc7CgkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGxpbmtfcmVsXVtdID0gJHRoaXMtPnNhbml0aXplKCRsaW5rWydhdHRyaWJzJ11bJyddWydocmVmJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmspKTsKCgkJCQl9CgkJCX0KCQkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdsaW5rJykgYXMgJGxpbmspCgkJCXsKCQkJCWlmIChpc3NldCgkbGlua1snYXR0cmlicyddWycnXVsnaHJlZiddKSkKCQkJCXsKCQkJCQkkbGlua19yZWwgPSAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddKSkgPyAkbGlua1snYXR0cmlicyddWycnXVsncmVsJ10gOiAnYWx0ZXJuYXRlJzsKCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVskbGlua19yZWxdW10gPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ2hyZWYnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkbGluaykpOwoJCQkJfQoJCQl9CgkJCWlmICgkbGlua3MgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMCwgJ2xpbmsnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJ2FsdGVybmF0ZSddW10gPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmtzWzBdKSk7CgkJCX0KCQkJaWYgKCRsaW5rcyA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCwgJ2xpbmsnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJ2FsdGVybmF0ZSddW10gPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmtzWzBdKSk7CgkJCX0KCQkJaWYgKCRsaW5rcyA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnbGluaycpKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVsnYWx0ZXJuYXRlJ11bXSA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua3NbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkbGlua3NbMF0pKTsKCQkJfQoJCQlpZiAoJGxpbmtzID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAsICdndWlkJykpCgkJCXsKCQkJCWlmICghaXNzZXQoJGxpbmtzWzBdWydhdHRyaWJzJ11bJyddWydpc1Blcm1hTGluayddKSB8fCBzdHJ0b2xvd2VyKHRyaW0oJGxpbmtzWzBdWydhdHRyaWJzJ11bJyddWydpc1Blcm1hTGluayddKSkgPT09ICd0cnVlJykKCQkJCXsKCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVsnYWx0ZXJuYXRlJ11bXSA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua3NbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkbGlua3NbMF0pKTsKCQkJCX0KCQkJfQoKCQkJJGtleXMgPSBhcnJheV9rZXlzKCR0aGlzLT5kYXRhWydsaW5rcyddKTsKCQkJZm9yZWFjaCAoJGtleXMgYXMgJGtleSkKCQkJewoJCQkJaWYgKCR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdpc19pc2VnbWVudF9uel9uYycsIGFycmF5KCRrZXkpKSkKCQkJCXsKCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2xpbmtzJ11bU0lNUExFUElFX0lBTkFfTElOS19SRUxBVElPTlNfUkVHSVNUUlkgLiAka2V5XSkpCgkJCQkJewoJCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVtTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWSAuICRrZXldID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGtleV0sICR0aGlzLT5kYXRhWydsaW5rcyddW1NJTVBMRVBJRV9JQU5BX0xJTktfUkVMQVRJT05TX1JFR0lTVFJZIC4gJGtleV0pOwoJCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVska2V5XSA9JiAkdGhpcy0+ZGF0YVsnbGlua3MnXVtTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWSAuICRrZXldOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVtTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWSAuICRrZXldID0mICR0aGlzLT5kYXRhWydsaW5rcyddWyRrZXldOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2VpZiAoc3Vic3RyKCRrZXksIDAsIDQxKSA9PT0gU0lNUExFUElFX0lBTkFfTElOS19SRUxBVElPTlNfUkVHSVNUUlkpCgkJCQl7CgkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bc3Vic3RyKCRrZXksIDQxKV0gPSYgJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGtleV07CgkJCQl9CgkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVska2V5XSA9IGFycmF5X3VuaXF1ZSgkdGhpcy0+ZGF0YVsnbGlua3MnXVska2V5XSk7CgkJCX0KCQl9CgkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydsaW5rcyddWyRyZWxdKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+ZGF0YVsnbGlua3MnXVskcmVsXTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IGFuIGVuY2xvc3VyZSBmcm9tIHRoZSBpdGVtCgkgKgoJICogU3VwcG9ydHMgdGhlIDxlbmNsb3N1cmU+IFJTUyB0YWcsIGFzIHdlbGwgYXMgTWVkaWEgUlNTIGFuZCBpVHVuZXMgUlNTLgoJICoKCSAqIEBzaW5jZSBCZXRhIDIKCSAqIEB0b2RvIEFkZCBhYmlsaXR5IHRvIHByZWZlciBvbmUgdHlwZSBvZiBjb250ZW50IG92ZXIgYW5vdGhlciAoaW4gYSBtZWRpYSBncm91cCkuCgkgKiBAcGFyYW0gaW50ICRrZXkgVGhlIGVuY2xvc3VyZSB0aGF0IHlvdSB3YW50IHRvIHJldHVybi4gIFJlbWVtYmVyIHRoYXQgYXJyYXlzIGJlZ2luIHdpdGggMCwgbm90IDEKCSAqIEByZXR1cm4gU2ltcGxlUGllX0VuY2xvc3VyZXxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfZW5jbG9zdXJlKCRrZXkgPSAwLCAkcHJlZmVyID0gbnVsbCkKCXsKCQkkZW5jbG9zdXJlcyA9ICR0aGlzLT5nZXRfZW5jbG9zdXJlcygpOwoJCWlmIChpc3NldCgkZW5jbG9zdXJlc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGVuY2xvc3VyZXNbJGtleV07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCBhbGwgYXZhaWxhYmxlIGVuY2xvc3VyZXMgKHBvZGNhc3RzLCBldGMuKQoJICoKCSAqIFN1cHBvcnRzIHRoZSA8ZW5jbG9zdXJlPiBSU1MgdGFnLCBhcyB3ZWxsIGFzIE1lZGlhIFJTUyBhbmQgaVR1bmVzIFJTUy4KCSAqCgkgKiBBdCB0aGlzIHBvaW50LCB3ZSdyZSBwcmV0dHkgbXVjaCBhc3N1bWluZyB0aGF0IGFsbCBlbmNsb3N1cmVzIGZvciBhbiBpdGVtCgkgKiBhcmUgdGhlIHNhbWUgY29udGVudC4gIEFueXRoaW5nIGVsc2UgaXMgdG9vIGNvbXBsaWNhdGVkIHRvCgkgKiBwcm9wZXJseSBzdXBwb3J0LgoJICoKCSAqIEBzaW5jZSBCZXRhIDIKCSAqIEB0b2RvIEFkZCBzdXBwb3J0IGZvciBlbmQtdXNlciBkZWZpbmVkIHNvcnRpbmcgb2YgZW5jbG9zdXJlcyBieSB0eXBlL2hhbmRsZXIgKHNvIHdlIGNhbiBwcmVmZXIgdGhlIGZhc3Rlci1sb2FkaW5nIEZMViBvdmVyIE1QNCkuCgkgKiBAdG9kbyBJZiBhbiBlbGVtZW50IGV4aXN0cyBhdCBhIGxldmVsLCBidXQgaXRzIHZhbHVlIGlzIGVtcHR5LCB3ZSBzaG91bGQgZmFsbCBiYWNrIHRvIHRoZSB2YWx1ZSBmcm9tIHRoZSBwYXJlbnQgKGlmIGl0IGV4aXN0cykuCgkgKiBAcmV0dXJuIFNpbXBsZVBpZV9FbmNsb3N1cmVbXXxudWxsIExpc3Qgb2YgU2ltcGxlUGllX0VuY2xvc3VyZSBpdGVtcwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2VuY2xvc3VyZXMoKQoJewoJCWlmICghaXNzZXQoJHRoaXMtPmRhdGFbJ2VuY2xvc3VyZXMnXSkpCgkJewoJCQkkdGhpcy0+ZGF0YVsnZW5jbG9zdXJlcyddID0gYXJyYXkoKTsKCgkJCS8vIEVsZW1lbnRzCgkJCSRjYXB0aW9uc19wYXJlbnQgPSBudWxsOwoJCQkkY2F0ZWdvcmllc19wYXJlbnQgPSBudWxsOwoJCQkkY29weXJpZ2h0c19wYXJlbnQgPSBudWxsOwoJCQkkY3JlZGl0c19wYXJlbnQgPSBudWxsOwoJCQkkZGVzY3JpcHRpb25fcGFyZW50ID0gbnVsbDsKCQkJJGR1cmF0aW9uX3BhcmVudCA9IG51bGw7CgkJCSRoYXNoZXNfcGFyZW50ID0gbnVsbDsKCQkJJGtleXdvcmRzX3BhcmVudCA9IG51bGw7CgkJCSRwbGF5ZXJfcGFyZW50ID0gbnVsbDsKCQkJJHJhdGluZ3NfcGFyZW50ID0gbnVsbDsKCQkJJHJlc3RyaWN0aW9uc19wYXJlbnQgPSBudWxsOwoJCQkkdGh1bWJuYWlsc19wYXJlbnQgPSBudWxsOwoJCQkkdGl0bGVfcGFyZW50ID0gbnVsbDsKCgkJCS8vIExldCdzIGRvIHRoZSBjaGFubmVsIGFuZCBpdGVtLWxldmVsIG9uZXMgZmlyc3QsIGFuZCBqdXN0IHJlLXVzZSB0aGVtIGlmIHdlIG5lZWQgdG8uCgkJCSRwYXJlbnQgPSAkdGhpcy0+Z2V0X2ZlZWQoKTsKCgkJCS8vIENBUFRJT05TCgkJCWlmICgkY2FwdGlvbnMgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAndGV4dCcpKQoJCQl7CgkJCQlmb3JlYWNoICgkY2FwdGlvbnMgYXMgJGNhcHRpb24pCgkJCQl7CgkJCQkJJGNhcHRpb25fdHlwZSA9IG51bGw7CgkJCQkJJGNhcHRpb25fbGFuZyA9IG51bGw7CgkJCQkJJGNhcHRpb25fc3RhcnRUaW1lID0gbnVsbDsKCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gbnVsbDsKCQkJCQkkY2FwdGlvbl90ZXh0ID0gbnVsbDsKCQkJCQlpZiAoaXNzZXQoJGNhcHRpb25bJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSkpCgkJCQkJewoJCQkJCQkkY2FwdGlvbl90eXBlID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnbGFuZyddKSkKCQkJCQl7CgkJCQkJCSRjYXB0aW9uX2xhbmcgPSAkdGhpcy0+c2FuaXRpemUoJGNhcHRpb25bJ2F0dHJpYnMnXVsnJ11bJ2xhbmcnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydzdGFydCddKSkKCQkJCQl7CgkJCQkJCSRjYXB0aW9uX3N0YXJ0VGltZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnc3RhcnQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydlbmQnXSkpCgkJCQkJewoJCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydlbmQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydkYXRhJ10pKQoJCQkJCXsKCQkJCQkJJGNhcHRpb25fdGV4dCA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQkkY2FwdGlvbnNfcGFyZW50W10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2FwdGlvbicsIGFycmF5KCRjYXB0aW9uX3R5cGUsICRjYXB0aW9uX2xhbmcsICRjYXB0aW9uX3N0YXJ0VGltZSwgJGNhcHRpb25fZW5kVGltZSwgJGNhcHRpb25fdGV4dCkpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJGNhcHRpb25zID0gJHBhcmVudC0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAndGV4dCcpKQoJCQl7CgkJCQlmb3JlYWNoICgkY2FwdGlvbnMgYXMgJGNhcHRpb24pCgkJCQl7CgkJCQkJJGNhcHRpb25fdHlwZSA9IG51bGw7CgkJCQkJJGNhcHRpb25fbGFuZyA9IG51bGw7CgkJCQkJJGNhcHRpb25fc3RhcnRUaW1lID0gbnVsbDsKCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gbnVsbDsKCQkJCQkkY2FwdGlvbl90ZXh0ID0gbnVsbDsKCQkJCQlpZiAoaXNzZXQoJGNhcHRpb25bJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSkpCgkJCQkJewoJCQkJCQkkY2FwdGlvbl90eXBlID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnbGFuZyddKSkKCQkJCQl7CgkJCQkJCSRjYXB0aW9uX2xhbmcgPSAkdGhpcy0+c2FuaXRpemUoJGNhcHRpb25bJ2F0dHJpYnMnXVsnJ11bJ2xhbmcnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydzdGFydCddKSkKCQkJCQl7CgkJCQkJCSRjYXB0aW9uX3N0YXJ0VGltZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnc3RhcnQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydlbmQnXSkpCgkJCQkJewoJCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydlbmQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydkYXRhJ10pKQoJCQkJCXsKCQkJCQkJJGNhcHRpb25fdGV4dCA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQkkY2FwdGlvbnNfcGFyZW50W10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2FwdGlvbicsIGFycmF5KCRjYXB0aW9uX3R5cGUsICRjYXB0aW9uX2xhbmcsICRjYXB0aW9uX3N0YXJ0VGltZSwgJGNhcHRpb25fZW5kVGltZSwgJGNhcHRpb25fdGV4dCkpOwoJCQkJfQoJCQl9CgkJCWlmIChpc19hcnJheSgkY2FwdGlvbnNfcGFyZW50KSkKCQkJewoJCQkJJGNhcHRpb25zX3BhcmVudCA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGNhcHRpb25zX3BhcmVudCkpOwoJCQl9CgoJCQkvLyBDQVRFR09SSUVTCgkJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ2NhdGVnb3J5JykgYXMgJGNhdGVnb3J5KQoJCQl7CgkJCQkkdGVybSA9IG51bGw7CgkJCQkkc2NoZW1lID0gbnVsbDsKCQkJCSRsYWJlbCA9IG51bGw7CgkJCQlpZiAoaXNzZXQoJGNhdGVnb3J5WydkYXRhJ10pKQoJCQkJewoJCQkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10pKQoJCQkJewoJCQkJCSRzY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydzY2hlbWUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkc2NoZW1lID0gJ2h0dHA6Ly9zZWFyY2gueWFob28uY29tL21yc3MvY2F0ZWdvcnlfc2NoZW1hJzsKCQkJCX0KCQkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10pKQoJCQkJewoJCQkJCSRsYWJlbCA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQl9CgkJCQkkY2F0ZWdvcmllc19wYXJlbnRbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDYXRlZ29yeScsIGFycmF5KCR0ZXJtLCAkc2NoZW1lLCAkbGFiZWwpKTsKCQkJfQoJCQlmb3JlYWNoICgoYXJyYXkpICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ2NhdGVnb3J5JykgYXMgJGNhdGVnb3J5KQoJCQl7CgkJCQkkdGVybSA9IG51bGw7CgkJCQkkc2NoZW1lID0gbnVsbDsKCQkJCSRsYWJlbCA9IG51bGw7CgkJCQlpZiAoaXNzZXQoJGNhdGVnb3J5WydkYXRhJ10pKQoJCQkJewoJCQkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10pKQoJCQkJewoJCQkJCSRzY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydzY2hlbWUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkc2NoZW1lID0gJ2h0dHA6Ly9zZWFyY2gueWFob28uY29tL21yc3MvY2F0ZWdvcnlfc2NoZW1hJzsKCQkJCX0KCQkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10pKQoJCQkJewoJCQkJCSRsYWJlbCA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQl9CgkJCQkkY2F0ZWdvcmllc19wYXJlbnRbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDYXRlZ29yeScsIGFycmF5KCR0ZXJtLCAkc2NoZW1lLCAkbGFiZWwpKTsKCQkJfQoJCQlmb3JlYWNoICgoYXJyYXkpICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdjYXRlZ29yeScpIGFzICRjYXRlZ29yeSkKCQkJewoJCQkJJHRlcm0gPSBudWxsOwoJCQkJJHNjaGVtZSA9ICdodHRwOi8vd3d3Lml0dW5lcy5jb20vZHRkcy9wb2RjYXN0LTEuMC5kdGQnOwoJCQkJJGxhYmVsID0gbnVsbDsKCQkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3RleHQnXSkpCgkJCQl7CgkJCQkJJGxhYmVsID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsndGV4dCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJfQoJCQkJJGNhdGVnb3JpZXNfcGFyZW50W10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGVybSwgJHNjaGVtZSwgJGxhYmVsKSk7CgoJCQkJaWYgKGlzc2V0KCRjYXRlZ29yeVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0lUVU5FU11bJ2NhdGVnb3J5J10pKQoJCQkJewoJCQkJCWZvcmVhY2ggKChhcnJheSkgJGNhdGVnb3J5WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfSVRVTkVTXVsnY2F0ZWdvcnknXSBhcyAkc3ViY2F0ZWdvcnkpCgkJCQkJewoJCQkJCQlpZiAoaXNzZXQoJHN1YmNhdGVnb3J5WydhdHRyaWJzJ11bJyddWyd0ZXh0J10pKQoJCQkJCQl7CgkJCQkJCQkkbGFiZWwgPSAkdGhpcy0+c2FuaXRpemUoJHN1YmNhdGVnb3J5WydhdHRyaWJzJ11bJyddWyd0ZXh0J10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCX0KCQkJCQkJJGNhdGVnb3JpZXNfcGFyZW50W10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGVybSwgJHNjaGVtZSwgJGxhYmVsKSk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmIChpc19hcnJheSgkY2F0ZWdvcmllc19wYXJlbnQpKQoJCQl7CgkJCQkkY2F0ZWdvcmllc19wYXJlbnQgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRjYXRlZ29yaWVzX3BhcmVudCkpOwoJCQl9CgoJCQkvLyBDT1BZUklHSFQKCQkJaWYgKCRjb3B5cmlnaHQgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAnY29weXJpZ2h0JykpCgkJCXsKCQkJCSRjb3B5cmlnaHRfdXJsID0gbnVsbDsKCQkJCSRjb3B5cmlnaHRfbGFiZWwgPSBudWxsOwoJCQkJaWYgKGlzc2V0KCRjb3B5cmlnaHRbMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddKSkKCQkJCXsKCQkJCQkkY29weXJpZ2h0X3VybCA9ICR0aGlzLT5zYW5pdGl6ZSgkY29weXJpZ2h0WzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkY29weXJpZ2h0WzBdWydkYXRhJ10pKQoJCQkJewoJCQkJCSRjb3B5cmlnaHRfbGFiZWwgPSAkdGhpcy0+c2FuaXRpemUoJGNvcHlyaWdodFswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJfQoJCQkJJGNvcHlyaWdodHNfcGFyZW50ID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NvcHlyaWdodCcsIGFycmF5KCRjb3B5cmlnaHRfdXJsLCAkY29weXJpZ2h0X2xhYmVsKSk7CgkJCX0KCQkJZWxzZWlmICgkY29weXJpZ2h0ID0gJHBhcmVudC0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAnY29weXJpZ2h0JykpCgkJCXsKCQkJCSRjb3B5cmlnaHRfdXJsID0gbnVsbDsKCQkJCSRjb3B5cmlnaHRfbGFiZWwgPSBudWxsOwoJCQkJaWYgKGlzc2V0KCRjb3B5cmlnaHRbMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddKSkKCQkJCXsKCQkJCQkkY29weXJpZ2h0X3VybCA9ICR0aGlzLT5zYW5pdGl6ZSgkY29weXJpZ2h0WzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkY29weXJpZ2h0WzBdWydkYXRhJ10pKQoJCQkJewoJCQkJCSRjb3B5cmlnaHRfbGFiZWwgPSAkdGhpcy0+c2FuaXRpemUoJGNvcHlyaWdodFswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJfQoJCQkJJGNvcHlyaWdodHNfcGFyZW50ID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NvcHlyaWdodCcsIGFycmF5KCRjb3B5cmlnaHRfdXJsLCAkY29weXJpZ2h0X2xhYmVsKSk7CgkJCX0KCgkJCS8vIENSRURJVFMKCQkJaWYgKCRjcmVkaXRzID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ2NyZWRpdCcpKQoJCQl7CgkJCQlmb3JlYWNoICgkY3JlZGl0cyBhcyAkY3JlZGl0KQoJCQkJewoJCQkJCSRjcmVkaXRfcm9sZSA9IG51bGw7CgkJCQkJJGNyZWRpdF9zY2hlbWUgPSBudWxsOwoJCQkJCSRjcmVkaXRfbmFtZSA9IG51bGw7CgkJCQkJaWYgKGlzc2V0KCRjcmVkaXRbJ2F0dHJpYnMnXVsnJ11bJ3JvbGUnXSkpCgkJCQkJewoJCQkJCQkkY3JlZGl0X3JvbGUgPSAkdGhpcy0+c2FuaXRpemUoJGNyZWRpdFsnYXR0cmlicyddWycnXVsncm9sZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJGNyZWRpdFsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10pKQoJCQkJCXsKCQkJCQkJJGNyZWRpdF9zY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNyZWRpdFsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRjcmVkaXRfc2NoZW1lID0gJ3VybjplYnUnOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJGNyZWRpdFsnZGF0YSddKSkKCQkJCQl7CgkJCQkJCSRjcmVkaXRfbmFtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY3JlZGl0WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCSRjcmVkaXRzX3BhcmVudFtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NyZWRpdCcsIGFycmF5KCRjcmVkaXRfcm9sZSwgJGNyZWRpdF9zY2hlbWUsICRjcmVkaXRfbmFtZSkpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJGNyZWRpdHMgPSAkcGFyZW50LT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1MsICdjcmVkaXQnKSkKCQkJewoJCQkJZm9yZWFjaCAoJGNyZWRpdHMgYXMgJGNyZWRpdCkKCQkJCXsKCQkJCQkkY3JlZGl0X3JvbGUgPSBudWxsOwoJCQkJCSRjcmVkaXRfc2NoZW1lID0gbnVsbDsKCQkJCQkkY3JlZGl0X25hbWUgPSBudWxsOwoJCQkJCWlmIChpc3NldCgkY3JlZGl0WydhdHRyaWJzJ11bJyddWydyb2xlJ10pKQoJCQkJCXsKCQkJCQkJJGNyZWRpdF9yb2xlID0gJHRoaXMtPnNhbml0aXplKCRjcmVkaXRbJ2F0dHJpYnMnXVsnJ11bJ3JvbGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjcmVkaXRbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJCQl7CgkJCQkJCSRjcmVkaXRfc2NoZW1lID0gJHRoaXMtPnNhbml0aXplKCRjcmVkaXRbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkY3JlZGl0X3NjaGVtZSA9ICd1cm46ZWJ1JzsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRjcmVkaXRbJ2RhdGEnXSkpCgkJCQkJewoJCQkJCQkkY3JlZGl0X25hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNyZWRpdFsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQkkY3JlZGl0c19wYXJlbnRbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDcmVkaXQnLCBhcnJheSgkY3JlZGl0X3JvbGUsICRjcmVkaXRfc2NoZW1lLCAkY3JlZGl0X25hbWUpKTsKCQkJCX0KCQkJfQoJCQlpZiAoaXNfYXJyYXkoJGNyZWRpdHNfcGFyZW50KSkKCQkJewoJCQkJJGNyZWRpdHNfcGFyZW50ID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkY3JlZGl0c19wYXJlbnQpKTsKCQkJfQoKCQkJLy8gREVTQ1JJUFRJT04KCQkJaWYgKCRkZXNjcmlwdGlvbl9wYXJlbnQgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAnZGVzY3JpcHRpb24nKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRkZXNjcmlwdGlvbl9wYXJlbnRbMF1bJ2RhdGEnXSkpCgkJCQl7CgkJCQkJJGRlc2NyaXB0aW9uX3BhcmVudCA9ICR0aGlzLT5zYW5pdGl6ZSgkZGVzY3JpcHRpb25fcGFyZW50WzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQl9CgkJCX0KCQkJZWxzZWlmICgkZGVzY3JpcHRpb25fcGFyZW50ID0gJHBhcmVudC0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAnZGVzY3JpcHRpb24nKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRkZXNjcmlwdGlvbl9wYXJlbnRbMF1bJ2RhdGEnXSkpCgkJCQl7CgkJCQkJJGRlc2NyaXB0aW9uX3BhcmVudCA9ICR0aGlzLT5zYW5pdGl6ZSgkZGVzY3JpcHRpb25fcGFyZW50WzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQl9CgkJCX0KCgkJCS8vIERVUkFUSU9OCgkJCWlmICgkZHVyYXRpb25fcGFyZW50ID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdkdXJhdGlvbicpKQoJCQl7CgkJCQkkc2Vjb25kcyA9IG51bGw7CgkJCQkkbWludXRlcyA9IG51bGw7CgkJCQkkaG91cnMgPSBudWxsOwoJCQkJaWYgKGlzc2V0KCRkdXJhdGlvbl9wYXJlbnRbMF1bJ2RhdGEnXSkpCgkJCQl7CgkJCQkJJHRlbXAgPSBleHBsb2RlKCc6JywgJHRoaXMtPnNhbml0aXplKCRkdXJhdGlvbl9wYXJlbnRbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKSk7CgkJCQkJaWYgKHNpemVvZigkdGVtcCkgPiAwKQoJCQkJCXsKCQkJCQkJJHNlY29uZHMgPSAoaW50KSBhcnJheV9wb3AoJHRlbXApOwoJCQkJCX0KCQkJCQlpZiAoc2l6ZW9mKCR0ZW1wKSA+IDApCgkJCQkJewoJCQkJCQkkbWludXRlcyA9IChpbnQpIGFycmF5X3BvcCgkdGVtcCk7CgkJCQkJCSRzZWNvbmRzICs9ICRtaW51dGVzICogNjA7CgkJCQkJfQoJCQkJCWlmIChzaXplb2YoJHRlbXApID4gMCkKCQkJCQl7CgkJCQkJCSRob3VycyA9IChpbnQpIGFycmF5X3BvcCgkdGVtcCk7CgkJCQkJCSRzZWNvbmRzICs9ICRob3VycyAqIDM2MDA7CgkJCQkJfQoJCQkJCXVuc2V0KCR0ZW1wKTsKCQkJCQkkZHVyYXRpb25fcGFyZW50ID0gJHNlY29uZHM7CgkJCQl9CgkJCX0KCgkJCS8vIEhBU0hFUwoJCQlpZiAoJGhhc2hlc19pdGVyYXRvciA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1MsICdoYXNoJykpCgkJCXsKCQkJCWZvcmVhY2ggKCRoYXNoZXNfaXRlcmF0b3IgYXMgJGhhc2gpCgkJCQl7CgkJCQkJJHZhbHVlID0gbnVsbDsKCQkJCQkkYWxnbyA9IG51bGw7CgkJCQkJaWYgKGlzc2V0KCRoYXNoWydkYXRhJ10pKQoJCQkJCXsKCQkJCQkJJHZhbHVlID0gJHRoaXMtPnNhbml0aXplKCRoYXNoWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkaGFzaFsnYXR0cmlicyddWycnXVsnYWxnbyddKSkKCQkJCQl7CgkJCQkJCSRhbGdvID0gJHRoaXMtPnNhbml0aXplKCRoYXNoWydhdHRyaWJzJ11bJyddWydhbGdvJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRhbGdvID0gJ21kNSc7CgkJCQkJfQoJCQkJCSRoYXNoZXNfcGFyZW50W10gPSAkYWxnby4nOicuJHZhbHVlOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJGhhc2hlc19pdGVyYXRvciA9ICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ2hhc2gnKSkKCQkJewoJCQkJZm9yZWFjaCAoJGhhc2hlc19pdGVyYXRvciBhcyAkaGFzaCkKCQkJCXsKCQkJCQkkdmFsdWUgPSBudWxsOwoJCQkJCSRhbGdvID0gbnVsbDsKCQkJCQlpZiAoaXNzZXQoJGhhc2hbJ2RhdGEnXSkpCgkJCQkJewoJCQkJCQkkdmFsdWUgPSAkdGhpcy0+c2FuaXRpemUoJGhhc2hbJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRoYXNoWydhdHRyaWJzJ11bJyddWydhbGdvJ10pKQoJCQkJCXsKCQkJCQkJJGFsZ28gPSAkdGhpcy0+c2FuaXRpemUoJGhhc2hbJ2F0dHJpYnMnXVsnJ11bJ2FsZ28nXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJGFsZ28gPSAnbWQ1JzsKCQkJCQl9CgkJCQkJJGhhc2hlc19wYXJlbnRbXSA9ICRhbGdvLic6Jy4kdmFsdWU7CgkJCQl9CgkJCX0KCQkJaWYgKGlzX2FycmF5KCRoYXNoZXNfcGFyZW50KSkKCQkJewoJCQkJJGhhc2hlc19wYXJlbnQgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRoYXNoZXNfcGFyZW50KSk7CgkJCX0KCgkJCS8vIEtFWVdPUkRTCgkJCWlmICgka2V5d29yZHMgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAna2V5d29yZHMnKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRrZXl3b3Jkc1swXVsnZGF0YSddKSkKCQkJCXsKCQkJCQkkdGVtcCA9IGV4cGxvZGUoJywnLCAkdGhpcy0+c2FuaXRpemUoJGtleXdvcmRzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCkpOwoJCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICR3b3JkKQoJCQkJCXsKCQkJCQkJJGtleXdvcmRzX3BhcmVudFtdID0gdHJpbSgkd29yZCk7CgkJCQkJfQoJCQkJfQoJCQkJdW5zZXQoJHRlbXApOwoJCQl9CgkJCWVsc2VpZiAoJGtleXdvcmRzID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdrZXl3b3JkcycpKQoJCQl7CgkJCQlpZiAoaXNzZXQoJGtleXdvcmRzWzBdWydkYXRhJ10pKQoJCQkJewoJCQkJCSR0ZW1wID0gZXhwbG9kZSgnLCcsICR0aGlzLT5zYW5pdGl6ZSgka2V5d29yZHNbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKSk7CgkJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJHdvcmQpCgkJCQkJewoJCQkJCQkka2V5d29yZHNfcGFyZW50W10gPSB0cmltKCR3b3JkKTsKCQkJCQl9CgkJCQl9CgkJCQl1bnNldCgkdGVtcCk7CgkJCX0KCQkJZWxzZWlmICgka2V5d29yZHMgPSAkcGFyZW50LT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1MsICdrZXl3b3JkcycpKQoJCQl7CgkJCQlpZiAoaXNzZXQoJGtleXdvcmRzWzBdWydkYXRhJ10pKQoJCQkJewoJCQkJCSR0ZW1wID0gZXhwbG9kZSgnLCcsICR0aGlzLT5zYW5pdGl6ZSgka2V5d29yZHNbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKSk7CgkJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJHdvcmQpCgkJCQkJewoJCQkJCQkka2V5d29yZHNfcGFyZW50W10gPSB0cmltKCR3b3JkKTsKCQkJCQl9CgkJCQl9CgkJCQl1bnNldCgkdGVtcCk7CgkJCX0KCQkJZWxzZWlmICgka2V5d29yZHMgPSAkcGFyZW50LT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfSVRVTkVTLCAna2V5d29yZHMnKSkKCQkJewoJCQkJaWYgKGlzc2V0KCRrZXl3b3Jkc1swXVsnZGF0YSddKSkKCQkJCXsKCQkJCQkkdGVtcCA9IGV4cGxvZGUoJywnLCAkdGhpcy0+c2FuaXRpemUoJGtleXdvcmRzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCkpOwoJCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICR3b3JkKQoJCQkJCXsKCQkJCQkJJGtleXdvcmRzX3BhcmVudFtdID0gdHJpbSgkd29yZCk7CgkJCQkJfQoJCQkJfQoJCQkJdW5zZXQoJHRlbXApOwoJCQl9CgkJCWlmIChpc19hcnJheSgka2V5d29yZHNfcGFyZW50KSkKCQkJewoJCQkJJGtleXdvcmRzX3BhcmVudCA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGtleXdvcmRzX3BhcmVudCkpOwoJCQl9CgoJCQkvLyBQTEFZRVIKCQkJaWYgKCRwbGF5ZXJfcGFyZW50ID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ3BsYXllcicpKQoJCQl7CgkJCQlpZiAoaXNzZXQoJHBsYXllcl9wYXJlbnRbMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddKSkKCQkJCXsKCQkJCQkkcGxheWVyX3BhcmVudCA9ICR0aGlzLT5zYW5pdGl6ZSgkcGxheWVyX3BhcmVudFswXVsnYXR0cmlicyddWycnXVsndXJsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKTsKCQkJCX0KCQkJfQoJCQllbHNlaWYgKCRwbGF5ZXJfcGFyZW50ID0gJHBhcmVudC0+Z2V0X2NoYW5uZWxfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAncGxheWVyJykpCgkJCXsKCQkJCWlmIChpc3NldCgkcGxheWVyX3BhcmVudFswXVsnYXR0cmlicyddWycnXVsndXJsJ10pKQoJCQkJewoJCQkJCSRwbGF5ZXJfcGFyZW50ID0gJHRoaXMtPnNhbml0aXplKCRwbGF5ZXJfcGFyZW50WzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkkpOwoJCQkJfQoJCQl9CgoJCQkvLyBSQVRJTkdTCgkJCWlmICgkcmF0aW5ncyA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1MsICdyYXRpbmcnKSkKCQkJewoJCQkJZm9yZWFjaCAoJHJhdGluZ3MgYXMgJHJhdGluZykKCQkJCXsKCQkJCQkkcmF0aW5nX3NjaGVtZSA9IG51bGw7CgkJCQkJJHJhdGluZ192YWx1ZSA9IG51bGw7CgkJCQkJaWYgKGlzc2V0KCRyYXRpbmdbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJCQl7CgkJCQkJCSRyYXRpbmdfc2NoZW1lID0gJHRoaXMtPnNhbml0aXplKCRyYXRpbmdbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkcmF0aW5nX3NjaGVtZSA9ICd1cm46c2ltcGxlJzsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRyYXRpbmdbJ2RhdGEnXSkpCgkJCQkJewoJCQkJCQkkcmF0aW5nX3ZhbHVlID0gJHRoaXMtPnNhbml0aXplKCRyYXRpbmdbJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJJHJhdGluZ3NfcGFyZW50W10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnUmF0aW5nJywgYXJyYXkoJHJhdGluZ19zY2hlbWUsICRyYXRpbmdfdmFsdWUpKTsKCQkJCX0KCQkJfQoJCQllbHNlaWYgKCRyYXRpbmdzID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdleHBsaWNpdCcpKQoJCQl7CgkJCQlmb3JlYWNoICgkcmF0aW5ncyBhcyAkcmF0aW5nKQoJCQkJewoJCQkJCSRyYXRpbmdfc2NoZW1lID0gJ3VybjppdHVuZXMnOwoJCQkJCSRyYXRpbmdfdmFsdWUgPSBudWxsOwoJCQkJCWlmIChpc3NldCgkcmF0aW5nWydkYXRhJ10pKQoJCQkJCXsKCQkJCQkJJHJhdGluZ192YWx1ZSA9ICR0aGlzLT5zYW5pdGl6ZSgkcmF0aW5nWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCSRyYXRpbmdzX3BhcmVudFtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ1JhdGluZycsIGFycmF5KCRyYXRpbmdfc2NoZW1lLCAkcmF0aW5nX3ZhbHVlKSk7CgkJCQl9CgkJCX0KCQkJZWxzZWlmICgkcmF0aW5ncyA9ICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ3JhdGluZycpKQoJCQl7CgkJCQlmb3JlYWNoICgkcmF0aW5ncyBhcyAkcmF0aW5nKQoJCQkJewoJCQkJCSRyYXRpbmdfc2NoZW1lID0gbnVsbDsKCQkJCQkkcmF0aW5nX3ZhbHVlID0gbnVsbDsKCQkJCQlpZiAoaXNzZXQoJHJhdGluZ1snYXR0cmlicyddWycnXVsnc2NoZW1lJ10pKQoJCQkJCXsKCQkJCQkJJHJhdGluZ19zY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJHJhdGluZ1snYXR0cmlicyddWycnXVsnc2NoZW1lJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRyYXRpbmdfc2NoZW1lID0gJ3VybjpzaW1wbGUnOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJHJhdGluZ1snZGF0YSddKSkKCQkJCQl7CgkJCQkJCSRyYXRpbmdfdmFsdWUgPSAkdGhpcy0+c2FuaXRpemUoJHJhdGluZ1snZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQkkcmF0aW5nc19wYXJlbnRbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdSYXRpbmcnLCBhcnJheSgkcmF0aW5nX3NjaGVtZSwgJHJhdGluZ192YWx1ZSkpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJHJhdGluZ3MgPSAkcGFyZW50LT5nZXRfY2hhbm5lbF90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfSVRVTkVTLCAnZXhwbGljaXQnKSkKCQkJewoJCQkJZm9yZWFjaCAoJHJhdGluZ3MgYXMgJHJhdGluZykKCQkJCXsKCQkJCQkkcmF0aW5nX3NjaGVtZSA9ICd1cm46aXR1bmVzJzsKCQkJCQkkcmF0aW5nX3ZhbHVlID0gbnVsbDsKCQkJCQlpZiAoaXNzZXQoJHJhdGluZ1snZGF0YSddKSkKCQkJCQl7CgkJCQkJCSRyYXRpbmdfdmFsdWUgPSAkdGhpcy0+c2FuaXRpemUoJHJhdGluZ1snZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQkkcmF0aW5nc19wYXJlbnRbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdSYXRpbmcnLCBhcnJheSgkcmF0aW5nX3NjaGVtZSwgJHJhdGluZ192YWx1ZSkpOwoJCQkJfQoJCQl9CgkJCWlmIChpc19hcnJheSgkcmF0aW5nc19wYXJlbnQpKQoJCQl7CgkJCQkkcmF0aW5nc19wYXJlbnQgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRyYXRpbmdzX3BhcmVudCkpOwoJCQl9CgoJCQkvLyBSRVNUUklDVElPTlMKCQkJaWYgKCRyZXN0cmljdGlvbnMgPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAncmVzdHJpY3Rpb24nKSkKCQkJewoJCQkJZm9yZWFjaCAoJHJlc3RyaWN0aW9ucyBhcyAkcmVzdHJpY3Rpb24pCgkJCQl7CgkJCQkJJHJlc3RyaWN0aW9uX3JlbGF0aW9uc2hpcCA9IG51bGw7CgkJCQkJJHJlc3RyaWN0aW9uX3R5cGUgPSBudWxsOwoJCQkJCSRyZXN0cmljdGlvbl92YWx1ZSA9IG51bGw7CgkJCQkJaWYgKGlzc2V0KCRyZXN0cmljdGlvblsnYXR0cmlicyddWycnXVsncmVsYXRpb25zaGlwJ10pKQoJCQkJCXsKCQkJCQkJJHJlc3RyaWN0aW9uX3JlbGF0aW9uc2hpcCA9ICR0aGlzLT5zYW5pdGl6ZSgkcmVzdHJpY3Rpb25bJ2F0dHJpYnMnXVsnJ11bJ3JlbGF0aW9uc2hpcCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCXsKCQkJCQkJJHJlc3RyaWN0aW9uX3R5cGUgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkcmVzdHJpY3Rpb25bJ2RhdGEnXSkpCgkJCQkJewoJCQkJCQkkcmVzdHJpY3Rpb25fdmFsdWUgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJfQoJCQkJCSRyZXN0cmljdGlvbnNfcGFyZW50W10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnUmVzdHJpY3Rpb24nLCBhcnJheSgkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwLCAkcmVzdHJpY3Rpb25fdHlwZSwgJHJlc3RyaWN0aW9uX3ZhbHVlKSk7CgkJCQl9CgkJCX0KCQkJZWxzZWlmICgkcmVzdHJpY3Rpb25zID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdibG9jaycpKQoJCQl7CgkJCQlmb3JlYWNoICgkcmVzdHJpY3Rpb25zIGFzICRyZXN0cmljdGlvbikKCQkJCXsKCQkJCQkkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwID0gJ2FsbG93JzsKCQkJCQkkcmVzdHJpY3Rpb25fdHlwZSA9IG51bGw7CgkJCQkJJHJlc3RyaWN0aW9uX3ZhbHVlID0gJ2l0dW5lcyc7CgkJCQkJaWYgKGlzc2V0KCRyZXN0cmljdGlvblsnZGF0YSddKSAmJiBzdHJ0b2xvd2VyKCRyZXN0cmljdGlvblsnZGF0YSddKSA9PT0gJ3llcycpCgkJCQkJewoJCQkJCQkkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwID0gJ2RlbnknOwoJCQkJCX0KCQkJCQkkcmVzdHJpY3Rpb25zX3BhcmVudFtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ1Jlc3RyaWN0aW9uJywgYXJyYXkoJHJlc3RyaWN0aW9uX3JlbGF0aW9uc2hpcCwgJHJlc3RyaWN0aW9uX3R5cGUsICRyZXN0cmljdGlvbl92YWx1ZSkpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJHJlc3RyaWN0aW9ucyA9ICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ3Jlc3RyaWN0aW9uJykpCgkJCXsKCQkJCWZvcmVhY2ggKCRyZXN0cmljdGlvbnMgYXMgJHJlc3RyaWN0aW9uKQoJCQkJewoJCQkJCSRyZXN0cmljdGlvbl9yZWxhdGlvbnNoaXAgPSBudWxsOwoJCQkJCSRyZXN0cmljdGlvbl90eXBlID0gbnVsbDsKCQkJCQkkcmVzdHJpY3Rpb25fdmFsdWUgPSBudWxsOwoJCQkJCWlmIChpc3NldCgkcmVzdHJpY3Rpb25bJ2F0dHJpYnMnXVsnJ11bJ3JlbGF0aW9uc2hpcCddKSkKCQkJCQl7CgkJCQkJCSRyZXN0cmljdGlvbl9yZWxhdGlvbnNoaXAgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWydyZWxhdGlvbnNoaXAnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRyZXN0cmljdGlvblsnYXR0cmlicyddWycnXVsndHlwZSddKSkKCQkJCQl7CgkJCQkJCSRyZXN0cmljdGlvbl90eXBlID0gJHRoaXMtPnNhbml0aXplKCRyZXN0cmljdGlvblsnYXR0cmlicyddWycnXVsndHlwZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydkYXRhJ10pKQoJCQkJCXsKCQkJCQkJJHJlc3RyaWN0aW9uX3ZhbHVlID0gJHRoaXMtPnNhbml0aXplKCRyZXN0cmljdGlvblsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQkkcmVzdHJpY3Rpb25zX3BhcmVudFtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ1Jlc3RyaWN0aW9uJywgYXJyYXkoJHJlc3RyaWN0aW9uX3JlbGF0aW9uc2hpcCwgJHJlc3RyaWN0aW9uX3R5cGUsICRyZXN0cmljdGlvbl92YWx1ZSkpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJHJlc3RyaWN0aW9ucyA9ICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdibG9jaycpKQoJCQl7CgkJCQlmb3JlYWNoICgkcmVzdHJpY3Rpb25zIGFzICRyZXN0cmljdGlvbikKCQkJCXsKCQkJCQkkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwID0gJ2FsbG93JzsKCQkJCQkkcmVzdHJpY3Rpb25fdHlwZSA9IG51bGw7CgkJCQkJJHJlc3RyaWN0aW9uX3ZhbHVlID0gJ2l0dW5lcyc7CgkJCQkJaWYgKGlzc2V0KCRyZXN0cmljdGlvblsnZGF0YSddKSAmJiBzdHJ0b2xvd2VyKCRyZXN0cmljdGlvblsnZGF0YSddKSA9PT0gJ3llcycpCgkJCQkJewoJCQkJCQkkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwID0gJ2RlbnknOwoJCQkJCX0KCQkJCQkkcmVzdHJpY3Rpb25zX3BhcmVudFtdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ1Jlc3RyaWN0aW9uJywgYXJyYXkoJHJlc3RyaWN0aW9uX3JlbGF0aW9uc2hpcCwgJHJlc3RyaWN0aW9uX3R5cGUsICRyZXN0cmljdGlvbl92YWx1ZSkpOwoJCQkJfQoJCQl9CgkJCWlmIChpc19hcnJheSgkcmVzdHJpY3Rpb25zX3BhcmVudCkpCgkJCXsKCQkJCSRyZXN0cmljdGlvbnNfcGFyZW50ID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkcmVzdHJpY3Rpb25zX3BhcmVudCkpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHJlc3RyaWN0aW9uc19wYXJlbnQgPSBhcnJheShuZXcgU2ltcGxlUGllX1Jlc3RyaWN0aW9uKCdhbGxvdycsIG51bGwsICdkZWZhdWx0JykpOwoJCQl9CgoJCQkvLyBUSFVNQk5BSUxTCgkJCWlmICgkdGh1bWJuYWlscyA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1MsICd0aHVtYm5haWwnKSkKCQkJewoJCQkJZm9yZWFjaCAoJHRodW1ibmFpbHMgYXMgJHRodW1ibmFpbCkKCQkJCXsKCQkJCQlpZiAoaXNzZXQoJHRodW1ibmFpbFsnYXR0cmlicyddWycnXVsndXJsJ10pKQoJCQkJCXsKCQkJCQkJJHRodW1ibmFpbHNfcGFyZW50W10gPSAkdGhpcy0+c2FuaXRpemUoJHRodW1ibmFpbFsnYXR0cmlicyddWycnXVsndXJsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZWlmICgkdGh1bWJuYWlscyA9ICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ3RodW1ibmFpbCcpKQoJCQl7CgkJCQlmb3JlYWNoICgkdGh1bWJuYWlscyBhcyAkdGh1bWJuYWlsKQoJCQkJewoJCQkJCWlmIChpc3NldCgkdGh1bWJuYWlsWydhdHRyaWJzJ11bJyddWyd1cmwnXSkpCgkJCQkJewoJCQkJCQkkdGh1bWJuYWlsc19wYXJlbnRbXSA9ICR0aGlzLT5zYW5pdGl6ZSgkdGh1bWJuYWlsWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkkpOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJLy8gVElUTEVTCgkJCWlmICgkdGl0bGVfcGFyZW50ID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ3RpdGxlJykpCgkJCXsKCQkJCWlmIChpc3NldCgkdGl0bGVfcGFyZW50WzBdWydkYXRhJ10pKQoJCQkJewoJCQkJCSR0aXRsZV9wYXJlbnQgPSAkdGhpcy0+c2FuaXRpemUoJHRpdGxlX3BhcmVudFswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJfQoJCQl9CgkJCWVsc2VpZiAoJHRpdGxlX3BhcmVudCA9ICRwYXJlbnQtPmdldF9jaGFubmVsX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTUywgJ3RpdGxlJykpCgkJCXsKCQkJCWlmIChpc3NldCgkdGl0bGVfcGFyZW50WzBdWydkYXRhJ10pKQoJCQkJewoJCQkJCSR0aXRsZV9wYXJlbnQgPSAkdGhpcy0+c2FuaXRpemUoJHRpdGxlX3BhcmVudFswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJfQoJCQl9CgoJCQkvLyBDbGVhciB0aGUgbWVtb3J5CgkJCXVuc2V0KCRwYXJlbnQpOwoKCQkJLy8gQXR0cmlidXRlcwoJCQkkYml0cmF0ZSA9IG51bGw7CgkJCSRjaGFubmVscyA9IG51bGw7CgkJCSRkdXJhdGlvbiA9IG51bGw7CgkJCSRleHByZXNzaW9uID0gbnVsbDsKCQkJJGZyYW1lcmF0ZSA9IG51bGw7CgkJCSRoZWlnaHQgPSBudWxsOwoJCQkkamF2YXNjcmlwdCA9IG51bGw7CgkJCSRsYW5nID0gbnVsbDsKCQkJJGxlbmd0aCA9IG51bGw7CgkJCSRtZWRpdW0gPSBudWxsOwoJCQkkc2FtcGxpbmdyYXRlID0gbnVsbDsKCQkJJHR5cGUgPSBudWxsOwoJCQkkdXJsID0gbnVsbDsKCQkJJHdpZHRoID0gbnVsbDsKCgkJCS8vIEVsZW1lbnRzCgkJCSRjYXB0aW9ucyA9IG51bGw7CgkJCSRjYXRlZ29yaWVzID0gbnVsbDsKCQkJJGNvcHlyaWdodHMgPSBudWxsOwoJCQkkY3JlZGl0cyA9IG51bGw7CgkJCSRkZXNjcmlwdGlvbiA9IG51bGw7CgkJCSRoYXNoZXMgPSBudWxsOwoJCQkka2V5d29yZHMgPSBudWxsOwoJCQkkcGxheWVyID0gbnVsbDsKCQkJJHJhdGluZ3MgPSBudWxsOwoJCQkkcmVzdHJpY3Rpb25zID0gbnVsbDsKCQkJJHRodW1ibmFpbHMgPSBudWxsOwoJCQkkdGl0bGUgPSBudWxsOwoKCQkJLy8gSWYgd2UgaGF2ZSBtZWRpYTpncm91cCB0YWdzLCBsb29wIHRocm91Z2ggdGhlbS4KCQkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTLCAnZ3JvdXAnKSBhcyAkZ3JvdXApCgkJCXsKCQkJCWlmKGlzc2V0KCRncm91cFsnY2hpbGQnXSkgJiYgaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjb250ZW50J10pKQoJCQkJewoJCQkJCS8vIElmIHdlIGhhdmUgbWVkaWE6Y29udGVudCB0YWdzLCBsb29wIHRocm91Z2ggdGhlbS4KCQkJCQlmb3JlYWNoICgoYXJyYXkpICRncm91cFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY29udGVudCddIGFzICRjb250ZW50KQoJCQkJCXsKCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWyd1cmwnXSkpCgkJCQkJCXsKCQkJCQkJCS8vIEF0dHJpYnV0ZXMKCQkJCQkJCSRiaXRyYXRlID0gbnVsbDsKCQkJCQkJCSRjaGFubmVscyA9IG51bGw7CgkJCQkJCQkkZHVyYXRpb24gPSBudWxsOwoJCQkJCQkJJGV4cHJlc3Npb24gPSBudWxsOwoJCQkJCQkJJGZyYW1lcmF0ZSA9IG51bGw7CgkJCQkJCQkkaGVpZ2h0ID0gbnVsbDsKCQkJCQkJCSRqYXZhc2NyaXB0ID0gbnVsbDsKCQkJCQkJCSRsYW5nID0gbnVsbDsKCQkJCQkJCSRsZW5ndGggPSBudWxsOwoJCQkJCQkJJG1lZGl1bSA9IG51bGw7CgkJCQkJCQkkc2FtcGxpbmdyYXRlID0gbnVsbDsKCQkJCQkJCSR0eXBlID0gbnVsbDsKCQkJCQkJCSR1cmwgPSBudWxsOwoJCQkJCQkJJHdpZHRoID0gbnVsbDsKCgkJCQkJCQkvLyBFbGVtZW50cwoJCQkJCQkJJGNhcHRpb25zID0gbnVsbDsKCQkJCQkJCSRjYXRlZ29yaWVzID0gbnVsbDsKCQkJCQkJCSRjb3B5cmlnaHRzID0gbnVsbDsKCQkJCQkJCSRjcmVkaXRzID0gbnVsbDsKCQkJCQkJCSRkZXNjcmlwdGlvbiA9IG51bGw7CgkJCQkJCQkkaGFzaGVzID0gbnVsbDsKCQkJCQkJCSRrZXl3b3JkcyA9IG51bGw7CgkJCQkJCQkkcGxheWVyID0gbnVsbDsKCQkJCQkJCSRyYXRpbmdzID0gbnVsbDsKCQkJCQkJCSRyZXN0cmljdGlvbnMgPSBudWxsOwoJCQkJCQkJJHRodW1ibmFpbHMgPSBudWxsOwoJCQkJCQkJJHRpdGxlID0gbnVsbDsKCgkJCQkJCQkvLyBTdGFydCBjaGVja2luZyB0aGUgYXR0cmlidXRlcyBvZiBtZWRpYTpjb250ZW50CgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ2JpdHJhdGUnXSkpCgkJCQkJCQl7CgkJCQkJCQkJJGJpdHJhdGUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ2JpdHJhdGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsnY2hhbm5lbHMnXSkpCgkJCQkJCQl7CgkJCQkJCQkJJGNoYW5uZWxzID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydhdHRyaWJzJ11bJyddWydjaGFubmVscyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWydkdXJhdGlvbiddKSkKCQkJCQkJCXsKCQkJCQkJCQkkZHVyYXRpb24gPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ2R1cmF0aW9uJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJJGR1cmF0aW9uID0gJGR1cmF0aW9uX3BhcmVudDsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsnZXhwcmVzc2lvbiddKSkKCQkJCQkJCXsKCQkJCQkJCQkkZXhwcmVzc2lvbiA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnZXhwcmVzc2lvbiddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWydmcmFtZXJhdGUnXSkpCgkJCQkJCQl7CgkJCQkJCQkJJGZyYW1lcmF0ZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnZnJhbWVyYXRlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ2hlaWdodCddKSkKCQkJCQkJCXsKCQkJCQkJCQkkaGVpZ2h0ID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydhdHRyaWJzJ11bJyddWydoZWlnaHQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsnbGFuZyddKSkKCQkJCQkJCXsKCQkJCQkJCQkkbGFuZyA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnbGFuZyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWydmaWxlU2l6ZSddKSkKCQkJCQkJCXsKCQkJCQkJCQkkbGVuZ3RoID0gY2VpbCgkY29udGVudFsnYXR0cmlicyddWycnXVsnZmlsZVNpemUnXSk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ21lZGl1bSddKSkKCQkJCQkJCXsKCQkJCQkJCQkkbWVkaXVtID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydhdHRyaWJzJ11bJyddWydtZWRpdW0nXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsnc2FtcGxpbmdyYXRlJ10pKQoJCQkJCQkJewoJCQkJCQkJCSRzYW1wbGluZ3JhdGUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3NhbXBsaW5ncmF0ZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCQkJewoJCQkJCQkJCSR0eXBlID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydhdHRyaWJzJ11bJyddWyd0eXBlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3dpZHRoJ10pKQoJCQkJCQkJewoJCQkJCQkJCSR3aWR0aCA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnd2lkdGgnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCSR1cmwgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3VybCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSk7CgoJCQkJCQkJLy8gQ2hlY2tpbmcgdGhlIG90aGVyIG9wdGlvbmFsIG1lZGlhOiBlbGVtZW50cy4gUHJpb3JpdHk6IG1lZGlhOmNvbnRlbnQsIG1lZGlhOmdyb3VwLCBpdGVtLCBjaGFubmVsCgoJCQkJCQkJLy8gQ0FQVElPTlMKCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsndGV4dCddKSkKCQkJCQkJCXsKCQkJCQkJCQlmb3JlYWNoICgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsndGV4dCddIGFzICRjYXB0aW9uKQoJCQkJCQkJCXsKCQkJCQkJCQkJJGNhcHRpb25fdHlwZSA9IG51bGw7CgkJCQkJCQkJCSRjYXB0aW9uX2xhbmcgPSBudWxsOwoJCQkJCQkJCQkkY2FwdGlvbl9zdGFydFRpbWUgPSBudWxsOwoJCQkJCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gbnVsbDsKCQkJCQkJCQkJJGNhcHRpb25fdGV4dCA9IG51bGw7CgkJCQkJCQkJCWlmIChpc3NldCgkY2FwdGlvblsnYXR0cmlicyddWycnXVsndHlwZSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNhcHRpb25fdHlwZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnYXR0cmlicyddWycnXVsndHlwZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChpc3NldCgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnbGFuZyddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNhcHRpb25fbGFuZyA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnbGFuZyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChpc3NldCgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnc3RhcnQnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRjYXB0aW9uX3N0YXJ0VGltZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnc3RhcnQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJGNhcHRpb25bJ2F0dHJpYnMnXVsnJ11bJ2VuZCddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNhcHRpb25fZW5kVGltZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnZW5kJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydkYXRhJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY2FwdGlvbl90ZXh0ID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJGNhcHRpb25zW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2FwdGlvbicsIGFycmF5KCRjYXB0aW9uX3R5cGUsICRjYXB0aW9uX2xhbmcsICRjYXB0aW9uX3N0YXJ0VGltZSwgJGNhcHRpb25fZW5kVGltZSwgJGNhcHRpb25fdGV4dCkpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJGNhcHRpb25zKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjYXB0aW9ucyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGNhcHRpb25zKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmIChpc3NldCgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3RleHQnXSkpCgkJCQkJCQl7CgkJCQkJCQkJZm9yZWFjaCAoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWyd0ZXh0J10gYXMgJGNhcHRpb24pCgkJCQkJCQkJewoJCQkJCQkJCQkkY2FwdGlvbl90eXBlID0gbnVsbDsKCQkJCQkJCQkJJGNhcHRpb25fbGFuZyA9IG51bGw7CgkJCQkJCQkJCSRjYXB0aW9uX3N0YXJ0VGltZSA9IG51bGw7CgkJCQkJCQkJCSRjYXB0aW9uX2VuZFRpbWUgPSBudWxsOwoJCQkJCQkJCQkkY2FwdGlvbl90ZXh0ID0gbnVsbDsKCQkJCQkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY2FwdGlvbl90eXBlID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydsYW5nJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY2FwdGlvbl9sYW5nID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydsYW5nJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydzdGFydCddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNhcHRpb25fc3RhcnRUaW1lID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydzdGFydCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChpc3NldCgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnZW5kJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydlbmQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJGNhcHRpb25bJ2RhdGEnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRjYXB0aW9uX3RleHQgPSAkdGhpcy0+c2FuaXRpemUoJGNhcHRpb25bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkY2FwdGlvbnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDYXB0aW9uJywgYXJyYXkoJGNhcHRpb25fdHlwZSwgJGNhcHRpb25fbGFuZywgJGNhcHRpb25fc3RhcnRUaW1lLCAkY2FwdGlvbl9lbmRUaW1lLCAkY2FwdGlvbl90ZXh0KSk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc19hcnJheSgkY2FwdGlvbnMpKQoJCQkJCQkJCXsKCQkJCQkJCQkJJGNhcHRpb25zID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkY2FwdGlvbnMpKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJJGNhcHRpb25zID0gJGNhcHRpb25zX3BhcmVudDsKCQkJCQkJCX0KCgkJCQkJCQkvLyBDQVRFR09SSUVTCgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NhdGVnb3J5J10pKQoJCQkJCQkJewoJCQkJCQkJCWZvcmVhY2ggKChhcnJheSkgJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NhdGVnb3J5J10gYXMgJGNhdGVnb3J5KQoJCQkJCQkJCXsKCQkJCQkJCQkJJHRlcm0gPSBudWxsOwoJCQkJCQkJCQkkc2NoZW1lID0gbnVsbDsKCQkJCQkJCQkJJGxhYmVsID0gbnVsbDsKCQkJCQkJCQkJaWYgKGlzc2V0KCRjYXRlZ29yeVsnZGF0YSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHRlcm0gPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkc2NoZW1lID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkc2NoZW1lID0gJ2h0dHA6Ly9zZWFyY2gueWFob28uY29tL21yc3MvY2F0ZWdvcnlfc2NoZW1hJzsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydsYWJlbCddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGxhYmVsID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnbGFiZWwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkY2F0ZWdvcmllc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NhdGVnb3J5JywgYXJyYXkoJHRlcm0sICRzY2hlbWUsICRsYWJlbCkpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NhdGVnb3J5J10pKQoJCQkJCQkJewoJCQkJCQkJCWZvcmVhY2ggKChhcnJheSkgJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjYXRlZ29yeSddIGFzICRjYXRlZ29yeSkKCQkJCQkJCQl7CgkJCQkJCQkJCSR0ZXJtID0gbnVsbDsKCQkJCQkJCQkJJHNjaGVtZSA9IG51bGw7CgkJCQkJCQkJCSRsYWJlbCA9IG51bGw7CgkJCQkJCQkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2RhdGEnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHNjaGVtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHNjaGVtZSA9ICdodHRwOi8vc2VhcmNoLnlhaG9vLmNvbS9tcnNzL2NhdGVnb3J5X3NjaGVtYSc7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnbGFiZWwnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRsYWJlbCA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJGNhdGVnb3JpZXNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDYXRlZ29yeScsIGFycmF5KCR0ZXJtLCAkc2NoZW1lLCAkbGFiZWwpKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNfYXJyYXkoJGNhdGVnb3JpZXMpICYmIGlzX2FycmF5KCRjYXRlZ29yaWVzX3BhcmVudCkpCgkJCQkJCQl7CgkJCQkJCQkJJGNhdGVnb3JpZXMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRjYXRlZ29yaWVzLCAkY2F0ZWdvcmllc19wYXJlbnQpKSk7CgkJCQkJCQl9CgkJCQkJCQllbHNlaWYgKGlzX2FycmF5KCRjYXRlZ29yaWVzKSkKCQkJCQkJCXsKCQkJCQkJCQkkY2F0ZWdvcmllcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGNhdGVnb3JpZXMpKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2VpZiAoaXNfYXJyYXkoJGNhdGVnb3JpZXNfcGFyZW50KSkKCQkJCQkJCXsKCQkJCQkJCQkkY2F0ZWdvcmllcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGNhdGVnb3JpZXNfcGFyZW50KSk7CgkJCQkJCQl9CgoJCQkJCQkJLy8gQ09QWVJJR0hUUwoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjb3B5cmlnaHQnXSkpCgkJCQkJCQl7CgkJCQkJCQkJJGNvcHlyaWdodF91cmwgPSBudWxsOwoJCQkJCQkJCSRjb3B5cmlnaHRfbGFiZWwgPSBudWxsOwoJCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY29weXJpZ2h0J11bMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjb3B5cmlnaHRfdXJsID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjb3B5cmlnaHQnXVswXVsnYXR0cmlicyddWycnXVsndXJsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY29weXJpZ2h0J11bMF1bJ2RhdGEnXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkY29weXJpZ2h0X2xhYmVsID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjb3B5cmlnaHQnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQkkY29weXJpZ2h0cyA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDb3B5cmlnaHQnLCBhcnJheSgkY29weXJpZ2h0X3VybCwgJGNvcHlyaWdodF9sYWJlbCkpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmIChpc3NldCgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NvcHlyaWdodCddKSkKCQkJCQkJCXsKCQkJCQkJCQkkY29weXJpZ2h0X3VybCA9IG51bGw7CgkJCQkJCQkJJGNvcHlyaWdodF9sYWJlbCA9IG51bGw7CgkJCQkJCQkJaWYgKGlzc2V0KCRncm91cFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY29weXJpZ2h0J11bMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjb3B5cmlnaHRfdXJsID0gJHRoaXMtPnNhbml0aXplKCRncm91cFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY29weXJpZ2h0J11bMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjb3B5cmlnaHQnXVswXVsnZGF0YSddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjb3B5cmlnaHRfbGFiZWwgPSAkdGhpcy0+c2FuaXRpemUoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjb3B5cmlnaHQnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQkkY29weXJpZ2h0cyA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDb3B5cmlnaHQnLCBhcnJheSgkY29weXJpZ2h0X3VybCwgJGNvcHlyaWdodF9sYWJlbCkpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRjb3B5cmlnaHRzID0gJGNvcHlyaWdodHNfcGFyZW50OwoJCQkJCQkJfQoKCQkJCQkJCS8vIENSRURJVFMKCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY3JlZGl0J10pKQoJCQkJCQkJewoJCQkJCQkJCWZvcmVhY2ggKCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjcmVkaXQnXSBhcyAkY3JlZGl0KQoJCQkJCQkJCXsKCQkJCQkJCQkJJGNyZWRpdF9yb2xlID0gbnVsbDsKCQkJCQkJCQkJJGNyZWRpdF9zY2hlbWUgPSBudWxsOwoJCQkJCQkJCQkkY3JlZGl0X25hbWUgPSBudWxsOwoJCQkJCQkJCQlpZiAoaXNzZXQoJGNyZWRpdFsnYXR0cmlicyddWycnXVsncm9sZSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNyZWRpdF9yb2xlID0gJHRoaXMtPnNhbml0aXplKCRjcmVkaXRbJ2F0dHJpYnMnXVsnJ11bJ3JvbGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJGNyZWRpdFsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY3JlZGl0X3NjaGVtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY3JlZGl0WydhdHRyaWJzJ11bJyddWydzY2hlbWUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRjcmVkaXRfc2NoZW1lID0gJ3VybjplYnUnOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChpc3NldCgkY3JlZGl0WydkYXRhJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY3JlZGl0X25hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNyZWRpdFsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSRjcmVkaXRzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ3JlZGl0JywgYXJyYXkoJGNyZWRpdF9yb2xlLCAkY3JlZGl0X3NjaGVtZSwgJGNyZWRpdF9uYW1lKSk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc19hcnJheSgkY3JlZGl0cykpCgkJCQkJCQkJewoJCQkJCQkJCQkkY3JlZGl0cyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGNyZWRpdHMpKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQllbHNlaWYgKGlzc2V0KCRncm91cFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY3JlZGl0J10pKQoJCQkJCQkJewoJCQkJCQkJCWZvcmVhY2ggKCRncm91cFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY3JlZGl0J10gYXMgJGNyZWRpdCkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjcmVkaXRfcm9sZSA9IG51bGw7CgkJCQkJCQkJCSRjcmVkaXRfc2NoZW1lID0gbnVsbDsKCQkJCQkJCQkJJGNyZWRpdF9uYW1lID0gbnVsbDsKCQkJCQkJCQkJaWYgKGlzc2V0KCRjcmVkaXRbJ2F0dHJpYnMnXVsnJ11bJ3JvbGUnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRjcmVkaXRfcm9sZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY3JlZGl0WydhdHRyaWJzJ11bJyddWydyb2xlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRjcmVkaXRbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNyZWRpdF9zY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNyZWRpdFsnYXR0cmlicyddWycnXVsnc2NoZW1lJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY3JlZGl0X3NjaGVtZSA9ICd1cm46ZWJ1JzsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJGNyZWRpdFsnZGF0YSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNyZWRpdF9uYW1lID0gJHRoaXMtPnNhbml0aXplKCRjcmVkaXRbJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkY3JlZGl0c1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NyZWRpdCcsIGFycmF5KCRjcmVkaXRfcm9sZSwgJGNyZWRpdF9zY2hlbWUsICRjcmVkaXRfbmFtZSkpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJGNyZWRpdHMpKQoJCQkJCQkJCXsKCQkJCQkJCQkJJGNyZWRpdHMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRjcmVkaXRzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRjcmVkaXRzID0gJGNyZWRpdHNfcGFyZW50OwoJCQkJCQkJfQoKCQkJCQkJCS8vIERFU0NSSVBUSU9OCgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2Rlc2NyaXB0aW9uJ10pKQoJCQkJCQkJewoJCQkJCQkJCSRkZXNjcmlwdGlvbiA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnZGVzY3JpcHRpb24nXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmIChpc3NldCgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2Rlc2NyaXB0aW9uJ10pKQoJCQkJCQkJewoJCQkJCQkJCSRkZXNjcmlwdGlvbiA9ICR0aGlzLT5zYW5pdGl6ZSgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2Rlc2NyaXB0aW9uJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2UKCQkJCQkJCXsKCQkJCQkJCQkkZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb25fcGFyZW50OwoJCQkJCQkJfQoKCQkJCQkJCS8vIEhBU0hFUwoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydoYXNoJ10pKQoJCQkJCQkJewoJCQkJCQkJCWZvcmVhY2ggKCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydoYXNoJ10gYXMgJGhhc2gpCgkJCQkJCQkJewoJCQkJCQkJCQkkdmFsdWUgPSBudWxsOwoJCQkJCQkJCQkkYWxnbyA9IG51bGw7CgkJCQkJCQkJCWlmIChpc3NldCgkaGFzaFsnZGF0YSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHZhbHVlID0gJHRoaXMtPnNhbml0aXplKCRoYXNoWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRoYXNoWydhdHRyaWJzJ11bJyddWydhbGdvJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkYWxnbyA9ICR0aGlzLT5zYW5pdGl6ZSgkaGFzaFsnYXR0cmlicyddWycnXVsnYWxnbyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGFsZ28gPSAnbWQ1JzsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkaGFzaGVzW10gPSAkYWxnby4nOicuJHZhbHVlOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJGhhc2hlcykpCgkJCQkJCQkJewoJCQkJCQkJCQkkaGFzaGVzID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkaGFzaGVzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmIChpc3NldCgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2hhc2gnXSkpCgkJCQkJCQl7CgkJCQkJCQkJZm9yZWFjaCAoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydoYXNoJ10gYXMgJGhhc2gpCgkJCQkJCQkJewoJCQkJCQkJCQkkdmFsdWUgPSBudWxsOwoJCQkJCQkJCQkkYWxnbyA9IG51bGw7CgkJCQkJCQkJCWlmIChpc3NldCgkaGFzaFsnZGF0YSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHZhbHVlID0gJHRoaXMtPnNhbml0aXplKCRoYXNoWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRoYXNoWydhdHRyaWJzJ11bJyddWydhbGdvJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkYWxnbyA9ICR0aGlzLT5zYW5pdGl6ZSgkaGFzaFsnYXR0cmlicyddWycnXVsnYWxnbyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGFsZ28gPSAnbWQ1JzsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkaGFzaGVzW10gPSAkYWxnby4nOicuJHZhbHVlOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJGhhc2hlcykpCgkJCQkJCQkJewoJCQkJCQkJCQkkaGFzaGVzID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkaGFzaGVzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRoYXNoZXMgPSAkaGFzaGVzX3BhcmVudDsKCQkJCQkJCX0KCgkJCQkJCQkvLyBLRVlXT1JEUwoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydrZXl3b3JkcyddKSkKCQkJCQkJCXsKCQkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2tleXdvcmRzJ11bMF1bJ2RhdGEnXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkdGVtcCA9IGV4cGxvZGUoJywnLCAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2tleXdvcmRzJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKSk7CgkJCQkJCQkJCWZvcmVhY2ggKCR0ZW1wIGFzICR3b3JkKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkka2V5d29yZHNbXSA9IHRyaW0oJHdvcmQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCXVuc2V0KCR0ZW1wKTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzX2FycmF5KCRrZXl3b3JkcykpCgkJCQkJCQkJewoJCQkJCQkJCQkka2V5d29yZHMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRrZXl3b3JkcykpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWVsc2VpZiAoaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydrZXl3b3JkcyddKSkKCQkJCQkJCXsKCQkJCQkJCQlpZiAoaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydrZXl3b3JkcyddWzBdWydkYXRhJ10pKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHRlbXAgPSBleHBsb2RlKCcsJywgJHRoaXMtPnNhbml0aXplKCRncm91cFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsna2V5d29yZHMnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpKTsKCQkJCQkJCQkJZm9yZWFjaCAoJHRlbXAgYXMgJHdvcmQpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRrZXl3b3Jkc1tdID0gdHJpbSgkd29yZCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJdW5zZXQoJHRlbXApOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJGtleXdvcmRzKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRrZXl3b3JkcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGtleXdvcmRzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRrZXl3b3JkcyA9ICRrZXl3b3Jkc19wYXJlbnQ7CgkJCQkJCQl9CgoJCQkJCQkJLy8gUExBWUVSCgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3BsYXllciddKSkKCQkJCQkJCXsKCQkJCQkJCQkkcGxheWVyID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydwbGF5ZXInXVswXVsnYXR0cmlicyddWycnXVsndXJsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2VpZiAoaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydwbGF5ZXInXSkpCgkJCQkJCQl7CgkJCQkJCQkJJHBsYXllciA9ICR0aGlzLT5zYW5pdGl6ZSgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3BsYXllciddWzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkkpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRwbGF5ZXIgPSAkcGxheWVyX3BhcmVudDsKCQkJCQkJCX0KCgkJCQkJCQkvLyBSQVRJTkdTCgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3JhdGluZyddKSkKCQkJCQkJCXsKCQkJCQkJCQlmb3JlYWNoICgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsncmF0aW5nJ10gYXMgJHJhdGluZykKCQkJCQkJCQl7CgkJCQkJCQkJCSRyYXRpbmdfc2NoZW1lID0gbnVsbDsKCQkJCQkJCQkJJHJhdGluZ192YWx1ZSA9IG51bGw7CgkJCQkJCQkJCWlmIChpc3NldCgkcmF0aW5nWydhdHRyaWJzJ11bJyddWydzY2hlbWUnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRyYXRpbmdfc2NoZW1lID0gJHRoaXMtPnNhbml0aXplKCRyYXRpbmdbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHJhdGluZ19zY2hlbWUgPSAndXJuOnNpbXBsZSc7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKGlzc2V0KCRyYXRpbmdbJ2RhdGEnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRyYXRpbmdfdmFsdWUgPSAkdGhpcy0+c2FuaXRpemUoJHJhdGluZ1snZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSRyYXRpbmdzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnUmF0aW5nJywgYXJyYXkoJHJhdGluZ19zY2hlbWUsICRyYXRpbmdfdmFsdWUpKTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzX2FycmF5KCRyYXRpbmdzKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRyYXRpbmdzID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkcmF0aW5ncykpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWVsc2VpZiAoaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydyYXRpbmcnXSkpCgkJCQkJCQl7CgkJCQkJCQkJZm9yZWFjaCAoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydyYXRpbmcnXSBhcyAkcmF0aW5nKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHJhdGluZ19zY2hlbWUgPSBudWxsOwoJCQkJCQkJCQkkcmF0aW5nX3ZhbHVlID0gbnVsbDsKCQkJCQkJCQkJaWYgKGlzc2V0KCRyYXRpbmdbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHJhdGluZ19zY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJHJhdGluZ1snYXR0cmlicyddWycnXVsnc2NoZW1lJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJZWxzZQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkcmF0aW5nX3NjaGVtZSA9ICd1cm46c2ltcGxlJzsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJHJhdGluZ1snZGF0YSddKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJJHJhdGluZ192YWx1ZSA9ICR0aGlzLT5zYW5pdGl6ZSgkcmF0aW5nWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJHJhdGluZ3NbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdSYXRpbmcnLCBhcnJheSgkcmF0aW5nX3NjaGVtZSwgJHJhdGluZ192YWx1ZSkpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJHJhdGluZ3MpKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHJhdGluZ3MgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRyYXRpbmdzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRyYXRpbmdzID0gJHJhdGluZ3NfcGFyZW50OwoJCQkJCQkJfQoKCQkJCQkJCS8vIFJFU1RSSUNUSU9OUwoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydyZXN0cmljdGlvbiddKSkKCQkJCQkJCXsKCQkJCQkJCQlmb3JlYWNoICgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsncmVzdHJpY3Rpb24nXSBhcyAkcmVzdHJpY3Rpb24pCgkJCQkJCQkJewoJCQkJCQkJCQkkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwID0gbnVsbDsKCQkJCQkJCQkJJHJlc3RyaWN0aW9uX3R5cGUgPSBudWxsOwoJCQkJCQkJCQkkcmVzdHJpY3Rpb25fdmFsdWUgPSBudWxsOwoJCQkJCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWydyZWxhdGlvbnNoaXAnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRyZXN0cmljdGlvbl9yZWxhdGlvbnNoaXAgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWydyZWxhdGlvbnNoaXAnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkcmVzdHJpY3Rpb25fdHlwZSA9ICR0aGlzLT5zYW5pdGl6ZSgkcmVzdHJpY3Rpb25bJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydkYXRhJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkcmVzdHJpY3Rpb25fdmFsdWUgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJHJlc3RyaWN0aW9uc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ1Jlc3RyaWN0aW9uJywgYXJyYXkoJHJlc3RyaWN0aW9uX3JlbGF0aW9uc2hpcCwgJHJlc3RyaWN0aW9uX3R5cGUsICRyZXN0cmljdGlvbl92YWx1ZSkpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJHJlc3RyaWN0aW9ucykpCgkJCQkJCQkJewoJCQkJCQkJCQkkcmVzdHJpY3Rpb25zID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkcmVzdHJpY3Rpb25zKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZWlmIChpc3NldCgkZ3JvdXBbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3Jlc3RyaWN0aW9uJ10pKQoJCQkJCQkJewoJCQkJCQkJCWZvcmVhY2ggKCRncm91cFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsncmVzdHJpY3Rpb24nXSBhcyAkcmVzdHJpY3Rpb24pCgkJCQkJCQkJewoJCQkJCQkJCQkkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwID0gbnVsbDsKCQkJCQkJCQkJJHJlc3RyaWN0aW9uX3R5cGUgPSBudWxsOwoJCQkJCQkJCQkkcmVzdHJpY3Rpb25fdmFsdWUgPSBudWxsOwoJCQkJCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWydyZWxhdGlvbnNoaXAnXSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRyZXN0cmljdGlvbl9yZWxhdGlvbnNoaXAgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWydyZWxhdGlvbnNoaXAnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkcmVzdHJpY3Rpb25fdHlwZSA9ICR0aGlzLT5zYW5pdGl6ZSgkcmVzdHJpY3Rpb25bJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydkYXRhJ10pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkcmVzdHJpY3Rpb25fdmFsdWUgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJHJlc3RyaWN0aW9uc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ1Jlc3RyaWN0aW9uJywgYXJyYXkoJHJlc3RyaWN0aW9uX3JlbGF0aW9uc2hpcCwgJHJlc3RyaWN0aW9uX3R5cGUsICRyZXN0cmljdGlvbl92YWx1ZSkpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJHJlc3RyaWN0aW9ucykpCgkJCQkJCQkJewoJCQkJCQkJCQkkcmVzdHJpY3Rpb25zID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkcmVzdHJpY3Rpb25zKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRyZXN0cmljdGlvbnMgPSAkcmVzdHJpY3Rpb25zX3BhcmVudDsKCQkJCQkJCX0KCgkJCQkJCQkvLyBUSFVNQk5BSUxTCgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3RodW1ibmFpbCddKSkKCQkJCQkJCXsKCQkJCQkJCQlmb3JlYWNoICgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsndGh1bWJuYWlsJ10gYXMgJHRodW1ibmFpbCkKCQkJCQkJCQl7CgkJCQkJCQkJCSR0aHVtYm5haWxzW10gPSAkdGhpcy0+c2FuaXRpemUoJHRodW1ibmFpbFsnYXR0cmlicyddWycnXVsndXJsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzX2FycmF5KCR0aHVtYm5haWxzKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSR0aHVtYm5haWxzID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkdGh1bWJuYWlscykpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWVsc2VpZiAoaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWyd0aHVtYm5haWwnXSkpCgkJCQkJCQl7CgkJCQkJCQkJZm9yZWFjaCAoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWyd0aHVtYm5haWwnXSBhcyAkdGh1bWJuYWlsKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHRodW1ibmFpbHNbXSA9ICR0aGlzLT5zYW5pdGl6ZSgkdGh1bWJuYWlsWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkkpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNfYXJyYXkoJHRodW1ibmFpbHMpKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHRodW1ibmFpbHMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCR0aHVtYm5haWxzKSk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSR0aHVtYm5haWxzID0gJHRodW1ibmFpbHNfcGFyZW50OwoJCQkJCQkJfQoKCQkJCQkJCS8vIFRJVExFUwoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWyd0aXRsZSddKSkKCQkJCQkJCXsKCQkJCQkJCQkkdGl0bGUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3RpdGxlJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCWVsc2VpZiAoaXNzZXQoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWyd0aXRsZSddKSkKCQkJCQkJCXsKCQkJCQkJCQkkdGl0bGUgPSAkdGhpcy0+c2FuaXRpemUoJGdyb3VwWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWyd0aXRsZSddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJJHRpdGxlID0gJHRpdGxlX3BhcmVudDsKCQkJCQkJCX0KCgkJCQkJCQkkdGhpcy0+ZGF0YVsnZW5jbG9zdXJlcyddW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnRW5jbG9zdXJlJywgYXJyYXkoJHVybCwgJHR5cGUsICRsZW5ndGgsIG51bGwsICRiaXRyYXRlLCAkY2FwdGlvbnMsICRjYXRlZ29yaWVzLCAkY2hhbm5lbHMsICRjb3B5cmlnaHRzLCAkY3JlZGl0cywgJGRlc2NyaXB0aW9uLCAkZHVyYXRpb24sICRleHByZXNzaW9uLCAkZnJhbWVyYXRlLCAkaGFzaGVzLCAkaGVpZ2h0LCAka2V5d29yZHMsICRsYW5nLCAkbWVkaXVtLCAkcGxheWVyLCAkcmF0aW5ncywgJHJlc3RyaWN0aW9ucywgJHNhbXBsaW5ncmF0ZSwgJHRodW1ibmFpbHMsICR0aXRsZSwgJHdpZHRoKSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIElmIHdlIGhhdmUgc3RhbmRhbG9uZSBtZWRpYTpjb250ZW50IHRhZ3MsIGxvb3AgdGhyb3VnaCB0aGVtLgoJCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NvbnRlbnQnXSkpCgkJCXsKCQkJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmRhdGFbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NvbnRlbnQnXSBhcyAkY29udGVudCkKCQkJCXsKCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3VybCddKSB8fCBpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsncGxheWVyJ10pKQoJCQkJCXsKCQkJCQkJLy8gQXR0cmlidXRlcwoJCQkJCQkkYml0cmF0ZSA9IG51bGw7CgkJCQkJCSRjaGFubmVscyA9IG51bGw7CgkJCQkJCSRkdXJhdGlvbiA9IG51bGw7CgkJCQkJCSRleHByZXNzaW9uID0gbnVsbDsKCQkJCQkJJGZyYW1lcmF0ZSA9IG51bGw7CgkJCQkJCSRoZWlnaHQgPSBudWxsOwoJCQkJCQkkamF2YXNjcmlwdCA9IG51bGw7CgkJCQkJCSRsYW5nID0gbnVsbDsKCQkJCQkJJGxlbmd0aCA9IG51bGw7CgkJCQkJCSRtZWRpdW0gPSBudWxsOwoJCQkJCQkkc2FtcGxpbmdyYXRlID0gbnVsbDsKCQkJCQkJJHR5cGUgPSBudWxsOwoJCQkJCQkkdXJsID0gbnVsbDsKCQkJCQkJJHdpZHRoID0gbnVsbDsKCgkJCQkJCS8vIEVsZW1lbnRzCgkJCQkJCSRjYXB0aW9ucyA9IG51bGw7CgkJCQkJCSRjYXRlZ29yaWVzID0gbnVsbDsKCQkJCQkJJGNvcHlyaWdodHMgPSBudWxsOwoJCQkJCQkkY3JlZGl0cyA9IG51bGw7CgkJCQkJCSRkZXNjcmlwdGlvbiA9IG51bGw7CgkJCQkJCSRoYXNoZXMgPSBudWxsOwoJCQkJCQkka2V5d29yZHMgPSBudWxsOwoJCQkJCQkkcGxheWVyID0gbnVsbDsKCQkJCQkJJHJhdGluZ3MgPSBudWxsOwoJCQkJCQkkcmVzdHJpY3Rpb25zID0gbnVsbDsKCQkJCQkJJHRodW1ibmFpbHMgPSBudWxsOwoJCQkJCQkkdGl0bGUgPSBudWxsOwoKCQkJCQkJLy8gU3RhcnQgY2hlY2tpbmcgdGhlIGF0dHJpYnV0ZXMgb2YgbWVkaWE6Y29udGVudAoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ2JpdHJhdGUnXSkpCgkJCQkJCXsKCQkJCQkJCSRiaXRyYXRlID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydhdHRyaWJzJ11bJyddWydiaXRyYXRlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWydjaGFubmVscyddKSkKCQkJCQkJewoJCQkJCQkJJGNoYW5uZWxzID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydhdHRyaWJzJ11bJyddWydjaGFubmVscyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsnZHVyYXRpb24nXSkpCgkJCQkJCXsKCQkJCQkJCSRkdXJhdGlvbiA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnZHVyYXRpb24nXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRkdXJhdGlvbiA9ICRkdXJhdGlvbl9wYXJlbnQ7CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWydleHByZXNzaW9uJ10pKQoJCQkJCQl7CgkJCQkJCQkkZXhwcmVzc2lvbiA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnZXhwcmVzc2lvbiddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsnZnJhbWVyYXRlJ10pKQoJCQkJCQl7CgkJCQkJCQkkZnJhbWVyYXRlID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydhdHRyaWJzJ11bJyddWydmcmFtZXJhdGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ2hlaWdodCddKSkKCQkJCQkJewoJCQkJCQkJJGhlaWdodCA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnaGVpZ2h0J10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWydsYW5nJ10pKQoJCQkJCQl7CgkJCQkJCQkkbGFuZyA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnbGFuZyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsnZmlsZVNpemUnXSkpCgkJCQkJCXsKCQkJCQkJCSRsZW5ndGggPSBjZWlsKCRjb250ZW50WydhdHRyaWJzJ11bJyddWydmaWxlU2l6ZSddKTsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ21lZGl1bSddKSkKCQkJCQkJewoJCQkJCQkJJG1lZGl1bSA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnYXR0cmlicyddWycnXVsnbWVkaXVtJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWydzYW1wbGluZ3JhdGUnXSkpCgkJCQkJCXsKCQkJCQkJCSRzYW1wbGluZ3JhdGUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3NhbXBsaW5ncmF0ZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkY29udGVudFsnYXR0cmlicyddWycnXVsndHlwZSddKSkKCQkJCQkJewoJCQkJCQkJJHR5cGUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3dpZHRoJ10pKQoJCQkJCQl7CgkJCQkJCQkkd2lkdGggPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3dpZHRoJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydhdHRyaWJzJ11bJyddWyd1cmwnXSkpCgkJCQkJCXsKCQkJCQkJCSR1cmwgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2F0dHJpYnMnXVsnJ11bJ3VybCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSk7CgkJCQkJCX0KCQkJCQkJLy8gQ2hlY2tpbmcgdGhlIG90aGVyIG9wdGlvbmFsIG1lZGlhOiBlbGVtZW50cy4gUHJpb3JpdHk6IG1lZGlhOmNvbnRlbnQsIG1lZGlhOmdyb3VwLCBpdGVtLCBjaGFubmVsCgoJCQkJCQkvLyBDQVBUSU9OUwoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3RleHQnXSkpCgkJCQkJCXsKCQkJCQkJCWZvcmVhY2ggKCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWyd0ZXh0J10gYXMgJGNhcHRpb24pCgkJCQkJCQl7CgkJCQkJCQkJJGNhcHRpb25fdHlwZSA9IG51bGw7CgkJCQkJCQkJJGNhcHRpb25fbGFuZyA9IG51bGw7CgkJCQkJCQkJJGNhcHRpb25fc3RhcnRUaW1lID0gbnVsbDsKCQkJCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gbnVsbDsKCQkJCQkJCQkkY2FwdGlvbl90ZXh0ID0gbnVsbDsKCQkJCQkJCQlpZiAoaXNzZXQoJGNhcHRpb25bJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkY2FwdGlvbl90eXBlID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWyd0eXBlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnbGFuZyddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjYXB0aW9uX2xhbmcgPSAkdGhpcy0+c2FuaXRpemUoJGNhcHRpb25bJ2F0dHJpYnMnXVsnJ11bJ2xhbmcnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydzdGFydCddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjYXB0aW9uX3N0YXJ0VGltZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnYXR0cmlicyddWycnXVsnc3RhcnQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydlbmQnXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkY2FwdGlvbl9lbmRUaW1lID0gJHRoaXMtPnNhbml0aXplKCRjYXB0aW9uWydhdHRyaWJzJ11bJyddWydlbmQnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRjYXB0aW9uWydkYXRhJ10pKQoJCQkJCQkJCXsKCQkJCQkJCQkJJGNhcHRpb25fdGV4dCA9ICR0aGlzLT5zYW5pdGl6ZSgkY2FwdGlvblsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQkkY2FwdGlvbnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDYXB0aW9uJywgYXJyYXkoJGNhcHRpb25fdHlwZSwgJGNhcHRpb25fbGFuZywgJGNhcHRpb25fc3RhcnRUaW1lLCAkY2FwdGlvbl9lbmRUaW1lLCAkY2FwdGlvbl90ZXh0KSk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNfYXJyYXkoJGNhcHRpb25zKSkKCQkJCQkJCXsKCQkJCQkJCQkkY2FwdGlvbnMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRjYXB0aW9ucykpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJGNhcHRpb25zID0gJGNhcHRpb25zX3BhcmVudDsKCQkJCQkJfQoKCQkJCQkJLy8gQ0FURUdPUklFUwoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NhdGVnb3J5J10pKQoJCQkJCQl7CgkJCQkJCQlmb3JlYWNoICgoYXJyYXkpICRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydjYXRlZ29yeSddIGFzICRjYXRlZ29yeSkKCQkJCQkJCXsKCQkJCQkJCQkkdGVybSA9IG51bGw7CgkJCQkJCQkJJHNjaGVtZSA9IG51bGw7CgkJCQkJCQkJJGxhYmVsID0gbnVsbDsKCQkJCQkJCQlpZiAoaXNzZXQoJGNhdGVnb3J5WydkYXRhJ10pKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHRlcm0gPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRzY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydzY2hlbWUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJJHNjaGVtZSA9ICdodHRwOi8vc2VhcmNoLnlhaG9vLmNvbS9tcnNzL2NhdGVnb3J5X3NjaGVtYSc7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10pKQoJCQkJCQkJCXsKCQkJCQkJCQkJJGxhYmVsID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsnbGFiZWwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJJGNhdGVnb3JpZXNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDYXRlZ29yeScsIGFycmF5KCR0ZXJtLCAkc2NoZW1lLCAkbGFiZWwpKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZiAoaXNfYXJyYXkoJGNhdGVnb3JpZXMpICYmIGlzX2FycmF5KCRjYXRlZ29yaWVzX3BhcmVudCkpCgkJCQkJCXsKCQkJCQkJCSRjYXRlZ29yaWVzID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgkY2F0ZWdvcmllcywgJGNhdGVnb3JpZXNfcGFyZW50KSkpOwoJCQkJCQl9CgkJCQkJCWVsc2VpZiAoaXNfYXJyYXkoJGNhdGVnb3JpZXMpKQoJCQkJCQl7CgkJCQkJCQkkY2F0ZWdvcmllcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGNhdGVnb3JpZXMpKTsKCQkJCQkJfQoJCQkJCQllbHNlaWYgKGlzX2FycmF5KCRjYXRlZ29yaWVzX3BhcmVudCkpCgkJCQkJCXsKCQkJCQkJCSRjYXRlZ29yaWVzID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkY2F0ZWdvcmllc19wYXJlbnQpKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRjYXRlZ29yaWVzID0gbnVsbDsKCQkJCQkJfQoKCQkJCQkJLy8gQ09QWVJJR0hUUwoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NvcHlyaWdodCddKSkKCQkJCQkJewoJCQkJCQkJJGNvcHlyaWdodF91cmwgPSBudWxsOwoJCQkJCQkJJGNvcHlyaWdodF9sYWJlbCA9IG51bGw7CgkJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NvcHlyaWdodCddWzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSkpCgkJCQkJCQl7CgkJCQkJCQkJJGNvcHlyaWdodF91cmwgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NvcHlyaWdodCddWzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY29weXJpZ2h0J11bMF1bJ2RhdGEnXSkpCgkJCQkJCQl7CgkJCQkJCQkJJGNvcHlyaWdodF9sYWJlbCA9ICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnY29weXJpZ2h0J11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCX0KCQkJCQkJCSRjb3B5cmlnaHRzID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NvcHlyaWdodCcsIGFycmF5KCRjb3B5cmlnaHRfdXJsLCAkY29weXJpZ2h0X2xhYmVsKSk7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkY29weXJpZ2h0cyA9ICRjb3B5cmlnaHRzX3BhcmVudDsKCQkJCQkJfQoKCQkJCQkJLy8gQ1JFRElUUwoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NyZWRpdCddKSkKCQkJCQkJewoJCQkJCQkJZm9yZWFjaCAoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ2NyZWRpdCddIGFzICRjcmVkaXQpCgkJCQkJCQl7CgkJCQkJCQkJJGNyZWRpdF9yb2xlID0gbnVsbDsKCQkJCQkJCQkkY3JlZGl0X3NjaGVtZSA9IG51bGw7CgkJCQkJCQkJJGNyZWRpdF9uYW1lID0gbnVsbDsKCQkJCQkJCQlpZiAoaXNzZXQoJGNyZWRpdFsnYXR0cmlicyddWycnXVsncm9sZSddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRjcmVkaXRfcm9sZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY3JlZGl0WydhdHRyaWJzJ11bJyddWydyb2xlJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkY3JlZGl0WydhdHRyaWJzJ11bJyddWydzY2hlbWUnXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkY3JlZGl0X3NjaGVtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY3JlZGl0WydhdHRyaWJzJ11bJyddWydzY2hlbWUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJZWxzZQoJCQkJCQkJCXsKCQkJCQkJCQkJJGNyZWRpdF9zY2hlbWUgPSAndXJuOmVidSc7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkY3JlZGl0WydkYXRhJ10pKQoJCQkJCQkJCXsKCQkJCQkJCQkJJGNyZWRpdF9uYW1lID0gJHRoaXMtPnNhbml0aXplKCRjcmVkaXRbJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJJGNyZWRpdHNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdDcmVkaXQnLCBhcnJheSgkY3JlZGl0X3JvbGUsICRjcmVkaXRfc2NoZW1lLCAkY3JlZGl0X25hbWUpKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc19hcnJheSgkY3JlZGl0cykpCgkJCQkJCQl7CgkJCQkJCQkJJGNyZWRpdHMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRjcmVkaXRzKSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkY3JlZGl0cyA9ICRjcmVkaXRzX3BhcmVudDsKCQkJCQkJfQoKCQkJCQkJLy8gREVTQ1JJUFRJT04KCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydkZXNjcmlwdGlvbiddKSkKCQkJCQkJewoJCQkJCQkJJGRlc2NyaXB0aW9uID0gJHRoaXMtPnNhbml0aXplKCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydkZXNjcmlwdGlvbiddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb25fcGFyZW50OwoJCQkJCQl9CgoJCQkJCQkvLyBIQVNIRVMKCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydoYXNoJ10pKQoJCQkJCQl7CgkJCQkJCQlmb3JlYWNoICgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsnaGFzaCddIGFzICRoYXNoKQoJCQkJCQkJewoJCQkJCQkJCSR2YWx1ZSA9IG51bGw7CgkJCQkJCQkJJGFsZ28gPSBudWxsOwoJCQkJCQkJCWlmIChpc3NldCgkaGFzaFsnZGF0YSddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSR2YWx1ZSA9ICR0aGlzLT5zYW5pdGl6ZSgkaGFzaFsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNzZXQoJGhhc2hbJ2F0dHJpYnMnXVsnJ11bJ2FsZ28nXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkYWxnbyA9ICR0aGlzLT5zYW5pdGl6ZSgkaGFzaFsnYXR0cmlicyddWycnXVsnYWxnbyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQllbHNlCgkJCQkJCQkJewoJCQkJCQkJCQkkYWxnbyA9ICdtZDUnOwoJCQkJCQkJCX0KCQkJCQkJCQkkaGFzaGVzW10gPSAkYWxnby4nOicuJHZhbHVlOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzX2FycmF5KCRoYXNoZXMpKQoJCQkJCQkJewoJCQkJCQkJCSRoYXNoZXMgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCRoYXNoZXMpKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRoYXNoZXMgPSAkaGFzaGVzX3BhcmVudDsKCQkJCQkJfQoKCQkJCQkJLy8gS0VZV09SRFMKCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydrZXl3b3JkcyddKSkKCQkJCQkJewoJCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydrZXl3b3JkcyddWzBdWydkYXRhJ10pKQoJCQkJCQkJewoJCQkJCQkJCSR0ZW1wID0gZXhwbG9kZSgnLCcsICR0aGlzLT5zYW5pdGl6ZSgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsna2V5d29yZHMnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpKTsKCQkJCQkJCQlmb3JlYWNoICgkdGVtcCBhcyAkd29yZCkKCQkJCQkJCQl7CgkJCQkJCQkJCSRrZXl3b3Jkc1tdID0gdHJpbSgkd29yZCk7CgkJCQkJCQkJfQoJCQkJCQkJCXVuc2V0KCR0ZW1wKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc19hcnJheSgka2V5d29yZHMpKQoJCQkJCQkJewoJCQkJCQkJCSRrZXl3b3JkcyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJGtleXdvcmRzKSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkka2V5d29yZHMgPSAka2V5d29yZHNfcGFyZW50OwoJCQkJCQl9CgoJCQkJCQkvLyBQTEFZRVIKCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydwbGF5ZXInXSkpCgkJCQkJCXsKCQkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsncGxheWVyJ11bMF1bJ2F0dHJpYnMnXVsnJ11bJ3VybCddKSkgewoJCQkJCQkJCSRwbGF5ZXIgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3BsYXllciddWzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJHBsYXllciA9ICRwbGF5ZXJfcGFyZW50OwoJCQkJCQl9CgoJCQkJCQkvLyBSQVRJTkdTCgkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsncmF0aW5nJ10pKQoJCQkJCQl7CgkJCQkJCQlmb3JlYWNoICgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsncmF0aW5nJ10gYXMgJHJhdGluZykKCQkJCQkJCXsKCQkJCQkJCQkkcmF0aW5nX3NjaGVtZSA9IG51bGw7CgkJCQkJCQkJJHJhdGluZ192YWx1ZSA9IG51bGw7CgkJCQkJCQkJaWYgKGlzc2V0KCRyYXRpbmdbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRyYXRpbmdfc2NoZW1lID0gJHRoaXMtPnNhbml0aXplKCRyYXRpbmdbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQllbHNlCgkJCQkJCQkJewoJCQkJCQkJCQkkcmF0aW5nX3NjaGVtZSA9ICd1cm46c2ltcGxlJzsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRyYXRpbmdbJ2RhdGEnXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkcmF0aW5nX3ZhbHVlID0gJHRoaXMtPnNhbml0aXplKCRyYXRpbmdbJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJJHJhdGluZ3NbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdSYXRpbmcnLCBhcnJheSgkcmF0aW5nX3NjaGVtZSwgJHJhdGluZ192YWx1ZSkpOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzX2FycmF5KCRyYXRpbmdzKSkKCQkJCQkJCXsKCQkJCQkJCQkkcmF0aW5ncyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJHJhdGluZ3MpKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSRyYXRpbmdzID0gJHJhdGluZ3NfcGFyZW50OwoJCQkJCQl9CgoJCQkJCQkvLyBSRVNUUklDVElPTlMKCQkJCQkJaWYgKGlzc2V0KCRjb250ZW50WydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NdWydyZXN0cmljdGlvbiddKSkKCQkJCQkJewoJCQkJCQkJZm9yZWFjaCAoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3Jlc3RyaWN0aW9uJ10gYXMgJHJlc3RyaWN0aW9uKQoJCQkJCQkJewoJCQkJCQkJCSRyZXN0cmljdGlvbl9yZWxhdGlvbnNoaXAgPSBudWxsOwoJCQkJCQkJCSRyZXN0cmljdGlvbl90eXBlID0gbnVsbDsKCQkJCQkJCQkkcmVzdHJpY3Rpb25fdmFsdWUgPSBudWxsOwoJCQkJCQkJCWlmIChpc3NldCgkcmVzdHJpY3Rpb25bJ2F0dHJpYnMnXVsnJ11bJ3JlbGF0aW9uc2hpcCddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRyZXN0cmljdGlvbl9yZWxhdGlvbnNoaXAgPSAkdGhpcy0+c2FuaXRpemUoJHJlc3RyaWN0aW9uWydhdHRyaWJzJ11bJyddWydyZWxhdGlvbnNoaXAnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRyZXN0cmljdGlvblsnYXR0cmlicyddWycnXVsndHlwZSddKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRyZXN0cmljdGlvbl90eXBlID0gJHRoaXMtPnNhbml0aXplKCRyZXN0cmljdGlvblsnYXR0cmlicyddWycnXVsndHlwZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNzZXQoJHJlc3RyaWN0aW9uWydkYXRhJ10pKQoJCQkJCQkJCXsKCQkJCQkJCQkJJHJlc3RyaWN0aW9uX3ZhbHVlID0gJHRoaXMtPnNhbml0aXplKCRyZXN0cmljdGlvblsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCQkJCX0KCQkJCQkJCQkkcmVzdHJpY3Rpb25zW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnUmVzdHJpY3Rpb24nLCBhcnJheSgkcmVzdHJpY3Rpb25fcmVsYXRpb25zaGlwLCAkcmVzdHJpY3Rpb25fdHlwZSwgJHJlc3RyaWN0aW9uX3ZhbHVlKSk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNfYXJyYXkoJHJlc3RyaWN0aW9ucykpCgkJCQkJCQl7CgkJCQkJCQkJJHJlc3RyaWN0aW9ucyA9IGFycmF5X3ZhbHVlcyhhcnJheV91bmlxdWUoJHJlc3RyaWN0aW9ucykpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJHJlc3RyaWN0aW9ucyA9ICRyZXN0cmljdGlvbnNfcGFyZW50OwoJCQkJCQl9CgoJCQkJCQkvLyBUSFVNQk5BSUxTCgkJCQkJCWlmIChpc3NldCgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsndGh1bWJuYWlsJ10pKQoJCQkJCQl7CgkJCQkJCQlmb3JlYWNoICgkY29udGVudFsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTXVsndGh1bWJuYWlsJ10gYXMgJHRodW1ibmFpbCkKCQkJCQkJCXsKCQkJCQkJCQlpZiAoaXNzZXQoJHRodW1ibmFpbFsnYXR0cmlicyddWycnXVsndXJsJ10pKSB7CgkJCQkJCQkJCSR0aHVtYm5haWxzW10gPSAkdGhpcy0+c2FuaXRpemUoJHRodW1ibmFpbFsnYXR0cmlicyddWycnXVsndXJsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNfYXJyYXkoJHRodW1ibmFpbHMpKQoJCQkJCQkJewoJCQkJCQkJCSR0aHVtYm5haWxzID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkdGh1bWJuYWlscykpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJJHRodW1ibmFpbHMgPSAkdGh1bWJuYWlsc19wYXJlbnQ7CgkJCQkJCX0KCgkJCQkJCS8vIFRJVExFUwoJCQkJCQlpZiAoaXNzZXQoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3RpdGxlJ10pKQoJCQkJCQl7CgkJCQkJCQkkdGl0bGUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRlbnRbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU11bJ3RpdGxlJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCXsKCQkJCQkJCSR0aXRsZSA9ICR0aXRsZV9wYXJlbnQ7CgkJCQkJCX0KCgkJCQkJCSR0aGlzLT5kYXRhWydlbmNsb3N1cmVzJ11bXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdFbmNsb3N1cmUnLCBhcnJheSgkdXJsLCAkdHlwZSwgJGxlbmd0aCwgbnVsbCwgJGJpdHJhdGUsICRjYXB0aW9ucywgJGNhdGVnb3JpZXMsICRjaGFubmVscywgJGNvcHlyaWdodHMsICRjcmVkaXRzLCAkZGVzY3JpcHRpb24sICRkdXJhdGlvbiwgJGV4cHJlc3Npb24sICRmcmFtZXJhdGUsICRoYXNoZXMsICRoZWlnaHQsICRrZXl3b3JkcywgJGxhbmcsICRtZWRpdW0sICRwbGF5ZXIsICRyYXRpbmdzLCAkcmVzdHJpY3Rpb25zLCAkc2FtcGxpbmdyYXRlLCAkdGh1bWJuYWlscywgJHRpdGxlLCAkd2lkdGgpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnbGluaycpIGFzICRsaW5rKQoJCQl7CgkJCQlpZiAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ2hyZWYnXSkgJiYgIWVtcHR5KCRsaW5rWydhdHRyaWJzJ11bJyddWydyZWwnXSkgJiYgJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddID09PSAnZW5jbG9zdXJlJykKCQkJCXsKCQkJCQkvLyBBdHRyaWJ1dGVzCgkJCQkJJGJpdHJhdGUgPSBudWxsOwoJCQkJCSRjaGFubmVscyA9IG51bGw7CgkJCQkJJGR1cmF0aW9uID0gbnVsbDsKCQkJCQkkZXhwcmVzc2lvbiA9IG51bGw7CgkJCQkJJGZyYW1lcmF0ZSA9IG51bGw7CgkJCQkJJGhlaWdodCA9IG51bGw7CgkJCQkJJGphdmFzY3JpcHQgPSBudWxsOwoJCQkJCSRsYW5nID0gbnVsbDsKCQkJCQkkbGVuZ3RoID0gbnVsbDsKCQkJCQkkbWVkaXVtID0gbnVsbDsKCQkJCQkkc2FtcGxpbmdyYXRlID0gbnVsbDsKCQkJCQkkdHlwZSA9IG51bGw7CgkJCQkJJHVybCA9IG51bGw7CgkJCQkJJHdpZHRoID0gbnVsbDsKCgkJCQkJJHVybCA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua1snYXR0cmlicyddWycnXVsnaHJlZiddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRsaW5rKSk7CgkJCQkJaWYgKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCXsKCQkJCQkJJHR5cGUgPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWydsZW5ndGgnXSkpCgkJCQkJewoJCQkJCQkkbGVuZ3RoID0gY2VpbCgkbGlua1snYXR0cmlicyddWycnXVsnbGVuZ3RoJ10pOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3RpdGxlJ10pKQoJCQkJCXsKCQkJCQkJJHRpdGxlID0gJHRoaXMtPnNhbml0aXplKCRsaW5rWydhdHRyaWJzJ11bJyddWyd0aXRsZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkdGl0bGUgPSAkdGl0bGVfcGFyZW50OwoJCQkJCX0KCgkJCQkJLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBncm91cCBvciBjb250ZW50IGZvciB0aGVzZSwgd2UnbGwganVzdCBwYXNzIHRoZSAnKl9wYXJlbnQnIHZhcmlhYmxlcyBkaXJlY3RseSB0byB0aGUgY29uc3RydWN0b3IKCQkJCQkkdGhpcy0+ZGF0YVsnZW5jbG9zdXJlcyddW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnRW5jbG9zdXJlJywgYXJyYXkoJHVybCwgJHR5cGUsICRsZW5ndGgsIG51bGwsICRiaXRyYXRlLCAkY2FwdGlvbnNfcGFyZW50LCAkY2F0ZWdvcmllc19wYXJlbnQsICRjaGFubmVscywgJGNvcHlyaWdodHNfcGFyZW50LCAkY3JlZGl0c19wYXJlbnQsICRkZXNjcmlwdGlvbl9wYXJlbnQsICRkdXJhdGlvbl9wYXJlbnQsICRleHByZXNzaW9uLCAkZnJhbWVyYXRlLCAkaGFzaGVzX3BhcmVudCwgJGhlaWdodCwgJGtleXdvcmRzX3BhcmVudCwgJGxhbmcsICRtZWRpdW0sICRwbGF5ZXJfcGFyZW50LCAkcmF0aW5nc19wYXJlbnQsICRyZXN0cmljdGlvbnNfcGFyZW50LCAkc2FtcGxpbmdyYXRlLCAkdGh1bWJuYWlsc19wYXJlbnQsICR0aXRsZSwgJHdpZHRoKSk7CgkJCQl9CgkJCX0KCgkJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzLCAnbGluaycpIGFzICRsaW5rKQoJCQl7CgkJCQlpZiAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ2hyZWYnXSkgJiYgIWVtcHR5KCRsaW5rWydhdHRyaWJzJ11bJyddWydyZWwnXSkgJiYgJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddID09PSAnZW5jbG9zdXJlJykKCQkJCXsKCQkJCQkvLyBBdHRyaWJ1dGVzCgkJCQkJJGJpdHJhdGUgPSBudWxsOwoJCQkJCSRjaGFubmVscyA9IG51bGw7CgkJCQkJJGR1cmF0aW9uID0gbnVsbDsKCQkJCQkkZXhwcmVzc2lvbiA9IG51bGw7CgkJCQkJJGZyYW1lcmF0ZSA9IG51bGw7CgkJCQkJJGhlaWdodCA9IG51bGw7CgkJCQkJJGphdmFzY3JpcHQgPSBudWxsOwoJCQkJCSRsYW5nID0gbnVsbDsKCQkJCQkkbGVuZ3RoID0gbnVsbDsKCQkJCQkkbWVkaXVtID0gbnVsbDsKCQkJCQkkc2FtcGxpbmdyYXRlID0gbnVsbDsKCQkJCQkkdHlwZSA9IG51bGw7CgkJCQkJJHVybCA9IG51bGw7CgkJCQkJJHdpZHRoID0gbnVsbDsKCgkJCQkJJHVybCA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua1snYXR0cmlicyddWycnXVsnaHJlZiddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRsaW5rKSk7CgkJCQkJaWYgKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCXsKCQkJCQkJJHR5cGUgPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3R5cGUnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWydsZW5ndGgnXSkpCgkJCQkJewoJCQkJCQkkbGVuZ3RoID0gY2VpbCgkbGlua1snYXR0cmlicyddWycnXVsnbGVuZ3RoJ10pOwoJCQkJCX0KCgkJCQkJLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBncm91cCBvciBjb250ZW50IGZvciB0aGVzZSwgd2UnbGwganVzdCBwYXNzIHRoZSAnKl9wYXJlbnQnIHZhcmlhYmxlcyBkaXJlY3RseSB0byB0aGUgY29uc3RydWN0b3IKCQkJCQkkdGhpcy0+ZGF0YVsnZW5jbG9zdXJlcyddW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnRW5jbG9zdXJlJywgYXJyYXkoJHVybCwgJHR5cGUsICRsZW5ndGgsIG51bGwsICRiaXRyYXRlLCAkY2FwdGlvbnNfcGFyZW50LCAkY2F0ZWdvcmllc19wYXJlbnQsICRjaGFubmVscywgJGNvcHlyaWdodHNfcGFyZW50LCAkY3JlZGl0c19wYXJlbnQsICRkZXNjcmlwdGlvbl9wYXJlbnQsICRkdXJhdGlvbl9wYXJlbnQsICRleHByZXNzaW9uLCAkZnJhbWVyYXRlLCAkaGFzaGVzX3BhcmVudCwgJGhlaWdodCwgJGtleXdvcmRzX3BhcmVudCwgJGxhbmcsICRtZWRpdW0sICRwbGF5ZXJfcGFyZW50LCAkcmF0aW5nc19wYXJlbnQsICRyZXN0cmljdGlvbnNfcGFyZW50LCAkc2FtcGxpbmdyYXRlLCAkdGh1bWJuYWlsc19wYXJlbnQsICR0aXRsZV9wYXJlbnQsICR3aWR0aCkpOwoJCQkJfQoJCQl9CgoJCQlpZiAoJGVuY2xvc3VyZSA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnZW5jbG9zdXJlJykpCgkJCXsKCQkJCWlmIChpc3NldCgkZW5jbG9zdXJlWzBdWydhdHRyaWJzJ11bJyddWyd1cmwnXSkpCgkJCQl7CgkJCQkJLy8gQXR0cmlidXRlcwoJCQkJCSRiaXRyYXRlID0gbnVsbDsKCQkJCQkkY2hhbm5lbHMgPSBudWxsOwoJCQkJCSRkdXJhdGlvbiA9IG51bGw7CgkJCQkJJGV4cHJlc3Npb24gPSBudWxsOwoJCQkJCSRmcmFtZXJhdGUgPSBudWxsOwoJCQkJCSRoZWlnaHQgPSBudWxsOwoJCQkJCSRqYXZhc2NyaXB0ID0gbnVsbDsKCQkJCQkkbGFuZyA9IG51bGw7CgkJCQkJJGxlbmd0aCA9IG51bGw7CgkJCQkJJG1lZGl1bSA9IG51bGw7CgkJCQkJJHNhbXBsaW5ncmF0ZSA9IG51bGw7CgkJCQkJJHR5cGUgPSBudWxsOwoJCQkJCSR1cmwgPSBudWxsOwoJCQkJCSR3aWR0aCA9IG51bGw7CgoJCQkJCSR1cmwgPSAkdGhpcy0+c2FuaXRpemUoJGVuY2xvc3VyZVswXVsnYXR0cmlicyddWycnXVsndXJsJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGVuY2xvc3VyZVswXSkpOwoJCQkJCWlmIChpc3NldCgkZW5jbG9zdXJlWzBdWydhdHRyaWJzJ11bJyddWyd0eXBlJ10pKQoJCQkJCXsKCQkJCQkJJHR5cGUgPSAkdGhpcy0+c2FuaXRpemUoJGVuY2xvc3VyZVswXVsnYXR0cmlicyddWycnXVsndHlwZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJGVuY2xvc3VyZVswXVsnYXR0cmlicyddWycnXVsnbGVuZ3RoJ10pKQoJCQkJCXsKCQkJCQkJJGxlbmd0aCA9IGNlaWwoJGVuY2xvc3VyZVswXVsnYXR0cmlicyddWycnXVsnbGVuZ3RoJ10pOwoJCQkJCX0KCgkJCQkJLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBncm91cCBvciBjb250ZW50IGZvciB0aGVzZSwgd2UnbGwganVzdCBwYXNzIHRoZSAnKl9wYXJlbnQnIHZhcmlhYmxlcyBkaXJlY3RseSB0byB0aGUgY29uc3RydWN0b3IKCQkJCQkkdGhpcy0+ZGF0YVsnZW5jbG9zdXJlcyddW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnRW5jbG9zdXJlJywgYXJyYXkoJHVybCwgJHR5cGUsICRsZW5ndGgsIG51bGwsICRiaXRyYXRlLCAkY2FwdGlvbnNfcGFyZW50LCAkY2F0ZWdvcmllc19wYXJlbnQsICRjaGFubmVscywgJGNvcHlyaWdodHNfcGFyZW50LCAkY3JlZGl0c19wYXJlbnQsICRkZXNjcmlwdGlvbl9wYXJlbnQsICRkdXJhdGlvbl9wYXJlbnQsICRleHByZXNzaW9uLCAkZnJhbWVyYXRlLCAkaGFzaGVzX3BhcmVudCwgJGhlaWdodCwgJGtleXdvcmRzX3BhcmVudCwgJGxhbmcsICRtZWRpdW0sICRwbGF5ZXJfcGFyZW50LCAkcmF0aW5nc19wYXJlbnQsICRyZXN0cmljdGlvbnNfcGFyZW50LCAkc2FtcGxpbmdyYXRlLCAkdGh1bWJuYWlsc19wYXJlbnQsICR0aXRsZV9wYXJlbnQsICR3aWR0aCkpOwoJCQkJfQoJCQl9CgoJCQlpZiAoc2l6ZW9mKCR0aGlzLT5kYXRhWydlbmNsb3N1cmVzJ10pID09PSAwICYmICgkdXJsIHx8ICR0eXBlIHx8ICRsZW5ndGggfHwgJGJpdHJhdGUgfHwgJGNhcHRpb25zX3BhcmVudCB8fCAkY2F0ZWdvcmllc19wYXJlbnQgfHwgJGNoYW5uZWxzIHx8ICRjb3B5cmlnaHRzX3BhcmVudCB8fCAkY3JlZGl0c19wYXJlbnQgfHwgJGRlc2NyaXB0aW9uX3BhcmVudCB8fCAkZHVyYXRpb25fcGFyZW50IHx8ICRleHByZXNzaW9uIHx8ICRmcmFtZXJhdGUgfHwgJGhhc2hlc19wYXJlbnQgfHwgJGhlaWdodCB8fCAka2V5d29yZHNfcGFyZW50IHx8ICRsYW5nIHx8ICRtZWRpdW0gfHwgJHBsYXllcl9wYXJlbnQgfHwgJHJhdGluZ3NfcGFyZW50IHx8ICRyZXN0cmljdGlvbnNfcGFyZW50IHx8ICRzYW1wbGluZ3JhdGUgfHwgJHRodW1ibmFpbHNfcGFyZW50IHx8ICR0aXRsZV9wYXJlbnQgfHwgJHdpZHRoKSkKCQkJewoJCQkJLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBncm91cCBvciBjb250ZW50IGZvciB0aGVzZSwgd2UnbGwganVzdCBwYXNzIHRoZSAnKl9wYXJlbnQnIHZhcmlhYmxlcyBkaXJlY3RseSB0byB0aGUgY29uc3RydWN0b3IKCQkJCSR0aGlzLT5kYXRhWydlbmNsb3N1cmVzJ11bXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdFbmNsb3N1cmUnLCBhcnJheSgkdXJsLCAkdHlwZSwgJGxlbmd0aCwgbnVsbCwgJGJpdHJhdGUsICRjYXB0aW9uc19wYXJlbnQsICRjYXRlZ29yaWVzX3BhcmVudCwgJGNoYW5uZWxzLCAkY29weXJpZ2h0c19wYXJlbnQsICRjcmVkaXRzX3BhcmVudCwgJGRlc2NyaXB0aW9uX3BhcmVudCwgJGR1cmF0aW9uX3BhcmVudCwgJGV4cHJlc3Npb24sICRmcmFtZXJhdGUsICRoYXNoZXNfcGFyZW50LCAkaGVpZ2h0LCAka2V5d29yZHNfcGFyZW50LCAkbGFuZywgJG1lZGl1bSwgJHBsYXllcl9wYXJlbnQsICRyYXRpbmdzX3BhcmVudCwgJHJlc3RyaWN0aW9uc19wYXJlbnQsICRzYW1wbGluZ3JhdGUsICR0aHVtYm5haWxzX3BhcmVudCwgJHRpdGxlX3BhcmVudCwgJHdpZHRoKSk7CgkJCX0KCgkJCSR0aGlzLT5kYXRhWydlbmNsb3N1cmVzJ10gPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKCR0aGlzLT5kYXRhWydlbmNsb3N1cmVzJ10pKTsKCQl9CgkJaWYgKCFlbXB0eSgkdGhpcy0+ZGF0YVsnZW5jbG9zdXJlcyddKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+ZGF0YVsnZW5jbG9zdXJlcyddOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGxhdGl0dWRlIGNvb3JkaW5hdGVzIGZvciB0aGUgaXRlbQoJICoKCSAqIENvbXBhdGlibGUgd2l0aCB0aGUgVzNDIFdHUzg0IEJhc2ljIEdlbyBhbmQgR2VvUlNTIHNwZWNpZmljYXRpb25zCgkgKgoJICogVXNlcyBgPGdlbzpsYXQ+YCBvciBgPGdlb3Jzczpwb2ludD5gCgkgKgoJICogQHNpbmNlIDEuMAoJICogQGxpbmsgaHR0cDovL3d3dy53My5vcmcvMjAwMy8wMS9nZW8vIFczQyBXR1M4NCBCYXNpYyBHZW8KCSAqIEBsaW5rIGh0dHA6Ly93d3cuZ2VvcnNzLm9yZy8gR2VvUlNTCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGF0aXR1ZGUoKQoJewoJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9XM0NfQkFTSUNfR0VPLCAnbGF0JykpCgkJewoJCQlyZXR1cm4gKGZsb2F0KSAkcmV0dXJuWzBdWydkYXRhJ107CgkJfQoJCWVsc2VpZiAoKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0dFT1JTUywgJ3BvaW50JykpICYmIHByZWdfbWF0Y2goJy9eKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkgKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkkLycsIHRyaW0oJHJldHVyblswXVsnZGF0YSddKSwgJG1hdGNoKSkKCQl7CgkJCXJldHVybiAoZmxvYXQpICRtYXRjaFsxXTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHRoZSBpdGVtCgkgKgoJICogQ29tcGF0aWJsZSB3aXRoIHRoZSBXM0MgV0dTODQgQmFzaWMgR2VvIGFuZCBHZW9SU1Mgc3BlY2lmaWNhdGlvbnMKCSAqCgkgKiBVc2VzIGA8Z2VvOmxvbmc+YCwgYDxnZW86bG9uPmAgb3IgYDxnZW9yc3M6cG9pbnQ+YAoJICoKCSAqIEBzaW5jZSAxLjAKCSAqIEBsaW5rIGh0dHA6Ly93d3cudzMub3JnLzIwMDMvMDEvZ2VvLyBXM0MgV0dTODQgQmFzaWMgR2VvCgkgKiBAbGluayBodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvIEdlb1JTUwoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2xvbmdpdHVkZSgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X2l0ZW1fdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1czQ19CQVNJQ19HRU8sICdsb25nJykpCgkJewoJCQlyZXR1cm4gKGZsb2F0KSAkcmV0dXJuWzBdWydkYXRhJ107CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfVzNDX0JBU0lDX0dFTywgJ2xvbicpKQoJCXsKCQkJcmV0dXJuIChmbG9hdCkgJHJldHVyblswXVsnZGF0YSddOwoJCX0KCQllbHNlaWYgKCgkcmV0dXJuID0gJHRoaXMtPmdldF9pdGVtX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9HRU9SU1MsICdwb2ludCcpKSAmJiBwcmVnX21hdGNoKCcvXigoPzotKT9bMC05XSsoPzpcLlswLTldKykpICgoPzotKT9bMC05XSsoPzpcLlswLTldKykpJC8nLCB0cmltKCRyZXR1cm5bMF1bJ2RhdGEnXSksICRtYXRjaCkpCgkJewoJCQlyZXR1cm4gKGZsb2F0KSAkbWF0Y2hbMl07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgYDxhdG9tOnNvdXJjZT5gIGZvciB0aGUgaXRlbQoJICoKCSAqIEBzaW5jZSAxLjEKCSAqIEByZXR1cm4gU2ltcGxlUGllX1NvdXJjZXxudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfc291cmNlKCkKCXsKCQlpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfaXRlbV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ3NvdXJjZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdTb3VyY2UnLCBhcnJheSgkdGhpcywgJHJldHVyblswXSkpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Locator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBVc2VkIGZvciBmZWVkIGF1dG8tZGlzY292ZXJ5CiAqCiAqCiAqIFRoaXMgY2xhc3MgY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCB7QHNlZSBTaW1wbGVQaWU6OnNldF9sb2NhdG9yX2NsYXNzKCl9CiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKi8KY2xhc3MgU2ltcGxlUGllX0xvY2F0b3IKewoJdmFyICR1c2VyYWdlbnQ7Cgl2YXIgJHRpbWVvdXQ7Cgl2YXIgJGZpbGU7Cgl2YXIgJGxvY2FsID0gYXJyYXkoKTsKCXZhciAkZWxzZXdoZXJlID0gYXJyYXkoKTsKCXZhciAkY2FjaGVkX2VudGl0aWVzID0gYXJyYXkoKTsKCXZhciAkaHR0cF9iYXNlOwoJdmFyICRiYXNlOwoJdmFyICRiYXNlX2xvY2F0aW9uID0gMDsKCXZhciAkY2hlY2tlZF9mZWVkcyA9IDA7Cgl2YXIgJG1heF9jaGVja2VkX2ZlZWRzID0gMTA7Cgl2YXIgJGZvcmNlX2Zzb2Nrb3BlbiA9IGZhbHNlOwoJdmFyICRjdXJsX29wdGlvbnMgPSBhcnJheSgpOwoJcHJvdGVjdGVkICRyZWdpc3RyeTsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU2ltcGxlUGllX0ZpbGUgJGZpbGUsICR0aW1lb3V0ID0gMTAsICR1c2VyYWdlbnQgPSBudWxsLCAkbWF4X2NoZWNrZWRfZmVlZHMgPSAxMCwgJGZvcmNlX2Zzb2Nrb3BlbiA9IGZhbHNlLCAkY3VybF9vcHRpb25zID0gYXJyYXkoKSkKCXsKCQkkdGhpcy0+ZmlsZSA9ICRmaWxlOwoJCSR0aGlzLT51c2VyYWdlbnQgPSAkdXNlcmFnZW50OwoJCSR0aGlzLT50aW1lb3V0ID0gJHRpbWVvdXQ7CgkJJHRoaXMtPm1heF9jaGVja2VkX2ZlZWRzID0gJG1heF9jaGVja2VkX2ZlZWRzOwoJCSR0aGlzLT5mb3JjZV9mc29ja29wZW4gPSAkZm9yY2VfZnNvY2tvcGVuOwoJCSR0aGlzLT5jdXJsX29wdGlvbnMgPSAkY3VybF9vcHRpb25zOwoKCQlpZiAoY2xhc3NfZXhpc3RzKCdET01Eb2N1bWVudCcpKQoJCXsKCQkJJHRoaXMtPmRvbSA9IG5ldyBET01Eb2N1bWVudCgpOwoKCQkJc2V0X2Vycm9yX2hhbmRsZXIoYXJyYXkoJ1NpbXBsZVBpZV9NaXNjJywgJ3NpbGVuY2VfZXJyb3JzJykpOwoJCQkkdGhpcy0+ZG9tLT5sb2FkSFRNTCgkdGhpcy0+ZmlsZS0+Ym9keSk7CgkJCXJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+ZG9tID0gbnVsbDsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldF9yZWdpc3RyeShTaW1wbGVQaWVfUmVnaXN0cnkgJHJlZ2lzdHJ5KQoJewoJCSR0aGlzLT5yZWdpc3RyeSA9ICRyZWdpc3RyeTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZmluZCgkdHlwZSA9IFNJTVBMRVBJRV9MT0NBVE9SX0FMTCwgJiR3b3JraW5nID0gbnVsbCkKCXsKCQlpZiAoJHRoaXMtPmlzX2ZlZWQoJHRoaXMtPmZpbGUpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5maWxlOwoJCX0KCgkJaWYgKCR0aGlzLT5maWxlLT5tZXRob2QgJiBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfUkVNT1RFKQoJCXsKCQkJJHNuaWZmZXIgPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ29udGVudF9UeXBlX1NuaWZmZXInLCBhcnJheSgkdGhpcy0+ZmlsZSkpOwoJCQlpZiAoJHNuaWZmZXItPmdldF90eXBlKCkgIT09ICd0ZXh0L2h0bWwnKQoJCQl7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoJCX0KCgkJaWYgKCR0eXBlICYgflNJTVBMRVBJRV9MT0NBVE9SX05PTkUpCgkJewoJCQkkdGhpcy0+Z2V0X2Jhc2UoKTsKCQl9CgoJCWlmICgkdHlwZSAmIFNJTVBMRVBJRV9MT0NBVE9SX0FVVE9ESVNDT1ZFUlkgJiYgJHdvcmtpbmcgPSAkdGhpcy0+YXV0b2Rpc2NvdmVyeSgpKQoJCXsKCQkJcmV0dXJuICR3b3JraW5nWzBdOwoJCX0KCgkJaWYgKCR0eXBlICYgKFNJTVBMRVBJRV9MT0NBVE9SX0xPQ0FMX0VYVEVOU0lPTiB8IFNJTVBMRVBJRV9MT0NBVE9SX0xPQ0FMX0JPRFkgfCBTSU1QTEVQSUVfTE9DQVRPUl9SRU1PVEVfRVhURU5TSU9OIHwgU0lNUExFUElFX0xPQ0FUT1JfUkVNT1RFX0JPRFkpICYmICR0aGlzLT5nZXRfbGlua3MoKSkKCQl7CgkJCWlmICgkdHlwZSAmIFNJTVBMRVBJRV9MT0NBVE9SX0xPQ0FMX0VYVEVOU0lPTiAmJiAkd29ya2luZyA9ICR0aGlzLT5leHRlbnNpb24oJHRoaXMtPmxvY2FsKSkKCQkJewoJCQkJcmV0dXJuICR3b3JraW5nWzBdOwoJCQl9CgoJCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfTE9DQVRPUl9MT0NBTF9CT0RZICYmICR3b3JraW5nID0gJHRoaXMtPmJvZHkoJHRoaXMtPmxvY2FsKSkKCQkJewoJCQkJcmV0dXJuICR3b3JraW5nWzBdOwoJCQl9CgoJCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfTE9DQVRPUl9SRU1PVEVfRVhURU5TSU9OICYmICR3b3JraW5nID0gJHRoaXMtPmV4dGVuc2lvbigkdGhpcy0+ZWxzZXdoZXJlKSkKCQkJewoJCQkJcmV0dXJuICR3b3JraW5nWzBdOwoJCQl9CgoJCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfTE9DQVRPUl9SRU1PVEVfQk9EWSAmJiAkd29ya2luZyA9ICR0aGlzLT5ib2R5KCR0aGlzLT5lbHNld2hlcmUpKQoJCQl7CgkJCQlyZXR1cm4gJHdvcmtpbmdbMF07CgkJCX0KCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlzX2ZlZWQoJGZpbGUsICRjaGVja19odG1sID0gZmFsc2UpCgl7CgkJaWYgKCRmaWxlLT5tZXRob2QgJiBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfUkVNT1RFKQoJCXsKCQkJJHNuaWZmZXIgPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ29udGVudF9UeXBlX1NuaWZmZXInLCBhcnJheSgkZmlsZSkpOwoJCQkkc25pZmZlZCA9ICRzbmlmZmVyLT5nZXRfdHlwZSgpOwoJCQkkbWltZV90eXBlcyA9IGFycmF5KCdhcHBsaWNhdGlvbi9yc3MreG1sJywgJ2FwcGxpY2F0aW9uL3JkZit4bWwnLAoJCQkgICAgICAgICAgICAgICAgICAgICd0ZXh0L3JkZicsICdhcHBsaWNhdGlvbi9hdG9tK3htbCcsICd0ZXh0L3htbCcsCgkJCSAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3htbCcsICdhcHBsaWNhdGlvbi94LXJzcyt4bWwnKTsKCQkJaWYgKCRjaGVja19odG1sKQoJCQl7CgkJCQkkbWltZV90eXBlc1tdID0gJ3RleHQvaHRtbCc7CgkJCX0KCgkJCXJldHVybiBpbl9hcnJheSgkc25pZmZlZCwgJG1pbWVfdHlwZXMpOwoJCX0KCQllbHNlaWYgKCRmaWxlLT5tZXRob2QgJiBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfTE9DQUwpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2Jhc2UoKQoJewoJCWlmICgkdGhpcy0+ZG9tID09PSBudWxsKQoJCXsKCQkJdGhyb3cgbmV3IFNpbXBsZVBpZV9FeGNlcHRpb24oJ0RPTURvY3VtZW50IG5vdCBmb3VuZCwgdW5hYmxlIHRvIHVzZSBsb2NhdG9yJyk7CgkJfQoJCSR0aGlzLT5odHRwX2Jhc2UgPSAkdGhpcy0+ZmlsZS0+dXJsOwoJCSR0aGlzLT5iYXNlID0gJHRoaXMtPmh0dHBfYmFzZTsKCQkkZWxlbWVudHMgPSAkdGhpcy0+ZG9tLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScpOwoJCWZvcmVhY2ggKCRlbGVtZW50cyBhcyAkZWxlbWVudCkKCQl7CgkJCWlmICgkZWxlbWVudC0+aGFzQXR0cmlidXRlKCdocmVmJykpCgkJCXsKCQkJCSRiYXNlID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2Fic29sdXRpemVfdXJsJywgYXJyYXkodHJpbSgkZWxlbWVudC0+Z2V0QXR0cmlidXRlKCdocmVmJykpLCAkdGhpcy0+aHR0cF9iYXNlKSk7CgkJCQlpZiAoJGJhc2UgPT09IGZhbHNlKQoJCQkJewoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQkJJHRoaXMtPmJhc2UgPSAkYmFzZTsKCQkJCSR0aGlzLT5iYXNlX2xvY2F0aW9uID0gbWV0aG9kX2V4aXN0cygkZWxlbWVudCwgJ2dldExpbmVObycpID8gJGVsZW1lbnQtPmdldExpbmVObygpIDogMDsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBhdXRvZGlzY292ZXJ5KCkKCXsKCQkkZG9uZSA9IGFycmF5KCk7CgkJJGZlZWRzID0gYXJyYXkoKTsKCQkkZmVlZHMgPSBhcnJheV9tZXJnZSgkZmVlZHMsICR0aGlzLT5zZWFyY2hfZWxlbWVudHNfYnlfdGFnKCdsaW5rJywgJGRvbmUsICRmZWVkcykpOwoJCSRmZWVkcyA9IGFycmF5X21lcmdlKCRmZWVkcywgJHRoaXMtPnNlYXJjaF9lbGVtZW50c19ieV90YWcoJ2EnLCAkZG9uZSwgJGZlZWRzKSk7CgkJJGZlZWRzID0gYXJyYXlfbWVyZ2UoJGZlZWRzLCAkdGhpcy0+c2VhcmNoX2VsZW1lbnRzX2J5X3RhZygnYXJlYScsICRkb25lLCAkZmVlZHMpKTsKCgkJaWYgKCFlbXB0eSgkZmVlZHMpKQoJCXsKCQkJcmV0dXJuIGFycmF5X3ZhbHVlcygkZmVlZHMpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNlYXJjaF9lbGVtZW50c19ieV90YWcoJG5hbWUsICYkZG9uZSwgJGZlZWRzKQoJewoJCWlmICgkdGhpcy0+ZG9tID09PSBudWxsKQoJCXsKCQkJdGhyb3cgbmV3IFNpbXBsZVBpZV9FeGNlcHRpb24oJ0RPTURvY3VtZW50IG5vdCBmb3VuZCwgdW5hYmxlIHRvIHVzZSBsb2NhdG9yJyk7CgkJfQoKCQkkbGlua3MgPSAkdGhpcy0+ZG9tLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgkbmFtZSk7CgkJZm9yZWFjaCAoJGxpbmtzIGFzICRsaW5rKQoJCXsKCQkJaWYgKCR0aGlzLT5jaGVja2VkX2ZlZWRzID09PSAkdGhpcy0+bWF4X2NoZWNrZWRfZmVlZHMpCgkJCXsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmICgkbGluay0+aGFzQXR0cmlidXRlKCdocmVmJykgJiYgJGxpbmstPmhhc0F0dHJpYnV0ZSgncmVsJykpCgkJCXsKCQkJCSRyZWwgPSBhcnJheV91bmlxdWUoJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ3NwYWNlX3NlcGFyYXRlZF90b2tlbnMnLCBhcnJheShzdHJ0b2xvd2VyKCRsaW5rLT5nZXRBdHRyaWJ1dGUoJ3JlbCcpKSkpKTsKCQkJCSRsaW5lID0gbWV0aG9kX2V4aXN0cygkbGluaywgJ2dldExpbmVObycpID8gJGxpbmstPmdldExpbmVObygpIDogMTsKCgkJCQlpZiAoJHRoaXMtPmJhc2VfbG9jYXRpb24gPCAkbGluZSkKCQkJCXsKCQkJCQkkaHJlZiA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhYnNvbHV0aXplX3VybCcsIGFycmF5KHRyaW0oJGxpbmstPmdldEF0dHJpYnV0ZSgnaHJlZicpKSwgJHRoaXMtPmJhc2UpKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkaHJlZiA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhYnNvbHV0aXplX3VybCcsIGFycmF5KHRyaW0oJGxpbmstPmdldEF0dHJpYnV0ZSgnaHJlZicpKSwgJHRoaXMtPmh0dHBfYmFzZSkpOwoJCQkJfQoJCQkJaWYgKCRocmVmID09PSBmYWxzZSkKCQkJCXsKCQkJCQljb250aW51ZTsKCQkJCX0KCgkJCQlpZiAoIWluX2FycmF5KCRocmVmLCAkZG9uZSkgJiYgaW5fYXJyYXkoJ2ZlZWQnLCAkcmVsKSB8fCAoaW5fYXJyYXkoJ2FsdGVybmF0ZScsICRyZWwpICYmICFpbl9hcnJheSgnc3R5bGVzaGVldCcsICRyZWwpICYmICRsaW5rLT5oYXNBdHRyaWJ1dGUoJ3R5cGUnKSAmJiBpbl9hcnJheShzdHJ0b2xvd2VyKCR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdwYXJzZV9taW1lJywgYXJyYXkoJGxpbmstPmdldEF0dHJpYnV0ZSgndHlwZScpKSkpLCBhcnJheSgndGV4dC9odG1sJywgJ2FwcGxpY2F0aW9uL3Jzcyt4bWwnLCAnYXBwbGljYXRpb24vYXRvbSt4bWwnKSkpICYmICFpc3NldCgkZmVlZHNbJGhyZWZdKSkKCQkJCXsKCQkJCQkkdGhpcy0+Y2hlY2tlZF9mZWVkcysrOwoJCQkJCSRoZWFkZXJzID0gYXJyYXkoCgkJCQkJCSdBY2NlcHQnID0+ICdhcHBsaWNhdGlvbi9hdG9tK3htbCwgYXBwbGljYXRpb24vcnNzK3htbCwgYXBwbGljYXRpb24vcmRmK3htbDtxPTAuOSwgYXBwbGljYXRpb24veG1sO3E9MC44LCB0ZXh0L3htbDtxPTAuOCwgdGV4dC9odG1sO3E9MC43LCB1bmtub3duL3Vua25vd247cT0wLjEsIGFwcGxpY2F0aW9uL3Vua25vd247cT0wLjEsICovKjtxPTAuMScsCgkJCQkJKTsKCQkJCQkkZmVlZCA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdGaWxlJywgYXJyYXkoJGhyZWYsICR0aGlzLT50aW1lb3V0LCA1LCAkaGVhZGVycywgJHRoaXMtPnVzZXJhZ2VudCwgJHRoaXMtPmZvcmNlX2Zzb2Nrb3BlbiwgJHRoaXMtPmN1cmxfb3B0aW9ucykpOwoJCQkJCWlmICgkZmVlZC0+c3VjY2VzcyAmJiAoJGZlZWQtPm1ldGhvZCAmIFNJTVBMRVBJRV9GSUxFX1NPVVJDRV9SRU1PVEUgPT09IDAgfHwgKCRmZWVkLT5zdGF0dXNfY29kZSA9PT0gMjAwIHx8ICRmZWVkLT5zdGF0dXNfY29kZSA+IDIwNiAmJiAkZmVlZC0+c3RhdHVzX2NvZGUgPCAzMDApKSAmJiAkdGhpcy0+aXNfZmVlZCgkZmVlZCwgdHJ1ZSkpCgkJCQkJewoJCQkJCQkkZmVlZHNbJGhyZWZdID0gJGZlZWQ7CgkJCQkJfQoJCQkJfQoJCQkJJGRvbmVbXSA9ICRocmVmOwoJCQl9CgkJfQoKCQlyZXR1cm4gJGZlZWRzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGlua3MoKQoJewoJCWlmICgkdGhpcy0+ZG9tID09PSBudWxsKQoJCXsKCQkJdGhyb3cgbmV3IFNpbXBsZVBpZV9FeGNlcHRpb24oJ0RPTURvY3VtZW50IG5vdCBmb3VuZCwgdW5hYmxlIHRvIHVzZSBsb2NhdG9yJyk7CgkJfQoKCQkkbGlua3MgPSAkdGhpcy0+ZG9tLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpOwoJCWZvcmVhY2ggKCRsaW5rcyBhcyAkbGluaykKCQl7CgkJCWlmICgkbGluay0+aGFzQXR0cmlidXRlKCdocmVmJykpCgkJCXsKCQkJCSRocmVmID0gdHJpbSgkbGluay0+Z2V0QXR0cmlidXRlKCdocmVmJykpOwoJCQkJJHBhcnNlZCA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdwYXJzZV91cmwnLCBhcnJheSgkaHJlZikpOwoJCQkJaWYgKCRwYXJzZWRbJ3NjaGVtZSddID09PSAnJyB8fCBwcmVnX21hdGNoKCcvXihodHRwcz98ZmVlZCk/JC9pJywgJHBhcnNlZFsnc2NoZW1lJ10pKQoJCQkJewoJCQkJCWlmIChtZXRob2RfZXhpc3RzKCRsaW5rLCAnZ2V0TGluZU5vJykgJiYgJHRoaXMtPmJhc2VfbG9jYXRpb24gPCAkbGluay0+Z2V0TGluZU5vKCkpCgkJCQkJewoJCQkJCQkkaHJlZiA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhYnNvbHV0aXplX3VybCcsIGFycmF5KHRyaW0oJGxpbmstPmdldEF0dHJpYnV0ZSgnaHJlZicpKSwgJHRoaXMtPmJhc2UpKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJGhyZWYgPSAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnYWJzb2x1dGl6ZV91cmwnLCBhcnJheSh0cmltKCRsaW5rLT5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSksICR0aGlzLT5odHRwX2Jhc2UpKTsKCQkJCQl9CgkJCQkJaWYgKCRocmVmID09PSBmYWxzZSkKCQkJCQl7CgkJCQkJCWNvbnRpbnVlOwoJCQkJCX0KCgkJCQkJJGN1cnJlbnQgPSAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAncGFyc2VfdXJsJywgYXJyYXkoJHRoaXMtPmZpbGUtPnVybCkpOwoKCQkJCQlpZiAoJHBhcnNlZFsnYXV0aG9yaXR5J10gPT09ICcnIHx8ICRwYXJzZWRbJ2F1dGhvcml0eSddID09PSAkY3VycmVudFsnYXV0aG9yaXR5J10pCgkJCQkJewoJCQkJCQkkdGhpcy0+bG9jYWxbXSA9ICRocmVmOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkdGhpcy0+ZWxzZXdoZXJlW10gPSAkaHJlZjsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJJHRoaXMtPmxvY2FsID0gYXJyYXlfdW5pcXVlKCR0aGlzLT5sb2NhbCk7CgkJJHRoaXMtPmVsc2V3aGVyZSA9IGFycmF5X3VuaXF1ZSgkdGhpcy0+ZWxzZXdoZXJlKTsKCQlpZiAoIWVtcHR5KCR0aGlzLT5sb2NhbCkgfHwgIWVtcHR5KCR0aGlzLT5lbHNld2hlcmUpKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfcmVsX2xpbmsoJHJlbCkKCXsKCQlpZiAoJHRoaXMtPmRvbSA9PT0gbnVsbCkKCQl7CgkJCXRocm93IG5ldyBTaW1wbGVQaWVfRXhjZXB0aW9uKCdET01Eb2N1bWVudCBub3QgZm91bmQsIHVuYWJsZSB0byB1c2UgJy4KCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvY2F0b3InKTsKCQl9CgkJaWYgKCFjbGFzc19leGlzdHMoJ0RPTVhwYXRoJykpCgkJewoJCQl0aHJvdyBuZXcgU2ltcGxlUGllX0V4Y2VwdGlvbignRE9NWHBhdGggbm90IGZvdW5kLCB1bmFibGUgdG8gdXNlICcuCgkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfcmVsX2xpbmsnKTsKCQl9CgoJCSR4cGF0aCA9IG5ldyBET01YcGF0aCgkdGhpcy0+ZG9tKTsKCQkkcXVlcnkgPSAnLy9hW0ByZWwgYW5kIEBocmVmXSB8IC8vbGlua1tAcmVsIGFuZCBAaHJlZl0nOwoJCWZvcmVhY2ggKCR4cGF0aC0+cXVlcnkoJHF1ZXJ5KSBhcyAkbGluaykKCQl7CgkJCSRocmVmID0gdHJpbSgkbGluay0+Z2V0QXR0cmlidXRlKCdocmVmJykpOwoJCQkkcGFyc2VkID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ3BhcnNlX3VybCcsIGFycmF5KCRocmVmKSk7CgkJCWlmICgkcGFyc2VkWydzY2hlbWUnXSA9PT0gJycgfHwKCQkJICAgIHByZWdfbWF0Y2goJy9eaHR0cHM/JC9pJywgJHBhcnNlZFsnc2NoZW1lJ10pKQoJCQl7CgkJCQlpZiAobWV0aG9kX2V4aXN0cygkbGluaywgJ2dldExpbmVObycpICYmCgkJCQkgICAgJHRoaXMtPmJhc2VfbG9jYXRpb24gPCAkbGluay0+Z2V0TGluZU5vKCkpCgkJCQl7CgkJCQkJJGhyZWYgPQoJCQkJCQkkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnYWJzb2x1dGl6ZV91cmwnLAoJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgYXJyYXkodHJpbSgkbGluay0+Z2V0QXR0cmlidXRlKCdocmVmJykpLAoJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmJhc2UpKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkaHJlZiA9CgkJCQkJCSR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhYnNvbHV0aXplX3VybCcsCgkJCQkJCSAgICAgICAgICAgICAgICAgICAgICBhcnJheSh0cmltKCRsaW5rLT5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSksCgkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+aHR0cF9iYXNlKSk7CgkJCQl9CgkJCQlpZiAoJGhyZWYgPT09IGZhbHNlKQoJCQkJewoJCQkJCXJldHVybiBudWxsOwoJCQkJfQoJCQkJJHJlbF92YWx1ZXMgPSBleHBsb2RlKCcgJywgc3RydG9sb3dlcigkbGluay0+Z2V0QXR0cmlidXRlKCdyZWwnKSkpOwoJCQkJaWYgKGluX2FycmF5KCRyZWwsICRyZWxfdmFsdWVzKSkKCQkJCXsKCQkJCQlyZXR1cm4gJGhyZWY7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGV4dGVuc2lvbigmJGFycmF5KQoJewoJCWZvcmVhY2ggKCRhcnJheSBhcyAka2V5ID0+ICR2YWx1ZSkKCQl7CgkJCWlmICgkdGhpcy0+Y2hlY2tlZF9mZWVkcyA9PT0gJHRoaXMtPm1heF9jaGVja2VkX2ZlZWRzKQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCQlpZiAoaW5fYXJyYXkoc3RydG9sb3dlcihzdHJyY2hyKCR2YWx1ZSwgJy4nKSksIGFycmF5KCcucnNzJywgJy5yZGYnLCAnLmF0b20nLCAnLnhtbCcpKSkKCQkJewoJCQkJJHRoaXMtPmNoZWNrZWRfZmVlZHMrKzsKCgkJCQkkaGVhZGVycyA9IGFycmF5KAoJCQkJCSdBY2NlcHQnID0+ICdhcHBsaWNhdGlvbi9hdG9tK3htbCwgYXBwbGljYXRpb24vcnNzK3htbCwgYXBwbGljYXRpb24vcmRmK3htbDtxPTAuOSwgYXBwbGljYXRpb24veG1sO3E9MC44LCB0ZXh0L3htbDtxPTAuOCwgdGV4dC9odG1sO3E9MC43LCB1bmtub3duL3Vua25vd247cT0wLjEsIGFwcGxpY2F0aW9uL3Vua25vd247cT0wLjEsICovKjtxPTAuMScsCgkJCQkpOwoJCQkJJGZlZWQgPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnRmlsZScsIGFycmF5KCR2YWx1ZSwgJHRoaXMtPnRpbWVvdXQsIDUsICRoZWFkZXJzLCAkdGhpcy0+dXNlcmFnZW50LCAkdGhpcy0+Zm9yY2VfZnNvY2tvcGVuLCAkdGhpcy0+Y3VybF9vcHRpb25zKSk7CgkJCQlpZiAoJGZlZWQtPnN1Y2Nlc3MgJiYgKCRmZWVkLT5tZXRob2QgJiBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfUkVNT1RFID09PSAwIHx8ICgkZmVlZC0+c3RhdHVzX2NvZGUgPT09IDIwMCB8fCAkZmVlZC0+c3RhdHVzX2NvZGUgPiAyMDYgJiYgJGZlZWQtPnN0YXR1c19jb2RlIDwgMzAwKSkgJiYgJHRoaXMtPmlzX2ZlZWQoJGZlZWQpKQoJCQkJewoJCQkJCXJldHVybiBhcnJheSgkZmVlZCk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdW5zZXQoJGFycmF5WyRrZXldKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gYm9keSgmJGFycmF5KQoJewoJCWZvcmVhY2ggKCRhcnJheSBhcyAka2V5ID0+ICR2YWx1ZSkKCQl7CgkJCWlmICgkdGhpcy0+Y2hlY2tlZF9mZWVkcyA9PT0gJHRoaXMtPm1heF9jaGVja2VkX2ZlZWRzKQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCQlpZiAocHJlZ19tYXRjaCgnLyhmZWVkfHJzc3xyZGZ8YXRvbXx4bWwpL2knLCAkdmFsdWUpKQoJCQl7CgkJCQkkdGhpcy0+Y2hlY2tlZF9mZWVkcysrOwoJCQkJJGhlYWRlcnMgPSBhcnJheSgKCQkJCQknQWNjZXB0JyA9PiAnYXBwbGljYXRpb24vYXRvbSt4bWwsIGFwcGxpY2F0aW9uL3Jzcyt4bWwsIGFwcGxpY2F0aW9uL3JkZit4bWw7cT0wLjksIGFwcGxpY2F0aW9uL3htbDtxPTAuOCwgdGV4dC94bWw7cT0wLjgsIHRleHQvaHRtbDtxPTAuNywgdW5rbm93bi91bmtub3duO3E9MC4xLCBhcHBsaWNhdGlvbi91bmtub3duO3E9MC4xLCAqLyo7cT0wLjEnLAoJCQkJKTsKCQkJCSRmZWVkID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0ZpbGUnLCBhcnJheSgkdmFsdWUsICR0aGlzLT50aW1lb3V0LCA1LCBudWxsLCAkdGhpcy0+dXNlcmFnZW50LCAkdGhpcy0+Zm9yY2VfZnNvY2tvcGVuLCAkdGhpcy0+Y3VybF9vcHRpb25zKSk7CgkJCQlpZiAoJGZlZWQtPnN1Y2Nlc3MgJiYgKCRmZWVkLT5tZXRob2QgJiBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfUkVNT1RFID09PSAwIHx8ICgkZmVlZC0+c3RhdHVzX2NvZGUgPT09IDIwMCB8fCAkZmVlZC0+c3RhdHVzX2NvZGUgPiAyMDYgJiYgJGZlZWQtPnN0YXR1c19jb2RlIDwgMzAwKSkgJiYgJHRoaXMtPmlzX2ZlZWQoJGZlZWQpKQoJCQkJewoJCQkJCXJldHVybiBhcnJheSgkZmVlZCk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdW5zZXQoJGFycmF5WyRrZXldKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gbnVsbDsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Misc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBNaXNjZWxsYW5vdXMgdXRpbGl0aWVzCiAqCiAqIEBwYWNrYWdlIFNpbXBsZVBpZQogKi8KY2xhc3MgU2ltcGxlUGllX01pc2MKewoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0aW1lX2htcygkc2Vjb25kcykKCXsKCQkkdGltZSA9ICcnOwoKCQkkaG91cnMgPSBmbG9vcigkc2Vjb25kcyAvIDM2MDApOwoJCSRyZW1haW5kZXIgPSAkc2Vjb25kcyAlIDM2MDA7CgkJaWYgKCRob3VycyA+IDApCgkJewoJCQkkdGltZSAuPSAkaG91cnMuJzonOwoJCX0KCgkJJG1pbnV0ZXMgPSBmbG9vcigkcmVtYWluZGVyIC8gNjApOwoJCSRzZWNvbmRzID0gJHJlbWFpbmRlciAlIDYwOwoJCWlmICgkbWludXRlcyA8IDEwICYmICRob3VycyA+IDApCgkJewoJCQkkbWludXRlcyA9ICcwJyAuICRtaW51dGVzOwoJCX0KCQlpZiAoJHNlY29uZHMgPCAxMCkKCQl7CgkJCSRzZWNvbmRzID0gJzAnIC4gJHNlY29uZHM7CgkJfQoKCQkkdGltZSAuPSAkbWludXRlcy4nOic7CgkJJHRpbWUgLj0gJHNlY29uZHM7CgoJCXJldHVybiAkdGltZTsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFic29sdXRpemVfdXJsKCRyZWxhdGl2ZSwgJGJhc2UpCgl7CgkJJGlyaSA9IFNpbXBsZVBpZV9JUkk6OmFic29sdXRpemUobmV3IFNpbXBsZVBpZV9JUkkoJGJhc2UpLCAkcmVsYXRpdmUpOwoJCWlmICgkaXJpID09PSBmYWxzZSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuICRpcmktPmdldF91cmkoKTsKCX0KCgkvKioKCSAqIEdldCBhIEhUTUwvWE1MIGVsZW1lbnQgZnJvbSBhIEhUTUwgc3RyaW5nCgkgKgoJICogQGRlcHJlY2F0ZWQgVXNlIERPTURvY3VtZW50IGluc3RlYWQgKHBhcnNpbmcgSFRNTCB3aXRoIHJlZ2V4IGlzIGJhZCEpCgkgKiBAcGFyYW0gc3RyaW5nICRyZWFsbmFtZSBFbGVtZW50IG5hbWUgKGluY2x1ZGluZyBuYW1lc3BhY2UgcHJlZml4IGlmIGFwcGxpY2FibGUpCgkgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgSFRNTCBkb2N1bWVudAoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9lbGVtZW50KCRyZWFsbmFtZSwgJHN0cmluZykKCXsKCQkkcmV0dXJuID0gYXJyYXkoKTsKCQkkbmFtZSA9IHByZWdfcXVvdGUoJHJlYWxuYW1lLCAnLycpOwoJCWlmIChwcmVnX21hdGNoX2FsbCgiLzwoJG5hbWUpIiAuIFNJTVBMRVBJRV9QQ1JFX0hUTUxfQVRUUklCVVRFIC4gIig+KC4qKTxcLyRuYW1lPnwoXC8pPz4pL3NpVSIsICRzdHJpbmcsICRtYXRjaGVzLCBQUkVHX1NFVF9PUkRFUiB8IFBSRUdfT0ZGU0VUX0NBUFRVUkUpKQoJCXsKCQkJZm9yICgkaSA9IDAsICR0b3RhbF9tYXRjaGVzID0gY291bnQoJG1hdGNoZXMpOyAkaSA8ICR0b3RhbF9tYXRjaGVzOyAkaSsrKQoJCQl7CgkJCQkkcmV0dXJuWyRpXVsndGFnJ10gPSAkcmVhbG5hbWU7CgkJCQkkcmV0dXJuWyRpXVsnZnVsbCddID0gJG1hdGNoZXNbJGldWzBdWzBdOwoJCQkJJHJldHVyblskaV1bJ29mZnNldCddID0gJG1hdGNoZXNbJGldWzBdWzFdOwoJCQkJaWYgKHN0cmxlbigkbWF0Y2hlc1skaV1bM11bMF0pIDw9IDIpCgkJCQl7CgkJCQkJJHJldHVyblskaV1bJ3NlbGZfY2xvc2luZyddID0gdHJ1ZTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcmV0dXJuWyRpXVsnc2VsZl9jbG9zaW5nJ10gPSBmYWxzZTsKCQkJCQkkcmV0dXJuWyRpXVsnY29udGVudCddID0gJG1hdGNoZXNbJGldWzRdWzBdOwoJCQkJfQoJCQkJJHJldHVyblskaV1bJ2F0dHJpYnMnXSA9IGFycmF5KCk7CgkJCQlpZiAoaXNzZXQoJG1hdGNoZXNbJGldWzJdWzBdKSAmJiBwcmVnX21hdGNoX2FsbCgnL1tceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBdKyhbXlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4MkZceDNFXVteXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHgyRlx4M0RceDNFXSopKD86W1x4MDlceDBBXHgwQlx4MENceDBEXHgyMF0qPVtceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBdKig/OiIoW14iXSopInxcJyhbXlwnXSopXCd8KFteXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHgyMlx4MjdceDNFXVteXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHgzRV0qKT8pKT8vJywgJyAnIC4gJG1hdGNoZXNbJGldWzJdWzBdIC4gJyAnLCAkYXR0cmlicywgUFJFR19TRVRfT1JERVIpKQoJCQkJewoJCQkJCWZvciAoJGogPSAwLCAkdG90YWxfYXR0cmlicyA9IGNvdW50KCRhdHRyaWJzKTsgJGogPCAkdG90YWxfYXR0cmliczsgJGorKykKCQkJCQl7CgkJCQkJCWlmIChjb3VudCgkYXR0cmlic1skal0pID09PSAyKQoJCQkJCQl7CgkJCQkJCQkkYXR0cmlic1skal1bMl0gPSAkYXR0cmlic1skal1bMV07CgkJCQkJCX0KCQkJCQkJJHJldHVyblskaV1bJ2F0dHJpYnMnXVtzdHJ0b2xvd2VyKCRhdHRyaWJzWyRqXVsxXSldWydkYXRhJ10gPSBTaW1wbGVQaWVfTWlzYzo6ZW50aXRpZXNfZGVjb2RlKGVuZCgkYXR0cmlic1skal0pKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRyZXR1cm47Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBlbGVtZW50X2ltcGxvZGUoJGVsZW1lbnQpCgl7CgkJJGZ1bGwgPSAiPCRlbGVtZW50W3RhZ10iOwoJCWZvcmVhY2ggKCRlbGVtZW50WydhdHRyaWJzJ10gYXMgJGtleSA9PiAkdmFsdWUpCgkJewoJCQkka2V5ID0gc3RydG9sb3dlcigka2V5KTsKCQkJJGZ1bGwgLj0gIiAka2V5PVwiIiAuIGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlWydkYXRhJ10sIEVOVF9DT01QQVQsICdVVEYtOCcpIC4gJyInOwoJCX0KCQlpZiAoJGVsZW1lbnRbJ3NlbGZfY2xvc2luZyddKQoJCXsKCQkJJGZ1bGwgLj0gJyAvPic7CgkJfQoJCWVsc2UKCQl7CgkJCSRmdWxsIC49ICI+JGVsZW1lbnRbY29udGVudF08LyRlbGVtZW50W3RhZ10+IjsKCQl9CgkJcmV0dXJuICRmdWxsOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXJyb3IoJG1lc3NhZ2UsICRsZXZlbCwgJGZpbGUsICRsaW5lKQoJewoJCWlmICgoaW5pX2dldCgnZXJyb3JfcmVwb3J0aW5nJykgJiAkbGV2ZWwpID4gMCkKCQl7CgkJCXN3aXRjaCAoJGxldmVsKQoJCQl7CgkJCQljYXNlIEVfVVNFUl9FUlJPUjoKCQkJCQkkbm90ZSA9ICdQSFAgRXJyb3InOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBFX1VTRVJfV0FSTklORzoKCQkJCQkkbm90ZSA9ICdQSFAgV2FybmluZyc7CgkJCQkJYnJlYWs7CgkJCQljYXNlIEVfVVNFUl9OT1RJQ0U6CgkJCQkJJG5vdGUgPSAnUEhQIE5vdGljZSc7CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OgoJCQkJCSRub3RlID0gJ1Vua25vd24gRXJyb3InOwoJCQkJCWJyZWFrOwoJCQl9CgoJCQkkbG9nX2Vycm9yID0gdHJ1ZTsKCQkJaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Vycm9yX2xvZycpKQoJCQl7CgkJCQkkbG9nX2Vycm9yID0gZmFsc2U7CgkJCX0KCgkJCSRsb2dfZmlsZSA9IEBpbmlfZ2V0KCdlcnJvcl9sb2cnKTsKCQkJaWYgKCFlbXB0eSgkbG9nX2ZpbGUpICYmICgnc3lzbG9nJyAhPT0gJGxvZ19maWxlKSAmJiAhQGlzX3dyaXRhYmxlKCRsb2dfZmlsZSkpCgkJCXsKCQkJCSRsb2dfZXJyb3IgPSBmYWxzZTsKCQkJfQoKCQkJaWYgKCRsb2dfZXJyb3IpCgkJCXsKCQkJCUBlcnJvcl9sb2coIiRub3RlOiAkbWVzc2FnZSBpbiAkZmlsZSBvbiBsaW5lICRsaW5lIiwgMCk7CgkJCX0KCQl9CgoJCXJldHVybiAkbWVzc2FnZTsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpeF9wcm90b2NvbCgkdXJsLCAkaHR0cCA9IDEpCgl7CgkJJHVybCA9IFNpbXBsZVBpZV9NaXNjOjpub3JtYWxpemVfdXJsKCR1cmwpOwoJCSRwYXJzZWQgPSBTaW1wbGVQaWVfTWlzYzo6cGFyc2VfdXJsKCR1cmwpOwoJCWlmICgkcGFyc2VkWydzY2hlbWUnXSAhPT0gJycgJiYgJHBhcnNlZFsnc2NoZW1lJ10gIT09ICdodHRwJyAmJiAkcGFyc2VkWydzY2hlbWUnXSAhPT0gJ2h0dHBzJykKCQl7CgkJCXJldHVybiBTaW1wbGVQaWVfTWlzYzo6Zml4X3Byb3RvY29sKFNpbXBsZVBpZV9NaXNjOjpjb21wcmVzc19wYXJzZV91cmwoJ2h0dHAnLCAkcGFyc2VkWydhdXRob3JpdHknXSwgJHBhcnNlZFsncGF0aCddLCAkcGFyc2VkWydxdWVyeSddLCAkcGFyc2VkWydmcmFnbWVudCddKSwgJGh0dHApOwoJCX0KCgkJaWYgKCRwYXJzZWRbJ3NjaGVtZSddID09PSAnJyAmJiAkcGFyc2VkWydhdXRob3JpdHknXSA9PT0gJycgJiYgIWZpbGVfZXhpc3RzKCR1cmwpKQoJCXsKCQkJcmV0dXJuIFNpbXBsZVBpZV9NaXNjOjpmaXhfcHJvdG9jb2woU2ltcGxlUGllX01pc2M6OmNvbXByZXNzX3BhcnNlX3VybCgnaHR0cCcsICRwYXJzZWRbJ3BhdGgnXSwgJycsICRwYXJzZWRbJ3F1ZXJ5J10sICRwYXJzZWRbJ2ZyYWdtZW50J10pLCAkaHR0cCk7CgkJfQoKCQlpZiAoJGh0dHAgPT09IDIgJiYgJHBhcnNlZFsnc2NoZW1lJ10gIT09ICcnKQoJCXsKCQkJcmV0dXJuICJmZWVkOiR1cmwiOwoJCX0KCQllbHNlaWYgKCRodHRwID09PSAzICYmIHN0cnRvbG93ZXIoJHBhcnNlZFsnc2NoZW1lJ10pID09PSAnaHR0cCcpCgkJewoJCQlyZXR1cm4gc3Vic3RyX3JlcGxhY2UoJHVybCwgJ3BvZGNhc3QnLCAwLCA0KTsKCQl9CgkJZWxzZWlmICgkaHR0cCA9PT0gNCAmJiBzdHJ0b2xvd2VyKCRwYXJzZWRbJ3NjaGVtZSddKSA9PT0gJ2h0dHAnKQoJCXsKCQkJcmV0dXJuIHN1YnN0cl9yZXBsYWNlKCR1cmwsICdpdHBjJywgMCwgNCk7CgkJfQoKCQlyZXR1cm4gJHVybDsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFycmF5X21lcmdlX3JlY3Vyc2l2ZSgkYXJyYXkxLCAkYXJyYXkyKQoJewoJCWZvcmVhY2ggKCRhcnJheTIgYXMgJGtleSA9PiAkdmFsdWUpCgkJewoJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkKCQkJewoJCQkJJGFycmF5MVska2V5XSA9IFNpbXBsZVBpZV9NaXNjOjphcnJheV9tZXJnZV9yZWN1cnNpdmUoJGFycmF5MVska2V5XSwgJHZhbHVlKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRhcnJheTFbJGtleV0gPSAkdmFsdWU7CgkJCX0KCQl9CgoJCXJldHVybiAkYXJyYXkxOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VfdXJsKCR1cmwpCgl7CgkJJGlyaSA9IG5ldyBTaW1wbGVQaWVfSVJJKCR1cmwpOwoJCXJldHVybiBhcnJheSgKCQkJJ3NjaGVtZScgPT4gKHN0cmluZykgJGlyaS0+c2NoZW1lLAoJCQknYXV0aG9yaXR5JyA9PiAoc3RyaW5nKSAkaXJpLT5hdXRob3JpdHksCgkJCSdwYXRoJyA9PiAoc3RyaW5nKSAkaXJpLT5wYXRoLAoJCQkncXVlcnknID0+IChzdHJpbmcpICRpcmktPnF1ZXJ5LAoJCQknZnJhZ21lbnQnID0+IChzdHJpbmcpICRpcmktPmZyYWdtZW50CgkJKTsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXByZXNzX3BhcnNlX3VybCgkc2NoZW1lID0gJycsICRhdXRob3JpdHkgPSAnJywgJHBhdGggPSAnJywgJHF1ZXJ5ID0gJycsICRmcmFnbWVudCA9ICcnKQoJewoJCSRpcmkgPSBuZXcgU2ltcGxlUGllX0lSSSgnJyk7CgkJJGlyaS0+c2NoZW1lID0gJHNjaGVtZTsKCQkkaXJpLT5hdXRob3JpdHkgPSAkYXV0aG9yaXR5OwoJCSRpcmktPnBhdGggPSAkcGF0aDsKCQkkaXJpLT5xdWVyeSA9ICRxdWVyeTsKCQkkaXJpLT5mcmFnbWVudCA9ICRmcmFnbWVudDsKCQlyZXR1cm4gJGlyaS0+Z2V0X3VyaSgpOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplX3VybCgkdXJsKQoJewoJCSRpcmkgPSBuZXcgU2ltcGxlUGllX0lSSSgkdXJsKTsKCQlyZXR1cm4gJGlyaS0+Z2V0X3VyaSgpOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGVyY2VudF9lbmNvZGluZ19ub3JtYWxpemF0aW9uKCRtYXRjaCkKCXsKCQkkaW50ZWdlciA9IGhleGRlYygkbWF0Y2hbMV0pOwoJCWlmICgkaW50ZWdlciA+PSAweDQxICYmICRpbnRlZ2VyIDw9IDB4NUEgfHwgJGludGVnZXIgPj0gMHg2MSAmJiAkaW50ZWdlciA8PSAweDdBIHx8ICRpbnRlZ2VyID49IDB4MzAgJiYgJGludGVnZXIgPD0gMHgzOSB8fCAkaW50ZWdlciA9PT0gMHgyRCB8fCAkaW50ZWdlciA9PT0gMHgyRSB8fCAkaW50ZWdlciA9PT0gMHg1RiB8fCAkaW50ZWdlciA9PT0gMHg3RSkKCQl7CgkJCXJldHVybiBjaHIoJGludGVnZXIpOwoJCX0KCgkJcmV0dXJuIHN0cnRvdXBwZXIoJG1hdGNoWzBdKTsKCX0KCgkvKioKCSAqIENvbnZlcnRzIGEgV2luZG93cy0xMjUyIGVuY29kZWQgc3RyaW5nIHRvIGEgVVRGLTggZW5jb2RlZCBzdHJpbmcKCSAqCgkgKiBAc3RhdGljCgkgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgV2luZG93cy0xMjUyIGVuY29kZWQgc3RyaW5nCgkgKiBAcmV0dXJuIHN0cmluZyBVVEYtOCBlbmNvZGVkIHN0cmluZwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdpbmRvd3NfMTI1Ml90b191dGY4KCRzdHJpbmcpCgl7CgkJc3RhdGljICRjb252ZXJ0X3RhYmxlID0gYXJyYXkoIlx4ODAiID0+ICJceEUyXHg4Mlx4QUMiLCAiXHg4MSIgPT4gIlx4RUZceEJGXHhCRCIsICJceDgyIiA9PiAiXHhFMlx4ODBceDlBIiwgIlx4ODMiID0+ICJceEM2XHg5MiIsICJceDg0IiA9PiAiXHhFMlx4ODBceDlFIiwgIlx4ODUiID0+ICJceEUyXHg4MFx4QTYiLCAiXHg4NiIgPT4gIlx4RTJceDgwXHhBMCIsICJceDg3IiA9PiAiXHhFMlx4ODBceEExIiwgIlx4ODgiID0+ICJceENCXHg4NiIsICJceDg5IiA9PiAiXHhFMlx4ODBceEIwIiwgIlx4OEEiID0+ICJceEM1XHhBMCIsICJceDhCIiA9PiAiXHhFMlx4ODBceEI5IiwgIlx4OEMiID0+ICJceEM1XHg5MiIsICJceDhEIiA9PiAiXHhFRlx4QkZceEJEIiwgIlx4OEUiID0+ICJceEM1XHhCRCIsICJceDhGIiA9PiAiXHhFRlx4QkZceEJEIiwgIlx4OTAiID0+ICJceEVGXHhCRlx4QkQiLCAiXHg5MSIgPT4gIlx4RTJceDgwXHg5OCIsICJceDkyIiA9PiAiXHhFMlx4ODBceDk5IiwgIlx4OTMiID0+ICJceEUyXHg4MFx4OUMiLCAiXHg5NCIgPT4gIlx4RTJceDgwXHg5RCIsICJceDk1IiA9PiAiXHhFMlx4ODBceEEyIiwgIlx4OTYiID0+ICJceEUyXHg4MFx4OTMiLCAiXHg5NyIgPT4gIlx4RTJceDgwXHg5NCIsICJceDk4IiA9PiAiXHhDQlx4OUMiLCAiXHg5OSIgPT4gIlx4RTJceDg0XHhBMiIsICJceDlBIiA9PiAiXHhDNVx4QTEiLCAiXHg5QiIgPT4gIlx4RTJceDgwXHhCQSIsICJceDlDIiA9PiAiXHhDNVx4OTMiLCAiXHg5RCIgPT4gIlx4RUZceEJGXHhCRCIsICJceDlFIiA9PiAiXHhDNVx4QkUiLCAiXHg5RiIgPT4gIlx4QzVceEI4IiwgIlx4QTAiID0+ICJceEMyXHhBMCIsICJceEExIiA9PiAiXHhDMlx4QTEiLCAiXHhBMiIgPT4gIlx4QzJceEEyIiwgIlx4QTMiID0+ICJceEMyXHhBMyIsICJceEE0IiA9PiAiXHhDMlx4QTQiLCAiXHhBNSIgPT4gIlx4QzJceEE1IiwgIlx4QTYiID0+ICJceEMyXHhBNiIsICJceEE3IiA9PiAiXHhDMlx4QTciLCAiXHhBOCIgPT4gIlx4QzJceEE4IiwgIlx4QTkiID0+ICJceEMyXHhBOSIsICJceEFBIiA9PiAiXHhDMlx4QUEiLCAiXHhBQiIgPT4gIlx4QzJceEFCIiwgIlx4QUMiID0+ICJceEMyXHhBQyIsICJceEFEIiA9PiAiXHhDMlx4QUQiLCAiXHhBRSIgPT4gIlx4QzJceEFFIiwgIlx4QUYiID0+ICJceEMyXHhBRiIsICJceEIwIiA9PiAiXHhDMlx4QjAiLCAiXHhCMSIgPT4gIlx4QzJceEIxIiwgIlx4QjIiID0+ICJceEMyXHhCMiIsICJceEIzIiA9PiAiXHhDMlx4QjMiLCAiXHhCNCIgPT4gIlx4QzJceEI0IiwgIlx4QjUiID0+ICJceEMyXHhCNSIsICJceEI2IiA9PiAiXHhDMlx4QjYiLCAiXHhCNyIgPT4gIlx4QzJceEI3IiwgIlx4QjgiID0+ICJceEMyXHhCOCIsICJceEI5IiA9PiAiXHhDMlx4QjkiLCAiXHhCQSIgPT4gIlx4QzJceEJBIiwgIlx4QkIiID0+ICJceEMyXHhCQiIsICJceEJDIiA9PiAiXHhDMlx4QkMiLCAiXHhCRCIgPT4gIlx4QzJceEJEIiwgIlx4QkUiID0+ICJceEMyXHhCRSIsICJceEJGIiA9PiAiXHhDMlx4QkYiLCAiXHhDMCIgPT4gIlx4QzNceDgwIiwgIlx4QzEiID0+ICJceEMzXHg4MSIsICJceEMyIiA9PiAiXHhDM1x4ODIiLCAiXHhDMyIgPT4gIlx4QzNceDgzIiwgIlx4QzQiID0+ICJceEMzXHg4NCIsICJceEM1IiA9PiAiXHhDM1x4ODUiLCAiXHhDNiIgPT4gIlx4QzNceDg2IiwgIlx4QzciID0+ICJceEMzXHg4NyIsICJceEM4IiA9PiAiXHhDM1x4ODgiLCAiXHhDOSIgPT4gIlx4QzNceDg5IiwgIlx4Q0EiID0+ICJceEMzXHg4QSIsICJceENCIiA9PiAiXHhDM1x4OEIiLCAiXHhDQyIgPT4gIlx4QzNceDhDIiwgIlx4Q0QiID0+ICJceEMzXHg4RCIsICJceENFIiA9PiAiXHhDM1x4OEUiLCAiXHhDRiIgPT4gIlx4QzNceDhGIiwgIlx4RDAiID0+ICJceEMzXHg5MCIsICJceEQxIiA9PiAiXHhDM1x4OTEiLCAiXHhEMiIgPT4gIlx4QzNceDkyIiwgIlx4RDMiID0+ICJceEMzXHg5MyIsICJceEQ0IiA9PiAiXHhDM1x4OTQiLCAiXHhENSIgPT4gIlx4QzNceDk1IiwgIlx4RDYiID0+ICJceEMzXHg5NiIsICJceEQ3IiA9PiAiXHhDM1x4OTciLCAiXHhEOCIgPT4gIlx4QzNceDk4IiwgIlx4RDkiID0+ICJceEMzXHg5OSIsICJceERBIiA9PiAiXHhDM1x4OUEiLCAiXHhEQiIgPT4gIlx4QzNceDlCIiwgIlx4REMiID0+ICJceEMzXHg5QyIsICJceEREIiA9PiAiXHhDM1x4OUQiLCAiXHhERSIgPT4gIlx4QzNceDlFIiwgIlx4REYiID0+ICJceEMzXHg5RiIsICJceEUwIiA9PiAiXHhDM1x4QTAiLCAiXHhFMSIgPT4gIlx4QzNceEExIiwgIlx4RTIiID0+ICJceEMzXHhBMiIsICJceEUzIiA9PiAiXHhDM1x4QTMiLCAiXHhFNCIgPT4gIlx4QzNceEE0IiwgIlx4RTUiID0+ICJceEMzXHhBNSIsICJceEU2IiA9PiAiXHhDM1x4QTYiLCAiXHhFNyIgPT4gIlx4QzNceEE3IiwgIlx4RTgiID0+ICJceEMzXHhBOCIsICJceEU5IiA9PiAiXHhDM1x4QTkiLCAiXHhFQSIgPT4gIlx4QzNceEFBIiwgIlx4RUIiID0+ICJceEMzXHhBQiIsICJceEVDIiA9PiAiXHhDM1x4QUMiLCAiXHhFRCIgPT4gIlx4QzNceEFEIiwgIlx4RUUiID0+ICJceEMzXHhBRSIsICJceEVGIiA9PiAiXHhDM1x4QUYiLCAiXHhGMCIgPT4gIlx4QzNceEIwIiwgIlx4RjEiID0+ICJceEMzXHhCMSIsICJceEYyIiA9PiAiXHhDM1x4QjIiLCAiXHhGMyIgPT4gIlx4QzNceEIzIiwgIlx4RjQiID0+ICJceEMzXHhCNCIsICJceEY1IiA9PiAiXHhDM1x4QjUiLCAiXHhGNiIgPT4gIlx4QzNceEI2IiwgIlx4RjciID0+ICJceEMzXHhCNyIsICJceEY4IiA9PiAiXHhDM1x4QjgiLCAiXHhGOSIgPT4gIlx4QzNceEI5IiwgIlx4RkEiID0+ICJceEMzXHhCQSIsICJceEZCIiA9PiAiXHhDM1x4QkIiLCAiXHhGQyIgPT4gIlx4QzNceEJDIiwgIlx4RkQiID0+ICJceEMzXHhCRCIsICJceEZFIiA9PiAiXHhDM1x4QkUiLCAiXHhGRiIgPT4gIlx4QzNceEJGIik7CgoJCXJldHVybiBzdHJ0cigkc3RyaW5nLCAkY29udmVydF90YWJsZSk7Cgl9CgoJLyoqCgkgKiBDaGFuZ2UgYSBzdHJpbmcgZnJvbSBvbmUgZW5jb2RpbmcgdG8gYW5vdGhlcgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgUmF3IGRhdGEgaW4gJGlucHV0IGVuY29kaW5nCgkgKiBAcGFyYW0gc3RyaW5nICRpbnB1dCBFbmNvZGluZyBvZiAkZGF0YQoJICogQHBhcmFtIHN0cmluZyAkb3V0cHV0IEVuY29kaW5nIHlvdSB3YW50CgkgKiBAcmV0dXJuIHN0cmluZ3xib29sZWFuIEZhbHNlIGlmIHdlIGNhbid0IGNvbnZlcnQgaXQKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGFuZ2VfZW5jb2RpbmcoJGRhdGEsICRpbnB1dCwgJG91dHB1dCkKCXsKCQkkaW5wdXQgPSBTaW1wbGVQaWVfTWlzYzo6ZW5jb2RpbmcoJGlucHV0KTsKCQkkb3V0cHV0ID0gU2ltcGxlUGllX01pc2M6OmVuY29kaW5nKCRvdXRwdXQpOwoKCQkvLyBXZSBmYWlsIHRvIGZhaWwgb24gbm9uIFVTLUFTQ0lJIGJ5dGVzCgkJaWYgKCRpbnB1dCA9PT0gJ1VTLUFTQ0lJJykKCQl7CgkJCXN0YXRpYyAkbm9uX2FzY2lpX29jdGVjdHMgPSAnJzsKCQkJaWYgKCEkbm9uX2FzY2lpX29jdGVjdHMpCgkJCXsKCQkJCWZvciAoJGkgPSAweDgwOyAkaSA8PSAweEZGOyAkaSsrKQoJCQkJewoJCQkJCSRub25fYXNjaWlfb2N0ZWN0cyAuPSBjaHIoJGkpOwoJCQkJfQoJCQl9CgkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCAwLCBzdHJjc3BuKCRkYXRhLCAkbm9uX2FzY2lpX29jdGVjdHMpKTsKCQl9CgoJCS8vIFRoaXMgaXMgZmlyc3QsIGFzIGJlaGF2aW91ciBvZiB0aGlzIGlzIGNvbXBsZXRlbHkgcHJlZGljdGFibGUKCQlpZiAoJGlucHV0ID09PSAnd2luZG93cy0xMjUyJyAmJiAkb3V0cHV0ID09PSAnVVRGLTgnKQoJCXsKCQkJcmV0dXJuIFNpbXBsZVBpZV9NaXNjOjp3aW5kb3dzXzEyNTJfdG9fdXRmOCgkZGF0YSk7CgkJfQoJCS8vIFRoaXMgaXMgc2Vjb25kLCBhcyBiZWhhdmlvdXIgb2YgdGhpcyB2YXJpZXMgb25seSB3aXRoIFBIUCB2ZXJzaW9uICh0aGUgbWlkZGxlIHBhcnQgb2YgdGhpcyBleHByZXNzaW9uIGNoZWNrcyB0aGUgZW5jb2RpbmcgaXMgc3VwcG9ydGVkKS4KCQllbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWJfY29udmVydF9lbmNvZGluZycpICYmICgkcmV0dXJuID0gU2ltcGxlUGllX01pc2M6OmNoYW5nZV9lbmNvZGluZ19tYnN0cmluZygkZGF0YSwgJGlucHV0LCAkb3V0cHV0KSkpCgkJewoJCQlyZXR1cm4gJHJldHVybjsKIAkJfQoJCS8vIFRoaXMgaXMgdGhpcmQsIGFzIGJlaGF2aW91ciBvZiB0aGlzIHZhcmllcyB3aXRoIE9TIHVzZXJsYW5kIGFuZCBQSFAgdmVyc2lvbgoJCWVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdpY29udicpICYmICgkcmV0dXJuID0gU2ltcGxlUGllX01pc2M6OmNoYW5nZV9lbmNvZGluZ19pY29udigkZGF0YSwgJGlucHV0LCAkb3V0cHV0KSkpCgkJewoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgkJLy8gVGhpcyBpcyBsYXN0LCBhcyBiZWhhdmlvdXIgb2YgdGhpcyB2YXJpZXMgd2l0aCBPUyB1c2VybGFuZCBhbmQgUEhQIHZlcnNpb24KCQllbHNlaWYgKGNsYXNzX2V4aXN0cygnXFVDb252ZXJ0ZXInKSAmJiAoJHJldHVybiA9IFNpbXBsZVBpZV9NaXNjOjpjaGFuZ2VfZW5jb2RpbmdfdWNvbnZlcnRlcigkZGF0YSwgJGlucHV0LCAkb3V0cHV0KSkpCgkJewoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgoJCS8vIElmIHdlIGNhbid0IGRvIGFueXRoaW5nLCBqdXN0IGZhaWwKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBjaGFuZ2VfZW5jb2RpbmdfbWJzdHJpbmcoJGRhdGEsICRpbnB1dCwgJG91dHB1dCkKCXsKCQlpZiAoJGlucHV0ID09PSAnd2luZG93cy05NDknKQoJCXsKCQkJJGlucHV0ID0gJ0VVQy1LUic7CgkJfQoJCWlmICgkb3V0cHV0ID09PSAnd2luZG93cy05NDknKQoJCXsKCQkJJG91dHB1dCA9ICdFVUMtS1InOwoJCX0KCQlpZiAoJGlucHV0ID09PSAnV2luZG93cy0zMUonKQoJCXsKCQkJJGlucHV0ID0gJ1NKSVMnOwoJCX0KCQlpZiAoJG91dHB1dCA9PT0gJ1dpbmRvd3MtMzFKJykKCQl7CgkJCSRvdXRwdXQgPSAnU0pJUyc7CgkJfQoKCQkvLyBDaGVjayB0aGF0IHRoZSBlbmNvZGluZyBpcyBzdXBwb3J0ZWQKCQlpZiAoIWluX2FycmF5KCRpbnB1dCwgbWJfbGlzdF9lbmNvZGluZ3MoKSkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlpZiAoQG1iX2NvbnZlcnRfZW5jb2RpbmcoIlx4ODAiLCAnVVRGLTE2QkUnLCAkaW5wdXQpID09PSAiXHgwMFx4ODAiKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLy8gTGV0J3MgZG8gc29tZSBjb252ZXJzaW9uCgkJaWYgKCRyZXR1cm4gPSBAbWJfY29udmVydF9lbmNvZGluZygkZGF0YSwgJG91dHB1dCwgJGlucHV0KSkKCQl7CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY2hhbmdlX2VuY29kaW5nX2ljb252KCRkYXRhLCAkaW5wdXQsICRvdXRwdXQpCgl7CgkJcmV0dXJuIEBpY29udigkaW5wdXQsICRvdXRwdXQsICRkYXRhKTsKCX0KCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKCSAqIEBwYXJhbSBzdHJpbmcgJGlucHV0CgkgKiBAcGFyYW0gc3RyaW5nICRvdXRwdXQKCSAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCgkgKi8KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY2hhbmdlX2VuY29kaW5nX3Vjb252ZXJ0ZXIoJGRhdGEsICRpbnB1dCwgJG91dHB1dCkKCXsKCQlyZXR1cm4gQFxVQ29udmVydGVyOjp0cmFuc2NvZGUoJGRhdGEsICRvdXRwdXQsICRpbnB1dCk7Cgl9CgoJLyoqCgkgKiBOb3JtYWxpemUgYW4gZW5jb2RpbmcgbmFtZQoJICoKCSAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY3JlYXRlLnBocAoJICoKCSAqIFRvIGdlbmVyYXRlIGl0LCBydW4gYHBocCBjcmVhdGUucGhwYCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgY29weSB0aGUKCSAqIG91dHB1dCB0byByZXBsYWNlIHRoaXMgZnVuY3Rpb24uCgkgKgoJICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBDaGFyYWN0ZXIgc2V0IHRvIHN0YW5kYXJkaXNlCgkgKiBAcmV0dXJuIHN0cmluZyBTdGFuZGFyZGlzZWQgbmFtZQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kaW5nKCRjaGFyc2V0KQoJewoJCS8vIE5vcm1hbGl6YXRpb24gZnJvbSBVVFMgIzIyCgkJc3dpdGNoIChzdHJ0b2xvd2VyKHByZWdfcmVwbGFjZSgnLyg/OlteYS16QS1aMC05XSt8KFteMC05XSkwKykvJywgJ1wxJywgJGNoYXJzZXQpKSkKCQl7CgkJCWNhc2UgJ2Fkb2Jlc3RhbmRhcmRlbmNvZGluZyc6CgkJCWNhc2UgJ2NzYWRvYmVzdGFuZGFyZGVuY29kaW5nJzoKCQkJCXJldHVybiAnQWRvYmUtU3RhbmRhcmQtRW5jb2RpbmcnOwoKCQkJY2FzZSAnYWRvYmVzeW1ib2xlbmNvZGluZyc6CgkJCWNhc2UgJ2NzaHBwc21hdGgnOgoJCQkJcmV0dXJuICdBZG9iZS1TeW1ib2wtRW5jb2RpbmcnOwoKCQkJY2FzZSAnYW1pMTI1MSc6CgkJCWNhc2UgJ2FtaWdhMTI1MSc6CgkJCQlyZXR1cm4gJ0FtaWdhLTEyNTEnOwoKCQkJY2FzZSAnYW5zaXgzMTEwMTk4Myc6CgkJCWNhc2UgJ2NzYXQ1MDAxOTgzJzoKCQkJY2FzZSAnY3Npc285OW5hcGxwcyc6CgkJCWNhc2UgJ2lzb2lyOTknOgoJCQljYXNlICduYXBscHMnOgoJCQkJcmV0dXJuICdBTlNJX1gzLjExMC0xOTgzJzsKCgkJCWNhc2UgJ2FyYWJpYzcnOgoJCQljYXNlICdhc21vNDQ5JzoKCQkJY2FzZSAnY3Npc284OWFzbW80NDknOgoJCQljYXNlICdpc285MDM2JzoKCQkJY2FzZSAnaXNvaXI4OSc6CgkJCQlyZXR1cm4gJ0FTTU9fNDQ5JzsKCgkJCWNhc2UgJ2JpZzUnOgoJCQljYXNlICdjc2JpZzUnOgoJCQkJcmV0dXJuICdCaWc1JzsKCgkJCWNhc2UgJ2JpZzVoa3Njcyc6CgkJCQlyZXR1cm4gJ0JpZzUtSEtTQ1MnOwoKCQkJY2FzZSAnYm9jdTEnOgoJCQljYXNlICdjc2JvY3UxJzoKCQkJCXJldHVybiAnQk9DVS0xJzsKCgkJCWNhc2UgJ2JyZic6CgkJCWNhc2UgJ2NzYnJmJzoKCQkJCXJldHVybiAnQlJGJzsKCgkJCWNhc2UgJ2JzNDczMCc6CgkJCWNhc2UgJ2NzaXNvNHVuaXRlZGtpbmdkb20nOgoJCQljYXNlICdnYic6CgkJCWNhc2UgJ2lzbzY0NmdiJzoKCQkJY2FzZSAnaXNvaXI0JzoKCQkJY2FzZSAndWsnOgoJCQkJcmV0dXJuICdCU180NzMwJzsKCgkJCWNhc2UgJ2Jzdmlld2RhdGEnOgoJCQljYXNlICdjc2lzbzQ3YnN2aWV3ZGF0YSc6CgkJCWNhc2UgJ2lzb2lyNDcnOgoJCQkJcmV0dXJuICdCU192aWV3ZGF0YSc7CgoJCQljYXNlICdjZXN1OCc6CgkJCWNhc2UgJ2NzY2VzdTgnOgoJCQkJcmV0dXJuICdDRVNVLTgnOwoKCQkJY2FzZSAnY2EnOgoJCQljYXNlICdjc2E3MSc6CgkJCWNhc2UgJ2NzYXoyNDM0MTk4NTEnOgoJCQljYXNlICdjc2lzbzEyMWNhbmFkaWFuMSc6CgkJCWNhc2UgJ2lzbzY0NmNhJzoKCQkJY2FzZSAnaXNvaXIxMjEnOgoJCQkJcmV0dXJuICdDU0FfWjI0My40LTE5ODUtMSc7CgoJCQljYXNlICdjc2E3Mic6CgkJCWNhc2UgJ2NzYXoyNDM0MTk4NTInOgoJCQljYXNlICdjc2lzbzEyMmNhbmFkaWFuMic6CgkJCWNhc2UgJ2lzbzY0NmNhMic6CgkJCWNhc2UgJ2lzb2lyMTIyJzoKCQkJCXJldHVybiAnQ1NBX1oyNDMuNC0xOTg1LTInOwoKCQkJY2FzZSAnY3NhejI0MzQxOTg1Z3InOgoJCQljYXNlICdjc2lzbzEyM2NzYXoyNDM0MTk4NWdyJzoKCQkJY2FzZSAnaXNvaXIxMjMnOgoJCQkJcmV0dXJuICdDU0FfWjI0My40LTE5ODUtZ3InOwoKCQkJY2FzZSAnY3Npc28xMzljc24zNjkxMDMnOgoJCQljYXNlICdjc24zNjkxMDMnOgoJCQljYXNlICdpc29pcjEzOSc6CgkJCQlyZXR1cm4gJ0NTTl8zNjkxMDMnOwoKCQkJY2FzZSAnY3NkZWNtY3MnOgoJCQljYXNlICdkZWMnOgoJCQljYXNlICdkZWNtY3MnOgoJCQkJcmV0dXJuICdERUMtTUNTJzsKCgkJCWNhc2UgJ2NzaXNvMjFnZXJtYW4nOgoJCQljYXNlICdkZSc6CgkJCWNhc2UgJ2RpbjY2MDAzJzoKCQkJY2FzZSAnaXNvNjQ2ZGUnOgoJCQljYXNlICdpc29pcjIxJzoKCQkJCXJldHVybiAnRElOXzY2MDAzJzsKCgkJCWNhc2UgJ2NzZGt1cyc6CgkJCWNhc2UgJ2RrdXMnOgoJCQkJcmV0dXJuICdkay11cyc7CgoJCQljYXNlICdjc2lzbzY0NmRhbmlzaCc6CgkJCWNhc2UgJ2RrJzoKCQkJY2FzZSAnZHMyMDg5JzoKCQkJY2FzZSAnaXNvNjQ2ZGsnOgoJCQkJcmV0dXJuICdEU18yMDg5JzsKCgkJCWNhc2UgJ2NzaWJtZWJjZGljYXRkZSc6CgkJCWNhc2UgJ2ViY2RpY2F0ZGUnOgoJCQkJcmV0dXJuICdFQkNESUMtQVQtREUnOwoKCQkJY2FzZSAnY3NlYmNkaWNhdGRlYSc6CgkJCWNhc2UgJ2ViY2RpY2F0ZGVhJzoKCQkJCXJldHVybiAnRUJDRElDLUFULURFLUEnOwoKCQkJY2FzZSAnY3NlYmNkaWNjYWZyJzoKCQkJY2FzZSAnZWJjZGljY2Fmcic6CgkJCQlyZXR1cm4gJ0VCQ0RJQy1DQS1GUic7CgoJCQljYXNlICdjc2ViY2RpY2Rrbm8nOgoJCQljYXNlICdlYmNkaWNka25vJzoKCQkJCXJldHVybiAnRUJDRElDLURLLU5PJzsKCgkJCWNhc2UgJ2NzZWJjZGljZGtub2EnOgoJCQljYXNlICdlYmNkaWNka25vYSc6CgkJCQlyZXR1cm4gJ0VCQ0RJQy1ESy1OTy1BJzsKCgkJCWNhc2UgJ2NzZWJjZGljZXMnOgoJCQljYXNlICdlYmNkaWNlcyc6CgkJCQlyZXR1cm4gJ0VCQ0RJQy1FUyc7CgoJCQljYXNlICdjc2ViY2RpY2VzYSc6CgkJCWNhc2UgJ2ViY2RpY2VzYSc6CgkJCQlyZXR1cm4gJ0VCQ0RJQy1FUy1BJzsKCgkJCWNhc2UgJ2NzZWJjZGljZXNzJzoKCQkJY2FzZSAnZWJjZGljZXNzJzoKCQkJCXJldHVybiAnRUJDRElDLUVTLVMnOwoKCQkJY2FzZSAnY3NlYmNkaWNmaXNlJzoKCQkJY2FzZSAnZWJjZGljZmlzZSc6CgkJCQlyZXR1cm4gJ0VCQ0RJQy1GSS1TRSc7CgoJCQljYXNlICdjc2ViY2RpY2Zpc2VhJzoKCQkJY2FzZSAnZWJjZGljZmlzZWEnOgoJCQkJcmV0dXJuICdFQkNESUMtRkktU0UtQSc7CgoJCQljYXNlICdjc2ViY2RpY2ZyJzoKCQkJY2FzZSAnZWJjZGljZnInOgoJCQkJcmV0dXJuICdFQkNESUMtRlInOwoKCQkJY2FzZSAnY3NlYmNkaWNpdCc6CgkJCWNhc2UgJ2ViY2RpY2l0JzoKCQkJCXJldHVybiAnRUJDRElDLUlUJzsKCgkJCWNhc2UgJ2NzZWJjZGljcHQnOgoJCQljYXNlICdlYmNkaWNwdCc6CgkJCQlyZXR1cm4gJ0VCQ0RJQy1QVCc7CgoJCQljYXNlICdjc2ViY2RpY3VrJzoKCQkJY2FzZSAnZWJjZGljdWsnOgoJCQkJcmV0dXJuICdFQkNESUMtVUsnOwoKCQkJY2FzZSAnY3NlYmNkaWN1cyc6CgkJCWNhc2UgJ2ViY2RpY3VzJzoKCQkJCXJldHVybiAnRUJDRElDLVVTJzsKCgkJCWNhc2UgJ2NzaXNvMTExZWNtYWN5cmlsbGljJzoKCQkJY2FzZSAnZWNtYWN5cmlsbGljJzoKCQkJY2FzZSAnaXNvaXIxMTEnOgoJCQljYXNlICdrb2k4ZSc6CgkJCQlyZXR1cm4gJ0VDTUEtY3lyaWxsaWMnOwoKCQkJY2FzZSAnY3Npc28xN3NwYW5pc2gnOgoJCQljYXNlICdlcyc6CgkJCWNhc2UgJ2lzbzY0NmVzJzoKCQkJY2FzZSAnaXNvaXIxNyc6CgkJCQlyZXR1cm4gJ0VTJzsKCgkJCWNhc2UgJ2NzaXNvODVzcGFuaXNoMic6CgkJCWNhc2UgJ2VzMic6CgkJCWNhc2UgJ2lzbzY0NmVzMic6CgkJCWNhc2UgJ2lzb2lyODUnOgoJCQkJcmV0dXJuICdFUzInOwoKCQkJY2FzZSAnY3NldWNwa2RmbXRqYXBhbmVzZSc6CgkJCWNhc2UgJ2V1Y2pwJzoKCQkJY2FzZSAnZXh0ZW5kZWR1bml4Y29kZXBhY2tlZGZvcm1hdGZvcmphcGFuZXNlJzoKCQkJCXJldHVybiAnRVVDLUpQJzsKCgkJCWNhc2UgJ2NzZXVjZml4d2lkamFwYW5lc2UnOgoJCQljYXNlICdleHRlbmRlZHVuaXhjb2RlZml4ZWR3aWR0aGZvcmphcGFuZXNlJzoKCQkJCXJldHVybiAnRXh0ZW5kZWRfVU5JWF9Db2RlX0ZpeGVkX1dpZHRoX2Zvcl9KYXBhbmVzZSc7CgoJCQljYXNlICdnYjE4MDMwJzoKCQkJCXJldHVybiAnR0IxODAzMCc7CgoJCQljYXNlICdjaGluZXNlJzoKCQkJY2FzZSAnY3A5MzYnOgoJCQljYXNlICdjc2diMjMxMic6CgkJCWNhc2UgJ2NzaXNvNThnYjIzMTI4MCc6CgkJCWNhc2UgJ2diMjMxMic6CgkJCWNhc2UgJ2diMjMxMjgwJzoKCQkJY2FzZSAnZ2JrJzoKCQkJY2FzZSAnaXNvaXI1OCc6CgkJCWNhc2UgJ21zOTM2JzoKCQkJY2FzZSAnd2luZG93czkzNic6CgkJCQlyZXR1cm4gJ0dCSyc7CgoJCQljYXNlICdjbic6CgkJCWNhc2UgJ2NzaXNvNTdnYjE5ODgnOgoJCQljYXNlICdnYjE5ODg4MCc6CgkJCWNhc2UgJ2lzbzY0NmNuJzoKCQkJY2FzZSAnaXNvaXI1Nyc6CgkJCQlyZXR1cm4gJ0dCXzE5ODgtODAnOwoKCQkJY2FzZSAnY3Npc28xNTNnb3N0MTk3Njg3NCc6CgkJCWNhc2UgJ2dvc3QxOTc2ODc0JzoKCQkJY2FzZSAnaXNvaXIxNTMnOgoJCQljYXNlICdzdHNldjM1ODg4JzoKCQkJCXJldHVybiAnR09TVF8xOTc2OC03NCc7CgoJCQljYXNlICdjc2lzbzE1MCc6CgkJCWNhc2UgJ2NzaXNvMTUwZ3JlZWtjY2l0dCc6CgkJCWNhc2UgJ2dyZWVrY2NpdHQnOgoJCQljYXNlICdpc29pcjE1MCc6CgkJCQlyZXR1cm4gJ2dyZWVrLWNjaXR0JzsKCgkJCWNhc2UgJ2NzaXNvODhncmVlazcnOgoJCQljYXNlICdncmVlazcnOgoJCQljYXNlICdpc29pcjg4JzoKCQkJCXJldHVybiAnZ3JlZWs3JzsKCgkJCWNhc2UgJ2NzaXNvMThncmVlazdvbGQnOgoJCQljYXNlICdncmVlazdvbGQnOgoJCQljYXNlICdpc29pcjE4JzoKCQkJCXJldHVybiAnZ3JlZWs3LW9sZCc7CgoJCQljYXNlICdjc2hwZGVza3RvcCc6CgkJCWNhc2UgJ2hwZGVza3RvcCc6CgkJCQlyZXR1cm4gJ0hQLURlc2tUb3AnOwoKCQkJY2FzZSAnY3NocGxlZ2FsJzoKCQkJY2FzZSAnaHBsZWdhbCc6CgkJCQlyZXR1cm4gJ0hQLUxlZ2FsJzsKCgkJCWNhc2UgJ2NzaHBtYXRoOCc6CgkJCWNhc2UgJ2hwbWF0aDgnOgoJCQkJcmV0dXJuICdIUC1NYXRoOCc7CgoJCQljYXNlICdjc2hwcGlmb250JzoKCQkJY2FzZSAnaHBwaWZvbnQnOgoJCQkJcmV0dXJuICdIUC1QaS1mb250JzsKCgkJCWNhc2UgJ2NzaHByb21hbjgnOgoJCQljYXNlICdocHJvbWFuOCc6CgkJCWNhc2UgJ3I4JzoKCQkJY2FzZSAncm9tYW44JzoKCQkJCXJldHVybiAnaHAtcm9tYW44JzsKCgkJCWNhc2UgJ2h6Z2IyMzEyJzoKCQkJCXJldHVybiAnSFotR0ItMjMxMic7CgoJCQljYXNlICdjc2libXN5bWJvbHMnOgoJCQljYXNlICdpYm1zeW1ib2xzJzoKCQkJCXJldHVybiAnSUJNLVN5bWJvbHMnOwoKCQkJY2FzZSAnY3NpYm10aGFpJzoKCQkJY2FzZSAnaWJtdGhhaSc6CgkJCQlyZXR1cm4gJ0lCTS1UaGFpJzsKCgkJCWNhc2UgJ2NwMzcnOgoJCQljYXNlICdjc2libTM3JzoKCQkJY2FzZSAnZWJjZGljY3BjYSc6CgkJCWNhc2UgJ2ViY2RpY2NwbmwnOgoJCQljYXNlICdlYmNkaWNjcHVzJzoKCQkJY2FzZSAnZWJjZGljY3B3dCc6CgkJCWNhc2UgJ2libTM3JzoKCQkJCXJldHVybiAnSUJNMDM3JzsKCgkJCWNhc2UgJ2NwMzgnOgoJCQljYXNlICdjc2libTM4JzoKCQkJY2FzZSAnZWJjZGljaW50JzoKCQkJY2FzZSAnaWJtMzgnOgoJCQkJcmV0dXJuICdJQk0wMzgnOwoKCQkJY2FzZSAnY3AyNzMnOgoJCQljYXNlICdjc2libTI3Myc6CgkJCWNhc2UgJ2libTI3Myc6CgkJCQlyZXR1cm4gJ0lCTTI3Myc7CgoJCQljYXNlICdjcDI3NCc6CgkJCWNhc2UgJ2NzaWJtMjc0JzoKCQkJY2FzZSAnZWJjZGljYmUnOgoJCQljYXNlICdpYm0yNzQnOgoJCQkJcmV0dXJuICdJQk0yNzQnOwoKCQkJY2FzZSAnY3AyNzUnOgoJCQljYXNlICdjc2libTI3NSc6CgkJCWNhc2UgJ2ViY2RpY2JyJzoKCQkJY2FzZSAnaWJtMjc1JzoKCQkJCXJldHVybiAnSUJNMjc1JzsKCgkJCWNhc2UgJ2NzaWJtMjc3JzoKCQkJY2FzZSAnZWJjZGljY3Bkayc6CgkJCWNhc2UgJ2ViY2RpY2Nwbm8nOgoJCQljYXNlICdpYm0yNzcnOgoJCQkJcmV0dXJuICdJQk0yNzcnOwoKCQkJY2FzZSAnY3AyNzgnOgoJCQljYXNlICdjc2libTI3OCc6CgkJCWNhc2UgJ2ViY2RpY2NwZmknOgoJCQljYXNlICdlYmNkaWNjcHNlJzoKCQkJY2FzZSAnaWJtMjc4JzoKCQkJCXJldHVybiAnSUJNMjc4JzsKCgkJCWNhc2UgJ2NwMjgwJzoKCQkJY2FzZSAnY3NpYm0yODAnOgoJCQljYXNlICdlYmNkaWNjcGl0JzoKCQkJY2FzZSAnaWJtMjgwJzoKCQkJCXJldHVybiAnSUJNMjgwJzsKCgkJCWNhc2UgJ2NwMjgxJzoKCQkJY2FzZSAnY3NpYm0yODEnOgoJCQljYXNlICdlYmNkaWNqcGUnOgoJCQljYXNlICdpYm0yODEnOgoJCQkJcmV0dXJuICdJQk0yODEnOwoKCQkJY2FzZSAnY3AyODQnOgoJCQljYXNlICdjc2libTI4NCc6CgkJCWNhc2UgJ2ViY2RpY2NwZXMnOgoJCQljYXNlICdpYm0yODQnOgoJCQkJcmV0dXJuICdJQk0yODQnOwoKCQkJY2FzZSAnY3AyODUnOgoJCQljYXNlICdjc2libTI4NSc6CgkJCWNhc2UgJ2ViY2RpY2NwZ2InOgoJCQljYXNlICdpYm0yODUnOgoJCQkJcmV0dXJuICdJQk0yODUnOwoKCQkJY2FzZSAnY3AyOTAnOgoJCQljYXNlICdjc2libTI5MCc6CgkJCWNhc2UgJ2ViY2RpY2pwa2FuYSc6CgkJCWNhc2UgJ2libTI5MCc6CgkJCQlyZXR1cm4gJ0lCTTI5MCc7CgoJCQljYXNlICdjcDI5Nyc6CgkJCWNhc2UgJ2NzaWJtMjk3JzoKCQkJY2FzZSAnZWJjZGljY3Bmcic6CgkJCWNhc2UgJ2libTI5Nyc6CgkJCQlyZXR1cm4gJ0lCTTI5Nyc7CgoJCQljYXNlICdjcDQyMCc6CgkJCWNhc2UgJ2NzaWJtNDIwJzoKCQkJY2FzZSAnZWJjZGljY3BhcjEnOgoJCQljYXNlICdpYm00MjAnOgoJCQkJcmV0dXJuICdJQk00MjAnOwoKCQkJY2FzZSAnY3A0MjMnOgoJCQljYXNlICdjc2libTQyMyc6CgkJCWNhc2UgJ2ViY2RpY2NwZ3InOgoJCQljYXNlICdpYm00MjMnOgoJCQkJcmV0dXJuICdJQk00MjMnOwoKCQkJY2FzZSAnY3A0MjQnOgoJCQljYXNlICdjc2libTQyNCc6CgkJCWNhc2UgJ2ViY2RpY2NwaGUnOgoJCQljYXNlICdpYm00MjQnOgoJCQkJcmV0dXJuICdJQk00MjQnOwoKCQkJY2FzZSAnNDM3JzoKCQkJY2FzZSAnY3A0MzcnOgoJCQljYXNlICdjc3BjOGNvZGVwYWdlNDM3JzoKCQkJY2FzZSAnaWJtNDM3JzoKCQkJCXJldHVybiAnSUJNNDM3JzsKCgkJCWNhc2UgJ2NwNTAwJzoKCQkJY2FzZSAnY3NpYm01MDAnOgoJCQljYXNlICdlYmNkaWNjcGJlJzoKCQkJY2FzZSAnZWJjZGljY3BjaCc6CgkJCWNhc2UgJ2libTUwMCc6CgkJCQlyZXR1cm4gJ0lCTTUwMCc7CgoJCQljYXNlICdjcDc3NSc6CgkJCWNhc2UgJ2NzcGM3NzViYWx0aWMnOgoJCQljYXNlICdpYm03NzUnOgoJCQkJcmV0dXJuICdJQk03NzUnOwoKCQkJY2FzZSAnODUwJzoKCQkJY2FzZSAnY3A4NTAnOgoJCQljYXNlICdjc3BjODUwbXVsdGlsaW5ndWFsJzoKCQkJY2FzZSAnaWJtODUwJzoKCQkJCXJldHVybiAnSUJNODUwJzsKCgkJCWNhc2UgJzg1MSc6CgkJCWNhc2UgJ2NwODUxJzoKCQkJY2FzZSAnY3NpYm04NTEnOgoJCQljYXNlICdpYm04NTEnOgoJCQkJcmV0dXJuICdJQk04NTEnOwoKCQkJY2FzZSAnODUyJzoKCQkJY2FzZSAnY3A4NTInOgoJCQljYXNlICdjc3BjcDg1Mic6CgkJCWNhc2UgJ2libTg1Mic6CgkJCQlyZXR1cm4gJ0lCTTg1Mic7CgoJCQljYXNlICc4NTUnOgoJCQljYXNlICdjcDg1NSc6CgkJCWNhc2UgJ2NzaWJtODU1JzoKCQkJY2FzZSAnaWJtODU1JzoKCQkJCXJldHVybiAnSUJNODU1JzsKCgkJCWNhc2UgJzg1Nyc6CgkJCWNhc2UgJ2NwODU3JzoKCQkJY2FzZSAnY3NpYm04NTcnOgoJCQljYXNlICdpYm04NTcnOgoJCQkJcmV0dXJuICdJQk04NTcnOwoKCQkJY2FzZSAnY2NzaWQ4NTgnOgoJCQljYXNlICdjcDg1OCc6CgkJCWNhc2UgJ2libTg1OCc6CgkJCWNhc2UgJ3BjbXVsdGlsaW5ndWFsODUwZXVybyc6CgkJCQlyZXR1cm4gJ0lCTTAwODU4JzsKCgkJCWNhc2UgJzg2MCc6CgkJCWNhc2UgJ2NwODYwJzoKCQkJY2FzZSAnY3NpYm04NjAnOgoJCQljYXNlICdpYm04NjAnOgoJCQkJcmV0dXJuICdJQk04NjAnOwoKCQkJY2FzZSAnODYxJzoKCQkJY2FzZSAnY3A4NjEnOgoJCQljYXNlICdjcGlzJzoKCQkJY2FzZSAnY3NpYm04NjEnOgoJCQljYXNlICdpYm04NjEnOgoJCQkJcmV0dXJuICdJQk04NjEnOwoKCQkJY2FzZSAnODYyJzoKCQkJY2FzZSAnY3A4NjInOgoJCQljYXNlICdjc3BjODYybGF0aW5oZWJyZXcnOgoJCQljYXNlICdpYm04NjInOgoJCQkJcmV0dXJuICdJQk04NjInOwoKCQkJY2FzZSAnODYzJzoKCQkJY2FzZSAnY3A4NjMnOgoJCQljYXNlICdjc2libTg2Myc6CgkJCWNhc2UgJ2libTg2Myc6CgkJCQlyZXR1cm4gJ0lCTTg2Myc7CgoJCQljYXNlICdjcDg2NCc6CgkJCWNhc2UgJ2NzaWJtODY0JzoKCQkJY2FzZSAnaWJtODY0JzoKCQkJCXJldHVybiAnSUJNODY0JzsKCgkJCWNhc2UgJzg2NSc6CgkJCWNhc2UgJ2NwODY1JzoKCQkJY2FzZSAnY3NpYm04NjUnOgoJCQljYXNlICdpYm04NjUnOgoJCQkJcmV0dXJuICdJQk04NjUnOwoKCQkJY2FzZSAnODY2JzoKCQkJY2FzZSAnY3A4NjYnOgoJCQljYXNlICdjc2libTg2Nic6CgkJCWNhc2UgJ2libTg2Nic6CgkJCQlyZXR1cm4gJ0lCTTg2Nic7CgoJCQljYXNlICdjcDg2OCc6CgkJCWNhc2UgJ2NwYXInOgoJCQljYXNlICdjc2libTg2OCc6CgkJCWNhc2UgJ2libTg2OCc6CgkJCQlyZXR1cm4gJ0lCTTg2OCc7CgoJCQljYXNlICc4NjknOgoJCQljYXNlICdjcDg2OSc6CgkJCWNhc2UgJ2NwZ3InOgoJCQljYXNlICdjc2libTg2OSc6CgkJCWNhc2UgJ2libTg2OSc6CgkJCQlyZXR1cm4gJ0lCTTg2OSc7CgoJCQljYXNlICdjcDg3MCc6CgkJCWNhc2UgJ2NzaWJtODcwJzoKCQkJY2FzZSAnZWJjZGljY3Byb2VjZSc6CgkJCWNhc2UgJ2ViY2RpY2NweXUnOgoJCQljYXNlICdpYm04NzAnOgoJCQkJcmV0dXJuICdJQk04NzAnOwoKCQkJY2FzZSAnY3A4NzEnOgoJCQljYXNlICdjc2libTg3MSc6CgkJCWNhc2UgJ2ViY2RpY2NwaXMnOgoJCQljYXNlICdpYm04NzEnOgoJCQkJcmV0dXJuICdJQk04NzEnOwoKCQkJY2FzZSAnY3A4ODAnOgoJCQljYXNlICdjc2libTg4MCc6CgkJCWNhc2UgJ2ViY2RpY2N5cmlsbGljJzoKCQkJY2FzZSAnaWJtODgwJzoKCQkJCXJldHVybiAnSUJNODgwJzsKCgkJCWNhc2UgJ2NwODkxJzoKCQkJY2FzZSAnY3NpYm04OTEnOgoJCQljYXNlICdpYm04OTEnOgoJCQkJcmV0dXJuICdJQk04OTEnOwoKCQkJY2FzZSAnY3A5MDMnOgoJCQljYXNlICdjc2libTkwMyc6CgkJCWNhc2UgJ2libTkwMyc6CgkJCQlyZXR1cm4gJ0lCTTkwMyc7CgoJCQljYXNlICc5MDQnOgoJCQljYXNlICdjcDkwNCc6CgkJCWNhc2UgJ2NzaWJibTkwNCc6CgkJCWNhc2UgJ2libTkwNCc6CgkJCQlyZXR1cm4gJ0lCTTkwNCc7CgoJCQljYXNlICdjcDkwNSc6CgkJCWNhc2UgJ2NzaWJtOTA1JzoKCQkJY2FzZSAnZWJjZGljY3B0cic6CgkJCWNhc2UgJ2libTkwNSc6CgkJCQlyZXR1cm4gJ0lCTTkwNSc7CgoJCQljYXNlICdjcDkxOCc6CgkJCWNhc2UgJ2NzaWJtOTE4JzoKCQkJY2FzZSAnZWJjZGljY3BhcjInOgoJCQljYXNlICdpYm05MTgnOgoJCQkJcmV0dXJuICdJQk05MTgnOwoKCQkJY2FzZSAnY2NzaWQ5MjQnOgoJCQljYXNlICdjcDkyNCc6CgkJCWNhc2UgJ2ViY2RpY2xhdGluOWV1cm8nOgoJCQljYXNlICdpYm05MjQnOgoJCQkJcmV0dXJuICdJQk0wMDkyNCc7CgoJCQljYXNlICdjcDEwMjYnOgoJCQljYXNlICdjc2libTEwMjYnOgoJCQljYXNlICdpYm0xMDI2JzoKCQkJCXJldHVybiAnSUJNMTAyNic7CgoJCQljYXNlICdpYm0xMDQ3JzoKCQkJCXJldHVybiAnSUJNMTA0Nyc7CgoJCQljYXNlICdjY3NpZDExNDAnOgoJCQljYXNlICdjcDExNDAnOgoJCQljYXNlICdlYmNkaWN1czM3ZXVybyc6CgkJCWNhc2UgJ2libTExNDAnOgoJCQkJcmV0dXJuICdJQk0wMTE0MCc7CgoJCQljYXNlICdjY3NpZDExNDEnOgoJCQljYXNlICdjcDExNDEnOgoJCQljYXNlICdlYmNkaWNkZTI3M2V1cm8nOgoJCQljYXNlICdpYm0xMTQxJzoKCQkJCXJldHVybiAnSUJNMDExNDEnOwoKCQkJY2FzZSAnY2NzaWQxMTQyJzoKCQkJY2FzZSAnY3AxMTQyJzoKCQkJY2FzZSAnZWJjZGljZGsyNzdldXJvJzoKCQkJY2FzZSAnZWJjZGljbm8yNzdldXJvJzoKCQkJY2FzZSAnaWJtMTE0Mic6CgkJCQlyZXR1cm4gJ0lCTTAxMTQyJzsKCgkJCWNhc2UgJ2Njc2lkMTE0Myc6CgkJCWNhc2UgJ2NwMTE0Myc6CgkJCWNhc2UgJ2ViY2RpY2ZpMjc4ZXVybyc6CgkJCWNhc2UgJ2ViY2RpY3NlMjc4ZXVybyc6CgkJCWNhc2UgJ2libTExNDMnOgoJCQkJcmV0dXJuICdJQk0wMTE0Myc7CgoJCQljYXNlICdjY3NpZDExNDQnOgoJCQljYXNlICdjcDExNDQnOgoJCQljYXNlICdlYmNkaWNpdDI4MGV1cm8nOgoJCQljYXNlICdpYm0xMTQ0JzoKCQkJCXJldHVybiAnSUJNMDExNDQnOwoKCQkJY2FzZSAnY2NzaWQxMTQ1JzoKCQkJY2FzZSAnY3AxMTQ1JzoKCQkJY2FzZSAnZWJjZGljZXMyODRldXJvJzoKCQkJY2FzZSAnaWJtMTE0NSc6CgkJCQlyZXR1cm4gJ0lCTTAxMTQ1JzsKCgkJCWNhc2UgJ2Njc2lkMTE0Nic6CgkJCWNhc2UgJ2NwMTE0Nic6CgkJCWNhc2UgJ2ViY2RpY2diMjg1ZXVybyc6CgkJCWNhc2UgJ2libTExNDYnOgoJCQkJcmV0dXJuICdJQk0wMTE0Nic7CgoJCQljYXNlICdjY3NpZDExNDcnOgoJCQljYXNlICdjcDExNDcnOgoJCQljYXNlICdlYmNkaWNmcjI5N2V1cm8nOgoJCQljYXNlICdpYm0xMTQ3JzoKCQkJCXJldHVybiAnSUJNMDExNDcnOwoKCQkJY2FzZSAnY2NzaWQxMTQ4JzoKCQkJY2FzZSAnY3AxMTQ4JzoKCQkJY2FzZSAnZWJjZGljaW50ZXJuYXRpb25hbDUwMGV1cm8nOgoJCQljYXNlICdpYm0xMTQ4JzoKCQkJCXJldHVybiAnSUJNMDExNDgnOwoKCQkJY2FzZSAnY2NzaWQxMTQ5JzoKCQkJY2FzZSAnY3AxMTQ5JzoKCQkJY2FzZSAnZWJjZGljaXM4NzFldXJvJzoKCQkJY2FzZSAnaWJtMTE0OSc6CgkJCQlyZXR1cm4gJ0lCTTAxMTQ5JzsKCgkJCWNhc2UgJ2NzaXNvMTQzaWVjcDI3MSc6CgkJCWNhc2UgJ2llY3AyNzEnOgoJCQljYXNlICdpc29pcjE0Myc6CgkJCQlyZXR1cm4gJ0lFQ19QMjctMSc7CgoJCQljYXNlICdjc2lzbzQ5aW5pcyc6CgkJCWNhc2UgJ2luaXMnOgoJCQljYXNlICdpc29pcjQ5JzoKCQkJCXJldHVybiAnSU5JUyc7CgoJCQljYXNlICdjc2lzbzUwaW5pczgnOgoJCQljYXNlICdpbmlzOCc6CgkJCWNhc2UgJ2lzb2lyNTAnOgoJCQkJcmV0dXJuICdJTklTLTgnOwoKCQkJY2FzZSAnY3Npc281MWluaXNjeXJpbGxpYyc6CgkJCWNhc2UgJ2luaXNjeXJpbGxpYyc6CgkJCWNhc2UgJ2lzb2lyNTEnOgoJCQkJcmV0dXJuICdJTklTLWN5cmlsbGljJzsKCgkJCWNhc2UgJ2NzaW52YXJpYW50JzoKCQkJY2FzZSAnaW52YXJpYW50JzoKCQkJCXJldHVybiAnSU5WQVJJQU5UJzsKCgkJCWNhc2UgJ2lzbzIwMjJjbic6CgkJCQlyZXR1cm4gJ0lTTy0yMDIyLUNOJzsKCgkJCWNhc2UgJ2lzbzIwMjJjbmV4dCc6CgkJCQlyZXR1cm4gJ0lTTy0yMDIyLUNOLUVYVCc7CgoJCQljYXNlICdjc2lzbzIwMjJqcCc6CgkJCWNhc2UgJ2lzbzIwMjJqcCc6CgkJCQlyZXR1cm4gJ0lTTy0yMDIyLUpQJzsKCgkJCWNhc2UgJ2NzaXNvMjAyMmpwMic6CgkJCWNhc2UgJ2lzbzIwMjJqcDInOgoJCQkJcmV0dXJuICdJU08tMjAyMi1KUC0yJzsKCgkJCWNhc2UgJ2NzaXNvMjAyMmtyJzoKCQkJY2FzZSAnaXNvMjAyMmtyJzoKCQkJCXJldHVybiAnSVNPLTIwMjItS1InOwoKCQkJY2FzZSAnY3N3aW5kb3dzMzBsYXRpbjEnOgoJCQljYXNlICdpc284ODU5MXdpbmRvd3MzMGxhdGluMSc6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTEtV2luZG93cy0zLjAtTGF0aW4tMSc7CgoJCQljYXNlICdjc3dpbmRvd3MzMWxhdGluMSc6CgkJCWNhc2UgJ2lzbzg4NTkxd2luZG93czMxbGF0aW4xJzoKCQkJCXJldHVybiAnSVNPLTg4NTktMS1XaW5kb3dzLTMuMS1MYXRpbi0xJzsKCgkJCWNhc2UgJ2NzaXNvbGF0aW4yJzoKCQkJY2FzZSAnaXNvODg1OTInOgoJCQljYXNlICdpc284ODU5MjE5ODcnOgoJCQljYXNlICdpc29pcjEwMSc6CgkJCWNhc2UgJ2wyJzoKCQkJY2FzZSAnbGF0aW4yJzoKCQkJCXJldHVybiAnSVNPLTg4NTktMic7CgoJCQljYXNlICdjc3dpbmRvd3MzMWxhdGluMic6CgkJCWNhc2UgJ2lzbzg4NTkyd2luZG93c2xhdGluMic6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTItV2luZG93cy1MYXRpbi0yJzsKCgkJCWNhc2UgJ2NzaXNvbGF0aW4zJzoKCQkJY2FzZSAnaXNvODg1OTMnOgoJCQljYXNlICdpc284ODU5MzE5ODgnOgoJCQljYXNlICdpc29pcjEwOSc6CgkJCWNhc2UgJ2wzJzoKCQkJY2FzZSAnbGF0aW4zJzoKCQkJCXJldHVybiAnSVNPLTg4NTktMyc7CgoJCQljYXNlICdjc2lzb2xhdGluNCc6CgkJCWNhc2UgJ2lzbzg4NTk0JzoKCQkJY2FzZSAnaXNvODg1OTQxOTg4JzoKCQkJY2FzZSAnaXNvaXIxMTAnOgoJCQljYXNlICdsNCc6CgkJCWNhc2UgJ2xhdGluNCc6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTQnOwoKCQkJY2FzZSAnY3Npc29sYXRpbmN5cmlsbGljJzoKCQkJY2FzZSAnY3lyaWxsaWMnOgoJCQljYXNlICdpc284ODU5NSc6CgkJCWNhc2UgJ2lzbzg4NTk1MTk4OCc6CgkJCWNhc2UgJ2lzb2lyMTQ0JzoKCQkJCXJldHVybiAnSVNPLTg4NTktNSc7CgoJCQljYXNlICdhcmFiaWMnOgoJCQljYXNlICdhc21vNzA4JzoKCQkJY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6CgkJCWNhc2UgJ2VjbWExMTQnOgoJCQljYXNlICdpc284ODU5Nic6CgkJCWNhc2UgJ2lzbzg4NTk2MTk4Nyc6CgkJCWNhc2UgJ2lzb2lyMTI3JzoKCQkJCXJldHVybiAnSVNPLTg4NTktNic7CgoJCQljYXNlICdjc2lzbzg4NTk2ZSc6CgkJCWNhc2UgJ2lzbzg4NTk2ZSc6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTYtRSc7CgoJCQljYXNlICdjc2lzbzg4NTk2aSc6CgkJCWNhc2UgJ2lzbzg4NTk2aSc6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTYtSSc7CgoJCQljYXNlICdjc2lzb2xhdGluZ3JlZWsnOgoJCQljYXNlICdlY21hMTE4JzoKCQkJY2FzZSAnZWxvdDkyOCc6CgkJCWNhc2UgJ2dyZWVrJzoKCQkJY2FzZSAnZ3JlZWs4JzoKCQkJY2FzZSAnaXNvODg1OTcnOgoJCQljYXNlICdpc284ODU5NzE5ODcnOgoJCQljYXNlICdpc29pcjEyNic6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTcnOwoKCQkJY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6CgkJCWNhc2UgJ2hlYnJldyc6CgkJCWNhc2UgJ2lzbzg4NTk4JzoKCQkJY2FzZSAnaXNvODg1OTgxOTg4JzoKCQkJY2FzZSAnaXNvaXIxMzgnOgoJCQkJcmV0dXJuICdJU08tODg1OS04JzsKCgkJCWNhc2UgJ2NzaXNvODg1OThlJzoKCQkJY2FzZSAnaXNvODg1OThlJzoKCQkJCXJldHVybiAnSVNPLTg4NTktOC1FJzsKCgkJCWNhc2UgJ2NzaXNvODg1OThpJzoKCQkJY2FzZSAnaXNvODg1OThpJzoKCQkJCXJldHVybiAnSVNPLTg4NTktOC1JJzsKCgkJCWNhc2UgJ2Nzd2luZG93czMxbGF0aW41JzoKCQkJY2FzZSAnaXNvODg1OTl3aW5kb3dzbGF0aW41JzoKCQkJCXJldHVybiAnSVNPLTg4NTktOS1XaW5kb3dzLUxhdGluLTUnOwoKCQkJY2FzZSAnY3Npc29sYXRpbjYnOgoJCQljYXNlICdpc284ODU5MTAnOgoJCQljYXNlICdpc284ODU5MTAxOTkyJzoKCQkJY2FzZSAnaXNvaXIxNTcnOgoJCQljYXNlICdsNic6CgkJCWNhc2UgJ2xhdGluNic6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTEwJzsKCgkJCWNhc2UgJ2lzbzg4NTkxMyc6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTEzJzsKCgkJCWNhc2UgJ2lzbzg4NTkxNCc6CgkJCWNhc2UgJ2lzbzg4NTkxNDE5OTgnOgoJCQljYXNlICdpc29jZWx0aWMnOgoJCQljYXNlICdpc29pcjE5OSc6CgkJCWNhc2UgJ2w4JzoKCQkJY2FzZSAnbGF0aW44JzoKCQkJCXJldHVybiAnSVNPLTg4NTktMTQnOwoKCQkJY2FzZSAnaXNvODg1OTE1JzoKCQkJY2FzZSAnbGF0aW45JzoKCQkJCXJldHVybiAnSVNPLTg4NTktMTUnOwoKCQkJY2FzZSAnaXNvODg1OTE2JzoKCQkJY2FzZSAnaXNvODg1OTE2MjAwMSc6CgkJCWNhc2UgJ2lzb2lyMjI2JzoKCQkJY2FzZSAnbDEwJzoKCQkJY2FzZSAnbGF0aW4xMCc6CgkJCQlyZXR1cm4gJ0lTTy04ODU5LTE2JzsKCgkJCWNhc2UgJ2lzbzEwNjQ2ajEnOgoJCQkJcmV0dXJuICdJU08tMTA2NDYtSi0xJzsKCgkJCWNhc2UgJ2NzdW5pY29kZSc6CgkJCWNhc2UgJ2lzbzEwNjQ2dWNzMic6CgkJCQlyZXR1cm4gJ0lTTy0xMDY0Ni1VQ1MtMic7CgoJCQljYXNlICdjc3VjczQnOgoJCQljYXNlICdpc28xMDY0NnVjczQnOgoJCQkJcmV0dXJuICdJU08tMTA2NDYtVUNTLTQnOwoKCQkJY2FzZSAnY3N1bmljb2RlYXNjaWknOgoJCQljYXNlICdpc28xMDY0NnVjc2Jhc2ljJzoKCQkJCXJldHVybiAnSVNPLTEwNjQ2LVVDUy1CYXNpYyc7CgoJCQljYXNlICdjc3VuaWNvZGVsYXRpbjEnOgoJCQljYXNlICdpc28xMDY0Nic6CgkJCWNhc2UgJ2lzbzEwNjQ2dW5pY29kZWxhdGluMSc6CgkJCQlyZXR1cm4gJ0lTTy0xMDY0Ni1Vbmljb2RlLUxhdGluMSc7CgoJCQljYXNlICdjc2lzbzEwNjQ2dXRmMSc6CgkJCWNhc2UgJ2lzbzEwNjQ2dXRmMSc6CgkJCQlyZXR1cm4gJ0lTTy0xMDY0Ni1VVEYtMSc7CgoJCQljYXNlICdjc2lzbzExNTQ4MSc6CgkJCWNhc2UgJ2lzbzExNTQ4MSc6CgkJCWNhc2UgJ2lzb3RyMTE1NDgxJzoKCQkJCXJldHVybiAnSVNPLTExNTQ4LTEnOwoKCQkJY2FzZSAnY3Npc285MCc6CgkJCWNhc2UgJ2lzb2lyOTAnOgoJCQkJcmV0dXJuICdpc28taXItOTAnOwoKCQkJY2FzZSAnY3N1bmljb2RlaWJtMTI2MSc6CgkJCWNhc2UgJ2lzb3VuaWNvZGVpYm0xMjYxJzoKCQkJCXJldHVybiAnSVNPLVVuaWNvZGUtSUJNLTEyNjEnOwoKCQkJY2FzZSAnY3N1bmljb2RlaWJtMTI2NCc6CgkJCWNhc2UgJ2lzb3VuaWNvZGVpYm0xMjY0JzoKCQkJCXJldHVybiAnSVNPLVVuaWNvZGUtSUJNLTEyNjQnOwoKCQkJY2FzZSAnY3N1bmljb2RlaWJtMTI2NSc6CgkJCWNhc2UgJ2lzb3VuaWNvZGVpYm0xMjY1JzoKCQkJCXJldHVybiAnSVNPLVVuaWNvZGUtSUJNLTEyNjUnOwoKCQkJY2FzZSAnY3N1bmljb2RlaWJtMTI2OCc6CgkJCWNhc2UgJ2lzb3VuaWNvZGVpYm0xMjY4JzoKCQkJCXJldHVybiAnSVNPLVVuaWNvZGUtSUJNLTEyNjgnOwoKCQkJY2FzZSAnY3N1bmljb2RlaWJtMTI3Nic6CgkJCWNhc2UgJ2lzb3VuaWNvZGVpYm0xMjc2JzoKCQkJCXJldHVybiAnSVNPLVVuaWNvZGUtSUJNLTEyNzYnOwoKCQkJY2FzZSAnY3Npc282NDZiYXNpYzE5ODMnOgoJCQljYXNlICdpc282NDZiYXNpYzE5ODMnOgoJCQljYXNlICdyZWYnOgoJCQkJcmV0dXJuICdJU09fNjQ2LmJhc2ljOjE5ODMnOwoKCQkJY2FzZSAnY3Npc28yaW50bHJlZnZlcnNpb24nOgoJCQljYXNlICdpcnYnOgoJCQljYXNlICdpc282NDZpcnYxOTgzJzoKCQkJY2FzZSAnaXNvaXIyJzoKCQkJCXJldHVybiAnSVNPXzY0Ni5pcnY6MTk4Myc7CgoJCQljYXNlICdjc2lzbzIwMzMnOgoJCQljYXNlICdlMTNiJzoKCQkJY2FzZSAnaXNvMjAzMzE5ODMnOgoJCQljYXNlICdpc29pcjk4JzoKCQkJCXJldHVybiAnSVNPXzIwMzMtMTk4Myc7CgoJCQljYXNlICdjc2lzbzU0MjdjeXJpbGxpYyc6CgkJCWNhc2UgJ2lzbzU0MjcnOgoJCQljYXNlICdpc29pcjM3JzoKCQkJCXJldHVybiAnSVNPXzU0MjcnOwoKCQkJY2FzZSAnaXNvNTQyN2N5cmlsbGljMTk4MSc6CgkJCWNhc2UgJ2lzbzU0MjcxOTgxJzoKCQkJY2FzZSAnaXNvaXI1NCc6CgkJCQlyZXR1cm4gJ0lTT181NDI3OjE5ODEnOwoKCQkJY2FzZSAnY3Npc281NDI4Z3JlZWsnOgoJCQljYXNlICdpc281NDI4MTk4MCc6CgkJCWNhc2UgJ2lzb2lyNTUnOgoJCQkJcmV0dXJuICdJU09fNTQyODoxOTgwJzsKCgkJCWNhc2UgJ2NzaXNvNjkzN2FkZCc6CgkJCWNhc2UgJ2lzbzY5MzcyMjUnOgoJCQljYXNlICdpc29pcjE1Mic6CgkJCQlyZXR1cm4gJ0lTT182OTM3LTItMjUnOwoKCQkJY2FzZSAnY3Npc290ZXh0Y29tbSc6CgkJCWNhc2UgJ2lzbzY5MzcyYWRkJzoKCQkJY2FzZSAnaXNvaXIxNDInOgoJCQkJcmV0dXJuICdJU09fNjkzNy0yLWFkZCc7CgoJCQljYXNlICdjc2lzbzg4NTlzdXBwJzoKCQkJY2FzZSAnaXNvODg1OXN1cHAnOgoJCQljYXNlICdpc29pcjE1NCc6CgkJCWNhc2UgJ2xhdGluMTI1JzoKCQkJCXJldHVybiAnSVNPXzg4NTktc3VwcCc7CgoJCQljYXNlICdjc2lzbzEwMzY3Ym94JzoKCQkJY2FzZSAnaXNvMTAzNjdib3gnOgoJCQljYXNlICdpc29pcjE1NSc6CgkJCQlyZXR1cm4gJ0lTT18xMDM2Ny1ib3gnOwoKCQkJY2FzZSAnY3Npc28xNWl0YWxpYW4nOgoJCQljYXNlICdpc282NDZpdCc6CgkJCWNhc2UgJ2lzb2lyMTUnOgoJCQljYXNlICdpdCc6CgkJCQlyZXR1cm4gJ0lUJzsKCgkJCWNhc2UgJ2NzaXNvMTNqaXNjNjIyMGpwJzoKCQkJY2FzZSAnaXNvaXIxMyc6CgkJCWNhc2UgJ2ppc2M2MjIwMTk2OSc6CgkJCWNhc2UgJ2ppc2M2MjIwMTk2OWpwJzoKCQkJY2FzZSAna2F0YWthbmEnOgoJCQljYXNlICd4MjAxNyc6CgkJCQlyZXR1cm4gJ0pJU19DNjIyMC0xOTY5LWpwJzsKCgkJCWNhc2UgJ2NzaXNvMTRqaXNjNjIyMHJvJzoKCQkJY2FzZSAnaXNvNjQ2anAnOgoJCQljYXNlICdpc29pcjE0JzoKCQkJY2FzZSAnamlzYzYyMjAxOTY5cm8nOgoJCQljYXNlICdqcCc6CgkJCQlyZXR1cm4gJ0pJU19DNjIyMC0xOTY5LXJvJzsKCgkJCWNhc2UgJ2NzaXNvNDJqaXNjNjIyNjE5NzgnOgoJCQljYXNlICdpc29pcjQyJzoKCQkJY2FzZSAnamlzYzYyMjYxOTc4JzoKCQkJCXJldHVybiAnSklTX0M2MjI2LTE5NzgnOwoKCQkJY2FzZSAnY3Npc284N2ppc3gyMDgnOgoJCQljYXNlICdpc29pcjg3JzoKCQkJY2FzZSAnamlzYzYyMjYxOTgzJzoKCQkJY2FzZSAnamlzeDIwODE5ODMnOgoJCQljYXNlICd4MjA4JzoKCQkJCXJldHVybiAnSklTX0M2MjI2LTE5ODMnOwoKCQkJY2FzZSAnY3Npc285MWppc2M2MjI5MTk4NGEnOgoJCQljYXNlICdpc29pcjkxJzoKCQkJY2FzZSAnamlzYzYyMjkxOTg0YSc6CgkJCWNhc2UgJ2pwb2NyYSc6CgkJCQlyZXR1cm4gJ0pJU19DNjIyOS0xOTg0LWEnOwoKCQkJY2FzZSAnY3Npc285Mmppc2M2Mjk5MTk4NGInOgoJCQljYXNlICdpc282NDZqcG9jcmInOgoJCQljYXNlICdpc29pcjkyJzoKCQkJY2FzZSAnamlzYzYyMjkxOTg0Yic6CgkJCWNhc2UgJ2pwb2NyYic6CgkJCQlyZXR1cm4gJ0pJU19DNjIyOS0xOTg0LWInOwoKCQkJY2FzZSAnY3Npc285M2ppczYyMjkxOTg0YmFkZCc6CgkJCWNhc2UgJ2lzb2lyOTMnOgoJCQljYXNlICdqaXNjNjIyOTE5ODRiYWRkJzoKCQkJY2FzZSAnanBvY3JiYWRkJzoKCQkJCXJldHVybiAnSklTX0M2MjI5LTE5ODQtYi1hZGQnOwoKCQkJY2FzZSAnY3Npc285NGppczYyMjkxOTg0aGFuZCc6CgkJCWNhc2UgJ2lzb2lyOTQnOgoJCQljYXNlICdqaXNjNjIyOTE5ODRoYW5kJzoKCQkJY2FzZSAnanBvY3JoYW5kJzoKCQkJCXJldHVybiAnSklTX0M2MjI5LTE5ODQtaGFuZCc7CgoJCQljYXNlICdjc2lzbzk1amlzNjIyOTE5ODRoYW5kYWRkJzoKCQkJY2FzZSAnaXNvaXI5NSc6CgkJCWNhc2UgJ2ppc2M2MjI5MTk4NGhhbmRhZGQnOgoJCQljYXNlICdqcG9jcmhhbmRhZGQnOgoJCQkJcmV0dXJuICdKSVNfQzYyMjktMTk4NC1oYW5kLWFkZCc7CgoJCQljYXNlICdjc2lzbzk2amlzYzYyMjkxOTg0a2FuYSc6CgkJCWNhc2UgJ2lzb2lyOTYnOgoJCQljYXNlICdqaXNjNjIyOTE5ODRrYW5hJzoKCQkJCXJldHVybiAnSklTX0M2MjI5LTE5ODQta2FuYSc7CgoJCQljYXNlICdjc2ppc2VuY29kaW5nJzoKCQkJY2FzZSAnamlzZW5jb2RpbmcnOgoJCQkJcmV0dXJuICdKSVNfRW5jb2RpbmcnOwoKCQkJY2FzZSAnY3NoYWxmd2lkdGhrYXRha2FuYSc6CgkJCWNhc2UgJ2ppc3gyMDEnOgoJCQljYXNlICd4MjAxJzoKCQkJCXJldHVybiAnSklTX1gwMjAxJzsKCgkJCWNhc2UgJ2NzaXNvMTU5amlzeDIxMjE5OTAnOgoJCQljYXNlICdpc29pcjE1OSc6CgkJCWNhc2UgJ2ppc3gyMTIxOTkwJzoKCQkJY2FzZSAneDIxMic6CgkJCQlyZXR1cm4gJ0pJU19YMDIxMi0xOTkwJzsKCgkJCWNhc2UgJ2NzaXNvMTQxanVzaWIxMDAyJzoKCQkJY2FzZSAnaXNvNjQ2eXUnOgoJCQljYXNlICdpc29pcjE0MSc6CgkJCWNhc2UgJ2pzJzoKCQkJY2FzZSAnanVzaWIxMDAyJzoKCQkJY2FzZSAneXUnOgoJCQkJcmV0dXJuICdKVVNfSS5CMS4wMDInOwoKCQkJY2FzZSAnY3Npc28xNDdtYWNlZG9uaWFuJzoKCQkJY2FzZSAnaXNvaXIxNDcnOgoJCQljYXNlICdqdXNpYjEwMDNtYWMnOgoJCQljYXNlICdtYWNlZG9uaWFuJzoKCQkJCXJldHVybiAnSlVTX0kuQjEuMDAzLW1hYyc7CgoJCQljYXNlICdjc2lzbzE0NnNlcmJpYW4nOgoJCQljYXNlICdpc29pcjE0Nic6CgkJCWNhc2UgJ2p1c2liMTAwM3NlcmInOgoJCQljYXNlICdzZXJiaWFuJzoKCQkJCXJldHVybiAnSlVTX0kuQjEuMDAzLXNlcmInOwoKCQkJY2FzZSAna29pN3N3aXRjaGVkJzoKCQkJCXJldHVybiAnS09JNy1zd2l0Y2hlZCc7CgoJCQljYXNlICdjc2tvaThyJzoKCQkJY2FzZSAna29pOHInOgoJCQkJcmV0dXJuICdLT0k4LVInOwoKCQkJY2FzZSAna29pOHUnOgoJCQkJcmV0dXJuICdLT0k4LVUnOwoKCQkJY2FzZSAnY3Nrc2M1NjM2JzoKCQkJY2FzZSAnaXNvNjQ2a3InOgoJCQljYXNlICdrc2M1NjM2JzoKCQkJCXJldHVybiAnS1NDNTYzNic7CgoJCQljYXNlICdjc2t6MTA0OCc6CgkJCWNhc2UgJ2t6MTA0OCc6CgkJCWNhc2UgJ3JrMTA0OCc6CgkJCWNhc2UgJ3N0cmsxMDQ4MjAwMic6CgkJCQlyZXR1cm4gJ0taLTEwNDgnOwoKCQkJY2FzZSAnY3Npc28xOWxhdGluZ3JlZWsnOgoJCQljYXNlICdpc29pcjE5JzoKCQkJY2FzZSAnbGF0aW5ncmVlayc6CgkJCQlyZXR1cm4gJ2xhdGluLWdyZWVrJzsKCgkJCWNhc2UgJ2NzaXNvMjdsYXRpbmdyZWVrMSc6CgkJCWNhc2UgJ2lzb2lyMjcnOgoJCQljYXNlICdsYXRpbmdyZWVrMSc6CgkJCQlyZXR1cm4gJ0xhdGluLWdyZWVrLTEnOwoKCQkJY2FzZSAnY3Npc28xNThsYXAnOgoJCQljYXNlICdpc29pcjE1OCc6CgkJCWNhc2UgJ2xhcCc6CgkJCWNhc2UgJ2xhdGlubGFwJzoKCQkJCXJldHVybiAnbGF0aW4tbGFwJzsKCgkJCWNhc2UgJ2NzbWFjaW50b3NoJzoKCQkJY2FzZSAnbWFjJzoKCQkJY2FzZSAnbWFjaW50b3NoJzoKCQkJCXJldHVybiAnbWFjaW50b3NoJzsKCgkJCWNhc2UgJ2NzbWljcm9zb2Z0cHVibGlzaGluZyc6CgkJCWNhc2UgJ21pY3Jvc29mdHB1Ymxpc2hpbmcnOgoJCQkJcmV0dXJuICdNaWNyb3NvZnQtUHVibGlzaGluZyc7CgoJCQljYXNlICdjc21uZW0nOgoJCQljYXNlICdtbmVtJzoKCQkJCXJldHVybiAnTU5FTSc7CgoJCQljYXNlICdjc21uZW1vbmljJzoKCQkJY2FzZSAnbW5lbW9uaWMnOgoJCQkJcmV0dXJuICdNTkVNT05JQyc7CgoJCQljYXNlICdjc2lzbzg2aHVuZ2FyaWFuJzoKCQkJY2FzZSAnaHUnOgoJCQljYXNlICdpc282NDZodSc6CgkJCWNhc2UgJ2lzb2lyODYnOgoJCQljYXNlICdtc3o3Nzk1Myc6CgkJCQlyZXR1cm4gJ01TWl83Nzk1LjMnOwoKCQkJY2FzZSAnY3NuYXRzZGFubyc6CgkJCWNhc2UgJ2lzb2lyOTEnOgoJCQljYXNlICduYXRzZGFubyc6CgkJCQlyZXR1cm4gJ05BVFMtREFOTyc7CgoJCQljYXNlICdjc25hdHNkYW5vYWRkJzoKCQkJY2FzZSAnaXNvaXI5Mic6CgkJCWNhc2UgJ25hdHNkYW5vYWRkJzoKCQkJCXJldHVybiAnTkFUUy1EQU5PLUFERCc7CgoJCQljYXNlICdjc25hdHNzZWZpJzoKCQkJY2FzZSAnaXNvaXI4MSc6CgkJCWNhc2UgJ25hdHNzZWZpJzoKCQkJCXJldHVybiAnTkFUUy1TRUZJJzsKCgkJCWNhc2UgJ2NzbmF0c3NlZmlhZGQnOgoJCQljYXNlICdpc29pcjgyJzoKCQkJY2FzZSAnbmF0c3NlZmlhZGQnOgoJCQkJcmV0dXJuICdOQVRTLVNFRkktQUREJzsKCgkJCWNhc2UgJ2NzaXNvMTUxY3ViYSc6CgkJCWNhc2UgJ2N1YmEnOgoJCQljYXNlICdpc282NDZjdSc6CgkJCWNhc2UgJ2lzb2lyMTUxJzoKCQkJY2FzZSAnbmNuYzEwODEnOgoJCQkJcmV0dXJuICdOQ19OQzAwLTEwOjgxJzsKCgkJCWNhc2UgJ2NzaXNvNjlmcmVuY2gnOgoJCQljYXNlICdmcic6CgkJCWNhc2UgJ2lzbzY0NmZyJzoKCQkJY2FzZSAnaXNvaXI2OSc6CgkJCWNhc2UgJ25mejYyMDEwJzoKCQkJCXJldHVybiAnTkZfWl82Mi0wMTAnOwoKCQkJY2FzZSAnY3Npc28yNWZyZW5jaCc6CgkJCWNhc2UgJ2lzbzY0NmZyMSc6CgkJCWNhc2UgJ2lzb2lyMjUnOgoJCQljYXNlICduZno2MjAxMDE5NzMnOgoJCQkJcmV0dXJuICdORl9aXzYyLTAxMF8oMTk3MyknOwoKCQkJY2FzZSAnY3Npc282MGRhbmlzaG5vcndlZ2lhbic6CgkJCWNhc2UgJ2NzaXNvNjBub3J3ZWdpYW4xJzoKCQkJY2FzZSAnaXNvNjQ2bm8nOgoJCQljYXNlICdpc29pcjYwJzoKCQkJY2FzZSAnbm8nOgoJCQljYXNlICduczQ1NTExJzoKCQkJCXJldHVybiAnTlNfNDU1MS0xJzsKCgkJCWNhc2UgJ2NzaXNvNjFub3J3ZWdpYW4yJzoKCQkJY2FzZSAnaXNvNjQ2bm8yJzoKCQkJY2FzZSAnaXNvaXI2MSc6CgkJCWNhc2UgJ25vMic6CgkJCWNhc2UgJ25zNDU1MTInOgoJCQkJcmV0dXJuICdOU180NTUxLTInOwoKCQkJY2FzZSAnb3NkZWJjZGljZGYzaXJ2JzoKCQkJCXJldHVybiAnT1NEX0VCQ0RJQ19ERjAzX0lSVic7CgoJCQljYXNlICdvc2RlYmNkaWNkZjQxJzoKCQkJCXJldHVybiAnT1NEX0VCQ0RJQ19ERjA0XzEnOwoKCQkJY2FzZSAnb3NkZWJjZGljZGY0MTUnOgoJCQkJcmV0dXJuICdPU0RfRUJDRElDX0RGMDRfMTUnOwoKCQkJY2FzZSAnY3NwYzhkYW5pc2hub3J3ZWdpYW4nOgoJCQljYXNlICdwYzhkYW5pc2hub3J3ZWdpYW4nOgoJCQkJcmV0dXJuICdQQzgtRGFuaXNoLU5vcndlZ2lhbic7CgoJCQljYXNlICdjc3BjOHR1cmtpc2gnOgoJCQljYXNlICdwYzh0dXJraXNoJzoKCQkJCXJldHVybiAnUEM4LVR1cmtpc2gnOwoKCQkJY2FzZSAnY3Npc28xNnBvcnR1Z3Vlc2UnOgoJCQljYXNlICdpc282NDZwdCc6CgkJCWNhc2UgJ2lzb2lyMTYnOgoJCQljYXNlICdwdCc6CgkJCQlyZXR1cm4gJ1BUJzsKCgkJCWNhc2UgJ2NzaXNvODRwb3J0dWd1ZXNlMic6CgkJCWNhc2UgJ2lzbzY0NnB0Mic6CgkJCWNhc2UgJ2lzb2lyODQnOgoJCQljYXNlICdwdDInOgoJCQkJcmV0dXJuICdQVDInOwoKCQkJY2FzZSAnY3AxNTQnOgoJCQljYXNlICdjc3B0Y3AxNTQnOgoJCQljYXNlICdjeXJpbGxpY2FzaWFuJzoKCQkJY2FzZSAncHQxNTQnOgoJCQljYXNlICdwdGNwMTU0JzoKCQkJCXJldHVybiAnUFRDUDE1NCc7CgoJCQljYXNlICdzY3N1JzoKCQkJCXJldHVybiAnU0NTVSc7CgoJCQljYXNlICdjc2lzbzEwc3dlZGlzaCc6CgkJCWNhc2UgJ2ZpJzoKCQkJY2FzZSAnaXNvNjQ2ZmknOgoJCQljYXNlICdpc282NDZzZSc6CgkJCWNhc2UgJ2lzb2lyMTAnOgoJCQljYXNlICdzZSc6CgkJCWNhc2UgJ3Nlbjg1MDIwMGInOgoJCQkJcmV0dXJuICdTRU5fODUwMjAwX0InOwoKCQkJY2FzZSAnY3Npc28xMXN3ZWRpc2hmb3JuYW1lcyc6CgkJCWNhc2UgJ2lzbzY0NnNlMic6CgkJCWNhc2UgJ2lzb2lyMTEnOgoJCQljYXNlICdzZTInOgoJCQljYXNlICdzZW44NTAyMDBjJzoKCQkJCXJldHVybiAnU0VOXzg1MDIwMF9DJzsKCgkJCWNhc2UgJ2NzaXNvMTAydDYxN2JpdCc6CgkJCWNhc2UgJ2lzb2lyMTAyJzoKCQkJY2FzZSAndDYxN2JpdCc6CgkJCQlyZXR1cm4gJ1QuNjEtN2JpdCc7CgoJCQljYXNlICdjc2lzbzEwM3Q2MThiaXQnOgoJCQljYXNlICdpc29pcjEwMyc6CgkJCWNhc2UgJ3Q2MSc6CgkJCWNhc2UgJ3Q2MThiaXQnOgoJCQkJcmV0dXJuICdULjYxLThiaXQnOwoKCQkJY2FzZSAnY3Npc28xMjh0MTAxZzInOgoJCQljYXNlICdpc29pcjEyOCc6CgkJCWNhc2UgJ3QxMDFnMic6CgkJCQlyZXR1cm4gJ1QuMTAxLUcyJzsKCgkJCWNhc2UgJ2NzdHNjaWknOgoJCQljYXNlICd0c2NpaSc6CgkJCQlyZXR1cm4gJ1RTQ0lJJzsKCgkJCWNhc2UgJ2NzdW5pY29kZTExJzoKCQkJY2FzZSAndW5pY29kZTExJzoKCQkJCXJldHVybiAnVU5JQ09ERS0xLTEnOwoKCQkJY2FzZSAnY3N1bmljb2RlMTF1dGY3JzoKCQkJY2FzZSAndW5pY29kZTExdXRmNyc6CgkJCQlyZXR1cm4gJ1VOSUNPREUtMS0xLVVURi03JzsKCgkJCWNhc2UgJ2NzdW5rbm93bjhiaXQnOgoJCQljYXNlICd1bmtub3duOGJpdCc6CgkJCQlyZXR1cm4gJ1VOS05PV04tOEJJVCc7CgoJCQljYXNlICdhbnNpeDM0MTk2OCc6CgkJCWNhc2UgJ2Fuc2l4MzQxOTg2JzoKCQkJY2FzZSAnYXNjaWknOgoJCQljYXNlICdjcDM2Nyc6CgkJCWNhc2UgJ2NzYXNjaWknOgoJCQljYXNlICdpYm0zNjcnOgoJCQljYXNlICdpc282NDZpcnYxOTkxJzoKCQkJY2FzZSAnaXNvNjQ2dXMnOgoJCQljYXNlICdpc29pcjYnOgoJCQljYXNlICd1cyc6CgkJCWNhc2UgJ3VzYXNjaWknOgoJCQkJcmV0dXJuICdVUy1BU0NJSSc7CgoJCQljYXNlICdjc3VzZGsnOgoJCQljYXNlICd1c2RrJzoKCQkJCXJldHVybiAndXMtZGsnOwoKCQkJY2FzZSAndXRmNyc6CgkJCQlyZXR1cm4gJ1VURi03JzsKCgkJCWNhc2UgJ3V0ZjgnOgoJCQkJcmV0dXJuICdVVEYtOCc7CgoJCQljYXNlICd1dGYxNic6CgkJCQlyZXR1cm4gJ1VURi0xNic7CgoJCQljYXNlICd1dGYxNmJlJzoKCQkJCXJldHVybiAnVVRGLTE2QkUnOwoKCQkJY2FzZSAndXRmMTZsZSc6CgkJCQlyZXR1cm4gJ1VURi0xNkxFJzsKCgkJCWNhc2UgJ3V0ZjMyJzoKCQkJCXJldHVybiAnVVRGLTMyJzsKCgkJCWNhc2UgJ3V0ZjMyYmUnOgoJCQkJcmV0dXJuICdVVEYtMzJCRSc7CgoJCQljYXNlICd1dGYzMmxlJzoKCQkJCXJldHVybiAnVVRGLTMyTEUnOwoKCQkJY2FzZSAnY3N2ZW50dXJhaW50ZXJuYXRpb25hbCc6CgkJCWNhc2UgJ3ZlbnR1cmFpbnRlcm5hdGlvbmFsJzoKCQkJCXJldHVybiAnVmVudHVyYS1JbnRlcm5hdGlvbmFsJzsKCgkJCWNhc2UgJ2NzdmVudHVyYW1hdGgnOgoJCQljYXNlICd2ZW50dXJhbWF0aCc6CgkJCQlyZXR1cm4gJ1ZlbnR1cmEtTWF0aCc7CgoJCQljYXNlICdjc3ZlbnR1cmF1cyc6CgkJCWNhc2UgJ3ZlbnR1cmF1cyc6CgkJCQlyZXR1cm4gJ1ZlbnR1cmEtVVMnOwoKCQkJY2FzZSAnY3Npc283MHZpZGVvdGV4c3VwcDEnOgoJCQljYXNlICdpc29pcjcwJzoKCQkJY2FzZSAndmlkZW90ZXhzdXBwbCc6CgkJCQlyZXR1cm4gJ3ZpZGVvdGV4LXN1cHBsJzsKCgkJCWNhc2UgJ2Nzdmlxcic6CgkJCWNhc2UgJ3ZpcXInOgoJCQkJcmV0dXJuICdWSVFSJzsKCgkJCWNhc2UgJ2NzdmlzY2lpJzoKCQkJY2FzZSAndmlzY2lpJzoKCQkJCXJldHVybiAnVklTQ0lJJzsKCgkJCWNhc2UgJ2Nzc2hpZnRqaXMnOgoJCQljYXNlICdjc3dpbmRvd3MzMWonOgoJCQljYXNlICdtc2thbmppJzoKCQkJY2FzZSAnc2hpZnRqaXMnOgoJCQljYXNlICd3aW5kb3dzMzFqJzoKCQkJCXJldHVybiAnV2luZG93cy0zMUonOwoKCQkJY2FzZSAnaXNvODg1OTExJzoKCQkJY2FzZSAndGlzNjIwJzoKCQkJCXJldHVybiAnd2luZG93cy04NzQnOwoKCQkJY2FzZSAnY3NldWNrcic6CgkJCWNhc2UgJ2Nza3NjNTYwMTE5ODcnOgoJCQljYXNlICdldWNrcic6CgkJCWNhc2UgJ2lzb2lyMTQ5JzoKCQkJY2FzZSAna29yZWFuJzoKCQkJY2FzZSAna3NjNTYwMSc6CgkJCWNhc2UgJ2tzYzU2MDExOTg3JzoKCQkJY2FzZSAna3NjNTYwMTE5ODknOgoJCQljYXNlICd3aW5kb3dzOTQ5JzoKCQkJCXJldHVybiAnd2luZG93cy05NDknOwoKCQkJY2FzZSAnd2luZG93czEyNTAnOgoJCQkJcmV0dXJuICd3aW5kb3dzLTEyNTAnOwoKCQkJY2FzZSAnd2luZG93czEyNTEnOgoJCQkJcmV0dXJuICd3aW5kb3dzLTEyNTEnOwoKCQkJY2FzZSAnY3A4MTknOgoJCQljYXNlICdjc2lzb2xhdGluMSc6CgkJCWNhc2UgJ2libTgxOSc6CgkJCWNhc2UgJ2lzbzg4NTkxJzoKCQkJY2FzZSAnaXNvODg1OTExOTg3JzoKCQkJY2FzZSAnaXNvaXIxMDAnOgoJCQljYXNlICdsMSc6CgkJCWNhc2UgJ2xhdGluMSc6CgkJCWNhc2UgJ3dpbmRvd3MxMjUyJzoKCQkJCXJldHVybiAnd2luZG93cy0xMjUyJzsKCgkJCWNhc2UgJ3dpbmRvd3MxMjUzJzoKCQkJCXJldHVybiAnd2luZG93cy0xMjUzJzsKCgkJCWNhc2UgJ2NzaXNvbGF0aW41JzoKCQkJY2FzZSAnaXNvODg1OTknOgoJCQljYXNlICdpc284ODU5OTE5ODknOgoJCQljYXNlICdpc29pcjE0OCc6CgkJCWNhc2UgJ2w1JzoKCQkJY2FzZSAnbGF0aW41JzoKCQkJY2FzZSAnd2luZG93czEyNTQnOgoJCQkJcmV0dXJuICd3aW5kb3dzLTEyNTQnOwoKCQkJY2FzZSAnd2luZG93czEyNTUnOgoJCQkJcmV0dXJuICd3aW5kb3dzLTEyNTUnOwoKCQkJY2FzZSAnd2luZG93czEyNTYnOgoJCQkJcmV0dXJuICd3aW5kb3dzLTEyNTYnOwoKCQkJY2FzZSAnd2luZG93czEyNTcnOgoJCQkJcmV0dXJuICd3aW5kb3dzLTEyNTcnOwoKCQkJY2FzZSAnd2luZG93czEyNTgnOgoJCQkJcmV0dXJuICd3aW5kb3dzLTEyNTgnOwoKCQkJZGVmYXVsdDoKCQkJCXJldHVybiAkY2hhcnNldDsKCQl9Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfY3VybF92ZXJzaW9uKCkKCXsKCQlpZiAoaXNfYXJyYXkoJGN1cmwgPSBjdXJsX3ZlcnNpb24oKSkpCgkJewoJCQkkY3VybCA9ICRjdXJsWyd2ZXJzaW9uJ107CgkJfQoJCWVsc2VpZiAoc3Vic3RyKCRjdXJsLCAwLCA1KSA9PT0gJ2N1cmwvJykKCQl7CgkJCSRjdXJsID0gc3Vic3RyKCRjdXJsLCA1LCBzdHJjc3BuKCRjdXJsLCAiXHgwOVx4MEFceDBCXHgwQ1x4MEQiLCA1KSk7CgkJfQoJCWVsc2VpZiAoc3Vic3RyKCRjdXJsLCAwLCA4KSA9PT0gJ2xpYmN1cmwvJykKCQl7CgkJCSRjdXJsID0gc3Vic3RyKCRjdXJsLCA4LCBzdHJjc3BuKCRjdXJsLCAiXHgwOVx4MEFceDBCXHgwQ1x4MEQiLCA4KSk7CgkJfQoJCWVsc2UKCQl7CgkJCSRjdXJsID0gMDsKCQl9CgkJcmV0dXJuICRjdXJsOwoJfQoKCS8qKgoJICogU3RyaXAgSFRNTCBjb21tZW50cwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgRGF0YSB0byBzdHJpcCBjb21tZW50cyBmcm9tCgkgKiBAcmV0dXJuIHN0cmluZyBDb21tZW50IHN0cmlwcGVkIHN0cmluZwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0cmlwX2NvbW1lbnRzKCRkYXRhKQoJewoJCSRvdXRwdXQgPSAnJzsKCQl3aGlsZSAoKCRzdGFydCA9IHN0cnBvcygkZGF0YSwgJzwhLS0nKSkgIT09IGZhbHNlKQoJCXsKCQkJJG91dHB1dCAuPSBzdWJzdHIoJGRhdGEsIDAsICRzdGFydCk7CgkJCWlmICgoJGVuZCA9IHN0cnBvcygkZGF0YSwgJy0tPicsICRzdGFydCkpICE9PSBmYWxzZSkKCQkJewoJCQkJJGRhdGEgPSBzdWJzdHJfcmVwbGFjZSgkZGF0YSwgJycsIDAsICRlbmQgKyAzKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRkYXRhID0gJyc7CgkJCX0KCQl9CgkJcmV0dXJuICRvdXRwdXQgLiAkZGF0YTsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlX2RhdGUoJGR0KQoJewoJCSRwYXJzZXIgPSBTaW1wbGVQaWVfUGFyc2VfRGF0ZTo6Z2V0KCk7CgkJcmV0dXJuICRwYXJzZXItPnBhcnNlKCRkdCk7Cgl9CgoJLyoqCgkgKiBEZWNvZGUgSFRNTCBlbnRpdGllcwoJICoKCSAqIEBkZXByZWNhdGVkIFVzZSBET01Eb2N1bWVudCBpbnN0ZWFkCgkgKiBAcGFyYW0gc3RyaW5nICRkYXRhIElucHV0IGRhdGEKCSAqIEByZXR1cm4gc3RyaW5nIE91dHB1dCBkYXRhCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW50aXRpZXNfZGVjb2RlKCRkYXRhKQoJewoJCSRkZWNvZGVyID0gbmV3IFNpbXBsZVBpZV9EZWNvZGVfSFRNTF9FbnRpdGllcygkZGF0YSk7CgkJcmV0dXJuICRkZWNvZGVyLT5wYXJzZSgpOwoJfQoKCS8qKgoJICogUmVtb3ZlIFJGQzgyMiBjb21tZW50cwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgRGF0YSB0byBzdHJpcCBjb21tZW50cyBmcm9tCgkgKiBAcmV0dXJuIHN0cmluZyBDb21tZW50IHN0cmlwcGVkIHN0cmluZwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVuY29tbWVudF9yZmM4MjIoJHN0cmluZykKCXsKCQkkc3RyaW5nID0gKHN0cmluZykgJHN0cmluZzsKCQkkcG9zaXRpb24gPSAwOwoJCSRsZW5ndGggPSBzdHJsZW4oJHN0cmluZyk7CgkJJGRlcHRoID0gMDsKCgkJJG91dHB1dCA9ICcnOwoKCQl3aGlsZSAoJHBvc2l0aW9uIDwgJGxlbmd0aCAmJiAoJHBvcyA9IHN0cnBvcygkc3RyaW5nLCAnKCcsICRwb3NpdGlvbikpICE9PSBmYWxzZSkKCQl7CgkJCSRvdXRwdXQgLj0gc3Vic3RyKCRzdHJpbmcsICRwb3NpdGlvbiwgJHBvcyAtICRwb3NpdGlvbik7CgkJCSRwb3NpdGlvbiA9ICRwb3MgKyAxOwoJCQlpZiAoJHN0cmluZ1skcG9zIC0gMV0gIT09ICdcXCcpCgkJCXsKCQkJCSRkZXB0aCsrOwoJCQkJd2hpbGUgKCRkZXB0aCAmJiAkcG9zaXRpb24gPCAkbGVuZ3RoKQoJCQkJewoJCQkJCSRwb3NpdGlvbiArPSBzdHJjc3BuKCRzdHJpbmcsICcoKScsICRwb3NpdGlvbik7CgkJCQkJaWYgKCRzdHJpbmdbJHBvc2l0aW9uIC0gMV0gPT09ICdcXCcpCgkJCQkJewoJCQkJCQkkcG9zaXRpb24rKzsKCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCWVsc2VpZiAoaXNzZXQoJHN0cmluZ1skcG9zaXRpb25dKSkKCQkJCQl7CgkJCQkJCXN3aXRjaCAoJHN0cmluZ1skcG9zaXRpb25dKQoJCQkJCQl7CgkJCQkJCQljYXNlICcoJzoKCQkJCQkJCQkkZGVwdGgrKzsKCQkJCQkJCQlicmVhazsKCgkJCQkJCQljYXNlICcpJzoKCQkJCQkJCQkkZGVwdGgtLTsKCQkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQkkcG9zaXRpb24rKzsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJG91dHB1dCAuPSAnKCc7CgkJCX0KCQl9CgkJJG91dHB1dCAuPSBzdWJzdHIoJHN0cmluZywgJHBvc2l0aW9uKTsKCgkJcmV0dXJuICRvdXRwdXQ7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZV9taW1lKCRtaW1lKQoJewoJCWlmICgoJHBvcyA9IHN0cnBvcygkbWltZSwgJzsnKSkgPT09IGZhbHNlKQoJCXsKCQkJcmV0dXJuIHRyaW0oJG1pbWUpOwoJCX0KCgkJcmV0dXJuIHRyaW0oc3Vic3RyKCRtaW1lLCAwLCAkcG9zKSk7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhdG9tXzAzX2NvbnN0cnVjdF90eXBlKCRhdHRyaWJzKQoJewoJCWlmIChpc3NldCgkYXR0cmlic1snJ11bJ21vZGUnXSkgJiYgc3RydG9sb3dlcih0cmltKCRhdHRyaWJzWycnXVsnbW9kZSddKSA9PT0gJ2Jhc2U2NCcpKQoJCXsKCQkJJG1vZGUgPSBTSU1QTEVQSUVfQ09OU1RSVUNUX0JBU0U2NDsKCQl9CgkJZWxzZQoJCXsKCQkJJG1vZGUgPSBTSU1QTEVQSUVfQ09OU1RSVUNUX05PTkU7CgkJfQoJCWlmIChpc3NldCgkYXR0cmlic1snJ11bJ3R5cGUnXSkpCgkJewoJCQlzd2l0Y2ggKHN0cnRvbG93ZXIodHJpbSgkYXR0cmlic1snJ11bJ3R5cGUnXSkpKQoJCQl7CgkJCQljYXNlICd0ZXh0JzoKCQkJCWNhc2UgJ3RleHQvcGxhaW4nOgoJCQkJCXJldHVybiBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQgfCAkbW9kZTsKCgkJCQljYXNlICdodG1sJzoKCQkJCWNhc2UgJ3RleHQvaHRtbCc6CgkJCQkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfSFRNTCB8ICRtb2RlOwoKCQkJCWNhc2UgJ3hodG1sJzoKCQkJCWNhc2UgJ2FwcGxpY2F0aW9uL3hodG1sK3htbCc6CgkJCQkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfWEhUTUwgfCAkbW9kZTsKCgkJCQlkZWZhdWx0OgoJCQkJCXJldHVybiBTSU1QTEVQSUVfQ09OU1RSVUNUX05PTkUgfCAkbW9kZTsKCQkJfQoJCX0KCgkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCB8ICRtb2RlOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXRvbV8xMF9jb25zdHJ1Y3RfdHlwZSgkYXR0cmlicykKCXsKCQlpZiAoaXNzZXQoJGF0dHJpYnNbJyddWyd0eXBlJ10pKQoJCXsKCQkJc3dpdGNoIChzdHJ0b2xvd2VyKHRyaW0oJGF0dHJpYnNbJyddWyd0eXBlJ10pKSkKCQkJewoJCQkJY2FzZSAndGV4dCc6CgkJCQkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVDsKCgkJCQljYXNlICdodG1sJzoKCQkJCQlyZXR1cm4gU0lNUExFUElFX0NPTlNUUlVDVF9IVE1MOwoKCQkJCWNhc2UgJ3hodG1sJzoKCQkJCQlyZXR1cm4gU0lNUExFUElFX0NPTlNUUlVDVF9YSFRNTDsKCgkJCQlkZWZhdWx0OgoJCQkJCXJldHVybiBTSU1QTEVQSUVfQ09OU1RSVUNUX05PTkU7CgkJCX0KCQl9CgkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVDsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGF0b21fMTBfY29udGVudF9jb25zdHJ1Y3RfdHlwZSgkYXR0cmlicykKCXsKCQlpZiAoaXNzZXQoJGF0dHJpYnNbJyddWyd0eXBlJ10pKQoJCXsKCQkJJHR5cGUgPSBzdHJ0b2xvd2VyKHRyaW0oJGF0dHJpYnNbJyddWyd0eXBlJ10pKTsKCQkJc3dpdGNoICgkdHlwZSkKCQkJewoJCQkJY2FzZSAndGV4dCc6CgkJCQkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVDsKCgkJCQljYXNlICdodG1sJzoKCQkJCQlyZXR1cm4gU0lNUExFUElFX0NPTlNUUlVDVF9IVE1MOwoKCQkJCWNhc2UgJ3hodG1sJzoKCQkJCQlyZXR1cm4gU0lNUExFUElFX0NPTlNUUlVDVF9YSFRNTDsKCQkJfQoJCQlpZiAoaW5fYXJyYXkoc3Vic3RyKCR0eXBlLCAtNCksIGFycmF5KCcreG1sJywgJy94bWwnKSkgfHwgc3Vic3RyKCR0eXBlLCAwLCA1KSA9PT0gJ3RleHQvJykKCQkJewoJCQkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfTk9ORTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXJldHVybiBTSU1QTEVQSUVfQ09OU1RSVUNUX0JBU0U2NDsKCQkJfQoJCX0KCgkJcmV0dXJuIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVDsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzX2lzZWdtZW50X256X25jKCRzdHJpbmcpCgl7CgkJcmV0dXJuIChib29sKSBwcmVnX21hdGNoKCcvXihbQS1aYS16MC05XC0uX35ceHtBMH0tXHh7RDdGRn1ceHtGOTAwfS1ceHtGRENGfVx4e0ZERjB9LVx4e0ZGRUZ9XHh7MTAwMDB9LVx4ezFGRkZEfVx4ezIwMDAwfS1ceHsyRkZGRH1ceHszMDAwMH0tXHh7M0ZGRkR9XHh7NDAwMDB9LVx4ezRGRkZEfVx4ezUwMDAwfS1ceHs1RkZGRH1ceHs2MDAwMH0tXHh7NkZGRkR9XHh7NzAwMDB9LVx4ezdGRkZEfVx4ezgwMDAwfS1ceHs4RkZGRH1ceHs5MDAwMH0tXHh7OUZGRkR9XHh7QTAwMDB9LVx4e0FGRkZEfVx4e0IwMDAwfS1ceHtCRkZGRH1ceHtDMDAwMH0tXHh7Q0ZGRkR9XHh7RDAwMDB9LVx4e0RGRkZEfVx4e0UxMDAwfS1ceHtFRkZGRH0hJCZcJygpKissOz1AXXwoJVswLTlBQkNERUZdezJ9KSkrJC91JywgJHN0cmluZyk7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzcGFjZV9zZXBhcmF0ZWRfdG9rZW5zKCRzdHJpbmcpCgl7CgkJJHNwYWNlX2NoYXJhY3RlcnMgPSAiXHgyMFx4MDlceDBBXHgwQlx4MENceDBEIjsKCQkkc3RyaW5nX2xlbmd0aCA9IHN0cmxlbigkc3RyaW5nKTsKCgkJJHBvc2l0aW9uID0gc3Ryc3BuKCRzdHJpbmcsICRzcGFjZV9jaGFyYWN0ZXJzKTsKCQkkdG9rZW5zID0gYXJyYXkoKTsKCgkJd2hpbGUgKCRwb3NpdGlvbiA8ICRzdHJpbmdfbGVuZ3RoKQoJCXsKCQkJJGxlbiA9IHN0cmNzcG4oJHN0cmluZywgJHNwYWNlX2NoYXJhY3RlcnMsICRwb3NpdGlvbik7CgkJCSR0b2tlbnNbXSA9IHN1YnN0cigkc3RyaW5nLCAkcG9zaXRpb24sICRsZW4pOwoJCQkkcG9zaXRpb24gKz0gJGxlbjsKCQkJJHBvc2l0aW9uICs9IHN0cnNwbigkc3RyaW5nLCAkc3BhY2VfY2hhcmFjdGVycywgJHBvc2l0aW9uKTsKCQl9CgoJCXJldHVybiAkdG9rZW5zOwoJfQoKCS8qKgoJICogQ29udmVydHMgYSB1bmljb2RlIGNvZGVwb2ludCB0byBhIFVURi04IGNoYXJhY3RlcgoJICoKCSAqIEBzdGF0aWMKCSAqIEBwYXJhbSBpbnQgJGNvZGVwb2ludCBVbmljb2RlIGNvZGVwb2ludAoJICogQHJldHVybiBzdHJpbmcgVVRGLTggY2hhcmFjdGVyCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29kZXBvaW50X3RvX3V0ZjgoJGNvZGVwb2ludCkKCXsKCQkkY29kZXBvaW50ID0gKGludCkgJGNvZGVwb2ludDsKCQlpZiAoJGNvZGVwb2ludCA8IDApCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWVsc2UgaWYgKCRjb2RlcG9pbnQgPD0gMHg3ZikKCQl7CgkJCXJldHVybiBjaHIoJGNvZGVwb2ludCk7CgkJfQoJCWVsc2UgaWYgKCRjb2RlcG9pbnQgPD0gMHg3ZmYpCgkJewoJCQlyZXR1cm4gY2hyKDB4YzAgfCAoJGNvZGVwb2ludCA+PiA2KSkgLiBjaHIoMHg4MCB8ICgkY29kZXBvaW50ICYgMHgzZikpOwoJCX0KCQllbHNlIGlmICgkY29kZXBvaW50IDw9IDB4ZmZmZikKCQl7CgkJCXJldHVybiBjaHIoMHhlMCB8ICgkY29kZXBvaW50ID4+IDEyKSkgLiBjaHIoMHg4MCB8ICgoJGNvZGVwb2ludCA+PiA2KSAmIDB4M2YpKSAuIGNocigweDgwIHwgKCRjb2RlcG9pbnQgJiAweDNmKSk7CgkJfQoJCWVsc2UgaWYgKCRjb2RlcG9pbnQgPD0gMHgxMGZmZmYpCgkJewoJCQlyZXR1cm4gY2hyKDB4ZjAgfCAoJGNvZGVwb2ludCA+PiAxOCkpIC4gY2hyKDB4ODAgfCAoKCRjb2RlcG9pbnQgPj4gMTIpICYgMHgzZikpIC4gY2hyKDB4ODAgfCAoKCRjb2RlcG9pbnQgPj4gNikgJiAweDNmKSkgLiBjaHIoMHg4MCB8ICgkY29kZXBvaW50ICYgMHgzZikpOwoJCX0KCgkJLy8gVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUgoJCXJldHVybiAiXHhFRlx4QkZceEJEIjsKCX0KCgkvKioKCSAqIFNpbWlsYXIgdG8gcGFyc2Vfc3RyKCkKCSAqCgkgKiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG5hbWUvdmFsdWUgcGFpcnMsIHdoZXJlIHRoZSB2YWx1ZSBpcyBhbgoJICogYXJyYXkgb2YgdmFsdWVzIHRoYXQgaGF2ZSB1c2VkIHRoZSBzYW1lIG5hbWUKCSAqCgkgKiBAc3RhdGljCgkgKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIGlucHV0IHN0cmluZy4KCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZV9zdHIoJHN0cikKCXsKCQkkcmV0dXJuID0gYXJyYXkoKTsKCQkkc3RyID0gZXhwbG9kZSgnJicsICRzdHIpOwoKCQlmb3JlYWNoICgkc3RyIGFzICRzZWN0aW9uKQoJCXsKCQkJaWYgKHN0cnBvcygkc2VjdGlvbiwgJz0nKSAhPT0gZmFsc2UpCgkJCXsKCQkJCWxpc3QoJG5hbWUsICR2YWx1ZSkgPSBleHBsb2RlKCc9JywgJHNlY3Rpb24sIDIpOwoJCQkJJHJldHVyblt1cmxkZWNvZGUoJG5hbWUpXVtdID0gdXJsZGVjb2RlKCR2YWx1ZSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkcmV0dXJuW3VybGRlY29kZSgkc2VjdGlvbildW10gPSBudWxsOwoJCQl9CgkJfQoKCQlyZXR1cm4gJHJldHVybjsKCX0KCgkvKioKCSAqIERldGVjdCBYTUwgZW5jb2RpbmcsIGFzIHBlciBYTUwgMS4wIEFwcGVuZGl4IEYuMQoJICoKCSAqIEB0b2RvIEFkZCBzdXBwb3J0IGZvciBFQkNESUMKCSAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgWE1MIGRhdGEKCSAqIEBwYXJhbSBTaW1wbGVQaWVfUmVnaXN0cnkgJHJlZ2lzdHJ5IENsYXNzIHJlZ2lzdHJ5CgkgKiBAcmV0dXJuIGFycmF5IFBvc3NpYmxlIGVuY29kaW5ncwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHhtbF9lbmNvZGluZygkZGF0YSwgJHJlZ2lzdHJ5KQoJewoJCS8vIFVURi0zMiBCaWcgRW5kaWFuIEJPTQoJCWlmIChzdWJzdHIoJGRhdGEsIDAsIDQpID09PSAiXHgwMFx4MDBceEZFXHhGRiIpCgkJewoJCQkkZW5jb2RpbmdbXSA9ICdVVEYtMzJCRSc7CgkJfQoJCS8vIFVURi0zMiBMaXR0bGUgRW5kaWFuIEJPTQoJCWVsc2VpZiAoc3Vic3RyKCRkYXRhLCAwLCA0KSA9PT0gIlx4RkZceEZFXHgwMFx4MDAiKQoJCXsKCQkJJGVuY29kaW5nW10gPSAnVVRGLTMyTEUnOwoJCX0KCQkvLyBVVEYtMTYgQmlnIEVuZGlhbiBCT00KCQllbHNlaWYgKHN1YnN0cigkZGF0YSwgMCwgMikgPT09ICJceEZFXHhGRiIpCgkJewoJCQkkZW5jb2RpbmdbXSA9ICdVVEYtMTZCRSc7CgkJfQoJCS8vIFVURi0xNiBMaXR0bGUgRW5kaWFuIEJPTQoJCWVsc2VpZiAoc3Vic3RyKCRkYXRhLCAwLCAyKSA9PT0gIlx4RkZceEZFIikKCQl7CgkJCSRlbmNvZGluZ1tdID0gJ1VURi0xNkxFJzsKCQl9CgkJLy8gVVRGLTggQk9NCgkJZWxzZWlmIChzdWJzdHIoJGRhdGEsIDAsIDMpID09PSAiXHhFRlx4QkJceEJGIikKCQl7CgkJCSRlbmNvZGluZ1tdID0gJ1VURi04JzsKCQl9CgkJLy8gVVRGLTMyIEJpZyBFbmRpYW4gV2l0aG91dCBCT00KCQllbHNlaWYgKHN1YnN0cigkZGF0YSwgMCwgMjApID09PSAiXHgwMFx4MDBceDAwXHgzQ1x4MDBceDAwXHgwMFx4M0ZceDAwXHgwMFx4MDBceDc4XHgwMFx4MDBceDAwXHg2RFx4MDBceDAwXHgwMFx4NkMiKQoJCXsKCQkJaWYgKCRwb3MgPSBzdHJwb3MoJGRhdGEsICJceDAwXHgwMFx4MDBceDNGXHgwMFx4MDBceDAwXHgzRSIpKQoJCQl7CgkJCQkkcGFyc2VyID0gJHJlZ2lzdHJ5LT5jcmVhdGUoJ1hNTF9EZWNsYXJhdGlvbl9QYXJzZXInLCBhcnJheShTaW1wbGVQaWVfTWlzYzo6Y2hhbmdlX2VuY29kaW5nKHN1YnN0cigkZGF0YSwgMjAsICRwb3MgLSAyMCksICdVVEYtMzJCRScsICdVVEYtOCcpKSk7CgkJCQlpZiAoJHBhcnNlci0+cGFyc2UoKSkKCQkJCXsKCQkJCQkkZW5jb2RpbmdbXSA9ICRwYXJzZXItPmVuY29kaW5nOwoJCQkJfQoJCQl9CgkJCSRlbmNvZGluZ1tdID0gJ1VURi0zMkJFJzsKCQl9CgkJLy8gVVRGLTMyIExpdHRsZSBFbmRpYW4gV2l0aG91dCBCT00KCQllbHNlaWYgKHN1YnN0cigkZGF0YSwgMCwgMjApID09PSAiXHgzQ1x4MDBceDAwXHgwMFx4M0ZceDAwXHgwMFx4MDBceDc4XHgwMFx4MDBceDAwXHg2RFx4MDBceDAwXHgwMFx4NkNceDAwXHgwMFx4MDAiKQoJCXsKCQkJaWYgKCRwb3MgPSBzdHJwb3MoJGRhdGEsICJceDNGXHgwMFx4MDBceDAwXHgzRVx4MDBceDAwXHgwMCIpKQoJCQl7CgkJCQkkcGFyc2VyID0gJHJlZ2lzdHJ5LT5jcmVhdGUoJ1hNTF9EZWNsYXJhdGlvbl9QYXJzZXInLCBhcnJheShTaW1wbGVQaWVfTWlzYzo6Y2hhbmdlX2VuY29kaW5nKHN1YnN0cigkZGF0YSwgMjAsICRwb3MgLSAyMCksICdVVEYtMzJMRScsICdVVEYtOCcpKSk7CgkJCQlpZiAoJHBhcnNlci0+cGFyc2UoKSkKCQkJCXsKCQkJCQkkZW5jb2RpbmdbXSA9ICRwYXJzZXItPmVuY29kaW5nOwoJCQkJfQoJCQl9CgkJCSRlbmNvZGluZ1tdID0gJ1VURi0zMkxFJzsKCQl9CgkJLy8gVVRGLTE2IEJpZyBFbmRpYW4gV2l0aG91dCBCT00KCQllbHNlaWYgKHN1YnN0cigkZGF0YSwgMCwgMTApID09PSAiXHgwMFx4M0NceDAwXHgzRlx4MDBceDc4XHgwMFx4NkRceDAwXHg2QyIpCgkJewoJCQlpZiAoJHBvcyA9IHN0cnBvcygkZGF0YSwgIlx4MDBceDNGXHgwMFx4M0UiKSkKCQkJewoJCQkJJHBhcnNlciA9ICRyZWdpc3RyeS0+Y3JlYXRlKCdYTUxfRGVjbGFyYXRpb25fUGFyc2VyJywgYXJyYXkoU2ltcGxlUGllX01pc2M6OmNoYW5nZV9lbmNvZGluZyhzdWJzdHIoJGRhdGEsIDIwLCAkcG9zIC0gMTApLCAnVVRGLTE2QkUnLCAnVVRGLTgnKSkpOwoJCQkJaWYgKCRwYXJzZXItPnBhcnNlKCkpCgkJCQl7CgkJCQkJJGVuY29kaW5nW10gPSAkcGFyc2VyLT5lbmNvZGluZzsKCQkJCX0KCQkJfQoJCQkkZW5jb2RpbmdbXSA9ICdVVEYtMTZCRSc7CgkJfQoJCS8vIFVURi0xNiBMaXR0bGUgRW5kaWFuIFdpdGhvdXQgQk9NCgkJZWxzZWlmIChzdWJzdHIoJGRhdGEsIDAsIDEwKSA9PT0gIlx4M0NceDAwXHgzRlx4MDBceDc4XHgwMFx4NkRceDAwXHg2Q1x4MDAiKQoJCXsKCQkJaWYgKCRwb3MgPSBzdHJwb3MoJGRhdGEsICJceDNGXHgwMFx4M0VceDAwIikpCgkJCXsKCQkJCSRwYXJzZXIgPSAkcmVnaXN0cnktPmNyZWF0ZSgnWE1MX0RlY2xhcmF0aW9uX1BhcnNlcicsIGFycmF5KFNpbXBsZVBpZV9NaXNjOjpjaGFuZ2VfZW5jb2Rpbmcoc3Vic3RyKCRkYXRhLCAyMCwgJHBvcyAtIDEwKSwgJ1VURi0xNkxFJywgJ1VURi04JykpKTsKCQkJCWlmICgkcGFyc2VyLT5wYXJzZSgpKQoJCQkJewoJCQkJCSRlbmNvZGluZ1tdID0gJHBhcnNlci0+ZW5jb2Rpbmc7CgkJCQl9CgkJCX0KCQkJJGVuY29kaW5nW10gPSAnVVRGLTE2TEUnOwoJCX0KCQkvLyBVUy1BU0NJSSAob3Igc3VwZXJzZXQpCgkJZWxzZWlmIChzdWJzdHIoJGRhdGEsIDAsIDUpID09PSAiXHgzQ1x4M0ZceDc4XHg2RFx4NkMiKQoJCXsKCQkJaWYgKCRwb3MgPSBzdHJwb3MoJGRhdGEsICJceDNGXHgzRSIpKQoJCQl7CgkJCQkkcGFyc2VyID0gJHJlZ2lzdHJ5LT5jcmVhdGUoJ1hNTF9EZWNsYXJhdGlvbl9QYXJzZXInLCBhcnJheShzdWJzdHIoJGRhdGEsIDUsICRwb3MgLSA1KSkpOwoJCQkJaWYgKCRwYXJzZXItPnBhcnNlKCkpCgkJCQl7CgkJCQkJJGVuY29kaW5nW10gPSAkcGFyc2VyLT5lbmNvZGluZzsKCQkJCX0KCQkJfQoJCQkkZW5jb2RpbmdbXSA9ICdVVEYtOCc7CgkJfQoJCS8vIEZhbGxiYWNrIHRvIFVURi04CgkJZWxzZQoJCXsKCQkJJGVuY29kaW5nW10gPSAnVVRGLTgnOwoJCX0KCQlyZXR1cm4gJGVuY29kaW5nOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb3V0cHV0X2phdmFzY3JpcHQoKQoJewoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ29iX2d6aGFuZGxlcicpKQoJCXsKCQkJb2Jfc3RhcnQoJ29iX2d6aGFuZGxlcicpOwoJCX0KCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0OiBVVEYtOCcpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlJyk7CgkJaGVhZGVyKCdFeHBpcmVzOiAnIC4gZ21kYXRlKCdELCBkIE0gWSBIOmk6cycsIHRpbWUoKSArIDYwNDgwMCkgLiAnIEdNVCcpOyAvLyA3IGRheXMKCQk/PgpmdW5jdGlvbiBlbWJlZF9xdWlja3RpbWUodHlwZSwgYmdjb2xvciwgd2lkdGgsIGhlaWdodCwgbGluaywgcGxhY2Vob2xkZXIsIGxvb3ApIHsKCWlmIChwbGFjZWhvbGRlciAhPSAnJykgewoJCWRvY3VtZW50LndyaXRlbG4oJzxlbWJlZCB0eXBlPSInK3R5cGUrJyIgc3R5bGU9ImN1cnNvcjpoYW5kOyBjdXJzb3I6cG9pbnRlcjsiIGhyZWY9IicrbGluaysnIiBzcmM9IicrcGxhY2Vob2xkZXIrJyIgd2lkdGg9Iicrd2lkdGgrJyIgaGVpZ2h0PSInK2hlaWdodCsnIiBhdXRvcGxheT0iZmFsc2UiIHRhcmdldD0ibXlzZWxmIiBjb250cm9sbGVyPSJmYWxzZSIgbG9vcD0iJytsb29wKyciIHNjYWxlPSJhc3BlY3QiIGJnY29sb3I9IicrYmdjb2xvcisnIiBwbHVnaW5zcGFnZT0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXVpY2t0aW1lL2Rvd25sb2FkLyI+PC9lbWJlZD4nKTsKCX0KCWVsc2UgewoJCWRvY3VtZW50LndyaXRlbG4oJzxlbWJlZCB0eXBlPSInK3R5cGUrJyIgc3R5bGU9ImN1cnNvcjpoYW5kOyBjdXJzb3I6cG9pbnRlcjsiIHNyYz0iJytsaW5rKyciIHdpZHRoPSInK3dpZHRoKyciIGhlaWdodD0iJytoZWlnaHQrJyIgYXV0b3BsYXk9ImZhbHNlIiB0YXJnZXQ9Im15c2VsZiIgY29udHJvbGxlcj0idHJ1ZSIgbG9vcD0iJytsb29wKyciIHNjYWxlPSJhc3BlY3QiIGJnY29sb3I9IicrYmdjb2xvcisnIiBwbHVnaW5zcGFnZT0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXVpY2t0aW1lL2Rvd25sb2FkLyI+PC9lbWJlZD4nKTsKCX0KfQoKZnVuY3Rpb24gZW1iZWRfZmxhc2goYmdjb2xvciwgd2lkdGgsIGhlaWdodCwgbGluaywgbG9vcCwgdHlwZSkgewoJZG9jdW1lbnQud3JpdGVsbignPGVtYmVkIHNyYz0iJytsaW5rKyciIHBsdWdpbnNwYWdlPSJodHRwOi8vd3d3Lm1hY3JvbWVkaWEuY29tL2dvL2dldGZsYXNocGxheWVyIiB0eXBlPSInK3R5cGUrJyIgcXVhbGl0eT0iaGlnaCIgd2lkdGg9Iicrd2lkdGgrJyIgaGVpZ2h0PSInK2hlaWdodCsnIiBiZ2NvbG9yPSInK2JnY29sb3IrJyIgbG9vcD0iJytsb29wKyciPjwvZW1iZWQ+Jyk7Cn0KCmZ1bmN0aW9uIGVtYmVkX2Zsdih3aWR0aCwgaGVpZ2h0LCBsaW5rLCBwbGFjZWhvbGRlciwgbG9vcCwgcGxheWVyKSB7Cglkb2N1bWVudC53cml0ZWxuKCc8ZW1iZWQgc3JjPSInK3BsYXllcisnIiBwbHVnaW5zcGFnZT0iaHR0cDovL3d3dy5tYWNyb21lZGlhLmNvbS9nby9nZXRmbGFzaHBsYXllciIgdHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIHF1YWxpdHk9ImhpZ2giIHdpZHRoPSInK3dpZHRoKyciIGhlaWdodD0iJytoZWlnaHQrJyIgd21vZGU9InRyYW5zcGFyZW50IiBmbGFzaHZhcnM9ImZpbGU9JytsaW5rKycmYXV0b3N0YXJ0PWZhbHNlJnJlcGVhdD0nK2xvb3ArJyZzaG93ZGlnaXRzPXRydWUmc2hvd2ZzYnV0dG9uPWZhbHNlIj48L2VtYmVkPicpOwp9CgpmdW5jdGlvbiBlbWJlZF93bWVkaWEod2lkdGgsIGhlaWdodCwgbGluaykgewoJZG9jdW1lbnQud3JpdGVsbignPGVtYmVkIHR5cGU9ImFwcGxpY2F0aW9uL3gtbXBsYXllcjIiIHNyYz0iJytsaW5rKyciIGF1dG9zaXplPSIxIiB3aWR0aD0iJyt3aWR0aCsnIiBoZWlnaHQ9IicraGVpZ2h0KyciIHNob3djb250cm9scz0iMSIgc2hvd3N0YXR1c2Jhcj0iMCIgc2hvd2Rpc3BsYXk9IjAiIGF1dG9zdGFydD0iMCI+PC9lbWJlZD4nKTsKfQoJCTw/cGhwCgl9CgoJLyoqCgkgKiBHZXQgdGhlIFNpbXBsZVBpZSBidWlsZCB0aW1lc3RhbXAKCSAqCgkgKiBVc2VzIHRoZSBnaXQgaW5kZXggaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgdXNlcyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUKCSAqIG9mIHRoZSBuZXdlc3QgZmlsZS4KCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfYnVpbGQoKQoJewoJCSRyb290ID0gZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSk7CgkJaWYgKGZpbGVfZXhpc3RzKCRyb290IC4gJy8uZ2l0L2luZGV4JykpCgkJewoJCQlyZXR1cm4gZmlsZW10aW1lKCRyb290IC4gJy8uZ2l0L2luZGV4Jyk7CgkJfQoJCWVsc2VpZiAoZmlsZV9leGlzdHMoJHJvb3QgLiAnL1NpbXBsZVBpZScpKQoJCXsKCQkJJHRpbWUgPSAwOwoJCQlmb3JlYWNoIChnbG9iKCRyb290IC4gJy9TaW1wbGVQaWUvKi5waHAnKSBhcyAkZmlsZSkKCQkJewoJCQkJaWYgKCgkbXRpbWUgPSBmaWxlbXRpbWUoJGZpbGUpKSA+ICR0aW1lKQoJCQkJewoJCQkJCSR0aW1lID0gJG10aW1lOwoJCQkJfQoJCQl9CgkJCXJldHVybiAkdGltZTsKCQl9CgkJZWxzZWlmIChmaWxlX2V4aXN0cyhkaXJuYW1lKF9fRklMRV9fKSAuICcvQ29yZS5waHAnKSkKCQl7CgkJCXJldHVybiBmaWxlbXRpbWUoZGlybmFtZShfX0ZJTEVfXykgLiAnL0NvcmUucGhwJyk7CgkJfQoKCQlyZXR1cm4gZmlsZW10aW1lKF9fRklMRV9fKTsKCX0KCgkvKioKCSAqIEZvcm1hdCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWJ1ZygmJHNwKQoJewoJCSRpbmZvID0gJ1NpbXBsZVBpZSAnIC4gU0lNUExFUElFX1ZFUlNJT04gLiAnIEJ1aWxkICcgLiBTSU1QTEVQSUVfQlVJTEQgLiAiXG4iOwoJCSRpbmZvIC49ICdQSFAgJyAuIFBIUF9WRVJTSU9OIC4gIlxuIjsKCQlpZiAoJHNwLT5lcnJvcigpICE9PSBudWxsKQoJCXsKCQkJJGluZm8gLj0gJ0Vycm9yIG9jY3VycmVkOiAnIC4gJHNwLT5lcnJvcigpIC4gIlxuIjsKCQl9CgkJZWxzZQoJCXsKCQkJJGluZm8gLj0gIk5vIGVycm9yIGZvdW5kLlxuIjsKCQl9CgkJJGluZm8gLj0gIkV4dGVuc2lvbnM6XG4iOwoJCSRleHRlbnNpb25zID0gYXJyYXkoJ3BjcmUnLCAnY3VybCcsICd6bGliJywgJ21ic3RyaW5nJywgJ2ljb252JywgJ3htbHJlYWRlcicsICd4bWwnKTsKCQlmb3JlYWNoICgkZXh0ZW5zaW9ucyBhcyAkZXh0KQoJCXsKCQkJaWYgKGV4dGVuc2lvbl9sb2FkZWQoJGV4dCkpCgkJCXsKCQkJCSRpbmZvIC49ICIgICAgJGV4dCBsb2FkZWRcbiI7CgkJCQlzd2l0Y2ggKCRleHQpCgkJCQl7CgkJCQkJY2FzZSAncGNyZSc6CgkJCQkJCSRpbmZvIC49ICcgICAgICBWZXJzaW9uICcgLiBQQ1JFX1ZFUlNJT04gLiAiXG4iOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICdjdXJsJzoKCQkJCQkJJHZlcnNpb24gPSBjdXJsX3ZlcnNpb24oKTsKCQkJCQkJJGluZm8gLj0gJyAgICAgIFZlcnNpb24gJyAuICR2ZXJzaW9uWyd2ZXJzaW9uJ10gLiAiXG4iOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICdtYnN0cmluZyc6CgkJCQkJCSRpbmZvIC49ICcgICAgICBPdmVybG9hZGluZzogJyAuIG1iX2dldF9pbmZvKCdmdW5jX292ZXJsb2FkJykgLiAiXG4iOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICdpY29udic6CgkJCQkJCSRpbmZvIC49ICcgICAgICBWZXJzaW9uICcgLiBJQ09OVl9WRVJTSU9OIC4gIlxuIjsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAneG1sJzoKCQkJCQkJJGluZm8gLj0gJyAgICAgIFZlcnNpb24gJyAuIExJQlhNTF9ET1RURURfVkVSU0lPTiAuICJcbiI7CgkJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGluZm8gLj0gIiAgICAkZXh0IG5vdCBsb2FkZWRcbiI7CgkJCX0KCQl9CgkJcmV0dXJuICRpbmZvOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2lsZW5jZV9lcnJvcnMoJG51bSwgJHN0cikKCXsKCQkvLyBOby1vcAoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Net/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Net/IPv6.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogQ2xhc3MgdG8gdmFsaWRhdGUgYW5kIHRvIHdvcmsgd2l0aCBJUHY2IGFkZHJlc3Nlcy4KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIEhUVFAKICogQGNvcHlyaWdodCAyMDAzLTIwMDUgVGhlIFBIUCBHcm91cAogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocAogKiBAbGluayBodHRwOi8vcGVhci5waHAubmV0L3BhY2thZ2UvTmV0X0lQdjYKICogQGF1dGhvciBBbGV4YW5kZXIgTWVyeiA8YWxleGFuZGVyLm1lcnpAd2ViLmRlPgogKiBAYXV0aG9yIGVsZnJpbmsgYXQgaW50cm93ZWIgZG90IG5sCiAqIEBhdXRob3IgSm9zaCBQZWNrIDxqbXAgYXQgam9zaHBlY2sgZG90IG9yZz4KICogQGF1dGhvciBTYW0gU25lZGRvbiA8Z2VvZmZlcnNAZ21haWwuY29tPgogKi8KY2xhc3MgU2ltcGxlUGllX05ldF9JUHY2CnsKCS8qKgoJICogVW5jb21wcmVzc2VzIGFuIElQdjYgYWRkcmVzcwoJICoKCSAqIFJGQyA0MjkxIGFsbG93cyB5b3UgdG8gY29tcHJlc3MgY29uY2VjdXRpdmUgemVybyBwaWVjZXMgaW4gYW4gYWRkcmVzcyB0bwoJICogJzo6Jy4gVGhpcyBtZXRob2QgZXhwZWN0cyBhIHZhbGlkIElQdjYgYWRkcmVzcyBhbmQgZXhwYW5kcyB0aGUgJzo6JyB0bwoJICogdGhlIHJlcXVpcmVkIG51bWJlciBvZiB6ZXJvIHBpZWNlcy4KCSAqCgkgKiBFeGFtcGxlOiAgRkYwMTo6MTAxICAgLT4gIEZGMDE6MDowOjA6MDowOjA6MTAxCgkgKiAgICAgICAgICAgOjoxICAgICAgICAgLT4gIDA6MDowOjA6MDowOjA6MQoJICoKCSAqIEBhdXRob3IgQWxleGFuZGVyIE1lcnogPGFsZXhhbmRlci5tZXJ6QHdlYi5kZT4KCSAqIEBhdXRob3IgZWxmcmluayBhdCBpbnRyb3dlYiBkb3QgbmwKCSAqIEBhdXRob3IgSm9zaCBQZWNrIDxqbXAgYXQgam9zaHBlY2sgZG90IG9yZz4KCSAqIEBjb3B5cmlnaHQgMjAwMy0yMDA1IFRoZSBQSFAgR3JvdXAKCSAqIEBsaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwCgkgKiBAcGFyYW0gc3RyaW5nICRpcCBBbiBJUHY2IGFkZHJlc3MKCSAqIEByZXR1cm4gc3RyaW5nIFRoZSB1bmNvbXByZXNzZWQgSVB2NiBhZGRyZXNzCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdW5jb21wcmVzcygkaXApCgl7CgkJJGMxID0gLTE7CgkJJGMyID0gLTE7CgkJaWYgKHN1YnN0cl9jb3VudCgkaXAsICc6OicpID09PSAxKQoJCXsKCQkJbGlzdCgkaXAxLCAkaXAyKSA9IGV4cGxvZGUoJzo6JywgJGlwKTsKCQkJaWYgKCRpcDEgPT09ICcnKQoJCQl7CgkJCQkkYzEgPSAtMTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRjMSA9IHN1YnN0cl9jb3VudCgkaXAxLCAnOicpOwoJCQl9CgkJCWlmICgkaXAyID09PSAnJykKCQkJewoJCQkJJGMyID0gLTE7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkYzIgPSBzdWJzdHJfY291bnQoJGlwMiwgJzonKTsKCQkJfQoJCQlpZiAoc3RycG9zKCRpcDIsICcuJykgIT09IGZhbHNlKQoJCQl7CgkJCQkkYzIrKzsKCQkJfQoJCQkvLyA6OgoJCQlpZiAoJGMxID09PSAtMSAmJiAkYzIgPT09IC0xKQoJCQl7CgkJCQkkaXAgPSAnMDowOjA6MDowOjA6MDowJzsKCQkJfQoJCQkvLyA6Onh4eAoJCQllbHNlIGlmICgkYzEgPT09IC0xKQoJCQl7CgkJCQkkZmlsbCA9IHN0cl9yZXBlYXQoJzA6JywgNyAtICRjMik7CgkJCQkkaXAgPSBzdHJfcmVwbGFjZSgnOjonLCAkZmlsbCwgJGlwKTsKCQkJfQoJCQkvLyB4eHg6OgoJCQllbHNlIGlmICgkYzIgPT09IC0xKQoJCQl7CgkJCQkkZmlsbCA9IHN0cl9yZXBlYXQoJzowJywgNyAtICRjMSk7CgkJCQkkaXAgPSBzdHJfcmVwbGFjZSgnOjonLCAkZmlsbCwgJGlwKTsKCQkJfQoJCQkvLyB4eHg6Onh4eAoJCQllbHNlCgkJCXsKCQkJCSRmaWxsID0gJzonIC4gc3RyX3JlcGVhdCgnMDonLCA2IC0gJGMyIC0gJGMxKTsKCQkJCSRpcCA9IHN0cl9yZXBsYWNlKCc6OicsICRmaWxsLCAkaXApOwoJCQl9CgkJfQoJCXJldHVybiAkaXA7Cgl9CgoJLyoqCgkgKiBDb21wcmVzc2VzIGFuIElQdjYgYWRkcmVzcwoJICoKCSAqIFJGQyA0MjkxIGFsbG93cyB5b3UgdG8gY29tcHJlc3MgY29uY2VjdXRpdmUgemVybyBwaWVjZXMgaW4gYW4gYWRkcmVzcyB0bwoJICogJzo6Jy4gVGhpcyBtZXRob2QgZXhwZWN0cyBhIHZhbGlkIElQdjYgYWRkcmVzcyBhbmQgY29tcHJlc3NlcyBjb25zZWN1dGl2ZQoJICogemVybyBwaWVjZXMgdG8gJzo6Jy4KCSAqCgkgKiBFeGFtcGxlOiAgRkYwMTowOjA6MDowOjA6MDoxMDEgICAtPiAgRkYwMTo6MTAxCgkgKiAgICAgICAgICAgMDowOjA6MDowOjA6MDoxICAgICAgICAtPiAgOjoxCgkgKgoJICogQHNlZSB1bmNvbXByZXNzKCkKCSAqIEBwYXJhbSBzdHJpbmcgJGlwIEFuIElQdjYgYWRkcmVzcwoJICogQHJldHVybiBzdHJpbmcgVGhlIGNvbXByZXNzZWQgSVB2NiBhZGRyZXNzCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tcHJlc3MoJGlwKQoJewoJCS8vIFByZXBhcmUgdGhlIElQIHRvIGJlIGNvbXByZXNzZWQKCQkkaXAgPSBzZWxmOjp1bmNvbXByZXNzKCRpcCk7CgkJJGlwX3BhcnRzID0gc2VsZjo6c3BsaXRfdjZfdjQoJGlwKTsKCgkJLy8gUmVwbGFjZSBhbGwgbGVhZGluZyB6ZXJvcwoJCSRpcF9wYXJ0c1swXSA9IHByZWdfcmVwbGFjZSgnLyhefDopMCsoWzAtOV0pLycsICdcMVwyJywgJGlwX3BhcnRzWzBdKTsKCgkJLy8gRmluZCBidW5jaGVzIG9mIHplcm9zCgkJaWYgKHByZWdfbWF0Y2hfYWxsKCcvKD86Xnw6KSg/OjAoPzo6fCQpKSsvJywgJGlwX3BhcnRzWzBdLCAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSkpCgkJewoJCQkkbWF4ID0gMDsKCQkJJHBvcyA9IG51bGw7CgkJCWZvcmVhY2ggKCRtYXRjaGVzWzBdIGFzICRtYXRjaCkKCQkJewoJCQkJaWYgKHN0cmxlbigkbWF0Y2hbMF0pID4gJG1heCkKCQkJCXsKCQkJCQkkbWF4ID0gc3RybGVuKCRtYXRjaFswXSk7CgkJCQkJJHBvcyA9ICRtYXRjaFsxXTsKCQkJCX0KCQkJfQoKCQkJJGlwX3BhcnRzWzBdID0gc3Vic3RyX3JlcGxhY2UoJGlwX3BhcnRzWzBdLCAnOjonLCAkcG9zLCAkbWF4KTsKCQl9CgoJCWlmICgkaXBfcGFydHNbMV0gIT09ICcnKQoJCXsKCQkJcmV0dXJuIGltcGxvZGUoJzonLCAkaXBfcGFydHMpOwoJCX0KCgkJcmV0dXJuICRpcF9wYXJ0c1swXTsKCX0KCgkvKioKCSAqIFNwbGl0cyBhbiBJUHY2IGFkZHJlc3MgaW50byB0aGUgSVB2NiBhbmQgSVB2NCByZXByZXNlbnRhdGlvbiBwYXJ0cwoJICoKCSAqIFJGQyA0MjkxIGFsbG93cyB5b3UgdG8gcmVwcmVzZW50IHRoZSBsYXN0IHR3byBwYXJ0cyBvZiBhbiBJUHY2IGFkZHJlc3MKCSAqIHVzaW5nIHRoZSBzdGFuZGFyZCBJUHY0IHJlcHJlc2VudGF0aW9uCgkgKgoJICogRXhhbXBsZTogIDA6MDowOjA6MDowOjEzLjEuNjguMwoJICogICAgICAgICAgIDA6MDowOjA6MDpGRkZGOjEyOS4xNDQuNTIuMzgKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRpcCBBbiBJUHY2IGFkZHJlc3MKCSAqIEByZXR1cm4gYXJyYXkgWzBdIGNvbnRhaW5zIHRoZSBJUHY2IHJlcHJlc2VudGVkIHBhcnQsIGFuZCBbMV0gdGhlIElQdjQgcmVwcmVzZW50ZWQgcGFydAoJICovCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzcGxpdF92Nl92NCgkaXApCgl7CgkJaWYgKHN0cnBvcygkaXAsICcuJykgIT09IGZhbHNlKQoJCXsKCQkJJHBvcyA9IHN0cnJwb3MoJGlwLCAnOicpOwoJCQkkaXB2Nl9wYXJ0ID0gc3Vic3RyKCRpcCwgMCwgJHBvcyk7CgkJCSRpcHY0X3BhcnQgPSBzdWJzdHIoJGlwLCAkcG9zICsgMSk7CgkJCXJldHVybiBhcnJheSgkaXB2Nl9wYXJ0LCAkaXB2NF9wYXJ0KTsKCQl9CgoJCXJldHVybiBhcnJheSgkaXAsICcnKTsKCX0KCgkvKioKCSAqIENoZWNrcyBhbiBJUHY2IGFkZHJlc3MKCSAqCgkgKiBDaGVja3MgaWYgdGhlIGdpdmVuIElQIGlzIGEgdmFsaWQgSVB2NiBhZGRyZXNzCgkgKgoJICogQHBhcmFtIHN0cmluZyAkaXAgQW4gSVB2NiBhZGRyZXNzCgkgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiAkaXAgaXMgYSB2YWxpZCBJUHY2IGFkZHJlc3MKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja19pcHY2KCRpcCkKCXsKCQkkaXAgPSBzZWxmOjp1bmNvbXByZXNzKCRpcCk7CgkJbGlzdCgkaXB2NiwgJGlwdjQpID0gc2VsZjo6c3BsaXRfdjZfdjQoJGlwKTsKCQkkaXB2NiA9IGV4cGxvZGUoJzonLCAkaXB2Nik7CgkJJGlwdjQgPSBleHBsb2RlKCcuJywgJGlwdjQpOwoJCWlmIChjb3VudCgkaXB2NikgPT09IDggJiYgY291bnQoJGlwdjQpID09PSAxIHx8IGNvdW50KCRpcHY2KSA9PT0gNiAmJiBjb3VudCgkaXB2NCkgPT09IDQpCgkJewoJCQlmb3JlYWNoICgkaXB2NiBhcyAkaXB2Nl9wYXJ0KQoJCQl7CgkJCQkvLyBUaGUgc2VjdGlvbiBjYW4ndCBiZSBlbXB0eQoJCQkJaWYgKCRpcHY2X3BhcnQgPT09ICcnKQoJCQkJCXJldHVybiBmYWxzZTsKCgkJCQkvLyBOb3IgY2FuIGl0IGJlIG92ZXIgZm91ciBjaGFyYWN0ZXJzCgkJCQlpZiAoc3RybGVuKCRpcHY2X3BhcnQpID4gNCkKCQkJCQlyZXR1cm4gZmFsc2U7CgoJCQkJLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MgKHRoaXMgaXMgc2FmZSBiZWNhdXNlIG9mIHRoZSBhYm92ZSkKCQkJCSRpcHY2X3BhcnQgPSBsdHJpbSgkaXB2Nl9wYXJ0LCAnMCcpOwoJCQkJaWYgKCRpcHY2X3BhcnQgPT09ICcnKQoJCQkJCSRpcHY2X3BhcnQgPSAnMCc7CgoJCQkJLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIHZhbGlkCgkJCQkkdmFsdWUgPSBoZXhkZWMoJGlwdjZfcGFydCk7CgkJCQlpZiAoZGVjaGV4KCR2YWx1ZSkgIT09IHN0cnRvbG93ZXIoJGlwdjZfcGFydCkgfHwgJHZhbHVlIDwgMCB8fCAkdmFsdWUgPiAweEZGRkYpCgkJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWlmIChjb3VudCgkaXB2NCkgPT09IDQpCgkJCXsKCQkJCWZvcmVhY2ggKCRpcHY0IGFzICRpcHY0X3BhcnQpCgkJCQl7CgkJCQkJJHZhbHVlID0gKGludCkgJGlwdjRfcGFydDsKCQkJCQlpZiAoKHN0cmluZykgJHZhbHVlICE9PSAkaXB2NF9wYXJ0IHx8ICR2YWx1ZSA8IDAgfHwgJHZhbHVlID4gMHhGRikKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQl9CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBJUCBpcyBhIHZhbGlkIElQdjYgYWRkcmVzcwoJICoKCSAqIEBjb2RlQ292ZXJhZ2VJZ25vcmUKCSAqIEBkZXByZWNhdGVkIFVzZSB7QHNlZSBTaW1wbGVQaWVfTmV0X0lQdjY6OmNoZWNrX2lwdjYoKX0gaW5zdGVhZAoJICogQHNlZSBjaGVja19pcHY2CgkgKiBAcGFyYW0gc3RyaW5nICRpcCBBbiBJUHY2IGFkZHJlc3MKCSAqIEByZXR1cm4gYm9vbCB0cnVlIGlmICRpcCBpcyBhIHZhbGlkIElQdjYgYWRkcmVzcwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrSVB2NigkaXApCgl7CgkJcmV0dXJuIHNlbGY6OmNoZWNrX2lwdjYoJGlwKTsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Parse/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Parse/Date.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogRGF0ZSBQYXJzZXIKICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIFBhcnNpbmcKICovCmNsYXNzIFNpbXBsZVBpZV9QYXJzZV9EYXRlCnsKCS8qKgoJICogSW5wdXQgZGF0YQoJICoKCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGRhdGU7CgoJLyoqCgkgKiBMaXN0IG9mIGRheXMsIGNhbGVuZGFyIGRheSBuYW1lID0+IG9yZGluYWwgZGF5IG51bWJlciBpbiB0aGUgd2VlawoJICoKCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkgKiBAdmFyIGFycmF5CgkgKi8KCXZhciAkZGF5ID0gYXJyYXkoCgkJLy8gRW5nbGlzaAoJCSdtb24nID0+IDEsCgkJJ21vbmRheScgPT4gMSwKCQkndHVlJyA9PiAyLAoJCSd0dWVzZGF5JyA9PiAyLAoJCSd3ZWQnID0+IDMsCgkJJ3dlZG5lc2RheScgPT4gMywKCQkndGh1JyA9PiA0LAoJCSd0aHVyc2RheScgPT4gNCwKCQknZnJpJyA9PiA1LAoJCSdmcmlkYXknID0+IDUsCgkJJ3NhdCcgPT4gNiwKCQknc2F0dXJkYXknID0+IDYsCgkJJ3N1bicgPT4gNywKCQknc3VuZGF5JyA9PiA3LAoJCS8vIER1dGNoCgkJJ21hYW5kYWcnID0+IDEsCgkJJ2RpbnNkYWcnID0+IDIsCgkJJ3dvZW5zZGFnJyA9PiAzLAoJCSdkb25kZXJkYWcnID0+IDQsCgkJJ3ZyaWpkYWcnID0+IDUsCgkJJ3phdGVyZGFnJyA9PiA2LAoJCSd6b25kYWcnID0+IDcsCgkJLy8gRnJlbmNoCgkJJ2x1bmRpJyA9PiAxLAoJCSdtYXJkaScgPT4gMiwKCQknbWVyY3JlZGknID0+IDMsCgkJJ2pldWRpJyA9PiA0LAoJCSd2ZW5kcmVkaScgPT4gNSwKCQknc2FtZWRpJyA9PiA2LAoJCSdkaW1hbmNoZScgPT4gNywKCQkvLyBHZXJtYW4KCQknbW9udGFnJyA9PiAxLAoJCSdtbycgPT4gMSwKCQknZGllbnN0YWcnID0+IDIsCgkJJ2RpJyA9PiAyLAoJCSdtaXR0d29jaCcgPT4gMywKCQknbWknID0+IDMsCgkJJ2Rvbm5lcnN0YWcnID0+IDQsCgkJJ2RvJyA9PiA0LAoJCSdmcmVpdGFnJyA9PiA1LAoJCSdmcicgPT4gNSwKCQknc2Ftc3RhZycgPT4gNiwKCQknc2EnID0+IDYsCgkJJ3Nvbm5hYmVuZCcgPT4gNiwKCQkvLyBBRkFJSyBubyBzaG9ydCBmb3JtIGZvciBzb25uYWJlbmQKCQknc28nID0+IDcsCgkJJ3Nvbm50YWcnID0+IDcsCgkJLy8gSXRhbGlhbgoJCSdsdW5lZMOsJyA9PiAxLAoJCSdtYXJ0ZWTDrCcgPT4gMiwKCQknbWVyY29sZWTDrCcgPT4gMywKCQknZ2lvdmVkw6wnID0+IDQsCgkJJ3ZlbmVyZMOsJyA9PiA1LAoJCSdzYWJhdG8nID0+IDYsCgkJJ2RvbWVuaWNhJyA9PiA3LAoJCS8vIFNwYW5pc2gKCQknbHVuZXMnID0+IDEsCgkJJ21hcnRlcycgPT4gMiwKCQknbWnDqXJjb2xlcycgPT4gMywKCQknanVldmVzJyA9PiA0LAoJCSd2aWVybmVzJyA9PiA1LAoJCSdzw6FiYWRvJyA9PiA2LAoJCSdkb21pbmdvJyA9PiA3LAoJCS8vIEZpbm5pc2gKCQknbWFhbmFudGFpJyA9PiAxLAoJCSd0aWlzdGFpJyA9PiAyLAoJCSdrZXNraXZpaWtrbycgPT4gMywKCQkndG9yc3RhaScgPT4gNCwKCQkncGVyamFudGFpJyA9PiA1LAoJCSdsYXVhbnRhaScgPT4gNiwKCQknc3VubnVudGFpJyA9PiA3LAoJCS8vIEh1bmdhcmlhbgoJCSdow6l0ZsWRJyA9PiAxLAoJCSdrZWRkJyA9PiAyLAoJCSdzemVyZGEnID0+IDMsCgkJJ2Nzw7x0w7ZydG9rJyA9PiA0LAoJCSdww6ludGVrJyA9PiA1LAoJCSdzem9tYmF0JyA9PiA2LAoJCSd2YXPDoXJuYXAnID0+IDcsCgkJLy8gR3JlZWsKCQknzpTOtc+FJyA9PiAxLAoJCSfOpM+BzrknID0+IDIsCgkJJ86kzrXPhCcgPT4gMywKCQknzqDOtc68JyA9PiA0LAoJCSfOoM6xz4EnID0+IDUsCgkJJ86jzrHOsicgPT4gNiwKCQknzprPhc+BJyA9PiA3LAoJCS8vIFJ1c3NpYW4KCQkn0J/QvS4nID0+IDEsCgkJJ9CS0YIuJyA9PiAyLAoJCSfQodGALicgPT4gMywKCQkn0KfRgi4nID0+IDQsCgkJJ9Cf0YIuJyA9PiA1LAoJCSfQodCxLicgPT4gNiwKCQkn0JLRgS4nID0+IDcsCgkpOwoKCS8qKgoJICogTGlzdCBvZiBtb250aHMsIGNhbGVuZGFyIG1vbnRoIG5hbWUgPT4gY2FsZW5kYXIgbW9udGggbnVtYmVyCgkgKgoJICogQGFjY2VzcyBwcm90ZWN0ZWQKCSAqIEB2YXIgYXJyYXkKCSAqLwoJdmFyICRtb250aCA9IGFycmF5KAoJCS8vIEVuZ2xpc2gKCQknamFuJyA9PiAxLAoJCSdqYW51YXJ5JyA9PiAxLAoJCSdmZWInID0+IDIsCgkJJ2ZlYnJ1YXJ5JyA9PiAyLAoJCSdtYXInID0+IDMsCgkJJ21hcmNoJyA9PiAzLAoJCSdhcHInID0+IDQsCgkJJ2FwcmlsJyA9PiA0LAoJCSdtYXknID0+IDUsCgkJLy8gTm8gbG9uZyBmb3JtIG9mIE1heQoJCSdqdW4nID0+IDYsCgkJJ2p1bmUnID0+IDYsCgkJJ2p1bCcgPT4gNywKCQknanVseScgPT4gNywKCQknYXVnJyA9PiA4LAoJCSdhdWd1c3QnID0+IDgsCgkJJ3NlcCcgPT4gOSwKCQknc2VwdGVtYmVyJyA9PiA5LAoJCSdvY3QnID0+IDEwLAoJCSdvY3RvYmVyJyA9PiAxMCwKCQknbm92JyA9PiAxMSwKCQknbm92ZW1iZXInID0+IDExLAoJCSdkZWMnID0+IDEyLAoJCSdkZWNlbWJlcicgPT4gMTIsCgkJLy8gRHV0Y2gKCQknamFudWFyaScgPT4gMSwKCQknZmVicnVhcmknID0+IDIsCgkJJ21hYXJ0JyA9PiAzLAoJCSdhcHJpbCcgPT4gNCwKCQknbWVpJyA9PiA1LAoJCSdqdW5pJyA9PiA2LAoJCSdqdWxpJyA9PiA3LAoJCSdhdWd1c3R1cycgPT4gOCwKCQknc2VwdGVtYmVyJyA9PiA5LAoJCSdva3RvYmVyJyA9PiAxMCwKCQknbm92ZW1iZXInID0+IDExLAoJCSdkZWNlbWJlcicgPT4gMTIsCgkJLy8gRnJlbmNoCgkJJ2phbnZpZXInID0+IDEsCgkJJ2bDqXZyaWVyJyA9PiAyLAoJCSdtYXJzJyA9PiAzLAoJCSdhdnJpbCcgPT4gNCwKCQknbWFpJyA9PiA1LAoJCSdqdWluJyA9PiA2LAoJCSdqdWlsbGV0JyA9PiA3LAoJCSdhb8O7dCcgPT4gOCwKCQknc2VwdGVtYnJlJyA9PiA5LAoJCSdvY3RvYnJlJyA9PiAxMCwKCQknbm92ZW1icmUnID0+IDExLAoJCSdkw6ljZW1icmUnID0+IDEyLAoJCS8vIEdlcm1hbgoJCSdqYW51YXInID0+IDEsCgkJJ2phbicgPT4gMSwKCQknZmVicnVhcicgPT4gMiwKCQknZmViJyA9PiAyLAoJCSdtw6RyeicgPT4gMywKCQknbcOkcicgPT4gMywKCQknYXByaWwnID0+IDQsCgkJJ2FwcicgPT4gNCwKCQknbWFpJyA9PiA1LCAvLyBubyBzaG9ydCBmb3JtIGZvciBtYXkKCQknanVuaScgPT4gNiwKCQknanVuJyA9PiA2LAoJCSdqdWxpJyA9PiA3LAoJCSdqdWwnID0+IDcsCgkJJ2F1Z3VzdCcgPT4gOCwKCQknYXVnJyA9PiA4LAoJCSdzZXB0ZW1iZXInID0+IDksCgkJJ3NlcCcgPT4gOSwKCQknb2t0b2JlcicgPT4gMTAsCgkJJ29rdCcgPT4gMTAsCgkJJ25vdmVtYmVyJyA9PiAxMSwKCQknbm92JyA9PiAxMSwKCQknZGV6ZW1iZXInID0+IDEyLAoJCSdkZXonID0+IDEyLAoJCS8vIEl0YWxpYW4KCQknZ2VubmFpbycgPT4gMSwKCQknZmViYnJhaW8nID0+IDIsCgkJJ21hcnpvJyA9PiAzLAoJCSdhcHJpbGUnID0+IDQsCgkJJ21hZ2dpbycgPT4gNSwKCQknZ2l1Z25vJyA9PiA2LAoJCSdsdWdsaW8nID0+IDcsCgkJJ2Fnb3N0bycgPT4gOCwKCQknc2V0dGVtYnJlJyA9PiA5LAoJCSdvdHRvYnJlJyA9PiAxMCwKCQknbm92ZW1icmUnID0+IDExLAoJCSdkaWNlbWJyZScgPT4gMTIsCgkJLy8gU3BhbmlzaAoJCSdlbmVybycgPT4gMSwKCQknZmVicmVybycgPT4gMiwKCQknbWFyem8nID0+IDMsCgkJJ2FicmlsJyA9PiA0LAoJCSdtYXlvJyA9PiA1LAoJCSdqdW5pbycgPT4gNiwKCQknanVsaW8nID0+IDcsCgkJJ2Fnb3N0bycgPT4gOCwKCQknc2VwdGllbWJyZScgPT4gOSwKCQknc2V0aWVtYnJlJyA9PiA5LAoJCSdvY3R1YnJlJyA9PiAxMCwKCQknbm92aWVtYnJlJyA9PiAxMSwKCQknZGljaWVtYnJlJyA9PiAxMiwKCQkvLyBGaW5uaXNoCgkJJ3RhbW1pa3V1JyA9PiAxLAoJCSdoZWxtaWt1dScgPT4gMiwKCQknbWFhbGlza3V1JyA9PiAzLAoJCSdodWh0aWt1dScgPT4gNCwKCQkndG91a29rdXUnID0+IDUsCgkJJ2tlc8Oka3V1JyA9PiA2LAoJCSdoZWluw6RrdXUnID0+IDcsCgkJJ2Vsb2t1dScgPT4gOCwKCQknc3V1c2t1dScgPT4gOSwKCQknbG9rYWt1dScgPT4gMTAsCgkJJ21hcnJhcycgPT4gMTEsCgkJJ2pvdWx1a3V1JyA9PiAxMiwKCQkvLyBIdW5nYXJpYW4KCQknamFudcOhcicgPT4gMSwKCQknZmVicnXDoXInID0+IDIsCgkJJ23DoXJjaXVzJyA9PiAzLAoJCSfDoXByaWxpcycgPT4gNCwKCQknbcOhanVzJyA9PiA1LAoJCSdqw7puaXVzJyA9PiA2LAoJCSdqw7psaXVzJyA9PiA3LAoJCSdhdWd1c3p0dXMnID0+IDgsCgkJJ3N6ZXB0ZW1iZXInID0+IDksCgkJJ29rdMOzYmVyJyA9PiAxMCwKCQknbm92ZW1iZXInID0+IDExLAoJCSdkZWNlbWJlcicgPT4gMTIsCgkJLy8gR3JlZWsKCQknzpnOsc69JyA9PiAxLAoJCSfOps61zrInID0+IDIsCgkJJ86czqzPjicgPT4gMywKCQknzpzOsc+OJyA9PiAzLAoJCSfOkc+Az4EnID0+IDQsCgkJJ86czqzOuScgPT4gNSwKCQknzpzOsc+KJyA9PiA1LAoJCSfOnM6xzrknID0+IDUsCgkJJ86Zzr/Pjc69JyA9PiA2LAoJCSfOmc6/zr0nID0+IDYsCgkJJ86Zzr/Pjc67JyA9PiA3LAoJCSfOmc6/zrsnID0+IDcsCgkJJ86Rz43OsycgPT4gOCwKCQknzpHPhc6zJyA9PiA4LAoJCSfOo861z4AnID0+IDksCgkJJ86fzrrPhCcgPT4gMTAsCgkJJ86dzr/OrScgPT4gMTEsCgkJJ86UzrXOuicgPT4gMTIsCQkKCQkvLyBSdXNzaWFuCgkJJ9Cv0L3QsicgPT4gMSwKCQkn0Y/QvdCy0LDRgNGPJyA9PiAxLAoJCSfQpNC10LInID0+IDIsCgkJJ9GE0LXQstGA0LDQu9GPJyA9PiAyLAoJCSfQnNCw0YAnID0+IDMsCgkJJ9C80LDRgNGC0LAnID0+IDMsCgkJJ9CQ0L/RgCcgPT4gNCwKCQkn0LDQv9GA0LXQu9GPJyA9PiA0LAoJCSfQnNCw0LknID0+IDUsCgkJJ9C80LDRjycgPT4gNSwKCQkn0JjRjtC9JyA9PiA2LAoJCSfQuNGO0L3RjycgPT4gNiwKCQkn0JjRjtC7JyA9PiA3LAoJCSfQuNGO0LvRjycgPT4gNywKCQkn0JDQstCzJyA9PiA4LAoJCSfQsNCy0LPRg9GB0YLQsCcgPT4gOCwKCQkn0KHQtdC9JyA9PiA5LAoJCSfRgdC10L3RgtGP0LHRgNGPJyA9PiA5LAoJCSfQntC60YInID0+IDEwLAoJCSfQvtC60YLRj9Cx0YDRjycgPT4gMTAsCgkJJ9Cd0L7RjycgPT4gMTEsCgkJJ9C90L7Rj9Cx0YDRjycgPT4gMTEsCgkJJ9CU0LXQuicgPT4gMTIsCgkJJ9C00LXQutCw0LHRgNGPJyA9PiAxMiwKCgkpOwoKCS8qKgoJICogTGlzdCBvZiB0aW1lem9uZXMsIGFiYnJldmlhdGlvbiA9PiBvZmZzZXQgZnJvbSBVVEMKCSAqCgkgKiBAYWNjZXNzIHByb3RlY3RlZAoJICogQHZhciBhcnJheQoJICovCgl2YXIgJHRpbWV6b25lID0gYXJyYXkoCgkJJ0FDRFQnID0+IDM3ODAwLAoJCSdBQ0lUJyA9PiAyODgwMCwKCQknQUNTVCcgPT4gMzQyMDAsCgkJJ0FDVCcgPT4gLTE4MDAwLAoJCSdBQ1dEVCcgPT4gMzUxMDAsCgkJJ0FDV1NUJyA9PiAzMTUwMCwKCQknQUVEVCcgPT4gMzk2MDAsCgkJJ0FFU1QnID0+IDM2MDAwLAoJCSdBRlQnID0+IDE2MjAwLAoJCSdBS0RUJyA9PiAtMjg4MDAsCgkJJ0FLU1QnID0+IC0zMjQwMCwKCQknQU1EVCcgPT4gMTgwMDAsCgkJJ0FNVCcgPT4gLTE0NDAwLAoJCSdBTkFTVCcgPT4gNDY4MDAsCgkJJ0FOQVQnID0+IDQzMjAwLAoJCSdBUlQnID0+IC0xMDgwMCwKCQknQVpPU1QnID0+IC0zNjAwLAoJCSdBWlNUJyA9PiAxODAwMCwKCQknQVpUJyA9PiAxNDQwMCwKCQknQklPVCcgPT4gMjE2MDAsCgkJJ0JJVCcgPT4gLTQzMjAwLAoJCSdCT1QnID0+IC0xNDQwMCwKCQknQlJTVCcgPT4gLTcyMDAsCgkJJ0JSVCcgPT4gLTEwODAwLAoJCSdCU1QnID0+IDM2MDAsCgkJJ0JUVCcgPT4gMjE2MDAsCgkJJ0NBU1QnID0+IDE4MDAwLAoJCSdDQVQnID0+IDcyMDAsCgkJJ0NDVCcgPT4gMjM0MDAsCgkJJ0NEVCcgPT4gLTE4MDAwLAoJCSdDRURUJyA9PiA3MjAwLAoJCSdDRVNUJyA9PiA3MjAwLAoJCSdDRVQnID0+IDM2MDAsCgkJJ0NHU1QnID0+IC03MjAwLAoJCSdDR1QnID0+IC0xMDgwMCwKCQknQ0hBRFQnID0+IDQ5NTAwLAoJCSdDSEFTVCcgPT4gNDU5MDAsCgkJJ0NJU1QnID0+IC0yODgwMCwKCQknQ0tUJyA9PiAtMzYwMDAsCgkJJ0NMRFQnID0+IC0xMDgwMCwKCQknQ0xTVCcgPT4gLTE0NDAwLAoJCSdDT1QnID0+IC0xODAwMCwKCQknQ1NUJyA9PiAtMjE2MDAsCgkJJ0NWVCcgPT4gLTM2MDAsCgkJJ0NYVCcgPT4gMjUyMDAsCgkJJ0RBVlQnID0+IDI1MjAwLAoJCSdEVEFUJyA9PiAzNjAwMCwKCQknRUFEVCcgPT4gLTE4MDAwLAoJCSdFQVNUJyA9PiAtMjE2MDAsCgkJJ0VBVCcgPT4gMTA4MDAsCgkJJ0VDVCcgPT4gLTE4MDAwLAoJCSdFRFQnID0+IC0xNDQwMCwKCQknRUVTVCcgPT4gMTA4MDAsCgkJJ0VFVCcgPT4gNzIwMCwKCQknRUdUJyA9PiAtMzYwMCwKCQknRUtTVCcgPT4gMjE2MDAsCgkJJ0VTVCcgPT4gLTE4MDAwLAoJCSdGSlQnID0+IDQzMjAwLAoJCSdGS0RUJyA9PiAtMTA4MDAsCgkJJ0ZLU1QnID0+IC0xNDQwMCwKCQknRk5UJyA9PiAtNzIwMCwKCQknR0FMVCcgPT4gLTIxNjAwLAoJCSdHRURUJyA9PiAxNDQwMCwKCQknR0VTVCcgPT4gMTA4MDAsCgkJJ0dGVCcgPT4gLTEwODAwLAoJCSdHSUxUJyA9PiA0MzIwMCwKCQknR0lUJyA9PiAtMzI0MDAsCgkJJ0dTVCcgPT4gMTQ0MDAsCgkJJ0dTVCcgPT4gLTcyMDAsCgkJJ0dZVCcgPT4gLTE0NDAwLAoJCSdIQUEnID0+IC0xMDgwMCwKCQknSEFDJyA9PiAtMTgwMDAsCgkJJ0hBRFQnID0+IC0zMjQwMCwKCQknSEFFJyA9PiAtMTQ0MDAsCgkJJ0hBUCcgPT4gLTI1MjAwLAoJCSdIQVInID0+IC0yMTYwMCwKCQknSEFTVCcgPT4gLTM2MDAwLAoJCSdIQVQnID0+IC05MDAwLAoJCSdIQVknID0+IC0yODgwMCwKCQknSEtTVCcgPT4gMjg4MDAsCgkJJ0hNVCcgPT4gMTgwMDAsCgkJJ0hOQScgPT4gLTE0NDAwLAoJCSdITkMnID0+IC0yMTYwMCwKCQknSE5FJyA9PiAtMTgwMDAsCgkJJ0hOUCcgPT4gLTI4ODAwLAoJCSdITlInID0+IC0yNTIwMCwKCQknSE5UJyA9PiAtMTI2MDAsCgkJJ0hOWScgPT4gLTMyNDAwLAoJCSdJUkRUJyA9PiAxNjIwMCwKCQknSVJLU1QnID0+IDMyNDAwLAoJCSdJUktUJyA9PiAyODgwMCwKCQknSVJTVCcgPT4gMTI2MDAsCgkJJ0pGRFQnID0+IC0xMDgwMCwKCQknSkZTVCcgPT4gLTE0NDAwLAoJCSdKU1QnID0+IDMyNDAwLAoJCSdLR1NUJyA9PiAyMTYwMCwKCQknS0dUJyA9PiAxODAwMCwKCQknS09TVCcgPT4gMzk2MDAsCgkJJ0tPVlNUJyA9PiAyODgwMCwKCQknS09WVCcgPT4gMjUyMDAsCgkJJ0tSQVNUJyA9PiAyODgwMCwKCQknS1JBVCcgPT4gMjUyMDAsCgkJJ0tTVCcgPT4gMzI0MDAsCgkJJ0xIRFQnID0+IDM5NjAwLAoJCSdMSFNUJyA9PiAzNzgwMCwKCQknTElOVCcgPT4gNTA0MDAsCgkJJ0xLVCcgPT4gMjE2MDAsCgkJJ01BR1NUJyA9PiA0MzIwMCwKCQknTUFHVCcgPT4gMzk2MDAsCgkJJ01BV1QnID0+IDIxNjAwLAoJCSdNRFQnID0+IC0yMTYwMCwKCQknTUVTWicgPT4gNzIwMCwKCQknTUVaJyA9PiAzNjAwLAoJCSdNSFQnID0+IDQzMjAwLAoJCSdNSVQnID0+IC0zNDIwMCwKCQknTU5TVCcgPT4gMzI0MDAsCgkJJ01TRFQnID0+IDE0NDAwLAoJCSdNU1NUJyA9PiAxMDgwMCwKCQknTVNUJyA9PiAtMjUyMDAsCgkJJ01VVCcgPT4gMTQ0MDAsCgkJJ01WVCcgPT4gMTgwMDAsCgkJJ01ZVCcgPT4gMjg4MDAsCgkJJ05DVCcgPT4gMzk2MDAsCgkJJ05EVCcgPT4gLTkwMDAsCgkJJ05GVCcgPT4gNDE0MDAsCgkJJ05NSVQnID0+IDM2MDAwLAoJCSdOT1ZTVCcgPT4gMjUyMDAsCgkJJ05PVlQnID0+IDIxNjAwLAoJCSdOUFQnID0+IDIwNzAwLAoJCSdOUlQnID0+IDQzMjAwLAoJCSdOU1QnID0+IC0xMjYwMCwKCQknTlVUJyA9PiAtMzk2MDAsCgkJJ05aRFQnID0+IDQ2ODAwLAoJCSdOWlNUJyA9PiA0MzIwMCwKCQknT01TU1QnID0+IDI1MjAwLAoJCSdPTVNUJyA9PiAyMTYwMCwKCQknUERUJyA9PiAtMjUyMDAsCgkJJ1BFVCcgPT4gLTE4MDAwLAoJCSdQRVRTVCcgPT4gNDY4MDAsCgkJJ1BFVFQnID0+IDQzMjAwLAoJCSdQR1QnID0+IDM2MDAwLAoJCSdQSE9UJyA9PiA0NjgwMCwKCQknUEhUJyA9PiAyODgwMCwKCQknUEtUJyA9PiAxODAwMCwKCQknUE1EVCcgPT4gLTcyMDAsCgkJJ1BNU1QnID0+IC0xMDgwMCwKCQknUE9OVCcgPT4gMzk2MDAsCgkJJ1BTVCcgPT4gLTI4ODAwLAoJCSdQV1QnID0+IDMyNDAwLAoJCSdQWVNUJyA9PiAtMTA4MDAsCgkJJ1BZVCcgPT4gLTE0NDAwLAoJCSdSRVQnID0+IDE0NDAwLAoJCSdST1RUJyA9PiAtMTA4MDAsCgkJJ1NBTVNUJyA9PiAxODAwMCwKCQknU0FNVCcgPT4gMTQ0MDAsCgkJJ1NBU1QnID0+IDcyMDAsCgkJJ1NCVCcgPT4gMzk2MDAsCgkJJ1NDRFQnID0+IDQ2ODAwLAoJCSdTQ1NUJyA9PiA0MzIwMCwKCQknU0NUJyA9PiAxNDQwMCwKCQknU0VTVCcgPT4gMzYwMCwKCQknU0dUJyA9PiAyODgwMCwKCQknU0lUJyA9PiAyODgwMCwKCQknU1JUJyA9PiAtMTA4MDAsCgkJJ1NTVCcgPT4gLTM5NjAwLAoJCSdTWVNUJyA9PiAxMDgwMCwKCQknU1lUJyA9PiA3MjAwLAoJCSdURlQnID0+IDE4MDAwLAoJCSdUSEFUJyA9PiAtMzYwMDAsCgkJJ1RKVCcgPT4gMTgwMDAsCgkJJ1RLVCcgPT4gLTM2MDAwLAoJCSdUTVQnID0+IDE4MDAwLAoJCSdUT1QnID0+IDQ2ODAwLAoJCSdUUFQnID0+IDMyNDAwLAoJCSdUUlVUJyA9PiAzNjAwMCwKCQknVFZUJyA9PiA0MzIwMCwKCQknVFdUJyA9PiAyODgwMCwKCQknVVlTVCcgPT4gLTcyMDAsCgkJJ1VZVCcgPT4gLTEwODAwLAoJCSdVWlQnID0+IDE4MDAwLAoJCSdWRVQnID0+IC0xNDQwMCwKCQknVkxBU1QnID0+IDM5NjAwLAoJCSdWTEFUJyA9PiAzNjAwMCwKCQknVk9TVCcgPT4gMjE2MDAsCgkJJ1ZVVCcgPT4gMzk2MDAsCgkJJ1dBU1QnID0+IDcyMDAsCgkJJ1dBVCcgPT4gMzYwMCwKCQknV0RUJyA9PiAzMjQwMCwKCQknV0VTVCcgPT4gMzYwMCwKCQknV0ZUJyA9PiA0MzIwMCwKCQknV0lCJyA9PiAyNTIwMCwKCQknV0lUJyA9PiAzMjQwMCwKCQknV0lUQScgPT4gMjg4MDAsCgkJJ1dLU1QnID0+IDE4MDAwLAoJCSdXU1QnID0+IDI4ODAwLAoJCSdZQUtTVCcgPT4gMzYwMDAsCgkJJ1lBS1QnID0+IDMyNDAwLAoJCSdZQVBUJyA9PiAzNjAwMCwKCQknWUVLU1QnID0+IDIxNjAwLAoJCSdZRUtUJyA9PiAxODAwMCwKCSk7CgoJLyoqCgkgKiBDYWNoZWQgUENSRSBmb3IgU2ltcGxlUGllX1BhcnNlX0RhdGU6OiRkYXkKCSAqCgkgKiBAYWNjZXNzIHByb3RlY3RlZAoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICRkYXlfcGNyZTsKCgkvKioKCSAqIENhY2hlZCBQQ1JFIGZvciBTaW1wbGVQaWVfUGFyc2VfRGF0ZTo6JG1vbnRoCgkgKgoJICogQGFjY2VzcyBwcm90ZWN0ZWQKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXZhciAkbW9udGhfcGNyZTsKCgkvKioKCSAqIEFycmF5IG9mIHVzZXItYWRkZWQgY2FsbGJhY2sgbWV0aG9kcwoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBhcnJheQoJICovCgl2YXIgJGJ1aWx0X2luID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IG9mIHVzZXItYWRkZWQgY2FsbGJhY2sgbWV0aG9kcwoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBhcnJheQoJICovCgl2YXIgJHVzZXIgPSBhcnJheSgpOwoKCS8qKgoJICogQ3JlYXRlIG5ldyBTaW1wbGVQaWVfUGFyc2VfRGF0ZSBvYmplY3QsIGFuZCBzZXQgc2VsZjo6ZGF5X3BjcmUsCgkgKiBzZWxmOjptb250aF9wY3JlLCBhbmQgc2VsZjo6YnVpbHRfaW4KCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCXsKCQkkdGhpcy0+ZGF5X3BjcmUgPSAnKCcgLiBpbXBsb2RlKCd8JywgYXJyYXlfa2V5cygkdGhpcy0+ZGF5KSkgLiAnKSc7CgkJJHRoaXMtPm1vbnRoX3BjcmUgPSAnKCcgLiBpbXBsb2RlKCd8JywgYXJyYXlfa2V5cygkdGhpcy0+bW9udGgpKSAuICcpJzsKCgkJc3RhdGljICRjYWNoZTsKCQlpZiAoIWlzc2V0KCRjYWNoZVtnZXRfY2xhc3MoJHRoaXMpXSkpCgkJewoJCQkkYWxsX21ldGhvZHMgPSBnZXRfY2xhc3NfbWV0aG9kcygkdGhpcyk7CgoJCQlmb3JlYWNoICgkYWxsX21ldGhvZHMgYXMgJG1ldGhvZCkKCQkJewoJCQkJaWYgKHN0cnRvbG93ZXIoc3Vic3RyKCRtZXRob2QsIDAsIDUpKSA9PT0gJ2RhdGVfJykKCQkJCXsKCQkJCQkkY2FjaGVbZ2V0X2NsYXNzKCR0aGlzKV1bXSA9ICRtZXRob2Q7CgkJCQl9CgkJCX0KCQl9CgoJCWZvcmVhY2ggKCRjYWNoZVtnZXRfY2xhc3MoJHRoaXMpXSBhcyAkbWV0aG9kKQoJCXsKCQkJJHRoaXMtPmJ1aWx0X2luW10gPSAkbWV0aG9kOwoJCX0KCX0KCgkvKioKCSAqIEdldCB0aGUgb2JqZWN0CgkgKgoJICogQGFjY2VzcyBwdWJsaWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXQoKQoJewoJCXN0YXRpYyAkb2JqZWN0OwoJCWlmICghJG9iamVjdCkKCQl7CgkJCSRvYmplY3QgPSBuZXcgU2ltcGxlUGllX1BhcnNlX0RhdGU7CgkJfQoJCXJldHVybiAkb2JqZWN0OwoJfQoKCS8qKgoJICogUGFyc2UgYSBkYXRlCgkgKgoJICogQGZpbmFsCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHBhcmFtIHN0cmluZyAkZGF0ZSBEYXRlIHRvIHBhcnNlCgkgKiBAcmV0dXJuIGludCBUaW1lc3RhbXAgY29ycmVzcG9uZGluZyB0byBkYXRlIHN0cmluZywgb3IgZmFsc2Ugb24gZmFpbHVyZQoJICovCglwdWJsaWMgZnVuY3Rpb24gcGFyc2UoJGRhdGUpCgl7CgkJZm9yZWFjaCAoJHRoaXMtPnVzZXIgYXMgJG1ldGhvZCkKCQl7CgkJCWlmICgoJHJldHVybmVkID0gY2FsbF91c2VyX2Z1bmMoJG1ldGhvZCwgJGRhdGUpKSAhPT0gZmFsc2UpCgkJCXsKCQkJCXJldHVybiAkcmV0dXJuZWQ7CgkJCX0KCQl9CgoJCWZvcmVhY2ggKCR0aGlzLT5idWlsdF9pbiBhcyAkbWV0aG9kKQoJCXsKCQkJaWYgKCgkcmV0dXJuZWQgPSBjYWxsX3VzZXJfZnVuYyhhcnJheSgkdGhpcywgJG1ldGhvZCksICRkYXRlKSkgIT09IGZhbHNlKQoJCQl7CgkJCQlyZXR1cm4gJHJldHVybmVkOwoJCQl9CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBBZGQgYSBjYWxsYmFjayBtZXRob2QgdG8gcGFyc2UgYSBkYXRlCgkgKgoJICogQGZpbmFsCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHBhcmFtIGNhbGxiYWNrICRjYWxsYmFjawoJICovCglwdWJsaWMgZnVuY3Rpb24gYWRkX2NhbGxiYWNrKCRjYWxsYmFjaykKCXsKCQlpZiAoaXNfY2FsbGFibGUoJGNhbGxiYWNrKSkKCQl7CgkJCSR0aGlzLT51c2VyW10gPSAkY2FsbGJhY2s7CgkJfQoJCWVsc2UKCQl7CgkJCXRyaWdnZXJfZXJyb3IoJ1VzZXItc3VwcGxpZWQgZnVuY3Rpb24gbXVzdCBiZSBhIHZhbGlkIGNhbGxiYWNrJywgRV9VU0VSX1dBUk5JTkcpOwoJCX0KCX0KCgkvKioKCSAqIFBhcnNlIGEgc3VwZXJzZXQgb2YgVzNDLURURiAoYWxsb3dzIGh5cGhlbnMgYW5kIGNvbG9ucyB0byBiZSBvbWl0dGVkLCBhcwoJICogd2VsbCBhcyBhbGxvd2luZyBhbnkgb2YgdXBwZXIgb3IgbG93ZXIgY2FzZSAiVCIsIGhvcml6b250YWwgdGFicywgb3IKCSAqIHNwYWNlcyB0byBiZSB1c2VkIGFzIHRoZSB0aW1lIHNlcGFyYXRvciAoaW5jbHVkaW5nIG1vcmUgdGhhbiBvbmUpKQoJICoKCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkgKiBAcmV0dXJuIGludCBUaW1lc3RhbXAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRhdGVfdzNjZHRmKCRkYXRlKQoJewoJCXN0YXRpYyAkcGNyZTsKCQlpZiAoISRwY3JlKQoJCXsKCQkJJHllYXIgPSAnKFswLTldezR9KSc7CgkJCSRtb250aCA9ICRkYXkgPSAkaG91ciA9ICRtaW51dGUgPSAkc2Vjb25kID0gJyhbMC05XXsyfSknOwoJCQkkZGVjaW1hbCA9ICcoWzAtOV0qKSc7CgkJCSR6b25lID0gJyg/OihaKXwoWytcLV0pKFswLTldezEsMn0pOj8oWzAtOV17MSwyfSkpJzsKCQkJJHBjcmUgPSAnL14nIC4gJHllYXIgLiAnKD86LT8nIC4gJG1vbnRoIC4gJyg/Oi0/JyAuICRkYXkgLiAnKD86W1R0XHgwOVx4MjBdKycgLiAkaG91ciAuICcoPzo6PycgLiAkbWludXRlIC4gJyg/Ojo/JyAuICRzZWNvbmQgLiAnKD86LicgLiAkZGVjaW1hbCAuICcpPyk/KT8nIC4gJHpvbmUgLiAnKT8pPyk/JC8nOwoJCX0KCQlpZiAocHJlZ19tYXRjaCgkcGNyZSwgJGRhdGUsICRtYXRjaCkpCgkJewoJCQkvKgoJCQlDYXB0dXJpbmcgc3VicGF0dGVybnM6CgkJCTE6IFllYXIKCQkJMjogTW9udGgKCQkJMzogRGF5CgkJCTQ6IEhvdXIKCQkJNTogTWludXRlCgkJCTY6IFNlY29uZAoJCQk3OiBEZWNpbWFsIGZyYWN0aW9uIG9mIGEgc2Vjb25kCgkJCTg6IFp1bHUKCQkJOTogVGltZXpvbmUgwrEKCQkJMTA6IFRpbWV6b25lIGhvdXJzCgkJCTExOiBUaW1lem9uZSBtaW51dGVzCgkJCSovCgoJCQkvLyBGaWxsIGluIGVtcHR5IG1hdGNoZXMKCQkJZm9yICgkaSA9IGNvdW50KCRtYXRjaCk7ICRpIDw9IDM7ICRpKyspCgkJCXsKCQkJCSRtYXRjaFskaV0gPSAnMSc7CgkJCX0KCgkJCWZvciAoJGkgPSBjb3VudCgkbWF0Y2gpOyAkaSA8PSA3OyAkaSsrKQoJCQl7CgkJCQkkbWF0Y2hbJGldID0gJzAnOwoJCQl9CgoJCQkvLyBOdW1lcmljIHRpbWV6b25lCgkJCWlmIChpc3NldCgkbWF0Y2hbOV0pICYmICRtYXRjaFs5XSAhPT0gJycpCgkJCXsKCQkJCSR0aW1lem9uZSA9ICRtYXRjaFsxMF0gKiAzNjAwOwoJCQkJJHRpbWV6b25lICs9ICRtYXRjaFsxMV0gKiA2MDsKCQkJCWlmICgkbWF0Y2hbOV0gPT09ICctJykKCQkJCXsKCQkJCQkkdGltZXpvbmUgPSAwIC0gJHRpbWV6b25lOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRpbWV6b25lID0gMDsKCQkJfQoKCQkJLy8gQ29udmVydCB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gYW4gaW50ZWdlciwgdGFraW5nIGRlY2ltYWxzIGludG8gYWNjb3VudAoJCQkkc2Vjb25kID0gcm91bmQoKGludCkkbWF0Y2hbNl0gKyAoaW50KSRtYXRjaFs3XSAvICgxMCAqKiBzdHJsZW4oJG1hdGNoWzddKSkpOwoKCQkJcmV0dXJuIGdtbWt0aW1lKCRtYXRjaFs0XSwgJG1hdGNoWzVdLCAkc2Vjb25kLCAkbWF0Y2hbMl0sICRtYXRjaFszXSwgJG1hdGNoWzFdKSAtICR0aW1lem9uZTsKCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFJlbW92ZSBSRkM4MjIgY29tbWVudHMKCSAqCgkgKiBAYWNjZXNzIHByb3RlY3RlZAoJICogQHBhcmFtIHN0cmluZyAkZGF0YSBEYXRhIHRvIHN0cmlwIGNvbW1lbnRzIGZyb20KCSAqIEByZXR1cm4gc3RyaW5nIENvbW1lbnQgc3RyaXBwZWQgc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZW1vdmVfcmZjMjgyMl9jb21tZW50cygkc3RyaW5nKQoJewoJCSRzdHJpbmcgPSAoc3RyaW5nKSAkc3RyaW5nOwoJCSRwb3NpdGlvbiA9IDA7CgkJJGxlbmd0aCA9IHN0cmxlbigkc3RyaW5nKTsKCQkkZGVwdGggPSAwOwoKCQkkb3V0cHV0ID0gJyc7CgoJCXdoaWxlICgkcG9zaXRpb24gPCAkbGVuZ3RoICYmICgkcG9zID0gc3RycG9zKCRzdHJpbmcsICcoJywgJHBvc2l0aW9uKSkgIT09IGZhbHNlKQoJCXsKCQkJJG91dHB1dCAuPSBzdWJzdHIoJHN0cmluZywgJHBvc2l0aW9uLCAkcG9zIC0gJHBvc2l0aW9uKTsKCQkJJHBvc2l0aW9uID0gJHBvcyArIDE7CgkJCWlmICgkcG9zID09PSAwIHx8ICRzdHJpbmdbJHBvcyAtIDFdICE9PSAnXFwnKQoJCQl7CgkJCQkkZGVwdGgrKzsKCQkJCXdoaWxlICgkZGVwdGggJiYgJHBvc2l0aW9uIDwgJGxlbmd0aCkKCQkJCXsKCQkJCQkkcG9zaXRpb24gKz0gc3RyY3Nwbigkc3RyaW5nLCAnKCknLCAkcG9zaXRpb24pOwoJCQkJCWlmICgkc3RyaW5nWyRwb3NpdGlvbiAtIDFdID09PSAnXFwnKQoJCQkJCXsKCQkJCQkJJHBvc2l0aW9uKys7CgkJCQkJCWNvbnRpbnVlOwoJCQkJCX0KCQkJCQllbHNlaWYgKGlzc2V0KCRzdHJpbmdbJHBvc2l0aW9uXSkpCgkJCQkJewoJCQkJCQlzd2l0Y2ggKCRzdHJpbmdbJHBvc2l0aW9uXSkKCQkJCQkJewoJCQkJCQkJY2FzZSAnKCc6CgkJCQkJCQkJJGRlcHRoKys7CgkJCQkJCQkJYnJlYWs7CgoJCQkJCQkJY2FzZSAnKSc6CgkJCQkJCQkJJGRlcHRoLS07CgkJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJJHBvc2l0aW9uKys7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRvdXRwdXQgLj0gJygnOwoJCQl9CgkJfQoJCSRvdXRwdXQgLj0gc3Vic3RyKCRzdHJpbmcsICRwb3NpdGlvbik7CgoJCXJldHVybiAkb3V0cHV0OwoJfQoKCS8qKgoJICogUGFyc2UgUkZDMjgyMidzIGRhdGUgZm9ybWF0CgkgKgoJICogQGFjY2VzcyBwcm90ZWN0ZWQKCSAqIEByZXR1cm4gaW50IFRpbWVzdGFtcAoJICovCglwdWJsaWMgZnVuY3Rpb24gZGF0ZV9yZmMyODIyKCRkYXRlKQoJewoJCXN0YXRpYyAkcGNyZTsKCQlpZiAoISRwY3JlKQoJCXsKCQkJJHdzcCA9ICdbXHgwOVx4MjBdJzsKCQkJJGZ3cyA9ICcoPzonIC4gJHdzcCAuICcrfCcgLiAkd3NwIC4gJyooPzpceDBEXHgwQScgLiAkd3NwIC4gJyspKyknOwoJCQkkb3B0aW9uYWxfZndzID0gJGZ3cyAuICc/JzsKCQkJJGRheV9uYW1lID0gJHRoaXMtPmRheV9wY3JlOwoJCQkkbW9udGggPSAkdGhpcy0+bW9udGhfcGNyZTsKCQkJJGRheSA9ICcoWzAtOV17MSwyfSknOwoJCQkkaG91ciA9ICRtaW51dGUgPSAkc2Vjb25kID0gJyhbMC05XXsyfSknOwoJCQkkeWVhciA9ICcoWzAtOV17Miw0fSknOwoJCQkkbnVtX3pvbmUgPSAnKFsrXC1dKShbMC05XXsyfSkoWzAtOV17Mn0pJzsKCQkJJGNoYXJhY3Rlcl96b25lID0gJyhbQS1aXXsxLDV9KSc7CgkJCSR6b25lID0gJyg/OicgLiAkbnVtX3pvbmUgLiAnfCcgLiAkY2hhcmFjdGVyX3pvbmUgLiAnKSc7CgkJCSRwY3JlID0gJy8oPzonIC4gJG9wdGlvbmFsX2Z3cyAuICRkYXlfbmFtZSAuICRvcHRpb25hbF9md3MgLiAnLCk/JyAuICRvcHRpb25hbF9md3MgLiAkZGF5IC4gJGZ3cyAuICRtb250aCAuICRmd3MgLiAkeWVhciAuICRmd3MgLiAkaG91ciAuICRvcHRpb25hbF9md3MgLiAnOicgLiAkb3B0aW9uYWxfZndzIC4gJG1pbnV0ZSAuICcoPzonIC4gJG9wdGlvbmFsX2Z3cyAuICc6JyAuICRvcHRpb25hbF9md3MgLiAkc2Vjb25kIC4gJyk/JyAuICRmd3MgLiAkem9uZSAuICcvaSc7CgkJfQoJCWlmIChwcmVnX21hdGNoKCRwY3JlLCAkdGhpcy0+cmVtb3ZlX3JmYzI4MjJfY29tbWVudHMoJGRhdGUpLCAkbWF0Y2gpKQoJCXsKCQkJLyoKCQkJQ2FwdHVyaW5nIHN1YnBhdHRlcm5zOgoJCQkxOiBEYXkgbmFtZQoJCQkyOiBEYXkKCQkJMzogTW9udGgKCQkJNDogWWVhcgoJCQk1OiBIb3VyCgkJCTY6IE1pbnV0ZQoJCQk3OiBTZWNvbmQKCQkJODogVGltZXpvbmUgwrEKCQkJOTogVGltZXpvbmUgaG91cnMKCQkJMTA6IFRpbWV6b25lIG1pbnV0ZXMKCQkJMTE6IEFscGhhYmV0aWMgdGltZXpvbmUKCQkJKi8KCgkJCS8vIEZpbmQgdGhlIG1vbnRoIG51bWJlcgoJCQkkbW9udGggPSAkdGhpcy0+bW9udGhbc3RydG9sb3dlcigkbWF0Y2hbM10pXTsKCgkJCS8vIE51bWVyaWMgdGltZXpvbmUKCQkJaWYgKCRtYXRjaFs4XSAhPT0gJycpCgkJCXsKCQkJCSR0aW1lem9uZSA9ICRtYXRjaFs5XSAqIDM2MDA7CgkJCQkkdGltZXpvbmUgKz0gJG1hdGNoWzEwXSAqIDYwOwoJCQkJaWYgKCRtYXRjaFs4XSA9PT0gJy0nKQoJCQkJewoJCQkJCSR0aW1lem9uZSA9IDAgLSAkdGltZXpvbmU7CgkJCQl9CgkJCX0KCQkJLy8gQ2hhcmFjdGVyIHRpbWV6b25lCgkJCWVsc2VpZiAoaXNzZXQoJHRoaXMtPnRpbWV6b25lW3N0cnRvdXBwZXIoJG1hdGNoWzExXSldKSkKCQkJewoJCQkJJHRpbWV6b25lID0gJHRoaXMtPnRpbWV6b25lW3N0cnRvdXBwZXIoJG1hdGNoWzExXSldOwoJCQl9CgkJCS8vIEFzc3VtZSBldmVyeXRoaW5nIGVsc2UgdG8gYmUgLTAwMDAKCQkJZWxzZQoJCQl7CgkJCQkkdGltZXpvbmUgPSAwOwoJCQl9CgoJCQkvLyBEZWFsIHdpdGggMi8zIGRpZ2l0IHllYXJzCgkJCWlmICgkbWF0Y2hbNF0gPCA1MCkKCQkJewoJCQkJJG1hdGNoWzRdICs9IDIwMDA7CgkJCX0KCQkJZWxzZWlmICgkbWF0Y2hbNF0gPCAxMDAwKQoJCQl7CgkJCQkkbWF0Y2hbNF0gKz0gMTkwMDsKCQkJfQoKCQkJLy8gU2Vjb25kIGlzIG9wdGlvbmFsLCBpZiBpdCBpcyBlbXB0eSBzZXQgaXQgdG8gemVybwoJCQlpZiAoJG1hdGNoWzddICE9PSAnJykKCQkJewoJCQkJJHNlY29uZCA9ICRtYXRjaFs3XTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRzZWNvbmQgPSAwOwoJCQl9CgoJCQlyZXR1cm4gZ21ta3RpbWUoJG1hdGNoWzVdLCAkbWF0Y2hbNl0sICRzZWNvbmQsICRtb250aCwgJG1hdGNoWzJdLCAkbWF0Y2hbNF0pIC0gJHRpbWV6b25lOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogUGFyc2UgUkZDODUwJ3MgZGF0ZSBmb3JtYXQKCSAqCgkgKiBAYWNjZXNzIHByb3RlY3RlZAoJICogQHJldHVybiBpbnQgVGltZXN0YW1wCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBkYXRlX3JmYzg1MCgkZGF0ZSkKCXsKCQlzdGF0aWMgJHBjcmU7CgkJaWYgKCEkcGNyZSkKCQl7CgkJCSRzcGFjZSA9ICdbXHgwOVx4MjBdKyc7CgkJCSRkYXlfbmFtZSA9ICR0aGlzLT5kYXlfcGNyZTsKCQkJJG1vbnRoID0gJHRoaXMtPm1vbnRoX3BjcmU7CgkJCSRkYXkgPSAnKFswLTldezEsMn0pJzsKCQkJJHllYXIgPSAkaG91ciA9ICRtaW51dGUgPSAkc2Vjb25kID0gJyhbMC05XXsyfSknOwoJCQkkem9uZSA9ICcoW0EtWl17MSw1fSknOwoJCQkkcGNyZSA9ICcvXicgLiAkZGF5X25hbWUgLiAnLCcgLiAkc3BhY2UgLiAkZGF5IC4gJy0nIC4gJG1vbnRoIC4gJy0nIC4gJHllYXIgLiAkc3BhY2UgLiAkaG91ciAuICc6JyAuICRtaW51dGUgLiAnOicgLiAkc2Vjb25kIC4gJHNwYWNlIC4gJHpvbmUgLiAnJC9pJzsKCQl9CgkJaWYgKHByZWdfbWF0Y2goJHBjcmUsICRkYXRlLCAkbWF0Y2gpKQoJCXsKCQkJLyoKCQkJQ2FwdHVyaW5nIHN1YnBhdHRlcm5zOgoJCQkxOiBEYXkgbmFtZQoJCQkyOiBEYXkKCQkJMzogTW9udGgKCQkJNDogWWVhcgoJCQk1OiBIb3VyCgkJCTY6IE1pbnV0ZQoJCQk3OiBTZWNvbmQKCQkJODogVGltZXpvbmUKCQkJKi8KCgkJCS8vIE1vbnRoCgkJCSRtb250aCA9ICR0aGlzLT5tb250aFtzdHJ0b2xvd2VyKCRtYXRjaFszXSldOwoKCQkJLy8gQ2hhcmFjdGVyIHRpbWV6b25lCgkJCWlmIChpc3NldCgkdGhpcy0+dGltZXpvbmVbc3RydG91cHBlcigkbWF0Y2hbOF0pXSkpCgkJCXsKCQkJCSR0aW1lem9uZSA9ICR0aGlzLT50aW1lem9uZVtzdHJ0b3VwcGVyKCRtYXRjaFs4XSldOwoJCQl9CgkJCS8vIEFzc3VtZSBldmVyeXRoaW5nIGVsc2UgdG8gYmUgLTAwMDAKCQkJZWxzZQoJCQl7CgkJCQkkdGltZXpvbmUgPSAwOwoJCQl9CgoJCQkvLyBEZWFsIHdpdGggMiBkaWdpdCB5ZWFyCgkJCWlmICgkbWF0Y2hbNF0gPCA1MCkKCQkJewoJCQkJJG1hdGNoWzRdICs9IDIwMDA7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkbWF0Y2hbNF0gKz0gMTkwMDsKCQkJfQoKCQkJcmV0dXJuIGdtbWt0aW1lKCRtYXRjaFs1XSwgJG1hdGNoWzZdLCAkbWF0Y2hbN10sICRtb250aCwgJG1hdGNoWzJdLCAkbWF0Y2hbNF0pIC0gJHRpbWV6b25lOwoJCX0KCgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogUGFyc2UgQzk5J3MgYXNjdGltZSgpJ3MgZGF0ZSBmb3JtYXQKCSAqCgkgKiBAYWNjZXNzIHByb3RlY3RlZAoJICogQHJldHVybiBpbnQgVGltZXN0YW1wCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBkYXRlX2FzY3RpbWUoJGRhdGUpCgl7CgkJc3RhdGljICRwY3JlOwoJCWlmICghJHBjcmUpCgkJewoJCQkkc3BhY2UgPSAnW1x4MDlceDIwXSsnOwoJCQkkd2RheV9uYW1lID0gJHRoaXMtPmRheV9wY3JlOwoJCQkkbW9uX25hbWUgPSAkdGhpcy0+bW9udGhfcGNyZTsKCQkJJGRheSA9ICcoWzAtOV17MSwyfSknOwoJCQkkaG91ciA9ICRzZWMgPSAkbWluID0gJyhbMC05XXsyfSknOwoJCQkkeWVhciA9ICcoWzAtOV17NH0pJzsKCQkJJHRlcm1pbmF0b3IgPSAnXHgwQT9ceDAwPyc7CgkJCSRwY3JlID0gJy9eJyAuICR3ZGF5X25hbWUgLiAkc3BhY2UgLiAkbW9uX25hbWUgLiAkc3BhY2UgLiAkZGF5IC4gJHNwYWNlIC4gJGhvdXIgLiAnOicgLiAkbWluIC4gJzonIC4gJHNlYyAuICRzcGFjZSAuICR5ZWFyIC4gJHRlcm1pbmF0b3IgLiAnJC9pJzsKCQl9CgkJaWYgKHByZWdfbWF0Y2goJHBjcmUsICRkYXRlLCAkbWF0Y2gpKQoJCXsKCQkJLyoKCQkJQ2FwdHVyaW5nIHN1YnBhdHRlcm5zOgoJCQkxOiBEYXkgbmFtZQoJCQkyOiBNb250aAoJCQkzOiBEYXkKCQkJNDogSG91cgoJCQk1OiBNaW51dGUKCQkJNjogU2Vjb25kCgkJCTc6IFllYXIKCQkJKi8KCgkJCSRtb250aCA9ICR0aGlzLT5tb250aFtzdHJ0b2xvd2VyKCRtYXRjaFsyXSldOwoJCQlyZXR1cm4gZ21ta3RpbWUoJG1hdGNoWzRdLCAkbWF0Y2hbNV0sICRtYXRjaFs2XSwgJG1vbnRoLCAkbWF0Y2hbM10sICRtYXRjaFs3XSk7CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBQYXJzZSBkYXRlcyB1c2luZyBzdHJ0b3RpbWUoKQoJICoKCSAqIEBhY2Nlc3MgcHJvdGVjdGVkCgkgKiBAcmV0dXJuIGludCBUaW1lc3RhbXAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRhdGVfc3RydG90aW1lKCRkYXRlKQoJewoJCSRzdHJ0b3RpbWUgPSBzdHJ0b3RpbWUoJGRhdGUpOwoJCWlmICgkc3RydG90aW1lID09PSAtMSB8fCAkc3RydG90aW1lID09PSBmYWxzZSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCXJldHVybiAkc3RydG90aW1lOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBQYXJzZXMgWE1MIGludG8gc29tZXRoaW5nIHNhbmUKICoKICoKICogVGhpcyBjbGFzcyBjYW4gYmUgb3ZlcmxvYWRlZCB3aXRoIHtAc2VlIFNpbXBsZVBpZTo6c2V0X3BhcnNlcl9jbGFzcygpfQogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQHN1YnBhY2thZ2UgUGFyc2luZwogKi8KY2xhc3MgU2ltcGxlUGllX1BhcnNlcgp7Cgl2YXIgJGVycm9yX2NvZGU7Cgl2YXIgJGVycm9yX3N0cmluZzsKCXZhciAkY3VycmVudF9saW5lOwoJdmFyICRjdXJyZW50X2NvbHVtbjsKCXZhciAkY3VycmVudF9ieXRlOwoJdmFyICRzZXBhcmF0b3IgPSAnICc7Cgl2YXIgJG5hbWVzcGFjZSA9IGFycmF5KCcnKTsKCXZhciAkZWxlbWVudCA9IGFycmF5KCcnKTsKCXZhciAkeG1sX2Jhc2UgPSBhcnJheSgnJyk7Cgl2YXIgJHhtbF9iYXNlX2V4cGxpY2l0ID0gYXJyYXkoZmFsc2UpOwoJdmFyICR4bWxfbGFuZyA9IGFycmF5KCcnKTsKCXZhciAkZGF0YSA9IGFycmF5KCk7Cgl2YXIgJGRhdGFzID0gYXJyYXkoYXJyYXkoKSk7Cgl2YXIgJGN1cnJlbnRfeGh0bWxfY29uc3RydWN0ID0gLTE7Cgl2YXIgJGVuY29kaW5nOwoJcHJvdGVjdGVkICRyZWdpc3RyeTsKCglwdWJsaWMgZnVuY3Rpb24gc2V0X3JlZ2lzdHJ5KFNpbXBsZVBpZV9SZWdpc3RyeSAkcmVnaXN0cnkpCgl7CgkJJHRoaXMtPnJlZ2lzdHJ5ID0gJHJlZ2lzdHJ5OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwYXJzZSgmJGRhdGEsICRlbmNvZGluZywgJHVybCA9ICcnKQoJewoJCWlmIChjbGFzc19leGlzdHMoJ0RPTVhwYXRoJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdNZjJccGFyc2UnKSkgewoJCQkkZG9jID0gbmV3IERPTURvY3VtZW50KCk7CgkJCUAkZG9jLT5sb2FkSFRNTCgkZGF0YSk7CgkJCSR4cGF0aCA9IG5ldyBET01YcGF0aCgkZG9jKTsKCQkJLy8gQ2hlY2sgZm9yIGJvdGggaC1mZWVkIGFuZCBoLWVudHJ5LCBhcyBib3RoIGEgZmVlZCB3aXRoIG5vIGVudHJpZXMKCQkJLy8gYW5kIGEgbGlzdCBvZiBlbnRyaWVzIHdpdGhvdXQgYW4gaC1mZWVkIHdyYXBwZXIgYXJlIGJvdGggdmFsaWQuCgkJCSRxdWVyeSA9ICcvLypbY29udGFpbnMoY29uY2F0KCIgIiwgQGNsYXNzLCAiICIpLCAiIGgtZmVlZCAiKSBvciAnLgoJCQkJJ2NvbnRhaW5zKGNvbmNhdCgiICIsIEBjbGFzcywgIiAiKSwgIiBoLWVudHJ5ICIpXSc7CgkJCSRyZXN1bHQgPSAkeHBhdGgtPnF1ZXJ5KCRxdWVyeSk7CgkJCWlmICgkcmVzdWx0LT5sZW5ndGggIT09IDApIHsKCQkJCXJldHVybiAkdGhpcy0+cGFyc2VfbWljcm9mb3JtYXRzKCRkYXRhLCAkdXJsKTsKCQkJfQoJCX0KCgkJLy8gVXNlIFVURi04IGlmIHdlIGdldCBwYXNzZWQgVVMtQVNDSUksIGFzIGV2ZXJ5IFVTLUFTQ0lJIGNoYXJhY3RlciBpcyBhIFVURi04IGNoYXJhY3RlcgoJCWlmIChzdHJ0b3VwcGVyKCRlbmNvZGluZykgPT09ICdVUy1BU0NJSScpCgkJewoJCQkkdGhpcy0+ZW5jb2RpbmcgPSAnVVRGLTgnOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+ZW5jb2RpbmcgPSAkZW5jb2Rpbmc7CgkJfQoKCQkvLyBTdHJpcCBCT006CgkJLy8gVVRGLTMyIEJpZyBFbmRpYW4gQk9NCgkJaWYgKHN1YnN0cigkZGF0YSwgMCwgNCkgPT09ICJceDAwXHgwMFx4RkVceEZGIikKCQl7CgkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCA0KTsKCQl9CgkJLy8gVVRGLTMyIExpdHRsZSBFbmRpYW4gQk9NCgkJZWxzZWlmIChzdWJzdHIoJGRhdGEsIDAsIDQpID09PSAiXHhGRlx4RkVceDAwXHgwMCIpCgkJewoJCQkkZGF0YSA9IHN1YnN0cigkZGF0YSwgNCk7CgkJfQoJCS8vIFVURi0xNiBCaWcgRW5kaWFuIEJPTQoJCWVsc2VpZiAoc3Vic3RyKCRkYXRhLCAwLCAyKSA9PT0gIlx4RkVceEZGIikKCQl7CgkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCAyKTsKCQl9CgkJLy8gVVRGLTE2IExpdHRsZSBFbmRpYW4gQk9NCgkJZWxzZWlmIChzdWJzdHIoJGRhdGEsIDAsIDIpID09PSAiXHhGRlx4RkUiKQoJCXsKCQkJJGRhdGEgPSBzdWJzdHIoJGRhdGEsIDIpOwoJCX0KCQkvLyBVVEYtOCBCT00KCQllbHNlaWYgKHN1YnN0cigkZGF0YSwgMCwgMykgPT09ICJceEVGXHhCQlx4QkYiKQoJCXsKCQkJJGRhdGEgPSBzdWJzdHIoJGRhdGEsIDMpOwoJCX0KCgkJaWYgKHN1YnN0cigkZGF0YSwgMCwgNSkgPT09ICc8P3htbCcgJiYgc3Ryc3BuKHN1YnN0cigkZGF0YSwgNSwgMSksICJceDA5XHgwQVx4MERceDIwIikgJiYgKCRwb3MgPSBzdHJwb3MoJGRhdGEsICc/PicpKSAhPT0gZmFsc2UpCgkJewoJCQkkZGVjbGFyYXRpb24gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnWE1MX0RlY2xhcmF0aW9uX1BhcnNlcicsIGFycmF5KHN1YnN0cigkZGF0YSwgNSwgJHBvcyAtIDUpKSk7CgkJCWlmICgkZGVjbGFyYXRpb24tPnBhcnNlKCkpCgkJCXsKCQkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCAkcG9zICsgMik7CgkJCQkkZGF0YSA9ICc8P3htbCB2ZXJzaW9uPSInIC4gJGRlY2xhcmF0aW9uLT52ZXJzaW9uIC4gJyIgZW5jb2Rpbmc9IicgLiAkZW5jb2RpbmcgLiAnIiBzdGFuZGFsb25lPSInIC4gKCgkZGVjbGFyYXRpb24tPnN0YW5kYWxvbmUpID8gJ3llcycgOiAnbm8nKSAuICciPz4nIC4iXG4iLiAkdGhpcy0+ZGVjbGFyZV9odG1sX2VudGl0aWVzKCkgLiAkZGF0YTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5lcnJvcl9zdHJpbmcgPSAnU2ltcGxlUGllIGJ1ZyEgUGxlYXNlIHJlcG9ydCB0aGlzISc7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgoJCSRyZXR1cm4gPSB0cnVlOwoKCQlzdGF0aWMgJHhtbF9pc19zYW5lID0gbnVsbDsKCQlpZiAoJHhtbF9pc19zYW5lID09PSBudWxsKQoJCXsKCQkJJHBhcnNlcl9jaGVjayA9IHhtbF9wYXJzZXJfY3JlYXRlKCk7CgkJCXhtbF9wYXJzZV9pbnRvX3N0cnVjdCgkcGFyc2VyX2NoZWNrLCAnPGZvbz4mYW1wOzwvZm9vPicsICR2YWx1ZXMpOwoJCQl4bWxfcGFyc2VyX2ZyZWUoJHBhcnNlcl9jaGVjayk7CgkJCSR4bWxfaXNfc2FuZSA9IGlzc2V0KCR2YWx1ZXNbMF1bJ3ZhbHVlJ10pOwoJCX0KCgkJLy8gQ3JlYXRlIHRoZSBwYXJzZXIKCQlpZiAoJHhtbF9pc19zYW5lKQoJCXsKCQkJJHhtbCA9IHhtbF9wYXJzZXJfY3JlYXRlX25zKCR0aGlzLT5lbmNvZGluZywgJHRoaXMtPnNlcGFyYXRvcik7CgkJCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkeG1sLCBYTUxfT1BUSU9OX1NLSVBfV0hJVEUsIDEpOwoJCQl4bWxfcGFyc2VyX3NldF9vcHRpb24oJHhtbCwgWE1MX09QVElPTl9DQVNFX0ZPTERJTkcsIDApOwoJCQl4bWxfc2V0X29iamVjdCgkeG1sLCAkdGhpcyk7CgkJCXhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcigkeG1sLCAnY2RhdGEnKTsKCQkJeG1sX3NldF9lbGVtZW50X2hhbmRsZXIoJHhtbCwgJ3RhZ19vcGVuJywgJ3RhZ19jbG9zZScpOwoKCQkJLy8gUGFyc2UhCgkJCWlmICgheG1sX3BhcnNlKCR4bWwsICRkYXRhLCB0cnVlKSkKCQkJewoJCQkJJHRoaXMtPmVycm9yX2NvZGUgPSB4bWxfZ2V0X2Vycm9yX2NvZGUoJHhtbCk7CgkJCQkkdGhpcy0+ZXJyb3Jfc3RyaW5nID0geG1sX2Vycm9yX3N0cmluZygkdGhpcy0+ZXJyb3JfY29kZSk7CgkJCQkkcmV0dXJuID0gZmFsc2U7CgkJCX0KCQkJJHRoaXMtPmN1cnJlbnRfbGluZSA9IHhtbF9nZXRfY3VycmVudF9saW5lX251bWJlcigkeG1sKTsKCQkJJHRoaXMtPmN1cnJlbnRfY29sdW1uID0geG1sX2dldF9jdXJyZW50X2NvbHVtbl9udW1iZXIoJHhtbCk7CgkJCSR0aGlzLT5jdXJyZW50X2J5dGUgPSB4bWxfZ2V0X2N1cnJlbnRfYnl0ZV9pbmRleCgkeG1sKTsKCQkJeG1sX3BhcnNlcl9mcmVlKCR4bWwpOwoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgoJCWxpYnhtbF9jbGVhcl9lcnJvcnMoKTsKCQkkeG1sID0gbmV3IFhNTFJlYWRlcigpOwoJCSR4bWwtPnhtbCgkZGF0YSk7CgkJd2hpbGUgKEAkeG1sLT5yZWFkKCkpCgkJewoJCQlzd2l0Y2ggKCR4bWwtPm5vZGVUeXBlKQoJCQl7CgoJCQkJY2FzZSBjb25zdGFudCgnWE1MUmVhZGVyOjpFTkRfRUxFTUVOVCcpOgoJCQkJCWlmICgkeG1sLT5uYW1lc3BhY2VVUkkgIT09ICcnKQoJCQkJCXsKCQkJCQkJJHRhZ05hbWUgPSAkeG1sLT5uYW1lc3BhY2VVUkkgLiAkdGhpcy0+c2VwYXJhdG9yIC4gJHhtbC0+bG9jYWxOYW1lOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkdGFnTmFtZSA9ICR4bWwtPmxvY2FsTmFtZTsKCQkJCQl9CgkJCQkJJHRoaXMtPnRhZ19jbG9zZShudWxsLCAkdGFnTmFtZSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlIGNvbnN0YW50KCdYTUxSZWFkZXI6OkVMRU1FTlQnKToKCQkJCQkkZW1wdHkgPSAkeG1sLT5pc0VtcHR5RWxlbWVudDsKCQkJCQlpZiAoJHhtbC0+bmFtZXNwYWNlVVJJICE9PSAnJykKCQkJCQl7CgkJCQkJCSR0YWdOYW1lID0gJHhtbC0+bmFtZXNwYWNlVVJJIC4gJHRoaXMtPnNlcGFyYXRvciAuICR4bWwtPmxvY2FsTmFtZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHRhZ05hbWUgPSAkeG1sLT5sb2NhbE5hbWU7CgkJCQkJfQoJCQkJCSRhdHRyaWJ1dGVzID0gYXJyYXkoKTsKCQkJCQl3aGlsZSAoJHhtbC0+bW92ZVRvTmV4dEF0dHJpYnV0ZSgpKQoJCQkJCXsKCQkJCQkJaWYgKCR4bWwtPm5hbWVzcGFjZVVSSSAhPT0gJycpCgkJCQkJCXsKCQkJCQkJCSRhdHRyTmFtZSA9ICR4bWwtPm5hbWVzcGFjZVVSSSAuICR0aGlzLT5zZXBhcmF0b3IgLiAkeG1sLT5sb2NhbE5hbWU7CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkkYXR0ck5hbWUgPSAkeG1sLT5sb2NhbE5hbWU7CgkJCQkJCX0KCQkJCQkJJGF0dHJpYnV0ZXNbJGF0dHJOYW1lXSA9ICR4bWwtPnZhbHVlOwoJCQkJCX0KCQkJCQkkdGhpcy0+dGFnX29wZW4obnVsbCwgJHRhZ05hbWUsICRhdHRyaWJ1dGVzKTsKCQkJCQlpZiAoJGVtcHR5KQoJCQkJCXsKCQkJCQkJJHRoaXMtPnRhZ19jbG9zZShudWxsLCAkdGFnTmFtZSk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSBjb25zdGFudCgnWE1MUmVhZGVyOjpURVhUJyk6CgoJCQkJY2FzZSBjb25zdGFudCgnWE1MUmVhZGVyOjpDREFUQScpOgoJCQkJCSR0aGlzLT5jZGF0YShudWxsLCAkeG1sLT52YWx1ZSk7CgkJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKCRlcnJvciA9IGxpYnhtbF9nZXRfbGFzdF9lcnJvcigpKQoJCXsKCQkJJHRoaXMtPmVycm9yX2NvZGUgPSAkZXJyb3ItPmNvZGU7CgkJCSR0aGlzLT5lcnJvcl9zdHJpbmcgPSAkZXJyb3ItPm1lc3NhZ2U7CgkJCSR0aGlzLT5jdXJyZW50X2xpbmUgPSAkZXJyb3ItPmxpbmU7CgkJCSR0aGlzLT5jdXJyZW50X2NvbHVtbiA9ICRlcnJvci0+Y29sdW1uOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm9yX2NvZGUoKQoJewoJCXJldHVybiAkdGhpcy0+ZXJyb3JfY29kZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm9yX3N0cmluZygpCgl7CgkJcmV0dXJuICR0aGlzLT5lcnJvcl9zdHJpbmc7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9jdXJyZW50X2xpbmUoKQoJewoJCXJldHVybiAkdGhpcy0+Y3VycmVudF9saW5lOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfY3VycmVudF9jb2x1bW4oKQoJewoJCXJldHVybiAkdGhpcy0+Y3VycmVudF9jb2x1bW47Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9jdXJyZW50X2J5dGUoKQoJewoJCXJldHVybiAkdGhpcy0+Y3VycmVudF9ieXRlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfZGF0YSgpCgl7CgkJcmV0dXJuICR0aGlzLT5kYXRhOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiB0YWdfb3BlbigkcGFyc2VyLCAkdGFnLCAkYXR0cmlidXRlcykKCXsKCQlsaXN0KCR0aGlzLT5uYW1lc3BhY2VbXSwgJHRoaXMtPmVsZW1lbnRbXSkgPSAkdGhpcy0+c3BsaXRfbnMoJHRhZyk7CgoJCSRhdHRyaWJzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkYXR0cmlidXRlcyBhcyAkbmFtZSA9PiAkdmFsdWUpCgkJewoJCQlsaXN0KCRhdHRyaWJfbmFtZXNwYWNlLCAkYXR0cmlidXRlKSA9ICR0aGlzLT5zcGxpdF9ucygkbmFtZSk7CgkJCSRhdHRyaWJzWyRhdHRyaWJfbmFtZXNwYWNlXVskYXR0cmlidXRlXSA9ICR2YWx1ZTsKCQl9CgoJCWlmIChpc3NldCgkYXR0cmlic1tTSU1QTEVQSUVfTkFNRVNQQUNFX1hNTF1bJ2Jhc2UnXSkpCgkJewoJCQkkYmFzZSA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhYnNvbHV0aXplX3VybCcsIGFycmF5KCRhdHRyaWJzW1NJTVBMRVBJRV9OQU1FU1BBQ0VfWE1MXVsnYmFzZSddLCBlbmQoJHRoaXMtPnhtbF9iYXNlKSkpOwoJCQlpZiAoJGJhc2UgIT09IGZhbHNlKQoJCQl7CgkJCQkkdGhpcy0+eG1sX2Jhc2VbXSA9ICRiYXNlOwoJCQkJJHRoaXMtPnhtbF9iYXNlX2V4cGxpY2l0W10gPSB0cnVlOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT54bWxfYmFzZVtdID0gZW5kKCR0aGlzLT54bWxfYmFzZSk7CgkJCSR0aGlzLT54bWxfYmFzZV9leHBsaWNpdFtdID0gZW5kKCR0aGlzLT54bWxfYmFzZV9leHBsaWNpdCk7CgkJfQoKCQlpZiAoaXNzZXQoJGF0dHJpYnNbU0lNUExFUElFX05BTUVTUEFDRV9YTUxdWydsYW5nJ10pKQoJCXsKCQkJJHRoaXMtPnhtbF9sYW5nW10gPSAkYXR0cmlic1tTSU1QTEVQSUVfTkFNRVNQQUNFX1hNTF1bJ2xhbmcnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnhtbF9sYW5nW10gPSBlbmQoJHRoaXMtPnhtbF9sYW5nKTsKCQl9CgoJCWlmICgkdGhpcy0+Y3VycmVudF94aHRtbF9jb25zdHJ1Y3QgPj0gMCkKCQl7CgkJCSR0aGlzLT5jdXJyZW50X3hodG1sX2NvbnN0cnVjdCsrOwoJCQlpZiAoZW5kKCR0aGlzLT5uYW1lc3BhY2UpID09PSBTSU1QTEVQSUVfTkFNRVNQQUNFX1hIVE1MKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnZGF0YSddIC49ICc8JyAuIGVuZCgkdGhpcy0+ZWxlbWVudCk7CgkJCQlpZiAoaXNzZXQoJGF0dHJpYnNbJyddKSkKCQkJCXsKCQkJCQlmb3JlYWNoICgkYXR0cmlic1snJ10gYXMgJG5hbWUgPT4gJHZhbHVlKQoJCQkJCXsKCQkJCQkJJHRoaXMtPmRhdGFbJ2RhdGEnXSAuPSAnICcgLiAkbmFtZSAuICc9IicgLiBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSwgRU5UX0NPTVBBVCwgJHRoaXMtPmVuY29kaW5nKSAuICciJzsKCQkJCQl9CgkJCQl9CgkJCQkkdGhpcy0+ZGF0YVsnZGF0YSddIC49ICc+JzsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+ZGF0YXNbXSA9JiAkdGhpcy0+ZGF0YTsKCQkJJHRoaXMtPmRhdGEgPSYgJHRoaXMtPmRhdGFbJ2NoaWxkJ11bZW5kKCR0aGlzLT5uYW1lc3BhY2UpXVtlbmQoJHRoaXMtPmVsZW1lbnQpXVtdOwoJCQkkdGhpcy0+ZGF0YSA9IGFycmF5KCdkYXRhJyA9PiAnJywgJ2F0dHJpYnMnID0+ICRhdHRyaWJzLCAneG1sX2Jhc2UnID0+IGVuZCgkdGhpcy0+eG1sX2Jhc2UpLCAneG1sX2Jhc2VfZXhwbGljaXQnID0+IGVuZCgkdGhpcy0+eG1sX2Jhc2VfZXhwbGljaXQpLCAneG1sX2xhbmcnID0+IGVuZCgkdGhpcy0+eG1sX2xhbmcpKTsKCQkJaWYgKChlbmQoJHRoaXMtPm5hbWVzcGFjZSkgPT09IFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMyAmJiBpbl9hcnJheShlbmQoJHRoaXMtPmVsZW1lbnQpLCBhcnJheSgndGl0bGUnLCAndGFnbGluZScsICdjb3B5cmlnaHQnLCAnaW5mbycsICdzdW1tYXJ5JywgJ2NvbnRlbnQnKSkgJiYgaXNzZXQoJGF0dHJpYnNbJyddWydtb2RlJ10pICYmICRhdHRyaWJzWycnXVsnbW9kZSddID09PSAneG1sJykKCQkJfHwgKGVuZCgkdGhpcy0+bmFtZXNwYWNlKSA9PT0gU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwICYmIGluX2FycmF5KGVuZCgkdGhpcy0+ZWxlbWVudCksIGFycmF5KCdyaWdodHMnLCAnc3VidGl0bGUnLCAnc3VtbWFyeScsICdpbmZvJywgJ3RpdGxlJywgJ2NvbnRlbnQnKSkgJiYgaXNzZXQoJGF0dHJpYnNbJyddWyd0eXBlJ10pICYmICRhdHRyaWJzWycnXVsndHlwZSddID09PSAneGh0bWwnKQoJCQl8fCAoZW5kKCR0aGlzLT5uYW1lc3BhY2UpID09PSBTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCAmJiBpbl9hcnJheShlbmQoJHRoaXMtPmVsZW1lbnQpLCBhcnJheSgndGl0bGUnKSkpCgkJCXx8IChlbmQoJHRoaXMtPm5hbWVzcGFjZSkgPT09IFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCAmJiBpbl9hcnJheShlbmQoJHRoaXMtPmVsZW1lbnQpLCBhcnJheSgndGl0bGUnKSkpCgkJCXx8IChlbmQoJHRoaXMtPm5hbWVzcGFjZSkgPT09IFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzEwICYmIGluX2FycmF5KGVuZCgkdGhpcy0+ZWxlbWVudCksIGFycmF5KCd0aXRsZScpKSkpCgkJCXsKCQkJCSR0aGlzLT5jdXJyZW50X3hodG1sX2NvbnN0cnVjdCA9IDA7CgkJCX0KCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGNkYXRhKCRwYXJzZXIsICRjZGF0YSkKCXsKCQlpZiAoJHRoaXMtPmN1cnJlbnRfeGh0bWxfY29uc3RydWN0ID49IDApCgkJewoJCQkkdGhpcy0+ZGF0YVsnZGF0YSddIC49IGh0bWxzcGVjaWFsY2hhcnMoJGNkYXRhLCBFTlRfUVVPVEVTLCAkdGhpcy0+ZW5jb2RpbmcpOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+ZGF0YVsnZGF0YSddIC49ICRjZGF0YTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHRhZ19jbG9zZSgkcGFyc2VyLCAkdGFnKQoJewoJCWlmICgkdGhpcy0+Y3VycmVudF94aHRtbF9jb25zdHJ1Y3QgPj0gMCkKCQl7CgkJCSR0aGlzLT5jdXJyZW50X3hodG1sX2NvbnN0cnVjdC0tOwoJCQlpZiAoZW5kKCR0aGlzLT5uYW1lc3BhY2UpID09PSBTSU1QTEVQSUVfTkFNRVNQQUNFX1hIVE1MICYmICFpbl9hcnJheShlbmQoJHRoaXMtPmVsZW1lbnQpLCBhcnJheSgnYXJlYScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2JyJywgJ2NvbCcsICdmcmFtZScsICdocicsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaW5rJywgJ21ldGEnLCAncGFyYW0nKSkpCgkJCXsKCQkJCSR0aGlzLT5kYXRhWydkYXRhJ10gLj0gJzwvJyAuIGVuZCgkdGhpcy0+ZWxlbWVudCkgLiAnPic7CgkJCX0KCQl9CgkJaWYgKCR0aGlzLT5jdXJyZW50X3hodG1sX2NvbnN0cnVjdCA9PT0gLTEpCgkJewoJCQkkdGhpcy0+ZGF0YSA9JiAkdGhpcy0+ZGF0YXNbY291bnQoJHRoaXMtPmRhdGFzKSAtIDFdOwoJCQlhcnJheV9wb3AoJHRoaXMtPmRhdGFzKTsKCQl9CgoJCWFycmF5X3BvcCgkdGhpcy0+ZWxlbWVudCk7CgkJYXJyYXlfcG9wKCR0aGlzLT5uYW1lc3BhY2UpOwoJCWFycmF5X3BvcCgkdGhpcy0+eG1sX2Jhc2UpOwoJCWFycmF5X3BvcCgkdGhpcy0+eG1sX2Jhc2VfZXhwbGljaXQpOwoJCWFycmF5X3BvcCgkdGhpcy0+eG1sX2xhbmcpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzcGxpdF9ucygkc3RyaW5nKQoJewoJCXN0YXRpYyAkY2FjaGUgPSBhcnJheSgpOwoJCWlmICghaXNzZXQoJGNhY2hlWyRzdHJpbmddKSkKCQl7CgkJCWlmICgkcG9zID0gc3RycG9zKCRzdHJpbmcsICR0aGlzLT5zZXBhcmF0b3IpKQoJCQl7CgkJCQlzdGF0aWMgJHNlcGFyYXRvcl9sZW5ndGg7CgkJCQlpZiAoISRzZXBhcmF0b3JfbGVuZ3RoKQoJCQkJewoJCQkJCSRzZXBhcmF0b3JfbGVuZ3RoID0gc3RybGVuKCR0aGlzLT5zZXBhcmF0b3IpOwoJCQkJfQoJCQkJJG5hbWVzcGFjZSA9IHN1YnN0cigkc3RyaW5nLCAwLCAkcG9zKTsKCQkJCSRsb2NhbF9uYW1lID0gc3Vic3RyKCRzdHJpbmcsICRwb3MgKyAkc2VwYXJhdG9yX2xlbmd0aCk7CgkJCQlpZiAoc3RydG9sb3dlcigkbmFtZXNwYWNlKSA9PT0gU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMpCgkJCQl7CgkJCQkJJG5hbWVzcGFjZSA9IFNJTVBMRVBJRV9OQU1FU1BBQ0VfSVRVTkVTOwoJCQkJfQoKCQkJCS8vIE5vcm1hbGl6ZSB0aGUgTWVkaWEgUlNTIG5hbWVzcGFjZXMKCQkJCWlmICgkbmFtZXNwYWNlID09PSBTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTX1dST05HIHx8CgkJCQkJJG5hbWVzcGFjZSA9PT0gU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU19XUk9ORzIgfHwKCQkJCQkkbmFtZXNwYWNlID09PSBTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTX1dST05HMyB8fAoJCQkJCSRuYW1lc3BhY2UgPT09IFNJTVBMRVBJRV9OQU1FU1BBQ0VfTUVESUFSU1NfV1JPTkc0IHx8CgkJCQkJJG5hbWVzcGFjZSA9PT0gU0lNUExFUElFX05BTUVTUEFDRV9NRURJQVJTU19XUk9ORzUgKQoJCQkJewoJCQkJCSRuYW1lc3BhY2UgPSBTSU1QTEVQSUVfTkFNRVNQQUNFX01FRElBUlNTOwoJCQkJfQoJCQkJJGNhY2hlWyRzdHJpbmddID0gYXJyYXkoJG5hbWVzcGFjZSwgJGxvY2FsX25hbWUpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJGNhY2hlWyRzdHJpbmddID0gYXJyYXkoJycsICRzdHJpbmcpOwoJCQl9CgkJfQoJCXJldHVybiAkY2FjaGVbJHN0cmluZ107Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZV9oY2FyZCgkZGF0YSwgJGNhdGVnb3J5ID0gZmFsc2UpIHsKCQkkbmFtZSA9ICcnOwoJCSRsaW5rID0gJyc7CgkJLy8gQ2hlY2sgaWYgaC1jYXJkIGlzIHNldCBhbmQgcGFzcyB0aGF0IGluZm9ybWF0aW9uIG9uIGluIHRoZSBsaW5rLgoJCWlmIChpc3NldCgkZGF0YVsndHlwZSddKSAmJiBpbl9hcnJheSgnaC1jYXJkJywgJGRhdGFbJ3R5cGUnXSkpIHsKCQkJaWYgKGlzc2V0KCRkYXRhWydwcm9wZXJ0aWVzJ11bJ25hbWUnXVswXSkpIHsKCQkJCSRuYW1lID0gJGRhdGFbJ3Byb3BlcnRpZXMnXVsnbmFtZSddWzBdOwoJCQl9CgkJCWlmIChpc3NldCgkZGF0YVsncHJvcGVydGllcyddWyd1cmwnXVswXSkpIHsKCQkJCSRsaW5rID0gJGRhdGFbJ3Byb3BlcnRpZXMnXVsndXJsJ11bMF07CgkJCQlpZiAoJG5hbWUgPT09ICcnKSB7CgkJCQkJJG5hbWUgPSAkbGluazsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCS8vIGNhbid0IGhhdmUgY29tbWFzIGluIGNhdGVnb3JpZXMuCgkJCQkJJG5hbWUgPSBzdHJfcmVwbGFjZSgnLCcsICcnLCAkbmFtZSk7CgkJCQl9CgkJCQkkcGVyc29uX3RhZyA9ICRjYXRlZ29yeSA/ICc8c3BhbiBjbGFzcz0icGVyc29uLXRhZyI+PC9zcGFuPicgOiAnJzsKCQkJCXJldHVybiAnPGEgY2xhc3M9ImgtY2FyZCIgaHJlZj0iJy4kbGluay4nIj4nLiRwZXJzb25fdGFnLiRuYW1lLic8L2E+JzsKCQkJfQoJCX0KCQlyZXR1cm4gaXNzZXQoJGRhdGFbJ3ZhbHVlJ10pID8gJGRhdGFbJ3ZhbHVlJ10gOiAnJzsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlX21pY3JvZm9ybWF0cygmJGRhdGEsICR1cmwpIHsKCQkkZmVlZF90aXRsZSA9ICcnOwoJCSRmZWVkX2F1dGhvciA9IE5VTEw7CgkJJGF1dGhvcl9jYWNoZSA9IGFycmF5KCk7CgkJJGl0ZW1zID0gYXJyYXkoKTsKCQkkZW50cmllcyA9IGFycmF5KCk7CgkJJG1mID0gTWYyXHBhcnNlKCRkYXRhLCAkdXJsKTsKCQkvLyBGaXJzdCBsb29rIGZvciBhbiBoLWZlZWQuCgkJJGhfZmVlZCA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJG1mWydpdGVtcyddIGFzICRtZl9pdGVtKSB7CgkJCWlmIChpbl9hcnJheSgnaC1mZWVkJywgJG1mX2l0ZW1bJ3R5cGUnXSkpIHsKCQkJCSRoX2ZlZWQgPSAkbWZfaXRlbTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIEFsc28gbG9vayBmb3IgaC1mZWVkIG9yIGgtZW50cnkgaW4gdGhlIGNoaWxkcmVuIG9mIGVhY2ggdG9wIGxldmVsIGl0ZW0uCgkJCWlmICghaXNzZXQoJG1mX2l0ZW1bJ2NoaWxkcmVuJ11bMF1bJ3R5cGUnXSkpIGNvbnRpbnVlOwoJCQlpZiAoaW5fYXJyYXkoJ2gtZmVlZCcsICRtZl9pdGVtWydjaGlsZHJlbiddWzBdWyd0eXBlJ10pKSB7CgkJCQkkaF9mZWVkID0gJG1mX2l0ZW1bJ2NoaWxkcmVuJ11bMF07CgkJCQkvLyBJbiB0aGlzIGNhc2UgdGhlIHBhcmVudCBvZiB0aGUgaC1mZWVkIG1heSBiZSBhbiBoLWNhcmQsIHNvIHVzZSBpdCBhcwoJCQkJLy8gdGhlIGZlZWRfYXV0aG9yLgoJCQkJaWYgKGluX2FycmF5KCdoLWNhcmQnLCAkbWZfaXRlbVsndHlwZSddKSkgJGZlZWRfYXV0aG9yID0gJG1mX2l0ZW07CgkJCQlicmVhazsKCQkJfQoJCQllbHNlIGlmIChpbl9hcnJheSgnaC1lbnRyeScsICRtZl9pdGVtWydjaGlsZHJlbiddWzBdWyd0eXBlJ10pKSB7CgkJCQkkZW50cmllcyA9ICRtZl9pdGVtWydjaGlsZHJlbiddOwoJCQkJLy8gSW4gdGhpcyBjYXNlIHRoZSBwYXJlbnQgb2YgdGhlIGgtZW50cnkgbGlzdCBtYXkgYmUgYW4gaC1jYXJkLCBzbyB1c2UKCQkJCS8vIGl0IGFzIHRoZSBmZWVkX2F1dGhvci4KCQkJCWlmIChpbl9hcnJheSgnaC1jYXJkJywgJG1mX2l0ZW1bJ3R5cGUnXSkpICRmZWVkX2F1dGhvciA9ICRtZl9pdGVtOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKGlzc2V0KCRoX2ZlZWRbJ2NoaWxkcmVuJ10pKSB7CgkJCSRlbnRyaWVzID0gJGhfZmVlZFsnY2hpbGRyZW4nXTsKCQkJLy8gQWxzbyBzZXQgdGhlIGZlZWQgdGl0bGUgYW5kIHN0b3JlIGF1dGhvciBmcm9tIHRoZSBoLWZlZWQgaWYgYXZhaWxhYmxlLgoJCQlpZiAoaXNzZXQoJG1mWydpdGVtcyddWzBdWydwcm9wZXJ0aWVzJ11bJ25hbWUnXVswXSkpIHsKCQkJCSRmZWVkX3RpdGxlID0gJG1mWydpdGVtcyddWzBdWydwcm9wZXJ0aWVzJ11bJ25hbWUnXVswXTsKCQkJfQoJCQlpZiAoaXNzZXQoJG1mWydpdGVtcyddWzBdWydwcm9wZXJ0aWVzJ11bJ2F1dGhvciddWzBdKSkgewoJCQkJJGZlZWRfYXV0aG9yID0gJG1mWydpdGVtcyddWzBdWydwcm9wZXJ0aWVzJ11bJ2F1dGhvciddWzBdOwoJCQl9CgkJfQoJCWVsc2UgaWYgKGNvdW50KCRlbnRyaWVzKSA9PT0gMCkgewoJCQkkZW50cmllcyA9ICRtZlsnaXRlbXMnXTsKCQl9CgkJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGVudHJpZXMpOyAkaSsrKSB7CgkJCSRlbnRyeSA9ICRlbnRyaWVzWyRpXTsKCQkJaWYgKGluX2FycmF5KCdoLWVudHJ5JywgJGVudHJ5Wyd0eXBlJ10pKSB7CgkJCQkkaXRlbSA9IGFycmF5KCk7CgkJCQkkdGl0bGUgPSAnJzsKCQkJCSRkZXNjcmlwdGlvbiA9ICcnOwoJCQkJaWYgKGlzc2V0KCRlbnRyeVsncHJvcGVydGllcyddWyd1cmwnXVswXSkpIHsKCQkJCQkkbGluayA9ICRlbnRyeVsncHJvcGVydGllcyddWyd1cmwnXVswXTsKCQkJCQlpZiAoaXNzZXQoJGxpbmtbJ3ZhbHVlJ10pKSAkbGluayA9ICRsaW5rWyd2YWx1ZSddOwoJCQkJCSRpdGVtWydsaW5rJ10gPSBhcnJheShhcnJheSgnZGF0YScgPT4gJGxpbmspKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkZW50cnlbJ3Byb3BlcnRpZXMnXVsndWlkJ11bMF0pKSB7CgkJCQkJJGd1aWQgPSAkZW50cnlbJ3Byb3BlcnRpZXMnXVsndWlkJ11bMF07CgkJCQkJaWYgKGlzc2V0KCRndWlkWyd2YWx1ZSddKSkgJGd1aWQgPSAkZ3VpZFsndmFsdWUnXTsKCQkJCQkkaXRlbVsnZ3VpZCddID0gYXJyYXkoYXJyYXkoJ2RhdGEnID0+ICRndWlkKSk7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ25hbWUnXVswXSkpIHsKCQkJCQkkdGl0bGUgPSAkZW50cnlbJ3Byb3BlcnRpZXMnXVsnbmFtZSddWzBdOwoJCQkJCWlmIChpc3NldCgkdGl0bGVbJ3ZhbHVlJ10pKSAkdGl0bGUgPSAkdGl0bGVbJ3ZhbHVlJ107CgkJCQkJJGl0ZW1bJ3RpdGxlJ10gPSBhcnJheShhcnJheSgnZGF0YScgPT4gJHRpdGxlKSk7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ2F1dGhvciddWzBdKSB8fCBpc3NldCgkZmVlZF9hdXRob3IpKSB7CgkJCQkJLy8gYXV0aG9yIGlzIGEgc3BlY2lhbCBjYXNlLCBpdCBjYW4gYmUgcGxhaW4gdGV4dCBvciBhbiBoLWNhcmQgYXJyYXkuCgkJCQkJLy8gSWYgaXQncyBwbGFpbiB0ZXh0IGl0IGNhbiBhbHNvIGJlIGEgdXJsIHRoYXQgc2hvdWxkIGJlIGZvbGxvd2VkIHRvCgkJCQkJLy8gZ2V0IHRoZSBhY3R1YWwgaC1jYXJkLgoJCQkJCSRhdXRob3IgPSBpc3NldCgkZW50cnlbJ3Byb3BlcnRpZXMnXVsnYXV0aG9yJ11bMF0pID8KCQkJCQkJJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ2F1dGhvciddWzBdIDogJGZlZWRfYXV0aG9yOwoJCQkJCWlmICghaXNfc3RyaW5nKCRhdXRob3IpKSB7CgkJCQkJCSRhdXRob3IgPSAkdGhpcy0+cGFyc2VfaGNhcmQoJGF1dGhvcik7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKHN0cnBvcygkYXV0aG9yLCAnaHR0cCcpID09PSAwKSB7CgkJCQkJCWlmIChpc3NldCgkYXV0aG9yX2NhY2hlWyRhdXRob3JdKSkgewoJCQkJCQkJJGF1dGhvciA9ICRhdXRob3JfY2FjaGVbJGF1dGhvcl07CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQkkbWYgPSBNZjJcZmV0Y2goJGF1dGhvcik7CgkJCQkJCQlmb3JlYWNoICgkbWZbJ2l0ZW1zJ10gYXMgJGhjYXJkKSB7CgkJCQkJCQkJLy8gT25seSBpbnRlcmVzdGVkIGluIGFuIGgtY2FyZCBieSBpdHNlbGYgaW4gdGhpcyBjYXNlLgoJCQkJCQkJCWlmICghaW5fYXJyYXkoJ2gtY2FyZCcsICRoY2FyZFsndHlwZSddKSkgewoJCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCQl9CgkJCQkJCQkJLy8gSXQgbXVzdCBoYXZlIGEgdXJsIHByb3BlcnR5IG1hdGNoaW5nIHdoYXQgd2UgZmV0Y2hlZC4KCQkJCQkJCQlpZiAoIWlzc2V0KCRoY2FyZFsncHJvcGVydGllcyddWyd1cmwnXSkgfHwKCQkJCQkJCQkJCSEoaW5fYXJyYXkoJGF1dGhvciwgJGhjYXJkWydwcm9wZXJ0aWVzJ11bJ3VybCddKSkpIHsKCQkJCQkJCQkJY29udGludWU7CgkJCQkJCQkJfQoJCQkJCQkJCS8vIFNhdmUgcGFyc2VfaGNhcmQgdGhlIHRyb3VibGUgb2YgZmluZGluZyB0aGUgY29ycmVjdCB1cmwuCgkJCQkJCQkJJGhjYXJkWydwcm9wZXJ0aWVzJ11bJ3VybCddWzBdID0gJGF1dGhvcjsKCQkJCQkJCQkvLyBDYWNoZSB0aGlzIGgtY2FyZCBmb3IgdGhlIG5leHQgaC1lbnRyeSB0byBjaGVjay4KCQkJCQkJCQkkYXV0aG9yX2NhY2hlWyRhdXRob3JdID0gJHRoaXMtPnBhcnNlX2hjYXJkKCRoY2FyZCk7CgkJCQkJCQkJJGF1dGhvciA9ICRhdXRob3JfY2FjaGVbJGF1dGhvcl07CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJJGl0ZW1bJ2F1dGhvciddID0gYXJyYXkoYXJyYXkoJ2RhdGEnID0+ICRhdXRob3IpKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkZW50cnlbJ3Byb3BlcnRpZXMnXVsncGhvdG8nXVswXSkpIHsKCQkJCQkvLyBJZiBhIHBob3RvIGlzIGFsc28gaW4gY29udGVudCwgZG9uJ3QgbmVlZCB0byBhZGQgaXQgYWdhaW4gaGVyZS4KCQkJCQkkY29udGVudCA9ICcnOwoJCQkJCWlmIChpc3NldCgkZW50cnlbJ3Byb3BlcnRpZXMnXVsnY29udGVudCddWzBdWydodG1sJ10pKSB7CgkJCQkJCSRjb250ZW50ID0gJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ2NvbnRlbnQnXVswXVsnaHRtbCddOwoJCQkJCX0KCQkJCQkkcGhvdG9fbGlzdCA9IGFycmF5KCk7CgkJCQkJZm9yICgkaiA9IDA7ICRqIDwgY291bnQoJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ3Bob3RvJ10pOyAkaisrKSB7CgkJCQkJCSRwaG90byA9ICRlbnRyeVsncHJvcGVydGllcyddWydwaG90byddWyRqXTsKCQkJCQkJaWYgKCFlbXB0eSgkcGhvdG8pICYmIHN0cnBvcygkY29udGVudCwgJHBob3RvKSA9PT0gZmFsc2UpIHsKCQkJCQkJCSRwaG90b19saXN0W10gPSAkcGhvdG87CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gV2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgcGhvdG8gc2hvdyB0aGUgZmlyc3QgYW5kIHVzZSBhIGxpZ2h0Ym94LgoJCQkJCS8vIE5lZWQgYSBwZXJtYW5lbnQsIHVuaXF1ZSBuYW1lIGZvciB0aGUgaW1hZ2Ugc2V0LCBidXQgZG9uJ3QgaGF2ZQoJCQkJCS8vIGFueXRoaW5nIHVuaXF1ZSBleGNlcHQgZm9yIHRoZSBjb250ZW50IGl0c2VsZiwgc28gdXNlIHRoYXQuCgkJCQkJJGNvdW50ID0gY291bnQoJHBob3RvX2xpc3QpOwoJCQkJCWlmICgkY291bnQgPiAxKSB7CgkJCQkJCSRpbWFnZV9zZXRfaWQgPSBwcmVnX3JlcGxhY2UoJy9bWzpeYWxudW06XV0vJywgJycsICRwaG90b19saXN0WzBdKTsKCQkJCQkJJGRlc2NyaXB0aW9uID0gJzxwPic7CgkJCQkJCWZvciAoJGogPSAwOyAkaiA8ICRjb3VudDsgJGorKykgewoJCQkJCQkJJGhpZGRlbiA9ICRqID09PSAwID8gJycgOiAnY2xhc3M9ImhpZGRlbiIgJzsKCQkJCQkJCSRkZXNjcmlwdGlvbiAuPSAnPGEgaHJlZj0iJy4kcGhvdG9fbGlzdFskal0uJyIgJy4kaGlkZGVuLgoJCQkJCQkJCSdkYXRhLWxpZ2h0Ym94PSJpbWFnZS1zZXQtJy4kaW1hZ2Vfc2V0X2lkLiciPicuCgkJCQkJCQkJJzxpbWcgc3JjPSInLiRwaG90b19saXN0WyRqXS4nIj48L2E+JzsKCQkJCQkJfQoJCQkJCQkkZGVzY3JpcHRpb24gLj0gJzxicj48Yj4nLiRjb3VudC4nIHBob3RvczwvYj48L3A+JzsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoJGNvdW50ID09IDEpIHsKCQkJCQkJJGRlc2NyaXB0aW9uID0gJzxwPjxpbWcgc3JjPSInLiRwaG90b19saXN0WzBdLiciPjwvcD4nOwoJCQkJCX0KCQkJCX0KCQkJCWlmIChpc3NldCgkZW50cnlbJ3Byb3BlcnRpZXMnXVsnY29udGVudCddWzBdWydodG1sJ10pKSB7CgkJCQkJLy8gZS1jb250ZW50Wyd2YWx1ZSddIGlzIHRoZSBzYW1lIGFzIHAtbmFtZSB3aGVuIHRoZXkgYXJlIG9uIHRoZSBzYW1lCgkJCQkJLy8gZWxlbWVudC4gVXNlIHRoaXMgdG8gcmVwbGFjZSB0aXRsZSB3aXRoIGEgc3RyaXBfdGFncyB2ZXJzaW9uIHNvCgkJCQkJLy8gdGhhdCBhbHQgdGV4dCBmcm9tIGltYWdlcyBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHRpdGxlLgoJCQkJCWlmICgkZW50cnlbJ3Byb3BlcnRpZXMnXVsnY29udGVudCddWzBdWyd2YWx1ZSddID09PSAkdGl0bGUpIHsKCQkJCQkJJHRpdGxlID0gc3RyaXBfdGFncygkZW50cnlbJ3Byb3BlcnRpZXMnXVsnY29udGVudCddWzBdWydodG1sJ10pOwoJCQkJCQkkaXRlbVsndGl0bGUnXSA9IGFycmF5KGFycmF5KCdkYXRhJyA9PiAkdGl0bGUpKTsKCQkJCQl9CgkJCQkJJGRlc2NyaXB0aW9uIC49ICRlbnRyeVsncHJvcGVydGllcyddWydjb250ZW50J11bMF1bJ2h0bWwnXTsKCQkJCQlpZiAoaXNzZXQoJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ2luLXJlcGx5LXRvJ11bMF0pKSB7CgkJCQkJCSRpbl9yZXBseV90byA9ICcnOwoJCQkJCQlpZiAoaXNfc3RyaW5nKCRlbnRyeVsncHJvcGVydGllcyddWydpbi1yZXBseS10byddWzBdKSkgewoJCQkJCQkJJGluX3JlcGx5X3RvID0gJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ2luLXJlcGx5LXRvJ11bMF07CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoaXNzZXQoJGVudHJ5Wydwcm9wZXJ0aWVzJ11bJ2luLXJlcGx5LXRvJ11bMF1bJ3ZhbHVlJ10pKSB7CgkJCQkJCQkkaW5fcmVwbHlfdG8gPSAkZW50cnlbJ3Byb3BlcnRpZXMnXVsnaW4tcmVwbHktdG8nXVswXVsndmFsdWUnXTsKCQkJCQkJfQoJCQkJCQlpZiAoJGluX3JlcGx5X3RvICE9PSAnJykgewoJCQkJCQkJJGRlc2NyaXB0aW9uIC49ICc8cD48c3BhbiBjbGFzcz0iaW4tcmVwbHktdG8iPjwvc3Bhbj4gJy4KCQkJCQkJCQknPGEgaHJlZj0iJy4kaW5fcmVwbHlfdG8uJyI+Jy4kaW5fcmVwbHlfdG8uJzwvYT48cD4nOwoJCQkJCQl9CgkJCQkJfQoJCQkJCSRpdGVtWydkZXNjcmlwdGlvbiddID0gYXJyYXkoYXJyYXkoJ2RhdGEnID0+ICRkZXNjcmlwdGlvbikpOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRlbnRyeVsncHJvcGVydGllcyddWydjYXRlZ29yeSddKSkgewoJCQkJCSRjYXRlZ29yeV9jc3YgPSAnJzsKCQkJCQkvLyBDYXRlZ29yaWVzIGNhbiBhbHNvIGNvbnRhaW4gaC1jYXJkcy4KCQkJCQlmb3JlYWNoICgkZW50cnlbJ3Byb3BlcnRpZXMnXVsnY2F0ZWdvcnknXSBhcyAkY2F0ZWdvcnkpIHsKCQkJCQkJaWYgKCRjYXRlZ29yeV9jc3YgIT09ICcnKSAkY2F0ZWdvcnlfY3N2IC49ICcsICc7CgkJCQkJCWlmIChpc19zdHJpbmcoJGNhdGVnb3J5KSkgewoJCQkJCQkJLy8gQ2FuJ3QgaGF2ZSBjb21tYXMgaW4gY2F0ZWdvcmllcy4KCQkJCQkJCSRjYXRlZ29yeV9jc3YgLj0gc3RyX3JlcGxhY2UoJywnLCAnJywgJGNhdGVnb3J5KTsKCQkJCQkJfQoJCQkJCQllbHNlIHsKCQkJCQkJCSRjYXRlZ29yeV9jc3YgLj0gJHRoaXMtPnBhcnNlX2hjYXJkKCRjYXRlZ29yeSwgdHJ1ZSk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJJGl0ZW1bJ2NhdGVnb3J5J10gPSBhcnJheShhcnJheSgnZGF0YScgPT4gJGNhdGVnb3J5X2NzdikpOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRlbnRyeVsncHJvcGVydGllcyddWydwdWJsaXNoZWQnXVswXSkpIHsKCQkJCQkkdGltZXN0YW1wID0gc3RydG90aW1lKCRlbnRyeVsncHJvcGVydGllcyddWydwdWJsaXNoZWQnXVswXSk7CgkJCQkJJHB1Yl9kYXRlID0gZGF0ZSgnRiBqIFkgZzppYScsICR0aW1lc3RhbXApLicgR01UJzsKCQkJCQkkaXRlbVsncHViRGF0ZSddID0gYXJyYXkoYXJyYXkoJ2RhdGEnID0+ICRwdWJfZGF0ZSkpOwoJCQkJfQoJCQkJLy8gVGhlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBhcmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgdG8gcmVwcmVzZW50CgkJCQkvLyBhIGRlbGV0ZWQgaXRlbSAod2hpY2ggYWxzbyBtYWtlcyBpdCBhbiBpbnZhbGlkIHJzcyBpdGVtKS4KCQkJCWlmIChpc3NldCgkZW50cnlbJ3Byb3BlcnRpZXMnXVsnZGVsZXRlZCddWzBdKSkgewoJCQkJCSRpdGVtWyd0aXRsZSddID0gYXJyYXkoYXJyYXkoJ2RhdGEnID0+ICcnKSk7CgkJCQkJJGl0ZW1bJ2Rlc2NyaXB0aW9uJ10gPSBhcnJheShhcnJheSgnZGF0YScgPT4gJycpKTsKCQkJCX0KCQkJCSRpdGVtc1tdID0gYXJyYXkoJ2NoaWxkJyA9PiBhcnJheSgnJyA9PiAkaXRlbSkpOwoJCQl9CgkJfQoJCS8vIE1pbWljIFJTUyBkYXRhIGZvcm1hdCB3aGVuIHN0b3JpbmcgbWljcm9mb3JtYXRzLgoJCSRsaW5rID0gYXJyYXkoYXJyYXkoJ2RhdGEnID0+ICR1cmwpKTsKCQkkaW1hZ2UgPSAnJzsKCQlpZiAoIWlzX3N0cmluZygkZmVlZF9hdXRob3IpICYmCgkJCQlpc3NldCgkZmVlZF9hdXRob3JbJ3Byb3BlcnRpZXMnXVsncGhvdG8nXVswXSkpIHsKCQkJJGltYWdlID0gYXJyYXkoYXJyYXkoJ2NoaWxkJyA9PiBhcnJheSgnJyA9PiBhcnJheSgndXJsJyA9PgoJCQkJYXJyYXkoYXJyYXkoJ2RhdGEnID0+ICRmZWVkX2F1dGhvclsncHJvcGVydGllcyddWydwaG90byddWzBdKSkpKSkpOwoJCX0KCQkvLyBVc2UgdGhlIG5hbWUgZ2l2ZW4gZm9yIHRoZSBoLWZlZWQsIG9yIGdldCB0aGUgdGl0bGUgZnJvbSB0aGUgaHRtbC4KCQlpZiAoJGZlZWRfdGl0bGUgIT09ICcnKSB7CgkJCSRmZWVkX3RpdGxlID0gYXJyYXkoYXJyYXkoJ2RhdGEnID0+IGh0bWxzcGVjaWFsY2hhcnMoJGZlZWRfdGl0bGUpKSk7CgkJfQoJCWVsc2UgaWYgKCRwb3NpdGlvbiA9IHN0cnBvcygkZGF0YSwgJzx0aXRsZT4nKSkgewoJCQkkc3RhcnQgPSAkcG9zaXRpb24gPCAyMDAgPyAwIDogJHBvc2l0aW9uIC0gMjAwOwoJCQkkY2hlY2sgPSBzdWJzdHIoJGRhdGEsICRzdGFydCwgNDAwKTsKCQkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCQlpZiAocHJlZ19tYXRjaCgnLzx0aXRsZT4oLispPFwvdGl0bGU+LycsICRjaGVjaywgJG1hdGNoZXMpKSB7CgkJCQkkZmVlZF90aXRsZSA9IGFycmF5KGFycmF5KCdkYXRhJyA9PiBodG1sc3BlY2lhbGNoYXJzKCRtYXRjaGVzWzFdKSkpOwoJCQl9CgkJfQoJCSRjaGFubmVsID0gYXJyYXkoJ2NoYW5uZWwnID0+IGFycmF5KGFycmF5KCdjaGlsZCcgPT4gYXJyYXkoJycgPT4KCQkJYXJyYXkoJ2xpbmsnID0+ICRsaW5rLCAnaW1hZ2UnID0+ICRpbWFnZSwgJ3RpdGxlJyA9PiAkZmVlZF90aXRsZSwKCQkJICAgICAgJ2l0ZW0nID0+ICRpdGVtcykpKSkpOwoJCSRyc3MgPSBhcnJheShhcnJheSgnYXR0cmlicycgPT4gYXJyYXkoJycgPT4gYXJyYXkoJ3ZlcnNpb24nID0+ICcyLjAnKSksCgkJICAgICAgICAgICAgICAgICAgICdjaGlsZCcgPT4gYXJyYXkoJycgPT4gJGNoYW5uZWwpKSk7CgkJJHRoaXMtPmRhdGEgPSBhcnJheSgnY2hpbGQnID0+IGFycmF5KCcnID0+IGFycmF5KCdyc3MnID0+ICRyc3MpKSk7CgkJcmV0dXJuIHRydWU7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBkZWNsYXJlX2h0bWxfZW50aXRpZXMoKSB7CgkJLy8gVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBSU1Mgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgZW50aXR5LWVuY29kZWQKCQkvLyBodG1sIGlzIGFsbG93ZWQsIGJ1dCB0aGUgeG1sIHNwZWNpZmljYXRpb24gc2F5cyB0aGV5IG11c3QgYmUgZGVjbGFyZWQuCgkJcmV0dXJuICc8IURPQ1RZUEUgaHRtbCBbIDwhRU5USVRZIG5ic3AgIiYjeDAwQTA7Ij4gPCFFTlRJVFkgaWV4Y2wgIiYjeDAwQTE7Ij4gPCFFTlRJVFkgY2VudCAiJiN4MDBBMjsiPiA8IUVOVElUWSBwb3VuZCAiJiN4MDBBMzsiPiA8IUVOVElUWSBjdXJyZW4gIiYjeDAwQTQ7Ij4gPCFFTlRJVFkgeWVuICImI3gwMEE1OyI+IDwhRU5USVRZIGJydmJhciAiJiN4MDBBNjsiPiA8IUVOVElUWSBzZWN0ICImI3gwMEE3OyI+IDwhRU5USVRZIHVtbCAiJiN4MDBBODsiPiA8IUVOVElUWSBjb3B5ICImI3gwMEE5OyI+IDwhRU5USVRZIG9yZGYgIiYjeDAwQUE7Ij4gPCFFTlRJVFkgbGFxdW8gIiYjeDAwQUI7Ij4gPCFFTlRJVFkgbm90ICImI3gwMEFDOyI+IDwhRU5USVRZIHNoeSAiJiN4MDBBRDsiPiA8IUVOVElUWSByZWcgIiYjeDAwQUU7Ij4gPCFFTlRJVFkgbWFjciAiJiN4MDBBRjsiPiA8IUVOVElUWSBkZWcgIiYjeDAwQjA7Ij4gPCFFTlRJVFkgcGx1c21uICImI3gwMEIxOyI+IDwhRU5USVRZIHN1cDIgIiYjeDAwQjI7Ij4gPCFFTlRJVFkgc3VwMyAiJiN4MDBCMzsiPiA8IUVOVElUWSBhY3V0ZSAiJiN4MDBCNDsiPiA8IUVOVElUWSBtaWNybyAiJiN4MDBCNTsiPiA8IUVOVElUWSBwYXJhICImI3gwMEI2OyI+IDwhRU5USVRZIG1pZGRvdCAiJiN4MDBCNzsiPiA8IUVOVElUWSBjZWRpbCAiJiN4MDBCODsiPiA8IUVOVElUWSBzdXAxICImI3gwMEI5OyI+IDwhRU5USVRZIG9yZG0gIiYjeDAwQkE7Ij4gPCFFTlRJVFkgcmFxdW8gIiYjeDAwQkI7Ij4gPCFFTlRJVFkgZnJhYzE0ICImI3gwMEJDOyI+IDwhRU5USVRZIGZyYWMxMiAiJiN4MDBCRDsiPiA8IUVOVElUWSBmcmFjMzQgIiYjeDAwQkU7Ij4gPCFFTlRJVFkgaXF1ZXN0ICImI3gwMEJGOyI+IDwhRU5USVRZIEFncmF2ZSAiJiN4MDBDMDsiPiA8IUVOVElUWSBBYWN1dGUgIiYjeDAwQzE7Ij4gPCFFTlRJVFkgQWNpcmMgIiYjeDAwQzI7Ij4gPCFFTlRJVFkgQXRpbGRlICImI3gwMEMzOyI+IDwhRU5USVRZIEF1bWwgIiYjeDAwQzQ7Ij4gPCFFTlRJVFkgQXJpbmcgIiYjeDAwQzU7Ij4gPCFFTlRJVFkgQUVsaWcgIiYjeDAwQzY7Ij4gPCFFTlRJVFkgQ2NlZGlsICImI3gwMEM3OyI+IDwhRU5USVRZIEVncmF2ZSAiJiN4MDBDODsiPiA8IUVOVElUWSBFYWN1dGUgIiYjeDAwQzk7Ij4gPCFFTlRJVFkgRWNpcmMgIiYjeDAwQ0E7Ij4gPCFFTlRJVFkgRXVtbCAiJiN4MDBDQjsiPiA8IUVOVElUWSBJZ3JhdmUgIiYjeDAwQ0M7Ij4gPCFFTlRJVFkgSWFjdXRlICImI3gwMENEOyI+IDwhRU5USVRZIEljaXJjICImI3gwMENFOyI+IDwhRU5USVRZIEl1bWwgIiYjeDAwQ0Y7Ij4gPCFFTlRJVFkgRVRIICImI3gwMEQwOyI+IDwhRU5USVRZIE50aWxkZSAiJiN4MDBEMTsiPiA8IUVOVElUWSBPZ3JhdmUgIiYjeDAwRDI7Ij4gPCFFTlRJVFkgT2FjdXRlICImI3gwMEQzOyI+IDwhRU5USVRZIE9jaXJjICImI3gwMEQ0OyI+IDwhRU5USVRZIE90aWxkZSAiJiN4MDBENTsiPiA8IUVOVElUWSBPdW1sICImI3gwMEQ2OyI+IDwhRU5USVRZIHRpbWVzICImI3gwMEQ3OyI+IDwhRU5USVRZIE9zbGFzaCAiJiN4MDBEODsiPiA8IUVOVElUWSBVZ3JhdmUgIiYjeDAwRDk7Ij4gPCFFTlRJVFkgVWFjdXRlICImI3gwMERBOyI+IDwhRU5USVRZIFVjaXJjICImI3gwMERCOyI+IDwhRU5USVRZIFV1bWwgIiYjeDAwREM7Ij4gPCFFTlRJVFkgWWFjdXRlICImI3gwMEREOyI+IDwhRU5USVRZIFRIT1JOICImI3gwMERFOyI+IDwhRU5USVRZIHN6bGlnICImI3gwMERGOyI+IDwhRU5USVRZIGFncmF2ZSAiJiN4MDBFMDsiPiA8IUVOVElUWSBhYWN1dGUgIiYjeDAwRTE7Ij4gPCFFTlRJVFkgYWNpcmMgIiYjeDAwRTI7Ij4gPCFFTlRJVFkgYXRpbGRlICImI3gwMEUzOyI+IDwhRU5USVRZIGF1bWwgIiYjeDAwRTQ7Ij4gPCFFTlRJVFkgYXJpbmcgIiYjeDAwRTU7Ij4gPCFFTlRJVFkgYWVsaWcgIiYjeDAwRTY7Ij4gPCFFTlRJVFkgY2NlZGlsICImI3gwMEU3OyI+IDwhRU5USVRZIGVncmF2ZSAiJiN4MDBFODsiPiA8IUVOVElUWSBlYWN1dGUgIiYjeDAwRTk7Ij4gPCFFTlRJVFkgZWNpcmMgIiYjeDAwRUE7Ij4gPCFFTlRJVFkgZXVtbCAiJiN4MDBFQjsiPiA8IUVOVElUWSBpZ3JhdmUgIiYjeDAwRUM7Ij4gPCFFTlRJVFkgaWFjdXRlICImI3gwMEVEOyI+IDwhRU5USVRZIGljaXJjICImI3gwMEVFOyI+IDwhRU5USVRZIGl1bWwgIiYjeDAwRUY7Ij4gPCFFTlRJVFkgZXRoICImI3gwMEYwOyI+IDwhRU5USVRZIG50aWxkZSAiJiN4MDBGMTsiPiA8IUVOVElUWSBvZ3JhdmUgIiYjeDAwRjI7Ij4gPCFFTlRJVFkgb2FjdXRlICImI3gwMEYzOyI+IDwhRU5USVRZIG9jaXJjICImI3gwMEY0OyI+IDwhRU5USVRZIG90aWxkZSAiJiN4MDBGNTsiPiA8IUVOVElUWSBvdW1sICImI3gwMEY2OyI+IDwhRU5USVRZIGRpdmlkZSAiJiN4MDBGNzsiPiA8IUVOVElUWSBvc2xhc2ggIiYjeDAwRjg7Ij4gPCFFTlRJVFkgdWdyYXZlICImI3gwMEY5OyI+IDwhRU5USVRZIHVhY3V0ZSAiJiN4MDBGQTsiPiA8IUVOVElUWSB1Y2lyYyAiJiN4MDBGQjsiPiA8IUVOVElUWSB1dW1sICImI3gwMEZDOyI+IDwhRU5USVRZIHlhY3V0ZSAiJiN4MDBGRDsiPiA8IUVOVElUWSB0aG9ybiAiJiN4MDBGRTsiPiA8IUVOVElUWSB5dW1sICImI3gwMEZGOyI+IDwhRU5USVRZIE9FbGlnICImI3gwMTUyOyI+IDwhRU5USVRZIG9lbGlnICImI3gwMTUzOyI+IDwhRU5USVRZIFNjYXJvbiAiJiN4MDE2MDsiPiA8IUVOVElUWSBzY2Fyb24gIiYjeDAxNjE7Ij4gPCFFTlRJVFkgWXVtbCAiJiN4MDE3ODsiPiA8IUVOVElUWSBmbm9mICImI3gwMTkyOyI+IDwhRU5USVRZIGNpcmMgIiYjeDAyQzY7Ij4gPCFFTlRJVFkgdGlsZGUgIiYjeDAyREM7Ij4gPCFFTlRJVFkgQWxwaGEgIiYjeDAzOTE7Ij4gPCFFTlRJVFkgQmV0YSAiJiN4MDM5MjsiPiA8IUVOVElUWSBHYW1tYSAiJiN4MDM5MzsiPiA8IUVOVElUWSBFcHNpbG9uICImI3gwMzk1OyI+IDwhRU5USVRZIFpldGEgIiYjeDAzOTY7Ij4gPCFFTlRJVFkgRXRhICImI3gwMzk3OyI+IDwhRU5USVRZIFRoZXRhICImI3gwMzk4OyI+IDwhRU5USVRZIElvdGEgIiYjeDAzOTk7Ij4gPCFFTlRJVFkgS2FwcGEgIiYjeDAzOUE7Ij4gPCFFTlRJVFkgTGFtYmRhICImI3gwMzlCOyI+IDwhRU5USVRZIE11ICImI3gwMzlDOyI+IDwhRU5USVRZIE51ICImI3gwMzlEOyI+IDwhRU5USVRZIFhpICImI3gwMzlFOyI+IDwhRU5USVRZIE9taWNyb24gIiYjeDAzOUY7Ij4gPCFFTlRJVFkgUGkgIiYjeDAzQTA7Ij4gPCFFTlRJVFkgUmhvICImI3gwM0ExOyI+IDwhRU5USVRZIFNpZ21hICImI3gwM0EzOyI+IDwhRU5USVRZIFRhdSAiJiN4MDNBNDsiPiA8IUVOVElUWSBVcHNpbG9uICImI3gwM0E1OyI+IDwhRU5USVRZIFBoaSAiJiN4MDNBNjsiPiA8IUVOVElUWSBDaGkgIiYjeDAzQTc7Ij4gPCFFTlRJVFkgUHNpICImI3gwM0E4OyI+IDwhRU5USVRZIE9tZWdhICImI3gwM0E5OyI+IDwhRU5USVRZIGFscGhhICImI3gwM0IxOyI+IDwhRU5USVRZIGJldGEgIiYjeDAzQjI7Ij4gPCFFTlRJVFkgZ2FtbWEgIiYjeDAzQjM7Ij4gPCFFTlRJVFkgZGVsdGEgIiYjeDAzQjQ7Ij4gPCFFTlRJVFkgZXBzaWxvbiAiJiN4MDNCNTsiPiA8IUVOVElUWSB6ZXRhICImI3gwM0I2OyI+IDwhRU5USVRZIGV0YSAiJiN4MDNCNzsiPiA8IUVOVElUWSB0aGV0YSAiJiN4MDNCODsiPiA8IUVOVElUWSBpb3RhICImI3gwM0I5OyI+IDwhRU5USVRZIGthcHBhICImI3gwM0JBOyI+IDwhRU5USVRZIGxhbWJkYSAiJiN4MDNCQjsiPiA8IUVOVElUWSBtdSAiJiN4MDNCQzsiPiA8IUVOVElUWSBudSAiJiN4MDNCRDsiPiA8IUVOVElUWSB4aSAiJiN4MDNCRTsiPiA8IUVOVElUWSBvbWljcm9uICImI3gwM0JGOyI+IDwhRU5USVRZIHBpICImI3gwM0MwOyI+IDwhRU5USVRZIHJobyAiJiN4MDNDMTsiPiA8IUVOVElUWSBzaWdtYWYgIiYjeDAzQzI7Ij4gPCFFTlRJVFkgc2lnbWEgIiYjeDAzQzM7Ij4gPCFFTlRJVFkgdGF1ICImI3gwM0M0OyI+IDwhRU5USVRZIHVwc2lsb24gIiYjeDAzQzU7Ij4gPCFFTlRJVFkgcGhpICImI3gwM0M2OyI+IDwhRU5USVRZIGNoaSAiJiN4MDNDNzsiPiA8IUVOVElUWSBwc2kgIiYjeDAzQzg7Ij4gPCFFTlRJVFkgb21lZ2EgIiYjeDAzQzk7Ij4gPCFFTlRJVFkgdGhldGFzeW0gIiYjeDAzRDE7Ij4gPCFFTlRJVFkgdXBzaWggIiYjeDAzRDI7Ij4gPCFFTlRJVFkgcGl2ICImI3gwM0Q2OyI+IDwhRU5USVRZIGVuc3AgIiYjeDIwMDI7Ij4gPCFFTlRJVFkgZW1zcCAiJiN4MjAwMzsiPiA8IUVOVElUWSB0aGluc3AgIiYjeDIwMDk7Ij4gPCFFTlRJVFkgenduaiAiJiN4MjAwQzsiPiA8IUVOVElUWSB6d2ogIiYjeDIwMEQ7Ij4gPCFFTlRJVFkgbHJtICImI3gyMDBFOyI+IDwhRU5USVRZIHJsbSAiJiN4MjAwRjsiPiA8IUVOVElUWSBuZGFzaCAiJiN4MjAxMzsiPiA8IUVOVElUWSBtZGFzaCAiJiN4MjAxNDsiPiA8IUVOVElUWSBsc3F1byAiJiN4MjAxODsiPiA8IUVOVElUWSByc3F1byAiJiN4MjAxOTsiPiA8IUVOVElUWSBzYnF1byAiJiN4MjAxQTsiPiA8IUVOVElUWSBsZHF1byAiJiN4MjAxQzsiPiA8IUVOVElUWSByZHF1byAiJiN4MjAxRDsiPiA8IUVOVElUWSBiZHF1byAiJiN4MjAxRTsiPiA8IUVOVElUWSBkYWdnZXIgIiYjeDIwMjA7Ij4gPCFFTlRJVFkgRGFnZ2VyICImI3gyMDIxOyI+IDwhRU5USVRZIGJ1bGwgIiYjeDIwMjI7Ij4gPCFFTlRJVFkgaGVsbGlwICImI3gyMDI2OyI+IDwhRU5USVRZIHBlcm1pbCAiJiN4MjAzMDsiPiA8IUVOVElUWSBwcmltZSAiJiN4MjAzMjsiPiA8IUVOVElUWSBQcmltZSAiJiN4MjAzMzsiPiA8IUVOVElUWSBsc2FxdW8gIiYjeDIwMzk7Ij4gPCFFTlRJVFkgcnNhcXVvICImI3gyMDNBOyI+IDwhRU5USVRZIG9saW5lICImI3gyMDNFOyI+IDwhRU5USVRZIGZyYXNsICImI3gyMDQ0OyI+IDwhRU5USVRZIGV1cm8gIiYjeDIwQUM7Ij4gPCFFTlRJVFkgaW1hZ2UgIiYjeDIxMTE7Ij4gPCFFTlRJVFkgd2VpZXJwICImI3gyMTE4OyI+IDwhRU5USVRZIHJlYWwgIiYjeDIxMUM7Ij4gPCFFTlRJVFkgdHJhZGUgIiYjeDIxMjI7Ij4gPCFFTlRJVFkgYWxlZnN5bSAiJiN4MjEzNTsiPiA8IUVOVElUWSBsYXJyICImI3gyMTkwOyI+IDwhRU5USVRZIHVhcnIgIiYjeDIxOTE7Ij4gPCFFTlRJVFkgcmFyciAiJiN4MjE5MjsiPiA8IUVOVElUWSBkYXJyICImI3gyMTkzOyI+IDwhRU5USVRZIGhhcnIgIiYjeDIxOTQ7Ij4gPCFFTlRJVFkgY3JhcnIgIiYjeDIxQjU7Ij4gPCFFTlRJVFkgbEFyciAiJiN4MjFEMDsiPiA8IUVOVElUWSB1QXJyICImI3gyMUQxOyI+IDwhRU5USVRZIHJBcnIgIiYjeDIxRDI7Ij4gPCFFTlRJVFkgZEFyciAiJiN4MjFEMzsiPiA8IUVOVElUWSBoQXJyICImI3gyMUQ0OyI+IDwhRU5USVRZIGZvcmFsbCAiJiN4MjIwMDsiPiA8IUVOVElUWSBwYXJ0ICImI3gyMjAyOyI+IDwhRU5USVRZIGV4aXN0ICImI3gyMjAzOyI+IDwhRU5USVRZIGVtcHR5ICImI3gyMjA1OyI+IDwhRU5USVRZIG5hYmxhICImI3gyMjA3OyI+IDwhRU5USVRZIGlzaW4gIiYjeDIyMDg7Ij4gPCFFTlRJVFkgbm90aW4gIiYjeDIyMDk7Ij4gPCFFTlRJVFkgbmkgIiYjeDIyMEI7Ij4gPCFFTlRJVFkgcHJvZCAiJiN4MjIwRjsiPiA8IUVOVElUWSBzdW0gIiYjeDIyMTE7Ij4gPCFFTlRJVFkgbWludXMgIiYjeDIyMTI7Ij4gPCFFTlRJVFkgbG93YXN0ICImI3gyMjE3OyI+IDwhRU5USVRZIHJhZGljICImI3gyMjFBOyI+IDwhRU5USVRZIHByb3AgIiYjeDIyMUQ7Ij4gPCFFTlRJVFkgaW5maW4gIiYjeDIyMUU7Ij4gPCFFTlRJVFkgYW5nICImI3gyMjIwOyI+IDwhRU5USVRZIGFuZCAiJiN4MjIyNzsiPiA8IUVOVElUWSBvciAiJiN4MjIyODsiPiA8IUVOVElUWSBjYXAgIiYjeDIyMjk7Ij4gPCFFTlRJVFkgY3VwICImI3gyMjJBOyI+IDwhRU5USVRZIGludCAiJiN4MjIyQjsiPiA8IUVOVElUWSB0aGVyZTQgIiYjeDIyMzQ7Ij4gPCFFTlRJVFkgc2ltICImI3gyMjNDOyI+IDwhRU5USVRZIGNvbmcgIiYjeDIyNDU7Ij4gPCFFTlRJVFkgYXN5bXAgIiYjeDIyNDg7Ij4gPCFFTlRJVFkgbmUgIiYjeDIyNjA7Ij4gPCFFTlRJVFkgZXF1aXYgIiYjeDIyNjE7Ij4gPCFFTlRJVFkgbGUgIiYjeDIyNjQ7Ij4gPCFFTlRJVFkgZ2UgIiYjeDIyNjU7Ij4gPCFFTlRJVFkgc3ViICImI3gyMjgyOyI+IDwhRU5USVRZIHN1cCAiJiN4MjI4MzsiPiA8IUVOVElUWSBuc3ViICImI3gyMjg0OyI+IDwhRU5USVRZIHN1YmUgIiYjeDIyODY7Ij4gPCFFTlRJVFkgc3VwZSAiJiN4MjI4NzsiPiA8IUVOVElUWSBvcGx1cyAiJiN4MjI5NTsiPiA8IUVOVElUWSBvdGltZXMgIiYjeDIyOTc7Ij4gPCFFTlRJVFkgcGVycCAiJiN4MjJBNTsiPiA8IUVOVElUWSBzZG90ICImI3gyMkM1OyI+IDwhRU5USVRZIGxjZWlsICImI3gyMzA4OyI+IDwhRU5USVRZIHJjZWlsICImI3gyMzA5OyI+IDwhRU5USVRZIGxmbG9vciAiJiN4MjMwQTsiPiA8IUVOVElUWSByZmxvb3IgIiYjeDIzMEI7Ij4gPCFFTlRJVFkgbGFuZyAiJiN4MjMyOTsiPiA8IUVOVElUWSByYW5nICImI3gyMzJBOyI+IDwhRU5USVRZIGxveiAiJiN4MjVDQTsiPiA8IUVOVElUWSBzcGFkZXMgIiYjeDI2NjA7Ij4gPCFFTlRJVFkgY2x1YnMgIiYjeDI2NjM7Ij4gPCFFTlRJVFkgaGVhcnRzICImI3gyNjY1OyI+IDwhRU5USVRZIGRpYW1zICImI3gyNjY2OyI+IF0+JzsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Rating.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBIYW5kbGVzIGA8bWVkaWE6cmF0aW5nPmAgb3IgYDxpdHVuZXM6ZXhwbGljaXQ+YCB0YWdzIGFzIGRlZmluZWQgaW4gTWVkaWEgUlNTIGFuZCBpVHVuZXMgUlNTIHJlc3BlY3RpdmVseQogKgogKiBVc2VkIGJ5IHtAc2VlIFNpbXBsZVBpZV9FbmNsb3N1cmU6OmdldF9yYXRpbmcoKX0gYW5kIHtAc2VlIFNpbXBsZVBpZV9FbmNsb3N1cmU6OmdldF9yYXRpbmdzKCl9CiAqCiAqIFRoaXMgY2xhc3MgY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCB7QHNlZSBTaW1wbGVQaWU6OnNldF9yYXRpbmdfY2xhc3MoKX0KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIEFQSQogKi8KY2xhc3MgU2ltcGxlUGllX1JhdGluZwp7CgkvKioKCSAqIFJhdGluZyBzY2hlbWUKCSAqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfc2NoZW1lKCkKCSAqLwoJdmFyICRzY2hlbWU7CgoJLyoqCgkgKiBSYXRpbmcgdmFsdWUKCSAqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfdmFsdWUoKQoJICovCgl2YXIgJHZhbHVlOwoKCS8qKgoJICogQ29uc3RydWN0b3IsIHVzZWQgdG8gaW5wdXQgdGhlIGRhdGEKCSAqCgkgKiBGb3IgZG9jdW1lbnRhdGlvbiBvbiBhbGwgdGhlIHBhcmFtZXRlcnMsIHNlZSB0aGUgY29ycmVzcG9uZGluZwoJICogcHJvcGVydGllcyBhbmQgdGhlaXIgYWNjZXNzb3JzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc2NoZW1lID0gbnVsbCwgJHZhbHVlID0gbnVsbCkKCXsKCQkkdGhpcy0+c2NoZW1lID0gJHNjaGVtZTsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsdWU7Cgl9CgoJLyoqCgkgKiBTdHJpbmctaWZpZWQgdmVyc2lvbgoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKCXsKCQkvLyBUaGVyZSBpcyBubyAkdGhpcy0+ZGF0YSBoZXJlCgkJcmV0dXJuIG1kNShzZXJpYWxpemUoJHRoaXMpKTsKCX0KCgkvKioKCSAqIEdldCB0aGUgb3JnYW5pemF0aW9uYWwgc2NoZW1lIGZvciB0aGUgcmF0aW5nCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3NjaGVtZSgpCgl7CgkJaWYgKCR0aGlzLT5zY2hlbWUgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNjaGVtZTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgcmF0aW5nCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3ZhbHVlKCkKCXsKCQlpZiAoJHRoaXMtPnZhbHVlICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT52YWx1ZTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Registry.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBIYW5kbGVzIGNyZWF0aW5nIG9iamVjdHMgYW5kIGNhbGxpbmcgbWV0aG9kcwogKgogKiBBY2Nlc3MgdGhpcyB2aWEge0BzZWUgU2ltcGxlUGllOjpnZXRfcmVnaXN0cnkoKX0KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqLwpjbGFzcyBTaW1wbGVQaWVfUmVnaXN0cnkKewoJLyoqCgkgKiBEZWZhdWx0IGNsYXNzIG1hcHBpbmcKCSAqCgkgKiBPdmVycmlkaW5nIGNsYXNzZXMgKm11c3QqIHN1YmNsYXNzIHRoZXNlLgoJICoKCSAqIEB2YXIgYXJyYXkKCSAqLwoJcHJvdGVjdGVkICRkZWZhdWx0ID0gYXJyYXkoCgkJJ0NhY2hlJyA9PiAnU2ltcGxlUGllX0NhY2hlJywKCQknTG9jYXRvcicgPT4gJ1NpbXBsZVBpZV9Mb2NhdG9yJywKCQknUGFyc2VyJyA9PiAnU2ltcGxlUGllX1BhcnNlcicsCgkJJ0ZpbGUnID0+ICdTaW1wbGVQaWVfRmlsZScsCgkJJ1Nhbml0aXplJyA9PiAnU2ltcGxlUGllX1Nhbml0aXplJywKCQknSXRlbScgPT4gJ1NpbXBsZVBpZV9JdGVtJywKCQknQXV0aG9yJyA9PiAnU2ltcGxlUGllX0F1dGhvcicsCgkJJ0NhdGVnb3J5JyA9PiAnU2ltcGxlUGllX0NhdGVnb3J5JywKCQknRW5jbG9zdXJlJyA9PiAnU2ltcGxlUGllX0VuY2xvc3VyZScsCgkJJ0NhcHRpb24nID0+ICdTaW1wbGVQaWVfQ2FwdGlvbicsCgkJJ0NvcHlyaWdodCcgPT4gJ1NpbXBsZVBpZV9Db3B5cmlnaHQnLAoJCSdDcmVkaXQnID0+ICdTaW1wbGVQaWVfQ3JlZGl0JywKCQknUmF0aW5nJyA9PiAnU2ltcGxlUGllX1JhdGluZycsCgkJJ1Jlc3RyaWN0aW9uJyA9PiAnU2ltcGxlUGllX1Jlc3RyaWN0aW9uJywKCQknQ29udGVudF9UeXBlX1NuaWZmZXInID0+ICdTaW1wbGVQaWVfQ29udGVudF9UeXBlX1NuaWZmZXInLAoJCSdTb3VyY2UnID0+ICdTaW1wbGVQaWVfU291cmNlJywKCQknTWlzYycgPT4gJ1NpbXBsZVBpZV9NaXNjJywKCQknWE1MX0RlY2xhcmF0aW9uX1BhcnNlcicgPT4gJ1NpbXBsZVBpZV9YTUxfRGVjbGFyYXRpb25fUGFyc2VyJywKCQknUGFyc2VfRGF0ZScgPT4gJ1NpbXBsZVBpZV9QYXJzZV9EYXRlJywKCSk7CgoJLyoqCgkgKiBDbGFzcyBtYXBwaW5nCgkgKgoJICogQHNlZSByZWdpc3RlcigpCgkgKiBAdmFyIGFycmF5CgkgKi8KCXByb3RlY3RlZCAkY2xhc3NlcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBMZWdhY3kgY2xhc3NlcwoJICoKCSAqIEBzZWUgcmVnaXN0ZXIoKQoJICogQHZhciBhcnJheQoJICovCglwcm90ZWN0ZWQgJGxlZ2FjeSA9IGFycmF5KCk7CgoJLyoqCgkgKiBDb25zdHJ1Y3RvcgoJICoKCSAqIE5vLW9wCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsgfQoKCS8qKgoJICogUmVnaXN0ZXIgYSBjbGFzcwoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgU2VlIHtAc2VlICRkZWZhdWx0fSBmb3IgbmFtZXMKCSAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIENsYXNzIG5hbWUsIG11c3Qgc3ViY2xhc3MgdGhlIGNvcnJlc3BvbmRpbmcgZGVmYXVsdAoJICogQHBhcmFtIGJvb2wgJGxlZ2FjeSBXaGV0aGVyIHRvIGVuYWJsZSBsZWdhY3kgc3VwcG9ydCBmb3IgdGhpcyBjbGFzcwoJICogQHJldHVybiBib29sIFN1Y2Nlc3NmdWxuZXNzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcigkdHlwZSwgJGNsYXNzLCAkbGVnYWN5ID0gZmFsc2UpCgl7CgkJaWYgKCFAaXNfc3ViY2xhc3Nfb2YoJGNsYXNzLCAkdGhpcy0+ZGVmYXVsdFskdHlwZV0pKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJJHRoaXMtPmNsYXNzZXNbJHR5cGVdID0gJGNsYXNzOwoKCQlpZiAoJGxlZ2FjeSkKCQl7CgkJCSR0aGlzLT5sZWdhY3lbXSA9ICRjbGFzczsKCQl9CgoJCXJldHVybiB0cnVlOwoJfQoKCS8qKgoJICogR2V0IHRoZSBjbGFzcyByZWdpc3RlcmVkIGZvciBhIHR5cGUKCSAqCgkgKiBXaGVyZSBwb3NzaWJsZSwgdXNlIHtAc2VlIGNyZWF0ZSgpfSBvciB7QHNlZSBjYWxsKCl9IGluc3RlYWQKCSAqCgkgKiBAcGFyYW0gc3RyaW5nICR0eXBlCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfY2xhc3MoJHR5cGUpCgl7CgkJaWYgKCFlbXB0eSgkdGhpcy0+Y2xhc3Nlc1skdHlwZV0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5jbGFzc2VzWyR0eXBlXTsKCQl9CgkJaWYgKCFlbXB0eSgkdGhpcy0+ZGVmYXVsdFskdHlwZV0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5kZWZhdWx0WyR0eXBlXTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCS8qKgoJICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgZ2l2ZW4gdHlwZQoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJHR5cGUKCSAqIEBwYXJhbSBhcnJheSAkcGFyYW1ldGVycyBQYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIGNvbnN0cnVjdG9yCgkgKiBAcmV0dXJuIG9iamVjdCBJbnN0YW5jZSBvZiBjbGFzcwoJICovCglwdWJsaWMgZnVuY3Rpb24gJmNyZWF0ZSgkdHlwZSwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKQoJewoJCSRjbGFzcyA9ICR0aGlzLT5nZXRfY2xhc3MoJHR5cGUpOwoKCQlpZiAoaW5fYXJyYXkoJGNsYXNzLCAkdGhpcy0+bGVnYWN5KSkKCQl7CgkJCXN3aXRjaCAoJHR5cGUpCgkJCXsKCQkJCWNhc2UgJ2xvY2F0b3InOgoJCQkJCS8vIExlZ2FjeTogZmlsZSwgdGltZW91dCwgdXNlcmFnZW50LCBmaWxlX2NsYXNzLCBtYXhfY2hlY2tlZF9mZWVkcywgY29udGVudF90eXBlX3NuaWZmZXJfY2xhc3MKCQkJCQkvLyBTcGVjaWZpZWQ6IGZpbGUsIHRpbWVvdXQsIHVzZXJhZ2VudCwgbWF4X2NoZWNrZWRfZmVlZHMKCQkJCQkkcmVwbGFjZW1lbnQgPSBhcnJheSgkdGhpcy0+Z2V0X2NsYXNzKCdmaWxlJyksICRwYXJhbWV0ZXJzWzNdLCAkdGhpcy0+Z2V0X2NsYXNzKCdjb250ZW50X3R5cGVfc25pZmZlcicpKTsKCQkJCQlhcnJheV9zcGxpY2UoJHBhcmFtZXRlcnMsIDMsIDEsICRyZXBsYWNlbWVudCk7CgkJCQkJYnJlYWs7CgkJCX0KCQl9CgoJCWlmICghbWV0aG9kX2V4aXN0cygkY2xhc3MsICdfX2NvbnN0cnVjdCcpKQoJCXsKCQkJJGluc3RhbmNlID0gbmV3ICRjbGFzczsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlZmxlY3RvciA9IG5ldyBSZWZsZWN0aW9uQ2xhc3MoJGNsYXNzKTsKCQkJJGluc3RhbmNlID0gJHJlZmxlY3Rvci0+bmV3SW5zdGFuY2VBcmdzKCRwYXJhbWV0ZXJzKTsKCQl9CgoJCWlmIChtZXRob2RfZXhpc3RzKCRpbnN0YW5jZSwgJ3NldF9yZWdpc3RyeScpKQoJCXsKCQkJJGluc3RhbmNlLT5zZXRfcmVnaXN0cnkoJHRoaXMpOwoJCX0KCQlyZXR1cm4gJGluc3RhbmNlOwoJfQoKCS8qKgoJICogQ2FsbCBhIHN0YXRpYyBtZXRob2QgZm9yIGEgdHlwZQoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJHR5cGUKCSAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAoJICogQHBhcmFtIGFycmF5ICRwYXJhbWV0ZXJzCgkgKiBAcmV0dXJuIG1peGVkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiAmY2FsbCgkdHlwZSwgJG1ldGhvZCwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKQoJewoJCSRjbGFzcyA9ICR0aGlzLT5nZXRfY2xhc3MoJHR5cGUpOwoKCQlpZiAoaW5fYXJyYXkoJGNsYXNzLCAkdGhpcy0+bGVnYWN5KSkKCQl7CgkJCXN3aXRjaCAoJHR5cGUpCgkJCXsKCQkJCWNhc2UgJ0NhY2hlJzoKCQkJCQkvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgbm9uLXN0YXRpYwoJCQkJCS8vIENhY2hlOjpjcmVhdGUoKSBtZXRob2RzCgkJCQkJaWYgKCRtZXRob2QgPT09ICdnZXRfaGFuZGxlcicpCgkJCQkJewoJCQkJCQkkcmVzdWx0ID0gQGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCRjbGFzcywgJ2NyZWF0ZScpLCAkcGFyYW1ldGVycyk7CgkJCQkJCXJldHVybiAkcmVzdWx0OwoJCQkJCX0KCQkJCQlicmVhazsKCQkJfQoJCX0KCgkJJHJlc3VsdCA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCRjbGFzcywgJG1ldGhvZCksICRwYXJhbWV0ZXJzKTsKCQlyZXR1cm4gJHJlc3VsdDsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Restriction.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBIYW5kbGVzIGA8bWVkaWE6cmVzdHJpY3Rpb24+YCBhcyBkZWZpbmVkIGluIE1lZGlhIFJTUwogKgogKiBVc2VkIGJ5IHtAc2VlIFNpbXBsZVBpZV9FbmNsb3N1cmU6OmdldF9yZXN0cmljdGlvbigpfSBhbmQge0BzZWUgU2ltcGxlUGllX0VuY2xvc3VyZTo6Z2V0X3Jlc3RyaWN0aW9ucygpfQogKgogKiBUaGlzIGNsYXNzIGNhbiBiZSBvdmVybG9hZGVkIHdpdGgge0BzZWUgU2ltcGxlUGllOjpzZXRfcmVzdHJpY3Rpb25fY2xhc3MoKX0KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIEFQSQogKi8KY2xhc3MgU2ltcGxlUGllX1Jlc3RyaWN0aW9uCnsKCS8qKgoJICogUmVsYXRpb25zaGlwICgnYWxsb3cnLydkZW55JykKCSAqCgkgKiBAdmFyIHN0cmluZwoJICogQHNlZSBnZXRfcmVsYXRpb25zaGlwKCkKCSAqLwoJdmFyICRyZWxhdGlvbnNoaXA7CgoJLyoqCgkgKiBUeXBlIG9mIHJlc3RyaWN0aW9uCgkgKgoJICogQHZhciBzdHJpbmcKCSAqIEBzZWUgZ2V0X3R5cGUoKQoJICovCgl2YXIgJHR5cGU7CgoJLyoqCgkgKiBSZXN0cmljdGVkIHZhbHVlcwoJICoKCSAqIEB2YXIgc3RyaW5nCgkgKiBAc2VlIGdldF92YWx1ZSgpCgkgKi8KCXZhciAkdmFsdWU7CgoJLyoqCgkgKiBDb25zdHJ1Y3RvciwgdXNlZCB0byBpbnB1dCB0aGUgZGF0YQoJICoKCSAqIEZvciBkb2N1bWVudGF0aW9uIG9uIGFsbCB0aGUgcGFyYW1ldGVycywgc2VlIHRoZSBjb3JyZXNwb25kaW5nCgkgKiBwcm9wZXJ0aWVzIGFuZCB0aGVpciBhY2Nlc3NvcnMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZWxhdGlvbnNoaXAgPSBudWxsLCAkdHlwZSA9IG51bGwsICR2YWx1ZSA9IG51bGwpCgl7CgkJJHRoaXMtPnJlbGF0aW9uc2hpcCA9ICRyZWxhdGlvbnNoaXA7CgkJJHRoaXMtPnR5cGUgPSAkdHlwZTsKCQkkdGhpcy0+dmFsdWUgPSAkdmFsdWU7Cgl9CgoJLyoqCgkgKiBTdHJpbmctaWZpZWQgdmVyc2lvbgoJICoKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKCXsKCQkvLyBUaGVyZSBpcyBubyAkdGhpcy0+ZGF0YSBoZXJlCgkJcmV0dXJuIG1kNShzZXJpYWxpemUoJHRoaXMpKTsKCX0KCgkvKioKCSAqIEdldCB0aGUgcmVsYXRpb25zaGlwCgkgKgoJICogQHJldHVybiBzdHJpbmd8bnVsbCBFaXRoZXIgJ2FsbG93JyBvciAnZGVueScKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF9yZWxhdGlvbnNoaXAoKQoJewoJCWlmICgkdGhpcy0+cmVsYXRpb25zaGlwICE9PSBudWxsKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5yZWxhdGlvbnNoaXA7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgdHlwZQoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF90eXBlKCkKCXsKCQlpZiAoJHRoaXMtPnR5cGUgIT09IG51bGwpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnR5cGU7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIEdldCB0aGUgbGlzdCBvZiByZXN0cmljdGVkIHRoaW5ncwoJICoKCSAqIEByZXR1cm4gc3RyaW5nfG51bGwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldF92YWx1ZSgpCgl7CgkJaWYgKCR0aGlzLT52YWx1ZSAhPT0gbnVsbCkKCQl7CgkJCXJldHVybiAkdGhpcy0+dmFsdWU7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Sanitize.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBVc2VkIGZvciBkYXRhIGNsZWFudXAgYW5kIHBvc3QtcHJvY2Vzc2luZwogKgogKgogKiBUaGlzIGNsYXNzIGNhbiBiZSBvdmVybG9hZGVkIHdpdGgge0BzZWUgU2ltcGxlUGllOjpzZXRfc2FuaXRpemVfY2xhc3MoKX0KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEB0b2RvIE1vdmUgdG8gdXNpbmcgYW4gYWN0dWFsIEhUTUwgcGFyc2VyICh0aGlzIHdpbGwgYWxsb3cgdGFncyB0byBiZSBwcm9wZXJseSBzdHJpcHBlZCwgYW5kIHRvIHN3aXRjaCBiZXR3ZWVuIEhUTUwgYW5kIFhIVE1MKSwgdGhpcyB3aWxsIGFsc28gbWFrZSBpdCBlYXNpZXIgdG8gc2hvcnRlbiBhIHN0cmluZyB3aGlsZSBwcmVzZXJ2aW5nIEhUTUwgdGFncwogKi8KY2xhc3MgU2ltcGxlUGllX1Nhbml0aXplCnsKCS8vIFByaXZhdGUgdmFycwoJdmFyICRiYXNlOwoKCS8vIE9wdGlvbnMKCXZhciAkcmVtb3ZlX2RpdiA9IHRydWU7Cgl2YXIgJGltYWdlX2hhbmRsZXIgPSAnJzsKCXZhciAkc3RyaXBfaHRtbHRhZ3MgPSBhcnJheSgnYmFzZScsICdibGluaycsICdib2R5JywgJ2RvY3R5cGUnLCAnZW1iZWQnLCAnZm9udCcsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2h0bWwnLCAnaWZyYW1lJywgJ2lucHV0JywgJ21hcnF1ZWUnLCAnbWV0YScsICdub3NjcmlwdCcsICdvYmplY3QnLCAncGFyYW0nLCAnc2NyaXB0JywgJ3N0eWxlJyk7Cgl2YXIgJGVuY29kZV9pbnN0ZWFkX29mX3N0cmlwID0gZmFsc2U7Cgl2YXIgJHN0cmlwX2F0dHJpYnV0ZXMgPSBhcnJheSgnYmdzb3VuZCcsICdleHByJywgJ2lkJywgJ3N0eWxlJywgJ29uY2xpY2snLCAnb25lcnJvcicsICdvbmZpbmlzaCcsICdvbm1vdXNlb3ZlcicsICdvbm1vdXNlb3V0JywgJ29uZm9jdXMnLCAnb25ibHVyJywgJ2xvd3NyYycsICdkeW5zcmMnKTsKCXZhciAkYWRkX2F0dHJpYnV0ZXMgPSBhcnJheSgnYXVkaW8nID0+IGFycmF5KCdwcmVsb2FkJyA9PiAnbm9uZScpLCAnaWZyYW1lJyA9PiBhcnJheSgnc2FuZGJveCcgPT4gJ2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nKSwgJ3ZpZGVvJyA9PiBhcnJheSgncHJlbG9hZCcgPT4gJ25vbmUnKSk7Cgl2YXIgJHN0cmlwX2NvbW1lbnRzID0gZmFsc2U7Cgl2YXIgJG91dHB1dF9lbmNvZGluZyA9ICdVVEYtOCc7Cgl2YXIgJGVuYWJsZV9jYWNoZSA9IHRydWU7Cgl2YXIgJGNhY2hlX2xvY2F0aW9uID0gJy4vY2FjaGUnOwoJdmFyICRjYWNoZV9uYW1lX2Z1bmN0aW9uID0gJ21kNSc7Cgl2YXIgJHRpbWVvdXQgPSAxMDsKCXZhciAkdXNlcmFnZW50ID0gJyc7Cgl2YXIgJGZvcmNlX2Zzb2Nrb3BlbiA9IGZhbHNlOwoJdmFyICRyZXBsYWNlX3VybF9hdHRyaWJ1dGVzID0gbnVsbDsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQoJewoJCS8vIFNldCBkZWZhdWx0cwoJCSR0aGlzLT5zZXRfdXJsX3JlcGxhY2VtZW50cyhudWxsKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlX2RpdigkZW5hYmxlID0gdHJ1ZSkKCXsKCQkkdGhpcy0+cmVtb3ZlX2RpdiA9IChib29sKSAkZW5hYmxlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRfaW1hZ2VfaGFuZGxlcigkcGFnZSA9IGZhbHNlKQoJewoJCWlmICgkcGFnZSkKCQl7CgkJCSR0aGlzLT5pbWFnZV9oYW5kbGVyID0gKHN0cmluZykgJHBhZ2U7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5pbWFnZV9oYW5kbGVyID0gZmFsc2U7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRfcmVnaXN0cnkoU2ltcGxlUGllX1JlZ2lzdHJ5ICRyZWdpc3RyeSkKCXsKCQkkdGhpcy0+cmVnaXN0cnkgPSAkcmVnaXN0cnk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHBhc3NfY2FjaGVfZGF0YSgkZW5hYmxlX2NhY2hlID0gdHJ1ZSwgJGNhY2hlX2xvY2F0aW9uID0gJy4vY2FjaGUnLCAkY2FjaGVfbmFtZV9mdW5jdGlvbiA9ICdtZDUnLCAkY2FjaGVfY2xhc3MgPSAnU2ltcGxlUGllX0NhY2hlJykKCXsKCQlpZiAoaXNzZXQoJGVuYWJsZV9jYWNoZSkpCgkJewoJCQkkdGhpcy0+ZW5hYmxlX2NhY2hlID0gKGJvb2wpICRlbmFibGVfY2FjaGU7CgkJfQoKCQlpZiAoJGNhY2hlX2xvY2F0aW9uKQoJCXsKCQkJJHRoaXMtPmNhY2hlX2xvY2F0aW9uID0gKHN0cmluZykgJGNhY2hlX2xvY2F0aW9uOwoJCX0KCgkJaWYgKCRjYWNoZV9uYW1lX2Z1bmN0aW9uKQoJCXsKCQkJJHRoaXMtPmNhY2hlX25hbWVfZnVuY3Rpb24gPSAoc3RyaW5nKSAkY2FjaGVfbmFtZV9mdW5jdGlvbjsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHBhc3NfZmlsZV9kYXRhKCRmaWxlX2NsYXNzID0gJ1NpbXBsZVBpZV9GaWxlJywgJHRpbWVvdXQgPSAxMCwgJHVzZXJhZ2VudCA9ICcnLCAkZm9yY2VfZnNvY2tvcGVuID0gZmFsc2UpCgl7CgkJaWYgKCR0aW1lb3V0KQoJCXsKCQkJJHRoaXMtPnRpbWVvdXQgPSAoc3RyaW5nKSAkdGltZW91dDsKCQl9CgoJCWlmICgkdXNlcmFnZW50KQoJCXsKCQkJJHRoaXMtPnVzZXJhZ2VudCA9IChzdHJpbmcpICR1c2VyYWdlbnQ7CgkJfQoKCQlpZiAoJGZvcmNlX2Zzb2Nrb3BlbikKCQl7CgkJCSR0aGlzLT5mb3JjZV9mc29ja29wZW4gPSAoc3RyaW5nKSAkZm9yY2VfZnNvY2tvcGVuOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gc3RyaXBfaHRtbHRhZ3MoJHRhZ3MgPSBhcnJheSgnYmFzZScsICdibGluaycsICdib2R5JywgJ2RvY3R5cGUnLCAnZW1iZWQnLCAnZm9udCcsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2h0bWwnLCAnaWZyYW1lJywgJ2lucHV0JywgJ21hcnF1ZWUnLCAnbWV0YScsICdub3NjcmlwdCcsICdvYmplY3QnLCAncGFyYW0nLCAnc2NyaXB0JywgJ3N0eWxlJykpCgl7CgkJaWYgKCR0YWdzKQoJCXsKCQkJaWYgKGlzX2FycmF5KCR0YWdzKSkKCQkJewoJCQkJJHRoaXMtPnN0cmlwX2h0bWx0YWdzID0gJHRhZ3M7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+c3RyaXBfaHRtbHRhZ3MgPSBleHBsb2RlKCcsJywgJHRhZ3MpOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5zdHJpcF9odG1sdGFncyA9IGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gZW5jb2RlX2luc3RlYWRfb2Zfc3RyaXAoJGVuY29kZSA9IGZhbHNlKQoJewoJCSR0aGlzLT5lbmNvZGVfaW5zdGVhZF9vZl9zdHJpcCA9IChib29sKSAkZW5jb2RlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzdHJpcF9hdHRyaWJ1dGVzKCRhdHRyaWJzID0gYXJyYXkoJ2Jnc291bmQnLCAnZXhwcicsICdpZCcsICdzdHlsZScsICdvbmNsaWNrJywgJ29uZXJyb3InLCAnb25maW5pc2gnLCAnb25tb3VzZW92ZXInLCAnb25tb3VzZW91dCcsICdvbmZvY3VzJywgJ29uYmx1cicsICdsb3dzcmMnLCAnZHluc3JjJykpCgl7CgkJaWYgKCRhdHRyaWJzKQoJCXsKCQkJaWYgKGlzX2FycmF5KCRhdHRyaWJzKSkKCQkJewoJCQkJJHRoaXMtPnN0cmlwX2F0dHJpYnV0ZXMgPSAkYXR0cmliczsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5zdHJpcF9hdHRyaWJ1dGVzID0gZXhwbG9kZSgnLCcsICRhdHRyaWJzKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c3RyaXBfYXR0cmlidXRlcyA9IGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gYWRkX2F0dHJpYnV0ZXMoJGF0dHJpYnMgPSBhcnJheSgnYXVkaW8nID0+IGFycmF5KCdwcmVsb2FkJyA9PiAnbm9uZScpLCAnaWZyYW1lJyA9PiBhcnJheSgnc2FuZGJveCcgPT4gJ2FsbG93LXNjcmlwdHMgYWxsb3ctc2FtZS1vcmlnaW4nKSwgJ3ZpZGVvJyA9PiBhcnJheSgncHJlbG9hZCcgPT4gJ25vbmUnKSkpCgl7CgkJaWYgKCRhdHRyaWJzKQoJCXsKCQkJaWYgKGlzX2FycmF5KCRhdHRyaWJzKSkKCQkJewoJCQkJJHRoaXMtPmFkZF9hdHRyaWJ1dGVzID0gJGF0dHJpYnM7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+YWRkX2F0dHJpYnV0ZXMgPSBleHBsb2RlKCcsJywgJGF0dHJpYnMpOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5hZGRfYXR0cmlidXRlcyA9IGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gc3RyaXBfY29tbWVudHMoJHN0cmlwID0gZmFsc2UpCgl7CgkJJHRoaXMtPnN0cmlwX2NvbW1lbnRzID0gKGJvb2wpICRzdHJpcDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2V0X291dHB1dF9lbmNvZGluZygkZW5jb2RpbmcgPSAnVVRGLTgnKQoJewoJCSR0aGlzLT5vdXRwdXRfZW5jb2RpbmcgPSAoc3RyaW5nKSAkZW5jb2Rpbmc7Cgl9CgoJLyoqCgkgKiBTZXQgZWxlbWVudC9hdHRyaWJ1dGUga2V5L3ZhbHVlIHBhaXJzIG9mIEhUTUwgYXR0cmlidXRlcwoJICogY29udGFpbmluZyBVUkxzIHRoYXQgbmVlZCB0byBiZSByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgZmVlZAoJICoKCSAqIERlZmF1bHRzIHRvIHxhfEBocmVmLCB8YXJlYXxAaHJlZiwgfGJsb2NrcXVvdGV8QGNpdGUsIHxkZWx8QGNpdGUsCgkgKiB8Zm9ybXxAYWN0aW9uLCB8aW1nfEBsb25nZGVzYywgfGltZ3xAc3JjLCB8aW5wdXR8QHNyYywgfGluc3xAY2l0ZSwKCSAqIHxxfEBjaXRlCgkgKgoJICogQHNpbmNlIDEuMAoJICogQHBhcmFtIGFycmF5fG51bGwgJGVsZW1lbnRfYXR0cmlidXRlIEVsZW1lbnQvYXR0cmlidXRlIGtleS92YWx1ZSBwYWlycywgbnVsbCBmb3IgZGVmYXVsdAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0X3VybF9yZXBsYWNlbWVudHMoJGVsZW1lbnRfYXR0cmlidXRlID0gbnVsbCkKCXsKCQlpZiAoJGVsZW1lbnRfYXR0cmlidXRlID09PSBudWxsKQoJCXsKCQkJJGVsZW1lbnRfYXR0cmlidXRlID0gYXJyYXkoCgkJCQknYScgPT4gJ2hyZWYnLAoJCQkJJ2FyZWEnID0+ICdocmVmJywKCQkJCSdibG9ja3F1b3RlJyA9PiAnY2l0ZScsCgkJCQknZGVsJyA9PiAnY2l0ZScsCgkJCQknZm9ybScgPT4gJ2FjdGlvbicsCgkJCQknaW1nJyA9PiBhcnJheSgKCQkJCQknbG9uZ2Rlc2MnLAoJCQkJCSdzcmMnCgkJCQkpLAoJCQkJJ2lucHV0JyA9PiAnc3JjJywKCQkJCSdpbnMnID0+ICdjaXRlJywKCQkJCSdxJyA9PiAnY2l0ZScKCQkJKTsKCQl9CgkJJHRoaXMtPnJlcGxhY2VfdXJsX2F0dHJpYnV0ZXMgPSAoYXJyYXkpICRlbGVtZW50X2F0dHJpYnV0ZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2FuaXRpemUoJGRhdGEsICR0eXBlLCAkYmFzZSA9ICcnKQoJewoJCSRkYXRhID0gdHJpbSgkZGF0YSk7CgkJaWYgKCRkYXRhICE9PSAnJyB8fCAkdHlwZSAmIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKQoJCXsKCQkJaWYgKCR0eXBlICYgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MKQoJCQl7CgkJCQlpZiAocHJlZ19tYXRjaCgnLygmKCMoeFswLTlhLWZBLUZdK3xbMC05XSspfFthLXpBLVowLTldKyl8PFwvW0EtWmEtel1bXlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4MkZceDNFXSonIC4gU0lNUExFUElFX1BDUkVfSFRNTF9BVFRSSUJVVEUgLiAnPikvJywgJGRhdGEpKQoJCQkJewoJCQkJCSR0eXBlIHw9IFNJTVBMRVBJRV9DT05TVFJVQ1RfSFRNTDsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkdHlwZSB8PSBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQ7CgkJCQl9CgkJCX0KCgkJCWlmICgkdHlwZSAmIFNJTVBMRVBJRV9DT05TVFJVQ1RfQkFTRTY0KQoJCQl7CgkJCQkkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGRhdGEpOwoJCQl9CgoJCQlpZiAoJHR5cGUgJiAoU0lNUExFUElFX0NPTlNUUlVDVF9IVE1MIHwgU0lNUExFUElFX0NPTlNUUlVDVF9YSFRNTCkpCgkJCXsKCgkJCQlpZiAoIWNsYXNzX2V4aXN0cygnRE9NRG9jdW1lbnQnKSkKCQkJCXsKCQkJCQl0aHJvdyBuZXcgU2ltcGxlUGllX0V4Y2VwdGlvbignRE9NRG9jdW1lbnQgbm90IGZvdW5kLCB1bmFibGUgdG8gdXNlIHNhbml0aXplcicpOwoJCQkJfQoJCQkJJGRvY3VtZW50ID0gbmV3IERPTURvY3VtZW50KCk7CgkJCQkkZG9jdW1lbnQtPmVuY29kaW5nID0gJ1VURi04JzsKCgkJCQkkZGF0YSA9ICR0aGlzLT5wcmVwcm9jZXNzKCRkYXRhLCAkdHlwZSk7CgoJCQkJc2V0X2Vycm9yX2hhbmRsZXIoYXJyYXkoJ1NpbXBsZVBpZV9NaXNjJywgJ3NpbGVuY2VfZXJyb3JzJykpOwoJCQkJJGRvY3VtZW50LT5sb2FkSFRNTCgkZGF0YSk7CgkJCQlyZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKCgkJCQkkeHBhdGggPSBuZXcgRE9NWFBhdGgoJGRvY3VtZW50KTsKCgkJCQkvLyBTdHJpcCBjb21tZW50cwoJCQkJaWYgKCR0aGlzLT5zdHJpcF9jb21tZW50cykKCQkJCXsKCQkJCQkkY29tbWVudHMgPSAkeHBhdGgtPnF1ZXJ5KCcvL2NvbW1lbnQoKScpOwoKCQkJCQlmb3JlYWNoICgkY29tbWVudHMgYXMgJGNvbW1lbnQpCgkJCQkJewoJCQkJCQkkY29tbWVudC0+cGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQoJGNvbW1lbnQpOwoJCQkJCX0KCQkJCX0KCgkJCQkvLyBTdHJpcCBvdXQgSFRNTCB0YWdzIGFuZCBhdHRyaWJ1dGVzIHRoYXQgbWlnaHQgY2F1c2UgdmFyaW91cyBzZWN1cml0eSBwcm9ibGVtcy4KCQkJCS8vIEJhc2VkIG9uIHJlY29tbWVuZGF0aW9ucyBieSBNYXJrIFBpbGdyaW0gYXQ6CgkJCQkvLyBodHRwOi8vZGl2ZWludG9tYXJrLm9yZy9hcmNoaXZlcy8yMDAzLzA2LzEyL2hvd190b19jb25zdW1lX3Jzc19zYWZlbHkKCQkJCWlmICgkdGhpcy0+c3RyaXBfaHRtbHRhZ3MpCgkJCQl7CgkJCQkJZm9yZWFjaCAoJHRoaXMtPnN0cmlwX2h0bWx0YWdzIGFzICR0YWcpCgkJCQkJewoJCQkJCQkkdGhpcy0+c3RyaXBfdGFnKCR0YWcsICRkb2N1bWVudCwgJHhwYXRoLCAkdHlwZSk7CgkJCQkJfQoJCQkJfQoKCQkJCWlmICgkdGhpcy0+c3RyaXBfYXR0cmlidXRlcykKCQkJCXsKCQkJCQlmb3JlYWNoICgkdGhpcy0+c3RyaXBfYXR0cmlidXRlcyBhcyAkYXR0cmliKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnN0cmlwX2F0dHIoJGF0dHJpYiwgJHhwYXRoKTsKCQkJCQl9CgkJCQl9CgoJCQkJaWYgKCR0aGlzLT5hZGRfYXR0cmlidXRlcykKCQkJCXsKCQkJCQlmb3JlYWNoICgkdGhpcy0+YWRkX2F0dHJpYnV0ZXMgYXMgJHRhZyA9PiAkdmFsdWVQYWlycykKCQkJCQl7CgkJCQkJCSR0aGlzLT5hZGRfYXR0cigkdGFnLCAkdmFsdWVQYWlycywgJGRvY3VtZW50KTsKCQkJCQl9CgkJCQl9CgoJCQkJLy8gUmVwbGFjZSByZWxhdGl2ZSBVUkxzCgkJCQkkdGhpcy0+YmFzZSA9ICRiYXNlOwoJCQkJZm9yZWFjaCAoJHRoaXMtPnJlcGxhY2VfdXJsX2F0dHJpYnV0ZXMgYXMgJGVsZW1lbnQgPT4gJGF0dHJpYnV0ZXMpCgkJCQl7CgkJCQkJJHRoaXMtPnJlcGxhY2VfdXJscygkZG9jdW1lbnQsICRlbGVtZW50LCAkYXR0cmlidXRlcyk7CgkJCQl9CgoJCQkJLy8gSWYgaW1hZ2UgaGFuZGxpbmcgKGNhY2hpbmcsIGV0Yy4pIGlzIGVuYWJsZWQsIGNhY2hlIGFuZCByZXdyaXRlIGFsbCB0aGUgaW1hZ2UgdGFncy4KCQkJCWlmIChpc3NldCgkdGhpcy0+aW1hZ2VfaGFuZGxlcikgJiYgKChzdHJpbmcpICR0aGlzLT5pbWFnZV9oYW5kbGVyKSAhPT0gJycgJiYgJHRoaXMtPmVuYWJsZV9jYWNoZSkKCQkJCXsKCQkJCQkkaW1hZ2VzID0gJGRvY3VtZW50LT5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7CgkJCQkJZm9yZWFjaCAoJGltYWdlcyBhcyAkaW1nKQoJCQkJCXsKCQkJCQkJaWYgKCRpbWctPmhhc0F0dHJpYnV0ZSgnc3JjJykpCgkJCQkJCXsKCQkJCQkJCSRpbWFnZV91cmwgPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+Y2FjaGVfbmFtZV9mdW5jdGlvbiwgJGltZy0+Z2V0QXR0cmlidXRlKCdzcmMnKSk7CgkJCQkJCQkkY2FjaGUgPSAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ0NhY2hlJywgJ2dldF9oYW5kbGVyJywgYXJyYXkoJHRoaXMtPmNhY2hlX2xvY2F0aW9uLCAkaW1hZ2VfdXJsLCAnc3BpJykpOwoKCQkJCQkJCWlmICgkY2FjaGUtPmxvYWQoKSkKCQkJCQkJCXsKCQkJCQkJCQkkaW1nLT5zZXRBdHRyaWJ1dGUoJ3NyYycsICR0aGlzLT5pbWFnZV9oYW5kbGVyIC4gJGltYWdlX3VybCk7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJJGZpbGUgPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnRmlsZScsIGFycmF5KCRpbWctPmdldEF0dHJpYnV0ZSgnc3JjJyksICR0aGlzLT50aW1lb3V0LCA1LCBhcnJheSgnWC1GT1JXQVJERUQtRk9SJyA9PiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXSksICR0aGlzLT51c2VyYWdlbnQsICR0aGlzLT5mb3JjZV9mc29ja29wZW4pKTsKCQkJCQkJCQkkaGVhZGVycyA9ICRmaWxlLT5oZWFkZXJzOwoKCQkJCQkJCQlpZiAoJGZpbGUtPnN1Y2Nlc3MgJiYgKCRmaWxlLT5tZXRob2QgJiBTSU1QTEVQSUVfRklMRV9TT1VSQ0VfUkVNT1RFID09PSAwIHx8ICgkZmlsZS0+c3RhdHVzX2NvZGUgPT09IDIwMCB8fCAkZmlsZS0+c3RhdHVzX2NvZGUgPiAyMDYgJiYgJGZpbGUtPnN0YXR1c19jb2RlIDwgMzAwKSkpCgkJCQkJCQkJewoJCQkJCQkJCQlpZiAoJGNhY2hlLT5zYXZlKGFycmF5KCdoZWFkZXJzJyA9PiAkZmlsZS0+aGVhZGVycywgJ2JvZHknID0+ICRmaWxlLT5ib2R5KSkpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRpbWctPnNldEF0dHJpYnV0ZSgnc3JjJywgJHRoaXMtPmltYWdlX2hhbmRsZXIgLiAkaW1hZ2VfdXJsKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCXsKCQkJCQkJCQkJCXRyaWdnZXJfZXJyb3IoIiR0aGlzLT5jYWNoZV9sb2NhdGlvbiBpcyBub3Qgd3JpdGFibGUuIE1ha2Ugc3VyZSB5b3UndmUgc2V0IHRoZSBjb3JyZWN0IHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGgsIGFuZCB0aGF0IHRoZSBsb2NhdGlvbiBpcyBzZXJ2ZXItd3JpdGFibGUuIiwgRV9VU0VSX1dBUk5JTkcpOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCS8vIEdldCBjb250ZW50IG5vZGUKCQkJCSRkaXYgPSAkZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JyktPml0ZW0oMCktPmZpcnN0Q2hpbGQ7CgkJCQkvLyBGaW5hbGx5LCBjb252ZXJ0IHRvIGEgSFRNTCBzdHJpbmcKCQkJCSRkYXRhID0gdHJpbSgkZG9jdW1lbnQtPnNhdmVIVE1MKCRkaXYpKTsKCgkJCQlpZiAoJHRoaXMtPnJlbW92ZV9kaXYpCgkJCQl7CgkJCQkJJGRhdGEgPSBwcmVnX3JlcGxhY2UoJy9ePGRpdicgLiBTSU1QTEVQSUVfUENSRV9YTUxfQVRUUklCVVRFIC4gJz4vJywgJycsICRkYXRhKTsKCQkJCQkkZGF0YSA9IHByZWdfcmVwbGFjZSgnLzxcL2Rpdj4kLycsICcnLCAkZGF0YSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJGRhdGEgPSBwcmVnX3JlcGxhY2UoJy9ePGRpdicgLiBTSU1QTEVQSUVfUENSRV9YTUxfQVRUUklCVVRFIC4gJz4vJywgJzxkaXY+JywgJGRhdGEpOwoJCQkJfQoJCQl9CgoJCQlpZiAoJHR5cGUgJiBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSkKCQkJewoJCQkJJGFic29sdXRlID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2Fic29sdXRpemVfdXJsJywgYXJyYXkoJGRhdGEsICRiYXNlKSk7CgkJCQlpZiAoJGFic29sdXRlICE9PSBmYWxzZSkKCQkJCXsKCQkJCQkkZGF0YSA9ICRhYnNvbHV0ZTsKCQkJCX0KCQkJfQoKCQkJaWYgKCR0eXBlICYgKFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCB8IFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKSkKCQkJewoJCQkJJGRhdGEgPSBodG1sc3BlY2lhbGNoYXJzKCRkYXRhLCBFTlRfQ09NUEFULCAnVVRGLTgnKTsKCQkJfQoKCQkJaWYgKCR0aGlzLT5vdXRwdXRfZW5jb2RpbmcgIT09ICdVVEYtOCcpCgkJCXsKCQkJCSRkYXRhID0gJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2NoYW5nZV9lbmNvZGluZycsIGFycmF5KCRkYXRhLCAnVVRGLTgnLCAkdGhpcy0+b3V0cHV0X2VuY29kaW5nKSk7CgkJCX0KCQl9CgkJcmV0dXJuICRkYXRhOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBwcmVwcm9jZXNzKCRodG1sLCAkdHlwZSkKCXsKCQkkcmV0ID0gJyc7CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJyU8Lz8oPzpodG1sfGJvZHkpW14+XSo/Jy4nPiVpcycsICcnLCAkaHRtbCk7CgkJaWYgKCR0eXBlICYgflNJTVBMRVBJRV9DT05TVFJVQ1RfWEhUTUwpCgkJewoJCQkvLyBBdG9tIFhIVE1MIGNvbnN0cnVjdHMgYXJlIHdyYXBwZWQgd2l0aCBhIGRpdiBieSBkZWZhdWx0CgkJCS8vIE5vdGU6IE5vIHByb3RlY3Rpb24gaWYgJGh0bWwgY29udGFpbnMgYSBzdHJheSA8L2Rpdj4hCgkJCSRodG1sID0gJzxkaXY+JyAuICRodG1sIC4gJzwvZGl2Pic7CgkJCSRyZXQgLj0gJzwhRE9DVFlQRSBodG1sPic7CgkJCSRjb250ZW50X3R5cGUgPSAndGV4dC9odG1sJzsKCQl9CgkJZWxzZQoJCXsKCQkJJHJldCAuPSAnPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPic7CgkJCSRjb250ZW50X3R5cGUgPSAnYXBwbGljYXRpb24veGh0bWwreG1sJzsKCQl9CgoJCSRyZXQgLj0gJzxodG1sPjxoZWFkPic7CgkJJHJldCAuPSAnPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSInIC4gJGNvbnRlbnRfdHlwZSAuICc7IGNoYXJzZXQ9dXRmLTgiIC8+JzsKCQkkcmV0IC49ICc8L2hlYWQ+PGJvZHk+JyAuICRodG1sIC4gJzwvYm9keT48L2h0bWw+JzsKCQlyZXR1cm4gJHJldDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZV91cmxzKCRkb2N1bWVudCwgJHRhZywgJGF0dHJpYnV0ZXMpCgl7CgkJaWYgKCFpc19hcnJheSgkYXR0cmlidXRlcykpCgkJewoJCQkkYXR0cmlidXRlcyA9IGFycmF5KCRhdHRyaWJ1dGVzKTsKCQl9CgoJCWlmICghaXNfYXJyYXkoJHRoaXMtPnN0cmlwX2h0bWx0YWdzKSB8fCAhaW5fYXJyYXkoJHRhZywgJHRoaXMtPnN0cmlwX2h0bWx0YWdzKSkKCQl7CgkJCSRlbGVtZW50cyA9ICRkb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJHRhZyk7CgkJCWZvcmVhY2ggKCRlbGVtZW50cyBhcyAkZWxlbWVudCkKCQkJewoJCQkJZm9yZWFjaCAoJGF0dHJpYnV0ZXMgYXMgJGF0dHJpYnV0ZSkKCQkJCXsKCQkJCQlpZiAoJGVsZW1lbnQtPmhhc0F0dHJpYnV0ZSgkYXR0cmlidXRlKSkKCQkJCQl7CgkJCQkJCSR2YWx1ZSA9ICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhYnNvbHV0aXplX3VybCcsIGFycmF5KCRlbGVtZW50LT5nZXRBdHRyaWJ1dGUoJGF0dHJpYnV0ZSksICR0aGlzLT5iYXNlKSk7CgkJCQkJCWlmICgkdmFsdWUgIT09IGZhbHNlKQoJCQkJCQl7CgkJCQkJCQkkZWxlbWVudC0+c2V0QXR0cmlidXRlKCRhdHRyaWJ1dGUsICR2YWx1ZSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGRvX3N0cmlwX2h0bWx0YWdzKCRtYXRjaCkKCXsKCQlpZiAoJHRoaXMtPmVuY29kZV9pbnN0ZWFkX29mX3N0cmlwKQoJCXsKCQkJaWYgKGlzc2V0KCRtYXRjaFs0XSkgJiYgIWluX2FycmF5KHN0cnRvbG93ZXIoJG1hdGNoWzFdKSwgYXJyYXkoJ3NjcmlwdCcsICdzdHlsZScpKSkKCQkJewoJCQkJJG1hdGNoWzFdID0gaHRtbHNwZWNpYWxjaGFycygkbWF0Y2hbMV0sIEVOVF9DT01QQVQsICdVVEYtOCcpOwoJCQkJJG1hdGNoWzJdID0gaHRtbHNwZWNpYWxjaGFycygkbWF0Y2hbMl0sIEVOVF9DT01QQVQsICdVVEYtOCcpOwoJCQkJcmV0dXJuICImbHQ7JG1hdGNoWzFdJG1hdGNoWzJdJmd0OyRtYXRjaFszXSZsdDsvJG1hdGNoWzFdJmd0OyI7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlyZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkbWF0Y2hbMF0sIEVOVF9DT01QQVQsICdVVEYtOCcpOwoJCQl9CgkJfQoJCWVsc2VpZiAoaXNzZXQoJG1hdGNoWzRdKSAmJiAhaW5fYXJyYXkoc3RydG9sb3dlcigkbWF0Y2hbMV0pLCBhcnJheSgnc2NyaXB0JywgJ3N0eWxlJykpKQoJCXsKCQkJcmV0dXJuICRtYXRjaFs0XTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICcnOwoJCX0KCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gc3RyaXBfdGFnKCR0YWcsICRkb2N1bWVudCwgJHhwYXRoLCAkdHlwZSkKCXsKCQkkZWxlbWVudHMgPSAkeHBhdGgtPnF1ZXJ5KCdib2R5Ly8nIC4gJHRhZyk7CgkJaWYgKCR0aGlzLT5lbmNvZGVfaW5zdGVhZF9vZl9zdHJpcCkKCQl7CgkJCWZvcmVhY2ggKCRlbGVtZW50cyBhcyAkZWxlbWVudCkKCQkJewoJCQkJJGZyYWdtZW50ID0gJGRvY3VtZW50LT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CgoJCQkJLy8gRm9yIGVsZW1lbnRzIHdoaWNoIGFyZW4ndCBzY3JpcHQgb3Igc3R5bGUsIGluY2x1ZGUgdGhlIHRhZyBpdHNlbGYKCQkJCWlmICghaW5fYXJyYXkoJHRhZywgYXJyYXkoJ3NjcmlwdCcsICdzdHlsZScpKSkKCQkJCXsKCQkJCQkkdGV4dCA9ICc8JyAuICR0YWc7CgkJCQkJaWYgKCRlbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpCgkJCQkJewoJCQkJCQkkYXR0cnMgPSBhcnJheSgpOwoJCQkJCQlmb3JlYWNoICgkZWxlbWVudC0+YXR0cmlidXRlcyBhcyAkbmFtZSA9PiAkYXR0cikKCQkJCQkJewoJCQkJCQkJJHZhbHVlID0gJGF0dHItPnZhbHVlOwoKCQkJCQkJCS8vIEluIFhIVE1MLCBlbXB0eSB2YWx1ZXMgc2hvdWxkIG5ldmVyIGV4aXN0LCBzbyB3ZSByZXBlYXQgdGhlIHZhbHVlCgkJCQkJCQlpZiAoZW1wdHkoJHZhbHVlKSAmJiAoJHR5cGUgJiBTSU1QTEVQSUVfQ09OU1RSVUNUX1hIVE1MKSkKCQkJCQkJCXsKCQkJCQkJCQkkdmFsdWUgPSAkbmFtZTsKCQkJCQkJCX0KCQkJCQkJCS8vIEZvciBIVE1MLCBlbXB0eSBpcyBmaW5lCgkJCQkJCQllbHNlaWYgKGVtcHR5KCR2YWx1ZSkgJiYgKCR0eXBlICYgU0lNUExFUElFX0NPTlNUUlVDVF9IVE1MKSkKCQkJCQkJCXsKCQkJCQkJCQkkYXR0cnNbXSA9ICRuYW1lOwoJCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQkJfQoKCQkJCQkJCS8vIFN0YW5kYXJkIGF0dHJpYnV0ZSB0ZXh0CgkJCQkJCQkkYXR0cnNbXSA9ICRuYW1lIC4gJz0iJyAuICRhdHRyLT52YWx1ZSAuICciJzsKCQkJCQkJfQoJCQkJCQkkdGV4dCAuPSAnICcgLiBpbXBsb2RlKCcgJywgJGF0dHJzKTsKCQkJCQl9CgkJCQkJJHRleHQgLj0gJz4nOwoJCQkJCSRmcmFnbWVudC0+YXBwZW5kQ2hpbGQobmV3IERPTVRleHQoJHRleHQpKTsKCQkJCX0KCgkJCQkkbnVtYmVyID0gJGVsZW1lbnQtPmNoaWxkTm9kZXMtPmxlbmd0aDsKCQkJCWZvciAoJGkgPSAkbnVtYmVyOyAkaSA+IDA7ICRpLS0pCgkJCQl7CgkJCQkJJGNoaWxkID0gJGVsZW1lbnQtPmNoaWxkTm9kZXMtPml0ZW0oMCk7CgkJCQkJJGZyYWdtZW50LT5hcHBlbmRDaGlsZCgkY2hpbGQpOwoJCQkJfQoKCQkJCWlmICghaW5fYXJyYXkoJHRhZywgYXJyYXkoJ3NjcmlwdCcsICdzdHlsZScpKSkKCQkJCXsKCQkJCQkkZnJhZ21lbnQtPmFwcGVuZENoaWxkKG5ldyBET01UZXh0KCc8LycgLiAkdGFnIC4gJz4nKSk7CgkJCQl9CgoJCQkJJGVsZW1lbnQtPnBhcmVudE5vZGUtPnJlcGxhY2VDaGlsZCgkZnJhZ21lbnQsICRlbGVtZW50KTsKCQkJfQoKCQkJcmV0dXJuOwoJCX0KCQllbHNlaWYgKGluX2FycmF5KCR0YWcsIGFycmF5KCdzY3JpcHQnLCAnc3R5bGUnKSkpCgkJewoJCQlmb3JlYWNoICgkZWxlbWVudHMgYXMgJGVsZW1lbnQpCgkJCXsKCQkJCSRlbGVtZW50LT5wYXJlbnROb2RlLT5yZW1vdmVDaGlsZCgkZWxlbWVudCk7CgkJCX0KCgkJCXJldHVybjsKCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCAoJGVsZW1lbnRzIGFzICRlbGVtZW50KQoJCQl7CgkJCQkkZnJhZ21lbnQgPSAkZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKCQkJCSRudW1iZXIgPSAkZWxlbWVudC0+Y2hpbGROb2Rlcy0+bGVuZ3RoOwoJCQkJZm9yICgkaSA9ICRudW1iZXI7ICRpID4gMDsgJGktLSkKCQkJCXsKCQkJCQkkY2hpbGQgPSAkZWxlbWVudC0+Y2hpbGROb2Rlcy0+aXRlbSgwKTsKCQkJCQkkZnJhZ21lbnQtPmFwcGVuZENoaWxkKCRjaGlsZCk7CgkJCQl9CgoJCQkJJGVsZW1lbnQtPnBhcmVudE5vZGUtPnJlcGxhY2VDaGlsZCgkZnJhZ21lbnQsICRlbGVtZW50KTsKCQkJfQoJCX0KCX0KCglwcm90ZWN0ZWQgZnVuY3Rpb24gc3RyaXBfYXR0cigkYXR0cmliLCAkeHBhdGgpCgl7CgkJJGVsZW1lbnRzID0gJHhwYXRoLT5xdWVyeSgnLy8qW0AnIC4gJGF0dHJpYiAuICddJyk7CgoJCWZvcmVhY2ggKCRlbGVtZW50cyBhcyAkZWxlbWVudCkKCQl7CgkJCSRlbGVtZW50LT5yZW1vdmVBdHRyaWJ1dGUoJGF0dHJpYik7CgkJfQoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBhZGRfYXR0cigkdGFnLCAkdmFsdWVQYWlycywgJGRvY3VtZW50KQoJewoJCSRlbGVtZW50cyA9ICRkb2N1bWVudC0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJHRhZyk7CgkJZm9yZWFjaCAoJGVsZW1lbnRzIGFzICRlbGVtZW50KQoJCXsKCQkJZm9yZWFjaCAoJHZhbHVlUGFpcnMgYXMgJGF0dHJpYiA9PiAkdmFsdWUpCgkJCXsKCQkJCSRlbGVtZW50LT5zZXRBdHRyaWJ1dGUoJGF0dHJpYiwgJHZhbHVlKTsKCQkJfQoJCX0KCX0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/Source.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCi8qKgogKiBIYW5kbGVzIGA8YXRvbTpzb3VyY2U+YAogKgogKiBVc2VkIGJ5IHtAc2VlIFNpbXBsZVBpZV9JdGVtOjpnZXRfc291cmNlKCl9CiAqCiAqIFRoaXMgY2xhc3MgY2FuIGJlIG92ZXJsb2FkZWQgd2l0aCB7QHNlZSBTaW1wbGVQaWU6OnNldF9zb3VyY2VfY2xhc3MoKX0KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIEFQSQogKi8KY2xhc3MgU2ltcGxlUGllX1NvdXJjZQp7Cgl2YXIgJGl0ZW07Cgl2YXIgJGRhdGEgPSBhcnJheSgpOwoJcHJvdGVjdGVkICRyZWdpc3RyeTsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGl0ZW0sICRkYXRhKQoJewoJCSR0aGlzLT5pdGVtID0gJGl0ZW07CgkJJHRoaXMtPmRhdGEgPSAkZGF0YTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2V0X3JlZ2lzdHJ5KFNpbXBsZVBpZV9SZWdpc3RyeSAkcmVnaXN0cnkpCgl7CgkJJHRoaXMtPnJlZ2lzdHJ5ID0gJHJlZ2lzdHJ5OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKCXsKCQlyZXR1cm4gbWQ1KHNlcmlhbGl6ZSgkdGhpcy0+ZGF0YSkpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfc291cmNlX3RhZ3MoJG5hbWVzcGFjZSwgJHRhZykKCXsKCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2NoaWxkJ11bJG5hbWVzcGFjZV1bJHRhZ10pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5kYXRhWydjaGlsZCddWyRuYW1lc3BhY2VdWyR0YWddOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9iYXNlKCRlbGVtZW50ID0gYXJyYXkoKSkKCXsKCQlyZXR1cm4gJHRoaXMtPml0ZW0tPmdldF9iYXNlKCRlbGVtZW50KTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2FuaXRpemUoJGRhdGEsICR0eXBlLCAkYmFzZSA9ICcnKQoJewoJCXJldHVybiAkdGhpcy0+aXRlbS0+c2FuaXRpemUoJGRhdGEsICR0eXBlLCAkYmFzZSk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9pdGVtKCkKCXsKCQlyZXR1cm4gJHRoaXMtPml0ZW07Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF90aXRsZSgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ3RpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2F0b21fMTBfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkcmV0dXJuWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzAzX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHJldHVyblswXVsnYXR0cmlicyddKSksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMTAsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfTUFZQkVfSFRNTCwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18wOTAsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfTUFZQkVfSFRNTCwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ3RpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTEsICd0aXRsZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMCwgJ3RpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfY2F0ZWdvcnkoJGtleSA9IDApCgl7CgkJJGNhdGVnb3JpZXMgPSAkdGhpcy0+Z2V0X2NhdGVnb3JpZXMoKTsKCQlpZiAoaXNzZXQoJGNhdGVnb3JpZXNbJGtleV0pKQoJCXsKCQkJcmV0dXJuICRjYXRlZ29yaWVzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9jYXRlZ29yaWVzKCkKCXsKCQkkY2F0ZWdvcmllcyA9IGFycmF5KCk7CgoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdjYXRlZ29yeScpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSR0ZXJtID0gbnVsbDsKCQkJJHNjaGVtZSA9IG51bGw7CgkJCSRsYWJlbCA9IG51bGw7CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3Rlcm0nXSkpCgkJCXsKCQkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnYXR0cmlicyddWycnXVsndGVybSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddKSkKCQkJewoJCQkJJHNjaGVtZSA9ICR0aGlzLT5zYW5pdGl6ZSgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ3NjaGVtZSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY2F0ZWdvcnlbJ2F0dHJpYnMnXVsnJ11bJ2xhYmVsJ10pKQoJCQl7CgkJCQkkbGFiZWwgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydsYWJlbCddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGVybSwgJHNjaGVtZSwgJGxhYmVsKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ2NhdGVnb3J5JykgYXMgJGNhdGVnb3J5KQoJCXsKCQkJLy8gVGhpcyBpcyByZWFsbHkgdGhlIGxhYmVsLCBidXQga2VlcCB0aGlzIGFzIHRoZSB0ZXJtIGFsc28gZm9yIEJDLgoJCQkvLyBMYWJlbCB3aWxsIGFsc28gd29yayBvbiByZXRyaWV2aW5nIGJlY2F1c2UgdGhhdCBmYWxscyBiYWNrIHRvIHRlcm0uCgkJCSR0ZXJtID0gJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQlpZiAoaXNzZXQoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydkb21haW4nXSkpCgkJCXsKCQkJCSRzY2hlbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydhdHRyaWJzJ11bJyddWydkb21haW4nXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRzY2hlbWUgPSBudWxsOwoJCQl9CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGVybSwgJHNjaGVtZSwgbnVsbCkpOwoJCX0KCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ3N1YmplY3QnKSBhcyAkY2F0ZWdvcnkpCgkJewoJCQkkY2F0ZWdvcmllc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0NhdGVnb3J5JywgYXJyYXkoJHRoaXMtPnNhbml0aXplKCRjYXRlZ29yeVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAnc3ViamVjdCcpIGFzICRjYXRlZ29yeSkKCQl7CgkJCSRjYXRlZ29yaWVzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQ2F0ZWdvcnknLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGNhdGVnb3J5WydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCksIG51bGwsIG51bGwpKTsKCQl9CgoJCWlmICghZW1wdHkoJGNhdGVnb3JpZXMpKQoJCXsKCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgkY2F0ZWdvcmllcyk7CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2F1dGhvcigka2V5ID0gMCkKCXsKCQkkYXV0aG9ycyA9ICR0aGlzLT5nZXRfYXV0aG9ycygpOwoJCWlmIChpc3NldCgkYXV0aG9yc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGF1dGhvcnNbJGtleV07CgkJfQoKCQlyZXR1cm4gbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X2F1dGhvcnMoKQoJewoJCSRhdXRob3JzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnYXV0aG9yJykgYXMgJGF1dGhvcikKCQl7CgkJCSRuYW1lID0gbnVsbDsKCQkJJHVyaSA9IG51bGw7CgkJCSRlbWFpbCA9IG51bGw7CgkJCWlmIChpc3NldCgkYXV0aG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ25hbWUnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJG5hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyduYW1lJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGF1dGhvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyd1cmknXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJHVyaSA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGF1dGhvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWyd1cmknXVswXSkpOwoJCQl9CgkJCWlmIChpc3NldCgkYXV0aG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ2VtYWlsJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSRlbWFpbCA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ2VtYWlsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoJG5hbWUgIT09IG51bGwgfHwgJGVtYWlsICE9PSBudWxsIHx8ICR1cmkgIT09IG51bGwpCgkJCXsKCQkJCSRhdXRob3JzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQXV0aG9yJywgYXJyYXkoJG5hbWUsICR1cmksICRlbWFpbCkpOwoJCQl9CgkJfQoJCWlmICgkYXV0aG9yID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICdhdXRob3InKSkKCQl7CgkJCSRuYW1lID0gbnVsbDsKCQkJJHVybCA9IG51bGw7CgkJCSRlbWFpbCA9IG51bGw7CgkJCWlmIChpc3NldCgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ25hbWUnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJG5hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGF1dGhvclswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyduYW1lJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGF1dGhvclswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyd1cmwnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJHVybCA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ3VybCddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGF1dGhvclswXVsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyd1cmwnXVswXSkpOwoJCQl9CgkJCWlmIChpc3NldCgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2VtYWlsJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSRlbWFpbCA9ICR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWzBdWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ2VtYWlsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoJG5hbWUgIT09IG51bGwgfHwgJGVtYWlsICE9PSBudWxsIHx8ICR1cmwgIT09IG51bGwpCgkJCXsKCQkJCSRhdXRob3JzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQXV0aG9yJywgYXJyYXkoJG5hbWUsICR1cmwsICRlbWFpbCkpOwoJCQl9CgkJfQoJCWZvcmVhY2ggKChhcnJheSkgJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzExLCAnY3JlYXRvcicpIGFzICRhdXRob3IpCgkJewoJCQkkYXV0aG9yc1tdID0gJHRoaXMtPnJlZ2lzdHJ5LT5jcmVhdGUoJ0F1dGhvcicsIGFycmF5KCR0aGlzLT5zYW5pdGl6ZSgkYXV0aG9yWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCksIG51bGwsIG51bGwpKTsKCQl9CgkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTAsICdjcmVhdG9yJykgYXMgJGF1dGhvcikKCQl7CgkJCSRhdXRob3JzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQXV0aG9yJywgYXJyYXkoJHRoaXMtPnNhbml0aXplKCRhdXRob3JbJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKSwgbnVsbCwgbnVsbCkpOwoJCX0KCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdhdXRob3InKSBhcyAkYXV0aG9yKQoJCXsKCQkJJGF1dGhvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkdGhpcy0+c2FuaXRpemUoJGF1dGhvclsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpLCBudWxsLCBudWxsKSk7CgkJfQoKCQlpZiAoIWVtcHR5KCRhdXRob3JzKSkKCQl7CgkJCXJldHVybiBhcnJheV91bmlxdWUoJGF1dGhvcnMpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9jb250cmlidXRvcigka2V5ID0gMCkKCXsKCQkkY29udHJpYnV0b3JzID0gJHRoaXMtPmdldF9jb250cmlidXRvcnMoKTsKCQlpZiAoaXNzZXQoJGNvbnRyaWJ1dG9yc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGNvbnRyaWJ1dG9yc1ska2V5XTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfY29udHJpYnV0b3JzKCkKCXsKCQkkY29udHJpYnV0b3JzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgoYXJyYXkpICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnY29udHJpYnV0b3InKSBhcyAkY29udHJpYnV0b3IpCgkJewoJCQkkbmFtZSA9IG51bGw7CgkJCSR1cmkgPSBudWxsOwoJCQkkZW1haWwgPSBudWxsOwoJCQlpZiAoaXNzZXQoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ25hbWUnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJG5hbWUgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ25hbWUnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCQl9CgkJCWlmIChpc3NldCgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwXVsndXJpJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSR1cmkgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ3VyaSddWzBdKSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTBdWydlbWFpbCddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkZW1haWwgPSAkdGhpcy0+c2FuaXRpemUoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMF1bJ2VtYWlsJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoJG5hbWUgIT09IG51bGwgfHwgJGVtYWlsICE9PSBudWxsIHx8ICR1cmkgIT09IG51bGwpCgkJCXsKCQkJCSRjb250cmlidXRvcnNbXSA9ICR0aGlzLT5yZWdpc3RyeS0+Y3JlYXRlKCdBdXRob3InLCBhcnJheSgkbmFtZSwgJHVyaSwgJGVtYWlsKSk7CgkJCX0KCQl9CgkJZm9yZWFjaCAoKGFycmF5KSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ2NvbnRyaWJ1dG9yJykgYXMgJGNvbnRyaWJ1dG9yKQoJCXsKCQkJJG5hbWUgPSBudWxsOwoJCQkkdXJsID0gbnVsbDsKCQkJJGVtYWlsID0gbnVsbDsKCQkJaWYgKGlzc2V0KCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyduYW1lJ11bMF1bJ2RhdGEnXSkpCgkJCXsKCQkJCSRuYW1lID0gJHRoaXMtPnNhbml0aXplKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyduYW1lJ11bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGNvbnRyaWJ1dG9yWydjaGlsZCddW1NJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wM11bJ3VybCddWzBdWydkYXRhJ10pKQoJCQl7CgkJCQkkdXJsID0gJHRoaXMtPnNhbml0aXplKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyd1cmwnXVswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWyd1cmwnXVswXSkpOwoJCQl9CgkJCWlmIChpc3NldCgkY29udHJpYnV0b3JbJ2NoaWxkJ11bU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzXVsnZW1haWwnXVswXVsnZGF0YSddKSkKCQkJewoJCQkJJGVtYWlsID0gJHRoaXMtPnNhbml0aXplKCRjb250cmlidXRvclsnY2hpbGQnXVtTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDNdWydlbWFpbCddWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJCX0KCQkJaWYgKCRuYW1lICE9PSBudWxsIHx8ICRlbWFpbCAhPT0gbnVsbCB8fCAkdXJsICE9PSBudWxsKQoJCQl7CgkJCQkkY29udHJpYnV0b3JzW10gPSAkdGhpcy0+cmVnaXN0cnktPmNyZWF0ZSgnQXV0aG9yJywgYXJyYXkoJG5hbWUsICR1cmwsICRlbWFpbCkpOwoJCQl9CgkJfQoKCQlpZiAoIWVtcHR5KCRjb250cmlidXRvcnMpKQoJCXsKCQkJcmV0dXJuIGFycmF5X3VuaXF1ZSgkY29udHJpYnV0b3JzKTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGluaygka2V5ID0gMCwgJHJlbCA9ICdhbHRlcm5hdGUnKQoJewoJCSRsaW5rcyA9ICR0aGlzLT5nZXRfbGlua3MoJHJlbCk7CgkJaWYgKGlzc2V0KCRsaW5rc1ska2V5XSkpCgkJewoJCQlyZXR1cm4gJGxpbmtzWyRrZXldOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJLyoqCgkgKiBBZGRlZCBmb3IgcGFyaXR5IGJldHdlZW4gdGhlIHBhcmVudC1sZXZlbCBhbmQgdGhlIGl0ZW0vZW50cnktbGV2ZWwuCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRfcGVybWFsaW5rKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmdldF9saW5rKDApOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbGlua3MoJHJlbCA9ICdhbHRlcm5hdGUnKQoJewoJCWlmICghaXNzZXQoJHRoaXMtPmRhdGFbJ2xpbmtzJ10pKQoJCXsKCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ10gPSBhcnJheSgpOwoJCQlpZiAoJGxpbmtzID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdsaW5rJykpCgkJCXsKCQkJCWZvcmVhY2ggKCRsaW5rcyBhcyAkbGluaykKCQkJCXsKCQkJCQlpZiAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ2hyZWYnXSkpCgkJCQkJewoJCQkJCQkkbGlua19yZWwgPSAoaXNzZXQoJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddKSkgPyAkbGlua1snYXR0cmlicyddWycnXVsncmVsJ10gOiAnYWx0ZXJuYXRlJzsKCQkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGxpbmtfcmVsXVtdID0gJHRoaXMtPnNhbml0aXplKCRsaW5rWydhdHRyaWJzJ11bJyddWydocmVmJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmspKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJaWYgKCRsaW5rcyA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzAzLCAnbGluaycpKQoJCQl7CgkJCQlmb3JlYWNoICgkbGlua3MgYXMgJGxpbmspCgkJCQl7CgkJCQkJaWYgKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWydocmVmJ10pKQoJCQkJCXsKCQkJCQkJJGxpbmtfcmVsID0gKGlzc2V0KCRsaW5rWydhdHRyaWJzJ11bJyddWydyZWwnXSkpID8gJGxpbmtbJ2F0dHJpYnMnXVsnJ11bJ3JlbCddIDogJ2FsdGVybmF0ZSc7CgkJCQkJCSR0aGlzLT5kYXRhWydsaW5rcyddWyRsaW5rX3JlbF1bXSA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua1snYXR0cmlicyddWycnXVsnaHJlZiddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX0lSSSwgJHRoaXMtPmdldF9iYXNlKCRsaW5rKSk7CgoJCQkJCX0KCQkJCX0KCQkJfQoJCQlpZiAoJGxpbmtzID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMCwgJ2xpbmsnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJ2FsdGVybmF0ZSddW10gPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmtzWzBdKSk7CgkJCX0KCQkJaWYgKCRsaW5rcyA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMDkwLCAnbGluaycpKQoJCQl7CgkJCQkkdGhpcy0+ZGF0YVsnbGlua3MnXVsnYWx0ZXJuYXRlJ11bXSA9ICR0aGlzLT5zYW5pdGl6ZSgkbGlua3NbMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkbGlua3NbMF0pKTsKCQkJfQoJCQlpZiAoJGxpbmtzID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18yMCwgJ2xpbmsnKSkKCQkJewoJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJ2FsdGVybmF0ZSddW10gPSAkdGhpcy0+c2FuaXRpemUoJGxpbmtzWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJGxpbmtzWzBdKSk7CgkJCX0KCgkJCSRrZXlzID0gYXJyYXlfa2V5cygkdGhpcy0+ZGF0YVsnbGlua3MnXSk7CgkJCWZvcmVhY2ggKCRrZXlzIGFzICRrZXkpCgkJCXsKCQkJCWlmICgkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnaXNfaXNlZ21lbnRfbnpfbmMnLCBhcnJheSgka2V5KSkpCgkJCQl7CgkJCQkJaWYgKGlzc2V0KCR0aGlzLT5kYXRhWydsaW5rcyddW1NJTVBMRVBJRV9JQU5BX0xJTktfUkVMQVRJT05TX1JFR0lTVFJZIC4gJGtleV0pKQoJCQkJCXsKCQkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bU0lNUExFUElFX0lBTkFfTElOS19SRUxBVElPTlNfUkVHSVNUUlkgLiAka2V5XSA9IGFycmF5X21lcmdlKCR0aGlzLT5kYXRhWydsaW5rcyddWyRrZXldLCAkdGhpcy0+ZGF0YVsnbGlua3MnXVtTSU1QTEVQSUVfSUFOQV9MSU5LX1JFTEFUSU9OU19SRUdJU1RSWSAuICRrZXldKTsKCQkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGtleV0gPSYgJHRoaXMtPmRhdGFbJ2xpbmtzJ11bU0lNUExFUElFX0lBTkFfTElOS19SRUxBVElPTlNfUkVHSVNUUlkgLiAka2V5XTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bU0lNUExFUElFX0lBTkFfTElOS19SRUxBVElPTlNfUkVHSVNUUlkgLiAka2V5XSA9JiAkdGhpcy0+ZGF0YVsnbGlua3MnXVska2V5XTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlaWYgKHN1YnN0cigka2V5LCAwLCA0MSkgPT09IFNJTVBMRVBJRV9JQU5BX0xJTktfUkVMQVRJT05TX1JFR0lTVFJZKQoJCQkJewoJCQkJCSR0aGlzLT5kYXRhWydsaW5rcyddW3N1YnN0cigka2V5LCA0MSldID0mICR0aGlzLT5kYXRhWydsaW5rcyddWyRrZXldOwoJCQkJfQoJCQkJJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGtleV0gPSBhcnJheV91bmlxdWUoJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJGtleV0pOwoJCQl9CgkJfQoKCQlpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJ2xpbmtzJ11bJHJlbF0pKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5kYXRhWydsaW5rcyddWyRyZWxdOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8xMCwgJ3N1YnRpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2F0b21fMTBfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkcmV0dXJuWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMDMsICd0YWdsaW5lJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgJHRoaXMtPnJlZ2lzdHJ5LT5jYWxsKCdNaXNjJywgJ2F0b21fMDNfY29uc3RydWN0X3R5cGUnLCBhcnJheSgkcmV0dXJuWzBdWydhdHRyaWJzJ10pKSwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX1JTU18xMCwgJ2Rlc2NyaXB0aW9uJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzA5MCwgJ2Rlc2NyaXB0aW9uJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9NQVlCRV9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnZGVzY3JpcHRpb24nKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX01BWUJFX0hUTUwsICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMSwgJ2Rlc2NyaXB0aW9uJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0RDXzEwLCAnZGVzY3JpcHRpb24nKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfSVRVTkVTLCAnc3VtbWFyeScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSFRNTCwgJHRoaXMtPmdldF9iYXNlKCRyZXR1cm5bMF0pKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0lUVU5FUywgJ3N1YnRpdGxlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9IVE1MLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9jb3B5cmlnaHQoKQoJewoJCWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdyaWdodHMnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCAkdGhpcy0+cmVnaXN0cnktPmNhbGwoJ01pc2MnLCAnYXRvbV8xMF9jb25zdHJ1Y3RfdHlwZScsIGFycmF5KCRyZXR1cm5bMF1bJ2F0dHJpYnMnXSkpLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfQVRPTV8wMywgJ2NvcHlyaWdodCcpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sICR0aGlzLT5yZWdpc3RyeS0+Y2FsbCgnTWlzYycsICdhdG9tXzAzX2NvbnN0cnVjdF90eXBlJywgYXJyYXkoJHJldHVyblswXVsnYXR0cmlicyddKSksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9SU1NfMjAsICdjb3B5cmlnaHQnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTEsICdyaWdodHMnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTAsICdyaWdodHMnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9sYW5ndWFnZSgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfUlNTXzIwLCAnbGFuZ3VhZ2UnKSkKCQl7CgkJCXJldHVybiAkdGhpcy0+c2FuaXRpemUoJHJldHVyblswXVsnZGF0YSddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfRENfMTEsICdsYW5ndWFnZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfVEVYVCk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9EQ18xMCwgJ2xhbmd1YWdlJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9URVhUKTsKCQl9CgkJZWxzZWlmIChpc3NldCgkdGhpcy0+ZGF0YVsneG1sX2xhbmcnXSkpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCR0aGlzLT5kYXRhWyd4bWxfbGFuZyddLCBTSU1QTEVQSUVfQ09OU1RSVUNUX1RFWFQpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldF9sYXRpdHVkZSgpCgl7CgkJaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfVzNDX0JBU0lDX0dFTywgJ2xhdCcpKQoJCXsKCQkJcmV0dXJuIChmbG9hdCkgJHJldHVyblswXVsnZGF0YSddOwoJCX0KCQllbHNlaWYgKCgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0dFT1JTUywgJ3BvaW50JykpICYmIHByZWdfbWF0Y2goJy9eKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkgKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkkLycsIHRyaW0oJHJldHVyblswXVsnZGF0YSddKSwgJG1hdGNoKSkKCQl7CgkJCXJldHVybiAoZmxvYXQpICRtYXRjaFsxXTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfbG9uZ2l0dWRlKCkKCXsKCQlpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9XM0NfQkFTSUNfR0VPLCAnbG9uZycpKQoJCXsKCQkJcmV0dXJuIChmbG9hdCkgJHJldHVyblswXVsnZGF0YSddOwoJCX0KCQllbHNlaWYgKCRyZXR1cm4gPSAkdGhpcy0+Z2V0X3NvdXJjZV90YWdzKFNJTVBMRVBJRV9OQU1FU1BBQ0VfVzNDX0JBU0lDX0dFTywgJ2xvbicpKQoJCXsKCQkJcmV0dXJuIChmbG9hdCkgJHJldHVyblswXVsnZGF0YSddOwoJCX0KCQllbHNlaWYgKCgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0dFT1JTUywgJ3BvaW50JykpICYmIHByZWdfbWF0Y2goJy9eKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkgKCg/Oi0pP1swLTldKyg/OlwuWzAtOV0rKSkkLycsIHRyaW0oJHJldHVyblswXVsnZGF0YSddKSwgJG1hdGNoKSkKCQl7CgkJCXJldHVybiAoZmxvYXQpICRtYXRjaFsyXTsKCQl9CgoJCXJldHVybiBudWxsOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRfaW1hZ2VfdXJsKCkKCXsKCQlpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9JVFVORVMsICdpbWFnZScpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydhdHRyaWJzJ11bJyddWydocmVmJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJKTsKCQl9CgkJZWxzZWlmICgkcmV0dXJuID0gJHRoaXMtPmdldF9zb3VyY2VfdGFncyhTSU1QTEVQSUVfTkFNRVNQQUNFX0FUT01fMTAsICdsb2dvJykpCgkJewoJCQlyZXR1cm4gJHRoaXMtPnNhbml0aXplKCRyZXR1cm5bMF1bJ2RhdGEnXSwgU0lNUExFUElFX0NPTlNUUlVDVF9JUkksICR0aGlzLT5nZXRfYmFzZSgkcmV0dXJuWzBdKSk7CgkJfQoJCWVsc2VpZiAoJHJldHVybiA9ICR0aGlzLT5nZXRfc291cmNlX3RhZ3MoU0lNUExFUElFX05BTUVTUEFDRV9BVE9NXzEwLCAnaWNvbicpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5zYW5pdGl6ZSgkcmV0dXJuWzBdWydkYXRhJ10sIFNJTVBMRVBJRV9DT05TVFJVQ1RfSVJJLCAkdGhpcy0+Z2V0X2Jhc2UoJHJldHVyblswXSkpOwoJCX0KCgkJcmV0dXJuIG51bGw7Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/XML/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/XML/Declaration/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/library/SimplePie/XML/Declaration/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFNpbXBsZVBpZQogKgogKiBBIFBIUC1CYXNlZCBSU1MgYW5kIEF0b20gRmVlZCBGcmFtZXdvcmsuCiAqIFRha2VzIHRoZSBoYXJkIHdvcmsgb3V0IG9mIG1hbmFnaW5nIGEgY29tcGxldGUgUlNTL0F0b20gc29sdXRpb24uCiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDE2LCBSeWFuIFBhcm1hbiwgU2FtIFNuZWRkb24sIFJ5YW4gTWNDdWUsIGFuZCBjb250cmlidXRvcnMKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCiAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgogKiAJICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqCiAqIAkqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CiAqIAkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiAqIAkgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogCSogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgU2ltcGxlUGllIFRlYW0gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCiAqIAkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCiAqIAkgIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUwogKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQogKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUwogKiBBTkQgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgogKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgogKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCiAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKgogKiBAcGFja2FnZSBTaW1wbGVQaWUKICogQGNvcHlyaWdodCAyMDA0LTIwMTYgUnlhbiBQYXJtYW4sIFNhbSBTbmVkZG9uLCBSeWFuIE1jQ3VlCiAqIEBhdXRob3IgUnlhbiBQYXJtYW4KICogQGF1dGhvciBTYW0gU25lZGRvbgogKiBAYXV0aG9yIFJ5YW4gTWNDdWUKICogQGxpbmsgaHR0cDovL3NpbXBsZXBpZS5vcmcvIFNpbXBsZVBpZQogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QgTGljZW5zZQogKi8KCgovKioKICogUGFyc2VzIHRoZSBYTUwgRGVjbGFyYXRpb24KICoKICogQHBhY2thZ2UgU2ltcGxlUGllCiAqIEBzdWJwYWNrYWdlIFBhcnNpbmcKICovCmNsYXNzIFNpbXBsZVBpZV9YTUxfRGVjbGFyYXRpb25fUGFyc2VyCnsKCS8qKgoJICogWE1MIFZlcnNpb24KCSAqCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICR2ZXJzaW9uID0gJzEuMCc7CgoJLyoqCgkgKiBFbmNvZGluZwoJICoKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAdmFyIHN0cmluZwoJICovCgl2YXIgJGVuY29kaW5nID0gJ1VURi04JzsKCgkvKioKCSAqIFN0YW5kYWxvbmUKCSAqCgkgKiBAYWNjZXNzIHB1YmxpYwoJICogQHZhciBib29sCgkgKi8KCXZhciAkc3RhbmRhbG9uZSA9IGZhbHNlOwoKCS8qKgoJICogQ3VycmVudCBzdGF0ZSBvZiB0aGUgc3RhdGUgbWFjaGluZQoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBzdHJpbmcKCSAqLwoJdmFyICRzdGF0ZSA9ICdiZWZvcmVfdmVyc2lvbl9uYW1lJzsKCgkvKioKCSAqIElucHV0IGRhdGEKCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXZhciAkZGF0YSA9ICcnOwoKCS8qKgoJICogSW5wdXQgZGF0YSBsZW5ndGggKHRvIGF2b2lkIGNhbGxpbmcgc3RybGVuKCkgZXZlcnl0aW1lIHRoaXMgaXMgbmVlZGVkKQoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHZhciBpbnQKCSAqLwoJdmFyICRkYXRhX2xlbmd0aCA9IDA7CgoJLyoqCgkgKiBDdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyCgkgKgoJICogQHZhciBpbnQKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCgl2YXIgJHBvc2l0aW9uID0gMDsKCgkvKioKCSAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3Mgd2l0aCB0aGUgaW5wdXQgZGF0YQoJICoKCSAqIEBhY2Nlc3MgcHVibGljCgkgKiBAcGFyYW0gc3RyaW5nICRkYXRhIElucHV0IGRhdGEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYXRhKQoJewoJCSR0aGlzLT5kYXRhID0gJGRhdGE7CgkJJHRoaXMtPmRhdGFfbGVuZ3RoID0gc3RybGVuKCR0aGlzLT5kYXRhKTsKCX0KCgkvKioKCSAqIFBhcnNlIHRoZSBpbnB1dCBkYXRhCgkgKgoJICogQGFjY2VzcyBwdWJsaWMKCSAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHBhcnNlKCkKCXsKCQl3aGlsZSAoJHRoaXMtPnN0YXRlICYmICR0aGlzLT5zdGF0ZSAhPT0gJ2VtaXQnICYmICR0aGlzLT5oYXNfZGF0YSgpKQoJCXsKCQkJJHN0YXRlID0gJHRoaXMtPnN0YXRlOwoJCQkkdGhpcy0+JHN0YXRlKCk7CgkJfQoJCSR0aGlzLT5kYXRhID0gJyc7CgkJaWYgKCR0aGlzLT5zdGF0ZSA9PT0gJ2VtaXQnKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoKCQkkdGhpcy0+dmVyc2lvbiA9ICcnOwoJCSR0aGlzLT5lbmNvZGluZyA9ICcnOwoJCSR0aGlzLT5zdGFuZGFsb25lID0gJyc7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBkYXRhIGJleW9uZCB0aGUgcG9pbnRlcgoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQHJldHVybiBib29sIHRydWUgaWYgdGhlcmUgaXMgZnVydGhlciBkYXRhLCBmYWxzZSBpZiBub3QKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGhhc19kYXRhKCkKCXsKCQlyZXR1cm4gKGJvb2wpICgkdGhpcy0+cG9zaXRpb24gPCAkdGhpcy0+ZGF0YV9sZW5ndGgpOwoJfQoKCS8qKgoJICogQWR2YW5jZSBwYXN0IGFueSB3aGl0ZXNwYWNlCgkgKgoJICogQHJldHVybiBpbnQgTnVtYmVyIG9mIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBwYXNzZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNraXBfd2hpdGVzcGFjZSgpCgl7CgkJJHdoaXRlc3BhY2UgPSBzdHJzcG4oJHRoaXMtPmRhdGEsICJceDA5XHgwQVx4MERceDIwIiwgJHRoaXMtPnBvc2l0aW9uKTsKCQkkdGhpcy0+cG9zaXRpb24gKz0gJHdoaXRlc3BhY2U7CgkJcmV0dXJuICR3aGl0ZXNwYWNlOwoJfQoKCS8qKgoJICogUmVhZCB2YWx1ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3ZhbHVlKCkKCXsKCQkkcXVvdGUgPSBzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbiwgMSk7CgkJaWYgKCRxdW90ZSA9PT0gJyInIHx8ICRxdW90ZSA9PT0gIiciKQoJCXsKCQkJJHRoaXMtPnBvc2l0aW9uKys7CgkJCSRsZW4gPSBzdHJjc3BuKCR0aGlzLT5kYXRhLCAkcXVvdGUsICR0aGlzLT5wb3NpdGlvbik7CgkJCWlmICgkdGhpcy0+aGFzX2RhdGEoKSkKCQkJewoJCQkJJHZhbHVlID0gc3Vic3RyKCR0aGlzLT5kYXRhLCAkdGhpcy0+cG9zaXRpb24sICRsZW4pOwoJCQkJJHRoaXMtPnBvc2l0aW9uICs9ICRsZW4gKyAxOwoJCQkJcmV0dXJuICR2YWx1ZTsKCQkJfQoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGJlZm9yZV92ZXJzaW9uX25hbWUoKQoJewoJCWlmICgkdGhpcy0+c2tpcF93aGl0ZXNwYWNlKCkpCgkJewoJCQkkdGhpcy0+c3RhdGUgPSAndmVyc2lvbl9uYW1lJzsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnN0YXRlID0gZmFsc2U7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiB2ZXJzaW9uX25hbWUoKQoJewoJCWlmIChzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbiwgNykgPT09ICd2ZXJzaW9uJykKCQl7CgkJCSR0aGlzLT5wb3NpdGlvbiArPSA3OwoJCQkkdGhpcy0+c2tpcF93aGl0ZXNwYWNlKCk7CgkJCSR0aGlzLT5zdGF0ZSA9ICd2ZXJzaW9uX2VxdWFscyc7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5zdGF0ZSA9IGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gdmVyc2lvbl9lcXVhbHMoKQoJewoJCWlmIChzdWJzdHIoJHRoaXMtPmRhdGEsICR0aGlzLT5wb3NpdGlvbiwgMSkgPT09ICc9JykKCQl7CgkJCSR0aGlzLT5wb3NpdGlvbisrOwoJCQkkdGhpcy0+c2tpcF93aGl0ZXNwYWNlKCk7CgkJCSR0aGlzLT5zdGF0ZSA9ICd2ZXJzaW9uX3ZhbHVlJzsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnN0YXRlID0gZmFsc2U7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiB2ZXJzaW9uX3ZhbHVlKCkKCXsKCQlpZiAoJHRoaXMtPnZlcnNpb24gPSAkdGhpcy0+Z2V0X3ZhbHVlKCkpCgkJewoJCQkkdGhpcy0+c2tpcF93aGl0ZXNwYWNlKCk7CgkJCWlmICgkdGhpcy0+aGFzX2RhdGEoKSkKCQkJewoJCQkJJHRoaXMtPnN0YXRlID0gJ2VuY29kaW5nX25hbWUnOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJJHRoaXMtPnN0YXRlID0gJ2VtaXQnOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5zdGF0ZSA9IGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gZW5jb2RpbmdfbmFtZSgpCgl7CgkJaWYgKHN1YnN0cigkdGhpcy0+ZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCA4KSA9PT0gJ2VuY29kaW5nJykKCQl7CgkJCSR0aGlzLT5wb3NpdGlvbiArPSA4OwoJCQkkdGhpcy0+c2tpcF93aGl0ZXNwYWNlKCk7CgkJCSR0aGlzLT5zdGF0ZSA9ICdlbmNvZGluZ19lcXVhbHMnOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c3RhdGUgPSAnc3RhbmRhbG9uZV9uYW1lJzsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGVuY29kaW5nX2VxdWFscygpCgl7CgkJaWYgKHN1YnN0cigkdGhpcy0+ZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAxKSA9PT0gJz0nKQoJCXsKCQkJJHRoaXMtPnBvc2l0aW9uKys7CgkJCSR0aGlzLT5za2lwX3doaXRlc3BhY2UoKTsKCQkJJHRoaXMtPnN0YXRlID0gJ2VuY29kaW5nX3ZhbHVlJzsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPnN0YXRlID0gZmFsc2U7CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBlbmNvZGluZ192YWx1ZSgpCgl7CgkJaWYgKCR0aGlzLT5lbmNvZGluZyA9ICR0aGlzLT5nZXRfdmFsdWUoKSkKCQl7CgkJCSR0aGlzLT5za2lwX3doaXRlc3BhY2UoKTsKCQkJaWYgKCR0aGlzLT5oYXNfZGF0YSgpKQoJCQl7CgkJCQkkdGhpcy0+c3RhdGUgPSAnc3RhbmRhbG9uZV9uYW1lJzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5zdGF0ZSA9ICdlbWl0JzsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHN0YW5kYWxvbmVfbmFtZSgpCgl7CgkJaWYgKHN1YnN0cigkdGhpcy0+ZGF0YSwgJHRoaXMtPnBvc2l0aW9uLCAxMCkgPT09ICdzdGFuZGFsb25lJykKCQl7CgkJCSR0aGlzLT5wb3NpdGlvbiArPSAxMDsKCQkJJHRoaXMtPnNraXBfd2hpdGVzcGFjZSgpOwoJCQkkdGhpcy0+c3RhdGUgPSAnc3RhbmRhbG9uZV9lcXVhbHMnOwoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHN0YW5kYWxvbmVfZXF1YWxzKCkKCXsKCQlpZiAoc3Vic3RyKCR0aGlzLT5kYXRhLCAkdGhpcy0+cG9zaXRpb24sIDEpID09PSAnPScpCgkJewoJCQkkdGhpcy0+cG9zaXRpb24rKzsKCQkJJHRoaXMtPnNraXBfd2hpdGVzcGFjZSgpOwoJCQkkdGhpcy0+c3RhdGUgPSAnc3RhbmRhbG9uZV92YWx1ZSc7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT5zdGF0ZSA9IGZhbHNlOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gc3RhbmRhbG9uZV92YWx1ZSgpCgl7CgkJaWYgKCRzdGFuZGFsb25lID0gJHRoaXMtPmdldF92YWx1ZSgpKQoJCXsKCQkJc3dpdGNoICgkc3RhbmRhbG9uZSkKCQkJewoJCQkJY2FzZSAneWVzJzoKCQkJCQkkdGhpcy0+c3RhbmRhbG9uZSA9IHRydWU7CgkJCQkJYnJlYWs7CgoJCQkJY2FzZSAnbm8nOgoJCQkJCSR0aGlzLT5zdGFuZGFsb25lID0gZmFsc2U7CgkJCQkJYnJlYWs7CgoJCQkJZGVmYXVsdDoKCQkJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQkJCQlyZXR1cm47CgkJCX0KCgkJCSR0aGlzLT5za2lwX3doaXRlc3BhY2UoKTsKCQkJaWYgKCR0aGlzLT5oYXNfZGF0YSgpKQoJCQl7CgkJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5zdGF0ZSA9ICdlbWl0JzsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkdGhpcy0+c3RhdGUgPSBmYWxzZTsKCQl9Cgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDA0LTIwMDcsIFJ5YW4gUGFybWFuIGFuZCBTYW0gU25lZGRvbi4KQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSAKcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CgoJKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiAKCSAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgoKCSogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QgCgkgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIAoJICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCgoJKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBTaW1wbGVQaWUgVGVhbSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgCgkgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIAoJICB3cml0dGVuIHBlcm1pc3Npb24uCgpUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIApPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSAKQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgCkFORCBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiAKQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiAKU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgClRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIApPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIApQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBTaW1wbGVQaWVNZ3IKIyBBdXRob3I6IFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zaW1wbGVwaWVtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dfUlNTX1JlYWRlciBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykgKSBleGl0OwoKdHJ5IHsKICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbihUUlVFKTsKCiAgICAkdWlkID0gZ2V0X3VzZXJpZCgpOwogICAgJHRwbF90eXBlID0gbmV3IFxDbXNMYXlvdXRUZW1wbGF0ZVR5cGUoKTsKICAgICR0cGxfdHlwZS0+c2V0X29yaWdpbmF0b3IoJHRoaXMtPkdldE5hbWUoKSk7CiAgICAkdHBsX3R5cGUtPnNldF9uYW1lKCdSU1NfRmVlZCcpOwogICAgJHRwbF90eXBlLT5zZXRfZGZsdF9mbGFnKFRSVUUpOwogICAgJHRwbF90eXBlLT5zZXRfbGFuZ19jYWxsYmFjaygnU2ltcGxlUGllTWdyOjpwYWdlX3R5cGVfbGFuZ19jYWxsYmFjaycpOwogICAgJHRwbF90eXBlLT5zZXRfY29udGVudF9jYWxsYmFjaygnU2ltcGxlUGllTWdyOjpyZXNldF9wYWdlX3R5cGVfZGVmYXVsdHMnKTsKICAgICR0cGxfdHlwZS0+cmVzZXRfY29udGVudF90b19mYWN0b3J5KCk7CiAgICAkdHBsX3R5cGUtPnNhdmUoKTsKCiAgICAkZm4gPSBjbXNfam9pbl9wYXRoKF9fRElSX18sICd0ZW1wbGF0ZXMnLCAnZGVmYXVsdF9yc3NfdGVtcGxhdGUudHBsJyk7CiAgICAKICAgIGlmKCBpc19maWxlKCRmbikgKSB7CiAgICAgICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICAgICAgJHRwbCA9IG5ldyBDbXNMYXlvdXRUZW1wbGF0ZSgpOwogICAgICAgICR0cGwtPnNldF9uYW1lKCdSU1NfRmVlZCcpOwogICAgICAgICR0cGwtPnNldF9vd25lcigkdWlkKTsKICAgICAgICAkdHBsLT5zZXRfY29udGVudCgkdGVtcGxhdGUpOwogICAgICAgICR0cGwtPnNldF90eXBlKCR0cGxfdHlwZSk7CiAgICAgICAgJHRwbC0+c2V0X3R5cGVfZGZsdChUUlVFKTsKICAgICAgICAkdHBsLT5zYXZlKCk7CiAgICB9Cn0KCmNhdGNoKCBcRXhjZXB0aW9uICRlICkgewogICAgXHh0X3V0aWxzOjpsb2dfZXhjZXB0aW9uKCRlKTsKICAgIHJldHVybiAkZS0+R2V0TWVzc2FnZSgpOwp9CgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBTaW1wbGVQaWVNZ3IKIyBBdXRob3I6IFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zaW1wbGVwaWVtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dfUlNTX1JlYWRlciBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykgKSBleGl0OwoKLy8gcmVtb3ZlIHRlbXBsYXRlcyBhbmQgdGVtcGxhdGUgdHlwZXMKdHJ5IHsKICAgICR0eXBlcyA9IENtc0xheW91dFRlbXBsYXRlVHlwZTo6bG9hZF9hbGxfYnlfb3JpZ2luYXRvcigkdGhpcy0+R2V0TmFtZSgpKTsKICAgIGlmKCBpc19hcnJheSgkdHlwZXMpICYmIGNvdW50KCR0eXBlcykgKSB7CiAgICAgICAgZm9yZWFjaCggJHR5cGVzIGFzICR0eXBlICkgewogICAgICAgICAgICAkdGVtcGxhdGVzID0gbnVsbDsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICR0ZW1wbGF0ZXMgPSAkdHlwZS0+Z2V0X3RlbXBsYXRlX2xpc3QoKTsKICAgICAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdGVtcGxhdGVzKSAmJiBjb3VudCgkdGVtcGxhdGVzKSApIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCAkdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBsYXRlLT5kZWxldGUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2goIFxDbXNEYXRhTm90Rm91bmRFeGNlcHRpb24gJGUgKSB7CiAgICAgICAgICAgICAgICAvLyBpZ25vcmUKICAgICAgICAgICAgfQogICAgICAgICAgICAkdHlwZS0+ZGVsZXRlKCk7CiAgICAgICAgfQogICAgfQp9CgpjYXRjaCggRXhjZXB0aW9uICRlICkgewogICAgLy8gbG9nIGl0CiAgICBceHRfdXRpbHM6OmxvZ19leGNlcHRpb24oJGUpOwogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnVW5pbnN0YWxsIEVycm9yOiAnLiRlLT5HZXRNZXNzYWdlKCkpOwp9CgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBTaW1wbGVQaWVNZ3IKIyBBdXRob3I6IFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zaW1wbGVwaWVtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dfUlNTX1JlYWRlciBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoICFmdW5jdGlvbl9leGlzdHMoJ2Ntc21zJykgKSBleGl0OwoKIwojIEVPRgoj]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJTaW1wbGVQaWVNZ3IiCnZlcnNpb24gPSAiMS4wLjEiCmF1dGhvciA9ICJSb2xmIFRqYXNzZW5zIgphdXRob3JlbWFpbCA9ICJpbmZvIGF0IGNtc2NhbmJlc2ltcGxlIGRvdCBvcmciCm1pbmNtc3ZlcnNpb24gPSAyLjIKbGF6eWxvYWRhZG1pbiA9IDAKbGF6eWxvYWRmcm9udGVuZCA9IDEKW2RlcGVuZHNdCkNNU01TRXh0ID0gMS4wCg==]]></data>
	</file>
	<file>
	  <filename>/SimplePieMgr.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBTaW1wbGVQaWVNZ3IKIyBBdXRob3I6IFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4KIyAoYykgMjAwNCAtIDIwMTEgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0KIyAoYykgMjAxOCBhbmQgYmV5b25kIGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRm91bmRhdGlvbgojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9zaW1wbGVwaWVtZ3IKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGb3JrIGZyb20gQ0dfUlNTX1JlYWRlciBtb2R1bGUgYnkgUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwLmNvbSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppbmNsdWRlX29uY2UgKCBjbXNfam9pbl9wYXRoKCBkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnbGliJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnYXV0b2xvYWRlci5waHAnICkgKTsKCmNsYXNzIFNpbXBsZVBpZU1nciBleHRlbmRzIENNU01TRXh0CnsKCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsgcmV0dXJuICcxLjAuMSc7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3IoKSB7IHJldHVybiAnUm9sZiBUamFzc2Vucyc7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsgcmV0dXJuICdpbmZvIGF0IGNtc2NhbmJlc2ltcGxlIGRvdCBvcmcnOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7IHJldHVybiBUUlVFOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiBGQUxTRTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgcmV0dXJuIGFycmF5KCdDTVNNU0V4dCcgPT4gJzEuMCcpOyAgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpIHsgcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2NoYW5nZWxvZy50cGwnKTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSB7IHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdoZWxwLnRwbCcpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7IHJldHVybiAnMi4yJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkgeyByZXR1cm4gVFJVRTsgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7CiAgICAgICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmVlZHMnLCBDTEVBTl9TVFJJTkcpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdmZWVkJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbGltaXQnLCBDTEVBTl9JTlQpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwYWdlJywgQ0xFQU5fSU5UKTsKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY2FjaGVfdGltZW91dCcsIENMRUFOX0lOVCk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3RlbXBsYXRlJywgQ0xFQU5fU1RSSU5HKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkgewogICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2ZlZWRzJywgJycsICR0aGlzLT5MYW5nKCdoZWxwX2ZlZWRzJykpOwogICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2ZlZWQnLCAnJywgJHRoaXMtPkxhbmcoJ2hlbHBfZmVlZCcpKTsKICAgICAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdsaW1pdCcsICcxNScsICR0aGlzLT5MYW5nKCdoZWxwX2xpbWl0JykpOwogICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2NhY2hlX3RpbWVvdXQnLCAnMzYwMCcsICR0aGlzLT5MYW5nKCdoZWxwX2NhY2hlX3RpbWVvdXQnKSk7CiAgICAgICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigndGVtcGxhdGUnLCAnJywgJHRoaXMtPkxhbmcoJ2hlbHBfdGVtcGxhdGUnKSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYWdlX3R5cGVfbGFuZ19jYWxsYmFjaygkc3RyKQogICAgewogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1NpbXBsZVBpZU1ncicpOwogICAgICAgIGlmKCBpc19vYmplY3QoJG1vZCkgKSByZXR1cm4gJG1vZC0+TGFuZygndHlwZV8nLiRzdHIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVzZXRfcGFnZV90eXBlX2RlZmF1bHRzKENtc0xheW91dFRlbXBsYXRlVHlwZSAkdHlwZSkKICAgIHsKICAgICAgICBpZiggJHR5cGUtPmdldF9vcmlnaW5hdG9yKCkgIT0gJ1NpbXBsZVBpZU1ncicgKSB0aHJvdyBuZXcgQ21zTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZXNldCBjb250ZW50cyBmb3IgdGhpcyB0ZW1wbGF0ZSB0eXBlJyk7CiAgICAgICAgJGZuID0gY21zX2pvaW5fcGF0aChfX0RJUl9fLCAndGVtcGxhdGVzJywgJ2RlZmF1bHRfcnNzX3RlbXBsYXRlLnRwbCcpOwogICAgICAgIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgIH0KCn0gLy8gZW5kIGNsYXNzCgojCiMgRU9GCiM=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPjxiPlZlcnNpb24gMS4wPC9iPiAyNiBNYXJjaCAyMDIxPGJyIC8+CgkJLSBJbml0aWFsIFJlbGVhc2UuPC9saT4KCTxsaT48Yj5WZXJzaW9uIDEuMC4xPC9iPiAyNiBNYXJjaCAyMDIxPGJyIC8+CgkJLSBNaW5vciBmaXggdG8gZGVmYXVsdCB0ZW1wbGF0ZSBjYWxsLjwvbGk+CjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/default_rss_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2ZvcmVhY2ggZnJvbT0kZmVlZHMgaXRlbT1vbmVmZWVkfQogIDxoND48YSBocmVmPSJ7JG9uZWZlZWQtPmdldF9wZXJtYWxpbmsoKX0iIHRpdGxlPSJ7JG9uZWZlZWQtPmdldF90aXRsZSgpfSI+eyRvbmVmZWVkLT5nZXRfdGl0bGUoKX08L2E+PC9oND4KICA8cD4KICAgIDxzbWFsbD57JG9uZWZlZWQtPmdldF9kYXRlKCl8ZGF0ZV9mb3JtYXQ6IiVkLSVtLSVZICVIOiVNIn08L3NtYWxsPjxiciAvPgogICAgeyRvbmVmZWVkLT5nZXRfY29udGVudCgpfTxiciAvPgogICAgPGEgaHJlZj0ieyRvbmVmZWVkLT5nZXRfcGVybWFsaW5rKCl9Ij5SZWFkIG1vcmU8L2E+ICZyYXF1bzsKICA8L3A+CnsvZm9yZWFjaH0KCntpZiBpc3NldCgkcGFnZWNvdW50KSAmJiAkcGFnZWNvdW50ID4gMX0KICA8cD4KICAgIHtpZiBpc3NldCgkZmlyc3R1cmwpICYmICRmaXJzdHVybH08YSBocmVmPSJ7JGZpcnN0dXJsfSI+Jmx0OyZsdDs8L2E+Jm5ic3A7ey9pZn0KICAgIHtpZiBpc3NldCgkcHJldnVybCkgJiYgJHByZXZ1cmx9PGEgaHJlZj0ieyRwcmV2dXJsfSI+Jmx0OzwvYT4mbmJzcDt7L2lmfQogICAgPGVtPnskcGFnZW51bWJlcn0gLyB7JHBhZ2Vjb3VudH08L2VtPiZuYnNwOwogICAge2lmIGlzc2V0KCRuZXh0dXJsKSAmJiAkbmV4dHVybH08YSBocmVmPSJ7JG5leHR1cmx9Ij4mZ3Q7PC9hPiZuYnNwO3svaWZ9CiAgICB7aWYgaXNzZXQoJGxhc3R1cmwpICYmICRsYXN0dXJsfTxhIGhyZWY9InskbGFzdHVybH0iPiZndDsmZ3Q7PC9hPiZuYnNwO3svaWZ9CiAgPC9wPgp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3RhYl9oZWFkZXIgbmFtZT0nc3VwcG9ydCcgbGFiZWw9J1N1cHBvcnQnfQp7dGFiX2hlYWRlciBuYW1lPSdnZW5lcmFsJyBsYWJlbD0nR2VuZXJhbCd9Cnt0YWJfaGVhZGVyIG5hbWU9J2hvd3RvdXNlJyBsYWJlbD0nSG93IFRvIFVzZSd9Cnt0YWJfaGVhZGVyIG5hbWU9J2NvcHlyaWdodCcgbGFiZWw9J0NvcHlyaWdodCBhbmQgTGljZW5zZSd9CgoKe3RhYl9zdGFydCBuYW1lPSdzdXBwb3J0J30KCTxoMz5UaGlzIG1vZHVsZSBpcyBicm91Z2h0IHRvIHlvdSBieTo8L2gzPgoJPHA+PGEgaHJlZj0iaHR0cHM6Ly9jbXNjYW5iZXNpbXBsZS5vcmcvYnV5LXJvbGYtYS1jdXAtb2YtY29mZmVlIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj4KCQk8aW1nIHNyYz0iLi4vbW9kdWxlcy9TaW1wbGVQaWVNZ3IvaW1hZ2VzL2Ntcy1jYW4tYmUtc2ltcGxlLW9yZy5wbmciIGFsdD0iIiB3aWR0aD0iNTAwIiAvPgoJCTwvYT48L3A+Cgk8YnIgLz4KCTxwPjxiPlRpcHMsIHRyaWNrcyBhbmQgdHV0b3JpYWxzIHRvIG1ha2UgaXQgZXZlbiBlYXNpZXIgdG8gd29yayB3aXRoIENNUyBNYWRlIFNpbXBsZSZ0cmFkZTsuPC9iPjwvcD4KCTxiciAvPgoJPHA+WW91IGNhbiBmaW5kIG1lIGF0OjwvcD4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly9jbXNjYW5iZXNpbXBsZS5vcmciIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPmNtc2NhbmJlc2ltcGxlLm9yZzwvYT4gJnJhcXVvOzwvbGk+CgkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vY21zY2FuYmVzaW1wbGUiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPnR3aXR0ZXIuY29tPC9hPiAmcmFxdW87PC9saT4KCTwvdWw+CiAgICAKCTxoMz5TdXBwb3J0IG1lIGZvciBzdXBwb3J0aW5nIHlvdSE8L2gzPgoJPHA+RG8geW91IGxpa2UgdGhpcyBtb2R1bGUgYW5kIHRoZSBoZWxwIHlvdSBnZXQgYXQgQ01TIENhbiBCZSBTaW1wbGU/PHA+Cgk8cD5Zb3UgY2FuIGRvbmF0ZSBzb21lIG1vbmV5IHRvIGJ1eSBtZSBhIHZpcnR1YWwgY3VwIG9mIGNvZmZlZSBhcyBhIHNtYWxsIHRva2VuIG9mIGFwcHJlY2lhdGlvbi48cD4KCTxwPjxiPjxhIGhyZWY9Imh0dHBzOi8vY21zY2FuYmVzaW1wbGUub3JnL2J1eS1yb2xmLWEtY3VwLW9mLWNvZmZlZSIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+RE9OQVRFIE5PVzwvYT4gJnJhcXVvOzwvYj48L3A+CiAgCgk8aDM+U3VwcG9ydDwvaDM+Cgk8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBjb250YWluIGFueSBjb21tZXJjaWFsIHN1cHBvcnQuIElmIHlvdSBoYXZlIHByb2JsZW1zLCBhc2sgZm9yIGhlbHAgaW4gdGhlOjwvcD4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iaHR0cHM6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy8iIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPkNNUyBNYWRlIFNpbXBsZSBmb3J1bXM8L2E+OzwvbGk+CgkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL3N1cHBvcnQvZG9jdW1lbnRhdGlvbi9jaGF0LyIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+U2xhY2sgY2hhdDwvYT47PC9saT4KCQk8bGk+b3Igd3JpdGUgYW4gZW1haWwgdG8gdGhlIGF1dGhvci48L2xpPgoJPC91bD4KCgp7dGFiX3N0YXJ0IG5hbWU9J2dlbmVyYWwnfQoJPGgzPlRoYW5rcyBmb3IgdXNpbmcgU2ltcGxlUGllTWdyLjwvaDM+CgoJPHA+VGhpcyBtb2R1bGUgYWxsb3dzIGRpc3BsYXlpbmcgdGhlIGNvbnRlbnQgZnJvbSBSU1MgZmVlZHMgaW4geW91ciB3ZWIgcGFnZS48L3A+Cgk8YnIgLz4KCTxwPjxiPk5vdGU6PC9iPiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLjwvcD4KCgp7dGFiX3N0YXJ0IG5hbWU9J2hvd3RvdXNlJ30KCTxoMz5Ib3cgZG8gSSB1c2UgaXQ8L2gzPgoJPHA+U2ltcGxlLCBqdXN0IGFkZCBpdCB0byB5b3VyIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZSBsaWtlIHRoaXM6CgkJPGNvZGU+e2xkZWxpbX1TaW1wbGVQaWVNZ3IgZmVlZD0naHR0cHM6Ly9jbXNjYW5iZXNpbXBsZS5vcmcvZmVlZHMvYmxvZy5yc3MnfTwvY29kZT4KCQk8L3A+CgoJPHA+VG8gYWdncmVnYXRlIG11bHRpcGxlIFJTUyBmZWVkczoKCQk8Y29kZT57bGRlbGltfVNpbXBsZVBpZU1nciBmZWVkcz0naHR0cHM6Ly9jbXNjYW5iZXNpbXBsZS5vcmcvZmVlZHMvYmxvZy5yc3MsIGh0dHBzOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2ZlZWQucnNzJ308L2NvZGU+CgkJPC9wPgoKCnt0YWJfc3RhcnQgbmFtZT0nY29weXJpZ2h0J30KCTxiciAvPgoJPHA+VGhpcyBtb2R1bGUgaXMgYSBmb3JrIG9mIHRoZSBDR19SU1NfUmVhZGVyIG1vZHVsZS48YnIgLz4KCQlDb3B5cmlnaHQgJmNvcHk7IDIwMTYgLSAyMDIxLCBSb2JlcnQgQ2FtcGJlbGwgW2NhbGd1eTEwMDAuY29tXS48L3A+CgoJPGgzPlNpbXBsZVBpZU1ncjwvaDM+Cgk8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMjEgYW5kIGJleW9uZCwgUm9sZiBUamFzc2VucyBbaW5mbyBhdCBjbXNjYW5iZXNpbXBsZSBkb3Qgb3JnXS4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgoJPGJyIC8+Cgk8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGI+PGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5HTlUgUHVibGljIExpY2Vuc2UgdjM8L2E+PC9iPi48L3A+Cgk8cD48Yj5Ib3dldmVyPC9iPiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUmdHJhZGU7LjxiciAvPgoJCVlvdSBtYXkgb25seSB1c2UgdGhpcyBzb2Z0d2FyZSB3aGVuIHRoZXJlIGlzIGEgY2xlYXIgYW5kIG9idmlvdXMgaW5kaWNhdGlvbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIDxiPkNNUyBNYWRlIFNpbXBsZSZ0cmFkZTs8L2I+LjwvcD4KCnt0YWJfZW5kfQoKPHNjcmlwdD4KCSQoImltZyIpLmVycm9yKGZ1bmN0aW9uKCkgeyAKCQkkKHRoaXMpLmF0dHIoJ3NyYycsICcuLi9hc3NldHMvbW9kdWxlcy9TaW1wbGVQaWVNZ3IvaW1hZ2VzL2Ntcy1jYW4tYmUtc2ltcGxlLW9yZy5wbmcnKTsKCX0gKTsKPC9zY3JpcHQ+]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
</module>
