OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbZXhwZXJpbWVudGFsLTxjaXBoZXI+IC4uLl0gWy1EeHh4XSBbLWx4eHhdIFstTHh4eF0gWy1meHh4XSBbLUt4eHhdIFtuby1ody14eHh8bm8taHddIFtbbm8tXXRocmVhZHNdIFtbbm8tXXNoYXJlZF0gW1tuby1demxpYnx6bGliLWR5bmFtaWNdIFtuby1hc21dIFtuby1kc29dIFtuby1rcmI1XSBbc2N0cF0gWzM4Nl0gWy0tcHJlZml4PURJUl0gWy0tb3BlbnNzbGRpcj1PUEVOU1NMRElSXSBbLS13aXRoLXh4eFs9dnZ2XV0gWy0tdGVzdC1zYW5pdHldIG9zL2NvbXBpbGVyWzpmbGFnc11cbiI7CgojIE9wdGlvbnM6CiMKIyAtLW9wZW5zc2xkaXIgIGluc3RhbGwgT3BlblNTTCBpbiBPUEVOU1NMRElSIChEZWZhdWx0OiBESVIvc3NsIGlmIHRoZQojICAgICAgICAgICAgICAgLS1wcmVmaXggb3B0aW9uIGlzIGdpdmVuOyAvdXNyL2xvY2FsL3NzbCBvdGhlcndpc2UpCiMgLS1wcmVmaXggICAgICBwcmVmaXggZm9yIHRoZSBPcGVuU1NMIGluY2x1ZGUsIGxpYiBhbmQgYmluIGRpcmVjdG9yaWVzCiMgICAgICAgICAgICAgICAoRGVmYXVsdDogdGhlIE9QRU5TU0xESVIgZGlyZWN0b3J5KQojCiMgLS1pbnN0YWxsX3ByZWZpeCAgQWRkaXRpb25hbCBwcmVmaXggZm9yIHBhY2thZ2UgYnVpbGRlcnMgKGVtcHR5IGJ5CiMgICAgICAgICAgICAgICBkZWZhdWx0KS4gIFRoaXMgbmVlZG4ndCBiZSBzZXQgaW4gYWR2YW5jZSwgeW91IGNhbgojICAgICAgICAgICAgICAganVzdCBhcyB3ZWxsIHVzZSAibWFrZSBJTlNUQUxMX1BSRUZJWD0vd2hhdGV2ZXIgaW5zdGFsbCIuCiMKIyAtLXdpdGgta3JiNS1kaXIgIERlY2xhcmUgd2hlcmUgS2VyYmVyb3MgNSBsaXZlcy4gIFRoZSBsaWJyYXJpZXMgYXJlIGV4cGVjdGVkCiMJCXRvIGxpdmUgaW4gdGhlIHN1YmRpcmVjdG9yeSBsaWIvIGFuZCB0aGUgaGVhZGVyIGZpbGVzIGluCiMJCWluY2x1ZGUvLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIyAtLXdpdGgta3JiNS1saWIgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgbGlicmFyaWVzIGxpdmUuICBBIHZhbHVlIGlzCiMJCXJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvbGliKQojIC0td2l0aC1rcmI1LWluY2x1ZGUgIERlY2xhcmUgd2hlcmUgdGhlIEtlcmJlcm9zIDUgaGVhZGVyIGZpbGVzIGxpdmUuICBBCiMJCXZhbHVlIGlzIHJlcXVpcmVkLgojCQkoRGVmYXVsdDogS1JCNV9ESVIvaW5jbHVkZSkKIyAtLXdpdGgta3JiNS1mbGF2b3IgIERlY2xhcmUgd2hhdCBmbGF2b3Igb2YgS2VyYmVyb3MgNSBpcyB1c2VkLiAgQ3VycmVudGx5CiMJCXN1cHBvcnRlZCB2YWx1ZXMgYXJlICJNSVQiIGFuZCAiSGVpbWRhbCIuICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojCiMgLS10ZXN0LXNhbml0eSBNYWtlIGEgbnVtYmVyIG9mIHNhbml0eSBjaGVja3Mgb24gdGhlIGRhdGEgaW4gdGhpcyBmaWxlLgojICAgICAgICAgICAgICAgVGhpcyBpcyBhIGRlYnVnZ2luZyB0b29sIGZvciBPcGVuU1NMIGRldmVsb3BlcnMuCiMKIyAtLWNyb3NzLWNvbXBpbGUtcHJlZml4IEFkZCBzcGVjaWZpZWQgcHJlZml4IHRvIGJpbnV0aWxzIGNvbXBvbmVudHMuCiMKIyBuby1ody14eHggICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIHNwZWNpZmljIGNyeXB0byBoYXJkd2FyZS4KIyAgICAgICAgICAgICAgIEdlbmVyaWMgT3BlblNTTC1zdHlsZSBtZXRob2RzIHJlbGF0aW5nIHRvIHRoaXMgc3VwcG9ydAojICAgICAgICAgICAgICAgYXJlIGFsd2F5cyBjb21waWxlZCBidXQgcmV0dXJuIE5VTEwgaWYgdGhlIGhhcmR3YXJlCiMgICAgICAgICAgICAgICBzdXBwb3J0IGlzbid0IGNvbXBpbGVkLgojIG5vLWh3ICAgICAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3IgYW55IGNyeXB0byBoYXJkd2FyZS4KIyBbbm8tXXRocmVhZHMgIFtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBhIGxpYnJhcnkgdGhhdCBpcyBzdWl0YWJsZSBmb3IKIyAgICAgICAgICAgICAgIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zIChkZWZhdWx0IGlzICJ0aHJlYWRzIiBpZiB3ZQojICAgICAgICAgICAgICAga25vdyBob3cgdG8gZG8gaXQpCiMgW25vLV1zaGFyZWQJW2Rvbid0XSB0cnkgdG8gY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgd2hlbiBzdXBwb3J0ZWQuCiMgbm8tYXNtICAgICAgICBkbyBub3QgdXNlIGFzc2VtYmxlcgojIG5vLWRzbyAgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IG5hdGl2ZSBzaGFyZWQtbGlicmFyeSBtZXRob2RzLiBUaGlzCiMgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGF0IGFsbCBtZXRob2RzIGp1c3QgcmV0dXJuIE5VTEwuCiMgbm8ta3JiNSAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgS1JCNSBsaWJyYXJ5IG9yIGNvZGUuCiMgW25vLV16bGliICAgICBbZG9uJ3RdIGNvbXBpbGUgc3VwcG9ydCBmb3IgemxpYiBjb21wcmVzc2lvbi4KIyB6bGliLWR5bmFtaWMJTGlrZSAiemxpYiIsIGJ1dCB0aGUgemxpYiBsaWJyYXJ5IGlzIGV4cGVjdGVkIHRvIGJlIGEgc2hhcmVkCiMJCWxpYnJhcnkgYW5kIHdpbGwgYmUgbG9hZGVkIGluIHJ1bi10aW1lIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcnkuCiMgc2N0cCAgICAgICAgICBpbmNsdWRlIFNDVFAgc3VwcG9ydAojIDM4NiAgICAgICAgICAgZ2VuZXJhdGUgODAzODYgY29kZQojIG5vLXNzZTIJZGlzYWJsZXMgSUEtMzIgU1NFMiBjb2RlLCBhYm92ZSBvcHRpb24gaW1wbGllcyBuby1zc2UyCiMgbm8tPGNpcGhlcj4gICBidWlsZCB3aXRob3V0IHNwZWNpZmllZCBhbGdvcml0aG0gKHJzYSwgaWRlYSwgcmM1LCAuLi4pCiMgLTx4eHg+ICs8eHh4PiBjb21waWxlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCAKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojCiMgRm9sbG93aW5nIGFyZSBzZXQgYXV0b21hdGljYWxseSBieSB0aGlzIHNjcmlwdAojCiMgTUQ1X0FTTQl1c2Ugc29tZSBleHRyYSBtZDUgYXNzZW1iZXIsCiMgU0hBMV9BU00JdXNlIHNvbWUgZXh0cmEgc2hhMSBhc3NlbWJlciwgbXVzdCBkZWZpbmUgTF9FTkRJQU4gZm9yIHg4NgojIFJNRDE2MF9BU00JdXNlIHNvbWUgZXh0cmEgcmlwZW1kMTYwIGFzc2VtYmVyLAojIFNIQTI1Nl9BU00Jc2hhMjU2X2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIFNIQTUxMl9BU00Jc2hhNTEyX2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIEFFU19BU00JQVNFX1tlbnxkZV1jcnlwdCBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKCiMgTWluaW11bSB3YXJuaW5nIG9wdGlvbnMuLi4gYW55IGNvbnRyaWJ1dGlvbnMgdG8gT3BlblNTTCBzaG91bGQgYXQgbGVhc3QgZ2V0CiMgcGFzdCB0aGVzZS4gCgpteSAkZ2NjX2RldnRlYW1fd2FybiA9ICItV2FsbCAtcGVkYW50aWMgLURQRURBTlRJQyAtV25vLWxvbmctbG9uZyAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV3NoYWRvdyAtV2Zvcm1hdCAtV2Vycm9yIC1EQ1JZUFRPX01ERUJVR19BTEwgLURDUllQVE9fTURFQlVHX0FCT1JUIC1EUkVGX0NIRUNLIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIjsKCm15ICRzdHJpY3Rfd2FybmluZ3MgPSAwOwoKbXkgJHg4Nl9nY2NfZGVzPSJERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIjsKCiMgTUQyX0NIQVIgc2xhZ3MgcGVudGl1bSBwcm9zCm15ICR4ODZfZ2NjX29wdHM9IlJDNF9JTkRFWCBNRDJfSU5UIjsKCiMgTU9ESUZZIFRIRVNFIFBBUkFNRVRFUlMgSUYgWU9VIEFSRSBHT0lORyBUTyBVU0UgVEhFICd1dGlsL3NwZWVkLnNoIFNDUklQVAojIERvbid0IHdvcnJ5IGFib3V0IHRoZXNlIG5vcm1hbGx5CgpteSAkdGNjPSJjYyI7Cm15ICR0ZmxhZ3M9Ii1mYXN0IC1YYSI7Cm15ICR0Ym5fbXVsPSIiOwpteSAkdGxpYj0iLWxuc2wgLWxzb2NrZXQiOwojJGJpdHMxPSJTSVhURUVOX0JJVCAiOwojJGJpdHMyPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czE9IlRISVJUWV9UV09fQklUICI7Cm15ICRiaXRzMj0iU0lYVFlfRk9VUl9CSVQgIjsKCm15ICR4ODZfYXNtPSJ4ODZjcHVpZC5vOmJuLTU4Ni5vIGNvLTU4Ni5vIHg4Ni1tb250Lm8geDg2LWdmMm0ubzpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXMtNTg2Lm8gdnBhZXMteDg2Lm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86Y21sbC14ODYubzpnaGFzaC14ODYubzplX3BhZGxvY2steDg2Lm8iOwoKbXkgJHg4Nl9lbGZfYXNtPSIkeDg2X2FzbTplbGYiOwoKbXkgJHg4Nl82NF9hc209Ing4Nl82NGNwdWlkLm86eDg2XzY0LWdjYy5vIHg4Nl82NC1tb250Lm8geDg2XzY0LW1vbnQ1Lm8geDg2XzY0LWdmMm0ubyBtb2RleHA1MTIteDg2XzY0Lm86OmFlcy14ODZfNjQubyB2cGFlcy14ODZfNjQubyBic2Flcy14ODZfNjQubyBhZXNuaS14ODZfNjQubyBhZXNuaS1zaGExLXg4Nl82NC5vOjptZDUteDg2XzY0Lm86c2hhMS14ODZfNjQubyBzaGEyNTYteDg2XzY0Lm8gc2hhNTEyLXg4Nl82NC5vOjpyYzQteDg2XzY0Lm8gcmM0LW1kNS14ODZfNjQubzo6OndwLXg4Nl82NC5vOmNtbGwteDg2XzY0Lm8gY21sbF9taXNjLm86Z2hhc2gteDg2XzY0Lm86ZV9wYWRsb2NrLXg4Nl82NC5vIjsKbXkgJGlhNjRfYXNtPSJpYTY0Y3B1aWQubzpibi1pYTY0Lm8gaWE2NC1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjpyYzQtaWE2NC5vIHJjNF9za2V5Lm86Ojo6OmdoYXNoLWlhNjQubzo6dm9pZCI7Cm15ICRzcGFyY3Y5X2FzbT0ic3BhcmN2OWNhcC5vIHNwYXJjY3B1aWQubzpibi1zcGFyY3Y5Lm8gc3BhcmN2OS1tb250Lm8gc3BhcmN2OWEtbW9udC5vIHZpczMtbW9udC5vIHNwYXJjdjktZ2YybS5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1zcGFyY3Y5Lm8gYWVzdDQtc3BhcmN2OS5vOjptZDUtc3BhcmN2OS5vOnNoYTEtc3BhcmN2OS5vIHNoYTI1Ni1zcGFyY3Y5Lm8gc2hhNTEyLXNwYXJjdjkubzo6Ojo6OmNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sbF9jYmMubyBjbWxsdDQtc3BhcmN2OS5vOmdoYXNoLXNwYXJjdjkubzo6dm9pZCI7Cm15ICRzcGFyY3Y4X2FzbT0iOnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6Ojo6Ojp2b2lkIjsKbXkgJGFscGhhX2FzbT0iYWxwaGFjcHVpZC5vOmJuX2FzbS5vIGFscGhhLW1vbnQubzo6Ojo6c2hhMS1hbHBoYS5vOjo6Ojo6OmdoYXNoLWFscGhhLm86OnZvaWQiOwpteSAkbWlwczY0X2FzbT0iOmJuLW1pcHMubyBtaXBzLW1vbnQubzo6YWVzX2NiYy5vIGFlcy1taXBzLm86OjpzaGExLW1pcHMubyBzaGEyNTYtbWlwcy5vIHNoYTUxMi1taXBzLm86Ojo6Ojo6OiI7Cm15ICRtaXBzMzJfYXNtPSRtaXBzNjRfYXNtOyAkbWlwczMyX2FzbSA9fiBzL1xzKnNoYTUxMlwtbWlwc1wuby8vOwpteSAkczM5MHhfYXNtPSJzMzkweGNhcC5vIHMzOTB4Y3B1aWQubzpibi1zMzkweC5vIHMzOTB4LW1vbnQubyBzMzkweC1nZjJtLm86OmFlcy1zMzkweC5vIGFlcy1jdHIubyBhZXMteHRzLm86OjpzaGExLXMzOTB4Lm8gc2hhMjU2LXMzOTB4Lm8gc2hhNTEyLXMzOTB4Lm86OnJjNC1zMzkweC5vOjo6OjpnaGFzaC1zMzkweC5vOiI7Cm15ICRhcm12NF9hc209ImFybWNhcC5vIGFybXY0Y3B1aWQubzpibl9hc20ubyBhcm12NC1tb250Lm8gYXJtdjQtZ2YybS5vOjphZXNfY2JjLm8gYWVzLWFybXY0Lm86OjpzaGExLWFybXY0LWxhcmdlLm8gc2hhMjU2LWFybXY0Lm8gc2hhNTEyLWFybXY0Lm86Ojo6Ojo6Z2hhc2gtYXJtdjQubzo6dm9pZCI7Cm15ICRwYXJpc2MxMV9hc209InBhcmlzY2lkLm86Ym5fYXNtLm8gcGFyaXNjLW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjozMiI7Cm15ICRwYXJpc2MyMF9hc209InBhcmlzY2lkLm86cGEtcmlzYzJXLm8gcGFyaXNjLW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjo2NCI7Cm15ICRwcGMzMl9hc209InBwY2NwdWlkLm8gcHBjY2FwLm86Ym4tcHBjLm8gcHBjLW1vbnQubyBwcGM2NC1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1wcGMubzo6OnNoYTEtcHBjLm8gc2hhMjU2LXBwYy5vOjo6Ojo6OjoiOwpteSAkcHBjNjRfYXNtPSJwcGNjcHVpZC5vIHBwY2NhcC5vOmJuLXBwYy5vIHBwYy1tb250Lm8gcHBjNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtcHBjLm86OjpzaGExLXBwYy5vIHNoYTI1Ni1wcGMubyBzaGE1MTItcHBjLm86Ojo6Ojo6OiI7Cm15ICRub19hc209Ijo6Ojo6Ojo6Ojo6Ojo6OnZvaWQiOwoKIyBBcyBmb3IgJEJTRHRocmVhZHMuIElkZWEgaXMgdG8gbWFpbnRhaW4gImNvbGxlY3RpdmUiIHNldCBvZiBmbGFncywKIyB3aGljaCB3b3VsZCBjb3ZlciBhbGwgQlNEIGZsYXZvcnMuIC1wdGhyZWFkIGFwcGxpZXMgdG8gdGhlbSBhbGwsIAojIGJ1dCBpcyB0cmVhdGVkIGRpZmZlcmVudGx5LiBPcGVuQlNEIGV4cGFuZHMgaXMgYXMgLURfUE9TSVhfVEhSRUFECiMgLWxjX3IsIHdoaWNoIGlzIHN1ZmZpY2llbnQuIEZyZWVCU0QgNC54IGV4cGFuZHMgaXQgYXMgLWxjX3IsCiMgd2hpY2ggaGFzIHRvIGJlIGFjY29tcGFuaWVkIGJ5IGV4cGxpY2l0IC1EX1RIUkVBRF9TQUZFIGFuZAojIHNvbWV0aW1lcyAtRF9SRUVOVFJBTlQuIEZyZWVCU0QgNS54IGV4cGFuZHMgaXQgYXMgLWxjX3IsIHdoaWNoCiMgc2VlbXMgdG8gYmUgc3VmZmljaWVudD8KbXkgJEJTRHRocmVhZHM9Ii1wdGhyZWFkIC1EX1RIUkVBRF9TQUZFIC1EX1JFRU5UUkFOVCI7CgojY29uZmlnLXN0cmluZwkkY2MgOiAkY2ZsYWdzIDogJHVuaXN0ZCA6ICR0aHJlYWRfY2ZsYWcgOiAkc3lzX2lkIDogJGxmbGFncyA6ICRibl9vcHMgOiAkY3B1aWRfb2JqIDogJGJuX29iaiA6ICRkZXNfb2JqIDogJGFlc19vYmogOiAkYmZfb2JqIDogJG1kNV9vYmogOiAkc2hhMV9vYmogOiAkY2FzdF9vYmogOiAkcmM0X29iaiA6ICRybWQxNjBfb2JqIDogJHJjNV9vYmogOiAkd3Bfb2JqIDogJGNtbGxfb2JqIDogJG1vZGVzX29iaiA6ICRlbmdpbmVzX29iaiA6ICRkc29fc2NoZW1lIDogJHNoYXJlZF90YXJnZXQgOiAkc2hhcmVkX2NmbGFnIDogJHNoYXJlZF9sZGZsYWcgOiAkc2hhcmVkX2V4dGVuc2lvbiA6ICRyYW5saWIgOiAkYXJmbGFncyA6ICRtdWx0aWxpYgoKbXkgJXRhYmxlPSgKIyBGaWxlICdUQUJMRScgKGNyZWF0ZWQgYnkgJ21ha2UgVEFCTEUnKSBjb250YWlucyB0aGUgZGF0YSBmcm9tIHRoaXMgbGlzdCwKIyBmb3JtYXR0ZWQgZm9yIGJldHRlciByZWFkYWJpbGl0eS4KCgojImIiLAkJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX06JHt0Ym5fbXVsfTo6IiwKIyJibC00Yy0yYyIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9Qk5fTExPTkcgUkM0X0NIQVIgTUQyX0NIQVI6JHt0Ym5fbXVsfTo6IiwKIyJibC00Yy1yaSIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0lOREVYOiR7dGJuX211bH06OiIsCiMiYjItaXMtcmktZHAiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMyfUlERUFfU0hPUlQgUkM0X0lOREVYIERFU19QVFI6JHt0Ym5fbXVsfTo6IiwKCiMgT3VyIGRldmVsb3BtZW50IGNvbmZpZ3MKInB1cmlmeSIsCSJwdXJpZnkgZ2NjOi1nIC1EUFVSSUZZIC1XYWxsOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOjo6OiIsCiJkZWJ1ZyIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWdnZGIgLWcyIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdlcnJvcjo6KHVua25vd24pOjotbGVmZW5jZTo6OjoiLAoiZGVidWctYmVuIiwJImdjYzokZ2NjX2RldnRlYW1fd2FybiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLU8yIC1waXBlOjoodW5rbm93bik6Ojo6OiIsCiJkZWJ1Zy1iZW4tb3BlbmJzZCIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLU8yIC1wZWRhbnRpYyAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1waXBlOjoodW5rbm93bik6Ojo6IiwKImRlYnVnLWJlbi1vcGVuYnNkLWRlYnVnIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1ET1BFTlNTTF9PUEVOQlNEX0RFVl9DUllQVE8gLURPUEVOU1NMX05PX0FTTSAtZzMgLU8yIC1wZWRhbnRpYyAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1waXBlOjoodW5rbm93bik6Ojo6IiwKImRlYnVnLWJlbi1kZWJ1ZyIsCSJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLURCTl9ERUJVRyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX05PX0hXX1BBRExPQ0sgLWczIC1PMiAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLWJlbi1tYWNvcyIsCSJjYzokZ2NjX2RldnRlYW1fd2FybiAtRE9QRU5TU0xfTk9fQVNNIC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUdfVU5VU0VEIC1ET1BFTlNTTF9USFJFQURTIC1EX1JFRU5UUkFOVCAtRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCAtYXJjaCBpMzg2IC1PMyAtRExfRU5ESUFOIC1nMyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLWJlbi1uby1vcHQiLAkiZ2NjOiAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHIC1XZXJyb3IgLURMX0VORElBTiAtRFRFUk1JT1MgLVdhbGwgLWczOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctYmVuLXN0cmljdCIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EQ09OU1RfU1RSSUNUIC1PMiAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1XcG9pbnRlci1hcml0aCAtV2Nhc3QtcXVhbCAtV3dyaXRlLXN0cmluZ3MgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1yc2UiLCJjYzotRFRFUk1JT1MgLURMX0VORElBTiAtcGlwZSAtTyAtZyAtZ2dkYjMgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfSIsCiJkZWJ1Zy1ib2RvIiwJImdjYzokZ2NjX2RldnRlYW1fd2FybiAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENPTkZfREVCVUcgLURCSU9fUEFJUl9ERUJVRyAtbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImRlYnVnLXVsZiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnM6OjpDWUdXSU4zMjo6OiR7bm9fYXNtfTp3aW4zMjpjeWd3aW4tc2hhcmVkOjo6LmRsbCIsCiJkZWJ1Zy1zdGV2ZTY0IiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1Xbm8tb3Zlcmxlbmd0aC1zdHJpbmdzIC1nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXN0ZXZlMzIiLCAiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1tMzIgLURMX0VORElBTiAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLVduby1vdmVybGVuZ3RoLXN0cmluZ3MgLWcgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXN0ZXZlLW9wdCIsICJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLW02NCAtTzMgLURMX0VORElBTiAtRFRFUk1JTyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLVduby1vdmVybGVuZ3RoLXN0cmluZ3MgLWc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1lbGYiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1nZ2RiIC1nMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtbm9hc20iLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1ETF9FTkRJQU4gLWdnZGIgLWczIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmLWV4dHJlbWUiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUEVEQU5USUMgLWdnZGIgLWczIC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtVyAtV3VuZGVmIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1ub2FzbS1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUEVEQU5USUMgLWdnZGIgLWczIC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtVyAtV3VuZGVmIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWdlb2ZmMzIiLCJnY2M6LURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURCTl9TVFJJQ1QgLURQVVJJRlkgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQgLURPUEVOU1NMX05PX0FTTSAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUEVEQU5USUMgLU8xIC1nZ2RiMiAtV2FsbCAtV2Vycm9yIC1XdW5kZWYgLXBlZGFudGljIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2JhZC1mdW5jdGlvbi1jYXN0IC1XY2FzdC1hbGlnbiAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1Xbm8tbG9uZy1sb25nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmY2NCIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtTzEgLWdnZGIyIC1XYWxsIC1XZXJyb3IgLVd1bmRlZiAtcGVkYW50aWMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVduby1sb25nLWxvbmc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LXBlbnRpdW0iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1wcHJvIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tY3B1PXBlbnRpdW1wcm8gLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY24iLAoiZGVidWctbGludXgtZWxmIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZWZlbmNlIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtZWxmLW5vZWZlbmNlIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtaWEzMi1hZXMiLCAiZ2NjOi1EQUVTX0VYUEVSSU1FTlRBTCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTp4ODZjcHVpZC5vOmJuLTU4Ni5vIGNvLTU4Ni5vIHg4Ni1tb250Lm86ZGVzLTU4Ni5vIGNyeXB0NTg2Lm86YWVzX3g4NmNvcmUubyBhZXNfY2JjLm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86OmdoYXNoLXg4Ni5vOmVfcGFkbG9jay14ODYubzplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1nZW5lcmljMzIiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EVEVSTUlPIC1nIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFRFUk1JTyAtZyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgteDg2XzY0IiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJkaXN0IiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMgQmFzaWMgY29uZmlncyB0aGF0IHNob3VsZCB3b3JrIG9uIGFueSAoMzIgYW5kIGxlc3MgYml0KSBib3gKImdjYyIsCQkiZ2NjOi1PMzo6KHVua25vd24pOjo6Qk5fTExPTkc6OjoiLAoiY2MiLAkJImNjOi1POjoodW5rbm93bik6Ojo6OjoiLAoKIyMjI1ZPUyBDb25maWd1cmF0aW9ucwoidm9zLWdjYyIsImdjYzotTzMgLVdhbGwgLURPUEVOU1NMX1NZU05BTUVfVk9TIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEIC1EX1ZPU19FWFRFTkRFRF9OQU1FUyAtREJfRU5ESUFOOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOkJOX0xMT05HOiR7bm9fYXNtfTo6Ojo6LnNvOiIsCiJkZWJ1Zy12b3MtZ2NjIiwiZ2NjOi1PMCAtZyAtV2FsbCAtRE9QRU5TU0xfU1lTTkFNRV9WT1MgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURfVk9TX0VYVEVOREVEX05BTUVTIC1EQl9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOkJOX0xMT05HOiR7bm9fYXNtfTo6Ojo6LnNvOiIsCgojIyMjIFNvbGFyaXMgeDg2IHdpdGggR05VIEMgc2V0dXBzCiMgLURPUEVOU1NMX05PX0lOTElORV9BU00gc3dpdGNoZXMgb2ZmIGlubGluZSBhc3NlbWJsZXIuIFdlIGhhdmUgdG8gZG8gaXQKIyBoZXJlIGJlY2F1c2Ugd2hlbmV2ZXIgR05VIEMgaW5zdGFudGlhdGVzIGFuIGFzc2VtYmxlciB0ZW1wbGF0ZSBpdAojIHN1cnJvdW5kcyBpdCB3aXRoICNBUFAgI05PX0FQUCBjb21tZW50IHBhaXIgd2hpY2ggKGF0IGxlYXN0IFNvbGFyaXMKIyA3X3g4NikgL3Vzci9jY3MvYmluL2FzIGZhaWxzIHRvIGFzc2VtYmxlIHdpdGggIklsbGVnYWwgbW5lbW9uaWMiCiMgZXJyb3IgbWVzc2FnZS4KInNvbGFyaXMteDg2LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPXBlbnRpdW0gLVdhbGwgLURMX0VORElBTiAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjIG1pZ2h0IGFwcGVhciBjb250cm92ZXJzaWFsLCBidXQgbW9kdWxlcyB0YWtlbgojIGZyb20gc3RhdGljIGxpYmdjYyBkbyBub3QgaGF2ZSByZWxvY2F0aW9ucyBhbmQgbGlua2luZyB0aGVtIGludG8gb3VyCiMgc2hhcmVkIG9iamVjdHMgZG9lc24ndCBoYXZlIGFueSBuZWdhdGl2ZSBzaWRlLWVmZmVjdHMuIE9uIHRoZSBjb250cmFyeSwKIyBkb2luZyBzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZ2NjIHNoYXJlZCBidWlsZCB3aXRoIFN1biBDLiBHaXZlbgojIHRoYXQgZ2NjIGdlbmVyYXRlcyBmYXN0ZXIgY29kZSBbdGhhbmtzIHRvIGlubGluZSBhc3NlbWJsZXJdLCBJIHdvdWxkCiMgYWN0dWFsbHkgcmVjb21tZW5kIHRvIGNvbnNpZGVyIHVzaW5nIGdjYyBzaGFyZWQgYnVpbGQgZXZlbiB3aXRoIHZlbmRvcgojIGNvbXBpbGVyOi0pCiMJCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiJzb2xhcmlzNjQteDg2XzY0LWdjYyIsImdjYzotbTY0IC1PMyAtV2FsbCAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZCAtc3RhdGljLWxpYmdjYzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCiAKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIFN1biBDIHNldHVwcwoic29sYXJpcy14ODYtY2MiLCJjYzotZmFzdCAtTyAtWGE6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXg4Nl82NC1jYyIsImNjOi1mYXN0IC14YXJjaD1hbWQ2NCAteHN0cmNvbnN0IC1YYSAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD1hbWQ2NCAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBHTlUgQyBzZXR1cHMKInNvbGFyaXMtc3BhcmN2Ny1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1tdjggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtbTMyIHNob3VsZCBiZSBzYWZlIHRvIGFkZCBhcyBsb25nIGFzIGRyaXZlciByZWNvZ25pemVzIC1tY3B1PXVsdHJhc3BhcmMKInNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktZ2NjIiwiZ2NjOi1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtTzMgLVdhbGwgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotbTY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLU8gLWcgLW12OCAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLU8gLWcgLW1jcHU9dWx0cmFzcGFyYyAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVduby1sb25nLWxvbmcgLURfX0VYVEVOU0lPTlNfXyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggU3VuIEMgc2V0dXBzCiMgU0M0LjAgZG9lc24ndCBwYXNzICdtYWtlIHRlc3QnLCB1cGdyYWRlIHRvIFNDNS4wIG9yIFNDNC4yLgojIFNDNC4yIGlzIG9rLCBiZXR0ZXIgdGhhbiBnY2MgZXZlbiBvbiBibiBhcyBsb25nIGFzIHlvdSB0ZWxsIGl0IC14YXJjaD12OAojIFNDNS4wIG5vdGU6IENvbXBpbGVyIGNvbW1vbiBwYXRjaCAxMDczNTctMDEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQhCiJzb2xhcmlzLXNwYXJjdjctY2MiLCJjYzoteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LXhhcmNoPXY4IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY5IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9djkgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14YXJjaD12OCAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKCiMjIyMgU3VuT1MgY29uZmlncywgYXNzdW1pbmcgc3BhcmMgZm9yIHRoZSBnY2Mgb25lLgojInN1bm9zLWNjIiwgImNjOi1PNCAtRE5PUFJPVE8gLUROT0NPTlNUOjoodW5rbm93bik6U1VOT1M6OkRFU19VTlJPTEw6JHtub19hc219OjoiLAoic3Vub3MtZ2NjIiwiZ2NjOi1PMyAtbXY4IC1Ec3NpemVfdD1pbnQ6Oih1bmtub3duKTpTVU5PUzo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1BUUiBERVNfUklTQzE6JHtub19hc219OjoiLAoKIyMjIyBJUklYIDUueCBjb25maWdzCiMgLW1pcHMyIGZsYWcgaXMgYWRkZWQgYnkgLi9jb25maWcgd2hlbiBhcHByb3ByaWF0ZS4KImlyaXgtZ2NjIiwiZ2NjOi1PMyAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUjoke21pcHMzMl9hc219Om8zMjpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImlyaXgtY2MiLCAiY2M6LU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLURURVJNSU9TIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke21pcHMzMl9hc219Om8zMjpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJUklYIDYueCBjb25maWdzCiMgT25seSBOMzIgYW5kIE42NCBBQklzIGFyZSBzdXBwb3J0ZWQuIElmIHlvdSBuZWVkIE8zMiBBQkkgYnVpbGQsIGludm9rZQojICcuL0NvbmZpZ3VyZSBpcml4LWNjIC1vMzInIG1hbnVhbGx5LgoiaXJpeC1taXBzMy1nY2MiLCJnY2M6LW1hYmk9bjMyIC1PMyAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUiBTSVhUWV9GT1VSX0JJVDoke21pcHM2NF9hc219Om4zMjpkbGZjbjppcml4LXNoYXJlZDo6LW1hYmk9bjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6MzIiLAoiaXJpeC1taXBzMy1jYyIsICJjYzotbjMyIC1taXBzMyAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRzAgLXJkYXRhX3NoYXJlZCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6REVTX1BUUiBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmlyaXgtc2hhcmVkOjotbjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6MzIiLAojIE42NCBBQkkgYnVpbGRzLgoiaXJpeDY0LW1pcHM0LWdjYyIsImdjYzotbWFiaT02NCAtbWlwczQgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MyIERFU19VTlJPTEwgU0lYVFlfRk9VUl9CSVRfTE9ORzoke21pcHM2NF9hc219OjY0OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImlyaXg2NC1taXBzNC1jYyIsICJjYzotNjQgLW1pcHM0IC1PMiAtdXNlX3JlYWRvbmx5X2NvbnN0IC1HMCAtcmRhdGFfc2hhcmVkIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MyIERFU19VTlJPTEwgU0lYVFlfRk9VUl9CSVRfTE9ORzoke21pcHM2NF9hc219OjY0OmRsZmNuOmlyaXgtc2hhcmVkOjotNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCgojIyMjIFVuaWZpZWQgSFAtVVggQU5TSSBDIGNvbmZpZ3MuCiMgU3BlY2lhbCBub3RlczoKIyAtIE9yaWdpbmFsbHkgd2Ugd2VyZSBvcHRpbWl6aW5nIGF0ICtPNCBsZXZlbC4gSXQgc2hvdWxkIGJlIG5vdGVkCiMgICB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiArTzMgYW5kICtPNCBpcyBnbG9iYWwgaW50ZXItCiMgICBwcm9jZWR1cmFsIGFuYWx5c2lzLiBBcyBpdCBoYXMgdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgbGluawojICAgc3RhZ2UgdGhlIGNvbXBpbGVyIGxlYXZlcyBiZWhpbmQgY2VydGFpbiBwc2V1ZG8tY29kZSBpbiBsaWIqLmEKIyAgIHdoaWNoIG1pZ2h0IGJlIHJlbGVhc2Ugb3IgZXZlbiBwYXRjaCBsZXZlbCBzcGVjaWZpYy4gR2VuZXJhdGluZwojICAgdGhlIG1hY2hpbmUgY29kZSBmb3IgYW5kIGFuYWx5emluZyB0aGUgKndob2xlKiBwcm9ncmFtIGFwcGVhcnMKIyAgIHRvIGJlICpleHRyZW1lbHkqIG1lbW9yeSBkZW1hbmRpbmcgd2hpbGUgdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMKIyAgIGFjdHVhbGx5IHF1ZXN0aW9uYWJsZS4gVGhlIHNpdHVhdGlvbiBpcyBpbnRlbnNpZmllZCBieSB0aGUgZGVmYXVsdAojICAgSFAtVVggZGF0YSBzZXQgc2l6ZSBsaW1pdCAoaW5mYW1vdXMgJ21heGRzaXonIHR1bmFibGUpIG9mIDY0TUIKIyAgIHdoaWNoIGlzIHdheSB0b28gbG93IGZvciArTzQuIEluIG90aGVyIHdvcmRzLCBkb2Vzbid0ICtPMyBtYWtlCiMgICBtb3JlIHNlbnNlPwojIC0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEhQIGNvbXBpbGVyIGJ5IGRlZmF1bHQgZ2VuZXJhdGVzIGNvZGUKIyAgIHN1aXRhYmxlIGZvciBleGVjdXRpb24gb24gdGhlIGhvc3QgeW91J3JlIGN1cnJlbnRseSBjb21waWxpbmcgYXQuCiMgICBJZiB0aGUgdG9vbGtpdCBpcyBtZW50IHRvIGJlIHVzZWQgb24gdmFyaW91cyBQQS1SSVNDIHByb2Nlc3NvcnMKIyAgIGNvbnNpZGVyICcuL2NvbmZpZyArREFwb3J0YWJsZScuCiMgLSArREQ2NCBpcyBjaG9zZW4gaW4gZmF2b3VyIG9mICtEQTIuMFcgYmVjYXVzZSBpdCdzIG1lYW50IHRvIGJlCiMgICBjb21wYXRpYmxlIHdpdGggKmZ1dHVyZSogcmVsZWFzZXMuCiMgLSBJZiB5b3UgcnVuIC4vQ29uZmlndXJlIGhwdXgtcGFyaXNjLVtnXWNjIG1hbnVhbGx5IGRvbid0IGZvcmdldCB0bwojICAgcGFzcyAtRF9SRUVOVFJBTlQgb24gSFAtVVggMTAgYW5kIGxhdGVyLgojIC0gLURNRDMyX1hBUlJBWSB0cmlnZ2VycyB3b3JrYXJvdW5kIGZvciBjb21waWxlciBidWcgd2UgcmFuIGludG8gaW4KIyAgIDMyLWJpdCBtZXNzYWdlIGRpZ2VzdHMuIChGb3IgdGhlIG1vbWVudCBvZiB0aGlzIHdyaXRpbmcpIEhQIEMKIyAgIGRvZXNuJ3Qgc2VlbSB0byAiZGlnZXN0IiB0b28gbWFueSBsb2NhbCB2YXJpYWJsZXMgKHRoZXkgbWFrZSAiaGltIgojICAgY2hldyBmb3JldmVyOi0pLiBGb3IgbW9yZSBkZXRhaWxzIGxvb2stdXAgTUQzMl9YQVJSQVkgY29tbWVudCBpbgojICAgY3J5cHRvL3NoYS9zaGFfbGNsLmguCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwojIFNpbmNlIHRoZXJlIGlzIG1lbnRpb24gb2YgdGhpcyBpbiBzaGxpYi9ocHV4MTAtY2Muc2gKImhwdXgtcGFyaXNjLWNjLW80IiwiY2M6LUFlICtPNCArRVNsaXQgLXogLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MxXzEtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtwYXJpc2MxMV9hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGExLjEiLAoiaHB1eC1wYXJpc2MyLWdjYyIsImdjYzotbWFyY2g9Mi4wIC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6Ii5ldmFse215ICRhc209JHBhcmlzYzIwX2FzbTskYXNtPX5zLzJXXC4vMlwuLzskYXNtPX5zLzo2NC86MzIvOyRhc219LiI6ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTIwXzMyIiwKImhwdXg2NC1wYXJpc2MyLWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOjpwYS1yaXNjMlcubzo6Ojo6Ojo6Ojo6Ojo6dm9pZDpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfNjQiLAoKIyBNb3JlIGF0dGVtcHRzIGF0IHVuaWZpZWQgMTAuWCBhbmQgMTEuWCB0YXJnZXRzIGZvciBIUCBDIGNvbXBpbGVyLgojCiMgQ2hyaXMgUnVlbW1sZXIgPHJ1ZW1tbGVyQGN1cC5ocC5jb20+CiMgS2V2aW4gU3RldmVzIDxrc0BocC5zZT4KImhwdXgtcGFyaXNjLWNjIiwiY2M6K08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MxXzEtY2MiLCJjYzorREExLjEgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtwYXJpc2MxMV9hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMS4xIiwKImhwdXgtcGFyaXNjMi1jYyIsImNjOitEQTIuMCArRFMyLjAgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWSAtRF9SRUVOVFJBTlQ6Ojo6LVdsLCtzIC1sZGxkOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiIuZXZhbHtteSAkYXNtPSRwYXJpc2MyMF9hc207JGFzbT1+cy8yV1wuLzJcLi87JGFzbT1+cy86NjQvOjMyLzskYXNtfS4iOmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfMzIiLAoiaHB1eDY0LXBhcmlzYzItY2MiLCJjYzorREQ2NCArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtwYXJpc2MyMF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDY0IC1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L3BhMjBfNjQiLAoKIyBIUC9VWCBJQS02NCB0YXJnZXRzCiJocHV4LWlhNjQtY2MiLCJjYzotQWUgK0REMzIgK08yICtPbGl0PWFsbCAteiAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDMyIC1iOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXgzMiIsCiMgRnJhbmsgR2V1cnRzIDxmcmFuay5nZXVydHNAbmwuYWJuYW1yby5jb20+IGhhcyBwYXRpZW50bHkgYXNzaXN0ZWQgd2l0aAojIHdpdGggZGVidWdnaW5nIG9mIHRoZSBmb2xsb3dpbmcgY29uZmlnLgoiaHB1eDY0LWlhNjQtY2MiLCJjYzotQWUgK0RENjQgK08zICtPbGl0PWFsbCAteiAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDY0IiwKIyBHQ0MgYnVpbGRzLi4uCiJocHV4LWlhNjQtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDMyIiwKImhwdXg2NC1pYTY0LWdjYyIsImdjYzotbWxwNjQgLU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzotbWxwNjQgLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4NjQiLCAKCiMgTGVnYWN5IEhQVVggOS5YIGNvbmZpZ3MuLi4KImhwdXgtY2MiLAkiY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVkgLUFlICtFU2xpdCArTzIgLXo6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtZ2NjIiwJImdjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLU8zOjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSFAgTVBFL2lYIGh0dHA6Ly9qYXp6LmV4dGVybmFsLmhwLmNvbS9zcmMvb3BlbnNzbC8KIk1QRS9pWC1nY2MiLAkiZ2NjOi1EX0VORElBTiAtREJOX0RJVjJXIC1PMyAtRF9QT1NJWF9TT1VSQ0UgLURfU09DS0VUX1NPVVJDRSAtSS9TWVNMT0cvUFVCOjoodW5rbm93bik6TVBFOi1ML1NZU0xPRy9QVUIgLWxzeXNsb2cgLWxzb2NrZXQgLWxjdXJzZXM6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6OiIsCgojIERFQyBBbHBoYSBPU0YvMS9UcnU2NCB0YXJnZXRzLgojCiMJIldoYXQncyBpbiBhIG5hbWU/IFRoYXQgd2hpY2ggd2UgY2FsbCBhIHJvc2UKIwkgQnkgYW55IG90aGVyIHdvcmQgd291bGQgc21lbGwgYXMgc3dlZXQuIgojCiMgLSBXaWxsaWFtIFNoYWtlc3BlYXJlLCAiUm9tZW8gJiBKdWxpZXQiLCBBY3QgSUksIHNjZW5lIElJLgojCiMgRm9yIGdjYywgdGhlIGZvbGxvd2luZyBnYXZlIGEgJTUwIHNwZWVkdXAgb24gYSAxNjQgb3ZlciB0aGUgJ0RFU19JTlQnIHZlcnNpb24KIwoib3NmMS1hbHBoYS1nY2MiLCAiZ2NjOi1PMzo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUklTQzE6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKIm9zZjEtYWxwaGEtY2MiLCAgImNjOi1zdGQxIC10dW5lIGhvc3QgLU80IC1yZWFkb25seV9zdHJpbmdzOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoidHJ1NjQtYWxwaGEtY2MiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Oi1tc3ltOi5zbyIsCgojIyMjCiMjIyMgVmFyaWV0eSBvZiBMSU5VWDotKQojIyMjCiMgKi1nZW5lcmljKiBpcyBlbmRpYW4tbmV1dHJhbCB0YXJnZXQsIGJ1dCAuL2NvbmZpZyBpcyBmcmVlIHRvCiMgdGhyb3cgaW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFwcHJvcHJpYXRlLi4uCiJsaW51eC1nZW5lcmljMzIiLCJnY2M6LURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtcHBjIiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBJdCdzIGJlbGlldmVkIHRoYXQgbWFqb3JpdHkgb2YgQVJNIHRvb2xjaGFpbnMgcHJlZGVmaW5lIGFwcHJvcHJpYXRlIC1tYXJjaC4KIyBJZiB5b3UgY29tcGlsZXIgZG9lcyBub3QsIGRvIGNvbXBsZW1lbnQgY29uZmlnIGNvbW1hbmQgbGluZSB3aXRoIG9uZSEKImxpbnV4LWFybXY0IiwJImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FybXY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgQ29uZmlndXJlIHNjcmlwdCBhZGRzIG1pbmltYWxseSByZXF1aXJlZCAtbWFyY2ggZm9yIGFzc2VtYmx5IHN1cHBvcnQsCiMgaWYgbm8gLW1hcmNoIHdhcyBzcGVjaWZpZWQgYXQgY29tbWFuZCBsaW5lLiBtaXBzMzIgYW5kIG1pcHM2NCBiZWxvdwojIHJlZmVyIHRvIGNvbnRlbXBvcmFyeSBNSVBTIEFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9ucywgTUlQUzMyIGFuZAojIE1JUFM2NCwgcmF0aGVyIHRoYW4gdG8ga2VybmVsIGJpdG5lc3MuCiJsaW51eC1taXBzMzIiLAkiZ2NjOi1tYWJpPTMyIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtbWlwczY0IiwgICAiZ2NjOi1tYWJpPW4zMiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke21pcHM2NF9hc219Om4zMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW1hYmk9bjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6MzIiLAoibGludXg2NC1taXBzNjQiLCAgICJnY2M6LW1hYmk9NjQgLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke21pcHM2NF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKIyMjIyBJQS0zMiB0YXJnZXRzLi4uCiJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFvdXQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dCIsCiMjIyMKImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYzY0IiwJImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWljYyIsImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImxpbnV4LXgzMiIsCSJnY2M6LW14MzIgLURMX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbXgzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OngzMjoiLAoibGludXg2NC1zMzkweCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiMjIyMgU28gY2FsbGVkICJoaWdoZ3BycyIgdGFyZ2V0IGZvciB6L0FyY2hpdGVjdHVyZSBDUFVzCiMgIkhpZ2hncHJzIiBpcyBrZXJuZWwgZmVhdHVyZSBmaXJzdCBpbXBsZW1lbnRlZCBpbiBMaW51eCAyLjYuMzIsIHNlZQojIC9wcm9jL2NwdWluZm8uIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZgojIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgbm90IG9ubHkgdXBvbiAzMi1iaXQgcHJvY2VzcyBjb250ZXh0CiMgc3dpdGNoLCBidXQgZXZlbiBvbiBhc3luY2hyb25vdXMgc2lnbmFsIGRlbGl2ZXJ5IHRvIHN1Y2ggcHJvY2Vzcy4KIyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlcGxveSA2NC1iaXQgaW5zdHJ1Y3Rpb25zIGV2ZW4gaW4gbGVnYWN5CiMgYXBwbGljYXRpb24gY29udGV4dCBhbmQgYWNoaWV2ZSBiZXR0ZXIgW29yIHNob3VsZCB3ZSBzYXkgYWRlcXVhdGVdCiMgcGVyZm9ybWFuY2UuIFRoZSBidWlsZCBpcyBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGxpbnV4LWdlbmVyaWMzMiwKIyBhbmQgdGhlIGlkZWEgaXMgdG8gYmUgYWJsZSB0byBpbnN0YWxsIHRoZSByZXN1bHRpbmcgbGliY3J5cHRvLnNvCiMgYWxvbmdzaWRlIGdlbmVyaWMgb25lLCBlLmcuIGFzIC9saWIvaGlnaGdwcnMvbGliY3J5cHRvLnNvLngueSwgZm9yCiMgbGRjb25maWcgYW5kIHJ1bi10aW1lIGxpbmtlciB0byBhdXRvZGlzY292ZXIuIFVuZm9ydHVuYXRlbHkgaXQKIyBkb2Vzbid0IHdvcmsganVzdCB5ZXQsIGJlY2F1c2Ugb2YgY291cGxlIG9mIGJ1Z3MgaW4gZ2xpYmMKIyBzeXNkZXBzL3MzOTAvZGwtcHJvY2luZm8uYyBhZmZlY3RpbmcgbGRjb25maWcgYW5kIGxkLnNvLjEuLi4KImxpbnV4MzItczM5MHgiLAkiZ2NjOi1tMzEgLVdhLC1temFyY2ggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiIuZXZhbHtteSAkYXNtPSRzMzkweF9hc207JGFzbT1+cy9iblwtczM5MHhcLm8vYm5fYXNtLm8vOyRhc219LiI6MzE6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzE6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaGlnaGdwcnMiLAojIyMjIFNQQVJDIExpbnV4IHNldHVwcwojIFJheSBNaWxsZXIgPHJheS5taWxsZXJAY29tcHV0aW5nLXNlcnZpY2VzLm94Zm9yZC5hYy51az4gaGFzIHBhdGllbnRseQojIGFzc2lzdGVkIHdpdGggZGVidWdnaW5nIG9mIGZvbGxvd2luZyB0d28gY29uZmlncy4KImxpbnV4LXNwYXJjdjgiLCJnY2M6LW12OCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIGl0J3MgYSByZWFsIG1lc3Mgd2l0aCAtbWNwdT11bHRyYXNwYXJjIG9wdGlvbiB1bmRlciBMaW51eCwgYnV0CiMgLVdhLC1BdjhwbHVzIHNob3VsZCBkbyB0aGUgdHJpY2sgbm8gbWF0dGVyIHdoYXQuCiJsaW51eC1zcGFyY3Y5IiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtV2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEdDQyAzLjEgaXMgYSByZXF1aXJlbWVudAoibGludXg2NC1zcGFyY3Y5IiwiZ2NjOi1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKIyMjIyBBbHBoYSBMaW51eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBzZXR1cHMKIyBTcGVjaWFsIG5vdGVzOgojIC0gbGludXgtYWxwaGErYnd4LWdjYyBpcyBtZW50IHRvIGJlIHVzZWQgZnJvbSAuL2NvbmZpZyBvbmx5LiBJZiB5b3UKIyAgIG91Z2h0IHRvIHJ1biAnLi9Db25maWd1cmUgbGludXgtYWxwaGErYnd4LWdjYycgbWFudWFsbHksIGRvCiMgICBjb21wbGVtZW50IHRoZSBjb21tYW5kIGxpbmUgd2l0aCAtbWNwdT1ldjU2LCAtbWNwdT1ldjYgb3Igd2hhdGV2ZXIKIyAgIHdoaWNoIGlzIGFwcHJvcHJpYXRlLgojIC0gSWYgeW91IHVzZSBjY2Mga2VlcCBpbiBtaW5kIHRoYXQgLWZhc3QgaW1wbGllcyAtYXJjaCBob3N0IGFuZCB0aGUKIyAgIGNvbXBpbGVyIGlzIGZyZWUgdG8gaXNzdWUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGdvbm5hIG1ha2UgZWxkZXIgQ1BVCiMgICBjaG9rZS4gSWYgeW91IHdpc2ggdG8gYnVpbGQgImJsZW5kZWQiIHRvb2xraXQsIGFkZCAtYXJjaCBnZW5lcmljCiMgICAqYWZ0ZXIqIC1mYXN0IGFuZCBpbnZva2UgJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhLWNjYycgbWFudWFsbHkuCiMKIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgojCiJsaW51eC1hbHBoYS1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1hbHBoYStid3gtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAoibGludXgtYWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKIwojIFRJX0NHVF9DNjAwMF83LjMueCBpcyBhIHJlcXVpcmVtZW50CiJsaW51eC1jNjR4cGx1cyIsImNsNng6LS1saW51eCAtLXN0cmlwX2NvZmZfdW5kZXJzY29yZSAtZWE9LnMgLWVvPS5vIC1tdjY0MDArIC1vMiAtb3ggLW1zIC1wZGVuIC1ET1BFTlNTTF9TTUFMTF9GT09UUFJJTlQ6Oi1EX1JFRU5UUkFOVDo6OkJOX0xMT05HOmM2NHhwbHVzY3B1aWQubzpibi1jNjR4cGx1cy5vIGM2NHhwbHVzLWdmMm0ubzo6YWVzLWM2NHhwbHVzLm8gYWVzX2NiYy5vIGFlc19jdHIubzo6OnNoYTEtYzY0eHBsdXMubyBzaGEyNTYtYzY0eHBsdXMubyBzaGE1MTItYzY0eHBsdXMubzo6Ojo6OjpnaGFzaC1jNjR4cGx1cy5vOjp2b2lkOmRsZmNuOmxpbnV4LXNoYXJlZDotLXBpYzoteiAtLXN5c3YgLS1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6dHJ1ZSIsCgojIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgLURURVJNSU8gYW5kIHBvaW50ZXJzIHRvIGhlYWRlcnMgYW5kIGxpYnMuCiJhbmRyb2lkIiwiZ2NjOi1tYW5kcm9pZCAtSVwkKEFORFJPSURfREVWKS9pbmNsdWRlIC1CXCQoQU5EUk9JRF9ERVYpL2xpYiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJhbmRyb2lkLXg4NiIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIuZXZhbHtteSAkYXNtPSR7eDg2X2VsZl9hc219OyRhc209fnMvOmVsZi86YW5kcm9pZC87JGFzbX0uIjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImFuZHJvaWQtYXJtdjciLCJnY2M6LW1hcmNoPWFybXY3LWEgLW1hbmRyb2lkIC1JXCQoQU5EUk9JRF9ERVYpL2luY2x1ZGUgLUJcJChBTkRST0lEX0RFVikvbGliIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImFuZHJvaWQtbWlwcyIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHttaXBzMzJfYXNtfTpvMzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjICpCU0QgW2RvIHNlZSBjb21tZW50IGFib3V0ICR7QlNEdGhyZWFkc30gYWJvdmUhXQoiQlNELWdlbmVyaWMzMiIsImdjYzotRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctQlNELXg4Ni1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2FsbCAtZzo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0Qtc3BhcmN2OCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1tdjggLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOiR7c3BhcmN2OF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoiQlNELWdlbmVyaWM2NCIsImdjYzotRFRFUk1JT1MgLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1ETUQzMl9SRUdfVD1pbnQgZG9lc24ndCBhY3R1YWxseSBiZWxvbmcgaW4gc3BhcmM2NCB0YXJnZXQsIGl0CiMgc2ltcGx5ICpoYXBwZW5zKiB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1ZyBpbiBnY2MgMy4zLjMsCiMgdHJpZ2dlcmVkIGJ5IFJJUEVNRDE2MCBjb2RlLgoiQlNELXNwYXJjNjQiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TIC1PMyAtRE1EMzJfUkVHX1Q9aW50IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzIgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QtaWE2NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2XzY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJic2RpLWVsZi1nY2MiLCAgICAgImdjYzotRFBFUkw1IC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoibmV4dHN0ZXAiLAkiY2M6LU8gLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKIm5leHRzdGVwMy4zIiwJImNjOi1PMyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBOQ1IgTVAtUkFTIFVOSVggdmVyIDAyLjAzLjAxCiJuY3Itc2NkZSIsImNjOi1PNiAtWGEgLUhvZmY9QkVIQVZFRCAtNjg2IC1Id2lkZSAtSGl3OjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsIC1sYzg5OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIFFOWAoicW54NCIsCSJjYzotRExfRU5ESUFOIC1EVEVSTUlPOjoodW5rbm93bik6Ojoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306IiwKIlFOWDYiLCAgICAgICAiZ2NjOi1EVEVSTUlPUzo6OjotbHNvY2tldDo6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJRTlg2LWkzODYiLCAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzIgLVdhbGw6Ojo6LWxzb2NrZXQ6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIEJlT1MKImJlb3MteDg2LXI1IiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6QkVPUzotbGJlIC1sbmV0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpiZW9zOmJlb3Mtc2hhcmVkOi1mUElDIC1EUElDOi1zaGFyZWQ6LnNvIiwKImJlb3MteDg2LWJvbmUiLCAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6QkVPUzotbGJlIC1sYmluZCAtbHNvY2tldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06YmVvczpiZW9zLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbyIsCgojIyMjIFNDTy9DYWxkZXJhIHRhcmdldHMuCiMKIyBPcmlnaW5hbGx5IHdlIGhhZCBsaWtlIHVuaXh3YXJlLSosIHVuaXh3YXJlLSotcGVudGl1bSwgdW5peHdhcmUtKi1wNiwgZXRjLgojIE5vdyB3ZSBvbmx5IGhhdmUgYmxlbmRlZCB1bml4d2FyZS0qIGFzIGl0J3MgdGhlIG9ubHkgb25lIHVzZWQgYnkgLi9jb25maWcuCiMgSWYgeW91IHdhbnQgdG8gb3B0aW1pemUgZm9yIHBhcnRpY3VsYXIgbWljcm9hcmNoaXRlY3R1cmUsIGJ5cGFzcyAuL2NvbmZpZwojIGFuZCAnLi9Db25maWd1cmUgdW5peHdhcmUtNyAtS3BlbnRpdW1fcHJvJyBvciB3aGF0ZXZlciBhcHByb3ByaWF0ZS4KIyBOb3RlIHRoYXQgbm90IGFsbCB0YXJnZXRzIGluY2x1ZGUgYXNzZW1ibGVyIHN1cHBvcnQuIE1vc3RseSBiZWNhdXNlIG9mCiMgbGFjayBvZiBtb3RpdmF0aW9uIHRvIHN1cHBvcnQgb3V0LW9mLWRhdGUgcGxhdGZvcm1zIHdpdGggb3V0LW9mLWRhdGUKIyBjb21waWxlciBkcml2ZXJzIGFuZCBhc3NlbWJsZXJzLiBUaW0gUmljZSA8dGltQG11bHRpdGFsZW50cy5uZXQ+IGhhcwojIHBhdGllbnRseSBhc3Npc3RlZCB0byBkZWJ1ZyBtb3N0IG9mIGl0LgojCiMgVW5peFdhcmUgMi4weCBmYWlscyBkZXN0ZXN0IHdpdGggLU8uCiJ1bml4d2FyZS0yLjAiLCJjYzotREZJTElPX0ggLUROT19TVFJJTkdTX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTIuMSIsImNjOi1PIC1ERklMSU9fSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtNyIsImNjOi1PIC1ERklMSU9fSCAtS2FsbG9jYTo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCAke3g4Nl9nY2NfZGVzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnI1LXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoidW5peHdhcmUtNy1nY2MiLCJnY2M6LURMX0VORElBTiAtREZJTElPX0ggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpnbnUtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgU0NPIDUgLSBCZW4gTGF1cmllIDxiZW5AYWxncm91cC5jby51az4gc2F5cyB0aGUgLU8gYnJlYWtzIHRoZSBTQ08gY2MuCiJzY281LWNjIiwgICJjYzotYmVsZjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNjbzUtZ2NjIiwgICJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnIzLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBJQk0ncyBBSVguCiJhaXgzLWNjIiwgICJjYzotTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0OjoodW5rbm93bik6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjo6OiIsCiJhaXgtZ2NjIiwgICJnY2M6LU8gLURCX0VORElBTjo6LXB0aHJlYWQ6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjoke3BwYzMyX2FzbX06YWl4MzI6ZGxmY246YWl4LXNoYXJlZDo6LXNoYXJlZCAtV2wsLUc6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YMzIiLAoiYWl4NjQtZ2NjIiwiZ2NjOi1tYWl4NjQgLU8gLURCX0VORElBTjo6LXB0aHJlYWQ6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOiR7cHBjNjRfYXNtfTphaXg2NDpkbGZjbjphaXgtc2hhcmVkOjotbWFpeDY0IC1zaGFyZWQgLVdsLC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWDY0IiwKIyBCZWxvdyB0YXJnZXRzIGFzc3VtZSBBSVggNS4gSWRlYSBpcyB0byBlZmZlY3RpdmVseSBkaXNyZWdhcmQgJE9CSkVDVF9NT0RFCiMgYXQgYnVpbGQgdGltZS4gJE9CSkVDVF9NT0RFIGlzIHJlc3BlY3RlZCBhdCAuL2NvbmZpZyBzdGFnZSEKImFpeC1jYyIsICAgImNjOi1xMzIgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NCAtcXJvIC1xcm9jb25zdDo6LXF0aHJlYWRlZCAtRF9USFJFQURfU0FGRTpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOiR7cHBjMzJfYXNtfTphaXgzMjpkbGZjbjphaXgtc2hhcmVkOjotcTMyIC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCAzMiIsCiJhaXg2NC1jYyIsICJjYzotcTY0IC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQgLXFybyAtcXJvY29uc3Q6Oi1xdGhyZWFkZWQgLURfVEhSRUFEX1NBRkU6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOiR7cHBjNjRfYXNtfTphaXg2NDpkbGZjbjphaXgtc2hhcmVkOjotcTY0IC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCA2NCIsCgojCiMgQ3JheSBUOTAgYW5kIHNpbWlsYXIgKFNEU0MpCiMgSXQncyBCaWctZW5kaWFuLCBidXQgdGhlIGFsZ29yaXRobXMgd29yayBwcm9wZXJseSB3aGVuIEJfRU5ESUFOIGlzIE5PVAojIGRlZmluZWQuICBUaGUgVDkwIGludHMgYW5kIGxvbmdzIGFyZSA4IGJ5dGVzIGxvbmcsIGFuZCBhcHBhcmVudGx5IHRoZQojIEJfRU5ESUFOIGNvZGUgYXNzdW1lcyA0IGJ5dGUgaW50cy4gIEZvcnR1bmF0ZWx5LCB0aGUgbm9uLUJfRU5ESUFOIGFuZAojIG5vbiBMX0VORElBTiBjb2RlIGFsaWducyB0aGUgYnl0ZXMgaW4gZWFjaCB3b3JkIGNvcnJlY3RseS4KIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSBpcyB0byBhdm9pZCB0d28gZmF0YWwgY29tcGlsZXIgZXJyb3JzOgojJ1Rha2luZyB0aGUgYWRkcmVzcyBvZiBhIGJpdCBmaWVsZCBpcyBub3QgYWxsb3dlZC4gJwojJ0FuIGV4cHJlc3Npb24gd2l0aCBiaXQgZmllbGQgZXhpc3RzIGFzIHRoZSBvcGVyYW5kIG9mICJzaXplb2YiICcKIyAod3JpdHRlbiBieSBXYXluZSBTY2hyb2VkZXIgPHNjaHJvZWRlQFNEU0MuRURVPikKIwojIGo5MCBpcyBjb25zaWRlcmVkIHRoZSBiYXNlIG1hY2hpbmUgdHlwZSBmb3IgdW5pY29zIG1hY2hpbmVzLAojIHNvIHRoaXMgY29uZmlndXJhdGlvbiBpcyBub3cgY2FsbGVkICJjcmF5LWo5MCIgLi4uCiJjcmF5LWo5MCIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgREVTX0lOVDo6OiIsCgojCiMgQ3JheSBUM0UgKFJlc2VhcmNoIENlbnRlciBKdWVsaWNoLCBiZWNrbWFuQGFjbC5sYW5sLmdvdikKIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSB3YXMgd3JpdHRlbiBmb3IgdGhlIEM5MCAoaXQgc2VlbXMpLiAgSSBhZGRlZAojIGFub3RoZXIgdXNlLiAgQmFzaWNhbGx5LCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBUM0UgdXNlcyBzb21lIGJpdCBmaWVsZHMKIyBmb3Igc29tZSBzdF9hZGRyIHN0dWZmLCBhbmQgdGhlbiBzaXplb2YgYW5kIGFkZHJlc3Mtb2YgZmFpbHMKIyBJIGNvdWxkIG5vdCB1c2UgdGhlIGFtcy9hbHBoYS5vIG9wdGlvbiBiZWNhdXNlIHRoZSBDcmF5IGFzc2VtYmxlciwgJ2NhbScKIyBkaWQgbm90IGxpa2UgaXQuCiJjcmF5LXQzZSIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6OjoiLAoKIyBER1VYLCA4ODEwMC4KImRndXgtUjMtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC14ODYtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoKIyBTaW5peC9SZWxpYW50VU5JWCBSTTQwMAojIE5PVEU6IFRoZSBDRFMrKyBDb21waWxlciB1cCB0byBWMi4wQnNvbWV0aGluZyBoYXMgdGhlIElSSVhfQ0NfQlVHIG9wdGltaXplciBwcm9ibGVtLiBCZXR0ZXIgdXNlIC1nICAqLwoiUmVsaWFudFVOSVgiLCJjYzotS1BJQyAtZyAtRFRFUk1JT1MgLURCX0VORElBTjo6LUt0aHJlYWQ6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOkJOX0xMT05HIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpyZWxpYW50dW5peC1zaGFyZWQ6Ojouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJTSU5JWCIsImNjOi1POjoodW5rbm93bik6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCiJTSU5JWC1OIiwiL3Vzci91Y2IvY2M6LU8yIC1taXNhbGlnbmVkOjoodW5rbm93bik6Oi1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCgojIFNJRU1FTlMgQlMyMDAwL09TRDogYW4gRUJDRElDLWJhc2VkIG1haW5mcmFtZQoiQlMyMDAwLU9TRCIsImM4OTotTyAtWExMTUwgLVhMTE1LIC1YTCAtREJfRU5ESUFOIC1EVEVSTUlPUyAtRENIQVJTRVRfRUJDRElDOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgT1MvMzkwIFVuaXggYW4gRUJDRElDLWJhc2VkIFVuaXggc3lzdGVtIG9uIElCTSBtYWluZnJhbWUKIyBZb3UgbmVlZCB0byBjb21waWxlIHVzaW5nIHRoZSBjODkuc2ggd3JhcHBlciBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZQojIElCTSBjb21waWxlciBkb2VzIG5vdCBsaWtlIHRoZSAtTCBzd2l0Y2ggYWZ0ZXIgYW55IG9iamVjdCBtb2R1bGVzLgojCiJPUzM5MC1Vbml4IiwiYzg5LnNoOi1PIC1EQl9FTkRJQU4gLURDSEFSU0VUX0VCQ0RJQyAtRE5PX1NZU19QQVJBTV9IICAtRF9BTExfU09VUkNFOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIFZpc3VhbCBDIHRhcmdldHMKIwojIFdpbjY0IHRhcmdldHMsIFdJTjY0SSBkZW5vdGVzIElBLTY0IGFuZCBXSU42NEEgLSBBTUQ2NAoiVkMtV0lONjRJIiwiY2w6LVczIC1HczAgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vIGlhNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6Ojo6OjpnaGFzaC1pYTY0Lm86Omlhczp3aW4zMiIsCiJWQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoiLmV2YWx7bXkgJGFzbT0keDg2XzY0X2FzbTskYXNtPX5zL3g4Nl82NC1nY2NcLm8vYm5fYXNtLm8vOyRhc219LiI6YXV0bzp3aW4zMiIsCiJkZWJ1Zy1WQy1XSU42NEkiLCJjbDotVzMgLUdzMCAtR3kgLVppIC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6Ojo6OjpnaGFzaC1pYTY0Lm86Omlhczp3aW4zMiIsCiJkZWJ1Zy1WQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLVppIC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEE6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46Ii5ldmFse215ICRhc209JHg4Nl82NF9hc207JGFzbT1+cy94ODZfNjQtZ2NjXC5vL2JuX2FzbS5vLzskYXNtfS4iOmF1dG86d2luMzIiLAojIHg4NiBXaW4zMiB0YXJnZXQgZGVmYXVsdHMgdG8gQU5TSSBBUEksIGlmIHlvdSB3YW50IFVOSUNPREUsIGNvbXBsZW1lbnQKIyAncGVybCBDb25maWd1cmUgVkMtV0lOMzInIHdpdGggJy1EVU5JQ09ERSAtRF9VTklDT0RFJwoiVkMtV0lOMzIiLCJjbDotVzMgLUdzMCAtR0YgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU4zMjo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06d2luMzJuOndpbjMyIiwKIyBVbmlmaWVkIENFIHRhcmdldAoiZGVidWctVkMtV0lOMzIiLCJjbDotVzMgLVdYIC1HczAgLUdGIC1HeSAtWmkgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjMyOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTp3aW4zMm46d2luMzIiLAoiVkMtQ0UiLCJjbDo6OjpXSU5DRTo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCgojIEJvcmxhbmQgQysrIDQuNQoiQkMtMzIiLCJiY2MzMjo6OjpXSU4zMjo6Qk5fTExPTkcgREVTX1BUUiBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTjoke25vX2FzbX06d2luMzIiLAoKIyBNaW5HVwoibWluZ3ciLCAiZ2NjOi1tbm8tY3lnd2luIC1ETF9FTkRJQU4gLURXSU4zMl9MRUFOX0FORF9NRUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfTVQ6TUlOR1czMjotbHdzMl8zMiAtbGdkaTMyIC1sY3J5cHQzMjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c30gRVhQT1JUX1ZBUl9BU19GTjoke3g4Nl9hc219OmNvZmY6d2luMzI6Y3lnd2luLXNoYXJlZDotRF9XSU5ETEwgLURPUEVOU1NMX1VTRV9BUFBMSU5LOi1tbm8tY3lnd2luOi5kbGwuYSIsCiMgQXMgZm9yIE9QRU5TU0xfVVNFX0FQUExJTksuIEFwcGxpbmsgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIC5kbGwKIyBjb21waWxlZCB3aXRoIG9uZSBjb21waWxlciB3aXRoIGFwcGxpY2F0aW9uIGNvbXBpbGVkIHdpdGggYW5vdGhlcgojIGNvbXBpbGVyLiBJdCdzIHBvc3NpYmxlIHRvIGVuZ2FnZSBBcHBsaW5rIHN1cHBvcnQgaW4gbWluZ3c2NCBidWlsZCwKIyBidXQgaXQncyBub3QgZG9uZSwgYmVjYXVzZSB0aWxsIG1pbmd3NjQgc3VwcG9ydHMgc3RydWN0dXJlZCBleGNlcHRpb24KIyBoYW5kbGluZywgb25lIGNhbid0IHNlcmlvdXNseSBjb25zaWRlciBpdHMgYmluYXJpZXMgZm9yIHVzaW5nIHdpdGgKIyBub24tbWluZ3c2NCBydW4tdGltZSBlbnZpcm9ubWVudC4gQW5kIGFzIG1pbmd3NjQgaXMgYWx3YXlzIGNvbnNpc3RlbnQKIyB3aXRoIGl0c2VsZiwgQXBwbGluayBpcyBuZXZlciBlbmdhZ2VkIGFuZCBjYW4gYXMgd2VsbCBiZSBvbWl0dGVkLgoibWluZ3c2NCIsICJnY2M6LW1uby1jeWd3aW4gLURMX0VORElBTiAtTzMgLVdhbGwgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFOjotRF9NVDpNSU5HVzY0Oi1sd3MyXzMyIC1sZ2RpMzIgLWxjcnlwdDMyOlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46JHt4ODZfNjRfYXNtfTptaW5ndzY0OndpbjMyOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1tbm8tY3lnd2luOi5kbGwuYSIsCgojIFVXSU4gCiJVV0lOIiwgImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1PIC1XYWxsOjo6VVdJTjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCgojIEN5Z3dpbgoiQ3lnd2luLXByZTEuMyIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tNDg2IC1XYWxsOjoodW5rbm93bik6Q1lHV0lOMzI6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoiQ3lnd2luIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6OjpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06Y29mZjpkbGZjbjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotc2hhcmVkOi5kbGwuYSIsCiJkZWJ1Zy1DeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1tYXJjaD1pNDg2IC1XYWxsIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdlcnJvcjo6OkNZR1dJTjMyOjo6JHtub19hc219OmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKCiMgTmV0V2FyZSBmcm9tIERhdmlkIFdhcmQgKGRzd2FyZEBub3ZlbGwuY29tKQojIHJlcXVpcmVzIGVpdGhlciBNZXRyb1dlcmtzIE5MTSBkZXZlbG9wbWVudCB0b29scywgb3IgZ2NjIC8gbmxtY29udgojIE5ldFdhcmUgZGVmYXVsdHMgc29ja2V0IGJpbyB0byBXaW5Tb2NrIHNvY2tldHMuIEhvd2V2ZXIsCiMgdGhlIGJ1aWxkcyBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgQlNEIHNvY2tldHMgaW5zdGVhZC4KIyBuZXR3YXJlLWNsaWIgPT4gbGVnYWN5IENMaWIgYy1ydW50aW1lIHN1cHBvcnQKIm5ldHdhcmUtY2xpYiIsICJtd2NjbmxtOjo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWJzZHNvY2siLCAibXdjY25sbTo6Ojo6OiR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtY2xpYi1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL253c2RrL2luY2x1ZGUvbmxtIC1JL25kay93czI5NXNkay9pbmNsdWRlIC1ETF9FTkRJQU4gLURORVRXQVJFX0NMSUIgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtTzIgLVdhbGw6Ojo6OiR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtY2xpYi1ic2Rzb2NrLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbndzZGsvaW5jbHVkZS9ubG0gLURORVRXQVJFX0JTRFNPQ0sgLURORVREQl9VU0VfSU5URVJORVQgLURMX0VORElBTiAtRE5FVFdBUkVfQ0xJQiAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1PMiAtV2FsbDo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAojIG5ldHdhcmUtbGliYyA9PiBMaWJDL05LUyBzdXBwb3J0CiJuZXR3YXJlLWxpYmMiLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1ic2Rzb2NrIiwgIm13Y2NubG06Ojo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWxpYmMtZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLUkvbmRrL2xpYmMvaW5jbHVkZS93aW5zb2NrIC1ETF9FTkRJQU4gLURORVRXQVJFX0xJQkMgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtRFRFUk1JTyAtTzIgLVdhbGw6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1ic2Rzb2NrLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbGliYy9pbmNsdWRlIC1ETkVUV0FSRV9CU0RTT0NLIC1ETF9FTkRJQU4gLURORVRXQVJFX0xJQkMgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtRFRFUk1JTyAtTzIgLVdhbGw6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKCiMgREpHUFAKIkRKR1BQIiwgImdjYzotSS9kZXYvZW52L1dBVFRfUk9PVC9pbmMgLURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8yIC1XYWxsOjo6TVNET1M6LUwvZGV2L2Vudi9XQVRUX1JPT1QvbGliIC1sd2F0dDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dDoiLAoKIyBVbHRyaXggZnJvbSBCZXJuaGFyZCBTaW1vbiA8c2ltb25AemlkLnR1d2llbi5hYy5hdD4KInVsdHJpeC1jYyIsImNjOi1zdGQxIC1PIC1PbGltaXQgMjUwMCAtRExfRU5ESUFOOjoodW5rbm93bik6Ojo6Ojo6IiwKInVsdHJpeC1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HOjo6OiIsCiMgSyZSIEMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZDsgeW91IG5lZWQgZ2NjIG9uIG9sZCBVbHRyaXggaW5zdGFsbGF0aW9ucwojIyJ1bHRyaXgiLCJjYzotTzIgLUROT1BST1RPIC1ETk9DT05TVCAtRExfRU5ESUFOOjoodW5rbm93bik6Ojo6Ojo6IiwKCiMjIyMjIE1hY09TIFggKGEuay5hLiBSaGFwc29keSBvciBEYXJ3aW4pIHNldHVwCiJyaGFwc29keS1wcGMtY2MiLCJjYzotTzMgLURCX0VORElBTjo6KHVua25vd24pOk1BQ09TWF9SSEFQU09EWTo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTo6IiwKImRhcndpbi1wcGMtY2MiLCJjYzotYXJjaCBwcGMgLU8zIC1EQl9FTkRJQU4gLVdhLC1mb3JjZV9jcHVzdWJ0eXBlX0FMTDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHBwYyAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW42NC1wcGMtY2MiLCJjYzotYXJjaCBwcGM2NCAtTzMgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGM2NF9hc219Om9zeDY0OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luLWkzODYtY2MiLCJjYzotYXJjaCBpMzg2IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfSU5UIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoiLmV2YWx7bXkgJGFzbT0keDg2X2FzbTskYXNtPX5zL2Nhc3RcLTU4Nlwuby8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLWczIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW42NC14ODZfNjQtY2MiLCJjYzotYXJjaCB4ODZfNjQgLU8zIC1ETF9FTkRJQU4gLVdhbGw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219Om1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHg4Nl82NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW4tcHBjLWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EQl9FTkRJQU4gLWcgLVdhbGwgLU86Oi1EX1JFRU5UUkFOVDpNQUNPU1g6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzMyX2FzbX06b3N4MzI6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQzotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiMgaVBob25lT1MvaU9TCiJpcGhvbmVvcy1jcm9zcyIsImxsdm0tZ2NjOi1PMyAtaXN5c3Jvb3QgXCQoQ1JPU1NfVE9QKS9TREtzL1wkKENST1NTX1NESykgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1jb21tb246Oi1EX1JFRU5UUkFOVDppT1M6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCgojIyMjIyBBL1VYCiJhdXgzLWdjYyIsImdjYzotTzIgLURURVJNSU86Oih1bmtub3duKTpBVVg6LWxic2Q6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjo6IiwKCiMjIyMjIFNvbnkgTkVXUy1PUyA0LngKIm5ld3NvczQtZ2NjIiwiZ2NjOi1PIC1EQl9FTkRJQU46Oih1bmtub3duKTpORVdTNDotbG1sZCAtbGliZXJ0eTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6Ojo6IiwKCiMjIyMjIEdOVSBIdXJkCiJodXJkLXg4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUMiLAoKIyMjIyMgT1MvMiBFTVgKIk9TMi1FTVgiLCAiZ2NjOjo6Ojo6OjoiLAoKIyMjIyMgVnhXb3JrcyBmb3IgdmFyaW91cyB0YXJnZXRzCiJ2eHdvcmtzLXBwYzYweCIsImNjcHBjOi1EX1JFRU5UUkFOVCAtbXJ0cCAtbWhhcmQtZmxvYXQgLW1zdHJpY3QtYWxpZ24gLWZuby1pbXBsaWNpdC1mcCAtRFBQQzMyX2ZwNjB4IC1PMiAtZnN0cmVuZ3RoLXJlZHVjZSAtZm5vLWJ1aWx0aW4gLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhbGwgLURDUFU9UFBDMzIgLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9oIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2gvd3JuL2NvcmVpcDo6OlZYV09SS1M6LVdsLC0tZGVmc3ltLF9fd3JzX3J0cF9iYXNlPTB4ZTAwMDAwMDAgLUwgXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2xpYi9wcGMvUFBDMzIvY29tbW9uOjo6OjoiLAoidnh3b3Jrcy1wcGNnZW4iLCJjY3BwYzotRF9SRUVOVFJBTlQgLW1ydHAgLW1zb2Z0LWZsb2F0IC1tc3RyaWN0LWFsaWduIC1PMSAtZm5vLWJ1aWx0aW4gLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhbGwgLURDUFU9UFBDMzIgLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L3Vzci9oIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2gvd3JuL2NvcmVpcDo6OlZYV09SS1M6LVdsLC0tZGVmc3ltLF9fd3JzX3J0cF9iYXNlPTB4ZTAwMDAwMDAgLUwgXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2xpYi9wcGMvUFBDMzIvc2Zjb21tb246Ojo6OiIsCiJ2eHdvcmtzLXBwYzQwNSIsImNjcHBjOi1nIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzQwNSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAiLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCBcJChERUJVR19GTEFHKTo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MC1kZWJ1ZyIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUcgLWc6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM4NjAiLCJjY3BwYzotbm9zdGRpbmMgLW1zb2Z0LWZsb2F0IC1EQ1BVPVBQQzg2MCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1zaW1saW51eCIsImNjcGVudGl1bTotQlwkKFdJTkRfQkFTRSkvaG9zdC9cJChXSU5EX0hPU1RfVFlQRSkvbGliL2djYy1saWIvIC1EX1ZTQl9DT05GSUdfRklMRT1cIlwkKFdJTkRfQkFTRSkvdGFyZ2V0L2xpYi9oL2NvbmZpZy92c2JDb25maWcuaFwiIC1ETF9FTkRJQU4gLURDUFU9U0lNTElOVVggLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3AgLUROT19TVFJJTkdTX0ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaC93cm4vY29yZWlwIC1ET1BFTlNTTF9OT19IV19QQURMT0NLOjo6VlhXT1JLUzotcjo6JHtub19hc219Ojo6Ojo6cmFubGlicGVudGl1bToiLAoidnh3b3Jrcy1taXBzIiwiY2NtaXBzOi1tcnRwIC1taXBzMiAtTyAtRyAwIC1CXCQoV0lORF9CQVNFKS9ob3N0L1wkKFdJTkRfSE9TVF9UWVBFKS9saWIvZ2NjLWxpYi8gLURfVlNCX0NPTkZJR19GSUxFPVwiXCQoV0lORF9CQVNFKS90YXJnZXQvbGliL2gvY29uZmlnL3ZzYkNvbmZpZy5oXCIgLURDUFU9TUlQUzMyIC1tc29mdC1mbG9hdCAtbW5vLWJyYW5jaC1saWtlbHkgLURUT09MX0ZBTUlMWT1nbnUgLURUT09MPWdudSAtZm5vLWJ1aWx0aW4gLWZuby1kZWZlci1wb3AgLUROT19TVFJJTkdTX0ggLUlcJChXSU5EX0JBU0UpL3RhcmdldC91c3IvaCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2gvd3JuL2NvcmVpcDo6LURfUkVFTlRSQU5UOlZYV09SS1M6LVdsLC0tZGVmc3ltLF9fd3JzX3J0cF9iYXNlPTB4ZTAwMDAwMDAgLUwgXCQoV0lORF9CQVNFKS90YXJnZXQvdXNyL2xpYi9taXBzL01JUFNJMzIvc2Zjb21tb246OiR7bWlwczMyX2FzbX06bzMyOjo6Ojo6cmFubGlibWlwczoiLAoKIyMjIyMgQ29tcGFxIE5vbi1TdG9wIEtlcm5lbCAoVGFuZGVtKQoidGFuZGVtLWM4OSIsImM4OTotV3cgLURfX1RBTkRFTSAtRF9YT1BFTl9TT1VSQ0UgLURfWE9QRU5fU09VUkNFX0VYVEVOREVEPTEgLURfVEFOREVNX1NPVVJDRSAtREJfRU5ESUFOOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVDo6OiIsCgojIHVDbGludXgKInVDbGludXgtZGlzdCIsIiRFTlZ7J0NDJ306XCQoQ0ZMQUdTKTo6LURfUkVFTlRSQU5UOjpcJChMREZMQUdTKSBcJChMRExJQlMpOkJOX0xMT05HOiR7bm9fYXNtfTokRU5WeydMSUJTU0xfZGxmY24nfTpsaW51eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTokRU5WeydSQU5MSUInfTo6IiwKInVDbGludXgtZGlzdDY0IiwiJEVOVnsnQ0MnfTpcJChDRkxBR1MpOjotRF9SRUVOVFJBTlQ6OlwkKExERkxBR1MpIFwkKExETElCUyk6U0lYVFlfRk9VUl9CSVRfTE9ORzoke25vX2FzbX06JEVOVnsnTElCU1NMX2RsZmNuJ306bGludXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6JEVOVnsnUkFOTElCJ306OiIsCgopOwoKbXkgQE1LMU1GX0J1aWxkcz1xdyhWQy1XSU42NEkgVkMtV0lONjRBCgkJICAgIGRlYnVnLVZDLVdJTjY0SSBkZWJ1Zy1WQy1XSU42NEEKCQkgICAgVkMtTlQgVkMtQ0UgVkMtV0lOMzIgZGVidWctVkMtV0lOMzIKCQkgICAgQkMtMzIgCgkJICAgIG5ldHdhcmUtY2xpYiBuZXR3YXJlLWNsaWItYnNkc29jawoJCSAgICBuZXR3YXJlLWxpYmMgbmV0d2FyZS1saWJjLWJzZHNvY2spOwoKbXkgJGlkeCA9IDA7Cm15ICRpZHhfY2MgPSAkaWR4Kys7Cm15ICRpZHhfY2ZsYWdzID0gJGlkeCsrOwpteSAkaWR4X3VuaXN0ZCA9ICRpZHgrKzsKbXkgJGlkeF90aHJlYWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc3lzX2lkID0gJGlkeCsrOwpteSAkaWR4X2xmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vcHMgPSAkaWR4Kys7Cm15ICRpZHhfY3B1aWRfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JuX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9kZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Flc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfYmZfb2JqID0gJGlkeCsrOwpteSAkaWR4X21kNV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfc2hhMV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfY2FzdF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcmM0X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ybWQxNjBfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNV9vYmogPSAkaWR4Kys7Cm15ICRpZHhfd3Bfb2JqID0gJGlkeCsrOwpteSAkaWR4X2NtbGxfb2JqID0gJGlkeCsrOwpteSAkaWR4X21vZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9lbmdpbmVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9wZXJsYXNtX3NjaGVtZSA9ICRpZHgrKzsKbXkgJGlkeF9kc29fc2NoZW1lID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF90YXJnZXQgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9sZGZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2V4dGVuc2lvbiA9ICRpZHgrKzsKbXkgJGlkeF9yYW5saWIgPSAkaWR4Kys7Cm15ICRpZHhfYXJmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF9tdWx0aWxpYiA9ICRpZHgrKzsKCm15ICRwcmVmaXg9IiI7Cm15ICRsaWJkaXI9IiI7Cm15ICRvcGVuc3NsZGlyPSIiOwpteSAkZXhlX2V4dD0iIjsKbXkgJGluc3RhbGxfcHJlZml4PSAiJEVOVnsnSU5TVEFMTF9QUkVGSVgnfSI7Cm15ICRjcm9zc19jb21waWxlX3ByZWZpeD0iIjsKbXkgJGZpcHNsaWJkaXI9Ii91c3IvbG9jYWwvc3NsL2ZpcHMtMi4wL2xpYi8iOwpteSAkbm9maXBzY2FuaXN0ZXJjaGVjaz0wOwpteSAkZmlwc2NhbmlzdGVyaW50ZXJuYWw9Im4iOwpteSAkZmlwc2NhbmlzdGVyb25seSA9IDA7Cm15ICRiYXNlYWRkcj0iMHhGQjAwMDAwIjsKbXkgJG5vX3RocmVhZHM9MDsKbXkgJHRocmVhZHM9MDsKbXkgJG5vX3NoYXJlZD0wOyAjIGJ1dCAibm8tc2hhcmVkIiBpcyBkZWZhdWx0Cm15ICR6bGliPTE7ICAgICAgIyBidXQgIm5vLXpsaWIiIGlzIGRlZmF1bHQKbXkgJG5vX2tyYjU9MDsgICAjIGJ1dCAibm8ta3JiNSIgaXMgaW1wbGllZCB1bmxlc3MgIi0td2l0aC1rcmI1LS4uLiIgaXMgdXNlZApteSAkbm9fcmZjMzc3OT0xOyAjIGJ1dCAibm8tcmZjMzc3OSIgaXMgZGVmYXVsdApteSAkbm9fYXNtPTA7Cm15ICRub19kc289MDsKbXkgJG5vX2dtcD0wOwpteSBAc2tpcD0oKTsKbXkgJE1ha2VmaWxlPSJNYWtlZmlsZSI7Cm15ICRkZXNfbG9jbD0iY3J5cHRvL2Rlcy9kZXNfbG9jbC5oIjsKbXkgJGRlcwk9ImNyeXB0by9kZXMvZGVzLmgiOwpteSAkYm4JPSJjcnlwdG8vYm4vYm4uaCI7Cm15ICRtZDIJPSJjcnlwdG8vbWQyL21kMi5oIjsKbXkgJHJjNAk9ImNyeXB0by9yYzQvcmM0LmgiOwpteSAkcmM0X2xvY2w9ImNyeXB0by9yYzQvcmM0X2xvY2wuaCI7Cm15ICRpZGVhCT0iY3J5cHRvL2lkZWEvaWRlYS5oIjsKbXkgJHJjMgk9ImNyeXB0by9yYzIvcmMyLmgiOwpteSAkYmYJPSJjcnlwdG8vYmYvYmZfbG9jbC5oIjsKbXkgJGJuX2FzbQk9ImJuX2FzbS5vIjsKbXkgJGRlc19lbmM9ImRlc19lbmMubyBmY3J5cHRfYi5vIjsKbXkgJGFlc19lbmM9ImFlc19jb3JlLm8gYWVzX2NiYy5vIjsKbXkgJGJmX2VuYwk9ImJmX2VuYy5vIjsKbXkgJGNhc3RfZW5jPSJjX2VuYy5vIjsKbXkgJHJjNF9lbmM9InJjNF9lbmMubyByYzRfc2tleS5vIjsKbXkgJHJjNV9lbmM9InJjNV9lbmMubyI7Cm15ICRtZDVfb2JqPSIiOwpteSAkc2hhMV9vYmo9IiI7Cm15ICRybWQxNjBfb2JqPSIiOwpteSAkY21sbF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sbF9jYmMubyI7Cm15ICRwcm9jZXNzb3I9IiI7Cm15ICRkZWZhdWx0X3JhbmxpYjsKbXkgJHBlcmw7Cm15ICRmaXBzPTA7CgojIEFsbCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgKFJDNSB3YXMgZW5hYmxlZCBiZWZvcmUgMC45LjgpOgoKbXkgJWRpc2FibGVkID0gKCAjICJ3aGF0IiAgICAgICAgID0+ICJjb21tZW50IiBbb3Igc3BlY2lhbCBrZXl3b3JkICJleHBlcmltZW50YWwiXQoJCSAiZWNfbmlzdHBfNjRfZ2NjXzEyOCIgPT4gImRlZmF1bHQiLAoJCSAiZ21wIgkJICA9PiAiZGVmYXVsdCIsCgkJICJqcGFrZSIgICAgICAgICAgPT4gImV4cGVyaW1lbnRhbCIsCgkJICJtZDIiICAgICAgICAgICAgPT4gImRlZmF1bHQiLAoJCSAicmM1IiAgICAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInJmYzM3NzkiCSAgPT4gImRlZmF1bHQiLAoJCSAic2N0cCIgICAgICAgPT4gImRlZmF1bHQiLAoJCSAic2hhcmVkIiAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInNzbC10cmFjZSIJICA9PiAiZGVmYXVsdCIsCgkJICJzdG9yZSIJICA9PiAiZXhwZXJpbWVudGFsIiwKCQkgInpsaWIiICAgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJ6bGliLWR5bmFtaWMiICAgPT4gImRlZmF1bHQiCgkgICAgICAgKTsKbXkgQGV4cGVyaW1lbnRhbCA9ICgpOwoKIyBJZiBzc2wgZGlyZWN0b3J5IG1pc3NpbmcgYXNzdW1lIHRydW5jYXRlZCBGSVBTIHRhcmJhbGwKaWYgKCEtZCAic3NsIikKCXsKCXByaW50IFNUREVSUiAiQXV0byBDb25maWd1cmluZyBmaXBzb25seVxuIjsKCSRmaXBzID0gMTsKCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCSRmaXBzbGliZGlyPSIiOwoJJGZpcHNjYW5pc3RlcmludGVybmFsPSJ5IjsKCSRmaXBzY2FuaXN0ZXJvbmx5ID0gMjsKCWlmICghIC1mICJjcnlwdG8vYm4vYm5fZ2YybS5jIiApCgkJewoJCSRkaXNhYmxlZHtlYzJtfSA9ICJmb3JjZWQiOwoJCX0KCX0KCiMgVGhpcyBpcyB3aGF0ICRkZXBmbGFncyB3aWxsIGxvb2sgbGlrZSB3aXRoIHRoZSBhYm92ZSBkZWZhdWx0cwojICh3ZSBuZWVkIHRoaXMgdG8gc2VlIGlmIHdlIHNob3VsZCBhZHZpc2UgdGhlIHVzZXIgdG8gcnVuICJtYWtlIGRlcGVuZCIpOgpteSAkZGVmYXVsdF9kZXBmbGFncyA9ICIgLURPUEVOU1NMX05PX0VDX05JU1RQXzY0X0dDQ18xMjggLURPUEVOU1NMX05PX0dNUCAtRE9QRU5TU0xfTk9fSlBBS0UgLURPUEVOU1NMX05PX01EMiAtRE9QRU5TU0xfTk9fUkM1IC1ET1BFTlNTTF9OT19SRkMzNzc5IC1ET1BFTlNTTF9OT19TQ1RQIC1ET1BFTlNTTF9OT19TVE9SRSI7CgojIEV4cGxpY2l0ICJuby0uLi4iIG9wdGlvbnMgd2lsbCBiZSBjb2xsZWN0ZWQgaW4gJWRpc2FibGVkIGFsb25nIHdpdGggdGhlIGRlZmF1bHRzLgojIFRvIHJlbW92ZSBzb21ldGhpbmcgZnJvbSAlZGlzYWJsZWQsIHVzZSAiZW5hYmxlLWZvbyIgKHVubGVzcyBpdCdzIGV4cGVyaW1lbnRhbCkuCiMgRm9yIHN5bW1ldHJ5LCAiZGlzYWJsZS1mb28iIGlzIGEgc3lub255bSBmb3IgIm5vLWZvbyIuCgojIEZvciBmZWF0dXJlcyBjYWxsZWQgImV4cGVyaW1lbnRhbCIgaGVyZSwgYSBtb3JlIGV4cGxpY2l0ICJleHBlcmltZW50YWwtZm9vIiBpcyBuZWVkZWQgdG8gZW5hYmxlLgojIFdlIHdpbGwgY29sbGVjdCBzdWNoIHJlcXVlc3RzIGluIEBleHBlcmltZW50YWwuCiMgVG8gYXZvaWQgYWNjaWRlbnRhbCB1c2Ugb2YgZXhwZXJpbWVudGFsIGZlYXR1cmVzLCBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHVzZSAtRE9QRU5TU0xfRVhQRVJJTUVOVEFMX0ZPTy4KCgpteSAkbm9fc3NlMj0wOwoKJnVzYWdlIGlmICgkI0FSR1YgPCAwKTsKCm15ICRmbGFnczsKbXkgJGRlcGZsYWdzOwpteSAkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lczsKbXkgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7Cm15ICRvcGVuc3NsX3RocmVhZF9kZWZpbmVzOwpteSAkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKbXkgJG9wZW5zc2xfb3RoZXJfZGVmaW5lczsKbXkgJGxpYnM7Cm15ICRsaWJrcmI1PSIiOwpteSAkdGFyZ2V0OwpteSAkb3B0aW9uczsKbXkgJHN5bWxpbms7Cm15ICRtYWtlX2RlcGVuZD0wOwpteSAld2l0aGFyZ3M9KCk7CgpteSBAYXJndmNvcHk9QEFSR1Y7Cm15ICRhcmd2c3RyaW5nPSIiOwpteSAkYXJndl91bnByb2Nlc3NlZD0xOwoKd2hpbGUoJGFyZ3ZfdW5wcm9jZXNzZWQpCgl7CgkkZmxhZ3M9IiI7CgkkZGVwZmxhZ3M9IiI7Cgkkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX290aGVyX2RlZmluZXM9IiI7CgkkbGlicz0iIjsKCSR0YXJnZXQ9IiI7Cgkkb3B0aW9ucz0iIjsKCSRzeW1saW5rPTE7CgoJJGFyZ3ZfdW5wcm9jZXNzZWQ9MDsKCSRhcmd2c3RyaW5nPWpvaW4oJyAnLEBhcmd2Y29weSk7CgpQUk9DRVNTX0FSR1M6Cglmb3JlYWNoIChAYXJndmNvcHkpCgkJewoJCXMgL14tbm8tL25vLS87ICMgc29tZSBwZW9wbGUganVzdCBjYW4ndCByZWFkIHRoZSBpbnN0cnVjdGlvbnMKCgkJIyByZXdyaXRlIHNvbWUgb3B0aW9ucyBpbiAiZW5hYmxlLS4uLiIgZm9ybQoJCXMgL14tPy0/c2hhcmVkJC9lbmFibGUtc2hhcmVkLzsKCQlzIC9ec2N0cCQvZW5hYmxlLXNjdHAvOwoJCXMgL150aHJlYWRzJC9lbmFibGUtdGhyZWFkcy87CgkJcyAvXnpsaWIkL2VuYWJsZS16bGliLzsKCQlzIC9eemxpYi1keW5hbWljJC9lbmFibGUtemxpYi1keW5hbWljLzsKCgkJaWYgKC9ebm8tKC4rKSQvIHx8IC9eZGlzYWJsZS0oLispJC8pCgkJCXsKCQkJaWYgKCEoJGRpc2FibGVkeyQxfSBlcSAiZXhwZXJpbWVudGFsIikpCgkJCQl7CgkJCQlpZiAoJDEgZXEgInNzbCIpCgkJCQkJewoJCQkJCSRkaXNhYmxlZHsic3NsMiJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQkkZGlzYWJsZWR7InNzbDMifSA9ICJvcHRpb24oc3NsKSI7CgkJCQkJfQoJCQkJZWxzaWYgKCQxIGVxICJ0bHMiKQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7InRsczEifSA9ICJvcHRpb24odGxzKSIKCQkJCQl9CgkJCQllbHNlCgkJCQkJewoJCQkJCSRkaXNhYmxlZHskMX0gPSAib3B0aW9uIjsKCQkJCQl9CgkJCQl9CQkJCgkJCX0KCQllbHNpZiAoL15lbmFibGUtKC4rKSQvIHx8IC9eZXhwZXJpbWVudGFsLSguKykkLykKCQkJewoJCQlteSAkYWxnbyA9ICQxOwoJCQlpZiAoJGRpc2FibGVkeyRhbGdvfSBlcSAiZXhwZXJpbWVudGFsIikKCQkJCXsKCQkJCWRpZSAiWW91IGFyZSByZXF1ZXN0aW5nIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlOyBwbGVhc2Ugc2F5ICdleHBlcmltZW50YWwtJGFsZ28nIGlmIHlvdSBhcmUgc3VyZVxuIgoJCQkJCXVubGVzcyAoL15leHBlcmltZW50YWwtLyk7CgkJCQlwdXNoIEBleHBlcmltZW50YWwsICRhbGdvOwoJCQkJfQoJCQlkZWxldGUgJGRpc2FibGVkeyRhbGdvfTsKCgkJCSR0aHJlYWRzID0gMSBpZiAoJGFsZ28gZXEgInRocmVhZHMiKTsKCQkJfQoJCWVsc2lmICgvXi0tdGVzdC1zYW5pdHkkLykKCQkJewoJCQlleGl0KCZ0ZXN0X3Nhbml0eSgpKTsKCQkJfQoJCWVsc2lmICgvXi0tc3RyaWN0LXdhcm5pbmdzLykKCQkJewoJCQkkc3RyaWN0X3dhcm5pbmdzID0gMTsKCQkJfQoJCWVsc2lmICgvXnJlY29uZmlndXJlLyB8fCAvXnJlY29uZi8pCgkJCXsKCQkJaWYgKG9wZW4oSU4sIjwkTWFrZWZpbGUiKSkKCQkJCXsKCQkJCXdoaWxlICg8SU4+KQoJCQkJCXsKCQkJCQljaG9tcDsKCQkJCQlpZiAoL15DT05GSUdVUkVfQVJHUz0oLiopLykKCQkJCQkJewoJCQkJCQkkYXJndnN0cmluZz0kMTsKCQkJCQkJQGFyZ3Zjb3B5PXNwbGl0KCcgJywkYXJndnN0cmluZyk7CgkJCQkJCWRpZSAiSW5jb3JyZWN0IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iCgkJCQkJCQlpZiAoZ3JlcCgvXnJlY29uZi8sQGFyZ3Zjb3B5KSk7CgkJCQkJCXByaW50ICJSZWNvbmZpZ3VyaW5nIHdpdGg6ICRhcmd2c3RyaW5nXG4iOwoJCQkJCQkkYXJndl91bnByb2Nlc3NlZD0xOwoJCQkJCQljbG9zZShJTik7CgkJCQkJCWxhc3QgUFJPQ0VTU19BUkdTOwoJCQkJCQl9CgkJCQkJfQoJCQkJY2xvc2UoSU4pOwoJCQkJfQoJCQlkaWUgIkluc3VmZmljaWVudCBkYXRhIHRvIHJlY29uZmlndXJlLCBwbGVhc2UgZG8gYSBub3JtYWwgY29uZmlndXJhdGlvblxuIjsKCQkJfQoJCWVsc2lmICgvXjM4NiQvKQoJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9CgkJZWxzaWYgKC9eZmlwcyQvKQoJCQl7CgkJCSRmaXBzPTE7CgkJCX0KCQllbHNpZiAoL15yc2FyZWYkLykKCQkJewoJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KCQkJIyBUaGUgY2hlY2sgZm9yIHRoZSBvcHRpb24gaXMgdGhlcmUgc28gc2NyaXB0cyBhcmVuJ3QKCQkJIyBicm9rZW4KCQkJfQoJCWVsc2lmICgvXm5vZmlwc2NhbmlzdGVyY2hlY2skLykKCQkJewoJCQkkZmlwcyA9IDE7CgkJCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCQkJfQoJCWVsc2lmICgvXmZpcHNjaGVjayQvKQoJCQl7CgkJCWlmICgkZmlwc2NhbmlzdGVyb25seSAhPSAyKQoJCQkJewoJCQkJcHJpbnQgU1RERVJSIDw8IkVPRiI7CkVSUk9SOiBGSVBTIG5vdCBhdXRvZGV0ZWN0ZWQuIE5vdCBydW5uaW5nIGZyb20gcmVzdHJpY3RlZCB0YXJiYWxsPz8KRU9GCgkJCQlleGl0KDEpOwoJCQkJfQoJCQl9CgkJZWxzaWYgKC9eZmlwc2NhbmlzdGVyb25seSQvKQoJCQl7CgkJCSRmaXBzID0gMTsKCQkJJG5vZmlwc2NhbmlzdGVyY2hlY2sgPSAxOwoJCQkkZmlwc2xpYmRpcj0iIjsKCQkJJGZpcHNjYW5pc3RlcmludGVybmFsPSJ5IjsKCQkJJGZpcHNjYW5pc3Rlcm9ubHkgPSAxOwoJCQl9CgkJZWxzaWYgKC9eZmlwc2NhbmlzdGVyYnVpbGQkLykKCQkJewoJCQkkZmlwcyA9IDE7CgkJCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCQkJJGZpcHNsaWJkaXI9IiI7CgkJCSRmaXBzY2FuaXN0ZXJpbnRlcm5hbD0ieSI7CgkJCSRmaXBzY2FuaXN0ZXJvbmx5ID0gMTsKCQkJfQoJCWVsc2lmICgvXlstK10vKQoJCQl7CgkJCWlmICgvXi0tcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRwcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0tbGliZGlyPSguKikkLykKCQkJCXsKCQkJCSRsaWJkaXI9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0tb3BlbnNzbGRpcj0oLiopJC8pCgkJCQl7CgkJCQkkb3BlbnNzbGRpcj0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC1rcmI1LShkaXJ8bGlifGluY2x1ZGV8Zmxhdm9yKT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7ImtyYjUtIi4kMX09JDI7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC16bGliLWxpYj0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7InpsaWItbGliIn09JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC16bGliLWluY2x1ZGU9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJ6bGliLWluY2x1ZGUifT0iLUkkMSI7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC1maXBzbGliZGlyPSguKikkLykKCQkJCXsKCQkJCSRmaXBzbGliZGlyPSIkMS8iOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtYmFzZWFkZHI9KC4qKSQvKQoJCQkJewoJCQkJJGJhc2VhZGRyPSIkMSI7CgkJCQl9CgkJCWVsc2lmICgvXi0tY3Jvc3MtY29tcGlsZS1wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJGNyb3NzX2NvbXBpbGVfcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tW2xMXSguKikkLyBvciAvXi1XbCwvKQoJCQkJewoJCQkJJGxpYnMuPSRfLiIgIjsKCQkJCX0KCQkJZWxzZQkjIGNvbW1vbiBpZiAoL15bLStdLyksIGp1c3QgcGFzcyBkb3duLi4uCgkJCQl7CgkJCQkkXyA9fiBzLyUoWzAtOWEtZl17MSwyfSkvY2hyKGhleCgkMSkpL2dlaTsKCQkJCSRmbGFncy49JF8uIiAiOwoJCQkJfQoJCQl9CgkJZWxzaWYgKCRfID1+IC9eKFteOl0rKTooLispJC8pCgkJCXsKCQkJZXZhbCAiXCR0YWJsZXtcJDF9ID0gXCIkMlwiIjsgIyBhbGxvdyAkeHh4IGNvbnN0cnVjdHMgaW4gdGhlIHN0cmluZwoJCQkkdGFyZ2V0PSQxOwoJCQl9CgkJZWxzZQoJCQl7CgkJCWRpZSAidGFyZ2V0IGFscmVhZHkgZGVmaW5lZCAtICR0YXJnZXQgKG9mZmVuZGluZyBhcmc6ICRfKVxuIiBpZiAoJHRhcmdldCBuZSAiIik7CgkJCSR0YXJnZXQ9JF87CgkJCX0KCgkJdW5sZXNzICgkXyBlcSAkdGFyZ2V0IHx8IC9ebm8tLyB8fCAvXmRpc2FibGUtLykKCQkJewoJCQkjICJuby0uLi4iIGZvbGxvd3MgbGF0ZXIgYWZ0ZXIgaW1wbGllZCBkaXNhY3RpdmF0aW9ucwoJCQkjIGhhdmUgYmVlbiBkZXJpdmVkLiAgKERvbid0IHRha2UgdGhpcyB0b28gc2Vyb2l1c2x5LAoJCQkjIHdlIHJlYWxseSBvbmx5IHdyaXRlIE9QVElPTlMgdG8gdGhlIE1ha2VmaWxlIG91dCBvZgoJCQkjIG5vc3RhbGdpYS4pCgoJCQlpZiAoJG9wdGlvbnMgZXEgIiIpCgkJCQl7ICRvcHRpb25zID0gJF87IH0KCQkJZWxzZQoJCQkJeyAkb3B0aW9ucyAuPSAiICIuJF87IH0KCQkJfQoJCX0KCX0KCgoKaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpCgl7CgkkZGlzYWJsZWR7InNzZTIifSA9ICJmb3JjZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSkgfHwgJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9IGVxICIiKQoJewoJJGRpc2FibGVkeyJrcmI1In0gPSAia3JiNS1mbGF2b3Igbm90IHNwZWNpZmllZCI7Cgl9CgppZiAoIWRlZmluZWQoJGRpc2FibGVkeyJ6bGliLWR5bmFtaWMifSkpCgl7CgkjICJ6bGliLWR5bmFtaWMiIHdhcyBzcGVjaWZpY2FsbHkgZW5hYmxlZCwgc28gZW5hYmxlICJ6bGliIgoJZGVsZXRlICRkaXNhYmxlZHsiemxpYiJ9OwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJyaWpuZGFlbCJ9KSkKCXsKCSRkaXNhYmxlZHsiYWVzIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJkZXMifSkpCgl7CgkkZGlzYWJsZWR7Im1kYzIifSA9ICJmb3JjZWQiOwoJfQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImVjIn0pKQoJewoJJGRpc2FibGVkeyJlY2RzYSJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7ImVjZGgifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMi4wIHJlcXVpcmVzIE1ENSBhbmQgUlNBCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJyc2EifSkpCgl7CgkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMy4wIGFuZCBUTFMgcmVxdWlyZXMgTUQ1IGFuZCBTSEEgYW5kIGVpdGhlciBSU0Egb3IgRFNBK0RICmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJzaGEifSkKICAgIHx8IChkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pCiAgICAgICAgJiYgKGRlZmluZWQoJGRpc2FibGVkeyJkc2EifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRoIn0pKSkpCgl7CgkkZGlzYWJsZWR7InNzbDMifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJ0bHMxIn0gPSAiZm9yY2VkIjsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsidGxzMSJ9KSkKCXsKCSRkaXNhYmxlZHsidGxzZXh0In0gPSAiZm9yY2VkIjsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZWMifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRzYSJ9KQogICAgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRoIn0pKQoJewoJJGRpc2FibGVkeyJnb3N0In0gPSAiZm9yY2VkIjsKCX0KCiMgU1JQIGFuZCBIRUFSVEJFQVRTIHJlcXVpcmUgVExTRVhUCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsidGxzZXh0In0pKQoJewoJJGRpc2FibGVkeyJzcnAifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJoZWFydGJlYXRzIn0gPSAiZm9yY2VkIjsKCX0KCmlmICgkdGFyZ2V0IGVxICJUQUJMRSIpIHsKCWZvcmVhY2ggJHRhcmdldCAoc29ydCBrZXlzICV0YWJsZSkgewoJCXByaW50X3RhYmxlX2VudHJ5KCR0YXJnZXQpOwoJfQoJZXhpdCAwOwp9CgppZiAoJHRhcmdldCBlcSAiTElTVCIpIHsKCWZvcmVhY2ggKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludDsKCQlwcmludCAiXG4iOwoJfQoJZXhpdCAwOwp9CgppZiAoJHRhcmdldCA9fiBtL15DeWdXaW4zMigtLiopJC8pIHsKCSR0YXJnZXQgPSAiQ3lnd2luIi4kMTsKfQoKcHJpbnQgIkNvbmZpZ3VyaW5nIGZvciAkdGFyZ2V0XG4iOwoKJnVzYWdlIGlmICghZGVmaW5lZCgkdGFibGV7JHRhcmdldH0pKTsKCmlmICgkZmlwcykKCXsKCWRlbGV0ZSAkZGlzYWJsZWR7InNoYXJlZCJ9IGlmICgkZGlzYWJsZWR7InNoYXJlZCJ9IGVxICJkZWZhdWx0Iik7Cgl9Cgpmb3JlYWNoIChzb3J0IChrZXlzICVkaXNhYmxlZCkpCgl7Cgkkb3B0aW9ucyAuPSAiIG5vLSRfIjsKCglwcmludGYgIiAgICBuby0lLTEycyAlLTEwcyIsICRfLCAiWyRkaXNhYmxlZHskX31dIjsKCglpZiAoL15kc28kLykKCQl7ICRub19kc28gPSAxOyB9CgllbHNpZiAoL150aHJlYWRzJC8pCgkJeyAkbm9fdGhyZWFkcyA9IDE7IH0KCWVsc2lmICgvXnNoYXJlZCQvKQoJCXsgJG5vX3NoYXJlZCA9IDE7IH0KCWVsc2lmICgvXnpsaWIkLykKCQl7ICR6bGliID0gMDsgfQoJZWxzaWYgKC9ec3RhdGljLWVuZ2luZSQvKQoJCXsgfQoJZWxzaWYgKC9eemxpYi1keW5hbWljJC8pCgkJeyB9CgllbHNpZiAoL15zeW1saW5rcyQvKQoJCXsgJHN5bWxpbmsgPSAwOyB9CgllbHNpZiAoL15zc2UyJC8pCgkJeyAkbm9fc3NlMiA9IDE7IH0KCWVsc2UKCQl7CgkJbXkgKCRBTEdPLCAkYWxnbyk7CgkJKCRBTEdPID0gJGFsZ28gPSAkXykgPX4gdHIvW1wtYS16XS9bX0EtWl0vOwoKCQlpZiAoL15hc20kLyB8fCAvXmVyciQvIHx8IC9eaHckLyB8fCAvXmh3LS8pCgkJCXsKCQkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJCQlwcmludCAiIE9QRU5TU0xfTk9fJEFMR08iOwoJCQoJCQlpZiAoL15lcnIkLykJeyAkZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19FUlIgIjsgfQoJCQllbHNpZiAoL15hc20kLykJeyAkbm9fYXNtID0gMTsgfQoJCQl9CgkJZWxzZQoJCQl7CgkJCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkJCXByaW50ICIgT1BFTlNTTF9OT18kQUxHTyI7CgoJCQlpZiAoL15rcmI1JC8pCgkJCQl7ICRub19rcmI1ID0gMTsgfQoJCQllbHNlCgkJCQl7CgkJCQlwdXNoIEBza2lwLCAkYWxnbzsKCQkJCSMgZml4LXVwIGNyeXB0by9kaXJlY3RvcnkgbmFtZShzKQoJCQkJQHNraXBbJCNza2lwXT0id2hybHBvb2wiIGlmICRhbGdvIGVxICJ3aGlybHBvb2wiOwoJCQkJcHJpbnQgIiAoc2tpcCBkaXIpIjsKCgkJCQkkZGVwZmxhZ3MgLj0gIiAtRE9QRU5TU0xfTk9fJEFMR08iOwoJCQkJfQoJCQl9CgkJfQoKCXByaW50ICJcbiI7Cgl9CgpteSAkZXhwX2NmbGFncyA9ICIiOwoKZm9yZWFjaCAoc29ydCBAZXhwZXJpbWVudGFsKQoJewoJbXkgJEFMR087CgkoJEFMR08gPSAkXykgPX4gdHIvW2Etel0vW0EtWl0vOwoKCSMgb3BlbnNzbGNvbmYuaCB3aWxsIHNldCBPUEVOU1NMX05PXy4uLiB1bmxlc3MgT1BFTlNTTF9FWFBFUklNRU5UQUxfLi4uIGlzIGRlZmluZWQKCSRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkkZXhwX2NmbGFncyAuPSAiIC1ET1BFTlNTTF9FWFBFUklNRU5UQUxfJEFMR08iOwoJfQoKbXkgJElzTUsxTUY9c2NhbGFyIGdyZXAgL14kdGFyZ2V0JC8sQE1LMU1GX0J1aWxkczsKCiRleGVfZXh0PSIuZXhlIiBpZiAoJHRhcmdldCBlcSAiQ3lnd2luIiB8fCAkdGFyZ2V0IGVxICJESkdQUCIgfHwgJHRhcmdldCA9fiAvXm1pbmd3Lyk7CiRleGVfZXh0PSIubmxtIiBpZiAoJHRhcmdldCA9fiAvbmV0d2FyZS8pOwokZXhlX2V4dD0iLnBtIiAgaWYgKCR0YXJnZXQgPX4gL3Zvcy8pOwppZiAoJG9wZW5zc2xkaXIgZXEgIiIgYW5kICRwcmVmaXggZXEgIiIpCgl7CglpZiAoJGZpcHMpCgkJewoJCWlmIChleGlzdHMgJEVOVntGSVBTRElSfSkKCQkJewoJCQkkb3BlbnNzbGRpcj0iJEVOVntGSVBTRElSfSI7CgkJCX0KCQllbHNlCgkJCXsKCQkJJG9wZW5zc2xkaXI9Ii91c3IvbG9jYWwvc3NsL2ZpcHMtMi4wIjsKCQkJfQoJCX0KCWVsc2UKCQl7CgkJJG9wZW5zc2xkaXI9Ii91c3IvbG9jYWwvc3NsIjsKCQl9Cgl9CiRwcmVmaXg9JG9wZW5zc2xkaXIgaWYgJHByZWZpeCBlcSAiIjsKCiRkZWZhdWx0X3JhbmxpYj0gJndoaWNoKCJyYW5saWIiKSBvciAkZGVmYXVsdF9yYW5saWI9InRydWUiOwokcGVybD0kRU5WeydQRVJMJ30gb3IgJHBlcmw9JndoaWNoKCJwZXJsNSIpIG9yICRwZXJsPSZ3aGljaCgicGVybCIpCiAgb3IgJHBlcmw9InBlcmwiOwpteSAkbWFrZSA9ICRFTlZ7J01BS0UnfSB8fCAibWFrZSI7CgpteSAkZmlwc19hdXRoX2tleSA9ICRFTlZ7J0ZJUFNfQVVUSF9LRVknfTsKbXkgJGZpcHNfYXV0aF9vZmZpY2VyID0gJEVOVnsnRklQU19BVVRIX09GRklDRVInfTsKbXkgJGZpcHNfYXV0aF91c2VyID0gJEVOVnsnRklQU19BVVRIX1VTRVInfTsKCiRjcm9zc19jb21waWxlX3ByZWZpeD0kRU5WeydDUk9TU19DT01QSUxFJ30gaWYgJGNyb3NzX2NvbXBpbGVfcHJlZml4IGVxICIiOwoKY2hvcCAkb3BlbnNzbGRpciBpZiAkb3BlbnNzbGRpciA9fiAvXC8kLzsKY2hvcCAkcHJlZml4IGlmICRwcmVmaXggPX4gLy5cLyQvOwoKJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvc3NsIiBpZiAkb3BlbnNzbGRpciBlcSAiIjsKJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvIiAuICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyICF+IC8oXlwvfF5bYS16QS1aXTpbXFxcL10pLzsKCgpwcmludCAiSXNNSzFNRj0kSXNNSzFNRlxuIjsKCm15IEBmaWVsZHMgPSBzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7Cm15ICRjYyA9ICRmaWVsZHNbJGlkeF9jY107CiMgQWxsb3cgZW52aXJvbm1lbnQgQ0MgdG8gb3ZlcnJpZGUgY29tcGlsZXIuLi4KaWYoJEVOVntDQ30pIHsKICAgICRjYyA9ICRFTlZ7Q0N9Owp9Cm15ICRjZmxhZ3MgPSAkZmllbGRzWyRpZHhfY2ZsYWdzXTsKbXkgJHVuaXN0ZCA9ICRmaWVsZHNbJGlkeF91bmlzdGRdOwpteSAkdGhyZWFkX2NmbGFnID0gJGZpZWxkc1skaWR4X3RocmVhZF9jZmxhZ107Cm15ICRzeXNfaWQgPSAkZmllbGRzWyRpZHhfc3lzX2lkXTsKbXkgJGxmbGFncyA9ICRmaWVsZHNbJGlkeF9sZmxhZ3NdOwpteSAkYm5fb3BzID0gJGZpZWxkc1skaWR4X2JuX29wc107Cm15ICRjcHVpZF9vYmogPSAkZmllbGRzWyRpZHhfY3B1aWRfb2JqXTsKbXkgJGJuX29iaiA9ICRmaWVsZHNbJGlkeF9ibl9vYmpdOwpteSAkZGVzX29iaiA9ICRmaWVsZHNbJGlkeF9kZXNfb2JqXTsKbXkgJGFlc19vYmogPSAkZmllbGRzWyRpZHhfYWVzX29ial07Cm15ICRiZl9vYmogPSAkZmllbGRzWyRpZHhfYmZfb2JqXTsKbXkgJG1kNV9vYmogPSAkZmllbGRzWyRpZHhfbWQ1X29ial07Cm15ICRzaGExX29iaiA9ICRmaWVsZHNbJGlkeF9zaGExX29ial07Cm15ICRjYXN0X29iaiA9ICRmaWVsZHNbJGlkeF9jYXN0X29ial07Cm15ICRyYzRfb2JqID0gJGZpZWxkc1skaWR4X3JjNF9vYmpdOwpteSAkcm1kMTYwX29iaiA9ICRmaWVsZHNbJGlkeF9ybWQxNjBfb2JqXTsKbXkgJHJjNV9vYmogPSAkZmllbGRzWyRpZHhfcmM1X29ial07Cm15ICR3cF9vYmogPSAkZmllbGRzWyRpZHhfd3Bfb2JqXTsKbXkgJGNtbGxfb2JqID0gJGZpZWxkc1skaWR4X2NtbGxfb2JqXTsKbXkgJG1vZGVzX29iaiA9ICRmaWVsZHNbJGlkeF9tb2Rlc19vYmpdOwpteSAkZW5naW5lc19vYmogPSAkZmllbGRzWyRpZHhfZW5naW5lc19vYmpdOwpteSAkcGVybGFzbV9zY2hlbWUgPSAkZmllbGRzWyRpZHhfcGVybGFzbV9zY2hlbWVdOwpteSAkZHNvX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXTsKbXkgJHNoYXJlZF90YXJnZXQgPSAkZmllbGRzWyRpZHhfc2hhcmVkX3RhcmdldF07Cm15ICRzaGFyZWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfc2hhcmVkX2NmbGFnXTsKbXkgJHNoYXJlZF9sZGZsYWcgPSAkZmllbGRzWyRpZHhfc2hhcmVkX2xkZmxhZ107Cm15ICRzaGFyZWRfZXh0ZW5zaW9uID0gJGZpZWxkc1skaWR4X3NoYXJlZF9leHRlbnNpb25dOwpteSAkcmFubGliID0gJEVOVnsnUkFOTElCJ30gfHwgJGZpZWxkc1skaWR4X3JhbmxpYl07Cm15ICRhciA9ICRFTlZ7J0FSJ30gfHwgImFyIjsKbXkgJGFyZmxhZ3MgPSAkZmllbGRzWyRpZHhfYXJmbGFnc107Cm15ICRtdWx0aWxpYiA9ICRmaWVsZHNbJGlkeF9tdWx0aWxpYl07CgojIGlmICRwcmVmaXgvbGliJG11bHRpbGliIGlzIG5vdCBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoZW4KIyBhc3N1bWUgdGhhdCBpdCdzIG5vdCBzZWFyY2hlZCBieSBsaW5rZXIgYXV0b21hdGljYWxseSwgaW4KIyB3aGljaCBjYXNlIGFkZGluZyAkbXVsdGlsaWIgc3VmZml4IGNhdXNlcyBtb3JlIGdyaWVmIHRoYW4KIyB3ZSdyZSByZWFkeSB0byB0b2xlcmF0ZSwgc28gZG9uJ3QuLi4KJG11bHRpbGliPSIiIGlmICEtZCAiJHByZWZpeC9saWIkbXVsdGlsaWIiOwoKJGxpYmRpcj0ibGliJG11bHRpbGliIiBpZiAkbGliZGlyIGVxICIiOwoKJGNmbGFncyA9ICIkY2ZsYWdzJGV4cF9jZmxhZ3MiOwoKIyAnJScgaW4gJGxmbGFncyBpcyB1c2VkIHRvIHNwbGl0IGZsYWdzIHRvICJwcmUtIiBhbmQgcG9zdC1mbGFncwpteSAoJHByZWxmbGFncywkcG9zdGxmbGFncyk9c3BsaXQoJyUnLCRsZmxhZ3MpOwppZiAoZGVmaW5lZCgkcG9zdGxmbGFncykpCXsgJGxmbGFncz0kcG9zdGxmbGFnczsJfQplbHNlCQkJCXsgJGxmbGFncz0kcHJlbGZsYWdzOyB1bmRlZiAkcHJlbGZsYWdzOwl9CgppZiAoJHRhcmdldCA9fiAvXm1pbmd3LyAmJiBgJGNjIC0tdGFyZ2V0LWhlbHAgMj4mMWAgIX4gbS9cLW1ub1wtY3lnd2luL20pCgl7CgkkY2ZsYWdzID1+IHMvXC1tbm9cLWN5Z3dpblxzKi8vOwoJJHNoYXJlZF9sZGZsYWcgPX4gcy9cLW1ub1wtY3lnd2luXHMqLy87Cgl9CgppZiAoJHRhcmdldCA9fiAvbGludXguKlwtbWlwcy8gJiYgISRub19hc20gJiYgJGZsYWdzICF+IC9cLW0oaXBzfGFyY2g9KS8pIHsKCSMgbWluaW1hbGx5IHJlcXVpcmVkIGFyY2hpdGVjdHVyZSBmbGFncyBmb3IgYXNzZW1ibHkgbW9kdWxlcwoJJGNmbGFncz0iLW1pcHMyICRjZmxhZ3MiIGlmICgkdGFyZ2V0ID1+IC9taXBzMzIvKTsKCSRjZmxhZ3M9Ii1taXBzMyAkY2ZsYWdzIiBpZiAoJHRhcmdldCA9fiAvbWlwczY0Lyk7Cn0KCm15ICRub19zaGFyZWRfd2Fybj0wOwpteSAkbm9fdXNlcl9jZmxhZ3M9MDsKCmlmICgkZmxhZ3MgbmUgIiIpCXsgJGNmbGFncz0iJGZsYWdzJGNmbGFncyI7IH0KZWxzZQkJCXsgJG5vX3VzZXJfY2ZsYWdzPTE7ICAgICAgIH0KCiMgS2VyYmVyb3Mgc2V0dGluZ3MuICBUaGUgZmxhdm9yIG11c3QgYmUgcHJvdmlkZWQgZnJvbSBvdXRzaWRlLCBlaXRoZXIgdGhyb3VnaAojIHRoZSBzY3JpcHQgImNvbmZpZyIgb3IgbWFudWFsbHkuCmlmICghJG5vX2tyYjUpCgl7CglteSAoJGxyZXNvbHYsICRscGF0aCwgJGxleHQpOwoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltIaF1laW1kYWwkLykKCQl7CgkJZGllICJTb3JyeSwgSGVpbWRhbCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFxuIjsKCQl9CgkjIyMjIyBIQUNLIHRvIGZvcmNlIHVzZSBvZiBIZWltZGFsLgoJIyMjIyMgV0FSTklORzogU2luY2Ugd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYWRlcXVhdGUgc3VwcG9ydCBmb3IgSGVpbWRhbCwKCSMjIyMjICAgICAgICAgIHVzaW5nIHRoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQuICBZb3UnbGwgaGF2ZSB0byBtYWtlCgkjIyMjIyAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiB5b3UgZG8sIHBsZWFzZSBzZW5kCgkjIyMjIyAgICAgICAgICBwYXRjaGVzIHRvIG9wZW5zc2wtZGV2QG9wZW5zc2wub3JnCglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eZm9yY2UtW0hoXWVpbWRhbCQvKQoJCXsKCQl3YXJuICJIZWltZGFsIGlzbid0IHJlYWxseSBzdXBwb3J0ZWQuICBZb3VyIGJ1aWxkIFdJTEwgYnJlYWtcbiI7CgkJd2FybiAiSWYgeW91IGZpeCB0aGUgcHJvYmxlbXMsIHBsZWFzZSBzZW5kIGEgcGF0Y2ggdG8gb3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnXG4iOwoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2hlaW1kYWwiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGkgLWxrcmI1IC1sY29tX2VyciIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfSEVJTURBTCAkY2ZsYWdzIjsKCQl9CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW01tXVtJaV1bVHRdLykKCQl7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3Iva2VyYmVyb3MiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8iCgkJCWlmICR3aXRoYXJnc3sia3JiNS1saWIifSBlcSAiIiAmJiAhJElzTUsxTUY7CgkJJGNmbGFncz0iLURLUkI1X01JVCAkY2ZsYWdzIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gcy9eW01tXVtJaV1bVHRdWy5fLV0qLy87CgkJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXjFbLl8tXSpbMDFdLykKCQkJewoJCQkkY2ZsYWdzPSItREtSQjVfTUlUX09MRDExICRjZmxhZ3MiOwoJCQl9CgkJfQoJTFJFU09MVjoKCWZvcmVhY2ggJGxwYXRoICgiL2xpYiIsICIvdXNyL2xpYiIpCgkJewoJCWZvcmVhY2ggJGxleHQgKCJhIiwgInNvIikKCQkJewoJCQkkbHJlc29sdiA9ICIkbHBhdGgvbGlicmVzb2x2LiRsZXh0IjsKCQkJbGFzdCBMUkVTT0xWCWlmICgtciAiJGxyZXNvbHYiKTsKCQkJJGxyZXNvbHYgPSAiIjsKCQkJfQoJCX0KCSR3aXRoYXJnc3sia3JiNS1saWIifSAuPSAiIC1scmVzb2x2IgoJCWlmICgiJGxyZXNvbHYiIG5lICIiKTsKCSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gPSAiLUkiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4iL2luY2x1ZGUiCgkJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBlcSAiIiAmJgoJCSAgICR3aXRoYXJnc3sia3JiNS1kaXIifSBuZSAiIjsKCX0KCiMgVGhlIERTTyBjb2RlIGN1cnJlbnRseSBhbHdheXMgaW1wbGVtZW50cyBhbGwgZnVuY3Rpb25zIHNvIHRoYXQgbm8KIyBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgZnJvbSBhIGNvbXBpbGF0aW9uIHBvaW50CiMgb2Ygdmlldy4gSG93ZXZlciwgdGhlICJtZXRob2QicyBtYXkgcmV0dXJuIHplcm8gdW5sZXNzIHRoYXQgcGxhdGZvcm0KIyBoYXMgc3VwcG9ydCBjb21waWxlZCBpbiBmb3IgdGhlbS4gQ3VycmVudGx5IGVhY2ggbWV0aG9kIGlzIGVuYWJsZWQKIyBieSBhIGRlZmluZSAiRFNPXzxuYW1lPiIgLi4uIHdlIHRyYW5zbGF0ZSB0aGUgImRzb19zY2hlbWUiIGNvbmZpZwojIHN0cmluZyBlbnRyeSBpbnRvIHVzaW5nIHRoZSBmb2xsb3dpbmcgbG9naWM7Cm15ICRkc29fY2ZsYWdzOwppZiAoISRub19kc28gJiYgJGRzb19zY2hlbWUgbmUgIiIpCgl7CgkkZHNvX3NjaGVtZSA9fiB0ci9bYS16XS9bQS1aXS87CglpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0giOwoJCX0KCWVsc2lmICgkZHNvX3NjaGVtZSBlcSAiRExGQ05fTk9fSCIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIjsKCQl9CgllbHNlCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPXyRkc29fc2NoZW1lIjsKCQl9CgkkY2ZsYWdzID0gIiRkc29fY2ZsYWdzICRjZmxhZ3MiOwoJfQoKbXkgJHRocmVhZF9jZmxhZ3M7Cm15ICR0aHJlYWRfZGVmaW5lczsKaWYgKCR0aHJlYWRfY2ZsYWcgbmUgIih1bmtub3duKSIgJiYgISRub190aHJlYWRzKQoJewoJIyBJZiB3ZSBrbm93IGhvdyB0byBkbyBpdCwgc3VwcG9ydCB0aHJlYWRzIGJ5IGRlZmF1bHQuCgkkdGhyZWFkcyA9IDE7Cgl9CmlmICgkdGhyZWFkX2NmbGFnIGVxICIodW5rbm93bikiICYmICR0aHJlYWRzKQoJewoJIyBJZiB0aGUgdXNlciBhc2tlZCBmb3IgInRocmVhZHMiLCBbc11oZSBpcyBhbHNvIGV4cGVjdGVkIHRvCgkjIHByb3ZpZGUgYW55IHN5c3RlbS1kZXBlbmRlbnQgY29tcGlsZXIgb3B0aW9ucyB0aGF0IGFyZQoJIyBuZWNlc3NhcnkuCglpZiAoJG5vX3VzZXJfY2ZsYWdzKQoJCXsKCQlwcmludCAiWW91IGFza2VkIGZvciBtdWx0aS10aHJlYWRpbmcgc3VwcG9ydCwgYnV0IGRpZG4ndFxuIjsKCQlwcmludCAicHJvdmlkZSBhbnkgc3lzdGVtLXNwZWNpZmljIGNvbXBpbGVyIG9wdGlvbnNcbiI7CgkJZXhpdCgxKTsKCQl9CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJGNmbGFncyIgOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKCX0KZWxzZQoJewoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICR0aHJlYWRfY2ZsYWcgJGNmbGFncyI7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwojCW15ICRkZWY7CiMJZm9yZWFjaCAkZGVmIChzcGxpdCAnICcsJHRocmVhZF9jZmxhZykKIwkJewojCQlpZiAoJGRlZiA9fiBzL14tRC8vICYmICRkZWYgIX4gL15fLykKIwkJCXsKIwkJCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSAkZGVmXG4iOwojCQkJfQojCQl9Cgl9CQoKJGxmbGFncz0iJGxpYnMkbGZsYWdzIiBpZiAoJGxpYnMgbmUgIiIpOwoKaWYgKCRub19hc20pCgl7CgkkY3B1aWRfb2JqPSRibl9vYmo9CgkkZGVzX29iaj0kYWVzX29iaj0kYmZfb2JqPSRjYXN0X29iaj0kcmM0X29iaj0kcmM1X29iaj0kY21sbF9vYmo9CgkkbW9kZXNfb2JqPSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0kd3Bfb2JqPSRlbmdpbmVzX29iaj0iIjsKCSRjZmxhZ3M9fnMvXC1EW0JMXV9FTkRJQU4vLwkJaWYgKCRmaXBzKTsKCSR0aHJlYWRfY2ZsYWdzPX5zL1wtRFtCTF1fRU5ESUFOLy8JaWYgKCRmaXBzKTsKCX0KZWxzaWYgKGRlZmluZWQoJGRpc2FibGVke2VjMm19KSkKCXsKCSRibl9vYmogPX4gcy9cdystZ2YybS5vLy87Cgl9CgppZiAoISRub19zaGFyZWQpCgl7CgkkY2FzdF9vYmo9IiI7CSMgQ0FTVCBhc3NlbWJsZXIgaXMgbm90IFBJQwoJfQoKaWYgKCR0aHJlYWRzKQoJewoJJGNmbGFncz0kdGhyZWFkX2NmbGFnczsKCSRvcGVuc3NsX3RocmVhZF9kZWZpbmVzIC49ICR0aHJlYWRfZGVmaW5lczsKCX0KCmlmICgkemxpYikKCXsKCSRjZmxhZ3MgPSAiLURaTElCICRjZmxhZ3MiOwoJaWYgKGRlZmluZWQoJGRpc2FibGVkeyJ6bGliLWR5bmFtaWMifSkpCgkJewoJCWlmIChkZWZpbmVkKCR3aXRoYXJnc3siemxpYi1saWIifSkpCgkJCXsKCQkJJGxmbGFncyA9ICIkbGZsYWdzIC1MIiAuICR3aXRoYXJnc3siemxpYi1saWIifSAuICIgLWx6IjsKCQkJfQoJCWVsc2UKCQkJewoJCQkkbGZsYWdzID0gIiRsZmxhZ3MgLWx6IjsKCQkJfQoJCX0KCWVsc2UKCQl7CgkJJGNmbGFncyA9ICItRFpMSUJfU0hBUkVEICRjZmxhZ3MiOwoJCX0KCX0KCiMgWW91IHdpbGwgZmluZCBzaGxpYl9tYXJrMSBhbmQgc2hsaWJfbWFyazIgZXhwbGFpbmVkIGluIE1ha2VmaWxlLm9yZwpteSAkc2hhcmVkX21hcmsgPSAiIjsKaWYgKCRzaGFyZWRfdGFyZ2V0IGVxICIiKQoJewoJJG5vX3NoYXJlZF93YXJuID0gMSBpZiAhJG5vX3NoYXJlZCAmJiAhJGZpcHM7Cgkkbm9fc2hhcmVkID0gMTsKCX0KaWYgKCEkbm9fc2hhcmVkKQoJewoJaWYgKCRzaGFyZWRfY2ZsYWcgbmUgIiIpCgkJewoJCSRjZmxhZ3MgPSAiJHNoYXJlZF9jZmxhZyAtRE9QRU5TU0xfUElDICRjZmxhZ3MiOwoJCX0KCX0KCmlmICghJElzTUsxTUYpCgl7CgkjIGFkZCB7bm8tfXN0YXRpYy1lbmdpbmUgdG8gb3B0aW9ucyB0byBhbGxvdyBta2RlZi5wbCB0byB3b3JrIHdpdGhvdXQgZXh0cmEgYXJndW1lbnRzCglpZiAoJG5vX3NoYXJlZCkKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBzdGF0aWMtZW5naW5lIjsKCQl9CgllbHNlCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fU1RBVElDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBuby1zdGF0aWMtZW5naW5lIjsKCQl9Cgl9CgokY3B1aWRfb2JqLj0iIHVwbGluay5vIHVwbGluay14ODYubyIgaWYgKCRjZmxhZ3MgPX4gL1wtRE9QRU5TU0xfVVNFX0FQUExJTksvKTsKCiMKIyBQbGF0Zm9ybSBmaXgtdXBzCiMKaWYgKCR0YXJnZXQgPX4gL1wtaWNjJC8pCSMgSW50ZWwgQyBjb21waWxlcgoJewoJbXkgJGljY3Zlcj0wOwoJaWYgKG9wZW4oRkQsIiRjYyAtViAyPiYxIHwiKSkKCQl7CgkJd2hpbGUoPEZEPikgeyAkaWNjdmVyPSQxIGlmICgvVmVyc2lvbiAoWzAtOV0rKVwuLyk7IH0KCQljbG9zZShGRCk7CgkJfQoJaWYgKCRpY2N2ZXI+PTgpCgkJewoJCSMgRWxpbWluYXRlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgZnJvbSBsaWJpcmMuYS4gVGhpcyBpcwoJCSMgZXNzZW50aWFsIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LCBhcyBvdGhlcndpc2UKCQkjIGFwcHMvb3BlbnNzbCBjYW4gZW5kIHVwIGluIGVuZGxlc3MgbG9vcCB1cG9uIHN0YXJ0dXAuLi4KCQkkY2ZsYWdzLj0iIC1EbWVtY3B5PV9fYnVpbHRpbl9tZW1jcHkgLURtZW1zZXQ9X19idWlsdGluX21lbXNldCI7CgkJfQoJaWYgKCRpY2N2ZXI+PTkpCgkJewoJCSRjZmxhZ3MuPSIgLWktc3RhdGljIjsKCQkkY2ZsYWdzPX5zL1wtbm9fY3BwcnQvLW5vLWNwcHJ0LzsKCQl9CglpZiAoJGljY3Zlcj49MTApCgkJewoJCSRjZmxhZ3M9fnMvXC1pXC1zdGF0aWMvLXN0YXRpYy1pbnRlbC87CgkJfQoJfQoKIyBVbmxpa2Ugb3RoZXIgT1NlcyAobGlrZSBTb2xhcmlzLCBMaW51eCwgVHJ1NjQsIElSSVgpIEJTRCBydW4tdGltZQojIGxpbmtlcnMgKHRlc3RlZCBPcGVuQlNELCBOZXRCU0QgYW5kIEZyZWVCU0QpICJkZW1hbmQiIFJQQVRIIHNldCBvbgojIC5zbyBvYmplY3RzLiBBcHBhcmVudGx5IGFwcGxpY2F0aW9uIFJQQVRIIGlzIG5vdCBnbG9iYWwgYW5kIGRvZXMKIyBub3QgYXBwbHkgdG8gLnNvIGxpbmtlZCB3aXRoIG90aGVyIC5zby4gUHJvYmxlbSBtYW5pZmVzdHMgaXRzZWxmCiMgd2hlbiBsaWJzc2wuc28gZmFpbHMgdG8gbG9hZCBsaWJjcnlwdG8uc28uIE9uZSBjYW4gYXJndWUgdGhhdCB3ZQojIHNob3VsZCBlbmdyYXZlIHRoaXMgaW50byBNYWtlZmlsZS5zaGFyZWQgcnVsZXMgb3IgaW50byBCU0QtKiBjb25maWcKIyBsaW5lcyBhYm92ZS4gTWVhbndoaWxlIGxldCdzIHRyeSB0byBiZSBjYXV0aW91cyBhbmQgcGFzcyAtcnBhdGggdG8KIyBsaW5rZXIgb25seSB3aGVuIC0tcHJlZml4IGlzIG5vdCAvdXNyLgppZiAoJHRhcmdldCA9fiAvXkJTRFwtLykKCXsKCSRzaGFyZWRfbGRmbGFnLj0iIC1XbCwtcnBhdGgsXCQoTElCUlBBVEgpIiBpZiAoJHByZWZpeCAhfiBtfF4vdXNyWy9dKiR8KTsKCX0KCmlmICgkc3lzX2lkIG5lICIiKQoJewoJIyRjZmxhZ3M9Ii1ET1BFTlNTTF9TWVNOQU1FXyRzeXNfaWQgJGNmbGFncyI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iI2RlZmluZSBPUEVOU1NMX1NZU05BTUVfJHN5c19pZFxuIjsKCX0KCmlmICgkcmFubGliIGVxICIiKQoJewoJJHJhbmxpYiA9ICRkZWZhdWx0X3JhbmxpYjsKCX0KCiNteSAoJGJuMSk9c3BsaXQoL1xzKy8sJGJuX29iaik7CiMkYm4xID0gIiIgdW5sZXNzIGRlZmluZWQgJGJuMTsKIyRibjE9JGJuX2FzbSB1bmxlc3MgKCRibjEgPX4gL1wubyQvKTsKIyRibl9vYmo9IiRibjEiOwoKJGNwdWlkX29iaj0iIiBpZiAoJHByb2Nlc3NvciBlcSAiMzg2Iik7CgokYm5fb2JqID0gJGJuX2FzbSB1bmxlc3MgJGJuX29iaiBuZSAiIjsKIyBibi01ODYgaXMgdGhlIG9ubHkgb25lIGltcGxlbWVudGluZyBibl8qX3BhcnRfd29yZHMKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX1BBUlRfV09SRFMiIGlmICgkYm5fb2JqID1+IC9ibi01ODYvKTsKJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRub19zc2UyICYmICRibl9vYmogPX4gLzg2Lyk7CgokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVCIgaWYgKCRibl9vYmogPX4gLy1tb250Lyk7CiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9NT05UNSIgaWYgKCRibl9vYmogPX4gLy1tb250NS8pOwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fR0YybSIgaWYgKCRibl9vYmogPX4gLy1nZjJtLyk7CgppZiAoJGZpcHMpCgl7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CglpZiAoJGZpcHNjYW5pc3RlcmludGVybmFsIGVxICJ5IikKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTQ0FOSVNURVJcbiI7CgkJJGNmbGFncyA9ICItRE9QRU5TU0xfRklQU0NBTklTVEVSICRjZmxhZ3MiOwoJCX0KCX0KCiRjcHVpZF9vYmo9Im1lbV9jbHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7CiRkZXNfb2JqPSRkZXNfZW5jCXVubGVzcyAoJGRlc19vYmogPX4gL1wubyQvKTsKJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKJGNhc3Rfb2JqPSRjYXN0X2VuYwl1bmxlc3MgKCRjYXN0X29iaiA9fiAvXC5vJC8pOwokcmM0X29iaj0kcmM0X2VuYwl1bmxlc3MgKCRyYzRfb2JqID1+IC9cLm8kLyk7CiRyYzVfb2JqPSRyYzVfZW5jCXVubGVzcyAoJHJjNV9vYmogPX4gL1wubyQvKTsKaWYgKCRzaGExX29iaiA9fiAvXC5vJC8pCgl7CiMJJHNoYTFfb2JqPSRzaGExX2VuYzsKCSRjZmxhZ3MuPSIgLURTSEExX0FTTSIgICBpZiAoJHNoYTFfb2JqID1+IC9zeDg2LyB8fCAkc2hhMV9vYmogPX4gL3NoYTEvKTsKCSRjZmxhZ3MuPSIgLURTSEEyNTZfQVNNIiBpZiAoJHNoYTFfb2JqID1+IC9zaGEyNTYvKTsKCSRjZmxhZ3MuPSIgLURTSEE1MTJfQVNNIiBpZiAoJHNoYTFfb2JqID1+IC9zaGE1MTIvKTsKCWlmICgkc2hhMV9vYmogPX4gL3NzZTIvKQoJICAgIHsJaWYgKCRub19zc2UyKQoJCXsgICAkc2hhMV9vYmogPX4gcy9cUypzc2UyXFMrLy87ICAgICAgICB9CgkJZWxzaWYgKCRjZmxhZ3MgIX4gL09QRU5TU0xfSUEzMl9TU0UyLykKCQl7ICAgJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIjsgICAgfQoJICAgIH0KCX0KaWYgKCRtZDVfb2JqID1+IC9cLm8kLykKCXsKIwkkbWQ1X29iaj0kbWQ1X2VuYzsKCSRjZmxhZ3MuPSIgLURNRDVfQVNNIjsKCX0KaWYgKCRybWQxNjBfb2JqID1+IC9cLm8kLykKCXsKIwkkcm1kMTYwX29iaj0kcm1kMTYwX2VuYzsKCSRjZmxhZ3MuPSIgLURSTUQxNjBfQVNNIjsKCX0KaWYgKCRhZXNfb2JqID1+IC9cLm8kLykKCXsKCSRjZmxhZ3MuPSIgLURBRVNfQVNNIjsKCSMgYWVzLWN0ci5vIGlzIG5vdCBhIHJlYWwgZmlsZSwgb25seSBpbmRpY2F0aW9uIHRoYXQgYXNzZW1ibGVyCgkjIG1vZHVsZSBpbXBsZW1lbnRzIEFFU19jdHIzMl9lbmNyeXB0Li4uCgkkY2ZsYWdzLj0iIC1EQUVTX0NUUl9BU00iIGlmICgkYWVzX29iaiA9fiBzL1xzKmFlc1wtY3RyXC5vLy8pOwoJIyBhZXMteHRzLm8gaW5kaWNhdGVzIHByZXNlbnNlIG9mIEFFU194dHNfW2VufGRlXWNyeXB0Li4uCgkkY2ZsYWdzLj0iIC1EQUVTX1hUU19BU00iIGlmICgkYWVzX29iaiA9fiBzL1xzKmFlc1wteHRzXC5vLy8pOwoJJGFlc19vYmogPX4gcy9ccyoodnBhZXN8YWVzbmkpXC14ODZcLm8vL2cgaWYgKCRub19zc2UyKTsKCSRhZXNfb2JqID1+IHMvXHMqKHZwfGJzKWFlcy1cdypcLm8vL2cgaWYgKCRmaXBzY2FuaXN0ZXJpbnRlcm5hbCBlcSAieSIpOwoJJGNmbGFncy49IiAtRFZQQUVTX0FTTSIgaWYgKCRhZXNfb2JqID1+IG0vdnBhZXMvKTsKCSRjZmxhZ3MuPSIgLURCU0FFU19BU00iIGlmICgkYWVzX29iaiA9fiBtL2JzYWVzLyk7Cgl9CmVsc2UJewoJJGFlc19vYmo9JGFlc19lbmM7Cgl9CiR3cF9vYmo9IiIgaWYgKCR3cF9vYmogPX4gL21teC8gJiYgJHByb2Nlc3NvciBlcSAiMzg2Iik7CmlmICgkd3Bfb2JqID1+IC9cLm8kLyAmJiAhJGRpc2FibGVkeyJ3aGlybHBvb2wifSkKCXsKCSRjZmxhZ3MuPSIgLURXSElSTFBPT0xfQVNNIjsKCX0KZWxzZQl7Cgkkd3Bfb2JqPSJ3cF9ibG9jay5vIjsKCX0KJGNtbGxfb2JqPSRjbWxsX2VuYwl1bmxlc3MgKCRjbWxsX29iaiA9fiAvLm8kLyk7CmlmICgkbW9kZXNfb2JqID1+IC9naGFzaC8pCgl7CgkkY2ZsYWdzLj0iIC1ER0hBU0hfQVNNIjsKCX0KCiMgIlN0cmluZ2lmeSIgdGhlIEMgZmxhZ3Mgc3RyaW5nLiAgVGhpcyBwZXJtaXRzIGl0IHRvIGJlIG1hZGUgcGFydCBvZiBhIHN0cmluZwojIGFuZCB3b3JrcyBhcyB3ZWxsIG9uIGNvbW1hbmQgbGluZXMuCiRjZmxhZ3MgPX4gcy8oW1xcXCJdKS9cXFwxL2c7CgpteSAkdmVyc2lvbiA9ICJ1bmtub3duIjsKbXkgJHZlcnNpb25fbnVtID0gInVua25vd24iOwpteSAkbWFqb3IgPSAidW5rbm93biI7Cm15ICRtaW5vciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25fbnVtYmVyID0gInVua25vd24iOwpteSAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5ID0gInVua25vd24iOwpteSAkc2hsaWJfbWFqb3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl9taW5vciA9ICJ1bmtub3duIjsKCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbHYuaCcpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgb3BlbnNzbHYuaDokIVxuIjsKd2hpbGUgKDxJTj4pCgl7CgkkdmVyc2lvbj0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLlRFWFQuKk9wZW5TU0wgKFxTKykgLzsKCSR2ZXJzaW9uX251bT0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLk5VTUJFUi4qMHgoXFMrKS87Cgkkc2hsaWJfdmVyc2lvbl9udW1iZXI9JDEgaWYgL1NITElCX1ZFUlNJT05fTlVNQkVSICoiKFteIl0rKSIvOwoJJHNobGliX3ZlcnNpb25faGlzdG9yeT0kMSBpZiAvU0hMSUJfVkVSU0lPTl9ISVNUT1JZICoiKFteIl0qKSIvOwoJfQpjbG9zZShJTik7CmlmICgkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IG5lICIiKSB7ICRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgLj0gIjoiOyB9CgppZiAoJHZlcnNpb24gPX4gLyheWzAtOV0qKVwuKFswLTlcLl0qKS8pCgl7CgkkbWFqb3I9JDE7CgkkbWlub3I9JDI7Cgl9CgppZiAoJHNobGliX3ZlcnNpb25fbnVtYmVyID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJHNobGliX21ham9yPSQxOwoJJHNobGliX21pbm9yPSQyOwoJfQoKaWYgKCRzdHJpY3Rfd2FybmluZ3MpCgl7CglteSAkd29wdDsKCWRpZSAiRVJST1IgLS1zdHJpY3Qtd2FybmluZ3MgcmVxdWlyZXMgZ2NjIiB1bmxlc3MgKCRjYyA9fiAvZ2NjJC8pOwoJZm9yZWFjaCAkd29wdCAoc3BsaXQgL1xzKy8sICRnY2NfZGV2dGVhbV93YXJuKQoJCXsKCQkkY2ZsYWdzIC49ICIgJHdvcHQiIHVubGVzcyAoJGNmbGFncyA9fiAvJHdvcHQvKQoJCX0KCX0KCmlmICgkZmlwc2NhbmlzdGVyaW50ZXJuYWwgZXEgInkiKQoJewoJb3BlbihJTiwiPGZpcHMvZmlwc19hdXRoLmluIikgfHwgZGllICJjYW4ndCBvcGVuIGZpcHNfYXV0aC5pbiI7CglvcGVuKE9VVCwiPmZpcHMvZmlwc19hdXRoLmgiKSB8fCBkaWUgImNhbid0IG9wZW4gZmlwc19hdXRoLmgiOwoJd2hpbGUoPElOPikKCQl7CgkJcy9GSVBTX0FVVEhfS0VZLiokL0ZJUFNfQVVUSF9LRVkgJGZpcHNfYXV0aF9rZXkvIGlmIGRlZmluZWQgJGZpcHNfYXV0aF9rZXk7CgkJcy9GSVBTX0FVVEhfQ1JZUFRPX09GRklDRVIuKiQvRklQU19BVVRIX0NSWVBUT19PRkZJQ0VSICRmaXBzX2F1dGhfb2ZmaWNlci8gaWYgZGVmaW5lZCAkZmlwc19hdXRoX29mZmljZXI7CgkJcy9GSVBTX0FVVEhfQ1JZUFRPX1VTRVIuKiQvRklQU19BVVRIX0NSWVBUT19VU0VSICRmaXBzX2F1dGhfdXNlci8gaWYgZGVmaW5lZCAkZmlwc19hdXRoX3VzZXI7CgkJcHJpbnQgT1VUICRfOwoJCX0KCWNsb3NlIElOOwoJY2xvc2UgT1VUOwoJfQoKbXkgJG1mb3JnID0gJGZpcHNjYW5pc3Rlcm9ubHkgPyAiTWFrZWZpbGUuZmlwcyIgOiAiTWFrZWZpbGUub3JnIjsKCm9wZW4oSU4sIjwkbWZvcmciKSB8fCBkaWUgInVuYWJsZSB0byByZWFkICRtZm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gJG1mb3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CgppZiAoJGZpcHNjYW5pc3Rlcm9ubHkpCgl7CgkkYWVzX29iaiA9fiBzL2Flc25pLXNoYTEteDg2XzY0Lm8vLzsKCSRibl9vYmogPX4gcy9tb2RleHA1MTIteDg2XzY0Lm8vLzsKCX0KCndoaWxlICg8SU4+KQoJewoJY2hvbXA7Cgkkc2RpcnMgPSAxIGlmIC9eU0RJUlM9LzsKCWlmICgkc2RpcnMpIHsKCQlteSAkZGlyOwoJCWZvcmVhY2ggJGRpciAoQHNraXApIHsKCQkJcy8oXHMpJGRpciAvJDEvOwoJCQlzL1xzJGRpciQvLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwogICAgICAgIHMvZmlwcyAvLyBpZiAoL15ESVJTPS8gJiYgISRmaXBzKTsKICAgICAgICBzL2VuZ2luZXMgLy8gaWYgKC9eRElSUz0vICYmICRkaXNhYmxlZHsiZW5naW5lIn0pOwoJcy9jY2dvc3QvLyBpZiAoL15FTkdESVJTPS8gJiYgJGRpc2FibGVkeyJnb3N0In0pOwoJcy9eVkVSU0lPTj0uKi9WRVJTSU9OPSR2ZXJzaW9uLzsKCXMvXk1BSk9SPS4qL01BSk9SPSRtYWpvci87CglzL15NSU5PUj0uKi9NSU5PUj0kbWlub3IvOwoJcy9eU0hMSUJfVkVSU0lPTl9OVU1CRVI9LiovU0hMSUJfVkVSU0lPTl9OVU1CRVI9JHNobGliX3ZlcnNpb25fbnVtYmVyLzsKCXMvXlNITElCX1ZFUlNJT05fSElTVE9SWT0uKi9TSExJQl9WRVJTSU9OX0hJU1RPUlk9JHNobGliX3ZlcnNpb25faGlzdG9yeS87CglzL15TSExJQl9NQUpPUj0uKi9TSExJQl9NQUpPUj0kc2hsaWJfbWFqb3IvOwoJcy9eU0hMSUJfTUlOT1I9LiovU0hMSUJfTUlOT1I9JHNobGliX21pbm9yLzsKCXMvXlNITElCX0VYVD0uKi9TSExJQl9FWFQ9JHNoYXJlZF9leHRlbnNpb24vOwoJcy9eSU5TVEFMTFRPUD0uKiQvSU5TVEFMTFRPUD0kcHJlZml4LzsKCXMvXk1VTFRJTElCPS4qJC9NVUxUSUxJQj0kbXVsdGlsaWIvOwoJcy9eT1BFTlNTTERJUj0uKiQvT1BFTlNTTERJUj0kb3BlbnNzbGRpci87CglzL15MSUJESVI9LiokL0xJQkRJUj0kbGliZGlyLzsKCXMvXklOU1RBTExfUFJFRklYPS4qJC9JTlNUQUxMX1BSRUZJWD0kaW5zdGFsbF9wcmVmaXgvOwoJcy9eUExBVEZPUk09LiokL1BMQVRGT1JNPSR0YXJnZXQvOwoJcy9eT1BUSU9OUz0uKiQvT1BUSU9OUz0kb3B0aW9ucy87CglzL15DT05GSUdVUkVfQVJHUz0uKiQvQ09ORklHVVJFX0FSR1M9JGFyZ3ZzdHJpbmcvOwoJaWYgKCRjcm9zc19jb21waWxlX3ByZWZpeCkKCQl7CgkJcy9eQ0M9LiokL0NST1NTX0NPTVBJTEU9ICRjcm9zc19jb21waWxlX3ByZWZpeFxuQ0M9IFwkXChDUk9TU19DT01QSUxFXCkkY2MvOwoJCXMvXkFSPVxzKi9BUj0gXCRcKENST1NTX0NPTVBJTEVcKS87CgkJcy9eTk09XHMqL05NPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15SQU5MSUI9XHMqL1JBTkxJQj0gXCRcKENST1NTX0NPTVBJTEVcKS87CgkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSBcJFwoQ1JPU1NfQ09NUElMRVwpJGNjLyBpZiAkY2MgZXEgImdjYyI7CgkJfQoJZWxzZQl7CgkJcy9eQ0M9LiokL0NDPSAkY2MvOwoJCXMvXkFSPVxzKmFyL0FSPSAkYXIvOwoJCXMvXlJBTkxJQj0uKi9SQU5MSUI9ICRyYW5saWIvOwoJCXMvXk1BS0VERVBQUk9HPS4qJC9NQUtFREVQUFJPRz0gJGNjLyBpZiAkY2MgZXEgImdjYyI7CgkJfQoJcy9eQ0ZMQUc9LiokL0NGTEFHPSAkY2ZsYWdzLzsKCXMvXkRFUEZMQUc9LiokL0RFUEZMQUc9JGRlcGZsYWdzLzsKCXMvXlBFWF9MSUJTPS4qJC9QRVhfTElCUz0gJHByZWxmbGFncy87CglzL15FWF9MSUJTPS4qJC9FWF9MSUJTPSAkbGZsYWdzLzsKCXMvXkVYRV9FWFQ9LiokL0VYRV9FWFQ9ICRleGVfZXh0LzsKCXMvXkNQVUlEX09CSj0uKiQvQ1BVSURfT0JKPSAkY3B1aWRfb2JqLzsKCXMvXkJOX0FTTT0uKiQvQk5fQVNNPSAkYm5fb2JqLzsKCXMvXkRFU19FTkM9LiokL0RFU19FTkM9ICRkZXNfb2JqLzsKCXMvXkFFU19FTkM9LiokL0FFU19FTkM9ICRhZXNfb2JqLzsKCXMvXkJGX0VOQz0uKiQvQkZfRU5DPSAkYmZfb2JqLzsKCXMvXkNBU1RfRU5DPS4qJC9DQVNUX0VOQz0gJGNhc3Rfb2JqLzsKCXMvXlJDNF9FTkM9LiokL1JDNF9FTkM9ICRyYzRfb2JqLzsKCXMvXlJDNV9FTkM9LiokL1JDNV9FTkM9ICRyYzVfb2JqLzsKCXMvXk1ENV9BU01fT0JKPS4qJC9NRDVfQVNNX09CSj0gJG1kNV9vYmovOwoJcy9eU0hBMV9BU01fT0JKPS4qJC9TSEExX0FTTV9PQko9ICRzaGExX29iai87CglzL15STUQxNjBfQVNNX09CSj0uKiQvUk1EMTYwX0FTTV9PQko9ICRybWQxNjBfb2JqLzsKCXMvXldQX0FTTV9PQko9LiokL1dQX0FTTV9PQko9ICR3cF9vYmovOwoJcy9eQ01MTF9FTkM9LiokL0NNTExfRU5DPSAkY21sbF9vYmovOwoJcy9eTU9ERVNfQVNNX09CSi49KiQvTU9ERVNfQVNNX09CSj0gJG1vZGVzX29iai87CglzL15FTkdJTkVTX0FTTV9PQkouPSokL0VOR0lORVNfQVNNX09CSj0gJGVuZ2luZXNfb2JqLzsKCXMvXlBFUkxBU01fU0NIRU1FPS4qJC9QRVJMQVNNX1NDSEVNRT0gJHBlcmxhc21fc2NoZW1lLzsKCXMvXlBST0NFU1NPUj0uKi9QUk9DRVNTT1I9ICRwcm9jZXNzb3IvOwoJcy9eQVJGTEFHUz0uKi9BUkZMQUdTPSAkYXJmbGFncy87CglzL15QRVJMPS4qL1BFUkw9ICRwZXJsLzsKCXMvXktSQjVfSU5DTFVERVM9LiovS1JCNV9JTkNMVURFUz0kd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LzsKCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwoJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxpYi1saWIifS87CglzL15aTElCX0lOQ0xVREU9LiovWkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOwoJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGlyLzsKCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlmICRmaXBzOwoJcy9eU0hBUkVEX0ZJUFM9LiovU0hBUkVEX0ZJUFM9LzsKCXMvXlNITElCRElSUz0uKi9TSExJQkRJUlM9IGNyeXB0byBzc2wvOwoJcy9eRklQU0NBTklTVEVSSU5URVJOQUw9LiovRklQU0NBTklTVEVSSU5URVJOQUw9JGZpcHNjYW5pc3RlcmludGVybmFsLzsKCXMvXkJBU0VBRERSPS4qL0JBU0VBRERSPSRiYXNlYWRkci87CglzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFyZ2V0LzsKCXMvXlNITElCX01BUks9LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOwoJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7CglpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKiQvKQoJCXsKCQlteSAkc290bXAgPSAkMTsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuZHlsaWIkLykKCQl7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0uZHlsaWIvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwucyhbb2xdKVwuW15cLl0qXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC5cJChTSExJQl9NQUpPUikgLnMkc290bXAvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LlwkKFNITElCX01BSk9SKS5keWxpYiAuZHlsaWIvOwoJCX0KCXMvXlNIQVJFRF9MREZMQUdTPS4qL1NIQVJFRF9MREZMQUdTPSRzaGFyZWRfbGRmbGFnLzsKCWlmICgkZmlwc2NhbmlzdGVyb25seSAmJiBleGlzdHMgJGRpc2FibGVkeyJlYzJtIn0pCgkJewoJCW5leHQgaWYgKC9lYzJfLyB8fCAvYm5fZ2YybS8pOwoJCX0KCXByaW50IE9VVCAkXy4iXG4iOwoJfQpjbG9zZShJTik7CmNsb3NlKE9VVCk7CnJlbmFtZSgkTWFrZWZpbGUsIiRNYWtlZmlsZS5iYWsiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlXG4iIGlmIC1lICRNYWtlZmlsZTsKcmVuYW1lKCIkTWFrZWZpbGUubmV3IiwkTWFrZWZpbGUpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkTWFrZWZpbGUubmV3XG4iOwoKcHJpbnQgIkNDICAgICAgICAgICAgPSRjY1xuIjsKcHJpbnQgIkNGTEFHICAgICAgICAgPSRjZmxhZ3NcbiI7CnByaW50ICJFWF9MSUJTICAgICAgID0kbGZsYWdzXG4iOwpwcmludCAiQ1BVSURfT0JKICAgICA9JGNwdWlkX29ialxuIjsKcHJpbnQgIkJOX0FTTSAgICAgICAgPSRibl9vYmpcbiI7CnByaW50ICJERVNfRU5DICAgICAgID0kZGVzX29ialxuIjsKcHJpbnQgIkFFU19FTkMgICAgICAgPSRhZXNfb2JqXG4iOwpwcmludCAiQkZfRU5DICAgICAgICA9JGJmX29ialxuIjsKcHJpbnQgIkNBU1RfRU5DICAgICAgPSRjYXN0X29ialxuIjsKcHJpbnQgIlJDNF9FTkMgICAgICAgPSRyYzRfb2JqXG4iOwpwcmludCAiUkM1X0VOQyAgICAgICA9JHJjNV9vYmpcbiI7CnByaW50ICJNRDVfT0JKX0FTTSAgID0kbWQ1X29ialxuIjsKcHJpbnQgIlNIQTFfT0JKX0FTTSAgPSRzaGExX29ialxuIjsKcHJpbnQgIlJNRDE2MF9PQkpfQVNNPSRybWQxNjBfb2JqXG4iOwpwcmludCAiQ01MTF9FTkMgICAgICA9JGNtbGxfb2JqXG4iOwpwcmludCAiTU9ERVNfT0JKICAgICA9JG1vZGVzX29ialxuIjsKcHJpbnQgIkVOR0lORVNfT0JKICAgPSRlbmdpbmVzX29ialxuIjsKcHJpbnQgIlBST0NFU1NPUiAgICAgPSRwcm9jZXNzb3JcbiI7CnByaW50ICJSQU5MSUIgICAgICAgID0kcmFubGliXG4iOwpwcmludCAiQVJGTEFHUyAgICAgICA9JGFyZmxhZ3NcbiI7CnByaW50ICJQRVJMICAgICAgICAgID0kcGVybFxuIjsKcHJpbnQgIktSQjVfSU5DTFVERVMgPSIsJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSwiXG4iCglpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IG5lICIiOwoKbXkgJGRlc19wdHI9MDsKbXkgJGRlc19yaXNjMT0wOwpteSAkZGVzX3Jpc2MyPTA7Cm15ICRkZXNfdW5yb2xsPTA7Cm15ICRibl9sbD0wOwpteSAkZGVmX2ludD0yOwpteSAkcmM0X2ludD0kZGVmX2ludDsKbXkgJG1kMl9pbnQ9JGRlZl9pbnQ7Cm15ICRpZGVhX2ludD0kZGVmX2ludDsKbXkgJHJjMl9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzRfaWR4PTA7Cm15ICRyYzRfY2h1bms9MDsKbXkgJGJmX3B0cj0wOwpteSBAdHlwZT0oImNoYXIiLCJzaG9ydCIsImludCIsImxvbmciKTsKbXkgKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCk7Cm15ICRleHBvcnRfdmFyX2FzX2ZuPTA7CgpteSAkZGVzX2ludDsKCmZvcmVhY2ggKHNvcnQgc3BsaXQoL1xzKy8sJGJuX29wcykpCgl7CgkkZGVzX3B0cj0xIGlmIC9ERVNfUFRSLzsKCSRkZXNfcmlzYzE9MSBpZiAvREVTX1JJU0MxLzsKCSRkZXNfcmlzYzI9MSBpZiAvREVTX1JJU0MyLzsKCSRkZXNfdW5yb2xsPTEgaWYgL0RFU19VTlJPTEwvOwoJJGRlc19pbnQ9MSBpZiAvREVTX0lOVC87CgkkYm5fbGw9MSBpZiAvQk5fTExPTkcvOwoJJHJjNF9pbnQ9MCBpZiAvUkM0X0NIQVIvOwoJJHJjNF9pbnQ9MyBpZiAvUkM0X0xPTkcvOwoJJHJjNF9pZHg9MSBpZiAvUkM0X0lOREVYLzsKCSRyYzRfY2h1bms9MSBpZiAvUkM0X0NIVU5LLzsKCSRyYzRfY2h1bms9MiBpZiAvUkM0X0NIVU5LX0xMLzsKCSRtZDJfaW50PTAgaWYgL01EMl9DSEFSLzsKCSRtZDJfaW50PTMgaWYgL01EMl9MT05HLzsKCSRpZGVhX2ludD0xIGlmIC9JREVBX1NIT1JULzsKCSRpZGVhX2ludD0zIGlmIC9JREVBX0xPTkcvOwoJJHJjMl9pbnQ9MSBpZiAvUkMyX1NIT1JULzsKCSRyYzJfaW50PTMgaWYgL1JDMl9MT05HLzsKCSRiZl9wdHI9MSBpZiAkXyBlcSAiQkZfUFRSIjsKCSRiZl9wdHI9MiBpZiAkXyBlcSAiQkZfUFRSMiI7CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwxLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDEsMCwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklUX0xPTkcvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCkgaWYgL1RISVJUWV9UV09fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwxLDApIGlmIC9TSVhURUVOX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMCwxKSBpZiAvRUlHSFRfQklULzsKCSRleHBvcnRfdmFyX2FzX2ZuPTEgaWYgL0VYUE9SVF9WQVJfQVNfRk4vOwoJfQoKb3BlbihJTiwnPGNyeXB0by9vcGVuc3NsY29uZi5oLmluJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbjokIVxuIjsKdW5saW5rKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IjsKb3BlbihPVVQsJz5jcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXcnKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iOwpwcmludCBPVVQgIi8qIG9wZW5zc2xjb25mLmggKi9cbiI7CnByaW50IE9VVCAiLyogV0FSTklORzogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBvcGVuc3NsY29uZi5oLmluIGJ5IENvbmZpZ3VyZS4gKi9cblxuIjsKCnByaW50IE9VVCAiLyogT3BlblNTTCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczogKi9cbiI7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID0gJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CiRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccytPUEVOU1NMX05PXyguKikvI2lmbmRlZiBPUEVOU1NMX0VYUEVSSU1FTlRBTF8kMVxuIyBpZm5kZWYgT1BFTlNTTF9OT18kMVxuIyAgZGVmaW5lIE9QRU5TU0xfTk9fJDFcbiMgZW5kaWZcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPX4gcy9eXHMqI1xzKmRlZmluZVxzK09QRU5TU0xfKC4qKS8jIGlmIGRlZmluZWQoT1BFTlNTTF8kMSkgXCZcJiAhZGVmaW5lZCgkMSlcbiMgIGRlZmluZSAkMVxuIyBlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgPSAiICAgLyogbm8gY2lwaGVycyBleGNsdWRlZCAqL1xuIiBpZiAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyBlcSAiIjsKJG9wZW5zc2xfdGhyZWFkX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfc3lzX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwpwcmludCBPVVQgJG9wZW5zc2xfc3lzX2RlZmluZXM7CnByaW50IE9VVCAiI2lmbmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkRcblxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2V4cGVyaW1lbnRhbF9kZWZpbmVzOwpwcmludCBPVVQgIlxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpwcmludCBPVVQgIlxuI2VuZGlmIC8qIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORCAqL1xuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7CnByaW50IE9VVCAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLCJcbiI7CgpwcmludCBPVVQgIi8qIFRoZSBPUEVOU1NMX05PXyogbWFjcm9zIGFyZSBhbHNvIGRlZmluZWQgYXMgTk9fKiBpZiB0aGUgYXBwbGljYXRpb25cbiI7CnByaW50IE9VVCAiICAgYXNrcyBmb3IgaXQuICBUaGlzIGlzIGEgdHJhbnNpZW50IGZlYXR1cmUgdGhhdCBpcyBwcm92aWRlZCBmb3IgdGhvc2VcbiI7CnByaW50IE9VVCAiICAgd2hvIGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIGRvIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZWlyXG4iOwpwcmludCBPVVQgIiAgIGFwcGxpY2F0aW9ucy4gICovXG4iOwpwcmludCBPVVQgIiNpZmRlZiBPUEVOU1NMX0FMR09SSVRITV9ERUZJTkVTXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnM7CnByaW50IE9VVCAiI2VuZGlmXG5cbiI7CgpwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9DUFVJRF9PQkpcblxuIiBpZiAoJGNwdWlkX29iaiBuZSAibWVtX2Nsci5vIik7Cgp3aGlsZSAoPElOPikKCXsKCWlmCSgvXiNkZWZpbmVccytPUEVOU1NMRElSLykKCQl7CgkJbXkgJGZvbyA9ICRvcGVuc3NsZGlyOwoJCSRmb28gPX4gcy9cXC9cXFxcL2c7CgkJcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xESVIgXCIkZm9vXCJcbiI7CgkJfQoJZWxzaWYJKC9eI2RlZmluZVxzK0VOR0lORVNESVIvKQoJCXsKCQlteSAkZm9vID0gIiRwcmVmaXgvJGxpYmRpci9lbmdpbmVzIjsKCQkkZm9vID1+IHMvXFwvXFxcXC9nOwoJCXByaW50IE9VVCAiI2RlZmluZSBFTkdJTkVTRElSIFwiJGZvb1wiXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT04vKQoJCXsgcHJpbnRmIE9VVCAiI3VuZGVmIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIgoJCQlpZiAkZXhwb3J0X3Zhcl9hc19mbjsKCQkgIHByaW50ZiBPVVQgIiMlcyBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIsCgkJCSgkZXhwb3J0X3Zhcl9hc19mbik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK09QRU5TU0xfVU5JU1RELykKCQl7CgkJJHVuaXN0ZCA9ICI8dW5pc3RkLmg+IiBpZiAkdW5pc3RkIGVxICIiOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX1VOSVNURCAkdW5pc3RkXG4iOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVF9MT05HLykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVF9MT05HXG4iLCgkYjY0bCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhUWV9GT1VSX0JJVFxuIiwoJGI2NCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1RISVJUWV9UV09fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBUSElSVFlfVFdPX0JJVFxuIiwoJGIzMik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRFRU5fQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBTSVhURUVOX0JJVFxuIiwoJGIxNik/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0VJR0hUX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgRUlHSFRfQklUXG4iLCgkYjgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytCTl9MTE9OR1xzKiQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEJOX0xMT05HXG4iLCgkYm5fbGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXlwjZGVmaW5lXHMrREVTX0xPTkdccysuKi8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIERFU19MT05HIHVuc2lnbmVkICVzXG4iLAoJCQkoJGRlc19pbnQpPydpbnQnOidsb25nJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19QVFIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19QVFJcbiIsKCRkZXNfcHRyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MxLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzFcbiIsKCRkZXNfcmlzYzEpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzIvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMlxuIiwoJGRlc19yaXNjMik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19VTlJPTEwvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19VTlJPTExcbiIsKCRkZXNfdW5yb2xsKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrUkM0X0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmM0X2ludF07IH0KCWVsc2lmCSgvXiN1bmRlZlxzK1JDNF9DSFVOSy8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBSQzRfQ0hVTktcbiIgaWYgJHJjNF9jaHVuaz09MDsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1JDNF9JTkRFWC8pCgkJeyBwcmludGYgT1VUICIjJXMgUkM0X0lOREVYXG4iLCgkcmM0X2lkeCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrSTM4Nl9PTkxZLykKCQl7IHByaW50ZiBPVVQgIiMlcyBJMzg2X09OTFlcbiIsICgkcHJvY2Vzc29yIGVxICIzODYiKT8KCQkJImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK01EMl9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIE1EMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJG1kMl9pbnRdOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrSURFQV9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgSURFQV9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJGlkZWFfaW50XTt9CgllbHNpZgkoL14jZGVmaW5lXHMrUkMyX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBSQzJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzJfaW50XTt9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytCRl9QVFIvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMDsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDE7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFIyXG4iIGlmICRiZl9wdHIgPT0gMjsKCSAgICAgICAgfQoJZWxzZQoJCXsgcHJpbnQgT1VUICRfOyB9Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIsImNyeXB0by9vcGVuc3NsY29uZi5oLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaFxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgiOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIsImNyeXB0by9vcGVuc3NsY29uZi5oIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ld1xuIjsKCgojIEZpeCB0aGUgZGF0ZQoKcHJpbnQgIlNJWFRZX0ZPVVJfQklUX0xPTkcgbW9kZVxuIiBpZiAkYjY0bDsKcHJpbnQgIlNJWFRZX0ZPVVJfQklUIG1vZGVcbiIgaWYgJGI2NDsKcHJpbnQgIlRISVJUWV9UV09fQklUIG1vZGVcbiIgaWYgJGIzMjsKcHJpbnQgIlNJWFRFRU5fQklUIG1vZGVcbiIgaWYgJGIxNjsKcHJpbnQgIkVJR0hUX0JJVCBtb2RlXG4iIGlmICRiODsKcHJpbnQgIkRFU19QVFIgdXNlZFxuIiBpZiAkZGVzX3B0cjsKcHJpbnQgIkRFU19SSVNDMSB1c2VkXG4iIGlmICRkZXNfcmlzYzE7CnByaW50ICJERVNfUklTQzIgdXNlZFxuIiBpZiAkZGVzX3Jpc2MyOwpwcmludCAiREVTX1VOUk9MTCB1c2VkXG4iIGlmICRkZXNfdW5yb2xsOwpwcmludCAiREVTX0lOVCB1c2VkXG4iIGlmICRkZXNfaW50OwpwcmludCAiQk5fTExPTkcgbW9kZVxuIiBpZiAkYm5fbGw7CnByaW50ICJSQzQgdXNlcyB1JHR5cGVbJHJjNF9pbnRdXG4iIGlmICRyYzRfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkM0X0lOREVYIG1vZGVcbiIgaWYgJHJjNF9pZHg7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5kZWZpbmVkXG4iIGlmICRyYzRfY2h1bms9PTA7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwpwcmludCAiTUQyIHVzZXMgdSR0eXBlWyRtZDJfaW50XVxuIiBpZiAkbWQyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIklERUEgdXNlcyB1JHR5cGVbJGlkZWFfaW50XVxuIiBpZiAkaWRlYV9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzIgdXNlcyB1JHR5cGVbJHJjMl9pbnRdXG4iIGlmICRyYzJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiQkZfUFRSIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAxOyAKcHJpbnQgIkJGX1BUUjIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDI7IAoKaWYoJElzTUsxTUYpIHsKCW9wZW4gKE9VVCwiPmNyeXB0by9idWlsZGluZi5oIikgfHwgZGllICJDYW4ndCBvcGVuIGJ1aWxkaW5mLmgiOwoJcHJpbnRmIE9VVCA8PEVPRjsKI2lmbmRlZiBNSzFNRl9CVUlMRAogIC8qIGF1dG8tZ2VuZXJhdGVkIGJ5IENvbmZpZ3VyZSBmb3IgY3J5cHRvL2N2ZXJzaW9uLmM6CiAgICogZm9yIFVuaXggYnVpbGRzLCBjcnlwdG8vTWFrZWZpbGUuc3NsIGdlbmVyYXRlcyBmdW5jdGlvbmFsIGRlZmluaXRpb25zOwogICAqIFdpbmRvd3MgYnVpbGRzIChhbmQgb3RoZXIgbWsxbWYgYnVpbGRzKSBjb21waWxlIGN2ZXJzaW9uLmMgd2l0aAogICAqIC1ETUsxTUZfQlVJTEQgYW5kIHVzZSBkZWZpbml0aW9ucyBhZGRlZCB0byB0aGlzIGZpbGUgYnkgdXRpbC9tazFtZi5wbC4gKi8KICAjZXJyb3IgIldpbmRvd3MgYnVpbGRzIChQTEFURk9STT0kdGFyZ2V0KSB1c2UgbWsxbWYucGwtY3JlYXRlZCBNYWtlZmlsZXMiCiNlbmRpZgpFT0YKCWNsb3NlKE9VVCk7Cn0gZWxzZSB7CglteSAkbWFrZV9jb21tYW5kID0gIiRtYWtlIFBFUkw9XCckcGVybFwnIjsKCW15ICRtYWtlX3RhcmdldHMgPSAiIjsKCSRtYWtlX3RhcmdldHMgLj0gIiBsaW5rcyIgaWYgJHN5bWxpbms7CgkkbWFrZV90YXJnZXRzIC49ICIgZGVwZW5kIiBpZiAkZGVwZmxhZ3MgbmUgJGRlZmF1bHRfZGVwZmxhZ3MgJiYgJG1ha2VfZGVwZW5kOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGdlbnRlc3RzIiBpZiAkc3ltbGluazsKCShzeXN0ZW0gJG1ha2VfY29tbWFuZC4kbWFrZV90YXJnZXRzKSA9PSAwIG9yIGV4aXQgJD8KCQlpZiAkbWFrZV90YXJnZXRzIG5lICIiOwoJaWYgKCAkZmlwc2NhbmlzdGVyb25seSApCgkJe30KCWVsc2lmICggJHBlcmwgPX4gbUBeL0ApIHsKCSAgICAmZG9maWxlKCJ0b29scy9jX3JlaGFzaCIsJHBlcmwsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7JywgJ15teSBcJHByZWZpeDskJywgJ215ICRwcmVmaXggPSAiJyAuICRwcmVmaXggLiAnIjsnKTsKCSAgICAmZG9maWxlKCJhcHBzL0NBLnBsIiwkcGVybCwnXiMhLycsICcjISVzJyk7Cgl9IGVsc2UgewoJICAgICMgTm8gcGF0aCBmb3IgUGVybCBrbm93biAuLi4KCSAgICAmZG9maWxlKCJ0b29scy9jX3JlaGFzaCIsJy91c3IvbG9jYWwvYmluL3BlcmwnLCdeIyEvJywgJyMhJXMnLCdebXkgXCRkaXI7JCcsICdteSAkZGlyID0gIicgLiAkb3BlbnNzbGRpciAuICciOycsICAnXm15IFwkcHJlZml4OyQnLCAnbXkgJHByZWZpeCA9ICInIC4gJHByZWZpeCAuICciOycpOwoJICAgICZkb2ZpbGUoImFwcHMvQ0EucGwiLCcvdXNyL2xvY2FsL2Jpbi9wZXJsJywnXiMhLycsICcjISVzJyk7Cgl9CglpZiAoJGRlcGZsYWdzIG5lICRkZWZhdWx0X2RlcGZsYWdzICYmICEkbWFrZV9kZXBlbmQgJiYgISRmaXBzY2FuaXN0ZXJvbmx5KSB7CgkJcHJpbnQgPDxFT0Y7CgpTaW5jZSB5b3UndmUgZGlzYWJsZWQgb3IgZW5hYmxlZCBhdCBsZWFzdCBvbmUgYWxnb3JpdGhtLCB5b3UgbmVlZCB0byBkbwp0aGUgZm9sbG93aW5nIGJlZm9yZSBidWlsZGluZzoKCgltYWtlIGRlcGVuZApFT0YKCX0KfQoKIyBjcmVhdGUgdGhlIG1zL3ZlcnNpb24zMi5yYyBmaWxlIGlmIG5lZWRlZAppZiAoJElzTUsxTUYgJiYgKCR0YXJnZXQgIX4gL15uZXR3YXJlLykpIHsKCW15ICgkdjEsICR2MiwgJHYzLCAkdjQpOwoJaWYgKCR2ZXJzaW9uX251bSA9fiAvKF5bMC05YS1mXXsxfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkvaSkgewoJCSR2MT1oZXggJDE7CgkJJHYyPWhleCAkMjsKCQkkdjM9aGV4ICQzOwoJCSR2ND1oZXggJDQ7Cgl9CglvcGVuIChPVVQsIj5tcy92ZXJzaW9uMzIucmMiKSB8fCBkaWUgIkNhbid0IG9wZW4gbXMvdmVyc2lvbjMyLnJjIjsKCXByaW50IE9VVCA8PEVPRjsKI2luY2x1ZGUgPHdpbnZlci5oPgoKTEFOR1VBR0UgMHgwOSwweDAxCgoxIFZFUlNJT05JTkZPCiAgRklMRVZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgUFJPRFVDVFZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgRklMRUZMQUdTTUFTSyAweDNmTAojaWZkZWYgX0RFQlVHCiAgRklMRUZMQUdTIDB4MDFMCiNlbHNlCiAgRklMRUZMQUdTIDB4MDBMCiNlbmRpZgogIEZJTEVPUyBWT1NfX1dJTkRPV1MzMgogIEZJTEVUWVBFIFZGVF9ETEwKICBGSUxFU1VCVFlQRSAweDBMCkJFR0lOCiAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCiAgICBCRUdJTgoJQkxPQ0sgIjA0MDkwNGIwIgoJQkVHSU4KI2lmIGRlZmluZWQoRklQUykKCSAgICBWQUxVRSAiQ29tbWVudHMiLCAiV0FSTklORzogVEVTVCBWRVJTSU9OIE9OTFkgKioqTk9UKioqIEZJUFMgMTQwLTIgVkFMSURBVEVELlxcMCIKI2VuZGlmCgkgICAgLy8gUmVxdWlyZWQ6CSAgICAKCSAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIE9wZW5TU0wgUHJvamVjdCwgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9cXDAiCiNpZiBkZWZpbmVkKEZJUFMpCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJURVNUIFVOVkFMSURBVEVEIEZJUFMxNDAtMiBETExcXDAiCiNlbHNlCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJPcGVuU1NMIFNoYXJlZCBMaWJyYXJ5XFwwIgojZW5kaWYKCSAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCAiJHZlcnNpb25cXDAiCiNpZiBkZWZpbmVkKENSWVBUTykKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYmVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYmVheTMyLmRsbFxcMCIKI2VsaWYgZGVmaW5lZChTU0wpCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJzc2xlYXkzMlxcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJzc2xlYXkzMi5kbGxcXDAiCiNlbGlmIGRlZmluZWQoRklQUykKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYm9zc2xmaXBzXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYm9zc2xmaXBzLmRsbFxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlRoZSBPcGVuU1NMIFRvb2xraXRcXDAiCgkgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgoJICAgIC8vIE9wdGlvbmFsOgoJICAgIC8vVkFMVUUgIkNvbW1lbnRzIiwgIlxcMCIKCSAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKCSAgICAvL1ZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcXDAiCgkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKCUVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAweDRiMAogICAgRU5ECkVORApFT0YKCWNsb3NlKE9VVCk7CiAgfQogIApwcmludCA8PEVPRjsKCkNvbmZpZ3VyZWQgZm9yICR0YXJnZXQuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICghJG5vX3RocmVhZHMgJiYgISR0aHJlYWRzKTsKClRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBjb25maWd1cmVkIGZvciBzdXBwb3J0aW5nIG11bHRpLXRocmVhZGVkCmFwcGxpY2F0aW9ucyBhcyB0aGUgY29tcGlsZXIgb3B0aW9ucyByZXF1aXJlZCBvbiB0aGlzIHN5c3RlbSBhcmUgbm90IGtub3duLgpTZWUgZmlsZSBJTlNUQUxMIGZvciBkZXRhaWxzIGlmIHlvdSBuZWVkIG11bHRpLXRocmVhZGluZy4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRub19zaGFyZWRfd2Fybik7CgpZb3UgZ2F2ZSB0aGUgb3B0aW9uICdzaGFyZWQnLiAgTm9ybWFsbHksIHRoYXQgd291bGQgZ2l2ZSB5b3Ugc2hhcmVkIGxpYnJhcmllcy4KVW5mb3J0dW5hdGVseSwgdGhlIE9wZW5TU0wgY29uZmlndXJhdGlvbiBkb2Vzbid0IGluY2x1ZGUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydApmb3IgdGhpcyBwbGF0Zm9ybSB5ZXQsIHNvIGl0IHdpbGwgcHJldGVuZCB5b3UgZ2F2ZSB0aGUgb3B0aW9uICduby1zaGFyZWQnLiAgSWYKeW91IGNhbiBpbmZvcm0gdGhlIGRldmVsb3BwZXJzIChvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmcpIGhvdyB0byBzdXBwb3J0IHNoYXJlZApsaWJyYXJpZXMgb24gdGhpcyBwbGF0Zm9ybSwgdGhleSB3aWxsIGF0IGxlYXN0IGxvb2sgYXQgaXQgYW5kIHRyeSB0aGVpciBiZXN0CihidXQgcGxlYXNlIGZpcnN0IG1ha2Ugc3VyZSB5b3UgaGF2ZSB0cmllZCB3aXRoIGEgY3VycmVudCB2ZXJzaW9uIG9mIE9wZW5TU0wpLgpFT0YKCnByaW50IDw8XEVPRiBpZiAoJGZpcHNjYW5pc3RlcmludGVybmFsIGVxICJ5Iik7CgpXQVJOSU5HOiBPcGVuU1NMIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdXNpbmcgdW5zdXBwb3J0ZWQgb3B0aW9uKHMpIHRvIGludGVybmFsbHkKZ2VuZXJhdGUgYSBmaXBzY2FuaXN0ZXIubyBvYmplY3QgbW9kdWxlIGZvciBURVNUSU5HIFBVUlBPU0VTIE9OTFk7IHRoYXQKY29tcGlsZWQgbW9kdWxlIGlzIE5PVCBGSVBTIDE0MC0yIHZhbGlkYXRlZCBhbmQgQ0FOTk9UIGJlIHVzZWQgdG8gcmVwbGFjZSB0aGUKT3BlblNTTCBGSVBTIE9iamVjdCBNb2R1bGUgYXMgaWRlbnRpZmllZCBieSB0aGUgQ01WUAooaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvKSBpbiBhbnkgYXBwbGljYXRpb24gcmVxdWlyaW5nIHRoZSB1c2Ugb2YgRklQUwoxNDAtMiB2YWxpZGF0ZWQgc29mdHdhcmUuIAoKVGhpcyBpcyBhIHRlc3QgT3BlblNTTCAyLjAgRklQUyBtb2R1bGUuCgpTZWUgdGhlIGZpbGUgUkVBRE1FLkZJUFMgZm9yIGRldGFpbHMgb2YgaG93IHRvIGJ1aWxkIGEgdGVzdCBsaWJyYXJ5LgoKRU9GCgpleGl0KDApOwoKc3ViIHVzYWdlCgl7CglwcmludCBTVERFUlIgJHVzYWdlOwoJcHJpbnQgU1RERVJSICJcbnBpY2sgb3MvY29tcGlsZXIgZnJvbTpcbiI7CglteSAkaj0wOwoJbXkgJGk7CiAgICAgICAgbXkgJGs9MDsKCWZvcmVhY2ggJGkgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCW5leHQgaWYgJGkgPX4gL15kZWJ1Zy87CgkJJGsgKz0gbGVuZ3RoKCRpKSArIDE7CgkJaWYgKCRrID4gNzgpCgkJCXsKCQkJcHJpbnQgU1RERVJSICJcbiI7CgkJCSRrPWxlbmd0aCgkaSk7CgkJCX0KCQlwcmludCBTVERFUlIgJGkgLiAiICI7CgkJfQoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSAhfiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9CglwcmludCBTVERFUlIgIlxuXG5OT1RFOiBJZiBpbiBkb3VidCwgb24gVW5peC1pc2ggc3lzdGVtcyB1c2UgJy4vY29uZmlnJy5cbiI7CglleGl0KDEpOwoJfQoKc3ViIHdoaWNoCgl7CglteSgkbmFtZSk9QF87CglteSAkcGF0aDsKCWZvcmVhY2ggJHBhdGggKHNwbGl0IC86LywgJEVOVntQQVRIfSkKCQl7CgkJaWYgKC1mICIkcGF0aC8kbmFtZSRleGVfZXh0IiBhbmQgLXggXykKCQkJewoJCQlyZXR1cm4gIiRwYXRoLyRuYW1lJGV4ZV9leHQiIHVubGVzcyAoJG5hbWUgZXEgInBlcmwiIGFuZAoJCQkgc3lzdGVtKCIkcGF0aC8kbmFtZSRleGVfZXh0IC1lICIgLiAnXCdleGl0KCRdPDUuMCk7XCcnKSk7CgkJCX0KCQl9Cgl9CgpzdWIgZG9maWxlCgl7CglteSAkZjsgbXkgJHA7IG15ICVtOyBteSBAYTsgbXkgJGs7IG15ICRmZjsKCSgkZiwkcCwlbSk9QF87CgoJb3BlbihJTiwiPCRmLmluIikgfHwgb3BlbihJTiwiPCRmIikgfHwgZGllICJ1bmFibGUgdG8gb3BlbiAkZjokIVxuIjsKCUBhPTxJTj47CgljbG9zZShJTik7Cglmb3JlYWNoICRrIChrZXlzICVtKQoJCXsKCQlncmVwKC8kay8gJiYgKCRfPXNwcmludGYoJG17JGt9LiJcbiIsJHApKSxAYSk7CgkJfQoJb3BlbihPVVQsIj4kZi5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmLm5ldzokIVxuIjsKCXByaW50IE9VVCBAYTsKCWNsb3NlKE9VVCk7CglyZW5hbWUoJGYsIiRmLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkZlxuIiBpZiAtZSAkZjsKCXJlbmFtZSgiJGYubmV3IiwkZikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmLm5ld1xuIjsKCX0KCnN1YiBwcmludF90YWJsZV9lbnRyeQoJewoJbXkgJHRhcmdldCA9IHNoaWZ0OwoKCShteSAkY2MsbXkgJGNmbGFncyxteSAkdW5pc3RkLG15ICR0aHJlYWRfY2ZsYWcsbXkgJHN5c19pZCxteSAkbGZsYWdzLAoJbXkgJGJuX29wcyxteSAkY3B1aWRfb2JqLG15ICRibl9vYmosbXkgJGRlc19vYmosbXkgJGFlc19vYmosIG15ICRiZl9vYmosCglteSAkbWQ1X29iaixteSAkc2hhMV9vYmosbXkgJGNhc3Rfb2JqLG15ICRyYzRfb2JqLG15ICRybWQxNjBfb2JqLAoJbXkgJHJjNV9vYmosbXkgJHdwX29iaixteSAkY21sbF9vYmosbXkgJG1vZGVzX29iaiwgbXkgJGVuZ2luZXNfb2JqLAoJbXkgJHBlcmxhc21fc2NoZW1lLG15ICRkc29fc2NoZW1lLG15ICRzaGFyZWRfdGFyZ2V0LG15ICRzaGFyZWRfY2ZsYWcsCglteSAkc2hhcmVkX2xkZmxhZyxteSAkc2hhcmVkX2V4dGVuc2lvbixteSAkcmFubGliLG15ICRhcmZsYWdzLG15ICRtdWx0aWxpYik9CglzcGxpdCgvXHMqOlxzKi8sJHRhYmxleyR0YXJnZXR9IC4gIjoiIHggMzAgLCAtMSk7CgkJCQoJcHJpbnQgPDxFT0YKCioqKiAkdGFyZ2V0ClwkY2MgICAgICAgICAgID0gJGNjClwkY2ZsYWdzICAgICAgID0gJGNmbGFncwpcJHVuaXN0ZCAgICAgICA9ICR1bmlzdGQKXCR0aHJlYWRfY2ZsYWcgPSAkdGhyZWFkX2NmbGFnClwkc3lzX2lkICAgICAgID0gJHN5c19pZApcJGxmbGFncyAgICAgICA9ICRsZmxhZ3MKXCRibl9vcHMgICAgICAgPSAkYm5fb3BzClwkY3B1aWRfb2JqICAgID0gJGNwdWlkX29iagpcJGJuX29iaiAgICAgICA9ICRibl9vYmoKXCRkZXNfb2JqICAgICAgPSAkZGVzX29iagpcJGFlc19vYmogICAgICA9ICRhZXNfb2JqClwkYmZfb2JqICAgICAgID0gJGJmX29iagpcJG1kNV9vYmogICAgICA9ICRtZDVfb2JqClwkc2hhMV9vYmogICAgID0gJHNoYTFfb2JqClwkY2FzdF9vYmogICAgID0gJGNhc3Rfb2JqClwkcmM0X29iaiAgICAgID0gJHJjNF9vYmoKXCRybWQxNjBfb2JqICAgPSAkcm1kMTYwX29iagpcJHJjNV9vYmogICAgICA9ICRyYzVfb2JqClwkd3Bfb2JqICAgICAgID0gJHdwX29iagpcJGNtbGxfb2JqICAgICA9ICRjbWxsX29iagpcJG1vZGVzX29iaiAgICA9ICRtb2Rlc19vYmoKXCRlbmdpbmVzX29iaiAgPSAkZW5naW5lc19vYmoKXCRwZXJsYXNtX3NjaGVtZSA9ICRwZXJsYXNtX3NjaGVtZQpcJGRzb19zY2hlbWUgICA9ICRkc29fc2NoZW1lClwkc2hhcmVkX3RhcmdldD0gJHNoYXJlZF90YXJnZXQKXCRzaGFyZWRfY2ZsYWcgPSAkc2hhcmVkX2NmbGFnClwkc2hhcmVkX2xkZmxhZyA9ICRzaGFyZWRfbGRmbGFnClwkc2hhcmVkX2V4dGVuc2lvbiA9ICRzaGFyZWRfZXh0ZW5zaW9uClwkcmFubGliICAgICAgID0gJHJhbmxpYgpcJGFyZmxhZ3MgICAgICA9ICRhcmZsYWdzClwkbXVsdGlsaWIgICAgID0gJG11bHRpbGliCkVPRgoJfQoKc3ViIHRlc3Rfc2FuaXR5Cgl7CglteSAkZXJyb3JjbnQgPSAwOwoKCXByaW50IFNUREVSUiAiPSIgeCA3MCwgIlxuIjsKCXByaW50IFNUREVSUiAiPT09IFNBTklUWSBURVNUSU5HIVxuIjsKCXByaW50IFNUREVSUiAiPT09IE5vIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBkb25lLCBhbGwgb3RoZXIgYXJndW1lbnRzIHdpbGwgYmUgaWdub3JlZCFcbiI7CglwcmludCBTVERFUlIgIj0iIHggNzAsICJcbiI7CgoJZm9yZWFjaCAkdGFyZ2V0IChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQlAZmllbGRzID0gc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoKCQlpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWUtMV0gPX4gL14oYmVvc3xkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBwcmV2aW91cyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZSsxXSA9fiAvXihiZW9zfGRsfGRsZmNufHdpbjMyfHZtcykkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gdmFsdWVzXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgaW4gdGhlIGZvbGxvd2luZyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0gIX4gL14oYmVvc3xkbHxkbGZjbnx3aW4zMnx2bXN8KSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSBmaWVsZCA9ICIsJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdLCJcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICB2YWxpZCB2YWx1ZXMgYXJlICdiZW9zJywgJ2RsJywgJ2RsZmNuJywgJ3dpbjMyJyBhbmQgJ3ZtcydcbiI7CgkJCX0KCQl9CglwcmludCBTVERFUlIgIk5vIHNhbml0eSBlcnJvcnMgZGV0ZWN0ZWQhXG4iIGlmICRlcnJvcmNudCA9PSAwOwoJcmV0dXJuICRlcnJvcmNudDsKCX0K