OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbLUR4eHhdIFstbHh4eF0gWy1MeHh4XSBbLWZ4eHhdIFstS3h4eF0gW25vLWh3LXh4eHxuby1od10gW1tuby1ddGhyZWFkc10gW1tuby1dc2hhcmVkXSBbW25vLV16bGlifHpsaWItZHluYW1pY10gW25vLWFzbV0gW25vLWRzb10gW25vLWtyYjVdIFszODZdIFstLXByZWZpeD1ESVJdIFstLW9wZW5zc2xkaXI9T1BFTlNTTERJUl0gWy0td2l0aC14eHhbPXZ2dl1dIFstLXRlc3Qtc2FuaXR5XSBvcy9jb21waWxlcls6ZmxhZ3NdXG4iOwoKIyBPcHRpb25zOgojCiMgLS1vcGVuc3NsZGlyICBpbnN0YWxsIE9wZW5TU0wgaW4gT1BFTlNTTERJUiAoRGVmYXVsdDogRElSL3NzbCBpZiB0aGUKIyAgICAgICAgICAgICAgIC0tcHJlZml4IG9wdGlvbiBpcyBnaXZlbjsgL3Vzci9sb2NhbC9zc2wgb3RoZXJ3aXNlKQojIC0tcHJlZml4ICAgICAgcHJlZml4IGZvciB0aGUgT3BlblNTTCBpbmNsdWRlLCBsaWIgYW5kIGJpbiBkaXJlY3RvcmllcwojICAgICAgICAgICAgICAgKERlZmF1bHQ6IHRoZSBPUEVOU1NMRElSIGRpcmVjdG9yeSkKIwojIC0taW5zdGFsbF9wcmVmaXggIEFkZGl0aW9uYWwgcHJlZml4IGZvciBwYWNrYWdlIGJ1aWxkZXJzIChlbXB0eSBieQojICAgICAgICAgICAgICAgZGVmYXVsdCkuICBUaGlzIG5lZWRuJ3QgYmUgc2V0IGluIGFkdmFuY2UsIHlvdSBjYW4KIyAgICAgICAgICAgICAgIGp1c3QgYXMgd2VsbCB1c2UgIm1ha2UgSU5TVEFMTF9QUkVGSVg9L3doYXRldmVyIGluc3RhbGwiLgojCiMgLS13aXRoLWtyYjUtZGlyICBEZWNsYXJlIHdoZXJlIEtlcmJlcm9zIDUgbGl2ZXMuICBUaGUgbGlicmFyaWVzIGFyZSBleHBlY3RlZAojCQl0byBsaXZlIGluIHRoZSBzdWJkaXJlY3RvcnkgbGliLyBhbmQgdGhlIGhlYWRlciBmaWxlcyBpbgojCQlpbmNsdWRlLy4gIEEgdmFsdWUgaXMgcmVxdWlyZWQuCiMgLS13aXRoLWtyYjUtbGliICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGxpYnJhcmllcyBsaXZlLiAgQSB2YWx1ZSBpcwojCQlyZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2xpYikKIyAtLXdpdGgta3JiNS1pbmNsdWRlICBEZWNsYXJlIHdoZXJlIHRoZSBLZXJiZXJvcyA1IGhlYWRlciBmaWxlcyBsaXZlLiAgQQojCQl2YWx1ZSBpcyByZXF1aXJlZC4KIwkJKERlZmF1bHQ6IEtSQjVfRElSL2luY2x1ZGUpCiMgLS13aXRoLWtyYjUtZmxhdm9yICBEZWNsYXJlIHdoYXQgZmxhdm9yIG9mIEtlcmJlcm9zIDUgaXMgdXNlZC4gIEN1cnJlbnRseQojCQlzdXBwb3J0ZWQgdmFsdWVzIGFyZSAiTUlUIiBhbmQgIkhlaW1kYWwiLiAgQSB2YWx1ZSBpcyByZXF1aXJlZC4KIwojIC0tdGVzdC1zYW5pdHkgTWFrZSBhIG51bWJlciBvZiBzYW5pdHkgY2hlY2tzIG9uIHRoZSBkYXRhIGluIHRoaXMgZmlsZS4KIyAgICAgICAgICAgICAgIFRoaXMgaXMgYSBkZWJ1Z2dpbmcgdG9vbCBmb3IgT3BlblNTTCBkZXZlbG9wZXJzLgojCiMgbm8taHcteHh4ICAgICBkbyBub3QgY29tcGlsZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBjcnlwdG8gaGFyZHdhcmUuCiMgICAgICAgICAgICAgICBHZW5lcmljIE9wZW5TU0wtc3R5bGUgbWV0aG9kcyByZWxhdGluZyB0byB0aGlzIHN1cHBvcnQKIyAgICAgICAgICAgICAgIGFyZSBhbHdheXMgY29tcGlsZWQgYnV0IHJldHVybiBOVUxMIGlmIHRoZSBoYXJkd2FyZQojICAgICAgICAgICAgICAgc3VwcG9ydCBpc24ndCBjb21waWxlZC4KIyBuby1odyAgICAgICAgIGRvIG5vdCBjb21waWxlIHN1cHBvcnQgZm9yIGFueSBjcnlwdG8gaGFyZHdhcmUuCiMgW25vLV10aHJlYWRzICBbZG9uJ3RdIHRyeSB0byBjcmVhdGUgYSBsaWJyYXJ5IHRoYXQgaXMgc3VpdGFibGUgZm9yCiMgICAgICAgICAgICAgICBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucyAoZGVmYXVsdCBpcyAidGhyZWFkcyIgaWYgd2UKIyAgICAgICAgICAgICAgIGtub3cgaG93IHRvIGRvIGl0KQojIFtuby1dc2hhcmVkCVtkb24ndF0gdHJ5IHRvIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIHdoZW4gc3VwcG9ydGVkLgojIG5vLWFzbSAgICAgICAgZG8gbm90IHVzZSBhc3NlbWJsZXIKIyBuby1kc28gICAgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBuYXRpdmUgc2hhcmVkLWxpYnJhcnkgbWV0aG9kcy4gVGhpcwojICAgICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhhdCBhbGwgbWV0aG9kcyBqdXN0IHJldHVybiBOVUxMLgojIG5vLWtyYjUgICAgICAgZG8gbm90IGNvbXBpbGUgaW4gYW55IEtSQjUgbGlicmFyeSBvciBjb2RlLgojIFtuby1demxpYiAgICAgW2Rvbid0XSBjb21waWxlIHN1cHBvcnQgZm9yIHpsaWIgY29tcHJlc3Npb24uCiMgemxpYi1keW5hbWljCUxpa2UgInpsaWIiLCBidXQgdGhlIHpsaWIgbGlicmFyeSBpcyBleHBlY3RlZCB0byBiZSBhIHNoYXJlZAojCQlsaWJyYXJ5IGFuZCB3aWxsIGJlIGxvYWRlZCBpbiBydW4tdGltZSBieSB0aGUgT3BlblNTTCBsaWJyYXJ5LgojIDM4NiAgICAgICAgICAgZ2VuZXJhdGUgODAzODYgY29kZQojIG5vLXNzZTIJZGlzYWJsZXMgSUEtMzIgU1NFMiBjb2RlLCBhYm92ZSBvcHRpb24gaW1wbGllcyBuby1zc2UyCiMgbm8tPGNpcGhlcj4gICBidWlsZCB3aXRob3V0IHNwZWNpZmllZCBhbGdvcml0aG0gKHJzYSwgaWRlYSwgcmM1LCAuLi4pCiMgLTx4eHg+ICs8eHh4PiBjb21waWxlciBvcHRpb25zIGFyZSBwYXNzZWQgdGhyb3VnaCAKIwojIERFQlVHX1NBRkVTVEFDSyB1c2UgdHlwZS1zYWZlIHN0YWNrcyB0byBlbmZvcmNlIHR5cGUtc2FmZXR5IG9uIHN0YWNrIGl0ZW1zCiMJCXByb3ZpZGVkIHRvIHN0YWNrIGNhbGxzLiBHZW5lcmF0ZXMgdW5pcXVlIHN0YWNrIGZ1bmN0aW9ucyBmb3IKIwkJZWFjaCBwb3NzaWJsZSBzdGFjayB0eXBlLgojIERFU19QVFIJdXNlIHBvaW50ZXIgbG9va3VwIHZzIGFycmF5cyBpbiB0aGUgREVTIGluIGNyeXB0by9kZXMvZGVzX2xvY2wuaAojIERFU19SSVNDMQl1c2UgZGlmZmVyZW50IERFU19FTkNSWVBUIG1hY3JvIHRoYXQgaGVscHMgcmVkdWNlIHJlZ2lzdGVyCiMJCWRlcGVuZGFuY2llcyBidXQgbmVlZHMgdG8gbW9yZSByZWdpc3RlcnMsIGdvb2QgZm9yIFJJU0MgQ1BVJ3MKIyBERVNfUklTQzIJQSBkaWZmZXJlbnQgUklTQyB2YXJpYW50LgojIERFU19VTlJPTEwJdW5yb2xsIHRoZSBpbm5lciBERVMgbG9vcCwgc29tZXRpbWVzIGhlbHBzLCBzb210aW1lcyBoaW5kZXJzLgojIERFU19JTlQJdXNlICdpbnQnIGluc3RlYWQgb2YgJ2xvbmcnIGZvciBERVNfTE9ORyBpbiBjcnlwdG8vZGVzL2Rlcy5oCiMJCVRoaXMgaXMgdXNlZCBvbiB0aGUgREVDIEFscGhhIHdoZXJlIGxvbmcgaXMgOCBieXRlcwojCQlhbmQgaW50IGlzIDQKIyBCTl9MTE9ORwl1c2UgdGhlIHR5cGUgJ2xvbmcgbG9uZycgaW4gY3J5cHRvL2JuL2JuLmgKIyBNRDJfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIE1EMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgTUQyX0lOVCBpbiBjcnlwdG8vbWQyL21kMi5oCiMgSURFQV9TSE9SVAl1c2UgJ3Nob3J0JyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBJREVBX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBJREVBX0lOVCBpbiBjcnlwdG8vaWRlYS9pZGVhLmgKIyBSQzJfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkMyX0xPTkcJdXNlICdsb25nJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzJfSU5UIGluIGNyeXB0by9yYzIvcmMyLmgKIyBSQzRfQ0hBUgl1c2UgJ2NoYXInIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkM0X0lOVCBpbiBjcnlwdG8vcmM0L3JjNC5oCiMgUkM0X0lOREVYCWRlZmluZSBSQzRfSU5ERVggaW4gY3J5cHRvL3JjNC9yYzRfbG9jbC5oLiAgVGhpcyB0dXJucyBvbgojCQlhcnJheSBsb29rdXBzIGluc3RlYWQgb2YgcG9pbnRlciB1c2UuCiMgUkM0X0NIVU5LCWVuYWJsZXMgY29kZSB0aGF0IGhhbmRsZXMgZGF0YSBhbGlnbmVkIGF0IGxvbmcgKG5hdHVyYWwgQ1BVCiMJCXdvcmQpIGJvdW5kYXJ5LgojIFJDNF9DSFVOS19MTAllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIGxvbmcgYm91bmRhcnkKIwkJKGludGVuZGVkIGZvciA2NC1iaXQgQ1BVcyBydW5uaW5nIDMyLWJpdCBPUykuCiMgQkZfUFRSCXVzZSAncG9pbnRlciBhcml0aG1hdGljJyBmb3IgQmxvd2Zpc2ggKHVuc2FmZSBvbiBBbHBoYSkuCiMgQkZfUFRSMglpbnRlbCBzcGVjaWZpYyB2ZXJzaW9uIChnZW5lcmljIHZlcnNpb24gaXMgbW9yZSBlZmZpY2llbnQpLgojCiMgRm9sbG93aW5nIGFyZSBzZXQgYXV0b21hdGljYWxseSBieSB0aGlzIHNjcmlwdAojCiMgTUQ1X0FTTQl1c2Ugc29tZSBleHRyYSBtZDUgYXNzZW1iZXIsCiMgU0hBMV9BU00JdXNlIHNvbWUgZXh0cmEgc2hhMSBhc3NlbWJlciwgbXVzdCBkZWZpbmUgTF9FTkRJQU4gZm9yIHg4NgojIFJNRDE2MF9BU00JdXNlIHNvbWUgZXh0cmEgcmlwZW1kMTYwIGFzc2VtYmVyLAojIFNIQTI1Nl9BU00Jc2hhMjU2X2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIFNIQTUxMl9BU00Jc2hhNTEyX2Jsb2NrIGlzIGltcGxlbWVudGVkIGluIGFzc2VtYmxlcgojIEFFU19BU00JQVNFX1tlbnxkZV1jcnlwdCBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2VsZl9hc209Ing4NmNwdWlkLWVsZi5vOmJuODYtZWxmLm8gY284Ni1lbGYubyBtbzg2LWVsZi5vOmR4ODYtZWxmLm8geXg4Ni1lbGYubzpheDg2LWVsZi5vOmJ4ODYtZWxmLm86bXg4Ni1lbGYubzpzeDg2LWVsZi5vIHM1MTJzc2UyLWVsZi5vOmN4ODYtZWxmLm86cng4Ni1lbGYubzpybTg2LWVsZi5vOnI1ODYtZWxmLm86d3BfYmxvY2subyB3ODZtbXgtZWxmLm8iOwpteSAkeDg2X2NvZmZfYXNtPSJ4ODZjcHVpZC1jb2Yubzpibjg2LWNvZi5vIGNvODYtY29mLm8gbW84Ni1jb2YubzpkeDg2LWNvZi5vIHl4ODYtY29mLm86YXg4Ni1jb2YubzpieDg2LWNvZi5vOm14ODYtY29mLm86c3g4Ni1jb2YubyBzNTEyc3NlMi1jb2YubzpjeDg2LWNvZi5vOnJ4ODYtY29mLm86cm04Ni1jb2YubzpyNTg2LWNvZi5vOndwX2Jsb2NrLm8gdzg2bW14LWNvZi5vIjsKbXkgJHg4Nl9vdXRfYXNtPSJ4ODZjcHVpZC1vdXQubzpibjg2LW91dC5vIGNvODYtb3V0Lm8gbW84Ni1vdXQubzpkeDg2LW91dC5vIHl4ODYtb3V0Lm86YXg4Ni1vdXQubzpieDg2LW91dC5vOm14ODYtb3V0Lm86c3g4Ni1vdXQubyBzNTEyc3NlMi1vdXQubzpjeDg2LW91dC5vOnJ4ODYtb3V0Lm86cm04Ni1vdXQubzpyNTg2LW91dC5vOndwX2Jsb2NrLm8gdzg2bW14LW91dC5vIjsKCm15ICR4ODZfNjRfYXNtPSJ4ODZfNjRjcHVpZC5vOng4Nl82NC1nY2MubyB4ODZfNjQtbW9udC5vOjphZXMteDg2XzY0Lm86Om1kNS14ODZfNjQubzpzaGEyNTYteDg2XzY0Lm8gc2hhNTEyLXg4Nl82NC5vOjpyYzQteDg2XzY0Lm86Ojp3cC14ODZfNjQubyI7Cm15ICRpYTY0X2FzbT0iaWE2NGNwdWlkLm86Ym4taWE2NC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6cmM0LWlhNjQubzo6OiI7Cm15ICRzcGFyY3Y5X2FzbT0ic3BhcmN2OWNhcC5vIHNwYXJjY3B1aWQubzpibi1zcGFyY3Y5Lm8gc3BhcmN2OS1tb250Lm8gc3BhcmN2OWEtbW9udC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1zcGFyY3Y5Lm86Om1kNS1zcGFyY3Y5Lm86Ojo6OjoiOwpteSAkbm9fYXNtPSI6Ojo6Ojo6Ojo6OiI7CgojIEFzIGZvciAkQlNEdGhyZWFkcy4gSWRlYSBpcyB0byBtYWludGFpbiAiY29sbGVjdGl2ZSIgc2V0IG9mIGZsYWdzLAojIHdoaWNoIHdvdWxkIGNvdmVyIGFsbCBCU0QgZmxhdm9ycy4gLXB0aHJlYWQgYXBwbGllcyB0byB0aGVtIGFsbCwgCiMgYnV0IGlzIHRyZWF0ZWQgZGlmZmVyZW50bHkuIE9wZW5CU0QgZXhwYW5kcyBpcyBhcyAtRF9QT1NJWF9USFJFQUQKIyAtbGNfciwgd2hpY2ggaXMgc3VmZmljaWVudC4gRnJlZUJTRCA0LnggZXhwYW5kcyBpdCBhcyAtbGNfciwKIyB3aGljaCBoYXMgdG8gYmUgYWNjb21wYW5pZWQgYnkgZXhwbGljaXQgLURfVEhSRUFEX1NBRkUgYW5kCiMgc29tZXRpbWVzIC1EX1JFRU5UUkFOVC4gRnJlZUJTRCA1LnggZXhwYW5kcyBpdCBhcyAtbGNfciwgd2hpY2gKIyBzZWVtcyB0byBiZSBzdWZmaWNpZW50PwpteSAkQlNEdGhyZWFkcz0iLXB0aHJlYWQgLURfVEhSRUFEX1NBRkUgLURfUkVFTlRSQU5UIjsKCiNjb25maWctc3RyaW5nCSRjYyA6ICRjZmxhZ3MgOiAkdW5pc3RkIDogJHRocmVhZF9jZmxhZyA6ICRzeXNfaWQgOiAkbGZsYWdzIDogJGJuX29wcyA6ICRjcHVpZF9vYmogOiAkYm5fb2JqIDogJGRlc19vYmogOiAkYWVzX29iaiA6ICRiZl9vYmogOiAkbWQ1X29iaiA6ICRzaGExX29iaiA6ICRjYXN0X29iaiA6ICRyYzRfb2JqIDogJHJtZDE2MF9vYmogOiAkcmM1X29iaiA6ICR3cF9vYmogOiAkZHNvX3NjaGVtZSA6ICRzaGFyZWRfdGFyZ2V0IDogJHNoYXJlZF9jZmxhZyA6ICRzaGFyZWRfbGRmbGFnIDogJHNoYXJlZF9leHRlbnNpb24gOiAkcmFubGliIDogJGFyZmxhZ3MKCm15ICV0YWJsZT0oCiMgRmlsZSAnVEFCTEUnIChjcmVhdGVkIGJ5ICdtYWtlIFRBQkxFJykgY29udGFpbnMgdGhlIGRhdGEgZnJvbSB0aGlzIGxpc3QsCiMgZm9ybWF0dGVkIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkuCgoKIyJiIiwJCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czF9OiR7dGJuX211bH06OiIsCiMiYmwtNGMtMmMiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIE1EMl9DSEFSOiR7dGJuX211bH06OiIsCiMiYmwtNGMtcmkiLAkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfUJOX0xMT05HIFJDNF9DSEFSIFJDNF9JTkRFWDoke3Ribl9tdWx9OjoiLAojImIyLWlzLXJpLWRwIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMn1JREVBX1NIT1JUIFJDNF9JTkRFWCBERVNfUFRSOiR7dGJuX211bH06OiIsCgojIE91ciBkZXZlbG9wbWVudCBjb25maWdzCiJwdXJpZnkiLAkicHVyaWZ5IGdjYzotZyAtRFBVUklGWSAtV2FsbDo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDo6OjoiLAoiZGVidWciLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nZ2RiIC1nMiAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XZXJyb3I6Oih1bmtub3duKTo6LWxlZmVuY2U6Ojo6IiwKImRlYnVnLWJlbiIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLU8yIC1wZWRhbnRpYyAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1waXBlOjoodW5rbm93bik6Ojo6OmJuODYtZWxmLm8gY284Ni1lbGYubyIsCiJkZWJ1Zy1iZW4tb3BlbmJzZCIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLU8yIC1wZWRhbnRpYyAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1waXBlOjoodW5rbm93bik6Ojo6IiwKImRlYnVnLWJlbi1vcGVuYnNkLWRlYnVnIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1ET1BFTlNTTF9PUEVOQlNEX0RFVl9DUllQVE8gLURPUEVOU1NMX05PX0FTTSAtZzMgLU8yIC1wZWRhbnRpYyAtV2FsbCAtV3NoYWRvdyAtV2Vycm9yIC1waXBlOjoodW5rbm93bik6Ojo6IiwKImRlYnVnLWJlbi1kZWJ1ZyIsCSJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLWczIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLWJlbi1zdHJpY3QiLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRENPTlNUX1NUUklDVCAtTzIgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtV3BvaW50ZXItYXJpdGggLVdjYXN0LXF1YWwgLVd3cml0ZS1zdHJpbmdzIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctcnNlIiwiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLXBpcGUgLU8gLWcgLWdnZGIzIC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoiZGVidWctYm9kbyIsCSJnY2M6LURMX0VORElBTiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJJT19QQUlSX0RFQlVHIC1EUEVEQU5USUMgLWcgLW1hcmNoPWk0ODYgLXBlZGFudGljIC1Xc2hhZG93IC1XYWxsOjotRF9SRUVOVFJBTlQ6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoiZGVidWctdWxmIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtbWFyY2g9aTQ4NiAtV2FsbCAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9uczo6OkNZR1dJTjMyOjo6JHtub19hc219OndpbjMyOmN5Z3dpbi1zaGFyZWQ6OjouZGxsIiwKImRlYnVnLXN0ZXZlIiwJImdjYzotRExfRU5ESUFOIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLWcgLW1hcmNoPWk0ODYgLXBlZGFudGljIC1Xbm8tbG9uZy1sb25nIC1XYWxsIC1XZXJyb3IgLVdzaGFkb3cgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZCIsCiJkZWJ1Zy1zdGV2ZS1saW51eC1wc2V1ZG82NCIsCSJnY2M6LURMX0VORElBTiAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLURDUllQVE9fTURFQlVHX0FMTCAtRE9QRU5TU0xfTk9fQVNNIC1nIC1tY3B1PWk0ODYgLVdhbGwgLVdlcnJvciAtV3NoYWRvdyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpTSVhUWV9GT1VSX0JJVDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZi1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtbm9hc20tZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVcgLVd1bmRlZiAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZiIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtRE1EMzJfUkVHX1Q9aW50IC1PMSAtZ2dkYjIgLVdhbGwgLVdlcnJvciAtV3VuZGVmIC1wZWRhbnRpYyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV25vLWxvbmctbG9uZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkaXN0IiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMgQmFzaWMgY29uZmlncyB0aGF0IHNob3VsZCB3b3JrIG9uIGFueSAoMzIgYW5kIGxlc3MgYml0KSBib3gKImdjYyIsCQkiZ2NjOi1PMzo6KHVua25vd24pOjo6Qk5fTExPTkc6OjoiLAoiY2MiLAkJImNjOi1POjoodW5rbm93bik6Ojo6OjoiLAoKIyMjI1ZPUyBDb25maWd1cmF0aW9ucwoidm9zLWdjYyIsImdjYzotTzMgLVdhbGwgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURCX0VORElBTjo6KHVua25vd24pOlZPUzotV2wsLW1hcDpCTl9MTE9ORzoke25vX2FzbX06Ojo6Oi5zbzoiLAoiZGVidWctdm9zLWdjYyIsImdjYzotTzAgLWcgLVdhbGwgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURCX0VORElBTiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUc6Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKCiMjIyMgU29sYXJpcyB4ODYgd2l0aCBHTlUgQyBzZXR1cHMKIyAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSBzd2l0Y2hlcyBvZmYgaW5saW5lIGFzc2VtYmxlci4gV2UgaGF2ZSB0byBkbyBpdAojIGhlcmUgYmVjYXVzZSB3aGVuZXZlciBHTlUgQyBpbnN0YW50aWF0ZXMgYW4gYXNzZW1ibGVyIHRlbXBsYXRlIGl0CiMgc3Vycm91bmRzIGl0IHdpdGggI0FQUCAjTk9fQVBQIGNvbW1lbnQgcGFpciB3aGljaCAoYXQgbGVhc3QgU29sYXJpcwojIDdfeDg2KSAvdXNyL2Njcy9iaW4vYXMgZmFpbHMgdG8gYXNzZW1ibGUgd2l0aCAiSWxsZWdhbCBtbmVtb25pYyIKIyBlcnJvciBtZXNzYWdlLgoic29sYXJpcy14ODYtZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbCAtRExfRU5ESUFOIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1zaGFyZWQgLXN0YXRpYy1saWJnY2MgbWlnaHQgYXBwZWFyIGNvbnRyb3ZlcnNpYWwsIGJ1dCBtb2R1bGVzIHRha2VuCiMgZnJvbSBzdGF0aWMgbGliZ2NjIGRvIG5vdCBoYXZlIHJlbG9jYXRpb25zIGFuZCBsaW5raW5nIHRoZW0gaW50byBvdXIKIyBzaGFyZWQgb2JqZWN0cyBkb2Vzbid0IGhhdmUgYW55IG5lZ2F0aXZlIHNpZGUtZWZmZWN0cy4gT24gdGhlIGNvbnRyYXJ5LAojIGRvaW5nIHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBnY2Mgc2hhcmVkIGJ1aWxkIHdpdGggU3VuIEMuIEdpdmVuCiMgdGhhdCBnY2MgZ2VuZXJhdGVzIGZhc3RlciBjb2RlIFt0aGFua3MgdG8gaW5saW5lIGFzc2VtYmxlcl0sIEkgd291bGQKIyBhY3R1YWxseSByZWNvbW1lbmQgdG8gY29uc2lkZXIgdXNpbmcgZ2NjIHNoYXJlZCBidWlsZCBldmVuIHdpdGggdmVuZG9yCiMgY29tcGlsZXI6LSkKIwkJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KInNvbGFyaXM2NC14ODZfNjQtZ2NjIiwiZ2NjOi1tNjQgLU8zIC1XYWxsIC1ETF9FTkRJQU4gLURNRDMyX1JFR19UPWludDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIEJGX1BUUjIgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LW02NCAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIAojIyMjIFNvbGFyaXMgeDg2IHdpdGggU3VuIEMgc2V0dXBzCiJzb2xhcmlzLXg4Ni1jYyIsImNjOi1mYXN0IC1PIC1YYTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQteDg2XzY0LWNjIiwiY2M6LWZhc3QgLXhhcmNoPWFtZDY0IC14c3RyY29uc3QgLVhhIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBCRl9QVFIyIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LXhhcmNoPWFtZDY0IC1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgU1BBUkMgU29sYXJpcyB3aXRoIEdOVSBDIHNldHVwcwoic29sYXJpcy1zcGFyY3Y3LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LW12OCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4Lm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6Ojo6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLW0zMiBzaG91bGQgYmUgc2FmZSB0byBhZGQgYXMgbG9uZyBhcyBkcml2ZXIgcmVjb2duaXplcyAtbWNwdT11bHRyYXNwYXJjCiJzb2xhcmlzLXNwYXJjdjktZ2NjIiwiZ2NjOi1tMzIgLW1jcHU9dWx0cmFzcGFyYyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWdjYyIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LW02NCAtc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIwoiZGVidWctc29sYXJpcy1zcGFyY3Y4LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1PIC1nIC1tdjggLVdhbGwgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OC5vOjo6Ojo6Ojo6OjpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtRFBFREFOVElDIC1PIC1nIC1tY3B1PXVsdHJhc3BhcmMgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1Xbm8tbG9uZy1sb25nIC1EX19FWFRFTlNJT05TX18gLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgU1BBUkMgU29sYXJpcyB3aXRoIFN1biBDIHNldHVwcwojIFNDNC4wIGRvZXNuJ3QgcGFzcyAnbWFrZSB0ZXN0JywgdXBncmFkZSB0byBTQzUuMCBvciBTQzQuMi4KIyBTQzQuMiBpcyBvaywgYmV0dGVyIHRoYW4gZ2NjIGV2ZW4gb24gYm4gYXMgbG9uZyBhcyB5b3UgdGVsbCBpdCAteGFyY2g9djgKIyBTQzUuMCBub3RlOiBDb21waWxlciBjb21tb24gcGF0Y2ggMTA3MzU3LTAxIG9yIGxhdGVyIGlzIHJlcXVpcmVkIQoic29sYXJpcy1zcGFyY3Y3LWNjIiwiY2M6LXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OC1jYyIsImNjOi14YXJjaD12OCAteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY5IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9djkgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6L3Vzci9jY3MvYmluL2FyIHJzIiwKIyMjIwoiZGVidWctc29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteGFyY2g9djggLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOjpzcGFyY3Y4Lm86Ojo6Ojo6Ojo6OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY4cGx1cyAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCgojIyMjIFN1bk9TIGNvbmZpZ3MsIGFzc3VtaW5nIHNwYXJjIGZvciB0aGUgZ2NjIG9uZS4KIyJzdW5vcy1jYyIsICJjYzotTzQgLUROT1BST1RPIC1ETk9DT05TVDo6KHVua25vd24pOlNVTk9TOjpERVNfVU5ST0xMOiR7bm9fYXNtfTo6IiwKInN1bm9zLWdjYyIsImdjYzotTzMgLW12OCAtRHNzaXplX3Q9aW50OjoodW5rbm93bik6U1VOT1M6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19QVFIgREVTX1JJU0MxOiR7bm9fYXNtfTo6IiwKCiMjIyMgSVJJWCA1LnggY29uZmlncwojIC1taXBzMiBmbGFnIGlzIGFkZGVkIGJ5IC4vY29uZmlnIHdoZW4gYXBwcm9wcmlhdGUuCiJpcml4LWdjYyIsImdjYzotTzMgLURURVJNSU9TIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFI6JHtub19hc219OmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1jYyIsICJjYzotTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJUklYIDYueCBjb25maWdzCiMgT25seSBOMzIgYW5kIE42NCBBQklzIGFyZSBzdXBwb3J0ZWQuIElmIHlvdSBuZWVkIE8zMiBBQkkgYnVpbGQsIGludm9rZQojICcuL0NvbmZpZ3VyZSBpcml4LWNjIC1vMzInIG1hbnVhbGx5LgoiaXJpeC1taXBzMy1nY2MiLCJnY2M6LW1hYmk9bjMyIC1PMyAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUiBTSVhUWV9GT1VSX0JJVDo6Ym4tbWlwczMubzo6Ojo6Ojo6Ojo6ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPW4zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJpcml4LW1pcHMzLWNjIiwgImNjOi1uMzIgLW1pcHMzIC1PMiAtdXNlX3JlYWRvbmx5X2NvbnN0IC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpERVNfUFRSIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFIgU0lYVFlfRk9VUl9CSVQ6OmJuLW1pcHMzLm86Ojo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotbjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBONjQgQUJJIGJ1aWxkcy4KImlyaXg2NC1taXBzNC1nY2MiLCJnY2M6LW1hYmk9NjQgLW1pcHM0IC1PMyAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMiBERVNfVU5ST0xMIFNJWFRZX0ZPVVJfQklUX0xPTkc6OmJuLW1pcHMzLm86Ojo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJpcml4NjQtbWlwczQtY2MiLCAiY2M6LTY0IC1taXBzNCAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMiBERVNfVU5ST0xMIFNJWFRZX0ZPVVJfQklUX0xPTkc6OmJuLW1pcHMzLm86Ojo6Ojo6Ojo6OmRsZmNuOmlyaXgtc2hhcmVkOjotNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBVbmlmaWVkIEhQLVVYIEFOU0kgQyBjb25maWdzLgojIFNwZWNpYWwgbm90ZXM6CiMgLSBPcmlnaW5hbGx5IHdlIHdlcmUgb3B0aW1pemluZyBhdCArTzQgbGV2ZWwuIEl0IHNob3VsZCBiZSBub3RlZAojICAgdGhhdCB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gK08zIGFuZCArTzQgaXMgZ2xvYmFsIGludGVyLQojICAgcHJvY2VkdXJhbCBhbmFseXNpcy4gQXMgaXQgaGFzIHRvIGJlIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGxpbmsKIyAgIHN0YWdlIHRoZSBjb21waWxlciBsZWF2ZXMgYmVoaW5kIGNlcnRhaW4gcHNldWRvLWNvZGUgaW4gbGliKi5hCiMgICB3aGljaCBtaWdodCBiZSByZWxlYXNlIG9yIGV2ZW4gcGF0Y2ggbGV2ZWwgc3BlY2lmaWMuIEdlbmVyYXRpbmcKIyAgIHRoZSBtYWNoaW5lIGNvZGUgZm9yIGFuZCBhbmFseXppbmcgdGhlICp3aG9sZSogcHJvZ3JhbSBhcHBlYXJzCiMgICB0byBiZSAqZXh0cmVtZWx5KiBtZW1vcnkgZGVtYW5kaW5nIHdoaWxlIHRoZSBwZXJmb3JtYW5jZSBnYWluIGlzCiMgICBhY3R1YWxseSBxdWVzdGlvbmFibGUuIFRoZSBzaXR1YXRpb24gaXMgaW50ZW5zaWZpZWQgYnkgdGhlIGRlZmF1bHQKIyAgIEhQLVVYIGRhdGEgc2V0IHNpemUgbGltaXQgKGluZmFtb3VzICdtYXhkc2l6JyB0dW5hYmxlKSBvZiA2NE1CCiMgICB3aGljaCBpcyB3YXkgdG9vIGxvdyBmb3IgK080LiBJbiBvdGhlciB3b3JkcywgZG9lc24ndCArTzMgbWFrZQojICAgbW9yZSBzZW5zZT8KIyAtIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBIUCBjb21waWxlciBieSBkZWZhdWx0IGdlbmVyYXRlcyBjb2RlCiMgICBzdWl0YWJsZSBmb3IgZXhlY3V0aW9uIG9uIHRoZSBob3N0IHlvdSdyZSBjdXJyZW50bHkgY29tcGlsaW5nIGF0LgojICAgSWYgdGhlIHRvb2xraXQgaXMgbWVudCB0byBiZSB1c2VkIG9uIHZhcmlvdXMgUEEtUklTQyBwcm9jZXNzb3JzCiMgICBjb25zaWRlciAnLi9jb25maWcgK0RBcG9ydGFibGUnLgojIC0gK0RENjQgaXMgY2hvc2VuIGluIGZhdm91ciBvZiArREEyLjBXIGJlY2F1c2UgaXQncyBtZWFudCB0byBiZQojICAgY29tcGF0aWJsZSB3aXRoICpmdXR1cmUqIHJlbGVhc2VzLgojIC0gSWYgeW91IHJ1biAuL0NvbmZpZ3VyZSBocHV4LXBhcmlzYy1bZ11jYyBtYW51YWxseSBkb24ndCBmb3JnZXQgdG8KIyAgIHBhc3MgLURfUkVFTlRSQU5UIG9uIEhQLVVYIDEwIGFuZCBsYXRlci4KIyAtIC1ETUQzMl9YQVJSQVkgdHJpZ2dlcnMgd29ya2Fyb3VuZCBmb3IgY29tcGlsZXIgYnVnIHdlIHJhbiBpbnRvIGluCiMgICAzMi1iaXQgbWVzc2FnZSBkaWdlc3RzLiAoRm9yIHRoZSBtb21lbnQgb2YgdGhpcyB3cml0aW5nKSBIUCBDCiMgICBkb2Vzbid0IHNlZW0gdG8gImRpZ2VzdCIgdG9vIG1hbnkgbG9jYWwgdmFyaWFibGVzICh0aGV5IG1ha2UgImhpbSIKIyAgIGNoZXcgZm9yZXZlcjotKS4gRm9yIG1vcmUgZGV0YWlscyBsb29rLXVwIE1EMzJfWEFSUkFZIGNvbW1lbnQgaW4KIyAgIGNyeXB0by9zaGEvc2hhX2xjbC5oLgojCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiMKIyBTaW5jZSB0aGVyZSBpcyBtZW50aW9uIG9mIHRoaXMgaW4gc2hsaWIvaHB1eDEwLWNjLnNoCiJocHV4LXBhcmlzYy1jYy1vNCIsImNjOi1BZSArTzQgK0VTbGl0IC16IC1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjLWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjMi1nY2MiLCJnY2M6LW1hcmNoPTIuMCAtTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LVdsLCtzIC1sZGxkOlNJWFRZX0ZPVVJfQklUIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjpwYS1yaXNjMi5vOjo6Ojo6Ojo6OjpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXg2NC1wYXJpc2MyLWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOjpwYS1yaXNjMlcubzo6Ojo6Ojo6Ojo6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIE1vcmUgYXR0ZW1wdHMgYXQgdW5pZmllZCAxMC5YIGFuZCAxMS5YIHRhcmdldHMgZm9yIEhQIEMgY29tcGlsZXIuCiMKIyBDaHJpcyBSdWVtbWxlciA8cnVlbW1sZXJAY3VwLmhwLmNvbT4KIyBLZXZpbiBTdGV2ZXMgPGtzQGhwLnNlPgoiaHB1eC1wYXJpc2MtY2MiLCJjYzorTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMC1jYyIsImNjOitEQXBvcnRhYmxlICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzItY2MiLCJjYzorREEyLjAgK0RTMi4wICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzIubzo6Ojo6Ojo6Ojo6ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eDY0LXBhcmlzYzItY2MiLCJjYzorREQ2NCArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyVy5vOjo6Ojo6Ojo6OjpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIEhQL1VYIElBLTY0IHRhcmdldHMKImhwdXgtaWE2NC1jYyIsImNjOi1BZSArREQzMiArTzIgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0REMzIgLWI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEZyYW5rIEdldXJ0cyA8ZnJhbmsuZ2V1cnRzQG5sLmFibmFtcm8uY29tPiBoYXMgcGF0aWVudGx5IGFzc2lzdGVkIHdpdGgKIyB3aXRoIGRlYnVnZ2luZyBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZy4KImhwdXg2NC1pYTY0LWNjIiwiY2M6LUFlICtERDY0ICtPMyArT2xpdD1hbGwgLXogLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDY0IC1iOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgYnVpbGRzLi4uCiJocHV4LWlhNjQtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eDY0LWlhNjQtZ2NjIiwiZ2NjOi1tbHA2NCAtTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1tbHA2NCAtc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCgojIExlZ2FjeSBIUFVYIDkuWCBjb25maWdzLi4uCiJocHV4LWNjIiwJImNjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZIC1BZSArRVNsaXQgK08yIC16OjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LWdjYyIsCSJnY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1PMzo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIEhQIE1QRS9pWCBodHRwOi8vamF6ei5leHRlcm5hbC5ocC5jb20vc3JjL29wZW5zc2wvCiJNUEUvaVgtZ2NjIiwJImdjYzotRF9FTkRJQU4gLURCTl9ESVYyVyAtTzMgLURfUE9TSVhfU09VUkNFIC1EX1NPQ0tFVF9TT1VSQ0UgLUkvU1lTTE9HL1BVQjo6KHVua25vd24pOk1QRTotTC9TWVNMT0cvUFVCIC1sc3lzbG9nIC1sc29ja2V0IC1sY3Vyc2VzOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OjoiLAoKIyBERUMgQWxwaGEgT1NGLzEvVHJ1NjQgdGFyZ2V0cy4KIwojCSJXaGF0J3MgaW4gYSBuYW1lPyBUaGF0IHdoaWNoIHdlIGNhbGwgYSByb3NlCiMJIEJ5IGFueSBvdGhlciB3b3JkIHdvdWxkIHNtZWxsIGFzIHN3ZWV0LiIKIwojIC0gV2lsbGlhbSBTaGFrZXNwZWFyZSwgIlJvbWVvICYgSnVsaWV0IiwgQWN0IElJLCBzY2VuZSBJSS4KIwojIEZvciBnY2MsIHRoZSBmb2xsb3dpbmcgZ2F2ZSBhICU1MCBzcGVlZHVwIG9uIGEgMTY0IG92ZXIgdGhlICdERVNfSU5UJyB2ZXJzaW9uCiMKIm9zZjEtYWxwaGEtZ2NjIiwgImdjYzotTzM6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJvc2YxLWFscGhhLWNjIiwgICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHtub19hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKInRydTY0LWFscGhhLWNjIiwgImNjOi1zdGQxIC10dW5lIGhvc3QgLWZhc3QgLXJlYWRvbmx5X3N0cmluZ3M6Oi1wdGhyZWFkOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHtub19hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjotbXN5bTouc28iLAoKIyMjIwojIyMjIFZhcmlldHkgb2YgTElOVVg6LSkKIyMjIwojICotZ2VuZXJpYyogaXMgZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9jb25maWcgaXMgZnJlZSB0bwojIHRocm93IGluIC1EW0JMXV9FTkRJQU4sIHdoaWNoZXZlciBhcHByb3ByaWF0ZS4uLgoibGludXgtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYyIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6OmxpbnV4X3BwYzMyLm86Ojo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElBLTMyIHRhcmdldHMuLi4KImxpbnV4LWlhMzItaWNjIiwJImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9vdXRfYXNtfSIsCiMjIyMKImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtYnBvd2VycGM2NC1saW51eCBpcyB0cmFuc2llbnQgb3B0aW9uLCAtbTY0IHNob3VsZCBiZSB0aGUgb25lIHRvIHVzZS4uLgoibGludXgtcHBjNjQiLAkiZ2NjOi1icG93ZXJwYzY0LWxpbnV4IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6OmxpbnV4X3BwYzY0Lm86Ojo6Ojo6Ojo6OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotYnBvd2VycGM2NC1saW51eDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWljYyIsImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbCAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgQkZfUFRSMiBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMjIyMgU1BBUkMgTGludXggc2V0dXBzCiMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5CiMgYXNzaXN0ZWQgd2l0aCBkZWJ1Z2dpbmcgb2YgZm9sbG93aW5nIHR3byBjb25maWdzLgoibGludXgtc3BhcmN2OCIsImdjYzotbXY4IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OnNwYXJjdjgubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2Iubzo6Ojo6Ojo6OjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBpdCdzIGEgcmVhbCBtZXNzIHdpdGggLW1jcHU9dWx0cmFzcGFyYyBvcHRpb24gdW5kZXIgTGludXgsIGJ1dAojIC1XYSwtQXY4cGx1cyBzaG91bGQgZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0LgoibGludXgtc3BhcmN2OSIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLVdhLC1BdjhwbHVzIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBBbHBoYSBMaW51eCB3aXRoIEdOVSBDIGFuZCBDb21wYXEgQyBzZXR1cHMKIyBTcGVjaWFsIG5vdGVzOgojIC0gbGludXgtYWxwaGErYnd4LWdjYyBpcyBtZW50IHRvIGJlIHVzZWQgZnJvbSAuL2NvbmZpZyBvbmx5LiBJZiB5b3UKIyAgIG91Z2h0IHRvIHJ1biAnLi9Db25maWd1cmUgbGludXgtYWxwaGErYnd4LWdjYycgbWFudWFsbHksIGRvCiMgICBjb21wbGVtZW50IHRoZSBjb21tYW5kIGxpbmUgd2l0aCAtbWNwdT1ldjU2LCAtbWNwdT1ldjYgb3Igd2hhdGV2ZXIKIyAgIHdoaWNoIGlzIGFwcHJvcHJpYXRlLgojIC0gSWYgeW91IHVzZSBjY2Mga2VlcCBpbiBtaW5kIHRoYXQgLWZhc3QgaW1wbGllcyAtYXJjaCBob3N0IGFuZCB0aGUKIyAgIGNvbXBpbGVyIGlzIGZyZWUgdG8gaXNzdWUgaW5zdHJ1Y3Rpb25zIHdoaWNoIGdvbm5hIG1ha2UgZWxkZXIgQ1BVCiMgICBjaG9rZS4gSWYgeW91IHdpc2ggdG8gYnVpbGQgImJsZW5kZWQiIHRvb2xraXQsIGFkZCAtYXJjaCBnZW5lcmljCiMgICAqYWZ0ZXIqIC1mYXN0IGFuZCBpbnZva2UgJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhLWNjYycgbWFudWFsbHkuCiMKIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgojCiJsaW51eC1hbHBoYS1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1hbHBoYStid3gtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke25vX2FzbX0iLAoibGludXgtYWxwaGErYnd4LWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHtub19hc219IiwKCiMjIyMgKkJTRCBbZG8gc2VlIGNvbW1lbnQgYWJvdXQgJHtCU0R0aHJlYWRzfSBhYm92ZSFdCiJCU0QtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4NiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X291dF9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctQlNELXg4Ni1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2FsbCAtZzo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0Qtc3BhcmN2OCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1tdjggLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOjpzcGFyY3Y4Lm86ZGVzX2VuYy1zcGFyYy5vIGZjcnlwdF9iLm86Ojo6Ojo6Ojo6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJCU0QtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgLURNRDMyX1JFR19UPWludCBkb2Vzbid0IGFjdHVhbGx5IGJlbG9uZyBpbiBzcGFyYzY0IHRhcmdldCwgaXQKIyBzaW1wbHkgKmhhcHBlbnMqIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnIGluIGdjYyAzLjMuMywKIyB0cmlnZ2VyZWQgYnkgUklQRU1EMTYwIGNvZGUuCiJCU0Qtc3BhcmM2NCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1ETUQzMl9SRUdfVD1pbnQgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMiBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODZfNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtRE1EMzJfUkVHX1Q9aW50IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJic2RpLWVsZi1nY2MiLCAgICAgImdjYzotRFBFUkw1IC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoibmV4dHN0ZXAiLAkiY2M6LU8gLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKIm5leHRzdGVwMy4zIiwJImNjOi1PMyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBOQ1IgTVAtUkFTIFVOSVggdmVyIDAyLjAzLjAxCiJuY3Itc2NkZSIsImNjOi1PNiAtWGEgLUhvZmY9QkVIQVZFRCAtNjg2IC1Id2lkZSAtSGl3OjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsIC1sYzg5OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIFFOWAoicW54NCIsCSJjYzotRExfRU5ESUFOIC1EVEVSTUlPOjoodW5rbm93bik6Ojoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306IiwKInFueDYiLAkiY2M6LURMX0VORElBTiAtRFRFUk1JT1M6Oih1bmtub3duKTo6LWxzb2NrZXQ6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIsCgojIyMjIFNDTy9DYWxkZXJhIHRhcmdldHMuCiMKIyBPcmlnaW5hbGx5IHdlIGhhZCBsaWtlIHVuaXh3YXJlLSosIHVuaXh3YXJlLSotcGVudGl1bSwgdW5peHdhcmUtKi1wNiwgZXRjLgojIE5vdyB3ZSBvbmx5IGhhdmUgYmxlbmRlZCB1bml4d2FyZS0qIGFzIGl0J3MgdGhlIG9ubHkgb25lIHVzZWQgYnkgLi9jb25maWcuCiMgSWYgeW91IHdhbnQgdG8gb3B0aW1pemUgZm9yIHBhcnRpY3VsYXIgbWljcm9hcmNoaXRlY3R1cmUsIGJ5cGFzcyAuL2NvbmZpZwojIGFuZCAnLi9Db25maWd1cmUgdW5peHdhcmUtNyAtS3BlbnRpdW1fcHJvJyBvciB3aGF0ZXZlciBhcHByb3ByaWF0ZS4KIyBOb3RlIHRoYXQgbm90IGFsbCB0YXJnZXRzIGluY2x1ZGUgYXNzZW1ibGVyIHN1cHBvcnQuIE1vc3RseSBiZWNhdXNlIG9mCiMgbGFjayBvZiBtb3RpdmF0aW9uIHRvIHN1cHBvcnQgb3V0LW9mLWRhdGUgcGxhdGZvcm1zIHdpdGggb3V0LW9mLWRhdGUKIyBjb21waWxlciBkcml2ZXJzIGFuZCBhc3NlbWJsZXJzLiBUaW0gUmljZSA8dGltQG11bHRpdGFsZW50cy5uZXQ+IGhhcwojIHBhdGllbnRseSBhc3Npc3RlZCB0byBkZWJ1ZyBtb3N0IG9mIGl0LgojCiMgVW5peFdhcmUgMi4weCBmYWlscyBkZXN0ZXN0IHdpdGggLU8uCiJ1bml4d2FyZS0yLjAiLCJjYzotREZJTElPX0ggLUROT19TVFJJTkdTX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTIuMSIsImNjOi1PIC1ERklMSU9fSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtNyIsImNjOi1PIC1ERklMSU9fSCAtS2FsbG9jYTo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCAke3g4Nl9nY2NfZGVzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnI1LXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoidW5peHdhcmUtNy1nY2MiLCJnY2M6LURMX0VORElBTiAtREZJTElPX0ggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpnbnUtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgU0NPIDUgLSBCZW4gTGF1cmllIDxiZW5AYWxncm91cC5jby51az4gc2F5cyB0aGUgLU8gYnJlYWtzIHRoZSBTQ08gY2MuCiJzY281LWNjIiwgICJjYzotYmVsZjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNjbzUtZ2NjIiwgICJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnIzLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBJQk0ncyBBSVguCiJhaXgzLWNjIiwgICJjYzotTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0OjoodW5rbm93bik6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjo6OiIsCiJhaXgtZ2NjIiwgICJnY2M6LU8gLURCX0VORElBTjo6LURfVEhSRUFEX1NBRkU6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjo6YWl4X3BwYzMyLm86Ojo6Ojo6Ojo6OmRsZmNuOiIsCiJhaXg2NC1nY2MiLCJnY2M6LU8gLURCX0VORElBTjo6LURfVEhSRUFEX1NBRkU6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOjphaXhfcHBjNjQubzo6Ojo6Ojo6Ojo6ZGxmY246Ojo6OjotWDY0IiwKIyBCZWxvdyB0YXJnZXRzIGFzc3VtZSBBSVggNS4gSWRlYSBpcyB0byBlZmZlY3RpdmVseSBkaXNyZWdhcmQgJE9CSkVDVF9NT0RFCiMgYXQgYnVpbGQgdGltZS4gJE9CSkVDVF9NT0RFIGlzIHJlc3BlY3RlZCBhdCAuL2NvbmZpZyBzdGFnZSEKImFpeC1jYyIsICAgImNjOi1xMzIgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6LXF0aHJlYWRlZDpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOjphaXhfcHBjMzIubzo6Ojo6Ojo6Ojo6ZGxmY246YWl4LXNoYXJlZDo6LXEzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtY2MiLCAiY2M6LXE2NCAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0OjoodW5rbm93bik6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOjphaXhfcHBjNjQubzo6Ojo6Ojo6Ojo6ZGxmY246YWl4LXNoYXJlZDo6LXE2NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggNjQiLAoKIwojIENyYXkgVDkwIGFuZCBzaW1pbGFyIChTRFNDKQojIEl0J3MgQmlnLWVuZGlhbiwgYnV0IHRoZSBhbGdvcml0aG1zIHdvcmsgcHJvcGVybHkgd2hlbiBCX0VORElBTiBpcyBOT1QKIyBkZWZpbmVkLiAgVGhlIFQ5MCBpbnRzIGFuZCBsb25ncyBhcmUgOCBieXRlcyBsb25nLCBhbmQgYXBwYXJlbnRseSB0aGUKIyBCX0VORElBTiBjb2RlIGFzc3VtZXMgNCBieXRlIGludHMuICBGb3J0dW5hdGVseSwgdGhlIG5vbi1CX0VORElBTiBhbmQKIyBub24gTF9FTkRJQU4gY29kZSBhbGlnbnMgdGhlIGJ5dGVzIGluIGVhY2ggd29yZCBjb3JyZWN0bHkuCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgaXMgdG8gYXZvaWQgdHdvIGZhdGFsIGNvbXBpbGVyIGVycm9yczoKIydUYWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBiaXQgZmllbGQgaXMgbm90IGFsbG93ZWQuICcKIydBbiBleHByZXNzaW9uIHdpdGggYml0IGZpZWxkIGV4aXN0cyBhcyB0aGUgb3BlcmFuZCBvZiAic2l6ZW9mIiAnCiMgKHdyaXR0ZW4gYnkgV2F5bmUgU2Nocm9lZGVyIDxzY2hyb2VkZUBTRFNDLkVEVT4pCiMKIyBqOTAgaXMgY29uc2lkZXJlZCB0aGUgYmFzZSBtYWNoaW5lIHR5cGUgZm9yIHVuaWNvcyBtYWNoaW5lcywKIyBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgbm93IGNhbGxlZCAiY3JheS1qOTAiIC4uLgoiY3JheS1qOTAiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQ6OjoiLAoKIwojIENyYXkgVDNFIChSZXNlYXJjaCBDZW50ZXIgSnVlbGljaCwgYmVja21hbkBhY2wubGFubC5nb3YpCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgd2FzIHdyaXR0ZW4gZm9yIHRoZSBDOTAgKGl0IHNlZW1zKS4gIEkgYWRkZWQKIyBhbm90aGVyIHVzZS4gIEJhc2ljYWxseSwgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgVDNFIHVzZXMgc29tZSBiaXQgZmllbGRzCiMgZm9yIHNvbWUgc3RfYWRkciBzdHVmZiwgYW5kIHRoZW4gc2l6ZW9mIGFuZCBhZGRyZXNzLW9mIGZhaWxzCiMgSSBjb3VsZCBub3QgdXNlIHRoZSBhbXMvYWxwaGEubyBvcHRpb24gYmVjYXVzZSB0aGUgQ3JheSBhc3NlbWJsZXIsICdjYW0nCiMgZGlkIG5vdCBsaWtlIGl0LgoiY3JheS10M2UiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UOjo6IiwKCiMgREdVWCwgODgxMDAuCiJkZ3V4LVIzLWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQteDg2LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKCiMgU2luaXgvUmVsaWFudFVOSVggUk00MDAKIyBOT1RFOiBUaGUgQ0RTKysgQ29tcGlsZXIgdXAgdG8gVjIuMEJzb21ldGhpbmcgaGFzIHRoZSBJUklYX0NDX0JVRyBvcHRpbWl6ZXIgcHJvYmxlbS4gQmV0dGVyIHVzZSAtZyAgKi8KIlJlbGlhbnRVTklYIiwiY2M6LUtQSUMgLWcgLURURVJNSU9TIC1EQl9FTkRJQU46Oi1LdGhyZWFkOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpCTl9MTE9ORyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246cmVsaWFudHVuaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiU0lOSVgiLCJjYzotTzo6KHVua25vd24pOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoiU0lOSVgtTiIsIi91c3IvdWNiL2NjOi1PMiAtbWlzYWxpZ25lZDo6KHVua25vd24pOjotbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoKIyBTSUVNRU5TIEJTMjAwMC9PU0Q6IGFuIEVCQ0RJQy1iYXNlZCBtYWluZnJhbWUKIkJTMjAwMC1PU0QiLCJjODk6LU8gLVhMTE1MIC1YTExNSyAtWEwgLURCX0VORElBTiAtRFRFUk1JT1MgLURDSEFSU0VUX0VCQ0RJQzo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIE9TLzM5MCBVbml4IGFuIEVCQ0RJQy1iYXNlZCBVbml4IHN5c3RlbSBvbiBJQk0gbWFpbmZyYW1lCiMgWW91IG5lZWQgdG8gY29tcGlsZSB1c2luZyB0aGUgYzg5LnNoIHdyYXBwZXIgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUKIyBJQk0gY29tcGlsZXIgZG9lcyBub3QgbGlrZSB0aGUgLUwgc3dpdGNoIGFmdGVyIGFueSBvYmplY3QgbW9kdWxlcy4KIwoiT1MzOTAtVW5peCIsImM4OS5zaDotTyAtREJfRU5ESUFOIC1EQ0hBUlNFVF9FQkNESUMgLUROT19TWVNfUEFSQU1fSCAgLURfQUxMX1NPVVJDRTo6KHVua25vd24pOjo6VEhJUlRZX1RXT19CSVQgREVTX1BUUiBERVNfVU5ST0xMIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBCRl9QVFI6OjoiLAoKIyBXaW42NCB0YXJnZXRzLCBXSU42NEkgZGVub3RlcyBJQS02NCBhbmQgV0lONjRBIC0gQU1ENjQKIlZDLVdJTjY0SSIsImNsOjo6OldJTjY0STo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoke25vX2FzbX06d2luMzIiLAoiVkMtV0lONjRBIiwiY2w6Ojo6V0lONjRBOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOiR7bm9fYXNtfTp3aW4zMiIsCgojIFZpc3VhbCBDIHRhcmdldHMKIlZDLU5UIiwiY2w6Ojo6V0lOTlQ6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoiVkMtQ0UiLCJjbDo6OjpXSU5DRTo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJWQy1XSU4zMiIsImNsOjo6OldJTjMyOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQm9ybGFuZCBDKysgNC41CiJCQy0zMiIsImJjYzMyOjo6OldJTjMyOjpCTl9MTE9ORyBERVNfUFRSIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOOiR7bm9fYXNtfTp3aW4zMiIsCgojIE1pbkdXCiJtaW5ndyIsICJnY2M6LW1uby1jeWd3aW4gLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGwgLURfV0lOMzJfV0lOTlQ9MHgzMzM6OjpNSU5HVzMyOi1sd3NvY2szMiAtbGdkaTMyOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfSBFWFBPUlRfVkFSX0FTX0ZOOiR7eDg2X2NvZmZfYXNtfTp3aW4zMjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTCAtRE9QRU5TU0xfVVNFX0FQUExJTks6LW1uby1jeWd3aW4gLXNoYXJlZDouZGxsLmEiLAoKIyBVV0lOIAoiVVdJTiIsICJjYzotRFRFUk1JT1MgLURMX0VORElBTiAtTyAtV2FsbDo6OlVXSU46OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoKIyBDeWd3aW4KIkN5Z3dpbi1wcmUxLjMiLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbTQ4NiAtV2FsbDo6KHVua25vd24pOkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKIkN5Z3dpbiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjo6Q1lHV0lOMzI6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9jb2ZmX2FzbX06ZGxmY246Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LXNoYXJlZDouZGxsLmEiLAoiZGVidWctQ3lnd2luIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtbWFyY2g9aTQ4NiAtV2FsbCAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZyAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XZXJyb3I6OjpDWUdXSU4zMjo6OiR7bm9fYXNtfTpkbGZjbjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotc2hhcmVkOi5kbGwuYSIsCgojIE5ldFdhcmUgZnJvbSBEYXZpZCBXYXJkIChkc3dhcmRAbm92ZWxsLmNvbSkgLSByZXF1aXJlcyBNZXRyb1dlcmtzIE5MTSBkZXZlbG9wbWVudCB0b29scwojIG5ldHdhcmUtY2xpYiA9PiBsZWdhY3kgQ0xpYiBjLXJ1bnRpbWUgc3VwcG9ydAoibmV0d2FyZS1jbGliIiwgIm13Y2NubG06Ojo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCiMgbmV0d2FyZS1saWJjID0+IExpYkMvTktTIHN1cHBvcnQKIyBOZXRXYXJlIGRlZmF1bHRzIHNvY2tldCBiaW8gdG8gV2luU29jayBzb2NrZXRzLiBIb3dldmVyLCB0aGUgTGliQyBidWlsZCBjYW4gYmUKIyBjb25maWd1cmVkIHRvIHVzZSBCU0Qgc29ja2V0cyBpbnN0ZWFkLgoibmV0d2FyZS1saWJjIiwgIm13Y2NubG06Ojo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWxpYmMtYnNkc29jayIsICJtd2NjbmxtOjo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbGliYy9pbmNsdWRlIC1JL25kay9saWJjL2luY2x1ZGUvd2luc29jayAtRExfRU5ESUFOIC1ETkVUV0FSRV9MSUJDIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLURURVJNSU8gLU8yIC1XYWxsOjo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCgojIERKR1BQCiJESkdQUCIsICJnY2M6LUkvZGV2L2Vudi9XQVRUX1JPT1QvaW5jIC1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMiAtV2FsbDo6Ok1TRE9TOi1ML2Rldi9lbnYvV0FUVF9ST09UL2xpYiAtbHdhdHQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X291dF9hc219OiIsCgojIFVsdHJpeCBmcm9tIEJlcm5oYXJkIFNpbW9uIDxzaW1vbkB6aWQudHV3aWVuLmFjLmF0PgoidWx0cml4LWNjIiwiY2M6LXN0ZDEgLU8gLU9saW1pdCAyNTAwIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoidWx0cml4LWdjYyIsImdjYzotTzMgLURMX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkc6Ojo6IiwKIyBLJlIgQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkOyB5b3UgbmVlZCBnY2Mgb24gb2xkIFVsdHJpeCBpbnN0YWxsYXRpb25zCiMjInVsdHJpeCIsImNjOi1PMiAtRE5PUFJPVE8gLUROT0NPTlNUIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoKIyMjIyMgTWFjT1MgWCAoYS5rLmEuIFJoYXBzb2R5IG9yIERhcndpbikgc2V0dXAKInJoYXBzb2R5LXBwYy1jYyIsImNjOi1PMyAtREJfRU5ESUFOOjoodW5rbm93bik6TUFDT1NYX1JIQVBTT0RZOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OjoiLAoiZGFyd2luLXBwYy1jYyIsImNjOi1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjo6b3N4X3BwYzMyLm86Ojo6Ojo6Ojo6OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luLWkzODYtY2MiLCJjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1wcGMtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURCX0VORElBTiAtZyAtV2FsbCAtTzo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjpvc3hfcHBjMzIubzo6Ojo6Ojo6Ojo6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQzotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCgojIyMjIyBBL1VYCiJhdXgzLWdjYyIsImdjYzotTzIgLURURVJNSU86Oih1bmtub3duKTpBVVg6LWxic2Q6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjo6IiwKCiMjIyMjIFNvbnkgTkVXUy1PUyA0LngKIm5ld3NvczQtZ2NjIiwiZ2NjOi1PIC1EQl9FTkRJQU46Oih1bmtub3duKTpORVdTNDotbG1sZCAtbGliZXJ0eTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6Ojo6IiwKCiMjIyMjIEdOVSBIdXJkCiJodXJkLXg4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUMiLAoKIyMjIyMgT1MvMiBFTVgKIk9TMi1FTVgiLCAiZ2NjOjo6Ojo6OjoiLAoKIyMjIyMgVnhXb3JrcyBmb3IgdmFyaW91cyB0YXJnZXRzCiJ2eHdvcmtzLXBwYzQwNSIsImNjcHBjOi1nIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzQwNSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAiLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCBcJChERUJVR19GTEFHKTo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MC1kZWJ1ZyIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUcgLWc6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM4NjAiLCJjY3BwYzotbm9zdGRpbmMgLW1zb2Z0LWZsb2F0IC1EQ1BVPVBQQzg2MCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1taXBzbGUiLCJjY21pcHM6LUJcJChXSU5EX0JBU0UpL2hvc3QvXCQoV0lORF9IT1NUX1RZUEUpL2xpYi9nY2MtbGliLyAtRExfRU5ESUFOIC1FTCAtV2wsLUVMIC1taXBzMiAtbW5vLWJyYW5jaC1saWtlbHkgLUcgMCAtZm5vLWJ1aWx0aW4gLW1zb2Z0LWZsb2F0IC1EQ1BVPU1JUFMzMiAtRE1JUFNFTCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjoke25vX2FzbX06Ojo6OjpyYW5saWJtaXBzOiIsCgojIyMjIyBDb21wYXEgTm9uLVN0b3AgS2VybmVsIChUYW5kZW0pCiJ0YW5kZW0tYzg5IiwiYzg5Oi1XdyAtRF9fVEFOREVNIC1EX1hPUEVOX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSAtRF9UQU5ERU1fU09VUkNFIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUOjo6IiwKCik7CgpteSBATUsxTUZfQnVpbGRzPXF3KFZDLVdJTjY0SSBWQy1XSU42NEEKCQkgICAgVkMtTlQgVkMtQ0UgVkMtV0lOMzIKCQkgICAgQkMtMzIgT1MyLUVNWCBuZXR3YXJlLWNsaWIgbmV0d2FyZS1saWJjIG5ldHdhcmUtbGliYy1ic2Rzb2NrKTsKCm15ICRpZHggPSAwOwpteSAkaWR4X2NjID0gJGlkeCsrOwpteSAkaWR4X2NmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF91bmlzdGQgPSAkaWR4Kys7Cm15ICRpZHhfdGhyZWFkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3N5c19pZCA9ICRpZHgrKzsKbXkgJGlkeF9sZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfYm5fb3BzID0gJGlkeCsrOwpteSAkaWR4X2NwdWlkX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9hZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JmX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tZDVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3NoYTFfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Nhc3Rfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcm1kMTYwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3dwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9kc29fc2NoZW1lID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF90YXJnZXQgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9sZGZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2V4dGVuc2lvbiA9ICRpZHgrKzsKbXkgJGlkeF9yYW5saWIgPSAkaWR4Kys7Cm15ICRpZHhfYXJmbGFncyA9ICRpZHgrKzsKCm15ICRwcmVmaXg9IiI7Cm15ICRvcGVuc3NsZGlyPSIiOwpteSAkZXhlX2V4dD0iIjsKbXkgJGluc3RhbGxfcHJlZml4PSIiOwpteSAkbm9fdGhyZWFkcz0wOwpteSAkdGhyZWFkcz0wOwpteSAkbm9fc2hhcmVkPTA7ICMgYnV0ICJuby1zaGFyZWQiIGlzIGRlZmF1bHQKbXkgJHpsaWI9MTsgICAgICAjIGJ1dCAibm8temxpYiIgaXMgZGVmYXVsdApteSAkbm9fa3JiNT0wOyAgICMgYnV0ICJuby1rcmI1IiBpcyBpbXBsaWVkIHVubGVzcyAiLS13aXRoLWtyYjUtLi4uIiBpcyB1c2VkCm15ICRub19hc209MDsKbXkgJG5vX2Rzbz0wOwpteSAkbm9fZ21wPTA7Cm15IEBza2lwPSgpOwpteSAkTWFrZWZpbGU9Ik1ha2VmaWxlIjsKbXkgJGRlc19sb2NsPSJjcnlwdG8vZGVzL2Rlc19sb2NsLmgiOwpteSAkZGVzCT0iY3J5cHRvL2Rlcy9kZXMuaCI7Cm15ICRibgk9ImNyeXB0by9ibi9ibi5oIjsKbXkgJG1kMgk9ImNyeXB0by9tZDIvbWQyLmgiOwpteSAkcmM0CT0iY3J5cHRvL3JjNC9yYzQuaCI7Cm15ICRyYzRfbG9jbD0iY3J5cHRvL3JjNC9yYzRfbG9jbC5oIjsKbXkgJGlkZWEJPSJjcnlwdG8vaWRlYS9pZGVhLmgiOwpteSAkcmMyCT0iY3J5cHRvL3JjMi9yYzIuaCI7Cm15ICRiZgk9ImNyeXB0by9iZi9iZl9sb2NsLmgiOwpteSAkYm5fYXNtCT0iYm5fYXNtLm8iOwpteSAkZGVzX2VuYz0iZGVzX2VuYy5vIGZjcnlwdF9iLm8iOwpteSAkYWVzX2VuYz0iYWVzX2NvcmUubyBhZXNfY2JjLm8iOwpteSAkYmZfZW5jCT0iYmZfZW5jLm8iOwpteSAkY2FzdF9lbmM9ImNfZW5jLm8iOwpteSAkcmM0X2VuYz0icmM0X2VuYy5vIjsKbXkgJHJjNV9lbmM9InJjNV9lbmMubyI7Cm15ICRtZDVfb2JqPSIiOwpteSAkc2hhMV9vYmo9IiI7Cm15ICRybWQxNjBfb2JqPSIiOwpteSAkcHJvY2Vzc29yPSIiOwpteSAkZGVmYXVsdF9yYW5saWI7Cm15ICRwZXJsOwoKCiMgQWxsIG9mIHRoZSBmb2xsb3dpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAoUkM1IHdhcyBlbmFibGVkIGJlZm9yZSAwLjkuOCk6CgpteSAlZGlzYWJsZWQgPSAoICMgIndoYXQiICAgICAgICAgPT4gImNvbW1lbnQiCgkJICJnbXAiCQkgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAibWRjMiIgICAgICAgICAgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAicmM1IiAgICAgICAgICAgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAic2hhcmVkIiAgICAgICAgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAiemxpYiIgICAgICAgICAgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAiemxpYi1keW5hbWljIiAgID0+ICJkZWZhdWx0IgogICAgICAgICAgICAgICApOwoKIyBBZGRpdGlvbmFsICJuby0uLi4iIG9wdGlvbnMgd2lsbCBiZSBjb2xsZWN0ZWQgaW4gJWRpc2FibGVkLgojIFRvIHJlbW92ZSBzb21ldGhpbmcgZnJvbSAlZGlzYWJsZWQsIHVzZSBlLmcuICJlbmFibGUtcmM1Ii4KIyBGb3Igc3ltbWV0cnksICJkaXNhYmxlLS4uLiIgaXMgYSBzeW5vbnltIGZvciAibm8tLi4uIi4KCiMgVGhpcyBpcyB3aGF0ICRkZXBmbGFncyB3aWxsIGxvb2sgbGlrZSB3aXRoIHRoZSBhYm92ZSBkZWZhdWx0OgpteSAkZGVmYXVsdF9kZXBmbGFncyA9ICItRE9QRU5TU0xfTk9fR01QIC1ET1BFTlNTTF9OT19NREMyIC1ET1BFTlNTTF9OT19SQzUgIjsKCgpteSAkbm9fc3NlMj0wOwoKJnVzYWdlIGlmICgkI0FSR1YgPCAwKTsKCm15ICRmbGFnczsKbXkgJGRlcGZsYWdzOwpteSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKbXkgJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM7Cm15ICRvcGVuc3NsX3N5c19kZWZpbmVzPSIiOwpteSAkb3BlbnNzbF9vdGhlcl9kZWZpbmVzOwpteSAkbGliczsKbXkgJGxpYmtyYjU9IiI7Cm15ICR0YXJnZXQ7Cm15ICRvcHRpb25zOwpteSAkc3ltbGluazsKbXkgJG1ha2VfZGVwZW5kPTA7Cm15ICV3aXRoYXJncz0oKTsKCm15IEBhcmd2Y29weT1AQVJHVjsKbXkgJGFyZ3ZzdHJpbmc9IiI7Cm15ICRhcmd2X3VucHJvY2Vzc2VkPTE7Cgp3aGlsZSgkYXJndl91bnByb2Nlc3NlZCkKCXsKCSRmbGFncz0iIjsKCSRkZXBmbGFncz0iIjsKCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX290aGVyX2RlZmluZXM9IiI7CgkkbGlicz0iIjsKCSR0YXJnZXQ9IiI7Cgkkb3B0aW9ucz0iIjsKCSRzeW1saW5rPTE7CgoJJGFyZ3ZfdW5wcm9jZXNzZWQ9MDsKCSRhcmd2c3RyaW5nPWpvaW4oJyAnLEBhcmd2Y29weSk7CgpQUk9DRVNTX0FSR1M6Cglmb3JlYWNoIChAYXJndmNvcHkpCgkJewoJCXMgL14tbm8tL25vLS87ICMgc29tZSBwZW9wbGUganVzdCBjYW4ndCByZWFkIHRoZSBpbnN0cnVjdGlvbnMKCgkJIyByZXdyaXRlIHNvbWUgb3B0aW9ucyBpbiAiZW5hYmxlLS4uLiIgZm9ybQoJCXMgL14tPy0/c2hhcmVkJC9lbmFibGUtc2hhcmVkLzsKCQlzIC9edGhyZWFkcyQvZW5hYmxlLXRocmVhZHMvOwoJCXMgL156bGliJC9lbmFibGUtemxpYi87CgkJcyAvXnpsaWItZHluYW1pYyQvZW5hYmxlLXpsaWItZHluYW1pYy87CgoJCWlmICgvXm5vLSguKykkLyB8fCAvXmRpc2FibGUtKC4rKSQvKQoJCQl7CgkJCWlmICgkMSBlcSAic3NsIikKCQkJCXsKCQkJCSRkaXNhYmxlZHsic3NsMiJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCSRkaXNhYmxlZHsic3NsMyJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCX0KCQkJZWxzaWYgKCQxIGVxICJ0bHMiKQoJCQkJewoJCQkJJGRpc2FibGVkeyJ0bHMxIn0gPSAib3B0aW9uKHRscykiCgkJCQl9CgkJCWVsc2UKCQkJCXsKCQkJCSRkaXNhYmxlZHskMX0gPSAib3B0aW9uIjsKCQkJCX0KCQkJfQkJCQoJCWVsc2lmICgvXmVuYWJsZS0oLispJC8pCgkJCXsKCQkJZGVsZXRlICRkaXNhYmxlZHskMX07CgoJCQkkdGhyZWFkcyA9IDEgaWYgKCQxIGVxICJ0aHJlYWRzIik7CgkJCX0KCQllbHNpZiAoL14tLXRlc3Qtc2FuaXR5JC8pCgkJCXsKCQkJZXhpdCgmdGVzdF9zYW5pdHkoKSk7CgkJCX0KCQllbHNpZiAoL15yZWNvbmZpZ3VyZS8gfHwgL15yZWNvbmYvKQoJCQl7CgkJCWlmIChvcGVuKElOLCI8JE1ha2VmaWxlIikpCgkJCQl7CgkJCQl3aGlsZSAoPElOPikKCQkJCQl7CgkJCQkJY2hvcDsKCQkJCQlpZiAoL15DT05GSUdVUkVfQVJHUz0oLiopLykKCQkJCQkJewoJCQkJCQkkYXJndnN0cmluZz0kMTsKCQkJCQkJQGFyZ3Zjb3B5PXNwbGl0KCcgJywkYXJndnN0cmluZyk7CgkJCQkJCWRpZSAiSW5jb3JyZWN0IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iCgkJCQkJCQlpZiAoZ3JlcCgvXnJlY29uZi8sQGFyZ3Zjb3B5KSk7CgkJCQkJCXByaW50ICJSZWNvbmZpZ3VyaW5nIHdpdGg6ICRhcmd2c3RyaW5nXG4iOwoJCQkJCQkkYXJndl91bnByb2Nlc3NlZD0xOwoJCQkJCQljbG9zZShJTik7CgkJCQkJCWxhc3QgUFJPQ0VTU19BUkdTOwoJCQkJCQl9CgkJCQkJfQoJCQkJY2xvc2UoSU4pOwoJCQkJfQoJCQlkaWUgIkluc3VmZmljaWVudCBkYXRhIHRvIHJlY29uZmlndXJlLCBwbGVhc2UgZG8gYSBub3JtYWwgY29uZmlndXJhdGlvblxuIjsKCQkJfQoJCWVsc2lmICgvXjM4NiQvKQoJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9CgkJZWxzaWYgKC9ecnNhcmVmJC8pCgkJCXsKCQkJIyBObyBSU0FyZWYgc3VwcG9ydCBhbnkgbW9yZSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCgkJCSMgVGhlIGNoZWNrIGZvciB0aGUgb3B0aW9uIGlzIHRoZXJlIHNvIHNjcmlwdHMgYXJlbid0CgkJCSMgYnJva2VuCgkJCX0KCQllbHNpZiAoL15bLStdLykKCQkJewoJCQlpZiAoL14tW2xMXSguKikkLyBvciAvXi1XbCwvKQoJCQkJewoJCQkJJGxpYnMuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLVteLV0vIG9yIC9eXCsvKQoJCQkJewoJCQkJJGZsYWdzLj0kXy4iICI7CgkJCQl9CgkJCWVsc2lmICgvXi0tcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRwcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0tb3BlbnNzbGRpcj0oLiopJC8pCgkJCQl7CgkJCQkkb3BlbnNzbGRpcj0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC1rcmI1LShkaXJ8bGlifGluY2x1ZGV8Zmxhdm9yKT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7ImtyYjUtIi4kMX09JDI7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC16bGliLWxpYj0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7InpsaWItbGliIn09JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC16bGliLWluY2x1ZGU9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJ6bGliLWluY2x1ZGUifT0iLUkkMSI7CgkJCQl9CgkJCWVsc2UKCQkJCXsKCQkJCXByaW50IFNUREVSUiAkdXNhZ2U7CgkJCQlleGl0KDEpOwoJCQkJfQoJCQl9CgkJZWxzaWYgKCRfID1+IC9eKFteOl0rKTooLispJC8pCgkJCXsKCQkJZXZhbCAiXCR0YWJsZXtcJDF9ID0gXCIkMlwiIjsgIyBhbGxvdyAkeHh4IGNvbnN0cnVjdHMgaW4gdGhlIHN0cmluZwoJCQkkdGFyZ2V0PSQxOwoJCQl9CgkJZWxzZQoJCQl7CgkJCWRpZSAidGFyZ2V0IGFscmVhZHkgZGVmaW5lZCAtICR0YXJnZXQgKG9mZmVuZGluZyBhcmc6ICRfKVxuIiBpZiAoJHRhcmdldCBuZSAiIik7CgkJCSR0YXJnZXQ9JF87CgkJCX0KCgkJdW5sZXNzICgkXyBlcSAkdGFyZ2V0IHx8IC9ebm8tLyB8fCAvXmRpc2FibGUtLykKCQkJewoJCQkjICJuby0uLi4iIGZvbGxvd3MgbGF0ZXIgYWZ0ZXIgaW1wbGllZCBkaXNhY3RpdmF0aW9ucwoJCQkjIGhhdmUgYmVlbiBkZXJpdmVkLiAgKERvbid0IHRha2UgdGhpcyB0b28gc2Vyb2l1c2x5LAoJCQkjIHdlIHJlYWxseSBvbmx5IHdyaXRlIE9QVElPTlMgdG8gdGhlIE1ha2VmaWxlIG91dCBvZgoJCQkjIG5vc3RhbGdpYS4pCgoJCQlpZiAoJG9wdGlvbnMgZXEgIiIpCgkJCQl7ICRvcHRpb25zID0gJF87IH0KCQkJZWxzZQoJCQkJeyAkb3B0aW9ucyAuPSAiICIuJF87IH0KCQkJfQoJCX0KCX0KCgoKaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpCgl7CgkkZGlzYWJsZWR7InNzZTIifSA9ICJmb3JjZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSkgfHwgJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9IGVxICIiKQoJewoJJGRpc2FibGVkeyJrcmI1In0gPSAia3JiNS1mbGF2b3Igbm90IHNwZWNpZmllZCI7Cgl9CgppZiAoIWRlZmluZWQoJGRpc2FibGVkeyJ6bGliLWR5bmFtaWMifSkpCgl7CgkjICJ6bGliLWR5bmFtaWMiIHdhcyBzcGVjaWZpY2FsbHkgZW5hYmxlZCwgc28gZW5hYmxlICJ6bGliIgoJZGVsZXRlICRkaXNhYmxlZHsiemxpYiJ9OwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJyaWpuZGFlbCJ9KSkKCXsKCSRkaXNhYmxlZHsiYWVzIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJkZXMifSkpCgl7CgkkZGlzYWJsZWR7Im1kYzIifSA9ICJmb3JjZWQiOwoJfQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImVjIn0pKQoJewoJJGRpc2FibGVkeyJlY2RzYSJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7ImVjZGgifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMi4wIHJlcXVpcmVzIE1ENSBhbmQgUlNBCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJyc2EifSkpCgl7CgkkZGlzYWJsZWR7InNzbDIifSA9ICJmb3JjZWQiOwoJfQoKIyBTU0wgMy4wIGFuZCBUTFMgcmVxdWlyZXMgTUQ1IGFuZCBTSEEgYW5kIGVpdGhlciBSU0Egb3IgRFNBK0RICmlmIChkZWZpbmVkKCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJzaGEifSkKICAgIHx8IChkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pCiAgICAgICAgJiYgKGRlZmluZWQoJGRpc2FibGVkeyJkc2EifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7ImRoIn0pKSkpCgl7CgkkZGlzYWJsZWR7InNzbDMifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJ0bHMxIn0gPSAiZm9yY2VkIjsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsidGxzMSJ9KSkKCXsKCSRkaXNhYmxlZHsidGxzZXh0In0gPSAiZm9yY2VkIjsKCX0KCmlmICgkdGFyZ2V0IGVxICJUQUJMRSIpIHsKCWZvcmVhY2ggJHRhcmdldCAoc29ydCBrZXlzICV0YWJsZSkgewoJCXByaW50X3RhYmxlX2VudHJ5KCR0YXJnZXQpOwoJfQoJZXhpdCAwOwp9CgppZiAoJHRhcmdldCBlcSAiTElTVCIpIHsKCWZvcmVhY2ggKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludDsKCQlwcmludCAiXG4iOwoJfQoJZXhpdCAwOwp9CgppZiAoJHRhcmdldCA9fiBtL15DeWdXaW4zMigtLiopJC8pIHsKCSR0YXJnZXQgPSAiQ3lnd2luIi4kMTsKfQoKcHJpbnQgIkNvbmZpZ3VyaW5nIGZvciAkdGFyZ2V0XG4iOwoKJnVzYWdlIGlmICghZGVmaW5lZCgkdGFibGV7JHRhcmdldH0pKTsKCgpmb3JlYWNoIChzb3J0IChrZXlzICVkaXNhYmxlZCkpCgl7Cgkkb3B0aW9ucyAuPSAiIG5vLSRfIjsKCglwcmludGYgIiAgICBuby0lLTEycyAlLTEwcyIsICRfLCAiWyRkaXNhYmxlZHskX31dIjsKCglpZiAoL15kc28kLykKCQl7ICRub19kc28gPSAxOyB9CgllbHNpZiAoL150aHJlYWRzJC8pCgkJeyAkbm9fdGhyZWFkcyA9IDE7IH0KCWVsc2lmICgvXnNoYXJlZCQvKQoJCXsgJG5vX3NoYXJlZCA9IDE7IH0KCWVsc2lmICgvXnpsaWIkLykKCQl7ICR6bGliID0gMDsgfQoJZWxzaWYgKC9ec3RhdGljLWVuZ2luZSQvKQoJCXsgfQoJZWxzaWYgKC9eemxpYi1keW5hbWljJC8pCgkJeyB9CgllbHNpZiAoL15zeW1saW5rcyQvKQoJCXsgJHN5bWxpbmsgPSAwOyB9CgllbHNpZiAoL15zc2UyJC8pCgkJeyAkbm9fc3NlMiA9IDE7IH0KCWVsc2UKCQl7CgkJbXkgKCRBTEdPLCAkYWxnbyk7CgkJKCRBTEdPID0gJGFsZ28gPSAkXykgPX4gdHIvW2Etel0vW0EtWl0vOwoKCQlpZiAoL15hc20kLyB8fCAvXmVyciQvIHx8IC9eaHckLyB8fCAvXmh3LS8pCgkJCXsKCQkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJCQlwcmludCAiIE9QRU5TU0xfTk9fJEFMR08iOwoJCQoJCQlpZiAoL15lcnIkLykJeyAkZmxhZ3MgLj0gIi1ET1BFTlNTTF9OT19FUlIgIjsgfQoJCQllbHNpZiAoL15hc20kLykJeyAkbm9fYXNtID0gMTsgfQoJCQl9CgkJZWxzZQoJCQl7CgkJCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkJCXByaW50ICIgT1BFTlNTTF9OT18kQUxHTyI7CgoJCQlpZiAoL15rcmI1JC8pCgkJCQl7ICRub19rcmI1ID0gMTsgfQoJCQllbHNlCgkJCQl7CgkJCQlwdXNoIEBza2lwLCAkYWxnbzsKCQkJCXByaW50ICIgKHNraXAgZGlyKSI7CgoJCQkJJGRlcGZsYWdzIC49Ii1ET1BFTlNTTF9OT18kQUxHTyAiOwoJCQkJfQoJCQl9CgkJfQoKCXByaW50ICJcbiI7Cgl9CgoKbXkgJElzTUsxTUY9c2NhbGFyIGdyZXAgL14kdGFyZ2V0JC8sQE1LMU1GX0J1aWxkczsKCiRJc01LMU1GPTEgaWYgKCR0YXJnZXQgZXEgIm1pbmd3IiAmJiAkXk8gbmUgImN5Z3dpbiIpOwoKJGV4ZV9leHQ9Ii5leGUiIGlmICgkdGFyZ2V0IGVxICJDeWd3aW4iIHx8ICR0YXJnZXQgZXEgIkRKR1BQIiB8fCAkdGFyZ2V0IGVxICJtaW5ndyIpOwokZXhlX2V4dD0iLnBtIiAgaWYgKCR0YXJnZXQgPX4gL3Zvcy8pOwokb3BlbnNzbGRpcj0iL3Vzci9sb2NhbC9zc2wiIGlmICgkb3BlbnNzbGRpciBlcSAiIiBhbmQgJHByZWZpeCBlcSAiIik7CiRwcmVmaXg9JG9wZW5zc2xkaXIgaWYgJHByZWZpeCBlcSAiIjsKCiRkZWZhdWx0X3JhbmxpYj0gJndoaWNoKCJyYW5saWIiKSBvciAkZGVmYXVsdF9yYW5saWI9InRydWUiOwokcGVybD0kRU5WeydQRVJMJ30gb3IgJHBlcmw9JndoaWNoKCJwZXJsNSIpIG9yICRwZXJsPSZ3aGljaCgicGVybCIpCiAgb3IgJHBlcmw9InBlcmwiOwoKY2hvcCAkb3BlbnNzbGRpciBpZiAkb3BlbnNzbGRpciA9fiAvXC8kLzsKY2hvcCAkcHJlZml4IGlmICRwcmVmaXggPX4gL1wvJC87Cgokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wiIGlmICRvcGVuc3NsZGlyIGVxICIiOwokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgIX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOwoKCnByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwoKbXkgQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKbXkgJGNjID0gJGZpZWxkc1skaWR4X2NjXTsKbXkgJGNmbGFncyA9ICRmaWVsZHNbJGlkeF9jZmxhZ3NdOwpteSAkdW5pc3RkID0gJGZpZWxkc1skaWR4X3VuaXN0ZF07Cm15ICR0aHJlYWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfdGhyZWFkX2NmbGFnXTsKbXkgJHN5c19pZCA9ICRmaWVsZHNbJGlkeF9zeXNfaWRdOwpteSAkbGZsYWdzID0gJGZpZWxkc1skaWR4X2xmbGFnc107Cm15ICRibl9vcHMgPSAkZmllbGRzWyRpZHhfYm5fb3BzXTsKbXkgJGNwdWlkX29iaiA9ICRmaWVsZHNbJGlkeF9jcHVpZF9vYmpdOwpteSAkYm5fb2JqID0gJGZpZWxkc1skaWR4X2JuX29ial07Cm15ICRkZXNfb2JqID0gJGZpZWxkc1skaWR4X2Rlc19vYmpdOwpteSAkYWVzX29iaiA9ICRmaWVsZHNbJGlkeF9hZXNfb2JqXTsKbXkgJGJmX29iaiA9ICRmaWVsZHNbJGlkeF9iZl9vYmpdOwpteSAkbWQ1X29iaiA9ICRmaWVsZHNbJGlkeF9tZDVfb2JqXTsKbXkgJHNoYTFfb2JqID0gJGZpZWxkc1skaWR4X3NoYTFfb2JqXTsKbXkgJGNhc3Rfb2JqID0gJGZpZWxkc1skaWR4X2Nhc3Rfb2JqXTsKbXkgJHJjNF9vYmogPSAkZmllbGRzWyRpZHhfcmM0X29ial07Cm15ICRybWQxNjBfb2JqID0gJGZpZWxkc1skaWR4X3JtZDE2MF9vYmpdOwpteSAkcmM1X29iaiA9ICRmaWVsZHNbJGlkeF9yYzVfb2JqXTsKbXkgJHdwX29iaiA9ICRmaWVsZHNbJGlkeF93cF9vYmpdOwpteSAkZHNvX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXTsKbXkgJHNoYXJlZF90YXJnZXQgPSAkZmllbGRzWyRpZHhfc2hhcmVkX3RhcmdldF07Cm15ICRzaGFyZWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfc2hhcmVkX2NmbGFnXTsKbXkgJHNoYXJlZF9sZGZsYWcgPSAkZmllbGRzWyRpZHhfc2hhcmVkX2xkZmxhZ107Cm15ICRzaGFyZWRfZXh0ZW5zaW9uID0gJGZpZWxkc1skaWR4X3NoYXJlZF9leHRlbnNpb25dOwpteSAkcmFubGliID0gJGZpZWxkc1skaWR4X3JhbmxpYl07Cm15ICRhcmZsYWdzID0gJGZpZWxkc1skaWR4X2FyZmxhZ3NdOwoKbXkgJG5vX3NoYXJlZF93YXJuPTA7Cm15ICRub191c2VyX2NmbGFncz0wOwoKaWYgKCRmbGFncyBuZSAiIikJeyAkY2ZsYWdzPSIkZmxhZ3MkY2ZsYWdzIjsgfQplbHNlCQkJeyAkbm9fdXNlcl9jZmxhZ3M9MTsgICAgICAgfQoKIyBLZXJiZXJvcyBzZXR0aW5ncy4gIFRoZSBmbGF2b3IgbXVzdCBiZSBwcm92aWRlZCBmcm9tIG91dHNpZGUsIGVpdGhlciB0aHJvdWdoCiMgdGhlIHNjcmlwdCAiY29uZmlnIiBvciBtYW51YWxseS4KaWYgKCEkbm9fa3JiNSkKCXsKCW15ICgkbHJlc29sdiwgJGxwYXRoLCAkbGV4dCk7CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW0hoXWVpbWRhbCQvKQoJCXsKCQlkaWUgIlNvcnJ5LCBIZWltZGFsIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkXG4iOwoJCX0KCSMjIyMjIEhBQ0sgdG8gZm9yY2UgdXNlIG9mIEhlaW1kYWwuCgkjIyMjIyBXQVJOSU5HOiBTaW5jZSB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhZGVxdWF0ZSBzdXBwb3J0IGZvciBIZWltZGFsLAoJIyMjIyMgICAgICAgICAgdXNpbmcgdGhpcyB3aWxsIGJyZWFrIHRoZSBidWlsZC4gIFlvdSdsbCBoYXZlIHRvIG1ha2UKCSMjIyMjICAgICAgICAgIGNoYW5nZXMgdG8gdGhlIHNvdXJjZSwgYW5kIGlmIHlvdSBkbywgcGxlYXNlIHNlbmQKCSMjIyMjICAgICAgICAgIHBhdGNoZXMgdG8gb3BlbnNzbC1kZXZAb3BlbnNzbC5vcmcKCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15mb3JjZS1bSGhdZWltZGFsJC8pCgkJewoJCXdhcm4gIkhlaW1kYWwgaXNuJ3QgcmVhbGx5IHN1cHBvcnRlZC4gIFlvdXIgYnVpbGQgV0lMTCBicmVha1xuIjsKCQl3YXJuICJJZiB5b3UgZml4IHRoZSBwcm9ibGVtcywgcGxlYXNlIHNlbmQgYSBwYXRjaCB0byBvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmdcbiI7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3IvaGVpbWRhbCIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaSAtbGtyYjUgLWxjb21fZXJyIgoJCQlpZiAkd2l0aGFyZ3N7ImtyYjUtbGliIn0gZXEgIiIgJiYgISRJc01LMU1GOwoJCSRjZmxhZ3M9Ii1ES1JCNV9IRUlNREFMICRjZmxhZ3MiOwoJCX0KCWlmICgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gL15bTW1dW0lpXVtUdF0vKQoJCXsKCQkkd2l0aGFyZ3N7ImtyYjUtZGlyIn0gPSAiL3Vzci9rZXJiZXJvcyIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IGVxICIiOwoJCSR3aXRoYXJnc3sia3JiNS1saWIifSA9ICItTCIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LgoJCQkiL2xpYiAtbGdzc2FwaV9rcmI1IC1sa3JiNSAtbGNvbV9lcnIgLWxrNWNyeXB0byIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfTUlUICRjZmxhZ3MiOwoJCSR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiBzL15bTW1dW0lpXVtUdF1bLl8tXSovLzsKCQlpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eMVsuXy1dKlswMV0vKQoJCQl7CgkJCSRjZmxhZ3M9Ii1ES1JCNV9NSVRfT0xEMTEgJGNmbGFncyI7CgkJCX0KCQl9CglMUkVTT0xWOgoJZm9yZWFjaCAkbHBhdGggKCIvbGliIiwgIi91c3IvbGliIikKCQl7CgkJZm9yZWFjaCAkbGV4dCAoImEiLCAic28iKQoJCQl7CgkJCSRscmVzb2x2ID0gIiRscGF0aC9saWJyZXNvbHYuJGxleHQiOwoJCQlsYXN0IExSRVNPTFYJaWYgKC1yICIkbHJlc29sdiIpOwoJCQkkbHJlc29sdiA9ICIiOwoJCQl9CgkJfQoJJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IC49ICIgLWxyZXNvbHYiCgkJaWYgKCIkbHJlc29sdiIgbmUgIiIpOwoJJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSA9ICItSSIuJHdpdGhhcmdzeyJrcmI1LWRpciJ9LiIvaW5jbHVkZSIKCQlpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IGVxICIiICYmCgkJICAgJHdpdGhhcmdzeyJrcmI1LWRpciJ9IG5lICIiOwoJfQoKIyBUaGUgRFNPIGNvZGUgY3VycmVudGx5IGFsd2F5cyBpbXBsZW1lbnRzIGFsbCBmdW5jdGlvbnMgc28gdGhhdCBubwojIGFwcGxpY2F0aW9ucyB3aWxsIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhhdCBmcm9tIGEgY29tcGlsYXRpb24gcG9pbnQKIyBvZiB2aWV3LiBIb3dldmVyLCB0aGUgIm1ldGhvZCJzIG1heSByZXR1cm4gemVybyB1bmxlc3MgdGhhdCBwbGF0Zm9ybQojIGhhcyBzdXBwb3J0IGNvbXBpbGVkIGluIGZvciB0aGVtLiBDdXJyZW50bHkgZWFjaCBtZXRob2QgaXMgZW5hYmxlZAojIGJ5IGEgZGVmaW5lICJEU09fPG5hbWU+IiAuLi4gd2UgdHJhbnNsYXRlIHRoZSAiZHNvX3NjaGVtZSIgY29uZmlnCiMgc3RyaW5nIGVudHJ5IGludG8gdXNpbmcgdGhlIGZvbGxvd2luZyBsb2dpYzsKbXkgJGRzb19jZmxhZ3M7CmlmICghJG5vX2RzbyAmJiAkZHNvX3NjaGVtZSBuZSAiIikKCXsKCSRkc29fc2NoZW1lID1+IHRyL1thLXpdL1tBLVpdLzsKCWlmICgkZHNvX3NjaGVtZSBlcSAiRExGQ04iKQoJCXsKCQkkZHNvX2NmbGFncyA9ICItRERTT19ETEZDTiAtREhBVkVfRExGQ05fSCI7CgkJfQoJZWxzaWYgKCRkc29fc2NoZW1lIGVxICJETEZDTl9OT19IIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04iOwoJCX0KCWVsc2UKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fJGRzb19zY2hlbWUiOwoJCX0KCSRjZmxhZ3MgPSAiJGRzb19jZmxhZ3MgJGNmbGFncyI7Cgl9CgpteSAkdGhyZWFkX2NmbGFnczsKbXkgJHRocmVhZF9kZWZpbmVzOwppZiAoJHRocmVhZF9jZmxhZyBuZSAiKHVua25vd24pIiAmJiAhJG5vX3RocmVhZHMpCgl7CgkjIElmIHdlIGtub3cgaG93IHRvIGRvIGl0LCBzdXBwb3J0IHRocmVhZHMgYnkgZGVmYXVsdC4KCSR0aHJlYWRzID0gMTsKCX0KaWYgKCR0aHJlYWRfY2ZsYWcgZXEgIih1bmtub3duKSIgJiYgJHRocmVhZHMpCgl7CgkjIElmIHRoZSB1c2VyIGFza2VkIGZvciAidGhyZWFkcyIsIFtzXWhlIGlzIGFsc28gZXhwZWN0ZWQgdG8KCSMgcHJvdmlkZSBhbnkgc3lzdGVtLWRlcGVuZGVudCBjb21waWxlciBvcHRpb25zIHRoYXQgYXJlCgkjIG5lY2Vzc2FyeS4KCWlmICgkbm9fdXNlcl9jZmxhZ3MpCgkJewoJCXByaW50ICJZb3UgYXNrZWQgZm9yIG11bHRpLXRocmVhZGluZyBzdXBwb3J0LCBidXQgZGlkbid0XG4iOwoJCXByaW50ICJwcm92aWRlIGFueSBzeXN0ZW0tc3BlY2lmaWMgY29tcGlsZXIgb3B0aW9uc1xuIjsKCQlleGl0KDEpOwoJCX0KCSR0aHJlYWRfY2ZsYWdzPSItRE9QRU5TU0xfVEhSRUFEUyAkY2ZsYWdzIiA7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwoJfQplbHNlCgl7CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJHRocmVhZF9jZmxhZyAkY2ZsYWdzIjsKCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX1RIUkVBRFNcbiI7CiMJbXkgJGRlZjsKIwlmb3JlYWNoICRkZWYgKHNwbGl0ICcgJywkdGhyZWFkX2NmbGFnKQojCQl7CiMJCWlmICgkZGVmID1+IHMvXi1ELy8gJiYgJGRlZiAhfiAvXl8vKQojCQkJewojCQkJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lICRkZWZcbiI7CiMJCQl9CiMJCX0KCX0JCgokbGZsYWdzPSIkbGlicyRsZmxhZ3MiIGlmICgkbGlicyBuZSAiIik7CgppZiAoJG5vX2FzbSkKCXsKCSRjcHVpZF9vYmo9JGJuX29iaj0kZGVzX29iaj0kYWVzX29iaj0kYmZfb2JqPSRjYXN0X29iaj0kcmM0X29iaj0kcmM1X29iaj0kd3Bfb2JqPSIiOwoJJHNoYTFfb2JqPSRtZDVfb2JqPSRybWQxNjBfb2JqPSIiOwoJfQoKaWYgKCEkbm9fc2hhcmVkKQoJewoJJGNhc3Rfb2JqPSIiOwkjIENBU1QgYXNzZW1ibGVyIGlzIG5vdCBQSUMKCX0KCmlmICgkdGhyZWFkcykKCXsKCSRjZmxhZ3M9JHRocmVhZF9jZmxhZ3M7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcyAuPSAkdGhyZWFkX2RlZmluZXM7Cgl9CgppZiAoJHpsaWIpCgl7CgkkY2ZsYWdzID0gIi1EWkxJQiAkY2ZsYWdzIjsKCWlmIChkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJCXsKCQkkbGZsYWdzID0gIiRsZmxhZ3MgLWx6IjsKCQl9CgllbHNlCgkJewoJCSRjZmxhZ3MgPSAiLURaTElCX1NIQVJFRCAkY2ZsYWdzIjsKCQl9Cgl9CgojIFlvdSB3aWxsIGZpbmQgc2hsaWJfbWFyazEgYW5kIHNobGliX21hcmsyIGV4cGxhaW5lZCBpbiBNYWtlZmlsZS5vcmcKbXkgJHNoYXJlZF9tYXJrID0gIiI7CmlmICgkc2hhcmVkX3RhcmdldCBlcSAiIikKCXsKCSRub19zaGFyZWRfd2FybiA9IDEgaWYgISRub19zaGFyZWQ7Cgkkbm9fc2hhcmVkID0gMTsKCX0KaWYgKCEkbm9fc2hhcmVkKQoJewoJaWYgKCRzaGFyZWRfY2ZsYWcgbmUgIiIpCgkJewoJCSRjZmxhZ3MgPSAiJHNoYXJlZF9jZmxhZyAtRE9QRU5TU0xfUElDICRjZmxhZ3MiOwoJCX0KCX0KCmlmICghJElzTUsxTUYpCgl7CglpZiAoJG5vX3NoYXJlZCkKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORVxuIjsKCQl9CgllbHNlCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fU1RBVElDX0VOR0lORVxuIjsKCQl9Cgl9CgokY3B1aWRfb2JqLj0iIHVwbGluay5vIHVwbGluay1jb2YubyIgaWYgKCRjZmxhZ3MgPX4gL1wtRE9QRU5TU0xfVVNFX0FQUExJTksvKTsKIyBDb21waWxlciBmaXgtdXBzCmlmICgkdGFyZ2V0ID1+IC9pY2MkLykKCXsKCW15KCRpY2N2ZXIpPWAkY2MgLVYgMj4mMWA7CglpZiAoJGljY3ZlciA9fiAvVmVyc2lvbiAoWzAtOV0rKVwuLykJeyAkaWNjdmVyPSQxOyB9CgllbHNlCQkJCQl7ICRpY2N2ZXI9MDsgIH0KCWlmICgkaWNjdmVyPj04KQoJCXsKCQkjIEVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmN5IGZyb20gbGliaXJjLmEuIFRoaXMgaXMKCQkjIGVzc2VudGlhbCBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCwgYXMgb3RoZXJ3aXNlCgkJIyBhcHBzL29wZW5zc2wgY2FuIGVuZCB1cCBpbiBlbmRsZXNzIGxvb3AgdXBvbiBzdGFydHVwLi4uCgkJJGNmbGFncy49IiAtRG1lbWNweT1fX2J1aWx0aW5fbWVtY3B5IC1EbWVtc2V0PV9fYnVpbHRpbl9tZW1zZXQiOwoJCX0KCX0KCmlmICgkc3lzX2lkIG5lICIiKQoJewoJIyRjZmxhZ3M9Ii1ET1BFTlNTTF9TWVNOQU1FXyRzeXNfaWQgJGNmbGFncyI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iI2RlZmluZSBPUEVOU1NMX1NZU05BTUVfJHN5c19pZFxuIjsKCX0KCmlmICgkcmFubGliIGVxICIiKQoJewoJJHJhbmxpYiA9ICRkZWZhdWx0X3JhbmxpYjsKCX0KCiNteSAoJGJuMSk9c3BsaXQoL1xzKy8sJGJuX29iaik7CiMkYm4xID0gIiIgdW5sZXNzIGRlZmluZWQgJGJuMTsKIyRibjE9JGJuX2FzbSB1bmxlc3MgKCRibjEgPX4gL1wubyQvKTsKIyRibl9vYmo9IiRibjEiOwoKJGNwdWlkX29iaj0iIiBpZiAoJHByb2Nlc3NvciBlcSAiMzg2Iik7CgokYm5fb2JqID0gJGJuX2FzbSB1bmxlc3MgJGJuX29iaiBuZSAiIjsKIyBibjg2KiBpcyB0aGUgb25seSBvbmUgaW1wbGVtZW50aW5nIGJuXypfcGFydF93b3JkcwokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fUEFSVF9XT1JEUyIgaWYgKCRibl9vYmogPX4gL2JuODYvKTsKJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRub19zc2UyICYmICRibl9vYmogPX4gL2JuODYvKTsKCiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvXC1tb250fG1vODZcLS8pOwoKJGRlc19vYmo9JGRlc19lbmMJdW5sZXNzICgkZGVzX29iaiA9fiAvXC5vJC8pOwokYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29iaiA9fiAvXC5vJC8pOwokY2FzdF9vYmo9JGNhc3RfZW5jCXVubGVzcyAoJGNhc3Rfb2JqID1+IC9cLm8kLyk7CiRyYzRfb2JqPSRyYzRfZW5jCXVubGVzcyAoJHJjNF9vYmogPX4gL1wubyQvKTsKJHJjNV9vYmo9JHJjNV9lbmMJdW5sZXNzICgkcmM1X29iaiA9fiAvXC5vJC8pOwppZiAoJHNoYTFfb2JqID1+IC9cLm8kLykKCXsKIwkkc2hhMV9vYmo9JHNoYTFfZW5jOwoJJGNmbGFncy49IiAtRFNIQTFfQVNNIiAgIGlmICgkc2hhMV9vYmogPX4gL3N4ODYvIHx8ICRzaGExX29iaiA9fiAvc2hhMS8pOwoJJGNmbGFncy49IiAtRFNIQTI1Nl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTI1Ni8pOwoJJGNmbGFncy49IiAtRFNIQTUxMl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTUxMi8pOwoJaWYgKCRzaGExX29iaiA9fiAvc3g4Ni8pCgkgICAgewlpZiAoJG5vX3NzZTIpCgkJeyAgICRzaGExX29iaiA9fiBzL1xTKnNzZTJcUysvLzsgICAgICAgIH0KCQllbHNpZiAoJGNmbGFncyAhfiAvT1BFTlNTTF9JQTMyX1NTRTIvKQoJCXsgICAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiOyAgICB9CgkgICAgfQoJfQppZiAoJG1kNV9vYmogPX4gL1wubyQvKQoJewojCSRtZDVfb2JqPSRtZDVfZW5jOwoJJGNmbGFncy49IiAtRE1ENV9BU00iOwoJfQppZiAoJHJtZDE2MF9vYmogPX4gL1wubyQvKQoJewojCSRybWQxNjBfb2JqPSRybWQxNjBfZW5jOwoJJGNmbGFncy49IiAtRFJNRDE2MF9BU00iOwoJfQppZiAoJGFlc19vYmogPX4gL1wubyQvKQoJewoJJGNmbGFncy49IiAtREFFU19BU00iOwoJfQplbHNlCXsKCSRhZXNfb2JqPSRhZXNfZW5jOwoJfQokd3Bfb2JqPSIiIGlmICgkd3Bfb2JqID1+IC9tbXgvICYmICRwcm9jZXNzb3IgZXEgIjM4NiIpOwppZiAoJHdwX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EV0hJUkxQT09MX0FTTSI7Cgl9CmVsc2UJewoJJHdwX29iaj0id3BfYmxvY2subyI7Cgl9CgojICJTdHJpbmdpZnkiIHRoZSBDIGZsYWdzIHN0cmluZy4gIFRoaXMgcGVybWl0cyBpdCB0byBiZSBtYWRlIHBhcnQgb2YgYSBzdHJpbmcKIyBhbmQgd29ya3MgYXMgd2VsbCBvbiBjb21tYW5kIGxpbmVzLgokY2ZsYWdzID1+IHMvKFtcXFwiXSkvXFxcMS9nOwoKbXkgJHZlcnNpb24gPSAidW5rbm93biI7Cm15ICR2ZXJzaW9uX251bSA9ICJ1bmtub3duIjsKbXkgJG1ham9yID0gInVua25vd24iOwpteSAkbWlub3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl92ZXJzaW9uX251bWJlciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25faGlzdG9yeSA9ICJ1bmtub3duIjsKbXkgJHNobGliX21ham9yID0gInVua25vd24iOwpteSAkc2hsaWJfbWlub3IgPSAidW5rbm93biI7CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2x2LmgnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIG9wZW5zc2x2Lmg6JCFcbiI7CndoaWxlICg8SU4+KQoJewoJJHZlcnNpb249JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5URVhULipPcGVuU1NMIChcUyspIC87CgkkdmVyc2lvbl9udW09JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5OVU1CRVIuKjB4KFxTKykvOwoJJHNobGliX3ZlcnNpb25fbnVtYmVyPSQxIGlmIC9TSExJQl9WRVJTSU9OX05VTUJFUiAqIihbXiJdKykiLzsKCSRzaGxpYl92ZXJzaW9uX2hpc3Rvcnk9JDEgaWYgL1NITElCX1ZFUlNJT05fSElTVE9SWSAqIihbXiJdKikiLzsKCX0KY2xvc2UoSU4pOwppZiAoJHNobGliX3ZlcnNpb25faGlzdG9yeSBuZSAiIikgeyAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IC49ICI6IjsgfQoKaWYgKCR2ZXJzaW9uID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJG1ham9yPSQxOwoJJG1pbm9yPSQyOwoJfQoKaWYgKCRzaGxpYl92ZXJzaW9uX251bWJlciA9fiAvKF5bMC05XSopXC4oWzAtOVwuXSopLykKCXsKCSRzaGxpYl9tYWpvcj0kMTsKCSRzaGxpYl9taW5vcj0kMjsKCX0KCm9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gTWFrZWZpbGUub3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CndoaWxlICg8SU4+KQoJewoJY2hvcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhbIAldKSRkaXIgL1wxLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwoJcy9eVkVSU0lPTj0uKi9WRVJTSU9OPSR2ZXJzaW9uLzsKCXMvXk1BSk9SPS4qL01BSk9SPSRtYWpvci87CglzL15NSU5PUj0uKi9NSU5PUj0kbWlub3IvOwoJcy9eU0hMSUJfVkVSU0lPTl9OVU1CRVI9LiovU0hMSUJfVkVSU0lPTl9OVU1CRVI9JHNobGliX3ZlcnNpb25fbnVtYmVyLzsKCXMvXlNITElCX1ZFUlNJT05fSElTVE9SWT0uKi9TSExJQl9WRVJTSU9OX0hJU1RPUlk9JHNobGliX3ZlcnNpb25faGlzdG9yeS87CglzL15TSExJQl9NQUpPUj0uKi9TSExJQl9NQUpPUj0kc2hsaWJfbWFqb3IvOwoJcy9eU0hMSUJfTUlOT1I9LiovU0hMSUJfTUlOT1I9JHNobGliX21pbm9yLzsKCXMvXlNITElCX0VYVD0uKi9TSExJQl9FWFQ9JHNoYXJlZF9leHRlbnNpb24vOwoJcy9eSU5TVEFMTFRPUD0uKiQvSU5TVEFMTFRPUD0kcHJlZml4LzsKCXMvXk9QRU5TU0xESVI9LiokL09QRU5TU0xESVI9JG9wZW5zc2xkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglzL15DQz0uKiQvQ0M9ICRjYy87CglzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOwoJcy9eQ0ZMQUc9LiokL0NGTEFHPSAkY2ZsYWdzLzsKCXMvXkRFUEZMQUc9LiokL0RFUEZMQUc9ICRkZXBmbGFncy87CglzL15FWF9MSUJTPS4qJC9FWF9MSUJTPSAkbGZsYWdzLzsKCXMvXkVYRV9FWFQ9LiokL0VYRV9FWFQ9ICRleGVfZXh0LzsKCXMvXkNQVUlEX09CSj0uKiQvQ1BVSURfT0JKPSAkY3B1aWRfb2JqLzsKCXMvXkJOX0FTTT0uKiQvQk5fQVNNPSAkYm5fb2JqLzsKCXMvXkRFU19FTkM9LiokL0RFU19FTkM9ICRkZXNfb2JqLzsKCXMvXkFFU19BU01fT0JKPS4qJC9BRVNfQVNNX09CSj0gJGFlc19vYmovOwoJcy9eQkZfRU5DPS4qJC9CRl9FTkM9ICRiZl9vYmovOwoJcy9eQ0FTVF9FTkM9LiokL0NBU1RfRU5DPSAkY2FzdF9vYmovOwoJcy9eUkM0X0VOQz0uKiQvUkM0X0VOQz0gJHJjNF9vYmovOwoJcy9eUkM1X0VOQz0uKiQvUkM1X0VOQz0gJHJjNV9vYmovOwoJcy9eTUQ1X0FTTV9PQko9LiokL01ENV9BU01fT0JKPSAkbWQ1X29iai87CglzL15TSEExX0FTTV9PQko9LiokL1NIQTFfQVNNX09CSj0gJHNoYTFfb2JqLzsKCXMvXlJNRDE2MF9BU01fT0JKPS4qJC9STUQxNjBfQVNNX09CSj0gJHJtZDE2MF9vYmovOwoJcy9eV1BfQVNNX09CSj0uKiQvV1BfQVNNX09CSj0gJHdwX29iai87CglzL15QUk9DRVNTT1I9LiovUFJPQ0VTU09SPSAkcHJvY2Vzc29yLzsKCXMvXlJBTkxJQj0uKi9SQU5MSUI9ICRyYW5saWIvOwoJcy9eQVJGTEFHUz0uKi9BUkZMQUdTPSAkYXJmbGFncy87CglzL15QRVJMPS4qL1BFUkw9ICRwZXJsLzsKCXMvXktSQjVfSU5DTFVERVM9LiovS1JCNV9JTkNMVURFUz0kd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LzsKCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwoJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxpYi1saWIifS87CglzL15aTElCX0lOQ0xVREU9LiovWkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOwoJcy9eU0hMSUJfVEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87CglzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKCXMvXlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9TU0wpLyBpZiAoISRub19zaGFyZWQpOwoJaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSokLykKCQl7CgkJbXkgJHNvdG1wID0gJDE7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0ucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLmR5bGliJC8pCgkJewoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LmR5bGliLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKlwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAuXCQoU0hMSUJfTUFKT1IpIC5zJHNvdG1wLzsKCQl9CgllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRlbnNpb24gPX4gL15cLlteXC5dKlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5cJChTSExJQl9NQUpPUikuZHlsaWIgLmR5bGliLzsKCQl9CglzL15TSEFSRURfTERGTEFHUz0uKi9TSEFSRURfTERGTEFHUz0kc2hhcmVkX2xkZmxhZy87CglwcmludCBPVVQgJF8uIlxuIjsKCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoJE1ha2VmaWxlLCIkTWFrZWZpbGUuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZVxuIiBpZiAtZSAkTWFrZWZpbGU7CnJlbmFtZSgiJE1ha2VmaWxlLm5ldyIsJE1ha2VmaWxlKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlLm5ld1xuIjsKCnByaW50ICJDQyAgICAgICAgICAgID0kY2NcbiI7CnByaW50ICJDRkxBRyAgICAgICAgID0kY2ZsYWdzXG4iOwpwcmludCAiRVhfTElCUyAgICAgICA9JGxmbGFnc1xuIjsKcHJpbnQgIkNQVUlEX09CSiAgICAgPSRjcHVpZF9vYmpcbiI7CnByaW50ICJCTl9BU00gICAgICAgID0kYm5fb2JqXG4iOwpwcmludCAiREVTX0VOQyAgICAgICA9JGRlc19vYmpcbiI7CnByaW50ICJBRVNfQVNNX09CSiAgID0kYWVzX29ialxuIjsKcHJpbnQgIkJGX0VOQyAgICAgICAgPSRiZl9vYmpcbiI7CnByaW50ICJDQVNUX0VOQyAgICAgID0kY2FzdF9vYmpcbiI7CnByaW50ICJSQzRfRU5DICAgICAgID0kcmM0X29ialxuIjsKcHJpbnQgIlJDNV9FTkMgICAgICAgPSRyYzVfb2JqXG4iOwpwcmludCAiTUQ1X09CSl9BU00gICA9JG1kNV9vYmpcbiI7CnByaW50ICJTSEExX09CSl9BU00gID0kc2hhMV9vYmpcbiI7CnByaW50ICJSTUQxNjBfT0JKX0FTTT0kcm1kMTYwX29ialxuIjsKcHJpbnQgIlBST0NFU1NPUiAgICAgPSRwcm9jZXNzb3JcbiI7CnByaW50ICJSQU5MSUIgICAgICAgID0kcmFubGliXG4iOwpwcmludCAiQVJGTEFHUyAgICAgICA9JGFyZmxhZ3NcbiI7CnByaW50ICJQRVJMICAgICAgICAgID0kcGVybFxuIjsKcHJpbnQgIktSQjVfSU5DTFVERVMgPSIsJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSwiXG4iCglpZiAkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9IG5lICIiOwoKbXkgJGRlc19wdHI9MDsKbXkgJGRlc19yaXNjMT0wOwpteSAkZGVzX3Jpc2MyPTA7Cm15ICRkZXNfdW5yb2xsPTA7Cm15ICRibl9sbD0wOwpteSAkZGVmX2ludD0yOwpteSAkcmM0X2ludD0kZGVmX2ludDsKbXkgJG1kMl9pbnQ9JGRlZl9pbnQ7Cm15ICRpZGVhX2ludD0kZGVmX2ludDsKbXkgJHJjMl9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzRfaWR4PTA7Cm15ICRyYzRfY2h1bms9MDsKbXkgJGJmX3B0cj0wOwpteSBAdHlwZT0oImNoYXIiLCJzaG9ydCIsImludCIsImxvbmciKTsKbXkgKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCk7Cm15ICRleHBvcnRfdmFyX2FzX2ZuPTA7CgpteSAkZGVzX2ludDsKCmZvcmVhY2ggKHNvcnQgc3BsaXQoL1xzKy8sJGJuX29wcykpCgl7CgkkZGVzX3B0cj0xIGlmIC9ERVNfUFRSLzsKCSRkZXNfcmlzYzE9MSBpZiAvREVTX1JJU0MxLzsKCSRkZXNfcmlzYzI9MSBpZiAvREVTX1JJU0MyLzsKCSRkZXNfdW5yb2xsPTEgaWYgL0RFU19VTlJPTEwvOwoJJGRlc19pbnQ9MSBpZiAvREVTX0lOVC87CgkkYm5fbGw9MSBpZiAvQk5fTExPTkcvOwoJJHJjNF9pbnQ9MCBpZiAvUkM0X0NIQVIvOwoJJHJjNF9pbnQ9MyBpZiAvUkM0X0xPTkcvOwoJJHJjNF9pZHg9MSBpZiAvUkM0X0lOREVYLzsKCSRyYzRfY2h1bms9MSBpZiAvUkM0X0NIVU5LLzsKCSRyYzRfY2h1bms9MiBpZiAvUkM0X0NIVU5LX0xMLzsKCSRtZDJfaW50PTAgaWYgL01EMl9DSEFSLzsKCSRtZDJfaW50PTMgaWYgL01EMl9MT05HLzsKCSRpZGVhX2ludD0xIGlmIC9JREVBX1NIT1JULzsKCSRpZGVhX2ludD0zIGlmIC9JREVBX0xPTkcvOwoJJHJjMl9pbnQ9MSBpZiAvUkMyX1NIT1JULzsKCSRyYzJfaW50PTMgaWYgL1JDMl9MT05HLzsKCSRiZl9wdHI9MSBpZiAkXyBlcSAiQkZfUFRSIjsKCSRiZl9wdHI9MiBpZiAkXyBlcSAiQkZfUFRSMiI7CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwxLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDEsMCwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklUX0xPTkcvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwxLDAsMCkgaWYgL1RISVJUWV9UV09fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwxLDApIGlmIC9TSVhURUVOX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMCwxKSBpZiAvRUlHSFRfQklULzsKCSRleHBvcnRfdmFyX2FzX2ZuPTEgaWYgL0VYUE9SVF9WQVJfQVNfRk4vOwoJfQoKb3BlbihJTiwnPGNyeXB0by9vcGVuc3NsY29uZi5oLmluJykgfHwgZGllICJ1bmFibGUgdG8gcmVhZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbjokIVxuIjsKdW5saW5rKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIiBpZiAtZSAiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IjsKb3BlbihPVVQsJz5jcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXcnKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iOwpwcmludCBPVVQgIi8qIG9wZW5zc2xjb25mLmggKi9cbiI7CnByaW50IE9VVCAiLyogV0FSTklORzogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBvcGVuc3NsY29uZi5oLmluIGJ5IENvbmZpZ3VyZS4gKi9cblxuIjsKCnByaW50IE9VVCAiLyogT3BlblNTTCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczogKi9cbiI7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID0gJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID1+IHMvXlxzKiNccypkZWZpbmVccytPUEVOU1NMXyguKikvIyBpZiBkZWZpbmVkKE9QRU5TU0xfJDEpIFwmXCYgIWRlZmluZWQoJDEpXG4jICBkZWZpbmUgJDFcbiMgZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzID0gIiAgIC8qIG5vIGNpcGhlcnMgZXhjbHVkZWQgKi9cbiIgaWYgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgZXEgIiI7CiRvcGVuc3NsX3RocmVhZF9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX3N5c19kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX290aGVyX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKcHJpbnQgT1VUICRvcGVuc3NsX3N5c19kZWZpbmVzOwpwcmludCBPVVQgIiNpZm5kZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EXG5cbiI7CnByaW50IE9VVCAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKcHJpbnQgT1VUICJcbiNlbmRpZiAvKiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQgKi9cbiI7CnByaW50IE9VVCAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKcHJpbnQgT1VUICRvcGVuc3NsX290aGVyX2RlZmluZXMsIlxuIjsKCnByaW50IE9VVCAiLyogVGhlIE9QRU5TU0xfTk9fKiBtYWNyb3MgYXJlIGFsc28gZGVmaW5lZCBhcyBOT18qIGlmIHRoZSBhcHBsaWNhdGlvblxuIjsKcHJpbnQgT1VUICIgICBhc2tzIGZvciBpdC4gIFRoaXMgaXMgYSB0cmFuc2llbnQgZmVhdHVyZSB0aGF0IGlzIHByb3ZpZGVkIGZvciB0aG9zZVxuIjsKcHJpbnQgT1VUICIgICB3aG8gaGF2ZW4ndCBoYWQgdGhlIHRpbWUgdG8gZG8gdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gdGhlaXJcbiI7CnByaW50IE9VVCAiICAgYXBwbGljYXRpb25zLiAgKi9cbiI7CnByaW50IE9VVCAiI2lmZGVmIE9QRU5TU0xfQUxHT1JJVEhNX0RFRklORVNcbiI7CnByaW50IE9VVCAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFuczsKcHJpbnQgT1VUICIjZW5kaWZcblxuIjsKCnByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX0NQVUlEX09CSlxuXG4iIGlmICgkY3B1aWRfb2JqKTsKCndoaWxlICg8SU4+KQoJewoJaWYJKC9eI2RlZmluZVxzK09QRU5TU0xESVIvKQoJCXsgcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xESVIgXCIkb3BlbnNzbGRpclwiXG4iOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrRU5HSU5FU0RJUi8pCgkJeyBwcmludCBPVVQgIiNkZWZpbmUgRU5HSU5FU0RJUiBcIiRwcmVmaXgvbGliL2VuZ2luZXNcIlxuIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK09QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTi8pCgkJeyBwcmludGYgT1VUICIjdW5kZWYgT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OXG4iCgkJCWlmICRleHBvcnRfdmFyX2FzX2ZuOwoJCSAgcHJpbnRmIE9VVCAiIyVzIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIiwKCQkJKCRleHBvcnRfdmFyX2FzX2ZuKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrT1BFTlNTTF9VTklTVEQvKQoJCXsKCQkkdW5pc3RkID0gIjx1bmlzdGQuaD4iIGlmICR1bmlzdGQgZXEgIiI7CgkJcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xfVU5JU1REICR1bmlzdGRcbiI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklUX0xPTkcvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRZX0ZPVVJfQklUX0xPTkdcbiIsKCRiNjRsKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVFlfRk9VUl9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRZX0ZPVVJfQklUXG4iLCgkYjY0KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrVEhJUlRZX1RXT19CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFRISVJUWV9UV09fQklUXG4iLCgkYjMyKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVEVFTl9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRFRU5fQklUXG4iLCgkYjE2KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrRUlHSFRfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBFSUdIVF9CSVRcbiIsKCRiOCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0JOX0xMT05HXHMqJC8pCgkJeyBwcmludGYgT1VUICIjJXMgQk5fTExPTkdcbiIsKCRibl9sbCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eXCNkZWZpbmVccytERVNfTE9OR1xzKy4qLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgREVTX0xPTkcgdW5zaWduZWQgJXNcbiIsCgkJCSgkZGVzX2ludCk/J2ludCc6J2xvbmcnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1BUUi8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1BUUlxuIiwoJGRlc19wdHIpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzEvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMVxuIiwoJGRlc19yaXNjMSk/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19SSVNDMi8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1JJU0MyXG4iLCgkZGVzX3Jpc2MyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1VOUk9MTC8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1VOUk9MTFxuIiwoJGRlc191bnJvbGwpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytSQzRfSU5UXHMvKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzRfaW50XTsgfQoJZWxzaWYJKC9eI3VuZGVmXHMrUkM0X0NIVU5LLykKCQl7CgkJcHJpbnRmIE9VVCAiI3VuZGVmIFJDNF9DSFVOS1xuIiBpZiAkcmM0X2NodW5rPT0wOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0NIVU5LIHVuc2lnbmVkIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MTsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MjsKCQl9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrUkM0X0lOREVYLykKCQl7IHByaW50ZiBPVVQgIiMlcyBSQzRfSU5ERVhcbiIsKCRyYzRfaWR4KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytJMzg2X09OTFkvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEkzODZfT05MWVxuIiwgKCRwcm9jZXNzb3IgZXEgIjM4NiIpPwoJCQkiZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrTUQyX0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgTUQyX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskbWQyX2ludF07IH0KCWVsc2lmCSgvXiNkZWZpbmVccytJREVBX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBJREVBX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskaWRlYV9pbnRdO30KCWVsc2lmCSgvXiNkZWZpbmVccytSQzJfSU5UXHMvKQoJCXtwcmludGYgT1VUICIjZGVmaW5lIFJDMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJHJjMl9pbnRdO30KCWVsc2lmICgvXiMoZGVmaW5lfHVuZGVmKVxzK0JGX1BUUi8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBCRl9QVFJcbiIgaWYgJGJmX3B0ciA9PSAwOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMTsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUjJcbiIgaWYgJGJmX3B0ciA9PSAyOwoJICAgICAgICB9CgllbHNlCgkJeyBwcmludCBPVVQgJF87IH0KCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oIiwiY3J5cHRvL29wZW5zc2xjb25mLmguYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oXG4iIGlmIC1lICJjcnlwdG8vb3BlbnNzbGNvbmYuaCI7CnJlbmFtZSgiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IiwiY3J5cHRvL29wZW5zc2xjb25mLmgiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3XG4iOwoKCiMgRml4IHRoZSBkYXRlCgpwcmludCAiU0lYVFlfRk9VUl9CSVRfTE9ORyBtb2RlXG4iIGlmICRiNjRsOwpwcmludCAiU0lYVFlfRk9VUl9CSVQgbW9kZVxuIiBpZiAkYjY0OwpwcmludCAiVEhJUlRZX1RXT19CSVQgbW9kZVxuIiBpZiAkYjMyOwpwcmludCAiU0lYVEVFTl9CSVQgbW9kZVxuIiBpZiAkYjE2OwpwcmludCAiRUlHSFRfQklUIG1vZGVcbiIgaWYgJGI4OwpwcmludCAiREVTX1BUUiB1c2VkXG4iIGlmICRkZXNfcHRyOwpwcmludCAiREVTX1JJU0MxIHVzZWRcbiIgaWYgJGRlc19yaXNjMTsKcHJpbnQgIkRFU19SSVNDMiB1c2VkXG4iIGlmICRkZXNfcmlzYzI7CnByaW50ICJERVNfVU5ST0xMIHVzZWRcbiIgaWYgJGRlc191bnJvbGw7CnByaW50ICJERVNfSU5UIHVzZWRcbiIgaWYgJGRlc19pbnQ7CnByaW50ICJCTl9MTE9ORyBtb2RlXG4iIGlmICRibl9sbDsKcHJpbnQgIlJDNCB1c2VzIHUkdHlwZVskcmM0X2ludF1cbiIgaWYgJHJjNF9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzRfSU5ERVggbW9kZVxuIiBpZiAkcmM0X2lkeDsKcHJpbnQgIlJDNF9DSFVOSyBpcyB1bmRlZmluZWRcbiIgaWYgJHJjNF9jaHVuaz09MDsKcHJpbnQgIlJDNF9DSFVOSyBpcyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CnByaW50ICJNRDIgdXNlcyB1JHR5cGVbJG1kMl9pbnRdXG4iIGlmICRtZDJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiSURFQSB1c2VzIHUkdHlwZVskaWRlYV9pbnRdXG4iIGlmICRpZGVhX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIlJDMiB1c2VzIHUkdHlwZVskcmMyX2ludF1cbiIgaWYgJHJjMl9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJCRl9QVFIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDE7IApwcmludCAiQkZfUFRSMiB1c2VkXG4iIGlmICRiZl9wdHIgPT0gMjsgCgppZigkSXNNSzFNRikgewoJb3BlbiAoT1VULCI+Y3J5cHRvL2J1aWxkaW5mLmgiKSB8fCBkaWUgIkNhbid0IG9wZW4gYnVpbGRpbmYuaCI7CglwcmludGYgT1VUIDw8RU9GOwojaWZuZGVmIE1LMU1GX0JVSUxECiAgLyogYXV0by1nZW5lcmF0ZWQgYnkgQ29uZmlndXJlIGZvciBjcnlwdG8vY3ZlcnNpb24uYzoKICAgKiBmb3IgVW5peCBidWlsZHMsIGNyeXB0by9NYWtlZmlsZS5zc2wgZ2VuZXJhdGVzIGZ1bmN0aW9uYWwgZGVmaW5pdGlvbnM7CiAgICogV2luZG93cyBidWlsZHMgKGFuZCBvdGhlciBtazFtZiBidWlsZHMpIGNvbXBpbGUgY3ZlcnNpb24uYyB3aXRoCiAgICogLURNSzFNRl9CVUlMRCBhbmQgdXNlIGRlZmluaXRpb25zIGFkZGVkIHRvIHRoaXMgZmlsZSBieSB1dGlsL21rMW1mLnBsLiAqLwogICNlcnJvciAiV2luZG93cyBidWlsZHMgKFBMQVRGT1JNPSR0YXJnZXQpIHVzZSBtazFtZi5wbC1jcmVhdGVkIE1ha2VmaWxlcyIKI2VuZGlmCkVPRgoJY2xvc2UoT1VUKTsKfSBlbHNlIHsKCW15ICRtYWtlX2NvbW1hbmQgPSAibWFrZSBQRVJMPVwnJHBlcmxcJyI7CglteSAkbWFrZV90YXJnZXRzID0gIiI7CgkkbWFrZV90YXJnZXRzIC49ICIgbGlua3MiIGlmICRzeW1saW5rOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGRlcGVuZCIgaWYgJGRlcGZsYWdzIG5lICRkZWZhdWx0X2RlcGZsYWdzICYmICRtYWtlX2RlcGVuZDsKCSRtYWtlX3RhcmdldHMgLj0gIiBnZW50ZXN0cyIgaWYgJHN5bWxpbms7Cgkoc3lzdGVtICRtYWtlX2NvbW1hbmQuJG1ha2VfdGFyZ2V0cykgPT0gMCBvciBleGl0ICQ/CgkJaWYgJG1ha2VfdGFyZ2V0cyBuZSAiIjsKCWlmICggJHBlcmwgPX4gbUBeL0ApIHsKCSAgICAmZG9maWxlKCJ0b29scy9jX3JlaGFzaCIsJHBlcmwsJ14jIS8nLCAnIyElcycsJ15teSBcJGRpcjskJywgJ215ICRkaXIgPSAiJyAuICRvcGVuc3NsZGlyIC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJHBlcmwsJ14jIS8nLCAnIyElcycpOwoJfSBlbHNlIHsKCSAgICAjIE5vIHBhdGggZm9yIFBlcmwga25vd24gLi4uCgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCcvdXNyL2xvY2FsL2Jpbi9wZXJsJywnXiMhLycsICcjISVzJywnXm15IFwkZGlyOyQnLCAnbXkgJGRpciA9ICInIC4gJG9wZW5zc2xkaXIgLiAnIjsnKTsKCSAgICAmZG9maWxlKCJhcHBzL0NBLnBsIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycpOwoJfQoJaWYgKCRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAhJG1ha2VfZGVwZW5kKSB7CgkJcHJpbnQgPDxFT0Y7CgpTaW5jZSB5b3UndmUgZGlzYWJsZWQgb3IgZW5hYmxlZCBhdCBsZWFzdCBvbmUgYWxnb3JpdGhtLCB5b3UgbmVlZCB0byBkbwp0aGUgZm9sbG93aW5nIGJlZm9yZSBidWlsZGluZzoKCgltYWtlIGRlcGVuZApFT0YKCX0KfQoKIyBjcmVhdGUgdGhlIG1zL3ZlcnNpb24zMi5yYyBmaWxlIGlmIG5lZWRlZAppZiAoJElzTUsxTUYpIHsKCW15ICgkdjEsICR2MiwgJHYzLCAkdjQpOwoJaWYgKCR2ZXJzaW9uX251bSA9fiAvKF5bMC05YS1mXXsxfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkvaSkgewoJCSR2MT1oZXggJDE7CgkJJHYyPWhleCAkMjsKCQkkdjM9aGV4ICQzOwoJCSR2ND1oZXggJDQ7Cgl9CglvcGVuIChPVVQsIj5tcy92ZXJzaW9uMzIucmMiKSB8fCBkaWUgIkNhbid0IG9wZW4gbXMvdmVyc2lvbjMyLnJjIjsKCXByaW50IE9VVCA8PEVPRjsKI2luY2x1ZGUgPHdpbnZlci5oPgoKTEFOR1VBR0UgMHgwOSwweDAxCgoxIFZFUlNJT05JTkZPCiAgRklMRVZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgUFJPRFVDVFZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgRklMRUZMQUdTTUFTSyAweDNmTAojaWZkZWYgX0RFQlVHCiAgRklMRUZMQUdTIDB4MDFMCiNlbHNlCiAgRklMRUZMQUdTIDB4MDBMCiNlbmRpZgogIEZJTEVPUyBWT1NfX1dJTkRPV1MzMgogIEZJTEVUWVBFIFZGVF9ETEwKICBGSUxFU1VCVFlQRSAweDBMCkJFR0lOCiAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCiAgICBCRUdJTgoJQkxPQ0sgIjA0MDkwNGIwIgoJQkVHSU4KCSAgICAvLyBSZXF1aXJlZDoJICAgIAoJICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJUaGUgT3BlblNTTCBQcm9qZWN0LCBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL1xcMCIKCSAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIk9wZW5TU0wgU2hhcmVkIExpYnJhcnlcXDAiCgkgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgojaWYgZGVmaW5lZChDUllQVE8pCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJsaWJlYXkzMlxcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJsaWJlYXkzMi5kbGxcXDAiCiNlbGlmIGRlZmluZWQoU1NMKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAic3NsZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAic3NsZWF5MzIuZGxsXFwwIgojZW5kaWYKCSAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiVGhlIE9wZW5TU0wgVG9vbGtpdFxcMCIKCSAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAiJHZlcnNpb25cXDAiCgkgICAgLy8gT3B0aW9uYWw6CgkgICAgLy9WQUxVRSAiQ29tbWVudHMiLCAiXFwwIgoJICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSAxOTk4LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gQ29weXJpZ2h0IKkgMTk5NS0xOTk4IEVyaWMgQS4gWW91bmcsIFRpbSBKLiBIdWRzb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFwwIgoJICAgIC8vVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcXDAiCgkgICAgLy9WQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgIlxcMCIKCSAgICAvL1ZBTFVFICJTcGVjaWFsQnVpbGQiLCAiXFwwIgoJRU5ECiAgICBFTkQKICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKICAgIEJFR0lOCiAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDB4NGIwCiAgICBFTkQKRU5ECkVPRgoJY2xvc2UoT1VUKTsKICB9CiAgCnByaW50IDw8RU9GOwoKQ29uZmlndXJlZCBmb3IgJHRhcmdldC4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCEkbm9fdGhyZWFkcyAmJiAhJHRocmVhZHMpOwoKVGhlIGxpYnJhcnkgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQgZm9yIHN1cHBvcnRpbmcgbXVsdGktdGhyZWFkZWQKYXBwbGljYXRpb25zIGFzIHRoZSBjb21waWxlciBvcHRpb25zIHJlcXVpcmVkIG9uIHRoaXMgc3lzdGVtIGFyZSBub3Qga25vd24uClNlZSBmaWxlIElOU1RBTEwgZm9yIGRldGFpbHMgaWYgeW91IG5lZWQgbXVsdGktdGhyZWFkaW5nLgpFT0YKCnByaW50IDw8XEVPRiBpZiAoJG5vX3NoYXJlZF93YXJuKTsKCllvdSBnYXZlIHRoZSBvcHRpb24gJ3NoYXJlZCcuICBOb3JtYWxseSwgdGhhdCB3b3VsZCBnaXZlIHlvdSBzaGFyZWQgbGlicmFyaWVzLgpVbmZvcnR1bmF0ZWx5LCB0aGUgT3BlblNTTCBjb25maWd1cmF0aW9uIGRvZXNuJ3QgaW5jbHVkZSBzaGFyZWQgbGlicmFyeSBzdXBwb3J0CmZvciB0aGlzIHBsYXRmb3JtIHlldCwgc28gaXQgd2lsbCBwcmV0ZW5kIHlvdSBnYXZlIHRoZSBvcHRpb24gJ25vLXNoYXJlZCcuICBJZgp5b3UgY2FuIGluZm9ybSB0aGUgZGV2ZWxvcHBlcnMgKG9wZW5zc2wtZGV2XEBvcGVuc3NsLm9yZykgaG93IHRvIHN1cHBvcnQgc2hhcmVkCmxpYnJhcmllcyBvbiB0aGlzIHBsYXRmb3JtLCB0aGV5IHdpbGwgYXQgbGVhc3QgbG9vayBhdCBpdCBhbmQgdHJ5IHRoZWlyIGJlc3QKKGJ1dCBwbGVhc2UgZmlyc3QgbWFrZSBzdXJlIHlvdSBoYXZlIHRyaWVkIHdpdGggYSBjdXJyZW50IHZlcnNpb24gb2YgT3BlblNTTCkuCkVPRgoKZXhpdCgwKTsKCnN1YiB1c2FnZQoJewoJcHJpbnQgU1RERVJSICR1c2FnZTsKCXByaW50IFNUREVSUiAiXG5waWNrIG9zL2NvbXBpbGVyIGZyb206XG4iOwoJbXkgJGo9MDsKCW15ICRpOwogICAgICAgIG15ICRrPTA7Cglmb3JlYWNoICRpIChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQluZXh0IGlmICRpID1+IC9eZGVidWcvOwoJCSRrICs9IGxlbmd0aCgkaSkgKyAxOwoJCWlmICgkayA+IDc4KQoJCQl7CgkJCXByaW50IFNUREVSUiAiXG4iOwoJCQkkaz1sZW5ndGgoJGkpOwoJCQl9CgkJcHJpbnQgU1RERVJSICRpIC4gIiAiOwoJCX0KCWZvcmVhY2ggJGkgKHNvcnQga2V5cyAldGFibGUpCgkJewoJCW5leHQgaWYgJGkgIX4gL15kZWJ1Zy87CgkJJGsgKz0gbGVuZ3RoKCRpKSArIDE7CgkJaWYgKCRrID4gNzgpCgkJCXsKCQkJcHJpbnQgU1RERVJSICJcbiI7CgkJCSRrPWxlbmd0aCgkaSk7CgkJCX0KCQlwcmludCBTVERFUlIgJGkgLiAiICI7CgkJfQoJcHJpbnQgU1RERVJSICJcblxuTk9URTogSWYgaW4gZG91YnQsIG9uIFVuaXgtaXNoIHN5c3RlbXMgdXNlICcuL2NvbmZpZycuXG4iOwoJZXhpdCgxKTsKCX0KCnN1YiB3aGljaAoJewoJbXkoJG5hbWUpPUBfOwoJbXkgJHBhdGg7Cglmb3JlYWNoICRwYXRoIChzcGxpdCAvOi8sICRFTlZ7UEFUSH0pCgkJewoJCWlmICgtZiAiJHBhdGgvJG5hbWUkZXhlX2V4dCIgYW5kIC14IF8pCgkJCXsKCQkJcmV0dXJuICIkcGF0aC8kbmFtZSRleGVfZXh0IiB1bmxlc3MgKCRuYW1lIGVxICJwZXJsIiBhbmQKCQkJIHN5c3RlbSgiJHBhdGgvJG5hbWUkZXhlX2V4dCAtZSAiIC4gJ1wnZXhpdCgkXTw1LjApO1wnJykpOwoJCQl9CgkJfQoJfQoKc3ViIGRvZmlsZQoJewoJbXkgJGY7IG15ICRwOyBteSAlbTsgbXkgQGE7IG15ICRrOyBteSAkZmY7CgkoJGYsJHAsJW0pPUBfOwoKCW9wZW4oSU4sIjwkZi5pbiIpIHx8IG9wZW4oSU4sIjwkZiIpIHx8IGRpZSAidW5hYmxlIHRvIG9wZW4gJGY6JCFcbiI7CglAYT08SU4+OwoJY2xvc2UoSU4pOwoJZm9yZWFjaCAkayAoa2V5cyAlbSkKCQl7CgkJZ3JlcCgvJGsvICYmICgkXz1zcHJpbnRmKCRteyRrfS4iXG4iLCRwKSksQGEpOwoJCX0KCW9wZW4oT1VULCI+JGYubmV3IikgfHwgZGllICJ1bmFibGUgdG8gb3BlbiAkZi5uZXc6JCFcbiI7CglwcmludCBPVVQgQGE7CgljbG9zZShPVVQpOwoJcmVuYW1lKCRmLCIkZi5iYWsiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJGZcbiIgaWYgLWUgJGY7CglyZW5hbWUoIiRmLm5ldyIsJGYpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkZi5uZXdcbiI7Cgl9CgpzdWIgcHJpbnRfdGFibGVfZW50cnkKCXsKCW15ICR0YXJnZXQgPSBzaGlmdDsKCgkobXkgJGNjLG15ICRjZmxhZ3MsbXkgJHVuaXN0ZCxteSAkdGhyZWFkX2NmbGFnLG15ICRzeXNfaWQsbXkgJGxmbGFncywKCW15ICRibl9vcHMsbXkgJGNwdWlkX29iaixteSAkYm5fb2JqLG15ICRkZXNfb2JqLG15ICRhZXNfb2JqLCBteSAkYmZfb2JqLAoJbXkgJG1kNV9vYmosbXkgJHNoYTFfb2JqLG15ICRjYXN0X29iaixteSAkcmM0X29iaixteSAkcm1kMTYwX29iaiwKCW15ICRyYzVfb2JqLG15ICR3cF9vYmosbXkgJGRzb19zY2hlbWUsbXkgJHNoYXJlZF90YXJnZXQsbXkgJHNoYXJlZF9jZmxhZywKCW15ICRzaGFyZWRfbGRmbGFnLG15ICRzaGFyZWRfZXh0ZW5zaW9uLG15ICRyYW5saWIsbXkgJGFyZmxhZ3MpPQoJc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoJCQkKCXByaW50IDw8RU9GCgoqKiogJHRhcmdldApcJGNjICAgICAgICAgICA9ICRjYwpcJGNmbGFncyAgICAgICA9ICRjZmxhZ3MKXCR1bmlzdGQgICAgICAgPSAkdW5pc3RkClwkdGhyZWFkX2NmbGFnID0gJHRocmVhZF9jZmxhZwpcJHN5c19pZCAgICAgICA9ICRzeXNfaWQKXCRsZmxhZ3MgICAgICAgPSAkbGZsYWdzClwkYm5fb3BzICAgICAgID0gJGJuX29wcwpcJGNwdWlkX29iaiAgICA9ICRjcHVpZF9vYmoKXCRibl9vYmogICAgICAgPSAkYm5fb2JqClwkZGVzX29iaiAgICAgID0gJGRlc19vYmoKXCRhZXNfb2JqICAgICAgPSAkYWVzX29iagpcJGJmX29iaiAgICAgICA9ICRiZl9vYmoKXCRtZDVfb2JqICAgICAgPSAkbWQ1X29iagpcJHNoYTFfb2JqICAgICA9ICRzaGExX29iagpcJGNhc3Rfb2JqICAgICA9ICRjYXN0X29iagpcJHJjNF9vYmogICAgICA9ICRyYzRfb2JqClwkcm1kMTYwX29iaiAgID0gJHJtZDE2MF9vYmoKXCRyYzVfb2JqICAgICAgPSAkcmM1X29iagpcJHdwX29iaiAgICAgICA9ICR3cF9vYmoKXCRkc29fc2NoZW1lICAgPSAkZHNvX3NjaGVtZQpcJHNoYXJlZF90YXJnZXQ9ICRzaGFyZWRfdGFyZ2V0Clwkc2hhcmVkX2NmbGFnID0gJHNoYXJlZF9jZmxhZwpcJHNoYXJlZF9sZGZsYWcgPSAkc2hhcmVkX2xkZmxhZwpcJHNoYXJlZF9leHRlbnNpb24gPSAkc2hhcmVkX2V4dGVuc2lvbgpcJHJhbmxpYiAgICAgICA9ICRyYW5saWIKXCRhcmZsYWdzICAgICAgPSAkYXJmbGFncwpFT0YKCX0KCnN1YiB0ZXN0X3Nhbml0eQoJewoJbXkgJGVycm9yY250ID0gMDsKCglwcmludCBTVERFUlIgIj0iIHggNzAsICJcbiI7CglwcmludCBTVERFUlIgIj09PSBTQU5JVFkgVEVTVElORyFcbiI7CglwcmludCBTVERFUlIgIj09PSBObyBjb25maWd1cmF0aW9uIHdpbGwgYmUgZG9uZSwgYWxsIG90aGVyIGFyZ3VtZW50cyB3aWxsIGJlIGlnbm9yZWQhXG4iOwoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoKCWZvcmVhY2ggJHRhcmdldCAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKCgkJaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lLTFdID1+IC9eKGRsfGRsZmNufHdpbjMyfHZtcykkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gdmFsdWVzXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgaW4gdGhlIHByZXZpb3VzIGZpZWxkXG4iOwoJCQl9CgkJZWxzaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lKzFdID1+IC9eKGRsfGRsZmNufHdpbjMyfHZtcykkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gdmFsdWVzXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgaW4gdGhlIGZvbGxvd2luZyBmaWVsZFxuIjsKCQkJfQoJCWVsc2lmICgkZmllbGRzWyRpZHhfZHNvX3NjaGVtZV0gIX4gL14oZGx8ZGxmY258d2luMzJ8dm1zfCkkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gZmllbGQgPSAiLCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXSwiXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgdmFsaWQgdmFsdWVzIGFyZSAnZGwnLCAnZGxmY24nLCAnd2luMzInIGFuZCAndm1zJ1xuIjsKCQkJfQoJCX0KCXByaW50IFNUREVSUiAiTm8gc2FuaXR5IGVycm9ycyBkZXRlY3RlZCFcbiIgaWYgJGVycm9yY250ID09IDA7CglyZXR1cm4gJGVycm9yY250OwoJfQo=