OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbZXhwZXJpbWVudGFsLTxjaXBoZXI+IC4uLl0gWy1EeHh4XSBbLWx4eHhdIFstTHh4eF0gWy1meHh4XSBbLUt4eHhdIFtuby1ody14eHh8bm8taHddIFtbbm8tXXRocmVhZHNdIFtbbm8tXXNoYXJlZF0gW1tuby1demxpYnx6bGliLWR5bmFtaWNdIFtuby1hc21dIFtuby1kc29dIFtuby1rcmI1XSBbMzg2XSBbLS1wcmVmaXg9RElSXSBbLS1vcGVuc3NsZGlyPU9QRU5TU0xESVJdIFstLXdpdGgteHh4Wz12dnZdXSBbLS10ZXN0LXNhbml0eV0gb3MvY29tcGlsZXJbOmZsYWdzXVxuIjsKCiMgT3B0aW9uczoKIwojIC0tb3BlbnNzbGRpciAgaW5zdGFsbCBPcGVuU1NMIGluIE9QRU5TU0xESVIgKERlZmF1bHQ6IERJUi9zc2wgaWYgdGhlCiMgICAgICAgICAgICAgICAtLXByZWZpeCBvcHRpb24gaXMgZ2l2ZW47IC91c3IvbG9jYWwvc3NsIG90aGVyd2lzZSkKIyAtLXByZWZpeCAgICAgIHByZWZpeCBmb3IgdGhlIE9wZW5TU0wgaW5jbHVkZSwgbGliIGFuZCBiaW4gZGlyZWN0b3JpZXMKIyAgICAgICAgICAgICAgIChEZWZhdWx0OiB0aGUgT1BFTlNTTERJUiBkaXJlY3RvcnkpCiMKIyAtLWluc3RhbGxfcHJlZml4ICBBZGRpdGlvbmFsIHByZWZpeCBmb3IgcGFja2FnZSBidWlsZGVycyAoZW1wdHkgYnkKIyAgICAgICAgICAgICAgIGRlZmF1bHQpLiAgVGhpcyBuZWVkbid0IGJlIHNldCBpbiBhZHZhbmNlLCB5b3UgY2FuCiMgICAgICAgICAgICAgICBqdXN0IGFzIHdlbGwgdXNlICJtYWtlIElOU1RBTExfUFJFRklYPS93aGF0ZXZlciBpbnN0YWxsIi4KIwojIC0td2l0aC1rcmI1LWRpciAgRGVjbGFyZSB3aGVyZSBLZXJiZXJvcyA1IGxpdmVzLiAgVGhlIGxpYnJhcmllcyBhcmUgZXhwZWN0ZWQKIwkJdG8gbGl2ZSBpbiB0aGUgc3ViZGlyZWN0b3J5IGxpYi8gYW5kIHRoZSBoZWFkZXIgZmlsZXMgaW4KIwkJaW5jbHVkZS8uICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojIC0td2l0aC1rcmI1LWxpYiAgRGVjbGFyZSB3aGVyZSB0aGUgS2VyYmVyb3MgNSBsaWJyYXJpZXMgbGl2ZS4gIEEgdmFsdWUgaXMKIwkJcmVxdWlyZWQuCiMJCShEZWZhdWx0OiBLUkI1X0RJUi9saWIpCiMgLS13aXRoLWtyYjUtaW5jbHVkZSAgRGVjbGFyZSB3aGVyZSB0aGUgS2VyYmVyb3MgNSBoZWFkZXIgZmlsZXMgbGl2ZS4gIEEKIwkJdmFsdWUgaXMgcmVxdWlyZWQuCiMJCShEZWZhdWx0OiBLUkI1X0RJUi9pbmNsdWRlKQojIC0td2l0aC1rcmI1LWZsYXZvciAgRGVjbGFyZSB3aGF0IGZsYXZvciBvZiBLZXJiZXJvcyA1IGlzIHVzZWQuICBDdXJyZW50bHkKIwkJc3VwcG9ydGVkIHZhbHVlcyBhcmUgIk1JVCIgYW5kICJIZWltZGFsIi4gIEEgdmFsdWUgaXMgcmVxdWlyZWQuCiMKIyAtLXRlc3Qtc2FuaXR5IE1ha2UgYSBudW1iZXIgb2Ygc2FuaXR5IGNoZWNrcyBvbiB0aGUgZGF0YSBpbiB0aGlzIGZpbGUuCiMgICAgICAgICAgICAgICBUaGlzIGlzIGEgZGVidWdnaW5nIHRvb2wgZm9yIE9wZW5TU0wgZGV2ZWxvcGVycy4KIwojIC0tY3Jvc3MtY29tcGlsZS1wcmVmaXggQWRkIHNwZWNpZmllZCBwcmVmaXggdG8gYmludXRpbHMgY29tcG9uZW50cy4KIwojIG5vLWh3LXh4eCAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMgY3J5cHRvIGhhcmR3YXJlLgojICAgICAgICAgICAgICAgR2VuZXJpYyBPcGVuU1NMLXN0eWxlIG1ldGhvZHMgcmVsYXRpbmcgdG8gdGhpcyBzdXBwb3J0CiMgICAgICAgICAgICAgICBhcmUgYWx3YXlzIGNvbXBpbGVkIGJ1dCByZXR1cm4gTlVMTCBpZiB0aGUgaGFyZHdhcmUKIyAgICAgICAgICAgICAgIHN1cHBvcnQgaXNuJ3QgY29tcGlsZWQuCiMgbm8taHcgICAgICAgICBkbyBub3QgY29tcGlsZSBzdXBwb3J0IGZvciBhbnkgY3J5cHRvIGhhcmR3YXJlLgojIFtuby1ddGhyZWFkcyAgW2Rvbid0XSB0cnkgdG8gY3JlYXRlIGEgbGlicmFyeSB0aGF0IGlzIHN1aXRhYmxlIGZvcgojICAgICAgICAgICAgICAgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMgKGRlZmF1bHQgaXMgInRocmVhZHMiIGlmIHdlCiMgICAgICAgICAgICAgICBrbm93IGhvdyB0byBkbyBpdCkKIyBbbm8tXXNoYXJlZAlbZG9uJ3RdIHRyeSB0byBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyB3aGVuIHN1cHBvcnRlZC4KIyBuby1hc20gICAgICAgIGRvIG5vdCB1c2UgYXNzZW1ibGVyCiMgbm8tZHNvICAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgbmF0aXZlIHNoYXJlZC1saWJyYXJ5IG1ldGhvZHMuIFRoaXMKIyAgICAgICAgICAgICAgIHdpbGwgZW5zdXJlIHRoYXQgYWxsIG1ldGhvZHMganVzdCByZXR1cm4gTlVMTC4KIyBuby1rcmI1ICAgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBLUkI1IGxpYnJhcnkgb3IgY29kZS4KIyBbbm8tXXpsaWIgICAgIFtkb24ndF0gY29tcGlsZSBzdXBwb3J0IGZvciB6bGliIGNvbXByZXNzaW9uLgojIHpsaWItZHluYW1pYwlMaWtlICJ6bGliIiwgYnV0IHRoZSB6bGliIGxpYnJhcnkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzaGFyZWQKIwkJbGlicmFyeSBhbmQgd2lsbCBiZSBsb2FkZWQgaW4gcnVuLXRpbWUgYnkgdGhlIE9wZW5TU0wgbGlicmFyeS4KIyAzODYgICAgICAgICAgIGdlbmVyYXRlIDgwMzg2IGNvZGUKIyBuby1zc2UyCWRpc2FibGVzIElBLTMyIFNTRTIgY29kZSwgYWJvdmUgb3B0aW9uIGltcGxpZXMgbm8tc3NlMgojIG5vLTxjaXBoZXI+ICAgYnVpbGQgd2l0aG91dCBzcGVjaWZpZWQgYWxnb3JpdGhtIChyc2EsIGlkZWEsIHJjNSwgLi4uKQojIC08eHh4PiArPHh4eD4gY29tcGlsZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggCiMKIyBERUJVR19TQUZFU1RBQ0sgdXNlIHR5cGUtc2FmZSBzdGFja3MgdG8gZW5mb3JjZSB0eXBlLXNhZmV0eSBvbiBzdGFjayBpdGVtcwojCQlwcm92aWRlZCB0byBzdGFjayBjYWxscy4gR2VuZXJhdGVzIHVuaXF1ZSBzdGFjayBmdW5jdGlvbnMgZm9yCiMJCWVhY2ggcG9zc2libGUgc3RhY2sgdHlwZS4KIyBERVNfUFRSCXVzZSBwb2ludGVyIGxvb2t1cCB2cyBhcnJheXMgaW4gdGhlIERFUyBpbiBjcnlwdG8vZGVzL2Rlc19sb2NsLmgKIyBERVNfUklTQzEJdXNlIGRpZmZlcmVudCBERVNfRU5DUllQVCBtYWNybyB0aGF0IGhlbHBzIHJlZHVjZSByZWdpc3RlcgojCQlkZXBlbmRhbmNpZXMgYnV0IG5lZWRzIHRvIG1vcmUgcmVnaXN0ZXJzLCBnb29kIGZvciBSSVNDIENQVSdzCiMgREVTX1JJU0MyCUEgZGlmZmVyZW50IFJJU0MgdmFyaWFudC4KIyBERVNfVU5ST0xMCXVucm9sbCB0aGUgaW5uZXIgREVTIGxvb3AsIHNvbWV0aW1lcyBoZWxwcywgc29tdGltZXMgaGluZGVycy4KIyBERVNfSU5UCXVzZSAnaW50JyBpbnN0ZWFkIG9mICdsb25nJyBmb3IgREVTX0xPTkcgaW4gY3J5cHRvL2Rlcy9kZXMuaAojCQlUaGlzIGlzIHVzZWQgb24gdGhlIERFQyBBbHBoYSB3aGVyZSBsb25nIGlzIDggYnl0ZXMKIwkJYW5kIGludCBpcyA0CiMgQk5fTExPTkcJdXNlIHRoZSB0eXBlICdsb25nIGxvbmcnIGluIGNyeXB0by9ibi9ibi5oCiMgTUQyX0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBNRDJfSU5UIGluIGNyeXB0by9tZDIvbWQyLmgKIyBNRDJfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIElERUFfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgSURFQV9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgUkMyX1NIT1JUCXVzZSAnc2hvcnQnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDMl9JTlQgaW4gY3J5cHRvL3JjMi9yYzIuaAojIFJDMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkM0X0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzRfSU5UIGluIGNyeXB0by9yYzQvcmM0LmgKIyBSQzRfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9JTkRFWAlkZWZpbmUgUkM0X0lOREVYIGluIGNyeXB0by9yYzQvcmM0X2xvY2wuaC4gIFRoaXMgdHVybnMgb24KIwkJYXJyYXkgbG9va3VwcyBpbnN0ZWFkIG9mIHBvaW50ZXIgdXNlLgojIFJDNF9DSFVOSwllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIChuYXR1cmFsIENQVQojCQl3b3JkKSBib3VuZGFyeS4KIyBSQzRfQ0hVTktfTEwJZW5hYmxlcyBjb2RlIHRoYXQgaGFuZGxlcyBkYXRhIGFsaWduZWQgYXQgbG9uZyBsb25nIGJvdW5kYXJ5CiMJCShpbnRlbmRlZCBmb3IgNjQtYml0IENQVXMgcnVubmluZyAzMi1iaXQgT1MpLgojIEJGX1BUUgl1c2UgJ3BvaW50ZXIgYXJpdGhtYXRpYycgZm9yIEJsb3dmaXNoICh1bnNhZmUgb24gQWxwaGEpLgojIEJGX1BUUjIJaW50ZWwgc3BlY2lmaWMgdmVyc2lvbiAoZ2VuZXJpYyB2ZXJzaW9uIGlzIG1vcmUgZWZmaWNpZW50KS4KIwojIEZvbGxvd2luZyBhcmUgc2V0IGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBzY3JpcHQKIwojIE1ENV9BU00JdXNlIHNvbWUgZXh0cmEgbWQ1IGFzc2VtYmVyLAojIFNIQTFfQVNNCXVzZSBzb21lIGV4dHJhIHNoYTEgYXNzZW1iZXIsIG11c3QgZGVmaW5lIExfRU5ESUFOIGZvciB4ODYKIyBSTUQxNjBfQVNNCXVzZSBzb21lIGV4dHJhIHJpcGVtZDE2MCBhc3NlbWJlciwKIyBTSEEyNTZfQVNNCXNoYTI1Nl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBTSEE1MTJfQVNNCXNoYTUxMl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBBRVNfQVNNCUFTRV9bZW58ZGVdY3J5cHQgaXMgaW1wbGVtZW50ZWQgaW4gYXNzZW1ibGVyCgojIE1pbmltdW0gd2FybmluZyBvcHRpb25zLi4uIGFueSBjb250cmlidXRpb25zIHRvIE9wZW5TU0wgc2hvdWxkIGF0IGxlYXN0IGdldAojIHBhc3QgdGhlc2UuIAoKbXkgJGdjY19kZXZ0ZWFtX3dhcm4gPSAiLVdhbGwgLXBlZGFudGljIC1EUEVEQU5USUMgLVduby1sb25nLWxvbmcgLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzaGFkb3cgLVdmb3JtYXQgLVdlcnJvciAtRENSWVBUT19NREVCVUdfQUxMIC1EQ1JZUFRPX01ERUJVR19BQk9SVCAtRFJFRl9DSEVDSyAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCI7CgpteSAkc3RyaWN0X3dhcm5pbmdzID0gMDsKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2FzbT0ieDg2Y3B1aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBjcnlwdDU4Ni5vOmFlcy01ODYubyBhZXNuaS14ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYtNTg2Lm8gc2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2Lm86d3BfYmxvY2subyB3cC1tbXgubzpjbWxsLXg4Ni5vOmdoYXNoLXg4Ni5vIjsKCm15ICR4ODZfZWxmX2FzbT0iJHg4Nl9hc206ZWxmIjsKCm15ICR4ODZfNjRfYXNtPSJ4ODZfNjRjcHVpZC5vOng4Nl82NC1nY2MubyB4ODZfNjQtbW9udC5vOjphZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0Lm86Om1kNS14ODZfNjQubzpzaGExLXg4Nl82NC5vIHNoYTI1Ni14ODZfNjQubyBzaGE1MTIteDg2XzY0Lm86OnJjNC14ODZfNjQubzo6OndwLXg4Nl82NC5vOmNtbGwteDg2XzY0Lm8gY21sbF9taXNjLm86Z2hhc2gteDg2XzY0Lm8iOwpteSAkaWE2NF9hc209ImlhNjRjcHVpZC5vOmJuLWlhNjQubyBpYTY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLWlhNjQubzo6bWQ1LWlhNjQubzpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86OnJjNC1pYTY0Lm8gcmM0X3NrZXkubzo6Ojo6Z2hhc2gtaWE2NC5vOnZvaWQiOwpteSAkc3BhcmN2OV9hc209InNwYXJjdjljYXAubyBzcGFyY2NwdWlkLm86Ym4tc3BhcmN2OS5vIHNwYXJjdjktbW9udC5vIHNwYXJjdjlhLW1vbnQubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2IubzphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtc3BhcmN2OS5vOjo6c2hhMS1zcGFyY3Y5Lm8gc2hhMjU2LXNwYXJjdjkubyBzaGE1MTItc3BhcmN2OS5vOjo6Ojo6OmdoYXNoLXNwYXJjdjkubzp2b2lkIjsKbXkgJHNwYXJjdjhfYXNtPSI6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6Ojo6dm9pZCI7Cm15ICRhbHBoYV9hc209ImFscGhhY3B1aWQubzpibl9hc20ubyBhbHBoYS1tb250Lm86Ojo6OnNoYTEtYWxwaGEubzo6Ojo6OjpnaGFzaC1hbHBoYS5vOnZvaWQiOwpteSAkbWlwczMyX2FzbT0iOmJuLW1pcHMubzo6YWVzX2NiYy5vIGFlcy1taXBzLm86OjpzaGExLW1pcHMubyBzaGEyNTYtbWlwcy5vOjo6Ojo6OiI7Cm15ICRtaXBzNjRfYXNtPSI6Ym4tbWlwcy5vIG1pcHMtbW9udC5vOjphZXNfY2JjLm8gYWVzLW1pcHMubzo6OnNoYTEtbWlwcy5vIHNoYTI1Ni1taXBzLm8gc2hhNTEyLW1pcHMubzo6Ojo6OjoiOwpteSAkczM5MHhfYXNtPSJzMzkweGNhcC5vIHMzOTB4Y3B1aWQubzpibi1zMzkweC5vIHMzOTB4LW1vbnQubzo6YWVzX2N0ci5vIGFlcy1zMzkweC5vOjo6c2hhMS1zMzkweC5vIHNoYTI1Ni1zMzkweC5vIHNoYTUxMi1zMzkweC5vOjpyYzQtczM5MHgubzo6Ojo6Z2hhc2gtczM5MHgubyI7Cm15ICRhcm12NF9hc209Ijpibl9hc20ubyBhcm12NC1tb250Lm86OmFlc19jYmMubyBhZXMtYXJtdjQubzo6OnNoYTEtYXJtdjQtbGFyZ2UubyBzaGEyNTYtYXJtdjQubyBzaGE1MTItYXJtdjQubzo6Ojo6OjpnaGFzaC1hcm12NC5vOnZvaWQiOwpteSAkcGFyaXNjMTFfYXNtPSJwYXJpc2NpZC5vOmJuX2FzbS5vIHBhcmlzYy1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1wYXJpc2Mubzo6OnNoYTEtcGFyaXNjLm8gc2hhMjU2LXBhcmlzYy5vIHNoYTUxMi1wYXJpc2Mubzo6cmM0LXBhcmlzYy5vOjo6OjpnaGFzaC1wYXJpc2MubzozMiI7Cm15ICRwYXJpc2MyMF9hc209InBhcmlzY2lkLm86cGEtcmlzYzJXLm8gcGFyaXNjLW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjY0IjsKbXkgJHBwYzMyX2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBwYy5vOjo6c2hhMS1wcGMubyBzaGEyNTYtcHBjLm86Ojo6Ojo6IjsKbXkgJHBwYzY0X2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBwYy5vOjo6c2hhMS1wcGMubyBzaGEyNTYtcHBjLm8gc2hhNTEyLXBwYy5vOjo6Ojo6OiI7Cm15ICRub19hc209Ijo6Ojo6Ojo6Ojo6Ojo6dm9pZCI7CgojIEFzIGZvciAkQlNEdGhyZWFkcy4gSWRlYSBpcyB0byBtYWludGFpbiAiY29sbGVjdGl2ZSIgc2V0IG9mIGZsYWdzLAojIHdoaWNoIHdvdWxkIGNvdmVyIGFsbCBCU0QgZmxhdm9ycy4gLXB0aHJlYWQgYXBwbGllcyB0byB0aGVtIGFsbCwgCiMgYnV0IGlzIHRyZWF0ZWQgZGlmZmVyZW50bHkuIE9wZW5CU0QgZXhwYW5kcyBpcyBhcyAtRF9QT1NJWF9USFJFQUQKIyAtbGNfciwgd2hpY2ggaXMgc3VmZmljaWVudC4gRnJlZUJTRCA0LnggZXhwYW5kcyBpdCBhcyAtbGNfciwKIyB3aGljaCBoYXMgdG8gYmUgYWNjb21wYW5pZWQgYnkgZXhwbGljaXQgLURfVEhSRUFEX1NBRkUgYW5kCiMgc29tZXRpbWVzIC1EX1JFRU5UUkFOVC4gRnJlZUJTRCA1LnggZXhwYW5kcyBpdCBhcyAtbGNfciwgd2hpY2gKIyBzZWVtcyB0byBiZSBzdWZmaWNpZW50PwpteSAkQlNEdGhyZWFkcz0iLXB0aHJlYWQgLURfVEhSRUFEX1NBRkUgLURfUkVFTlRSQU5UIjsKCiNjb25maWctc3RyaW5nCSRjYyA6ICRjZmxhZ3MgOiAkdW5pc3RkIDogJHRocmVhZF9jZmxhZyA6ICRzeXNfaWQgOiAkbGZsYWdzIDogJGJuX29wcyA6ICRjcHVpZF9vYmogOiAkYm5fb2JqIDogJGRlc19vYmogOiAkYWVzX29iaiA6ICRiZl9vYmogOiAkbWQ1X29iaiA6ICRzaGExX29iaiA6ICRjYXN0X29iaiA6ICRyYzRfb2JqIDogJHJtZDE2MF9vYmogOiAkcmM1X29iaiA6ICR3cF9vYmogOiAkY21sbF9vYmogOiAkbW9kZXNfb2JqIDogJGRzb19zY2hlbWUgOiAkc2hhcmVkX3RhcmdldCA6ICRzaGFyZWRfY2ZsYWcgOiAkc2hhcmVkX2xkZmxhZyA6ICRzaGFyZWRfZXh0ZW5zaW9uIDogJHJhbmxpYiA6ICRhcmZsYWdzIDogJG11bHRpbGliCgpteSAldGFibGU9KAojIEZpbGUgJ1RBQkxFJyAoY3JlYXRlZCBieSAnbWFrZSBUQUJMRScpIGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhpcyBsaXN0LAojIGZvcm1hdHRlZCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgoKCiMiYiIsCQkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfToke3Ribl9tdWx9OjoiLAojImJsLTRjLTJjIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBNRDJfQ0hBUjoke3Ribl9tdWx9OjoiLAojImJsLTRjLXJpIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBSQzRfSU5ERVg6JHt0Ym5fbXVsfTo6IiwKIyJiMi1pcy1yaS1kcCIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czJ9SURFQV9TSE9SVCBSQzRfSU5ERVggREVTX1BUUjoke3Ribl9tdWx9OjoiLAoKIyBPdXIgZGV2ZWxvcG1lbnQgY29uZmlncwoicHVyaWZ5IiwJInB1cmlmeSBnY2M6LWcgLURQVVJJRlkgLVdhbGw6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Ojo6IiwKImRlYnVnIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZ2dkYiAtZzIgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjoodW5rbm93bik6Oi1sZWZlbmNlOjo6OiIsCiJkZWJ1Zy1iZW4iLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6Ojpibjg2LWVsZi5vIGNvODYtZWxmLm8iLAoiZGVidWctYmVuLW9wZW5ic2QiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tb3BlbmJzZC1kZWJ1ZyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURQRURBTlRJQyAtRERFQlVHX1NBRkVTVEFDSyAtRE9QRU5TU0xfT1BFTkJTRF9ERVZfQ1JZUFRPIC1ET1BFTlNTTF9OT19BU00gLWczIC1PMiAtcGVkYW50aWMgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtcGlwZTo6KHVua25vd24pOjo6OiIsCiJkZWJ1Zy1iZW4tZGVidWciLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1EQk5fREVCVUcgLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1nMyAtTzIgLXBpcGU6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tbm8tb3B0IiwJImdjYzogLVdhbGwgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1EREVCVUdfU0FGRVNUQUNLIC1EQ1JZUFRPX01ERUJVRyAtV2Vycm9yIC1ETF9FTkRJQU4gLURURVJNSU9TIC1XYWxsIC1nMzo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLWJlbi1zdHJpY3QiLAkiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRENPTlNUX1NUUklDVCAtTzIgLVdhbGwgLVdzaGFkb3cgLVdlcnJvciAtV3BvaW50ZXItYXJpdGggLVdjYXN0LXF1YWwgLVd3cml0ZS1zdHJpbmdzIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctcnNlIiwiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLXBpcGUgLU8gLWcgLWdnZGIzIC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoiZGVidWctYm9kbyIsCSJnY2M6LURMX0VORElBTiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJJT19QQUlSX0RFQlVHIC1EUEVEQU5USUMgLWcgLW1hcmNoPWk0ODYgLXBlZGFudGljIC1Xc2hhZG93IC1XYWxsIC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uOjotRF9SRUVOVFJBTlQ6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoiZGVidWctdWxmIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtbWFyY2g9aTQ4NiAtV2FsbCAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9uczo6OkNZR1dJTjMyOjo6JHtub19hc219OndpbjMyOmN5Z3dpbi1zaGFyZWQ6OjouZGxsIiwKImRlYnVnLXN0ZXZlNjQiLCAiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLWc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUzMiIsICJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLW0zMiAtRExfRU5ESUFOIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZyAtcGlwZTo6LURfUkVFTlRSQU5UOjotcmR5bmFtaWMgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc3RldmUtb3B0IiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTY0IC1PMyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LWVsZiIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1ub2FzbSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ET1BFTlNTTF9OT19BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRF9QT1NJWF9TT1VSQ0UgLURQRURBTlRJQyAtZ2dkYiAtZzMgLW1jcHU9aTQ4NiAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1lbGYtZXh0cmVtZSIsImdjYzotRExFVklUVEVfREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQ1JZUFRPX01ERUJVRyAtREVOR0lORV9DT05GX0RFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1sZXZpdHRlLWxpbnV4LW5vYXNtLWV4dHJlbWUiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1XIC1XdW5kZWYgLVdzaGFkb3cgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby1sb25nLWxvbmcgLVd1bmRlZiAtV2NvbnZlcnNpb24gLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmYzMiIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtTzEgLWdnZGIyIC1XYWxsIC1XZXJyb3IgLVd1bmRlZiAtcGVkYW50aWMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVduby1sb25nLWxvbmc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1nZW9mZjY0IiwiZ2NjOi1EQk5fREVCVUcgLURCTl9ERUJVR19SQU5EIC1EQk5fU1RSSUNUIC1EUFVSSUZZIC1ET1BFTlNTTF9OT19ERVBSRUNBVEVEIC1ET1BFTlNTTF9OT19BU00gLURPUEVOU1NMX05PX0lOTElORV9BU00gLURMX0VORElBTiAtRFRFUk1JTyAtRFBFREFOVElDIC1PMSAtZ2dkYjIgLVdhbGwgLVdlcnJvciAtV3VuZGVmIC1wZWRhbnRpYyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV25vLWxvbmctbG9uZzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtcGVudGl1bSIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuIiwKImRlYnVnLWxpbnV4LXBwcm8iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bXBybyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1lbGYiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxlZmVuY2UgLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1lbGYtbm9lZmVuY2UiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1pYTMyLWFlcyIsICJnY2M6LURBRVNfRVhQRVJJTUVOVEFMIC1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ong4NmNwdWlkLm86Ym4tNTg2Lm8gY28tNTg2Lm8geDg2LW1vbnQubzpkZXMtNTg2Lm8gY3J5cHQ1ODYubzphZXNfeDg2Y29yZS5vIGFlc19jYmMubyBhZXNuaS14ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYtNTg2Lm8gc2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2Lm86d3BfYmxvY2subyB3cC1tbXgubzo6Z2hhc2gteDg2Lm86ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtZ2VuZXJpYzMyIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFRFUk1JTyAtZyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LWdlbmVyaWM2NCIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURURVJNSU8gLWcgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LXg4Nl82NCIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiZGlzdCIsCQkiY2M6LU86Oih1bmtub3duKTo6Ojo6OiIsCgojIEJhc2ljIGNvbmZpZ3MgdGhhdCBzaG91bGQgd29yayBvbiBhbnkgKDMyIGFuZCBsZXNzIGJpdCkgYm94CiJnY2MiLAkJImdjYzotTzM6Oih1bmtub3duKTo6OkJOX0xMT05HOjo6IiwKImNjIiwJCSJjYzotTzo6KHVua25vd24pOjo6Ojo6IiwKCiMjIyNWT1MgQ29uZmlndXJhdGlvbnMKInZvcy1nY2MiLCJnY2M6LU8zIC1XYWxsIC1EX1BPU0lYX0NfU09VUkNFPTIwMDExMkwgLURfQlNEIC1EX1ZPU19FWFRFTkRFRF9OQU1FUyAtREJfRU5ESUFOOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOkJOX0xMT05HOiR7bm9fYXNtfTo6Ojo6LnNvOiIsCiJkZWJ1Zy12b3MtZ2NjIiwiZ2NjOi1PMCAtZyAtV2FsbCAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX0JTRCAtRF9WT1NfRVhURU5ERURfTkFNRVMgLURCX0VORElBTiAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUc6Oih1bmtub3duKTpWT1M6LVdsLC1tYXA6Qk5fTExPTkc6JHtub19hc219Ojo6Ojouc286IiwKCiMjIyMgU29sYXJpcyB4ODYgd2l0aCBHTlUgQyBzZXR1cHMKIyAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSBzd2l0Y2hlcyBvZmYgaW5saW5lIGFzc2VtYmxlci4gV2UgaGF2ZSB0byBkbyBpdAojIGhlcmUgYmVjYXVzZSB3aGVuZXZlciBHTlUgQyBpbnN0YW50aWF0ZXMgYW4gYXNzZW1ibGVyIHRlbXBsYXRlIGl0CiMgc3Vycm91bmRzIGl0IHdpdGggI0FQUCAjTk9fQVBQIGNvbW1lbnQgcGFpciB3aGljaCAoYXQgbGVhc3QgU29sYXJpcwojIDdfeDg2KSAvdXNyL2Njcy9iaW4vYXMgZmFpbHMgdG8gYXNzZW1ibGUgd2l0aCAiSWxsZWdhbCBtbmVtb25pYyIKIyBlcnJvciBtZXNzYWdlLgoic29sYXJpcy14ODYtZ2NjIiwiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbCAtRExfRU5ESUFOIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1zaGFyZWQgLXN0YXRpYy1saWJnY2MgbWlnaHQgYXBwZWFyIGNvbnRyb3ZlcnNpYWwsIGJ1dCBtb2R1bGVzIHRha2VuCiMgZnJvbSBzdGF0aWMgbGliZ2NjIGRvIG5vdCBoYXZlIHJlbG9jYXRpb25zIGFuZCBsaW5raW5nIHRoZW0gaW50byBvdXIKIyBzaGFyZWQgb2JqZWN0cyBkb2Vzbid0IGhhdmUgYW55IG5lZ2F0aXZlIHNpZGUtZWZmZWN0cy4gT24gdGhlIGNvbnRyYXJ5LAojIGRvaW5nIHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBnY2Mgc2hhcmVkIGJ1aWxkIHdpdGggU3VuIEMuIEdpdmVuCiMgdGhhdCBnY2MgZ2VuZXJhdGVzIGZhc3RlciBjb2RlIFt0aGFua3MgdG8gaW5saW5lIGFzc2VtYmxlcl0sIEkgd291bGQKIyBhY3R1YWxseSByZWNvbW1lbmQgdG8gY29uc2lkZXIgdXNpbmcgZ2NjIHNoYXJlZCBidWlsZCBldmVuIHdpdGggdmVuZG9yCiMgY29tcGlsZXI6LSkKIwkJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KInNvbGFyaXM2NC14ODZfNjQtZ2NjIiwiZ2NjOi1tNjQgLU8zIC1XYWxsIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LW02NCAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6LzY0IiwKIAojIyMjIFNvbGFyaXMgeDg2IHdpdGggU3VuIEMgc2V0dXBzCiJzb2xhcmlzLXg4Ni1jYyIsImNjOi1mYXN0IC1PIC1YYTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQteDg2XzY0LWNjIiwiY2M6LWZhc3QgLXhhcmNoPWFtZDY0IC14c3RyY29uc3QgLVhhIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LXhhcmNoPWFtZDY0IC1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6LzY0IiwKCiMjIyMgU1BBUkMgU29sYXJpcyB3aXRoIEdOVSBDIHNldHVwcwoic29sYXJpcy1zcGFyY3Y3LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LW12OCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1tMzIgc2hvdWxkIGJlIHNhZmUgdG8gYWRkIGFzIGxvbmcgYXMgZHJpdmVyIHJlY29nbml6ZXMgLW1jcHU9dWx0cmFzcGFyYwoic29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzNjQtc3BhcmN2OS1nY2MiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1PMyAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCiMjIyMKImRlYnVnLXNvbGFyaXMtc3BhcmN2OC1nY2MiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAtTyAtZyAtbXY4IC1XYWxsIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjktZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLURQRURBTlRJQyAtTyAtZyAtbWNwdT11bHRyYXNwYXJjIC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV25vLWxvbmctbG9uZyAtRF9fRVhURU5TSU9OU19fIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBTdW4gQyBzZXR1cHMKIyBTQzQuMCBkb2Vzbid0IHBhc3MgJ21ha2UgdGVzdCcsIHVwZ3JhZGUgdG8gU0M1LjAgb3IgU0M0LjIuCiMgU0M0LjIgaXMgb2ssIGJldHRlciB0aGFuIGdjYyBldmVuIG9uIGJuIGFzIGxvbmcgYXMgeW91IHRlbGwgaXQgLXhhcmNoPXY4CiMgU0M1LjAgbm90ZTogQ29tcGlsZXIgY29tbW9uIHBhdGNoIDEwNzM1Ny0wMSBvciBsYXRlciBpcyByZXF1aXJlZCEKInNvbGFyaXMtc3BhcmN2Ny1jYyIsImNjOi14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzoteGFyY2g9djggLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY4cGx1cyAteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktY2MiLCJjYzoteHRhcmdldD11bHRyYSAteGFyY2g9djkgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD12OSAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTovdXNyL2Njcy9iaW4vYXIgcnM6Oi82NCIsCiMjIyMKImRlYnVnLXNvbGFyaXMtc3BhcmN2OC1jYyIsImNjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLXhhcmNoPXY4IC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjktY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLWcgLU8gLXhzdHJjb25zdCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzotRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsIAoKIyMjIyBTdW5PUyBjb25maWdzLCBhc3N1bWluZyBzcGFyYyBmb3IgdGhlIGdjYyBvbmUuCiMic3Vub3MtY2MiLCAiY2M6LU80IC1ETk9QUk9UTyAtRE5PQ09OU1Q6Oih1bmtub3duKTpTVU5PUzo6REVTX1VOUk9MTDoke25vX2FzbX06OiIsCiJzdW5vcy1nY2MiLCJnY2M6LU8zIC1tdjggLURzc2l6ZV90PWludDo6KHVua25vd24pOlNVTk9TOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfUFRSIERFU19SSVNDMToke25vX2FzbX06OiIsCgojIyMjIElSSVggNS54IGNvbmZpZ3MKIyAtbWlwczIgZmxhZyBpcyBhZGRlZCBieSAuL2NvbmZpZyB3aGVuIGFwcHJvcHJpYXRlLgoiaXJpeC1nY2MiLCJnY2M6LU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaXJpeC1jYyIsICJjYzotTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRsZmNuOmlyaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElSSVggNi54IGNvbmZpZ3MKIyBPbmx5IE4zMiBhbmQgTjY0IEFCSXMgYXJlIHN1cHBvcnRlZC4gSWYgeW91IG5lZWQgTzMyIEFCSSBidWlsZCwgaW52b2tlCiMgJy4vQ29uZmlndXJlIGlyaXgtY2MgLW8zMicgbWFudWFsbHkuCiJpcml4LW1pcHMzLWdjYyIsImdjYzotbWFiaT1uMzIgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19VTlJPTEwgREVTX1JJU0MyIERFU19QVFIgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiJpcml4LW1pcHMzLWNjIiwgImNjOi1uMzIgLW1pcHMzIC1PMiAtdXNlX3JlYWRvbmx5X2NvbnN0IC1HMCAtcmRhdGFfc2hhcmVkIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpERVNfUFRSIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfUklTQzIgREVTX1VOUk9MTCBCRl9QVFIgU0lYVFlfRk9VUl9CSVQ6JHttaXBzNjRfYXNtfTpuMzI6ZGxmY246aXJpeC1zaGFyZWQ6Oi1uMzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCiMgTjY0IEFCSSBidWlsZHMuCiJpcml4NjQtbWlwczQtZ2NjIiwiZ2NjOi1tYWJpPTY0IC1taXBzNCAtTzMgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczY0X2FzbX06NjQ6ZGxmY246aXJpeC1zaGFyZWQ6Oi1tYWJpPTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoiaXJpeDY0LW1pcHM0LWNjIiwgImNjOi02NCAtbWlwczQgLU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLUcwIC1yZGF0YV9zaGFyZWQgLURURVJNSU9TIC1EQl9FTkRJQU4gLURCTl9ESVYzVzo6LURfU0dJX01QX1NPVVJDRTo6OlJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzIgREVTX1VOUk9MTCBTSVhUWV9GT1VSX0JJVF9MT05HOiR7bWlwczY0X2FzbX06NjQ6ZGxmY246aXJpeC1zaGFyZWQ6Oi02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKCiMjIyMgVW5pZmllZCBIUC1VWCBBTlNJIEMgY29uZmlncy4KIyBTcGVjaWFsIG5vdGVzOgojIC0gT3JpZ2luYWxseSB3ZSB3ZXJlIG9wdGltaXppbmcgYXQgK080IGxldmVsLiBJdCBzaG91bGQgYmUgbm90ZWQKIyAgIHRoYXQgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuICtPMyBhbmQgK080IGlzIGdsb2JhbCBpbnRlci0KIyAgIHByb2NlZHVyYWwgYW5hbHlzaXMuIEFzIGl0IGhhcyB0byBiZSBwZXJmb3JtZWQgZHVyaW5nIHRoZSBsaW5rCiMgICBzdGFnZSB0aGUgY29tcGlsZXIgbGVhdmVzIGJlaGluZCBjZXJ0YWluIHBzZXVkby1jb2RlIGluIGxpYiouYQojICAgd2hpY2ggbWlnaHQgYmUgcmVsZWFzZSBvciBldmVuIHBhdGNoIGxldmVsIHNwZWNpZmljLiBHZW5lcmF0aW5nCiMgICB0aGUgbWFjaGluZSBjb2RlIGZvciBhbmQgYW5hbHl6aW5nIHRoZSAqd2hvbGUqIHByb2dyYW0gYXBwZWFycwojICAgdG8gYmUgKmV4dHJlbWVseSogbWVtb3J5IGRlbWFuZGluZyB3aGlsZSB0aGUgcGVyZm9ybWFuY2UgZ2FpbiBpcwojICAgYWN0dWFsbHkgcXVlc3Rpb25hYmxlLiBUaGUgc2l0dWF0aW9uIGlzIGludGVuc2lmaWVkIGJ5IHRoZSBkZWZhdWx0CiMgICBIUC1VWCBkYXRhIHNldCBzaXplIGxpbWl0IChpbmZhbW91cyAnbWF4ZHNpeicgdHVuYWJsZSkgb2YgNjRNQgojICAgd2hpY2ggaXMgd2F5IHRvbyBsb3cgZm9yICtPNC4gSW4gb3RoZXIgd29yZHMsIGRvZXNuJ3QgK08zIG1ha2UKIyAgIG1vcmUgc2Vuc2U/CiMgLSBLZWVwIGluIG1pbmQgdGhhdCB0aGUgSFAgY29tcGlsZXIgYnkgZGVmYXVsdCBnZW5lcmF0ZXMgY29kZQojICAgc3VpdGFibGUgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgaG9zdCB5b3UncmUgY3VycmVudGx5IGNvbXBpbGluZyBhdC4KIyAgIElmIHRoZSB0b29sa2l0IGlzIG1lbnQgdG8gYmUgdXNlZCBvbiB2YXJpb3VzIFBBLVJJU0MgcHJvY2Vzc29ycwojICAgY29uc2lkZXIgJy4vY29uZmlnICtEQXBvcnRhYmxlJy4KIyAtICtERDY0IGlzIGNob3NlbiBpbiBmYXZvdXIgb2YgK0RBMi4wVyBiZWNhdXNlIGl0J3MgbWVhbnQgdG8gYmUKIyAgIGNvbXBhdGlibGUgd2l0aCAqZnV0dXJlKiByZWxlYXNlcy4KIyAtIElmIHlvdSBydW4gLi9Db25maWd1cmUgaHB1eC1wYXJpc2MtW2ddY2MgbWFudWFsbHkgZG9uJ3QgZm9yZ2V0IHRvCiMgICBwYXNzIC1EX1JFRU5UUkFOVCBvbiBIUC1VWCAxMCBhbmQgbGF0ZXIuCiMgLSAtRE1EMzJfWEFSUkFZIHRyaWdnZXJzIHdvcmthcm91bmQgZm9yIGNvbXBpbGVyIGJ1ZyB3ZSByYW4gaW50byBpbgojICAgMzItYml0IG1lc3NhZ2UgZGlnZXN0cy4gKEZvciB0aGUgbW9tZW50IG9mIHRoaXMgd3JpdGluZykgSFAgQwojICAgZG9lc24ndCBzZWVtIHRvICJkaWdlc3QiIHRvbyBtYW55IGxvY2FsIHZhcmlhYmxlcyAodGhleSBtYWtlICJoaW0iCiMgICBjaGV3IGZvcmV2ZXI6LSkuIEZvciBtb3JlIGRldGFpbHMgbG9vay11cCBNRDMyX1hBUlJBWSBjb21tZW50IGluCiMgICBjcnlwdG8vc2hhL3NoYV9sY2wuaC4KIwkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgojCiMgU2luY2UgdGhlcmUgaXMgbWVudGlvbiBvZiB0aGlzIGluIHNobGliL2hwdXgxMC1jYy5zaAoiaHB1eC1wYXJpc2MtY2MtbzQiLCJjYzotQWUgK080ICtFU2xpdCAteiAtREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotbGRsZDpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYy1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMS1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke3BhcmlzYzExX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzItZ2NjIiwiZ2NjOi1tYXJjaD0yLjAgLU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMTo6cGEtcmlzYzIubzo6Ojo6Ojo6Ojo6Ojp2b2lkOmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eDY0LXBhcmlzYzItZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyVy5vOjo6Ojo6Ojo6Ojo6OnZvaWQ6ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTIwXzY0IiwKCiMgTW9yZSBhdHRlbXB0cyBhdCB1bmlmaWVkIDEwLlggYW5kIDExLlggdGFyZ2V0cyBmb3IgSFAgQyBjb21waWxlci4KIwojIENocmlzIFJ1ZW1tbGVyIDxydWVtbWxlckBjdXAuaHAuY29tPgojIEtldmluIFN0ZXZlcyA8a3NAaHAuc2U+CiJocHV4LXBhcmlzYy1jYyIsImNjOitPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWTo6LURfUkVFTlRSQU5UOjotV2wsK3MgLWxkbGQ6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXgtcGFyaXNjMV8xLWNjIiwiY2M6K0RBMS4xICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7cGFyaXNjMTFfYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTEuMSIsCiJocHV4LXBhcmlzYzItY2MiLCJjYzorREEyLjAgK0RTMi4wICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1XbCwrcyAtbGRsZDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDo6cGEtcmlzYzIubzo6Ojo6Ojo6Ojo6Ojp2b2lkOmRsOmhwdXgtc2hhcmVkOitaOi1iOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXg2NC1wYXJpc2MyLWNjIiwiY2M6K0RENjQgK08zICtPcHRyc19zdHJvbmdseV90eXBlZCAtQWUgK0VTbGl0IC1EQl9FTkRJQU4gLURNRDMyX1hBUlJBWSAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7cGFyaXNjMjBfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9wYTIwXzY0IiwKCiMgSFAvVVggSUEtNjQgdGFyZ2V0cwoiaHB1eC1pYTY0LWNjIiwiY2M6LUFlICtERDMyICtPMiArT2xpdD1hbGwgLXogLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQzMiAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4MzIiLAojIEZyYW5rIEdldXJ0cyA8ZnJhbmsuZ2V1cnRzQG5sLmFibmFtcm8uY29tPiBoYXMgcGF0aWVudGx5IGFzc2lzdGVkIHdpdGgKIyB3aXRoIGRlYnVnZ2luZyBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZy4KImhwdXg2NC1pYTY0LWNjIiwiY2M6LUFlICtERDY0ICtPMyArT2xpdD1hbGwgLXogLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOitaOitERDY0IC1iOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXg2NCIsCiMgR0NDIGJ1aWxkcy4uLgoiaHB1eC1pYTY0LWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVCBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDotZnBpYzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXgzMiIsCiJocHV4NjQtaWE2NC1nY2MiLCJnY2M6LW1scDY0IC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LW1scDY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDY0IiwgCgojIExlZ2FjeSBIUFVYIDkuWCBjb25maWdzLi4uCiJocHV4LWNjIiwJImNjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtRE1EMzJfWEFSUkFZIC1BZSArRVNsaXQgK08yIC16OjoodW5rbm93bik6Oi1XbCwrcyAtbGRsZDpERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LWdjYyIsCSJnY2M6LURCX0VORElBTiAtREJOX0RJVjJXIC1PMzo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIyMjIEhQIE1QRS9pWCBodHRwOi8vamF6ei5leHRlcm5hbC5ocC5jb20vc3JjL29wZW5zc2wvCiJNUEUvaVgtZ2NjIiwJImdjYzotRF9FTkRJQU4gLURCTl9ESVYyVyAtTzMgLURfUE9TSVhfU09VUkNFIC1EX1NPQ0tFVF9TT1VSQ0UgLUkvU1lTTE9HL1BVQjo6KHVua25vd24pOk1QRTotTC9TWVNMT0cvUFVCIC1sc3lzbG9nIC1sc29ja2V0IC1sY3Vyc2VzOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OjoiLAoKIyBERUMgQWxwaGEgT1NGLzEvVHJ1NjQgdGFyZ2V0cy4KIwojCSJXaGF0J3MgaW4gYSBuYW1lPyBUaGF0IHdoaWNoIHdlIGNhbGwgYSByb3NlCiMJIEJ5IGFueSBvdGhlciB3b3JkIHdvdWxkIHNtZWxsIGFzIHN3ZWV0LiIKIwojIC0gV2lsbGlhbSBTaGFrZXNwZWFyZSwgIlJvbWVvICYgSnVsaWV0IiwgQWN0IElJLCBzY2VuZSBJSS4KIwojIEZvciBnY2MsIHRoZSBmb2xsb3dpbmcgZ2F2ZSBhICU1MCBzcGVlZHVwIG9uIGEgMTY0IG92ZXIgdGhlICdERVNfSU5UJyB2ZXJzaW9uCiMKIm9zZjEtYWxwaGEtZ2NjIiwgImdjYzotTzM6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1JJU0MxOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJvc2YxLWFscGhhLWNjIiwgICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKInRydTY0LWFscGhhLWNjIiwgImNjOi1zdGQxIC10dW5lIGhvc3QgLWZhc3QgLXJlYWRvbmx5X3N0cmluZ3M6Oi1wdGhyZWFkOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjotbXN5bTouc28iLAoKIyMjIwojIyMjIFZhcmlldHkgb2YgTElOVVg6LSkKIyMjIwojICotZ2VuZXJpYyogaXMgZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9jb25maWcgaXMgZnJlZSB0bwojIHRocm93IGluIC1EW0JMXV9FTkRJQU4sIHdoaWNoZXZlciBhcHByb3ByaWF0ZS4uLgoibGludXgtZ2VuZXJpYzMyIiwiZ2NjOi1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYyIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgSXQncyBiZWxpZXZlZCB0aGF0IG1ham9yaXR5IG9mIEFSTSB0b29sY2hhaW5zIHByZWRlZmluZSBhcHByb3ByaWF0ZSAtbWFyY2guCiMgSWYgeW91IGNvbXBpbGVyIGRvZXMgbm90LCBkbyBjb21wbGVtZW50IGNvbmZpZyBjb21tYW5kIGxpbmUgd2l0aCBvbmUhCiJsaW51eC1hcm12NCIsCSJnY2M6LURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIyMjIElBLTMyIHRhcmdldHMuLi4KImxpbnV4LWlhMzItaWNjIiwJImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYW91dCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0IiwKIyMjIwoibGludXgtZ2VuZXJpYzY0IiwiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2FzbX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImxpbnV4LWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtaWE2NC1lY2MiLCJlY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLVdhbGwgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtaWNjIiwiaWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgteDg2XzY0IiwJImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAoibGludXg2NC1zMzkweCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiMjIyMgU28gY2FsbGVkICJoaWdoZ3BycyIgdGFyZ2V0IGZvciB6L0FyY2hpdGVjdHVyZSBDUFVzCiMgIkhpZ2hncHJzIiBpcyBrZXJuZWwgZmVhdHVyZSBmaXJzdCBpbXBsZW1lbnRlZCBpbiBMaW51eCAyLjYuMzIsIHNlZQojIC9wcm9jL2NwdWluZm8uIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZgojIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgbm90IG9ubHkgdXBvbiAzMi1iaXQgcHJvY2VzcyBjb250ZXh0CiMgc3dpdGNoLCBidXQgZXZlbiBvbiBhc3luY2hyb25vdXMgc2lnbmFsIGRlbGl2ZXJ5IHRvIHN1Y2ggcHJvY2Vzcy4KIyBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRlcGxveSA2NC1iaXQgaW5zdHJ1Y3Rpb25zIGV2ZW4gaW4gbGVnYWN5CiMgYXBwbGljYXRpb24gY29udGV4dCBhbmQgYWNoaWV2ZSBiZXR0ZXIgW29yIHNob3VsZCB3ZSBzYXkgYWRlcXVhdGVdCiMgcGVyZm9ybWFuY2UuIFRoZSBidWlsZCBpcyBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIGxpbnV4LWdlbmVyaWMzMiwKIyBhbmQgdGhlIGlkZWEgaXMgdG8gYmUgYWJsZSB0byBpbnN0YWxsIHRoZSByZXN1bHRpbmcgbGliY3J5cHRvLnNvCiMgYWxvbmdzaWRlIGdlbmVyaWMgb25lLCBlLmcuIGFzIC9saWIvaGlnaGdwcnMvbGliY3J5cHRvLnNvLngueSwgZm9yCiMgbGRjb25maWcgYW5kIHJ1bi10aW1lIGxpbmtlciB0byBhdXRvZGlzY292ZXIuIFVuZm9ydHVuYXRlbHkgaXQKIyBkb2Vzbid0IHdvcmsganVzdCB5ZXQsIGJlY2F1c2Ugb2YgY291cGxlIG9mIGJ1Z3MgaW4gZ2xpYmMKIyBzeXNkZXAvczM5MC9kbC1wcm9jaW5mby5jIGFmZmVjdGluZyBsZGNvbmZpZyBhbmQgbGQuc28uMS4uLgoibGludXgzMi1zMzkweCIsCSJnY2M6LW0zMSAtV2EsLW16YXJjaCAtREJfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6czM5MHhjYXAubyBzMzkweGNwdWlkLm86Ym5fYXNtLm8gczM5MHgtbW9udC5vOjphZXNfY3RyLm8gYWVzLXMzOTB4Lm86OjpzaGExLXMzOTB4Lm8gc2hhMjU2LXMzOTB4Lm8gc2hhNTEyLXMzOTB4Lm86OnJjNC1zMzkweC5vOjo6OjpnaGFzaC1zMzkweC5vOjMxOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMxOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hpZ2hncHJzIiwKIyMjIyBTUEFSQyBMaW51eCBzZXR1cHMKIyBSYXkgTWlsbGVyIDxyYXkubWlsbGVyQGNvbXB1dGluZy1zZXJ2aWNlcy5veGZvcmQuYWMudWs+IGhhcyBwYXRpZW50bHkKIyBhc3Npc3RlZCB3aXRoIGRlYnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNvbmZpZ3MuCiJsaW51eC1zcGFyY3Y4IiwiZ2NjOi1tdjggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBpdCdzIGEgcmVhbCBtZXNzIHdpdGggLW1jcHU9dWx0cmFzcGFyYyBvcHRpb24gdW5kZXIgTGludXgsIGJ1dAojIC1XYSwtQXY4cGx1cyBzaG91bGQgZG8gdGhlIHRyaWNrIG5vIG1hdHRlciB3aGF0LgoibGludXgtc3BhcmN2OSIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLVdhLC1BdjhwbHVzIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKImxpbnV4NjQtc3BhcmN2OSIsImdjYzotbTY0IC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBzCiMgU3BlY2lhbCBub3RlczoKIyAtIGxpbnV4LWFscGhhK2J3eC1nY2MgaXMgbWVudCB0byBiZSB1c2VkIGZyb20gLi9jb25maWcgb25seS4gSWYgeW91CiMgICBvdWdodCB0byBydW4gJy4vQ29uZmlndXJlIGxpbnV4LWFscGhhK2J3eC1nY2MnIG1hbnVhbGx5LCBkbwojICAgY29tcGxlbWVudCB0aGUgY29tbWFuZCBsaW5lIHdpdGggLW1jcHU9ZXY1NiwgLW1jcHU9ZXY2IG9yIHdoYXRldmVyCiMgICB3aGljaCBpcyBhcHByb3ByaWF0ZS4KIyAtIElmIHlvdSB1c2UgY2NjIGtlZXAgaW4gbWluZCB0aGF0IC1mYXN0IGltcGxpZXMgLWFyY2ggaG9zdCBhbmQgdGhlCiMgICBjb21waWxlciBpcyBmcmVlIHRvIGlzc3VlIGluc3RydWN0aW9ucyB3aGljaCBnb25uYSBtYWtlIGVsZGVyIENQVQojICAgY2hva2UuIElmIHlvdSB3aXNoIHRvIGJ1aWxkICJibGVuZGVkIiB0b29sa2l0LCBhZGQgLWFyY2ggZ2VuZXJpYwojICAgKmFmdGVyKiAtZmFzdCBhbmQgaW52b2tlICcuL0NvbmZpZ3VyZSBsaW51eC1hbHBoYS1jY2MnIG1hbnVhbGx5LgojCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwoibGludXgtYWxwaGEtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtYWxwaGErYnd4LWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhLWNjYyIsImNjYzotZmFzdCAtcmVhZG9ubHlfc3RyaW5ncyAtRExfRU5ESUFOIC1EVEVSTUlPOjotRF9SRUVOVFJBTlQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEw6JHthbHBoYV9hc219IiwKImxpbnV4LWFscGhhK2J3eC1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCgojIyMjICpCU0QgW2RvIHNlZSBjb21tZW50IGFib3V0ICR7QlNEdGhyZWFkc30gYWJvdmUhXQoiQlNELWdlbmVyaWMzMiIsImdjYzotRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIkJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctQlNELXg4Ni1lbGYiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2FsbCAtZzo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0Qtc3BhcmN2OCIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgLU8zIC1tdjggLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMOiR7c3BhcmN2OF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoiQlNELWdlbmVyaWM2NCIsImdjYzotRFRFUk1JT1MgLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIC1ETUQzMl9SRUdfVD1pbnQgZG9lc24ndCBhY3R1YWxseSBiZWxvbmcgaW4gc3BhcmM2NCB0YXJnZXQsIGl0CiMgc2ltcGx5ICpoYXBwZW5zKiB0byB3b3JrIGFyb3VuZCBhIGNvbXBpbGVyIGJ1ZyBpbiBnY2MgMy4zLjMsCiMgdHJpZ2dlcmVkIGJ5IFJJUEVNRDE2MCBjb2RlLgoiQlNELXNwYXJjNjQiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TIC1PMyAtRE1EMzJfUkVHX1Q9aW50IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzIgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QtaWE2NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2XzY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiJic2RpLWVsZi1nY2MiLCAgICAgImdjYzotRFBFUkw1IC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoibmV4dHN0ZXAiLAkiY2M6LU8gLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKIm5leHRzdGVwMy4zIiwJImNjOi1PMyAtV2FsbDo8bGliYy5oPjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBOQ1IgTVAtUkFTIFVOSVggdmVyIDAyLjAzLjAxCiJuY3Itc2NkZSIsImNjOi1PNiAtWGEgLUhvZmY9QkVIQVZFRCAtNjg2IC1Id2lkZSAtSGl3OjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsIC1sYzg5OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCgojIFFOWAoicW54NCIsCSJjYzotRExfRU5ESUFOIC1EVEVSTUlPOjoodW5rbm93bik6Ojoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306IiwKIlFOWDYiLCAgICAgICAiZ2NjOi1EVEVSTUlPUzo6OjotbHNvY2tldDo6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJRTlg2LWkzODYiLCAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzIgLVdhbGw6Ojo6LWxzb2NrZXQ6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgojIEJlT1MKImJlb3MteDg2LXI1IiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6QkVPUzotbGJlIC1sbmV0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpiZW9zOmJlb3Mtc2hhcmVkOi1mUElDIC1EUElDOi1zaGFyZWQ6LnNvIiwKImJlb3MteDg2LWJvbmUiLCAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWNwdT1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6QkVPUzotbGJlIC1sYmluZCAtbHNvY2tldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06YmVvczpiZW9zLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbyIsCgojIyMjIFNDTy9DYWxkZXJhIHRhcmdldHMuCiMKIyBPcmlnaW5hbGx5IHdlIGhhZCBsaWtlIHVuaXh3YXJlLSosIHVuaXh3YXJlLSotcGVudGl1bSwgdW5peHdhcmUtKi1wNiwgZXRjLgojIE5vdyB3ZSBvbmx5IGhhdmUgYmxlbmRlZCB1bml4d2FyZS0qIGFzIGl0J3MgdGhlIG9ubHkgb25lIHVzZWQgYnkgLi9jb25maWcuCiMgSWYgeW91IHdhbnQgdG8gb3B0aW1pemUgZm9yIHBhcnRpY3VsYXIgbWljcm9hcmNoaXRlY3R1cmUsIGJ5cGFzcyAuL2NvbmZpZwojIGFuZCAnLi9Db25maWd1cmUgdW5peHdhcmUtNyAtS3BlbnRpdW1fcHJvJyBvciB3aGF0ZXZlciBhcHByb3ByaWF0ZS4KIyBOb3RlIHRoYXQgbm90IGFsbCB0YXJnZXRzIGluY2x1ZGUgYXNzZW1ibGVyIHN1cHBvcnQuIE1vc3RseSBiZWNhdXNlIG9mCiMgbGFjayBvZiBtb3RpdmF0aW9uIHRvIHN1cHBvcnQgb3V0LW9mLWRhdGUgcGxhdGZvcm1zIHdpdGggb3V0LW9mLWRhdGUKIyBjb21waWxlciBkcml2ZXJzIGFuZCBhc3NlbWJsZXJzLiBUaW0gUmljZSA8dGltQG11bHRpdGFsZW50cy5uZXQ+IGhhcwojIHBhdGllbnRseSBhc3Npc3RlZCB0byBkZWJ1ZyBtb3N0IG9mIGl0LgojCiMgVW5peFdhcmUgMi4weCBmYWlscyBkZXN0ZXN0IHdpdGggLU8uCiJ1bml4d2FyZS0yLjAiLCJjYzotREZJTElPX0ggLUROT19TVFJJTkdTX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTIuMSIsImNjOi1PIC1ERklMSU9fSDo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsIC1scmVzb2x2IC1seDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoidW5peHdhcmUtNyIsImNjOi1PIC1ERklMSU9fSCAtS2FsbG9jYTo6LUt0aHJlYWQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWCAke3g4Nl9nY2NfZGVzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnI1LXNoYXJlZDotS3BpYzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoidW5peHdhcmUtNy1nY2MiLCJnY2M6LURMX0VORElBTiAtREZJTElPX0ggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1wZW50aXVtIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpnbnUtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgU0NPIDUgLSBCZW4gTGF1cmllIDxiZW5AYWxncm91cC5jby51az4gc2F5cyB0aGUgLU8gYnJlYWtzIHRoZSBTQ08gY2MuCiJzY281LWNjIiwgICJjYzotYmVsZjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDoke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNjbzUtZ2NjIiwgICJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzdnIzLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBJQk0ncyBBSVguCiJhaXgzLWNjIiwgICJjYzotTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0OjoodW5rbm93bik6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjo6OiIsCiJhaXgtZ2NjIiwgICJnY2M6LU8gLURCX0VORElBTjo6LXB0aHJlYWQ6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjoke3BwYzMyX2FzbX06YWl4MzI6ZGxmY246YWl4LXNoYXJlZDo6LXNoYXJlZCAtV2wsLUc6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Oi1YMzIiLAoiYWl4NjQtZ2NjIiwiZ2NjOi1tYWl4NjQgLU8gLURCX0VORElBTjo6LXB0aHJlYWQ6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOiR7cHBjNjRfYXNtfTphaXg2NDpkbGZjbjphaXgtc2hhcmVkOjotbWFpeDY0IC1zaGFyZWQgLVdsLC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWDY0IiwKIyBCZWxvdyB0YXJnZXRzIGFzc3VtZSBBSVggNS4gSWRlYSBpcyB0byBlZmZlY3RpdmVseSBkaXNyZWdhcmQgJE9CSkVDVF9NT0RFCiMgYXQgYnVpbGQgdGltZS4gJE9CSkVDVF9NT0RFIGlzIHJlc3BlY3RlZCBhdCAuL2NvbmZpZyBzdGFnZSEKImFpeC1jYyIsICAgImNjOi1xMzIgLU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NCAtcXJvIC1xcm9jb25zdDo6LXF0aHJlYWRlZDpBSVg6OkJOX0xMT05HIFJDNF9DSEFSOiR7cHBjMzJfYXNtfTphaXgzMjpkbGZjbjphaXgtc2hhcmVkOjotcTMyIC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCAzMiIsCiJhaXg2NC1jYyIsICJjYzotcTY0IC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQgLXFybyAtcXJvY29uc3Q6Oi1xdGhyZWFkZWQ6QUlYOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSOiR7cHBjNjRfYXNtfTphaXg2NDpkbGZjbjphaXgtc2hhcmVkOjotcTY0IC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWCA2NCIsCgojCiMgQ3JheSBUOTAgYW5kIHNpbWlsYXIgKFNEU0MpCiMgSXQncyBCaWctZW5kaWFuLCBidXQgdGhlIGFsZ29yaXRobXMgd29yayBwcm9wZXJseSB3aGVuIEJfRU5ESUFOIGlzIE5PVAojIGRlZmluZWQuICBUaGUgVDkwIGludHMgYW5kIGxvbmdzIGFyZSA4IGJ5dGVzIGxvbmcsIGFuZCBhcHBhcmVudGx5IHRoZQojIEJfRU5ESUFOIGNvZGUgYXNzdW1lcyA0IGJ5dGUgaW50cy4gIEZvcnR1bmF0ZWx5LCB0aGUgbm9uLUJfRU5ESUFOIGFuZAojIG5vbiBMX0VORElBTiBjb2RlIGFsaWducyB0aGUgYnl0ZXMgaW4gZWFjaCB3b3JkIGNvcnJlY3RseS4KIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSBpcyB0byBhdm9pZCB0d28gZmF0YWwgY29tcGlsZXIgZXJyb3JzOgojJ1Rha2luZyB0aGUgYWRkcmVzcyBvZiBhIGJpdCBmaWVsZCBpcyBub3QgYWxsb3dlZC4gJwojJ0FuIGV4cHJlc3Npb24gd2l0aCBiaXQgZmllbGQgZXhpc3RzIGFzIHRoZSBvcGVyYW5kIG9mICJzaXplb2YiICcKIyAod3JpdHRlbiBieSBXYXluZSBTY2hyb2VkZXIgPHNjaHJvZWRlQFNEU0MuRURVPikKIwojIGo5MCBpcyBjb25zaWRlcmVkIHRoZSBiYXNlIG1hY2hpbmUgdHlwZSBmb3IgdW5pY29zIG1hY2hpbmVzLAojIHNvIHRoaXMgY29uZmlndXJhdGlvbiBpcyBub3cgY2FsbGVkICJjcmF5LWo5MCIgLi4uCiJjcmF5LWo5MCIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgREVTX0lOVDo6OiIsCgojCiMgQ3JheSBUM0UgKFJlc2VhcmNoIENlbnRlciBKdWVsaWNoLCBiZWNrbWFuQGFjbC5sYW5sLmdvdikKIwojIFRoZSBCSVRfRklFTERfTElNSVRTIGRlZmluZSB3YXMgd3JpdHRlbiBmb3IgdGhlIEM5MCAoaXQgc2VlbXMpLiAgSSBhZGRlZAojIGFub3RoZXIgdXNlLiAgQmFzaWNhbGx5LCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBUM0UgdXNlcyBzb21lIGJpdCBmaWVsZHMKIyBmb3Igc29tZSBzdF9hZGRyIHN0dWZmLCBhbmQgdGhlbiBzaXplb2YgYW5kIGFkZHJlc3Mtb2YgZmFpbHMKIyBJIGNvdWxkIG5vdCB1c2UgdGhlIGFtcy9hbHBoYS5vIG9wdGlvbiBiZWNhdXNlIHRoZSBDcmF5IGFzc2VtYmxlciwgJ2NhbScKIyBkaWQgbm90IGxpa2UgaXQuCiJjcmF5LXQzZSIsICJjYzogLURCSVRfRklFTERfTElNSVRTIC1EVEVSTUlPUzo6KHVua25vd24pOkNSQVk6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6OjoiLAoKIyBER1VYLCA4ODEwMC4KImRndXgtUjMtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6UkM0X0lOREVYIERFU19VTlJPTEw6OjoiLAoiZGd1eC1SNC14ODYtZ2NjIiwJImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6KHVua25vd24pOjotbG5zbCAtbHNvY2tldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX0iLAoKIyBTaW5peC9SZWxpYW50VU5JWCBSTTQwMAojIE5PVEU6IFRoZSBDRFMrKyBDb21waWxlciB1cCB0byBWMi4wQnNvbWV0aGluZyBoYXMgdGhlIElSSVhfQ0NfQlVHIG9wdGltaXplciBwcm9ibGVtLiBCZXR0ZXIgdXNlIC1nICAqLwoiUmVsaWFudFVOSVgiLCJjYzotS1BJQyAtZyAtRFRFUk1JT1MgLURCX0VORElBTjo6LUt0aHJlYWQ6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOkJOX0xMT05HIERFU19QVFIgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpyZWxpYW50dW5peC1zaGFyZWQ6Ojouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJTSU5JWCIsImNjOi1POjoodW5rbm93bik6U05JOi1sc29ja2V0IC1sbnNsIC1sYyAtTC91c3IvdWNibGliIC1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCiJTSU5JWC1OIiwiL3Vzci91Y2IvY2M6LU8yIC1taXNhbGlnbmVkOjoodW5rbm93bik6Oi1sdWNiOlJDNF9JTkRFWCBSQzRfQ0hBUjo6OiIsCgojIFNJRU1FTlMgQlMyMDAwL09TRDogYW4gRUJDRElDLWJhc2VkIG1haW5mcmFtZQoiQlMyMDAwLU9TRCIsImM4OTotTyAtWExMTUwgLVhMTE1LIC1YTCAtREJfRU5ESUFOIC1EVEVSTUlPUyAtRENIQVJTRVRfRUJDRElDOjoodW5rbm93bik6Oi1sc29ja2V0IC1sbnNsOlRISVJUWV9UV09fQklUIERFU19QVFIgREVTX1VOUk9MTCBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgQkZfUFRSOjo6IiwKCiMgT1MvMzkwIFVuaXggYW4gRUJDRElDLWJhc2VkIFVuaXggc3lzdGVtIG9uIElCTSBtYWluZnJhbWUKIyBZb3UgbmVlZCB0byBjb21waWxlIHVzaW5nIHRoZSBjODkuc2ggd3JhcHBlciBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZQojIElCTSBjb21waWxlciBkb2VzIG5vdCBsaWtlIHRoZSAtTCBzd2l0Y2ggYWZ0ZXIgYW55IG9iamVjdCBtb2R1bGVzLgojCiJPUzM5MC1Vbml4IiwiYzg5LnNoOi1PIC1EQl9FTkRJQU4gLURDSEFSU0VUX0VCQ0RJQyAtRE5PX1NZU19QQVJBTV9IICAtRF9BTExfU09VUkNFOjoodW5rbm93bik6OjpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIFZpc3VhbCBDIHRhcmdldHMKIwojIFdpbjY0IHRhcmdldHMsIFdJTjY0SSBkZW5vdGVzIElBLTY0IGFuZCBXSU42NEEgLSBBTUQ2NAoiVkMtV0lONjRJIiwiY2w6LVczIC1HczAgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vIGlhNjQtbW9udC5vOjphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hhNTEyLWlhNjQubzo6Ojo6OjpnaGFzaC1pYTY0Lm86aWFzOndpbjMyIiwKIlZDLVdJTjY0QSIsImNsOi1XMyAtR3MwIC1HeSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lONjRBOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOng4Nl82NGNwdWlkLm86Ym5fYXNtLm8geDg2XzY0LW1vbnQubzo6YWVzLXg4Nl82NC5vIGFlc25pLXg4Nl82NC5vOjptZDUteDg2XzY0Lm86c2hhMS14ODZfNjQubyBzaGEyNTYteDg2XzY0Lm8gc2hhNTEyLXg4Nl82NC5vOjpyYzQteDg2XzY0Lm86Ojp3cC14ODZfNjQubzpjbWxsLXg4Nl82NC5vIGNtbGxfbWlzYy5vOmdoYXNoLXg4Nl82NC5vOmF1dG86d2luMzIiLAoiZGVidWctVkMtV0lONjRJIiwiY2w6LVczIC1HczAgLUd5IC1aaSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lONjRJOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOmlhNjRjcHVpZC5vOmlhNjQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLWlhNjQubzo6bWQ1LWlhNjQubzpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86Ojo6Ojo6aWFzOndpbjMyIiwKImRlYnVnLVZDLVdJTjY0QSIsImNsOi1XMyAtR3MwIC1HeSAtWmkgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjp4ODZfNjRjcHVpZC5vOmJuX2FzbS5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubzphdXRvOndpbjMyIiwKIyB4ODYgV2luMzIgdGFyZ2V0IGRlZmF1bHRzIHRvIEFOU0kgQVBJLCBpZiB5b3Ugd2FudCBVTklDT0RFLCBjb21wbGVtZW50CiMgJ3BlcmwgQ29uZmlndXJlIFZDLVdJTjMyJyB3aXRoICctRFVOSUNPREUgLURfVU5JQ09ERScKIlZDLVdJTjMyIiwiY2w6LVczIC1XWCAtR3MwIC1HRiAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjMyOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTp3aW4zMm46d2luMzIiLAojIFVuaWZpZWQgQ0UgdGFyZ2V0CiJkZWJ1Zy1WQy1XSU4zMiIsImNsOi1XMyAtV1ggLUdzMCAtR0YgLUd5IC1aaSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OndpbjMybjp3aW4zMiIsCiJWQy1DRSIsImNsOjo6OldJTkNFOjpCTl9MTE9ORyBSQzRfSU5ERVggRVhQT1JUX1ZBUl9BU19GTiAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQm9ybGFuZCBDKysgNC41CiJCQy0zMiIsImJjYzMyOjo6OldJTjMyOjpCTl9MTE9ORyBERVNfUFRSIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOOiR7bm9fYXNtfTp3aW4zMiIsCgojIE1pbkdXCiJtaW5ndyIsICJnY2M6LW1uby1jeWd3aW4gLURMX0VORElBTiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9NVDpNSU5HVzMyOi1sd3MyXzMyIC1sZ2RpMzIgLWxjcnlwdDMyOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfSBFWFBPUlRfVkFSX0FTX0ZOOiR7eDg2X2FzbX06Y29mZjp3aW4zMjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTCAtRE9QRU5TU0xfVVNFX0FQUExJTks6LW1uby1jeWd3aW46LmRsbC5hIiwKIyBBcyBmb3IgT1BFTlNTTF9VU0VfQVBQTElOSy4gQXBwbGluayBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgLmRsbAojIGNvbXBpbGVkIHdpdGggb25lIGNvbXBpbGVyIHdpdGggYXBwbGljYXRpb24gY29tcGlsZWQgd2l0aCBhbm90aGVyCiMgY29tcGlsZXIuIEl0J3MgcG9zc2libGUgdG8gZW5nYWdlIEFwcGxpbmsgc3VwcG9ydCBpbiBtaW5ndzY0IGJ1aWxkLAojIGJ1dCBpdCdzIG5vdCBkb25lLCBiZWNhdXNlIHRpbGwgbWluZ3c2NCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGV4Y2VwdGlvbgojIGhhbmRsaW5nLCBvbmUgY2FuJ3Qgc2VyaW91c2x5IGNvbnNpZGVyIGl0cyBiaW5hcmllcyBmb3IgdXNpbmcgd2l0aAojIG5vbi1taW5ndzY0IHJ1bi10aW1lIGVudmlyb25tZW50LiBBbmQgYXMgbWluZ3c2NCBpcyBhbHdheXMgY29uc2lzdGVudAojIHdpdGggaXRzZWxmLCBBcHBsaW5rIGlzIG5ldmVyIGVuZ2FnZWQgYW5kIGNhbiBhcyB3ZWxsIGJlIG9taXR0ZWQuCiJtaW5ndzY0IiwgImdjYzotbW5vLWN5Z3dpbiAtRExfRU5ESUFOIC1PMyAtV2FsbCAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURVTklDT0RFIC1EX1VOSUNPREU6Oi1EX01UOk1JTkdXNjQ6LWx3czJfMzIgLWxnZGkzMiAtbGNyeXB0MzI6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjoke3g4Nl82NF9hc219Om1pbmd3NjQ6d2luMzI6Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LW1uby1jeWd3aW46LmRsbC5hIiwKCiMgVVdJTiAKIlVXSU4iLCAiY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLU8gLVdhbGw6OjpVV0lOOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKCiMgQ3lnd2luCiJDeWd3aW4tcHJlMS4zIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW00ODYgLVdhbGw6Oih1bmtub3duKTpDWUdXSU4zMjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTp3aW4zMiIsCiJDeWd3aW4iLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6OkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTpjb2ZmOmRsZmNuOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMOi1zaGFyZWQ6LmRsbC5hIiwKImRlYnVnLUN5Z3dpbiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ET1BFTlNTTF9OT19BU00gLWcgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjo6Q1lHV0lOMzI6Ojoke25vX2FzbX06ZGxmY246Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LXNoYXJlZDouZGxsLmEiLAoKIyBOZXRXYXJlIGZyb20gRGF2aWQgV2FyZCAoZHN3YXJkQG5vdmVsbC5jb20pCiMgcmVxdWlyZXMgZWl0aGVyIE1ldHJvV2Vya3MgTkxNIGRldmVsb3BtZW50IHRvb2xzLCBvciBnY2MgLyBubG1jb252CiMgTmV0V2FyZSBkZWZhdWx0cyBzb2NrZXQgYmlvIHRvIFdpblNvY2sgc29ja2V0cy4gSG93ZXZlciwKIyB0aGUgYnVpbGRzIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSBCU0Qgc29ja2V0cyBpbnN0ZWFkLgojIG5ldHdhcmUtY2xpYiA9PiBsZWdhY3kgQ0xpYiBjLXJ1bnRpbWUgc3VwcG9ydAoibmV0d2FyZS1jbGliIiwgIm13Y2NubG06Ojo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWNsaWItYnNkc29jayIsICJtd2NjbmxtOjo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbndzZGsvaW5jbHVkZS9ubG0gLUkvbmRrL3dzMjk1c2RrL2luY2x1ZGUgLURMX0VORElBTiAtRE5FVFdBUkVfQ0xJQiAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1PMiAtV2FsbDo6Ojo6JHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1jbGliLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9ud3Nkay9pbmNsdWRlL25sbSAtRE5FVFdBUkVfQlNEU09DSyAtRE5FVERCX1VTRV9JTlRFUk5FVCAtRExfRU5ESUFOIC1ETkVUV0FSRV9DTElCIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLU8yIC1XYWxsOjo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiMgbmV0d2FyZS1saWJjID0+IExpYkMvTktTIHN1cHBvcnQKIm5ldHdhcmUtbGliYyIsICJtd2NjbmxtOjo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2siLCAibXdjY25sbTo6Ojo6OkJOX0xMT05HICR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtbGliYy1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL2xpYmMvaW5jbHVkZSAtSS9uZGsvbGliYy9pbmNsdWRlL3dpbnNvY2sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWJzZHNvY2stZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9saWJjL2luY2x1ZGUgLURORVRXQVJFX0JTRFNPQ0sgLURMX0VORElBTiAtRE5FVFdBUkVfTElCQyAtRE9QRU5TU0xfU1lTTkFNRV9ORVRXQVJFIC1EVEVSTUlPIC1PMiAtV2FsbDo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoKIyBESkdQUAoiREpHUFAiLCAiZ2NjOi1JL2Rldi9lbnYvV0FUVF9ST09UL2luYyAtRFRFUk1JT1MgLURMX0VORElBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzIgLVdhbGw6OjpNU0RPUzotTC9kZXYvZW52L1dBVFRfUk9PVC9saWIgLWx3YXR0OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEub3V0OiIsCgojIFVsdHJpeCBmcm9tIEJlcm5oYXJkIFNpbW9uIDxzaW1vbkB6aWQudHV3aWVuLmFjLmF0PgoidWx0cml4LWNjIiwiY2M6LXN0ZDEgLU8gLU9saW1pdCAyNTAwIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoidWx0cml4LWdjYyIsImdjYzotTzMgLURMX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkc6Ojo6IiwKIyBLJlIgQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkOyB5b3UgbmVlZCBnY2Mgb24gb2xkIFVsdHJpeCBpbnN0YWxsYXRpb25zCiMjInVsdHJpeCIsImNjOi1PMiAtRE5PUFJPVE8gLUROT0NPTlNUIC1ETF9FTkRJQU46Oih1bmtub3duKTo6Ojo6OjoiLAoKIyMjIyMgTWFjT1MgWCAoYS5rLmEuIFJoYXBzb2R5IG9yIERhcndpbikgc2V0dXAKInJoYXBzb2R5LXBwYy1jYyIsImNjOi1PMyAtREJfRU5ESUFOOjoodW5rbm93bik6TUFDT1NYX1JIQVBTT0RZOjpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OjoiLAoiZGFyd2luLXBwYy1jYyIsImNjOi1hcmNoIHBwYyAtTzMgLURCX0VORElBTiAtV2EsLWZvcmNlX2NwdXN1YnR5cGVfQUxMOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjIC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbjY0LXBwYy1jYyIsImNjOi1hcmNoIHBwYzY0IC1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzY0X2FzbX06b3N4NjQ6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGM2NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLWczIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkYXJ3aW42NC14ODZfNjQtY2MiLCJjYzotYXJjaCB4ODZfNjQgLU8zIC1ETF9FTkRJQU4gLVdhbGw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219Om1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHg4Nl82NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCiJkZWJ1Zy1kYXJ3aW4tcHBjLWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EQl9FTkRJQU4gLWcgLVdhbGwgLU86Oi1EX1JFRU5UUkFOVDpNQUNPU1g6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzMyX2FzbX06b3N4MzI6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQzotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCgojIyMjIyBBL1VYCiJhdXgzLWdjYyIsImdjYzotTzIgLURURVJNSU86Oih1bmtub3duKTpBVVg6LWxic2Q6UkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOjo6IiwKCiMjIyMjIFNvbnkgTkVXUy1PUyA0LngKIm5ld3NvczQtZ2NjIiwiZ2NjOi1PIC1EQl9FTkRJQU46Oih1bmtub3duKTpORVdTNDotbG1sZCAtbGliZXJ0eTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6Ojo6IiwKCiMjIyMjIEdOVSBIdXJkCiJodXJkLXg4NiIsICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUMiLAoKIyMjIyMgT1MvMiBFTVgKIk9TMi1FTVgiLCAiZ2NjOjo6Ojo6OjoiLAoKIyMjIyMgVnhXb3JrcyBmb3IgdmFyaW91cyB0YXJnZXRzCiJ2eHdvcmtzLXBwYzQwNSIsImNjcHBjOi1nIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzQwNSAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM3NTAiLCJjY3BwYzotYW5zaSAtbm9zdGRpbmMgLURQUEM3NTAgLURfUkVFTlRSQU5UIC1mdm9sYXRpbGUgLWZuby1idWlsdGluIC1mbm8tZm9yLXNjb3BlIC1mc2lnbmVkLWNoYXIgLVdhbGwgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNjA0IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaCBcJChERUJVR19GTEFHKTo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MC1kZWJ1ZyIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1EREVCVUcgLWc6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1wcGM4NjAiLCJjY3BwYzotbm9zdGRpbmMgLW1zb2Z0LWZsb2F0IC1EQ1BVPVBQQzg2MCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjo6OjoiLAoidnh3b3Jrcy1taXBzbGUiLCJjY21pcHM6LUJcJChXSU5EX0JBU0UpL2hvc3QvXCQoV0lORF9IT1NUX1RZUEUpL2xpYi9nY2MtbGliLyAtRExfRU5ESUFOIC1FTCAtV2wsLUVMIC1taXBzMiAtbW5vLWJyYW5jaC1saWtlbHkgLUcgMCAtZm5vLWJ1aWx0aW4gLW1zb2Z0LWZsb2F0IC1EQ1BVPU1JUFMzMiAtRE1JUFNFTCAtRE5PX1NUUklOR1NfSCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2g6OjpWWFdPUktTOi1yOjoke25vX2FzbX06Ojo6OjpyYW5saWJtaXBzOiIsCgojIyMjIyBDb21wYXEgTm9uLVN0b3AgS2VybmVsIChUYW5kZW0pCiJ0YW5kZW0tYzg5IiwiYzg5Oi1XdyAtRF9fVEFOREVNIC1EX1hPUEVOX1NPVVJDRSAtRF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQ9MSAtRF9UQU5ERU1fU09VUkNFIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OlRISVJUWV9UV09fQklUOjo6IiwKCiMgdUNsaW51eAoidUNsaW51eC1kaXN0IiwiJEVOVnsnQ0MnfTpcJChDRkxBR1MpOjotRF9SRUVOVFJBTlQ6OlwkKExERkxBR1MpIFwkKExETElCUyk6Qk5fTExPTkc6JHtub19hc219OiRFTlZ7J0xJQlNTTF9kbGZjbid9OmxpbnV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOiRFTlZ7J1JBTkxJQid9OjoiLAoidUNsaW51eC1kaXN0NjQiLCIkRU5WeydDQyd9OlwkKENGTEFHUyk6Oi1EX1JFRU5UUkFOVDo6XCQoTERGTEFHUykgXCQoTERMSUJTKTpTSVhUWV9GT1VSX0JJVF9MT05HOiR7bm9fYXNtfTokRU5WeydMSUJTU0xfZGxmY24nfTpsaW51eC1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTokRU5WeydSQU5MSUInfTo6IiwKCik7CgpteSBATUsxTUZfQnVpbGRzPXF3KFZDLVdJTjY0SSBWQy1XSU42NEEKCQkgICAgZGVidWctVkMtV0lONjRJIGRlYnVnLVZDLVdJTjY0QQoJCSAgICBWQy1OVCBWQy1DRSBWQy1XSU4zMiBkZWJ1Zy1WQy1XSU4zMgoJCSAgICBCQy0zMiAKCQkgICAgbmV0d2FyZS1jbGliIG5ldHdhcmUtY2xpYi1ic2Rzb2NrCgkJICAgIG5ldHdhcmUtbGliYyBuZXR3YXJlLWxpYmMtYnNkc29jayk7CgpteSAkaWR4ID0gMDsKbXkgJGlkeF9jYyA9ICRpZHgrKzsKbXkgJGlkeF9jZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfdW5pc3RkID0gJGlkeCsrOwpteSAkaWR4X3RocmVhZF9jZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zeXNfaWQgPSAkaWR4Kys7Cm15ICRpZHhfbGZsYWdzID0gJGlkeCsrOwpteSAkaWR4X2JuX29wcyA9ICRpZHgrKzsKbXkgJGlkeF9jcHVpZF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfYm5fb2JqID0gJGlkeCsrOwpteSAkaWR4X2Rlc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfYWVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9iZl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfbWQ1X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9zaGExX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9jYXN0X29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzRfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JtZDE2MF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcmM1X29iaiA9ICRpZHgrKzsKbXkgJGlkeF93cF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfY21sbF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfbW9kZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X3Blcmxhc21fc2NoZW1lID0gJGlkeCsrOwpteSAkaWR4X2Rzb19zY2hlbWUgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX3RhcmdldCA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfY2ZsYWcgPSAkaWR4Kys7Cm15ICRpZHhfc2hhcmVkX2xkZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfZXh0ZW5zaW9uID0gJGlkeCsrOwpteSAkaWR4X3JhbmxpYiA9ICRpZHgrKzsKbXkgJGlkeF9hcmZsYWdzID0gJGlkeCsrOwpteSAkaWR4X211bHRpbGliID0gJGlkeCsrOwoKbXkgJHByZWZpeD0iIjsKbXkgJGxpYmRpcj0iIjsKbXkgJG9wZW5zc2xkaXI9IiI7Cm15ICRleGVfZXh0PSIiOwpteSAkaW5zdGFsbF9wcmVmaXg9ICIkRU5WeydJTlNUQUxMX1BSRUZJWCd9IjsKbXkgJGNyb3NzX2NvbXBpbGVfcHJlZml4PSIiOwpteSAkZmlwc2xpYmRpcj0iL3Vzci9sb2NhbC9zc2wvZmlwcy0xLjAvbGliLyI7Cm15ICRub2ZpcHNjYW5pc3RlcmNoZWNrPTA7Cm15ICRmaXBzZHNvPTA7Cm15ICRmaXBzY2FuaXN0ZXJpbnRlcm5hbD0ibiI7Cm15ICRiYXNlYWRkcj0iMHhGQjAwMDAwIjsKbXkgJG5vX3RocmVhZHM9MDsKbXkgJHRocmVhZHM9MDsKbXkgJG5vX3NoYXJlZD0wOyAjIGJ1dCAibm8tc2hhcmVkIiBpcyBkZWZhdWx0Cm15ICR6bGliPTE7ICAgICAgIyBidXQgIm5vLXpsaWIiIGlzIGRlZmF1bHQKbXkgJG5vX2tyYjU9MDsgICAjIGJ1dCAibm8ta3JiNSIgaXMgaW1wbGllZCB1bmxlc3MgIi0td2l0aC1rcmI1LS4uLiIgaXMgdXNlZApteSAkbm9fcmZjMzc3OT0xOyAjIGJ1dCAibm8tcmZjMzc3OSIgaXMgZGVmYXVsdApteSAkbm9fYXNtPTA7Cm15ICRub19kc289MDsKbXkgJG5vX2dtcD0wOwpteSBAc2tpcD0oKTsKbXkgJE1ha2VmaWxlPSJNYWtlZmlsZSI7Cm15ICRkZXNfbG9jbD0iY3J5cHRvL2Rlcy9kZXNfbG9jbC5oIjsKbXkgJGRlcwk9ImNyeXB0by9kZXMvZGVzLmgiOwpteSAkYm4JPSJjcnlwdG8vYm4vYm4uaCI7Cm15ICRtZDIJPSJjcnlwdG8vbWQyL21kMi5oIjsKbXkgJHJjNAk9ImNyeXB0by9yYzQvcmM0LmgiOwpteSAkcmM0X2xvY2w9ImNyeXB0by9yYzQvcmM0X2xvY2wuaCI7Cm15ICRpZGVhCT0iY3J5cHRvL2lkZWEvaWRlYS5oIjsKbXkgJHJjMgk9ImNyeXB0by9yYzIvcmMyLmgiOwpteSAkYmYJPSJjcnlwdG8vYmYvYmZfbG9jbC5oIjsKbXkgJGJuX2FzbQk9ImJuX2FzbS5vIjsKbXkgJGRlc19lbmM9ImRlc19lbmMubyBmY3J5cHRfYi5vIjsKbXkgJGFlc19lbmM9ImFlc19jb3JlLm8gYWVzX2NiYy5vIjsKbXkgJGJmX2VuYwk9ImJmX2VuYy5vIjsKbXkgJGNhc3RfZW5jPSJjX2VuYy5vIjsKbXkgJHJjNF9lbmM9InJjNF9lbmMubyByYzRfc2tleS5vIjsKbXkgJHJjNV9lbmM9InJjNV9lbmMubyI7Cm15ICRtZDVfb2JqPSIiOwpteSAkc2hhMV9vYmo9IiI7Cm15ICRybWQxNjBfb2JqPSIiOwpteSAkY21sbF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNjLm8gY21sbF9jYmMubyI7Cm15ICRwcm9jZXNzb3I9IiI7Cm15ICRkZWZhdWx0X3JhbmxpYjsKbXkgJHBlcmw7Cm15ICRmaXBzPTA7CgoKIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKCm15ICVkaXNhYmxlZCA9ICggIyAid2hhdCIgICAgICAgICA9PiAiY29tbWVudCIgW29yIHNwZWNpYWwga2V5d29yZCAiZXhwZXJpbWVudGFsIl0KCQkgImdtcCIJCSAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJqcGFrZSIgICAgICAgICAgPT4gImV4cGVyaW1lbnRhbCIsCiAgICAgICAgICAgICAgICAgIm1kMiIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgInJjNSIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJyZmMzNzc5IgkgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAic2hhcmVkIiAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInN0b3JlIgkgID0+ICJleHBlcmltZW50YWwiLAogICAgICAgICAgICAgICAgICJ6bGliIiAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJ6bGliLWR5bmFtaWMiICAgPT4gImRlZmF1bHQiCiAgICAgICAgICAgICAgICk7Cm15IEBleHBlcmltZW50YWwgPSAoKTsKCiMgVGhpcyBpcyB3aGF0ICRkZXBmbGFncyB3aWxsIGxvb2sgbGlrZSB3aXRoIHRoZSBhYm92ZSBkZWZhdWx0cwojICh3ZSBuZWVkIHRoaXMgdG8gc2VlIGlmIHdlIHNob3VsZCBhZHZpc2UgdGhlIHVzZXIgdG8gcnVuICJtYWtlIGRlcGVuZCIpOgpteSAkZGVmYXVsdF9kZXBmbGFncyA9ICIgLURPUEVOU1NMX05PX0dNUCAtRE9QRU5TU0xfTk9fSlBBS0UgLURPUEVOU1NMX05PX01EMiAtRE9QRU5TU0xfTk9fUkM1IC1ET1BFTlNTTF9OT19SRkMzNzc5IC1ET1BFTlNTTF9OT19TVE9SRSI7CgojIEV4cGxpY2l0ICJuby0uLi4iIG9wdGlvbnMgd2lsbCBiZSBjb2xsZWN0ZWQgaW4gJWRpc2FibGVkIGFsb25nIHdpdGggdGhlIGRlZmF1bHRzLgojIFRvIHJlbW92ZSBzb21ldGhpbmcgZnJvbSAlZGlzYWJsZWQsIHVzZSAiZW5hYmxlLWZvbyIgKHVubGVzcyBpdCdzIGV4cGVyaW1lbnRhbCkuCiMgRm9yIHN5bW1ldHJ5LCAiZGlzYWJsZS1mb28iIGlzIGEgc3lub255bSBmb3IgIm5vLWZvbyIuCgojIEZvciBmZWF0dXJlcyBjYWxsZWQgImV4cGVyaW1lbnRhbCIgaGVyZSwgYSBtb3JlIGV4cGxpY2l0ICJleHBlcmltZW50YWwtZm9vIiBpcyBuZWVkZWQgdG8gZW5hYmxlLgojIFdlIHdpbGwgY29sbGVjdCBzdWNoIHJlcXVlc3RzIGluIEBleHBlcmltZW50YWwuCiMgVG8gYXZvaWQgYWNjaWRlbnRhbCB1c2Ugb2YgZXhwZXJpbWVudGFsIGZlYXR1cmVzLCBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHVzZSAtRE9QRU5TU0xfRVhQRVJJTUVOVEFMX0ZPTy4KCgpteSAkbm9fc3NlMj0wOwoKJnVzYWdlIGlmICgkI0FSR1YgPCAwKTsKCm15ICRmbGFnczsKbXkgJGRlcGZsYWdzOwpteSAkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lczsKbXkgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7Cm15ICRvcGVuc3NsX3RocmVhZF9kZWZpbmVzOwpteSAkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKbXkgJG9wZW5zc2xfb3RoZXJfZGVmaW5lczsKbXkgJGxpYnM7Cm15ICRsaWJrcmI1PSIiOwpteSAkdGFyZ2V0OwpteSAkb3B0aW9uczsKbXkgJHN5bWxpbms7Cm15ICRtYWtlX2RlcGVuZD0wOwpteSAld2l0aGFyZ3M9KCk7CgpteSBAYXJndmNvcHk9QEFSR1Y7Cm15ICRhcmd2c3RyaW5nPSIiOwpteSAkYXJndl91bnByb2Nlc3NlZD0xOwoKd2hpbGUoJGFyZ3ZfdW5wcm9jZXNzZWQpCgl7CgkkZmxhZ3M9IiI7CgkkZGVwZmxhZ3M9IiI7Cgkkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfdGhyZWFkX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iIjsKCSRvcGVuc3NsX290aGVyX2RlZmluZXM9IiI7CgkkbGlicz0iIjsKCSR0YXJnZXQ9IiI7Cgkkb3B0aW9ucz0iIjsKCSRzeW1saW5rPTE7CgoJJGFyZ3ZfdW5wcm9jZXNzZWQ9MDsKCSRhcmd2c3RyaW5nPWpvaW4oJyAnLEBhcmd2Y29weSk7CgpQUk9DRVNTX0FSR1M6Cglmb3JlYWNoIChAYXJndmNvcHkpCgkJewoJCXMgL14tbm8tL25vLS87ICMgc29tZSBwZW9wbGUganVzdCBjYW4ndCByZWFkIHRoZSBpbnN0cnVjdGlvbnMKCgkJIyByZXdyaXRlIHNvbWUgb3B0aW9ucyBpbiAiZW5hYmxlLS4uLiIgZm9ybQoJCXMgL14tPy0/c2hhcmVkJC9lbmFibGUtc2hhcmVkLzsKCQlzIC9edGhyZWFkcyQvZW5hYmxlLXRocmVhZHMvOwoJCXMgL156bGliJC9lbmFibGUtemxpYi87CgkJcyAvXnpsaWItZHluYW1pYyQvZW5hYmxlLXpsaWItZHluYW1pYy87CgoJCWlmICgvXm5vLSguKykkLyB8fCAvXmRpc2FibGUtKC4rKSQvKQoJCQl7CgkJCWlmICghKCRkaXNhYmxlZHskMX0gZXEgImV4cGVyaW1lbnRhbCIpKQoJCQkJewoJCQkJaWYgKCQxIGVxICJzc2wiKQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7InNzbDIifSA9ICJvcHRpb24oc3NsKSI7CgkJCQkJJGRpc2FibGVkeyJzc2wzIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJCX0KCQkJCWVsc2lmICgkMSBlcSAidGxzIikKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyJ0bHMxIn0gPSAib3B0aW9uKHRscykiCgkJCQkJfQoJCQkJZWxzZQoJCQkJCXsKCQkJCQkkZGlzYWJsZWR7JDF9ID0gIm9wdGlvbiI7CgkJCQkJfQoJCQkJfQkJCQoJCQl9CgkJZWxzaWYgKC9eZW5hYmxlLSguKykkLyB8fCAvXmV4cGVyaW1lbnRhbC0oLispJC8pCgkJCXsKCQkJbXkgJGFsZ28gPSAkMTsKCQkJaWYgKCRkaXNhYmxlZHskYWxnb30gZXEgImV4cGVyaW1lbnRhbCIpCgkJCQl7CgkJCQlkaWUgIllvdSBhcmUgcmVxdWVzdGluZyBhbiBleHBlcmltZW50YWwgZmVhdHVyZTsgcGxlYXNlIHNheSAnZXhwZXJpbWVudGFsLSRhbGdvJyBpZiB5b3UgYXJlIHN1cmVcbiIKCQkJCQl1bmxlc3MgKC9eZXhwZXJpbWVudGFsLS8pOwoJCQkJcHVzaCBAZXhwZXJpbWVudGFsLCAkYWxnbzsKCQkJCX0KCQkJZGVsZXRlICRkaXNhYmxlZHskYWxnb307CgoJCQkkdGhyZWFkcyA9IDEgaWYgKCRhbGdvIGVxICJ0aHJlYWRzIik7CgkJCX0KCQllbHNpZiAoL14tLXRlc3Qtc2FuaXR5JC8pCgkJCXsKCQkJZXhpdCgmdGVzdF9zYW5pdHkoKSk7CgkJCX0KCQllbHNpZiAoL14tLXN0cmljdC13YXJuaW5ncy8pCgkJCXsKCQkJJHN0cmljdF93YXJuaW5ncyA9IDE7CgkJCX0KCQllbHNpZiAoL15yZWNvbmZpZ3VyZS8gfHwgL15yZWNvbmYvKQoJCQl7CgkJCWlmIChvcGVuKElOLCI8JE1ha2VmaWxlIikpCgkJCQl7CgkJCQl3aGlsZSAoPElOPikKCQkJCQl7CgkJCQkJY2hvbXA7CgkJCQkJaWYgKC9eQ09ORklHVVJFX0FSR1M9KC4qKS8pCgkJCQkJCXsKCQkJCQkJJGFyZ3ZzdHJpbmc9JDE7CgkJCQkJCUBhcmd2Y29weT1zcGxpdCgnICcsJGFyZ3ZzdHJpbmcpOwoJCQkJCQlkaWUgIkluY29ycmVjdCBkYXRhIHRvIHJlY29uZmlndXJlLCBwbGVhc2UgZG8gYSBub3JtYWwgY29uZmlndXJhdGlvblxuIgoJCQkJCQkJaWYgKGdyZXAoL15yZWNvbmYvLEBhcmd2Y29weSkpOwoJCQkJCQlwcmludCAiUmVjb25maWd1cmluZyB3aXRoOiAkYXJndnN0cmluZ1xuIjsKCQkJCQkJJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCQkJCQkJY2xvc2UoSU4pOwoJCQkJCQlsYXN0IFBST0NFU1NfQVJHUzsKCQkJCQkJfQoJCQkJCX0KCQkJCWNsb3NlKElOKTsKCQkJCX0KCQkJZGllICJJbnN1ZmZpY2llbnQgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiI7CgkJCX0KCQllbHNpZiAoL14zODYkLykKCQkJeyAkcHJvY2Vzc29yPTM4NjsgfQoJCWVsc2lmICgvXnJzYXJlZiQvKQoJCQl7CgkJCSMgTm8gUlNBcmVmIHN1cHBvcnQgYW55IG1vcmUgc2luY2UgaXQncyBub3QgbmVlZGVkLgoJCQkjIFRoZSBjaGVjayBmb3IgdGhlIG9wdGlvbiBpcyB0aGVyZSBzbyBzY3JpcHRzIGFyZW4ndAoJCQkjIGJyb2tlbgoJCQl9CgkJZWxzaWYgKC9ebm9maXBzY2FuaXN0ZXJjaGVjayQvKQoJCQl7CgkJCSRmaXBzID0gMTsKCQkJJG5vZmlwc2NhbmlzdGVyY2hlY2sgPSAxOwoJCQl9CgkJZWxzaWYgKC9eZmlwc2NhbmlzdGVyYnVpbGQkLykKCQkJewoJCQkkZmlwcyA9IDE7CgkJCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCQkJJGZpcHNsaWJkaXI9IiI7CgkJCSRmaXBzY2FuaXN0ZXJpbnRlcm5hbD0ieSI7CgkJCX0KCQllbHNpZiAoL15maXBzZHNvJC8pCgkJCXsKCQkJJGZpcHMgPSAxOwoJCQkkbm9maXBzY2FuaXN0ZXJjaGVjayA9IDE7CgkJCSRmaXBzbGliZGlyPSIiOwoJCQkkZmlwc2NhbmlzdGVyaW50ZXJuYWw9InkiOwoJCQkkZmlwc2RzbyA9IDE7CgkJCX0KCQllbHNpZiAoL15bLStdLykKCQkJewoJCQlpZiAoL14tW2xMXSguKikkLyBvciAvXi1XbCwvKQoJCQkJewoJCQkJJGxpYnMuPSRfLiIgIjsKCQkJCX0KCQkJZWxzaWYgKC9eLVteLV0vIG9yIC9eXCsvKQoJCQkJewoJCQkJJGZsYWdzLj0kXy4iICI7CgkJCQl9CgkJCWVsc2lmICgvXi0tcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRwcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0tbGliZGlyPSguKikkLykKCQkJCXsKCQkJCSRsaWJkaXI9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0tb3BlbnNzbGRpcj0oLiopJC8pCgkJCQl7CgkJCQkkb3BlbnNzbGRpcj0kMTsKCQkJCX0KCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC1rcmI1LShkaXJ8bGlifGluY2x1ZGV8Zmxhdm9yKT0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7ImtyYjUtIi4kMX09JDI7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC16bGliLWxpYj0oLiopJC8pCgkJCQl7CgkJCQkkd2l0aGFyZ3N7InpsaWItbGliIn09JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0td2l0aC16bGliLWluY2x1ZGU9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJ6bGliLWluY2x1ZGUifT0iLUkkMSI7CgkJCQl9CgkJCWVsc2lmICgvXi0tY3Jvc3MtY29tcGlsZS1wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJGNyb3NzX2NvbXBpbGVfcHJlZml4PSQxOwoJCQkJfQoJCQllbHNlCgkJCQl7CgkJCQlwcmludCBTVERFUlIgJHVzYWdlOwoJCQkJZXhpdCgxKTsKCQkJCX0KCQkJfQoJCWVsc2lmICgkXyA9fiAvXihbXjpdKyk6KC4rKSQvKQoJCQl7CgkJCWV2YWwgIlwkdGFibGV7XCQxfSA9IFwiJDJcIiI7ICMgYWxsb3cgJHh4eCBjb25zdHJ1Y3RzIGluIHRoZSBzdHJpbmcKCQkJJHRhcmdldD0kMTsKCQkJfQoJCWVsc2UKCQkJewoJCQlkaWUgInRhcmdldCBhbHJlYWR5IGRlZmluZWQgLSAkdGFyZ2V0IChvZmZlbmRpbmcgYXJnOiAkXylcbiIgaWYgKCR0YXJnZXQgbmUgIiIpOwoJCQkkdGFyZ2V0PSRfOwoJCQl9CgoJCXVubGVzcyAoJF8gZXEgJHRhcmdldCB8fCAvXm5vLS8gfHwgL15kaXNhYmxlLS8pCgkJCXsKCQkJIyAibm8tLi4uIiBmb2xsb3dzIGxhdGVyIGFmdGVyIGltcGxpZWQgZGlzYWN0aXZhdGlvbnMKCQkJIyBoYXZlIGJlZW4gZGVyaXZlZC4gIChEb24ndCB0YWtlIHRoaXMgdG9vIHNlcm9pdXNseSwKCQkJIyB3ZSByZWFsbHkgb25seSB3cml0ZSBPUFRJT05TIHRvIHRoZSBNYWtlZmlsZSBvdXQgb2YKCQkJIyBub3N0YWxnaWEuKQoKCQkJaWYgKCRvcHRpb25zIGVxICIiKQoJCQkJeyAkb3B0aW9ucyA9ICRfOyB9CgkJCWVsc2UKCQkJCXsgJG9wdGlvbnMgLj0gIiAiLiRfOyB9CgkJCX0KCQl9Cgl9CgoKCmlmICgkcHJvY2Vzc29yIGVxICIzODYiKQoJewoJJGRpc2FibGVkeyJzc2UyIn0gPSAiZm9yY2VkIjsKCX0KCmlmICghZGVmaW5lZCgkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0pIHx8ICR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSBlcSAiIikKCXsKCSRkaXNhYmxlZHsia3JiNSJ9ID0gImtyYjUtZmxhdm9yIG5vdCBzcGVjaWZpZWQiOwoJfQoKaWYgKCFkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJewoJIyAiemxpYi1keW5hbWljIiB3YXMgc3BlY2lmaWNhbGx5IGVuYWJsZWQsIHNvIGVuYWJsZSAiemxpYiIKCWRlbGV0ZSAkZGlzYWJsZWR7InpsaWIifTsKCX0KCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsicmlqbmRhZWwifSkpCgl7CgkkZGlzYWJsZWR7ImFlcyJ9ID0gImZvcmNlZCI7Cgl9CmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZGVzIn0pKQoJewoJJGRpc2FibGVkeyJtZGMyIn0gPSAiZm9yY2VkIjsKCX0KaWYgKGRlZmluZWQoJGRpc2FibGVkeyJlYyJ9KSkKCXsKCSRkaXNhYmxlZHsiZWNkc2EifSA9ICJmb3JjZWQiOwoJJGRpc2FibGVkeyJlY2RoIn0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDIuMCByZXF1aXJlcyBNRDUgYW5kIFJTQQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsicnNhIn0pKQoJewoJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9yY2VkIjsKCX0KCiMgU1NMIDMuMCBhbmQgVExTIHJlcXVpcmVzIE1ENSBhbmQgU0hBIGFuZCBlaXRoZXIgUlNBIG9yIERTQStESAppZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsic2hhIn0pCiAgICB8fCAoZGVmaW5lZCgkZGlzYWJsZWR7InJzYSJ9KQogICAgICAgICYmIChkZWZpbmVkKCRkaXNhYmxlZHsiZHNhIn0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkaCJ9KSkpKQoJewoJJGRpc2FibGVkeyJzc2wzIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsidGxzMSJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InRsczEifSkpCgl7CgkkZGlzYWJsZWR7InRsc2V4dCJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImVjIn0pIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkc2EifSkKICAgIHx8IGRlZmluZWQoJGRpc2FibGVkeyJkaCJ9KSkKCXsKCSRkaXNhYmxlZHsiZ29zdCJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoJHRhcmdldCBlcSAiVEFCTEUiKSB7Cglmb3JlYWNoICR0YXJnZXQgKHNvcnQga2V5cyAldGFibGUpIHsKCQlwcmludF90YWJsZV9lbnRyeSgkdGFyZ2V0KTsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgZXEgIkxJU1QiKSB7Cglmb3JlYWNoIChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnQ7CgkJcHJpbnQgIlxuIjsKCX0KCWV4aXQgMDsKfQoKaWYgKCR0YXJnZXQgPX4gbS9eQ3lnV2luMzIoLS4qKSQvKSB7CgkkdGFyZ2V0ID0gIkN5Z3dpbiIuJDE7Cn0KCnByaW50ICJDb25maWd1cmluZyBmb3IgJHRhcmdldFxuIjsKCiZ1c2FnZSBpZiAoIWRlZmluZWQoJHRhYmxleyR0YXJnZXR9KSk7CgoKZm9yZWFjaCAoc29ydCAoa2V5cyAlZGlzYWJsZWQpKQoJewoJJG9wdGlvbnMgLj0gIiBuby0kXyI7CgoJcHJpbnRmICIgICAgbm8tJS0xMnMgJS0xMHMiLCAkXywgIlskZGlzYWJsZWR7JF99XSI7CgoJaWYgKC9eZHNvJC8pCgkJeyAkbm9fZHNvID0gMTsgfQoJZWxzaWYgKC9edGhyZWFkcyQvKQoJCXsgJG5vX3RocmVhZHMgPSAxOyB9CgllbHNpZiAoL15zaGFyZWQkLykKCQl7ICRub19zaGFyZWQgPSAxOyB9CgllbHNpZiAoL156bGliJC8pCgkJeyAkemxpYiA9IDA7IH0KCWVsc2lmICgvXnN0YXRpYy1lbmdpbmUkLykKCQl7IH0KCWVsc2lmICgvXnpsaWItZHluYW1pYyQvKQoJCXsgfQoJZWxzaWYgKC9ec3ltbGlua3MkLykKCQl7ICRzeW1saW5rID0gMDsgfQoJZWxzaWYgKC9ec3NlMiQvKQoJCXsgJG5vX3NzZTIgPSAxOyB9CgllbHNlCgkJewoJCW15ICgkQUxHTywgJGFsZ28pOwoJCSgkQUxHTyA9ICRhbGdvID0gJF8pID1+IHRyL1thLXpdL1tBLVpdLzsKCgkJaWYgKC9eYXNtJC8gfHwgL15lcnIkLyB8fCAvXmh3JC8gfHwgL15ody0vKQoJCQl7CgkJCSRvcGVuc3NsX290aGVyX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCQkKCQkJaWYgKC9eZXJyJC8pCXsgJGZsYWdzIC49ICItRE9QRU5TU0xfTk9fRVJSICI7IH0KCQkJZWxzaWYgKC9eYXNtJC8pCXsgJG5vX2FzbSA9IDE7IH0KCQkJfQoJCWVsc2UKCQkJewoJCQkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJCQlwcmludCAiIE9QRU5TU0xfTk9fJEFMR08iOwoKCQkJaWYgKC9ea3JiNSQvKQoJCQkJeyAkbm9fa3JiNSA9IDE7IH0KCQkJZWxzZQoJCQkJewoJCQkJcHVzaCBAc2tpcCwgJGFsZ287CgkJCQlwcmludCAiIChza2lwIGRpcikiOwoKCQkJCSRkZXBmbGFncyAuPSAiIC1ET1BFTlNTTF9OT18kQUxHTyI7CgkJCQl9CgkJCX0KCQl9CgoJcHJpbnQgIlxuIjsKCX0KCm15ICRleHBfY2ZsYWdzID0gIiI7CmZvcmVhY2ggKHNvcnQgQGV4cGVyaW1lbnRhbCkKCXsKCW15ICRBTEdPOwoJKCRBTEdPID0gJF8pID1+IHRyL1thLXpdL1tBLVpdLzsKCgkjIG9wZW5zc2xjb25mLmggd2lsbCBzZXQgT1BFTlNTTF9OT18uLi4gdW5sZXNzIE9QRU5TU0xfRVhQRVJJTUVOVEFMXy4uLiBpcyBkZWZpbmVkCgkkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lcyAuPSAiI2RlZmluZSBPUEVOU1NMX05PXyRBTEdPXG4iOwoJJGV4cF9jZmxhZ3MgLj0gIiAtRE9QRU5TU0xfRVhQRVJJTUVOVEFMXyRBTEdPIjsKCX0KCm15ICRJc01LMU1GPXNjYWxhciBncmVwIC9eJHRhcmdldCQvLEBNSzFNRl9CdWlsZHM7CgokZXhlX2V4dD0iLmV4ZSIgaWYgKCR0YXJnZXQgZXEgIkN5Z3dpbiIgfHwgJHRhcmdldCBlcSAiREpHUFAiIHx8ICR0YXJnZXQgPX4gL15taW5ndy8pOwokZXhlX2V4dD0iLm5sbSIgaWYgKCR0YXJnZXQgPX4gL25ldHdhcmUvKTsKJGV4ZV9leHQ9Ii5wbSIgIGlmICgkdGFyZ2V0ID1+IC92b3MvKTsKJG9wZW5zc2xkaXI9Ii91c3IvbG9jYWwvc3NsIiBpZiAoJG9wZW5zc2xkaXIgZXEgIiIgYW5kICRwcmVmaXggZXEgIiIpOwokcHJlZml4PSRvcGVuc3NsZGlyIGlmICRwcmVmaXggZXEgIiI7CgokZGVmYXVsdF9yYW5saWI9ICZ3aGljaCgicmFubGliIikgb3IgJGRlZmF1bHRfcmFubGliPSJ0cnVlIjsKJHBlcmw9JEVOVnsnUEVSTCd9IG9yICRwZXJsPSZ3aGljaCgicGVybDUiKSBvciAkcGVybD0md2hpY2goInBlcmwiKQogIG9yICRwZXJsPSJwZXJsIjsKbXkgJG1ha2UgPSAkRU5WeydNQUtFJ30gfHwgIm1ha2UiOwoKJGNyb3NzX2NvbXBpbGVfcHJlZml4PSRFTlZ7J0NST1NTX0NPTVBJTEUnfSBpZiAkY3Jvc3NfY29tcGlsZV9wcmVmaXggZXEgIiI7CgpjaG9wICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyID1+IC9cLyQvOwpjaG9wICRwcmVmaXggaWYgJHByZWZpeCA9fiAvLlwvJC87Cgokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wiIGlmICRvcGVuc3NsZGlyIGVxICIiOwokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgIX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOwoKCnByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwoKbXkgQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKbXkgJGNjID0gJGZpZWxkc1skaWR4X2NjXTsKIyBBbGxvdyBlbnZpcm9ubWVudCBDQyB0byBvdmVycmlkZSBjb21waWxlci4uLgppZigkRU5We0NDfSkgewogICAgJGNjID0gJEVOVntDQ307Cn0KbXkgJGNmbGFncyA9ICRmaWVsZHNbJGlkeF9jZmxhZ3NdOwpteSAkdW5pc3RkID0gJGZpZWxkc1skaWR4X3VuaXN0ZF07Cm15ICR0aHJlYWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfdGhyZWFkX2NmbGFnXTsKbXkgJHN5c19pZCA9ICRmaWVsZHNbJGlkeF9zeXNfaWRdOwpteSAkbGZsYWdzID0gJGZpZWxkc1skaWR4X2xmbGFnc107Cm15ICRibl9vcHMgPSAkZmllbGRzWyRpZHhfYm5fb3BzXTsKbXkgJGNwdWlkX29iaiA9ICRmaWVsZHNbJGlkeF9jcHVpZF9vYmpdOwpteSAkYm5fb2JqID0gJGZpZWxkc1skaWR4X2JuX29ial07Cm15ICRkZXNfb2JqID0gJGZpZWxkc1skaWR4X2Rlc19vYmpdOwpteSAkYWVzX29iaiA9ICRmaWVsZHNbJGlkeF9hZXNfb2JqXTsKbXkgJGJmX29iaiA9ICRmaWVsZHNbJGlkeF9iZl9vYmpdOwpteSAkbWQ1X29iaiA9ICRmaWVsZHNbJGlkeF9tZDVfb2JqXTsKbXkgJHNoYTFfb2JqID0gJGZpZWxkc1skaWR4X3NoYTFfb2JqXTsKbXkgJGNhc3Rfb2JqID0gJGZpZWxkc1skaWR4X2Nhc3Rfb2JqXTsKbXkgJHJjNF9vYmogPSAkZmllbGRzWyRpZHhfcmM0X29ial07Cm15ICRybWQxNjBfb2JqID0gJGZpZWxkc1skaWR4X3JtZDE2MF9vYmpdOwpteSAkcmM1X29iaiA9ICRmaWVsZHNbJGlkeF9yYzVfb2JqXTsKbXkgJHdwX29iaiA9ICRmaWVsZHNbJGlkeF93cF9vYmpdOwpteSAkY21sbF9vYmogPSAkZmllbGRzWyRpZHhfY21sbF9vYmpdOwpteSAkbW9kZXNfb2JqID0gJGZpZWxkc1skaWR4X21vZGVzX29ial07Cm15ICRwZXJsYXNtX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9wZXJsYXNtX3NjaGVtZV07Cm15ICRkc29fc2NoZW1lID0gJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdOwpteSAkc2hhcmVkX3RhcmdldCA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfdGFyZ2V0XTsKbXkgJHNoYXJlZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfY2ZsYWddOwpteSAkc2hhcmVkX2xkZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfbGRmbGFnXTsKbXkgJHNoYXJlZF9leHRlbnNpb24gPSAkZmllbGRzWyRpZHhfc2hhcmVkX2V4dGVuc2lvbl07Cm15ICRyYW5saWIgPSAkRU5WeydSQU5MSUInfSB8fCAkZmllbGRzWyRpZHhfcmFubGliXTsKbXkgJGFyID0gJEVOVnsnQVInfSB8fCAiYXIiOwpteSAkYXJmbGFncyA9ICRmaWVsZHNbJGlkeF9hcmZsYWdzXTsKbXkgJG11bHRpbGliID0gJGZpZWxkc1skaWR4X211bHRpbGliXTsKCiMgaWYgJHByZWZpeC9saWIkbXVsdGlsaWIgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhlbgojIGFzc3VtZSB0aGF0IGl0J3Mgbm90IHNlYXJjaGVkIGJ5IGxpbmtlciBhdXRvbWF0aWNhbGx5LCBpbgojIHdoaWNoIGNhc2UgYWRkaW5nICRtdWx0aWxpYiBzdWZmaXggY2F1c2VzIG1vcmUgZ3JpZWYgdGhhbgojIHdlJ3JlIHJlYWR5IHRvIHRvbGVyYXRlLCBzbyBkb24ndC4uLgokbXVsdGlsaWI9IiIgaWYgIS1kICIkcHJlZml4L2xpYiRtdWx0aWxpYiI7CgokbGliZGlyPSJsaWIkbXVsdGlsaWIiIGlmICRsaWJkaXIgZXEgIiI7CgokY2ZsYWdzID0gIiRjZmxhZ3MkZXhwX2NmbGFncyI7CgojICclJyBpbiAkbGZsYWdzIGlzIHVzZWQgdG8gc3BsaXQgZmxhZ3MgdG8gInByZS0iIGFuZCBwb3N0LWZsYWdzCm15ICgkcHJlbGZsYWdzLCRwb3N0bGZsYWdzKT1zcGxpdCgnJScsJGxmbGFncyk7CmlmIChkZWZpbmVkKCRwb3N0bGZsYWdzKSkJeyAkbGZsYWdzPSRwb3N0bGZsYWdzOwl9CmVsc2UJCQkJeyAkbGZsYWdzPSRwcmVsZmxhZ3M7IHVuZGVmICRwcmVsZmxhZ3M7CX0KCmlmICgkdGFyZ2V0ID1+IC9ebWluZ3cvICYmIGAkY2MgLS10YXJnZXQtaGVscCAyPiYxYCAhfiBtL1wtbW5vXC1jeWd3aW4vbSkKCXsKCSRjZmxhZ3MgPX4gcy9cLW1ub1wtY3lnd2luXHMqLy87Cgkkc2hhcmVkX2xkZmxhZyA9fiBzL1wtbW5vXC1jeWd3aW5ccyovLzsKCX0KCm15ICRub19zaGFyZWRfd2Fybj0wOwpteSAkbm9fdXNlcl9jZmxhZ3M9MDsKCmlmICgkZmxhZ3MgbmUgIiIpCXsgJGNmbGFncz0iJGZsYWdzJGNmbGFncyI7IH0KZWxzZQkJCXsgJG5vX3VzZXJfY2ZsYWdzPTE7ICAgICAgIH0KCiMgS2VyYmVyb3Mgc2V0dGluZ3MuICBUaGUgZmxhdm9yIG11c3QgYmUgcHJvdmlkZWQgZnJvbSBvdXRzaWRlLCBlaXRoZXIgdGhyb3VnaAojIHRoZSBzY3JpcHQgImNvbmZpZyIgb3IgbWFudWFsbHkuCmlmICghJG5vX2tyYjUpCgl7CglteSAoJGxyZXNvbHYsICRscGF0aCwgJGxleHQpOwoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltIaF1laW1kYWwkLykKCQl7CgkJZGllICJTb3JyeSwgSGVpbWRhbCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFxuIjsKCQl9CgkjIyMjIyBIQUNLIHRvIGZvcmNlIHVzZSBvZiBIZWltZGFsLgoJIyMjIyMgV0FSTklORzogU2luY2Ugd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYWRlcXVhdGUgc3VwcG9ydCBmb3IgSGVpbWRhbCwKCSMjIyMjICAgICAgICAgIHVzaW5nIHRoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQuICBZb3UnbGwgaGF2ZSB0byBtYWtlCgkjIyMjIyAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiB5b3UgZG8sIHBsZWFzZSBzZW5kCgkjIyMjIyAgICAgICAgICBwYXRjaGVzIHRvIG9wZW5zc2wtZGV2QG9wZW5zc2wub3JnCglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eZm9yY2UtW0hoXWVpbWRhbCQvKQoJCXsKCQl3YXJuICJIZWltZGFsIGlzbid0IHJlYWxseSBzdXBwb3J0ZWQuICBZb3VyIGJ1aWxkIFdJTEwgYnJlYWtcbiI7CgkJd2FybiAiSWYgeW91IGZpeCB0aGUgcHJvYmxlbXMsIHBsZWFzZSBzZW5kIGEgcGF0Y2ggdG8gb3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnXG4iOwoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2hlaW1kYWwiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGkgLWxrcmI1IC1sY29tX2VyciIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfSEVJTURBTCAkY2ZsYWdzIjsKCQl9CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW01tXVtJaV1bVHRdLykKCQl7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3Iva2VyYmVyb3MiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8iCgkJCWlmICR3aXRoYXJnc3sia3JiNS1saWIifSBlcSAiIiAmJiAhJElzTUsxTUY7CgkJJGNmbGFncz0iLURLUkI1X01JVCAkY2ZsYWdzIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gcy9eW01tXVtJaV1bVHRdWy5fLV0qLy87CgkJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXjFbLl8tXSpbMDFdLykKCQkJewoJCQkkY2ZsYWdzPSItREtSQjVfTUlUX09MRDExICRjZmxhZ3MiOwoJCQl9CgkJfQoJTFJFU09MVjoKCWZvcmVhY2ggJGxwYXRoICgiL2xpYiIsICIvdXNyL2xpYiIpCgkJewoJCWZvcmVhY2ggJGxleHQgKCJhIiwgInNvIikKCQkJewoJCQkkbHJlc29sdiA9ICIkbHBhdGgvbGlicmVzb2x2LiRsZXh0IjsKCQkJbGFzdCBMUkVTT0xWCWlmICgtciAiJGxyZXNvbHYiKTsKCQkJJGxyZXNvbHYgPSAiIjsKCQkJfQoJCX0KCSR3aXRoYXJnc3sia3JiNS1saWIifSAuPSAiIC1scmVzb2x2IgoJCWlmICgiJGxyZXNvbHYiIG5lICIiKTsKCSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gPSAiLUkiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4iL2luY2x1ZGUiCgkJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBlcSAiIiAmJgoJCSAgICR3aXRoYXJnc3sia3JiNS1kaXIifSBuZSAiIjsKCX0KCiMgVGhlIERTTyBjb2RlIGN1cnJlbnRseSBhbHdheXMgaW1wbGVtZW50cyBhbGwgZnVuY3Rpb25zIHNvIHRoYXQgbm8KIyBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgZnJvbSBhIGNvbXBpbGF0aW9uIHBvaW50CiMgb2Ygdmlldy4gSG93ZXZlciwgdGhlICJtZXRob2QicyBtYXkgcmV0dXJuIHplcm8gdW5sZXNzIHRoYXQgcGxhdGZvcm0KIyBoYXMgc3VwcG9ydCBjb21waWxlZCBpbiBmb3IgdGhlbS4gQ3VycmVudGx5IGVhY2ggbWV0aG9kIGlzIGVuYWJsZWQKIyBieSBhIGRlZmluZSAiRFNPXzxuYW1lPiIgLi4uIHdlIHRyYW5zbGF0ZSB0aGUgImRzb19zY2hlbWUiIGNvbmZpZwojIHN0cmluZyBlbnRyeSBpbnRvIHVzaW5nIHRoZSBmb2xsb3dpbmcgbG9naWM7Cm15ICRkc29fY2ZsYWdzOwppZiAoISRub19kc28gJiYgJGRzb19zY2hlbWUgbmUgIiIpCgl7CgkkZHNvX3NjaGVtZSA9fiB0ci9bYS16XS9bQS1aXS87CglpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0giOwoJCX0KCWVsc2lmICgkZHNvX3NjaGVtZSBlcSAiRExGQ05fTk9fSCIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIjsKCQl9CgllbHNlCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPXyRkc29fc2NoZW1lIjsKCQl9CgkkY2ZsYWdzID0gIiRkc29fY2ZsYWdzICRjZmxhZ3MiOwoJfQoKbXkgJHRocmVhZF9jZmxhZ3M7Cm15ICR0aHJlYWRfZGVmaW5lczsKaWYgKCR0aHJlYWRfY2ZsYWcgbmUgIih1bmtub3duKSIgJiYgISRub190aHJlYWRzKQoJewoJIyBJZiB3ZSBrbm93IGhvdyB0byBkbyBpdCwgc3VwcG9ydCB0aHJlYWRzIGJ5IGRlZmF1bHQuCgkkdGhyZWFkcyA9IDE7Cgl9CmlmICgkdGhyZWFkX2NmbGFnIGVxICIodW5rbm93bikiICYmICR0aHJlYWRzKQoJewoJIyBJZiB0aGUgdXNlciBhc2tlZCBmb3IgInRocmVhZHMiLCBbc11oZSBpcyBhbHNvIGV4cGVjdGVkIHRvCgkjIHByb3ZpZGUgYW55IHN5c3RlbS1kZXBlbmRlbnQgY29tcGlsZXIgb3B0aW9ucyB0aGF0IGFyZQoJIyBuZWNlc3NhcnkuCglpZiAoJG5vX3VzZXJfY2ZsYWdzKQoJCXsKCQlwcmludCAiWW91IGFza2VkIGZvciBtdWx0aS10aHJlYWRpbmcgc3VwcG9ydCwgYnV0IGRpZG4ndFxuIjsKCQlwcmludCAicHJvdmlkZSBhbnkgc3lzdGVtLXNwZWNpZmljIGNvbXBpbGVyIG9wdGlvbnNcbiI7CgkJZXhpdCgxKTsKCQl9CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJGNmbGFncyIgOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKCX0KZWxzZQoJewoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICR0aHJlYWRfY2ZsYWcgJGNmbGFncyI7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwojCW15ICRkZWY7CiMJZm9yZWFjaCAkZGVmIChzcGxpdCAnICcsJHRocmVhZF9jZmxhZykKIwkJewojCQlpZiAoJGRlZiA9fiBzL14tRC8vICYmICRkZWYgIX4gL15fLykKIwkJCXsKIwkJCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSAkZGVmXG4iOwojCQkJfQojCQl9Cgl9CQoKJGxmbGFncz0iJGxpYnMkbGZsYWdzIiBpZiAoJGxpYnMgbmUgIiIpOwoKaWYgKCRub19hc20pCgl7CgkkY3B1aWRfb2JqPSRibl9vYmo9CgkkZGVzX29iaj0kYWVzX29iaj0kYmZfb2JqPSRjYXN0X29iaj0kcmM0X29iaj0kcmM1X29iaj0kY21sbF9vYmo9CgkkbW9kZXNfb2JqPSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0kd3Bfb2JqPSIiOwoJfQoKaWYgKCEkbm9fc2hhcmVkKQoJewoJJGNhc3Rfb2JqPSIiOwkjIENBU1QgYXNzZW1ibGVyIGlzIG5vdCBQSUMKCX0KCmlmICgkdGhyZWFkcykKCXsKCSRjZmxhZ3M9JHRocmVhZF9jZmxhZ3M7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcyAuPSAkdGhyZWFkX2RlZmluZXM7Cgl9CgppZiAoJHpsaWIpCgl7CgkkY2ZsYWdzID0gIi1EWkxJQiAkY2ZsYWdzIjsKCWlmIChkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJCXsKCQlpZiAoZGVmaW5lZCgkd2l0aGFyZ3N7InpsaWItbGliIn0pKQoJCQl7CgkJCSRsZmxhZ3MgPSAiJGxmbGFncyAtTCIgLiAkd2l0aGFyZ3N7InpsaWItbGliIn0gLiAiIC1seiI7CgkJCX0KCQllbHNlCgkJCXsKCQkJJGxmbGFncyA9ICIkbGZsYWdzIC1seiI7CgkJCX0KCQl9CgllbHNlCgkJewoJCSRjZmxhZ3MgPSAiLURaTElCX1NIQVJFRCAkY2ZsYWdzIjsKCQl9Cgl9CgojIFlvdSB3aWxsIGZpbmQgc2hsaWJfbWFyazEgYW5kIHNobGliX21hcmsyIGV4cGxhaW5lZCBpbiBNYWtlZmlsZS5vcmcKbXkgJHNoYXJlZF9tYXJrID0gIiI7CmlmICgkc2hhcmVkX3RhcmdldCBlcSAiIikKCXsKCSRub19zaGFyZWRfd2FybiA9IDEgaWYgISRub19zaGFyZWQ7Cgkkbm9fc2hhcmVkID0gMTsKCX0KaWYgKCEkbm9fc2hhcmVkKQoJewoJaWYgKCRzaGFyZWRfY2ZsYWcgbmUgIiIpCgkJewoJCSRjZmxhZ3MgPSAiJHNoYXJlZF9jZmxhZyAtRE9QRU5TU0xfUElDICRjZmxhZ3MiOwoJCX0KCX0KCmlmICghJElzTUsxTUYpCgl7CgkjIGFkZCB7bm8tfXN0YXRpYy1lbmdpbmUgdG8gb3B0aW9ucyB0byBhbGxvdyBta2RlZi5wbCB0byB3b3JrIHdpdGhvdXQgZXh0cmEgYXJndW1lbnRzCglpZiAoJG5vX3NoYXJlZCkKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9OT19EWU5BTUlDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBzdGF0aWMtZW5naW5lIjsKCQl9CgllbHNlCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fU1RBVElDX0VOR0lORVxuIjsKCQkkb3B0aW9ucy49IiBuby1zdGF0aWMtZW5naW5lIjsKCQl9Cgl9CgokY3B1aWRfb2JqLj0iIHVwbGluay5vIHVwbGluay14ODYubyIgaWYgKCRjZmxhZ3MgPX4gL1wtRE9QRU5TU0xfVVNFX0FQUExJTksvKTsKCiMKIyBQbGF0Zm9ybSBmaXgtdXBzCiMKaWYgKCR0YXJnZXQgPX4gL1wtaWNjJC8pCSMgSW50ZWwgQyBjb21waWxlcgoJewoJbXkgJGljY3Zlcj0wOwoJaWYgKG9wZW4oRkQsIiRjYyAtViAyPiYxIHwiKSkKCQl7CgkJd2hpbGUoPEZEPikgeyAkaWNjdmVyPSQxIGlmICgvVmVyc2lvbiAoWzAtOV0rKVwuLyk7IH0KCQljbG9zZShGRCk7CgkJfQoJaWYgKCRpY2N2ZXI+PTgpCgkJewoJCSMgRWxpbWluYXRlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgZnJvbSBsaWJpcmMuYS4gVGhpcyBpcwoJCSMgZXNzZW50aWFsIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LCBhcyBvdGhlcndpc2UKCQkjIGFwcHMvb3BlbnNzbCBjYW4gZW5kIHVwIGluIGVuZGxlc3MgbG9vcCB1cG9uIHN0YXJ0dXAuLi4KCQkkY2ZsYWdzLj0iIC1EbWVtY3B5PV9fYnVpbHRpbl9tZW1jcHkgLURtZW1zZXQ9X19idWlsdGluX21lbXNldCI7CgkJfQoJaWYgKCRpY2N2ZXI+PTkpCgkJewoJCSRjZmxhZ3MuPSIgLWktc3RhdGljIjsKCQkkY2ZsYWdzPX5zL1wtbm9fY3BwcnQvLW5vLWNwcHJ0LzsKCQl9CglpZiAoJGljY3Zlcj49MTApCgkJewoJCSRjZmxhZ3M9fnMvXC1pXC1zdGF0aWMvLXN0YXRpYy1pbnRlbC87CgkJfQoJfQoKIyBVbmxpa2Ugb3RoZXIgT1NlcyAobGlrZSBTb2xhcmlzLCBMaW51eCwgVHJ1NjQsIElSSVgpIEJTRCBydW4tdGltZQojIGxpbmtlcnMgKHRlc3RlZCBPcGVuQlNELCBOZXRCU0QgYW5kIEZyZWVCU0QpICJkZW1hbmQiIFJQQVRIIHNldCBvbgojIC5zbyBvYmplY3RzLiBBcHBhcmVudGx5IGFwcGxpY2F0aW9uIFJQQVRIIGlzIG5vdCBnbG9iYWwgYW5kIGRvZXMKIyBub3QgYXBwbHkgdG8gLnNvIGxpbmtlZCB3aXRoIG90aGVyIC5zby4gUHJvYmxlbSBtYW5pZmVzdHMgaXRzZWxmCiMgd2hlbiBsaWJzc2wuc28gZmFpbHMgdG8gbG9hZCBsaWJjcnlwdG8uc28uIE9uZSBjYW4gYXJndWUgdGhhdCB3ZQojIHNob3VsZCBlbmdyYXZlIHRoaXMgaW50byBNYWtlZmlsZS5zaGFyZWQgcnVsZXMgb3IgaW50byBCU0QtKiBjb25maWcKIyBsaW5lcyBhYm92ZS4gTWVhbndoaWxlIGxldCdzIHRyeSB0byBiZSBjYXV0aW91cyBhbmQgcGFzcyAtcnBhdGggdG8KIyBsaW5rZXIgb25seSB3aGVuIC0tcHJlZml4IGlzIG5vdCAvdXNyLgppZiAoJHRhcmdldCA9fiAvXkJTRFwtLykKCXsKCSRzaGFyZWRfbGRmbGFnLj0iIC1XbCwtcnBhdGgsXCQoTElCUlBBVEgpIiBpZiAoJHByZWZpeCAhfiBtfF4vdXNyWy9dKiR8KTsKCX0KCmlmICgkc3lzX2lkIG5lICIiKQoJewoJIyRjZmxhZ3M9Ii1ET1BFTlNTTF9TWVNOQU1FXyRzeXNfaWQgJGNmbGFncyI7Cgkkb3BlbnNzbF9zeXNfZGVmaW5lcz0iI2RlZmluZSBPUEVOU1NMX1NZU05BTUVfJHN5c19pZFxuIjsKCX0KCmlmICgkcmFubGliIGVxICIiKQoJewoJJHJhbmxpYiA9ICRkZWZhdWx0X3JhbmxpYjsKCX0KCiNteSAoJGJuMSk9c3BsaXQoL1xzKy8sJGJuX29iaik7CiMkYm4xID0gIiIgdW5sZXNzIGRlZmluZWQgJGJuMTsKIyRibjE9JGJuX2FzbSB1bmxlc3MgKCRibjEgPX4gL1wubyQvKTsKIyRibl9vYmo9IiRibjEiOwoKJGNwdWlkX29iaj0iIiBpZiAoJHByb2Nlc3NvciBlcSAiMzg2Iik7CgokYm5fb2JqID0gJGJuX2FzbSB1bmxlc3MgJGJuX29iaiBuZSAiIjsKIyBibi01ODYgaXMgdGhlIG9ubHkgb25lIGltcGxlbWVudGluZyBibl8qX3BhcnRfd29yZHMKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX1BBUlRfV09SRFMiIGlmICgkYm5fb2JqID1+IC9ibi01ODYvKTsKJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRub19zc2UyICYmICRibl9vYmogPX4gLzg2Lyk7CgokY2ZsYWdzLj0iIC1ET1BFTlNTTF9CTl9BU01fTU9OVCIgaWYgKCRibl9vYmogPX4gLy1tb250Lyk7CgppZiAoJGZpcHMpCgl7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7CglpZiAoJGZpcHNjYW5pc3RlcmludGVybmFsIGVxICJ5IikKCQl7CgkJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTQ0FOSVNURVJcbiI7CgkJfQoJfQoKJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wubyQvKTsKJGRlc19vYmo9JGRlc19lbmMJdW5sZXNzICgkZGVzX29iaiA9fiAvXC5vJC8pOwokYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29iaiA9fiAvXC5vJC8pOwokY2FzdF9vYmo9JGNhc3RfZW5jCXVubGVzcyAoJGNhc3Rfb2JqID1+IC9cLm8kLyk7CiRyYzRfb2JqPSRyYzRfZW5jCXVubGVzcyAoJHJjNF9vYmogPX4gL1wubyQvKTsKJHJjNV9vYmo9JHJjNV9lbmMJdW5sZXNzICgkcmM1X29iaiA9fiAvXC5vJC8pOwppZiAoJHNoYTFfb2JqID1+IC9cLm8kLykKCXsKIwkkc2hhMV9vYmo9JHNoYTFfZW5jOwoJJGNmbGFncy49IiAtRFNIQTFfQVNNIiAgIGlmICgkc2hhMV9vYmogPX4gL3N4ODYvIHx8ICRzaGExX29iaiA9fiAvc2hhMS8pOwoJJGNmbGFncy49IiAtRFNIQTI1Nl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTI1Ni8pOwoJJGNmbGFncy49IiAtRFNIQTUxMl9BU00iIGlmICgkc2hhMV9vYmogPX4gL3NoYTUxMi8pOwoJaWYgKCRzaGExX29iaiA9fiAvc3NlMi8pCgkgICAgewlpZiAoJG5vX3NzZTIpCgkJeyAgICRzaGExX29iaiA9fiBzL1xTKnNzZTJcUysvLzsgICAgICAgIH0KCQllbHNpZiAoJGNmbGFncyAhfiAvT1BFTlNTTF9JQTMyX1NTRTIvKQoJCXsgICAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiOyAgICB9CgkgICAgfQoJfQppZiAoJG1kNV9vYmogPX4gL1wubyQvKQoJewojCSRtZDVfb2JqPSRtZDVfZW5jOwoJJGNmbGFncy49IiAtRE1ENV9BU00iOwoJfQppZiAoJHJtZDE2MF9vYmogPX4gL1wubyQvKQoJewojCSRybWQxNjBfb2JqPSRybWQxNjBfZW5jOwoJJGNmbGFncy49IiAtRFJNRDE2MF9BU00iOwoJfQppZiAoJGFlc19vYmogPX4gL1wubyQvKQoJewoJJGNmbGFncy49IiAtREFFU19BU00iOwoJIyBhZXNfY3RyLm8gaXMgbm90IGEgcmVhbCBmaWxlLCBvbmx5IGluZGljYXRpb24gdGhhdCBhc3NlbWJsZXIKCSMgbW9kdWxlIGltcGxlbWVudHMgQUVTX2N0cjMyX2VuY3J5cHQuLi4KCSRjZmxhZ3MuPSIgLURBRVNfQ1RSX0FTTSIgaWYgKCRhZXNfb2JqID1+IHMvXHMqYWVzX2N0clwuby8vKTsKCSRhZXNfb2JqID1+IHMvXHMqYWVzbmlcLXg4Nlwuby8vIGlmICgkbm9fc3NlMik7Cgl9CmVsc2UJewoJJGFlc19vYmo9JGFlc19lbmM7Cgl9CiR3cF9vYmo9IiIgaWYgKCR3cF9vYmogPX4gL21teC8gJiYgJHByb2Nlc3NvciBlcSAiMzg2Iik7CmlmICgkd3Bfb2JqID1+IC9cLm8kLykKCXsKCSRjZmxhZ3MuPSIgLURXSElSTFBPT0xfQVNNIjsKCX0KZWxzZQl7Cgkkd3Bfb2JqPSJ3cF9ibG9jay5vIjsKCX0KJGNtbGxfb2JqPSRjbWxsX2VuYwl1bmxlc3MgKCRjbWxsX29iaiA9fiAvLm8kLyk7CmlmICgkbW9kZXNfb2JqID1+IC9naGFzaC8pCgl7CgkkY2ZsYWdzLj0iIC1ER0hBU0hfQVNNIjsKCX0KCiMgIlN0cmluZ2lmeSIgdGhlIEMgZmxhZ3Mgc3RyaW5nLiAgVGhpcyBwZXJtaXRzIGl0IHRvIGJlIG1hZGUgcGFydCBvZiBhIHN0cmluZwojIGFuZCB3b3JrcyBhcyB3ZWxsIG9uIGNvbW1hbmQgbGluZXMuCiRjZmxhZ3MgPX4gcy8oW1xcXCJdKS9cXFwxL2c7CgpteSAkdmVyc2lvbiA9ICJ1bmtub3duIjsKbXkgJHZlcnNpb25fbnVtID0gInVua25vd24iOwpteSAkbWFqb3IgPSAidW5rbm93biI7Cm15ICRtaW5vciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25fbnVtYmVyID0gInVua25vd24iOwpteSAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5ID0gInVua25vd24iOwpteSAkc2hsaWJfbWFqb3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl9taW5vciA9ICJ1bmtub3duIjsKCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbHYuaCcpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgb3BlbnNzbHYuaDokIVxuIjsKd2hpbGUgKDxJTj4pCgl7CgkkdmVyc2lvbj0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLlRFWFQuKk9wZW5TU0wgKFxTKykgLzsKCSR2ZXJzaW9uX251bT0kMSBpZiAvT1BFTlNTTC5WRVJTSU9OLk5VTUJFUi4qMHgoXFMrKS87Cgkkc2hsaWJfdmVyc2lvbl9udW1iZXI9JDEgaWYgL1NITElCX1ZFUlNJT05fTlVNQkVSICoiKFteIl0rKSIvOwoJJHNobGliX3ZlcnNpb25faGlzdG9yeT0kMSBpZiAvU0hMSUJfVkVSU0lPTl9ISVNUT1JZICoiKFteIl0qKSIvOwoJfQpjbG9zZShJTik7CmlmICgkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IG5lICIiKSB7ICRzaGxpYl92ZXJzaW9uX2hpc3RvcnkgLj0gIjoiOyB9CgppZiAoJHZlcnNpb24gPX4gLyheWzAtOV0qKVwuKFswLTlcLl0qKS8pCgl7CgkkbWFqb3I9JDE7CgkkbWlub3I9JDI7Cgl9CgppZiAoJHNobGliX3ZlcnNpb25fbnVtYmVyID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJHNobGliX21ham9yPSQxOwoJJHNobGliX21pbm9yPSQyOwoJfQoKaWYgKCRzdHJpY3Rfd2FybmluZ3MpCgl7CglteSAkd29wdDsKCWRpZSAiRVJST1IgLS1zdHJpY3Qtd2FybmluZ3MgcmVxdWlyZXMgZ2NjIiB1bmxlc3MgKCRjYyA9fiAvZ2NjJC8pOwoJZm9yZWFjaCAkd29wdCAoc3BsaXQgL1xzKy8sICRnY2NfZGV2dGVhbV93YXJuKQoJCXsKCQkkY2ZsYWdzIC49ICIgJHdvcHQiIHVubGVzcyAoJGNmbGFncyA9fiAvJHdvcHQvKQoJCX0KCX0KCm9wZW4oSU4sJzxNYWtlZmlsZS5vcmcnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIE1ha2VmaWxlLm9yZzokIVxuIjsKdW5saW5rKCIkTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCAkTWFrZWZpbGUubmV3OiQhXG4iIGlmIC1lICIkTWFrZWZpbGUubmV3IjsKb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CnByaW50IE9VVCAiIyMjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gTWFrZWZpbGUub3JnIGJ5IENvbmZpZ3VyZS5cblxuIjsKbXkgJHNkaXJzPTA7CndoaWxlICg8SU4+KQoJewoJY2hvbXA7Cgkkc2RpcnMgPSAxIGlmIC9eU0RJUlM9LzsKCWlmICgkc2RpcnMpIHsKCQlteSAkZGlyOwoJCWZvcmVhY2ggJGRpciAoQHNraXApIHsKCQkJcy8oXHMpJGRpciAvJDEvOwoJCQlzL1xzJGRpciQvLzsKCQkJfQoJCX0KCSRzZGlycyA9IDAgdW5sZXNzIC9cXCQvOwogICAgICAgIHMvZW5naW5lcyAvLyBpZiAoL15ESVJTPS8gJiYgJGRpc2FibGVkeyJlbmdpbmUifSk7CglzL2NjZ29zdC8vIGlmICgvXkVOR0RJUlM9LyAmJiAkZGlzYWJsZWR7Imdvc3QifSk7CglzL15WRVJTSU9OPS4qL1ZFUlNJT049JHZlcnNpb24vOwoJcy9eTUFKT1I9LiovTUFKT1I9JG1ham9yLzsKCXMvXk1JTk9SPS4qL01JTk9SPSRtaW5vci87CglzL15TSExJQl9WRVJTSU9OX05VTUJFUj0uKi9TSExJQl9WRVJTSU9OX05VTUJFUj0kc2hsaWJfdmVyc2lvbl9udW1iZXIvOwoJcy9eU0hMSUJfVkVSU0lPTl9ISVNUT1JZPS4qL1NITElCX1ZFUlNJT05fSElTVE9SWT0kc2hsaWJfdmVyc2lvbl9oaXN0b3J5LzsKCXMvXlNITElCX01BSk9SPS4qL1NITElCX01BSk9SPSRzaGxpYl9tYWpvci87CglzL15TSExJQl9NSU5PUj0uKi9TSExJQl9NSU5PUj0kc2hsaWJfbWlub3IvOwoJcy9eU0hMSUJfRVhUPS4qL1NITElCX0VYVD0kc2hhcmVkX2V4dGVuc2lvbi87CglzL15JTlNUQUxMVE9QPS4qJC9JTlNUQUxMVE9QPSRwcmVmaXgvOwoJcy9eTVVMVElMSUI9LiokL01VTFRJTElCPSRtdWx0aWxpYi87CglzL15PUEVOU1NMRElSPS4qJC9PUEVOU1NMRElSPSRvcGVuc3NsZGlyLzsKCXMvXkxJQkRJUj0uKiQvTElCRElSPSRsaWJkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglpZiAoJGNyb3NzX2NvbXBpbGVfcHJlZml4KQoJCXsKCQlzL15DQz0uKiQvQ1JPU1NfQ09NUElMRT0gJGNyb3NzX2NvbXBpbGVfcHJlZml4XG5DQz0gXCRcKENST1NTX0NPTVBJTEVcKSRjYy87CgkJcy9eQVI9XHMqL0FSPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15OTT1ccyovTk09IFwkXChDUk9TU19DT01QSUxFXCkvOwoJCXMvXlJBTkxJQj1ccyovUkFOTElCPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9IFwkXChDUk9TU19DT01QSUxFXCkkY2MvIGlmICRjYyBlcSAiZ2NjIjsKCQl9CgllbHNlCXsKCQlzL15DQz0uKiQvQ0M9ICRjYy87CgkJcy9eQVI9XHMqYXIvQVI9ICRhci87CgkJcy9eUkFOTElCPS4qL1JBTkxJQj0gJHJhbmxpYi87CgkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSAkY2MvIGlmICRjYyBlcSAiZ2NjIjsKCQl9CglzL15DRkxBRz0uKiQvQ0ZMQUc9ICRjZmxhZ3MvOwoJcy9eREVQRkxBRz0uKiQvREVQRkxBRz0kZGVwZmxhZ3MvOwoJcy9eUEVYX0xJQlM9LiokL1BFWF9MSUJTPSAkcHJlbGZsYWdzLzsKCXMvXkVYX0xJQlM9LiokL0VYX0xJQlM9ICRsZmxhZ3MvOwoJcy9eRVhFX0VYVD0uKiQvRVhFX0VYVD0gJGV4ZV9leHQvOwoJcy9eQ1BVSURfT0JKPS4qJC9DUFVJRF9PQko9ICRjcHVpZF9vYmovOwoJcy9eQk5fQVNNPS4qJC9CTl9BU009ICRibl9vYmovOwoJcy9eREVTX0VOQz0uKiQvREVTX0VOQz0gJGRlc19vYmovOwoJcy9eQUVTX0VOQz0uKiQvQUVTX0VOQz0gJGFlc19vYmovOwoJcy9eQkZfRU5DPS4qJC9CRl9FTkM9ICRiZl9vYmovOwoJcy9eQ0FTVF9FTkM9LiokL0NBU1RfRU5DPSAkY2FzdF9vYmovOwoJcy9eUkM0X0VOQz0uKiQvUkM0X0VOQz0gJHJjNF9vYmovOwoJcy9eUkM1X0VOQz0uKiQvUkM1X0VOQz0gJHJjNV9vYmovOwoJcy9eTUQ1X0FTTV9PQko9LiokL01ENV9BU01fT0JKPSAkbWQ1X29iai87CglzL15TSEExX0FTTV9PQko9LiokL1NIQTFfQVNNX09CSj0gJHNoYTFfb2JqLzsKCXMvXlJNRDE2MF9BU01fT0JKPS4qJC9STUQxNjBfQVNNX09CSj0gJHJtZDE2MF9vYmovOwoJcy9eV1BfQVNNX09CSj0uKiQvV1BfQVNNX09CSj0gJHdwX29iai87CglzL15DTUxMX0VOQz0uKiQvQ01MTF9FTkM9ICRjbWxsX29iai87CglzL15NT0RFU19BU01fT0JKLj0qJC9NT0RFU19BU01fT0JKPSAkbW9kZXNfb2JqLzsKCXMvXlBFUkxBU01fU0NIRU1FPS4qJC9QRVJMQVNNX1NDSEVNRT0gJHBlcmxhc21fc2NoZW1lLzsKCXMvXlBST0NFU1NPUj0uKi9QUk9DRVNTT1I9ICRwcm9jZXNzb3IvOwoJcy9eQVJGTEFHUz0uKi9BUkZMQUdTPSAkYXJmbGFncy87CglzL15QRVJMPS4qL1BFUkw9ICRwZXJsLzsKCXMvXktSQjVfSU5DTFVERVM9LiovS1JCNV9JTkNMVURFUz0kd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LzsKCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwoJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxpYi1saWIifS87CglzL15aTElCX0lOQ0xVREU9LiovWkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOwoJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGlyLzsKCWlmICgkZmlwc2RzbykKCQl7CgkJcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmZpcHMvOwoJCXMvXlNIQVJFRF9GSVBTPS4qL1NIQVJFRF9GSVBTPWxpYmZpcHNcJChTSExJQl9FWFQpLzsKCQlzL15TSExJQkRJUlM9LiovU0hMSUJESVJTPSBjcnlwdG8gc3NsIGZpcHMvOwoJCX0KCWVsc2UKCQl7CgkJcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmNyeXB0by8gaWYgJGZpcHM7CgkJcy9eU0hBUkVEX0ZJUFM9LiovU0hBUkVEX0ZJUFM9LzsKCQlzL15TSExJQkRJUlM9LiovU0hMSUJESVJTPSBjcnlwdG8gc3NsLzsKCQl9CglzL15GSVBTQ0FOSVNURVJJTlRFUk5BTD0uKi9GSVBTQ0FOSVNURVJJTlRFUk5BTD0kZmlwc2NhbmlzdGVyaW50ZXJuYWwvOwoJcy9eQkFTRUFERFI9LiovQkFTRUFERFI9JGJhc2VhZGRyLzsKCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90YXJnZXQvOwoJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87CglzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKCWlmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwucyhbb2xdKVwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5keWxpYi87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSpcLlteXC5dKiQvKQoJCXsKCQlteSAkc290bXAgPSAkMTsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX01BSk9SKSAucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLlteXC5dKlwuZHlsaWIkLykKCQl7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0uXCQoU0hMSUJfTUFKT1IpLmR5bGliIC5keWxpYi87CgkJfQoJcy9eU0hBUkVEX0xERkxBR1M9LiovU0hBUkVEX0xERkxBR1M9JHNoYXJlZF9sZGZsYWcvOwoJcHJpbnQgT1VUICRfLiJcbiI7Cgl9CmNsb3NlKElOKTsKY2xvc2UoT1VUKTsKcmVuYW1lKCRNYWtlZmlsZSwiJE1ha2VmaWxlLmJhayIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSAkTWFrZWZpbGVcbiIgaWYgLWUgJE1ha2VmaWxlOwpyZW5hbWUoIiRNYWtlZmlsZS5uZXciLCRNYWtlZmlsZSkgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZS5uZXdcbiI7CgpwcmludCAiQ0MgICAgICAgICAgICA9JGNjXG4iOwpwcmludCAiQ0ZMQUcgICAgICAgICA9JGNmbGFnc1xuIjsKcHJpbnQgIkVYX0xJQlMgICAgICAgPSRsZmxhZ3NcbiI7CnByaW50ICJDUFVJRF9PQkogICAgID0kY3B1aWRfb2JqXG4iOwpwcmludCAiQk5fQVNNICAgICAgICA9JGJuX29ialxuIjsKcHJpbnQgIkRFU19FTkMgICAgICAgPSRkZXNfb2JqXG4iOwpwcmludCAiQUVTX0VOQyAgICAgICA9JGFlc19vYmpcbiI7CnByaW50ICJCRl9FTkMgICAgICAgID0kYmZfb2JqXG4iOwpwcmludCAiQ0FTVF9FTkMgICAgICA9JGNhc3Rfb2JqXG4iOwpwcmludCAiUkM0X0VOQyAgICAgICA9JHJjNF9vYmpcbiI7CnByaW50ICJSQzVfRU5DICAgICAgID0kcmM1X29ialxuIjsKcHJpbnQgIk1ENV9PQkpfQVNNICAgPSRtZDVfb2JqXG4iOwpwcmludCAiU0hBMV9PQkpfQVNNICA9JHNoYTFfb2JqXG4iOwpwcmludCAiUk1EMTYwX09CSl9BU009JHJtZDE2MF9vYmpcbiI7CnByaW50ICJDTUxMX0VOQyAgICAgID0kY21sbF9vYmpcbiI7CnByaW50ICJNT0RFU19PQkogICAgID0kbW9kZXNfb2JqXG4iOwpwcmludCAiUFJPQ0VTU09SICAgICA9JHByb2Nlc3NvclxuIjsKcHJpbnQgIlJBTkxJQiAgICAgICAgPSRyYW5saWJcbiI7CnByaW50ICJBUkZMQUdTICAgICAgID0kYXJmbGFnc1xuIjsKcHJpbnQgIlBFUkwgICAgICAgICAgPSRwZXJsXG4iOwpwcmludCAiS1JCNV9JTkNMVURFUyA9Iiwkd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LCJcbiIKCWlmICR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gbmUgIiI7CgpteSAkZGVzX3B0cj0wOwpteSAkZGVzX3Jpc2MxPTA7Cm15ICRkZXNfcmlzYzI9MDsKbXkgJGRlc191bnJvbGw9MDsKbXkgJGJuX2xsPTA7Cm15ICRkZWZfaW50PTI7Cm15ICRyYzRfaW50PSRkZWZfaW50OwpteSAkbWQyX2ludD0kZGVmX2ludDsKbXkgJGlkZWFfaW50PSRkZWZfaW50OwpteSAkcmMyX2ludD0kZGVmX2ludDsKbXkgJHJjNF9pZHg9MDsKbXkgJHJjNF9jaHVuaz0wOwpteSAkYmZfcHRyPTA7Cm15IEB0eXBlPSgiY2hhciIsInNob3J0IiwiaW50IiwibG9uZyIpOwpteSAoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDEsMCwwKTsKbXkgJGV4cG9ydF92YXJfYXNfZm49MDsKCm15ICRkZXNfaW50OwoKZm9yZWFjaCAoc29ydCBzcGxpdCgvXHMrLywkYm5fb3BzKSkKCXsKCSRkZXNfcHRyPTEgaWYgL0RFU19QVFIvOwoJJGRlc19yaXNjMT0xIGlmIC9ERVNfUklTQzEvOwoJJGRlc19yaXNjMj0xIGlmIC9ERVNfUklTQzIvOwoJJGRlc191bnJvbGw9MSBpZiAvREVTX1VOUk9MTC87CgkkZGVzX2ludD0xIGlmIC9ERVNfSU5ULzsKCSRibl9sbD0xIGlmIC9CTl9MTE9ORy87CgkkcmM0X2ludD0wIGlmIC9SQzRfQ0hBUi87CgkkcmM0X2ludD0zIGlmIC9SQzRfTE9ORy87CgkkcmM0X2lkeD0xIGlmIC9SQzRfSU5ERVgvOwoJJHJjNF9jaHVuaz0xIGlmIC9SQzRfQ0hVTksvOwoJJHJjNF9jaHVuaz0yIGlmIC9SQzRfQ0hVTktfTEwvOwoJJG1kMl9pbnQ9MCBpZiAvTUQyX0NIQVIvOwoJJG1kMl9pbnQ9MyBpZiAvTUQyX0xPTkcvOwoJJGlkZWFfaW50PTEgaWYgL0lERUFfU0hPUlQvOwoJJGlkZWFfaW50PTMgaWYgL0lERUFfTE9ORy87CgkkcmMyX2ludD0xIGlmIC9SQzJfU0hPUlQvOwoJJHJjMl9pbnQ9MyBpZiAvUkMyX0xPTkcvOwoJJGJmX3B0cj0xIGlmICRfIGVxICJCRl9QVFIiOwoJJGJmX3B0cj0yIGlmICRfIGVxICJCRl9QVFIyIjsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDEsMCwwLDApIGlmIC9TSVhUWV9GT1VSX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMSwwLDAsMCwwKSBpZiAvU0lYVFlfRk9VUl9CSVRfTE9ORy87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDEsMCwwKSBpZiAvVEhJUlRZX1RXT19CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwwLDEsMCkgaWYgL1NJWFRFRU5fQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMCwwLDEpIGlmIC9FSUdIVF9CSVQvOwoJJGV4cG9ydF92YXJfYXNfZm49MSBpZiAvRVhQT1JUX1ZBUl9BU19GTi87Cgl9CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2xjb25mLmguaW4nKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIGNyeXB0by9vcGVuc3NsY29uZi5oLmluOiQhXG4iOwp1bmxpbmsoImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3OiQhXG4iIGlmIC1lICJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciOwpvcGVuKE9VVCwnPmNyeXB0by9vcGVuc3NsY29uZi5oLm5ldycpIHx8IGRpZSAidW5hYmxlIHRvIGNyZWF0ZSBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXc6JCFcbiI7CnByaW50IE9VVCAiLyogb3BlbnNzbGNvbmYuaCAqL1xuIjsKcHJpbnQgT1VUICIvKiBXQVJOSU5HOiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmcm9tIG9wZW5zc2xjb25mLmguaW4gYnkgQ29uZmlndXJlLiAqL1xuXG4iOwoKcHJpbnQgT1VUICIvKiBPcGVuU1NMIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zOiAqL1xuIjsKbXkgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXNfdHJhbnMgPSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzK09QRU5TU0xfTk9fKC4qKS8jaWZuZGVmIE9QRU5TU0xfRVhQRVJJTUVOVEFMXyQxXG4jIGlmbmRlZiBPUEVOU1NMX05PXyQxXG4jICBkZWZpbmUgT1BFTlNTTF9OT18kMVxuIyBlbmRpZlxuI2VuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9fiBzL15ccyojXHMqZGVmaW5lXHMrT1BFTlNTTF8oLiopLyMgaWYgZGVmaW5lZChPUEVOU1NMXyQxKSBcJlwmICFkZWZpbmVkKCQxKVxuIyAgZGVmaW5lICQxXG4jIGVuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcyA9ICIgICAvKiBubyBjaXBoZXJzIGV4Y2x1ZGVkICovXG4iIGlmICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzIGVxICIiOwokb3BlbnNzbF90aHJlYWRfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9zeXNfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrKC4qKS8jaWZuZGVmICQxXG4jIGRlZmluZSAkMVxuI2VuZGlmL21nOwokb3BlbnNzbF9vdGhlcl9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CnByaW50IE9VVCAkb3BlbnNzbF9zeXNfZGVmaW5lczsKcHJpbnQgT1VUICIjaWZuZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORFxuXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM7CnByaW50IE9VVCAiXG4iOwpwcmludCBPVVQgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXM7CnByaW50IE9VVCAiXG4jZW5kaWYgLyogT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EICovXG5cbiI7CnByaW50IE9VVCAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKcHJpbnQgT1VUICRvcGVuc3NsX290aGVyX2RlZmluZXMsIlxuIjsKCnByaW50IE9VVCAiLyogVGhlIE9QRU5TU0xfTk9fKiBtYWNyb3MgYXJlIGFsc28gZGVmaW5lZCBhcyBOT18qIGlmIHRoZSBhcHBsaWNhdGlvblxuIjsKcHJpbnQgT1VUICIgICBhc2tzIGZvciBpdC4gIFRoaXMgaXMgYSB0cmFuc2llbnQgZmVhdHVyZSB0aGF0IGlzIHByb3ZpZGVkIGZvciB0aG9zZVxuIjsKcHJpbnQgT1VUICIgICB3aG8gaGF2ZW4ndCBoYWQgdGhlIHRpbWUgdG8gZG8gdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gdGhlaXJcbiI7CnByaW50IE9VVCAiICAgYXBwbGljYXRpb25zLiAgKi9cbiI7CnByaW50IE9VVCAiI2lmZGVmIE9QRU5TU0xfQUxHT1JJVEhNX0RFRklORVNcbiI7CnByaW50IE9VVCAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFuczsKcHJpbnQgT1VUICIjZW5kaWZcblxuIjsKCnByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMX0NQVUlEX09CSlxuXG4iIGlmICgkY3B1aWRfb2JqIG5lICJtZW1fY2xyLm8iKTsKCndoaWxlICg8SU4+KQoJewoJaWYJKC9eI2RlZmluZVxzK09QRU5TU0xESVIvKQoJCXsKCQlteSAkZm9vID0gJG9wZW5zc2xkaXI7CgkJJGZvbyA9fiBzL1xcL1xcXFwvZzsKCQlwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTERJUiBcIiRmb29cIlxuIjsKCQl9CgllbHNpZgkoL14jZGVmaW5lXHMrRU5HSU5FU0RJUi8pCgkJewoJCW15ICRmb28gPSAiJHByZWZpeC8kbGliZGlyL2VuZ2luZXMiOwoJCSRmb28gPX4gcy9cXC9cXFxcL2c7CgkJcHJpbnQgT1VUICIjZGVmaW5lIEVOR0lORVNESVIgXCIkZm9vXCJcbiI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK09QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTi8pCgkJeyBwcmludGYgT1VUICIjdW5kZWYgT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OXG4iCgkJCWlmICRleHBvcnRfdmFyX2FzX2ZuOwoJCSAgcHJpbnRmIE9VVCAiIyVzIE9QRU5TU0xfRVhQT1JUX1ZBUl9BU19GVU5DVElPTlxuIiwKCQkJKCRleHBvcnRfdmFyX2FzX2ZuKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrT1BFTlNTTF9VTklTVEQvKQoJCXsKCQkkdW5pc3RkID0gIjx1bmlzdGQuaD4iIGlmICR1bmlzdGQgZXEgIiI7CgkJcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xfVU5JU1REICR1bmlzdGRcbiI7CgkJfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK1NJWFRZX0ZPVVJfQklUX0xPTkcvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRZX0ZPVVJfQklUX0xPTkdcbiIsKCRiNjRsKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVFlfRk9VUl9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRZX0ZPVVJfQklUXG4iLCgkYjY0KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrVEhJUlRZX1RXT19CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFRISVJUWV9UV09fQklUXG4iLCgkYjMyKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVEVFTl9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFNJWFRFRU5fQklUXG4iLCgkYjE2KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrRUlHSFRfQklULykKCQl7IHByaW50ZiBPVVQgIiMlcyBFSUdIVF9CSVRcbiIsKCRiOCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eIygoZGVmaW5lKXwodW5kZWYpKVxzK0JOX0xMT05HXHMqJC8pCgkJeyBwcmludGYgT1VUICIjJXMgQk5fTExPTkdcbiIsKCRibl9sbCk/ImRlZmluZSI6InVuZGVmIjsgfQoJZWxzaWYJKC9eXCNkZWZpbmVccytERVNfTE9OR1xzKy4qLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgREVTX0xPTkcgdW5zaWduZWQgJXNcbiIsCgkJCSgkZGVzX2ludCk/J2ludCc6J2xvbmcnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1BUUi8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1BUUlxuIiwoJGRlc19wdHIpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUklTQzEvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIERFU19SSVNDMVxuIiwoJGRlc19yaXNjMSk/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19SSVNDMi8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1JJU0MyXG4iLCgkZGVzX3Jpc2MyKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1VOUk9MTC8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1VOUk9MTFxuIiwoJGRlc191bnJvbGwpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytSQzRfSU5UXHMvKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRyYzRfaW50XTsgfQoJZWxzaWYJKC9eI3VuZGVmXHMrUkM0X0NIVU5LLykKCQl7CgkJcHJpbnRmIE9VVCAiI3VuZGVmIFJDNF9DSFVOS1xuIiBpZiAkcmM0X2NodW5rPT0wOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0NIVU5LIHVuc2lnbmVkIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MTsKCQlwcmludGYgT1VUICIjZGVmaW5lIFJDNF9DSFVOSyB1bnNpZ25lZCBsb25nIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MjsKCQl9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrUkM0X0lOREVYLykKCQl7IHByaW50ZiBPVVQgIiMlcyBSQzRfSU5ERVhcbiIsKCRyYzRfaWR4KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZiAoL14jKGRlZmluZXx1bmRlZilccytJMzg2X09OTFkvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEkzODZfT05MWVxuIiwgKCRwcm9jZXNzb3IgZXEgIjM4NiIpPwoJCQkiZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jZGVmaW5lXHMrTUQyX0lOVFxzLykKCQl7IHByaW50ZiBPVVQgIiNkZWZpbmUgTUQyX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskbWQyX2ludF07IH0KCWVsc2lmCSgvXiNkZWZpbmVccytJREVBX0lOVFxzLykKCQl7cHJpbnRmIE9VVCAiI2RlZmluZSBJREVBX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskaWRlYV9pbnRdO30KCWVsc2lmCSgvXiNkZWZpbmVccytSQzJfSU5UXHMvKQoJCXtwcmludGYgT1VUICIjZGVmaW5lIFJDMl9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJHJjMl9pbnRdO30KCWVsc2lmICgvXiMoZGVmaW5lfHVuZGVmKVxzK0JGX1BUUi8pCgkJewoJCXByaW50ZiBPVVQgIiN1bmRlZiBCRl9QVFJcbiIgaWYgJGJmX3B0ciA9PSAwOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgQkZfUFRSXG4iIGlmICRiZl9wdHIgPT0gMTsKCQlwcmludGYgT1VUICIjZGVmaW5lIEJGX1BUUjJcbiIgaWYgJGJmX3B0ciA9PSAyOwoJICAgICAgICB9CgllbHNlCgkJeyBwcmludCBPVVQgJF87IH0KCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoImNyeXB0by9vcGVuc3NsY29uZi5oIiwiY3J5cHRvL29wZW5zc2xjb25mLmguYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lIGNyeXB0by9vcGVuc3NsY29uZi5oXG4iIGlmIC1lICJjcnlwdG8vb3BlbnNzbGNvbmYuaCI7CnJlbmFtZSgiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IiwiY3J5cHRvL29wZW5zc2xjb25mLmgiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgY3J5cHRvL29wZW5zc2xjb25mLmgubmV3XG4iOwoKCiMgRml4IHRoZSBkYXRlCgpwcmludCAiU0lYVFlfRk9VUl9CSVRfTE9ORyBtb2RlXG4iIGlmICRiNjRsOwpwcmludCAiU0lYVFlfRk9VUl9CSVQgbW9kZVxuIiBpZiAkYjY0OwpwcmludCAiVEhJUlRZX1RXT19CSVQgbW9kZVxuIiBpZiAkYjMyOwpwcmludCAiU0lYVEVFTl9CSVQgbW9kZVxuIiBpZiAkYjE2OwpwcmludCAiRUlHSFRfQklUIG1vZGVcbiIgaWYgJGI4OwpwcmludCAiREVTX1BUUiB1c2VkXG4iIGlmICRkZXNfcHRyOwpwcmludCAiREVTX1JJU0MxIHVzZWRcbiIgaWYgJGRlc19yaXNjMTsKcHJpbnQgIkRFU19SSVNDMiB1c2VkXG4iIGlmICRkZXNfcmlzYzI7CnByaW50ICJERVNfVU5ST0xMIHVzZWRcbiIgaWYgJGRlc191bnJvbGw7CnByaW50ICJERVNfSU5UIHVzZWRcbiIgaWYgJGRlc19pbnQ7CnByaW50ICJCTl9MTE9ORyBtb2RlXG4iIGlmICRibl9sbDsKcHJpbnQgIlJDNCB1c2VzIHUkdHlwZVskcmM0X2ludF1cbiIgaWYgJHJjNF9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJSQzRfSU5ERVggbW9kZVxuIiBpZiAkcmM0X2lkeDsKcHJpbnQgIlJDNF9DSFVOSyBpcyB1bmRlZmluZWRcbiIgaWYgJHJjNF9jaHVuaz09MDsKcHJpbnQgIlJDNF9DSFVOSyBpcyB1bnNpZ25lZCBsb25nXG4iIGlmICRyYzRfY2h1bms9PTE7CnByaW50ICJSQzRfQ0hVTksgaXMgdW5zaWduZWQgbG9uZyBsb25nXG4iIGlmICRyYzRfY2h1bms9PTI7CnByaW50ICJNRDIgdXNlcyB1JHR5cGVbJG1kMl9pbnRdXG4iIGlmICRtZDJfaW50ICE9ICRkZWZfaW50OwpwcmludCAiSURFQSB1c2VzIHUkdHlwZVskaWRlYV9pbnRdXG4iIGlmICRpZGVhX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIlJDMiB1c2VzIHUkdHlwZVskcmMyX2ludF1cbiIgaWYgJHJjMl9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJCRl9QVFIgdXNlZFxuIiBpZiAkYmZfcHRyID09IDE7IApwcmludCAiQkZfUFRSMiB1c2VkXG4iIGlmICRiZl9wdHIgPT0gMjsgCgppZigkSXNNSzFNRikgewoJb3BlbiAoT1VULCI+Y3J5cHRvL2J1aWxkaW5mLmgiKSB8fCBkaWUgIkNhbid0IG9wZW4gYnVpbGRpbmYuaCI7CglwcmludGYgT1VUIDw8RU9GOwojaWZuZGVmIE1LMU1GX0JVSUxECiAgLyogYXV0by1nZW5lcmF0ZWQgYnkgQ29uZmlndXJlIGZvciBjcnlwdG8vY3ZlcnNpb24uYzoKICAgKiBmb3IgVW5peCBidWlsZHMsIGNyeXB0by9NYWtlZmlsZS5zc2wgZ2VuZXJhdGVzIGZ1bmN0aW9uYWwgZGVmaW5pdGlvbnM7CiAgICogV2luZG93cyBidWlsZHMgKGFuZCBvdGhlciBtazFtZiBidWlsZHMpIGNvbXBpbGUgY3ZlcnNpb24uYyB3aXRoCiAgICogLURNSzFNRl9CVUlMRCBhbmQgdXNlIGRlZmluaXRpb25zIGFkZGVkIHRvIHRoaXMgZmlsZSBieSB1dGlsL21rMW1mLnBsLiAqLwogICNlcnJvciAiV2luZG93cyBidWlsZHMgKFBMQVRGT1JNPSR0YXJnZXQpIHVzZSBtazFtZi5wbC1jcmVhdGVkIE1ha2VmaWxlcyIKI2VuZGlmCkVPRgoJY2xvc2UoT1VUKTsKfSBlbHNlIHsKCW15ICRtYWtlX2NvbW1hbmQgPSAiJG1ha2UgUEVSTD1cJyRwZXJsXCciOwoJbXkgJG1ha2VfdGFyZ2V0cyA9ICIiOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGxpbmtzIiBpZiAkc3ltbGluazsKCSRtYWtlX3RhcmdldHMgLj0gIiBkZXBlbmQiIGlmICRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAkbWFrZV9kZXBlbmQ7CgkkbWFrZV90YXJnZXRzIC49ICIgZ2VudGVzdHMiIGlmICRzeW1saW5rOwoJKHN5c3RlbSAkbWFrZV9jb21tYW5kLiRtYWtlX3RhcmdldHMpID09IDAgb3IgZXhpdCAkPwoJCWlmICRtYWtlX3RhcmdldHMgbmUgIiI7CglpZiAoICRwZXJsID1+IG1AXi9AKSB7CgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCRwZXJsLCdeIyEvJywgJyMhJXMnLCdebXkgXCRkaXI7JCcsICdteSAkZGlyID0gIicgLiAkb3BlbnNzbGRpciAuICciOycsICdebXkgXCRwcmVmaXg7JCcsICdteSAkcHJlZml4ID0gIicgLiAkcHJlZml4IC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJHBlcmwsJ14jIS8nLCAnIyElcycpOwoJfSBlbHNlIHsKCSAgICAjIE5vIHBhdGggZm9yIFBlcmwga25vd24gLi4uCgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCcvdXNyL2xvY2FsL2Jpbi9wZXJsJywnXiMhLycsICcjISVzJywnXm15IFwkZGlyOyQnLCAnbXkgJGRpciA9ICInIC4gJG9wZW5zc2xkaXIgLiAnIjsnLCAgJ15teSBcJHByZWZpeDskJywgJ215ICRwcmVmaXggPSAiJyAuICRwcmVmaXggLiAnIjsnKTsKCSAgICAmZG9maWxlKCJhcHBzL0NBLnBsIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycpOwoJfQoJaWYgKCRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAhJG1ha2VfZGVwZW5kKSB7CgkJcHJpbnQgPDxFT0Y7CgpTaW5jZSB5b3UndmUgZGlzYWJsZWQgb3IgZW5hYmxlZCBhdCBsZWFzdCBvbmUgYWxnb3JpdGhtLCB5b3UgbmVlZCB0byBkbwp0aGUgZm9sbG93aW5nIGJlZm9yZSBidWlsZGluZzoKCgltYWtlIGRlcGVuZApFT0YKCX0KfQoKIyBjcmVhdGUgdGhlIG1zL3ZlcnNpb24zMi5yYyBmaWxlIGlmIG5lZWRlZAppZiAoJElzTUsxTUYgJiYgKCR0YXJnZXQgIX4gL15uZXR3YXJlLykpIHsKCW15ICgkdjEsICR2MiwgJHYzLCAkdjQpOwoJaWYgKCR2ZXJzaW9uX251bSA9fiAvKF5bMC05YS1mXXsxfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkvaSkgewoJCSR2MT1oZXggJDE7CgkJJHYyPWhleCAkMjsKCQkkdjM9aGV4ICQzOwoJCSR2ND1oZXggJDQ7Cgl9CglvcGVuIChPVVQsIj5tcy92ZXJzaW9uMzIucmMiKSB8fCBkaWUgIkNhbid0IG9wZW4gbXMvdmVyc2lvbjMyLnJjIjsKCXByaW50IE9VVCA8PEVPRjsKI2luY2x1ZGUgPHdpbnZlci5oPgoKTEFOR1VBR0UgMHgwOSwweDAxCgoxIFZFUlNJT05JTkZPCiAgRklMRVZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgUFJPRFVDVFZFUlNJT04gJHYxLCR2MiwkdjMsJHY0CiAgRklMRUZMQUdTTUFTSyAweDNmTAojaWZkZWYgX0RFQlVHCiAgRklMRUZMQUdTIDB4MDFMCiNlbHNlCiAgRklMRUZMQUdTIDB4MDBMCiNlbmRpZgogIEZJTEVPUyBWT1NfX1dJTkRPV1MzMgogIEZJTEVUWVBFIFZGVF9ETEwKICBGSUxFU1VCVFlQRSAweDBMCkJFR0lOCiAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iCiAgICBCRUdJTgoJQkxPQ0sgIjA0MDkwNGIwIgoJQkVHSU4KI2lmIGRlZmluZWQoRklQUykKCSAgICBWQUxVRSAiQ29tbWVudHMiLCAiV0FSTklORzogVEVTVCBWRVJTSU9OIE9OTFkgKioqTk9UKioqIEZJUFMgMTQwLTIgVkFMSURBVEVELlxcMCIKI2VuZGlmCgkgICAgLy8gUmVxdWlyZWQ6CSAgICAKCSAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIE9wZW5TU0wgUHJvamVjdCwgaHR0cDovL3d3dy5vcGVuc3NsLm9yZy9cXDAiCiNpZiBkZWZpbmVkKEZJUFMpCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJURVNUIFVOVkFMSURBVEVEIEZJUFMxNDAtMiBETExcXDAiCiNlbHNlCgkgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJPcGVuU1NMIFNoYXJlZCBMaWJyYXJ5XFwwIgojZW5kaWYKCSAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCAiJHZlcnNpb25cXDAiCiNpZiBkZWZpbmVkKENSWVBUTykKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYmVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYmVheTMyLmRsbFxcMCIKI2VsaWYgZGVmaW5lZChTU0wpCgkgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJzc2xlYXkzMlxcMCIKCSAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJzc2xlYXkzMi5kbGxcXDAiCiNlbGlmIGRlZmluZWQoRklQUykKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImxpYm9zc2xmaXBzXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgImxpYm9zc2xmaXBzLmRsbFxcMCIKI2VuZGlmCgkgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIlRoZSBPcGVuU1NMIFRvb2xraXRcXDAiCgkgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIiR2ZXJzaW9uXFwwIgoJICAgIC8vIE9wdGlvbmFsOgoJICAgIC8vVkFMVUUgIkNvbW1lbnRzIiwgIlxcMCIKCSAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IKkgMTk5OC0yMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuIENvcHlyaWdodCCpIDE5OTUtMTk5OCBFcmljIEEuIFlvdW5nLCBUaW0gSi4gSHVkc29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxcMCIKCSAgICAvL1ZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXFwwIgoJICAgIC8vVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcXDAiCgkgICAgLy9WQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlxcMCIKCUVORAogICAgRU5ECiAgICBCTE9DSyAiVmFyRmlsZUluZm8iCiAgICBCRUdJTgogICAgICAgIFZBTFVFICJUcmFuc2xhdGlvbiIsIDB4NDA5LCAweDRiMAogICAgRU5ECkVORApFT0YKCWNsb3NlKE9VVCk7CiAgfQogIApwcmludCA8PEVPRjsKCkNvbmZpZ3VyZWQgZm9yICR0YXJnZXQuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICghJG5vX3RocmVhZHMgJiYgISR0aHJlYWRzKTsKClRoZSBsaWJyYXJ5IGNvdWxkIG5vdCBiZSBjb25maWd1cmVkIGZvciBzdXBwb3J0aW5nIG11bHRpLXRocmVhZGVkCmFwcGxpY2F0aW9ucyBhcyB0aGUgY29tcGlsZXIgb3B0aW9ucyByZXF1aXJlZCBvbiB0aGlzIHN5c3RlbSBhcmUgbm90IGtub3duLgpTZWUgZmlsZSBJTlNUQUxMIGZvciBkZXRhaWxzIGlmIHlvdSBuZWVkIG11bHRpLXRocmVhZGluZy4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCRub19zaGFyZWRfd2Fybik7CgpZb3UgZ2F2ZSB0aGUgb3B0aW9uICdzaGFyZWQnLiAgTm9ybWFsbHksIHRoYXQgd291bGQgZ2l2ZSB5b3Ugc2hhcmVkIGxpYnJhcmllcy4KVW5mb3J0dW5hdGVseSwgdGhlIE9wZW5TU0wgY29uZmlndXJhdGlvbiBkb2Vzbid0IGluY2x1ZGUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydApmb3IgdGhpcyBwbGF0Zm9ybSB5ZXQsIHNvIGl0IHdpbGwgcHJldGVuZCB5b3UgZ2F2ZSB0aGUgb3B0aW9uICduby1zaGFyZWQnLiAgSWYKeW91IGNhbiBpbmZvcm0gdGhlIGRldmVsb3BwZXJzIChvcGVuc3NsLWRldlxAb3BlbnNzbC5vcmcpIGhvdyB0byBzdXBwb3J0IHNoYXJlZApsaWJyYXJpZXMgb24gdGhpcyBwbGF0Zm9ybSwgdGhleSB3aWxsIGF0IGxlYXN0IGxvb2sgYXQgaXQgYW5kIHRyeSB0aGVpciBiZXN0CihidXQgcGxlYXNlIGZpcnN0IG1ha2Ugc3VyZSB5b3UgaGF2ZSB0cmllZCB3aXRoIGEgY3VycmVudCB2ZXJzaW9uIG9mIE9wZW5TU0wpLgpFT0YKCnByaW50IDw8XEVPRiBpZiAoJGZpcHNjYW5pc3RlcmludGVybmFsIGVxICJ5Iik7CgpXQVJOSU5HOiBPcGVuU1NMIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdXNpbmcgdW5zdXBwb3J0ZWQgb3B0aW9uKHMpIHRvIGludGVybmFsbHkKZ2VuZXJhdGUgYSBmaXBzY2FuaXN0ZXIubyBvYmplY3QgbW9kdWxlIGZvciBURVNUSU5HIFBVUlBPU0VTIE9OTFk7IHRoYXQKY29tcGlsZWQgbW9kdWxlIGlzIE5PVCBGSVBTIDE0MC0yIHZhbGlkYXRlZCBhbmQgQ0FOTk9UIGJlIHVzZWQgdG8gcmVwbGFjZSB0aGUKT3BlblNTTCBGSVBTIE9iamVjdCBNb2R1bGUgYXMgaWRlbnRpZmllZCBieSB0aGUgQ01WUAooaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvKSBpbiBhbnkgYXBwbGljYXRpb24gcmVxdWlyaW5nIHRoZSB1c2Ugb2YgRklQUwoxNDAtMiB2YWxpZGF0ZWQgc29mdHdhcmUuIAoKVGhpcyBpcyBhbiBPcGVuU1NMIDEuMS4wIHRlc3QgdmVyc2lvbi4KClNlZSB0aGUgZmlsZSBSRUFETUUuRklQUyBmb3IgZGV0YWlscyBvZiBob3cgdG8gYnVpbGQgYSB0ZXN0IGxpYnJhcnkuCgpFT0YKCmV4aXQoMCk7CgpzdWIgdXNhZ2UKCXsKCXByaW50IFNUREVSUiAkdXNhZ2U7CglwcmludCBTVERFUlIgIlxucGljayBvcy9jb21waWxlciBmcm9tOlxuIjsKCW15ICRqPTA7CglteSAkaTsKICAgICAgICBteSAkaz0wOwoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSA9fiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9Cglmb3JlYWNoICRpIChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQluZXh0IGlmICRpICF+IC9eZGVidWcvOwoJCSRrICs9IGxlbmd0aCgkaSkgKyAxOwoJCWlmICgkayA+IDc4KQoJCQl7CgkJCXByaW50IFNUREVSUiAiXG4iOwoJCQkkaz1sZW5ndGgoJGkpOwoJCQl9CgkJcHJpbnQgU1RERVJSICRpIC4gIiAiOwoJCX0KCXByaW50IFNUREVSUiAiXG5cbk5PVEU6IElmIGluIGRvdWJ0LCBvbiBVbml4LWlzaCBzeXN0ZW1zIHVzZSAnLi9jb25maWcnLlxuIjsKCWV4aXQoMSk7Cgl9CgpzdWIgd2hpY2gKCXsKCW15KCRuYW1lKT1AXzsKCW15ICRwYXRoOwoJZm9yZWFjaCAkcGF0aCAoc3BsaXQgLzovLCAkRU5We1BBVEh9KQoJCXsKCQlpZiAoLWYgIiRwYXRoLyRuYW1lJGV4ZV9leHQiIGFuZCAteCBfKQoJCQl7CgkJCXJldHVybiAiJHBhdGgvJG5hbWUkZXhlX2V4dCIgdW5sZXNzICgkbmFtZSBlcSAicGVybCIgYW5kCgkJCSBzeXN0ZW0oIiRwYXRoLyRuYW1lJGV4ZV9leHQgLWUgIiAuICdcJ2V4aXQoJF08NS4wKTtcJycpKTsKCQkJfQoJCX0KCX0KCnN1YiBkb2ZpbGUKCXsKCW15ICRmOyBteSAkcDsgbXkgJW07IG15IEBhOyBteSAkazsgbXkgJGZmOwoJKCRmLCRwLCVtKT1AXzsKCglvcGVuKElOLCI8JGYuaW4iKSB8fCBvcGVuKElOLCI8JGYiKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmOiQhXG4iOwoJQGE9PElOPjsKCWNsb3NlKElOKTsKCWZvcmVhY2ggJGsgKGtleXMgJW0pCgkJewoJCWdyZXAoLyRrLyAmJiAoJF89c3ByaW50ZigkbXska30uIlxuIiwkcCkpLEBhKTsKCQl9CglvcGVuKE9VVCwiPiRmLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIG9wZW4gJGYubmV3OiQhXG4iOwoJcHJpbnQgT1VUIEBhOwoJY2xvc2UoT1VUKTsKCXJlbmFtZSgkZiwiJGYuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmXG4iIGlmIC1lICRmOwoJcmVuYW1lKCIkZi5uZXciLCRmKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJGYubmV3XG4iOwoJfQoKc3ViIHByaW50X3RhYmxlX2VudHJ5Cgl7CglteSAkdGFyZ2V0ID0gc2hpZnQ7CgoJKG15ICRjYyxteSAkY2ZsYWdzLG15ICR1bmlzdGQsbXkgJHRocmVhZF9jZmxhZyxteSAkc3lzX2lkLG15ICRsZmxhZ3MsCglteSAkYm5fb3BzLG15ICRjcHVpZF9vYmosbXkgJGJuX29iaixteSAkZGVzX29iaixteSAkYWVzX29iaiwgbXkgJGJmX29iaiwKCW15ICRtZDVfb2JqLG15ICRzaGExX29iaixteSAkY2FzdF9vYmosbXkgJHJjNF9vYmosbXkgJHJtZDE2MF9vYmosCglteSAkcmM1X29iaixteSAkd3Bfb2JqLG15ICRjbWxsX29iaixteSAkbW9kZXNfb2JqLG15ICRwZXJsYXNtX3NjaGVtZSxteSAkZHNvX3NjaGVtZSxteSAkc2hhcmVkX3RhcmdldCxteSAkc2hhcmVkX2NmbGFnLAoJbXkgJHNoYXJlZF9sZGZsYWcsbXkgJHNoYXJlZF9leHRlbnNpb24sbXkgJHJhbmxpYixteSAkYXJmbGFncyxteSAkbXVsdGlsaWIpPQoJc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoJCQkKCXByaW50IDw8RU9GCgoqKiogJHRhcmdldApcJGNjICAgICAgICAgICA9ICRjYwpcJGNmbGFncyAgICAgICA9ICRjZmxhZ3MKXCR1bmlzdGQgICAgICAgPSAkdW5pc3RkClwkdGhyZWFkX2NmbGFnID0gJHRocmVhZF9jZmxhZwpcJHN5c19pZCAgICAgICA9ICRzeXNfaWQKXCRsZmxhZ3MgICAgICAgPSAkbGZsYWdzClwkYm5fb3BzICAgICAgID0gJGJuX29wcwpcJGNwdWlkX29iaiAgICA9ICRjcHVpZF9vYmoKXCRibl9vYmogICAgICAgPSAkYm5fb2JqClwkZGVzX29iaiAgICAgID0gJGRlc19vYmoKXCRhZXNfb2JqICAgICAgPSAkYWVzX29iagpcJGJmX29iaiAgICAgICA9ICRiZl9vYmoKXCRtZDVfb2JqICAgICAgPSAkbWQ1X29iagpcJHNoYTFfb2JqICAgICA9ICRzaGExX29iagpcJGNhc3Rfb2JqICAgICA9ICRjYXN0X29iagpcJHJjNF9vYmogICAgICA9ICRyYzRfb2JqClwkcm1kMTYwX29iaiAgID0gJHJtZDE2MF9vYmoKXCRyYzVfb2JqICAgICAgPSAkcmM1X29iagpcJHdwX29iaiAgICAgICA9ICR3cF9vYmoKXCRjbWxsX29iaiAgICAgPSAkY21sbF9vYmoKXCRtb2Rlc19vYmogICAgPSAkbW9kZXNfb2JqClwkcGVybGFzbV9zY2hlbWUgPSAkcGVybGFzbV9zY2hlbWUKXCRkc29fc2NoZW1lICAgPSAkZHNvX3NjaGVtZQpcJHNoYXJlZF90YXJnZXQ9ICRzaGFyZWRfdGFyZ2V0Clwkc2hhcmVkX2NmbGFnID0gJHNoYXJlZF9jZmxhZwpcJHNoYXJlZF9sZGZsYWcgPSAkc2hhcmVkX2xkZmxhZwpcJHNoYXJlZF9leHRlbnNpb24gPSAkc2hhcmVkX2V4dGVuc2lvbgpcJHJhbmxpYiAgICAgICA9ICRyYW5saWIKXCRhcmZsYWdzICAgICAgPSAkYXJmbGFncwpcJG11bHRpbGliICAgICA9ICRtdWx0aWxpYgpFT0YKCX0KCnN1YiB0ZXN0X3Nhbml0eQoJewoJbXkgJGVycm9yY250ID0gMDsKCglwcmludCBTVERFUlIgIj0iIHggNzAsICJcbiI7CglwcmludCBTVERFUlIgIj09PSBTQU5JVFkgVEVTVElORyFcbiI7CglwcmludCBTVERFUlIgIj09PSBObyBjb25maWd1cmF0aW9uIHdpbGwgYmUgZG9uZSwgYWxsIG90aGVyIGFyZ3VtZW50cyB3aWxsIGJlIGlnbm9yZWQhXG4iOwoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoKCWZvcmVhY2ggJHRhcmdldCAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKCgkJaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lLTFdID1+IC9eKGJlb3N8ZGx8ZGxmY258d2luMzJ8dm1zKSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSB2YWx1ZXNcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICBpbiB0aGUgcHJldmlvdXMgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWUrMV0gPX4gL14oYmVvc3xkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBmb2xsb3dpbmcgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdICF+IC9eKGJlb3N8ZGx8ZGxmY258d2luMzJ8dm1zfCkkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gZmllbGQgPSAiLCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXSwiXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgdmFsaWQgdmFsdWVzIGFyZSAnYmVvcycsICdkbCcsICdkbGZjbicsICd3aW4zMicgYW5kICd2bXMnXG4iOwoJCQl9CgkJfQoJcHJpbnQgU1RERVJSICJObyBzYW5pdHkgZXJyb3JzIGRldGVjdGVkIVxuIiBpZiAkZXJyb3JjbnQgPT0gMDsKCXJldHVybiAkZXJyb3JjbnQ7Cgl9Cg==