<?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>BWTwitter</name>
	<version>2.0.2</version>
  <mincmsversion>1.5.4</mincmsversion>
	<help><![CDATA[CjxoMz5XYXQgZG9ldCBkZXplIG1vZHVsZT88L2gzPgo8cD4KCUhldCBkb2VsIHZhbiBkZSBCV1R3aXR0ZXIgbW9kdWxlIGlzIGhldCB6byBtYWtrZWxpamsgbW9nZWxpamsgbWFrZW4gdmFuIGhldCB0b25lbiB2YW4gdHdlZXRzIHZhbiB2ZXJzY2hpbGxlbmRlIGJyb25uZW4uCglFciBrdW5uZW4gbWVlcmRlcmUgYnJvbm5lbiBhYW5nZW1hYWt0IHdvcmRlbiAodHdpdHRlciBwcm9maWVsZW4sIHpvZWt0ZXJtZW4gZW4gaGFzaHRhZ3MpIGVuIGRlemUga3VubmVuIHNhbWVuZ2V2b2VnZCB3b3JkZW4gZG9vciBlZW4gZ3JvZXAgYWFuIHRlIG1ha2VuIG1ldCBkZSBnZXdlbnN0ZSBicm9ubmVuLgoJQnJvbm5lbiBrdW5uZW4gb29rIGFwYXJ0IHdvcmRlbiBhYW5nZXJvZXBlbi4KPC9wPgo8aDM+SG9lIGdlYnJ1aWsgaWsgaGV0PzwvaDM+CjxwPgoJVm9vcmRhdCBqZSBkZSBCV1R3aXR0ZXIgbW9kdWxlIGt1bnQgZ2VicnVpa2VuLCBkaWVuIGplIGplIHRlIGF1dG9yaXNlcmVuIGJpaiBUd2l0dGVyLiBEaXQgZG9lIGplIGRvb3IgYmlqIGhldCBpbnN0ZWxsaW5nZW50YWJibGFkIG9wICJMb2cgaW4gYmlqIFR3aXR0ZXIiIHRlIGtsaWtrZW4gZW4gdmVydm9sZ2VucyBvcCAiU2lnbiBpbiIuPGJyLz4KCURlIEJXVHdpdHRlciBtb2R1bGUga2FuIHdvcmRlbiBhYW5nZXJvZXBlbiBtZXQgPHN0cm9uZz57QldUd2l0dGVyfTwvc3Ryb25nPiBpbiBpZWRlcmUgcGFnaW5hIG9mIHNqYWJsb29uLiBFciBrYW4gZWVuIGdyb2VwIGFhbmdlZ2V2ZW4gd29yZGVuIG9tIHRlIHRvbmVuLCBvZiBlciBrdW5uZW4gbWVlcmRlcmUgYnJvbm5lbiBsb3MgYWFuZ2Vyb2VwZW4gd29yZGVuLiAoWmllIHBhcmFtZXRlcnMpCjwvcD4KPGgzPkhvZSB3ZXJrdCBoZXQ/PC9oMz4KPHA+CglTdGFuZGFhcmQgd29yZHQgZGUgZGF0YWJhc2UgbWV0IHR3ZWV0cyB2ZXJ2ZXJzdCB3YW5uZWVyIGRlIHtCV1R3aXR0ZXJ9IHRhZyBvcCBlZW4gcGFnaW5hIHdvcmR0IGFhbmdlcm9lcGVuLiAKCUFscyBlciBlZW4gc3BlY2lmaWVrZSBncm9lcCBvZiBicm9uIGlzIGFhbmdlZ2V2ZW4gbWV0IG9uZGVyc3RhYW5kZSBwYXJhbWV0ZXJzLCB6dWxsZW4gYWxsZWVuIGRpZSBicm9ubmVuIHZlcnZlcnN0IHdvcmRlbiBvbSBkZSBsYWFkdGlqZCB6byBsYWFnIG1vZ2VsaWprIHRlIGhvdWRlbi4JCglCaWogZGUgbW9kdWxlIGluc3RlbGxpbmdlbiBrdW50IHUgYWFuZ2V2ZW4gZGF0IGRlIGRhdGFiYXNlIG1ldCB0d2VldHMgb29rIHZlcnZlcnN0IG1vZXQgd29yZGVuIHdhbm5lZXIgZGUge0JXVHdpdHRlcn0gdGFnIG5pZXQgdm9vcmtvbXQgb3AgZWVuIHBhZ2luYS4KCVZlcmRlciBrdW50IHUgYmlqIGRlIG1vZHVsZSBpbnN0ZWxsaW5nZW4gYWFuZ2V2ZW4gaG9ldmVlbCB0aWpkIGVyIHZlcnN0cmVrZW4gbW9ldCB6aWpuIHZvb3JkYXQgZWVuIGJyb24gb3BuaWV1dyB2ZXJ2ZXJzdCB3b3JkdC4KCUFhbiB0ZSByYWRlbiBpcyBvbSBkaXQgZWVucyBpbiBkZSA1IG1pbnV0ZW4gdGUgZG9lbiwgb20gZGUgbGFhZHRpamQgem8gbGFhZyBtb2dlbGlqayB0ZSBob3VkZW4gZW4gZGUgbGltaWV0IGFhbiBoZXQgYWFudGFsIHZlcnpvZWtqZXMgYWFuIFR3aXR0ZXIgbmlldCB0ZSBvdmVyc2NocmlqZGVuLgo8L3A+CjxoMz5HZWJydWlrZXJzPC9oMz4KPHA+CglXYW5uZWVyIHUgdHdlZXRzIHZhbiBlZW4gYmVwYWFsZGUgZ2VicnVpa2VyIG5pZXQgd2lsdCB0b25lbiBrdW50IHUgZGV6ZSBnZWJydWlrZXIgb3B6b2VrZW4gaW4gZGUgZ2VicnVpa2Vyc3RhYiBlbiBkZXplIGdlYnJ1aWtlciBkZWFjdGl2ZXJlbi4KCVR3ZWV0cyB2YW4gZGV6ZSBnZWJydWlrZXIgenVsbGVuIGRhbiBuaWV0IG1lZXIgd29yZGVuIG9wZ2VoYWFsZCBlbiB6dWxsZW4gbmlldCBnZXRvb25kIHdvcmRlbi4KPC9wPgo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIERlemUgcGFyYW1ldGVyIHdvcmR0IGdlYnJ1aWt0IG9tIGRlIHRhYWxrZXV6ZSBhYW4gdGUgZ2V2ZW4uIE5pZXQgYWxsZSBtb2R1bGVzIG9uZGVyc3RldW5lbiBkZXplIHBhcmFtZXRlciAob2YgaGViYmVuIGRlemUgbm9kaWcpLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZ3JvdXA9IiIgLSBJRCB2YW4gZGUgZ3JvZXAgd2FhcnZhbiBkZSB0d2VldHMgZ2V0b29uZCBtb2V0ZW4gd29yZGVuLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gc291cmNlPSIiIC0gSUQgdmFuIGRlIGJyb24vYnJvbm5lbiBkaWUgZ2V0b29uZCBtb2V0KGVuKSB3b3JkZW4sIGdlc2NoZWlkZW4gZG9vciBjb21tYSdzLiBCaWp2b29yYmVlbGQge0JXVHdpdHRlciBzb3VyY2U9IjEsMyJ9PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsaW1pdD0iMjAiIC0gPGVtPlN0YW5kYWFyZDogMjA8L2VtPiAtIEFhbnRhbCB0d2VldHMgZGF0IGdldG9vbmQgbW9ldCB3b3JkZW4uPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB0ZW1wbGF0ZT0iRGVmYXVsdCIgLSBTamFibG9vbiBkYXQgZ2VicnVpa3QgbW9ldCB3b3JkZW4gb20gZGUgdHdlZXRzIHRlIHRvbmVuLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBCdWlsZG5ldCBXZWJzZXJ2aWNlcyAmbHQ7c3VwcG9ydEBidWlsZG5ldC5ubCZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjAuMjxiciAvPg==]]></about>
	<description><![CDATA[Module voor het tonen van tweets, gebaseerd op account, hashtag of zoekterm.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.activate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV1R3aXR0ZXInKSkgZXhpdDsKCi8vIElmIHdlJ3JlIGFjdGl2YXRpbmcvZGVhY3RpdmF0aW5nIGEgbWVzc2FnZQppZiAoIWVtcHR5KCRwYXJhbXNbJ21lc3NhZ2VJRCddKSl7CgkvLyBDaGVjayB0aGUgY3VycmVudCB2YWx1ZQoJJGl0ZW0gPSAkdGhpcy0+X0dldE1lc3NhZ2UoJGlkLCAkcmV0dXJuaWQsICRwYXJhbXNbJ21lc3NhZ2VJRCddKTsJCgkkY3VycmVudF9zdGF0ZSA9ICRpdGVtWydBY3RpdmUnXTsKCS8vIFNldCBvcHBvc2l0ZQoJaWYgKCRjdXJyZW50X3N0YXRlID09IDEpewoJCSR1cGRhdGUgPSAwOwoJfSBlbHNlIHsKCQkkdXBkYXRlID0gMTsKCX0KCS8vIFNldCBxdWVyeSwgdmFycywgYW5kIHJlZGlyZWN0IHBhcmFtcwoJJHF1ZXJ5U3RyaW5nID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9tZXNzYWdlcyBTRVQgQWN0aXZlPT8gIFdIRVJFIElEPT8iOwoJJHZhcnMgPSBhcnJheSgkdXBkYXRlLCRwYXJhbXNbJ21lc3NhZ2VJRCddKTsKCSRyZWRpcmVjdF9wYXJhbXMgPSBhcnJheSgiYWN0aXZlX3RhYiIgPT4gJ21lc3NhZ2VzJywndGFiX21lc3NhZ2UnID0+ICd0YWJtZXNzYWdlX21lc3NhZ2VfYWN0aXZlJy4kdXBkYXRlKTsKfQovLyBJZiB3ZSdyZSBhY3RpdmF0aW4vZGVhY3RpdmF0aW5nIGEgdXNlcgplbHNlaWYgKCFlbXB0eSgkcGFyYW1zWyd1c2VySUQnXSkpewoJLy8gQ2hlY2sgdGhlIGN1cnJlbnQgdmFsdWUKCSRpdGVtID0gJHRoaXMtPl9HZXRVc2VyKCRpZCwgJHJldHVybmlkLCAkcGFyYW1zWyd1c2VySUQnXSk7CQoJJGN1cnJlbnRfc3RhdGUgPSAkaXRlbVsnQWN0aXZlJ107CgkvLyBTZXQgb3Bwb3NpdGUKCWlmICgkY3VycmVudF9zdGF0ZSA9PSAxKXsKCQkkdXBkYXRlID0gMDsKCX0gZWxzZSB7CgkJJHVwZGF0ZSA9IDE7Cgl9CgkvLyBTZXQgcXVlcnksIHZhcnMsIGFuZCByZWRpcmVjdCBwYXJhbXMKCSRxdWVyeVN0cmluZyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfdXNlcnMgU0VUIEFjdGl2ZT0/ICBXSEVSRSBJRD0/IjsKCSR2YXJzID0gYXJyYXkoJHVwZGF0ZSwkcGFyYW1zWyd1c2VySUQnXSk7CgkkcmVkaXJlY3RfcGFyYW1zID0gYXJyYXkoImFjdGl2ZV90YWIiID0+ICd1c2VycycsJ3RhYl9tZXNzYWdlJyA9PiAndGFibWVzc2FnZV91c2VyX2FjdGl2ZScuJHVwZGF0ZSk7Cn0KLy8gSWYgd2UncmUgYWN0aXZhdGluL2RlYWN0aXZhdGluZyBhIHNvdXJjZQplbHNlaWYgKCFlbXB0eSgkcGFyYW1zWydzb3VyY2VJRCddKSl7CgkvLyBDaGVjayB0aGUgY3VycmVudCB2YWx1ZQoJJGl0ZW0gPSAkdGhpcy0+X0dldFNvdXJjZSgkaWQsICRyZXR1cm5pZCwgJHBhcmFtc1snc291cmNlSUQnXSk7CQoJJGN1cnJlbnRfc3RhdGUgPSAkaXRlbVsnQWN0aXZlJ107CgkvLyBTZXQgb3Bwb3NpdGUKCWlmICgkY3VycmVudF9zdGF0ZSA9PSAxKXsKCQkkdXBkYXRlID0gMDsKCX0gZWxzZSB7CgkJJHVwZGF0ZSA9IDE7Cgl9CgkvLyBTZXQgcXVlcnksIHZhcnMsIGFuZCByZWRpcmVjdCBwYXJhbXMKCSRxdWVyeVN0cmluZyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlcyBTRVQgQWN0aXZlPT8gIFdIRVJFIElEPT8iOwoJJHZhcnMgPSBhcnJheSgkdXBkYXRlLCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJJHJlZGlyZWN0X3BhcmFtcyA9IGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnc291cmNlcycsJ3RhYl9tZXNzYWdlJyA9PiAndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlJy4kdXBkYXRlKTsKfQoKLy8gRXhlY3V0ZSBxdWVyeQokcXVlcnlSZXN1bHQgPSRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsJHZhcnMpOwppZiAoJHF1ZXJ5UmVzdWx0KXsKCS8vZWNobyAkZGItPnNxbC4iPGJyLz4iOwoJLy8gUmVkaXJlY3QJCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwkcmVkaXJlY3RfcGFyYW1zKTsJCn0KCQoKCQoKCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.addtemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV1R3aXR0ZXIgVGVtcGxhdGVzJykpIGV4aXQ7CgovLyBGb3JtIHN1Ym1pdHRlZD8KaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSl7CgkkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgkKaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddLCRwYXJhbXNbJ3RlbXBsYXRlX2NvbnRlbnQnXSk7CgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICd0YWJtZXNzYWdlX3RlbXBsYXRlX2FkZCcsICdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJyk7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKfQoKCi8vIEdldCBkZWZhdWx0IHRlbXBsYXRlIGNvbnRlbnRzCiRkZWZhdWx0X3RlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfdGVtcGxhdGVfY29udGVudCcpOwoKLy8gQXNzaWducwokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnYWRkdGVtcGxhdGUnLCRyZXR1cm5pZCwncG9zdCcsJycsZmFsc2UsICcnLCAkcGFyYW1zKSk7CiRzbWFydHktPmFzc2lnbignbmFtZScsJHRoaXMtPkxhbmcoJ2lucHV0X3RleHRfbmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdjb250ZW50JywkdGhpcy0+TGFuZygnaW5wdXRfdGV4dF9jb250ZW50JykpOwokc21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlX25hbWUnLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ3RlbXBsYXRlX25hbWUnLCAiIiwgNTUpKTsKJHNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZV9jb250ZW50JywkdGhpcy0+Q3JlYXRlU3ludGF4QXJlYSAoJGlkLCAkZGVmYXVsdF90ZW1wbGF0ZSwgJ3RlbXBsYXRlX2NvbnRlbnQnKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignY2FuY2VsJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsIGxhbmcoJ2NhbmNlbCcpKSk7CiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPkFzc2lnbigndmFycycsbmwyYnIoJHRoaXMtPkxhbmcoJ2hlbHBfdGVtcGxhdGVWYXJzJykpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fYWRkdGVtcGxhdGUudHBsJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.add_edit_group.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBCV1R3aXR0ZXInKSkgZXhpdDsKCiR0aGlzLT5Mb2FkSlMoKTsKCmlmICghZW1wdHkoJHBhcmFtc1sndGFibWVzc2FnZSddKSl7CgkkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJHBhcmFtc1sndGFibWVzc2FnZSddKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBJRiBGT1JNIFdBUyBTRU5UCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZiAoIWVtcHR5KCRwYXJhbXNbJ3NlbnQnXSkpewoJLy8gSWYgY2FuY2VsIHdhcyBoaXQKCWlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpewoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnZ3JvdXBzJykpOwkJCgl9CgkKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSWYgaXQncyBhbiB1cGRhdGUgb2YgYSBncm91cAoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglpZiAoJHBhcmFtc1snYWRkJ10gPT0gIm5vIil7CQkJCgkJLy8gVXBkYXRlIHNvdXJjZQoJCSR2YXJzID0gYXJyYXkoJHBhcmFtc1snVGl0bGUnXSxkYXRlKCJZLW0tZCBIOmk6cyIpLCRwYXJhbXNbJ0lEJ10pOwoJCSRxdWVyeVN0cmluZyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlZ3JvdXBzCgkJU0VUIAoJCQlUaXRsZQkJCT0JCT8sCQkJCgkJCURhdGVNb2RpZmllZAk9CQk/CQkJCQkJCQkJCgkJV0hFUkUgSUQ9PwkJIjsKCQkkcXVlcnlSZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsKCQkJCQoJCS8vIElmIHRoZSBxdWVyeSB3YXMgc3VjY2VzZnVsCgkJaWYgKCRxdWVyeVJlc3VsdCl7CgkJCQoJCQkvLyBSZW1vdmUgZ3JvdXAgLSBzb3VyY2UgbGlua3MKCQkJJHRoaXMtPl9EZWxldGVHcm91cEFzc2lnbm1lbnRzKCRwYXJhbXNbJ0lEJ10pOwkJCQoJCQkKCQkJLy8gQ3JlYXRlIGxpbmsgZ3JvdXAgLSBzb3VyY2UgbGlua3MKCQkJZm9yZWFjaCAoJHBhcmFtc1snc291cmNlJ10gYXMgJHNvdXJjZSl7CgkJCQkkaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzX3NvdXJjZWdyb3Vwc19zZXEiKTsKCQkJCSRxdWVyeVN0cmluZyA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzX3NvdXJjZWdyb3VwcyAoSUQsU291cmNlSUQsU291cmNlZ3JvdXBJRCkKCQkJCQlWQUxVRVMoPyw/LD8pCQoJCQkJCSI7CgkJCQkkdmFycyA9IGFycmF5KCRpZCwkc291cmNlLCRwYXJhbXNbJ0lEJ10pOwoJCQkJJHF1ZXJ5UmVzdWx0MiA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsJHZhcnMpOwoJCQl9CQkJCgkJCQoJCQkvLyBJZiB0aGUgcXVlcmllcyB3ZXJlIHN1Y2Nlc2Z1bAoJCQlpZiAoJHF1ZXJ5UmVzdWx0Mil7CgkJCQkvLyBJZiBzdWJtaXQgd2FzIGhpdCwgcmVkaXJlY3QuIERvIG5vdGhpbmcgaW4gY2FzZSBvZiBhcHBseQoJCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX2dyb3VwX2VkaXQiLCAiYWN0aXZlX3RhYiIgPT4gImdyb3VwcyIpKTsKCQkJCX0JCgkJCX0gCgkJCS8vIFNob3cgZXJyb3IgaW4gY2FzZSBxdWVyeSBkaWRuJ3Qgd29yawoJCQllbHNlIHsKCQkJCSR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9ncm91cF91cGRhdGUnKSk7CgkJCX0KCQl9IAoJCS8vIFNob3cgZXJyb3IgaW4gY2FzZSBxdWVyeSBkaWRuJ3Qgd29yawoJCWVsc2UgewoJCQkkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnZXJyb3JfZ3JvdXBfdXBkYXRlJykpOwoJCX0JCQoJfQkKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSWYgaXQncyBhIG5ldyBncm91cAoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgllbHNlaWYgKCRwYXJhbXNbJ2FkZCddID09ICJ5ZXMiKXsJCQoJCS8vIEdlbmVyYXRlIElECiAgICAJJHBhcmFtc1snSUQnXSA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZWdyb3Vwc19zZXEiKTsKCQkKCQkvLyBJbnNlcnQKCQkkdmFycyA9IGFycmF5KCRwYXJhbXNbJ0lEJ10sJHBhcmFtc1snVGl0bGUnXSxkYXRlKCJZLW0tZCBIOmk6cyIpLGRhdGUoIlktbS1kIEg6aTpzIikpOwoJCSRxdWVyeVN0cmluZyA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2Vncm91cHMKCQkJCQkJKElELFRpdGxlLERhdGVDcmVhdGVkLERhdGVNb2RpZmllZCkKCQkJCQkJVkFMVUVTKD8sPyw/LD8pIjsKCQkkcXVlcnlSZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsJCQoJCQoJCS8vIElmIHRoZSBxdWVyeSB3YXMgc3VjY2VzZnVsCgkJaWYgKCRxdWVyeVJlc3VsdCl7CgkJCS8vIENyZWF0ZSBsaW5rIGdyb3VwIC0gc291cmNlIGxpbmtzCgkJCWZvcmVhY2ggKCRwYXJhbXNbJ3NvdXJjZSddIGFzICRzb3VyY2UpewoJCQkJJGlkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlc19zb3VyY2Vncm91cHNfc2VxIik7CgkJCQkkcXVlcnlTdHJpbmcgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlc19zb3VyY2Vncm91cHMgKElELFNvdXJjZUlELFNvdXJjZWdyb3VwSUQpCgkJCQkJVkFMVUVTKD8sPyw/KQkKCQkJCQkiOwoJCQkJJHZhcnMgPSBhcnJheSgkaWQsJHNvdXJjZSwkcGFyYW1zWydJRCddKTsKCQkJCSRxdWVyeVJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsKCQkJfQkJCQoJCQkKCQkJLy8gSWYgdGhlIHF1ZXJpZXMgd2VyZSBzdWNjZXNmdWwKCQkJaWYgKCRxdWVyeVJlc3VsdDIpewoJCQkJLy8gSWYgc3VibWl0IHdhcyBoaXQsIHJlZGlyZWN0LiBEbyBub3RoaW5nIGluIGNhc2Ugb2YgYXBwbHkKCQkJCWlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpewoJCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJ0YWJtZXNzYWdlIiA9PiAidGFibWVzc2FnZV9ncm91cF9hZGQiLCAiYWN0aXZlX3RhYiIgPT4gImdyb3VwcyIpKTsKCQkJCX0JCgkJCX0gCgkJCS8vIFNob3cgZXJyb3IgaW4gY2FzZSBxdWVyeSBkaWRuJ3Qgd29yawoJCQllbHNlIHsKCQkJCSR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9ncm91cF9hZGQnKSk7CgkJCX0KCQkJCgkJfSAKCQkvLyBTaG93IGVycm9yIGluIGNhc2UgcXVlcnkgZGlkbid0IHdvcmsKCQllbHNlIHsKCQkJJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX2dyb3VwX2FkZCcpKTsKCQl9CgkJCgl9CgkKCQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gR0VORVJBVEUgRk9STQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvLyBJZiBhbiBJRCBpcyBnaXZlbiwgaXQncyBhbiB1cGRhdGUKCWlmICghZW1wdHkoJHBhcmFtc1snSUQnXSkpewkJCQoJCSRncm91cCA9ICR0aGlzLT5fR2V0R3JvdXAoJGlkLCAkcmV0dXJuaWQsICRwYXJhbXNbJ0lEJ10pOwkJCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGQiLCR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsImFkZCIsIm5vIikpOwoJfSBlbHNlIHsKCQkvLyBObyBJRCwgc28gbWFrZSBibGFuayBpbnB1dHMKCQkkZ3JvdXAgPSBhcnJheSgiVGl0bGUiID0+ICIiKTsKCQkkcGFyYW1zWydJRCddID0gIiI7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGQiLCR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsImFkZCIsInllcyIpKTsKCX0KCQoJLy8gSW5wdXRzIG1ha2VuCglmb3JlYWNoICgkZ3JvdXAgYXMgJGtleSA9PiAkdmFsdWUpewkJCgkJaWYgKCFpc19hcnJheSgkdmFsdWUpKXsKCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRrZXkuJ190ZXh0JywgJHRoaXMtPkxhbmcoJ2lucHV0X3RleHRfJy4ka2V5KSk7CgkJCS8vIElmIGl0J3MgdGhlIHR5cGUgaW5wdXQJCQkKCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRrZXkuJ19pbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCRrZXksJHZhbHVlKSk7CQkJCQoJCX0JCQoJfQoJCgkvLyBDcmVhdGluZyBDaGVja2JveGVzIGZvciBzb3VyY2UgYXNzaWdubWVudHMKCSRzb3VyY2VzID0gJHRoaXMtPkdldFNvdXJjZXMoJGlkLCRyZXR1cm5pZCk7CQoJJHNvdXJjZXNfY2hlY2tib3hlcyA9IGFycmF5KCk7CQoJZm9yZWFjaCAoJHNvdXJjZXMgYXMgJHNvdXJjZSl7CgkJLy8gQ2hlY2sgaWYgc291cmNlIGlzIGFzc2lnbmVkIHRvIHRoaXMgZ3JvdXAKCQkkcXVlcnlTdHJpbmcgPSAiU0VMRUNUIElEIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlc19zb3VyY2Vncm91cHMgV0hFUkUgU291cmNlSUQ9PyBBTkQgU291cmNlZ3JvdXBJRD0/IExJTUlUIDEiOwoJCSR2YXJzID0gYXJyYXkoJHNvdXJjZVsnSUQnXSwkcGFyYW1zWydJRCddKTsKCQkkcXVlcnlSZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsKCQkKIAkJaWYgKCRxdWVyeVJlc3VsdCl7CiAJCQkkZm91bmQgPSAkcXVlcnlSZXN1bHQtPkZldGNoUm93KCk7ICAJCQkKIAkJfQoJCS8vIElmIHNvdXJjZSBpcyBhc3NpZ25lZCB0byBnb3VwCgkJaWYgKCFlbXB0eSgkZm91bmQpKXsKCQkJJHNvdXJjZXNfY2hlY2tib3hlc1skc291cmNlWydUaXRsZSddXSA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ3NvdXJjZVtdJywkc291cmNlWydJRCddLCRzb3VyY2VbJ0lEJ10pOwkJCQoJCX0gZWxzZSB7CgkJCSRzb3VyY2VzX2NoZWNrYm94ZXNbJHNvdXJjZVsnVGl0bGUnXV0gPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzb3VyY2VbXScsJHNvdXJjZVsnSUQnXSwnMCcpOwoJCX0KCQkKCX0KCSR0aGlzLT5zbWFydHktPmFzc2lnbignc291cmNlc19jaGVja2JveGVzJywkc291cmNlc19jaGVja2JveGVzKTsKCQoJCgkKCS8vIEZvcm11bGllciB0YWdzIGFhbm1ha2VuCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Zvcm1fc3RhcnQnLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdhZGRfZWRpdF9ncm91cCcsJHJldHVybmlkLCdwb3N0JywnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsJycsJycsYXJyYXkoInNlbnQiID0+ICJ5ZXMiLCAiSUQiID0+ICRwYXJhbXNbJ0lEJ10sICJ0YWJtZXNzYWdlIiA9PiAidGFibWVzc2FnZV9ncm91cF9lZGl0IikpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybV9lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigndG9lcGFzc2VuJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2FwcGx5JywgbGFuZygnYXBwbHknKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc291cmNlc3RleHQnLCR0aGlzLT5MYW5nKCd0YWJfc291cmNlcycpKTsKCQoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9hZGRfZWRpdF9ncm91cC50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.add_edit_source.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBCV1R3aXR0ZXInKSkgZXhpdDsKCiR0aGlzLT5Mb2FkSlMoKTsKCmlmICghZW1wdHkoJHBhcmFtc1sndGFibWVzc2FnZSddKSl7CgkkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJHBhcmFtc1sndGFibWVzc2FnZSddKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBJRiBGT1JNIFdBUyBTRU5UCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZiAoIWVtcHR5KCRwYXJhbXNbJ3NlbnQnXSkpewoJLy8gSWYgY2FuY2VsIHdhcyBoaXQKCWlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpewoJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnc291cmNlcycpKTsJCQoJfQoJCgkvLyBHZW5lcmF0ZSBYTUwgVVJMCgkkcGFyYW1zWydEYXRhJ10gPSBzdHJfcmVwbGFjZShhcnJheSgnIycsJ0AnKSwnJywkcGFyYW1zWydEYXRhJ10pOwoJJHhtbCA9IHVybGVuY29kZSgkcGFyYW1zWydEYXRhJ10pOwoJaWYgKCRwYXJhbXNbJ1R5cGUnXSA9PSAnYWNjb3VudCcpewoJCSR4bWwgPSAnc3RhdHVzZXMvdXNlcl90aW1lbGluZS5qc29uP3NjcmVlbl9uYW1lPScuJHhtbDsKCX0gZWxzZWlmICgkcGFyYW1zWydUeXBlJ10gPT0gJ3NlYXJjaCcpewoJCSR4bWwgPSAnc2VhcmNoL3R3ZWV0cy5qc29uP3E9Jy4keG1sOwoJfSBlbHNlaWYgKCRwYXJhbXNbJ1R5cGUnXSA9PSAnaGFzaHRhZycpewoJCSR4bWwgPSAnc2VhcmNoL3R3ZWV0cy5qc29uP3E9JTIzJy4keG1sOwoJfQkJCgkKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSWYgaXQncyBhbiB1cGRhdGUgb2YgYSBzb3VyY2UKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJaWYgKCRwYXJhbXNbJ2FkZCddID09ICJubyIpewkJCQoJCS8vIFVwZGF0ZSBzb3VyY2UKCQkkdmFycyA9IGFycmF5KCRwYXJhbXNbJ1RpdGxlJ10sJHBhcmFtc1snVHlwZSddLCRwYXJhbXNbJ0RhdGEnXSwkeG1sLGRhdGUoIlktbS1kIEg6aTpzIiksJHBhcmFtc1snSUQnXSk7CgkJJHF1ZXJ5U3RyaW5nID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzCgkJU0VUIAoJCQlUaXRsZQkJCT0JCT8sCgkJCVR5cGUJCQk9CQk/LAoJCQlEYXRhCQkJPQkJPywKCQkJWE1MCQkJCT0JCT8sCgkJCURhdGVNb2RpZmllZAk9CQk/CQkJCQkJCQkJCgkJV0hFUkUgSUQ9PwkJIjsKCQkkcXVlcnlSZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsKCQkJCQoJCS8vIElmIHRoZSBxdWVyeSB3YXMgc3VjY2VzZnVsCgkJaWYgKCRxdWVyeVJlc3VsdCl7CgkJCS8vIElmIHN1Ym1pdCB3YXMgaGl0LCByZWRpcmVjdC4gRG8gbm90aGluZyBpbiBjYXNlIG9mIGFwcGx5CgkJCWlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpewoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX3NvdXJjZV9lZGl0IiwgImFjdGl2ZV90YWIiID0+ICJzb3VyY2VzIikpOwoJCQl9CQkJCgkJfSAKCQkvLyBTaG93IGVycm9yIGluIGNhc2UgcXVlcnkgZGlkbid0IHdvcmsKCQllbHNlIHsKCQkJJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX3NvdXJjZV91cGRhdGUnKSk7CgkJfQkJCgl9CQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBJZiBpdCdzIGEgbmV3IHNvdXJjZQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgllbHNlaWYgKCRwYXJhbXNbJ2FkZCddID09ICJ5ZXMiKXsJCQoJCS8vIEdlbmVyYXRlIElECiAgICAJJHBhcmFtc1snSUQnXSA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXNfc2VxIik7CgkJCgkJLy8gSW5zZXJ0CgkJJHZhcnMgPSBhcnJheSgkcGFyYW1zWydJRCddLCRwYXJhbXNbJ1RpdGxlJ10sJHBhcmFtc1snVHlwZSddLCRwYXJhbXNbJ0RhdGEnXSwkeG1sLGRhdGUoIlktbS1kIEg6aTpzIiksZGF0ZSgiWS1tLWQgSDppOnMiKSk7CgkJJHF1ZXJ5U3RyaW5nID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXMKCQkJCQkJKElELFRpdGxlLFR5cGUsRGF0YSxYTUwsRGF0ZUNyZWF0ZWQsRGF0ZU1vZGlmaWVkKQoJCQkJCQlWQUxVRVMoPyw/LD8sPyw/LD8sPykiOwoJCSRxdWVyeVJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsJHZhcnMpOwkJCQoJCQoJCS8vIElmIHRoZSBxdWVyeSB3YXMgc3VjY2VzZnVsCgkJaWYgKCRxdWVyeVJlc3VsdCl7CQkJCgkJCS8vIElmIHN1Ym1pdCB3YXMgaGl0LCByZWRpcmVjdC4gRG8gbm90aGluZyBpbiBjYXNlIG9mIGFwcGx5CgkJCWlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpewoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX3NvdXJjZV9hZGQiLCAiYWN0aXZlX3RhYiIgPT4gInNvdXJjZXMiKSk7CgkJCX0KCQkJCgkJfSAKCQkvLyBTaG93IGVycm9yIGluIGNhc2UgcXVlcnkgZGlkbid0IHdvcmsKCQllbHNlIHsKCQkJJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX3NvdXJjZV9hZGQnKSk7CgkJfQoJCQoJfQoJCgkKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIEdFTkVSQVRFIEZPUk0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLy8gSWYgYW4gSUQgaXMgZ2l2ZW4sIGl0J3MgYW4gdXBkYXRlCglpZiAoIWVtcHR5KCRwYXJhbXNbJ0lEJ10pKXsJCQkKCQkkc291cmNlID0gJHRoaXMtPl9HZXRTb3VyY2UoJGlkLCAkcmV0dXJuaWQsICRwYXJhbXNbJ0lEJ10pOwkJCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGQiLCR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsImFkZCIsIm5vIikpOwoJfSBlbHNlIHsKCQkvLyBObyBJRCwgc28gbWFrZSBibGFuayBpbnB1dHMKCQkkc291cmNlID0gYXJyYXkoIlRpdGxlIiA9PiAiIiwiVHlwZSIgPT4gImFjY291bnQiLCJEYXRhIiA9PiAiIik7CgkJJHBhcmFtc1snSUQnXSA9ICIiOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigiYWRkIiwkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCJhZGQiLCJ5ZXMiKSk7Cgl9CgkKCS8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIHByZXBlbmQgYW55dGhpbmcgdG8gdGhlIGRhdGEJCglpZiAoJHNvdXJjZVsnVHlwZSddID09ICdhY2NvdW50Jyl7CgkJJHByZWZpeCA9ICdAJzsKCX0gZWxzZWlmICgkc291cmNlWydUeXBlJ10gPT0gJ2hhc2h0YWcnKXsKCQkkcHJlZml4ID0gJyMnOwoJfSBlbHNlIHsKCQkkcHJlZml4ID0gJyc7Cgl9CgkKCS8vIElucHV0cyBtYWtlbgoJaWYgKCFlbXB0eSgkc291cmNlKSl7CgkJZm9yZWFjaCAoJHNvdXJjZSBhcyAka2V5ID0+ICR2YWx1ZSl7CQkKCQkJaWYgKCFpc19hcnJheSgkdmFsdWUpKXsKCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigka2V5LidfdGV4dCcsICR0aGlzLT5MYW5nKCdpbnB1dF90ZXh0XycuJGtleSkpOwoJCQkJLy8gSWYgaXQncyB0aGUgdHlwZSBpbnB1dAoJCQkJaWYgKCRrZXkgPT0gIlR5cGUiKXsKCQkJCQkkdHlwZXMgPSBhcnJheSgkdGhpcy0+TGFuZygndHlwZXNfYWNjb3VudCcpID0+ICdhY2NvdW50JywkdGhpcy0+TGFuZygndHlwZXNfc2VhcmNoJykgPT4gJ3NlYXJjaCcsJHRoaXMtPkxhbmcoJ3R5cGVzX2hhc2h0YWcnKSA9PiAnaGFzaHRhZycpOwkJCQkJCSAKCQkJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJGtleS4nX2lucHV0JywkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsJGtleSwkdHlwZXMsJycsJHNvdXJjZVsnVHlwZSddKSk7CgkJCQl9IAoJCQkJZWxzZWlmICgka2V5ID09ICJEYXRhIil7CgkJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRrZXkuJ19pbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCRrZXksJHByZWZpeC4kdmFsdWUpKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigka2V5LidfaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwka2V5LCR2YWx1ZSkpOwoJCQkJfQkJCgkJCQkJCgkJCX0JCQoJCX0KCX0KCQoJCgkvLyBGb3JtdWxpZXIgdGFncyBhYW5tYWtlbgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX3N0YXJ0JywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRkX2VkaXRfc291cmNlJywkcmV0dXJuaWQsJ3Bvc3QnLCdtdWx0aXBhcnQvZm9ybS1kYXRhJywnJywnJyxhcnJheSgic2VudCIgPT4gInllcyIsICJJRCIgPT4gJHBhcmFtc1snSUQnXSwgInRhYm1lc3NhZ2UiID0+ICJ0YWJtZXNzYWdlX3NvdXJjZV9lZGl0IikpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybV9lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigndG9lcGFzc2VuJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2FwcGx5JywgbGFuZygnYXBwbHknKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsKCQoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9hZGRfZWRpdF9zb3VyY2UudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwovLyBHZXQgdGVtcGxhdGUKJHRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfdGVtcGxhdGUnKTsKLy8gSWYgYSB0ZW1wbGF0ZSBoYXMgYmVlbiBnaXZlbgppZiAoIWVtcHR5KCRwYXJhbXNbJ3RlbXBsYXRlJ10pKXsKCS8vIENoZWNrIGlmIGdpdmVuIHRlbXBsYXRlIGV4aXN0cwoJaWYgKCR0aGlzLT5HZXRUZW1wbGF0ZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKSl7CgkJJHRlbXBsYXRlID0gJHBhcmFtc1sndGVtcGxhdGUnXTsKCX0KfQoKLy8gTnVtYmVyIG9mIHR3ZWV0cwokbGltaXQgPSAyMDsKLy8gSWYgYSBsaW1pdCBoYXMgYmVlbiBnaXZlbgppZiAoIWVtcHR5KCRwYXJhbXNbJ2xpbWl0J10pKXsKCSRsaW1pdCA9ICRwYXJhbXNbJ2xpbWl0J107Cn0KCi8vIFNwZWNpZmljIHNvdXJjZSB0byBzaG93CiRzb3VyY2UgPSAiIjsKLy8gSWYgYSBzb3VyY2UgaGFzIGJlZW4gZ2l2ZW4KaWYgKCFlbXB0eSgkcGFyYW1zWydzb3VyY2UnXSkpewoJJHNvdXJjZSA9ICRwYXJhbXNbJ3NvdXJjZSddOwp9CgovLyBTcGVjaWZpYyBncm91cCB0byBzaG93CiRncm91cCA9ICIiOwppZiAoIWVtcHR5KCRwYXJhbXNbJ2dyb3VwJ10pKXsKCSRncm91cCA9ICRwYXJhbXNbJ2dyb3VwJ107CgkvLyBVbnNldCBzb3VyY2UgYWdhaW4sIHlvdSBjYW4gZWl0aGVyIHNob3cgYSBzb3VyY2Ugb3IgYSBncm91cAoJJHNvdXJjZSA9ICIiOwp9CgovLyBSZWZyZXNoIGRhdGEKaWYgKCEkdGhpcy0+R2V0UHJlZmVyZW5jZSgnRXZlcnlMb2FkJykpewoJJHRoaXMtPlJlZnJlc2hUd2VldHMoJGlkLCRyZXR1cm5pZCwkZ3JvdXAsJHNvdXJjZSwkbGltaXQpOwkKfQoKLy8gR2V0IHRoZSBkYXRhCiR0d2VldHMgPSAkdGhpcy0+R2V0VHdlZXRzKCRpZCwkcmV0dXJuaWQsJGdyb3VwLCRzb3VyY2UsJGxpbWl0KTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJHR3ZWV0cyk7CgovLyBTaG93IHRoZSB0ZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHRlbXBsYXRlKTsKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCgppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiR0aGlzLT5Mb2FkSlMoKTsKCmVjaG8gJzxkaXYgaWQ9ImJ3dHdpdHRlciI+JzsKCi8vIFRhYiBoZWFkZXJzICYgQWN0aXZlIHRhYgplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKCiRhY3RpdmVfdGFiID0gJyc7CmlmICghZW1wdHkoJHBhcmFtc1snYWN0aXZlX3RhYiddKSl7CgkkYWN0aXZlX3RhYiA9ICRwYXJhbXNbJ2FjdGl2ZV90YWInXTsKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBCV1R3aXR0ZXInKSApCnsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignbWVzc2FnZXMnLCR0aGlzLT5MYW5nKCd0YWJfbWVzc2FnZXMnKSwgKCdtZXNzYWdlcycgPT0gJGFjdGl2ZV90YWIpP3RydWU6ZmFsc2UpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd1c2VycycsJHRoaXMtPkxhbmcoJ3RhYl91c2VycycpLCAoJ3VzZXJzJyA9PSAkYWN0aXZlX3RhYik/dHJ1ZTpmYWxzZSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NvdXJjZXMnLCR0aGlzLT5MYW5nKCd0YWJfc291cmNlcycpLCAoJ3NvdXJjZXMnID09ICRhY3RpdmVfdGFiKT90cnVlOmZhbHNlKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZ3JvdXBzJywkdGhpcy0+TGFuZygndGFiX2dyb3VwcycpLCAoJ2dyb3VwcycgPT0gJGFjdGl2ZV90YWIpP3RydWU6ZmFsc2UpOwkKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV1R3aXR0ZXIgU2V0dGluZ3MnKSApCnsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignbW9kdWxlX3NldHRpbmdzJywkdGhpcy0+TGFuZygndGFiX3NldHRpbmdzJyksICgnbW9kdWxlX3NldHRpbmdzJyA9PSAkYWN0aXZlX3RhYik/dHJ1ZTpmYWxzZSk7Cn0KCmlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdDaGFuZ2UgQldUd2l0dGVyIFRlbXBsYXRlcycpICkKewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd0ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCd0YWJfdGVtcGxhdGVzJyksICgndGVtcGxhdGVzJyA9PSAkYWN0aXZlX3RhYik/dHJ1ZTpmYWxzZSk7Cn0KICAKZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKLy8gVGFiIGNvbnRlbnQKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXNlIEJXVHdpdHRlcicpICkKewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ21lc3NhZ2VzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fbWVzc2FnZXN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3VzZXJzJywgJHBhcmFtcyk7CglpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLicvYWRtaW5fdXNlcnN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NvdXJjZXMnLCAkcGFyYW1zKTsKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hZG1pbl9zb3VyY2VzdGFiLnBocCcpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgkKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdncm91cHMnLCAkcGFyYW1zKTsKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hZG1pbl9ncm91cHN0YWIucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV1R3aXR0ZXIgU2V0dGluZ3MnKSApCnsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdtb2R1bGVfc2V0dGluZ3MnLCAkcGFyYW1zKTsKCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9hZG1pbl9tb2R1bGVfc2V0dGluZ3MucGhwJyk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKfQoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV1R3aXR0ZXIgVGVtcGxhdGVzJykgKQp7CgllY2hvICR0aGlzLT5TdGFydFRhYigndGVtcGxhdGVzJywgJHBhcmFtcyk7CQoJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2FkbWluX3RlbXBsYXRlc3RhYi5waHAnKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwp9CiAgCgplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CgplY2hvICc8L2Rpdj4nOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV1R3aXR0ZXInKSkgZXhpdDsKCi8vIElmIHdlJ3JlIGRlbGV0aW5nIGEgc291cmNlCmlmICghZW1wdHkoJHBhcmFtc1snc291cmNlSUQnXSkpewoJLy8gRGVsZXRlIHRoZSBzb3VyY2UgLSBncm91cCBhc3NpZ25tZW50cwoJJHRoaXMtPl9EZWxldGVHcm91cEFzc2lnbm1lbnRzKCcnLCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJLy8gRGVsZXRlIHRoZSBzb3VyY2UKCSR0aGlzLT5fRGVsZXRlU291cmNlKCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJLy8gRGVsZXRlIHRoZSBtZXNzYWdlcyBmcm9tIHRoaXMgc291cmNlCgkkdGhpcy0+X0RlbGV0ZU1lc3NhZ2VzKCRwYXJhbXNbJ3NvdXJjZUlEJ10pOwoJLy8gQXNzaWduaW5nIHJlZGlyZWN0IHBhcmFtZXRlcnMJCgkkcmVkaXJlY3RfcGFyYW1zID0gYXJyYXkoImFjdGl2ZV90YWIiID0+ICdzb3VyY2VzJywndGFiX21lc3NhZ2UnID0+ICd0YWJtZXNzYWdlX3NvdXJjZV9kZWxldGUnKTsKfQovLyBJZiB3ZSdyZSBkZWxldGluZyBhIGdyb3VwCmVsc2VpZiAoIWVtcHR5KCRwYXJhbXNbJ2dyb3VwSUQnXSkpewoJLy8gRGVsZXRlIHRoZSBzb3VyY2UgLSBncm91cCBhc3NpZ25tZW50cwoJJHRoaXMtPl9EZWxldGVHcm91cEFzc2lnbm1lbnRzKCRwYXJhbXNbJ2dyb3VwSUQnXSwnJyk7CgkvLyBEZWxldGUgdGhlIGdyb3VwCgkkdGhpcy0+X0RlbGV0ZUdyb3VwKCRwYXJhbXNbJ2dyb3VwSUQnXSk7CgkvLyBBc3NpZ25pbmcgcmVkaXJlY3QgcGFyYW1ldGVycwoJJHJlZGlyZWN0X3BhcmFtcyA9IGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnZ3JvdXBzJywndGFiX21lc3NhZ2UnID0+ICd0YWJtZXNzYWdlX2dyb3VwX2RlbGV0ZScpOwp9Ci8vIElmIHdlJ3JlIGRlbGV0aW5nIGEgdGVtcGxhdGUKZWxzZWlmICghZW1wdHkoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddKSl7CglpZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV01hcHMgVGVtcGxhdGVzJykpIGV4aXQ7CgkvLyBEZWxldGUgdGhlIHRlbXBsYXRlCgkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddKTsKCS8vIEFzc2lnbmluZyByZWRpcmVjdCBwYXJhbWV0ZXJzCgkkcmVkaXJlY3RfcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICd0YWJtZXNzYWdlX3RlbXBsYXRlX2RlbGV0ZScsICdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJyk7Cn0KCiR0aGlzLT5SZWRpcmVjdCgkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLCRyZWRpcmVjdF9wYXJhbXMpOwkKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NoYW5nZSBCV1R3aXR0ZXIgVGVtcGxhdGVzJykpIGV4aXQ7CgovLyBGb3JtIHN1Ym1pdHRlZD8KaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSl7CgkkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwp9CgkKaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGVfbmFtZSddLCRwYXJhbXNbJ3RlbXBsYXRlX2NvbnRlbnQnXSk7CgkkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJz0+ICd0YWJtZXNzYWdlX3RlbXBsYXRlX2VkaXQnLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cn0KCgovLyBHZXQgZGVmYXVsdCB0ZW1wbGF0ZSBjb250ZW50cwokZGVmYXVsdF90ZW1wbGF0ZSA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgnRGVmYXVsdCcpOwoKLy8gQXNzaWducwokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnZWRpdHRlbXBsYXRlJywkcmV0dXJuaWQsJ3Bvc3QnLCcnLGZhbHNlLCAnJywgJHBhcmFtcykpOwokc21hcnR5LT5hc3NpZ24oJ25hbWUnLCR0aGlzLT5MYW5nKCdpbnB1dF90ZXh0X25hbWUnKSk7CiRzbWFydHktPmFzc2lnbignY29udGVudCcsJHRoaXMtPkxhbmcoJ2lucHV0X3RleHRfY29udGVudCcpKTsKJHNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZV9uYW1lJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ3RlbXBsYXRlX25hbWUnLCAkcGFyYW1zWyd0ZW1wbGF0ZV9uYW1lJ10sIDU1KSk7CiRzbWFydHktPmFzc2lnbigndGVtcGxhdGVfY29udGVudCcsJHRoaXMtPkNyZWF0ZVN5bnRheEFyZWEgKCRpZCwgJHRoaXMtPkdldFRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlX25hbWUnXSksICd0ZW1wbGF0ZV9jb250ZW50JykpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdjYW5jZWwnLCBsYW5nKCdjYW5jZWwnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5Bc3NpZ24oJ3ZhcnMnLG5sMmJyKCR0aGlzLT5MYW5nKCdoZWxwX3RlbXBsYXRlVmFycycpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2VkaXR0ZW1wbGF0ZS50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.login.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBCV1R3aXR0ZXInKSkgZXhpdDsKCmlmICghZW1wdHkoJHBhcmFtc1sndGFibWVzc2FnZSddKSl7CgkkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJHBhcmFtc1sndGFibWVzc2FnZSddKSk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydsb2dvdXQnXSkpewoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3ZhbGlkJywwKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJhY3RpdmVfdGFiIiA9PiAnbW9kdWxlX3NldHRpbmdzJywndGFiX21lc3NhZ2UnID0+ICd0YWJtZXNzYWdlX2xvZ2dlZG91dCcpKTsKCWV4aXQoKTsKfQoKaWYgKGlzc2V0KCRfUkVRVUVTVFsnb2F1dGhfdmVyaWZpZXInXSkpewoJLyogQ3JlYXRlIFR3aXR0ZXJvQXV0aCBvYmplY3Qgd2l0aCBhcHAga2V5L3NlY3JldCBhbmQgdG9rZW4ga2V5L3NlY3JldCBmcm9tIGRlZmF1bHQgcGhhc2UgKi8KCSR0aGlzLT5jb25uZWN0aW9uID0gbmV3IFR3aXR0ZXJPQXV0aCgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29uc3VtZXJfa2V5JywnJyksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9zZWNyZXQnLCcnKSwgJF9TRVNTSU9OWydvYXV0aF90b2tlbiddLCAkX1NFU1NJT05bJ29hdXRoX3Rva2VuX3NlY3JldCddKTsJCgkvKiBSZXF1ZXN0IGFjY2VzcyB0b2tlbnMgZnJvbSB0d2l0dGVyICovCgkkYWNjZXNzX3Rva2VuID0gJHRoaXMtPmNvbm5lY3Rpb24tPmdldEFjY2Vzc1Rva2VuKCRfUkVRVUVTVFsnb2F1dGhfdmVyaWZpZXInXSk7CQkKCS8qIFJlbW92ZSBubyBsb25nZXIgbmVlZGVkIHJlcXVlc3QgdG9rZW5zICovCgl1bnNldCgkX1NFU1NJT05bJ29hdXRoX3Rva2VuJ10pOwoJdW5zZXQoJF9TRVNTSU9OWydvYXV0aF90b2tlbl9zZWNyZXQnXSk7CQoJLyogSWYgSFRUUCByZXNwb25zZSBpcyAyMDAgY29udGludWUgb3RoZXJ3aXNlIHNlbmQgdG8gY29ubmVjdCBwYWdlIHRvIHJldHJ5ICovCglpZiAoJHRoaXMtPmNvbm5lY3Rpb24tPmh0dHBfY29kZSA9PSAyMDApIHsJCQoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF90b2tlbicsJGFjY2Vzc190b2tlblsnb2F1dGhfdG9rZW4nXSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3Rva2VuX3NlY3JldCcsJGFjY2Vzc190b2tlblsnb2F1dGhfdG9rZW5fc2VjcmV0J10pOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF92YWxpZCcsMSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3NjcmVlbm5hbWUnLCRhY2Nlc3NfdG9rZW5bJ3NjcmVlbl9uYW1lJ10pOwkJCgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoImFjdGl2ZV90YWIiID0+ICdtb2R1bGVfc2V0dGluZ3MnLCAndGFiX21lc3NhZ2UnID0+ICd0YWJtZXNzYWdlX2xvZ2dlZGluJykpOwkKCX0KfSBlbHNlIHsKCSR0aGlzLT5jb25uZWN0aW9uID0gbmV3IFR3aXR0ZXJPQXV0aCgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29uc3VtZXJfa2V5JywnJyksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9zZWNyZXQnLCcnKSk7CgkvKiBHZXQgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzLiAqLwoJJHJlcXVlc3RfdG9rZW4gPSAkdGhpcy0+Y29ubmVjdGlvbi0+Z2V0UmVxdWVzdFRva2VuKCR0aGlzLT5jdXJQYWdlVVJMKCkpOwoJCgkvKiBTYXZlIHRlbXBvcmFyeSBjcmVkZW50aWFscyB0byBzZXNzaW9uLiAqLwoJJF9TRVNTSU9OWydvYXV0aF90b2tlbiddID0gJHRva2VuID0gJHJlcXVlc3RfdG9rZW5bJ29hdXRoX3Rva2VuJ107CgkkX1NFU1NJT05bJ29hdXRoX3Rva2VuX3NlY3JldCddID0gJHJlcXVlc3RfdG9rZW5bJ29hdXRoX3Rva2VuX3NlY3JldCddOwoJCgkvKiBJZiBsYXN0IGNvbm5lY3Rpb24gZmFpbGVkIGRvbid0IGRpc3BsYXkgYXV0aG9yaXphdGlvbiBsaW5rLiAqLwoJc3dpdGNoICgkdGhpcy0+Y29ubmVjdGlvbi0+aHR0cF9jb2RlKSB7CgkgIGNhc2UgMjAwOgoJICAgIC8qIEJ1aWxkIGF1dGhvcml6ZSBVUkwgYW5kIHJlZGlyZWN0IHVzZXIgdG8gVHdpdHRlci4gKi8KCSAgICAkdXJsID0gJHRoaXMtPmNvbm5lY3Rpb24tPmdldEF1dGhvcml6ZVVSTCgkdG9rZW4pOwoJICAgIGhlYWRlcignTG9jYXRpb246ICcgLiAkdXJsKTsgCgkgICAgYnJlYWs7CgkgIGRlZmF1bHQ6CgkgICAgLyogU2hvdyBub3RpZmljYXRpb24gaWYgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovCgkgICAgZWNobyAnQ291bGQgbm90IGNvbm5lY3QgdG8gVHdpdHRlci4gUmVmcmVzaCB0aGUgcGFnZSBvciB0cnkgYWdhaW4gbGF0ZXIuJzsKCX0KfQoKCg==]]></data>
	</file>
	<file>
	  <filename>/action.setdefaulttemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CmlmICghJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQ2hhbmdlIEJXTWFwcyBUZW1wbGF0ZXMnKSkgZXhpdDsKCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3RlbXBsYXRlJywkcGFyYW1zWyd0ZW1wbGF0ZV9uYW1lJ10pOwoKJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWZhdWx0JywgJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/admin_groupstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLy8gU2V0IHNvbWUgdmFycwokZmllbGRzID0gYXJyYXkoIklEIiwiVGl0bGUiLCJEYXRlQ3JlYXRlZCIpOwokcHJlZml4ID0gJ3NvdXJjZWdyb3Vwc18nOwoKLy8gUGFnaW5nCiRwZXJfcGFnZSA9IDEwMDsKJHBhZ2UgPSAxOwppZiAoIWVtcHR5KCRwYXJhbXNbJ3BhZ2UnXSkpewoJJHBhZ2UgPSAkcGFyYW1zWydwYWdlJ107Cn0KCi8vIE9yZGVyYnkKJG9yZGVyYnkgPSAkZmllbGRzWzFdOwppZiAoIWVtcHR5KCRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddKSl7Cgkkb3JkZXJieSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddOwp9CiRvcmRlcnR5cGUgPSAiQVNDIjsKaWYgKCFlbXB0eSgkcGFyYW1zWyRwcmVmaXguJ29yZGVydHlwZSddKSl7Cgkkb3JkZXJ0eXBlID0gJHBhcmFtc1skcHJlZml4LidvcmRlcnR5cGUnXTsKfQovLyBPcHBvc2l0ZSBvcmRlcnR5cGVzCmlmICgkb3JkZXJ0eXBlID09ICJBU0MiKXsKCSRvcmRlcl9vcHBvc2l0ZSA9ICJERVNDIjsKfSBlbHNlIHsKCSRvcmRlcl9vcHBvc2l0ZSA9ICJBU0MiOwp9CgovLyBHZXQgbGlzdAokaXRlbXMgPSAkdGhpcy0+R2V0R3JvdXBzKCRpZCwgJHJldHVybmlkLCAkcGFnZSwgJHBlcl9wYWdlLCAkb3JkZXJieSwgJG9yZGVydHlwZSwgMCk7CgovLyBGaWVsZHMKJHRlbXBsYXRlX2ZpZWxkcyA9IGFycmF5KCk7Cglmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKXsJCQoJCSR0ZW1wbGF0ZV9maWVsZHNbXSA9IGFycmF5KCRmaWVsZCwkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdoZWFkZXJfJy4kZmllbGQpLCBhcnJheSgkcHJlZml4LidwYWdlJyA9PiAkcGFnZSwgJHByZWZpeC4nb3JkZXJieScgPT4gJGZpZWxkLCAkcHJlZml4LidvcmRlcnR5cGUnID0+ICRvcmRlcl9vcHBvc2l0ZSwgJ2FjdGl2ZV90YWInID0+ICdncm91cHMnKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJhZG1pbl9saW5rIicpKTsKCX0KCi8vIEFzc2lnbnMKJHNtYXJ0eS0+YXNzaWduKCdwYWdlJywgJHBhZ2UpOwokc21hcnR5LT5hc3NpZ24oJ29yZGVyYnknLCAkb3JkZXJieSk7CiRzbWFydHktPmFzc2lnbignb3JkZXJ0eXBlJywgJG9yZGVydHlwZSk7CiRzbWFydHktPmFzc2lnbignZmllbGRzJywgJGZpZWxkcyk7CiRzbWFydHktPmFzc2lnbignZmllbGRfaGVhZGVycycsICR0ZW1wbGF0ZV9maWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ25vZ3JvdXBzJywgJHRoaXMtPkxhbmcoJ25vZ3JvdXBzJykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkaXRlbXMpOwoKLy8gTGlua3MKJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX2VkaXRfZ3JvdXAnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdidXR0b25fYWRkZ3JvdXAnKSwnJywnJywnc3lzdGVtaWNvbicpLCAnJywgJycsIGZhbHNlLCBmYWxzZSwgJycpIC4nICcuICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9lZGl0X2dyb3VwJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYnV0dG9uX2FkZGdyb3VwJyksICcnLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpKTsKCi8vIFRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fZ3JvdXBzdGFiLnRwbCcpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/admin_messagestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLy8gU2V0IHNvbWUgdmFycwokZmllbGRzID0gYXJyYXkoIk1lc3NhZ2UiLCJVc2VybmFtZSIsIlNvdXJjZVRpdGxlIiwiRGF0ZSIpOwokcHJlZml4ID0gJ21lc3NhZ2VzXyc7CgovLyBQYWdpbmcKJHBlcl9wYWdlID0gMTAwOwokcGFnZSA9IDE7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidwYWdlJ10pKXsKCSRwYWdlID0gJHBhcmFtc1skcHJlZml4LidwYWdlJ107Cn0KCi8vIE9yZGVyYnkKJG9yZGVyYnkgPSAkZmllbGRzWzNdOwppZiAoIWVtcHR5KCRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddKSl7Cgkkb3JkZXJieSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddOwp9CiRvcmRlcnR5cGUgPSAiREVTQyI7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidvcmRlcnR5cGUnXSkpewoJJG9yZGVydHlwZSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJ0eXBlJ107Cn0KLy8gT3Bwb3NpdGUgb3JkZXJ0eXBlcwppZiAoJG9yZGVydHlwZSA9PSAiQVNDIil7Cgkkb3JkZXJfb3Bwb3NpdGUgPSAiREVTQyI7Cn0gZWxzZSB7Cgkkb3JkZXJfb3Bwb3NpdGUgPSAiQVNDIjsKfQovLyBTZWFyY2h0ZXJtCiRzZWFyY2ggPSAiIjsKaWYgKCFlbXB0eSgkX1BPU1RbJ3NlYXJjaCddKSl7Cgkkc2VhcmNoID0gJF9QT1NUWydzZWFyY2gnXTsKCSRwZXJfcGFnZSA9ICIiOwp9CgovLyBHZXQgbGlzdAokaXRlbXMgPSAkdGhpcy0+R2V0TWVzc2FnZXMoJGlkLCAkcmV0dXJuaWQsICRwYWdlLCAkcGVyX3BhZ2UsICRvcmRlcmJ5LCAkb3JkZXJ0eXBlLCAwLCAkc2VhcmNoKTsKLy8gV2Ugd29uJ3QgYmUgbWFraW5nIHBhZ2luZyBpZiB3ZSBhcmUgc2VhcmNoaW5nCiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnaW5nJywnJyk7CmlmIChlbXB0eSgkc2VhcmNoKSl7CgkkcGFnaW5nID0gIiI7CgkvLyBOdW1iZXIgb2YgdG90YWwgaXRlbXMKCSRudW1iZXIgPSBjb3VudCgkdGhpcy0+R2V0TWVzc2FnZXMoJGlkLCAkcmV0dXJuaWQsICRwYWdlLCAnJywgJG9yZGVyYnksICRvcmRlcnR5cGUsIDApKTsKCS8vIEdlbmVyYXRlIHBhZ2luZwoJLy8gSWYgdGhlcmUgYXJlIG1vcmUgaXRlbXMgdGhhbiB3ZSBjYW4gZml0IG9uIGEgcGFnZQoJaWYgKCRudW1iZXIvJHBlcl9wYWdlID4gMSl7CgkJJHBhZ2VzID0gY2VpbCgkbnVtYmVyLyRwZXJfcGFnZSk7CgkJJHBhZ2luZyA9IGFycmF5KCk7CgkJZm9yICgkaT0xOyRpPD0kcGFnZXM7JGkrKyl7CgkJCSRwYWdpbmdbJGldWydsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLCAkaSwgYXJyYXkoJHByZWZpeC4ncGFnZScgPT4gJGksICRwcmVmaXguJ29yZGVyYnknID0+ICRvcmRlcmJ5LCAkcHJlZml4LidvcmRlcnR5cGUnID0+ICRvcmRlcnR5cGUsICdhY3RpdmVfdGFiJyA9PiAnbWVzc2FnZXMnKSwgJycsIHRydWUsIGZhbHNlLCAnY2xhc3M9ImFkbWluX2xpbmsiJyk7CgkJCWlmICgkaSA9PSAkcGFnZSl7CgkJCQkkcGFnaW5nWyRpXVsnYWN0aXZlJ10gPSB0cnVlOwoJCQl9IGVsc2UgewoJCQkJJHBhZ2luZ1skaV1bJ2FjdGl2ZSddID0gZmFsc2U7CgkJCX0KCQl9Cgl9CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2luZycsJHBhZ2luZyk7Cn0KCi8vIEZpZWxkcwokdGVtcGxhdGVfZmllbGRzID0gYXJyYXkoKTsKZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCl7CQkKCSR0ZW1wbGF0ZV9maWVsZHNbXSA9IGFycmF5KCRmaWVsZCwkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdoZWFkZXJfJy4kZmllbGQpLCBhcnJheSgkcHJlZml4LidwYWdlJyA9PiAkcGFnZSwgJHByZWZpeC4nb3JkZXJieScgPT4gJGZpZWxkLCAkcHJlZml4LidvcmRlcnR5cGUnID0+ICRvcmRlcl9vcHBvc2l0ZSwgJ2FjdGl2ZV90YWInID0+ICdtZXNzYWdlcycpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9ImFkbWluX2xpbmsiJykpOwp9CgovLyBBc3NpZ25zCiRzbWFydHktPmFzc2lnbigncGFnZScsICRwYWdlKTsKJHNtYXJ0eS0+YXNzaWduKCdvcmRlcmJ5JywgJG9yZGVyYnkpOwokc21hcnR5LT5hc3NpZ24oJ29yZGVydHlwZScsICRvcmRlcnR5cGUpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkcycsICRmaWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkX2hlYWRlcnMnLCAkdGVtcGxhdGVfZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCdub21lc3NhZ2VzJywgJHRoaXMtPkxhbmcoJ25vbWVzc2FnZXMnKSk7CiRzbWFydHktPmFzc2lnbignaXRlbXMnLCRpdGVtcyk7CiRzbWFydHktPmFzc2lnbigncG9zdHVybCcsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwgJycsIGFycmF5KCRwcmVmaXguJ3BhZ2UnID0+IDEsICRwcmVmaXguJ29yZGVyYnknID0+ICRvcmRlcmJ5LCAkcHJlZml4LidvcmRlcnR5cGUnID0+ICRvcmRlcnR5cGUsICdhY3RpdmVfdGFiJyA9PiAnbWVzc2FnZXMnKSwgJycsIHRydWUsIGZhbHNlKSk7CiRzbWFydHktPmFzc2lnbignc2VhcmNodGV4dCcsJHRoaXMtPkxhbmcoJ3NlYXJjaHRleHQnKSk7CgovLyBUZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX21lc3NhZ2VzdGFiLnRwbCcpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/admin_module_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyBGb3JtIHN1Ym1pdHRlZD8KaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSAmJiAkcGFyYW1zWydhY3RpdmVfdGFiJ10gPT0gIm1vZHVsZV9zZXR0aW5ncyIpewogIAkkZXJyb3IgPSBGQUxTRTsKICAJICAJCiAgCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdSZWZyZXNoSW50ZXJ2YWwnLCAkcGFyYW1zWydSZWZyZXNoSW50ZXJ2YWwnXSk7CiAgCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9rZXknLCAkcGFyYW1zWydBcHBLZXknXSk7CiAgCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9zZWNyZXQnLCAkcGFyYW1zWydBcHBTZWNyZXQnXSk7CiAgCWlmIChlbXB0eSgkcGFyYW1zWydFdmVyeUxvYWQnXSkpewogIAkJJHBhcmFtc1snRXZlcnlMb2FkJ10gPSAwOwogIAl9CiAgCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdFdmVyeUxvYWQnLCAkcGFyYW1zWydFdmVyeUxvYWQnXSk7CiAgCQogIAkvLyBSZWRpcmVjdCB0byBwcmV2ZW50IGRvdWJsZSBwb3N0IGFuZCBhbGxvd3MgdXMgdG8gc2hvdyBhIG1lc3NhZ2UKICAJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZSc9PiAndGFibWVzc2FnZV9zZXR0aW5nc19jaGFuZ2VkJywgJ2FjdGl2ZV90YWInID0+ICdtb2R1bGVfc2V0dGluZ3MnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwogIH0KCi8vIExvb3Agc2V0dGluZ3MgdGhhdCB3ZSBhbGxvdyB0byBjaGFuZ2UKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9BcHBLZXknLCR0aGlzLT5MYW5nKCdzZXR0aW5nX0FwcEtleScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9BcHBLZXknLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdBcHBLZXknLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9rZXknLCcnKSw1MCwyNTUpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9BcHBLZXlfaGVscCcsJHRoaXMtPk1ha2VUb29sVGlwKCR0aGlzLT5MYW5nKCdoZWxwX0FwcEtleScpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX0FwcFNlY3JldCcsJHRoaXMtPkxhbmcoJ3NldHRpbmdfQXBwU2VjcmV0JykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X0FwcFNlY3JldCcsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ0FwcFNlY3JldCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbnN1bWVyX3NlY3JldCcsJycpLDUwLDI1NSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X0FwcFNlY3JldF9oZWxwJywkdGhpcy0+TWFrZVRvb2xUaXAoJHRoaXMtPkxhbmcoJ2hlbHBfQXBwU2VjcmV0JykpKTsKCgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX1JlZnJlc2hJbnRlcnZhbCcsJHRoaXMtPkxhbmcoJ3NldHRpbmdfUmVmcmVzaEludGVydmFsJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X1JlZnJlc2hJbnRlcnZhbCcsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ1JlZnJlc2hJbnRlcnZhbCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ1JlZnJlc2hJbnRlcnZhbCcsJycpLDUwLDI1NSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X1JlZnJlc2hJbnRlcnZhbF9oZWxwJywkdGhpcy0+TWFrZVRvb2xUaXAoJHRoaXMtPkxhbmcoJ2hlbHBfUmVmcmVzaEludGVydmFsJykpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfRXZlcnlMb2FkJywkdGhpcy0+TGFuZygnc2V0dGluZ19FdmVyeUxvYWQnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfRXZlcnlMb2FkJywkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ0V2ZXJ5TG9hZCcsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnRXZlcnlMb2FkJywnJykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9FdmVyeUxvYWRfaGVscCcsJHRoaXMtPk1ha2VUb29sVGlwKCR0aGlzLT5MYW5nKCdoZWxwX0V2ZXJ5TG9hZCcpKSk7CgoKLy8gVHdpdHRlciBsb2dpbiBidXR0b24KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9TaWduSW4nLCR0aGlzLT5MYW5nKCdzZXR0aW5nX1R3aXR0ZXJBY2NvdW50JykpOwppZiAoISR0aGlzLT5HZXRQcmVmZXJlbmNlKCdvYXV0aF92YWxpZCcsJycpKXsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigndHdpdHRlcmxvZ2luJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdsb2dpbicsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ3NldHRpbmdfU2lnbkluJyksJycsJycsJycsJycsJ2NsYXNzPSJzaWduaW4iJykpOwp9IGVsc2UgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0d2l0dGVybG9naW4nLCc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPkxhbmcoJ3NldHRpbmdfTG9nZ2VkaW4nKS4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnb2F1dGhfc2NyZWVubmFtZScsJycpLic8L3A+Jy4kdGhpcy0+Q3JlYXRlTGluaygkaWQsICdsb2dpbicsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ3NldHRpbmdfUmV2b2tlJyksYXJyYXkoJ2xvZ291dCcgPT4gdHJ1ZSksJycsJycsJycsJ2NsYXNzPSJzaWdub3V0IicpKTsKfQoKCgovLyBGb3JtIHN0YXJ0L2VuZAokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCdwb3N0JywnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIGZhbHNlLCAnJywgYXJyYXkoJ2FjdGl2ZV90YWInID0+ICdtb2R1bGVfc2V0dGluZ3MnKSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsKCQovLyBUZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3NldHRpbmdzdGFiLnRwbCcpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/admin_sourcestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLy8gU2V0IHNvbWUgdmFycwokZmllbGRzID0gYXJyYXkoIklEIiwiVGl0bGUiLCJUeXBlIiwiRGF0ZUNyZWF0ZWQiKTsKJHByZWZpeCA9ICdzb3VyY2VzXyc7CgovLyBQYWdpbmcKJHBlcl9wYWdlID0gMTAwOwokcGFnZSA9IDE7CmlmICghZW1wdHkoJHBhcmFtc1sncGFnZSddKSl7CgkkcGFnZSA9ICRwYXJhbXNbJ3BhZ2UnXTsKfQoKLy8gT3JkZXJieQokb3JkZXJieSA9ICRmaWVsZHNbMV07CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidvcmRlcmJ5J10pKXsKCSRvcmRlcmJ5ID0gJHBhcmFtc1skcHJlZml4LidvcmRlcmJ5J107Cn0KJG9yZGVydHlwZSA9ICJBU0MiOwppZiAoIWVtcHR5KCRwYXJhbXNbJHByZWZpeC4nb3JkZXJ0eXBlJ10pKXsKCSRvcmRlcnR5cGUgPSAkcGFyYW1zWyRwcmVmaXguJ29yZGVydHlwZSddOwp9Ci8vIE9wcG9zaXRlIG9yZGVydHlwZXMKaWYgKCRvcmRlcnR5cGUgPT0gIkFTQyIpewoJJG9yZGVyX29wcG9zaXRlID0gIkRFU0MiOwp9IGVsc2UgewoJJG9yZGVyX29wcG9zaXRlID0gIkFTQyI7Cn0KCi8vIEdldCBsaXN0CiRpdGVtcyA9ICR0aGlzLT5HZXRTb3VyY2VzKCRpZCwgJHJldHVybmlkLCAkcGFnZSwgJHBlcl9wYWdlLCAkb3JkZXJieSwgJG9yZGVydHlwZSwgMCk7CgovLyBGaWVsZHMKJHRlbXBsYXRlX2ZpZWxkcyA9IGFycmF5KCk7Cglmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKXsJCQoJCSR0ZW1wbGF0ZV9maWVsZHNbXSA9IGFycmF5KCRmaWVsZCwkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdoZWFkZXJfJy4kZmllbGQpLCBhcnJheSgkcHJlZml4LidwYWdlJyA9PiAkcGFnZSwgJHByZWZpeC4nb3JkZXJieScgPT4gJGZpZWxkLCAkcHJlZml4LidvcmRlcnR5cGUnID0+ICRvcmRlcl9vcHBvc2l0ZSwgJ2FjdGl2ZV90YWInID0+ICdzb3VyY2VzJyksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0iYWRtaW5fbGluayInKSk7Cgl9CgovLyBBc3NpZ25zCiRzbWFydHktPmFzc2lnbigncGFnZScsICRwYWdlKTsKJHNtYXJ0eS0+YXNzaWduKCdvcmRlcmJ5JywgJG9yZGVyYnkpOwokc21hcnR5LT5hc3NpZ24oJ29yZGVydHlwZScsICRvcmRlcnR5cGUpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkcycsICRmaWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkX2hlYWRlcnMnLCAkdGVtcGxhdGVfZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCdub3NvdXJjZXMnLCAkdGhpcy0+TGFuZygnbm9zb3VyY2VzJykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkaXRlbXMpOwoKLy8gTGlua3MKJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX2VkaXRfc291cmNlJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYnV0dG9uX2FkZHNvdXJjZScpLCcnLCcnLCdzeXN0ZW1pY29uJyksICcnLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkX2VkaXRfc291cmNlJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYnV0dG9uX2FkZHNvdXJjZScpLCAnJywgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CgovLyBUZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3NvdXJjZXN0YWIudHBsJyk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/admin_templatestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLy8gR2V0IGxpc3QKJHJlc3VsdCA9ICR0aGlzLT5HZXRUZW1wbGF0ZUxpc3QoKTsKCi8vIExvb3AgdGhlbSB0byBhZGQgbGlua3MgLyBvcHRpb25zIC8gZXRjCiRpdGVtcyA9IGFycmF5KCk7Cgpmb3JlYWNoKCRyZXN1bHQgYXMgJGl0ZW0pewkKCS8vIEVkaXQvRGVsZXRlCglpZiAoJGl0ZW1bJ2RlZmF1bHQnXSl7CgkJJGl0ZW1bJ2RlbGV0ZWxpbmsnXSA9ICcnOwoJfWVsc2UgewoJCSRpdGVtWydkZWxldGVsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGVtcGxhdGVfbmFtZSc9PiRpdGVtWyduYW1lJ10pLCAkdGhpcy0+TGFuZygnZGVsZXRldGVtcGxhdGVjb25maXJtJykpOwoJfQoJCgkkaXRlbVsnZWRpdGxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3RlbXBsYXRlX25hbWUnPT4kaXRlbVsnbmFtZSddKSk7CgkKCQoJaWYgKCRpdGVtWydkZWZhdWx0J10pewoJCSRpdGVtWydkZWZhdWx0J10gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJywnZGVmYXVsdCcsJycsJycsJ3N5c3RlbWljb24nKTsKCX1lbHNlIHsKCQkkaXRlbVsnZGVmYXVsdCddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnc2V0ZGVmYXVsdHRlbXBsYXRlJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicsJ2RlZmF1bHQnLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCd0ZW1wbGF0ZV9uYW1lJz0+JGl0ZW1bJ25hbWUnXSksICcnKTsKCX0KCQoJLy8gS2VlcCB0aGlzIGFzIHRoZSBsYXN0IGl0ZW0gc2luY2UgaXQgb3ZlcnJpZGVzIHRoZSBvcmdpbmFsICJuYW1lIgoJJGl0ZW1bJ25hbWUnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJGl0ZW1bJ25hbWUnXSwgYXJyYXkoJ3RlbXBsYXRlX25hbWUnPT4kaXRlbVsnbmFtZSddKSk7CgkKCSRpdGVtc1tdID0gJGl0ZW07Cn0KCi8vIEZpZWxkcwokdGVtcGxhdGVfZmllbGRzID0gYXJyYXkoKTsKJHRlbXBsYXRlX2ZpZWxkc1tdID0gJHRoaXMtPkxhbmcoImhlYWRlcl9UaXRsZSIpOwokdGVtcGxhdGVfZmllbGRzW10gPSAkdGhpcy0+TGFuZygiaGVhZGVyX0RlZmF1bHQiKTsKCi8vIEFzc2lnbnMKJHNtYXJ0eS0+YXNzaWduKCdwYWdlJywgJHBhZ2UpOwokc21hcnR5LT5hc3NpZ24oJ29yZGVyYnknLCAkb3JkZXJieSk7CiRzbWFydHktPmFzc2lnbignb3JkZXJ0eXBlJywgJG9yZGVydHlwZSk7CiRzbWFydHktPmFzc2lnbignZmllbGRfaGVhZGVycycsICR0ZW1wbGF0ZV9maWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJGl0ZW1zKTsKCi8vIExpbmtzCiRzbWFydHktPmFzc2lnbignYWRkbGluaycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZHRlbXBsYXRlJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYnV0dG9uX2FkZHRlbXBsYXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgJycsICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2J1dHRvbl9hZGR0ZW1wbGF0ZScpLCAnJywgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CgovLyBUZW1wbGF0ZQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3RlbXBsYXRlc3RhYi50cGwnKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/admin_userstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLy8gU2V0IHNvbWUgdmFycwokZmllbGRzID0gYXJyYXkoIlVzZXJuYW1lIiwiTGFzdFVwZGF0ZSIpOwokcHJlZml4ID0gJ3VzZXJzXyc7CgovLyBQYWdpbmcKJHBlcl9wYWdlID0gMTAwOwokcGFnZSA9IDE7CmlmICghZW1wdHkoJHBhcmFtc1skcHJlZml4LidwYWdlJ10pKXsKCSRwYWdlID0gJHBhcmFtc1skcHJlZml4LidwYWdlJ107Cn0KCi8vIE9yZGVyYnkKJG9yZGVyYnkgPSAkZmllbGRzWzBdOwppZiAoIWVtcHR5KCRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddKSl7Cgkkb3JkZXJieSA9ICRwYXJhbXNbJHByZWZpeC4nb3JkZXJieSddOwp9CiRvcmRlcnR5cGUgPSAiQVNDIjsKaWYgKCFlbXB0eSgkcGFyYW1zWyRwcmVmaXguJ29yZGVydHlwZSddKSl7Cgkkb3JkZXJ0eXBlID0gJHBhcmFtc1skcHJlZml4LidvcmRlcnR5cGUnXTsKfQovLyBPcHBvc2l0ZSBvcmRlcnR5cGVzCmlmICgkb3JkZXJ0eXBlID09ICJBU0MiKXsKCSRvcmRlcl9vcHBvc2l0ZSA9ICJERVNDIjsKfSBlbHNlIHsKCSRvcmRlcl9vcHBvc2l0ZSA9ICJBU0MiOwp9Ci8vIFNlYXJjaHRlcm0KJHNlYXJjaCA9ICIiOwppZiAoIWVtcHR5KCRfUE9TVFsnc2VhcmNoJ10pKXsKCSRzZWFyY2ggPSAkX1BPU1RbJ3NlYXJjaCddOwoJJHBlcl9wYWdlID0gIiI7Cn0KCi8vIEdldCBsaXN0CiRpdGVtcyA9ICR0aGlzLT5HZXRVc2VycygkaWQsICRyZXR1cm5pZCwgJHBhZ2UsICRwZXJfcGFnZSwgJG9yZGVyYnksICRvcmRlcnR5cGUsIDAsICRzZWFyY2gpOwoKLy8gV2Ugd29uJ3QgYmUgbWFraW5nIHBhZ2luZyBpZiB3ZSBhcmUgc2VhcmNoaW5nCiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnaW5nJywnJyk7CmlmIChlbXB0eSgkc2VhcmNoKSl7CgkkcGFnaW5nID0gIiI7CgkvLyBOdW1iZXIgb2YgdG90YWwgaXRlbXMKCSRudW1iZXIgPSBjb3VudCgkdGhpcy0+R2V0VXNlcnMoJGlkLCAkcmV0dXJuaWQsICRwYWdlLCAiIiwgJG9yZGVyYnksICRvcmRlcnR5cGUsIDApKTsKCS8vIEdlbmVyYXRlIHBhZ2luZwoJLy8gSWYgdGhlcmUgYXJlIG1vcmUgaXRlbXMgdGhhbiB3ZSBjYW4gZml0IG9uIGEgcGFnZQoJaWYgKCRudW1iZXIvJHBlcl9wYWdlID4gMSl7CgkJJHBhZ2VzID0gY2VpbCgkbnVtYmVyLyRwZXJfcGFnZSk7CgkJJHBhZ2luZyA9IGFycmF5KCk7CgkJZm9yICgkaT0xOyRpPD0kcGFnZXM7JGkrKyl7CgkJCSRwYWdpbmdbJGldWydsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLCAkaSwgYXJyYXkoJHByZWZpeC4ncGFnZScgPT4gJGksICRwcmVmaXguJ29yZGVyYnknID0+ICRvcmRlcmJ5LCAkcHJlZml4LidvcmRlcnR5cGUnID0+ICRvcmRlcnR5cGUsICdhY3RpdmVfdGFiJyA9PiAndXNlcnMnKSwgJycsIHRydWUsIGZhbHNlLCAnY2xhc3M9ImFkbWluX2xpbmsiJyk7CgkJCWlmICgkaSA9PSAkcGFnZSl7CgkJCQkkcGFnaW5nWyRpXVsnYWN0aXZlJ10gPSB0cnVlOwoJCQl9IGVsc2UgewoJCQkJJHBhZ2luZ1skaV1bJ2FjdGl2ZSddID0gZmFsc2U7CgkJCX0KCQl9Cgl9CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhZ2luZycsJHBhZ2luZyk7Cn0KCgovLyBGaWVsZHMKJHRlbXBsYXRlX2ZpZWxkcyA9IGFycmF5KCk7Cglmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKXsJCQoJCSR0ZW1wbGF0ZV9maWVsZHNbXSA9IGFycmF5KCRmaWVsZCwkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdoZWFkZXJfJy4kZmllbGQpLCBhcnJheSgkcHJlZml4LidwYWdlJyA9PiAkcGFnZSwgJHByZWZpeC4nb3JkZXJieScgPT4gJGZpZWxkLCAkcHJlZml4LidvcmRlcnR5cGUnID0+ICRvcmRlcl9vcHBvc2l0ZSwgJ2FjdGl2ZV90YWInID0+ICd1c2VycycpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9ImFkbWluX2xpbmsiJykpOwoJfQoKLy8gQXNzaWducwokc21hcnR5LT5hc3NpZ24oJ3BhZ2UnLCAkcGFnZSk7CiRzbWFydHktPmFzc2lnbignb3JkZXJieScsICRvcmRlcmJ5KTsKJHNtYXJ0eS0+YXNzaWduKCdvcmRlcnR5cGUnLCAkb3JkZXJ0eXBlKTsKJHNtYXJ0eS0+YXNzaWduKCdmaWVsZHMnLCAkZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCdmaWVsZF9oZWFkZXJzJywgJHRlbXBsYXRlX2ZpZWxkcyk7CiRzbWFydHktPmFzc2lnbignbm91c2VycycsICR0aGlzLT5MYW5nKCdub3VzZXJzJykpOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkaXRlbXMpOwokc21hcnR5LT5hc3NpZ24oJ3Bvc3R1cmwnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsICcnLCBhcnJheSgkcHJlZml4LidwYWdlJyA9PiAxLCAkcHJlZml4LidvcmRlcmJ5JyA9PiAkb3JkZXJieSwgJHByZWZpeC4nb3JkZXJ0eXBlJyA9PiAkb3JkZXJ0eXBlLCAnYWN0aXZlX3RhYicgPT4gJ3VzZXJzJyksICcnLCB0cnVlLCBmYWxzZSkpOwokc21hcnR5LT5hc3NpZ24oJ3NlYXJjaHRleHQnLCR0aGlzLT5MYW5nKCdzZWFyY2h0ZXh0JykpOwoKLy8gVGVtcGxhdGUKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl91c2Vyc3RhYi50cGwnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/BWTwitter.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIEJXVHdpdHRlciBleHRlbmRzIENNU01vZHVsZSB7CgkKCXZhciAkdXNlcnMgPSBhcnJheSgpOwoJdmFyICRjb25uZWN0aW9uOwoJCglmdW5jdGlvbiBfX2NvbnN0cnVjdCgpewkKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CQoJCS8vIEJ1aWxkIFR3aXR0ZXJPQXV0aCBvYmplY3Qgd2l0aCBjbGllbnQgY3JlZGVudGlhbHMuIAoJCXJlcXVpcmVfb25jZSgnbGliL3R3aXR0ZXJvYXV0aC5waHAnKTsKCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ0V2ZXJ5TG9hZCcpKXsKCQkJJHRoaXMtPlJlZnJlc2hUd2VldHMoKTsKCQl9CQkJCQoJfQkKCQoJZnVuY3Rpb24gR2V0TmFtZSgpIHsKCQlyZXR1cm4gJ0JXVHdpdHRlcic7Cgl9CgkKCWZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsKCQlyZXR1cm4gJHRoaXMtPkxhbmcgKCAnZnJpZW5kbHluYW1lJyApOwoJfQoJCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsKCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJZnVuY3Rpb24gSGFzQWRtaW4oKSB7CgkJcmV0dXJuIHRydWU7Cgl9CgkKCWZ1bmN0aW9uIEdldFZlcnNpb24oKSB7CgkJcmV0dXJuICcyLjAuMic7Cgl9CgkKCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgewoJCXJldHVybiAnMS41LjQnOwoJfQoJCglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgewoJCXJldHVybiAkdGhpcy0+TGFuZyAoICdkZXNjcmlwdGlvbicgKTsKCX0KCQoJZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgewoJCXJldHVybiAnY29udGVudCc7Cgl9CgkKCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsKCQlyZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiAoICdVc2UgQldUd2l0dGVyJyApIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCAnQ2hhbmdlIEJXVHdpdHRlciBTZXR0aW5ncycgKSB8fCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICggJ0NoYW5nZSBCV1R3aXR0ZXIgVGVtcGxhdGVzJyApOwoJfQoJCglmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSB7CgkJcmV0dXJuICR0aGlzLT5MYW5nICggJ3Bvc3RpbnN0YWxsJyApOwoJfQoJCglmdW5jdGlvbiBHZXRIZWxwKCkgewoJCXJldHVybiAkdGhpcy0+TGFuZyAoICdoZWxwJyApOwoJfQoJCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7CgkJcmV0dXJuICdCdWlsZG5ldCBXZWJzZXJ2aWNlcyc7Cgl9CgkKCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgewoJCXJldHVybiAnc3VwcG9ydEBidWlsZG5ldC5ubCc7Cgl9CgkKCWZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCAoKSB7CgkJJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7Cgl9CgkKCWZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbiAoKSB7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZ3JvdXAnLCcnLCR0aGlzLT5MYW5nKCdwYXJhbWV0ZXJfZ3JvdXAnKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignc291cmNlJywnJywkdGhpcy0+TGFuZygncGFyYW1ldGVyX3NvdXJjZScpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdsaW1pdCcsJzIwJywkdGhpcy0+TGFuZygncGFyYW1ldGVyX2xpbWl0JykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3RlbXBsYXRlJywnRGVmYXVsdCcsJHRoaXMtPkxhbmcoJ3BhcmFtZXRlcl90ZW1wbGF0ZScpKTsKCX0KCQoJZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpewoJCSR0aGlzLT5Jbml0aWFsaXplRnJvbnRlbmQoKTsKCQkkdGhpcy0+SW5pdGlhbGl6ZUFkbWluKCk7CQkKCX0KCQoJZnVuY3Rpb24gR2V0Tm90aWZpY2F0aW9uT3V0cHV0KCRwcmlvcml0eSA9IDIpewkKCQkKCQkkb3V0cHV0ID0gYXJyYXkoKTsKCQkvLyBJZiBhIFR3aXR0ZXIgYWNjb3VudCB3YXMgbm90IGF1dGhlbnRpY2F0ZWQsIHNob3cgbWVzc2FnZSBiZWNhdXNlIHdlIGNhbiBub3QgZmV0Y2ggdHdlZXRzCgkJaWYgKCEkdGhpcy0+R2V0UHJlZmVyZW5jZSgnb2F1dGhfdmFsaWQnLCcnKSl7CgkJCSRvYmogPSBuZXcgU3RkQ2xhc3M7CgkJCSRvYmotPnByaW9yaXR5ID0gMjsJCQkKCQkJJG9iai0+aHRtbCA9ICR0aGlzLT5MYW5nKCdtZXNzYWdlX25vdF9hdXRoZW50aWNhdGVkJyk7CgkJCSRvdXRwdXRbXSA9ICRvYmo7CgkJCSR0aGlzLT5HZXREYXNoYm9hcmRPdXRwdXQoJG9iai0+aHRtbCk7CgkJCXJldHVybiAkb3V0cHV0OwoJCX0KCQlyZXR1cm4gJyc7Cgl9CgkKCQoJLy8gTW9kdWxlIGZ1bmN0aW9ucwoJLy8gR2V0TWVzc2FnZXM6IEdldHMgYWxsIHR3ZWV0cwoJLy8gQHBhZ2UJCTogcGFnZSBudW1iZXIKCS8vIEBwZXJfcGFnZQk6IE51bWJlciBvZiB0d2VldHMgcGVyIHBhZ2UKCS8vIEBvcmRlcmJ5CQk6IE9yZGVyIGxpc3QgYnkgdGhpcyBwYXJhbWV0ZXIKCS8vIEBvcmRlcnR5cGUJOiBBU0Mgb3IgREVTQwoJLy8gQGFjdGl2ZQkJOiBPbmx5IGFjdGl2ZSB0d2VldHMKCS8vIEBzZWFyY2gJCTogc2VhcmNodGVybQoJZnVuY3Rpb24gR2V0TWVzc2FnZXMoJGlkLCAkcmV0dXJuaWQsICRwYWdlID0gMSwgJHBlcl9wYWdlID0gMTAwLCAkb3JkZXJieSA9ICJEYXRlIiwgJG9yZGVydHlwZSA9ICJBU0MiLCAkYWN0aXZlID0gdHJ1ZSwgJHNlYXJjaCA9ICIiKSB7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJZ2xvYmFsICRnQ21zOwoJCQkJCgkJLy8gUXVlcnkKCQkkdmFycyA9IGFycmF5KCk7CgkJJHF1ZXJ5U3RyaW5nID0gJwoJCQlTRUxFQ1QgKiwgbWVzLklEIGFzIG1lc3NhZ2VJRCwgbWVzLkFjdGl2ZSBhcyBtZXNzYWdlQWN0aXZlLCBzcmMuVGl0bGUgYXMgU291cmNlVGl0bGUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2J3dHdpdHRlcl9tZXNzYWdlcyBtZXMKCQkJTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfYnd0d2l0dGVyX3VzZXJzIHVzIE9OIHVzLklEID0gbWVzLlVzZXIKCQkJTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXMgc3JjIE9OIHNyYy5JRCA9IG1lcy5zb3VyY2VJRAoJCSAnOwoJCS8vIEZpbHRlciBvbiBhY3RpdmUgc3RhdGU/CgkJaWYgKCRhY3RpdmUpewoJCQkkcXVlcnlTdHJpbmcgLj0gJwoJCQkJV0hFUkUgbWVzLkFjdGl2ZT0/CgkJCQlBTkQgdXMuQWN0aXZlPT8KCQkJJzsKCQkJJHZhcnNbXSA9IDE7CgkJCSR2YXJzW10gPSAxOwoJCX0KCQkvLyBTZWFyY2gKCQlpZiAoIWVtcHR5KCRzZWFyY2gpKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICcKCQkJCVdIRVJFIChtZXMuTWVzc2FnZSBMSUtFID8gT1IgdXMuVXNlcm5hbWUgTElLRSA/IE9SIHNyYy5UaXRsZSBMSUtFID8pCgkJCSc7CgkJCSR2YXJzW10gPSAnJScuJHNlYXJjaC4nJSc7CgkJCSR2YXJzW10gPSAnJScuJHNlYXJjaC4nJSc7CgkJCSR2YXJzW10gPSAnJScuJHNlYXJjaC4nJSc7CgkJfQkJCgkJLy8gT3JkZXIgYnkKCQlpZiAoIWVtcHR5KCRvcmRlcmJ5KSAmJiAhZW1wdHkoJG9yZGVydHlwZSkpewoJCQkkcXVlcnlTdHJpbmcgLj0gIgoJCQlPUkRFUiBCWSB7JG9yZGVyYnl9IHskb3JkZXJ0eXBlfSI7CgkJfQkJCgkJLy8gTGltaXQKCQlpZiAoIWVtcHR5KCRwYWdlKSAmJiAhZW1wdHkoJHBlcl9wYWdlKSl7CQkJCgkJCSRvZmZzZXQgPSAoJHBhZ2UtMSkqJHBlcl9wYWdlOwoJCQkkcXVlcnlTdHJpbmcgLj0gIiBMSU1JVCB7JHBlcl9wYWdlfSBPRkZTRVQgeyRvZmZzZXR9IjsKCQkJCgkJfQkJCQkKCQkvLyBFeGVjdXRlCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgJHZhcnMpOwkJCQkKCQkvLyBJZiB0aGVyZSB3ZXJlIG5vIGVycm9ycyBleGVjdXRpbmcKCQlpZiAoJGRicmVzdWx0KXsKCQkJJHJldHVybiA9IGFycmF5KCk7CgkJCS8vIExvb3AgdGhyb3VnaCByZXN1bHRzLCBhZGQgdGhlbSB0byBhcnJheQoJCQl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7CQkJCQoJCQkJLy8gQWN0aXZlYnV0dG9uCgkJCQlpZiAoJHJvd1snbWVzc2FnZUFjdGl2ZSddKXsKCQkJCQkkcm93WydhY3RpdmVsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhY3RpdmF0ZScsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS90cnVlLmdpZicsJHRoaXMtPkxhbmcoJ2RlYWN0aXZhdGUnKS4nICcuJHRoaXMtPkxhbmcoJ2hlYWRlcl9NZXNzYWdlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ21lc3NhZ2VJRCc9PiRyb3dbJ21lc3NhZ2VJRCddKSk7CgkJCQl9ZWxzZSB7CgkJCQkJJHJvd1snYWN0aXZlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWN0aXZhdGUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmJywkdGhpcy0+TGFuZygnYWN0aXZhdGUnKS4nICcuJHRoaXMtPkxhbmcoJ2hlYWRlcl9NZXNzYWdlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ21lc3NhZ2VJRCc9PiRyb3dbJ21lc3NhZ2VJRCddKSk7CgkJCQl9CgkJCQkvLyBEYXRlZm9ybWF0CgkJCQkkcm93WydEYXRlJ10gPSBkYXRlKCR0aGlzLT5MYW5nKCdkYXRlZm9ybWF0Jyksc3RydG90aW1lKCRyb3dbJ0RhdGUnXSkpOwoJCQkJJHJldHVybltdID0gJHJvdzsKCQkJfQoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgkJcmV0dXJuIGZhbHNlOwkJCgl9CgkKCS8vIF9HZXRNZXNzYWdlc0Zyb21Tb3VyY2UJOiByZXR1cm5zIGFsbCBtZXNzYWdlcyBmcm9tIGEgc291cmNlCgkvLyBAc291cmNlSUQJCQkJOiBJRCBvZiB0aGUgc291cmNlCgkvLyBAbGltaXQJCQkJCTogTnVtYmVyIG9mIG1lc3NhZ2VzCglmdW5jdGlvbiBfR2V0TWVzc2FnZXNGcm9tU291cmNlKCRzb3VyY2VJRCA9ICIiLCRsaW1pdCA9ICIiKXsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQkkcXVlcnlTdHJpbmcgPSAnCgkJCVNFTEVDVCBNZXNzYWdlLCB0d2VldElEIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9id3R3aXR0ZXJfbWVzc2FnZXMgV0hFUkUgc291cmNlSUQgPSA/IE9SREVSIEJZIERhdGUgREVTQyBMSU1JVCAnLiRsaW1pdDsKCQkvLyBFeGVjdXRlCQkKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCBhcnJheSgkc291cmNlSUQpKTsKCQkvLyBMb29wIHRocm91Z2ggcmVzdWx0cywgYWRkIHRoZW0gdG8gYXJyYXkKCQl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7CgkJCSRyZXN1bHRbJHJvd1sndHdlZXRJRCddXSA9ICRyb3dbJ01lc3NhZ2UnXTsKCQl9CQkKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCQoJLy8gX0dldE1lc3NhZ2UJOiByZXR1cm5zIG9uZSBtZXNzYWdlCglmdW5jdGlvbiBfR2V0TWVzc2FnZSgkaWQsJHJldHVybmlkLCAkbWVzc2FnZUlEID0gIiIpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCWdsb2JhbCAkZ0NtczsKCQkkcmV0dXJuID0gZmFsc2U7CgkJLy8gSWYgdGhlIG1lc3NhZ2UgSUQgaGFzIGJlZW4gZ2l2ZW4KCQlpZiAoIWVtcHR5KCRtZXNzYWdlSUQpKXsKCQkJJHF1ZXJ5U3RyaW5nID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfbWVzc2FnZXMgV0hFUkUgSUQgPSA/IExJTUlUIDEiOwoJCQkvLyBFeGVjdXRlCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsIGFycmF5KCRtZXNzYWdlSUQpKTsKCQkJLy8gSWYgdGhlIGV4ZWN1dGlvbiB3YXMgc3VjY2VzZnVsbAoJCQlpZiAoJGRicmVzdWx0KXsKCQkJCS8vIEZldGNoIHRoZSByb3cKCQkJCSRyZXR1cm4gPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJCX0KCQl9CgkJcmV0dXJuICRyZXR1cm47Cgl9CQoJCgkKCS8vIEdldFVzZXJzOiBHZXRzIGFsbCB1c2VycwoJLy8gQHBhZ2UJCTogcGFnZSBudW1iZXIKCS8vIEBwZXJfcGFnZQk6IE51bWJlciBvZiB1c2VycyBwZXIgcGFnZQoJLy8gQG9yZGVyYnkJCTogT3JkZXIgbGlzdCBieSB0aGlzIHBhcmFtZXRlcgoJLy8gQG9yZGVydHlwZQk6IEFTQyBvciBERVNDCgkvLyBAYWN0aXZlCQk6IE9ubHkgYWN0aXZlIHVzZXJzCgkvLyBAc2VhcmNoCQk6IFNlYXJjaCB0ZXJtCglmdW5jdGlvbiBHZXRVc2VycygkaWQsICRyZXR1cm5pZCwgJHBhZ2UgPSAxLCAkcGVyX3BhZ2UgPSAxMDAsICRvcmRlcmJ5ID0gIlVzZXJuYW1lIiwgJG9yZGVydHlwZSA9ICJBU0MiLCAkYWN0aXZlID0gdHJ1ZSwgJHNlYXJjaCA9ICIiKSB7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJZ2xvYmFsICRnQ21zOwoJCS8vIFF1ZXJ5CgkJJHZhcnMgPSBhcnJheSgpOwoJCSRxdWVyeVN0cmluZyA9ICcKCQkJU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2J3dHdpdHRlcl91c2VycwoJCSAnOwoJCS8vIEZpbHRlciBvbiBhY3RpdmUgc3RhdGU/CgkJaWYgKCRhY3RpdmUpewoJCQkkcXVlcnlTdHJpbmcgLj0gJwoJCQkJV0hFUkUgQWN0aXZlPT8JCQkJCgkJCSc7CQkJCgkJCSR2YXJzW10gPSAxOwoJCX0KCQkvLyBTZWFyY2gKCQlpZiAoIWVtcHR5KCRzZWFyY2gpKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICcKCQkJCVdIRVJFIFVzZXJuYW1lIExJS0UgPwoJCQknOwoJCQkkdmFyc1tdID0gJyUnLiRzZWFyY2guJyUnOwkJCQoJCX0JCQoJCS8vIE9yZGVyIGJ5CgkJaWYgKCFlbXB0eSgkb3JkZXJieSkgJiYgIWVtcHR5KCRvcmRlcnR5cGUpKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIKCQkJT1JERVIgQlkgeyRvcmRlcmJ5fSB7JG9yZGVydHlwZX0iOwoJCX0JCQoJCS8vIExpbWl0CgkJaWYgKCFlbXB0eSgkcGFnZSkgJiYgIWVtcHR5KCRwZXJfcGFnZSkpewkJCQoJCQkkb2Zmc2V0ID0gKCRwYWdlLTEpKiRwZXJfcGFnZTsKCQkJJHF1ZXJ5U3RyaW5nIC49ICIgTElNSVQgeyRwZXJfcGFnZX0gT0ZGU0VUIHskb2Zmc2V0fSI7CgkJCQoJCX0JCQoJCS8vIEV4ZWN1dGUKCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCAkdmFycyk7CQkKCQkvLyBJZiB0aGVyZSB3ZXJlIG5vIGVycm9ycyBleGVjdXRpbmcKCQlpZiAoJGRicmVzdWx0KXsKCQkJJHJldHVybiA9IGFycmF5KCk7CgkJCS8vIExvb3AgdGhyb3VnaCByZXN1bHRzLCBhZGQgdGhlbSB0byBhcnJheQoJCQl3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7CgkJCQkvLyBBY3RpdmVidXR0b24KCQkJCWlmICgkcm93WydBY3RpdmUnXSl7CgkJCQkJJHJvd1snYWN0aXZlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWN0aXZhdGUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCR0aGlzLT5MYW5nKCdkZWFjdGl2YXRlJykuJyAnLiR0aGlzLT5MYW5nKCdoZWFkZXJfVXNlcm5hbWUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndXNlcklEJz0+JHJvd1snSUQnXSkpOwoJCQkJfWVsc2UgewoJCQkJCSRyb3dbJ2FjdGl2ZWxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FjdGl2YXRlJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicsJHRoaXMtPkxhbmcoJ2FjdGl2YXRlJykuJyAnLiR0aGlzLT5MYW5nKCdoZWFkZXJfVXNlcm5hbWUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndXNlcklEJz0+JHJvd1snSUQnXSkpOwoJCQkJfQoJCQkJLy8gRGF0ZWZvcm1hdAoJCQkJJHJvd1snTGFzdFVwZGF0ZSddID0gZGF0ZSgkdGhpcy0+TGFuZygnZGF0ZWZvcm1hdCcpLHN0cnRvdGltZSgkcm93WydMYXN0VXBkYXRlJ10pKTsKCQkJCSRyZXR1cm5bXSA9ICRyb3c7CgkJCX0KCQkJcmV0dXJuICRyZXR1cm47CgkJfQoJCXJldHVybiBmYWxzZTsJCQoJfQoJCgkvLyBfR2V0VXNlcgk6IHJldHVybnMgb25lIHVzZXIKCS8vIEB1c2VySUQJOiBJRCBvZiB0aGUgdXNlciB3ZSB3YW50CgkvLyBAdXNlcm5hbWU6IFVzZXJuYW1lIG9mIHRoZSB1c2VyIHdlIHdhbnQKCWZ1bmN0aW9uIF9HZXRVc2VyKCRpZCwkcmV0dXJuaWQsICR1c2VySUQgPSAiIiwgJHVzZXJuYW1lID0gIiIpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCWdsb2JhbCAkZ0NtczsKCQkkcmV0dXJuID0gZmFsc2U7CgkJLy8gSWYgdGhlIHVzZXIgSUQgaGFzIGJlZW4gZ2l2ZW4KCQlpZiAoIWVtcHR5KCR1c2VySUQpKXsKCQkJJHF1ZXJ5U3RyaW5nID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfdXNlcnMgV0hFUkUgSUQgPSA/IExJTUlUIDEiOwoJCQkvLyBFeGVjdXRlCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsIGFycmF5KCR1c2VySUQpKTsJCQkKCQl9CgkJLy8gSWYgdGhlIHVzZXJuYW1lIGhhcyBiZWVuIGdpdmVuCgkJZWxzZWlmICghZW1wdHkoJHVzZXJuYW1lKSl7CgkJCSRxdWVyeVN0cmluZyA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3VzZXJzIFdIRVJFIFVzZXJuYW1lID0gPyBMSU1JVCAxIjsKCQkJLy8gRXhlY3V0ZQoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCBhcnJheSgkdXNlcm5hbWUpKTsKCQl9CgkJLy8gSWYgdGhlIGV4ZWN1dGlvbiB3YXMgc3VjY2VzZnVsbAoJCWlmICgkZGJyZXN1bHQpewoJCQkvLyBGZXRjaCB0aGUgcm93CgkJCSRyZXR1cm4gPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJfQoJCXJldHVybiAkcmV0dXJuOwoJfQkKCQoJLy8gR2V0U291cmNlcwk6IEdldHMgYWxsIHVzZXJzCgkvLyBAcGFnZQkJOiBwYWdlIG51bWJlcgoJLy8gQHBlcl9wYWdlCTogTnVtYmVyIG9mIHVzZXJzIHBlciBwYWdlCgkvLyBAb3JkZXJieQkJOiBPcmRlciBsaXN0IGJ5IHRoaXMgcGFyYW1ldGVyCgkvLyBAb3JkZXJ0eXBlCTogQVNDIG9yIERFU0MKCS8vIEBhY3RpdmUJCTogT25seSB1c2VycyB0d2VldHMKCWZ1bmN0aW9uIEdldFNvdXJjZXMoJGlkLCAkcmV0dXJuaWQsICRwYWdlID0gMSwgJHBlcl9wYWdlID0gMTAwLCAkb3JkZXJieSA9ICJUaXRsZSIsICRvcmRlcnR5cGUgPSAiQVNDIiwgJGFjdGl2ZSA9IHRydWUpIHsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQlnbG9iYWwgJGdDbXM7CgkJLy8gUXVlcnkKCQkkdmFycyA9IGFycmF5KCk7CgkJJHF1ZXJ5U3RyaW5nID0gJwoJCQlTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXMKCQkgJzsKCQkvLyBGaWx0ZXIgb24gYWN0aXZlIHN0YXRlPwoJCWlmICgkYWN0aXZlKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICcKCQkJCVdIRVJFIEFjdGl2ZT0/CQkJCQoJCQknOwkJCQoJCQkkdmFyc1tdID0gMTsKCQl9CgkJLy8gT3JkZXIgYnkKCQlpZiAoIWVtcHR5KCRvcmRlcmJ5KSAmJiAhZW1wdHkoJG9yZGVydHlwZSkpewoJCQkkcXVlcnlTdHJpbmcgLj0gIgoJCQlPUkRFUiBCWSB7JG9yZGVyYnl9IHskb3JkZXJ0eXBlfSI7CgkJfQkJCgkJLy8gTGltaXQKCQlpZiAoIWVtcHR5KCRwYWdlKSAmJiAhZW1wdHkoJHBlcl9wYWdlKSl7CQkJCgkJCSRvZmZzZXQgPSAoJHBhZ2UtMSkqJHBlcl9wYWdlOwoJCQkkcXVlcnlTdHJpbmcgLj0gIiBMSU1JVCB7JHBlcl9wYWdlfSBPRkZTRVQgeyRvZmZzZXR9IjsKCQkJCgkJfQkJCgkJLy8gRXhlY3V0ZQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzIGV4ZWN1dGluZwoJCWlmICgkZGJyZXN1bHQpewoJCQkkcmV0dXJuID0gYXJyYXkoKTsKCQkJLy8gTG9vcCB0aHJvdWdoIHJlc3VsdHMsIGFkZCB0aGVtIHRvIGFycmF5CgkJCXdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJCWlmICghJGFjdGl2ZSl7CgkJCQkJLy8gQWN0aXZlYnV0dG9uCgkJCQkJaWYgKCRyb3dbJ0FjdGl2ZSddKXsKCQkJCQkJJHJvd1snYWN0aXZlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWN0aXZhdGUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCR0aGlzLT5MYW5nKCdkZWFjdGl2YXRlJykuJyAnLiR0aGlzLT5MYW5nKCdoZWFkZXJfU291cmNlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3NvdXJjZUlEJz0+JHJvd1snSUQnXSkpOwoJCQkJCX1lbHNlIHsKCQkJCQkJJHJvd1snYWN0aXZlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWN0aXZhdGUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmJywkdGhpcy0+TGFuZygnYWN0aXZhdGUnKS4nICcuJHRoaXMtPkxhbmcoJ2hlYWRlcl9Tb3VyY2UnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgnc291cmNlSUQnPT4kcm93WydJRCddKSk7CgkJCQkJfQoJCQkJCSRyb3dbJ2VkaXRsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfZWRpdF9zb3VyY2UnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdJRCc9PiRyb3dbJ0lEJ10pKTsKCQkJCQkkcm93WydlZGl0VGl0bGUnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZF9lZGl0X3NvdXJjZScsICRyZXR1cm5pZCwgJHJvd1snVGl0bGUnXSwgYXJyYXkoJ0lEJz0+JHJvd1snSUQnXSkpOwoJCQkJCSRyb3dbJ2RlbGV0ZWxpbmsnXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZScsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdzb3VyY2VJRCc9PiRyb3dbJ0lEJ10pLCR0aGlzLT5MYW5nKCdkZWxldGVzb3VyY2Vjb25maXJtJykpOwoJCQkJfQoJCQkJCgkJCQkvLyBEYXRlZm9ybWF0CgkJCQkkcm93WydEYXRlQ3JlYXRlZCddID0gZGF0ZSgkdGhpcy0+TGFuZygnZGF0ZWZvcm1hdCcpLHN0cnRvdGltZSgkcm93WydEYXRlQ3JlYXRlZCddKSk7CgkJCQkkcmV0dXJuW10gPSAkcm93OwoJCQl9CgkJCXJldHVybiAkcmV0dXJuOwoJCX0KCQlyZXR1cm4gZmFsc2U7CQkKCX0KCQoJLy8gR2V0U291cmNlc0J5R3JvdXAJOiBHZXRzIGFsbCB0aGUgc291cmNlcyBsaW5rZWQgdG8gYSBncm91cAoJLy8gQGdyb3VwCQkJCTogSUQgb2YgdGhlIGdyb3VwIHdlIHdhbnQgdG8gZ2V0IHRoZSBzb3VyY2VzIG9mCglmdW5jdGlvbiBHZXRTb3VyY2VzQnlHcm91cCgkZ3JvdXAgPSAiIil7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CQkKCQkkcmV0dXJuID0gYXJyYXkoKTsKCQlpZiAoIWVtcHR5KCRncm91cCkpewoJCQkkcXVlcnlTdHJpbmcgPSAnCgkJCQlTRUxFQ1QgU291cmNlSUQgYXMgSUQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzX3NvdXJjZWdyb3VwcwkJCQkgCgkJCQlXSEVSRSBTb3VyY2Vncm91cElEID0gPwoJCSAJJzsJCQkKCQkJJHZhcnMgPSBhcnJheSgkZ3JvdXApOwoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCAkdmFycyk7CQkJCgkJCWlmICgkZGJyZXN1bHQpewoJCQkJd2hpbGUgKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpewoJCQkJCSRyZXR1cm5bXSA9ICRyb3dbJ0lEJ107CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRyZXR1cm47Cgl9CgkKCS8vIF9HZXRTb3VyY2UJOiByZXR1cm5zIG9uZSBzb3VyY2UKCWZ1bmN0aW9uIF9HZXRTb3VyY2UoJGlkLCRyZXR1cm5pZCwgJHNvdXJjZUlEID0gIiIpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCWdsb2JhbCAkZ0NtczsKCQkkcmV0dXJuID0gZmFsc2U7CgkJLy8gSWYgdGhlIHNvdXJjZSBJRCBoYXMgYmVlbiBnaXZlbgoJCWlmICghZW1wdHkoJHNvdXJjZUlEKSl7CgkJCSRxdWVyeVN0cmluZyA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXMgV0hFUkUgSUQgPSA/IExJTUlUIDEiOwoJCQkvLyBFeGVjdXRlCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsIGFycmF5KCRzb3VyY2VJRCkpOwoJCQkvLyBJZiB0aGUgZXhlY3V0aW9uIHdhcyBzdWNjZXNmdWxsCgkJCWlmICgkZGJyZXN1bHQpewoJCQkJLy8gRmV0Y2ggdGhlIHJvdwoJCQkJJHJldHVybiA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHJldHVybjsKCX0JCgkKCS8vIEdldEdyb3Vwcwk6IEdldHMgYWxsIGdyb3VwcwoJLy8gQHBhZ2UJCTogcGFnZSBudW1iZXIKCS8vIEBwZXJfcGFnZQk6IE51bWJlciBvZiBncm91cHMgcGVyIHBhZ2UKCS8vIEBvcmRlcmJ5CQk6IE9yZGVyIGxpc3QgYnkgdGhpcyBwYXJhbWV0ZXIKCS8vIEBvcmRlcnR5cGUJOiBBU0Mgb3IgREVTQwoJLy8gQGFjdGl2ZQkJOiBPbmx5IGFjdGl2ZSBncm91cHMKCWZ1bmN0aW9uIEdldEdyb3VwcygkaWQsICRyZXR1cm5pZCwgJHBhZ2UgPSAxLCAkcGVyX3BhZ2UgPSAxMDAsICRvcmRlcmJ5ID0gIlRpdGxlIiwgJG9yZGVydHlwZSA9ICJBU0MiLCAkYWN0aXZlID0gdHJ1ZSkgewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCWdsb2JhbCAkZ0NtczsKCQkvLyBRdWVyeQoJCSR2YXJzID0gYXJyYXkoKTsKCQkkcXVlcnlTdHJpbmcgPSAnCgkJCVNFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9id3R3aXR0ZXJfc291cmNlZ3JvdXBzCQkJCgkJJzsKCQkvLyBGaWx0ZXIgb24gYWN0aXZlIHN0YXRlPwoJCWlmICgkYWN0aXZlKXsKCQkJJHF1ZXJ5U3RyaW5nIC49ICcKCQkJCVdIRVJFIEFjdGl2ZT0/CQkJCQoJCQknOwoJCQkkdmFyc1tdID0gMTsJCQkKCQl9CgkJLy8gT3JkZXIgYnkKCQlpZiAoIWVtcHR5KCRvcmRlcmJ5KSAmJiAhZW1wdHkoJG9yZGVydHlwZSkpewoJCQkkcXVlcnlTdHJpbmcgLj0gIgoJCQlPUkRFUiBCWSB7JG9yZGVyYnl9IHskb3JkZXJ0eXBlfSI7CgkJfQkJCgkJLy8gTGltaXQKCQlpZiAoIWVtcHR5KCRwYWdlKSAmJiAhZW1wdHkoJHBlcl9wYWdlKSl7CQkJCgkJCSRvZmZzZXQgPSAoJHBhZ2UtMSkqJHBlcl9wYWdlOwoJCQkkcXVlcnlTdHJpbmcgLj0gIiBMSU1JVCB7JHBlcl9wYWdlfSBPRkZTRVQgeyRvZmZzZXR9IjsKCQkJCgkJfQkJCgkJLy8gRXhlY3V0ZQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZXJlIHdlcmUgbm8gZXJyb3JzIGV4ZWN1dGluZwoJCWlmICgkZGJyZXN1bHQpewoJCQkkcmV0dXJuID0gYXJyYXkoKTsKCQkJLy8gTG9vcCB0aHJvdWdoIHJlc3VsdHMsIGFkZCB0aGVtIHRvIGFycmF5CgkJCXdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJCSRyb3dbJ2VkaXRsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfZWRpdF9ncm91cCcsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsICR0aGlzLT5MYW5nKCdlZGl0JyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ0lEJz0+JHJvd1snSUQnXSkpOwoJCQkJJHJvd1snZWRpdFRpdGxlJ10gPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRfZWRpdF9ncm91cCcsICRyZXR1cm5pZCwgJHJvd1snVGl0bGUnXSwgYXJyYXkoJ0lEJz0+JHJvd1snSUQnXSkpOwoJCQkJJHJvd1snZGVsZXRlbGluayddID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRlJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoJ2dyb3VwSUQnPT4kcm93WydJRCddKSwkdGhpcy0+TGFuZygnZGVsZXRlZ3JvdXBjb25maXJtJykpOwoJCQkJLy8gRGF0ZWZvcm1hdAoJCQkJJHJvd1snRGF0ZUNyZWF0ZWQnXSA9IGRhdGUoJHRoaXMtPkxhbmcoJ2RhdGVmb3JtYXQnKSxzdHJ0b3RpbWUoJHJvd1snRGF0ZUNyZWF0ZWQnXSkpOwkJCQoJCQkJJHJldHVybltdID0gJHJvdzsKCQkJfQoJCQlyZXR1cm4gJHJldHVybjsKCQl9CgkJcmV0dXJuIGZhbHNlOwkJCgl9CgkKCS8vIF9HZXRHcm91cAk6IHJldHVybnMgb25lIGdyb3VwCglmdW5jdGlvbiBfR2V0R3JvdXAoJGlkLCRyZXR1cm5pZCwgJHNvdXJjZUlEID0gIiIpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCWdsb2JhbCAkZ0NtczsKCQkkcmV0dXJuID0gZmFsc2U7CgkJLy8gSWYgdGhlIHNvdXJjZSBJRCBoYXMgYmVlbiBnaXZlbgoJCWlmICghZW1wdHkoJHNvdXJjZUlEKSl7CgkJCSRxdWVyeVN0cmluZyA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZWdyb3VwcyBXSEVSRSBJRCA9ID8gTElNSVQgMSI7CgkJCS8vIEV4ZWN1dGUKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgYXJyYXkoJHNvdXJjZUlEKSk7CgkJCS8vIElmIHRoZSBleGVjdXRpb24gd2FzIHN1Y2Nlc2Z1bGwKCQkJaWYgKCRkYnJlc3VsdCl7CgkJCQkvLyBGZXRjaCB0aGUgcm93CgkJCQkkcmV0dXJuID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCQl9CgkJfQoJCXJldHVybiAkcmV0dXJuOwoJfQkKCQoJLy8gR2V0VGVtcGxhdGVMaXN0CTogIEdldHMgYWxsIHRlbXBsYXRlcwkKCWZ1bmN0aW9uIEdldFRlbXBsYXRlTGlzdCgpewoJICAJJHRlbXBsYXRlcyA9ICR0aGlzLT5MaXN0VGVtcGxhdGVzKCk7CSAgCgkJJHJldHVybiA9IGFycmF5KCk7CQkJCQkKCSAgCQlmb3JlYWNoKCAkdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSApCgkJICAgIHsKCQkgICAgCSRpdGVtID0gYXJyYXkoKTsKCQkgICAgCSRpdGVtWyduYW1lJ10gPSAkdGVtcGxhdGU7CgkJICAJCSRpdGVtWydkZWZhdWx0J10gPSBmYWxzZTsKCQkJCWlmKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3VycmVudF90ZW1wbGF0ZScpID09ICRpdGVtWyduYW1lJ10gKXsKCQkJCQkkaXRlbVsnZGVmYXVsdCddID0gdHJ1ZTsKCQkJCX0KCQkJCSRyZXR1cm5bXSA9ICRpdGVtOwoJCSAgICB9CQkgICAKCQkgcmV0dXJuICRyZXR1cm47Cgl9CgkKCS8vIF9EZWxldGVHcm91cEFzc2lnbm1lbnRzCTogRGVsZXRlcyBhbGwgZ3JvdXAgYXNzaWdubWVudHMKCS8vIEBncm91cElECTogSUQgb2YgdGhlIGdyb3VwIHdlIHdhbnQgdG8gcmVtb3ZlIGFzc2lnbm1lbnRzIG9mCgkvLyBAc291cmNlSUQ6IElEIG9mIHRoZSBzb3VyY2Ugd2Ugd2FudCB0byByZW1vdmUgYXNzaWdubWVudHMgb2YKCWZ1bmN0aW9uIF9EZWxldGVHcm91cEFzc2lnbm1lbnRzKCRncm91cElEID0gIiIsJHNvdXJjZUlEID0gIiIpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCWdsb2JhbCAkZ0NtczsKCQkvLyBSZW1vdmluZyBiYXNlZCBvbiBncm91cElECgkJaWYgKCFlbXB0eSgkZ3JvdXBJRCkpewoJCQkkcXVlcnlTdHJpbmcgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlc19zb3VyY2Vncm91cHMgV0hFUkUgU291cmNlZ3JvdXBJRCA9ID8iOwoJCQkkdmFycyA9IGFycmF5KCRncm91cElEKTsJCQkKCQl9CgkJLy8gUmVtb3ZpbmcgYmFzZWQgb24gc291cmNlSUQKCQllbHNlaWYgKCFlbXB0eSgkc291cmNlSUQpKXsKCQkJJHF1ZXJ5U3RyaW5nID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXNfc291cmNlZ3JvdXBzIFdIRVJFIFNvdXJjZUlEID0gPyI7CgkJCSR2YXJzID0gYXJyYXkoJHNvdXJjZUlEKTsJCgkJfQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZSBleGVjdXRpb24gd2FzIHN1Y2Nlc2Z1bGwKCQlpZiAoJGRicmVzdWx0KXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJLy8gX0RlbGV0ZUdyb3VwCTogRGVsZXRlcyBhIGdyb3VwCgkvLyBAZ3JvdXBJRAk6IElEIG9mIHRoZSBncm91cCB3ZSB3YW50IHRvIHJlbW92ZQoJZnVuY3Rpb24gX0RlbGV0ZUdyb3VwKCRncm91cElEKXsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQlnbG9iYWwgJGdDbXM7CgkJJHF1ZXJ5U3RyaW5nID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZWdyb3VwcyBXSEVSRSBJRCA9ID8iOwoJCSR2YXJzID0gYXJyYXkoJGdyb3VwSUQpOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQoJCS8vIElmIHRoZSBleGVjdXRpb24gd2FzIHN1Y2Nlc2Z1bGwKCQlpZiAoJGRicmVzdWx0KXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCQoJLy8gX0RlbGV0ZVNvdXJjZSA6IERlbGV0ZXMgYSBzb3VyY2UKCS8vIEBzb3VyY2VJRAk6CUlEIG9mIHRoZSBzb3VyY2Ugd2Ugd2FudCB0byByZW1vdmUKCWZ1bmN0aW9uIF9EZWxldGVTb3VyY2UoJHNvdXJjZUlEKXsKCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCQlnbG9iYWwgJGdDbXM7CgkJJHF1ZXJ5U3RyaW5nID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXMgV0hFUkUgSUQgPSA/IjsKCQkkdmFycyA9IGFycmF5KCRzb3VyY2VJRCk7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgJHZhcnMpOwkJCgkJLy8gSWYgdGhlIGV4ZWN1dGlvbiB3YXMgc3VjY2VzZnVsbAoJCWlmICgkZGJyZXN1bHQpewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJCgkvLyBfRGVsZXRlTWVzc2FnZXMJOiBEZWxldGVzIG1lc3NhZ2VzIGZyb20gYSBzb3VyY2UKCWZ1bmN0aW9uIF9EZWxldGVNZXNzYWdlcygkc291cmNlSUQpewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCWdsb2JhbCAkZ0NtczsKCQkkcXVlcnlTdHJpbmcgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfbWVzc2FnZXMgV0hFUkUgc291cmNlSUQgPSA/IjsKCQkkdmFycyA9IGFycmF5KCRzb3VyY2VJRCk7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgJHZhcnMpOwkJCgkJLy8gSWYgdGhlIGV4ZWN1dGlvbiB3YXMgc3VjY2VzZnVsbAoJCWlmICgkZGJyZXN1bHQpewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJCgkvLyBSZWZyZXNoVHdlZXRzCTogUmVmcmVzaCB0aGUgZGF0YWJhc2UJCgkvLyBAaWQJCQk6CUNNU01TIGlkCgkvLyBAcmV0dXJuaWQJOglDTVNNUyByZXR1cm5pZAoJLy8gQGdyb3VwCQk6CUlEIG9mIHRoZSBncm91cCB0byByZWZyZXNoCgkvLyBAc291cmNlCQk6CUlEIG9mIHRoZSBzb3VyY2UgdG8gcmVmcmVzaAoJLy8gQGxpbWl0CQk6CU51bWJlciBvZiB0d2VldHMgdG8gZmV0Y2gKCWZ1bmN0aW9uIFJlZnJlc2hUd2VldHMoJGlkID0gIiIsJHJldHVybmlkID0gIiIsJGdyb3VwID0gIiIsJHNvdXJjZSA9ICIiLCRsaW1pdD0yMCl7CgkJCgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCgkJLyogQ3JlYXRlIFR3aXR0ZXJvQXV0aCBvYmplY3Qgd2l0aCBhcHAga2V5L3NlY3JldCBhbmQgdG9rZW4ga2V5L3NlY3JldCBmcm9tIGRlZmF1bHQgcGhhc2UgKi8KCQkkdGhpcy0+Y29ubmVjdGlvbiA9IG5ldyBUd2l0dGVyT0F1dGgoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NvbnN1bWVyX2tleScsJycpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29uc3VtZXJfc2VjcmV0JywnJyksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdvYXV0aF90b2tlbicsJycpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnb2F1dGhfdG9rZW5fc2VjcmV0JywnJykpOwoJCQkJCQkJCQkKCQkkcmVmcmVzaEludGVydmFsID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ1JlZnJlc2hJbnRlcnZhbCcpOwoJCSRjdXJyZW50RGF0ZSA9IHN0cnRvdGltZShkYXRlKCJZLW0tZCBIOmk6cyIpKTsJCQoJCSRzb3VyY2VzID0gYXJyYXkoKTsKCQkvLyBDaGVjayBpZiBhIGdyb3VwIHdhcyBnaXZlbgoJCWlmICghZW1wdHkoJGdyb3VwKSl7CQkJCgkJCSRzb3VyY2VzID0gJHRoaXMtPkdldFNvdXJjZXNCeUdyb3VwKCRncm91cCk7CQkJCgkJfSAKCQkvLyBDaGVjayBpZiBhIHNvdXJjZSB3YXMgZ2l2ZW4KCQllbHNlaWYgKCFlbXB0eSgkc291cmNlKSl7CgkJCS8vIFNwbGl0IGdpdmVuIHBhcmFtZXRlciBvbiBjb21tYQkJCQkJCgkJCSRzb3VyY2VzID0gZXhwbG9kZSgiLCIsJHNvdXJjZSk7CgkJCWZvcmVhY2ggKCRzb3VyY2VzIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCSRzb3VyY2VzWyRrZXldID0gdHJpbSgkdmFsdWUpOwoJCQl9CgkJfQoJCS8vIElmIHNvdXJjZXMgYXJlIGVtcHR5LCBnZXQgYWxsIHNvdXJjZXMKCQlpZiAoZW1wdHkoJHNvdXJjZXMpKXsJCQkKCQkJJHNvdXJjZXMgPSAkdGhpcy0+R2V0U291cmNlcygkaWQsICRyZXR1cm5pZCwgIiIsICIiKTsKCQkJLy8gTG9vcCByZXN1bHRzLCB3ZSBqdXN0IHdhbnQgdGhlIElECgkJCWlmICghZW1wdHkoJHNvdXJjZXMpKXsKCQkJCWZvcmVhY2ggKCRzb3VyY2VzIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCQkkc291cmNlc1ska2V5XSA9IHRyaW0oJHZhbHVlWydJRCddKTsKCQkJCX0JCgkJCX0JCQkJCQoJCX0JCgkJLy8gSWYgdGhlcmUgYXJlIGFueSBzb3VyY2UsIGFuZCBvdXIgY29ubmVjdGlvbiBpcyB2YWxpZAoJCWlmICghZW1wdHkoJHNvdXJjZXMpICYmICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdvYXV0aF92YWxpZCcpKXsKCQkJLy8gTG9vcCBzb3VyY2VzCgkJCSRtZXNzYWdlcyA9IGFycmF5KCk7CgkJCSRzb3VyY2VfbWVzc2FnZXMgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkc291cmNlcyBhcyAkc291cmNlKXsKCQkJCS8vIEdldCBTb3VyY2UKCQkJCSRzb3VyY2UgPSAkdGhpcy0+X0dldFNvdXJjZSgkaWQsJHJldHVybmlkLCAkc291cmNlKTsKCQkJCQoJCQkJLy8gSXMgdGhpcyBzb3VyY2UgYWN0aXZlPwoJCQkJaWYgKCRzb3VyY2VbJ0FjdGl2ZSddID09IDEpewoJCQkJCS8vIEhvdyBtdWNoIHRpbWUgaGFzIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCB1cGRhdGU/CgkJCQkJJHRpbWVkaWZmZXJlbmNlID0gJGN1cnJlbnREYXRlIC0gc3RydG90aW1lKCRzb3VyY2VbJ0xhc3RVcGRhdGUnXSk7CgkJCQkJLy8gSWYgdGltZWRpZmZlcmVuY2UgaXMgYmlnZ2VyIHRoYW4gdGhlIHNldCBSZWZyZXNoSW50ZXJ2YWwKCQkJCQkKCQkJCQlpZiAoJHRpbWVkaWZmZXJlbmNlID4gJHJlZnJlc2hJbnRlcnZhbCl7CgkJCQkJCQoJCQkJCQkvLyBHZXQgbGFzdCAyMCBtZXNzYWdlcyBmcm9tIFNvdXJjZQoJCQkJCQkkc291cmNlX21lc3NhZ2VzWyRzb3VyY2VbJ0lEJ11dID0gJHRoaXMtPl9HZXRNZXNzYWdlc0Zyb21Tb3VyY2UoJHNvdXJjZVsnSUQnXSwkbGltaXQrMzApOwkKCQkJCQkJLy8gTG9hZCB0aGUgWE1MCQkJCQkJCgkJCQkJCSR4bWwgPSAkdGhpcy0+Y29ubmVjdGlvbi0+Z2V0KCRzb3VyY2VbJ1hNTCddLicmY291bnQ9Jy4kbGltaXQpOwoJCQkJCQkvLyBDaGVjayBpZiB3ZSBnb3QgYSB2YWxpZCByZXNwb25zZQoJCQkJCQlpZiAoaXNzZXQoJHhtbC0+ZXJyb3JzKSl7CgkJCQkJCQkvLyBTZXQgb2F1dGggdG8gaW52YWxpZCwgdXNlciBuZWVkcyB0byByZWF1dGhlbnRpY2F0ZSBvbiB0d2l0dGVyCgkJCQkJCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnb2F1dGhfdmFsaWQnLDApOwoJCQkJCQkJLy8gU2VuZCBtYWlsIHRvIGFkbWluCgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQkJCQkJCQkKCQkJCQkJLy8gSWYgd2UncmUgZ2V0dGluZyBhIHR3aXR0ZXJwcm9maWxlCgkJCQkJCWlmICgkc291cmNlWydUeXBlJ10gPT0gImFjY291bnQiKXsKCQkJCQkJCSRpdGVtcyA9ICR4bWw7CQkJCQkJCQoJCQkJCQkJLy8gQ2hlY2sgaWYgd2UgZ290IHJlc3VsdHMKCQkJCQkJCWlmICghZW1wdHkoJGl0ZW1zKSl7CgkJCQkJCQkJLy8gTG9vcCB0aHJvdWdoIHRoZSBpdGVtcywgYWRkIHRoZW0gdG8gdGhlIG1lc3NhZ2VzIGFycmF5CgkJCQkJCQkJZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pewkJCQkJCQkKCQkJCQkJCQkJJG1lc3NhZ2UgPSBhcnJheSgpOwoJCQkJCQkJCQkkbWVzc2FnZVsnbWVzc2FnZSddID0gKHN0cmluZykgJGl0ZW0tPnRleHQ7CgkJCQkJCQkJCWlmICghZW1wdHkoJG1lc3NhZ2VbJ21lc3NhZ2UnXSkpewoJCQkJCQkJCQkJJG1lc3NhZ2VbJ1R3ZWV0SUQnXSA9ICRpdGVtLT5pZF9zdHI7CgkJCQkJCQkJCQkkbWVzc2FnZVsnRGF0ZSddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCBzdHJ0b3RpbWUoJGl0ZW0tPmNyZWF0ZWRfYXQpKTsJCQkJCQkJCQkKCQkJCQkJCQkJCSRtZXNzYWdlWydzb3VyY2VJRCddID0gJHNvdXJjZVsnSUQnXTsKCQkJCQkJCQkJCS8vIEdldCB1c2VybmFtZQoJCQkJCQkJCQkJJG1lc3NhZ2VbJ1VzZXJuYW1lJ10gPSAkaXRlbS0+dXNlci0+c2NyZWVuX25hbWU7CgkJCQkJCQkJCQkkbWVzc2FnZVsnVXNlcl9hdmF0YXInXSA9ICRpdGVtLT51c2VyLT5wcm9maWxlX2ltYWdlX3VybF9odHRwczsKCQkJCQkJCQkJCSRtZXNzYWdlWydMaW5rJ10gPSAoc3RyaW5nKSAnaHR0cDovL3R3aXR0ZXIuY29tLycuJG1lc3NhZ2VbJ1VzZXJuYW1lJ10uJy9zdGF0dXNlcy8nLiRpdGVtLT5pZDsJCQkJCQkJCQoJCQkJCQkJCQkJJG1lc3NhZ2VzW10gPSAkbWVzc2FnZTsKCQkJCQkJCQkJfQkJCQkJCQkJCQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSAKCQkJCQkJLy8gSWYgd2UncmUgZ2V0dGluZyBhIHNlYXJjaCBxdWVyeQoJCQkJCQllbHNlIHsKCQkJCQkJCSRpdGVtcyA9ICR4bWwtPnN0YXR1c2VzOwoJCQkJCQkJLy8gQ2hlY2sgaWYgd2UgZ290IHJlc3VsdHMKCQkJCQkJCWlmICghZW1wdHkoJGl0ZW1zKSl7CgkJCQkJCQkJLy8gTG9vcCB0aHJvdWdoIHRoZSBpdGVtcywgYWRkIHRoZW0gdG8gdGhlIG1lc3NhZ2VzIGFycmF5CgkJCQkJCQkJZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pewkJCQkJCQkKCQkJCQkJCQkJJG1lc3NhZ2UgPSBhcnJheSgpOwoJCQkJCQkJCQkkbWVzc2FnZVsnbWVzc2FnZSddID0gKHN0cmluZykgJGl0ZW0tPnRleHQ7CgkJCQkJCQkJCWlmICghZW1wdHkoJG1lc3NhZ2VbJ21lc3NhZ2UnXSkpewoJCQkJCQkJCQkJJG1lc3NhZ2VbJ1R3ZWV0SUQnXSA9ICRpdGVtLT5pZF9zdHI7CgkJCQkJCQkJCQkkbWVzc2FnZVsnRGF0ZSddID0gZGF0ZSgiWS1tLWQgSDppOnMiLCBzdHJ0b3RpbWUoJGl0ZW0tPmNyZWF0ZWRfYXQpKTsJCQkJCQkJCQkKCQkJCQkJCQkJCSRtZXNzYWdlWydzb3VyY2VJRCddID0gJHNvdXJjZVsnSUQnXTsKCQkJCQkJCQkJCS8vIEdldCB1c2VybmFtZQoJCQkJCQkJCQkJJG1lc3NhZ2VbJ1VzZXJuYW1lJ10gPSAkaXRlbS0+dXNlci0+c2NyZWVuX25hbWU7CgkJCQkJCQkJCQkkbWVzc2FnZVsnVXNlcl9hdmF0YXInXSA9ICRpdGVtLT51c2VyLT5wcm9maWxlX2ltYWdlX3VybF9odHRwczsKCQkJCQkJCQkJCSRtZXNzYWdlWydMaW5rJ10gPSAoc3RyaW5nKSAnaHR0cDovL3R3aXR0ZXIuY29tLycuJG1lc3NhZ2VbJ1VzZXJuYW1lJ10uJy9zdGF0dXNlcy8nLiRpdGVtLT5pZDsJCQkJCQkJCQoJCQkJCQkJCQkJJG1lc3NhZ2VzW10gPSAkbWVzc2FnZTsKCQkJCQkJCQkJfQkKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQkKCQkJCQkJfQoJCQkJCQkvLyBVdXBkYXRlIExhc3RVcGRhdGUgU291cmNlCgkJCQkJCSRxdWVyeVN0cmluZyA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlcwoJCQkJCQkJU0VUCUxhc3RVcGRhdGUgPSA/CgkJCQkJCQlXSEVSRSBJRCA9ID8KCQkJCQkJIjsKCQkJCQkJJHZhcnMgPSBhcnJheShkYXRlKCJZLW0tZCBIOmk6cyIpLCRzb3VyY2VbJ0lEJ10pOwoJCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCAkdmFycyk7CQkJCQkJCQkJCgkJCQkJfQoJCQkJfQoJCQl9CgkJCS8vIFJlbW92ZSBrZXlzIGZyb20gc291cmNlX21lc3NhZ2VzLiBNYWtlIG9uZSBsaXN0IG9mIG1lc3NhZ2VzCgkJCSRleGlzdGluZ19tZXNzYWdlcyA9IGFycmF5KCk7CgkJCWZvcmVhY2gJKCRzb3VyY2VfbWVzc2FnZXMgYXMgJHNvdXJjZSl7CgkJCQlmb3JlYWNoICgkc291cmNlIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCQkkZXhpc3RpbmdfbWVzc2FnZXNbJGtleV0gPSAkdmFsdWU7CgkJCQl9CgkJCX0JCgkJCgkJCS8vIExvb3AgdGhyb3VnaCBtZXNzYWdlcwoJCQlmb3JlYWNoICgkbWVzc2FnZXMgYXMgJG1lc3NhZ2UpewkJCgkJCQkvLyBDaGVjayBpZiB1c2VyIGFscmVhZHkgZXhpc3RzIGluIGFycmF5CgkJCQlpZiAoIWFycmF5X2tleV9leGlzdHMoJG1lc3NhZ2VbJ1VzZXJuYW1lJ10sJHRoaXMtPnVzZXJzKSl7CQkJCgkJCQkJLy8gQ2hlY2sgaWYgdXNlciBleGlzdHMgaW4gZGF0YWJhc2UKCQkJCQkkdXNlciA9ICR0aGlzLT5fR2V0VXNlcigkaWQsJHJldHVybmlkLCAiIiwgJG1lc3NhZ2VbJ1VzZXJuYW1lJ10pOwoJCQkJCS8vIElmIHVzZXIgZXhpc3RzIGluIGRhdGFiYXNlCgkJCQkJaWYgKCFlbXB0eSgkdXNlcikpewkJCQkKCQkJCQkJLy8gQ2hlY2sgaWYgdXNlciBoYXNuJ3QgYmVlbiBkaXNhYmxlZAoJCQkJCQlpZiAoJHVzZXJbJ0FjdGl2ZSddID09IDEpewoJCQkJCQkJLy8gQ2hlY2sgd2hlbiB0aGUgdXNlciB3YXMgdXBkYXRlZCBsYXN0IChSZWZyZXNoIG9uY2UgYSBkYXkpCQkJCQkJCgkJCQkJCQkkdGltZWRpZmZlcmVuY2UgPSAkY3VycmVudERhdGUgLSBzdHJ0b3RpbWUoJHVzZXJbJ0xhc3RVcGRhdGUnXSk7CQkJCQkJCgkJCQkJCQkvLyBJZiBlbm91Z2ggdGltZSBoYXMgcGFzc2VkCgkJCQkJCQlpZiAoJHRpbWVkaWZmZXJlbmNlID4gMzQ1NjApewoJCQkJCQkJCQoJCQkJCQkJCSR1c2VyWydBdmF0YXInXSA9ICRtZXNzYWdlWydVc2VyX2F2YXRhciddOwkJCQkJCQkJCQkJCQkJCgkJCQkJCQkJJHVzZXJbJ0xhc3RVcGRhdGUnXSA9IGRhdGUoIlktbS1kIEg6aTpzIik7CgkJCQkJCQkJLy8gVXBkYXRlIHVzZXIgaW4gZGF0YWJhc2UKCQkJCQkJCQkkcXVlcnlTdHJpbmcgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3VzZXJzCgkJCQkJCQkJCVNFVCBBdmF0YXIgPSA/LAoJCQkJCQkJCQlMYXN0VXBkYXRlID0gPwoJCQkJCQkJCQlXSEVSRSBJRCA9ID8KCQkJCQkJCQkiOwoJCQkJCQkJCSR2YXJzID0gYXJyYXkoJHVzZXJbJ0F2YXRhciddLCR1c2VyWydMYXN0VXBkYXRlJ10sJHVzZXJbJ0lEJ10pOwoJCQkJCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQkJCQkJCQkJCQkJCgkJCQkJCQl9CQkJCQkJCgkJCQkJCX0JCQkJCQkJCQoJCQkJCX0KCQkJCQkvLyBJZiB1c2VyIGRvZXNuJ3QgZXhpc3QgeWV0CgkJCQkJZWxzZSB7CQkJCQkKCQkJCQkJJHVzZXJbJ0lEJ10gPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl91c2Vyc19zZXEiKTsJCQkJCQoJCQkJCQkkdXNlclsnVXNlcm5hbWUnXSA9ICRtZXNzYWdlWydVc2VybmFtZSddOwoJCQkJCQkkdXNlclsnQWN0aXZlJ10gPSAxOwoJCQkJCQkkdXNlclsnTGFzdFVwZGF0ZSddID0gZGF0ZSgiWS1tLWQgSDppOnMiKTsKCQkJCQkJJHVzZXJbJ0F2YXRhciddID0gJG1lc3NhZ2VbJ1VzZXJfYXZhdGFyJ107CQkJCQkJCgkJCQkJCQoJCQkJCQkvLyBJbnNlcnQgdXNlciBpbnRvIGRhdGFiYXNlCQkJCQkKCQkJCQkJJHF1ZXJ5U3RyaW5nID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3VzZXJzCgkJCQkJCQkoSUQsVXNlcm5hbWUsQXZhdGFyLEFjdGl2ZSxMYXN0VXBkYXRlKQoJCQkJCQkJVmFsdWVzKD8sPyw/LD8sPykJCQkJCQoJCQkJCQkiOwoJCQkJCQkkdmFycyA9IGFycmF5KCR1c2VyWydJRCddLCR1c2VyWydVc2VybmFtZSddLCR1c2VyWydBdmF0YXInXSwkdXNlclsnQWN0aXZlJ10sJHVzZXJbJ0xhc3RVcGRhdGUnXSk7CgkJCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnlTdHJpbmcsICR2YXJzKTsJCQkJCQkJCQkKCQkJCQl9CgkJCQkJLy8gQWRkIHVzZXIgdG8gYXJyYXkKCQkJCQkkdGhpcy0+dXNlcnNbJG1lc3NhZ2VbJ1VzZXJuYW1lJ11dID0gJHVzZXI7CQkJCQoJCQkJfQoJCQkJLy8gQ2hlY2sgaWYgdXNlciBpcyBub3Qgb24gdGhlIGJsYWNrbGlzdAoJCQkJaWYgKCR1c2VyWydBY3RpdmUnXSA9PSAxKXsKCQkJCQkvLyBDaGVjayBpZiBtZXNzYWdlIGRvZXMgbm90IGFscmVhZHkgZXhpc3RzCQkJCQoJCQkJCS8vIElmIG1lc3NhZ2Ugd2FzIG5vdCBmb3VuZAoJCQkJCWlmICghYXJyYXlfa2V5X2V4aXN0cygkbWVzc2FnZVsnVHdlZXRJRCddLCRleGlzdGluZ19tZXNzYWdlcykpewkJCQkJCQkJCQkJCgkJCQkJCS8vIEluc2VydCB0aGUgbWVzc2FnZSBpbnRvIHRoZSBkYXRhYmFzZQoJCQkJCQkkbWVzc2FnZUlEID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfbWVzc2FnZXNfc2VxIik7CgkJCQkJCSRxdWVyeVN0cmluZyA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9tZXNzYWdlcwoJCQkJCQkJKElELE1lc3NhZ2UsVXNlcixBY3RpdmUsRGF0ZSxzb3VyY2VJRCxMaW5rLHR3ZWV0SUQpCgkJCQkJCQlWQUxVRVMoPyw/LD8sPyw/LD8sPyw/KQoJCQkJCQkiOwkJCQkJCQoJCQkJCQkkdmFycyA9IGFycmF5KCRtZXNzYWdlSUQsJHRoaXMtPlJlbW92ZUNoYXJzKCRtZXNzYWdlWydtZXNzYWdlJ10pLCR1c2VyWydJRCddLDEsJG1lc3NhZ2VbJ0RhdGUnXSwkbWVzc2FnZVsnc291cmNlSUQnXSwkbWVzc2FnZVsnTGluayddLCRtZXNzYWdlWydUd2VldElEJ10pOwoJCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCAkdmFycyk7CQkJCQkJCQkJCgkJCQkJfQoJCQkJfQkJCQoJCQl9CgkJfQoJfQoJCgkvLyBSZW1vdmVDaGFycwk6IFJlbW92ZXMgbm9uIFVURiA4IGNoYXJhY3RlcnMKCS8vIEBzdHJpbmcJCTogU3RyaW5nIHRvIHJlbW92ZSBjaGFycyBmcm9tCglmdW5jdGlvbiBSZW1vdmVDaGFycygkc3RyaW5nID0gIiIpewoJCS8vcmVqZWN0IG92ZXJseSBsb25nIDIgYnl0ZSBzZXF1ZW5jZXMsIGFzIHdlbGwgYXMgY2hhcmFjdGVycyBhYm92ZSBVKzEwMDAwIGFuZCByZXBsYWNlIHdpdGggPwoJCSRzdHJpbmcgPSBwcmVnX3JlcGxhY2UoJy9bXHgwMC1ceDA4XHgxMFx4MEJceDBDXHgwRS1ceDE5XHg3Rl0nLgoJCSAnfFtceDAwLVx4N0ZdW1x4ODAtXHhCRl0rJy4KCQkgJ3woW1x4QzBceEMxXXxbXHhGMC1ceEZGXSlbXHg4MC1ceEJGXSonLgoJCSAnfFtceEMyLVx4REZdKCg/IVtceDgwLVx4QkZdKXxbXHg4MC1ceEJGXXsyLH0pJy4KCQkgJ3xbXHhFMC1ceEVGXSgoW1x4ODAtXHhCRl0oPyFbXHg4MC1ceEJGXSkpfCg/IVtceDgwLVx4QkZdezJ9KXxbXHg4MC1ceEJGXXszLH0pL1MnLAoJCSAnPycsICRzdHJpbmcgKTsKCQkKCQkvL3JlamVjdCBvdmVybHkgbG9uZyAzIGJ5dGUgc2VxdWVuY2VzIGFuZCBVVEYtMTYgc3Vycm9nYXRlcyBhbmQgcmVwbGFjZSB3aXRoID8KCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcvXHhFMFtceDgwLVx4OUZdW1x4ODAtXHhCRl0nLgoJCSAnfFx4RURbXHhBMC1ceEJGXVtceDgwLVx4QkZdL1MnLCc/JywgJHN0cmluZyApOwoJCXJldHVybiAkc3RyaW5nOwoJCQoJfQoJCgkKCS8vIEdldFR3ZWV0cwk6IEZ1bmN0aW9uIHRvIGdldCB0d2VldHMKCS8vIEBpZAkJCToJQ01TTVMgaWQKCS8vIEByZXR1cm5pZAk6CUNNU01TIHJldHVybmlkCgkvLyBAZ3JvdXAJCToJSUQgb2YgdGhlIGdyb3VwIHRvIGZldGNoCgkvLyBAc291cmNlCQk6CUlEIG9mIHRoZSBzb3VyY2UgdG8gZmV0Y2gKCS8vIEBsaW1pdAkJOglOdW1iZXIgb2YgbWVzc2FnZXMgdG8gZGlzcGxheQoJZnVuY3Rpb24gR2V0VHdlZXRzKCRpZCwkcmV0dXJuaWQsJGdyb3VwLCRzb3VyY2UsJGxpbWl0ID0gIjIwIil7CgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCQkKCQkkcmV0dXJuID0gYXJyYXkoKTsJCQoJCSRzb3VyY2VzID0gYXJyYXkoKTsKCQkvLyBDaGVjayBpZiBhIGdyb3VwIHdhcyBnaXZlbgoJCWlmICghZW1wdHkoJGdyb3VwKSl7CQkJCgkJCSRzb3VyY2VzID0gJHRoaXMtPkdldFNvdXJjZXNCeUdyb3VwKCRncm91cCk7CQkJCgkJfSAKCQkvLyBDaGVjayBpZiBhIHNvdXJjZSB3YXMgZ2l2ZW4KCQllbHNlaWYgKCFlbXB0eSgkc291cmNlKSl7CgkJCS8vIFNwbGl0IGdpdmVuIHBhcmFtZXRlciBvbiBjb21tYQkJCQkJCgkJCSRzb3VyY2VzID0gZXhwbG9kZSgiLCIsJHNvdXJjZSk7CgkJCWZvcmVhY2ggKCRzb3VyY2VzIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCSRzb3VyY2VzWyRrZXldID0gdHJpbSgkdmFsdWUpOwoJCQl9CgkJfQoJCS8vIElmIHNvdXJjZXMgYXJlIGVtcHR5LCBnZXQgYWxsIHNvdXJjZXMKCQlpZiAoZW1wdHkoJHNvdXJjZXMpKXsJCQkKCQkJJHNvdXJjZXMgPSAkdGhpcy0+R2V0U291cmNlcygkaWQsICRyZXR1cm5pZCwgIiIsICIiKTsKCQkJLy8gTG9vcCByZXN1bHRzLCB3ZSBqdXN0IHdhbnQgdGhlIElECgkJCWZvcmVhY2ggKCRzb3VyY2VzIGFzICRrZXkgPT4gJHZhbHVlKXsKCQkJCSRzb3VyY2VzWyRrZXldID0gdHJpbSgkdmFsdWVbJ0lEJ10pOwoJCQl9CQkJCgkJfQkJCgkJLy8gSWYgdGhlcmUgYXJlIGFueSBzb3VyY2UKCQlpZiAoIWVtcHR5KCRzb3VyY2VzKSl7CgkJCS8vIEpvaW4gc291cmNlcyBhcnJheQoJCQkkc291cmNlc19qb2luZWQgPSAiIjsKCQkJZm9yZWFjaCAoJHNvdXJjZXMgYXMgJHNvdXJjZSl7CgkJCQlpZiAoIWVtcHR5KCRzb3VyY2VzX2pvaW5lZCkpewoJCQkJCSRzb3VyY2VzX2pvaW5lZCAuPSAiLCI7CgkJCQl9CgkJCQkkc291cmNlc19qb2luZWQgLj0gJHNvdXJjZTsKCQkJfQoJCQkKCQkJLy8gRmV0Y2ggdHdlZXRzCgkJCSRxdWVyeVN0cmluZyA9ICJTRUxFQ1QgbWVzLiogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9tZXNzYWdlcyBtZXMKCQkJCUxFRlQgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzIHNyYyBPTiBzcmMuSUQgPSBtZXMuc291cmNlSUQKCQkJCUxFRlQgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl91c2VycyB1c3IgT04gdXNyLklEID0gbWVzLlVzZXIKCQkJCVdIRVJFIHVzci5BY3RpdmUgPSA/IEFORCBzcmMuQWN0aXZlID0gPyBBTkQgbWVzLkFjdGl2ZSA9ID8gQU5EIG1lcy5zb3VyY2VJRCBJTiAoeyRzb3VyY2VzX2pvaW5lZH0pCgkJCQlPUkRFUiBCWSBtZXMuRGF0ZSBERVNDCgkJCQlMSU1JVCB7JGxpbWl0fQoJCQkiOwoJCQkkdmFycyA9IGFycmF5KDEsMSwxKTsKCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywgJHZhcnMpOwkJCgkJCXdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCQkJCS8vIFR3ZWV0SUQKCQkJCSRyb3dbJ1R3ZWV0SUQnXSA9ICRyb3dbJ3R3ZWV0SUQnXTsJCQkJCgkJCQkvLyBHZXQgVXNlciBpbmZvCgkJCQkkcm93WydVc2VyJ10gPSAkdGhpcy0+X0dldFVzZXIoJGlkLCRyZXR1cm5pZCwkcm93WydVc2VyJ10pOwoJCQkJLy8gUmVwbGFjZSBsaW5rcyBpbiBtZXNzYWdlCQkJCQoJCQkJJHJvd1snTWVzc2FnZV9wYXJzZWQnXSA9ICR0aGlzLT50d2l0dGVyaWZ5KCRyb3dbJ01lc3NhZ2UnXSk7CQkJCQoJCQkJCgkJCQkvLyBTaG93IHB1Ymxpc2ggdGltZSBpbiB0ZXh0CgkJCQkkcm93WydEYXRlX3BhcnNlZCddID0gJHRoaXMtPlNlY29uZHNUb1RleHQoJHRoaXMtPkdldFRpbWVEaWZmZXJlbmNlKCRyb3dbJ0RhdGUnXSkpLiIgIi4kdGhpcy0+TGFuZyAoJ3RpbWVfYWdvJyk7CgkJCQkkcmV0dXJuW10gPSAkcm93OwoJCQl9CgkJfQoJCXJldHVybiAkcmV0dXJuOwoJfQoJCglmdW5jdGlvbiBNYWtlVG9vbFRpcCgkdGVrc3QpewoJCWdsb2JhbCAkZ0NtczsKCQkKCQkkY2xhc3MgPSAiaGVscCIucmFuZCgxMDAwLDk5OTkpOwoJICAJJGljb24gPSAnPGEgdGl0bGU9IicuJHRla3N0LiciIGNsYXNzPSInLiRjbGFzcy4nIj4nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vaW5mby5naWYnLCAnJywnJywnJywnc3lzdGVtaWNvbicpLic8L2E+JzsKCSAgCSRpY29uIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkgIAlqUXVlcnkoImEuJy4kY2xhc3MuJyIpLnRvb2x0aXAoKQoJICAJPC9zY3JpcHQ+JzsKCSAgCQoJICAJJHJldHVybiA9ICRpY29uOwoJICAJCgkgIAlyZXR1cm4gJHJldHVybjsKCSB9CgkgIAoJIGZ1bmN0aW9uIE1vZHVsZVBhdGgoKXsKCSAgCSRzdHIgPSAiL21vZHVsZXMvIi4kdGhpcy0+R2V0TmFtZSgpLiIvIjsKCQlyZXR1cm4gJHN0cjsKCSB9CgoJICAJICAKCSBmdW5jdGlvbiBMb2FkSlMoKXsKCSAgCSRsaWJkaXJKUyA9ICR0aGlzLT5Nb2R1bGVQYXRoKCkgLiAibGliIiAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAianMiIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsKCSAgCSRsaWJkaXJDU1MgPSAkdGhpcy0+TW9kdWxlUGF0aCgpIC4gImxpYiIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gImNzcyIgLiBESVJFQ1RPUllfU0VQQVJBVE9SOwkgIAkKCSAgCWVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJGxpYmRpckpTLidCV1R3aXR0ZXIuanMiID48L3NjcmlwdD4nOwoJICAJZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kbGliZGlySlMuJ2pxdWVyeS50b29sdGlwLm1pbi5qcyIgPjwvc2NyaXB0Pic7CgkgIAllY2hvICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRsaWJkaXJDU1MuJ0JXVHdpdHRlci5jc3MiID48L2xpbms+JzsKCSAgCWVjaG8gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJGxpYmRpckNTUy4nanF1ZXJ5LnRvb2x0aXAuY3NzIiA+PC9saW5rPic7CgkgfQoJIAoJLy8gY3VyUGFnZVVSTAk6IFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSB1cmwsIG1haW5seSB1c2VkIGZvciB0aGUgYXV0aGVudGljYXRpb24gY2FsbGJhY2sgCQoJZnVuY3Rpb24gY3VyUGFnZVVSTCgpIHsKCQkkcGFnZVVSTCA9ICdodHRwJzsKCQlpZiAoaXNzZXQoJF9TRVJWRVJbIkhUVFBTIl0pICYmICRfU0VSVkVSWyJIVFRQUyJdID09ICJvbiIpIHskcGFnZVVSTCAuPSAicyI7fQoJCQkkcGFnZVVSTCAuPSAiOi8vIjsKCQlpZiAoJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl0gIT0gIjgwIikgewoJCQkkcGFnZVVSTCAuPSAkX1NFUlZFUlsiU0VSVkVSX05BTUUiXS4iOiIuJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl0uJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07CgkJfSBlbHNlIHsKCQkJJHBhZ2VVUkwgLj0gJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0uJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07CgkJfQoJCXJldHVybiAkcGFnZVVSTDsKCX0KCQoJCgkvLyBHZXRUaW1lRGlmZmVyZW5jZQk6IEdldCB0aGUgZGlmZmVyZW5jZSBpbiB0aW1lIGJldHdlZW4gbm93IGFuZCBnaXZlbiBkYXRlCgkvLyBAVGltZVRvQ2hlY2sJCQk6IFRpbWUgdG8gY29tcGFyZSB0byBjdXJyZW50IHRpbWUKCWZ1bmN0aW9uIEdldFRpbWVEaWZmZXJlbmNlKCRUaW1lVG9DaGVjayl7CQkKCQkvLyBDdXJyZW50IHRpbWVzdGFtcAoJCSRjdXJyZW50X3NlYyA9IHRpbWUoKTsKCQkvLyBDYWxjdWxhdGVkIHRpbWVzdGFtcCBnaXZlbiB0aW1lCgkJJGdpdmVuX3NlYyA9ICBzdHJ0b3RpbWUoJFRpbWVUb0NoZWNrKTsKCQkJCQoJCS8vIElmIGdpdmVuIHRpbWVzdGFtcCBjb3VsZG4ndCBiZSBjYWxjdWxhdGVkCgkJaWYgKCRnaXZlbl9zZWMgPT09IGZhbHNlKXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkvLyBDYWxjdWxhdGUgZGlmZmVyZW5jZQoJCSRkaWZmZXJlbmNlID0gJGN1cnJlbnRfc2VjLSRnaXZlbl9zZWM7CgkJcmV0dXJuICRkaWZmZXJlbmNlOwkJCgl9CgkKCS8vIFNlY29uZHNUb1RleHQJOiBCdWlsZHMgYSBzdHJpbmcgZnJvbSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcwoJLy8gQHNlY29uZHMJCQk6IE51bWJlciBvZiBzZWNvbmRzCglmdW5jdGlvbiBTZWNvbmRzVG9UZXh0KCRzZWNvbmRzKXsKCQkvLyBTd2l0Y2ggb24gYW1vdW50IG9mIHNlY29uZHMKCQlzd2l0Y2goJHNlY29uZHMpewoJCQkvLyBMZXNzIHRoYXQgYW4gaG91cgoJCQljYXNlICgkc2Vjb25kcyA8PSAzNjAwKToKCQkJCXJldHVybiAkdGhpcy0+TGFuZyAoJ3RpbWVfbGVzc19ob3VyJyk7CgkJCQlicmVhazsKCQkJLy8gTW9yZSB0aGFuIGFuIGhvdXIsIGxlc3MgdGhhbiAyNCB1dXIKCQkJY2FzZSAoJHNlY29uZHMgPiAzNjAwICYmICRzZWNvbmRzIDw9ICgyNCozNjAwKSk6CgkJCQkkY291bnRfaG91cnMgPSBmbG9vcigkc2Vjb25kcy8zNjAwKTsKCQkJCWlmICgkY291bnRfaG91cnMgPiAxKXsKCQkJCQlyZXR1cm4gJGNvdW50X2hvdXJzLiIgIi4kdGhpcy0+TGFuZyAoJ3RpbWVfaG91cnMnKTsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuICRjb3VudF9ob3Vycy4iICIuJHRoaXMtPkxhbmcgKCd0aW1lX2hvdXInKTsKCQkJCX0JCQkJCgkJCQlicmVhazsKCQkJLy8gTW9yZSB0aGFuIDI0IGhvdXJzLCBsZXNzIHRoYW4gMzAgZGF5cwoJCQljYXNlICgkc2Vjb25kcyA+ICgyNCozNjAwKSAmJiAkc2Vjb25kcyA8PSAoMzAqMjQqMzYwMCkpOgoJCQkJJGNvdW50X2RheXMgPSBmbG9vcigkc2Vjb25kcy8oMjQqMzYwMCkpOwoJCQkJaWYgKCRjb3VudF9kYXlzID4gMSl7CgkJCQkJcmV0dXJuICRjb3VudF9kYXlzLiIgIi4kdGhpcy0+TGFuZyAoJ3RpbWVfZGF5cycpOwoJCQkJfSBlbHNlIHsKCQkJCQlyZXR1cm4gJGNvdW50X2RheXMuIiAiLiR0aGlzLT5MYW5nICgndGltZV9kYXknKTsKCQkJCX0JCQkJCgkJCQlicmVhazsKCQkJLy8gTW9yZSB0aGFuIDMwIGRheXMsIGxlc3MgdGhhbiAxMiBtb250aHMKCQkJY2FzZSAoJHNlY29uZHMgPiAoMzAqMjQqMzYwMCkgJiYgJHNlY29uZHMgPD0gKDEyKjMwKjI0KjM2MDApKToKCQkJCSRjb3VudF9tb250aHMgPSBmbG9vcigkc2Vjb25kcy8oMzAqMjQqMzYwMCkpOwoJCQkJaWYgKCRjb3VudF9tb250aHMgPiAxKXsKCQkJCQlyZXR1cm4gJGNvdW50X21vbnRocy4iICIuJHRoaXMtPkxhbmcgKCd0aW1lX21vbnRocycpOwoJCQkJfSBlbHNlIHsKCQkJCQlyZXR1cm4gJGNvdW50X21vbnRocy4iICIuJHRoaXMtPkxhbmcgKCd0aW1lX21vbnRoJyk7CgkJCQl9CQkJCQoJCQkJYnJlYWs7CQkJCgkJfQoJfQoJCgkvLyBQYXJzZXMgbWVzc2FnZSBhbmQgcmV0dXJucyB0aGUgc2FtZSBtZXNzYWdlIHdpdGggbGlua3MKCS8vIEByZXQJOiBJbnB1dCBzdHJpbmcKCWZ1bmN0aW9uIHR3aXR0ZXJpZnkoJHJldCkgewoJCSRyZXQgPSBwcmVnX3JlcGxhY2UoIiMoXnxbXG4gXSkoW1x3XSs/Oi8vW1x3XStbXiBcIlxuXHJcdDwgXSopIyIsICJcXDE8YSBocmVmPVwiXFwyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XFwyPC9hPiIsICRyZXQpOwoJCSRyZXQgPSBwcmVnX3JlcGxhY2UoIiMoXnxbXG4gXSkoKHd3d3xmdHApXC5bXiBcIlx0XG5ccjwgXSopIyIsICJcXDE8YSBocmVmPVwiaHR0cDovL1xcMlwiIHRhcmdldD1cIl9ibGFua1wiPlxcMjwvYT4iLCAkcmV0KTsKCQkkcmV0ID0gcHJlZ19yZXBsYWNlKCIvQChcdyspLyIsICI8YSBocmVmPVwiaHR0cHM6Ly93d3cudHdpdHRlci5jb20vXFwxXCIgdGFyZ2V0PVwiX2JsYW5rXCI+QFxcMTwvYT4iLCAkcmV0KTsKCQkkcmV0ID0gcHJlZ19yZXBsYWNlKCIvIyhcdyspLyIsICI8YSBocmVmPVwiaHR0cHM6Ly90d2l0dGVyLmNvbS9zZWFyY2g/cT0lMjNcXDFcIiB0YXJnZXQ9XCJfYmxhbmtcIj4jXFwxPC9hPiIsICRyZXQpOwoJCXJldHVybiAkcmV0OwoJfQp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0JXVHdpdHRlcic7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ01vZHVsZSBmb3Igc2hvd2luZyB0d2VldHMsIGJhc2VkIG9wIGFjY291bnQsIGhhc2h0YWcgb3Igc2VhcmNodGVybS4nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdCV1R3aXR0ZXIgaGFzIGJlZW4gaW5zdGFsbGVkLic7CgovLyBUQUJTCiRsYW5nWyd0YWJfbWVzc2FnZXMnXQkJPQknTWVzc2FnZXMnOwokbGFuZ1sndGFiX3VzZXJzJ10JCQk9CSdVc2Vycyc7CiRsYW5nWyd0YWJfc291cmNlcyddCQk9CSdTb3VyY2VzJzsKJGxhbmdbJ3RhYl9ncm91cHMnXQkJCT0JJ0dyb3Vwcyc7CiRsYW5nWyd0YWJfc2V0dGluZ3MnXQkJPQknU2V0dGluZ3MnOwokbGFuZ1sndGFiX3RlbXBsYXRlcyddCQk9CSdUZW1wbGF0ZXMnOwoKLy8gSEVBREVSUwokbGFuZ1snaGVhZGVyX01lc3NhZ2UnXQkJPQknTWVzc2FnZSc7CiRsYW5nWydoZWFkZXJfVXNlcm5hbWUnXQk9CSdVc2VyJzsKJGxhbmdbJ2hlYWRlcl9EYXRlJ10JCT0JJ0RhdGUnOwokbGFuZ1snaGVhZGVyX0xhc3RVcGRhdGUnXQk9CSdMYXN0IHVwZGF0ZSc7CiRsYW5nWydoZWFkZXJfVGl0bGUnXQkJPQknVGl0bGUnOwokbGFuZ1snaGVhZGVyX1R5cGUnXQkJPQknVHlwZSc7CiRsYW5nWydoZWFkZXJfRGF0ZUNyZWF0ZWQnXQk9CSdEYXRlIGNyZWF0ZWQnOwokbGFuZ1snaGVhZGVyX1NvdXJjZSddCQk9CSdTb3VyY2UnOwokbGFuZ1snaGVhZGVyX0RlZmF1bHQnXQkJPQknRGVmYXVsdCc7CiRsYW5nWydoZWFkZXJfSUQnXQkJCT0JJ0lEJzsKJGxhbmdbJ2hlYWRlcl9Tb3VyY2VUaXRsZSddCT0JJ1NvdXJjZSc7CgovLyBTRVRUSU5HUwokbGFuZ1snc2V0dGluZ19SZWZyZXNoSW50ZXJ2YWwnXSA9ICdSZWZyZXNoIGludGVydmFsIChpbiBzZWNvbmRzKSc7CiRsYW5nWydzZXR0aW5nX0V2ZXJ5TG9hZCddIAk9ICdSZWZyZXNoIGV2ZXJ5IHRpbWUgYSBwYWdlIGxvYWRzJzsKJGxhbmdbJ3NldHRpbmdfQXBwS2V5J10gCT0gJ0NvbnN1bWVyIGtleSBvZiB5b3VyIHR3aXR0ZXIgYXBwbGljYXRpb24uJzsKJGxhbmdbJ3NldHRpbmdfQXBwU2VjcmV0J10gCT0gJ0NvbnN1bWVyIHNlY3JldCBvZiB5b3VyIHR3aXR0ZXIgYXBwbGljYXRpb24uJzsKJGxhbmdbJ3NldHRpbmdfTG9nZ2VkaW4nXSAJPSAnTG9nZ2VkIGluIGFzOiAnOwokbGFuZ1snc2V0dGluZ19TaWduSW4nXSAJPSAnU2lnbiBpbiB3aXRoIFR3aXR0ZXInOwokbGFuZ1snc2V0dGluZ19SZXZva2UnXSAJPSAnTG9nIG91dCBvZiBUd2l0dGVyJzsKJGxhbmdbJ3NldHRpbmdfVHdpdHRlckFjY291bnQnXSAJPSAnVHdpdHRlciBjcmVkZW50aWFscyc7CgovLyBCVVRUT05TCiRsYW5nWydidXR0b25fYWRkc291cmNlJ10JPQknQWRkIHNvdXJjZSc7CiRsYW5nWydidXR0b25fYWRkZ3JvdXAnXQk9CSdBZGQgZ3JvdXAnOwokbGFuZ1snYnV0dG9uX2FkZHRlbXBsYXRlJ10JPQknQWRkIHRlbXBsYXRlJzsKCi8vIEhFTFAKJGxhbmdbJ2hlbHBfUmVmcmVzaEludGVydmFsJ10gPSAnSG93IG1hbnkgc2Vjb25kcyBzaG91bGQgaGF2ZSBwYXNzZWQgYmVmb3JlIGNvbnRlbnQgaXMgcmVmcmVzaGVkPyc7CiRsYW5nWydoZWxwX0V2ZXJ5TG9hZCddIAk9ICdUdXJuaW5nIHRoaXMgb24gd2lsbCBtYWtlIHR3ZWV0cyBiZSByZWZyZXNoZWQgd2hlbmV2ZXIgYW55IHBhZ2UgbG9hZCwgaW5zdGVhZCBvZiBqdXN0IHdoZW4gYSBwYWdlIGlzIGxvYWRlZCB0aGF0IHNob3dzIHRoZSBtb2R1bGUuIFRoZSByZWZyZXNoIGludGVydmFsIGlzIHN0aWxsIHRha2VuIGludG8gYWNjb3VudC4nOwokbGFuZ1snaGVscF9BcHBLZXknXSAJCT0gJ0NvbnN1bWVyIGtleSBvZiB5b3VyIFR3aXR0ZXIgYXBwLiBEbyBub3QgY2hhbmdlIHRoaXMgdmFsdWUgaWYgeW91IGRvIG5vdCBrbm93IHdoYXQgaXQgbWVhbnMuJzsKJGxhbmdbJ2hlbHBfQXBwU2VjcmV0J10gCT0gJ0NvbnN1bWVyIHNlY3JldCBvZiB5b3VyIFR3aXR0ZXIgYXBwLiBEbyBub3QgY2hhbmdlIHRoaXMgdmFsdWUgaWYgeW91IGRvIG5vdCBrbm93IHdoYXQgaXQgbWVhbnMuJzsKJGxhbmdbJ2hlbHBfdGVtcGxhdGVWYXJzJ10JPSAnCgk8cCBjbGFzcz0icGFnZXRleHQiPkF2YWlsYWJsZSB2YXJpYWJsZXM6PC9wPgoJJHR3ZWV0LklECQkJCToJSUQgb2YgdGhlIHR3ZWV0IGluIHRoZSBkYXRhYmFzZQoJJHR3ZWV0LlR3ZWV0SUQJCQk6CUlEIG9mIHRoZSB0d2VldCBvbiBUd2l0dGVyCgkkdHdlZXQuTWVzc2FnZQkJCToJUmF3IG1lc3NhZ2UKCSR0d2VldC5NZXNzYWdlX3BhcnNlZAk6CU1lc3NhZ2Ugd2hlcmUgcmVmZXJlbmNlcyB0byBhY2NvdW50cywgaGFzaHRhZ3MgYW5kIHVybHMgYXJlIGNvbnZlcnRlZCB0byBsaW5rcwkKCSR0d2VldC5BY3RpdmUJCQk6CVdoZXRoZXIgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3cgKGFsd2F5cyAxLCBvbmx5IGFjdGl2ZSBtZXNzYWdlcyBhcmUgcmV0dXJuZWQpCgkkdHdlZXQuc291cmNlSUQJCQk6CUlEIG9mIHRoZSBzb3VyY2UgdGhpcyB0d2VldCBjYW1lIGZyb20KCSR0d2VldC5EYXRlCQkJCToJRGF0ZSB0aGUgdHdlZXQgd2FzIHBvc3RlZAoJJHR3ZWV0LkRhdGVfcGFyc2VkCQk6CU1vbWVudCB0aGUgdHdlZXQgd2FzIHBvc3RlZC4gRm9yIGluc3RhbmNlIFwnMiB3ZWVrcyBhZ29cJwoJJHR3ZWV0LkxpbmsJCQkJOglMaW5rIHRvIHRoZSB0d2VldCBvbiBUd2l0dGVyCgkkdHdlZXQuVXNlcgkJCQk6CUFycmF5IG9mIGFsbCB1c2VyIGluZm8KCQkkdHdlZXQuVXNlci5JRAkJCToJSUQgb2YgdGhlIHVzZXIKCQkkdHdlZXQuVXNlci5Vc2VybmFtZQk6CVVzZXJuYW1lIG9mIHRoZSB1c2VyCgkJJHR3ZWV0LlVzZXIuQXZhdGFyCQk6CVR3aXR0ZXIgYXZhdGFyIG9mIHRoZSB1c2VyCgkJJHR3ZWV0LlVzZXIuQWN0aXZlCQk6CTEgPSBPSzsgMCA9IEJsYWNrbGlzdGVkCgkJJHR3ZWV0LlVzZXIuTGFzdFVwZGF0ZQk6CVdoZW4gdGhlIHVzZXIgd2FzIGxhc3QgdXBkYXRlZAonOwoKLy8gVEFCTUVTU0FHRVMKJGxhbmdbJ3RhYm1lc3NhZ2VfbWVzc2FnZV9hY3RpdmUwJ10JPSAiTWVzc2FnZSBzdWNjZXNzZnVsbHkgZGVhY3RpdmF0ZWQuIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfbWVzc2FnZV9hY3RpdmUxJ10JPSAiTWVzc2FnZSBzdWNjZXNzZnVsbHkgYWN0aXZhdGVkLiI7CiRsYW5nWyd0YWJtZXNzYWdlX3VzZXJfYWN0aXZlMCddCT0gIlVzZXIgc3VjY2Vzc2Z1bGx5IGRlYWN0aXZhdGVkLiI7CiRsYW5nWyd0YWJtZXNzYWdlX3VzZXJfYWN0aXZlMSddCT0gIlVzZXIgc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZC4iOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlMCddCT0gIlNvdXJjZSBzdWNjZXNzZnVsbHkgZGVhY3RpdmF0ZWQuIjsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc291cmNlX2FjdGl2ZTEnXQk9ICJTb3VyY2Ugc3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZC4iOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfZWRpdCddCQk9ICJTb3VyY2Ugc3VjY2Vzc2Z1bGx5IGVkaXRlZCI7CiRsYW5nWyd0YWJtZXNzYWdlX3NvdXJjZV9hZGQnXQkJPSAiU291cmNlIHN1Y2Nlc3NmdWxseSBhZGRlZCI7CiRsYW5nWyd0YWJtZXNzYWdlX2dyb3VwX2VkaXQnXQkJPSAiR3JvdXAgc3VjY2Vzc2Z1bGx5IGVkaXRlZCI7CiRsYW5nWyd0YWJtZXNzYWdlX2dyb3VwX2FkZCddCQk9ICJHcm91cCBzdWNjZXNzZnVsbHkgYWRkZWQiOwokbGFuZ1sndGFibWVzc2FnZV9ncm91cF9kZWxldGUnXQk9ICJHcm91cCBzdWNjZXNzZnVsbHkgZGVsZXRlZC4iOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfZGVsZXRlJ10JPSAiU291cmNlIHN1Y2Nlc3NmdWxseSBkZWxldGVkLiI7CiRsYW5nWyd0YWJtZXNzYWdlX3RlbXBsYXRlX2FkZCddCT0gIlRlbXBsYXRlIHN1Y2Nlc3NmdWxseSBhZGRlZC4iOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9lZGl0J10JPSAiVGVtcGxhdGUgc3VjY2Vzc2Z1bGx5IGVkaXRlZC4iOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWxldGUnXQk9ICJUZW1wbGF0ZSBzdWNjZXNzZnVsbHkgZGVsZXRlZC4iOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWZhdWx0J109ICJEZWZhdWx0IHRlbXBsYXRlIHN1Y2Nlc3NmdWxseSBlZGl0ZWQuIjsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc2V0dGluZ3NfY2hhbmdlZCddPSAiU2V0dGluZ3Mgc3VjY2Vzc2Z1bGx5IGVkaXRlZC4iOwokbGFuZ1sndGFibWVzc2FnZV9sb2dnZWRvdXQnXQkJPSAiU3VjY2VzZnVsbHkgbG9nZ2VkIG9mZi4gUGxlYXNlIG5vdGUgdHdlZXRzIGNhbiBub3QgYmUgZmV0Y2hlZCBub3cuIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfbG9nZ2VkaW4nXQkJPSAiU3VjZXNmdWxseSBsb2dnZWQgaW4uIjsKCi8vIElOUFVUIFRFWFRTCiRsYW5nWydpbnB1dF90ZXh0X1R5cGUnXQkJCT0gIlR5cGUiOwokbGFuZ1snaW5wdXRfdGV4dF9UaXRsZSddCQkJPSAiVGl0bGUiOwokbGFuZ1snaW5wdXRfdGV4dF9EYXRhJ10JCQk9ICJEYXRhIjsKJGxhbmdbJ2lucHV0X3RleHRfbmFtZSddCQkJPSAiTmFtZSI7CiRsYW5nWydpbnB1dF90ZXh0X2NvbnRlbnQnXQkJCT0gIkNvbnRlbnQiOwoKLy8gVHlwZXMKJGxhbmdbJ3R5cGVzX2FjY291bnQnXQkJCQk9ICJUd2l0dGVyIHByb2ZpbGUiOwokbGFuZ1sndHlwZXNfaGFzaHRhZyddCQkJCT0gIkhhc2h0YWciOwokbGFuZ1sndHlwZXNfc2VhcmNoJ10JCQkJPSAiU2VhcmNoIHRlcm0iOwoKLy8gRVJST1JTCiRsYW5nWydlcnJvcl9zb3VyY2VfZWRpdCddCQkJPSAiU29tZXRoaW5nIHdlbnQgd3JvbmcgdHJ5aW5nIHRvIGVkaXQgdGhlIHNvdXJjZS4iOwoKLy8gTk8gRk9VTkRTCiRsYW5nWydub3NvdXJjZXMnXQkJCQkJPSAiVGhlcmUgYXJlIG5vIHNvdXJjZXMgeWV0LiI7CiRsYW5nWydub2dyb3VwcyddCQkJCQk9ICJUaGVyZSBhcmUgbm8gZ3JvdXBzIHlldC4iOwokbGFuZ1snbm9tZXNzYWdlcyddCQkJCQk9ICJUaGVyZSBhcmUgbm8gbWVzc2FnZXMgeWV0LiI7CiRsYW5nWydub3VzZXJzJ10JCQkJCT0gIlRoZXJlIGFyZSBubyB1c2VycyB5ZXQuIjsKCi8vIEFMRVJUUwokbGFuZ1snZGVsZXRlZ3JvdXBjb25maXJtJ10JCQk9ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZ3JvdXA/IjsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlY29uZmlybSddCQk9ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdGVtcGxhdGU/IjsKJGxhbmdbJ2RlbGV0ZXNvdXJjZWNvbmZpcm0nXQkJPSAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHNvdXJjZT8iOwokbGFuZ1snbWVzc2FnZV9ub3RfYXV0aGVudGljYXRlZCddCT0gIllvdSBoYXZlIG5vdCB5ZXQgYXV0aGVudGljYXRlZCB5b3Vyc2VsZiB3aXRoIFR3aXR0ZXIuIFR3ZWV0cyBjYW4gbm90IGJlIGZldGNoZWQuIjsKCi8vIEFDVElPTlMKJGxhbmdbJ2FjdGl2YXRlJ10JCQk9CSdBY3RpdmF0ZSc7CiRsYW5nWydkZWFjdGl2YXRlJ10JCQk9CSdEZWFjdGl2YXRlJzsKJGxhbmdbJ3NlYXJjaHRleHQnXQkJCT0JJ1NlYXJjaCc7CiRsYW5nWydkYXRlZm9ybWF0J10JCQk9CSdZLW0tZCBIOmk6cyc7CgovLyBUSU1FCiRsYW5nWyd0aW1lX2xlc3NfaG91ciddCQk9CSdMZXNzIHRoYW4gYW4gaG91cic7CiRsYW5nWyd0aW1lX2FnbyddCQkJPQknYWdvJzsKJGxhbmdbJ3RpbWVfaG91ciddCQkJPQknaG91cic7CiRsYW5nWyd0aW1lX2hvdXJzJ10JCQk9CSdob3Vycyc7CiRsYW5nWyd0aW1lX2RheXMnXQkJCT0JJ2RheXMnOwokbGFuZ1sndGltZV9kYXknXQkJCT0JJ2RheSc7CiRsYW5nWyd0aW1lX21vbnRocyddCQk9CSdtb250aHMnOwokbGFuZ1sndGltZV9tb250aCddCQkJPQknbW9udGgnOwoKLy8gTU9EVUxFIEVYUExBTkFUSU9OCiRsYW5nWydwYXJhbWV0ZXJfZ3JvdXAnXQk9ICdJRCBvZiB0aGUgZ3JvdXAgdG8gc2hvdyB0d2VldHMgb2YuJzsKJGxhbmdbJ3BhcmFtZXRlcl9zb3VyY2UnXQk9ICdJRCBvZiB0aGUgc291cmNlL3NvdXJjZXMgdG8gc2hvdyB0d2VldHMgb2YsIHNlcGVyYXRlZCBieSBjb21tYXMuIEZvciBleGFtcGxlIHtCV1R3aXR0ZXIgc291cmNlPSIxLDMifSc7CiRsYW5nWydwYXJhbWV0ZXJfbGltaXQnXQk9ICc8ZW0+RGVmYXVsdDogMjA8L2VtPiAtIE51bWJlciBvZiB0d2VldHMgdG8gc2hvdy4nOwokbGFuZ1sncGFyYW1ldGVyX3RlbXBsYXRlJ10JPSAnVGVtcGxhdGUgdG8gYmUgdXNlZCB0byBzaG93IHRoZSB0d2VldHMuJzsKCgokbGFuZ1snaW5mbyddID0gJ1doYXRcJ3MgdGhpcz8nOwokbGFuZ1snaGVscCddID0gJwo8aDM+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvaDM+CjxwPgoJVGhlIGdvYWwgb2YgQldUd2l0dGVyIGlzIHRvIG1ha2Ugc2hvd2luZyB0d2VldHMgZnJvbSBkaWZmZXJlbnQgc291cmNlcyBhcyBlYXN5IGFzIHBvc3NpYmxlCglNdWx0aXBsZSBzb3VyY2VzIGNhbiBiZSBjcmVhdGVkICh1c2VyIHByb2ZpbGVzLCBoYXNodGFncywgc2VhcmNoIHRlcm1zKSBhbmQgZ3JvdXBlZC4KCVNvdXJjZXMgY2FuIGFsc28gYmUgY2FsbGVkIGluZGl2aWR1YWxseS4JCjwvcD4KPGgzPkhvdyBkbyBJIHVzZSBpdD88L2gzPgo8cD4KCUJXVHdpdHRlciBjYW4gYmUgdXNlZCB3aXRoIHRoZSA8c3Ryb25nPntCV1R3aXR0ZXJ9PC9zdHJvbmc+IHRhZyBpbiBldmVyeSBwYWdlIG9yIHRlbXBsYXRlLiBZb3UgY2FuIGVpdGhlciBzaG93IGEgZ3JvdXAgb2Ygc291cmNlcyBvciBjYWxsIHNvdXJjZXMgaW5kaXZpZHVhbGx5LiAoU2VlIHBhcmFtZXRlcnMpCjwvcD4KPGgzPkhvdyBkb2VzIGl0IHdvcms/PC9oMz4KPHA+CglCeSBkZWZhdWx0IHRoZSBkYXRhYmFzZSB3aXRoIHR3ZWV0cyBpcyByZWZyZXNoZWQgd2hlbiB0aGUge0JXVHdpdHRlcn0gdGFnIGlzIGNhbGxlZCBvbiBhIHBhZ2UuCglJZiBhIHNwZWNpZmljIGdyb3VwIG9yIHNvdXJjZSBpcyBnaXZlbiBhcyBhIHBhcmFtZXRlciwgb25seSB0aG9zZSBzb3VyY2VzIHdpbGwgYmUgcmVmcmVzaGVkIHRvIGtlZXAgbG9hZGluZyB0aW1lIGFzIGxvdyBhcyBwb3NzaWJsZS4KCVlvdSBjYW4gbGV0IHRoZSBkYXRhYmFzZSBiZSByZWZyZXNoZWQsIGV2ZW4gd2hlbiB0aGUgdGFnIGlzIG5vdCBjYWxsZWQgb24gYSBwYWdlLCBvbiB0aGUgc2V0dGluZ3MgdGFiLgoJWW91IGNhbiBhbHNvIHNldCB0aGUgdGltZSB0aGF0IHNob3VsZCBoYXZlIHBhc3NlZCBiZWZvcmUgYSBzb3VyY2UgaXMgcmVmcmVzaGVkLiBXZSByZWNvbW1lbmQgc2V0dGluZ3MgdGhpcyBhdCA1IG1pbnV0ZXMgKDMwMCBzZWNvbmRzKSB0byBrZWVwIGxvYWRpbmcgdGltZSBhcyBsb3cgYXMgcG9zc2libGUgYW5kIHRvIG5vdCBleGNlZWQgdGhlIG1heGl1bSBhbW91bnQgb2YgcmVxdWVzdHMgdG8gVHdpdHRlci4KPC9wPgo8aDM+VXNlcnM8L2gzPgo8cD4KCUlmIHlvdSBkb25cJ3Qgd2FudCB0byBzaG93IHR3ZWV0cyBmcm9tIGEgc3BlY2lmaWMgdXNlciB5b3UgY2FuIHNlYXJjaCBmb3IgdGhlIHVzZXIgaW4gdGhlIHVzZXJzIHRhYiBhbmQgZGVhY3RpdmF0ZSB0aGUgdXNlci4KCVR3ZWV0cyBmcm9tIHRoaXMgdXNlciB3b25cJ3QgYmUgc2F2ZWQgaW4gdGhlIGRhdGFiYXNlIGFuZCB3b25cJ3QgYmUgc2hvd24gaWYgZGVhY3RpdmF0ZWQuCQo8L3A+Cic7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0JXVHdpdHRlcic7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ01vZHVsZSB2b29yIGhldCB0b25lbiB2YW4gdHdlZXRzLCBnZWJhc2VlcmQgb3AgYWNjb3VudCwgaGFzaHRhZyBvZiB6b2VrdGVybS4nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdCV1R3aXR0ZXIgaXMgZ2VpbnN0YWxsZWVyZC4nOwoKLy8gVEFCUwokbGFuZ1sndGFiX21lc3NhZ2VzJ10JCT0JJ0JlcmljaHRlbic7CiRsYW5nWyd0YWJfdXNlcnMnXQkJCT0JJ0dlYnJ1aWtlcnMnOwokbGFuZ1sndGFiX3NvdXJjZXMnXQkJPQknQnJvbm5lbic7CiRsYW5nWyd0YWJfZ3JvdXBzJ10JCQk9CSdHcm9lcGVuJzsKJGxhbmdbJ3RhYl9zZXR0aW5ncyddCQk9CSdJbnN0ZWxsaW5nZW4nOwokbGFuZ1sndGFiX3RlbXBsYXRlcyddCQk9CSdTamFibG9uZW4nOwoKLy8gSEVBREVSUwokbGFuZ1snaGVhZGVyX01lc3NhZ2UnXQkJPQknQmVyaWNodCc7CiRsYW5nWydoZWFkZXJfVXNlcm5hbWUnXQk9CSdHZWJydWlrZXInOwokbGFuZ1snaGVhZGVyX0RhdGUnXQkJPQknRGF0dW0nOwokbGFuZ1snaGVhZGVyX0xhc3RVcGRhdGUnXQk9CSdMYWF0c3QgYmlqZ2V3ZXJrdCc7CiRsYW5nWydoZWFkZXJfVGl0bGUnXQkJPQknVGl0ZWwnOwokbGFuZ1snaGVhZGVyX1R5cGUnXQkJPQknVHlwZSc7CiRsYW5nWydoZWFkZXJfRGF0ZUNyZWF0ZWQnXQk9CSdEYXR1bSBhYW5nZW1hYWt0JzsKJGxhbmdbJ2hlYWRlcl9Tb3VyY2UnXQkJPQknQnJvbic7CiRsYW5nWydoZWFkZXJfRGVmYXVsdCddCQk9CSdTdGFuZGFhcmQnOwokbGFuZ1snaGVhZGVyX0lEJ10JCQk9CSdJRCc7CiRsYW5nWydoZWFkZXJfU291cmNlVGl0bGUnXQk9CSdCcm9uJzsKCi8vIFNFVFRJTkdTCiRsYW5nWydzZXR0aW5nX1JlZnJlc2hJbnRlcnZhbCddID0gJ1Zlcm5pZXV3aW5nc2ludGVydmFsIChpbiBzZWNvbmRlbiknOwokbGFuZ1snc2V0dGluZ19FdmVyeUxvYWQnXSAJPSAnRWxrZSBrZWVyIHZlcm5pZXV3ZW4gYWxzIGVlbiBwYWdpbmEgZ2VsYWRlbiB3b3JkdCc7CiRsYW5nWydzZXR0aW5nX0FwcEtleSddIAk9ICdDb25zdW1lciBrZXkgdmFuIGplIHR3aXR0ZXIgYXBwbGljYXRpb24nOwokbGFuZ1snc2V0dGluZ19BcHBTZWNyZXQnXSAJPSAnQ29uc3VtZXIgc2VjcmV0IHZhbiBqZSB0d2l0dGVyIGFwcGxpY2F0aW9uJzsKJGxhbmdbJ3NldHRpbmdfTG9nZ2VkaW4nXSAJPSAnSW5nZWxvZ2QgYWxzOiAnOwokbGFuZ1snc2V0dGluZ19TaWduSW4nXSAJPSAnTG9nIGluIGJpaiBUd2l0dGVyJzsKJGxhbmdbJ3NldHRpbmdfUmV2b2tlJ10gCT0gJ0xvZyB1aXQgYmlqIFR3aXR0ZXInOwokbGFuZ1snc2V0dGluZ19Ud2l0dGVyQWNjb3VudCddIAk9ICdUd2l0dGVyIGFjY291bnQnOwoKLy8gQlVUVE9OUwokbGFuZ1snYnV0dG9uX2FkZHNvdXJjZSddCT0JJ0Jyb24gdG9ldm9lZ2VuJzsKJGxhbmdbJ2J1dHRvbl9hZGRncm91cCddCT0JJ0dyb2VwIHRvZXZvZWdlbic7CiRsYW5nWydidXR0b25fYWRkdGVtcGxhdGUnXQk9CSdTamFibG9vbiB0b2V2b2VnZW4nOwoKLy8gSEVMUAokbGFuZ1snaGVscF9SZWZyZXNoSW50ZXJ2YWwnXSA9ICdIb2V2ZWVsIHRpamQgbW9ldCBlciB0ZW5taW5zdGUgdmVyc3RyZWtlbiB6aWpuIHZvb3JkYXQgaW5mb3JtYXRpZSB2ZXJuaWV1d2QgbW9ldCB3b3JkZW4/JzsKJGxhbmdbJ2hlbHBfRXZlcnlMb2FkJ10gCT0gJ0FscyB1IGRpdCBpbnNjaGFrZWx0IHp1bGxlbiB0d2VldHMgZWxrZSBrZWVyIHZlcnZlcnN0IHdvcmRlbiBhbHMgZWVuIHBhZ2luYSBnZWxhZGVuIHdvcmR0LCBpbiBwbGFhdHMgdmFuIGVua2VsIG9wIHBhZ2luYVwncyB3YWFyIGRlIG1vZHVsZSBnZWJydWlrdCB3b3JkdC4gRGUgdmVybmlldXdzaW50ZXJ2YWwgd29yZHQgbm9nIHN0ZWVkcyBnZWhhbnRlZXJkLic7CiRsYW5nWydoZWxwX0FwcEtleSddIAkJPSAnQ29uc3VtZXIga2V5IHZhbiBqZSBUd2l0dGVyIGFwcC4gTGFhdCBkZXplIHdhYXJkZSBvbmdld2lqemlnZCBhbHMgamUgbmlldCB3ZWV0IHdhdCBoZXQgYmV0ZWtlbnQuJzsKJGxhbmdbJ2hlbHBfQXBwU2VjcmV0J10gCT0gJ0NvbnN1bWVyIHNlY3JldCB2YW4gamUgVHdpdHRlciBhcHAuIExhYXQgZGV6ZSB3YWFyZGUgb25nZXdpanppZ2QgYWxzIGplIG5pZXQgd2VldCB3YXQgaGV0IGJldGVrZW50Lic7CgokbGFuZ1snaGVscF90ZW1wbGF0ZVZhcnMnXQk9ICcKCTxwIGNsYXNzPSJwYWdldGV4dCI+QmVzY2hpa2JhcmUgdmFyaWFiZWxlbjwvcD4KCSR0d2VldC5JRAkJCQk6CUlEIHZhbiBkZSB0d2VldCBpbiBkZSBkYXRhYmFzZQoJJHR3ZWV0LlR3ZWV0SUQJCQk6CUlEIHZhbiBkZSB0d2VldCBvcCB0d2l0dGVyCgkkdHdlZXQuTWVzc2FnZQkJCToJVHdlZXQgem9uZGVyIGJld2Vya2luZwoJJHR3ZWV0Lk1lc3NhZ2VfcGFyc2VkCToJVHdlZXQsIHdhYXJpbiB2ZXJ3aWp6aW5nZW4gbmFhciBhY2NvdW50cywgaGFzaHRhZ3MgZW4gdXJsXCdzIHppam4gb21nZXpldCBuYWFyIGxpbmtzCQoJJHR3ZWV0LkFjdGl2ZQkJCToJT2YgZGUgdHdlZXQgZ2V0b29uZCBtb2V0IHdvcmRlbiAoQWx0aWpkIDEsIHdhbnQgYWxsZWVuIGFjdGlldmUgYmVyaWNodGVuIGtvbWVuIGluIGRlIHR3ZWV0bGlqc3QpCgkkdHdlZXQuc291cmNlSUQJCQk6CUlEIHZhbiBkZSBicm9uIHdhYXJ1aXQgZGUgdHdlZXQga29tdAoJJHR3ZWV0LkRhdGUJCQkJOglEYXR1bSBkYXQgZGUgdHdlZXQgZ2VwbGFhdHN0IHdlcmQKCSR0d2VldC5EYXRlX3BhcnNlZAkJOglNb21lbnQgZGF0IGRlIHR3ZWV0IGdlcGxhYXRzdCB3ZXJkLiBCaWp2b29yYmVlbGQgXCcyIHdla2VuIGdlbGVkZW5cJwoJJHR3ZWV0LkxpbmsJCQkJOglMaW5rIG5hYXIgZGUgdHdlZXQgb3AgVHdpdHRlcgoJJHR3ZWV0LlVzZXIJCQkJOglBcnJheSBtZXQgYWxsZSBnZWJydWlrZXJzaW5mbwoJCSR0d2VldC5Vc2VyLklECQkJOglJRCB2YW4gZGUgZ2VicnVpa2VyCgkJJHR3ZWV0LlVzZXIuVXNlcm5hbWUJOglHZWJydWlrZXJzbmFhbSB2YW4gZGUgZ2VicnVpa2VyCgkJJHR3ZWV0LlVzZXIuQXZhdGFyCQk6CVR3aXR0ZXIgYXZhdGFyIHZhbiBkZSBnZWJydWlrZXIKCQkkdHdlZXQuVXNlci5BY3RpdmUJCToJMSA9IE9LOyAwID0gQmxhY2tsaXN0ZWQKCQkkdHdlZXQuVXNlci5MYXN0VXBkYXRlCToJV2FubmVlciBkZSBnZWJydWlrZXIgdm9vciBoZXQgbGFhdHN0IHdlcmQgYmlqZ2V3ZXJrdAonOwoKLy8gVEFCTUVTU0FHRVMKJGxhbmdbJ3RhYm1lc3NhZ2VfbWVzc2FnZV9hY3RpdmUwJ10JPSAiQmVyaWNodCBzdWNjZXN2b2wgZ2VkZWFjdGl2ZWVyZC4iOwokbGFuZ1sndGFibWVzc2FnZV9tZXNzYWdlX2FjdGl2ZTEnXQk9ICJCZXJpY2h0IHN1Y2Nlc3ZvbCBnZWFjdGl2ZWVyZC4iOwokbGFuZ1sndGFibWVzc2FnZV91c2VyX2FjdGl2ZTAnXQk9ICJHZWJydWlrZXIgc3VjY2Vzdm9sIGdlZGVhY3RpdmVlcmQuIjsKJGxhbmdbJ3RhYm1lc3NhZ2VfdXNlcl9hY3RpdmUxJ10JPSAiR2VicnVpa2VyIHN1Y2Nlc3ZvbCBnZWFjdGl2ZWVyZC4iOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWN0aXZlMCddCT0gIkJyb24gc3VjY2Vzdm9sIGdlZGVhY3RpdmVlcmQuIjsKJGxhbmdbJ3RhYm1lc3NhZ2Vfc291cmNlX2FjdGl2ZTEnXQk9ICJCcm9uIHN1Y2Nlc3ZvbCBnZWFjdGl2ZWVyZC4iOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfZWRpdCddCQk9ICJCcm9uIHN1Y2Nlc3ZvbCBnZXdpanppZ2QiOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfYWRkJ10JCT0gIkJyb24gc3VjY2Vzdm9sIHRvZWdldm9lZ2QiOwokbGFuZ1sndGFibWVzc2FnZV9ncm91cF9lZGl0J10JCT0gIkdyb2VwIHN1Y2Nlc3ZvbCBnZXdpanppZ2QiOwokbGFuZ1sndGFibWVzc2FnZV9ncm91cF9hZGQnXQkJPSAiR3JvZXAgc3VjY2Vzdm9sIHRvZWdldm9lZ2QiOwokbGFuZ1sndGFibWVzc2FnZV9ncm91cF9kZWxldGUnXQk9ICJHcm9lcCBzdWNjZXN2b2wgdmVyd2lqZGVyZC4iOwokbGFuZ1sndGFibWVzc2FnZV9zb3VyY2VfZGVsZXRlJ10JPSAiQnJvbiBzdWNjZXN2b2wgdmVyd2lqZGVyZC4iOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9hZGQnXQk9ICJTamFibG9vbiBzdWNjZXN2b2wgdG9lZ2V2b2VnZC4iOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9lZGl0J10JPSAiU2phYmxvb24gc3VjY2Vzdm9sIGdld2lqemlnZC4iOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWxldGUnXQk9ICJTamFibG9vbiBzdWNjZXN2b2wgdmVyd2lqZGVyZC4iOwokbGFuZ1sndGFibWVzc2FnZV90ZW1wbGF0ZV9kZWZhdWx0J109ICJTdGFuZGFhcmQgc2phYmxvb24gc3VjY2Vzdm9sIGdld2lqemlnZC4iOwokbGFuZ1sndGFibWVzc2FnZV9zZXR0aW5nc19jaGFuZ2VkJ109ICJJbnN0ZWxsaW5nZW4gc3VjY2Vzdm9sIGdld2lqemlnZC4iOwokbGFuZ1sndGFibWVzc2FnZV9sb2dnZWRvdXQnXQkJPSAiU3VjY2Vzdm9sIHVpdGdlbG9nZC4gVHdlZXRzIGt1bm5lbiBuaWV0IG1lZXIgd29yZGVuIG9wZ2VoYWFsZC4iOwokbGFuZ1sndGFibWVzc2FnZV9sb2dnZWRpbiddCQk9ICJTdWNjZXN2b2wgaW5nZWxvZ2QuIjsKCi8vIElOUFVUIFRFWFRTCiRsYW5nWydpbnB1dF90ZXh0X1R5cGUnXQkJCT0gIlR5cGUiOwokbGFuZ1snaW5wdXRfdGV4dF9UaXRsZSddCQkJPSAiVGl0ZWwiOwokbGFuZ1snaW5wdXRfdGV4dF9EYXRhJ10JCQk9ICJEYXRhIjsKJGxhbmdbJ2lucHV0X3RleHRfbmFtZSddCQkJPSAiTmFhbSI7CiRsYW5nWydpbnB1dF90ZXh0X2NvbnRlbnQnXQkJCT0gIkluaG91ZCI7CgovLyBUeXBlcwokbGFuZ1sndHlwZXNfYWNjb3VudCddCQkJCT0gIlR3aXR0ZXJwcm9maWVsIjsKJGxhbmdbJ3R5cGVzX2hhc2h0YWcnXQkJCQk9ICJCZXBhYWxkZSBoYXNodGFnIjsKJGxhbmdbJ3R5cGVzX3NlYXJjaCddCQkJCT0gIkJlcGFhbGRlIHpvZWt0ZXJtIjsKCi8vIEVSUk9SUwokbGFuZ1snZXJyb3Jfc291cmNlX2VkaXQnXQkJCT0gIkVyIGdpbmcgaWV0cyBtaXMgYmlqIGhldCB3aWp6aWdlbiB2YW4gZGUgYnJvbi4iOwoKLy8gTk8gRk9VTkRTCiRsYW5nWydub3NvdXJjZXMnXQkJCQkJPSAiRXIgemlqbiBub2cgZ2VlbiBicm9ubmVuIGFhbmdlbWFha3QuIjsKJGxhbmdbJ25vZ3JvdXBzJ10JCQkJCT0gIkVyIHppam4gbm9nIGdlZW4gZ3JvZXBlbiBhYW5nZW1hYWt0LiI7CiRsYW5nWydub21lc3NhZ2VzJ10JCQkJCT0gIkVyIHppam4gbm9nIGdlZW4gYmVyaWNodGVuLiI7CiRsYW5nWydub3VzZXJzJ10JCQkJCT0gIkVyIHppam4gbm9nIGdlZW4gZ2VicnVpa2Vycy4iOwoKLy8gQUxFUlRTCiRsYW5nWydkZWxldGVncm91cGNvbmZpcm0nXQkJCT0gIldlZXQgdSB6ZWtlciBkYXQgdSBkZXplIGdyb2VwIHdpbHQgdmVyd2lqZGVyZW4/IjsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlY29uZmlybSddCQk9ICJXZWV0IHUgemVrZXIgZGF0IHUgZGl0IHNqYWJsb29uIHdpbHQgdmVyd2lqZGVyZW4/IjsKJGxhbmdbJ2RlbGV0ZXNvdXJjZWNvbmZpcm0nXQkJPSAiV2VldCB1IHpla2VyIGRhdCB1IGRpdCBzamFibG9vbiB3aWx0IHZlcndpamRlcmVuPyI7CiRsYW5nWydtZXNzYWdlX25vdF9hdXRoZW50aWNhdGVkJ10JPSAiVSBoZWVmdCB6aWNoIG5vZyBuaWV0IGdlYXV0b3Jpc2VlcmQgYmlqIFR3aXR0ZXIuIEVyIGt1bm5lbiBnZWVuIHR3ZWV0cyBvcGdlaGFhbGQgd29yZGVuLiI7CgovLyBBQ1RJT05TCiRsYW5nWydhY3RpdmF0ZSddCQkJPQknQWN0aXZlZXInOwokbGFuZ1snZGVhY3RpdmF0ZSddCQkJPQknRGVhY3RpdmVlcic7CiRsYW5nWydzZWFyY2h0ZXh0J10JCQk9CSdab2VrZW4nOwokbGFuZ1snZGF0ZWZvcm1hdCddCQkJPQknZC1tLVkgSDppOnMnOwoKLy8gVElNRQokbGFuZ1sndGltZV9sZXNzX2hvdXInXQkJPQknTWluZGVyIGRhbiBlZW4gdXVyJzsKJGxhbmdbJ3RpbWVfYWdvJ10JCQk9CSdnZWxlZGVuJzsKJGxhbmdbJ3RpbWVfaG91ciddCQkJPQkndXVyJzsKJGxhbmdbJ3RpbWVfaG91cnMnXQkJCT0JJ3V1cic7CiRsYW5nWyd0aW1lX2RheXMnXQkJCT0JJ2RhZ2VuJzsKJGxhbmdbJ3RpbWVfZGF5J10JCQk9CSdkYWcnOwokbGFuZ1sndGltZV9tb250aHMnXQkJPQknbWFhbmRlbic7CiRsYW5nWyd0aW1lX21vbnRoJ10JCQk9CSdtYWFuZCc7CgovLyBNT0RVTEUgRVhQTEFOQVRJT04KJGxhbmdbJ3BhcmFtZXRlcl9ncm91cCddCT0gJ0lEIHZhbiBkZSBncm9lcCB3YWFydmFuIGRlIHR3ZWV0cyBnZXRvb25kIG1vZXRlbiB3b3JkZW4uJzsKJGxhbmdbJ3BhcmFtZXRlcl9zb3VyY2UnXQk9ICdJRCB2YW4gZGUgYnJvbi9icm9ubmVuIGRpZSBnZXRvb25kIG1vZXQoZW4pIHdvcmRlbiwgZ2VzY2hlaWRlbiBkb29yIGNvbW1hXCdzLiBCaWp2b29yYmVlbGQge0JXVHdpdHRlciBzb3VyY2U9IjEsMyJ9JzsKJGxhbmdbJ3BhcmFtZXRlcl9saW1pdCddCT0gJzxlbT5TdGFuZGFhcmQ6IDIwPC9lbT4gLSBBYW50YWwgdHdlZXRzIGRhdCBnZXRvb25kIG1vZXQgd29yZGVuLic7CiRsYW5nWydwYXJhbWV0ZXJfdGVtcGxhdGUnXQk9ICdTamFibG9vbiBkYXQgZ2VicnVpa3QgbW9ldCB3b3JkZW4gb20gZGUgdHdlZXRzIHRlIHRvbmVuLic7CgokbGFuZ1snaW5mbyddID0gJ1doYXRcJ3MgdGhpcz8nOwokbGFuZ1snaGVscCddID0gJwo8aDM+V2F0IGRvZXQgZGV6ZSBtb2R1bGU/PC9oMz4KPHA+CglIZXQgZG9lbCB2YW4gZGUgQldUd2l0dGVyIG1vZHVsZSBpcyBoZXQgem8gbWFra2VsaWprIG1vZ2VsaWprIG1ha2VuIHZhbiBoZXQgdG9uZW4gdmFuIHR3ZWV0cyB2YW4gdmVyc2NoaWxsZW5kZSBicm9ubmVuLgoJRXIga3VubmVuIG1lZXJkZXJlIGJyb25uZW4gYWFuZ2VtYWFrdCB3b3JkZW4gKHR3aXR0ZXIgcHJvZmllbGVuLCB6b2VrdGVybWVuIGVuIGhhc2h0YWdzKSBlbiBkZXplIGt1bm5lbiBzYW1lbmdldm9lZ2Qgd29yZGVuIGRvb3IgZWVuIGdyb2VwIGFhbiB0ZSBtYWtlbiBtZXQgZGUgZ2V3ZW5zdGUgYnJvbm5lbi4KCUJyb25uZW4ga3VubmVuIG9vayBhcGFydCB3b3JkZW4gYWFuZ2Vyb2VwZW4uCjwvcD4KPGgzPkhvZSBnZWJydWlrIGlrIGhldD88L2gzPgo8cD4KCVZvb3JkYXQgamUgZGUgQldUd2l0dGVyIG1vZHVsZSBrdW50IGdlYnJ1aWtlbiwgZGllbiBqZSBqZSB0ZSBhdXRvcmlzZXJlbiBiaWogVHdpdHRlci4gRGl0IGRvZSBqZSBkb29yIGJpaiBoZXQgaW5zdGVsbGluZ2VudGFiYmxhZCBvcCAiTG9nIGluIGJpaiBUd2l0dGVyIiB0ZSBrbGlra2VuIGVuIHZlcnZvbGdlbnMgb3AgIlNpZ24gaW4iLjxici8+CglEZSBCV1R3aXR0ZXIgbW9kdWxlIGthbiB3b3JkZW4gYWFuZ2Vyb2VwZW4gbWV0IDxzdHJvbmc+e0JXVHdpdHRlcn08L3N0cm9uZz4gaW4gaWVkZXJlIHBhZ2luYSBvZiBzamFibG9vbi4gRXIga2FuIGVlbiBncm9lcCBhYW5nZWdldmVuIHdvcmRlbiBvbSB0ZSB0b25lbiwgb2YgZXIga3VubmVuIG1lZXJkZXJlIGJyb25uZW4gbG9zIGFhbmdlcm9lcGVuIHdvcmRlbi4gKFppZSBwYXJhbWV0ZXJzKQo8L3A+CjxoMz5Ib2Ugd2Vya3QgaGV0PzwvaDM+CjxwPgoJU3RhbmRhYXJkIHdvcmR0IGRlIGRhdGFiYXNlIG1ldCB0d2VldHMgdmVydmVyc3Qgd2FubmVlciBkZSB7QldUd2l0dGVyfSB0YWcgb3AgZWVuIHBhZ2luYSB3b3JkdCBhYW5nZXJvZXBlbi4gCglBbHMgZXIgZWVuIHNwZWNpZmlla2UgZ3JvZXAgb2YgYnJvbiBpcyBhYW5nZWdldmVuIG1ldCBvbmRlcnN0YWFuZGUgcGFyYW1ldGVycywgenVsbGVuIGFsbGVlbiBkaWUgYnJvbm5lbiB2ZXJ2ZXJzdCB3b3JkZW4gb20gZGUgbGFhZHRpamQgem8gbGFhZyBtb2dlbGlqayB0ZSBob3VkZW4uCQoJQmlqIGRlIG1vZHVsZSBpbnN0ZWxsaW5nZW4ga3VudCB1IGFhbmdldmVuIGRhdCBkZSBkYXRhYmFzZSBtZXQgdHdlZXRzIG9vayB2ZXJ2ZXJzdCBtb2V0IHdvcmRlbiB3YW5uZWVyIGRlIHtCV1R3aXR0ZXJ9IHRhZyBuaWV0IHZvb3Jrb210IG9wIGVlbiBwYWdpbmEuCglWZXJkZXIga3VudCB1IGJpaiBkZSBtb2R1bGUgaW5zdGVsbGluZ2VuIGFhbmdldmVuIGhvZXZlZWwgdGlqZCBlciB2ZXJzdHJla2VuIG1vZXQgemlqbiB2b29yZGF0IGVlbiBicm9uIG9wbmlldXcgdmVydmVyc3Qgd29yZHQuCglBYW4gdGUgcmFkZW4gaXMgb20gZGl0IGVlbnMgaW4gZGUgNSBtaW51dGVuIHRlIGRvZW4sIG9tIGRlIGxhYWR0aWpkIHpvIGxhYWcgbW9nZWxpamsgdGUgaG91ZGVuIGVuIGRlIGxpbWlldCBhYW4gaGV0IGFhbnRhbCB2ZXJ6b2VramVzIGFhbiBUd2l0dGVyIG5pZXQgdGUgb3ZlcnNjaHJpamRlbi4KPC9wPgo8aDM+R2VicnVpa2VyczwvaDM+CjxwPgoJV2FubmVlciB1IHR3ZWV0cyB2YW4gZWVuIGJlcGFhbGRlIGdlYnJ1aWtlciBuaWV0IHdpbHQgdG9uZW4ga3VudCB1IGRlemUgZ2VicnVpa2VyIG9wem9la2VuIGluIGRlIGdlYnJ1aWtlcnN0YWIgZW4gZGV6ZSBnZWJydWlrZXIgZGVhY3RpdmVyZW4uCglUd2VldHMgdmFuIGRlemUgZ2VicnVpa2VyIHp1bGxlbiBkYW4gbmlldCBtZWVyIHdvcmRlbiBvcGdlaGFhbGQgZW4genVsbGVuIG5pZXQgZ2V0b29uZCB3b3JkZW4uCjwvcD4KJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/BWTwitter.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3RhYmxlY29udGFpbmVyIHsKCXdpZHRoOiA2MDBweDsKfQoKI3RhYmxlY29udGFpbmVyIC5wYWdldGFibGUgaW5wdXQuY21zX3RleHRmaWVsZCwgI3RhYmxlY29udGFpbmVyIC5wYWdldGFibGUgc2VsZWN0IHsKCXdpZHRoOiAzMDBweDsKfQoKLnRhYmNvbnRlbnQgLnBhZ2luZyB7CglsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CglsaXN0LXN0eWxlLWltYWdlOiBub25lOwoJcGFkZGluZzogMDsKCW1hcmdpbjogMCAhaW1wb3J0YW50Owp9CgoudGFiY29udGVudCAucGFnaW5nIGxpIHsKCWZsb2F0OiBsZWZ0OwoJbWFyZ2luOiAwIDJweCAwIDA7CQoJYmFja2dyb3VuZDogI0RERERERDsJCglkaXNwbGF5OiBibG9jazsKfQoKLnRhYmNvbnRlbnQgLnBhZ2luZyBsaSBhLC50YWJjb250ZW50IC5wYWdpbmcgbGkgc3BhbiB7CglwYWRkaW5nOiA2cHggMTJweDsKCWRpc3BsYXk6IGJsb2NrOwp9CgoKLnRhYmNvbnRlbnQgLnBhZ2luZyBsaS5hY3RpdmUgewoJZm9udC13ZWlnaHQ6IGJvbGQ7Cgl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLmNsZWFyIHsKCWNsZWFyOiBib3RoOwp9CgoucG9zdHVybCB7CglkaXNwbGF5OiBub25lOwp9Cgouc2VhcmNoIHsKCW1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCiNid3R3aXR0ZXIgYS5zaWduaW4sI2J3dHdpdHRlciBhLnNpZ25pbjpob3ZlciB7CglkaXNwbGF5OiBibG9jazsKCXdpZHRoOiAxMjBweDsKCWhlaWdodDogMTZweDsKCWJhY2tncm91bmQ6IHVybCgnLi4vc2lnbmluLnBuZycpIG5vLXJlcGVhdCAwIDA7Cgljb2xvcjogIzRiODBhOTsKCXRleHQtc2hhZG93OiAwcHggMXB4ICNkYmQyZDI7CglwYWRkaW5nOiA2cHggMCAwIDMwcHg7Cglmb250LXNpemU6IDEycHg7CglsaW5lLWhlaWdodDogMTJweDsKCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKI2J3dHdpdHRlciBhLnNpZ25vdXQsI2J3dHdpdHRlciBhLnNpZ25vdXQ6aG92ZXIgewoJZGlzcGxheTogYmxvY2s7Cgl3aWR0aDogMTIwcHg7CgloZWlnaHQ6IDE2cHg7CgliYWNrZ3JvdW5kOiB1cmwoJy4uL3NpZ25pbi5wbmcnKSBuby1yZXBlYXQgMCAtMjJweDsKCWNvbG9yOiAjYWIwMDAwOwoJdGV4dC1zaGFkb3c6IDBweCAxcHggI2RiZDJkMjsKCXBhZGRpbmc6IDZweCAwIDAgMzBweDsKCWZvbnQtc2l6ZTogMTJweDsKCWxpbmUtaGVpZ2h0OiAxMnB4OwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgojYnd0d2l0dGVyIGEuc2lnbm91dDpob3ZlciwgI2J3dHdpdHRlciBhLnNpZ25pbjpob3ZlciB7Cgl0ZXh0LXNoYWRvdzogMHB4IDFweCAjYWZhNWE1Owp9CgojYnd0d2l0dGVyIC5wYWdldGV4dCwgI2J3dHdpdHRlciAucGFnZWlucHV0IHsKCW1hcmdpbi1sZWZ0OiAwOwp9]]></data>
	</file>
	<file>
	  <filename>/lib/css/jquery.tooltip.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3Rvb2x0aXAgewoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDogMTAwMDsKCWJvcmRlcjogMXB4IHNvbGlkICMwMDA7CgliYWNrZ3JvdW5kLWNvbG9yOiAjREREOwoJcGFkZGluZzogNXB4OwoJb3BhY2l0eTogMC44NTsKfQojdG9vbHRpcCBoMywgI3Rvb2x0aXAgZGl2IHsgbWFyZ2luOiAwOyBmb250LXNpemU6IDlwdDsgY29sb3I6ICM1ODU4NTg7fQo=]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/BWTwitter.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ2hlY2sgaWYgSlF1ZXJ5IGV4aXN0cywgbWFrZSBpdCBpZiBub3QNCmlmICh0eXBlb2YgalF1ZXJ5ID09PSAidW5kZWZpbmVkIikgeyANCgkvKiEgalF1ZXJ5IHYxLjcuMSBqcXVlcnkuY29tIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovDQoJKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY3koYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjdihhKXtpZighY2tbYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NsfHwoY2w9Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjbC5mcmFtZUJvcmRlcj1jbC53aWR0aD1jbC5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjbCk7aWYoIWNtfHwhY2wuY3JlYXRlRWxlbWVudCljbT0oY2wuY29udGVudFdpbmRvd3x8Y2wuY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjbS53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY20uY2xvc2UoKTtkPWNtLmNyZWF0ZUVsZW1lbnQoYSksY20uYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNsKX1ja1thXT1lfXJldHVybiBja1thXX1mdW5jdGlvbiBjdShhLGIpe3ZhciBjPXt9O2YuZWFjaChjcS5jb25jYXQuYXBwbHkoW10sY3Euc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjdCgpe2NyPWJ9ZnVuY3Rpb24gY3MoKXtzZXRUaW1lb3V0KGN0LDApO3JldHVybiBjcj1mLm5vdygpfWZ1bmN0aW9uIGNqKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2koKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2MoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNiKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gY2EoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkUudGVzdChhKT9kKGEsZSk6Y2EoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpY2EoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGJfKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gYiQoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJULGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9YiQoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9YiQoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJaKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlApLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiQyhhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J4OmJ5LGc9MCxoPWUubGVuZ3RoO2lmKGQ+MCl7aWYoYyE9PSJib3JkZXIiKWZvcig7ZzxoO2crKyljfHwoZC09cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitlW2ddKSl8fDApLGM9PT0ibWFyZ2luIj9kKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytlW2ddKSl8fDA6ZC09cGFyc2VGbG9hdChmLmNzcyhhLCJib3JkZXIiK2VbZ10rIldpZHRoIikpfHwwO3JldHVybiBkKyJweCJ9ZD1ieihhLGIsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXXx8MDtkPXBhcnNlRmxvYXQoZCl8fDA7aWYoYylmb3IoO2c8aDtnKyspZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitlW2ddKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIitlW2ddKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrZVtnXSkpfHwwKTtyZXR1cm4gZCsicHgifWZ1bmN0aW9uIGJwKGEsYil7Yi5zcmM/Zi5hamF4KHt1cmw6Yi5zcmMsYXN5bmM6ITEsZGF0YVR5cGU6InNjcmlwdCJ9KTpmLmdsb2JhbEV2YWwoKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKGJmLCIvKiQwKi8iKSksYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gYm8oYSl7dmFyIGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtiaC5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD1hLm91dGVySFRNTDtyZXR1cm4gYi5maXJzdENoaWxkfWZ1bmN0aW9uIGJuKGEpe3ZhciBiPShhLm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKTtiPT09ImlucHV0Ij9ibShhKTpiIT09InNjcmlwdCImJnR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIiYmZi5ncmVwKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksYm0pfWZ1bmN0aW9uIGJtKGEpe2lmKGEudHlwZT09PSJjaGVja2JveCJ8fGEudHlwZT09PSJyYWRpbyIpYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWR9ZnVuY3Rpb24gYmwoYSl7cmV0dXJuIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9InVuZGVmaW5lZCI/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gYmsoYSxiKXt2YXIgYztpZihiLm5vZGVUeXBlPT09MSl7Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0ZXMmJmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGM9PT0ib2JqZWN0IiliLm91dGVySFRNTD1hLm91dGVySFRNTDtlbHNlIGlmKGMhPT0iaW5wdXQifHxhLnR5cGUhPT0iY2hlY2tib3giJiZhLnR5cGUhPT0icmFkaW8iKXtpZihjPT09Im9wdGlvbiIpYi5zZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDtlbHNlIGlmKGM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIiliLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZX1lbHNlIGEuY2hlY2tlZCYmKGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCksYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFsdWUpO2IucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyl9fWZ1bmN0aW9uIGJqKGEsYil7aWYoYi5ub2RlVHlwZT09PTEmJiEhZi5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZz1mLl9kYXRhKGEpLGg9Zi5fZGF0YShiLGcpLGk9Zy5ldmVudHM7aWYoaSl7ZGVsZXRlIGguaGFuZGxlLGguZXZlbnRzPXt9O2ZvcihjIGluIGkpZm9yKGQ9MCxlPWlbY10ubGVuZ3RoO2Q8ZTtkKyspZi5ldmVudC5hZGQoYixjKyhpW2NdW2RdLm5hbWVzcGFjZT8iLiI6IiIpK2lbY11bZF0ubmFtZXNwYWNlLGlbY11bZF0saVtjXVtkXS5kYXRhKX1oLmRhdGEmJihoLmRhdGE9Zi5leHRlbmQoe30saC5kYXRhKSl9fWZ1bmN0aW9uIGJpKGEsYil7cmV0dXJuIGYubm9kZU5hbWUoYSwidGFibGUiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIFUoYSl7dmFyIGI9Vi5zcGxpdCgifCIpLGM9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYy5jcmVhdGVFbGVtZW50KXdoaWxlKGIubGVuZ3RoKWMuY3JlYXRlRWxlbWVudChiLnBvcCgpKTtyZXR1cm4gY31mdW5jdGlvbiBUKGEsYixjKXtiPWJ8fDA7aWYoZi5pc0Z1bmN0aW9uKGIpKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3ZhciBlPSEhYi5jYWxsKGEsZCxhKTtyZXR1cm4gZT09PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBhPT09Yj09PWN9KTtpZih0eXBlb2YgYj09InN0cmluZyIpe3ZhciBkPWYuZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09MX0pO2lmKE8udGVzdChiKSlyZXR1cm4gZi5maWx0ZXIoYixkLCFjKTtiPWYuZmlsdGVyKGIsZCl9cmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGYuaW5BcnJheShhLGIpPj0wPT09Y30pfWZ1bmN0aW9uIFMoYSl7cmV0dXJuIWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIEsoKXtyZXR1cm4hMH1mdW5jdGlvbiBKKCl7cmV0dXJuITF9ZnVuY3Rpb24gbihhLGIsYyl7dmFyIGQ9YisiZGVmZXIiLGU9YisicXVldWUiLGc9YisibWFyayIsaD1mLl9kYXRhKGEsZCk7aCYmKGM9PT0icXVldWUifHwhZi5fZGF0YShhLGUpKSYmKGM9PT0ibWFyayJ8fCFmLl9kYXRhKGEsZykpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IWYuX2RhdGEoYSxlKSYmIWYuX2RhdGEoYSxnKSYmKGYucmVtb3ZlRGF0YShhLGQsITApLGguZmlyZSgpKX0sMCl9ZnVuY3Rpb24gbShhKXtmb3IodmFyIGIgaW4gYSl7aWYoYj09PSJkYXRhIiYmZi5pc0VtcHR5T2JqZWN0KGFbYl0pKWNvbnRpbnVlO2lmKGIhPT0idG9KU09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBsKGEsYyxkKXtpZihkPT09YiYmYS5ub2RlVHlwZT09PTEpe3ZhciBlPSJkYXRhLSIrYy5yZXBsYWNlKGssIi0kMSIpLnRvTG93ZXJDYXNlKCk7ZD1hLmdldEF0dHJpYnV0ZShlKTtpZih0eXBlb2YgZD09InN0cmluZyIpe3RyeXtkPWQ9PT0idHJ1ZSI/ITA6ZD09PSJmYWxzZSI/ITE6ZD09PSJudWxsIj9udWxsOmYuaXNOdW1lcmljKGQpP3BhcnNlRmxvYXQoZCk6ai50ZXN0KGQpP2YucGFyc2VKU09OKGQpOmR9Y2F0Y2goZyl7fWYuZGF0YShhLGMsZCl9ZWxzZSBkPWJ9cmV0dXJuIGR9ZnVuY3Rpb24gaChhKXt2YXIgYj1nW2FdPXt9LGMsZDthPWEuc3BsaXQoL1xzKy8pO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9dmFyIGM9YS5kb2N1bWVudCxkPWEubmF2aWdhdG9yLGU9YS5sb2NhdGlvbixmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSigpe2lmKCFlLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSiwxKTtyZXR1cm59ZS5yZWFkeSgpfX12YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZS5mbi5pbml0KGEsYixoKX0sZj1hLmpRdWVyeSxnPWEuJCxoLGk9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGo9L1xTLyxrPS9eXHMrLyxsPS9ccyskLyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sbj0vXltcXSw6e31cc10qJC8sbz0vXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLHA9LyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLHE9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxyPS8od2Via2l0KVsgXC9dKFtcdy5dKykvLHM9LyhvcGVyYSkoPzouKnZlcnNpb24pP1sgXC9dKFtcdy5dKykvLHQ9Lyhtc2llKSAoW1x3Ll0rKS8sdT0vKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLHY9Ly0oW2Etel18WzAtOV0pL2lnLHc9L14tbXMtLyx4PWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LHk9ZC51c2VyQWdlbnQseixBLEIsQz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPUFycmF5LnByb3RvdHlwZS5wdXNoLEY9QXJyYXkucHJvdG90eXBlLnNsaWNlLEc9U3RyaW5nLnByb3RvdHlwZS50cmltLEg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsST17fTtlLmZuPWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplLGluaXQ6ZnVuY3Rpb24oYSxkLGYpe3ZhciBnLGgsaixrO2lmKCFhKXJldHVybiB0aGlzO2lmKGEubm9kZVR5cGUpe3RoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZihhPT09ImJvZHkiJiYhZCYmYy5ib2R5KXt0aGlzLmNvbnRleHQ9Yyx0aGlzWzBdPWMuYm9keSx0aGlzLnNlbGVjdG9yPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09InN0cmluZyIpe2EuY2hhckF0KDApIT09IjwifHxhLmNoYXJBdChhLmxlbmd0aC0xKSE9PSI+Inx8YS5sZW5ndGg8Mz9nPWkuZXhlYyhhKTpnPVtudWxsLGEsbnVsbF07aWYoZyYmKGdbMV18fCFkKSl7aWYoZ1sxXSl7ZD1kIGluc3RhbmNlb2YgZT9kWzBdOmQsaz1kP2Qub3duZXJEb2N1bWVudHx8ZDpjLGo9bS5leGVjKGEpLGo/ZS5pc1BsYWluT2JqZWN0KGQpPyhhPVtjLmNyZWF0ZUVsZW1lbnQoalsxXSldLGUuZm4uYXR0ci5jYWxsKGEsZCwhMCkpOmE9W2suY3JlYXRlRWxlbWVudChqWzFdKV06KGo9ZS5idWlsZEZyYWdtZW50KFtnWzFdXSxba10pLGE9KGouY2FjaGVhYmxlP2UuY2xvbmUoai5mcmFnbWVudCk6ai5mcmFnbWVudCkuY2hpbGROb2Rlcyk7cmV0dXJuIGUubWVyZ2UodGhpcyxhKX1oPWMuZ2V0RWxlbWVudEJ5SWQoZ1syXSk7aWYoaCYmaC5wYXJlbnROb2RlKXtpZihoLmlkIT09Z1syXSlyZXR1cm4gZi5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1ofXRoaXMuY29udGV4dD1jLHRoaXMuc2VsZWN0b3I9YTtyZXR1cm4gdGhpc31yZXR1cm4hZHx8ZC5qcXVlcnk/KGR8fGYpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihkKS5maW5kKGEpfWlmKGUuaXNGdW5jdGlvbihhKSlyZXR1cm4gZi5yZWFkeShhKTthLnNlbGVjdG9yIT09YiYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KTtyZXR1cm4gZS5tYWtlQXJyYXkoYSx0aGlzKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjcuMSIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBGLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9FLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEEuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXthPSthO3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsYSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRi5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixGLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpFLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm4sZS5leHRlbmQ9ZS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxjLGQsZixnLGgsaT1hcmd1bWVudHNbMF18fHt9LGo9MSxrPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgaT09ImJvb2xlYW4iJiYobD1pLGk9YXJndW1lbnRzWzFdfHx7fSxqPTIpLHR5cGVvZiBpIT0ib2JqZWN0IiYmIWUuaXNGdW5jdGlvbihpKSYmKGk9e30pLGs9PT1qJiYoaT10aGlzLC0taik7Zm9yKDtqPGs7aisrKWlmKChhPWFyZ3VtZW50c1tqXSkhPW51bGwpZm9yKGMgaW4gYSl7ZD1pW2NdLGY9YVtjXTtpZihpPT09Ziljb250aW51ZTtsJiZmJiYoZS5pc1BsYWluT2JqZWN0KGYpfHwoZz1lLmlzQXJyYXkoZikpKT8oZz8oZz0hMSxoPWQmJmUuaXNBcnJheShkKT9kOltdKTpoPWQmJmUuaXNQbGFpbk9iamVjdChkKT9kOnt9LGlbY109ZS5leHRlbmQobCxoLGYpKTpmIT09YiYmKGlbY109Zil9cmV0dXJuIGl9LGUuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGIpe2EuJD09PWUmJihhLiQ9ZyksYiYmYS5qUXVlcnk9PT1lJiYoYS5qUXVlcnk9Zik7cmV0dXJuIGV9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/ZS5yZWFkeVdhaXQrKzplLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7aWYoYT09PSEwJiYhLS1lLnJlYWR5V2FpdHx8YSE9PSEwJiYhZS5pc1JlYWR5KXtpZighYy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7ZS5pc1JlYWR5PSEwO2lmKGEhPT0hMCYmLS1lLnJlYWR5V2FpdD4wKXJldHVybjtBLmZpcmVXaXRoKGMsW2VdKSxlLmZuLnRyaWdnZXImJmUoYykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9fSxiaW5kUmVhZHk6ZnVuY3Rpb24oKXtpZighQSl7QT1lLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKTtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksYS5hdHRhY2hFdmVudCgib25sb2FkIixlLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChkKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJkooKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIGE9PSJvYmplY3QiJiYic2V0SW50ZXJ2YWwiaW4gYX0saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGEpKSYmaXNGaW5pdGUoYSl9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/U3RyaW5nKGEpOklbQy5jYWxsKGEpXXx8Im9iamVjdCJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fGUudHlwZShhKSE9PSJvYmplY3QifHxhLm5vZGVUeXBlfHxlLmlzV2luZG93KGEpKXJldHVybiExO3RyeXtpZihhLmNvbnN0cnVjdG9yJiYhRC5jYWxsKGEsImNvbnN0cnVjdG9yIikmJiFELmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChjKXtyZXR1cm4hMX12YXIgZDtmb3IoZCBpbiBhKTtyZXR1cm4gZD09PWJ8fEQuY2FsbChhLGQpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LHBhcnNlSlNPTjpmdW5jdGlvbihiKXtpZih0eXBlb2YgYiE9InN0cmluZyJ8fCFiKXJldHVybiBudWxsO2I9ZS50cmltKGIpO2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYik7aWYobi50ZXN0KGIucmVwbGFjZShvLCJAIikucmVwbGFjZShwLCJdIikucmVwbGFjZShxLCIiKSkpcmV0dXJuKG5ldyBGdW5jdGlvbigicmV0dXJuICIrYikpKCk7ZS5lcnJvcigiSW52YWxpZCBKU09OOiAiK2IpfSxwYXJzZVhNTDpmdW5jdGlvbihjKXt2YXIgZCxmO3RyeXthLkRPTVBhcnNlcj8oZj1uZXcgRE9NUGFyc2VyLGQ9Zi5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChnKXtkPWJ9KCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmZS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyk7cmV0dXJuIGR9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmai50ZXN0KGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHcsIm1zLSIpLnJlcGxhY2Uodix4KX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZixnPTAsaD1hLmxlbmd0aCxpPWg9PT1ifHxlLmlzRnVuY3Rpb24oYSk7aWYoZCl7aWYoaSl7Zm9yKGYgaW4gYSlpZihjLmFwcGx5KGFbZl0sZCk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmFwcGx5KGFbZysrXSxkKT09PSExKWJyZWFrfWVsc2UgaWYoaSl7Zm9yKGYgaW4gYSlpZihjLmNhbGwoYVtmXSxmLGFbZl0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5jYWxsKGFbZ10sZyxhW2crK10pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06Rz9mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjpHLmNhbGwoYSl9OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOihhKyIiKS5yZXBsYWNlKGssIiIpLnJlcGxhY2UobCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO2lmKGEhPW51bGwpe3ZhciBkPWUudHlwZShhKTthLmxlbmd0aD09bnVsbHx8ZD09PSJzdHJpbmcifHxkPT09ImZ1bmN0aW9uInx8ZD09PSJyZWdleHAifHxlLmlzV2luZG93KGEpP0UuY2FsbChjLGEpOmUubWVyZ2UoYyxhKX1yZXR1cm4gY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYoSClyZXR1cm4gSC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLmxlbmd0aCxlPTA7aWYodHlwZW9mIGMubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGY9Yy5sZW5ndGg7ZTxmO2UrKylhW2QrK109Y1tlXTtlbHNlIHdoaWxlKGNbZV0hPT1iKWFbZCsrXT1jW2UrK107YS5sZW5ndGg9ZDtyZXR1cm4gYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZTtjPSEhYztmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspZT0hIWIoYVtmXSxmKSxjIT09ZSYmZC5wdXNoKGFbZl0pO3JldHVybiBkfSxtYXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGcsaD1bXSxpPTAsaj1hLmxlbmd0aCxrPWEgaW5zdGFuY2VvZiBlfHxqIT09YiYmdHlwZW9mIGo9PSJudW1iZXIiJiYoaj4wJiZhWzBdJiZhW2otMV18fGo9PT0wfHxlLmlzQXJyYXkoYSkpO2lmKGspZm9yKDtpPGo7aSsrKWY9YyhhW2ldLGksZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO2Vsc2UgZm9yKGcgaW4gYSlmPWMoYVtnXSxnLGQpLGYhPW51bGwmJihoW2gubGVuZ3RoXT1mKTtyZXR1cm4gaC5jb25jYXQuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIil7dmFyIGQ9YVtjXTtjPWEsYT1kfWlmKCFlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGI7dmFyIGY9Ri5jYWxsKGFyZ3VtZW50cywyKSxnPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYyxmLmNvbmNhdChGLmNhbGwoYXJndW1lbnRzKSkpfTtnLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8Zy5ndWlkfHxlLmd1aWQrKztyZXR1cm4gZ30sYWNjZXNzOmZ1bmN0aW9uKGEsYyxkLGYsZyxoKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYz09Im9iamVjdCIpe2Zvcih2YXIgaiBpbiBjKWUuYWNjZXNzKGEsaixjW2pdLGYsZyxkKTtyZXR1cm4gYX1pZihkIT09Yil7Zj0haCYmZiYmZS5pc0Z1bmN0aW9uKGQpO2Zvcih2YXIgaz0wO2s8aTtrKyspZyhhW2tdLGMsZj9kLmNhbGwoYVtrXSxrLGcoYVtrXSxjKSk6ZCxoKTtyZXR1cm4gYX1yZXR1cm4gaT9nKGFbMF0sYyk6Yn0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9ci5leGVjKGEpfHxzLmV4ZWMoYSl8fHQuZXhlYyhhKXx8YS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmdS5leGVjKGEpfHxbXTtyZXR1cm57YnJvd3NlcjpiWzFdfHwiIix2ZXJzaW9uOmJbMl18fCIwIn19LHN1YjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtyZXR1cm4gbmV3IGEuZm4uaW5pdChiLGMpfWUuZXh0ZW5kKCEwLGEsdGhpcyksYS5zdXBlcmNsYXNzPXRoaXMsYS5mbj1hLnByb3RvdHlwZT10aGlzKCksYS5mbi5jb25zdHJ1Y3Rvcj1hLGEuc3ViPXRoaXMuc3ViLGEuZm4uaW5pdD1mdW5jdGlvbihkLGYpe2YmJmYgaW5zdGFuY2VvZiBlJiYhKGYgaW5zdGFuY2VvZiBhKSYmKGY9YShmKSk7cmV0dXJuIGUuZm4uaW5pdC5jYWxsKHRoaXMsZCxmLGIpfSxhLmZuLmluaXQucHJvdG90eXBlPWEuZm47dmFyIGI9YShjKTtyZXR1cm4gYX0sYnJvd3Nlcjp7fX0pLGUuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe0lbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksej1lLnVhTWF0Y2goeSksei5icm93c2VyJiYoZS5icm93c2VyW3ouYnJvd3Nlcl09ITAsZS5icm93c2VyLnZlcnNpb249ei52ZXJzaW9uKSxlLmJyb3dzZXIud2Via2l0JiYoZS5icm93c2VyLnNhZmFyaT0hMCksai50ZXN0KCLCoCIpJiYoaz0vXltcc1x4QTBdKy8sbD0vW1xzXHhBMF0rJC8pLGg9ZShjKSxjLmFkZEV2ZW50TGlzdGVuZXI/Qj1mdW5jdGlvbigpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksZS5yZWFkeSgpfTpjLmF0dGFjaEV2ZW50JiYoQj1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihjLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEIpLGUucmVhZHkoKSl9KTtyZXR1cm4gZX0oKSxnPXt9O2YuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9YT9nW2FdfHxoKGEpOnt9O3ZhciBjPVtdLGQ9W10sZSxpLGosayxsLG09ZnVuY3Rpb24oYil7dmFyIGQsZSxnLGgsaTtmb3IoZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylnPWJbZF0saD1mLnR5cGUoZyksaD09PSJhcnJheSI/bShnKTpoPT09ImZ1bmN0aW9uIiYmKCFhLnVuaXF1ZXx8IW8uaGFzKGcpKSYmYy5wdXNoKGcpfSxuPWZ1bmN0aW9uKGIsZil7Zj1mfHxbXSxlPSFhLm1lbW9yeXx8W2IsZl0saT0hMCxsPWp8fDAsaj0wLGs9Yy5sZW5ndGg7Zm9yKDtjJiZsPGs7bCsrKWlmKGNbbF0uYXBwbHkoYixmKT09PSExJiZhLnN0b3BPbkZhbHNlKXtlPSEwO2JyZWFrfWk9ITEsYyYmKGEub25jZT9lPT09ITA/by5kaXNhYmxlKCk6Yz1bXTpkJiZkLmxlbmd0aCYmKGU9ZC5zaGlmdCgpLG8uZmlyZVdpdGgoZVswXSxlWzFdKSkpfSxvPXthZGQ6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYT1jLmxlbmd0aDttKGFyZ3VtZW50cyksaT9rPWMubGVuZ3RoOmUmJmUhPT0hMCYmKGo9YSxuKGVbMF0sZVsxXSkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYj1hcmd1bWVudHMsZD0wLGU9Yi5sZW5ndGg7Zm9yKDtkPGU7ZCsrKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGJbZF09PT1jW2ZdKXtpJiZmPD1rJiYoay0tLGY8PWwmJmwtLSksYy5zcGxpY2UoZi0tLDEpO2lmKGEudW5pcXVlKWJyZWFrfX1yZXR1cm4gdGhpc30saGFzOmZ1bmN0aW9uKGEpe2lmKGMpe3ZhciBiPTAsZD1jLmxlbmd0aDtmb3IoO2I8ZDtiKyspaWYoYT09PWNbYl0pcmV0dXJuITB9cmV0dXJuITF9LGVtcHR5OmZ1bmN0aW9uKCl7Yz1bXTtyZXR1cm4gdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe2M9ZD1lPWI7cmV0dXJuIHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWN9LGxvY2s6ZnVuY3Rpb24oKXtkPWIsKCFlfHxlPT09ITApJiZvLmRpc2FibGUoKTtyZXR1cm4gdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWR9LGZpcmVXaXRoOmZ1bmN0aW9uKGIsYyl7ZCYmKGk/YS5vbmNlfHxkLnB1c2goW2IsY10pOighYS5vbmNlfHwhZSkmJm4oYixjKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtvLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9fTtyZXR1cm4gb307dmFyIGk9W10uc2xpY2U7Zi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGM9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZD1mLkNhbGxiYWNrcygibWVtb3J5IiksZT0icGVuZGluZyIsZz17cmVzb2x2ZTpiLHJlamVjdDpjLG5vdGlmeTpkfSxoPXtkb25lOmIuYWRkLGZhaWw6Yy5hZGQscHJvZ3Jlc3M6ZC5hZGQsc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZX0saXNSZXNvbHZlZDpiLmZpcmVkLGlzUmVqZWN0ZWQ6Yy5maXJlZCx0aGVuOmZ1bmN0aW9uKGEsYixjKXtpLmRvbmUoYSkuZmFpbChiKS5wcm9ncmVzcyhjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7aS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKTtyZXR1cm4gdGhpc30scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxyPWMuZG9jdW1lbnRFbGVtZW50O3Euc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IikscS5pbm5lckhUTUw9IiAgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYScgc3R5bGU9J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxlPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighZHx8IWQubGVuZ3RofHwhZSlyZXR1cm57fTtnPWMuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksaD1nLmFwcGVuZENoaWxkKGMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGk9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxiPXtsZWFkaW5nV2hpdGVzcGFjZTpxLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFxLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhcS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDplLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NS8udGVzdChlLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhZS5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmkudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOmguc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOnEuY2xhc3NOYW1lIT09InQiLGVuY3R5cGU6ISFjLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6Yy5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITB9LGkuY2hlY2tlZD0hMCxiLm5vQ2xvbmVDaGVja2VkPWkuY2xvbmVOb2RlKCEwKS5jaGVja2VkLGcuZGlzYWJsZWQ9ITAsYi5vcHREaXNhYmxlZD0haC5kaXNhYmxlZDt0cnl7ZGVsZXRlIHEudGVzdH1jYXRjaChzKXtiLmRlbGV0ZUV4cGFuZG89ITF9IXEuYWRkRXZlbnRMaXN0ZW5lciYmcS5hdHRhY2hFdmVudCYmcS5maXJlRXZlbnQmJihxLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe2Iubm9DbG9uZUV2ZW50PSExfSkscS5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKSxpPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnZhbHVlPSJ0IixpLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYi5yYWRpb1ZhbHVlPWkudmFsdWU9PT0idCIsaS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIikscS5hcHBlbmRDaGlsZChpKSxrPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGsuYXBwZW5kQ2hpbGQocS5sYXN0Q2hpbGQpLGIuY2hlY2tDbG9uZT1rLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxiLmFwcGVuZENoZWNrZWQ9aS5jaGVja2VkLGsucmVtb3ZlQ2hpbGQoaSksay5hcHBlbmRDaGlsZChxKSxxLmlubmVySFRNTD0iIixhLmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIscS5zdHlsZS53aWR0aD0iMnB4IixxLmFwcGVuZENoaWxkKGopLGIucmVsaWFibGVNYXJnaW5SaWdodD0ocGFyc2VJbnQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShqLG51bGwpfHx7bWFyZ2luUmlnaHQ6MH0pLm1hcmdpblJpZ2h0LDEwKXx8MCk9PT0wKTtpZihxLmF0dGFjaEV2ZW50KWZvcihvIGlue3N1Ym1pdDoxLGNoYW5nZToxLGZvY3VzaW46MX0pbj0ib24iK28scD1uIGluIHEscHx8KHEuc2V0QXR0cmlidXRlKG4sInJldHVybjsiKSxwPXR5cGVvZiBxW25dPT0iZnVuY3Rpb24iKSxiW28rIkJ1YmJsZXMiXT1wO2sucmVtb3ZlQ2hpbGQocSksaz1nPWg9aj1xPWk9bnVsbCxmKGZ1bmN0aW9uKCl7dmFyIGEsZCxlLGcsaCxpLGosayxtLG4sbyxyPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTshcnx8KGo9MSxrPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOjA7IixtPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDsiLG49InN0eWxlPSciK2srImJvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7JyIsbz0iPGRpdiAiK24rIj48ZGl2PjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIiBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPiIrIjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IixhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYS5zdHlsZS5jc3NUZXh0PW0rIndpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6IitqKyJweCIsci5pbnNlcnRCZWZvcmUoYSxyLmZpcnN0Q2hpbGQpLHE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLmFwcGVuZENoaWxkKHEpLHEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsbD1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHA9bFswXS5vZmZzZXRIZWlnaHQ9PT0wLGxbMF0uc3R5bGUuZGlzcGxheT0iIixsWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGIucmVsaWFibGVIaWRkZW5PZmZzZXRzPXAmJmxbMF0ub2Zmc2V0SGVpZ2h0PT09MCxxLmlubmVySFRNTD0iIixxLnN0eWxlLndpZHRoPXEuc3R5bGUucGFkZGluZ0xlZnQ9IjFweCIsZi5ib3hNb2RlbD1iLmJveE1vZGVsPXEub2Zmc2V0V2lkdGg9PT0yLHR5cGVvZiBxLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYocS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLHEuc3R5bGUuem9vbT0xLGIuaW5saW5lQmxvY2tOZWVkc0xheW91dD1xLm9mZnNldFdpZHRoPT09MixxLnN0eWxlLmRpc3BsYXk9IiIscS5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiIsYi5zaHJpbmtXcmFwQmxvY2tzPXEub2Zmc2V0V2lkdGghPT0yKSxxLnN0eWxlLmNzc1RleHQ9ayttLHEuaW5uZXJIVE1MPW8sZD1xLmZpcnN0Q2hpbGQsZT1kLmZpcnN0Q2hpbGQsaD1kLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCxpPXtkb2VzTm90QWRkQm9yZGVyOmUub2Zmc2V0VG9wIT09NSxkb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxsczpoLm9mZnNldFRvcD09PTV9LGUuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnN0eWxlLnRvcD0iMjBweCIsaS5maXhlZFBvc2l0aW9uPWUub2Zmc2V0VG9wPT09MjB8fGUub2Zmc2V0VG9wPT09MTUsZS5zdHlsZS5wb3NpdGlvbj1lLnN0eWxlLnRvcD0iIixkLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1lLm9mZnNldFRvcD09PS01LGkuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9ci5vZmZzZXRUb3AhPT1qLHIucmVtb3ZlQ2hpbGQoYSkscT1hPW51bGwsZi5leHRlbmQoYixpKSl9KTtyZXR1cm4gYn0oKTt2YXIgaj0vXig/Olx7LipcfXxcWy4qXF0pJC8saz0vKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIW0oYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaSxqPWYuZXhwYW5kbyxrPXR5cGVvZiBjPT0ic3RyaW5nIixsPWEubm9kZVR5cGUsbT1sP2YuY2FjaGU6YSxuPWw/YVtqXTphW2pdJiZqLG89Yz09PSJldmVudHMiO2lmKCghbnx8IW1bbl18fCFvJiYhZSYmIW1bbl0uZGF0YSkmJmsmJmQ9PT1iKXJldHVybjtufHwobD9hW2pdPW49KytmLnV1aWQ6bj1qKSxtW25dfHwobVtuXT17fSxsfHwobVtuXS50b0pTT049Zi5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP21bbl09Zi5leHRlbmQobVtuXSxjKTptW25dLmRhdGE9Zi5leHRlbmQobVtuXS5kYXRhLGMpO2c9aD1tW25dLGV8fChoLmRhdGF8fChoLmRhdGE9e30pLGg9aC5kYXRhKSxkIT09YiYmKGhbZi5jYW1lbENhc2UoYyldPWQpO2lmKG8mJiFoW2NdKXJldHVybiBnLmV2ZW50cztrPyhpPWhbY10saT09bnVsbCYmKGk9aFtmLmNhbWVsQ2FzZShjKV0pKTppPWg7cmV0dXJuIGl9fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYixjKXtpZighIWYuYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxnLGg9Zi5leHBhbmRvLGk9YS5ub2RlVHlwZSxqPWk/Zi5jYWNoZTphLGs9aT9hW2hdOmg7aWYoIWpba10pcmV0dXJuO2lmKGIpe2Q9Yz9qW2tdOmpba10uZGF0YTtpZihkKXtmLmlzQXJyYXkoYil8fChiIGluIGQ/Yj1bYl06KGI9Zi5jYW1lbENhc2UoYiksYiBpbiBkP2I9W2JdOmI9Yi5zcGxpdCgiICIpKSk7Zm9yKGU9MCxnPWIubGVuZ3RoO2U8ZztlKyspZGVsZXRlIGRbYltlXV07aWYoIShjP206Zi5pc0VtcHR5T2JqZWN0KShkKSlyZXR1cm59fWlmKCFjKXtkZWxldGUgaltrXS5kYXRhO2lmKCFtKGpba10pKXJldHVybn1mLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWouc2V0SW50ZXJ2YWw/ZGVsZXRlIGpba106altrXT1udWxsLGkmJihmLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYVtoXTphLnJlbW92ZUF0dHJpYnV0ZT9hLnJlbW92ZUF0dHJpYnV0ZShoKTphW2hdPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWYubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxmLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZyxoPW51bGw7aWYodHlwZW9mIGE9PSJ1bmRlZmluZWQiKXtpZih0aGlzLmxlbmd0aCl7aD1mLmRhdGEodGhpc1swXSk7aWYodGhpc1swXS5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIikpe2U9dGhpc1swXS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGo9ZS5sZW5ndGg7aTxqO2krKylnPWVbaV0ubmFtZSxnLmluZGV4T2YoImRhdGEtIik9PT0wJiYoZz1mLmNhbWVsQ2FzZShnLnN1YnN0cmluZyg1KSksbCh0aGlzWzBdLGcsaFtnXSkpO2YuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGh9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO2Q9YS5zcGxpdCgiLiIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihjPT09Yil7aD10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitkWzFdKyIhIixbZFswXV0pLGg9PT1iJiZ0aGlzLmxlbmd0aCYmKGg9Zi5kYXRhKHRoaXNbMF0sYSksaD1sKHRoaXNbMF0sYSxoKSk7cmV0dXJuIGg9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTpofXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGU9W2RbMF0sY107Yi50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIrZFsxXSsiISIsZSksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitkWzFdKyIhIixlKX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPSJmeCIpO2lmKGM9PT1iKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZSgpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnByb3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO3tpZighIWFyZ3VtZW50cy5sZW5ndGgpe2U9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGc9Zih0aGlzKSxoO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtlP2g9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpoPWEsaD09bnVsbD9oPSIiOnR5cGVvZiBoPT0ibnVtYmVyIj9oKz0iIjpmLmlzQXJyYXkoaCkmJihoPWYubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPWYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1t0aGlzLnR5cGVdO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsaCwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1ofX0pfWlmKGcpe2M9Zi52YWxIb29rc1tnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW2cudHlwZV07aWYoYyYmImdldCJpbiBjJiYoZD1jLmdldChnLCJ2YWx1ZSIpKSE9PWIpcmV0dXJuIGQ7ZD1nLnZhbHVlO3JldHVybiB0eXBlb2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKHEsIiIpOmQ9PW51bGw/IiI6ZH19fX0pLGYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiFifHxiLnNwZWNpZmllZD9hLnZhbHVlOmEudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGc9YS5zZWxlY3RlZEluZGV4LGg9W10saT1hLm9wdGlvbnMsaj1hLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZzwwKXJldHVybiBudWxsO2M9aj9nOjAsZD1qP2crMTppLmxlbmd0aDtmb3IoO2M8ZDtjKyspe2U9aVtjXTtpZihlLnNlbGVjdGVkJiYoZi5zdXBwb3J0Lm9wdERpc2FibGVkPyFlLmRpc2FibGVkOmUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighZS5wYXJlbnROb2RlLmRpc2FibGVkfHwhZi5ub2RlTmFtZShlLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtiPWYoZSkudmFsKCk7aWYoailyZXR1cm4gYjtoLnB1c2goYil9fWlmKGomJiFoLmxlbmd0aCYmaS5sZW5ndGgpcmV0dXJuIGYoaVtnXSkudmFsKCk7cmV0dXJuIGh9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWYubWFrZUFycmF5KGIpO2YoYSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Zi5pbkFycmF5KGYodGhpcykudmFsKCksYyk+PTB9KSxjLmxlbmd0aHx8KGEuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJuIGN9fX0sYXR0ckZuOnt2YWw6ITAsY3NzOiEwLGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEwLGhlaWdodDohMCxvZmZzZXQ6ITB9LGF0dHI6ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGcsaCxpLGo9YS5ub2RlVHlwZTtpZighIWEmJmohPT0zJiZqIT09OCYmaiE9PTIpe2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYodHlwZW9mIGEuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gZi5wcm9wKGEsYyxkKTtpPWohPT0xfHwhZi5pc1hNTERvYyhhKSxpJiYoYz1jLnRvTG93ZXJDYXNlKCksaD1mLmF0dHJIb29rc1tjXXx8KHUudGVzdChjKT94OncpKTtpZihkIT09Yil7aWYoZD09PW51bGwpe2YucmVtb3ZlQXR0cihhLGMpO3JldHVybn1pZihoJiYic2V0ImluIGgmJmkmJihnPWguc2V0KGEsZCxjKSkhPT1iKXJldHVybiBnO2Euc2V0QXR0cmlidXRlKGMsIiIrZCk7cmV0dXJuIGR9aWYoaCYmImdldCJpbiBoJiZpJiYoZz1oLmdldChhLGMpKSE9PW51bGwpcmV0dXJuIGc7Zz1hLmdldEF0dHJpYnV0ZShjKTtyZXR1cm4gZz09PW51bGw/YjpnfX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9MDtpZihiJiZhLm5vZGVUeXBlPT09MSl7ZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQocCksZz1kLmxlbmd0aDtmb3IoO2g8ZztoKyspZT1kW2hdLGUmJihjPWYucHJvcEZpeFtlXXx8ZSxmLmF0dHIoYSxlLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZSh2P2U6YyksdS50ZXN0KGUpJiZjIGluIGEmJihhW2NdPSExKSl9fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKHIudGVzdChhLm5vZGVOYW1lKSYmYS5wYXJlbnROb2RlKWYuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2UgaWYoIWYuc3VwcG9ydC5yYWRpb1ZhbHVlJiZiPT09InJhZGlvIiYmZi5ub2RlTmFtZShhLCJpbnB1dCIpKXt2YXIgYz1hLnZhbHVlO2Euc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKTtyZXR1cm4gYn19fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5nZXQoYSxiKTtyZXR1cm4gYiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZih3JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGk9YS5ub2RlVHlwZTtpZighIWEmJmkhPT0zJiZpIT09OCYmaSE9PTIpe2g9aSE9PTF8fCFmLmlzWE1MRG9jKGEpLGgmJihjPWYucHJvcEZpeFtjXXx8YyxnPWYucHJvcEhvb2tzW2NdKTtyZXR1cm4gZCE9PWI/ZyYmInNldCJpbiBnJiYoZT1nLnNldChhLGQsYykpIT09Yj9lOmFbY109ZDpnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsYykpIT09bnVsbD9lOmFbY119fSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9wYXJzZUludChjLnZhbHVlLDEwKTpzLnRlc3QoYS5ub2RlTmFtZSl8fHQudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn19fX0pLGYuYXR0ckhvb2tzLnRhYmluZGV4PWYucHJvcEhvb2tzLnRhYkluZGV4LHg9e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkLGU9Zi5wcm9wKGEsYyk7cmV0dXJuIGU9PT0hMHx8dHlwZW9mIGUhPSJib29sZWFuIiYmKGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpKSYmZC5ub2RlVmFsdWUhPT0hMT9jLnRvTG93ZXJDYXNlKCk6Yn0sc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtiPT09ITE/Zi5yZW1vdmVBdHRyKGEsYyk6KGQ9Zi5wcm9wRml4W2NdfHxjLGQgaW4gYSYmKGFbZF09ITApLGEuc2V0QXR0cmlidXRlKGMsYy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIGN9fSx2fHwoeT17bmFtZTohMCxpZDohMH0sdz1mLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGQ7ZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyk7cmV0dXJuIGQmJih5W2NdP2Qubm9kZVZhbHVlIT09IiI6ZC5zcGVjaWZpZWQpP2Qubm9kZVZhbHVlOmJ9LHNldDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9YS5nZXRBdHRyaWJ1dGVOb2RlKGQpO2V8fChlPWMuY3JlYXRlQXR0cmlidXRlKGQpLGEuc2V0QXR0cmlidXRlTm9kZShlKSk7cmV0dXJuIGUubm9kZVZhbHVlPWIrIiJ9fSxmLmF0dHJIb29rcy50YWJpbmRleC5zZXQ9dy5zZXQsZi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe2YuYXR0ckhvb2tzW2JdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2JdLHtzZXQ6ZnVuY3Rpb24oYSxjKXtpZihjPT09IiIpe2Euc2V0QXR0cmlidXRlKGIsImF1dG8iKTtyZXR1cm4gY319fSl9KSxmLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDp3LmdldCxzZXQ6ZnVuY3Rpb24oYSxiLGMpe2I9PT0iIiYmKGI9ImZhbHNlIiksdy5zZXQoYSxiLGMpfX0pLGYuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8Zi5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxjKXtmLmF0dHJIb29rc1tjXT1mLmV4dGVuZChmLmF0dHJIb29rc1tjXSx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKGMsMik7cmV0dXJuIGQ9PT1udWxsP2I6ZH19KX0pLGYuc3VwcG9ydC5zdHlsZXx8KGYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHxifSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0PSIiK2J9fSksZi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoZi5wcm9wSG9va3Muc2VsZWN0ZWQ9Zi5leHRlbmQoZi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7YiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KTtyZXR1cm4gbnVsbH19KSksZi5zdXBwb3J0LmVuY3R5cGV8fChmLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKSxmLnN1cHBvcnQuY2hlY2tPbnx8Zi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjphLnZhbHVlfX19KSxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPWYuZXh0ZW5kKGYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShiKSlyZXR1cm4gYS5jaGVja2VkPWYuaW5BcnJheShmKGEpLnZhbCgpLGIpPj0wfX0pfSk7dmFyIHo9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLEE9L14oW15cLl0qKT8oPzpcLiguKykpPyQvLEI9L1xiaG92ZXIoXC5cUyspP1xiLyxDPS9ea2V5LyxEPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxFPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxGPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sRz1mdW5jdGlvbihhKXt2YXIgYj1GLmV4ZWMoYSk7YiYmKGJbMV09KGJbMV18fCIiKS50b0xvd2VyQ2FzZSgpLGJbM109YlszXSYmbmV3IFJlZ0V4cCgiKD86XnxcXHMpIitiWzNdKyIoPzpcXHN8JCkiKSk7cmV0dXJuIGJ9LEg9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmF0dHJpYnV0ZXN8fHt9O3JldHVybighYlsxXXx8YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YlsxXSkmJighYlsyXXx8KGMuaWR8fHt9KS52YWx1ZT09PWJbMl0pJiYoIWJbM118fGJbM10udGVzdCgoY1siY2xhc3MiXXx8e30pLnZhbHVlKSl9LEk9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShCLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9Ow0KCWYuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighKGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8IWN8fCFkfHwhKGg9Zi5fZGF0YShhKSkpKXtkLmhhbmRsZXImJihwPWQsZD1wLmhhbmRsZXIpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPWYudHJpbShJKGMpKS5zcGxpdCgiICIpO2ZvcihrPTA7azxjLmxlbmd0aDtrKyspe2w9QS5leGVjKGNba10pfHxbXSxtPWxbMV0sbj0obFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxtPShnP3MuZGVsZWdhdGVUeXBlOnMuYmluZFR5cGUpfHxtLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxvPWYuZXh0ZW5kKHt0eXBlOm0sb3JpZ1R5cGU6bFsxXSxkYXRhOmUsaGFuZGxlcjpkLGd1aWQ6ZC5ndWlkLHNlbGVjdG9yOmcscXVpY2s6RyhnKSxuYW1lc3BhY2U6bi5qb2luKCIuIil9LHApLHI9alttXTtpZighcil7cj1qW21dPVtdLHIuZGVsZWdhdGVDb3VudD0wO2lmKCFzLnNldHVwfHxzLnNldHVwLmNhbGwoYSxlLG4saSk9PT0hMSlhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKG0saSwhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK20saSl9cy5hZGQmJihzLmFkZC5jYWxsKGEsbyksby5oYW5kbGVyLmd1aWR8fChvLmhhbmRsZXIuZ3VpZD1kLmd1aWQpKSxnP3Iuc3BsaWNlKHIuZGVsZWdhdGVDb3VudCsrLDAsbyk6ci5wdXNoKG8pLGYuZXZlbnQuZ2xvYmFsW21dPSEwfWE9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZz1mLmhhc0RhdGEoYSkmJmYuX2RhdGEoYSksaCxpLGosayxsLG0sbixvLHAscSxyLHM7aWYoISFnJiYhIShvPWcuZXZlbnRzKSl7Yj1mLnRyaW0oSShifHwiIikpLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKyl7aT1BLmV4ZWMoYltoXSl8fFtdLGo9az1pWzFdLGw9aVsyXTtpZighail7Zm9yKGogaW4gbylmLmV2ZW50LnJlbW92ZShhLGorYltoXSxjLGQsITApO2NvbnRpbnVlfXA9Zi5ldmVudC5zcGVjaWFsW2pdfHx7fSxqPShkP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxqLHI9b1tqXXx8W10sbT1yLmxlbmd0aCxsPWw/bmV3IFJlZ0V4cCgiKF58XFwuKSIrbC5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTpudWxsO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspcz1yW25dLChlfHxrPT09cy5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cy5ndWlkKSYmKCFsfHxsLnRlc3Qocy5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cy5zZWxlY3Rvcnx8ZD09PSIqKiImJnMuc2VsZWN0b3IpJiYoci5zcGxpY2Uobi0tLDEpLHMuc2VsZWN0b3ImJnIuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGEscykpO3IubGVuZ3RoPT09MCYmbSE9PXIubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoYSxsKT09PSExKSYmZi5yZW1vdmVFdmVudChhLGosZy5oYW5kbGUpLGRlbGV0ZSBvW2pdKX1mLmlzRW1wdHlPYmplY3QobykmJihxPWcuaGFuZGxlLHEmJihxLmVsZW09bnVsbCksZi5yZW1vdmVEYXRhKGEsWyJldmVudHMiLCJoYW5kbGUiXSwhMCkpfX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxlLGcpe2lmKCFlfHxlLm5vZGVUeXBlIT09MyYmZS5ub2RlVHlwZSE9PTgpe3ZhciBoPWMudHlwZXx8YyxpPVtdLGosayxsLG0sbixvLHAscSxyLHM7aWYoRS50ZXN0KGgrZi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtoLmluZGV4T2YoIiEiKT49MCYmKGg9aC5zbGljZSgwLC0xKSxrPSEwKSxoLmluZGV4T2YoIi4iKT49MCYmKGk9aC5zcGxpdCgiLiIpLGg9aS5zaGlmdCgpLGkuc29ydCgpKTtpZigoIWV8fGYuZXZlbnQuY3VzdG9tRXZlbnRbaF0pJiYhZi5ldmVudC5nbG9iYWxbaF0pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5leHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9ayxjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGwsbz1oLmluZGV4T2YoIjoiKTwwPyJvbiIraDoiIjtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxtPUUudGVzdChzK2gpP2U6ZS5wYXJlbnROb2RlLG49bnVsbDtmb3IoO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2wrKyltPXJbbF1bMF0sYy50eXBlPXJbbF1bMV0scT0oZi5fZGF0YShtLCJldmVudHMiKXx8e30pW2MudHlwZV0mJmYuX2RhdGEobSwiaGFuZGxlIikscSYmcS5hcHBseShtLGQpLHE9byYmbVtvXSxxJiZmLmFjY2VwdERhdGEobSkmJnEuYXBwbHkobSxkKT09PSExJiZjLnByZXZlbnREZWZhdWx0KCk7Yy50eXBlPWgsIWcmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoZS5vd25lckRvY3VtZW50LGQpPT09ITEpJiYoaCE9PSJjbGljayJ8fCFmLm5vZGVOYW1lKGUsImEiKSkmJmYuYWNjZXB0RGF0YShlKSYmbyYmZVtoXSYmKGghPT0iZm9jdXMiJiZoIT09ImJsdXIifHxjLnRhcmdldC5vZmZzZXRXaWR0aCE9PTApJiYhZi5pc1dpbmRvdyhlKSYmKG49ZVtvXSxuJiYoZVtvXT1udWxsKSxmLmV2ZW50LnRyaWdnZXJlZD1oLGVbaF0oKSxmLmV2ZW50LnRyaWdnZXJlZD1iLG4mJihlW29dPW4pKTtyZXR1cm4gYy5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihjKXtjPWYuZXZlbnQuZml4KGN8fGEuZXZlbnQpO3ZhciBkPShmLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10sZT1kLmRlbGVnYXRlQ291bnQsZz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxoPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLGk9W10saixrLGwsbSxuLG8scCxxLHIscyx0O2dbMF09YyxjLmRlbGVnYXRlVGFyZ2V0PXRoaXM7aWYoZSYmIWMudGFyZ2V0LmRpc2FibGVkJiYoIWMuYnV0dG9ufHxjLnR5cGUhPT0iY2xpY2siKSl7bT1mKHRoaXMpLG0uY29udGV4dD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXM7Zm9yKGw9Yy50YXJnZXQ7bCE9dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcyl7bz17fSxxPVtdLG1bMF09bDtmb3Ioaj0wO2o8ZTtqKyspcj1kW2pdLHM9ci5zZWxlY3RvcixvW3NdPT09YiYmKG9bc109ci5xdWljaz9IKGwsci5xdWljayk6bS5pcyhzKSksb1tzXSYmcS5wdXNoKHIpO3EubGVuZ3RoJiZpLnB1c2goe2VsZW06bCxtYXRjaGVzOnF9KX19ZC5sZW5ndGg+ZSYmaS5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGo9MDtqPGkubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2orKyl7cD1pW2pdLGMuY3VycmVudFRhcmdldD1wLmVsZW07Zm9yKGs9MDtrPHAubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7aysrKXtyPXAubWF0Y2hlc1trXTtpZihofHwhYy5uYW1lc3BhY2UmJiFyLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qoci5uYW1lc3BhY2UpKWMuZGF0YT1yLmRhdGEsYy5oYW5kbGVPYmo9cixuPSgoZi5ldmVudC5zcGVjaWFsW3Iub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxyLmhhbmRsZXIpLmFwcGx5KHAuZWxlbSxnKSxuIT09YiYmKGMucmVzdWx0PW4sbj09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19cmV0dXJuIGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGQpe3ZhciBlLGYsZyxoPWQuYnV0dG9uLGk9ZC5mcm9tRWxlbWVudDthLnBhZ2VYPT1udWxsJiZkLmNsaWVudFghPW51bGwmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGMsZj1lLmRvY3VtZW50RWxlbWVudCxnPWUuYm9keSxhLnBhZ2VYPWQuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxnJiZnLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGcmJmcuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1kLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxnJiZnLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxnJiZnLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmkmJihhLnJlbGF0ZWRUYXJnZXQ9aT09PWEudGFyZ2V0P2QudG9FbGVtZW50OmkpLCFhLndoaWNoJiZoIT09YiYmKGEud2hpY2g9aCYxPzE6aCYyPzM6aCY0PzI6MCk7cmV0dXJuIGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtmLmV4cGFuZG9dKXJldHVybiBhO3ZhciBkLGUsZz1hLGg9Zi5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxpPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wczthPWYuRXZlbnQoZyk7Zm9yKGQ9aS5sZW5ndGg7ZDspZT1pWy0tZF0sYVtlXT1nW2VdO2EudGFyZ2V0fHwoYS50YXJnZXQ9Zy5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9PT1iJiYoYS5tZXRhS2V5PWEuY3RybEtleSk7cmV0dXJuIGguZmlsdGVyP2guZmlsdGVyKGEsZyk6YX0sc3BlY2lhbDp7cmVhZHk6e3NldHVwOmYuYmluZFJlYWR5fSxsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e2RlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxvYWQ6e3NldHVwOmZ1bmN0aW9uKGEsYixjKXtmLmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9hZD1jKX0sdGVhcmRvd246ZnVuY3Rpb24oYSxiKXt0aGlzLm9uYmVmb3JldW5sb2FkPT09YiYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Zi5leHRlbmQobmV3IGYuRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP2YuZXZlbnQudHJpZ2dlcihlLG51bGwsYik6Zi5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sZi5ldmVudC5oYW5kbGU9Zi5ldmVudC5kaXNwYXRjaCxmLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxmLkV2ZW50PWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgZi5FdmVudCkpcmV0dXJuIG5ldyBmLkV2ZW50KGEsYik7YSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8YS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCk/SzpKKTp0aGlzLnR5cGU9YSxiJiZmLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxmLm5vdygpLHRoaXNbZi5leHBhbmRvXT0hMH0sZi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Szt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1LO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1LLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpKLGlzUHJvcGFnYXRpb25TdG9wcGVkOkosaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6Sn0sZi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oYSxiKXtmLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1hLnJlbGF0ZWRUYXJnZXQsZT1hLmhhbmRsZU9iaixnPWUuc2VsZWN0b3IsaDtpZighZHx8ZCE9PWMmJiFmLmNvbnRhaW5zKGMsZCkpYS50eXBlPWUub3JpZ1R5cGUsaD1lLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iO3JldHVybiBofX19KSxmLnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KGYuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYoZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7Zi5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihhKXt2YXIgYz1hLnRhcmdldCxkPWYubm9kZU5hbWUoYywiaW5wdXQiKXx8Zi5ub2RlTmFtZShjLCJidXR0b24iKT9jLmZvcm06YjtkJiYhZC5fc3VibWl0X2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZmLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0pLGQuX3N1Ym1pdF9hdHRhY2hlZD0hMCl9KX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLGYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZih6LnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpZi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSxmLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7ei50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJiFhLmlzVHJpZ2dlciYmZi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxiLl9jaGFuZ2VfYXR0YWNoZWQ9ITApfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIik7cmV0dXJuIHoudGVzdCh0aGlzLm5vZGVOYW1lKX19KSxmLnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fGYuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgZD0wLGU9ZnVuY3Rpb24oYSl7Zi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LGYuZXZlbnQuZml4KGEpLCEwKX07Zi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe2QrKz09PTAmJmMuYWRkRXZlbnRMaXN0ZW5lcihhLGUsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tZD09PTAmJmMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGUsITApfX19KSxmLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7dHlwZW9mIGMhPSJzdHJpbmciJiYoZD1jLGM9Yik7Zm9yKGkgaW4gYSl0aGlzLm9uKGksYyxkLGFbaV0sZyk7cmV0dXJuIHRoaXN9ZD09bnVsbCYmZT09bnVsbD8oZT1jLGQ9Yz1iKTplPT1udWxsJiYodHlwZW9mIGM9PSJzdHJpbmciPyhlPWQsZD1iKTooZT1kLGQ9YyxjPWIpKTtpZihlPT09ITEpZT1KO2Vsc2UgaWYoIWUpcmV0dXJuIHRoaXM7Zz09PTEmJihoPWUsZT1mdW5jdGlvbihhKXtmKCkub2ZmKGEpO3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWguZ3VpZHx8KGguZ3VpZD1mLmd1aWQrKykpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LmFkZCh0aGlzLGEsZSxkLGMpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbi5jYWxsKHRoaXMsYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYyxkKXtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iail7dmFyIGU9YS5oYW5kbGVPYmo7ZihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZS5uYW1lc3BhY2U/ZS50eXBlKyIuIitlLm5hbWVzcGFjZTplLnR5cGUsZS5zZWxlY3RvcixlLmhhbmRsZXIpO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKHZhciBnIGluIGEpdGhpcy5vZmYoZyxjLGFbZ10pO3JldHVybiB0aGlzfWlmKGM9PT0hMXx8dHlwZW9mIGM9PSJmdW5jdGlvbiIpZD1jLGM9YjtkPT09ITEmJihkPUopO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7Zih0aGlzLmNvbnRleHQpLm9uKGEsdGhpcy5zZWxlY3RvcixiLGMpO3JldHVybiB0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtmKHRoaXMuY29udGV4dCkub2ZmKGEsdGhpcy5zZWxlY3Rvcnx8IioqIixiKTtyZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhLGMpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVkO2YuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSksYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9O2UuZ3VpZD1jO3doaWxlKGQ8Yi5sZW5ndGgpYltkKytdLmd1aWQ9YztyZXR1cm4gdGhpcy5jbGljayhlKX0saG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSksZi5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Zi5mbltiXT1mdW5jdGlvbihhLGMpe2M9PW51bGwmJihjPWEsYT1udWxsKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfSxmLmF0dHJGbiYmKGYuYXR0ckZuW2JdPSEwKSxDLnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQua2V5SG9va3MpLEQudGVzdChiKSYmKGYuZXZlbnQuZml4SG9va3NbYl09Zi5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31pZihqLm5vZGVUeXBlPT09MSl7Z3x8KGpbZF09YyxqLnNpenNldD1oKTtpZih0eXBlb2YgYiE9InN0cmluZyIpe2lmKGo9PT1iKXtrPSEwO2JyZWFrfX1lbHNlIGlmKG0uZmlsdGVyKGIsW2pdKS5sZW5ndGg+MCl7az1qO2JyZWFrfX1qPWpbYV19ZVtoXT1rfX19ZnVuY3Rpb24gdyhhLGIsYyxlLGYsZyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31qLm5vZGVUeXBlPT09MSYmIWcmJihqW2RdPWMsai5zaXpzZXQ9aCk7aWYoai5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yil7az1qO2JyZWFrfWo9althXX1lW2hdPWt9fX12YXIgYT0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSspK1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9nLGQ9InNpemNhY2hlIisoTWF0aC5yYW5kb20oKSsiIikucmVwbGFjZSgiLiIsIiIpLGU9MCxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD0hMSxpPSEwLGo9L1xcL2csaz0vXHJcbi9nLGw9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aT0hMTtyZXR1cm4gMH0pO3ZhciBtPWZ1bmN0aW9uKGIsZCxlLGYpe2U9ZXx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGU7dmFyIGksaixrLGwsbixxLHIsdCx1PSEwLHY9bS5pc1hNTChkKSx3PVtdLHg9Yjtkb3thLmV4ZWMoIiIpLGk9YS5leGVjKHgpO2lmKGkpe3g9aVszXSx3LnB1c2goaVsxXSk7aWYoaVsyXSl7bD1pWzNdO2JyZWFrfX19d2hpbGUoaSk7aWYody5sZW5ndGg+MSYmcC5leGVjKGIpKWlmKHcubGVuZ3RoPT09MiYmby5yZWxhdGl2ZVt3WzBdXSlqPXkod1swXSt3WzFdLGQsZik7ZWxzZXtqPW8ucmVsYXRpdmVbd1swXV0/W2RdOm0ody5zaGlmdCgpLGQpO3doaWxlKHcubGVuZ3RoKWI9dy5zaGlmdCgpLG8ucmVsYXRpdmVbYl0mJihiKz13LnNoaWZ0KCkpLGo9eShiLGosZil9ZWxzZXshZiYmdy5sZW5ndGg+MSYmZC5ub2RlVHlwZT09PTkmJiF2JiZvLm1hdGNoLklELnRlc3Qod1swXSkmJiFvLm1hdGNoLklELnRlc3Qod1t3Lmxlbmd0aC0xXSkmJihuPW0uZmluZCh3LnNoaWZ0KCksZCx2KSxkPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpWzBdOm4uc2V0WzBdKTtpZihkKXtuPWY/e2V4cHI6dy5wb3AoKSxzZXQ6cyhmKX06bS5maW5kKHcucG9wKCksdy5sZW5ndGg9PT0xJiYod1swXT09PSJ+Inx8d1swXT09PSIrIikmJmQucGFyZW50Tm9kZT9kLnBhcmVudE5vZGU6ZCx2KSxqPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIsbi5zZXQpOm4uc2V0LHcubGVuZ3RoPjA/az1zKGopOnU9ITE7d2hpbGUody5sZW5ndGgpcT13LnBvcCgpLHI9cSxvLnJlbGF0aXZlW3FdP3I9dy5wb3AoKTpxPSIiLHI9PW51bGwmJihyPWQpLG8ucmVsYXRpdmVbcV0oayxyLHYpfWVsc2Ugaz13PVtdfWt8fChrPWopLGt8fG0uZXJyb3IocXx8Yik7aWYoZy5jYWxsKGspPT09IltvYmplY3QgQXJyYXldIilpZighdSllLnB1c2guYXBwbHkoZSxrKTtlbHNlIGlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYmKGtbdF09PT0hMHx8a1t0XS5ub2RlVHlwZT09PTEmJm0uY29udGFpbnMoZCxrW3RdKSkmJmUucHVzaChqW3RdKTtlbHNlIGZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYma1t0XS5ub2RlVHlwZT09PTEmJmUucHVzaChqW3RdKTtlbHNlIHMoayxlKTtsJiYobShsLGgsZSxmKSxtLnVuaXF1ZVNvcnQoZSkpO3JldHVybiBlfTttLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYodSl7aD1pLGEuc29ydCh1KTtpZihoKWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYX0sbS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYSxudWxsLG51bGwsYil9LG0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sbS5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYoIWEpcmV0dXJuW107Zm9yKGU9MCxmPW8ub3JkZXIubGVuZ3RoO2U8ZjtlKyspe2g9by5vcmRlcltlXTtpZihnPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe2k9Z1sxXSxnLnNwbGljZSgxLDEpO2lmKGkuc3Vic3RyKGkubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaiwiIiksZD1vLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKG8ubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxtLmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLHAscT1hLHI9W10scz1jLHQ9YyYmY1swXSYmbS5pc1hNTChjWzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKGggaW4gby5maWx0ZXIpaWYoKGY9by5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe2s9by5maWx0ZXJbaF0sbD1mWzFdLGc9ITEsZi5zcGxpY2UoMSwxKTtpZihsLnN1YnN0cihsLmxlbmd0aC0xKT09PSJcXCIpY29udGludWU7cz09PXImJihyPVtdKTtpZihvLnByZUZpbHRlcltoXSl7Zj1vLnByZUZpbHRlcltoXShmLHMsZCxyLGUsdCk7aWYoIWYpZz1pPSEwO2Vsc2UgaWYoZj09PSEwKWNvbnRpbnVlfWlmKGYpZm9yKG49MDsoaj1zW25dKSE9bnVsbDtuKyspaiYmKGk9ayhqLGYsbixzKSxwPWVeaSxkJiZpIT1udWxsP3A/Zz0hMDpzW25dPSExOnAmJihyLnB1c2goaiksZz0hMCkpO2lmKGkhPT1iKXtkfHwocz1yKSxhPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTtpZighZylyZXR1cm5bXTticmVha319aWYoYT09PXEpaWYoZz09bnVsbCltLmVycm9yKGEpO2Vsc2UgYnJlYWs7cT1hfXJldHVybiBzfSxtLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX07dmFyIG49bS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLm5vZGVUeXBlLGU9IiI7aWYoZCl7aWYoZD09PTF8fGQ9PT05KXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7dmFyIHM9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHQpe3M9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZy5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGU9YS5sZW5ndGg7YzxlO2MrKylkLnB1c2goYVtjXSk7ZWxzZSBmb3IoO2FbY107YysrKWQucHVzaChhW2NdKTtyZXR1cm4gZH19dmFyIHUsdjtjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj91PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uPy0xOjE7cmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmND8tMToxfToodT1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKGEuc291cmNlSW5kZXgmJmIuc291cmNlSW5kZXgpcmV0dXJuIGEuc291cmNlSW5kZXgtYi5zb3VyY2VJbmRleDt2YXIgYyxkLGU9W10sZj1bXSxnPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWc7aWYoZz09PWkpcmV0dXJuIHYoYSxiKTtpZighZylyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gdihlW2tdLGZba10pO3JldHVybiBrPT09Yz92KGEsZltrXSwtMSk6dihlW2tdLGIsMSl9LHY9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYoby5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFkKXt2YXIgZT1jLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBlP2UuaWQ9PT1hWzFdfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxvLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKG8uZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPSJ1bmRlZmluZWQiJiZhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyImJihvLmF0dHJIYW5kbGUuaHJlZj1mdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSksYT1udWxsfSgpLGMucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYT1tLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJfX3NpenpsZV9fIjtiLmlubmVySFRNTD0iPHAgY2xhc3M9J1RFU1QnPjwvcD4iO2lmKCFiLnF1ZXJ5U2VsZWN0b3JBbGx8fGIucXVlcnlTZWxlY3RvckFsbCgiLlRFU1QiKS5sZW5ndGghPT0wKXttPWZ1bmN0aW9uKGIsZSxmLGcpe2U9ZXx8YztpZighZyYmIW0uaXNYTUwoZSkpe3ZhciBoPS9eKFx3KyQpfF5cLihbXHdcLV0rJCl8XiMoW1x3XC1dKyQpLy5leGVjKGIpO2lmKGgmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTkpKXtpZihoWzFdKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYiksZik7aWYoaFsyXSYmby5maW5kLkNMQVNTJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMl0pLGYpfWlmKGUubm9kZVR5cGU9PT05KXtpZihiPT09ImJvZHkiJiZlLmJvZHkpcmV0dXJuIHMoW2UuYm9keV0sZik7aWYoaCYmaFszXSl7dmFyIGk9ZS5nZXRFbGVtZW50QnlJZChoWzNdKTtpZighaXx8IWkucGFyZW50Tm9kZSlyZXR1cm4gcyhbXSxmKTtpZihpLmlkPT09aFszXSlyZXR1cm4gcyhbaV0sZil9dHJ5e3JldHVybiBzKGUucXVlcnlTZWxlY3RvckFsbChiKSxmKX1jYXRjaChqKXt9fWVsc2UgaWYoZS5ub2RlVHlwZT09PTEmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgaz1lLGw9ZS5nZXRBdHRyaWJ1dGUoImlkIiksbj1sfHxkLHA9ZS5wYXJlbnROb2RlLHE9L15ccypbK35dLy50ZXN0KGIpO2w/bj1uLnJlcGxhY2UoLycvZywiXFwkJiIpOmUuc2V0QXR0cmlidXRlKCJpZCIsbikscSYmcCYmKGU9ZS5wYXJlbnROb2RlKTt0cnl7aWYoIXF8fHApcmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWQ9JyIrbisiJ10gIitiKSxmKX1jYXRjaChyKXt9ZmluYWxseXtsfHxrLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBhKGIsZSxmLGcpfTtmb3IodmFyIGUgaW4gYSltW2VdPWFbZV07Yj1udWxsfX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuZG9jdW1lbnRFbGVtZW50LGI9YS5tYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcjtpZihiKXt2YXIgZD0hYi5jYWxsKGMuY3JlYXRlRWxlbWVudCgiZGl2IiksImRpdiIpLGU9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChmKXtlPSEwfW0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFtLmlzWE1MKGEpKXRyeXtpZihlfHwhby5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSl7dmFyIGY9Yi5jYWxsKGEsYyk7aWYoZnx8IWR8fGEuZG9jdW1lbnQmJmEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gZn19Y2F0Y2goZyl7fXJldHVybiBtKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9fX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZighIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MCl7YS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0xKXJldHVybjtvLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIiksby5maW5kLkNMQVNTPWZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTptLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0uaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgeT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT1bXSxmPSIiLGc9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShkPW8ubWF0Y2guUFNFVURPLmV4ZWMoYSkpZis9ZFswXSxhPWEucmVwbGFjZShvLm1hdGNoLlBTRVVETywiIik7YT1vLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKW0oYSxnW2hdLGUsYyk7cmV0dXJuIG0uZmlsdGVyKGYsZSl9O20uYXR0cj1mLmF0dHIsbS5zZWxlY3RvcnMuYXR0ck1hcD17fSxmLmZpbmQ9bSxmLmV4cHI9bS5zZWxlY3RvcnMsZi5leHByWyI6Il09Zi5leHByLmZpbHRlcnMsZi51bmlxdWU9bS51bmlxdWVTb3J0LGYudGV4dD1tLmdldFRleHQsZi5pc1hNTERvYz1tLmlzWE1MLGYuY29udGFpbnM9bS5jb250YWluc30oKTt2YXIgTD0vVW50aWwkLyxNPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLE49LywvLE89L14uW146I1xbXC4sXSokLyxQPUFycmF5LnByb3RvdHlwZS5zbGljZSxRPWYuZXhwci5tYXRjaC5QT1MsUj17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLGMsZDtpZih0eXBlb2YgYSE9InN0cmluZyIpcmV0dXJuIGYoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoZi5jb250YWlucyhiW2NdLHRoaXMpKXJldHVybiEwfSk7dmFyIGU9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGcsaCxpO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtnPWUubGVuZ3RoLGYuZmluZChhLHRoaXNbY10sZSk7aWYoYz4wKWZvcihoPWc7aDxlLmxlbmd0aDtoKyspZm9yKGk9MDtpPGc7aSsrKWlmKGVbaV09PT1lW2hdKXtlLnNwbGljZShoLS0sMSk7YnJlYWt9fXJldHVybiBlfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZihhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVCh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFQodGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiYodHlwZW9mIGE9PSJzdHJpbmciP1EudGVzdChhKT9mKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpmLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQsZSxnPXRoaXNbMF07aWYoZi5pc0FycmF5KGEpKXt2YXIgaD0xO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspZihnKS5pcyhhW2RdKSYmYy5wdXNoKHtzZWxlY3RvcjphW2RdLGVsZW06ZyxsZXZlbDpofSk7Zz1nLnBhcmVudE5vZGUsaCsrfXJldHVybiBjfXZhciBpPVEudGVzdChhKXx8dHlwZW9mIGEhPSJzdHJpbmciP2YoYSxifHx0aGlzLmNvbnRleHQpOjA7Zm9yKGQ9MCxlPXRoaXMubGVuZ3RoO2Q8ZTtkKyspe2c9dGhpc1tkXTt3aGlsZShnKXtpZihpP2kuaW5kZXgoZyk+LTE6Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1ifHxnLm5vZGVUeXBlPT09MTEpYnJlYWt9fWM9Yy5sZW5ndGg+MT9mLnVuaXF1ZShjKTpjO3JldHVybiB0aGlzLnB1c2hTdGFjayhjLCJjbG9zZXN0IixhKX0saW5kZXg6ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuIHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTE7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBmLmluQXJyYXkodGhpc1swXSxmKGEpKTtyZXR1cm4gZi5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJzdHJpbmciP2YoYSxiKTpmLm1ha2VBcnJheShhJiZhLm5vZGVUeXBlP1thXTphKSxkPWYubWVyZ2UodGhpcy5nZXQoKSxjKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhjWzBdKXx8UyhkWzBdKT9kOmYudW5pcXVlKGQpKX0sYW5kU2VsZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZCh0aGlzLnByZXZPYmplY3QpfX0pLGYuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmYi5ub2RlVHlwZSE9PTExP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEucGFyZW50Tm9kZS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gZi5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6Zi5tYWtlQXJyYXkoYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPWYubWFwKHRoaXMsYixjKTtMLnRlc3QoYSl8fChkPWMpLGQmJnR5cGVvZiBkPT0ic3RyaW5nIiYmKGU9Zi5maWx0ZXIoZCxlKSksZT10aGlzLmxlbmd0aD4xJiYhUlthXT9mLnVuaXF1ZShlKTplLCh0aGlzLmxlbmd0aD4xfHxOLnRlc3QoZCkpJiZNLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSxhLFAuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSksZi5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihhLGIsYyl7YyYmKGE9Ijpub3QoIithKyIpIik7cmV0dXJuIGIubGVuZ3RoPT09MT9mLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJbMF0sYSk/W2JbMF1dOltdOmYuZmluZC5tYXRjaGVzKGEsYil9LGRpcjpmdW5jdGlvbihhLGMsZCl7dmFyIGU9W10sZz1hW2NdO3doaWxlKGcmJmcubm9kZVR5cGUhPT05JiYoZD09PWJ8fGcubm9kZVR5cGUhPT0xfHwhZihnKS5pcyhkKSkpZy5ub2RlVHlwZT09PTEmJmUucHVzaChnKSxnPWdbY107cmV0dXJuIGV9LG50aDpmdW5jdGlvbihhLGIsYyxkKXtiPWJ8fDE7dmFyIGU9MDtmb3IoO2E7YT1hW2NdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2U9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7dmFyIGM9W107Zm9yKDthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09MSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KTt2YXIgVj0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGNhbnZhc3xkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsVz0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFg9L15ccysvLFk9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZyxaPS88KFtcdzpdKykvLCQ9Lzx0Ym9keS9pLF89Lzx8JiM/XHcrOy8sYmE9LzwoPzpzY3JpcHR8c3R5bGUpL2ksYmI9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxiYz1uZXcgUmVnRXhwKCI8KD86IitWKyIpIiwiaSIpLGJkPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJlPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmY9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmc9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYmg9VShjKTtiZy5vcHRncm91cD1iZy5vcHRpb24sYmcudGJvZHk9YmcudGZvb3Q9YmcuY29sZ3JvdXA9YmcuY2FwdGlvbj1iZy50aGVhZCxiZy50aD1iZy50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJnLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZi50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1mKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2Yubm9kZU5hbWUodGhpcywiYm9keSIpfHxmKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWYuY2xlYW4oYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmLmNsZWFuKGFyZ3VtZW50cykpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZDsoZD10aGlzW2NdKSE9bnVsbDtjKyspaWYoIWF8fGYuZmlsdGVyKGEsW2RdKS5sZW5ndGgpIWImJmQubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxmLmNsZWFuRGF0YShbZF0pKSxkLnBhcmVudE5vZGUmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKQ0KCXtmb3IodmFyIGE9MCxiOyhiPXRoaXNbYV0pIT1udWxsO2ErKyl7Yi5ub2RlVHlwZT09PTEmJmYuY2xlYW5EYXRhKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYi5maXJzdENoaWxkKWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXthPWE9PW51bGw/ITE6YSxiPWI9PW51bGw/YTpiO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBmLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe2lmKGE9PT1iKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLm5vZGVUeXBlPT09MT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKFcsIiIpOm51bGw7aWYodHlwZW9mIGE9PSJzdHJpbmciJiYhYmEudGVzdChhKSYmKGYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVgudGVzdChhKSkmJiFiZ1soWi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcih2YXIgYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl0aGlzW2NdLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKHRoaXNbY10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksdGhpc1tjXS5pbm5lckhUTUw9YSl9Y2F0Y2goZSl7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19ZWxzZSBmLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Yy5odG1sKGEuY2FsbCh0aGlzLGIsYy5odG1sKCkpKX0pOnRoaXMuZW1wdHkoKS5hcHBlbmQoYSk7cmV0dXJuIHRoaXN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKSxkPWMuaHRtbCgpO2MucmVwbGFjZVdpdGgoYS5jYWxsKHRoaXMsYixkKSl9KTt0eXBlb2YgYSE9InN0cmluZyImJihhPWYoYSkuZGV0YWNoKCkpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5leHRTaWJsaW5nLGM9dGhpcy5wYXJlbnROb2RlO2YodGhpcykucmVtb3ZlKCksYj9mKGIpLmJlZm9yZShhKTpmKGMpLmFwcGVuZChhKX0pfXJldHVybiB0aGlzLmxlbmd0aD90aGlzLnB1c2hTdGFjayhmKGYuaXNGdW5jdGlvbihhKT9hKCk6YSksInJlcGxhY2VXaXRoIixhKTp0aGlzfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGksaj1hWzBdLGs9W107aWYoIWYuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGo9PSJzdHJpbmciJiZiZC50ZXN0KGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKHRoaXMpLmRvbU1hbmlwKGEsYyxkLCEwKX0pO2lmKGYuaXNGdW5jdGlvbihqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPWYodGhpcyk7YVswXT1qLmNhbGwodGhpcyxlLGM/Zy5odG1sKCk6YiksZy5kb21NYW5pcChhLGMsZCl9KTtpZih0aGlzWzBdKXtpPWomJmoucGFyZW50Tm9kZSxmLnN1cHBvcnQucGFyZW50Tm9kZSYmaSYmaS5ub2RlVHlwZT09PTExJiZpLmNoaWxkTm9kZXMubGVuZ3RoPT09dGhpcy5sZW5ndGg/ZT17ZnJhZ21lbnQ6aX06ZT1mLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGg9ZS5mcmFnbWVudCxoLmNoaWxkTm9kZXMubGVuZ3RoPT09MT9nPWg9aC5maXJzdENoaWxkOmc9aC5maXJzdENoaWxkO2lmKGcpe2M9YyYmZi5ub2RlTmFtZShnLCJ0ciIpO2Zvcih2YXIgbD0wLG09dGhpcy5sZW5ndGgsbj1tLTE7bDxtO2wrKylkLmNhbGwoYz9iaSh0aGlzW2xdLGcpOnRoaXNbbF0sZS5jYWNoZWFibGV8fG0+MSYmbDxuP2YuY2xvbmUoaCwhMCwhMCk6aCl9ay5sZW5ndGgmJmYuZWFjaChrLGJwKX1yZXR1cm4gdGhpc319KSxmLmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGcsaCxpLGo9YVswXTtiJiZiWzBdJiYoaT1iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF0pLGkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8KGk9YyksYS5sZW5ndGg9PT0xJiZ0eXBlb2Ygaj09InN0cmluZyImJmoubGVuZ3RoPDUxMiYmaT09PWMmJmouY2hhckF0KDApPT09IjwiJiYhYmIudGVzdChqKSYmKGYuc3VwcG9ydC5jaGVja0Nsb25lfHwhYmQudGVzdChqKSkmJihmLnN1cHBvcnQuaHRtbDVDbG9uZXx8IWJjLnRlc3QoaikpJiYoZz0hMCxoPWYuZnJhZ21lbnRzW2pdLGgmJmghPT0xJiYoZT1oKSksZXx8KGU9aS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZi5jbGVhbihhLGksZSxkKSksZyYmKGYuZnJhZ21lbnRzW2pdPWg/ZToxKTtyZXR1cm57ZnJhZ21lbnQ6ZSxjYWNoZWFibGU6Z319LGYuZnJhZ21lbnRzPXt9LGYuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjKXt2YXIgZD1bXSxlPWYoYyksZz10aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZihnJiZnLm5vZGVUeXBlPT09MTEmJmcuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiZlLmxlbmd0aD09PTEpe2VbYl0odGhpc1swXSk7cmV0dXJuIHRoaXN9Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj0oaD4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpO2YoZVtoXSlbYl0oaiksZD1kLmNvbmNhdChqKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZCxhLGUuc2VsZWN0b3IpfX0pLGYuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxnLGg9Zi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCFiYy50ZXN0KCI8IithLm5vZGVOYW1lKT9hLmNsb25lTm9kZSghMCk6Ym8oYSk7aWYoKCFmLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZi5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZi5pc1hNTERvYyhhKSl7YmsoYSxoKSxkPWJsKGEpLGU9YmwoaCk7Zm9yKGc9MDtkW2ddOysrZyllW2ddJiZiayhkW2ddLGVbZ10pfWlmKGIpe2JqKGEsaCk7aWYoYyl7ZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpYmooZFtnXSxlW2ddKX19ZD1lPW51bGw7cmV0dXJuIGh9LGNsZWFuOmZ1bmN0aW9uKGEsYixkLGUpe3ZhciBnO2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT0idW5kZWZpbmVkIiYmKGI9Yi5vd25lckRvY3VtZW50fHxiWzBdJiZiWzBdLm93bmVyRG9jdW1lbnR8fGMpO3ZhciBoPVtdLGk7Zm9yKHZhciBqPTAsazsoaz1hW2pdKSE9bnVsbDtqKyspe3R5cGVvZiBrPT0ibnVtYmVyIiYmKGsrPSIiKTtpZighayljb250aW51ZTtpZih0eXBlb2Ygaz09InN0cmluZyIpaWYoIV8udGVzdChrKSlrPWIuY3JlYXRlVGV4dE5vZGUoayk7ZWxzZXtrPWsucmVwbGFjZShZLCI8JDE+PC8kMj4iKTt2YXIgbD0oWi5leGVjKGspfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLG09YmdbbF18fGJnLl9kZWZhdWx0LG49bVswXSxvPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yj09PWM/YmguYXBwZW5kQ2hpbGQobyk6VShiKS5hcHBlbmRDaGlsZChvKSxvLmlubmVySFRNTD1tWzFdK2srbVsyXTt3aGlsZShuLS0pbz1vLmxhc3RDaGlsZDtpZighZi5zdXBwb3J0LnRib2R5KXt2YXIgcD0kLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmWC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKFguZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJuKGtbaV0pO2Vsc2UgYm4oayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiZS50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5ldmVudC5zcGVjaWFsLGc9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe2lmKGkubm9kZU5hbWUmJmYubm9EYXRhW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1pW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGogaW4gYi5ldmVudHMpZVtqXT9mLmV2ZW50LnJlbW92ZShpLGopOmYucmVtb3ZlRXZlbnQoaSxqLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9Zz9kZWxldGUgaVtmLmV4cGFuZG9dOmkucmVtb3ZlQXR0cmlidXRlJiZpLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJxPS9hbHBoYVwoW14pXSpcKS9pLGJyPS9vcGFjaXR5PShbXildKikvLGJzPS8oW0EtWl18Xm1zKS9nLGJ0PS9eLT9cZCsoPzpweCk/JC9pLGJ1PS9eLT9cZC8sYnY9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ4PVsiTGVmdCIsIlJpZ2h0Il0sYnk9WyJUb3AiLCJCb3R0b20iXSxieixiQSxiQjtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YnooYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1idi5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYnopcmV0dXJuIGJ6KGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBiQyhhLGIsZCk7Zi5zd2FwKGEsYncsZnVuY3Rpb24oKXtlPWJDKGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJ0LnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBici50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZz1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJmYudHJpbShnLnJlcGxhY2UoYnEsIiIpKT09PSIiKXtjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoZCYmIWQuZmlsdGVyKXJldHVybn1jLmZpbHRlcj1icS50ZXN0KGcpP2cucmVwbGFjZShicSxlKTpnKyIgIitlfX0pLGYoZnVuY3Rpb24oKXtmLnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KGYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihhLGIpe3ZhciBjO2Yuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2I/Yz1ieihhLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW5SaWdodCIpOmM9YS5zdHlsZS5tYXJnaW5SaWdodH0pO3JldHVybiBjfX0pfSksYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYkE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU7Yj1iLnJlcGxhY2UoYnMsIi0kMSIpLnRvTG93ZXJDYXNlKCksKGQ9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSYmKGU9ZC5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkpJiYoYz1lLmdldFByb3BlcnR5VmFsdWUoYiksYz09PSIiJiYhZi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGEpJiYoYz1mLnN0eWxlKGEsYikpKTtyZXR1cm4gY30pLGMuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKGJCPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGc9YS5zdHlsZTtmPT09bnVsbCYmZyYmKGU9Z1tiXSkmJihmPWUpLCFidC50ZXN0KGYpJiZidS50ZXN0KGYpJiYoYz1nLmxlZnQsZD1hLnJ1bnRpbWVTdHlsZSYmYS5ydW50aW1lU3R5bGUubGVmdCxkJiYoYS5ydW50aW1lU3R5bGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxnLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6Znx8MCxmPWcucGl4ZWxMZWZ0KyJweCIsZy5sZWZ0PWMsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9ZCkpO3JldHVybiBmPT09IiI/ImF1dG8iOmZ9KSxiej1iQXx8YkIsZi5leHByJiZmLmV4cHIuZmlsdGVycyYmKGYuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFdpZHRoLGM9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGI9PT0wJiZjPT09MHx8IWYuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihhLnN0eWxlJiZhLnN0eWxlLmRpc3BsYXl8fGYuY3NzKGEsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LGYuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIWYuZXhwci5maWx0ZXJzLmhpZGRlbihhKX0pO3ZhciBiRD0vJTIwL2csYkU9L1xbXF0kLyxiRj0vXHI/XG4vZyxiRz0vIy4qJC8sYkg9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxiST0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYko9L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxiSz0vXig/OkdFVHxIRUFEKSQvLGJMPS9eXC9cLy8sYk09L1w/LyxiTj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxiTz0vXig/OnNlbGVjdHx0ZXh0YXJlYSkvaSxiUD0vXHMrLyxiUT0vKFs/Jl0pXz1bXiZdKi8sYlI9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/KT8vLGJTPWYuZm4ubG9hZCxiVD17fSxiVT17fSxiVixiVyxiWD1bIiovIl0rWyIqIl07dHJ5e2JWPWUuaHJlZn1jYXRjaChiWSl7YlY9Yy5jcmVhdGVFbGVtZW50KCJhIiksYlYuaHJlZj0iIixiVj1iVi5ocmVmfWJXPWJSLmV4ZWMoYlYudG9Mb3dlckNhc2UoKSl8fFtdLGYuZm4uZXh0ZW5kKHtsb2FkOmZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYSE9InN0cmluZyImJmJTKXJldHVybiBiUy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBlPWEuaW5kZXhPZigiICIpO2lmKGU+PTApe3ZhciBnPWEuc2xpY2UoZSxhLmxlbmd0aCk7YT1hLnNsaWNlKDAsZSl9dmFyIGg9IkdFVCI7YyYmKGYuaXNGdW5jdGlvbihjKT8oZD1jLGM9Yik6dHlwZW9mIGM9PSJvYmplY3QiJiYoYz1mLnBhcmFtKGMsZi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLGg9IlBPU1QiKSk7dmFyIGk9dGhpcztmLmFqYXgoe3VybDphLHR5cGU6aCxkYXRhVHlwZToiaHRtbCIsZGF0YTpjLGNvbXBsZXRlOmZ1bmN0aW9uKGEsYixjKXtjPWEucmVzcG9uc2VUZXh0LGEuaXNSZXNvbHZlZCgpJiYoYS5kb25lKGZ1bmN0aW9uKGEpe2M9YX0pLGkuaHRtbChnP2YoIjxkaXY+IikuYXBwZW5kKGMucmVwbGFjZShiTiwiIikpLmZpbmQoZyk6YykpLGQmJmkuZWFjaChkLFtjLGIsYV0pfX0pO3JldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP2YubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8Yk8udGVzdCh0aGlzLm5vZGVOYW1lKXx8YkkudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPWYodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpmLmlzQXJyYXkoYyk/Zi5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYkYsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGJGLCJcclxuIil9fSkuZ2V0KCl9fSksZi5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2JfKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksYl8oYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlYsaXNMb2NhbDpiSi50ZXN0KGJXWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Ylh9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6YlooYlQpLGFqYXhUcmFuc3BvcnQ6YlooYlUpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2NiKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWNjKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5maXJlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksaj1kLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtPXt9LG4sbyxwLHEscixzPTAsdCx1LHY9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXMpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPW1bY109bVtjXXx8YSxsW2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzPT09Mj9uOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHM9PT0yKXtpZighbyl7bz17fTt3aGlsZShjPWJILmV4ZWMobikpb1tjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1vW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtzfHwoZC5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLHAmJnAuYWJvcnQoYSksdygwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHYpLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsdi5jb21wbGV0ZT1pLmFkZCx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJHLCIiKS5yZXBsYWNlKGJMLGJXWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYlApLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJSLmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iV1sxXSYmclsyXT09YldbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiV1szXXx8KGJXWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGIkKGJULGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJLLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJNLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYlEsIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYk0udGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiWCsiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1iJChiVSxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7aWYoczwyKXcoLTEseik7ZWxzZSB0aHJvdyB6fX1yZXR1cm4gdn0scGFyYW06ZnVuY3Rpb24oYSxjKXt2YXIgZD1bXSxlPWZ1bmN0aW9uKGEsYil7Yj1mLmlzRnVuY3Rpb24oYik/YigpOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2M9PT1iJiYoYz1mLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7aWYoZi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIWYuaXNQbGFpbk9iamVjdChhKSlmLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IodmFyIGcgaW4gYSljYShnLGFbZ10sYyxlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShiRCwiKyIpfX0pLGYuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO3ZhciBjZD1mLm5vdygpLGNlPS8oXD0pXD8oJnwkKXxcP1w/L2k7Zi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3JldHVybiBmLmV4cGFuZG8rIl8iK2NkKyt9fSksZi5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGU9Yi5jb250ZW50VHlwZT09PSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiJiZ0eXBlb2YgYi5kYXRhPT0ic3RyaW5nIjtpZihiLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGIuanNvbnAhPT0hMSYmKGNlLnRlc3QoYi51cmwpfHxlJiZjZS50ZXN0KGIuZGF0YSkpKXt2YXIgZyxoPWIuanNvbnBDYWxsYmFjaz1mLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaT1hW2hdLGo9Yi51cmwsaz1iLmRhdGEsbD0iJDEiK2grIiQyIjtiLmpzb25wIT09ITEmJihqPWoucmVwbGFjZShjZSxsKSxiLnVybD09PWomJihlJiYoaz1rLnJlcGxhY2UoY2UsbCkpLGIuZGF0YT09PWsmJihqKz0oL1w/Ly50ZXN0KGopPyImIjoiPyIpK2IuanNvbnArIj0iK2gpKSksYi51cmw9aixiLmRhdGE9ayxhW2hdPWZ1bmN0aW9uKGEpe2c9W2FdfSxkLmFsd2F5cyhmdW5jdGlvbigpe2FbaF09aSxnJiZmLmlzRnVuY3Rpb24oaSkmJmFbaF0oZ1swXSl9KSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtnfHxmLmVycm9yKGgrIiB3YXMgbm90IGNhbGxlZCIpO3JldHVybiBnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiI7cmV0dXJuInNjcmlwdCJ9fSksZi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe2YuZ2xvYmFsRXZhbChhKTtyZXR1cm4gYX19fSksZi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2EuY2FjaGU9PT1iJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxmLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGQsZT1jLmhlYWR8fGMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8Yy5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZixnKXtkPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksZC5hc3luYz0iYXN5bmMiLGEuc2NyaXB0Q2hhcnNldCYmKGQuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGQuc3JjPWEudXJsLGQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7aWYoY3x8IWQucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChkLnJlYWR5U3RhdGUpKWQub25sb2FkPWQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZSYmZC5wYXJlbnROb2RlJiZlLnJlbW92ZUNoaWxkKGQpLGQ9YixjfHxnKDIwMCwic3VjY2VzcyIpfSxlLmluc2VydEJlZm9yZShkLGUuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7ZCYmZC5vbmxvYWQoMCwxKX19fX0pO3ZhciBjZj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gY2gpY2hbYV0oMCwxKX06ITEsY2c9MCxjaDtmLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmY2koKXx8Y2ooKX06Y2ksZnVuY3Rpb24oYSl7Zi5leHRlbmQoZi5zdXBwb3J0LHthamF4OiEhYSxjb3JzOiEhYSYmIndpdGhDcmVkZW50aWFscyJpbiBhfSl9KGYuYWpheFNldHRpbmdzLnhocigpKSxmLnN1cHBvcnQuYWpheCYmZi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGMpe2lmKCFjLmNyb3NzRG9tYWlufHxmLnN1cHBvcnQuY29ycyl7dmFyIGQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxnKXt2YXIgaD1jLnhocigpLGksajtjLnVzZXJuYW1lP2gub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyxjLnVzZXJuYW1lLGMucGFzc3dvcmQpOmgub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyk7aWYoYy54aHJGaWVsZHMpZm9yKGogaW4gYy54aHJGaWVsZHMpaFtqXT1jLnhockZpZWxkc1tqXTtjLm1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUmJmgub3ZlcnJpZGVNaW1lVHlwZShjLm1pbWVUeXBlKSwhYy5jcm9zc0RvbWFpbiYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGogaW4gZSloLnNldFJlcXVlc3RIZWFkZXIoaixlW2pdKX1jYXRjaChrKXt9aC5zZW5kKGMuaGFzQ29udGVudCYmYy5kYXRhfHxudWxsKSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGosayxsLG0sbjt0cnl7aWYoZCYmKGV8fGgucmVhZHlTdGF0ZT09PTQpKXtkPWIsaSYmKGgub25yZWFkeXN0YXRlY2hhbmdlPWYubm9vcCxjZiYmZGVsZXRlIGNoW2ldKTtpZihlKWgucmVhZHlTdGF0ZSE9PTQmJmguYWJvcnQoKTtlbHNle2o9aC5zdGF0dXMsbD1oLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLG09e30sbj1oLnJlc3BvbnNlWE1MLG4mJm4uZG9jdW1lbnRFbGVtZW50JiYobS54bWw9biksbS50ZXh0PWgucmVzcG9uc2VUZXh0O3RyeXtrPWguc3RhdHVzVGV4dH1jYXRjaChvKXtrPSIifSFqJiZjLmlzTG9jYWwmJiFjLmNyb3NzRG9tYWluP2o9bS50ZXh0PzIwMDo0MDQ6aj09PTEyMjMmJihqPTIwNCl9fX1jYXRjaChwKXtlfHxnKC0xLHApfW0mJmcoaixrLG0sbCl9LCFjLmFzeW5jfHxoLnJlYWR5U3RhdGU9PT00P2QoKTooaT0rK2NnLGNmJiYoY2h8fChjaD17fSxmKGEpLnVubG9hZChjZikpLGNoW2ldPWQpLGgub25yZWFkeXN0YXRlY2hhbmdlPWQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQoMCwxKX19fX0pO3ZhciBjaz17fSxjbCxjbSxjbj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sY289L14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0qKSQvaSxjcCxjcT1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXSxjcjtmLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGN1KCJzaG93IiwzKSxhLGIsYyk7Zm9yKHZhciBnPTAsaD10aGlzLmxlbmd0aDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1kLnN0eWxlLmRpc3BsYXksIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZlPT09Im5vbmUiJiYoZT1kLnN0eWxlLmRpc3BsYXk9IiIpLGU9PT0iIiYmZi5jc3MoZCwiZGlzcGxheSIpPT09Im5vbmUiJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGN2KGQubm9kZU5hbWUpKSk7Zm9yKGc9MDtnPGg7ZysrKXtkPXRoaXNbZ107aWYoZC5zdHlsZSl7ZT1kLnN0eWxlLmRpc3BsYXk7aWYoZT09PSIifHxlPT09Im5vbmUiKWQuc3R5bGUuZGlzcGxheT1mLl9kYXRhKGQsIm9sZGRpc3BsYXkiKXx8IiJ9fXJldHVybiB0aGlzfSxoaWRlOmZ1bmN0aW9uKGEsYixjKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGN1KCJoaWRlIiwzKSxhLGIsYyk7dmFyIGQsZSxnPTAsaD10aGlzLmxlbmd0aDtmb3IoO2c8aDtnKyspZD10aGlzW2ddLGQuc3R5bGUmJihlPWYuY3NzKGQsImRpc3BsYXkiKSxlIT09Im5vbmUiJiYhZi5fZGF0YShkLCJvbGRkaXNwbGF5IikmJmYuX2RhdGEoZCwib2xkZGlzcGxheSIsZSkpO2ZvcihnPTA7ZzxoO2crKyl0aGlzW2ddLnN0eWxlJiYodGhpc1tnXS5zdHlsZS5kaXNwbGF5PSJub25lIik7cmV0dXJuIHRoaXN9LF90b2dnbGU6Zi5mbi50b2dnbGUsdG9nZ2xlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10eXBlb2YgYT09ImJvb2xlYW4iO2YuaXNGdW5jdGlvbihhKSYmZi5pc0Z1bmN0aW9uKGIpP3RoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YT09bnVsbHx8ZD90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kP2E6Zih0aGlzKS5pcygiOmhpZGRlbiIpO2YodGhpcylbYj8ic2hvdyI6ImhpZGUiXSgpfSk6dGhpcy5hbmltYXRlKGN1KCJ0b2dnbGUiLDMpLGEsYixjKTtyZXR1cm4gdGhpc30sZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9uIGcoKXtlLnF1ZXVlPT09ITEmJmYuX21hcmsodGhpcyk7dmFyIGI9Zi5leHRlbmQoe30sZSksYz10aGlzLm5vZGVUeXBlPT09MSxkPWMmJmYodGhpcykuaXMoIjpoaWRkZW4iKSxnLGgsaSxqLGssbCxtLG4sbztiLmFuaW1hdGVkUHJvcGVydGllcz17fTtmb3IoaSBpbiBhKXtnPWYuY2FtZWxDYXNlKGkpLGkhPT1nJiYoYVtnXT1hW2ldLGRlbGV0ZSBhW2ldKSxoPWFbZ10sZi5pc0FycmF5KGgpPyhiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1oWzFdLGg9YVtnXT1oWzBdKTpiLmFuaW1hdGVkUHJvcGVydGllc1tnXT1iLnNwZWNpYWxFYXNpbmcmJmIuc3BlY2lhbEVhc2luZ1tnXXx8Yi5lYXNpbmd8fCJzd2luZyI7aWYoaD09PSJoaWRlIiYmZHx8aD09PSJzaG93IiYmIWQpcmV0dXJuIGIuY29tcGxldGUuY2FsbCh0aGlzKTtjJiYoZz09PSJoZWlnaHQifHxnPT09IndpZHRoIikmJihiLm92ZXJmbG93PVt0aGlzLnN0eWxlLm92ZXJmbG93LHRoaXMuc3R5bGUub3ZlcmZsb3dYLHRoaXMuc3R5bGUub3ZlcmZsb3dZXSxmLmNzcyh0aGlzLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmZi5jc3ModGhpcywiZmxvYXQiKT09PSJub25lIiYmKCFmLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8Y3YodGhpcy5ub2RlTmFtZSk9PT0iaW5saW5lIj90aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI6dGhpcy5zdHlsZS56b29tPTEpKX1iLm92ZXJmbG93IT1udWxsJiYodGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7Zm9yKGkgaW4gYSlqPW5ldyBmLmZ4KHRoaXMsYixpKSxoPWFbaV0sY24udGVzdChoKT8obz1mLl9kYXRhKHRoaXMsInRvZ2dsZSIraSl8fChoPT09InRvZ2dsZSI/ZD8ic2hvdyI6ImhpZGUiOjApLG8/KGYuX2RhdGEodGhpcywidG9nZ2xlIitpLG89PT0ic2hvdyI/ImhpZGUiOiJzaG93IiksaltvXSgpKTpqW2hdKCkpOihrPWNvLmV4ZWMoaCksbD1qLmN1cigpLGs/KG09cGFyc2VGbG9hdChrWzJdKSxuPWtbM118fChmLmNzc051bWJlcltpXT8iIjoicHgiKSxuIT09InB4IiYmKGYuc3R5bGUodGhpcyxpLChtfHwxKStuKSxsPShtfHwxKS9qLmN1cigpKmwsZi5zdHlsZSh0aGlzLGksbCtuKSksa1sxXSYmKG09KGtbMV09PT0iLT0iPy0xOjEpKm0rbCksai5jdXN0b20obCxtLG4pKTpqLmN1c3RvbShsLGgsIiIpKTtyZXR1cm4hMH12YXIgZT1mLnNwZWVkKGIsYyxkKTtpZihmLmlzRW1wdHlPYmplY3QoYSkpcmV0dXJuIHRoaXMuZWFjaChlLmNvbXBsZXRlLFshMV0pO2E9Zi5leHRlbmQoe30sYSk7cmV0dXJuIGUucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShlLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYyxkKXt0eXBlb2YgYSE9InN0cmluZyImJihkPWMsYz1hLGE9YiksYyYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiBoKGEsYixjKXt2YXIgZT1iW2NdO2YucmVtb3ZlRGF0YShhLGMsITApLGUuc3RvcChkKX12YXIgYixjPSExLGU9Zi50aW1lcnMsZz1mLl9kYXRhKHRoaXMpO2R8fGYuX3VubWFyayghMCx0aGlzKTtpZihhPT1udWxsKWZvcihiIGluIGcpZ1tiXSYmZ1tiXS5zdG9wJiZiLmluZGV4T2YoIi5ydW4iKT09PWIubGVuZ3RoLTQmJmgodGhpcyxnLGIpO2Vsc2UgZ1tiPWErIi5ydW4iXSYmZ1tiXS5zdG9wJiZoKHRoaXMsZyxiKTtmb3IoYj1lLmxlbmd0aDtiLS07KWVbYl0uZWxlbT09PXRoaXMmJihhPT1udWxsfHxlW2JdLnF1ZXVlPT09YSkmJihkP2VbYl0oITApOmVbYl0uc2F2ZVN0YXRlKCksYz0hMCxlLnNwbGljZShiLDEpKTsoIWR8fCFjKSYmZi5kZXF1ZXVlKHRoaXMsYSl9KX19KSxmLmVhY2goe3NsaWRlRG93bjpjdSgic2hvdyIsMSksc2xpZGVVcDpjdSgiaGlkZSIsMSksc2xpZGVUb2dnbGU6Y3UoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksZi5leHRlbmQoe3NwZWVkOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/Zi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxmLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWYuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1mLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gZi5meC5zcGVlZHM/Zi5meC5zcGVlZHNbZC5kdXJhdGlvbl06Zi5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZC5xdWV1ZT09bnVsbHx8ZC5xdWV1ZT09PSEwKWQucXVldWU9ImZ4IjtkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oYSl7Zi5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlP2YuZGVxdWV1ZSh0aGlzLGQucXVldWUpOmEhPT0hMSYmZi5fdW5tYXJrKHRoaXMpfTtyZXR1cm4gZH0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMrZCphfSxzd2luZzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0aC5QSSkvMisuNSkqZCtjfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKGEsYixjKXt0aGlzLm9wdGlvbnM9Yix0aGlzLmVsZW09YSx0aGlzLnByb3A9YyxiLm9yaWc9Yi5vcmlnfHx7fX19KSxmLmZ4LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLChmLmZ4LnN0ZXBbdGhpcy5wcm9wXXx8Zi5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0sY3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhLGI9Zi5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCk7cmV0dXJuIGlzTmFOKGE9cGFyc2VGbG9hdChiKSk/IWJ8fGI9PT0iYXV0byI/MDpiOmF9LGN1c3RvbTpmdW5jdGlvbihhLGMsZCl7ZnVuY3Rpb24gaChhKXtyZXR1cm4gZS5zdGVwKGEpfXZhciBlPXRoaXMsZz1mLmZ4O3RoaXMuc3RhcnRUaW1lPWNyfHxjcygpLHRoaXMuZW5kPWMsdGhpcy5ub3c9dGhpcy5zdGFydD1hLHRoaXMucG9zPXRoaXMuc3RhdGU9MCx0aGlzLnVuaXQ9ZHx8dGhpcy51bml0fHwoZi5jc3NOdW1iZXJbdGhpcy5wcm9wXT8iIjoicHgiKSxoLnF1ZXVlPXRoaXMub3B0aW9ucy5xdWV1ZSxoLmVsZW09dGhpcy5lbGVtLGguc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7ZS5vcHRpb25zLmhpZGUmJmYuX2RhdGEoZS5lbGVtLCJmeHNob3ciK2UucHJvcCk9PT1iJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3AsZS5zdGFydCl9LGgoKSYmZi50aW1lcnMucHVzaChoKSYmIWNwJiYoY3A9c2V0SW50ZXJ2YWwoZy50aWNrLGcuaW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3ZhciBhPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCk7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1hfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5zaG93PSEwLGEhPT1iP3RoaXMuY3VzdG9tKHRoaXMuY3VyKCksYSk6dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpLGYodGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWYuX2RhdGEodGhpcy5lbGVtLCJmeHNob3ciK3RoaXMucHJvcCl8fGYuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLmhpZGU9ITAsdGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT1jcnx8Y3MoKSxnPSEwLGg9dGhpcy5lbGVtLGk9dGhpcy5vcHRpb25zO2lmKGF8fGU+PWkuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLGkuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF09ITA7Zm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpaS5hbmltYXRlZFByb3BlcnRpZXNbYl0hPT0hMCYmKGc9ITEpO2lmKGcpe2kub3ZlcmZsb3chPW51bGwmJiFmLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyYmZi5lYWNoKFsiIiwiWCIsIlkiXSxmdW5jdGlvbihhLGIpe2guc3R5bGVbIm92ZXJmbG93IitiXT1pLm92ZXJmbG93W2FdfSksaS5oaWRlJiZmKGgpLmhpZGUoKTtpZihpLmhpZGV8fGkuc2hvdylmb3IoYiBpbiBpLmFuaW1hdGVkUHJvcGVydGllcylmLnN0eWxlKGgsYixpLm9yaWdbYl0pLGYucmVtb3ZlRGF0YShoLCJmeHNob3ciK2IsITApLGYucmVtb3ZlRGF0YShoLCJ0b2dnbGUiK2IsITApO2Q9aS5jb21wbGV0ZSxkJiYoaS5jb21wbGV0ZT0hMSxkLmNhbGwoaCkpfXJldHVybiExfWkuZHVyYXRpb249PUluZmluaXR5P3RoaXMubm93PWU6KGM9ZS10aGlzLnN0YXJ0VGltZSx0aGlzLnN0YXRlPWMvaS5kdXJhdGlvbix0aGlzLnBvcz1mLmVhc2luZ1tpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdXSh0aGlzLnN0YXRlLGMsMCwxLGkuZHVyYXRpb24pLHRoaXMubm93PXRoaXMuc3RhcnQrKHRoaXMuZW5kLXRoaXMuc3RhcnQpKnRoaXMucG9zKSx0aGlzLnVwZGF0ZSgpO3JldHVybiEwfX0sZi5leHRlbmQoZi5meCx7dGljazpmdW5jdGlvbigpe3ZhciBhLGI9Zi50aW1lcnMsYz0wO2Zvcig7YzxiLmxlbmd0aDtjKyspYT1iW2NdLCFhKCkmJmJbY109PT1hJiZiLnNwbGljZShjLS0sMSk7Yi5sZW5ndGh8fGYuZnguc3RvcCgpfSxpbnRlcnZhbDoxMyxzdG9wOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjcCksY3A9bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7YS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbD9hLmVsZW0uc3R5bGVbYS5wcm9wXT1hLm5vdythLnVuaXQ6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0pLGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmZ4LnN0ZXBbYl09ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sYixNYXRoLm1heCgwLGEubm93KSthLnVuaXQpfX0pLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZi5ncmVwKGYudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGN3PS9edCg/OmFibGV8ZHxoKSQvaSxjeD0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9mLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChkKXt9dmFyIGU9Yi5vd25lckRvY3VtZW50LGc9ZS5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFmLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9ZS5ib2R5LGk9Y3koZSksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGMsZD1iLm9mZnNldFBhcmVudCxlPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjdy50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGU9ZCxkPWIub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3gudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3gudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y3koZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y3kodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhhLGQsInBhZGRpbmciKSk6dGhpc1tkXSgpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9hdChmLmNzcyhiLGQsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTnVtZXJpYyhqKT9qOml9cmV0dXJuIHRoaXMuY3NzKGQsdHlwZW9mIGE9PSJzdHJpbmciP2E6YSsicHgiKX19KSxhLmpRdWVyeT1hLiQ9Zix0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpRdWVyeSYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KX0pKHdpbmRvdyk7DQoJJC5ub0NvbmZsaWN0KCk7DQp9DQoJDQoNCg0KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCS8vIENoYW5nZSB0aGUgcHJlZml4IG9mIHNvdXJjZSBkYXRhIG9uIGNoYW5nZQ0KCXZhciBEYXRhSW5wdXQgPSBqUXVlcnkoImlucHV0W3R5cGU9J3RleHQnXVtuYW1lKj0nRGF0YSddIik7DQoJaWYgKGpRdWVyeShEYXRhSW5wdXQpLmxlbmd0aD4wKXsNCgkJDQoJCWpRdWVyeSgiI3RhYmxlY29udGFpbmVyIC5wYWdldGFibGUgc2VsZWN0IikuY2hhbmdlKGZ1bmN0aW9uKCl7DQoJCQl2YXIgRGF0YSA9IGpRdWVyeShEYXRhSW5wdXQpLnZhbCgpOw0KCQkJRGF0YSA9IERhdGEucmVwbGFjZSgiIyIsIiIpOw0KCQkJRGF0YSA9IERhdGEucmVwbGFjZSgnQCcsIiIpOw0KCQkJDQoJCQl2YXIgU2VsZWN0ZWQgPSBqUXVlcnkodGhpcykudmFsKCk7DQoJCQlpZiAoU2VsZWN0ZWQgPT0gJ2FjY291bnQnKXsJCQkNCgkJCQlqUXVlcnkoRGF0YUlucHV0KS52YWwoIkAiK0RhdGEpOw0KCQkJfQ0KCQkJZWxzZSBpZiAoU2VsZWN0ZWQgPT0gJ3NlYXJjaCcpew0KCQkJCWpRdWVyeShEYXRhSW5wdXQpLnZhbChEYXRhKTsJCQkNCgkJCX0NCgkJCWVsc2UgaWYgKFNlbGVjdGVkID09ICdoYXNodGFnJyl7DQoJCQkJalF1ZXJ5KERhdGFJbnB1dCkudmFsKCIjIitEYXRhKTsNCgkJCX0JDQoJCQkNCgkJfSkNCgl9DQoJDQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJLy8gQUpBWCBTRUFSQ0gNCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgl2YXIgeGhyID0gIiI7CQ0KCXZhciB0YWJuYW1lID0gIiI7DQoJdmFyIHBvc3R1cmwgPSAiIjsNCgl2YXIgVGltZU91dDsNCglqUXVlcnkoIi5zZWFyY2giKS5rZXl1cChmdW5jdGlvbihlKXsNCgkJLy8gQ2xlYXIgdGltZW91dCBzbyBzZWFyY2hpbmcgaXMgY2FuY2VsZWQgd2hpbGUgc3RpbGwgdHlwaW5nDQoJCWNsZWFyVGltZW91dChUaW1lT3V0KTsNCgkJdGFibmFtZSA9IGpRdWVyeSh0aGlzKS5wYXJlbnQoKS5hdHRyKCJpZCIpOwkJDQoJCXBvc3R1cmwgPSBqUXVlcnkoIiMiK3RhYm5hbWUpLmZpbmQoIi5wb3N0dXJsIikudGV4dCgpOw0KCQkvLyBTZXQgdGhlIHRpbWVvdXQgdG8gc2VhcmNoDQoJCVRpbWVPdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QXBwbHlGaWx0ZXIoKX0sNDAwKTsJCQkJDQoJfSk7DQoNCglmdW5jdGlvbiBBcHBseUZpbHRlcigpew0KCQkvLyBHZXQgdmFsdWUgb2Ygc2VhcmNoIGlucHV0DQoJCXZhciB2YWx1ZSA9IGpRdWVyeSgiIyIrdGFibmFtZSsiIC5zZWFyY2giKS52YWwoKTsJCQ0KCQkvLyBJZiBhIHdhcyBhbHJlYWR5IHNlbnQsIHN0b3AgcmlnaHQgaGVyZQ0KCQlpZih4aHIgIT09ICIiKSB7IHhoci5hYm9ydCgpOyB9DQoJCQkvLyBDaGFuZ2UgdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIHRvIGEgbG9hZGluZyBpbmRpY2F0b3INCgkJCWpRdWVyeSgiI3BhZ2VfY29udGVudCAjIiArIHRhYm5hbWUgKyAiIC5wYWdldGFibGUgdGJvZHkiKS5odG1sKCI8dGQgY29sc3Bhbj0nMjAnIGFsaWduPSdjZW50ZXInIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXInPkxvYWRpbmcuLi48L3RkPiIpOw0KCQkvLyBNYWtlIHRoZSBBamF4IGNhbGwNCgkJICB4aHIgPSBqUXVlcnkuYWpheCh7DQoJCQl0eXBlOiAiUE9TVCIsDQoJCQlkYXRhOiAic2VhcmNoPSIrZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSwNCgkJICAgIHVybDogcG9zdHVybCwNCgkJICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsNCgkJICAgIAl2YXIganFPYmogPSBqUXVlcnkoZGF0YSk7DQoJCSAgICAJdmFyIHJlc3VsdCA9IGpxT2JqLmZpbmQoIiNwYWdlX2NvbnRlbnQgIyIgKyB0YWJuYW1lICsgIiAudGFiY29udGVudCIpLmh0bWwoKTsNCgkJICAgIAlqUXVlcnkoIiNwYWdlX2NvbnRlbnQgIyIgKyB0YWJuYW1lICsgIiAudGFiY29udGVudCIpLmh0bWwocmVzdWx0KTsNCgkJICAgIH0NCgkJICB9KTsNCgl9DQoJDQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJLy8gU0VBUkNIIEZJRUxEDQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJDQoJdmFyIG9ydmFsID0gIiI7DQoJdmFyIG9sZHZhbCA9ICIiOw0KCWpRdWVyeSgiLnNlYXJjaCIpLmZvY3VzKGZ1bmN0aW9uKGV2ZW50KXsNCgkJb2xkdmFsID0galF1ZXJ5KHRoaXMpLmF0dHIoInZhbHVlIik7DQoJCWlmKG9ydmFsID09ICIiKXsNCgkJCW9ydmFsID0gb2xkdmFsOwkJCQ0KCQl9DQoJCWlmIChvbGR2YWwgPT0gb3J2YWwpew0KCQkJalF1ZXJ5KHRoaXMpLmF0dHIoInZhbHVlIiwiIik7DQoJCX0NCgl9KS5ibHVyKGZ1bmN0aW9uKGV2ZW50KXsJCQ0KCQlpZiAoKGpRdWVyeSh0aGlzKS5hdHRyKCJ2YWx1ZSIpKT09IiIpew0KCQkJalF1ZXJ5KHRoaXMpLmF0dHIoInZhbHVlIixvbGR2YWwpOw0KCQl9CQkNCgl9KTsNCgkNCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJLy8gU0VUVElOR1MgRklFTEQNCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJDQoJalF1ZXJ5KCIuY21zX3RleHRmaWVsZFtuYW1lKj0nUmVmcmVzaEludGVydmFsJ10iKS5rZXl1cChmdW5jdGlvbigpew0KCQl0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5yZXBsYWNlKC9cRC9nLCAnJyk7DQoJfSk7DQoJDQp9KQ==]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.tooltip.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IFRvb2x0aXAgcGx1Z2luIDEuMwogKgogKiBodHRwOi8vYmFzc2lzdGFuY2UuZGUvanF1ZXJ5LXBsdWdpbnMvanF1ZXJ5LXBsdWdpbi10b29sdGlwLwogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1BsdWdpbnMvVG9vbHRpcAogKgogKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IErDtnJuIFphZWZmZXJlcgogKgogKiBqUXVlcnlJZDoganF1ZXJ5LnRvb2x0aXAuanMgNTc0MSAyMDA4LTA2LTIxIDE1OjIyOjE2WiBqb2Vybi56YWVmZmVyZXIgalF1ZXJ5CiAqIAogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlczoKICogICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiAgIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbAogKi87KGZ1bmN0aW9uKGpRdWVyeSl7dmFyIGhlbHBlcj17fSxjdXJyZW50LHRpdGxlLHRJRCxJRT1qUXVlcnkuYnJvd3Nlci5tc2llJiYvTVNJRVxzKDVcLjV8NlwuKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0cmFjaz1mYWxzZTtqUXVlcnkudG9vbHRpcD17YmxvY2tlZDpmYWxzZSxkZWZhdWx0czp7ZGVsYXk6MjAwLGZhZGU6ZmFsc2Usc2hvd1VSTDp0cnVlLGV4dHJhQ2xhc3M6IiIsdG9wOjE1LGxlZnQ6MTUsaWQ6InRvb2x0aXAifSxibG9jazpmdW5jdGlvbigpe2pRdWVyeS50b29sdGlwLmJsb2NrZWQ9IWpRdWVyeS50b29sdGlwLmJsb2NrZWQ7fX07alF1ZXJ5LmZuLmV4dGVuZCh7dG9vbHRpcDpmdW5jdGlvbihzZXR0aW5ncyl7c2V0dGluZ3M9alF1ZXJ5LmV4dGVuZCh7fSxqUXVlcnkudG9vbHRpcC5kZWZhdWx0cyxzZXR0aW5ncyk7Y3JlYXRlSGVscGVyKHNldHRpbmdzKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5LmRhdGEodGhpcywidG9vbHRpcCIsc2V0dGluZ3MpO3RoaXMudE9wYWNpdHk9aGVscGVyLnBhcmVudC5jc3MoIm9wYWNpdHkiKTt0aGlzLnRvb2x0aXBUZXh0PXRoaXMudGl0bGU7alF1ZXJ5KHRoaXMpLnJlbW92ZUF0dHIoInRpdGxlIik7dGhpcy5hbHQ9IiI7fSkubW91c2VvdmVyKHNhdmUpLm1vdXNlb3V0KGhpZGUpLmNsaWNrKGhpZGUpO30sZml4UE5HOklFP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpbWFnZT1qUXVlcnkodGhpcykuY3NzKCdiYWNrZ3JvdW5kSW1hZ2UnKTtpZihpbWFnZS5tYXRjaCgvXnVybFwoWyInXT8oLipcLnBuZylbIiddP1wpalF1ZXJ5L2kpKXtpbWFnZT1SZWdFeHAualF1ZXJ5MTtqUXVlcnkodGhpcykuY3NzKHsnYmFja2dyb3VuZEltYWdlJzonbm9uZScsJ2ZpbHRlcic6InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKGVuYWJsZWQ9dHJ1ZSwgc2l6aW5nTWV0aG9kPWNyb3AsIHNyYz0nIitpbWFnZSsiJykifSkuZWFjaChmdW5jdGlvbigpe3ZhciBwb3NpdGlvbj1qUXVlcnkodGhpcykuY3NzKCdwb3NpdGlvbicpO2lmKHBvc2l0aW9uIT0nYWJzb2x1dGUnJiZwb3NpdGlvbiE9J3JlbGF0aXZlJylqUXVlcnkodGhpcykuY3NzKCdwb3NpdGlvbicsJ3JlbGF0aXZlJyk7fSk7fX0pO306ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LHVuZml4UE5HOklFP2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeSh0aGlzKS5jc3MoeydmaWx0ZXInOicnLGJhY2tncm91bmRJbWFnZTonJ30pO30pO306ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LGhpZGVXaGVuRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5KHRoaXMpW2pRdWVyeSh0aGlzKS5odG1sKCk/InNob3ciOiJoaWRlIl0oKTt9KTt9LHVybDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHIoJ2hyZWYnKXx8dGhpcy5hdHRyKCdzcmMnKTt9fSk7ZnVuY3Rpb24gY3JlYXRlSGVscGVyKHNldHRpbmdzKXtpZihoZWxwZXIucGFyZW50KXJldHVybjtoZWxwZXIucGFyZW50PWpRdWVyeSgnPGRpdiBpZD0iJytzZXR0aW5ncy5pZCsnIj48aDM+PC9oMz48ZGl2IGNsYXNzPSJib2R5Ij48L2Rpdj48ZGl2IGNsYXNzPSJ1cmwiPjwvZGl2PjwvZGl2PicpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmhpZGUoKTtpZihqUXVlcnkuZm4uYmdpZnJhbWUpaGVscGVyLnBhcmVudC5iZ2lmcmFtZSgpO2hlbHBlci50aXRsZT1qUXVlcnkoJ2gzJyxoZWxwZXIucGFyZW50KTtoZWxwZXIuYm9keT1qUXVlcnkoJ2Rpdi5ib2R5JyxoZWxwZXIucGFyZW50KTtoZWxwZXIudXJsPWpRdWVyeSgnZGl2LnVybCcsaGVscGVyLnBhcmVudCk7fWZ1bmN0aW9uIHNldHRpbmdzKGVsZW1lbnQpe3JldHVybiBqUXVlcnkuZGF0YShlbGVtZW50LCJ0b29sdGlwIik7fWZ1bmN0aW9uIGhhbmRsZShldmVudCl7aWYoc2V0dGluZ3ModGhpcykuZGVsYXkpdElEPXNldFRpbWVvdXQoc2hvdyxzZXR0aW5ncyh0aGlzKS5kZWxheSk7ZWxzZQpzaG93KCk7dHJhY2s9ISFzZXR0aW5ncyh0aGlzKS50cmFjaztqUXVlcnkoZG9jdW1lbnQuYm9keSkuYmluZCgnbW91c2Vtb3ZlJyx1cGRhdGUpO3VwZGF0ZShldmVudCk7fWZ1bmN0aW9uIHNhdmUoKXtpZihqUXVlcnkudG9vbHRpcC5ibG9ja2VkfHx0aGlzPT1jdXJyZW50fHwoIXRoaXMudG9vbHRpcFRleHQmJiFzZXR0aW5ncyh0aGlzKS5ib2R5SGFuZGxlcikpcmV0dXJuO2N1cnJlbnQ9dGhpczt0aXRsZT10aGlzLnRvb2x0aXBUZXh0O2lmKHNldHRpbmdzKHRoaXMpLmJvZHlIYW5kbGVyKXtoZWxwZXIudGl0bGUuaGlkZSgpO3ZhciBib2R5Q29udGVudD1zZXR0aW5ncyh0aGlzKS5ib2R5SGFuZGxlci5jYWxsKHRoaXMpO2lmKGJvZHlDb250ZW50Lm5vZGVUeXBlfHxib2R5Q29udGVudC5qcXVlcnkpe2hlbHBlci5ib2R5LmVtcHR5KCkuYXBwZW5kKGJvZHlDb250ZW50KX1lbHNle2hlbHBlci5ib2R5Lmh0bWwoYm9keUNvbnRlbnQpO31oZWxwZXIuYm9keS5zaG93KCk7fWVsc2UgaWYoc2V0dGluZ3ModGhpcykuc2hvd0JvZHkpe3ZhciBwYXJ0cz10aXRsZS5zcGxpdChzZXR0aW5ncyh0aGlzKS5zaG93Qm9keSk7aGVscGVyLnRpdGxlLmh0bWwocGFydHMuc2hpZnQoKSkuc2hvdygpO2hlbHBlci5ib2R5LmVtcHR5KCk7Zm9yKHZhciBpPTAscGFydDsocGFydD1wYXJ0c1tpXSk7aSsrKXtpZihpPjApaGVscGVyLmJvZHkuYXBwZW5kKCI8YnIvPiIpO2hlbHBlci5ib2R5LmFwcGVuZChwYXJ0KTt9aGVscGVyLmJvZHkuaGlkZVdoZW5FbXB0eSgpO31lbHNle2hlbHBlci50aXRsZS5odG1sKHRpdGxlKS5zaG93KCk7aGVscGVyLmJvZHkuaGlkZSgpO31pZihzZXR0aW5ncyh0aGlzKS5zaG93VVJMJiZqUXVlcnkodGhpcykudXJsKCkpaGVscGVyLnVybC5odG1sKGpRdWVyeSh0aGlzKS51cmwoKS5yZXBsYWNlKCdodHRwOi8vJywnJykpLnNob3coKTtlbHNlCmhlbHBlci51cmwuaGlkZSgpO2hlbHBlci5wYXJlbnQuYWRkQ2xhc3Moc2V0dGluZ3ModGhpcykuZXh0cmFDbGFzcyk7aWYoc2V0dGluZ3ModGhpcykuZml4UE5HKWhlbHBlci5wYXJlbnQuZml4UE5HKCk7aGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9ZnVuY3Rpb24gc2hvdygpe3RJRD1udWxsO2lmKCghSUV8fCFqUXVlcnkuZm4uYmdpZnJhbWUpJiZzZXR0aW5ncyhjdXJyZW50KS5mYWRlKXtpZihoZWxwZXIucGFyZW50LmlzKCI6YW5pbWF0ZWQiKSloZWxwZXIucGFyZW50LnN0b3AoKS5zaG93KCkuZmFkZVRvKHNldHRpbmdzKGN1cnJlbnQpLmZhZGUsY3VycmVudC50T3BhY2l0eSk7ZWxzZQpoZWxwZXIucGFyZW50LmlzKCc6dmlzaWJsZScpP2hlbHBlci5wYXJlbnQuZmFkZVRvKHNldHRpbmdzKGN1cnJlbnQpLmZhZGUsY3VycmVudC50T3BhY2l0eSk6aGVscGVyLnBhcmVudC5mYWRlSW4oc2V0dGluZ3MoY3VycmVudCkuZmFkZSk7fWVsc2V7aGVscGVyLnBhcmVudC5zaG93KCk7fXVwZGF0ZSgpO31mdW5jdGlvbiB1cGRhdGUoZXZlbnQpe2lmKGpRdWVyeS50b29sdGlwLmJsb2NrZWQpcmV0dXJuO2lmKGV2ZW50JiZldmVudC50YXJnZXQudGFnTmFtZT09Ik9QVElPTiIpe3JldHVybjt9aWYoIXRyYWNrJiZoZWxwZXIucGFyZW50LmlzKCI6dmlzaWJsZSIpKXtqUXVlcnkoZG9jdW1lbnQuYm9keSkudW5iaW5kKCdtb3VzZW1vdmUnLHVwZGF0ZSl9aWYoY3VycmVudD09bnVsbCl7alF1ZXJ5KGRvY3VtZW50LmJvZHkpLnVuYmluZCgnbW91c2Vtb3ZlJyx1cGRhdGUpO3JldHVybjt9aGVscGVyLnBhcmVudC5yZW1vdmVDbGFzcygidmlld3BvcnQtcmlnaHQiKS5yZW1vdmVDbGFzcygidmlld3BvcnQtYm90dG9tIik7dmFyIGxlZnQ9aGVscGVyLnBhcmVudFswXS5vZmZzZXRMZWZ0O3ZhciB0b3A9aGVscGVyLnBhcmVudFswXS5vZmZzZXRUb3A7aWYoZXZlbnQpe2xlZnQ9ZXZlbnQucGFnZVgrc2V0dGluZ3MoY3VycmVudCkubGVmdDt0b3A9ZXZlbnQucGFnZVkrc2V0dGluZ3MoY3VycmVudCkudG9wO3ZhciByaWdodD0nYXV0byc7aWYoc2V0dGluZ3MoY3VycmVudCkucG9zaXRpb25MZWZ0KXtyaWdodD1qUXVlcnkod2luZG93KS53aWR0aCgpLWxlZnQ7bGVmdD0nYXV0byc7fWhlbHBlci5wYXJlbnQuY3NzKHtsZWZ0OmxlZnQscmlnaHQ6cmlnaHQsdG9wOnRvcH0pO312YXIgdj12aWV3cG9ydCgpLGg9aGVscGVyLnBhcmVudFswXTtpZih2Lngrdi5jeDxoLm9mZnNldExlZnQraC5vZmZzZXRXaWR0aCl7bGVmdC09aC5vZmZzZXRXaWR0aCsyMCtzZXR0aW5ncyhjdXJyZW50KS5sZWZ0O2hlbHBlci5wYXJlbnQuY3NzKHtsZWZ0OmxlZnQrJ3B4J30pLmFkZENsYXNzKCJ2aWV3cG9ydC1yaWdodCIpO31pZih2Lnkrdi5jeTxoLm9mZnNldFRvcCtoLm9mZnNldEhlaWdodCl7dG9wLT1oLm9mZnNldEhlaWdodCsyMCtzZXR0aW5ncyhjdXJyZW50KS50b3A7aGVscGVyLnBhcmVudC5jc3Moe3RvcDp0b3ArJ3B4J30pLmFkZENsYXNzKCJ2aWV3cG9ydC1ib3R0b20iKTt9fWZ1bmN0aW9uIHZpZXdwb3J0KCl7cmV0dXJue3g6alF1ZXJ5KHdpbmRvdykuc2Nyb2xsTGVmdCgpLHk6alF1ZXJ5KHdpbmRvdykuc2Nyb2xsVG9wKCksY3g6alF1ZXJ5KHdpbmRvdykud2lkdGgoKSxjeTpqUXVlcnkod2luZG93KS5oZWlnaHQoKX07fWZ1bmN0aW9uIGhpZGUoZXZlbnQpe2lmKGpRdWVyeS50b29sdGlwLmJsb2NrZWQpcmV0dXJuO2lmKHRJRCljbGVhclRpbWVvdXQodElEKTtjdXJyZW50PW51bGw7dmFyIHRzZXR0aW5ncz1zZXR0aW5ncyh0aGlzKTtmdW5jdGlvbiBjb21wbGV0ZSgpe2hlbHBlci5wYXJlbnQucmVtb3ZlQ2xhc3ModHNldHRpbmdzLmV4dHJhQ2xhc3MpLmhpZGUoKS5jc3MoIm9wYWNpdHkiLCIiKTt9aWYoKCFJRXx8IWpRdWVyeS5mbi5iZ2lmcmFtZSkmJnRzZXR0aW5ncy5mYWRlKXtpZihoZWxwZXIucGFyZW50LmlzKCc6YW5pbWF0ZWQnKSloZWxwZXIucGFyZW50LnN0b3AoKS5mYWRlVG8odHNldHRpbmdzLmZhZGUsMCxjb21wbGV0ZSk7ZWxzZQpoZWxwZXIucGFyZW50LnN0b3AoKS5mYWRlT3V0KHRzZXR0aW5ncy5mYWRlLGNvbXBsZXRlKTt9ZWxzZQpjb21wbGV0ZSgpO2lmKHNldHRpbmdzKHRoaXMpLmZpeFBORyloZWxwZXIucGFyZW50LnVuZml4UE5HKCk7fX0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/OAuth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy8gdmltOiBmb2xkbWV0aG9kPW1hcmtlcgoKLyogR2VuZXJpYyBleGNlcHRpb24gY2xhc3MKICovCmlmICghY2xhc3NfZXhpc3RzKCdPQXV0aEV4Y2VwdGlvbicpKSB7CiAgY2xhc3MgT0F1dGhFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewogICAgLy8gcGFzcwogIH0KfQoKY2xhc3MgT0F1dGhDb25zdW1lciB7CiAgcHVibGljICRrZXk7CiAgcHVibGljICRzZWNyZXQ7CgogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXksICRzZWNyZXQsICRjYWxsYmFja191cmw9TlVMTCkgewogICAgJHRoaXMtPmtleSA9ICRrZXk7CiAgICAkdGhpcy0+c2VjcmV0ID0gJHNlY3JldDsKICAgICR0aGlzLT5jYWxsYmFja191cmwgPSAkY2FsbGJhY2tfdXJsOwogIH0KCiAgZnVuY3Rpb24gX190b1N0cmluZygpIHsKICAgIHJldHVybiAiT0F1dGhDb25zdW1lcltrZXk9JHRoaXMtPmtleSxzZWNyZXQ9JHRoaXMtPnNlY3JldF0iOwogIH0KfQoKY2xhc3MgT0F1dGhUb2tlbiB7CiAgLy8gYWNjZXNzIHRva2VucyBhbmQgcmVxdWVzdCB0b2tlbnMKICBwdWJsaWMgJGtleTsKICBwdWJsaWMgJHNlY3JldDsKCiAgLyoqCiAgICoga2V5ID0gdGhlIHRva2VuCiAgICogc2VjcmV0ID0gdGhlIHRva2VuIHNlY3JldAogICAqLwogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXksICRzZWNyZXQpIHsKICAgICR0aGlzLT5rZXkgPSAka2V5OwogICAgJHRoaXMtPnNlY3JldCA9ICRzZWNyZXQ7CiAgfQoKICAvKioKICAgKiBnZW5lcmF0ZXMgdGhlIGJhc2ljIHN0cmluZyBzZXJpYWxpemF0aW9uIG9mIGEgdG9rZW4gdGhhdCBhIHNlcnZlcgogICAqIHdvdWxkIHJlc3BvbmQgdG8gcmVxdWVzdF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuIGNhbGxzIHdpdGgKICAgKi8KICBmdW5jdGlvbiB0b19zdHJpbmcoKSB7CiAgICByZXR1cm4gIm9hdXRoX3Rva2VuPSIgLgogICAgICAgICAgIE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHRoaXMtPmtleSkgLgogICAgICAgICAgICImb2F1dGhfdG9rZW5fc2VjcmV0PSIgLgogICAgICAgICAgIE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHRoaXMtPnNlY3JldCk7CiAgfQoKICBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgewogICAgcmV0dXJuICR0aGlzLT50b19zdHJpbmcoKTsKICB9Cn0KCi8qKgogKiBBIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgYSBTaWduYXR1cmUgTWV0aG9kCiAqIFNlZSBzZWN0aW9uIDkgKCJTaWduaW5nIFJlcXVlc3RzIikgaW4gdGhlIHNwZWMKICovCmFic3RyYWN0IGNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kIHsKICAvKioKICAgKiBOZWVkcyB0byByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIFNpZ25hdHVyZSBNZXRob2QgKGllIEhNQUMtU0hBMSkKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpOwoKICAvKioKICAgKiBCdWlsZCB1cCB0aGUgc2lnbmF0dXJlCiAgICogTk9URTogVGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uIE1VU1QgTk9UIGJlIHVybGVuY29kZWQuCiAgICogdGhlIGVuY29kaW5nIGlzIGhhbmRsZWQgaW4gT0F1dGhSZXF1ZXN0IHdoZW4gdGhlIGZpbmFsCiAgICogcmVxdWVzdCBpcyBzZXJpYWxpemVkCiAgICogQHBhcmFtIE9BdXRoUmVxdWVzdCAkcmVxdWVzdAogICAqIEBwYXJhbSBPQXV0aENvbnN1bWVyICRjb25zdW1lcgogICAqIEBwYXJhbSBPQXV0aFRva2VuICR0b2tlbgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGJ1aWxkX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pOwoKICAvKioKICAgKiBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gc2lnbmF0dXJlIGlzIGNvcnJlY3QKICAgKiBAcGFyYW0gT0F1dGhSZXF1ZXN0ICRyZXF1ZXN0CiAgICogQHBhcmFtIE9BdXRoQ29uc3VtZXIgJGNvbnN1bWVyCiAgICogQHBhcmFtIE9BdXRoVG9rZW4gJHRva2VuCiAgICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCiAgICogQHJldHVybiBib29sCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGNoZWNrX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4sICRzaWduYXR1cmUpIHsKICAgICRidWlsdCA9ICR0aGlzLT5idWlsZF9zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuKTsKICAgIHJldHVybiAkYnVpbHQgPT0gJHNpZ25hdHVyZTsKICB9Cn0KCi8qKgogKiBUaGUgSE1BQy1TSEExIHNpZ25hdHVyZSBtZXRob2QgdXNlcyB0aGUgSE1BQy1TSEExIHNpZ25hdHVyZSBhbGdvcml0aG0gYXMgZGVmaW5lZCBpbiBbUkZDMjEwNF0gCiAqIHdoZXJlIHRoZSBTaWduYXR1cmUgQmFzZSBTdHJpbmcgaXMgdGhlIHRleHQgYW5kIHRoZSBrZXkgaXMgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMgKGVhY2ggZmlyc3QgCiAqIGVuY29kZWQgcGVyIFBhcmFtZXRlciBFbmNvZGluZykgb2YgdGhlIENvbnN1bWVyIFNlY3JldCBhbmQgVG9rZW4gU2VjcmV0LCBzZXBhcmF0ZWQgYnkgYW4gJyYnIAogKiBjaGFyYWN0ZXIgKEFTQ0lJIGNvZGUgMzgpIGV2ZW4gaWYgZW1wdHkuCiAqICAgLSBDaGFwdGVyIDkuMiAoIkhNQUMtU0hBMSIpCiAqLwpjbGFzcyBPQXV0aFNpZ25hdHVyZU1ldGhvZF9ITUFDX1NIQTEgZXh0ZW5kcyBPQXV0aFNpZ25hdHVyZU1ldGhvZCB7CiAgZnVuY3Rpb24gZ2V0X25hbWUoKSB7CiAgICByZXR1cm4gIkhNQUMtU0hBMSI7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJGJhc2Vfc3RyaW5nID0gJHJlcXVlc3QtPmdldF9zaWduYXR1cmVfYmFzZV9zdHJpbmcoKTsKICAgICRyZXF1ZXN0LT5iYXNlX3N0cmluZyA9ICRiYXNlX3N0cmluZzsKCiAgICAka2V5X3BhcnRzID0gYXJyYXkoCiAgICAgICRjb25zdW1lci0+c2VjcmV0LAogICAgICAoJHRva2VuKSA/ICR0b2tlbi0+c2VjcmV0IDogIiIKICAgICk7CgogICAgJGtleV9wYXJ0cyA9IE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJGtleV9wYXJ0cyk7CiAgICAka2V5ID0gaW1wbG9kZSgnJicsICRrZXlfcGFydHMpOwoKICAgIHJldHVybiBiYXNlNjRfZW5jb2RlKGhhc2hfaG1hYygnc2hhMScsICRiYXNlX3N0cmluZywgJGtleSwgdHJ1ZSkpOwogIH0KfQoKLyoqCiAqIFRoZSBQTEFJTlRFWFQgbWV0aG9kIGRvZXMgbm90IHByb3ZpZGUgYW55IHNlY3VyaXR5IHByb3RlY3Rpb24gYW5kIFNIT1VMRCBvbmx5IGJlIHVzZWQgCiAqIG92ZXIgYSBzZWN1cmUgY2hhbm5lbCBzdWNoIGFzIEhUVFBTLiBJdCBkb2VzIG5vdCB1c2UgdGhlIFNpZ25hdHVyZSBCYXNlIFN0cmluZy4KICogICAtIENoYXB0ZXIgOS40ICgiUExBSU5URVhUIikKICovCmNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kX1BMQUlOVEVYVCBleHRlbmRzIE9BdXRoU2lnbmF0dXJlTWV0aG9kIHsKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25hbWUoKSB7CiAgICByZXR1cm4gIlBMQUlOVEVYVCI7CiAgfQoKICAvKioKICAgKiBvYXV0aF9zaWduYXR1cmUgaXMgc2V0IHRvIHRoZSBjb25jYXRlbmF0ZWQgZW5jb2RlZCB2YWx1ZXMgb2YgdGhlIENvbnN1bWVyIFNlY3JldCBhbmQgCiAgICogVG9rZW4gU2VjcmV0LCBzZXBhcmF0ZWQgYnkgYSAnJicgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDM4KSwgZXZlbiBpZiBlaXRoZXIgc2VjcmV0IGlzIAogICAqIGVtcHR5LiBUaGUgcmVzdWx0IE1VU1QgYmUgZW5jb2RlZCBhZ2Fpbi4KICAgKiAgIC0gQ2hhcHRlciA5LjQuMSAoIkdlbmVyYXRpbmcgU2lnbmF0dXJlcyIpCiAgICoKICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBzZWNvbmQgZW5jb2RpbmcgTVVTVCBOT1QgaGFwcGVuIGluIHRoZSBTaWduYXR1cmVNZXRob2QsIGFzCiAgICogT0F1dGhSZXF1ZXN0IGhhbmRsZXMgdGhpcyEKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJGtleV9wYXJ0cyA9IGFycmF5KAogICAgICAkY29uc3VtZXItPnNlY3JldCwKICAgICAgKCR0b2tlbikgPyAkdG9rZW4tPnNlY3JldCA6ICIiCiAgICApOwoKICAgICRrZXlfcGFydHMgPSBPQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KCRrZXlfcGFydHMpOwogICAgJGtleSA9IGltcGxvZGUoJyYnLCAka2V5X3BhcnRzKTsKICAgICRyZXF1ZXN0LT5iYXNlX3N0cmluZyA9ICRrZXk7CgogICAgcmV0dXJuICRrZXk7CiAgfQp9CgovKioKICogVGhlIFJTQS1TSEExIHNpZ25hdHVyZSBtZXRob2QgdXNlcyB0aGUgUlNBU1NBLVBLQ1MxLXYxXzUgc2lnbmF0dXJlIGFsZ29yaXRobSBhcyBkZWZpbmVkIGluIAogKiBbUkZDMzQ0N10gc2VjdGlvbiA4LjIgKG1vcmUgc2ltcGx5IGtub3duIGFzIFBLQ1MjMSksIHVzaW5nIFNIQS0xIGFzIHRoZSBoYXNoIGZ1bmN0aW9uIGZvciAKICogRU1TQS1QS0NTMS12MV81LiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIENvbnN1bWVyIGhhcyBwcm92aWRlZCBpdHMgUlNBIHB1YmxpYyBrZXkgaW4gYSAKICogdmVyaWZpZWQgd2F5IHRvIHRoZSBTZXJ2aWNlIFByb3ZpZGVyLCBpbiBhIG1hbm5lciB3aGljaCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgCiAqIHNwZWNpZmljYXRpb24uCiAqICAgLSBDaGFwdGVyIDkuMyAoIlJTQS1TSEExIikKICovCmFic3RyYWN0IGNsYXNzIE9BdXRoU2lnbmF0dXJlTWV0aG9kX1JTQV9TSEExIGV4dGVuZHMgT0F1dGhTaWduYXR1cmVNZXRob2QgewogIHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpIHsKICAgIHJldHVybiAiUlNBLVNIQTEiOwogIH0KCiAgLy8gVXAgdG8gdGhlIFNQIHRvIGltcGxlbWVudCB0aGlzIGxvb2t1cCBvZiBrZXlzLiBQb3NzaWJsZSBpZGVhcyBhcmU6CiAgLy8gKDEpIGRvIGEgbG9va3VwIGluIGEgdGFibGUgb2YgdHJ1c3RlZCBjZXJ0cyBrZXllZCBvZmYgb2YgY29uc3VtZXIKICAvLyAoMikgZmV0Y2ggdmlhIGh0dHAgdXNpbmcgYSB1cmwgcHJvdmlkZWQgYnkgdGhlIHJlcXVlc3RlcgogIC8vICgzKSBzb21lIHNvcnQgb2Ygc3BlY2lmaWMgZGlzY292ZXJ5IGNvZGUgYmFzZWQgb24gcmVxdWVzdAogIC8vCiAgLy8gRWl0aGVyIHdheSBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjZXJ0aWZpY2F0ZQogIHByb3RlY3RlZCBhYnN0cmFjdCBmdW5jdGlvbiBmZXRjaF9wdWJsaWNfY2VydCgmJHJlcXVlc3QpOwoKICAvLyBVcCB0byB0aGUgU1AgdG8gaW1wbGVtZW50IHRoaXMgbG9va3VwIG9mIGtleXMuIFBvc3NpYmxlIGlkZWFzIGFyZToKICAvLyAoMSkgZG8gYSBsb29rdXAgaW4gYSB0YWJsZSBvZiB0cnVzdGVkIGNlcnRzIGtleWVkIG9mZiBvZiBjb25zdW1lcgogIC8vCiAgLy8gRWl0aGVyIHdheSBzaG91bGQgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjZXJ0aWZpY2F0ZQogIHByb3RlY3RlZCBhYnN0cmFjdCBmdW5jdGlvbiBmZXRjaF9wcml2YXRlX2NlcnQoJiRyZXF1ZXN0KTsKCiAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pIHsKICAgICRiYXNlX3N0cmluZyA9ICRyZXF1ZXN0LT5nZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCk7CiAgICAkcmVxdWVzdC0+YmFzZV9zdHJpbmcgPSAkYmFzZV9zdHJpbmc7CgogICAgLy8gRmV0Y2ggdGhlIHByaXZhdGUga2V5IGNlcnQgYmFzZWQgb24gdGhlIHJlcXVlc3QKICAgICRjZXJ0ID0gJHRoaXMtPmZldGNoX3ByaXZhdGVfY2VydCgkcmVxdWVzdCk7CgogICAgLy8gUHVsbCB0aGUgcHJpdmF0ZSBrZXkgSUQgZnJvbSB0aGUgY2VydGlmaWNhdGUKICAgICRwcml2YXRla2V5aWQgPSBvcGVuc3NsX2dldF9wcml2YXRla2V5KCRjZXJ0KTsKCiAgICAvLyBTaWduIHVzaW5nIHRoZSBrZXkKICAgICRvayA9IG9wZW5zc2xfc2lnbigkYmFzZV9zdHJpbmcsICRzaWduYXR1cmUsICRwcml2YXRla2V5aWQpOwoKICAgIC8vIFJlbGVhc2UgdGhlIGtleSByZXNvdXJjZQogICAgb3BlbnNzbF9mcmVlX2tleSgkcHJpdmF0ZWtleWlkKTsKCiAgICByZXR1cm4gYmFzZTY0X2VuY29kZSgkc2lnbmF0dXJlKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBjaGVja19zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuLCAkc2lnbmF0dXJlKSB7CiAgICAkZGVjb2RlZF9zaWcgPSBiYXNlNjRfZGVjb2RlKCRzaWduYXR1cmUpOwoKICAgICRiYXNlX3N0cmluZyA9ICRyZXF1ZXN0LT5nZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCk7CgogICAgLy8gRmV0Y2ggdGhlIHB1YmxpYyBrZXkgY2VydCBiYXNlZCBvbiB0aGUgcmVxdWVzdAogICAgJGNlcnQgPSAkdGhpcy0+ZmV0Y2hfcHVibGljX2NlcnQoJHJlcXVlc3QpOwoKICAgIC8vIFB1bGwgdGhlIHB1YmxpYyBrZXkgSUQgZnJvbSB0aGUgY2VydGlmaWNhdGUKICAgICRwdWJsaWNrZXlpZCA9IG9wZW5zc2xfZ2V0X3B1YmxpY2tleSgkY2VydCk7CgogICAgLy8gQ2hlY2sgdGhlIGNvbXB1dGVkIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBvbmUgcGFzc2VkIGluIHRoZSBxdWVyeQogICAgJG9rID0gb3BlbnNzbF92ZXJpZnkoJGJhc2Vfc3RyaW5nLCAkZGVjb2RlZF9zaWcsICRwdWJsaWNrZXlpZCk7CgogICAgLy8gUmVsZWFzZSB0aGUga2V5IHJlc291cmNlCiAgICBvcGVuc3NsX2ZyZWVfa2V5KCRwdWJsaWNrZXlpZCk7CgogICAgcmV0dXJuICRvayA9PSAxOwogIH0KfQoKY2xhc3MgT0F1dGhSZXF1ZXN0IHsKICBwcml2YXRlICRwYXJhbWV0ZXJzOwogIHByaXZhdGUgJGh0dHBfbWV0aG9kOwogIHByaXZhdGUgJGh0dHBfdXJsOwogIC8vIGZvciBkZWJ1ZyBwdXJwb3NlcwogIHB1YmxpYyAkYmFzZV9zdHJpbmc7CiAgcHVibGljIHN0YXRpYyAkdmVyc2lvbiA9ICcxLjAnOwogIHB1YmxpYyBzdGF0aWMgJFBPU1RfSU5QVVQgPSAncGhwOi8vaW5wdXQnOwoKICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaHR0cF9tZXRob2QsICRodHRwX3VybCwgJHBhcmFtZXRlcnM9TlVMTCkgewogICAgQCRwYXJhbWV0ZXJzIG9yICRwYXJhbWV0ZXJzID0gYXJyYXkoKTsKICAgICRwYXJhbWV0ZXJzID0gYXJyYXlfbWVyZ2UoIE9BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycyhwYXJzZV91cmwoJGh0dHBfdXJsLCBQSFBfVVJMX1FVRVJZKSksICRwYXJhbWV0ZXJzKTsKICAgICR0aGlzLT5wYXJhbWV0ZXJzID0gJHBhcmFtZXRlcnM7CiAgICAkdGhpcy0+aHR0cF9tZXRob2QgPSAkaHR0cF9tZXRob2Q7CiAgICAkdGhpcy0+aHR0cF91cmwgPSAkaHR0cF91cmw7CiAgfQoKCiAgLyoqCiAgICogYXR0ZW1wdCB0byBidWlsZCB1cCBhIHJlcXVlc3QgZnJvbSB3aGF0IHdhcyBwYXNzZWQgdG8gdGhlIHNlcnZlcgogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbV9yZXF1ZXN0KCRodHRwX21ldGhvZD1OVUxMLCAkaHR0cF91cmw9TlVMTCwgJHBhcmFtZXRlcnM9TlVMTCkgewogICAgJHNjaGVtZSA9ICghaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pIHx8ICRfU0VSVkVSWydIVFRQUyddICE9ICJvbiIpCiAgICAgICAgICAgICAgPyAnaHR0cCcKICAgICAgICAgICAgICA6ICdodHRwcyc7CiAgICBAJGh0dHBfdXJsIG9yICRodHRwX3VybCA9ICRzY2hlbWUgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOi8vJyAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6JyAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfU0VSVkVSWydTRVJWRVJfUE9SVCddIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgICBAJGh0dHBfbWV0aG9kIG9yICRodHRwX21ldGhvZCA9ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddOwoKICAgIC8vIFdlIHdlcmVuJ3QgaGFuZGVkIGFueSBwYXJhbWV0ZXJzLCBzbyBsZXQncyBmaW5kIHRoZSBvbmVzIHJlbGV2YW50IHRvCiAgICAvLyB0aGlzIHJlcXVlc3QuCiAgICAvLyBJZiB5b3UgcnVuIFhNTC1SUEMgb3Igc2ltaWxhciB5b3Ugc2hvdWxkIHVzZSB0aGlzIHRvIHByb3ZpZGUgeW91ciBvd24KICAgIC8vIHBhcnNlZCBwYXJhbWV0ZXItbGlzdAogICAgaWYgKCEkcGFyYW1ldGVycykgewogICAgICAvLyBGaW5kIHJlcXVlc3QgaGVhZGVycwogICAgICAkcmVxdWVzdF9oZWFkZXJzID0gT0F1dGhVdGlsOjpnZXRfaGVhZGVycygpOwoKICAgICAgLy8gUGFyc2UgdGhlIHF1ZXJ5LXN0cmluZyB0byBmaW5kIEdFVCBwYXJhbWV0ZXJzCiAgICAgICRwYXJhbWV0ZXJzID0gT0F1dGhVdGlsOjpwYXJzZV9wYXJhbWV0ZXJzKCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSk7CgogICAgICAvLyBJdCdzIGEgUE9TVCByZXF1ZXN0IG9mIHRoZSBwcm9wZXIgY29udGVudC10eXBlLCBzbyBwYXJzZSBQT1NUCiAgICAgIC8vIHBhcmFtZXRlcnMgYW5kIGFkZCB0aG9zZSBvdmVycmlkaW5nIGFueSBkdXBsaWNhdGVzIGZyb20gR0VUCiAgICAgIGlmICgkaHR0cF9tZXRob2QgPT0gIlBPU1QiCiAgICAgICAgICAmJiBAc3Ryc3RyKCRyZXF1ZXN0X2hlYWRlcnNbIkNvbnRlbnQtVHlwZSJdLAogICAgICAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikKICAgICAgICAgICkgewogICAgICAgICRwb3N0X2RhdGEgPSBPQXV0aFV0aWw6OnBhcnNlX3BhcmFtZXRlcnMoCiAgICAgICAgICBmaWxlX2dldF9jb250ZW50cyhzZWxmOjokUE9TVF9JTlBVVCkKICAgICAgICApOwogICAgICAgICRwYXJhbWV0ZXJzID0gYXJyYXlfbWVyZ2UoJHBhcmFtZXRlcnMsICRwb3N0X2RhdGEpOwogICAgICB9CgogICAgICAvLyBXZSBoYXZlIGEgQXV0aG9yaXphdGlvbi1oZWFkZXIgd2l0aCBPQXV0aCBkYXRhLiBQYXJzZSB0aGUgaGVhZGVyCiAgICAgIC8vIGFuZCBhZGQgdGhvc2Ugb3ZlcnJpZGluZyBhbnkgZHVwbGljYXRlcyBmcm9tIEdFVCBvciBQT1NUCiAgICAgIGlmIChAc3Vic3RyKCRyZXF1ZXN0X2hlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSwgMCwgNikgPT0gIk9BdXRoICIpIHsKICAgICAgICAkaGVhZGVyX3BhcmFtZXRlcnMgPSBPQXV0aFV0aWw6OnNwbGl0X2hlYWRlcigKICAgICAgICAgICRyZXF1ZXN0X2hlYWRlcnNbJ0F1dGhvcml6YXRpb24nXQogICAgICAgICk7CiAgICAgICAgJHBhcmFtZXRlcnMgPSBhcnJheV9tZXJnZSgkcGFyYW1ldGVycywgJGhlYWRlcl9wYXJhbWV0ZXJzKTsKICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gbmV3IE9BdXRoUmVxdWVzdCgkaHR0cF9tZXRob2QsICRodHRwX3VybCwgJHBhcmFtZXRlcnMpOwogIH0KCiAgLyoqCiAgICogcHJldHR5IG11Y2ggYSBoZWxwZXIgZnVuY3Rpb24gdG8gc2V0IHVwIHRoZSByZXF1ZXN0CiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tX2NvbnN1bWVyX2FuZF90b2tlbigkY29uc3VtZXIsICR0b2tlbiwgJGh0dHBfbWV0aG9kLCAkaHR0cF91cmwsICRwYXJhbWV0ZXJzPU5VTEwpIHsKICAgIEAkcGFyYW1ldGVycyBvciAkcGFyYW1ldGVycyA9IGFycmF5KCk7CiAgICAkZGVmYXVsdHMgPSBhcnJheSgib2F1dGhfdmVyc2lvbiIgPT4gT0F1dGhSZXF1ZXN0OjokdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICJvYXV0aF9ub25jZSIgPT4gT0F1dGhSZXF1ZXN0OjpnZW5lcmF0ZV9ub25jZSgpLAogICAgICAgICAgICAgICAgICAgICAgIm9hdXRoX3RpbWVzdGFtcCIgPT4gT0F1dGhSZXF1ZXN0OjpnZW5lcmF0ZV90aW1lc3RhbXAoKSwKICAgICAgICAgICAgICAgICAgICAgICJvYXV0aF9jb25zdW1lcl9rZXkiID0+ICRjb25zdW1lci0+a2V5KTsKICAgIGlmICgkdG9rZW4pCiAgICAgICRkZWZhdWx0c1snb2F1dGhfdG9rZW4nXSA9ICR0b2tlbi0+a2V5OwoKICAgICRwYXJhbWV0ZXJzID0gYXJyYXlfbWVyZ2UoJGRlZmF1bHRzLCAkcGFyYW1ldGVycyk7CgogICAgcmV0dXJuIG5ldyBPQXV0aFJlcXVlc3QoJGh0dHBfbWV0aG9kLCAkaHR0cF91cmwsICRwYXJhbWV0ZXJzKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfcGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUsICRhbGxvd19kdXBsaWNhdGVzID0gdHJ1ZSkgewogICAgaWYgKCRhbGxvd19kdXBsaWNhdGVzICYmIGlzc2V0KCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSkpIHsKICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGFkZGVkIHBhcmFtZXRlcihzKSB3aXRoIHRoaXMgbmFtZSwgc28gYWRkIHRvIHRoZSBsaXN0CiAgICAgIGlmIChpc19zY2FsYXIoJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdKSkgewogICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGR1cGxpY2F0ZSwgc28gdHJhbnNmb3JtIHNjYWxhciAoc3RyaW5nKQogICAgICAgIC8vIGludG8gYW4gYXJyYXkgc28gd2UgY2FuIGFkZCB0aGUgZHVwbGljYXRlcwogICAgICAgICR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSA9IGFycmF5KCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSk7CiAgICAgIH0KCiAgICAgICR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXVtdID0gJHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdID0gJHZhbHVlOwogICAgfQogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9wYXJhbWV0ZXIoJG5hbWUpIHsKICAgIHJldHVybiBpc3NldCgkdGhpcy0+cGFyYW1ldGVyc1skbmFtZV0pID8gJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdIDogbnVsbDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGFyYW1ldGVycygpIHsKICAgIHJldHVybiAkdGhpcy0+cGFyYW1ldGVyczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiB1bnNldF9wYXJhbWV0ZXIoJG5hbWUpIHsKICAgIHVuc2V0KCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSk7CiAgfQoKICAvKioKICAgKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzLCBzb3J0ZWQgYW5kIGNvbmNhdGVuYXRlZCBpbnRvIGEgbm9ybWFsaXplZCBzdHJpbmcuCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3NpZ25hYmxlX3BhcmFtZXRlcnMoKSB7CiAgICAvLyBHcmFiIGFsbCBwYXJhbWV0ZXJzCiAgICAkcGFyYW1zID0gJHRoaXMtPnBhcmFtZXRlcnM7CgogICAgLy8gUmVtb3ZlIG9hdXRoX3NpZ25hdHVyZSBpZiBwcmVzZW50CiAgICAvLyBSZWY6IFNwZWM6IDkuMS4xICgiVGhlIG9hdXRoX3NpZ25hdHVyZSBwYXJhbWV0ZXIgTVVTVCBiZSBleGNsdWRlZC4iKQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ29hdXRoX3NpZ25hdHVyZSddKSkgewogICAgICB1bnNldCgkcGFyYW1zWydvYXV0aF9zaWduYXR1cmUnXSk7CiAgICB9CgogICAgcmV0dXJuIE9BdXRoVXRpbDo6YnVpbGRfaHR0cF9xdWVyeSgkcGFyYW1zKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGJhc2Ugc3RyaW5nIG9mIHRoaXMgcmVxdWVzdAogICAqCiAgICogVGhlIGJhc2Ugc3RyaW5nIGRlZmluZWQgYXMgdGhlIG1ldGhvZCwgdGhlIHVybAogICAqIGFuZCB0aGUgcGFyYW1ldGVycyAobm9ybWFsaXplZCksIGVhY2ggdXJsZW5jb2RlZAogICAqIGFuZCB0aGUgY29uY2F0ZWQgd2l0aCAmLgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXRfc2lnbmF0dXJlX2Jhc2Vfc3RyaW5nKCkgewogICAgJHBhcnRzID0gYXJyYXkoCiAgICAgICR0aGlzLT5nZXRfbm9ybWFsaXplZF9odHRwX21ldGhvZCgpLAogICAgICAkdGhpcy0+Z2V0X25vcm1hbGl6ZWRfaHR0cF91cmwoKSwKICAgICAgJHRoaXMtPmdldF9zaWduYWJsZV9wYXJhbWV0ZXJzKCkKICAgICk7CgogICAgJHBhcnRzID0gT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NigkcGFydHMpOwoKICAgIHJldHVybiBpbXBsb2RlKCcmJywgJHBhcnRzKTsKICB9CgogIC8qKgogICAqIGp1c3QgdXBwZXJjYXNlcyB0aGUgaHR0cCBtZXRob2QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0X25vcm1hbGl6ZWRfaHR0cF9tZXRob2QoKSB7CiAgICByZXR1cm4gc3RydG91cHBlcigkdGhpcy0+aHR0cF9tZXRob2QpOwogIH0KCiAgLyoqCiAgICogcGFyc2VzIHRoZSB1cmwgYW5kIHJlYnVpbGRzIGl0IHRvIGJlCiAgICogc2NoZW1lOi8vaG9zdC9wYXRoCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldF9ub3JtYWxpemVkX2h0dHBfdXJsKCkgewogICAgJHBhcnRzID0gcGFyc2VfdXJsKCR0aGlzLT5odHRwX3VybCk7CgogICAgJHBvcnQgPSBAJHBhcnRzWydwb3J0J107CiAgICAkc2NoZW1lID0gJHBhcnRzWydzY2hlbWUnXTsKICAgICRob3N0ID0gJHBhcnRzWydob3N0J107CiAgICAkcGF0aCA9IEAkcGFydHNbJ3BhdGgnXTsKCiAgICAkcG9ydCBvciAkcG9ydCA9ICgkc2NoZW1lID09ICdodHRwcycpID8gJzQ0MycgOiAnODAnOwoKICAgIGlmICgoJHNjaGVtZSA9PSAnaHR0cHMnICYmICRwb3J0ICE9ICc0NDMnKQogICAgICAgIHx8ICgkc2NoZW1lID09ICdodHRwJyAmJiAkcG9ydCAhPSAnODAnKSkgewogICAgICAkaG9zdCA9ICIkaG9zdDokcG9ydCI7CiAgICB9CiAgICByZXR1cm4gIiRzY2hlbWU6Ly8kaG9zdCRwYXRoIjsKICB9CgogIC8qKgogICAqIGJ1aWxkcyBhIHVybCB1c2FibGUgZm9yIGEgR0VUIHJlcXVlc3QKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gdG9fdXJsKCkgewogICAgJHBvc3RfZGF0YSA9ICR0aGlzLT50b19wb3N0ZGF0YSgpOwogICAgJG91dCA9ICR0aGlzLT5nZXRfbm9ybWFsaXplZF9odHRwX3VybCgpOwogICAgaWYgKCRwb3N0X2RhdGEpIHsKICAgICAgJG91dCAuPSAnPycuJHBvc3RfZGF0YTsKICAgIH0KICAgIHJldHVybiAkb3V0OwogIH0KCiAgLyoqCiAgICogYnVpbGRzIHRoZSBkYXRhIG9uZSB3b3VsZCBzZW5kIGluIGEgUE9TVCByZXF1ZXN0CiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHRvX3Bvc3RkYXRhKCkgewogICAgcmV0dXJuIE9BdXRoVXRpbDo6YnVpbGRfaHR0cF9xdWVyeSgkdGhpcy0+cGFyYW1ldGVycyk7CiAgfQoKICAvKioKICAgKiBidWlsZHMgdGhlIEF1dGhvcml6YXRpb246IGhlYWRlcgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiB0b19oZWFkZXIoJHJlYWxtPW51bGwpIHsKICAgICRmaXJzdCA9IHRydWU7CglpZigkcmVhbG0pIHsKICAgICAgJG91dCA9ICdBdXRob3JpemF0aW9uOiBPQXV0aCByZWFsbT0iJyAuIE9BdXRoVXRpbDo6dXJsZW5jb2RlX3JmYzM5ODYoJHJlYWxtKSAuICciJzsKICAgICAgJGZpcnN0ID0gZmFsc2U7CiAgICB9IGVsc2UKICAgICAgJG91dCA9ICdBdXRob3JpemF0aW9uOiBPQXV0aCc7CgogICAgJHRvdGFsID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCR0aGlzLT5wYXJhbWV0ZXJzIGFzICRrID0+ICR2KSB7CiAgICAgIGlmIChzdWJzdHIoJGssIDAsIDUpICE9ICJvYXV0aCIpIGNvbnRpbnVlOwogICAgICBpZiAoaXNfYXJyYXkoJHYpKSB7CiAgICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uKCdBcnJheXMgbm90IHN1cHBvcnRlZCBpbiBoZWFkZXJzJyk7CiAgICAgIH0KICAgICAgJG91dCAuPSAoJGZpcnN0KSA/ICcgJyA6ICcsJzsKICAgICAgJG91dCAuPSBPQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KCRrKSAuCiAgICAgICAgICAgICAgJz0iJyAuCiAgICAgICAgICAgICAgT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NigkdikgLgogICAgICAgICAgICAgICciJzsKICAgICAgJGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gJG91dDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkgewogICAgcmV0dXJuICR0aGlzLT50b191cmwoKTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2lnbl9yZXF1ZXN0KCRzaWduYXR1cmVfbWV0aG9kLCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJHRoaXMtPnNldF9wYXJhbWV0ZXIoCiAgICAgICJvYXV0aF9zaWduYXR1cmVfbWV0aG9kIiwKICAgICAgJHNpZ25hdHVyZV9tZXRob2QtPmdldF9uYW1lKCksCiAgICAgIGZhbHNlCiAgICApOwogICAgJHNpZ25hdHVyZSA9ICR0aGlzLT5idWlsZF9zaWduYXR1cmUoJHNpZ25hdHVyZV9tZXRob2QsICRjb25zdW1lciwgJHRva2VuKTsKICAgICR0aGlzLT5zZXRfcGFyYW1ldGVyKCJvYXV0aF9zaWduYXR1cmUiLCAkc2lnbmF0dXJlLCBmYWxzZSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRfc2lnbmF0dXJlKCRzaWduYXR1cmVfbWV0aG9kLCAkY29uc3VtZXIsICR0b2tlbikgewogICAgJHNpZ25hdHVyZSA9ICRzaWduYXR1cmVfbWV0aG9kLT5idWlsZF9zaWduYXR1cmUoJHRoaXMsICRjb25zdW1lciwgJHRva2VuKTsKICAgIHJldHVybiAkc2lnbmF0dXJlOwogIH0KCiAgLyoqCiAgICogdXRpbCBmdW5jdGlvbjogY3VycmVudCB0aW1lc3RhbXAKICAgKi8KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZV90aW1lc3RhbXAoKSB7CiAgICByZXR1cm4gdGltZSgpOwogIH0KCiAgLyoqCiAgICogdXRpbCBmdW5jdGlvbjogY3VycmVudCBub25jZQogICAqLwogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlX25vbmNlKCkgewogICAgJG10ID0gbWljcm90aW1lKCk7CiAgICAkcmFuZCA9IG10X3JhbmQoKTsKCiAgICByZXR1cm4gbWQ1KCRtdCAuICRyYW5kKTsgLy8gbWQ1cyBsb29rIG5pY2VyIHRoYW4gbnVtYmVycwogIH0KfQoKY2xhc3MgT0F1dGhTZXJ2ZXIgewogIHByb3RlY3RlZCAkdGltZXN0YW1wX3RocmVzaG9sZCA9IDMwMDsgLy8gaW4gc2Vjb25kcywgZml2ZSBtaW51dGVzCiAgcHJvdGVjdGVkICR2ZXJzaW9uID0gJzEuMCc7ICAgICAgICAgICAgIC8vIGhpIGJsYWluZQogIHByb3RlY3RlZCAkc2lnbmF0dXJlX21ldGhvZHMgPSBhcnJheSgpOwoKICBwcm90ZWN0ZWQgJGRhdGFfc3RvcmU7CgogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYXRhX3N0b3JlKSB7CiAgICAkdGhpcy0+ZGF0YV9zdG9yZSA9ICRkYXRhX3N0b3JlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGFkZF9zaWduYXR1cmVfbWV0aG9kKCRzaWduYXR1cmVfbWV0aG9kKSB7CiAgICAkdGhpcy0+c2lnbmF0dXJlX21ldGhvZHNbJHNpZ25hdHVyZV9tZXRob2QtPmdldF9uYW1lKCldID0KICAgICAgJHNpZ25hdHVyZV9tZXRob2Q7CiAgfQoKICAvLyBoaWdoIGxldmVsIGZ1bmN0aW9ucwoKICAvKioKICAgKiBwcm9jZXNzIGEgcmVxdWVzdF90b2tlbiByZXF1ZXN0CiAgICogcmV0dXJucyB0aGUgcmVxdWVzdCB0b2tlbiBvbiBzdWNjZXNzCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZldGNoX3JlcXVlc3RfdG9rZW4oJiRyZXF1ZXN0KSB7CiAgICAkdGhpcy0+Z2V0X3ZlcnNpb24oJHJlcXVlc3QpOwoKICAgICRjb25zdW1lciA9ICR0aGlzLT5nZXRfY29uc3VtZXIoJHJlcXVlc3QpOwoKICAgIC8vIG5vIHRva2VuIHJlcXVpcmVkIGZvciB0aGUgaW5pdGlhbCB0b2tlbiByZXF1ZXN0CiAgICAkdG9rZW4gPSBOVUxMOwoKICAgICR0aGlzLT5jaGVja19zaWduYXR1cmUoJHJlcXVlc3QsICRjb25zdW1lciwgJHRva2VuKTsKCiAgICAvLyBSZXYgQSBjaGFuZ2UKICAgICRjYWxsYmFjayA9ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF9jYWxsYmFjaycpOwogICAgJG5ld190b2tlbiA9ICR0aGlzLT5kYXRhX3N0b3JlLT5uZXdfcmVxdWVzdF90b2tlbigkY29uc3VtZXIsICRjYWxsYmFjayk7CgogICAgcmV0dXJuICRuZXdfdG9rZW47CiAgfQoKICAvKioKICAgKiBwcm9jZXNzIGFuIGFjY2Vzc190b2tlbiByZXF1ZXN0CiAgICogcmV0dXJucyB0aGUgYWNjZXNzIHRva2VuIG9uIHN1Y2Nlc3MKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hfYWNjZXNzX3Rva2VuKCYkcmVxdWVzdCkgewogICAgJHRoaXMtPmdldF92ZXJzaW9uKCRyZXF1ZXN0KTsKCiAgICAkY29uc3VtZXIgPSAkdGhpcy0+Z2V0X2NvbnN1bWVyKCRyZXF1ZXN0KTsKCiAgICAvLyByZXF1aXJlcyBhdXRob3JpemVkIHJlcXVlc3QgdG9rZW4KICAgICR0b2tlbiA9ICR0aGlzLT5nZXRfdG9rZW4oJHJlcXVlc3QsICRjb25zdW1lciwgInJlcXVlc3QiKTsKCiAgICAkdGhpcy0+Y2hlY2tfc2lnbmF0dXJlKCRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbik7CgogICAgLy8gUmV2IEEgY2hhbmdlCiAgICAkdmVyaWZpZXIgPSAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcignb2F1dGhfdmVyaWZpZXInKTsKICAgICRuZXdfdG9rZW4gPSAkdGhpcy0+ZGF0YV9zdG9yZS0+bmV3X2FjY2Vzc190b2tlbigkdG9rZW4sICRjb25zdW1lciwgJHZlcmlmaWVyKTsKCiAgICByZXR1cm4gJG5ld190b2tlbjsKICB9CgogIC8qKgogICAqIHZlcmlmeSBhbiBhcGkgY2FsbCwgY2hlY2tzIGFsbCB0aGUgcGFyYW1ldGVycwogICAqLwogIHB1YmxpYyBmdW5jdGlvbiB2ZXJpZnlfcmVxdWVzdCgmJHJlcXVlc3QpIHsKICAgICR0aGlzLT5nZXRfdmVyc2lvbigkcmVxdWVzdCk7CiAgICAkY29uc3VtZXIgPSAkdGhpcy0+Z2V0X2NvbnN1bWVyKCRyZXF1ZXN0KTsKICAgICR0b2tlbiA9ICR0aGlzLT5nZXRfdG9rZW4oJHJlcXVlc3QsICRjb25zdW1lciwgImFjY2VzcyIpOwogICAgJHRoaXMtPmNoZWNrX3NpZ25hdHVyZSgkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pOwogICAgcmV0dXJuIGFycmF5KCRjb25zdW1lciwgJHRva2VuKTsKICB9CgogIC8vIEludGVybmFscyBmcm9tIGhlcmUKICAvKioKICAgKiB2ZXJzaW9uIDEKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIGdldF92ZXJzaW9uKCYkcmVxdWVzdCkgewogICAgJHZlcnNpb24gPSAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcigib2F1dGhfdmVyc2lvbiIpOwogICAgaWYgKCEkdmVyc2lvbikgewogICAgICAvLyBTZXJ2aWNlIFByb3ZpZGVycyBNVVNUIGFzc3VtZSB0aGUgcHJvdG9jb2wgdmVyc2lvbiB0byBiZSAxLjAgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHByZXNlbnQuIAogICAgICAvLyBDaGFwdGVyIDcuMCAoIkFjY2Vzc2luZyBQcm90ZWN0ZWQgUmVzc291cmNlcyIpCiAgICAgICR2ZXJzaW9uID0gJzEuMCc7CiAgICB9CiAgICBpZiAoJHZlcnNpb24gIT09ICR0aGlzLT52ZXJzaW9uKSB7CiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigiT0F1dGggdmVyc2lvbiAnJHZlcnNpb24nIG5vdCBzdXBwb3J0ZWQiKTsKICAgIH0KICAgIHJldHVybiAkdmVyc2lvbjsKICB9CgogIC8qKgogICAqIGZpZ3VyZSBvdXQgdGhlIHNpZ25hdHVyZSB3aXRoIHNvbWUgZGVmYXVsdHMKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIGdldF9zaWduYXR1cmVfbWV0aG9kKCYkcmVxdWVzdCkgewogICAgJHNpZ25hdHVyZV9tZXRob2QgPQogICAgICAgIEAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcigib2F1dGhfc2lnbmF0dXJlX21ldGhvZCIpOwoKICAgIGlmICghJHNpZ25hdHVyZV9tZXRob2QpIHsKICAgICAgLy8gQWNjb3JkaW5nIHRvIGNoYXB0ZXIgNyAoIkFjY2Vzc2luZyBQcm90ZWN0ZWQgUmVzc291cmNlcyIpIHRoZSBzaWduYXR1cmUtbWV0aG9kCiAgICAgIC8vIHBhcmFtZXRlciBpcyByZXF1aXJlZCwgYW5kIHdlIGNhbid0IGp1c3QgZmFsbGJhY2sgdG8gUExBSU5URVhUCiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbignTm8gc2lnbmF0dXJlIG1ldGhvZCBwYXJhbWV0ZXIuIFRoaXMgcGFyYW1ldGVyIGlzIHJlcXVpcmVkJyk7CiAgICB9CgogICAgaWYgKCFpbl9hcnJheSgkc2lnbmF0dXJlX21ldGhvZCwKICAgICAgICAgICAgICAgICAgYXJyYXlfa2V5cygkdGhpcy0+c2lnbmF0dXJlX21ldGhvZHMpKSkgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oCiAgICAgICAgIlNpZ25hdHVyZSBtZXRob2QgJyRzaWduYXR1cmVfbWV0aG9kJyBub3Qgc3VwcG9ydGVkICIgLgogICAgICAgICJ0cnkgb25lIG9mIHRoZSBmb2xsb3dpbmc6ICIgLgogICAgICAgIGltcGxvZGUoIiwgIiwgYXJyYXlfa2V5cygkdGhpcy0+c2lnbmF0dXJlX21ldGhvZHMpKQogICAgICApOwogICAgfQogICAgcmV0dXJuICR0aGlzLT5zaWduYXR1cmVfbWV0aG9kc1skc2lnbmF0dXJlX21ldGhvZF07CiAgfQoKICAvKioKICAgKiB0cnkgdG8gZmluZCB0aGUgY29uc3VtZXIgZm9yIHRoZSBwcm92aWRlZCByZXF1ZXN0J3MgY29uc3VtZXIga2V5CiAgICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfY29uc3VtZXIoJiRyZXF1ZXN0KSB7CiAgICAkY29uc3VtZXJfa2V5ID0gQCRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCJvYXV0aF9jb25zdW1lcl9rZXkiKTsKICAgIGlmICghJGNvbnN1bWVyX2tleSkgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oIkludmFsaWQgY29uc3VtZXIga2V5Iik7CiAgICB9CgogICAgJGNvbnN1bWVyID0gJHRoaXMtPmRhdGFfc3RvcmUtPmxvb2t1cF9jb25zdW1lcigkY29uc3VtZXJfa2V5KTsKICAgIGlmICghJGNvbnN1bWVyKSB7CiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigiSW52YWxpZCBjb25zdW1lciIpOwogICAgfQoKICAgIHJldHVybiAkY29uc3VtZXI7CiAgfQoKICAvKioKICAgKiB0cnkgdG8gZmluZCB0aGUgdG9rZW4gZm9yIHRoZSBwcm92aWRlZCByZXF1ZXN0J3MgdG9rZW4ga2V5CiAgICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfdG9rZW4oJiRyZXF1ZXN0LCAkY29uc3VtZXIsICR0b2tlbl90eXBlPSJhY2Nlc3MiKSB7CiAgICAkdG9rZW5fZmllbGQgPSBAJHJlcXVlc3QtPmdldF9wYXJhbWV0ZXIoJ29hdXRoX3Rva2VuJyk7CiAgICAkdG9rZW4gPSAkdGhpcy0+ZGF0YV9zdG9yZS0+bG9va3VwX3Rva2VuKAogICAgICAkY29uc3VtZXIsICR0b2tlbl90eXBlLCAkdG9rZW5fZmllbGQKICAgICk7CiAgICBpZiAoISR0b2tlbikgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oIkludmFsaWQgJHRva2VuX3R5cGUgdG9rZW46ICR0b2tlbl9maWVsZCIpOwogICAgfQogICAgcmV0dXJuICR0b2tlbjsKICB9CgogIC8qKgogICAqIGFsbC1pbi1vbmUgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIHNpZ25hdHVyZSBvbiBhIHJlcXVlc3QKICAgKiBzaG91bGQgZ3Vlc3MgdGhlIHNpZ25hdHVyZSBtZXRob2QgYXBwcm9wcmlhdGVseQogICAqLwogIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tfc2lnbmF0dXJlKCYkcmVxdWVzdCwgJGNvbnN1bWVyLCAkdG9rZW4pIHsKICAgIC8vIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGluIGEgZGlmZmVyZW50IG1ldGhvZAogICAgJHRpbWVzdGFtcCA9IEAkcmVxdWVzdC0+Z2V0X3BhcmFtZXRlcignb2F1dGhfdGltZXN0YW1wJyk7CiAgICAkbm9uY2UgPSBAJHJlcXVlc3QtPmdldF9wYXJhbWV0ZXIoJ29hdXRoX25vbmNlJyk7CgogICAgJHRoaXMtPmNoZWNrX3RpbWVzdGFtcCgkdGltZXN0YW1wKTsKICAgICR0aGlzLT5jaGVja19ub25jZSgkY29uc3VtZXIsICR0b2tlbiwgJG5vbmNlLCAkdGltZXN0YW1wKTsKCiAgICAkc2lnbmF0dXJlX21ldGhvZCA9ICR0aGlzLT5nZXRfc2lnbmF0dXJlX21ldGhvZCgkcmVxdWVzdCk7CgogICAgJHNpZ25hdHVyZSA9ICRyZXF1ZXN0LT5nZXRfcGFyYW1ldGVyKCdvYXV0aF9zaWduYXR1cmUnKTsKICAgICR2YWxpZF9zaWcgPSAkc2lnbmF0dXJlX21ldGhvZC0+Y2hlY2tfc2lnbmF0dXJlKAogICAgICAkcmVxdWVzdCwKICAgICAgJGNvbnN1bWVyLAogICAgICAkdG9rZW4sCiAgICAgICRzaWduYXR1cmUKICAgICk7CgogICAgaWYgKCEkdmFsaWRfc2lnKSB7CiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigiSW52YWxpZCBzaWduYXR1cmUiKTsKICAgIH0KICB9CgogIC8qKgogICAqIGNoZWNrIHRoYXQgdGhlIHRpbWVzdGFtcCBpcyBuZXcgZW5vdWdoCiAgICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja190aW1lc3RhbXAoJHRpbWVzdGFtcCkgewogICAgaWYoICEgJHRpbWVzdGFtcCApCiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigKICAgICAgICAnTWlzc2luZyB0aW1lc3RhbXAgcGFyYW1ldGVyLiBUaGUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkJwogICAgICApOwogICAgCiAgICAvLyB2ZXJpZnkgdGhhdCB0aW1lc3RhbXAgaXMgcmVjZW50aXNoCiAgICAkbm93ID0gdGltZSgpOwogICAgaWYgKGFicygkbm93IC0gJHRpbWVzdGFtcCkgPiAkdGhpcy0+dGltZXN0YW1wX3RocmVzaG9sZCkgewogICAgICB0aHJvdyBuZXcgT0F1dGhFeGNlcHRpb24oCiAgICAgICAgIkV4cGlyZWQgdGltZXN0YW1wLCB5b3VycyAkdGltZXN0YW1wLCBvdXJzICRub3ciCiAgICAgICk7CiAgICB9CiAgfQoKICAvKioKICAgKiBjaGVjayB0aGF0IHRoZSBub25jZSBpcyBub3QgcmVwZWF0ZWQKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrX25vbmNlKCRjb25zdW1lciwgJHRva2VuLCAkbm9uY2UsICR0aW1lc3RhbXApIHsKICAgIGlmKCAhICRub25jZSApCiAgICAgIHRocm93IG5ldyBPQXV0aEV4Y2VwdGlvbigKICAgICAgICAnTWlzc2luZyBub25jZSBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnCiAgICAgICk7CgogICAgLy8gdmVyaWZ5IHRoYXQgdGhlIG5vbmNlIGlzIHVuaXF1ZWlzaAogICAgJGZvdW5kID0gJHRoaXMtPmRhdGFfc3RvcmUtPmxvb2t1cF9ub25jZSgKICAgICAgJGNvbnN1bWVyLAogICAgICAkdG9rZW4sCiAgICAgICRub25jZSwKICAgICAgJHRpbWVzdGFtcAogICAgKTsKICAgIGlmICgkZm91bmQpIHsKICAgICAgdGhyb3cgbmV3IE9BdXRoRXhjZXB0aW9uKCJOb25jZSBhbHJlYWR5IHVzZWQ6ICRub25jZSIpOwogICAgfQogIH0KCn0KCmNsYXNzIE9BdXRoRGF0YVN0b3JlIHsKICBmdW5jdGlvbiBsb29rdXBfY29uc3VtZXIoJGNvbnN1bWVyX2tleSkgewogICAgLy8gaW1wbGVtZW50IG1lCiAgfQoKICBmdW5jdGlvbiBsb29rdXBfdG9rZW4oJGNvbnN1bWVyLCAkdG9rZW5fdHlwZSwgJHRva2VuKSB7CiAgICAvLyBpbXBsZW1lbnQgbWUKICB9CgogIGZ1bmN0aW9uIGxvb2t1cF9ub25jZSgkY29uc3VtZXIsICR0b2tlbiwgJG5vbmNlLCAkdGltZXN0YW1wKSB7CiAgICAvLyBpbXBsZW1lbnQgbWUKICB9CgogIGZ1bmN0aW9uIG5ld19yZXF1ZXN0X3Rva2VuKCRjb25zdW1lciwgJGNhbGxiYWNrID0gbnVsbCkgewogICAgLy8gcmV0dXJuIGEgbmV3IHRva2VuIGF0dGFjaGVkIHRvIHRoaXMgY29uc3VtZXIKICB9CgogIGZ1bmN0aW9uIG5ld19hY2Nlc3NfdG9rZW4oJHRva2VuLCAkY29uc3VtZXIsICR2ZXJpZmllciA9IG51bGwpIHsKICAgIC8vIHJldHVybiBhIG5ldyBhY2Nlc3MgdG9rZW4gYXR0YWNoZWQgdG8gdGhpcyBjb25zdW1lcgogICAgLy8gZm9yIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRva2VuIGlmIHRoZSByZXF1ZXN0IHRva2VuCiAgICAvLyBpcyBhdXRob3JpemVkCiAgICAvLyBzaG91bGQgYWxzbyBpbnZhbGlkYXRlIHRoZSByZXF1ZXN0IHRva2VuCiAgfQoKfQoKY2xhc3MgT0F1dGhVdGlsIHsKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVybGVuY29kZV9yZmMzOTg2KCRpbnB1dCkgewogIGlmIChpc19hcnJheSgkaW5wdXQpKSB7CiAgICByZXR1cm4gYXJyYXlfbWFwKGFycmF5KCdPQXV0aFV0aWwnLCAndXJsZW5jb2RlX3JmYzM5ODYnKSwgJGlucHV0KTsKICB9IGVsc2UgaWYgKGlzX3NjYWxhcigkaW5wdXQpKSB7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoCiAgICAgICcrJywKICAgICAgJyAnLAogICAgICBzdHJfcmVwbGFjZSgnJTdFJywgJ34nLCByYXd1cmxlbmNvZGUoJGlucHV0KSkKICAgICk7CiAgfSBlbHNlIHsKICAgIHJldHVybiAnJzsKICB9Cn0KCgogIC8vIFRoaXMgZGVjb2RlIGZ1bmN0aW9uIGlzbid0IHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIGFib3ZlCiAgLy8gbW9kaWZpY2F0aW9ucyB0byB0aGUgZW5jb2RpbmcgcHJvY2Vzcy4gSG93ZXZlciwgdGhpcyBtZXRob2QgZG9lc24ndAogIC8vIHNlZW0gdG8gYmUgdXNlZCBhbnl3aGVyZSBzbyBsZWF2aW5nIGl0IGFzIGlzLgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXJsZGVjb2RlX3JmYzM5ODYoJHN0cmluZykgewogICAgcmV0dXJuIHVybGRlY29kZSgkc3RyaW5nKTsKICB9CgogIC8vIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHR1cm5pbmcgdGhlIEF1dGhvcml6YXRpb246IGhlYWRlciBpbnRvCiAgLy8gcGFyYW1ldGVycywgaGFzIHRvIGRvIHNvbWUgdW5lc2NhcGluZwogIC8vIENhbiBmaWx0ZXIgb3V0IGFueSBub24tb2F1dGggcGFyYW1ldGVycyBpZiBuZWVkZWQgKGRlZmF1bHQgYmVoYXZpb3VyKQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3BsaXRfaGVhZGVyKCRoZWFkZXIsICRvbmx5X2FsbG93X29hdXRoX3BhcmFtZXRlcnMgPSB0cnVlKSB7CiAgICAkcGF0dGVybiA9ICcvKChbLV9hLXpdKik9KCIoW14iXSopInwoW14sXSopKSw/KS8nOwogICAgJG9mZnNldCA9IDA7CiAgICAkcGFyYW1zID0gYXJyYXkoKTsKICAgIHdoaWxlIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkaGVhZGVyLCAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSwgJG9mZnNldCkgPiAwKSB7CiAgICAgICRtYXRjaCA9ICRtYXRjaGVzWzBdOwogICAgICAkaGVhZGVyX25hbWUgPSAkbWF0Y2hlc1syXVswXTsKICAgICAgJGhlYWRlcl9jb250ZW50ID0gKGlzc2V0KCRtYXRjaGVzWzVdKSkgPyAkbWF0Y2hlc1s1XVswXSA6ICRtYXRjaGVzWzRdWzBdOwogICAgICBpZiAocHJlZ19tYXRjaCgnL15vYXV0aF8vJywgJGhlYWRlcl9uYW1lKSB8fCAhJG9ubHlfYWxsb3dfb2F1dGhfcGFyYW1ldGVycykgewogICAgICAgICRwYXJhbXNbJGhlYWRlcl9uYW1lXSA9IE9BdXRoVXRpbDo6dXJsZGVjb2RlX3JmYzM5ODYoJGhlYWRlcl9jb250ZW50KTsKICAgICAgfQogICAgICAkb2Zmc2V0ID0gJG1hdGNoWzFdICsgc3RybGVuKCRtYXRjaFswXSk7CiAgICB9CgogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3JlYWxtJ10pKSB7CiAgICAgIHVuc2V0KCRwYXJhbXNbJ3JlYWxtJ10pOwogICAgfQoKICAgIHJldHVybiAkcGFyYW1zOwogIH0KCiAgLy8gaGVscGVyIHRvIHRyeSB0byBzb3J0IG91dCBoZWFkZXJzIGZvciBwZW9wbGUgd2hvIGFyZW4ndCBydW5uaW5nIGFwYWNoZQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2hlYWRlcnMoKSB7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfcmVxdWVzdF9oZWFkZXJzJykpIHsKICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIGdldCB0aGUgYWN0dWFsIEF1dGhvcml6YXRpb246IGhlYWRlcgogICAgICAvLyBiZWNhdXNlIGFwYWNoZSB0ZW5kcyB0byB0ZWxsIHVzIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgJGhlYWRlcnMgPSBhcGFjaGVfcmVxdWVzdF9oZWFkZXJzKCk7CgogICAgICAvLyBzYW5pdGl6ZSB0aGUgb3V0cHV0IG9mIGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnMgYmVjYXVzZQogICAgICAvLyB3ZSBhbHdheXMgd2FudCB0aGUga2V5cyB0byBiZSBDYXNlZC1MaWtlLVRoaXMgYW5kIGFyaCgpCiAgICAgIC8vIHJldHVybnMgdGhlIGhlYWRlcnMgaW4gdGhlIHNhbWUgY2FzZSBhcyB0aGV5IGFyZSBpbiB0aGUKICAgICAgLy8gcmVxdWVzdAogICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgZm9yZWFjaCggJGhlYWRlcnMgQVMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKAogICAgICAgICAgICAiICIsCiAgICAgICAgICAgICItIiwKICAgICAgICAgICAgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCItIiwgIiAiLCAka2V5KSkpCiAgICAgICAgICApOwogICAgICAgICRvdXRbJGtleV0gPSAkdmFsdWU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIG90aGVyd2lzZSB3ZSBkb24ndCBoYXZlIGFwYWNoZSBhbmQgYXJlIGp1c3QgZ29pbmcgdG8gaGF2ZSB0byBob3BlCiAgICAgIC8vIHRoYXQgJF9TRVJWRVIgYWN0dWFsbHkgY29udGFpbnMgd2hhdCB3ZSBuZWVkCiAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICBpZiggaXNzZXQoJF9TRVJWRVJbJ0NPTlRFTlRfVFlQRSddKSApCiAgICAgICAgJG91dFsnQ29udGVudC1UeXBlJ10gPSAkX1NFUlZFUlsnQ09OVEVOVF9UWVBFJ107CiAgICAgIGlmKCBpc3NldCgkX0VOVlsnQ09OVEVOVF9UWVBFJ10pICkKICAgICAgICAkb3V0WydDb250ZW50LVR5cGUnXSA9ICRfRU5WWydDT05URU5UX1RZUEUnXTsKCiAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgaWYgKHN1YnN0cigka2V5LCAwLCA1KSA9PSAiSFRUUF8iKSB7CiAgICAgICAgICAvLyB0aGlzIGlzIGNoYW9zLCBiYXNpY2FsbHkgaXQgaXMganVzdCB0aGVyZSB0byBjYXBpdGFsaXplIHRoZSBmaXJzdAogICAgICAgICAgLy8gbGV0dGVyIG9mIGV2ZXJ5IHdvcmQgdGhhdCBpcyBub3QgYW4gaW5pdGlhbCBIVFRQIGFuZCBzdHJpcCBIVFRQCiAgICAgICAgICAvLyBjb2RlIGZyb20gcHJ6ZW1lawogICAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKAogICAgICAgICAgICAiICIsCiAgICAgICAgICAgICItIiwKICAgICAgICAgICAgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCJfIiwgIiAiLCBzdWJzdHIoJGtleSwgNSkpKSkKICAgICAgICAgICk7CiAgICAgICAgICAkb3V0WyRrZXldID0gJHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuICRvdXQ7CiAgfQoKICAvLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgaW5wdXQgbGlrZSBhPWImYT1jJmQ9ZSBhbmQgcmV0dXJucyB0aGUgcGFyc2VkCiAgLy8gcGFyYW1ldGVycyBsaWtlIHRoaXMKICAvLyBhcnJheSgnYScgPT4gYXJyYXkoJ2InLCdjJyksICdkJyA9PiAnZScpCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZV9wYXJhbWV0ZXJzKCAkaW5wdXQgKSB7CiAgICBpZiAoIWlzc2V0KCRpbnB1dCkgfHwgISRpbnB1dCkgcmV0dXJuIGFycmF5KCk7CgogICAgJHBhaXJzID0gZXhwbG9kZSgnJicsICRpbnB1dCk7CgogICAgJHBhcnNlZF9wYXJhbWV0ZXJzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRwYWlycyBhcyAkcGFpcikgewogICAgICAkc3BsaXQgPSBleHBsb2RlKCc9JywgJHBhaXIsIDIpOwogICAgICAkcGFyYW1ldGVyID0gT0F1dGhVdGlsOjp1cmxkZWNvZGVfcmZjMzk4Nigkc3BsaXRbMF0pOwogICAgICAkdmFsdWUgPSBpc3NldCgkc3BsaXRbMV0pID8gT0F1dGhVdGlsOjp1cmxkZWNvZGVfcmZjMzk4Nigkc3BsaXRbMV0pIDogJyc7CgogICAgICBpZiAoaXNzZXQoJHBhcnNlZF9wYXJhbWV0ZXJzWyRwYXJhbWV0ZXJdKSkgewogICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSByZWNpZXZlZCBwYXJhbWV0ZXIocykgd2l0aCB0aGlzIG5hbWUsIHNvIGFkZCB0byB0aGUgbGlzdAogICAgICAgIC8vIG9mIHBhcmFtZXRlcnMgd2l0aCB0aGlzIG5hbWUKCiAgICAgICAgaWYgKGlzX3NjYWxhcigkcGFyc2VkX3BhcmFtZXRlcnNbJHBhcmFtZXRlcl0pKSB7CiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBkdXBsaWNhdGUsIHNvIHRyYW5zZm9ybSBzY2FsYXIgKHN0cmluZykgaW50byBhbiBhcnJheQogICAgICAgICAgLy8gc28gd2UgY2FuIGFkZCB0aGUgZHVwbGljYXRlcwogICAgICAgICAgJHBhcnNlZF9wYXJhbWV0ZXJzWyRwYXJhbWV0ZXJdID0gYXJyYXkoJHBhcnNlZF9wYXJhbWV0ZXJzWyRwYXJhbWV0ZXJdKTsKICAgICAgICB9CgogICAgICAgICRwYXJzZWRfcGFyYW1ldGVyc1skcGFyYW1ldGVyXVtdID0gJHZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgICRwYXJzZWRfcGFyYW1ldGVyc1skcGFyYW1ldGVyXSA9ICR2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICRwYXJzZWRfcGFyYW1ldGVyczsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGRfaHR0cF9xdWVyeSgkcGFyYW1zKSB7CiAgICBpZiAoISRwYXJhbXMpIHJldHVybiAnJzsKCiAgICAvLyBVcmxlbmNvZGUgYm90aCBrZXlzIGFuZCB2YWx1ZXMKICAgICRrZXlzID0gT0F1dGhVdGlsOjp1cmxlbmNvZGVfcmZjMzk4NihhcnJheV9rZXlzKCRwYXJhbXMpKTsKICAgICR2YWx1ZXMgPSBPQXV0aFV0aWw6OnVybGVuY29kZV9yZmMzOTg2KGFycmF5X3ZhbHVlcygkcGFyYW1zKSk7CiAgICAkcGFyYW1zID0gYXJyYXlfY29tYmluZSgka2V5cywgJHZhbHVlcyk7CgogICAgLy8gUGFyYW1ldGVycyBhcmUgc29ydGVkIGJ5IG5hbWUsIHVzaW5nIGxleGljb2dyYXBoaWNhbCBieXRlIHZhbHVlIG9yZGVyaW5nLgogICAgLy8gUmVmOiBTcGVjOiA5LjEuMSAoMSkKICAgIHVrc29ydCgkcGFyYW1zLCAnc3RyY21wJyk7CgogICAgJHBhaXJzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJHBhcmFtZXRlciA9PiAkdmFsdWUpIHsKICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAvLyBJZiB0d28gb3IgbW9yZSBwYXJhbWV0ZXJzIHNoYXJlIHRoZSBzYW1lIG5hbWUsIHRoZXkgYXJlIHNvcnRlZCBieSB0aGVpciB2YWx1ZQogICAgICAgIC8vIFJlZjogU3BlYzogOS4xLjEgKDEpCiAgICAgICAgbmF0c29ydCgkdmFsdWUpOwogICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAkZHVwbGljYXRlX3ZhbHVlKSB7CiAgICAgICAgICAkcGFpcnNbXSA9ICRwYXJhbWV0ZXIgLiAnPScgLiAkZHVwbGljYXRlX3ZhbHVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAkcGFpcnNbXSA9ICRwYXJhbWV0ZXIgLiAnPScgLiAkdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIC8vIEZvciBlYWNoIHBhcmFtZXRlciwgdGhlIG5hbWUgaXMgc2VwYXJhdGVkIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgYnkgYW4gJz0nIGNoYXJhY3RlciAoQVNDSUkgY29kZSA2MSkKICAgIC8vIEVhY2ggbmFtZS12YWx1ZSBwYWlyIGlzIHNlcGFyYXRlZCBieSBhbiAnJicgY2hhcmFjdGVyIChBU0NJSSBjb2RlIDM4KQogICAgcmV0dXJuIGltcGxvZGUoJyYnLCAkcGFpcnMpOwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/signin.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAJYAAAAsCAYAAACHUEHxAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAUzSURBVHja7JxdaxxVHMaf2Zmss9ndhJDEEJN2kzYBUauNCaHWmkoKLRQUFS+8KtgP0HyBICq9UT+CUPGyVyoFL0S9qAUDFksuLLYxTYakTdO8NbtxNjsvZzxnttlk2j2zxN2FsPN/YJkJZ+cMnPnx/F9yZpW848Z/XNr4aHnb+hYkUpXq0uM43932vnLVWDnSrMUmBlubLyk1vMGV+S1c7EvRSkdIHv/MbJowHQZtwSzMDj+fwmxhu6Y3SWgKbMWDsV2gFY+QUrqKO4/y0GzXQ87zan4DlUPlMA+uR4sdJeW4bwmmNNtjYKj904/FAJfPW4+5SQdbginN4XSxOjx7lX8cPi8jriInwZQmwhWThMJffrqJG7/P4dQb/ThzduR/hEImnZvUwGAxEQpFHiT5wtT0GvT2Hv/49tn9Ta7wEtMGpHOTGjgUFsGSu4qWSJeO+3WeneSdHCuKYIkci/E8SPIFTddL519+cS0wNjrSi7EzQyHJuwLHT95J0QuFEGAxuBJXUZ/bBSvZMxAYm/5nE2+Oy91IEWWn324gx4oeWGwnea/sWE/r3GhvaMXHDYtXhR5VhVFN3n2wJL2mvWB99mEmMLaQzcEM6VGpMdHPoD5WZMFywxxrTyi8fm8JnV1te8hpQhgzflXIyLGiKHe33VD+6SdTCRSc4tjPU4tg9sPS2Iv9Oo4P98nB4o5lcb9yybGi2W5wQ/KgY4cSuLVUrOtSh4LJ+3xuHa96lasDcqwIOpZXCoXln/5AR55HvBbcXlNgOcGxk/3d/Doz9AYWVYTRDYXi0ct6TRuqhkxrFid6UjwZD+7WMjaz2EITrSLpGQmmNGEqYb2m9ZiKdTNfpuzT+AzkSKQyYHkoOtajnIWOdJxWhFS1VjlLvmMdbtExv2Jyyjy0E1ykKrTGoTJW8xBMKY8te2zyT2PC2Mx/QEtDqlaZ1gQuv565oKVdd+rT+3/3WcsrBBapasW7OpF+rTenrFz97kisOTnRPHj0kt8ur5G2rnyD1MWPaaUjlrWbM7Ng5r/QCgsPZlPDw9ieXazpPZREMzyboWDcpwWPkNRUC/J3ZnhVaPMsPmfWHl5Vg+fYgEt7SCNlWpwlwZTGbBdePXbjxThYrlefuUkHWoIpzXMsflYHVxH7ZhynPnOTDrZrcaY4WA53lfK2cvPX7zH31w30v3wKI+Pv7TsUspC5SY0MliNyLJEHlX/4azNT6Enq/hGn391n9i52+rnSuUkNDBZniudYcldJN2ml436dZyd5J8eKYo7FHQuicpNsmtJVrXR+7evJwFjv4CiGxt4JMawYB4s2ZEVSjnAskQdJWgK6qpbOB1qSgbHNxWl+3Xm5Y/FQKCzRo3ZD9BzLz7H8yo1VdKyn1XvinPS6YrtBOJYb/h1SAyfvfuVWORRmJr4KjOUWHsAzQ377SuRYtnxuUqOD5cpdRdd2wVq6/hvaOl8o/V1x7+iTUEiOFUGwXPfJv3QkLYGEnuRwFF1p8Y8f8HAPJHr3S+g7fjoELBXMcqVzkxq53SAapOLBS1wlcfQY2N1bxeQ9Hfw90fX1e/y6typWB+RYUXQsVgyFsl5TPjOElpgKZe424FqBse6RkzArQONZBFVkQ6G/810CiLaRQ7bnFaRGxnlkC1aIWWMRTVt5WkVSGbI8ARYLzYPU9Rzy/PMMdAC940ySgMWKjmU9WkK8o4sWhFS1rNXlomPphzMw5+/6b+nE2wkuUhVQrS0jb8xAMKXYj7NjxuTnE3nDoJcpSFUrkckgc/mTC/8JMADBjqjQjZKxYgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/twitteroauth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIEFicmFoYW0gV2lsbGlhbXMgKGFicmFoYW1AYWJyYWguYW0pIGh0dHA6Ly9hYnJhaC5hbQogKgogKiBUaGUgZmlyc3QgUEhQIExpYnJhcnkgdG8gc3VwcG9ydCBPQXV0aCBmb3IgVHdpdHRlcidzIFJFU1QgQVBJLgogKi8KCi8qIExvYWQgT0F1dGggbGliLiBZb3UgY2FuIGZpbmQgaXQgYXQgaHR0cDovL29hdXRoLm5ldCAqLwpyZXF1aXJlX29uY2UoJ09BdXRoLnBocCcpOwoKLyoqCiAqIFR3aXR0ZXIgT0F1dGggY2xhc3MKICovCmNsYXNzIFR3aXR0ZXJPQXV0aCB7CiAgLyogQ29udGFpbnMgdGhlIGxhc3QgSFRUUCBzdGF0dXMgY29kZSByZXR1cm5lZC4gKi8KICBwdWJsaWMgJGh0dHBfY29kZTsKICAvKiBDb250YWlucyB0aGUgbGFzdCBBUEkgY2FsbC4gKi8KICBwdWJsaWMgJHVybDsKICAvKiBTZXQgdXAgdGhlIEFQSSByb290IFVSTC4gKi8KICBwdWJsaWMgJGhvc3QgPSAiaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vMS4xLyI7CiAgLyogU2V0IHRpbWVvdXQgZGVmYXVsdC4gKi8KICBwdWJsaWMgJHRpbWVvdXQgPSAzMDsKICAvKiBTZXQgY29ubmVjdCB0aW1lb3V0LiAqLwogIHB1YmxpYyAkY29ubmVjdHRpbWVvdXQgPSAzMDsgCiAgLyogVmVyaWZ5IFNTTCBDZXJ0LiAqLwogIHB1YmxpYyAkc3NsX3ZlcmlmeXBlZXIgPSBGQUxTRTsKICAvKiBSZXNwb25zIGZvcm1hdC4gKi8KICBwdWJsaWMgJGZvcm1hdCA9ICdqc29uJzsKICAvKiBEZWNvZGUgcmV0dXJuZWQganNvbiBkYXRhLiAqLwogIHB1YmxpYyAkZGVjb2RlX2pzb24gPSBUUlVFOwogIC8qIENvbnRhaW5zIHRoZSBsYXN0IEhUVFAgaGVhZGVycyByZXR1cm5lZC4gKi8KICBwdWJsaWMgJGh0dHBfaW5mbzsKICAvKiBTZXQgdGhlIHVzZXJhZ25ldC4gKi8KICBwdWJsaWMgJHVzZXJhZ2VudCA9ICdUd2l0dGVyT0F1dGggdjAuMi4wLWJldGEyJzsKICAvKiBJbW1lZGlhdGVseSByZXRyeSB0aGUgQVBJIGNhbGwgaWYgdGhlIHJlc3BvbnNlIHdhcyBub3Qgc3VjY2Vzc2Z1bC4gKi8KICAvL3B1YmxpYyAkcmV0cnkgPSBUUlVFOwoKCgoKICAvKioKICAgKiBTZXQgQVBJIFVSTFMKICAgKi8KICBmdW5jdGlvbiBhY2Nlc3NUb2tlblVSTCgpICB7IHJldHVybiAnaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vb2F1dGgvYWNjZXNzX3Rva2VuJzsgfQogIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZVVSTCgpIHsgcmV0dXJuICdodHRwczovL2FwaS50d2l0dGVyLmNvbS9vYXV0aC9hdXRoZW50aWNhdGUnOyB9CiAgZnVuY3Rpb24gYXV0aG9yaXplVVJMKCkgICAgeyByZXR1cm4gJ2h0dHBzOi8vYXBpLnR3aXR0ZXIuY29tL29hdXRoL2F1dGhvcml6ZSc7IH0KICBmdW5jdGlvbiByZXF1ZXN0VG9rZW5VUkwoKSB7IHJldHVybiAnaHR0cHM6Ly9hcGkudHdpdHRlci5jb20vb2F1dGgvcmVxdWVzdF90b2tlbic7IH0KCiAgLyoqCiAgICogRGVidWcgaGVscGVycwogICAqLwogIGZ1bmN0aW9uIGxhc3RTdGF0dXNDb2RlKCkgeyByZXR1cm4gJHRoaXMtPmh0dHBfc3RhdHVzOyB9CiAgZnVuY3Rpb24gbGFzdEFQSUNhbGwoKSB7IHJldHVybiAkdGhpcy0+bGFzdF9hcGlfY2FsbDsgfQoKICAvKioKICAgKiBjb25zdHJ1Y3QgVHdpdHRlck9BdXRoIG9iamVjdAogICAqLwogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25zdW1lcl9rZXksICRjb25zdW1lcl9zZWNyZXQsICRvYXV0aF90b2tlbiA9IE5VTEwsICRvYXV0aF90b2tlbl9zZWNyZXQgPSBOVUxMKSB7CiAgICAkdGhpcy0+c2hhMV9tZXRob2QgPSBuZXcgT0F1dGhTaWduYXR1cmVNZXRob2RfSE1BQ19TSEExKCk7CiAgICAkdGhpcy0+Y29uc3VtZXIgPSBuZXcgT0F1dGhDb25zdW1lcigkY29uc3VtZXJfa2V5LCAkY29uc3VtZXJfc2VjcmV0KTsKICAgIGlmICghZW1wdHkoJG9hdXRoX3Rva2VuKSAmJiAhZW1wdHkoJG9hdXRoX3Rva2VuX3NlY3JldCkpIHsKICAgICAgJHRoaXMtPnRva2VuID0gbmV3IE9BdXRoQ29uc3VtZXIoJG9hdXRoX3Rva2VuLCAkb2F1dGhfdG9rZW5fc2VjcmV0KTsKICAgIH0gZWxzZSB7CiAgICAgICR0aGlzLT50b2tlbiA9IE5VTEw7CiAgICB9CiAgfQoKCiAgLyoqCiAgICogR2V0IGEgcmVxdWVzdF90b2tlbiBmcm9tIFR3aXR0ZXIKICAgKgogICAqIEByZXR1cm5zIGEga2V5L3ZhbHVlIGFycmF5IGNvbnRhaW5pbmcgb2F1dGhfdG9rZW4gYW5kIG9hdXRoX3Rva2VuX3NlY3JldAogICAqLwogIGZ1bmN0aW9uIGdldFJlcXVlc3RUb2tlbigkb2F1dGhfY2FsbGJhY2spIHsKICAgICRwYXJhbWV0ZXJzID0gYXJyYXkoKTsKICAgICRwYXJhbWV0ZXJzWydvYXV0aF9jYWxsYmFjayddID0gJG9hdXRoX2NhbGxiYWNrOyAKICAgICRyZXF1ZXN0ID0gJHRoaXMtPm9BdXRoUmVxdWVzdCgkdGhpcy0+cmVxdWVzdFRva2VuVVJMKCksICdHRVQnLCAkcGFyYW1ldGVycyk7CiAgICAkdG9rZW4gPSBPQXV0aFV0aWw6OnBhcnNlX3BhcmFtZXRlcnMoJHJlcXVlc3QpOwogICAgJHRoaXMtPnRva2VuID0gbmV3IE9BdXRoQ29uc3VtZXIoJHRva2VuWydvYXV0aF90b2tlbiddLCAkdG9rZW5bJ29hdXRoX3Rva2VuX3NlY3JldCddKTsKICAgIHJldHVybiAkdG9rZW47CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGF1dGhvcml6ZSBVUkwKICAgKgogICAqIEByZXR1cm5zIGEgc3RyaW5nCiAgICovCiAgZnVuY3Rpb24gZ2V0QXV0aG9yaXplVVJMKCR0b2tlbiwgJHNpZ25faW5fd2l0aF90d2l0dGVyID0gVFJVRSkgewogICAgaWYgKGlzX2FycmF5KCR0b2tlbikpIHsKICAgICAgJHRva2VuID0gJHRva2VuWydvYXV0aF90b2tlbiddOwogICAgfQogICAgaWYgKGVtcHR5KCRzaWduX2luX3dpdGhfdHdpdHRlcikpIHsKICAgICAgcmV0dXJuICR0aGlzLT5hdXRob3JpemVVUkwoKSAuICI/b2F1dGhfdG9rZW49eyR0b2tlbn0iOwogICAgfSBlbHNlIHsKICAgICAgIHJldHVybiAkdGhpcy0+YXV0aGVudGljYXRlVVJMKCkgLiAiP29hdXRoX3Rva2VuPXskdG9rZW59IjsKICAgIH0KICB9CgogIC8qKgogICAqIEV4Y2hhbmdlIHJlcXVlc3QgdG9rZW4gYW5kIHNlY3JldCBmb3IgYW4gYWNjZXNzIHRva2VuIGFuZAogICAqIHNlY3JldCwgdG8gc2lnbiBBUEkgY2FsbHMuCiAgICoKICAgKiBAcmV0dXJucyBhcnJheSgib2F1dGhfdG9rZW4iID0+ICJ0aGUtYWNjZXNzLXRva2VuIiwKICAgKiAgICAgICAgICAgICAgICAib2F1dGhfdG9rZW5fc2VjcmV0IiA9PiAidGhlLWFjY2Vzcy1zZWNyZXQiLAogICAqICAgICAgICAgICAgICAgICJ1c2VyX2lkIiA9PiAiOTQzNjk5MiIsCiAgICogICAgICAgICAgICAgICAgInNjcmVlbl9uYW1lIiA9PiAiYWJyYWhhbSIpCiAgICovCiAgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW4oJG9hdXRoX3ZlcmlmaWVyKSB7CiAgICAkcGFyYW1ldGVycyA9IGFycmF5KCk7CiAgICAkcGFyYW1ldGVyc1snb2F1dGhfdmVyaWZpZXInXSA9ICRvYXV0aF92ZXJpZmllcjsKICAgICRyZXF1ZXN0ID0gJHRoaXMtPm9BdXRoUmVxdWVzdCgkdGhpcy0+YWNjZXNzVG9rZW5VUkwoKSwgJ0dFVCcsICRwYXJhbWV0ZXJzKTsKICAgICR0b2tlbiA9IE9BdXRoVXRpbDo6cGFyc2VfcGFyYW1ldGVycygkcmVxdWVzdCk7CiAgICAkdGhpcy0+dG9rZW4gPSBuZXcgT0F1dGhDb25zdW1lcigkdG9rZW5bJ29hdXRoX3Rva2VuJ10sICR0b2tlblsnb2F1dGhfdG9rZW5fc2VjcmV0J10pOwogICAgcmV0dXJuICR0b2tlbjsKICB9CgogIC8qKgogICAqIE9uZSB0aW1lIGV4Y2hhbmdlIG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmb3IgYWNjZXNzIHRva2VuIGFuZCBzZWNyZXQuCiAgICoKICAgKiBAcmV0dXJucyBhcnJheSgib2F1dGhfdG9rZW4iID0+ICJ0aGUtYWNjZXNzLXRva2VuIiwKICAgKiAgICAgICAgICAgICAgICAib2F1dGhfdG9rZW5fc2VjcmV0IiA9PiAidGhlLWFjY2Vzcy1zZWNyZXQiLAogICAqICAgICAgICAgICAgICAgICJ1c2VyX2lkIiA9PiAiOTQzNjk5MiIsCiAgICogICAgICAgICAgICAgICAgInNjcmVlbl9uYW1lIiA9PiAiYWJyYWhhbSIsCiAgICogICAgICAgICAgICAgICAgInhfYXV0aF9leHBpcmVzIiA9PiAiMCIpCiAgICovICAKICBmdW5jdGlvbiBnZXRYQXV0aFRva2VuKCR1c2VybmFtZSwgJHBhc3N3b3JkKSB7CiAgICAkcGFyYW1ldGVycyA9IGFycmF5KCk7CiAgICAkcGFyYW1ldGVyc1sneF9hdXRoX3VzZXJuYW1lJ10gPSAkdXNlcm5hbWU7CiAgICAkcGFyYW1ldGVyc1sneF9hdXRoX3Bhc3N3b3JkJ10gPSAkcGFzc3dvcmQ7CiAgICAkcGFyYW1ldGVyc1sneF9hdXRoX21vZGUnXSA9ICdjbGllbnRfYXV0aCc7CiAgICAkcmVxdWVzdCA9ICR0aGlzLT5vQXV0aFJlcXVlc3QoJHRoaXMtPmFjY2Vzc1Rva2VuVVJMKCksICdQT1NUJywgJHBhcmFtZXRlcnMpOwogICAgJHRva2VuID0gT0F1dGhVdGlsOjpwYXJzZV9wYXJhbWV0ZXJzKCRyZXF1ZXN0KTsKICAgICR0aGlzLT50b2tlbiA9IG5ldyBPQXV0aENvbnN1bWVyKCR0b2tlblsnb2F1dGhfdG9rZW4nXSwgJHRva2VuWydvYXV0aF90b2tlbl9zZWNyZXQnXSk7CiAgICByZXR1cm4gJHRva2VuOwogIH0KCiAgLyoqCiAgICogR0VUIHdyYXBwZXIgZm9yIG9BdXRoUmVxdWVzdC4KICAgKi8KICBmdW5jdGlvbiBnZXQoJHVybCwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKSB7CiAgICAkcmVzcG9uc2UgPSAkdGhpcy0+b0F1dGhSZXF1ZXN0KCR1cmwsICdHRVQnLCAkcGFyYW1ldGVycyk7CiAgICBpZiAoJHRoaXMtPmZvcm1hdCA9PT0gJ2pzb24nICYmICR0aGlzLT5kZWNvZGVfanNvbikgewogICAgICByZXR1cm4ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsKICAgIH0KICAgIHJldHVybiAkcmVzcG9uc2U7CiAgfQogIAogIC8qKgogICAqIFBPU1Qgd3JhcHBlciBmb3Igb0F1dGhSZXF1ZXN0LgogICAqLwogIGZ1bmN0aW9uIHBvc3QoJHVybCwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKSB7CiAgICAkcmVzcG9uc2UgPSAkdGhpcy0+b0F1dGhSZXF1ZXN0KCR1cmwsICdQT1NUJywgJHBhcmFtZXRlcnMpOwogICAgaWYgKCR0aGlzLT5mb3JtYXQgPT09ICdqc29uJyAmJiAkdGhpcy0+ZGVjb2RlX2pzb24pIHsKICAgICAgcmV0dXJuIGpzb25fZGVjb2RlKCRyZXNwb25zZSk7CiAgICB9CiAgICByZXR1cm4gJHJlc3BvbnNlOwogIH0KCiAgLyoqCiAgICogREVMRVRFIHdyYXBwZXIgZm9yIG9BdXRoUmVxZXVzdC4KICAgKi8KICBmdW5jdGlvbiBkZWxldGUoJHVybCwgJHBhcmFtZXRlcnMgPSBhcnJheSgpKSB7CiAgICAkcmVzcG9uc2UgPSAkdGhpcy0+b0F1dGhSZXF1ZXN0KCR1cmwsICdERUxFVEUnLCAkcGFyYW1ldGVycyk7CiAgICBpZiAoJHRoaXMtPmZvcm1hdCA9PT0gJ2pzb24nICYmICR0aGlzLT5kZWNvZGVfanNvbikgewogICAgICByZXR1cm4ganNvbl9kZWNvZGUoJHJlc3BvbnNlKTsKICAgIH0KICAgIHJldHVybiAkcmVzcG9uc2U7CiAgfQoKICAvKioKICAgKiBGb3JtYXQgYW5kIHNpZ24gYW4gT0F1dGggLyBBUEkgcmVxdWVzdAogICAqLwogIGZ1bmN0aW9uIG9BdXRoUmVxdWVzdCgkdXJsLCAkbWV0aG9kLCAkcGFyYW1ldGVycykgewogICAgaWYgKHN0cnJwb3MoJHVybCwgJ2h0dHBzOi8vJykgIT09IDAgJiYgc3RycnBvcygkdXJsLCAnaHR0cDovLycpICE9PSAwKSB7CiAgICAgICR1cmwgPSAieyR0aGlzLT5ob3N0fXskdXJsfS57JHRoaXMtPmZvcm1hdH0iOwogICAgfQogICAgJHJlcXVlc3QgPSBPQXV0aFJlcXVlc3Q6OmZyb21fY29uc3VtZXJfYW5kX3Rva2VuKCR0aGlzLT5jb25zdW1lciwgJHRoaXMtPnRva2VuLCAkbWV0aG9kLCAkdXJsLCAkcGFyYW1ldGVycyk7CiAgICAkcmVxdWVzdC0+c2lnbl9yZXF1ZXN0KCR0aGlzLT5zaGExX21ldGhvZCwgJHRoaXMtPmNvbnN1bWVyLCAkdGhpcy0+dG9rZW4pOwogICAgc3dpdGNoICgkbWV0aG9kKSB7CiAgICBjYXNlICdHRVQnOgogICAgICByZXR1cm4gJHRoaXMtPmh0dHAoJHJlcXVlc3QtPnRvX3VybCgpLCAnR0VUJyk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gJHRoaXMtPmh0dHAoJHJlcXVlc3QtPmdldF9ub3JtYWxpemVkX2h0dHBfdXJsKCksICRtZXRob2QsICRyZXF1ZXN0LT50b19wb3N0ZGF0YSgpKTsKICAgIH0KICB9CgogIC8qKgogICAqIE1ha2UgYW4gSFRUUCByZXF1ZXN0CiAgICoKICAgKiBAcmV0dXJuIEFQSSByZXN1bHRzCiAgICovCiAgZnVuY3Rpb24gaHR0cCgkdXJsLCAkbWV0aG9kLCAkcG9zdGZpZWxkcyA9IE5VTEwpIHsKICAgICR0aGlzLT5odHRwX2luZm8gPSBhcnJheSgpOwogICAgJGNpID0gY3VybF9pbml0KCk7CiAgICAvKiBDdXJsIHNldHRpbmdzICovCiAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfVVNFUkFHRU5ULCAkdGhpcy0+dXNlcmFnZW50KTsKICAgIGN1cmxfc2V0b3B0KCRjaSwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgJHRoaXMtPmNvbm5lY3R0aW1lb3V0KTsKICAgIGN1cmxfc2V0b3B0KCRjaSwgQ1VSTE9QVF9USU1FT1VULCAkdGhpcy0+dGltZW91dCk7CiAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIFRSVUUpOwogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX0hUVFBIRUFERVIsIGFycmF5KCdFeHBlY3Q6JykpOwogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAkdGhpcy0+c3NsX3ZlcmlmeXBlZXIpOwogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBhcnJheSgkdGhpcywgJ2dldEhlYWRlcicpKTsKICAgIGN1cmxfc2V0b3B0KCRjaSwgQ1VSTE9QVF9IRUFERVIsIEZBTFNFKTsKCiAgICBzd2l0Y2ggKCRtZXRob2QpIHsKICAgICAgY2FzZSAnUE9TVCc6CiAgICAgICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX1BPU1QsIFRSVUUpOwogICAgICAgIGlmICghZW1wdHkoJHBvc3RmaWVsZHMpKSB7CiAgICAgICAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfUE9TVEZJRUxEUywgJHBvc3RmaWVsZHMpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAnREVMRVRFJzoKICAgICAgICBjdXJsX3NldG9wdCgkY2ksIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCwgJ0RFTEVURScpOwogICAgICAgIGlmICghZW1wdHkoJHBvc3RmaWVsZHMpKSB7CiAgICAgICAgICAkdXJsID0gInskdXJsfT97JHBvc3RmaWVsZHN9IjsKICAgICAgICB9CiAgICB9CgogICAgY3VybF9zZXRvcHQoJGNpLCBDVVJMT1BUX1VSTCwgJHVybCk7CiAgICAkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGNpKTsKICAgICR0aGlzLT5odHRwX2NvZGUgPSBjdXJsX2dldGluZm8oJGNpLCBDVVJMSU5GT19IVFRQX0NPREUpOwogICAgJHRoaXMtPmh0dHBfaW5mbyA9IGFycmF5X21lcmdlKCR0aGlzLT5odHRwX2luZm8sIGN1cmxfZ2V0aW5mbygkY2kpKTsKICAgICR0aGlzLT51cmwgPSAkdXJsOwogICAgY3VybF9jbG9zZSAoJGNpKTsKICAgIHJldHVybiAkcmVzcG9uc2U7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGhlYWRlciBpbmZvIHRvIHN0b3JlLgogICAqLwogIGZ1bmN0aW9uIGdldEhlYWRlcigkY2gsICRoZWFkZXIpIHsKICAgICRpID0gc3RycG9zKCRoZWFkZXIsICc6Jyk7CiAgICBpZiAoIWVtcHR5KCRpKSkgewogICAgICAka2V5ID0gc3RyX3JlcGxhY2UoJy0nLCAnXycsIHN0cnRvbG93ZXIoc3Vic3RyKCRoZWFkZXIsIDAsICRpKSkpOwogICAgICAkdmFsdWUgPSB0cmltKHN1YnN0cigkaGVhZGVyLCAkaSArIDIpKTsKICAgICAgJHRoaXMtPmh0dHBfaGVhZGVyWyRrZXldID0gJHZhbHVlOwogICAgfQogICAgcmV0dXJuIHN0cmxlbigkaGVhZGVyKTsKICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKLy8gREIgQ29ubmVjdGlvbgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCi8vIFNvdXJjZWdyb3VwcyB0YWJsZQoJJGZsZHMgPSAiCgkJSUQgSSBLRVksCgkJVGl0bGUgQygyNTYpLAkJCgkJRGF0ZUNyZWF0ZWQgREFURVRJTUUsCgkJRGF0ZU1vZGlmaWVkIERBVEVUSU1FCQoJIjsgCgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdFTkdJTkU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZWdyb3VwcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlZ3JvdXBzX3NlcSIpOwoJCi8vIFNvdXJjZXNfc291cmNlc2dyb3VwcyB0YWJsZQoJJGZsZHMgPSAiCgkJSUQgSSBLRVksCgkJU291cmNlSUQgSSwKCQlTb3VyY2Vncm91cElEIEkJCgkiOyAKCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ0VOR0lORT1NeUlTQU0nKTsKCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfc291cmNlc19zb3VyY2Vncm91cHMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXNfc291cmNlZ3JvdXBzX3NlcSIpOwoJCi8vIFNvdXJjZXMgdGFibGUKCSRmbGRzID0gIgoJCUlEIEkgS0VZLAoJCVRpdGxlIEMoMjU2KSwKCQlUeXBlIEMoMTI4KSwKCQlEYXRhIFRleHQsCgkJWE1MIEMoMjU2KSwKCQlBY3RpdmUgSU5UKDEpIERFRkFVTFQgMSwKCQlMYXN0VXBkYXRlIERBVEVUSU1FLAoJCURhdGVDcmVhdGVkIERBVEVUSU1FLAoJCURhdGVNb2RpZmllZCBEQVRFVElNRQoJIjsgCgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdFTkdJTkU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXNfc2VxIik7CgkKLy8gTWVzc2FnZXMgdGFibGUKCSRmbGRzID0gIgoJCUlEIEkgS0VZLAoJCU1lc3NhZ2UgQygyNTYpLAoJCVVzZXIgSSwJCQoJCUFjdGl2ZSBJTlQoMSkgREVGQVVMVCAxLAoJCXNvdXJjZUlEIEksCQkKCQlEYXRlIERBVEVUSU1FLAoJCUxpbmsgQygyNTYpLAoJCXR3ZWV0SUQgQygyNTUpCgkiOyAKCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ0VOR0lORT1NeUlTQU0nKTsKCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfbWVzc2FnZXMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX21lc3NhZ2VzX3NlcSIpOwoJCi8vIFVzZXJzIHRhYmxlCgkkZmxkcyA9ICIKCQlJRCBJIEtFWSwKCQlVc2VybmFtZSBDKDI1NiksCgkJQXZhdGFyIEMoMjU2KSwJCQoJCUFjdGl2ZSBJTlQoMSkgREVGQVVMVCAxLAkJCgkJTGFzdFVwZGF0ZSBEQVRFVElNRQkJCgkiOyAKCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ0VOR0lORT1NeUlTQU0nKTsKCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfdXNlcnMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3VzZXJzX3NlcSIpOwkKCgovLyBNYXAgdGVtcGxhdGUKJGZuID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcGxhdGVzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidkZWZhdWx0X3RlbXBsYXRlLnRwbCc7CmlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQogIHsKICAgICR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfdGVtcGxhdGVfY29udGVudCcsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnRGVmYXVsdCcsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3RlbXBsYXRlJywnRGVmYXVsdCcpOwogIH0gIAoKLy8gRGVmYXVsdCBwcmVmZXJlbmNlcwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnUmVmcmVzaEludGVydmFsJywnMzAwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdFdmVyeUxvYWQnLCcwJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9rZXknLCd6Z2ZSOVM4VzM3ejFUNUUwUFVTYTN3Jyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9zZWNyZXQnLCdETEllblpBdkY4eUFQNGNCdnBDTFZlb2gxTXh1cGJNcm5DaG5JZFcwUnMnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3Rva2VuJywnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF90b2tlbl9zZWNyZXQnLCcnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3ZhbGlkJywwKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3NjcmVlbm5hbWUnLCcnKTsKICAKLy8gUGVybWlzc2lvbnMKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1VzZSBCV1R3aXR0ZXInLCAnVXNlIEJXVHdpdHRlcicpOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignQ2hhbmdlIEJXVHdpdHRlciBTZXR0aW5ncycsICdDaGFuZ2UgQldUd2l0dGVyIFNldHRpbmdzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdDaGFuZ2UgQldUd2l0dGVyIFRlbXBsYXRlcycsICdDaGFuZ2UgQldUd2l0dGVyIFRlbXBsYXRlcycpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyBEQgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKLy8gVGFibGVzCgkvLyBTb3VyY2Vncm91cHMgdGFibGUKCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2Vncm91cHMiICk7CgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZWdyb3Vwc19zZXEiICk7CgkKCS8vIFNvdXJjZXNfc291cmNlc2dyb3VwcyB0YWJsZQoJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3NvdXJjZXNfc291cmNlZ3JvdXBzIiApOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzX3NvdXJjZWdyb3Vwc19zZXEiICk7CgkKCS8vIFNvdXJjZXMgdGFibGUKCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzIiApOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzX3NlcSIgKTsKCQoJLy8gTWVzc2FnZXMgdGFibGUKCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9tZXNzYWdlcyIgKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9id3R3aXR0ZXJfbWVzc2FnZXNfc2VxIiApOwoJCgkvLyBVc2VycyB0YWJsZQoJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX3VzZXJzIiApOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl91c2Vyc19zZXEiICk7CQoKLy8gVGVtcGxhdGVzCiR0aGlzLT5EZWxldGVUZW1wbGF0ZSgpOwoKLy8gUHJlZmVyZW5jZXMKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoKTsKCi8vIFBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgQldUd2l0dGVyJyk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdDaGFuZ2UgQldUd2l0dGVyIFNldHRpbmdzJyk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdDaGFuZ2UgQldUd2l0dGVyIFRlbXBsYXRlcycpOwoKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKaWYgKCRvbGR2ZXJzaW9uID09ICcxLjAnKQp7Cgkkb2xkdmVyc2lvbiA9ICcxLjEnOwp9CgppZiAoJG9sZHZlcnNpb24gPT0gJzEuMScpCnsKCSRvbGR2ZXJzaW9uID0gJzEuMS4xJzsKfQoKaWYgKCRvbGR2ZXJzaW9uID09ICcxLjEuMScpCnsKCSRvbGR2ZXJzaW9uID0gJzIuMCc7Cn0KCmlmKCRvbGR2ZXJzaW9uID09ICcyLjAnKXsKCS8vIENyZWF0ZSBPQXV0aCBwcmVmZXJlbmNlcwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NvbnN1bWVyX2tleScsJ3pnZlI5UzhXMzd6MVQ1RTBQVVNhM3cnKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjb25zdW1lcl9zZWNyZXQnLCdETEllblpBdkY4eUFQNGNCdnBDTFZlb2gxTXh1cGJNcm5DaG5JZFcwUnMnKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF90b2tlbicsJycpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3Rva2VuX3NlY3JldCcsJycpOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ29hdXRoX3ZhbGlkJywwKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdvYXV0aF9zY3JlZW5uYW1lJywnJyk7CgkKCS8vIEFkZCBjb2x1bW4gZm9yIHR3ZWV0IElECgkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9tZXNzYWdlcyIsICJ0d2VldElEIEMoMjU1KSIpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJCgkvLyBMb29wIHRocm91Z2ggc291cmNlcyBhbmQgY29ycmVjdCB0aGUgc291cmNlIFVSTAoJJHNvdXJjZXMgPSAkdGhpcy0+R2V0U291cmNlcygkaWQsICRyZXR1cm5pZCwgJycsICcnLCAiVGl0bGUiLCAiQVNDIiwgZmFsc2UpOwoJZm9yZWFjaCAoJHNvdXJjZXMgYXMgJHNvdXJjZSl7CgkJJHhtbCA9ICRzb3VyY2VbJ1hNTCddOwoJCSR4bWwgPSBleHBsb2RlKCI9IiwkeG1sKTsKCQkkeG1sID0gJHhtbFsxXTsKCQlzd2l0Y2goJHNvdXJjZVsnVHlwZSddKXsKCQkJY2FzZSAiYWNjb3VudCI6CgkJCQkkeG1sID0gJ3N0YXR1c2VzL3VzZXJfdGltZWxpbmUuanNvbj9zY3JlZW5fbmFtZT0nLiR4bWw7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCSR4bWwgPSAnc2VhcmNoL3R3ZWV0cy5qc29uP3E9Jy4keG1sOwoJCQkJYnJlYWs7CgkJfQoJCS8vIFVwZGF0ZSBzb3VyY2UKCQkkdmFycyA9IGFycmF5KCR4bWwsJHNvdXJjZVsnSUQnXSk7CgkJJHF1ZXJ5U3RyaW5nID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2J3dHdpdHRlcl9zb3VyY2VzCgkJCQkJCVNFVAlYTUwJPSA/CVdIRVJFIElEPSA/IjsKCQkkcXVlcnlSZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5U3RyaW5nLCR2YXJzKTsKCX0KCQoJLy8gVGhyb3VnaCBtZXNzYWdlcyBhbmQgZmlsbCB0d2VldElEIGNvbHVtbgoJJG1lc3NhZ2VzID0gJHRoaXMtPkdldE1lc3NhZ2VzKCRpZCwgJHJldHVybmlkLCAnJywgJycsICJEYXRlIiwgIkFTQyIsIGZhbHNlKTsJCglmb3JlYWNoICgkbWVzc2FnZXMgYXMgJHR3ZWV0KXsKCQkvLyBUd2VldElECgkJJHR3ZWV0SUQgPSBleHBsb2RlKCJzdGF0dXNlcy8iLCR0d2VldFsnTGluayddKTsKCQkkdHdlZXRJRCA9IGFycmF5X3BvcCgkdHdlZXRJRCk7CgkJLy8gVXBkYXRlIG1lc3NhZ2VzCgkJJHZhcnMgPSBhcnJheSgkdHdlZXRJRCwkdHdlZXRbJ21lc3NhZ2VJRCddKTsKCQkkcXVlcnlTdHJpbmcgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYnd0d2l0dGVyX21lc3NhZ2VzCgkJCQkJCVNFVAl0d2VldElECT0gPwlXSEVSRSBJRD0gPyI7CgkJJHF1ZXJ5UmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeVN0cmluZywkdmFycyk7Cgl9CgkKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_addtemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0iYWRkdGVtcGxhdGUiPg0KDQp7JHN0YXJ0Zm9ybX0NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskbmFtZX06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRlbXBsYXRlX25hbWV9PC9wPg0KCTwvZGl2Pg0KCQ0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRjb250ZW50fTo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGVfY29udGVudH08L3A+DQoJPC9kaXY+DQoJDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZWRpdH17JHN1Ym1pdH17JGNhbmNlbH08L3A+DQoJPC9kaXY+DQp7JGVuZGZvcm19DQoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+DQoJeyR2YXJzfQ0KCTwvZGl2Pg0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/admin_add_edit_group.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0idGFibGVjb250YWluZXIiPg0KCXskZm9ybV9zdGFydH0NCgkNCgk8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+DQoJCTx0cj4NCgkJCTx0ZCB3aWR0aD0iNTAlIj4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IiB3aWR0aD0iNTAlIj57JHN1Ym1pdH17JGNhbmNlbH17JHRvZXBhc3Nlbn08L3RkPg0KCQk8L3RyPg0KCQkNCgkJPHRyIGNsYXNzPSJyb3cxIj4NCgkJCTx0ZD48c3Ryb25nPnskVGl0bGVfdGV4dH06PC9zdHJvbmc+PC90ZD4NCgkJCTx0ZD57JFRpdGxlX2lucHV0fTwvdGQ+DQoJCTwvdHI+DQoJCQkNCgkJeyogU291cmNlcyAqfQ0KCQk8dHI+DQoJCQk8dGQgY29sc3Bhbj0iMiI+DQoJCQkJPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiPg0KCQkJCQk8dHI+DQoJCQkJCQk8dGggY29sc3Bhbj0iMiI+eyRzb3VyY2VzdGV4dH06PC90aD4NCgkJCQkJPC90cj4NCgkJCQkJe2Fzc2lnbiB2YXI9ImNvdW50ZXIiIHZhbHVlPSIxIn0NCgkJCQkJe2ZvcmVhY2ggZnJvbT0kc291cmNlc19jaGVja2JveGVzIGtleT1zb3VyY2UgaXRlbT1jaGVja2JveH0NCgkJCQkJDQoJCQkJCTx0ciBjbGFzcz0icm93eyRjb3VudGVyfSI+DQoJCQkJCQk8dGQgd2lkdGg9IjEwIj57JGNoZWNrYm94fTwvdGQ+DQoJCQkJCQk8dGQ+eyRzb3VyY2V9PC90ZD4NCgkJCQkJPC90cj4NCgkJCQkJe2lmICRjb3VudGVyID09IDF9DQoJCQkJCQl7YXNzaWduIHZhcj0iY291bnRlciIgdmFsdWU9IjIifQ0KCQkJCQl7ZWxzZX0NCgkJCQkJCXthc3NpZ24gdmFyPSJjb3VudGVyIiB2YWx1ZT0iMSJ9DQoJCQkJCXsvaWZ9CQkJCQ0KCQkJCQl7L2ZvcmVhY2h9CQ0KCQkJCQ0KCQkJCTwvdGFibGU+CQkJDQoJCQk8L3RkPg0KCQk8L3RyPg0KCQk8dHI+DQoJCQk8dGQ+PC90ZD4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij57JHN1Ym1pdH17JGNhbmNlbH17JHRvZXBhc3Nlbn08L3RkPg0KCQk8L3RyPg0KCTwvdGFibGU+DQoJeyRhZGR9DQoJeyRmb3JtX2VuZH0NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_add_edit_source.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0idGFibGVjb250YWluZXIiPg0KCXskZm9ybV9zdGFydH0NCgkNCgk8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+DQoJCTx0cj4NCgkJCTx0ZCB3aWR0aD0iNTAlIj4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IiB3aWR0aD0iNTAlIj57JHN1Ym1pdH17JGNhbmNlbH17JHRvZXBhc3Nlbn08L3RkPg0KCQk8L3RyPg0KCQkNCgkJPHRyIGNsYXNzPSJyb3cxIj4NCgkJCTx0ZD48c3Ryb25nPnskVGl0bGVfdGV4dH06PC9zdHJvbmc+PC90ZD4NCgkJCTx0ZD57JFRpdGxlX2lucHV0fTwvdGQ+DQoJCTwvdHI+DQoJCQ0KCQk8dHIgY2xhc3M9InJvdzIiPg0KCQkJPHRkPjxzdHJvbmc+eyRUeXBlX3RleHR9Ojwvc3Ryb25nPjwvdGQ+DQoJCQk8dGQ+eyRUeXBlX2lucHV0fTwvdGQ+DQoJCTwvdHI+DQoJCQ0KCQk8dHIgY2xhc3M9InJvdzEiPg0KCQkJPHRkPjxzdHJvbmcgY2xhc3M9ImZlZWRwcmVmaXgiPnskRGF0YV90ZXh0fTo8L3N0cm9uZz48L3RkPg0KCQkJPHRkPnskRGF0YV9pbnB1dH08L3RkPg0KCQk8L3RyPg0KCQkJCQkNCgkJPHRyPg0KCQkJPHRkPjwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+eyRzdWJtaXR9eyRjYW5jZWx9eyR0b2VwYXNzZW59PC90ZD4NCgkJPC90cj4NCgk8L3RhYmxlPg0KCXskYWRkfQ0KCXskZm9ybV9lbmR9DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0iYWRkdGVtcGxhdGUiPg0KDQp7JHN0YXJ0Zm9ybX0NCg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRjb250ZW50fTo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGVfY29udGVudH08L3A+DQoJPC9kaXY+DQoJDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGVtcGxhdGVfbmFtZX17JGVkaXR9eyRzdWJtaXR9eyRjYW5jZWx9PC9wPg0KCTwvZGl2Pg0KeyRlbmRmb3JtfQ0KDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPg0KCXskdmFyc30NCgk8L2Rpdj4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_groupstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0KDQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRfaGVhZGVycyBpdGVtPWhlYWRlcn0NCgkJCTx0aD57aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTx1PnsvaWZ9eyRoZWFkZXIuMX17aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTwvdT57L2lmfTwvdGg+DQoJCQl7L2ZvcmVhY2h9CQkJCQkJDQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJPC90cj4NCgk8L3RoZWFkPg0KCTx0Ym9keT4NCgl7aWYgJGl0ZW1zfEBjb3VudCA+IDB9DQoJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIxIn0NCgkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1pdGVtfQ0KCQkJPHRyIGNsYXNzPSJyb3d7JHRlbGxlcn0iPg0KCQkJCXtmb3JlYWNoIGZyb209JGZpZWxkcyBpdGVtPWZpZWxkfQ0KCQkJCQk8dGQ+e2lmICRmaWVsZCA9PSAiVGl0bGUifXskaXRlbS5lZGl0VGl0bGV9e2Vsc2V9eyRpdGVtLiRmaWVsZHx0cnVuY2F0ZTonNzUnOicuLic6dHJ1ZX17L2lmfTwvdGQ+DQoJCQkJey9mb3JlYWNofQ0KCQkJCQ0KCQkJCTx0ZD57JGl0ZW0uZWRpdGxpbmt9PC90ZD4NCgkJCQk8dGQ+eyRpdGVtLmRlbGV0ZWxpbmt9PC90ZD4JCQkNCgkJCTwvdHI+DQoJCQl7aWYgJHRlbGxlciA9PSAxfQ0KCQkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIyIn0NCgkJCXtlbHNlfQ0KCQkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIxIn0NCgkJCXsvaWZ9DQoJCXsvZm9yZWFjaH0NCgl7ZWxzZX0NCgkJPHRyPg0KCQkJPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPnskbm9ncm91cHN9PC90ZD4NCgkJPC90cj4NCgl7L2lmfQ0KCTwvdGJvZHk+DQo8L3RhYmxlPg0KDQoNCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4NCgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQo8L2Rpdj4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_messagestab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJzZWFyY2giIHZhbHVlPSJ7JHNlYXJjaHRleHR9IiAvPjxici8+DQo8ZGl2IGNsYXNzPSJwb3N0dXJsIj57JHBvc3R1cmx9PC9kaXY+DQo8ZGl2IGNsYXNzPSJ0YWJjb250ZW50Ij4NCgl7aWYgIWVtcHR5KCRwYWdpbmcpfQ0KCTx1bCBjbGFzcz0icGFnaW5nIj4NCgl7Zm9yZWFjaCBmcm9tPSRwYWdpbmcga2V5PXBhZ2UgaXRlbT1idXR0b259DQoJCXtpZiAkYnV0dG9uLmFjdGl2ZX0NCgkJCTxsaSBjbGFzcz0iYWN0aXZlIj48c3Bhbj57JHBhZ2V9PC9zcGFuPjwvbGk+DQoJCXtlbHNlfQ0KCQkJPGxpPjxhIGhyZWY9InskYnV0dG9uLmxpbmt9Ij57JHBhZ2V9PC9hPjwvbGk+DQoJCXsvaWZ9DQoJey9mb3JlYWNofQ0KCTwvdWw+DQoJPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2Pg0KCXsvaWZ9DQoJPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCgkJPHRoZWFkPg0KCQkJPHRyPg0KCQkJCXtmb3JlYWNoIGZyb209JGZpZWxkX2hlYWRlcnMgaXRlbT1oZWFkZXJ9DQoJCQkJPHRoPntpZiAkb3JkZXJieSA9PSAkaGVhZGVyLjB9PHU+ey9pZn17JGhlYWRlci4xfXtpZiAkb3JkZXJieSA9PSAkaGVhZGVyLjB9PC91PnsvaWZ9PC90aD4NCgkJCQl7L2ZvcmVhY2h9DQoJCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4JCQkNCgkJCTwvdHI+DQoJCTwvdGhlYWQ+DQoJCTx0Ym9keT4NCgkJe2lmICRpdGVtc3xAY291bnQgPiAwfQ0KCQkJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjEifQ0KCQkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1pdGVtfQ0KCQkJCTx0ciBjbGFzcz0icm93eyR0ZWxsZXJ9Ij4NCgkJCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRzIGl0ZW09ZmllbGR9DQoJCQkJCQk8dGQ+eyRpdGVtLiRmaWVsZHx0cnVuY2F0ZTonNzUnOicuLic6dHJ1ZX08L3RkPg0KCQkJCQl7L2ZvcmVhY2h9DQoJCQkJCTx0ZD57JGl0ZW0uYWN0aXZlbGlua308L3RkPgkJCQkNCgkJCQk8L3RyPg0KCQkJCXtpZiAkdGVsbGVyID09IDF9DQoJCQkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIyIn0NCgkJCQl7ZWxzZX0NCgkJCQkJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjEifQ0KCQkJCXsvaWZ9DQoJCQl7L2ZvcmVhY2h9CQkNCgkJe2Vsc2V9DQoJCQk8dHI+DQoJCQkJPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPnskbm9tZXNzYWdlc308L3RkPg0KCQkJPC90cj4NCgkJey9pZn0NCgkJPC90Ym9keT4NCgk8L3RhYmxlPg0KCXtpZiAhZW1wdHkoJHBhZ2luZyl9CQkNCgkJPHVsIGNsYXNzPSJwYWdpbmciPg0KCQl7Zm9yZWFjaCBmcm9tPSRwYWdpbmcga2V5PXBhZ2UgaXRlbT1idXR0b259DQoJCQl7aWYgJGJ1dHRvbi5hY3RpdmV9DQoJCQkJPGxpIGNsYXNzPSJhY3RpdmUiPjxzcGFuPnskcGFnZX08L3NwYW4+PC9saT4NCgkJCXtlbHNlfQ0KCQkJCTxsaT48YSBocmVmPSJ7JGJ1dHRvbi5saW5rfSI+eyRwYWdlfTwvYT48L2xpPg0KCQkJey9pZn0NCgkJey9mb3JlYWNofQ0KCQk8L3VsPg0KCQk8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQoJey9pZn0NCjwvZGl2Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0ibW9kdWxlX3NldHRpbmdzIj4NCg0KeyRzdGFydGZvcm19DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX1JlZnJlc2hJbnRlcnZhbH06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X1JlZnJlc2hJbnRlcnZhbH0geyRpbnB1dF9SZWZyZXNoSW50ZXJ2YWxfaGVscH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX0V2ZXJ5TG9hZH06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X0V2ZXJ5TG9hZH0geyRpbnB1dF9FdmVyeUxvYWRfaGVscH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX0FwcEtleX06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X0FwcEtleX0geyRpbnB1dF9BcHBLZXlfaGVscH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX0FwcFNlY3JldH06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X0FwcFNlY3JldH0geyRpbnB1dF9BcHBTZWNyZXRfaGVscH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX1NpZ25Jbn06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHR3aXR0ZXJsb2dpbn08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fTwvcD4NCgk8L2Rpdj4NCnskZW5kZm9ybX0NCg0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/admin_sourcestab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0KDQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRfaGVhZGVycyBpdGVtPWhlYWRlcn0NCgkJCTx0aD57aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTx1PnsvaWZ9eyRoZWFkZXIuMX17aWYgJG9yZGVyYnkgPT0gJGhlYWRlci4wfTwvdT57L2lmfTwvdGg+DQoJCQl7L2ZvcmVhY2h9DQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CQkJDQoJCTwvdHI+DQoJPC90aGVhZD4NCgk8dGJvZHk+DQoJe2lmICRpdGVtc3xAY291bnQgPiAwfQ0KCQl7YXNzaWduIHZhcj0idGVsbGVyIiB2YWx1ZT0iMSJ9DQoJCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09aXRlbX0NCgkJCTx0ciBjbGFzcz0icm93eyR0ZWxsZXJ9Ij4NCgkJCQl7Zm9yZWFjaCBmcm9tPSRmaWVsZHMgaXRlbT1maWVsZH0JCQkJCQ0KCQkJCQk8dGQ+e2lmICRmaWVsZCA9PSAiVGl0bGUifXskaXRlbS5lZGl0VGl0bGV9e2Vsc2V9eyRpdGVtLiRmaWVsZHx0cnVuY2F0ZTonNzUnOicuLic6dHJ1ZX17L2lmfTwvdGQ+DQoJCQkJey9mb3JlYWNofQ0KCQkJCTx0ZD57JGl0ZW0uYWN0aXZlbGlua308L3RkPg0KCQkJCTx0ZD57JGl0ZW0uZWRpdGxpbmt9PC90ZD4NCgkJCQk8dGQ+eyRpdGVtLmRlbGV0ZWxpbmt9PC90ZD4JCQkJDQoJCQk8L3RyPg0KCQkJe2lmICR0ZWxsZXIgPT0gMX0NCgkJCQl7YXNzaWduIHZhcj0idGVsbGVyIiB2YWx1ZT0iMiJ9DQoJCQl7ZWxzZX0NCgkJCQl7YXNzaWduIHZhcj0idGVsbGVyIiB2YWx1ZT0iMSJ9DQoJCQl7L2lmfQ0KCQl7L2ZvcmVhY2h9DQoJe2Vsc2V9DQoJCTx0cj4NCgkJCTx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VudGVyIj57JG5vc291cmNlc308L3RkPg0KCQk8L3RyPg0KCXsvaWZ9DQoJPC90Ym9keT4NCjwvdGFibGU+DQoNCg0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_templatestab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0KDQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRfaGVhZGVycyBpdGVtPWhlYWRlcn0NCgkJCTx0aD57JGhlYWRlcn08L3RoPg0KCQkJey9mb3JlYWNofQ0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCTwvdHI+DQoJPC90aGVhZD4NCgk8dGJvZHk+DQoJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjEifQ0KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09aXRlbX0NCgkJPHRyIGNsYXNzPSJyb3d7JHRlbGxlcn0iPg0KCQkJPHRkPnskaXRlbS5uYW1lfTwvdGQ+DQoJCQk8dGQ+eyRpdGVtLmRlZmF1bHR9PC90ZD4NCgkJCTx0ZD57JGl0ZW0uZWRpdGxpbmt9PC90ZD4NCgkJCTx0ZD57aWYgaXNzZXQoJGl0ZW0uZGVsZXRlbGluayl9eyRpdGVtLmRlbGV0ZWxpbmt9ey9pZn08L3RkPg0KCQk8L3RyPg0KCQl7aWYgJHRlbGxlciA9PSAxfQ0KCQkJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjIifQ0KCQl7ZWxzZX0NCgkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIxIn0NCgkJey9pZn0NCgl7L2ZvcmVhY2h9DQoJPC90Ym9keT4NCjwvdGFibGU+DQoNCg0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4NCjwvZGl2Pg0K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_userstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJzZWFyY2giIHZhbHVlPSJ7JHNlYXJjaHRleHR9IiAvPjxici8+DQo8ZGl2IGNsYXNzPSJwb3N0dXJsIj57JHBvc3R1cmx9PC9kaXY+DQo8ZGl2IGNsYXNzPSJ0YWJjb250ZW50Ij4NCgl7aWYgIWVtcHR5KCRwYWdpbmcpfQkJDQoJCTx1bCBjbGFzcz0icGFnaW5nIj4NCgkJe2ZvcmVhY2ggZnJvbT0kcGFnaW5nIGtleT1wYWdlIGl0ZW09YnV0dG9ufQ0KCQkJe2lmICRidXR0b24uYWN0aXZlfQ0KCQkJCTxsaSBjbGFzcz0iYWN0aXZlIj48c3Bhbj57JHBhZ2V9PC9zcGFuPjwvbGk+DQoJCQl7ZWxzZX0NCgkJCQk8bGk+PGEgaHJlZj0ieyRidXR0b24ubGlua30iPnskcGFnZX08L2E+PC9saT4NCgkJCXsvaWZ9DQoJCXsvZm9yZWFjaH0NCgkJPC91bD4NCgkJPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2Pg0KCXsvaWZ9DQoJPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCgkJPHRoZWFkPg0KCQkJPHRyPg0KCQkJCXtmb3JlYWNoIGZyb209JGZpZWxkX2hlYWRlcnMgaXRlbT1oZWFkZXJ9DQoJCQkJPHRoPntpZiAkb3JkZXJieSA9PSAkaGVhZGVyLjB9PHU+ey9pZn17JGhlYWRlci4xfXtpZiAkb3JkZXJieSA9PSAkaGVhZGVyLjB9PC91PnsvaWZ9PC90aD4NCgkJCQl7L2ZvcmVhY2h9DQoJCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4JCQkNCgkJCTwvdHI+DQoJCTwvdGhlYWQ+DQoJCTx0Ym9keT4NCgkJe2lmICRpdGVtc3xAY291bnQgPiAwfQ0KCQkJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjEifQ0KCQkJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1pdGVtfQ0KCQkJCTx0ciBjbGFzcz0icm93eyR0ZWxsZXJ9Ij4NCgkJCQkJe2ZvcmVhY2ggZnJvbT0kZmllbGRzIGl0ZW09ZmllbGR9DQoJCQkJCQk8dGQ+eyRpdGVtLiRmaWVsZHx0cnVuY2F0ZTonNzUnOicuLic6dHJ1ZX08L3RkPg0KCQkJCQl7L2ZvcmVhY2h9DQoJCQkJCTx0ZD57JGl0ZW0uYWN0aXZlbGlua308L3RkPgkJCQkNCgkJCQk8L3RyPg0KCQkJCXtpZiAkdGVsbGVyID09IDF9DQoJCQkJCXthc3NpZ24gdmFyPSJ0ZWxsZXIiIHZhbHVlPSIyIn0NCgkJCQl7ZWxzZX0NCgkJCQkJe2Fzc2lnbiB2YXI9InRlbGxlciIgdmFsdWU9IjEifQ0KCQkJCXsvaWZ9DQoJCQl7L2ZvcmVhY2h9DQoJCXtlbHNlfQ0KCQkJPHRyPg0KCQkJCTx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VudGVyIj57JG5vdXNlcnN9PC90ZD4NCgkJCTwvdHI+DQoJCXsvaWZ9DQoJCTwvdGJvZHk+DQoJPC90YWJsZT4NCgl7aWYgIWVtcHR5KCRwYWdpbmcpfQkJDQoJCTx1bCBjbGFzcz0icGFnaW5nIj4NCgkJe2ZvcmVhY2ggZnJvbT0kcGFnaW5nIGtleT1wYWdlIGl0ZW09YnV0dG9ufQ0KCQkJe2lmICRidXR0b24uYWN0aXZlfQ0KCQkJCTxsaSBjbGFzcz0iYWN0aXZlIj48c3Bhbj57JHBhZ2V9PC9zcGFuPjwvbGk+DQoJCQl7ZWxzZX0NCgkJCQk8bGk+PGEgaHJlZj0ieyRidXR0b24ubGlua30iPnskcGFnZX08L2E+PC9saT4NCgkJCXsvaWZ9DQoJCXsvZm9yZWFjaH0NCgkJPC91bD4NCgkJPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2Pg0KCXsvaWZ9DQo8L2Rpdj4=]]></data>
	</file>
	<file>
	  <filename>/templates/default_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT10d2VldH0NCjxkaXYgY2xhc3M9InR3ZWV0Ij4NCgk8ZGl2IGNsYXNzPSJhdmF0YXIiPg0KCQk8YSBocmVmPSJodHRwOi8vdHdpdHRlci5jb20veyR0d2VldC5Vc2VyLlVzZXJuYW1lfSIgdGFyZ2V0PSJfYmxhbmsiPg0KCQk8aW1nIHNyYz0ieyR0d2VldC5Vc2VyLkF2YXRhcn0iIGFsdD0ieyR0d2VldC5Vc2VyLlVzZXJuYW1lfSI+DQoJCTwvYT4JCQkNCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJtZXNzYWdlIj4NCgkJeyR0d2VldC5NZXNzYWdlX3BhcnNlZH08YnIvPg0KCQl7JHR3ZWV0LkRhdGV8ZGF0ZV9mb3JtYXQ6JyVZLSVtLSVkICVIOiVNOiVTJ30NCgk8L2Rpdj4NCjwvZGl2Pg0Key9mb3JlYWNofQ==]]></data>
	</file>
</module>
