OgpldmFsICdleGVjIHBlcmwgLVMgJDAgJHsxKyIkQCJ9JwogICAgaWYgJHJ1bm5pbmdfdW5kZXJfc29tZV9zaGVsbDsKIyMKIyMgIENvbmZpZ3VyZSAtLSBPcGVuU1NMIHNvdXJjZSB0cmVlIGNvbmZpZ3VyYXRpb24gc2NyaXB0CiMjCgpyZXF1aXJlIDUuMDAwOwp1c2Ugc3RyaWN0OwoKIyBzZWUgSU5TVEFMTCBmb3IgaW5zdHJ1Y3Rpb25zLgoKbXkgJHVzYWdlPSJVc2FnZTogQ29uZmlndXJlIFtuby08Y2lwaGVyPiAuLi5dIFtlbmFibGUtPGNpcGhlcj4gLi4uXSBbZXhwZXJpbWVudGFsLTxjaXBoZXI+IC4uLl0gWy1EeHh4XSBbLWx4eHhdIFstTHh4eF0gWy1meHh4XSBbLUt4eHhdIFtuby1ody14eHh8bm8taHddIFtbbm8tXXRocmVhZHNdIFtbbm8tXXNoYXJlZF0gW1tuby1demxpYnx6bGliLWR5bmFtaWNdIFtuby1hc21dIFtuby1kc29dIFtuby1rcmI1XSBbMzg2XSBbLS1wcmVmaXg9RElSXSBbLS1vcGVuc3NsZGlyPU9QRU5TU0xESVJdIFstLXdpdGgteHh4Wz12dnZdXSBbLS10ZXN0LXNhbml0eV0gb3MvY29tcGlsZXJbOmZsYWdzXVxuIjsKCiMgT3B0aW9uczoKIwojIC0tb3BlbnNzbGRpciAgaW5zdGFsbCBPcGVuU1NMIGluIE9QRU5TU0xESVIgKERlZmF1bHQ6IERJUi9zc2wgaWYgdGhlCiMgICAgICAgICAgICAgICAtLXByZWZpeCBvcHRpb24gaXMgZ2l2ZW47IC91c3IvbG9jYWwvc3NsIG90aGVyd2lzZSkKIyAtLXByZWZpeCAgICAgIHByZWZpeCBmb3IgdGhlIE9wZW5TU0wgaW5jbHVkZSwgbGliIGFuZCBiaW4gZGlyZWN0b3JpZXMKIyAgICAgICAgICAgICAgIChEZWZhdWx0OiB0aGUgT1BFTlNTTERJUiBkaXJlY3RvcnkpCiMKIyAtLWluc3RhbGxfcHJlZml4ICBBZGRpdGlvbmFsIHByZWZpeCBmb3IgcGFja2FnZSBidWlsZGVycyAoZW1wdHkgYnkKIyAgICAgICAgICAgICAgIGRlZmF1bHQpLiAgVGhpcyBuZWVkbid0IGJlIHNldCBpbiBhZHZhbmNlLCB5b3UgY2FuCiMgICAgICAgICAgICAgICBqdXN0IGFzIHdlbGwgdXNlICJtYWtlIElOU1RBTExfUFJFRklYPS93aGF0ZXZlciBpbnN0YWxsIi4KIwojIC0td2l0aC1rcmI1LWRpciAgRGVjbGFyZSB3aGVyZSBLZXJiZXJvcyA1IGxpdmVzLiAgVGhlIGxpYnJhcmllcyBhcmUgZXhwZWN0ZWQKIwkJdG8gbGl2ZSBpbiB0aGUgc3ViZGlyZWN0b3J5IGxpYi8gYW5kIHRoZSBoZWFkZXIgZmlsZXMgaW4KIwkJaW5jbHVkZS8uICBBIHZhbHVlIGlzIHJlcXVpcmVkLgojIC0td2l0aC1rcmI1LWxpYiAgRGVjbGFyZSB3aGVyZSB0aGUgS2VyYmVyb3MgNSBsaWJyYXJpZXMgbGl2ZS4gIEEgdmFsdWUgaXMKIwkJcmVxdWlyZWQuCiMJCShEZWZhdWx0OiBLUkI1X0RJUi9saWIpCiMgLS13aXRoLWtyYjUtaW5jbHVkZSAgRGVjbGFyZSB3aGVyZSB0aGUgS2VyYmVyb3MgNSBoZWFkZXIgZmlsZXMgbGl2ZS4gIEEKIwkJdmFsdWUgaXMgcmVxdWlyZWQuCiMJCShEZWZhdWx0OiBLUkI1X0RJUi9pbmNsdWRlKQojIC0td2l0aC1rcmI1LWZsYXZvciAgRGVjbGFyZSB3aGF0IGZsYXZvciBvZiBLZXJiZXJvcyA1IGlzIHVzZWQuICBDdXJyZW50bHkKIwkJc3VwcG9ydGVkIHZhbHVlcyBhcmUgIk1JVCIgYW5kICJIZWltZGFsIi4gIEEgdmFsdWUgaXMgcmVxdWlyZWQuCiMKIyAtLXRlc3Qtc2FuaXR5IE1ha2UgYSBudW1iZXIgb2Ygc2FuaXR5IGNoZWNrcyBvbiB0aGUgZGF0YSBpbiB0aGlzIGZpbGUuCiMgICAgICAgICAgICAgICBUaGlzIGlzIGEgZGVidWdnaW5nIHRvb2wgZm9yIE9wZW5TU0wgZGV2ZWxvcGVycy4KIwojIC0tY3Jvc3MtY29tcGlsZS1wcmVmaXggQWRkIHNwZWNpZmllZCBwcmVmaXggdG8gYmludXRpbHMgY29tcG9uZW50cy4KIwojIG5vLWh3LXh4eCAgICAgZG8gbm90IGNvbXBpbGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMgY3J5cHRvIGhhcmR3YXJlLgojICAgICAgICAgICAgICAgR2VuZXJpYyBPcGVuU1NMLXN0eWxlIG1ldGhvZHMgcmVsYXRpbmcgdG8gdGhpcyBzdXBwb3J0CiMgICAgICAgICAgICAgICBhcmUgYWx3YXlzIGNvbXBpbGVkIGJ1dCByZXR1cm4gTlVMTCBpZiB0aGUgaGFyZHdhcmUKIyAgICAgICAgICAgICAgIHN1cHBvcnQgaXNuJ3QgY29tcGlsZWQuCiMgbm8taHcgICAgICAgICBkbyBub3QgY29tcGlsZSBzdXBwb3J0IGZvciBhbnkgY3J5cHRvIGhhcmR3YXJlLgojIFtuby1ddGhyZWFkcyAgW2Rvbid0XSB0cnkgdG8gY3JlYXRlIGEgbGlicmFyeSB0aGF0IGlzIHN1aXRhYmxlIGZvcgojICAgICAgICAgICAgICAgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMgKGRlZmF1bHQgaXMgInRocmVhZHMiIGlmIHdlCiMgICAgICAgICAgICAgICBrbm93IGhvdyB0byBkbyBpdCkKIyBbbm8tXXNoYXJlZAlbZG9uJ3RdIHRyeSB0byBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyB3aGVuIHN1cHBvcnRlZC4KIyBuby1hc20gICAgICAgIGRvIG5vdCB1c2UgYXNzZW1ibGVyCiMgbm8tZHNvICAgICAgICBkbyBub3QgY29tcGlsZSBpbiBhbnkgbmF0aXZlIHNoYXJlZC1saWJyYXJ5IG1ldGhvZHMuIFRoaXMKIyAgICAgICAgICAgICAgIHdpbGwgZW5zdXJlIHRoYXQgYWxsIG1ldGhvZHMganVzdCByZXR1cm4gTlVMTC4KIyBuby1rcmI1ICAgICAgIGRvIG5vdCBjb21waWxlIGluIGFueSBLUkI1IGxpYnJhcnkgb3IgY29kZS4KIyBbbm8tXXpsaWIgICAgIFtkb24ndF0gY29tcGlsZSBzdXBwb3J0IGZvciB6bGliIGNvbXByZXNzaW9uLgojIHpsaWItZHluYW1pYwlMaWtlICJ6bGliIiwgYnV0IHRoZSB6bGliIGxpYnJhcnkgaXMgZXhwZWN0ZWQgdG8gYmUgYSBzaGFyZWQKIwkJbGlicmFyeSBhbmQgd2lsbCBiZSBsb2FkZWQgaW4gcnVuLXRpbWUgYnkgdGhlIE9wZW5TU0wgbGlicmFyeS4KIyAzODYgICAgICAgICAgIGdlbmVyYXRlIDgwMzg2IGNvZGUKIyBuby1zc2UyCWRpc2FibGVzIElBLTMyIFNTRTIgY29kZSwgYWJvdmUgb3B0aW9uIGltcGxpZXMgbm8tc3NlMgojIG5vLTxjaXBoZXI+ICAgYnVpbGQgd2l0aG91dCBzcGVjaWZpZWQgYWxnb3JpdGhtIChyc2EsIGlkZWEsIHJjNSwgLi4uKQojIC08eHh4PiArPHh4eD4gY29tcGlsZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggCiMKIyBERUJVR19TQUZFU1RBQ0sgdXNlIHR5cGUtc2FmZSBzdGFja3MgdG8gZW5mb3JjZSB0eXBlLXNhZmV0eSBvbiBzdGFjayBpdGVtcwojCQlwcm92aWRlZCB0byBzdGFjayBjYWxscy4gR2VuZXJhdGVzIHVuaXF1ZSBzdGFjayBmdW5jdGlvbnMgZm9yCiMJCWVhY2ggcG9zc2libGUgc3RhY2sgdHlwZS4KIyBERVNfUFRSCXVzZSBwb2ludGVyIGxvb2t1cCB2cyBhcnJheXMgaW4gdGhlIERFUyBpbiBjcnlwdG8vZGVzL2Rlc19sb2NsLmgKIyBERVNfUklTQzEJdXNlIGRpZmZlcmVudCBERVNfRU5DUllQVCBtYWNybyB0aGF0IGhlbHBzIHJlZHVjZSByZWdpc3RlcgojCQlkZXBlbmRhbmNpZXMgYnV0IG5lZWRzIHRvIG1vcmUgcmVnaXN0ZXJzLCBnb29kIGZvciBSSVNDIENQVSdzCiMgREVTX1JJU0MyCUEgZGlmZmVyZW50IFJJU0MgdmFyaWFudC4KIyBERVNfVU5ST0xMCXVucm9sbCB0aGUgaW5uZXIgREVTIGxvb3AsIHNvbWV0aW1lcyBoZWxwcywgc29tdGltZXMgaGluZGVycy4KIyBERVNfSU5UCXVzZSAnaW50JyBpbnN0ZWFkIG9mICdsb25nJyBmb3IgREVTX0xPTkcgaW4gY3J5cHRvL2Rlcy9kZXMuaAojCQlUaGlzIGlzIHVzZWQgb24gdGhlIERFQyBBbHBoYSB3aGVyZSBsb25nIGlzIDggYnl0ZXMKIwkJYW5kIGludCBpcyA0CiMgQk5fTExPTkcJdXNlIHRoZSB0eXBlICdsb25nIGxvbmcnIGluIGNyeXB0by9ibi9ibi5oCiMgTUQyX0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBNRDJfSU5UIGluIGNyeXB0by9tZDIvbWQyLmgKIyBNRDJfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIE1EMl9JTlQgaW4gY3J5cHRvL21kMi9tZDIuaAojIElERUFfU0hPUlQJdXNlICdzaG9ydCcgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgSURFQV9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgSURFQV9JTlQgaW4gY3J5cHRvL2lkZWEvaWRlYS5oCiMgUkMyX1NIT1JUCXVzZSAnc2hvcnQnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDMl9JTlQgaW4gY3J5cHRvL3JjMi9yYzIuaAojIFJDMl9MT05HCXVzZSAnbG9uZycgaW5zdGVhZCBvZiAnaW50JyBmb3IgUkMyX0lOVCBpbiBjcnlwdG8vcmMyL3JjMi5oCiMgUkM0X0NIQVIJdXNlICdjaGFyJyBpbnN0ZWFkIG9mICdpbnQnIGZvciBSQzRfSU5UIGluIGNyeXB0by9yYzQvcmM0LmgKIyBSQzRfTE9ORwl1c2UgJ2xvbmcnIGluc3RlYWQgb2YgJ2ludCcgZm9yIFJDNF9JTlQgaW4gY3J5cHRvL3JjNC9yYzQuaAojIFJDNF9JTkRFWAlkZWZpbmUgUkM0X0lOREVYIGluIGNyeXB0by9yYzQvcmM0X2xvY2wuaC4gIFRoaXMgdHVybnMgb24KIwkJYXJyYXkgbG9va3VwcyBpbnN0ZWFkIG9mIHBvaW50ZXIgdXNlLgojIFJDNF9DSFVOSwllbmFibGVzIGNvZGUgdGhhdCBoYW5kbGVzIGRhdGEgYWxpZ25lZCBhdCBsb25nIChuYXR1cmFsIENQVQojCQl3b3JkKSBib3VuZGFyeS4KIyBSQzRfQ0hVTktfTEwJZW5hYmxlcyBjb2RlIHRoYXQgaGFuZGxlcyBkYXRhIGFsaWduZWQgYXQgbG9uZyBsb25nIGJvdW5kYXJ5CiMJCShpbnRlbmRlZCBmb3IgNjQtYml0IENQVXMgcnVubmluZyAzMi1iaXQgT1MpLgojIEJGX1BUUgl1c2UgJ3BvaW50ZXIgYXJpdGhtYXRpYycgZm9yIEJsb3dmaXNoICh1bnNhZmUgb24gQWxwaGEpLgojIEJGX1BUUjIJaW50ZWwgc3BlY2lmaWMgdmVyc2lvbiAoZ2VuZXJpYyB2ZXJzaW9uIGlzIG1vcmUgZWZmaWNpZW50KS4KIwojIEZvbGxvd2luZyBhcmUgc2V0IGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBzY3JpcHQKIwojIE1ENV9BU00JdXNlIHNvbWUgZXh0cmEgbWQ1IGFzc2VtYmVyLAojIFNIQTFfQVNNCXVzZSBzb21lIGV4dHJhIHNoYTEgYXNzZW1iZXIsIG11c3QgZGVmaW5lIExfRU5ESUFOIGZvciB4ODYKIyBSTUQxNjBfQVNNCXVzZSBzb21lIGV4dHJhIHJpcGVtZDE2MCBhc3NlbWJlciwKIyBTSEEyNTZfQVNNCXNoYTI1Nl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBTSEE1MTJfQVNNCXNoYTUxMl9ibG9jayBpcyBpbXBsZW1lbnRlZCBpbiBhc3NlbWJsZXIKIyBBRVNfQVNNCUFTRV9bZW58ZGVdY3J5cHQgaXMgaW1wbGVtZW50ZWQgaW4gYXNzZW1ibGVyCgojIE1pbmltdW0gd2FybmluZyBvcHRpb25zLi4uIGFueSBjb250cmlidXRpb25zIHRvIE9wZW5TU0wgc2hvdWxkIGF0IGxlYXN0IGdldAojIHBhc3QgdGhlc2UuIAoKbXkgJGdjY19kZXZ0ZWFtX3dhcm4gPSAiLVdhbGwgLXBlZGFudGljIC1EUEVEQU5USUMgLVduby1sb25nLWxvbmcgLVdzaWduLWNvbXBhcmUgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdzaGFkb3cgLVdmb3JtYXQgLVdlcnJvciAtRENSWVBUT19NREVCVUdfQUxMIC1EQ1JZUFRPX01ERUJVR19BQk9SVCAtRFJFRl9DSEVDSyAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCI7CgpteSAkc3RyaWN0X3dhcm5pbmdzID0gMDsKCm15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CgojIE1EMl9DSEFSIHNsYWdzIHBlbnRpdW0gcHJvcwpteSAkeDg2X2djY19vcHRzPSJSQzRfSU5ERVggTUQyX0lOVCI7CgojIE1PRElGWSBUSEVTRSBQQVJBTUVURVJTIElGIFlPVSBBUkUgR09JTkcgVE8gVVNFIFRIRSAndXRpbC9zcGVlZC5zaCBTQ1JJUFQKIyBEb24ndCB3b3JyeSBhYm91dCB0aGVzZSBub3JtYWxseQoKbXkgJHRjYz0iY2MiOwpteSAkdGZsYWdzPSItZmFzdCAtWGEiOwpteSAkdGJuX211bD0iIjsKbXkgJHRsaWI9Ii1sbnNsIC1sc29ja2V0IjsKIyRiaXRzMT0iU0lYVEVFTl9CSVQgIjsKIyRiaXRzMj0iVEhJUlRZX1RXT19CSVQgIjsKbXkgJGJpdHMxPSJUSElSVFlfVFdPX0JJVCAiOwpteSAkYml0czI9IlNJWFRZX0ZPVVJfQklUICI7CgpteSAkeDg2X2FzbT0ieDg2Y3B1aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBjcnlwdDU4Ni5vOmFlcy01ODYubyBhZXNuaS14ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYtNTg2Lm8gc2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2Lm86d3BfYmxvY2subyB3cC1tbXgubzpjbWxsLXg4Ni5vOmdoYXNoLXg4Ni5vIjsKCm15ICR4ODZfZWxmX2FzbT0iJHg4Nl9hc206ZWxmIjsKCm15ICR4ODZfNjRfYXNtPSJ4ODZfNjRjcHVpZC5vOng4Nl82NC1nY2MubyB4ODZfNjQtbW9udC5vOjphZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0Lm86Om1kNS14ODZfNjQubzpzaGExLXg4Nl82NC5vIHNoYTI1Ni14ODZfNjQubyBzaGE1MTIteDg2XzY0Lm86OnJjNC14ODZfNjQubzo6OndwLXg4Nl82NC5vOmNtbGwteDg2XzY0Lm8gY21sbF9taXNjLm86Z2hhc2gteDg2XzY0Lm8iOwpteSAkaWE2NF9hc209ImlhNjRjcHVpZC5vOmJuLWlhNjQubyBpYTY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLWlhNjQubzo6bWQ1LWlhNjQubzpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86OnJjNC1pYTY0Lm8gcmM0X3NrZXkubzo6Ojo6Z2hhc2gtaWE2NC5vOnZvaWQiOwpteSAkc3BhcmN2OV9hc209InNwYXJjdjljYXAubyBzcGFyY2NwdWlkLm86Ym4tc3BhcmN2OS5vIHNwYXJjdjktbW9udC5vIHNwYXJjdjlhLW1vbnQubzpkZXNfZW5jLXNwYXJjLm8gZmNyeXB0X2IubzphZXNfY29yZS5vIGFlc19jYmMubyBhZXMtc3BhcmN2OS5vOjo6c2hhMS1zcGFyY3Y5Lm8gc2hhMjU2LXNwYXJjdjkubyBzaGE1MTItc3BhcmN2OS5vOjo6Ojo6OmdoYXNoLXNwYXJjdjkubzp2b2lkIjsKbXkgJHNwYXJjdjhfYXNtPSI6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6Ojo6dm9pZCI7Cm15ICRhbHBoYV9hc209ImFscGhhY3B1aWQubzpibl9hc20ubyBhbHBoYS1tb250Lm86Ojo6OnNoYTEtYWxwaGEubzo6Ojo6OjpnaGFzaC1hbHBoYS5vOnZvaWQiOwpteSAkbWlwczMyX2FzbT0iOmJuLW1pcHMubzo6YWVzX2NiYy5vIGFlcy1taXBzLm86OjpzaGExLW1pcHMubyBzaGEyNTYtbWlwcy5vOjo6Ojo6OiI7Cm15ICRtaXBzNjRfYXNtPSI6Ym4tbWlwcy5vIG1pcHMtbW9udC5vOjphZXNfY2JjLm8gYWVzLW1pcHMubzo6OnNoYTEtbWlwcy5vIHNoYTI1Ni1taXBzLm8gc2hhNTEyLW1pcHMubzo6Ojo6OjoiOwpteSAkczM5MHhfYXNtPSJzMzkweGNhcC5vIHMzOTB4Y3B1aWQubzpibi1zMzkweC5vIHMzOTB4LW1vbnQubzo6YWVzX2N0ci5vIGFlcy1zMzkweC5vOjo6c2hhMS1zMzkweC5vIHNoYTI1Ni1zMzkweC5vIHNoYTUxMi1zMzkweC5vOjpyYzQtczM5MHgubzo6Ojo6Z2hhc2gtczM5MHgubyI7Cm15ICRhcm12NF9hc209Ijpibl9hc20ubyBhcm12NC1tb250Lm86OmFlc19jYmMubyBhZXMtYXJtdjQubzo6OnNoYTEtYXJtdjQtbGFyZ2UubyBzaGEyNTYtYXJtdjQubyBzaGE1MTItYXJtdjQubzo6Ojo6OjpnaGFzaC1hcm12NC5vOnZvaWQiOwpteSAkcGFyaXNjMTFfYXNtPSJwYXJpc2NpZC5vOmJuX2FzbS5vIHBhcmlzYy1tb250Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1wYXJpc2Mubzo6OnNoYTEtcGFyaXNjLm8gc2hhMjU2LXBhcmlzYy5vIHNoYTUxMi1wYXJpc2Mubzo6cmM0LXBhcmlzYy5vOjo6OjpnaGFzaC1wYXJpc2MubzozMiI7Cm15ICRwYXJpc2MyMF9hc209InBhcmlzY2lkLm86cGEtcmlzYzJXLm8gcGFyaXNjLW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBhcmlzYy5vOjo6c2hhMS1wYXJpc2MubyBzaGEyNTYtcGFyaXNjLm8gc2hhNTEyLXBhcmlzYy5vOjpyYzQtcGFyaXNjLm86Ojo6OmdoYXNoLXBhcmlzYy5vOjY0IjsKbXkgJHBwYzMyX2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBwYy5vOjo6c2hhMS1wcGMubyBzaGEyNTYtcHBjLm86Ojo6Ojo6IjsKbXkgJHBwYzY0X2FzbT0icHBjY3B1aWQubyBwcGNjYXAubzpibi1wcGMubyBwcGMtbW9udC5vIHBwYzY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLXBwYy5vOjo6c2hhMS1wcGMubyBzaGEyNTYtcHBjLm8gc2hhNTEyLXBwYy5vOjo6Ojo6OiI7Cm15ICRub19hc209Ijo6Ojo6Ojo6Ojo6Ojo6dm9pZCI7CgojIEFzIGZvciAkQlNEdGhyZWFkcy4gSWRlYSBpcyB0byBtYWludGFpbiAiY29sbGVjdGl2ZSIgc2V0IG9mIGZsYWdzLAojIHdoaWNoIHdvdWxkIGNvdmVyIGFsbCBCU0QgZmxhdm9ycy4gLXB0aHJlYWQgYXBwbGllcyB0byB0aGVtIGFsbCwgCiMgYnV0IGlzIHRyZWF0ZWQgZGlmZmVyZW50bHkuIE9wZW5CU0QgZXhwYW5kcyBpcyBhcyAtRF9QT1NJWF9USFJFQUQKIyAtbGNfciwgd2hpY2ggaXMgc3VmZmljaWVudC4gRnJlZUJTRCA0LnggZXhwYW5kcyBpdCBhcyAtbGNfciwKIyB3aGljaCBoYXMgdG8gYmUgYWNjb21wYW5pZWQgYnkgZXhwbGljaXQgLURfVEhSRUFEX1NBRkUgYW5kCiMgc29tZXRpbWVzIC1EX1JFRU5UUkFOVC4gRnJlZUJTRCA1LnggZXhwYW5kcyBpdCBhcyAtbGNfciwgd2hpY2gKIyBzZWVtcyB0byBiZSBzdWZmaWNpZW50PwpteSAkQlNEdGhyZWFkcz0iLXB0aHJlYWQgLURfVEhSRUFEX1NBRkUgLURfUkVFTlRSQU5UIjsKCiNjb25maWctc3RyaW5nCSRjYyA6ICRjZmxhZ3MgOiAkdW5pc3RkIDogJHRocmVhZF9jZmxhZyA6ICRzeXNfaWQgOiAkbGZsYWdzIDogJGJuX29wcyA6ICRjcHVpZF9vYmogOiAkYm5fb2JqIDogJGRlc19vYmogOiAkYWVzX29iaiA6ICRiZl9vYmogOiAkbWQ1X29iaiA6ICRzaGExX29iaiA6ICRjYXN0X29iaiA6ICRyYzRfb2JqIDogJHJtZDE2MF9vYmogOiAkcmM1X29iaiA6ICR3cF9vYmogOiAkY21sbF9vYmogOiAkbW9kZXNfb2JqIDogJGRzb19zY2hlbWUgOiAkc2hhcmVkX3RhcmdldCA6ICRzaGFyZWRfY2ZsYWcgOiAkc2hhcmVkX2xkZmxhZyA6ICRzaGFyZWRfZXh0ZW5zaW9uIDogJHJhbmxpYiA6ICRhcmZsYWdzIDogJG11bHRpbGliCgpteSAldGFibGU9KAojIEZpbGUgJ1RBQkxFJyAoY3JlYXRlZCBieSAnbWFrZSBUQUJMRScpIGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhpcyBsaXN0LAojIGZvcm1hdHRlZCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgoKCiMiYiIsCQkiJHt0Y2N9OiR7dGZsYWdzfTo6JHt0bGlifToke2JpdHMxfToke3Ribl9tdWx9OjoiLAojImJsLTRjLTJjIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBNRDJfQ0hBUjoke3Ribl9tdWx9OjoiLAojImJsLTRjLXJpIiwJIiR7dGNjfToke3RmbGFnc306OiR7dGxpYn06JHtiaXRzMX1CTl9MTE9ORyBSQzRfQ0hBUiBSQzRfSU5ERVg6JHt0Ym5fbXVsfTo6IiwKIyJiMi1pcy1yaS1kcCIsCSIke3RjY306JHt0ZmxhZ3N9Ojoke3RsaWJ9OiR7Yml0czJ9SURFQV9TSE9SVCBSQzRfSU5ERVggREVTX1BUUjoke3Ribl9tdWx9OjoiLAoKIyBPdXIgZGV2ZWxvcG1lbnQgY29uZmlncwoicHVyaWZ5IiwJInB1cmlmeSBnY2M6LWcgLURQVVJJRlkgLVdhbGw6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6Ojo6IiwKImRlYnVnIiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZ2dkYiAtZzIgLVdmb3JtYXQgLVdzaGFkb3cgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV2Vycm9yOjoodW5rbm93bik6Oi1sZWZlbmNlOjo6OiIsCiJkZWJ1Zy1iZW4iLAkiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtTzIgLXBpcGU6Oih1bmtub3duKTo6Ojo6IiwKImRlYnVnLWJlbi1vcGVuYnNkIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRFBFREFOVElDIC1EREVCVUdfU0FGRVNUQUNLIC1ET1BFTlNTTF9PUEVOQlNEX0RFVl9DUllQVE8gLURPUEVOU1NMX05PX0FTTSAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLW9wZW5ic2QtZGVidWciLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURPUEVOU1NMX09QRU5CU0RfREVWX0NSWVBUTyAtRE9QRU5TU0xfTk9fQVNNIC1nMyAtTzIgLXBlZGFudGljIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLXBpcGU6Oih1bmtub3duKTo6OjoiLAoiZGVidWctYmVuLWRlYnVnIiwJImdjYzokZ2NjX2RldnRlYW1fd2FybiAtREJOX0RFQlVHIC1EQ09ORl9ERUJVRyAtRERFQlVHX1NBRkVTVEFDSyAtZzMgLU8yIC1waXBlOjoodW5rbm93bik6Ojo6OjoiLAoiZGVidWctYmVuLW5vLW9wdCIsCSJnY2M6IC1XYWxsIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtRERFQlVHX1NBRkVTVEFDSyAtRENSWVBUT19NREVCVUcgLVdlcnJvciAtRExfRU5ESUFOIC1EVEVSTUlPUyAtV2FsbCAtZzM6Oih1bmtub3duKTo6Ojo6OiIsCiJkZWJ1Zy1iZW4tc3RyaWN0IiwJImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURDT05TVF9TVFJJQ1QgLU8yIC1XYWxsIC1Xc2hhZG93IC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIC1Xd3JpdGUtc3RyaW5ncyAtcGlwZTo6KHVua25vd24pOjo6Ojo6IiwKImRlYnVnLXJzZSIsImNjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1waXBlIC1PIC1nIC1nZ2RiMyAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLWJvZG8iLAkiZ2NjOi1ETF9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCSU9fUEFJUl9ERUJVRyAtRFBFREFOVElDIC1nIC1tYXJjaD1pNDg2IC1wZWRhbnRpYyAtV3NoYWRvdyAtV2FsbCAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbjo6LURfUkVFTlRSQU5UOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKImRlYnVnLXVsZiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLW1hcmNoPWk0ODYgLVdhbGwgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1nIC1XZm9ybWF0IC1Xc2hhZG93IC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnM6OjpDWUdXSU4zMjo6OiR7bm9fYXNtfTp3aW4zMjpjeWd3aW4tc2hhcmVkOjo6LmRsbCIsCiJkZWJ1Zy1zdGV2ZTY0IiwgImdjYzokZ2NjX2RldnRlYW1fd2FybiAtbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gLURDT05GX0RFQlVHIC1EREVCVUdfU0FGRVNUQUNLIC1nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXN0ZXZlMzIiLCAiZ2NjOiRnY2NfZGV2dGVhbV93YXJuIC1tMzIgLURMX0VORElBTiAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLWcgLXBpcGU6Oi1EX1JFRU5UUkFOVDo6LXJkeW5hbWljIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLXN0ZXZlLW9wdCIsICJnY2M6JGdjY19kZXZ0ZWFtX3dhcm4gLW02NCAtTzMgLURMX0VORElBTiAtRFRFUk1JTyAtRENPTkZfREVCVUcgLURERUJVR19TQUZFU1RBQ0sgLWc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1lbGYiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtV3NoYWRvdyAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyAtV25vLWxvbmctbG9uZyAtV3VuZGVmIC1XY29udmVyc2lvbiAtcGlwZTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtbm9hc20iLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRE9QRU5TU0xfTk9fQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURfUE9TSVhfU09VUkNFIC1EUEVEQU5USUMgLWdnZGIgLWczIC1tY3B1PWk0ODYgLXBlZGFudGljIC1hbnNpIC1XYWxsIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxldml0dGUtbGludXgtZWxmLWV4dHJlbWUiLCJnY2M6LURMRVZJVFRFX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtRENSWVBUT19NREVCVUcgLURFTkdJTkVfQ09ORl9ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtVyAtV3VuZGVmIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGV2aXR0ZS1saW51eC1ub2FzbS1leHRyZW1lIiwiZ2NjOi1ETEVWSVRURV9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURDUllQVE9fTURFQlVHIC1ERU5HSU5FX0NPTkZfREVCVUcgLURPUEVOU1NMX05PX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EX1BPU0lYX1NPVVJDRSAtRFBFREFOVElDIC1nZ2RiIC1nMyAtbWNwdT1pNDg2IC1wZWRhbnRpYyAtYW5zaSAtV2FsbCAtVyAtV3VuZGVmIC1Xc2hhZG93IC1XY2FzdC1hbGlnbiAtV3N0cmljdC1wcm90b3R5cGVzIC1XbWlzc2luZy1wcm90b3R5cGVzIC1Xbm8tbG9uZy1sb25nIC1XdW5kZWYgLVdjb252ZXJzaW9uIC1waXBlOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWdlb2ZmMzIiLCJnY2M6LURCTl9ERUJVRyAtREJOX0RFQlVHX1JBTkQgLURCTl9TVFJJQ1QgLURQVVJJRlkgLURPUEVOU1NMX05PX0RFUFJFQ0FURUQgLURPUEVOU1NMX05PX0FTTSAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTSAtRExfRU5ESUFOIC1EVEVSTUlPIC1EUEVEQU5USUMgLU8xIC1nZ2RiMiAtV2FsbCAtV2Vycm9yIC1XdW5kZWYgLXBlZGFudGljIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2JhZC1mdW5jdGlvbi1jYXN0IC1XY2FzdC1hbGlnbiAtV3NpZ24tY29tcGFyZSAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1Xbm8tbG9uZy1sb25nOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkc6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctZ2VvZmY2NCIsImdjYzotREJOX0RFQlVHIC1EQk5fREVCVUdfUkFORCAtREJOX1NUUklDVCAtRFBVUklGWSAtRE9QRU5TU0xfTk9fREVQUkVDQVRFRCAtRE9QRU5TU0xfTk9fQVNNIC1ET1BFTlNTTF9OT19JTkxJTkVfQVNNIC1ETF9FTkRJQU4gLURURVJNSU8gLURQRURBTlRJQyAtTzEgLWdnZGIyIC1XYWxsIC1XZXJyb3IgLVd1bmRlZiAtcGVkYW50aWMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc2lnbi1jb21wYXJlIC1XbWlzc2luZy1wcm90b3R5cGVzIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVduby1sb25nLWxvbmc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LXBlbnRpdW0iLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1ETF9FTkRJQU4gLURURVJNSU8gLWcgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbiIsCiJkZWJ1Zy1saW51eC1wcHJvIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tY3B1PXBlbnRpdW1wcm8gLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY24iLAoiZGVidWctbGludXgtZWxmIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZWZlbmNlIC1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtZWxmLW5vZWZlbmNlIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVRyAtRExfRU5ESUFOIC1EVEVSTUlPIC1nIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctbGludXgtaWEzMi1hZXMiLCAiZ2NjOi1EQUVTX0VYUEVSSU1FTlRBTCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTp4ODZjcHVpZC5vOmJuLTU4Ni5vIGNvLTU4Ni5vIHg4Ni1tb250Lm86ZGVzLTU4Ni5vIGNyeXB0NTg2Lm86YWVzX3g4NmNvcmUubyBhZXNfY2JjLm8gYWVzbmkteDg2Lm86YmYtNTg2Lm86bWQ1LTU4Ni5vOnNoYTEtNTg2Lm8gc2hhMjU2LTU4Ni5vIHNoYTUxMi01ODYubzpjYXN0LTU4Ni5vOnJjNC01ODYubzpybWQtNTg2Lm86cmM1LTU4Ni5vOndwX2Jsb2NrLm8gd3AtbW14Lm86OmdoYXNoLXg4Ni5vOmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLWxpbnV4LWdlbmVyaWMzMiIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURURVJNSU8gLWcgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC1nZW5lcmljNjQiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EVEVSTUlPIC1nIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJkZWJ1Zy1saW51eC14ODZfNjQiLCJnY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1tNjQgLURMX0VORElBTiAtRFRFUk1JTyAtZyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImRpc3QiLAkJImNjOi1POjoodW5rbm93bik6Ojo6OjoiLAoKIyBCYXNpYyBjb25maWdzIHRoYXQgc2hvdWxkIHdvcmsgb24gYW55ICgzMiBhbmQgbGVzcyBiaXQpIGJveAoiZ2NjIiwJCSJnY2M6LU8zOjoodW5rbm93bik6OjpCTl9MTE9ORzo6OiIsCiJjYyIsCQkiY2M6LU86Oih1bmtub3duKTo6Ojo6OiIsCgojIyMjVk9TIENvbmZpZ3VyYXRpb25zCiJ2b3MtZ2NjIiwiZ2NjOi1PMyAtV2FsbCAtRF9QT1NJWF9DX1NPVVJDRT0yMDAxMTJMIC1EX0JTRCAtRF9WT1NfRVhURU5ERURfTkFNRVMgLURCX0VORElBTjo6KHVua25vd24pOlZPUzotV2wsLW1hcDpCTl9MTE9ORzoke25vX2FzbX06Ojo6Oi5zbzoiLAoiZGVidWctdm9zLWdjYyIsImdjYzotTzAgLWcgLVdhbGwgLURfUE9TSVhfQ19TT1VSQ0U9MjAwMTEyTCAtRF9CU0QgLURfVk9TX0VYVEVOREVEX05BTUVTIC1EQl9FTkRJQU4gLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHOjoodW5rbm93bik6Vk9TOi1XbCwtbWFwOkJOX0xMT05HOiR7bm9fYXNtfTo6Ojo6LnNvOiIsCgojIyMjIFNvbGFyaXMgeDg2IHdpdGggR05VIEMgc2V0dXBzCiMgLURPUEVOU1NMX05PX0lOTElORV9BU00gc3dpdGNoZXMgb2ZmIGlubGluZSBhc3NlbWJsZXIuIFdlIGhhdmUgdG8gZG8gaXQKIyBoZXJlIGJlY2F1c2Ugd2hlbmV2ZXIgR05VIEMgaW5zdGFudGlhdGVzIGFuIGFzc2VtYmxlciB0ZW1wbGF0ZSBpdAojIHN1cnJvdW5kcyBpdCB3aXRoICNBUFAgI05PX0FQUCBjb21tZW50IHBhaXIgd2hpY2ggKGF0IGxlYXN0IFNvbGFyaXMKIyA3X3g4NikgL3Vzci9jY3MvYmluL2FzIGZhaWxzIHRvIGFzc2VtYmxlIHdpdGggIklsbGVnYWwgbW5lbW9uaWMiCiMgZXJyb3IgbWVzc2FnZS4KInNvbGFyaXMteDg2LWdjYyIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPXBlbnRpdW0gLVdhbGwgLURMX0VORElBTiAtRE9QRU5TU0xfTk9fSU5MSU5FX0FTTTo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtc2hhcmVkIC1zdGF0aWMtbGliZ2NjIG1pZ2h0IGFwcGVhciBjb250cm92ZXJzaWFsLCBidXQgbW9kdWxlcyB0YWtlbgojIGZyb20gc3RhdGljIGxpYmdjYyBkbyBub3QgaGF2ZSByZWxvY2F0aW9ucyBhbmQgbGlua2luZyB0aGVtIGludG8gb3VyCiMgc2hhcmVkIG9iamVjdHMgZG9lc24ndCBoYXZlIGFueSBuZWdhdGl2ZSBzaWRlLWVmZmVjdHMuIE9uIHRoZSBjb250cmFyeSwKIyBkb2luZyBzbyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZ2NjIHNoYXJlZCBidWlsZCB3aXRoIFN1biBDLiBHaXZlbgojIHRoYXQgZ2NjIGdlbmVyYXRlcyBmYXN0ZXIgY29kZSBbdGhhbmtzIHRvIGlubGluZSBhc3NlbWJsZXJdLCBJIHdvdWxkCiMgYWN0dWFsbHkgcmVjb21tZW5kIHRvIGNvbnNpZGVyIHVzaW5nIGdjYyBzaGFyZWQgYnVpbGQgZXZlbiB3aXRoIHZlbmRvcgojIGNvbXBpbGVyOi0pCiMJCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiJzb2xhcmlzNjQteDg2XzY0LWdjYyIsImdjYzotbTY0IC1PMyAtV2FsbCAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1tNjQgLXNoYXJlZCAtc3RhdGljLWxpYmdjYzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCiAKIyMjIyBTb2xhcmlzIHg4NiB3aXRoIFN1biBDIHNldHVwcwoic29sYXJpcy14ODYtY2MiLCJjYzotZmFzdCAtTyAtWGE6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXg4Nl82NC1jYyIsImNjOi1mYXN0IC14YXJjaD1hbWQ2NCAteHN0cmNvbnN0IC1YYSAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi14YXJjaD1hbWQ2NCAtRyAtZHkgLXogdGV4dDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi82NCIsCgojIyMjIFNQQVJDIFNvbGFyaXMgd2l0aCBHTlUgQyBzZXR1cHMKInNvbGFyaXMtc3BhcmN2Ny1nY2MiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1tdjggLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtbTMyIHNob3VsZCBiZSBzYWZlIHRvIGFkZCBhcyBsb25nIGFzIGRyaXZlciByZWNvZ25pemVzIC1tY3B1PXVsdHJhc3BhcmMKInNvbGFyaXMtc3BhcmN2OS1nY2MiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpczY0LXNwYXJjdjktZ2NjIiwiZ2NjOi1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtTzMgLVdhbGwgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotZlBJQzotbTY0IC1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovNjQiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtZ2NjIiwiZ2NjOi1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQk5fQ1RYX0RFQlVHIC1EQ1JZUFRPX01ERUJVR19BTEwgLU8gLWcgLW12OCAtV2FsbCAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWdjYyIsImdjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC1EUEVEQU5USUMgLU8gLWcgLW1jcHU9dWx0cmFzcGFyYyAtcGVkYW50aWMgLWFuc2kgLVdhbGwgLVdzaGFkb3cgLVduby1sb25nLWxvbmcgLURfX0VYVEVOU0lPTlNfXyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBTUEFSQyBTb2xhcmlzIHdpdGggU3VuIEMgc2V0dXBzCiMgU0M0LjAgZG9lc24ndCBwYXNzICdtYWtlIHRlc3QnLCB1cGdyYWRlIHRvIFNDNS4wIG9yIFNDNC4yLgojIFNDNC4yIGlzIG9rLCBiZXR0ZXIgdGhhbiBnY2MgZXZlbiBvbiBibiBhcyBsb25nIGFzIHlvdSB0ZWxsIGl0IC14YXJjaD12OAojIFNDNS4wIG5vdGU6IENvbXBpbGVyIGNvbW1vbiBwYXRjaCAxMDczNTctMDEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQhCiJzb2xhcmlzLXNwYXJjdjctY2MiLCJjYzoteE81IC14c3RyY29uc3QgLXhkZXBlbmQgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbCAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoic29sYXJpcy1zcGFyY3Y4LWNjIiwiY2M6LXhhcmNoPXY4IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTiAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXMtc3BhcmN2OS1jYyIsImNjOi14dGFyZ2V0PXVsdHJhIC14YXJjaD12OHBsdXMgLXhPNSAteHN0cmNvbnN0IC14ZGVwZW5kIC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1sc29ja2V0IC1sbnNsIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LX0xMIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOnNvbGFyaXMtc2hhcmVkOi1LUElDOi1HIC1keSAteiB0ZXh0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInNvbGFyaXM2NC1zcGFyY3Y5LWNjIiwiY2M6LXh0YXJnZXQ9dWx0cmEgLXhhcmNoPXY5IC14TzUgLXhzdHJjb25zdCAteGRlcGVuZCAtWGEgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpzb2xhcmlzLXNoYXJlZDotS1BJQzoteGFyY2g9djkgLUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6L3Vzci9jY3MvYmluL2FyIHJzOjovNjQiLAojIyMjCiJkZWJ1Zy1zb2xhcmlzLXNwYXJjdjgtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUdfQUxMIC14YXJjaD12OCAtZyAtTyAteHN0cmNvbnN0IC1YYSAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiZGVidWctc29sYXJpcy1zcGFyY3Y5LWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHX0FMTCAteHRhcmdldD11bHRyYSAteGFyY2g9djhwbHVzIC1nIC1PIC14c3RyY29uc3QgLVhhIC1EQl9FTkRJQU4gLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxzb2NrZXQgLWxuc2wgLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y5X2FzbX06ZGxmY246c29sYXJpcy1zaGFyZWQ6LUtQSUM6LUcgLWR5IC16IHRleHQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLCAKCiMjIyMgU3VuT1MgY29uZmlncywgYXNzdW1pbmcgc3BhcmMgZm9yIHRoZSBnY2Mgb25lLgojInN1bm9zLWNjIiwgImNjOi1PNCAtRE5PUFJPVE8gLUROT0NPTlNUOjoodW5rbm93bik6U1VOT1M6OkRFU19VTlJPTEw6JHtub19hc219OjoiLAoic3Vub3MtZ2NjIiwiZ2NjOi1PMyAtbXY4IC1Ec3NpemVfdD1pbnQ6Oih1bmtub3duKTpTVU5PUzo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX1BUUiBERVNfUklTQzE6JHtub19hc219OjoiLAoKIyMjIyBJUklYIDUueCBjb25maWdzCiMgLW1pcHMyIGZsYWcgaXMgYWRkZWQgYnkgLi9jb25maWcgd2hlbiBhcHByb3ByaWF0ZS4KImlyaXgtZ2NjIiwiZ2NjOi1PMyAtRFRFUk1JT1MgLURCX0VORElBTjo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUjoke21pcHMzMl9hc219Om8zMjpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImlyaXgtY2MiLCAiY2M6LU8yIC11c2VfcmVhZG9ubHlfY29uc3QgLURURVJNSU9TIC1EQl9FTkRJQU46Oih1bmtub3duKTo6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke21pcHMzMl9hc219Om8zMjpkbGZjbjppcml4LXNoYXJlZDo6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJUklYIDYueCBjb25maWdzCiMgT25seSBOMzIgYW5kIE42NCBBQklzIGFyZSBzdXBwb3J0ZWQuIElmIHlvdSBuZWVkIE8zMiBBQkkgYnVpbGQsIGludm9rZQojICcuL0NvbmZpZ3VyZSBpcml4LWNjIC1vMzInIG1hbnVhbGx5LgoiaXJpeC1taXBzMy1nY2MiLCJnY2M6LW1hYmk9bjMyIC1PMyAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6TUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIFJDNF9DSFVOS19MTCBERVNfVU5ST0xMIERFU19SSVNDMiBERVNfUFRSIEJGX1BUUiBTSVhUWV9GT1VSX0JJVDoke21pcHM2NF9hc219Om4zMjpkbGZjbjppcml4LXNoYXJlZDo6LW1hYmk9bjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6MzIiLAoiaXJpeC1taXBzMy1jYyIsICJjYzotbjMyIC1taXBzMyAtTzIgLXVzZV9yZWFkb25seV9jb25zdCAtRzAgLXJkYXRhX3NoYXJlZCAtRFRFUk1JT1MgLURCX0VORElBTiAtREJOX0RJVjNXOjotRF9TR0lfTVBfU09VUkNFOjo6REVTX1BUUiBSQzRfQ0hBUiBSQzRfQ0hVTktfTEwgREVTX1JJU0MyIERFU19VTlJPTEwgQkZfUFRSIFNJWFRZX0ZPVVJfQklUOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmlyaXgtc2hhcmVkOjotbjMyOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6MzIiLAojIE42NCBBQkkgYnVpbGRzLgoiaXJpeDY0LW1pcHM0LWdjYyIsImdjYzotbWFiaT02NCAtbWlwczQgLU8zIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MyIERFU19VTlJPTEwgU0lYVFlfRk9VUl9CSVRfTE9ORzoke21pcHM2NF9hc219OjY0OmRsZmNuOmlyaXgtc2hhcmVkOjotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImlyaXg2NC1taXBzNC1jYyIsICJjYzotNjQgLW1pcHM0IC1PMiAtdXNlX3JlYWRvbmx5X2NvbnN0IC1HMCAtcmRhdGFfc2hhcmVkIC1EVEVSTUlPUyAtREJfRU5ESUFOIC1EQk5fRElWM1c6Oi1EX1NHSV9NUF9TT1VSQ0U6OjpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MyIERFU19VTlJPTEwgU0lYVFlfRk9VUl9CSVRfTE9ORzoke21pcHM2NF9hc219OjY0OmRsZmNuOmlyaXgtc2hhcmVkOjotNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCgojIyMjIFVuaWZpZWQgSFAtVVggQU5TSSBDIGNvbmZpZ3MuCiMgU3BlY2lhbCBub3RlczoKIyAtIE9yaWdpbmFsbHkgd2Ugd2VyZSBvcHRpbWl6aW5nIGF0ICtPNCBsZXZlbC4gSXQgc2hvdWxkIGJlIG5vdGVkCiMgICB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiArTzMgYW5kICtPNCBpcyBnbG9iYWwgaW50ZXItCiMgICBwcm9jZWR1cmFsIGFuYWx5c2lzLiBBcyBpdCBoYXMgdG8gYmUgcGVyZm9ybWVkIGR1cmluZyB0aGUgbGluawojICAgc3RhZ2UgdGhlIGNvbXBpbGVyIGxlYXZlcyBiZWhpbmQgY2VydGFpbiBwc2V1ZG8tY29kZSBpbiBsaWIqLmEKIyAgIHdoaWNoIG1pZ2h0IGJlIHJlbGVhc2Ugb3IgZXZlbiBwYXRjaCBsZXZlbCBzcGVjaWZpYy4gR2VuZXJhdGluZwojICAgdGhlIG1hY2hpbmUgY29kZSBmb3IgYW5kIGFuYWx5emluZyB0aGUgKndob2xlKiBwcm9ncmFtIGFwcGVhcnMKIyAgIHRvIGJlICpleHRyZW1lbHkqIG1lbW9yeSBkZW1hbmRpbmcgd2hpbGUgdGhlIHBlcmZvcm1hbmNlIGdhaW4gaXMKIyAgIGFjdHVhbGx5IHF1ZXN0aW9uYWJsZS4gVGhlIHNpdHVhdGlvbiBpcyBpbnRlbnNpZmllZCBieSB0aGUgZGVmYXVsdAojICAgSFAtVVggZGF0YSBzZXQgc2l6ZSBsaW1pdCAoaW5mYW1vdXMgJ21heGRzaXonIHR1bmFibGUpIG9mIDY0TUIKIyAgIHdoaWNoIGlzIHdheSB0b28gbG93IGZvciArTzQuIEluIG90aGVyIHdvcmRzLCBkb2Vzbid0ICtPMyBtYWtlCiMgICBtb3JlIHNlbnNlPwojIC0gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIEhQIGNvbXBpbGVyIGJ5IGRlZmF1bHQgZ2VuZXJhdGVzIGNvZGUKIyAgIHN1aXRhYmxlIGZvciBleGVjdXRpb24gb24gdGhlIGhvc3QgeW91J3JlIGN1cnJlbnRseSBjb21waWxpbmcgYXQuCiMgICBJZiB0aGUgdG9vbGtpdCBpcyBtZW50IHRvIGJlIHVzZWQgb24gdmFyaW91cyBQQS1SSVNDIHByb2Nlc3NvcnMKIyAgIGNvbnNpZGVyICcuL2NvbmZpZyArREFwb3J0YWJsZScuCiMgLSArREQ2NCBpcyBjaG9zZW4gaW4gZmF2b3VyIG9mICtEQTIuMFcgYmVjYXVzZSBpdCdzIG1lYW50IHRvIGJlCiMgICBjb21wYXRpYmxlIHdpdGggKmZ1dHVyZSogcmVsZWFzZXMuCiMgLSBJZiB5b3UgcnVuIC4vQ29uZmlndXJlIGhwdXgtcGFyaXNjLVtnXWNjIG1hbnVhbGx5IGRvbid0IGZvcmdldCB0bwojICAgcGFzcyAtRF9SRUVOVFJBTlQgb24gSFAtVVggMTAgYW5kIGxhdGVyLgojIC0gLURNRDMyX1hBUlJBWSB0cmlnZ2VycyB3b3JrYXJvdW5kIGZvciBjb21waWxlciBidWcgd2UgcmFuIGludG8gaW4KIyAgIDMyLWJpdCBtZXNzYWdlIGRpZ2VzdHMuIChGb3IgdGhlIG1vbWVudCBvZiB0aGlzIHdyaXRpbmcpIEhQIEMKIyAgIGRvZXNuJ3Qgc2VlbSB0byAiZGlnZXN0IiB0b28gbWFueSBsb2NhbCB2YXJpYWJsZXMgKHRoZXkgbWFrZSAiaGltIgojICAgY2hldyBmb3JldmVyOi0pLiBGb3IgbW9yZSBkZXRhaWxzIGxvb2stdXAgTUQzMl9YQVJSQVkgY29tbWVudCBpbgojICAgY3J5cHRvL3NoYS9zaGFfbGNsLmguCiMJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KIwojIFNpbmNlIHRoZXJlIGlzIG1lbnRpb24gb2YgdGhpcyBpbiBzaGxpYi9ocHV4MTAtY2Muc2gKImhwdXgtcGFyaXNjLWNjLW80IiwiY2M6LUFlICtPNCArRVNsaXQgLXogLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LWxkbGQ6Qk5fTExPTkcgREVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MxXzEtZ2NjIiwiZ2NjOi1PMyAtREJfRU5ESUFOIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOkJOX0xMT05HIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtwYXJpc2MxMV9hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1wYXJpc2MyLWdjYyIsImdjYzotbWFyY2g9Mi4wIC1PMyAtREJfRU5ESUFOIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6OnBhLXJpc2MyLm86Ojo6Ojo6Ojo6Ojo6dm9pZDpkbDpocHV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zbC5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImhwdXg2NC1wYXJpc2MyLWdjYyIsImdjYzotTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOjpwYS1yaXNjMlcubzo6Ojo6Ojo6Ojo6Ojp2b2lkOmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGEyMF82NCIsCgojIE1vcmUgYXR0ZW1wdHMgYXQgdW5pZmllZCAxMC5YIGFuZCAxMS5YIHRhcmdldHMgZm9yIEhQIEMgY29tcGlsZXIuCiMKIyBDaHJpcyBSdWVtbWxlciA8cnVlbW1sZXJAY3VwLmhwLmNvbT4KIyBLZXZpbiBTdGV2ZXMgPGtzQGhwLnNlPgoiaHB1eC1wYXJpc2MtY2MiLCJjYzorTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtREJOX0RJVjJXIC1ETUQzMl9YQVJSQVk6Oi1EX1JFRU5UUkFOVDo6LVdsLCtzIC1sZGxkOk1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7bm9fYXNtfTpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4LXBhcmlzYzFfMS1jYyIsImNjOitEQTEuMSArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZOjotRF9SRUVOVFJBTlQ6Oi1XbCwrcyAtbGRsZDpNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke3BhcmlzYzExX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGExLjEiLAoiaHB1eC1wYXJpc2MyLWNjIiwiY2M6K0RBMi4wICtEUzIuMCArTzMgK09wdHJzX3N0cm9uZ2x5X3R5cGVkIC1BZSArRVNsaXQgLURCX0VORElBTiAtRE1EMzJfWEFSUkFZIC1EX1JFRU5UUkFOVDo6OjotV2wsK3MgLWxkbGQ6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6OnBhLXJpc2MyLm86Ojo6Ojo6Ojo6Ojo6dm9pZDpkbDpocHV4LXNoYXJlZDorWjotYjouc2wuXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJocHV4NjQtcGFyaXNjMi1jYyIsImNjOitERDY0ICtPMyArT3B0cnNfc3Ryb25nbHlfdHlwZWQgLUFlICtFU2xpdCAtREJfRU5ESUFOIC1ETUQzMl9YQVJSQVkgLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke3BhcmlzYzIwX2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0RENjQgLWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovcGEyMF82NCIsCgojIEhQL1VYIElBLTY0IHRhcmdldHMKImhwdXgtaWE2NC1jYyIsImNjOi1BZSArREQzMiArTzIgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6K1o6K0REMzIgLWI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjovaHB1eDMyIiwKIyBGcmFuayBHZXVydHMgPGZyYW5rLmdldXJ0c0BubC5hYm5hbXJvLmNvbT4gaGFzIHBhdGllbnRseSBhc3Npc3RlZCB3aXRoCiMgd2l0aCBkZWJ1Z2dpbmcgb2YgdGhlIGZvbGxvd2luZyBjb25maWcuCiJocHV4NjQtaWE2NC1jYyIsImNjOi1BZSArREQ2NCArTzMgK09saXQ9YWxsIC16IC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggREVTX1VOUk9MTCBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpocHV4LXNoYXJlZDorWjorREQ2NCAtYjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4NjQiLAojIEdDQyBidWlsZHMuLi4KImhwdXgtaWE2NC1nY2MiLCJnY2M6LU8zIC1EQl9FTkRJQU4gLURfUkVFTlRSQU5UOjo6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEwgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246aHB1eC1zaGFyZWQ6LWZwaWM6LXNoYXJlZDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9ocHV4MzIiLAoiaHB1eDY0LWlhNjQtZ2NjIiwiZ2NjOi1tbHA2NCAtTzMgLURCX0VORElBTiAtRF9SRUVOVFJBTlQ6Ojo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIE1EMl9DSEFSIFJDNF9JTkRFWCBERVNfVU5ST0xMIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmhwdXgtc2hhcmVkOi1mcGljOi1tbHA2NCAtc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6L2hwdXg2NCIsIAoKIyBMZWdhY3kgSFBVWCA5LlggY29uZmlncy4uLgoiaHB1eC1jYyIsCSJjYzotREJfRU5ESUFOIC1EQk5fRElWMlcgLURNRDMyX1hBUlJBWSAtQWUgK0VTbGl0ICtPMiAtejo6KHVua25vd24pOjotV2wsK3MgLWxkbGQ6REVTX1BUUiBERVNfVU5ST0xMIERFU19SSVNDMToke25vX2FzbX06ZGw6aHB1eC1zaGFyZWQ6K1o6LWI6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiaHB1eC1nY2MiLAkiZ2NjOi1EQl9FTkRJQU4gLURCTl9ESVYyVyAtTzM6Oih1bmtub3duKTo6LVdsLCtzIC1sZGxkOkRFU19QVFIgREVTX1VOUk9MTCBERVNfUklTQzE6JHtub19hc219OmRsOmhwdXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNsLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyBIUCBNUEUvaVggaHR0cDovL2phenouZXh0ZXJuYWwuaHAuY29tL3NyYy9vcGVuc3NsLwoiTVBFL2lYLWdjYyIsCSJnY2M6LURfRU5ESUFOIC1EQk5fRElWMlcgLU8zIC1EX1BPU0lYX1NPVVJDRSAtRF9TT0NLRVRfU09VUkNFIC1JL1NZU0xPRy9QVUI6Oih1bmtub3duKTpNUEU6LUwvU1lTTE9HL1BVQiAtbHN5c2xvZyAtbHNvY2tldCAtbGN1cnNlczpCTl9MTE9ORyBERVNfUFRSIERFU19VTlJPTEwgREVTX1JJU0MxOjo6IiwKCiMgREVDIEFscGhhIE9TRi8xL1RydTY0IHRhcmdldHMuCiMKIwkiV2hhdCdzIGluIGEgbmFtZT8gVGhhdCB3aGljaCB3ZSBjYWxsIGEgcm9zZQojCSBCeSBhbnkgb3RoZXIgd29yZCB3b3VsZCBzbWVsbCBhcyBzd2VldC4iCiMKIyAtIFdpbGxpYW0gU2hha2VzcGVhcmUsICJSb21lbyAmIEp1bGlldCIsIEFjdCBJSSwgc2NlbmUgSUkuCiMKIyBGb3IgZ2NjLCB0aGUgZm9sbG93aW5nIGdhdmUgYSAlNTAgc3BlZWR1cCBvbiBhIDE2NCBvdmVyIHRoZSAnREVTX0lOVCcgdmVyc2lvbgojCiJvc2YxLWFscGhhLWdjYyIsICJnY2M6LU8zOjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19SSVNDMToke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Ojouc28iLAoib3NmMS1hbHBoYS1jYyIsICAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtTzQgLXJlYWRvbmx5X3N0cmluZ3M6Oih1bmtub3duKTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6Oi5zbyIsCiJ0cnU2NC1hbHBoYS1jYyIsICJjYzotc3RkMSAtdHVuZSBob3N0IC1mYXN0IC1yZWFkb25seV9zdHJpbmdzOjotcHRocmVhZDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LOiR7YWxwaGFfYXNtfTpkbGZjbjphbHBoYS1vc2YxLXNoYXJlZDo6LW1zeW06LnNvIiwKCiMjIyMKIyMjIyBWYXJpZXR5IG9mIExJTlVYOi0pCiMjIyMKIyAqLWdlbmVyaWMqIGlzIGVuZGlhbi1uZXV0cmFsIHRhcmdldCwgYnV0IC4vY29uZmlnIGlzIGZyZWUgdG8KIyB0aHJvdyBpbiAtRFtCTF1fRU5ESUFOLCB3aGljaGV2ZXIgYXBwcm9wcmlhdGUuLi4KImxpbnV4LWdlbmVyaWMzMiIsImdjYzotRFRFUk1JTyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1wcGMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjMzJfYXNtfTpsaW51eDMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIEl0J3MgYmVsaWV2ZWQgdGhhdCBtYWpvcml0eSBvZiBBUk0gdG9vbGNoYWlucyBwcmVkZWZpbmUgYXBwcm9wcmlhdGUgLW1hcmNoLgojIElmIHlvdSBjb21waWxlciBkb2VzIG5vdCwgZG8gY29tcGxlbWVudCBjb25maWcgY29tbWFuZCBsaW5lIHdpdGggb25lIQoibGludXgtYXJtdjQiLAkiZ2NjOi1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyMjIyBJQS0zMiB0YXJnZXRzLi4uCiJsaW51eC1pYTMyLWljYyIsCSJpY2M6LURMX0VORElBTiAtRFRFUk1JTyAtTzIgLW5vX2NwcHJ0OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotS1BJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFvdXQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dCIsCiMjIyMKImxpbnV4LWdlbmVyaWM2NCIsImdjYzotRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXBwYzY0IiwJImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCiJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWlhNjQtZWNjIiwiZWNjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8yIC1XYWxsIC1ub19jcHBydDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1pYTY0LWljYyIsImljYzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKImxpbnV4NjQtczM5MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtzMzkweF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAojIyMjIFNvIGNhbGxlZCAiaGlnaGdwcnMiIHRhcmdldCBmb3Igei9BcmNoaXRlY3R1cmUgQ1BVcwojICJIaWdoZ3BycyIgaXMga2VybmVsIGZlYXR1cmUgZmlyc3QgaW1wbGVtZW50ZWQgaW4gTGludXggMi42LjMyLCBzZWUKIyAvcHJvYy9jcHVpbmZvLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YKIyBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzIG5vdCBvbmx5IHVwb24gMzItYml0IHByb2Nlc3MgY29udGV4dAojIHN3aXRjaCwgYnV0IGV2ZW4gb24gYXN5bmNocm9ub3VzIHNpZ25hbCBkZWxpdmVyeSB0byBzdWNoIHByb2Nlc3MuCiMgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkZXBsb3kgNjQtYml0IGluc3RydWN0aW9ucyBldmVuIGluIGxlZ2FjeQojIGFwcGxpY2F0aW9uIGNvbnRleHQgYW5kIGFjaGlldmUgYmV0dGVyIFtvciBzaG91bGQgd2Ugc2F5IGFkZXF1YXRlXQojIHBlcmZvcm1hbmNlLiBUaGUgYnVpbGQgaXMgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBsaW51eC1nZW5lcmljMzIsCiMgYW5kIHRoZSBpZGVhIGlzIHRvIGJlIGFibGUgdG8gaW5zdGFsbCB0aGUgcmVzdWx0aW5nIGxpYmNyeXB0by5zbwojIGFsb25nc2lkZSBnZW5lcmljIG9uZSwgZS5nLiBhcyAvbGliL2hpZ2hncHJzL2xpYmNyeXB0by5zby54LnksIGZvcgojIGxkY29uZmlnIGFuZCBydW4tdGltZSBsaW5rZXIgdG8gYXV0b2Rpc2NvdmVyLiBVbmZvcnR1bmF0ZWx5IGl0CiMgZG9lc24ndCB3b3JrIGp1c3QgeWV0LCBiZWNhdXNlIG9mIGNvdXBsZSBvZiBidWdzIGluIGdsaWJjCiMgc3lzZGVwL3MzOTAvZGwtcHJvY2luZm8uYyBhZmZlY3RpbmcgbGRjb25maWcgYW5kIGxkLnNvLjEuLi4KImxpbnV4MzItczM5MHgiLAkiZ2NjOi1tMzEgLVdhLC1temFyY2ggLURCX0VORElBTiAtRFRFUk1JTyAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOnMzOTB4Y2FwLm8gczM5MHhjcHVpZC5vOmJuX2FzbS5vIHMzOTB4LW1vbnQubzo6YWVzX2N0ci5vIGFlcy1zMzkweC5vOjo6c2hhMS1zMzkweC5vIHNoYTI1Ni1zMzkweC5vIHNoYTUxMi1zMzkweC5vOjpyYzQtczM5MHgubzo6Ojo6Z2hhc2gtczM5MHgubzozMTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW0zMTouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6Oi9oaWdoZ3BycyIsCiMjIyMgU1BBUkMgTGludXggc2V0dXBzCiMgUmF5IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMgcGF0aWVudGx5CiMgYXNzaXN0ZWQgd2l0aCBkZWJ1Z2dpbmcgb2YgZm9sbG93aW5nIHR3byBjb25maWdzLgoibGludXgtc3BhcmN2OCIsImdjYzotbXY4IC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgaXQncyBhIHJlYWwgbWVzcyB3aXRoIC1tY3B1PXVsdHJhc3BhcmMgb3B0aW9uIHVuZGVyIExpbnV4LCBidXQKIyAtV2EsLUF2OHBsdXMgc2hvdWxkIGRvIHRoZSB0cmljayBubyBtYXR0ZXIgd2hhdC4KImxpbnV4LXNwYXJjdjkiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsIC1XYSwtQXY4cGx1cyAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW0zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiMgR0NDIDMuMSBpcyBhIHJlcXVpcmVtZW50CiJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLURURVJNSU8gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAojIyMjIEFscGhhIExpbnV4IHdpdGggR05VIEMgYW5kIENvbXBhcSBDIHNldHVwcwojIFNwZWNpYWwgbm90ZXM6CiMgLSBsaW51eC1hbHBoYStid3gtZ2NjIGlzIG1lbnQgdG8gYmUgdXNlZCBmcm9tIC4vY29uZmlnIG9ubHkuIElmIHlvdQojICAgb3VnaHQgdG8gcnVuICcuL0NvbmZpZ3VyZSBsaW51eC1hbHBoYStid3gtZ2NjJyBtYW51YWxseSwgZG8KIyAgIGNvbXBsZW1lbnQgdGhlIGNvbW1hbmQgbGluZSB3aXRoIC1tY3B1PWV2NTYsIC1tY3B1PWV2NiBvciB3aGF0ZXZlcgojICAgd2hpY2ggaXMgYXBwcm9wcmlhdGUuCiMgLSBJZiB5b3UgdXNlIGNjYyBrZWVwIGluIG1pbmQgdGhhdCAtZmFzdCBpbXBsaWVzIC1hcmNoIGhvc3QgYW5kIHRoZQojICAgY29tcGlsZXIgaXMgZnJlZSB0byBpc3N1ZSBpbnN0cnVjdGlvbnMgd2hpY2ggZ29ubmEgbWFrZSBlbGRlciBDUFUKIyAgIGNob2tlLiBJZiB5b3Ugd2lzaCB0byBidWlsZCAiYmxlbmRlZCIgdG9vbGtpdCwgYWRkIC1hcmNoIGdlbmVyaWMKIyAgICphZnRlciogLWZhc3QgYW5kIGludm9rZSAnLi9Db25maWd1cmUgbGludXgtYWxwaGEtY2NjJyBtYW51YWxseS4KIwojCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CiMKImxpbnV4LWFscGhhLWdjYyIsImdjYzotTzMgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImxpbnV4LWFscGhhK2J3eC1nY2MiLCJnY2M6LU8zIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJsaW51eC1hbHBoYS1jY2MiLCJjY2M6LWZhc3QgLXJlYWRvbmx5X3N0cmluZ3MgLURMX0VORElBTiAtRFRFUk1JTzo6LURfUkVFTlRSQU5UOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMOiR7YWxwaGFfYXNtfSIsCiJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU4gLURURVJNSU86Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAoKIyBBbmRyb2lkOiBsaW51eC0qIGJ1dCB3aXRob3V0IC1EVEVSTUlPIGFuZCBwb2ludGVycyB0byBoZWFkZXJzIGFuZCBsaWJzLgoiYW5kcm9pZCIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiYW5kcm9pZC1hcm12NyIsImdjYzotbWFyY2g9YXJtdjctYSAtbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyMjIyAqQlNEIFtkbyBzZWUgY29tbWVudCBhYm91dCAke0JTRHRocmVhZHN9IGFib3ZlIV0KIkJTRC1nZW5lcmljMzIiLCJnY2M6LURURVJNSU9TIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dDpkbGZjbjpic2Qtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJCU0QteDg2LWVsZiIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmJzZC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKImRlYnVnLUJTRC14ODYtZWxmIiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLVdhbGwgLWc6OiR7QlNEdGhyZWFkc306OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246YnNkLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXNwYXJjdjgiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TIC1PMyAtbXY4IC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTDoke3NwYXJjdjhfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIkJTRC1nZW5lcmljNjQiLCJnY2M6LURURVJNSU9TIC1PMyAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke25vX2FzbX06ZGxmY246YnNkLWdjYy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKIyAtRE1EMzJfUkVHX1Q9aW50IGRvZXNuJ3QgYWN0dWFsbHkgYmVsb25nIGluIHNwYXJjNjQgdGFyZ2V0LCBpdAojIHNpbXBseSAqaGFwcGVucyogdG8gd29yayBhcm91bmQgYSBjb21waWxlciBidWcgaW4gZ2NjIDMuMy4zLAojIHRyaWdnZXJlZCBieSBSSVBFTUQxNjAgY29kZS4KIkJTRC1zcGFyYzY0IiwJImdjYzotREJfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLURNRDMyX1JFR19UPWludCAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OkJOX0xMT05HIFJDMl9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJU0MyIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2FsbDo6JHtCU0R0aHJlYWRzfTo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiQlNELXg4Nl82NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1XYWxsOjoke0JTRHRocmVhZHN9Ojo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCgoiYnNkaS1lbGYtZ2NjIiwgICAgICJnY2M6LURQRVJMNSAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbWFyY2g9aTQ4NiAtV2FsbDo6KHVua25vd24pOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIm5leHRzdGVwIiwJImNjOi1PIC1XYWxsOjxsaWJjLmg+Oih1bmtub3duKTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJuZXh0c3RlcDMuMyIsCSJjYzotTzMgLVdhbGw6PGxpYmMuaD46KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKCiMgTkNSIE1QLVJBUyBVTklYIHZlciAwMi4wMy4wMQoibmNyLXNjZGUiLCJjYzotTzYgLVhhIC1Ib2ZmPUJFSEFWRUQgLTY4NiAtSHdpZGUgLUhpdzo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbCAtbGM4OToke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306OjoiLAoKIyBRTlgKInFueDQiLAkiY2M6LURMX0VORElBTiAtRFRFUk1JTzo6KHVua25vd24pOjo6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIsCiJRTlg2IiwgICAgICAgImdjYzotRFRFUk1JT1M6Ojo6LWxzb2NrZXQ6OiR7bm9fYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiUU5YNi1pMzg2IiwgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8yIC1XYWxsOjo6Oi1sc29ja2V0OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoKIyBCZU9TCiJiZW9zLXg4Ni1yNSIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOkJFT1M6LWxiZSAtbG5ldDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06YmVvczpiZW9zLXNoYXJlZDotZlBJQyAtRFBJQzotc2hhcmVkOi5zbyIsCiJiZW9zLXg4Ni1ib25lIiwgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1jcHU9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOkJFT1M6LWxiZSAtbGJpbmQgLWxzb2NrZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmJlb3M6YmVvcy1zaGFyZWQ6LWZQSUM6LXNoYXJlZDouc28iLAoKIyMjIyBTQ08vQ2FsZGVyYSB0YXJnZXRzLgojCiMgT3JpZ2luYWxseSB3ZSBoYWQgbGlrZSB1bml4d2FyZS0qLCB1bml4d2FyZS0qLXBlbnRpdW0sIHVuaXh3YXJlLSotcDYsIGV0Yy4KIyBOb3cgd2Ugb25seSBoYXZlIGJsZW5kZWQgdW5peHdhcmUtKiBhcyBpdCdzIHRoZSBvbmx5IG9uZSB1c2VkIGJ5IC4vY29uZmlnLgojIElmIHlvdSB3YW50IHRvIG9wdGltaXplIGZvciBwYXJ0aWN1bGFyIG1pY3JvYXJjaGl0ZWN0dXJlLCBieXBhc3MgLi9jb25maWcKIyBhbmQgJy4vQ29uZmlndXJlIHVuaXh3YXJlLTcgLUtwZW50aXVtX3Bybycgb3Igd2hhdGV2ZXIgYXBwcm9wcmlhdGUuCiMgTm90ZSB0aGF0IG5vdCBhbGwgdGFyZ2V0cyBpbmNsdWRlIGFzc2VtYmxlciBzdXBwb3J0LiBNb3N0bHkgYmVjYXVzZSBvZgojIGxhY2sgb2YgbW90aXZhdGlvbiB0byBzdXBwb3J0IG91dC1vZi1kYXRlIHBsYXRmb3JtcyB3aXRoIG91dC1vZi1kYXRlCiMgY29tcGlsZXIgZHJpdmVycyBhbmQgYXNzZW1ibGVycy4gVGltIFJpY2UgPHRpbUBtdWx0aXRhbGVudHMubmV0PiBoYXMKIyBwYXRpZW50bHkgYXNzaXN0ZWQgdG8gZGVidWcgbW9zdCBvZiBpdC4KIwojIFVuaXhXYXJlIDIuMHggZmFpbHMgZGVzdGVzdCB3aXRoIC1PLgoidW5peHdhcmUtMi4wIiwiY2M6LURGSUxJT19IIC1ETk9fU1RSSU5HU19IOjotS3RocmVhZDo6LWxzb2NrZXQgLWxuc2wgLWxyZXNvbHYgLWx4OiR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfTo6OiIsCiJ1bml4d2FyZS0yLjEiLCJjYzotTyAtREZJTElPX0g6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbCAtbHJlc29sdiAtbHg6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9Ojo6IiwKInVuaXh3YXJlLTciLCJjYzotTyAtREZJTElPX0ggLUthbGxvY2E6Oi1LdGhyZWFkOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggJHt4ODZfZ2NjX2Rlc306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyNS1zaGFyZWQ6LUtwaWM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKInVuaXh3YXJlLTctZ2NjIiwiZ2NjOi1ETF9FTkRJQU4gLURGSUxJT19IIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbWFyY2g9cGVudGl1bSAtV2FsbDo6LURfUkVFTlRSQU5UOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246Z251LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAojIFNDTyA1IC0gQmVuIExhdXJpZSA8YmVuQGFsZ3JvdXAuY28udWs+IHNheXMgdGhlIC1PIGJyZWFrcyB0aGUgU0NPIGNjLgoic2NvNS1jYyIsICAiY2M6LWJlbGY6Oih1bmtub3duKTo6LWxzb2NrZXQgLWxuc2w6JHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOnN2cjMtc2hhcmVkOi1LcGljOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCiJzY281LWdjYyIsICAiZ2NjOi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcjo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246c3ZyMy1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKCiMjIyMgSUJNJ3MgQUlYLgoiYWl4My1jYyIsICAiY2M6LU8gLURCX0VORElBTiAtcW1heG1lbT0xNjM4NDo6KHVua25vd24pOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6OjoiLAoiYWl4LWdjYyIsICAiZ2NjOi1PIC1EQl9FTkRJQU46Oi1wdGhyZWFkOkFJWDo6Qk5fTExPTkcgUkM0X0NIQVI6JHtwcGMzMl9hc219OmFpeDMyOmRsZmNuOmFpeC1zaGFyZWQ6Oi1zaGFyZWQgLVdsLC1HOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjotWDMyIiwKImFpeDY0LWdjYyIsImdjYzotbWFpeDY0IC1PIC1EQl9FTkRJQU46Oi1wdGhyZWFkOkFJWDo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUjoke3BwYzY0X2FzbX06YWl4NjQ6ZGxmY246YWl4LXNoYXJlZDo6LW1haXg2NCAtc2hhcmVkIC1XbCwtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVg2NCIsCiMgQmVsb3cgdGFyZ2V0cyBhc3N1bWUgQUlYIDUuIElkZWEgaXMgdG8gZWZmZWN0aXZlbHkgZGlzcmVnYXJkICRPQkpFQ1RfTU9ERQojIGF0IGJ1aWxkIHRpbWUuICRPQkpFQ1RfTU9ERSBpcyByZXNwZWN0ZWQgYXQgLi9jb25maWcgc3RhZ2UhCiJhaXgtY2MiLCAgICJjYzotcTMyIC1PIC1EQl9FTkRJQU4gLXFtYXhtZW09MTYzODQgLXFybyAtcXJvY29uc3Q6Oi1xdGhyZWFkZWQ6QUlYOjpCTl9MTE9ORyBSQzRfQ0hBUjoke3BwYzMyX2FzbX06YWl4MzI6ZGxmY246YWl4LXNoYXJlZDo6LXEzMiAtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggMzIiLAoiYWl4NjQtY2MiLCAiY2M6LXE2NCAtTyAtREJfRU5ESUFOIC1xbWF4bWVtPTE2Mzg0IC1xcm8gLXFyb2NvbnN0OjotcXRocmVhZGVkOkFJWDo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUjoke3BwYzY0X2FzbX06YWl4NjQ6ZGxmY246YWl4LXNoYXJlZDo6LXE2NCAtRzouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6LVggNjQiLAoKIwojIENyYXkgVDkwIGFuZCBzaW1pbGFyIChTRFNDKQojIEl0J3MgQmlnLWVuZGlhbiwgYnV0IHRoZSBhbGdvcml0aG1zIHdvcmsgcHJvcGVybHkgd2hlbiBCX0VORElBTiBpcyBOT1QKIyBkZWZpbmVkLiAgVGhlIFQ5MCBpbnRzIGFuZCBsb25ncyBhcmUgOCBieXRlcyBsb25nLCBhbmQgYXBwYXJlbnRseSB0aGUKIyBCX0VORElBTiBjb2RlIGFzc3VtZXMgNCBieXRlIGludHMuICBGb3J0dW5hdGVseSwgdGhlIG5vbi1CX0VORElBTiBhbmQKIyBub24gTF9FTkRJQU4gY29kZSBhbGlnbnMgdGhlIGJ5dGVzIGluIGVhY2ggd29yZCBjb3JyZWN0bHkuCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgaXMgdG8gYXZvaWQgdHdvIGZhdGFsIGNvbXBpbGVyIGVycm9yczoKIydUYWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBiaXQgZmllbGQgaXMgbm90IGFsbG93ZWQuICcKIydBbiBleHByZXNzaW9uIHdpdGggYml0IGZpZWxkIGV4aXN0cyBhcyB0aGUgb3BlcmFuZCBvZiAic2l6ZW9mIiAnCiMgKHdyaXR0ZW4gYnkgV2F5bmUgU2Nocm9lZGVyIDxzY2hyb2VkZUBTRFNDLkVEVT4pCiMKIyBqOTAgaXMgY29uc2lkZXJlZCB0aGUgYmFzZSBtYWNoaW5lIHR5cGUgZm9yIHVuaWNvcyBtYWNoaW5lcywKIyBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgbm93IGNhbGxlZCAiY3JheS1qOTAiIC4uLgoiY3JheS1qOTAiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQ6OjoiLAoKIwojIENyYXkgVDNFIChSZXNlYXJjaCBDZW50ZXIgSnVlbGljaCwgYmVja21hbkBhY2wubGFubC5nb3YpCiMKIyBUaGUgQklUX0ZJRUxEX0xJTUlUUyBkZWZpbmUgd2FzIHdyaXR0ZW4gZm9yIHRoZSBDOTAgKGl0IHNlZW1zKS4gIEkgYWRkZWQKIyBhbm90aGVyIHVzZS4gIEJhc2ljYWxseSwgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgVDNFIHVzZXMgc29tZSBiaXQgZmllbGRzCiMgZm9yIHNvbWUgc3RfYWRkciBzdHVmZiwgYW5kIHRoZW4gc2l6ZW9mIGFuZCBhZGRyZXNzLW9mIGZhaWxzCiMgSSBjb3VsZCBub3QgdXNlIHRoZSBhbXMvYWxwaGEubyBvcHRpb24gYmVjYXVzZSB0aGUgQ3JheSBhc3NlbWJsZXIsICdjYW0nCiMgZGlkIG5vdCBsaWtlIGl0LgoiY3JheS10M2UiLCAiY2M6IC1EQklUX0ZJRUxEX0xJTUlUUyAtRFRFUk1JT1M6Oih1bmtub3duKTpDUkFZOjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UOjo6IiwKCiMgREdVWCwgODgxMDAuCiJkZ3V4LVIzLWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6OjpSQzRfSU5ERVggREVTX1VOUk9MTDo6OiIsCiJkZ3V4LVI0LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyOjoodW5rbm93bik6Oi1sbnNsIC1sc29ja2V0OlJDNF9JTkRFWCBERVNfVU5ST0xMOjo6IiwKImRndXgtUjQteDg2LWdjYyIsCSJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oih1bmtub3duKTo6LWxuc2wgLWxzb2NrZXQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219IiwKCiMgU2luaXgvUmVsaWFudFVOSVggUk00MDAKIyBOT1RFOiBUaGUgQ0RTKysgQ29tcGlsZXIgdXAgdG8gVjIuMEJzb21ldGhpbmcgaGFzIHRoZSBJUklYX0NDX0JVRyBvcHRpbWl6ZXIgcHJvYmxlbS4gQmV0dGVyIHVzZSAtZyAgKi8KIlJlbGlhbnRVTklYIiwiY2M6LUtQSUMgLWcgLURURVJNSU9TIC1EQl9FTkRJQU46Oi1LdGhyZWFkOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpCTl9MTE9ORyBERVNfUFRSIERFU19SSVNDMiBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246cmVsaWFudHVuaXgtc2hhcmVkOjo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAoiU0lOSVgiLCJjYzotTzo6KHVua25vd24pOlNOSTotbHNvY2tldCAtbG5zbCAtbGMgLUwvdXNyL3VjYmxpYiAtbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoiU0lOSVgtTiIsIi91c3IvdWNiL2NjOi1PMiAtbWlzYWxpZ25lZDo6KHVua25vd24pOjotbHVjYjpSQzRfSU5ERVggUkM0X0NIQVI6OjoiLAoKIyBTSUVNRU5TIEJTMjAwMC9PU0Q6IGFuIEVCQ0RJQy1iYXNlZCBtYWluZnJhbWUKIkJTMjAwMC1PU0QiLCJjODk6LU8gLVhMTE1MIC1YTExNSyAtWEwgLURCX0VORElBTiAtRFRFUk1JT1MgLURDSEFSU0VUX0VCQ0RJQzo6KHVua25vd24pOjotbHNvY2tldCAtbG5zbDpUSElSVFlfVFdPX0JJVCBERVNfUFRSIERFU19VTlJPTEwgTUQyX0NIQVIgUkM0X0lOREVYIFJDNF9DSEFSIEJGX1BUUjo6OiIsCgojIE9TLzM5MCBVbml4IGFuIEVCQ0RJQy1iYXNlZCBVbml4IHN5c3RlbSBvbiBJQk0gbWFpbmZyYW1lCiMgWW91IG5lZWQgdG8gY29tcGlsZSB1c2luZyB0aGUgYzg5LnNoIHdyYXBwZXIgaW4gdGhlIHRvb2xzIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUKIyBJQk0gY29tcGlsZXIgZG9lcyBub3QgbGlrZSB0aGUgLUwgc3dpdGNoIGFmdGVyIGFueSBvYmplY3QgbW9kdWxlcy4KIwoiT1MzOTAtVW5peCIsImM4OS5zaDotTyAtREJfRU5ESUFOIC1EQ0hBUlNFVF9FQkNESUMgLUROT19TWVNfUEFSQU1fSCAgLURfQUxMX1NPVVJDRTo6KHVua25vd24pOjo6VEhJUlRZX1RXT19CSVQgREVTX1BUUiBERVNfVU5ST0xMIE1EMl9DSEFSIFJDNF9JTkRFWCBSQzRfQ0hBUiBCRl9QVFI6OjoiLAoKIyBWaXN1YWwgQyB0YXJnZXRzCiMKIyBXaW42NCB0YXJnZXRzLCBXSU42NEkgZGVub3RlcyBJQS02NCBhbmQgV0lONjRBIC0gQU1ENjQKIlZDLVdJTjY0SSIsImNsOi1XMyAtR3MwIC1HeSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lONjRJOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOmlhNjRjcHVpZC5vOmlhNjQubyBpYTY0LW1vbnQubzo6YWVzX2NvcmUubyBhZXNfY2JjLm8gYWVzLWlhNjQubzo6bWQ1LWlhNjQubzpzaGExLWlhNjQubyBzaGEyNTYtaWE2NC5vIHNoYTUxMi1pYTY0Lm86Ojo6Ojo6Z2hhc2gtaWE2NC5vOmlhczp3aW4zMiIsCiJWQy1XSU42NEEiLCJjbDotVzMgLUdzMCAtR3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjp4ODZfNjRjcHVpZC5vOmJuX2FzbS5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubyBhZXNuaS14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubzpnaGFzaC14ODZfNjQubzphdXRvOndpbjMyIiwKImRlYnVnLVZDLVdJTjY0SSIsImNsOi1XMyAtR3MwIC1HeSAtWmkgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4gLURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTo6OldJTjY0STo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZBUl9BU19GTjppYTY0Y3B1aWQubzppYTY0Lm86OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2LWlhNjQubyBzaGE1MTItaWE2NC5vOjo6Ojo6OmdoYXNoLWlhNjQubzppYXM6d2luMzIiLAoiZGVidWctVkMtV0lONjRBIiwiY2w6LVczIC1HczAgLUd5IC1aaSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EVU5JQ09ERSAtRF9VTklDT0RFIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lONjRBOjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOng4Nl82NGNwdWlkLm86Ym5fYXNtLm8geDg2XzY0LW1vbnQubzo6YWVzLXg4Nl82NC5vOjptZDUteDg2XzY0Lm86c2hhMS14ODZfNjQubyBzaGEyNTYteDg2XzY0Lm8gc2hhNTEyLXg4Nl82NC5vOjpyYzQteDg2XzY0Lm86Ojp3cC14ODZfNjQubzpjbWxsLXg4Nl82NC5vIGNtbGxfbWlzYy5vOmdoYXNoLXg4Nl82NC5vOmF1dG86d2luMzIiLAojIHg4NiBXaW4zMiB0YXJnZXQgZGVmYXVsdHMgdG8gQU5TSSBBUEksIGlmIHlvdSB3YW50IFVOSUNPREUsIGNvbXBsZW1lbnQKIyAncGVybCBDb25maWd1cmUgVkMtV0lOMzInIHdpdGggJy1EVU5JQ09ERSAtRF9VTklDT0RFJwoiVkMtV0lOMzIiLCJjbDotVzMgLVdYIC1HczAgLUdGIC1HeSAtbm9sb2dvIC1ET1BFTlNTTF9TWVNOQU1FX1dJTjMyIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRExfRU5ESUFOIC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOjo6V0lOMzI6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OndpbjMybjp3aW4zMiIsCiMgVW5pZmllZCBDRSB0YXJnZXQKImRlYnVnLVZDLVdJTjMyIiwiY2w6LVczIC1XWCAtR3MwIC1HRiAtR3kgLVppIC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU4zMjo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06d2luMzJuOndpbjMyIiwKIlZDLUNFIiwiY2w6Ojo6V0lOQ0U6OkJOX0xMT05HIFJDNF9JTkRFWCBFWFBPUlRfVkFSX0FTX0ZOICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoKIyBCb3JsYW5kIEMrKyA0LjUKIkJDLTMyIiwiYmNjMzI6Ojo6V0lOMzI6OkJOX0xMT05HIERFU19QVFIgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk46JHtub19hc219OndpbjMyIiwKCiMgTWluR1cKIm1pbmd3IiwgImdjYzotbW5vLWN5Z3dpbiAtRExfRU5ESUFOIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzMgLW1hcmNoPWk0ODYgLVdhbGw6Oi1EX01UOk1JTkdXMzI6LWx3czJfMzIgLWxnZGkzMiAtbGNyeXB0MzI6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9IEVYUE9SVF9WQVJfQVNfRk46JHt4ODZfYXNtfTpjb2ZmOndpbjMyOmN5Z3dpbi1zaGFyZWQ6LURfV0lORExMIC1ET1BFTlNTTF9VU0VfQVBQTElOSzotbW5vLWN5Z3dpbjouZGxsLmEiLAojIEFzIGZvciBPUEVOU1NMX1VTRV9BUFBMSU5LLiBBcHBsaW5rIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSAuZGxsCiMgY29tcGlsZWQgd2l0aCBvbmUgY29tcGlsZXIgd2l0aCBhcHBsaWNhdGlvbiBjb21waWxlZCB3aXRoIGFub3RoZXIKIyBjb21waWxlci4gSXQncyBwb3NzaWJsZSB0byBlbmdhZ2UgQXBwbGluayBzdXBwb3J0IGluIG1pbmd3NjQgYnVpbGQsCiMgYnV0IGl0J3Mgbm90IGRvbmUsIGJlY2F1c2UgdGlsbCBtaW5ndzY0IHN1cHBvcnRzIHN0cnVjdHVyZWQgZXhjZXB0aW9uCiMgaGFuZGxpbmcsIG9uZSBjYW4ndCBzZXJpb3VzbHkgY29uc2lkZXIgaXRzIGJpbmFyaWVzIGZvciB1c2luZyB3aXRoCiMgbm9uLW1pbmd3NjQgcnVuLXRpbWUgZW52aXJvbm1lbnQuIEFuZCBhcyBtaW5ndzY0IGlzIGFsd2F5cyBjb25zaXN0ZW50CiMgd2l0aCBpdHNlbGYsIEFwcGxpbmsgaXMgbmV2ZXIgZW5nYWdlZCBhbmQgY2FuIGFzIHdlbGwgYmUgb21pdHRlZC4KIm1pbmd3NjQiLCAiZ2NjOi1tbm8tY3lnd2luIC1ETF9FTkRJQU4gLU8zIC1XYWxsIC1EV0lOMzJfTEVBTl9BTkRfTUVBTiAtRFVOSUNPREUgLURfVU5JQ09ERTo6LURfTVQ6TUlOR1c2NDotbHdzMl8zMiAtbGdkaTMyIC1sY3J5cHQzMjpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTktfTEwgREVTX0lOVCBFWFBPUlRfVkFSX0FTX0ZOOiR7eDg2XzY0X2FzbX06bWluZ3c2NDp3aW4zMjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotbW5vLWN5Z3dpbjouZGxsLmEiLAoKIyBVV0lOIAoiVVdJTiIsICJjYzotRFRFUk1JT1MgLURMX0VORElBTiAtTyAtV2FsbDo6OlVXSU46OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke25vX2FzbX06d2luMzIiLAoKIyBDeWd3aW4KIkN5Z3dpbi1wcmUxLjMiLCAiZ2NjOi1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMyAtbTQ4NiAtV2FsbDo6KHVua25vd24pOkNZR1dJTjMyOjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OndpbjMyIiwKIkN5Z3dpbiIsICJnY2M6LURURVJNSU9TIC1ETF9FTkRJQU4gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLU8zIC1tYXJjaD1pNDg2IC1XYWxsOjo6Q1lHV0lOMzI6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmNvZmY6ZGxmY246Y3lnd2luLXNoYXJlZDotRF9XSU5ETEw6LXNoYXJlZDouZGxsLmEiLAoiZGVidWctQ3lnd2luIiwgImdjYzotRFRFUk1JT1MgLURMX0VORElBTiAtbWFyY2g9aTQ4NiAtV2FsbCAtREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtREJOX0NUWF9ERUJVRyAtRENSWVBUT19NREVCVUcgLURPUEVOU1NMX05PX0FTTSAtZyAtV2Zvcm1hdCAtV3NoYWRvdyAtV21pc3NpbmctcHJvdG90eXBlcyAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XZXJyb3I6OjpDWUdXSU4zMjo6OiR7bm9fYXNtfTpkbGZjbjpjeWd3aW4tc2hhcmVkOi1EX1dJTkRMTDotc2hhcmVkOi5kbGwuYSIsCgojIE5ldFdhcmUgZnJvbSBEYXZpZCBXYXJkIChkc3dhcmRAbm92ZWxsLmNvbSkKIyByZXF1aXJlcyBlaXRoZXIgTWV0cm9XZXJrcyBOTE0gZGV2ZWxvcG1lbnQgdG9vbHMsIG9yIGdjYyAvIG5sbWNvbnYKIyBOZXRXYXJlIGRlZmF1bHRzIHNvY2tldCBiaW8gdG8gV2luU29jayBzb2NrZXRzLiBIb3dldmVyLAojIHRoZSBidWlsZHMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIEJTRCBzb2NrZXRzIGluc3RlYWQuCiMgbmV0d2FyZS1jbGliID0+IGxlZ2FjeSBDTGliIGMtcnVudGltZSBzdXBwb3J0CiJuZXR3YXJlLWNsaWIiLCAibXdjY25sbTo6Ojo6OiR7eDg2X2djY19vcHRzfTo6IiwKIm5ldHdhcmUtY2xpYi1ic2Rzb2NrIiwgIm13Y2NubG06Ojo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWNsaWItZ2NjIiwgImk1ODYtbmV0d2FyZS1nY2M6LW5vc3RkaW5jIC1JL25kay9ud3Nkay9pbmNsdWRlL25sbSAtSS9uZGsvd3MyOTVzZGsvaW5jbHVkZSAtRExfRU5ESUFOIC1ETkVUV0FSRV9DTElCIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLU8yIC1XYWxsOjo6Ojoke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWNsaWItYnNkc29jay1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL253c2RrL2luY2x1ZGUvbmxtIC1ETkVUV0FSRV9CU0RTT0NLIC1ETkVUREJfVVNFX0lOVEVSTkVUIC1ETF9FTkRJQU4gLURORVRXQVJFX0NMSUIgLURPUEVOU1NMX1NZU05BTUVfTkVUV0FSRSAtTzIgLVdhbGw6Ojo6OiR7eDg2X2djY19vcHRzfTo6IiwKIyBuZXR3YXJlLWxpYmMgPT4gTGliQy9OS1Mgc3VwcG9ydAoibmV0d2FyZS1saWJjIiwgIm13Y2NubG06Ojo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWxpYmMtYnNkc29jayIsICJtd2NjbmxtOjo6Ojo6Qk5fTExPTkcgJHt4ODZfZ2NjX29wdHN9OjoiLAoibmV0d2FyZS1saWJjLWdjYyIsICJpNTg2LW5ldHdhcmUtZ2NjOi1ub3N0ZGluYyAtSS9uZGsvbGliYy9pbmNsdWRlIC1JL25kay9saWJjL2luY2x1ZGUvd2luc29jayAtRExfRU5ESUFOIC1ETkVUV0FSRV9MSUJDIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLURURVJNSU8gLU8yIC1XYWxsOjo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCiJuZXR3YXJlLWxpYmMtYnNkc29jay1nY2MiLCAiaTU4Ni1uZXR3YXJlLWdjYzotbm9zdGRpbmMgLUkvbmRrL2xpYmMvaW5jbHVkZSAtRE5FVFdBUkVfQlNEU09DSyAtRExfRU5ESUFOIC1ETkVUV0FSRV9MSUJDIC1ET1BFTlNTTF9TWVNOQU1FX05FVFdBUkUgLURURVJNSU8gLU8yIC1XYWxsOjo6OjpCTl9MTE9ORyAke3g4Nl9nY2Nfb3B0c306OiIsCgojIERKR1BQCiJESkdQUCIsICJnY2M6LUkvZGV2L2Vudi9XQVRUX1JPT1QvaW5jIC1EVEVSTUlPUyAtRExfRU5ESUFOIC1mb21pdC1mcmFtZS1wb2ludGVyIC1PMiAtV2FsbDo6Ok1TRE9TOi1ML2Rldi9lbnYvV0FUVF9ST09UL2xpYiAtbHdhdHQ6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQ6IiwKCiMgVWx0cml4IGZyb20gQmVybmhhcmQgU2ltb24gPHNpbW9uQHppZC50dXdpZW4uYWMuYXQ+CiJ1bHRyaXgtY2MiLCJjYzotc3RkMSAtTyAtT2xpbWl0IDI1MDAgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCiJ1bHRyaXgtZ2NjIiwiZ2NjOi1PMyAtRExfRU5ESUFOOjoodW5rbm93bik6OjpCTl9MTE9ORzo6OjoiLAojIEsmUiBDIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQ7IHlvdSBuZWVkIGdjYyBvbiBvbGQgVWx0cml4IGluc3RhbGxhdGlvbnMKIyMidWx0cml4IiwiY2M6LU8yIC1ETk9QUk9UTyAtRE5PQ09OU1QgLURMX0VORElBTjo6KHVua25vd24pOjo6Ojo6OiIsCgojIyMjIyBNYWNPUyBYIChhLmsuYS4gUmhhcHNvZHkgb3IgRGFyd2luKSBzZXR1cAoicmhhcHNvZHktcHBjLWNjIiwiY2M6LU8zIC1EQl9FTkRJQU46Oih1bmtub3duKTpNQUNPU1hfUkhBUFNPRFk6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06OiIsCiJkYXJ3aW4tcHBjLWNjIiwiY2M6LWFyY2ggcHBjIC1PMyAtREJfRU5ESUFOIC1XYSwtZm9yY2VfY3B1c3VidHlwZV9BTEw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzMyX2FzbX06b3N4MzI6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGMgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAoiZGFyd2luNjQtcHBjLWNjIiwiY2M6LWFyY2ggcHBjNjQgLU8zIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjNjRfYXNtfTpvc3g2NDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHBwYzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0lOVCBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHt4ODZfYXNtfTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtZzMgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0lOVCBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHt4ODZfYXNtfTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRhcndpbjY0LXg4Nl82NC1jYyIsImNjOi1hcmNoIHg4Nl82NCAtTzMgLURMX0VORElBTiAtV2FsbDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggeDg2XzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKImRlYnVnLWRhcndpbi1wcGMtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURCX0VORElBTiAtZyAtV2FsbCAtTzo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDOi1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKCiMjIyMjIEEvVVgKImF1eDMtZ2NjIiwiZ2NjOi1PMiAtRFRFUk1JTzo6KHVua25vd24pOkFVWDotbGJzZDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6OjoiLAoKIyMjIyMgU29ueSBORVdTLU9TIDQueAoibmV3c29zNC1nY2MiLCJnY2M6LU8gLURCX0VORElBTjo6KHVua25vd24pOk5FV1M0Oi1sbWxkIC1saWJlcnR5OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjo6OjoiLAoKIyMjIyMgR05VIEh1cmQKImh1cmQteDg2IiwgICJnY2M6LURMX0VORElBTiAtRFRFUk1JT1MgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tYXJjaD1pNDg2IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQyIsCgojIyMjIyBPUy8yIEVNWAoiT1MyLUVNWCIsICJnY2M6Ojo6Ojo6OiIsCgojIyMjIyBWeFdvcmtzIGZvciB2YXJpb3VzIHRhcmdldHMKInZ4d29ya3MtcHBjNDA1IiwiY2NwcGM6LWcgLW1zb2Z0LWZsb2F0IC1tbG9uZ2NhbGwgLURDUFU9UFBDNDA1IC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzc1MCIsImNjcHBjOi1hbnNpIC1ub3N0ZGluYyAtRFBQQzc1MCAtRF9SRUVOVFJBTlQgLWZ2b2xhdGlsZSAtZm5vLWJ1aWx0aW4gLWZuby1mb3Itc2NvcGUgLWZzaWduZWQtY2hhciAtV2FsbCAtbXNvZnQtZmxvYXQgLW1sb25nY2FsbCAtRENQVT1QUEM2MDQgLUlcJChXSU5EX0JBU0UpL3RhcmdldC9oIFwkKERFQlVHX0ZMQUcpOjo6VlhXT1JLUzotcjo6Ojo6IiwKInZ4d29ya3MtcHBjNzUwLWRlYnVnIiwiY2NwcGM6LWFuc2kgLW5vc3RkaW5jIC1EUFBDNzUwIC1EX1JFRU5UUkFOVCAtZnZvbGF0aWxlIC1mbm8tYnVpbHRpbiAtZm5vLWZvci1zY29wZSAtZnNpZ25lZC1jaGFyIC1XYWxsIC1tc29mdC1mbG9hdCAtbWxvbmdjYWxsIC1EQ1BVPVBQQzYwNCAtSVwkKFdJTkRfQkFTRSkvdGFyZ2V0L2ggLURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURCTl9DVFhfREVCVUcgLURDUllQVE9fTURFQlVHIC1EUEVEQU5USUMgLURERUJVR19TQUZFU1RBQ0sgLURERUJVRyAtZzo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLXBwYzg2MCIsImNjcHBjOi1ub3N0ZGluYyAtbXNvZnQtZmxvYXQgLURDUFU9UFBDODYwIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6Ojo6OiIsCiJ2eHdvcmtzLW1pcHNsZSIsImNjbWlwczotQlwkKFdJTkRfQkFTRSkvaG9zdC9cJChXSU5EX0hPU1RfVFlQRSkvbGliL2djYy1saWIvIC1ETF9FTkRJQU4gLUVMIC1XbCwtRUwgLW1pcHMyIC1tbm8tYnJhbmNoLWxpa2VseSAtRyAwIC1mbm8tYnVpbHRpbiAtbXNvZnQtZmxvYXQgLURDUFU9TUlQUzMyIC1ETUlQU0VMIC1ETk9fU1RSSU5HU19IIC1JXCQoV0lORF9CQVNFKS90YXJnZXQvaDo6OlZYV09SS1M6LXI6OiR7bm9fYXNtfTo6Ojo6OnJhbmxpYm1pcHM6IiwKCiMjIyMjIENvbXBhcSBOb24tU3RvcCBLZXJuZWwgKFRhbmRlbSkKInRhbmRlbS1jODkiLCJjODk6LVd3IC1EX19UQU5ERU0gLURfWE9QRU5fU09VUkNFIC1EX1hPUEVOX1NPVVJDRV9FWFRFTkRFRD0xIC1EX1RBTkRFTV9TT1VSQ0UgLURCX0VORElBTjo6KHVua25vd24pOjo6VEhJUlRZX1RXT19CSVQ6OjoiLAoKIyB1Q2xpbnV4CiJ1Q2xpbnV4LWRpc3QiLCIkRU5WeydDQyd9OlwkKENGTEFHUyk6Oi1EX1JFRU5UUkFOVDo6XCQoTERGTEFHUykgXCQoTERMSUJTKTpCTl9MTE9ORzoke25vX2FzbX06JEVOVnsnTElCU1NMX2RsZmNuJ306bGludXgtc2hhcmVkOi1mUElDOi1zaGFyZWQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6JEVOVnsnUkFOTElCJ306OiIsCiJ1Q2xpbnV4LWRpc3Q2NCIsIiRFTlZ7J0NDJ306XCQoQ0ZMQUdTKTo6LURfUkVFTlRSQU5UOjpcJChMREZMQUdTKSBcJChMRExJQlMpOlNJWFRZX0ZPVVJfQklUX0xPTkc6JHtub19hc219OiRFTlZ7J0xJQlNTTF9kbGZjbid9OmxpbnV4LXNoYXJlZDotZlBJQzotc2hhcmVkOi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOiRFTlZ7J1JBTkxJQid9OjoiLAoKKTsKCm15IEBNSzFNRl9CdWlsZHM9cXcoVkMtV0lONjRJIFZDLVdJTjY0QQoJCSAgICBkZWJ1Zy1WQy1XSU42NEkgZGVidWctVkMtV0lONjRBCgkJICAgIFZDLU5UIFZDLUNFIFZDLVdJTjMyIGRlYnVnLVZDLVdJTjMyCgkJICAgIEJDLTMyIAoJCSAgICBuZXR3YXJlLWNsaWIgbmV0d2FyZS1jbGliLWJzZHNvY2sKCQkgICAgbmV0d2FyZS1saWJjIG5ldHdhcmUtbGliYy1ic2Rzb2NrKTsKCm15ICRpZHggPSAwOwpteSAkaWR4X2NjID0gJGlkeCsrOwpteSAkaWR4X2NmbGFncyA9ICRpZHgrKzsKbXkgJGlkeF91bmlzdGQgPSAkaWR4Kys7Cm15ICRpZHhfdGhyZWFkX2NmbGFnID0gJGlkeCsrOwpteSAkaWR4X3N5c19pZCA9ICRpZHgrKzsKbXkgJGlkeF9sZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfYm5fb3BzID0gJGlkeCsrOwpteSAkaWR4X2NwdWlkX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9ibl9vYmogPSAkaWR4Kys7Cm15ICRpZHhfZGVzX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9hZXNfb2JqID0gJGlkeCsrOwpteSAkaWR4X2JmX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tZDVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3NoYTFfb2JqID0gJGlkeCsrOwpteSAkaWR4X2Nhc3Rfb2JqID0gJGlkeCsrOwpteSAkaWR4X3JjNF9vYmogPSAkaWR4Kys7Cm15ICRpZHhfcm1kMTYwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9yYzVfb2JqID0gJGlkeCsrOwpteSAkaWR4X3dwX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9jbWxsX29iaiA9ICRpZHgrKzsKbXkgJGlkeF9tb2Rlc19vYmogPSAkaWR4Kys7Cm15ICRpZHhfcGVybGFzbV9zY2hlbWUgPSAkaWR4Kys7Cm15ICRpZHhfZHNvX3NjaGVtZSA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfdGFyZ2V0ID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9jZmxhZyA9ICRpZHgrKzsKbXkgJGlkeF9zaGFyZWRfbGRmbGFnID0gJGlkeCsrOwpteSAkaWR4X3NoYXJlZF9leHRlbnNpb24gPSAkaWR4Kys7Cm15ICRpZHhfcmFubGliID0gJGlkeCsrOwpteSAkaWR4X2FyZmxhZ3MgPSAkaWR4Kys7Cm15ICRpZHhfbXVsdGlsaWIgPSAkaWR4Kys7CgpteSAkcHJlZml4PSIiOwpteSAkbGliZGlyPSIiOwpteSAkb3BlbnNzbGRpcj0iIjsKbXkgJGV4ZV9leHQ9IiI7Cm15ICRpbnN0YWxsX3ByZWZpeD0gIiRFTlZ7J0lOU1RBTExfUFJFRklYJ30iOwpteSAkY3Jvc3NfY29tcGlsZV9wcmVmaXg9IiI7Cm15ICRmaXBzbGliZGlyPSIvdXNyL2xvY2FsL3NzbC9maXBzLTIuMC9saWIvIjsKbXkgJG5vZmlwc2NhbmlzdGVyY2hlY2s9MDsKbXkgJGZpcHNkc289MDsKbXkgJGZpcHNjYW5pc3RlcmludGVybmFsPSJuIjsKbXkgJGZpcHNjYW5pc3Rlcm9ubHkgPSAwOwpteSAkYmFzZWFkZHI9IjB4RkIwMDAwMCI7Cm15ICRub190aHJlYWRzPTA7Cm15ICR0aHJlYWRzPTA7Cm15ICRub19zaGFyZWQ9MDsgIyBidXQgIm5vLXNoYXJlZCIgaXMgZGVmYXVsdApteSAkemxpYj0xOyAgICAgICMgYnV0ICJuby16bGliIiBpcyBkZWZhdWx0Cm15ICRub19rcmI1PTA7ICAgIyBidXQgIm5vLWtyYjUiIGlzIGltcGxpZWQgdW5sZXNzICItLXdpdGgta3JiNS0uLi4iIGlzIHVzZWQKbXkgJG5vX3JmYzM3Nzk9MTsgIyBidXQgIm5vLXJmYzM3NzkiIGlzIGRlZmF1bHQKbXkgJG5vX2FzbT0wOwpteSAkbm9fZHNvPTA7Cm15ICRub19nbXA9MDsKbXkgQHNraXA9KCk7Cm15ICRNYWtlZmlsZT0iTWFrZWZpbGUiOwpteSAkZGVzX2xvY2w9ImNyeXB0by9kZXMvZGVzX2xvY2wuaCI7Cm15ICRkZXMJPSJjcnlwdG8vZGVzL2Rlcy5oIjsKbXkgJGJuCT0iY3J5cHRvL2JuL2JuLmgiOwpteSAkbWQyCT0iY3J5cHRvL21kMi9tZDIuaCI7Cm15ICRyYzQJPSJjcnlwdG8vcmM0L3JjNC5oIjsKbXkgJHJjNF9sb2NsPSJjcnlwdG8vcmM0L3JjNF9sb2NsLmgiOwpteSAkaWRlYQk9ImNyeXB0by9pZGVhL2lkZWEuaCI7Cm15ICRyYzIJPSJjcnlwdG8vcmMyL3JjMi5oIjsKbXkgJGJmCT0iY3J5cHRvL2JmL2JmX2xvY2wuaCI7Cm15ICRibl9hc20JPSJibl9hc20ubyI7Cm15ICRkZXNfZW5jPSJkZXNfZW5jLm8gZmNyeXB0X2IubyI7Cm15ICRhZXNfZW5jPSJhZXNfY29yZS5vIGFlc19jYmMubyI7Cm15ICRiZl9lbmMJPSJiZl9lbmMubyI7Cm15ICRjYXN0X2VuYz0iY19lbmMubyI7Cm15ICRyYzRfZW5jPSJyYzRfZW5jLm8gcmM0X3NrZXkubyI7Cm15ICRyYzVfZW5jPSJyYzVfZW5jLm8iOwpteSAkbWQ1X29iaj0iIjsKbXkgJHNoYTFfb2JqPSIiOwpteSAkcm1kMTYwX29iaj0iIjsKbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbGxfY2JjLm8iOwpteSAkcHJvY2Vzc29yPSIiOwpteSAkZGVmYXVsdF9yYW5saWI7Cm15ICRwZXJsOwpteSAkZmlwcz0wOwoKIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKCm15ICVkaXNhYmxlZCA9ICggIyAid2hhdCIgICAgICAgICA9PiAiY29tbWVudCIgW29yIHNwZWNpYWwga2V5d29yZCAiZXhwZXJpbWVudGFsIl0KCQkgImVjLW5pc3RwMjI0LTY0LWdjYy0xMjgiID0+ICJkZWZhdWx0IiwKCQkgImdtcCIJCSAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJqcGFrZSIgICAgICAgICAgPT4gImV4cGVyaW1lbnRhbCIsCiAgICAgICAgICAgICAgICAgIm1kMiIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgInJjNSIgICAgICAgICAgICA9PiAiZGVmYXVsdCIsCgkJICJyZmMzNzc5IgkgID0+ICJkZWZhdWx0IiwKICAgICAgICAgICAgICAgICAic2hhcmVkIiAgICAgICAgID0+ICJkZWZhdWx0IiwKCQkgInN0b3JlIgkgID0+ICJleHBlcmltZW50YWwiLAogICAgICAgICAgICAgICAgICJ6bGliIiAgICAgICAgICAgPT4gImRlZmF1bHQiLAogICAgICAgICAgICAgICAgICJ6bGliLWR5bmFtaWMiICAgPT4gImRlZmF1bHQiCiAgICAgICAgICAgICAgICk7Cm15IEBleHBlcmltZW50YWwgPSAoKTsKCiMgSWYgc3NsIGRpcmVjdG9yeSBtaXNzaW5nIGFzc3VtZSB0cnVuY2F0ZWQgRklQUyB0YXJiYWxsCmlmICghLWQgInNzbCIpCgl7CglwcmludCBTVERFUlIgIkF1dG8gQ29uZmlndXJpbmcgZmlwc29ubHlcbiI7CgkkZmlwcyA9IDE7Cgkkbm9maXBzY2FuaXN0ZXJjaGVjayA9IDE7CgkkZmlwc2xpYmRpcj0iIjsKCSRmaXBzY2FuaXN0ZXJpbnRlcm5hbD0ieSI7CgkkZmlwc2NhbmlzdGVyb25seSA9IDI7CglpZiAoISAtZiAiY3J5cHRvL2JuL2JuX2dmMm0uYyIgKQoJCXsKCQkkZGlzYWJsZWR7ZWMybX0gPSAiZm9yY2VkIjsKCQl9Cgl9CgojIFRoaXMgaXMgd2hhdCAkZGVwZmxhZ3Mgd2lsbCBsb29rIGxpa2Ugd2l0aCB0aGUgYWJvdmUgZGVmYXVsdHMKIyAod2UgbmVlZCB0aGlzIHRvIHNlZSBpZiB3ZSBzaG91bGQgYWR2aXNlIHRoZSB1c2VyIHRvIHJ1biAibWFrZSBkZXBlbmQiKToKbXkgJGRlZmF1bHRfZGVwZmxhZ3MgPSAiIC1ET1BFTlNTTF9OT19HTVAgLURPUEVOU1NMX05PX0pQQUtFIC1ET1BFTlNTTF9OT19NRDIgLURPUEVOU1NMX05PX1JDNSAtRE9QRU5TU0xfTk9fUkZDMzc3OSAtRE9QRU5TU0xfTk9fU1RPUkUiOwoKIyBFeHBsaWNpdCAibm8tLi4uIiBvcHRpb25zIHdpbGwgYmUgY29sbGVjdGVkIGluICVkaXNhYmxlZCBhbG9uZyB3aXRoIHRoZSBkZWZhdWx0cy4KIyBUbyByZW1vdmUgc29tZXRoaW5nIGZyb20gJWRpc2FibGVkLCB1c2UgImVuYWJsZS1mb28iICh1bmxlc3MgaXQncyBleHBlcmltZW50YWwpLgojIEZvciBzeW1tZXRyeSwgImRpc2FibGUtZm9vIiBpcyBhIHN5bm9ueW0gZm9yICJuby1mb28iLgoKIyBGb3IgZmVhdHVyZXMgY2FsbGVkICJleHBlcmltZW50YWwiIGhlcmUsIGEgbW9yZSBleHBsaWNpdCAiZXhwZXJpbWVudGFsLWZvbyIgaXMgbmVlZGVkIHRvIGVuYWJsZS4KIyBXZSB3aWxsIGNvbGxlY3Qgc3VjaCByZXF1ZXN0cyBpbiBAZXhwZXJpbWVudGFsLgojIFRvIGF2b2lkIGFjY2lkZW50YWwgdXNlIG9mIGV4cGVyaW1lbnRhbCBmZWF0dXJlcywgYXBwbGljYXRpb25zIHdpbGwgaGF2ZSB0byB1c2UgLURPUEVOU1NMX0VYUEVSSU1FTlRBTF9GT08uCgoKbXkgJG5vX3NzZTI9MDsKCiZ1c2FnZSBpZiAoJCNBUkdWIDwgMCk7CgpteSAkZmxhZ3M7Cm15ICRkZXBmbGFnczsKbXkgJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM7Cm15ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwpteSAkb3BlbnNzbF90aHJlYWRfZGVmaW5lczsKbXkgJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cm15ICRvcGVuc3NsX290aGVyX2RlZmluZXM7Cm15ICRsaWJzOwpteSAkbGlia3JiNT0iIjsKbXkgJHRhcmdldDsKbXkgJG9wdGlvbnM7Cm15ICRzeW1saW5rOwpteSAkbWFrZV9kZXBlbmQ9MDsKbXkgJXdpdGhhcmdzPSgpOwoKbXkgQGFyZ3Zjb3B5PUBBUkdWOwpteSAkYXJndnN0cmluZz0iIjsKbXkgJGFyZ3ZfdW5wcm9jZXNzZWQ9MTsKCndoaWxlKCRhcmd2X3VucHJvY2Vzc2VkKQoJewoJJGZsYWdzPSIiOwoJJGRlcGZsYWdzPSIiOwoJJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lcz0iIjsKCSRvcGVuc3NsX3RocmVhZF9kZWZpbmVzPSIiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiI7Cgkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzPSIiOwoJJGxpYnM9IiI7CgkkdGFyZ2V0PSIiOwoJJG9wdGlvbnM9IiI7Cgkkc3ltbGluaz0xOwoKCSRhcmd2X3VucHJvY2Vzc2VkPTA7CgkkYXJndnN0cmluZz1qb2luKCcgJyxAYXJndmNvcHkpOwoKUFJPQ0VTU19BUkdTOgoJZm9yZWFjaCAoQGFyZ3Zjb3B5KQoJCXsKCQlzIC9eLW5vLS9uby0vOyAjIHNvbWUgcGVvcGxlIGp1c3QgY2FuJ3QgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zCgoJCSMgcmV3cml0ZSBzb21lIG9wdGlvbnMgaW4gImVuYWJsZS0uLi4iIGZvcm0KCQlzIC9eLT8tP3NoYXJlZCQvZW5hYmxlLXNoYXJlZC87CgkJcyAvXnRocmVhZHMkL2VuYWJsZS10aHJlYWRzLzsKCQlzIC9eemxpYiQvZW5hYmxlLXpsaWIvOwoJCXMgL156bGliLWR5bmFtaWMkL2VuYWJsZS16bGliLWR5bmFtaWMvOwoKCQlpZiAoL15uby0oLispJC8gfHwgL15kaXNhYmxlLSguKykkLykKCQkJewoJCQlpZiAoISgkZGlzYWJsZWR7JDF9IGVxICJleHBlcmltZW50YWwiKSkKCQkJCXsKCQkJCWlmICgkMSBlcSAic3NsIikKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyJzc2wyIn0gPSAib3B0aW9uKHNzbCkiOwoJCQkJCSRkaXNhYmxlZHsic3NsMyJ9ID0gIm9wdGlvbihzc2wpIjsKCQkJCQl9CgkJCQllbHNpZiAoJDEgZXEgInRscyIpCgkJCQkJewoJCQkJCSRkaXNhYmxlZHsidGxzMSJ9ID0gIm9wdGlvbih0bHMpIgoJCQkJCX0KCQkJCWVsc2UKCQkJCQl7CgkJCQkJJGRpc2FibGVkeyQxfSA9ICJvcHRpb24iOwoJCQkJCX0KCQkJCX0JCQkKCQkJfQoJCWVsc2lmICgvXmVuYWJsZS0oLispJC8gfHwgL15leHBlcmltZW50YWwtKC4rKSQvKQoJCQl7CgkJCW15ICRhbGdvID0gJDE7CgkJCWlmICgkZGlzYWJsZWR7JGFsZ299IGVxICJleHBlcmltZW50YWwiKQoJCQkJewoJCQkJZGllICJZb3UgYXJlIHJlcXVlc3RpbmcgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmU7IHBsZWFzZSBzYXkgJ2V4cGVyaW1lbnRhbC0kYWxnbycgaWYgeW91IGFyZSBzdXJlXG4iCgkJCQkJdW5sZXNzICgvXmV4cGVyaW1lbnRhbC0vKTsKCQkJCXB1c2ggQGV4cGVyaW1lbnRhbCwgJGFsZ287CgkJCQl9CgkJCWRlbGV0ZSAkZGlzYWJsZWR7JGFsZ299OwoKCQkJJHRocmVhZHMgPSAxIGlmICgkYWxnbyBlcSAidGhyZWFkcyIpOwoJCQl9CgkJZWxzaWYgKC9eLS10ZXN0LXNhbml0eSQvKQoJCQl7CgkJCWV4aXQoJnRlc3Rfc2FuaXR5KCkpOwoJCQl9CgkJZWxzaWYgKC9eLS1zdHJpY3Qtd2FybmluZ3MvKQoJCQl7CgkJCSRzdHJpY3Rfd2FybmluZ3MgPSAxOwoJCQl9CgkJZWxzaWYgKC9ecmVjb25maWd1cmUvIHx8IC9ecmVjb25mLykKCQkJewoJCQlpZiAob3BlbihJTiwiPCRNYWtlZmlsZSIpKQoJCQkJewoJCQkJd2hpbGUgKDxJTj4pCgkJCQkJewoJCQkJCWNob21wOwoJCQkJCWlmICgvXkNPTkZJR1VSRV9BUkdTPSguKikvKQoJCQkJCQl7CgkJCQkJCSRhcmd2c3RyaW5nPSQxOwoJCQkJCQlAYXJndmNvcHk9c3BsaXQoJyAnLCRhcmd2c3RyaW5nKTsKCQkJCQkJZGllICJJbmNvcnJlY3QgZGF0YSB0byByZWNvbmZpZ3VyZSwgcGxlYXNlIGRvIGEgbm9ybWFsIGNvbmZpZ3VyYXRpb25cbiIKCQkJCQkJCWlmIChncmVwKC9ecmVjb25mLyxAYXJndmNvcHkpKTsKCQkJCQkJcHJpbnQgIlJlY29uZmlndXJpbmcgd2l0aDogJGFyZ3ZzdHJpbmdcbiI7CgkJCQkJCSRhcmd2X3VucHJvY2Vzc2VkPTE7CgkJCQkJCWNsb3NlKElOKTsKCQkJCQkJbGFzdCBQUk9DRVNTX0FSR1M7CgkJCQkJCX0KCQkJCQl9CgkJCQljbG9zZShJTik7CgkJCQl9CgkJCWRpZSAiSW5zdWZmaWNpZW50IGRhdGEgdG8gcmVjb25maWd1cmUsIHBsZWFzZSBkbyBhIG5vcm1hbCBjb25maWd1cmF0aW9uXG4iOwoJCQl9CgkJZWxzaWYgKC9eMzg2JC8pCgkJCXsgJHByb2Nlc3Nvcj0zODY7IH0KCQllbHNpZiAoL15maXBzJC8pCgkJCXsKCQkJJGZpcHM9MTsKCQkgICAgICAgIH0KCQllbHNpZiAoL15yc2FyZWYkLykKCQkJewoJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KCQkJIyBUaGUgY2hlY2sgZm9yIHRoZSBvcHRpb24gaXMgdGhlcmUgc28gc2NyaXB0cyBhcmVuJ3QKCQkJIyBicm9rZW4KCQkJfQoJCWVsc2lmICgvXm5vZmlwc2NhbmlzdGVyY2hlY2skLykKCQkJewoJCQkkZmlwcyA9IDE7CgkJCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCQkJfQoJCWVsc2lmICgvXmZpcHNjYW5pc3Rlcm9ubHkkLykKCQkJewoJCQkkZmlwcyA9IDE7CgkJCSRub2ZpcHNjYW5pc3RlcmNoZWNrID0gMTsKCQkJJGZpcHNsaWJkaXI9IiI7CgkJCSRmaXBzY2FuaXN0ZXJpbnRlcm5hbD0ieSI7CgkJCSRmaXBzY2FuaXN0ZXJvbmx5ID0gMTsKCQkJfQoJCWVsc2lmICgvXmZpcHNjYW5pc3RlcmJ1aWxkJC8pCgkJCXsKCQkJJGZpcHMgPSAxOwoJCQkkbm9maXBzY2FuaXN0ZXJjaGVjayA9IDE7CgkJCSRmaXBzbGliZGlyPSIiOwoJCQkkZmlwc2NhbmlzdGVyaW50ZXJuYWw9InkiOwoJCQl9CgkJZWxzaWYgKC9eZmlwc2RzbyQvKQoJCQl7CgkJCSRmaXBzID0gMTsKCQkJJG5vZmlwc2NhbmlzdGVyY2hlY2sgPSAxOwoJCQkkZmlwc2xpYmRpcj0iIjsKCQkJJGZpcHNjYW5pc3RlcmludGVybmFsPSJ5IjsKCQkJJGZpcHNkc28gPSAxOwoJCQl9CgkJZWxzaWYgKC9eWy0rXS8pCgkJCXsKCQkJaWYgKC9eLVtsTF0oLiopJC8gb3IgL14tV2wsLykKCQkJCXsKCQkJCSRsaWJzLj0kXy4iICI7CgkJCQl9CgkJCWVsc2lmICgvXi1bXi1dLyBvciAvXlwrLykKCQkJCXsKCQkJCSRmbGFncy49JF8uIiAiOwoJCQkJfQoJCQllbHNpZiAoL14tLXByZWZpeD0oLiopJC8pCgkJCQl7CgkJCQkkcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLWxpYmRpcj0oLiopJC8pCgkJCQl7CgkJCQkkbGliZGlyPSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLW9wZW5zc2xkaXI9KC4qKSQvKQoJCQkJewoJCQkJJG9wZW5zc2xkaXI9JDE7CgkJCQl9CgkJCWVsc2lmICgvXi0taW5zdGFsbC5wcmVmaXg9KC4qKSQvKQoJCQkJewoJCQkJJGluc3RhbGxfcHJlZml4PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgta3JiNS0oZGlyfGxpYnxpbmNsdWRlfGZsYXZvcik9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJrcmI1LSIuJDF9PSQyOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtemxpYi1saWI9KC4qKSQvKQoJCQkJewoJCQkJJHdpdGhhcmdzeyJ6bGliLWxpYiJ9PSQxOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtemxpYi1pbmNsdWRlPSguKikkLykKCQkJCXsKCQkJCSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn09Ii1JJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLXdpdGgtZmlwc2xpYmRpcj0oLiopJC8pCgkJCQl7CgkJCQkkZmlwc2xpYmRpcj0iJDEvIjsKCQkJCX0KCQkJZWxzaWYgKC9eLS13aXRoLWJhc2VhZGRyPSguKikkLykKCQkJCXsKCQkJCSRiYXNlYWRkcj0iJDEiOwoJCQkJfQoJCQllbHNpZiAoL14tLWNyb3NzLWNvbXBpbGUtcHJlZml4PSguKikkLykKCQkJCXsKCQkJCSRjcm9zc19jb21waWxlX3ByZWZpeD0kMTsKCQkJCX0KCQkJZWxzZQoJCQkJewoJCQkJcHJpbnQgU1RERVJSICR1c2FnZTsKCQkJCWV4aXQoMSk7CgkJCQl9CgkJCX0KCQllbHNpZiAoJF8gPX4gL14oW146XSspOiguKykkLykKCQkJewoJCQlldmFsICJcJHRhYmxle1wkMX0gPSBcIiQyXCIiOyAjIGFsbG93ICR4eHggY29uc3RydWN0cyBpbiB0aGUgc3RyaW5nCgkJCSR0YXJnZXQ9JDE7CgkJCX0KCQllbHNlCgkJCXsKCQkJZGllICJ0YXJnZXQgYWxyZWFkeSBkZWZpbmVkIC0gJHRhcmdldCAob2ZmZW5kaW5nIGFyZzogJF8pXG4iIGlmICgkdGFyZ2V0IG5lICIiKTsKCQkJJHRhcmdldD0kXzsKCQkJfQoKCQl1bmxlc3MgKCRfIGVxICR0YXJnZXQgfHwgL15uby0vIHx8IC9eZGlzYWJsZS0vKQoJCQl7CgkJCSMgIm5vLS4uLiIgZm9sbG93cyBsYXRlciBhZnRlciBpbXBsaWVkIGRpc2FjdGl2YXRpb25zCgkJCSMgaGF2ZSBiZWVuIGRlcml2ZWQuICAoRG9uJ3QgdGFrZSB0aGlzIHRvbyBzZXJvaXVzbHksCgkJCSMgd2UgcmVhbGx5IG9ubHkgd3JpdGUgT1BUSU9OUyB0byB0aGUgTWFrZWZpbGUgb3V0IG9mCgkJCSMgbm9zdGFsZ2lhLikKCgkJCWlmICgkb3B0aW9ucyBlcSAiIikKCQkJCXsgJG9wdGlvbnMgPSAkXzsgfQoJCQllbHNlCgkJCQl7ICRvcHRpb25zIC49ICIgIi4kXzsgfQoJCQl9CgkJfQoJfQoKCgppZiAoJHByb2Nlc3NvciBlcSAiMzg2IikKCXsKCSRkaXNhYmxlZHsic3NlMiJ9ID0gImZvcmNlZCI7Cgl9CgppZiAoIWRlZmluZWQoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9KSB8fCAkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gZXEgIiIpCgl7CgkkZGlzYWJsZWR7ImtyYjUifSA9ICJrcmI1LWZsYXZvciBub3Qgc3BlY2lmaWVkIjsKCX0KCmlmICghZGVmaW5lZCgkZGlzYWJsZWR7InpsaWItZHluYW1pYyJ9KSkKCXsKCSMgInpsaWItZHluYW1pYyIgd2FzIHNwZWNpZmljYWxseSBlbmFibGVkLCBzbyBlbmFibGUgInpsaWIiCglkZWxldGUgJGRpc2FibGVkeyJ6bGliIn07Cgl9CgppZiAoZGVmaW5lZCgkZGlzYWJsZWR7InJpam5kYWVsIn0pKQoJewoJJGRpc2FibGVkeyJhZXMifSA9ICJmb3JjZWQiOwoJfQppZiAoZGVmaW5lZCgkZGlzYWJsZWR7ImRlcyJ9KSkKCXsKCSRkaXNhYmxlZHsibWRjMiJ9ID0gImZvcmNlZCI7Cgl9CmlmIChkZWZpbmVkKCRkaXNhYmxlZHsiZWMifSkpCgl7CgkkZGlzYWJsZWR7ImVjZHNhIn0gPSAiZm9yY2VkIjsKCSRkaXNhYmxlZHsiZWNkaCJ9ID0gImZvcmNlZCI7Cgl9CgojIFNTTCAyLjAgcmVxdWlyZXMgTUQ1IGFuZCBSU0EKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7InJzYSJ9KSkKCXsKCSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7Cgl9CgojIFNTTCAzLjAgYW5kIFRMUyByZXF1aXJlcyBNRDUgYW5kIFNIQSBhbmQgZWl0aGVyIFJTQSBvciBEU0ErREgKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJtZDUifSkgfHwgZGVmaW5lZCgkZGlzYWJsZWR7InNoYSJ9KQogICAgfHwgKGRlZmluZWQoJGRpc2FibGVkeyJyc2EifSkKICAgICAgICAmJiAoZGVmaW5lZCgkZGlzYWJsZWR7ImRzYSJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsiZGgifSkpKSkKCXsKCSRkaXNhYmxlZHsic3NsMyJ9ID0gImZvcmNlZCI7CgkkZGlzYWJsZWR7InRsczEifSA9ICJmb3JjZWQiOwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJ0bHMxIn0pKQoJewoJJGRpc2FibGVkeyJ0bHNleHQifSA9ICJmb3JjZWQiOwoJfQoKaWYgKGRlZmluZWQoJGRpc2FibGVkeyJlYyJ9KSB8fCBkZWZpbmVkKCRkaXNhYmxlZHsiZHNhIn0pCiAgICB8fCBkZWZpbmVkKCRkaXNhYmxlZHsiZGgifSkpCgl7CgkkZGlzYWJsZWR7Imdvc3QifSA9ICJmb3JjZWQiOwoJfQoKIyBTUlAgcmVxdWlyZXMgVExTRVhUCmlmIChkZWZpbmVkKCRkaXNhYmxlZHsidGxzZXh0In0pKQoJewoJJGRpc2FibGVkeyJzcnAifSA9ICJmb3JjZWQiOwoJfQoKaWYgKCR0YXJnZXQgZXEgIlRBQkxFIikgewoJZm9yZWFjaCAkdGFyZ2V0IChzb3J0IGtleXMgJXRhYmxlKSB7CgkJcHJpbnRfdGFibGVfZW50cnkoJHRhcmdldCk7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0IGVxICJMSVNUIikgewoJZm9yZWFjaCAoc29ydCBrZXlzICV0YWJsZSkgewoJCXByaW50OwoJCXByaW50ICJcbiI7Cgl9CglleGl0IDA7Cn0KCmlmICgkdGFyZ2V0ID1+IG0vXkN5Z1dpbjMyKC0uKikkLykgewoJJHRhcmdldCA9ICJDeWd3aW4iLiQxOwp9CgpwcmludCAiQ29uZmlndXJpbmcgZm9yICR0YXJnZXRcbiI7CgomdXNhZ2UgaWYgKCFkZWZpbmVkKCR0YWJsZXskdGFyZ2V0fSkpOwoKaWYgKCRmaXBzKQoJewoJZGVsZXRlICRkaXNhYmxlZHsic2hhcmVkIn0gaWYgKCRkaXNhYmxlZHsic2hhcmVkIn0gZXEgImRlZmF1bHQiKTsKCX0KCmZvcmVhY2ggKHNvcnQgKGtleXMgJWRpc2FibGVkKSkKCXsKCSRvcHRpb25zIC49ICIgbm8tJF8iOwoKCXByaW50ZiAiICAgIG5vLSUtMTJzICUtMTBzIiwgJF8sICJbJGRpc2FibGVkeyRffV0iOwoKCWlmICgvXmRzbyQvKQoJCXsgJG5vX2RzbyA9IDE7IH0KCWVsc2lmICgvXnRocmVhZHMkLykKCQl7ICRub190aHJlYWRzID0gMTsgfQoJZWxzaWYgKC9ec2hhcmVkJC8pCgkJeyAkbm9fc2hhcmVkID0gMTsgfQoJZWxzaWYgKC9eemxpYiQvKQoJCXsgJHpsaWIgPSAwOyB9CgllbHNpZiAoL15zdGF0aWMtZW5naW5lJC8pCgkJeyB9CgllbHNpZiAoL156bGliLWR5bmFtaWMkLykKCQl7IH0KCWVsc2lmICgvXnN5bWxpbmtzJC8pCgkJeyAkc3ltbGluayA9IDA7IH0KCWVsc2lmICgvXnNzZTIkLykKCQl7ICRub19zc2UyID0gMTsgfQoJZWxzZQoJCXsKCQlteSAoJEFMR08sICRhbGdvKTsKCQkoJEFMR08gPSAkYWxnbyA9ICRfKSA9fiB0ci9bXC1hLXpdL1tfQS1aXS87CgoJCWlmICgvXmFzbSQvIHx8IC9eZXJyJC8gfHwgL15odyQvIHx8IC9eaHctLykKCQkJewoJCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfTk9fJEFMR09cbiI7CgkJCXByaW50ICIgT1BFTlNTTF9OT18kQUxHTyI7CgkJCgkJCWlmICgvXmVyciQvKQl7ICRmbGFncyAuPSAiLURPUEVOU1NMX05PX0VSUiAiOyB9CgkJCWVsc2lmICgvXmFzbSQvKQl7ICRub19hc20gPSAxOyB9CgkJCX0KCQllbHNlCgkJCXsKCQkJJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCQkJcHJpbnQgIiBPUEVOU1NMX05PXyRBTEdPIjsKCgkJCWlmICgvXmtyYjUkLykKCQkJCXsgJG5vX2tyYjUgPSAxOyB9CgkJCWVsc2UKCQkJCXsKCQkJCXB1c2ggQHNraXAsICRhbGdvOwoJCQkJcHJpbnQgIiAoc2tpcCBkaXIpIjsKCgkJCQkkZGVwZmxhZ3MgLj0gIiAtRE9QRU5TU0xfTk9fJEFMR08iOwoJCQkJfQoJCQl9CgkJfQoKCXByaW50ICJcbiI7Cgl9CgpteSAkZXhwX2NmbGFncyA9ICIiOwoKaWYgKCRmaXBzY2FuaXN0ZXJvbmx5ID09IDIpCgl7CnByaW50IFNUREVSUiAiQURESU5HIEZJUFNTWU1cbiI7CgkkZXhwX2NmbGFncyAuPSAiIC1ET1BFTlNTTF9GSVBTU1lNUyI7Cgl9Cgpmb3JlYWNoIChzb3J0IEBleHBlcmltZW50YWwpCgl7CglteSAkQUxHTzsKCSgkQUxHTyA9ICRfKSA9fiB0ci9bYS16XS9bQS1aXS87CgoJIyBvcGVuc3NsY29uZi5oIHdpbGwgc2V0IE9QRU5TU0xfTk9fLi4uIHVubGVzcyBPUEVOU1NMX0VYUEVSSU1FTlRBTF8uLi4gaXMgZGVmaW5lZAoJJG9wZW5zc2xfZXhwZXJpbWVudGFsX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9OT18kQUxHT1xuIjsKCSRleHBfY2ZsYWdzIC49ICIgLURPUEVOU1NMX0VYUEVSSU1FTlRBTF8kQUxHTyI7Cgl9CgpteSAkSXNNSzFNRj1zY2FsYXIgZ3JlcCAvXiR0YXJnZXQkLyxATUsxTUZfQnVpbGRzOwoKJGV4ZV9leHQ9Ii5leGUiIGlmICgkdGFyZ2V0IGVxICJDeWd3aW4iIHx8ICR0YXJnZXQgZXEgIkRKR1BQIiB8fCAkdGFyZ2V0ID1+IC9ebWluZ3cvKTsKJGV4ZV9leHQ9Ii5ubG0iIGlmICgkdGFyZ2V0ID1+IC9uZXR3YXJlLyk7CiRleGVfZXh0PSIucG0iICBpZiAoJHRhcmdldCA9fiAvdm9zLyk7CmlmICgkb3BlbnNzbGRpciBlcSAiIiBhbmQgJHByZWZpeCBlcSAiIikKCXsKCWlmICgkZmlwcykKCQl7CgkJJG9wZW5zc2xkaXI9Ii91c3IvbG9jYWwvc3NsL2ZpcHMtMi4wIjsKCQl9CgllbHNlCgkJewoJCSRvcGVuc3NsZGlyPSIvdXNyL2xvY2FsL3NzbCI7CgkJfQoJfQokcHJlZml4PSRvcGVuc3NsZGlyIGlmICRwcmVmaXggZXEgIiI7CgokZGVmYXVsdF9yYW5saWI9ICZ3aGljaCgicmFubGliIikgb3IgJGRlZmF1bHRfcmFubGliPSJ0cnVlIjsKJHBlcmw9JEVOVnsnUEVSTCd9IG9yICRwZXJsPSZ3aGljaCgicGVybDUiKSBvciAkcGVybD0md2hpY2goInBlcmwiKQogIG9yICRwZXJsPSJwZXJsIjsKbXkgJG1ha2UgPSAkRU5WeydNQUtFJ30gfHwgIm1ha2UiOwoKJGNyb3NzX2NvbXBpbGVfcHJlZml4PSRFTlZ7J0NST1NTX0NPTVBJTEUnfSBpZiAkY3Jvc3NfY29tcGlsZV9wcmVmaXggZXEgIiI7CgpjaG9wICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyID1+IC9cLyQvOwpjaG9wICRwcmVmaXggaWYgJHByZWZpeCA9fiAvLlwvJC87Cgokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wiIGlmICRvcGVuc3NsZGlyIGVxICIiOwokb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIgIX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOwoKCnByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwoKbXkgQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKbXkgJGNjID0gJGZpZWxkc1skaWR4X2NjXTsKIyBBbGxvdyBlbnZpcm9ubWVudCBDQyB0byBvdmVycmlkZSBjb21waWxlci4uLgppZigkRU5We0NDfSkgewogICAgJGNjID0gJEVOVntDQ307Cn0KbXkgJGNmbGFncyA9ICRmaWVsZHNbJGlkeF9jZmxhZ3NdOwpteSAkdW5pc3RkID0gJGZpZWxkc1skaWR4X3VuaXN0ZF07Cm15ICR0aHJlYWRfY2ZsYWcgPSAkZmllbGRzWyRpZHhfdGhyZWFkX2NmbGFnXTsKbXkgJHN5c19pZCA9ICRmaWVsZHNbJGlkeF9zeXNfaWRdOwpteSAkbGZsYWdzID0gJGZpZWxkc1skaWR4X2xmbGFnc107Cm15ICRibl9vcHMgPSAkZmllbGRzWyRpZHhfYm5fb3BzXTsKbXkgJGNwdWlkX29iaiA9ICRmaWVsZHNbJGlkeF9jcHVpZF9vYmpdOwpteSAkYm5fb2JqID0gJGZpZWxkc1skaWR4X2JuX29ial07Cm15ICRkZXNfb2JqID0gJGZpZWxkc1skaWR4X2Rlc19vYmpdOwpteSAkYWVzX29iaiA9ICRmaWVsZHNbJGlkeF9hZXNfb2JqXTsKbXkgJGJmX29iaiA9ICRmaWVsZHNbJGlkeF9iZl9vYmpdOwpteSAkbWQ1X29iaiA9ICRmaWVsZHNbJGlkeF9tZDVfb2JqXTsKbXkgJHNoYTFfb2JqID0gJGZpZWxkc1skaWR4X3NoYTFfb2JqXTsKbXkgJGNhc3Rfb2JqID0gJGZpZWxkc1skaWR4X2Nhc3Rfb2JqXTsKbXkgJHJjNF9vYmogPSAkZmllbGRzWyRpZHhfcmM0X29ial07Cm15ICRybWQxNjBfb2JqID0gJGZpZWxkc1skaWR4X3JtZDE2MF9vYmpdOwpteSAkcmM1X29iaiA9ICRmaWVsZHNbJGlkeF9yYzVfb2JqXTsKbXkgJHdwX29iaiA9ICRmaWVsZHNbJGlkeF93cF9vYmpdOwpteSAkY21sbF9vYmogPSAkZmllbGRzWyRpZHhfY21sbF9vYmpdOwpteSAkbW9kZXNfb2JqID0gJGZpZWxkc1skaWR4X21vZGVzX29ial07Cm15ICRwZXJsYXNtX3NjaGVtZSA9ICRmaWVsZHNbJGlkeF9wZXJsYXNtX3NjaGVtZV07Cm15ICRkc29fc2NoZW1lID0gJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdOwpteSAkc2hhcmVkX3RhcmdldCA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfdGFyZ2V0XTsKbXkgJHNoYXJlZF9jZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfY2ZsYWddOwpteSAkc2hhcmVkX2xkZmxhZyA9ICRmaWVsZHNbJGlkeF9zaGFyZWRfbGRmbGFnXTsKbXkgJHNoYXJlZF9leHRlbnNpb24gPSAkZmllbGRzWyRpZHhfc2hhcmVkX2V4dGVuc2lvbl07Cm15ICRyYW5saWIgPSAkRU5WeydSQU5MSUInfSB8fCAkZmllbGRzWyRpZHhfcmFubGliXTsKbXkgJGFyID0gJEVOVnsnQVInfSB8fCAiYXIiOwpteSAkYXJmbGFncyA9ICRmaWVsZHNbJGlkeF9hcmZsYWdzXTsKbXkgJG11bHRpbGliID0gJGZpZWxkc1skaWR4X211bHRpbGliXTsKCiMgaWYgJHByZWZpeC9saWIkbXVsdGlsaWIgaXMgbm90IGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhlbgojIGFzc3VtZSB0aGF0IGl0J3Mgbm90IHNlYXJjaGVkIGJ5IGxpbmtlciBhdXRvbWF0aWNhbGx5LCBpbgojIHdoaWNoIGNhc2UgYWRkaW5nICRtdWx0aWxpYiBzdWZmaXggY2F1c2VzIG1vcmUgZ3JpZWYgdGhhbgojIHdlJ3JlIHJlYWR5IHRvIHRvbGVyYXRlLCBzbyBkb24ndC4uLgokbXVsdGlsaWI9IiIgaWYgIS1kICIkcHJlZml4L2xpYiRtdWx0aWxpYiI7CgokbGliZGlyPSJsaWIkbXVsdGlsaWIiIGlmICRsaWJkaXIgZXEgIiI7CgokY2ZsYWdzID0gIiRjZmxhZ3MkZXhwX2NmbGFncyI7CgojICclJyBpbiAkbGZsYWdzIGlzIHVzZWQgdG8gc3BsaXQgZmxhZ3MgdG8gInByZS0iIGFuZCBwb3N0LWZsYWdzCm15ICgkcHJlbGZsYWdzLCRwb3N0bGZsYWdzKT1zcGxpdCgnJScsJGxmbGFncyk7CmlmIChkZWZpbmVkKCRwb3N0bGZsYWdzKSkJeyAkbGZsYWdzPSRwb3N0bGZsYWdzOwl9CmVsc2UJCQkJeyAkbGZsYWdzPSRwcmVsZmxhZ3M7IHVuZGVmICRwcmVsZmxhZ3M7CX0KCmlmICgkdGFyZ2V0ID1+IC9ebWluZ3cvICYmIGAkY2MgLS10YXJnZXQtaGVscCAyPiYxYCAhfiBtL1wtbW5vXC1jeWd3aW4vbSkKCXsKCSRjZmxhZ3MgPX4gcy9cLW1ub1wtY3lnd2luXHMqLy87Cgkkc2hhcmVkX2xkZmxhZyA9fiBzL1wtbW5vXC1jeWd3aW5ccyovLzsKCX0KCm15ICRub19zaGFyZWRfd2Fybj0wOwpteSAkbm9fdXNlcl9jZmxhZ3M9MDsKCmlmICgkZmxhZ3MgbmUgIiIpCXsgJGNmbGFncz0iJGZsYWdzJGNmbGFncyI7IH0KZWxzZQkJCXsgJG5vX3VzZXJfY2ZsYWdzPTE7ICAgICAgIH0KCiMgS2VyYmVyb3Mgc2V0dGluZ3MuICBUaGUgZmxhdm9yIG11c3QgYmUgcHJvdmlkZWQgZnJvbSBvdXRzaWRlLCBlaXRoZXIgdGhyb3VnaAojIHRoZSBzY3JpcHQgImNvbmZpZyIgb3IgbWFudWFsbHkuCmlmICghJG5vX2tyYjUpCgl7CglteSAoJGxyZXNvbHYsICRscGF0aCwgJGxleHQpOwoJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXltIaF1laW1kYWwkLykKCQl7CgkJZGllICJTb3JyeSwgSGVpbWRhbCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZFxuIjsKCQl9CgkjIyMjIyBIQUNLIHRvIGZvcmNlIHVzZSBvZiBIZWltZGFsLgoJIyMjIyMgV0FSTklORzogU2luY2Ugd2UgZG9uJ3QgcmVhbGx5IGhhdmUgYWRlcXVhdGUgc3VwcG9ydCBmb3IgSGVpbWRhbCwKCSMjIyMjICAgICAgICAgIHVzaW5nIHRoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQuICBZb3UnbGwgaGF2ZSB0byBtYWtlCgkjIyMjIyAgICAgICAgICBjaGFuZ2VzIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiB5b3UgZG8sIHBsZWFzZSBzZW5kCgkjIyMjIyAgICAgICAgICBwYXRjaGVzIHRvIG9wZW5zc2wtZGV2QG9wZW5zc2wub3JnCglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eZm9yY2UtW0hoXWVpbWRhbCQvKQoJCXsKCQl3YXJuICJIZWltZGFsIGlzbid0IHJlYWxseSBzdXBwb3J0ZWQuICBZb3VyIGJ1aWxkIFdJTEwgYnJlYWtcbiI7CgkJd2FybiAiSWYgeW91IGZpeCB0aGUgcHJvYmxlbXMsIHBsZWFzZSBzZW5kIGEgcGF0Y2ggdG8gb3BlbnNzbC1kZXZcQG9wZW5zc2wub3JnXG4iOwoJCSR3aXRoYXJnc3sia3JiNS1kaXIifSA9ICIvdXNyL2hlaW1kYWwiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGkgLWxrcmI1IC1sY29tX2VyciIKCQkJaWYgJHdpdGhhcmdzeyJrcmI1LWxpYiJ9IGVxICIiICYmICEkSXNNSzFNRjsKCQkkY2ZsYWdzPSItREtSQjVfSEVJTURBTCAkY2ZsYWdzIjsKCQl9CglpZiAoJHdpdGhhcmdzeyJrcmI1LWZsYXZvciJ9ID1+IC9eW01tXVtJaV1bVHRdLykKCQl7CgkJJHdpdGhhcmdzeyJrcmI1LWRpciJ9ID0gIi91c3Iva2VyYmVyb3MiCgkJCWlmICR3aXRoYXJnc3sia3JiNS1kaXIifSBlcSAiIjsKCQkkd2l0aGFyZ3N7ImtyYjUtbGliIn0gPSAiLUwiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4KCQkJIi9saWIgLWxnc3NhcGlfa3JiNSAtbGtyYjUgLWxjb21fZXJyIC1sazVjcnlwdG8iCgkJCWlmICR3aXRoYXJnc3sia3JiNS1saWIifSBlcSAiIiAmJiAhJElzTUsxTUY7CgkJJGNmbGFncz0iLURLUkI1X01JVCAkY2ZsYWdzIjsKCQkkd2l0aGFyZ3N7ImtyYjUtZmxhdm9yIn0gPX4gcy9eW01tXVtJaV1bVHRdWy5fLV0qLy87CgkJaWYgKCR3aXRoYXJnc3sia3JiNS1mbGF2b3IifSA9fiAvXjFbLl8tXSpbMDFdLykKCQkJewoJCQkkY2ZsYWdzPSItREtSQjVfTUlUX09MRDExICRjZmxhZ3MiOwoJCQl9CgkJfQoJTFJFU09MVjoKCWZvcmVhY2ggJGxwYXRoICgiL2xpYiIsICIvdXNyL2xpYiIpCgkJewoJCWZvcmVhY2ggJGxleHQgKCJhIiwgInNvIikKCQkJewoJCQkkbHJlc29sdiA9ICIkbHBhdGgvbGlicmVzb2x2LiRsZXh0IjsKCQkJbGFzdCBMUkVTT0xWCWlmICgtciAiJGxyZXNvbHYiKTsKCQkJJGxyZXNvbHYgPSAiIjsKCQkJfQoJCX0KCSR3aXRoYXJnc3sia3JiNS1saWIifSAuPSAiIC1scmVzb2x2IgoJCWlmICgiJGxyZXNvbHYiIG5lICIiKTsKCSR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0gPSAiLUkiLiR3aXRoYXJnc3sia3JiNS1kaXIifS4iL2luY2x1ZGUiCgkJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBlcSAiIiAmJgoJCSAgICR3aXRoYXJnc3sia3JiNS1kaXIifSBuZSAiIjsKCX0KCiMgVGhlIERTTyBjb2RlIGN1cnJlbnRseSBhbHdheXMgaW1wbGVtZW50cyBhbGwgZnVuY3Rpb25zIHNvIHRoYXQgbm8KIyBhcHBsaWNhdGlvbnMgd2lsbCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgZnJvbSBhIGNvbXBpbGF0aW9uIHBvaW50CiMgb2Ygdmlldy4gSG93ZXZlciwgdGhlICJtZXRob2QicyBtYXkgcmV0dXJuIHplcm8gdW5sZXNzIHRoYXQgcGxhdGZvcm0KIyBoYXMgc3VwcG9ydCBjb21waWxlZCBpbiBmb3IgdGhlbS4gQ3VycmVudGx5IGVhY2ggbWV0aG9kIGlzIGVuYWJsZWQKIyBieSBhIGRlZmluZSAiRFNPXzxuYW1lPiIgLi4uIHdlIHRyYW5zbGF0ZSB0aGUgImRzb19zY2hlbWUiIGNvbmZpZwojIHN0cmluZyBlbnRyeSBpbnRvIHVzaW5nIHRoZSBmb2xsb3dpbmcgbG9naWM7Cm15ICRkc29fY2ZsYWdzOwppZiAoISRub19kc28gJiYgJGRzb19zY2hlbWUgbmUgIiIpCgl7CgkkZHNvX3NjaGVtZSA9fiB0ci9bYS16XS9bQS1aXS87CglpZiAoJGRzb19zY2hlbWUgZXEgIkRMRkNOIikKCQl7CgkJJGRzb19jZmxhZ3MgPSAiLUREU09fRExGQ04gLURIQVZFX0RMRkNOX0giOwoJCX0KCWVsc2lmICgkZHNvX3NjaGVtZSBlcSAiRExGQ05fTk9fSCIpCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPX0RMRkNOIjsKCQl9CgllbHNlCgkJewoJCSRkc29fY2ZsYWdzID0gIi1ERFNPXyRkc29fc2NoZW1lIjsKCQl9CgkkY2ZsYWdzID0gIiRkc29fY2ZsYWdzICRjZmxhZ3MiOwoJfQoKbXkgJHRocmVhZF9jZmxhZ3M7Cm15ICR0aHJlYWRfZGVmaW5lczsKaWYgKCR0aHJlYWRfY2ZsYWcgbmUgIih1bmtub3duKSIgJiYgISRub190aHJlYWRzKQoJewoJIyBJZiB3ZSBrbm93IGhvdyB0byBkbyBpdCwgc3VwcG9ydCB0aHJlYWRzIGJ5IGRlZmF1bHQuCgkkdGhyZWFkcyA9IDE7Cgl9CmlmICgkdGhyZWFkX2NmbGFnIGVxICIodW5rbm93bikiICYmICR0aHJlYWRzKQoJewoJIyBJZiB0aGUgdXNlciBhc2tlZCBmb3IgInRocmVhZHMiLCBbc11oZSBpcyBhbHNvIGV4cGVjdGVkIHRvCgkjIHByb3ZpZGUgYW55IHN5c3RlbS1kZXBlbmRlbnQgY29tcGlsZXIgb3B0aW9ucyB0aGF0IGFyZQoJIyBuZWNlc3NhcnkuCglpZiAoJG5vX3VzZXJfY2ZsYWdzKQoJCXsKCQlwcmludCAiWW91IGFza2VkIGZvciBtdWx0aS10aHJlYWRpbmcgc3VwcG9ydCwgYnV0IGRpZG4ndFxuIjsKCQlwcmludCAicHJvdmlkZSBhbnkgc3lzdGVtLXNwZWNpZmljIGNvbXBpbGVyIG9wdGlvbnNcbiI7CgkJZXhpdCgxKTsKCQl9CgkkdGhyZWFkX2NmbGFncz0iLURPUEVOU1NMX1RIUkVBRFMgJGNmbGFncyIgOwoJJHRocmVhZF9kZWZpbmVzIC49ICIjZGVmaW5lIE9QRU5TU0xfVEhSRUFEU1xuIjsKCX0KZWxzZQoJewoJJHRocmVhZF9jZmxhZ3M9Ii1ET1BFTlNTTF9USFJFQURTICR0aHJlYWRfY2ZsYWcgJGNmbGFncyI7CgkkdGhyZWFkX2RlZmluZXMgLj0gIiNkZWZpbmUgT1BFTlNTTF9USFJFQURTXG4iOwojCW15ICRkZWY7CiMJZm9yZWFjaCAkZGVmIChzcGxpdCAnICcsJHRocmVhZF9jZmxhZykKIwkJewojCQlpZiAoJGRlZiA9fiBzL14tRC8vICYmICRkZWYgIX4gL15fLykKIwkJCXsKIwkJCSR0aHJlYWRfZGVmaW5lcyAuPSAiI2RlZmluZSAkZGVmXG4iOwojCQkJfQojCQl9Cgl9CQoKJGxmbGFncz0iJGxpYnMkbGZsYWdzIiBpZiAoJGxpYnMgbmUgIiIpOwoKaWYgKCRub19hc20pCgl7CgkkY3B1aWRfb2JqPSRibl9vYmo9CgkkZGVzX29iaj0kYWVzX29iaj0kYmZfb2JqPSRjYXN0X29iaj0kcmM0X29iaj0kcmM1X29iaj0kY21sbF9vYmo9CgkkbW9kZXNfb2JqPSRzaGExX29iaj0kbWQ1X29iaj0kcm1kMTYwX29iaj0kd3Bfb2JqPSIiOwoJJGNmbGFncz1+cy9cLURbQkxdX0VORElBTi8vCQlpZiAoJGZpcHMpOwoJJHRocmVhZF9jZmxhZ3M9fnMvXC1EW0JMXV9FTkRJQU4vLwlpZiAoJGZpcHMpOwoJfQoKaWYgKCEkbm9fc2hhcmVkKQoJewoJJGNhc3Rfb2JqPSIiOwkjIENBU1QgYXNzZW1ibGVyIGlzIG5vdCBQSUMKCX0KCmlmICgkdGhyZWFkcykKCXsKCSRjZmxhZ3M9JHRocmVhZF9jZmxhZ3M7Cgkkb3BlbnNzbF90aHJlYWRfZGVmaW5lcyAuPSAkdGhyZWFkX2RlZmluZXM7Cgl9CgppZiAoJHpsaWIpCgl7CgkkY2ZsYWdzID0gIi1EWkxJQiAkY2ZsYWdzIjsKCWlmIChkZWZpbmVkKCRkaXNhYmxlZHsiemxpYi1keW5hbWljIn0pKQoJCXsKCQlpZiAoZGVmaW5lZCgkd2l0aGFyZ3N7InpsaWItbGliIn0pKQoJCQl7CgkJCSRsZmxhZ3MgPSAiJGxmbGFncyAtTCIgLiAkd2l0aGFyZ3N7InpsaWItbGliIn0gLiAiIC1seiI7CgkJCX0KCQllbHNlCgkJCXsKCQkJJGxmbGFncyA9ICIkbGZsYWdzIC1seiI7CgkJCX0KCQl9CgllbHNlCgkJewoJCSRjZmxhZ3MgPSAiLURaTElCX1NIQVJFRCAkY2ZsYWdzIjsKCQl9Cgl9CgojIFlvdSB3aWxsIGZpbmQgc2hsaWJfbWFyazEgYW5kIHNobGliX21hcmsyIGV4cGxhaW5lZCBpbiBNYWtlZmlsZS5vcmcKbXkgJHNoYXJlZF9tYXJrID0gIiI7CmlmICgkc2hhcmVkX3RhcmdldCBlcSAiIikKCXsKCSRub19zaGFyZWRfd2FybiA9IDEgaWYgISRub19zaGFyZWQgJiYgISRmaXBzOwoJJG5vX3NoYXJlZCA9IDE7Cgl9CmlmICghJG5vX3NoYXJlZCkKCXsKCWlmICgkc2hhcmVkX2NmbGFnIG5lICIiKQoJCXsKCQkkY2ZsYWdzID0gIiRzaGFyZWRfY2ZsYWcgLURPUEVOU1NMX1BJQyAkY2ZsYWdzIjsKCQl9Cgl9CgppZiAoISRJc01LMU1GKQoJewoJIyBhZGQge25vLX1zdGF0aWMtZW5naW5lIHRvIG9wdGlvbnMgdG8gYWxsb3cgbWtkZWYucGwgdG8gd29yayB3aXRob3V0IGV4dHJhIGFyZ3VtZW50cwoJaWYgKCRub19zaGFyZWQpCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfTk9fRFlOQU1JQ19FTkdJTkVcbiI7CgkJJG9wdGlvbnMuPSIgc3RhdGljLWVuZ2luZSI7CgkJfQoJZWxzZQoJCXsKCQkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBPUEVOU1NMX05PX1NUQVRJQ19FTkdJTkVcbiI7CgkJJG9wdGlvbnMuPSIgbm8tc3RhdGljLWVuZ2luZSI7CgkJfQoJfQoKJGNwdWlkX29iai49IiB1cGxpbmsubyB1cGxpbmsteDg2Lm8iIGlmICgkY2ZsYWdzID1+IC9cLURPUEVOU1NMX1VTRV9BUFBMSU5LLyk7CgojCiMgUGxhdGZvcm0gZml4LXVwcwojCmlmICgkdGFyZ2V0ID1+IC9cLWljYyQvKQkjIEludGVsIEMgY29tcGlsZXIKCXsKCW15ICRpY2N2ZXI9MDsKCWlmIChvcGVuKEZELCIkY2MgLVYgMj4mMSB8IikpCgkJewoJCXdoaWxlKDxGRD4pIHsgJGljY3Zlcj0kMSBpZiAoL1ZlcnNpb24gKFswLTldKylcLi8pOyB9CgkJY2xvc2UoRkQpOwoJCX0KCWlmICgkaWNjdmVyPj04KQoJCXsKCQkjIEVsaW1pbmF0ZSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmN5IGZyb20gbGliaXJjLmEuIFRoaXMgaXMKCQkjIGVzc2VudGlhbCBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCwgYXMgb3RoZXJ3aXNlCgkJIyBhcHBzL29wZW5zc2wgY2FuIGVuZCB1cCBpbiBlbmRsZXNzIGxvb3AgdXBvbiBzdGFydHVwLi4uCgkJJGNmbGFncy49IiAtRG1lbWNweT1fX2J1aWx0aW5fbWVtY3B5IC1EbWVtc2V0PV9fYnVpbHRpbl9tZW1zZXQiOwoJCX0KCWlmICgkaWNjdmVyPj05KQoJCXsKCQkkY2ZsYWdzLj0iIC1pLXN0YXRpYyI7CgkJJGNmbGFncz1+cy9cLW5vX2NwcHJ0Ly1uby1jcHBydC87CgkJfQoJaWYgKCRpY2N2ZXI+PTEwKQoJCXsKCQkkY2ZsYWdzPX5zL1wtaVwtc3RhdGljLy1zdGF0aWMtaW50ZWwvOwoJCX0KCX0KCiMgVW5saWtlIG90aGVyIE9TZXMgKGxpa2UgU29sYXJpcywgTGludXgsIFRydTY0LCBJUklYKSBCU0QgcnVuLXRpbWUKIyBsaW5rZXJzICh0ZXN0ZWQgT3BlbkJTRCwgTmV0QlNEIGFuZCBGcmVlQlNEKSAiZGVtYW5kIiBSUEFUSCBzZXQgb24KIyAuc28gb2JqZWN0cy4gQXBwYXJlbnRseSBhcHBsaWNhdGlvbiBSUEFUSCBpcyBub3QgZ2xvYmFsIGFuZCBkb2VzCiMgbm90IGFwcGx5IHRvIC5zbyBsaW5rZWQgd2l0aCBvdGhlciAuc28uIFByb2JsZW0gbWFuaWZlc3RzIGl0c2VsZgojIHdoZW4gbGlic3NsLnNvIGZhaWxzIHRvIGxvYWQgbGliY3J5cHRvLnNvLiBPbmUgY2FuIGFyZ3VlIHRoYXQgd2UKIyBzaG91bGQgZW5ncmF2ZSB0aGlzIGludG8gTWFrZWZpbGUuc2hhcmVkIHJ1bGVzIG9yIGludG8gQlNELSogY29uZmlnCiMgbGluZXMgYWJvdmUuIE1lYW53aGlsZSBsZXQncyB0cnkgdG8gYmUgY2F1dGlvdXMgYW5kIHBhc3MgLXJwYXRoIHRvCiMgbGlua2VyIG9ubHkgd2hlbiAtLXByZWZpeCBpcyBub3QgL3Vzci4KaWYgKCR0YXJnZXQgPX4gL15CU0RcLS8pCgl7Cgkkc2hhcmVkX2xkZmxhZy49IiAtV2wsLXJwYXRoLFwkKExJQlJQQVRIKSIgaWYgKCRwcmVmaXggIX4gbXxeL3VzclsvXSokfCk7Cgl9CgppZiAoJHN5c19pZCBuZSAiIikKCXsKCSMkY2ZsYWdzPSItRE9QRU5TU0xfU1lTTkFNRV8kc3lzX2lkICRjZmxhZ3MiOwoJJG9wZW5zc2xfc3lzX2RlZmluZXM9IiNkZWZpbmUgT1BFTlNTTF9TWVNOQU1FXyRzeXNfaWRcbiI7Cgl9CgppZiAoJHJhbmxpYiBlcSAiIikKCXsKCSRyYW5saWIgPSAkZGVmYXVsdF9yYW5saWI7Cgl9CgojbXkgKCRibjEpPXNwbGl0KC9ccysvLCRibl9vYmopOwojJGJuMSA9ICIiIHVubGVzcyBkZWZpbmVkICRibjE7CiMkYm4xPSRibl9hc20gdW5sZXNzICgkYm4xID1+IC9cLm8kLyk7CiMkYm5fb2JqPSIkYm4xIjsKCiRjcHVpZF9vYmo9IiIgaWYgKCRwcm9jZXNzb3IgZXEgIjM4NiIpOwoKJGJuX29iaiA9ICRibl9hc20gdW5sZXNzICRibl9vYmogbmUgIiI7CiMgYm4tNTg2IGlzIHRoZSBvbmx5IG9uZSBpbXBsZW1lbnRpbmcgYm5fKl9wYXJ0X3dvcmRzCiRjZmxhZ3MuPSIgLURPUEVOU1NMX0JOX0FTTV9QQVJUX1dPUkRTIiBpZiAoJGJuX29iaiA9fiAvYm4tNTg2Lyk7CiRjZmxhZ3MuPSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm9fc3NlMiAmJiAkYm5fb2JqID1+IC84Ni8pOwoKJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8tbW9udC8pOwoKaWYgKCRmaXBzKQoJewoJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwoJaWYgKCRmaXBzY2FuaXN0ZXJpbnRlcm5hbCBlcSAieSIpCgkJewoJCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU0NBTklTVEVSXG4iOwoJCX0KCX0KCiRjcHVpZF9vYmo9Im1lbV9jbHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7CiRkZXNfb2JqPSRkZXNfZW5jCXVubGVzcyAoJGRlc19vYmogPX4gL1wubyQvKTsKJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKJGNhc3Rfb2JqPSRjYXN0X2VuYwl1bmxlc3MgKCRjYXN0X29iaiA9fiAvXC5vJC8pOwokcmM0X29iaj0kcmM0X2VuYwl1bmxlc3MgKCRyYzRfb2JqID1+IC9cLm8kLyk7CiRyYzVfb2JqPSRyYzVfZW5jCXVubGVzcyAoJHJjNV9vYmogPX4gL1wubyQvKTsKaWYgKCRzaGExX29iaiA9fiAvXC5vJC8pCgl7CiMJJHNoYTFfb2JqPSRzaGExX2VuYzsKCSRjZmxhZ3MuPSIgLURTSEExX0FTTSIgICBpZiAoJHNoYTFfb2JqID1+IC9zeDg2LyB8fCAkc2hhMV9vYmogPX4gL3NoYTEvKTsKCSRjZmxhZ3MuPSIgLURTSEEyNTZfQVNNIiBpZiAoJHNoYTFfb2JqID1+IC9zaGEyNTYvKTsKCSRjZmxhZ3MuPSIgLURTSEE1MTJfQVNNIiBpZiAoJHNoYTFfb2JqID1+IC9zaGE1MTIvKTsKCWlmICgkc2hhMV9vYmogPX4gL3NzZTIvKQoJICAgIHsJaWYgKCRub19zc2UyKQoJCXsgICAkc2hhMV9vYmogPX4gcy9cUypzc2UyXFMrLy87ICAgICAgICB9CgkJZWxzaWYgKCRjZmxhZ3MgIX4gL09QRU5TU0xfSUEzMl9TU0UyLykKCQl7ICAgJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIjsgICAgfQoJICAgIH0KCX0KaWYgKCRtZDVfb2JqID1+IC9cLm8kLykKCXsKIwkkbWQ1X29iaj0kbWQ1X2VuYzsKCSRjZmxhZ3MuPSIgLURNRDVfQVNNIjsKCX0KaWYgKCRybWQxNjBfb2JqID1+IC9cLm8kLykKCXsKIwkkcm1kMTYwX29iaj0kcm1kMTYwX2VuYzsKCSRjZmxhZ3MuPSIgLURSTUQxNjBfQVNNIjsKCX0KaWYgKCRhZXNfb2JqID1+IC9cLm8kLykKCXsKCSRjZmxhZ3MuPSIgLURBRVNfQVNNIjsKCSMgYWVzX2N0ci5vIGlzIG5vdCBhIHJlYWwgZmlsZSwgb25seSBpbmRpY2F0aW9uIHRoYXQgYXNzZW1ibGVyCgkjIG1vZHVsZSBpbXBsZW1lbnRzIEFFU19jdHIzMl9lbmNyeXB0Li4uCgkkY2ZsYWdzLj0iIC1EQUVTX0NUUl9BU00iIGlmICgkYWVzX29iaiA9fiBzL1xzKmFlc19jdHJcLm8vLyk7CgkkYWVzX29iaiA9fiBzL1xzKmFlc25pXC14ODZcLm8vLyBpZiAoJG5vX3NzZTIpOwoJfQplbHNlCXsKCSRhZXNfb2JqPSRhZXNfZW5jOwoJfQokd3Bfb2JqPSIiIGlmICgkd3Bfb2JqID1+IC9tbXgvICYmICRwcm9jZXNzb3IgZXEgIjM4NiIpOwppZiAoJHdwX29iaiA9fiAvXC5vJC8pCgl7CgkkY2ZsYWdzLj0iIC1EV0hJUkxQT09MX0FTTSI7Cgl9CmVsc2UJewoJJHdwX29iaj0id3BfYmxvY2subyI7Cgl9CiRjbWxsX29iaj0kY21sbF9lbmMJdW5sZXNzICgkY21sbF9vYmogPX4gLy5vJC8pOwppZiAoJG1vZGVzX29iaiA9fiAvZ2hhc2gvKQoJewoJJGNmbGFncy49IiAtREdIQVNIX0FTTSI7Cgl9CgojICJTdHJpbmdpZnkiIHRoZSBDIGZsYWdzIHN0cmluZy4gIFRoaXMgcGVybWl0cyBpdCB0byBiZSBtYWRlIHBhcnQgb2YgYSBzdHJpbmcKIyBhbmQgd29ya3MgYXMgd2VsbCBvbiBjb21tYW5kIGxpbmVzLgokY2ZsYWdzID1+IHMvKFtcXFwiXSkvXFxcMS9nOwoKbXkgJHZlcnNpb24gPSAidW5rbm93biI7Cm15ICR2ZXJzaW9uX251bSA9ICJ1bmtub3duIjsKbXkgJG1ham9yID0gInVua25vd24iOwpteSAkbWlub3IgPSAidW5rbm93biI7Cm15ICRzaGxpYl92ZXJzaW9uX251bWJlciA9ICJ1bmtub3duIjsKbXkgJHNobGliX3ZlcnNpb25faGlzdG9yeSA9ICJ1bmtub3duIjsKbXkgJHNobGliX21ham9yID0gInVua25vd24iOwpteSAkc2hsaWJfbWlub3IgPSAidW5rbm93biI7CgpvcGVuKElOLCc8Y3J5cHRvL29wZW5zc2x2LmgnKSB8fCBkaWUgInVuYWJsZSB0byByZWFkIG9wZW5zc2x2Lmg6JCFcbiI7CndoaWxlICg8SU4+KQoJewoJJHZlcnNpb249JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5URVhULipPcGVuU1NMIChcUyspIC87CgkkdmVyc2lvbl9udW09JDEgaWYgL09QRU5TU0wuVkVSU0lPTi5OVU1CRVIuKjB4KFxTKykvOwoJJHNobGliX3ZlcnNpb25fbnVtYmVyPSQxIGlmIC9TSExJQl9WRVJTSU9OX05VTUJFUiAqIihbXiJdKykiLzsKCSRzaGxpYl92ZXJzaW9uX2hpc3Rvcnk9JDEgaWYgL1NITElCX1ZFUlNJT05fSElTVE9SWSAqIihbXiJdKikiLzsKCX0KY2xvc2UoSU4pOwppZiAoJHNobGliX3ZlcnNpb25faGlzdG9yeSBuZSAiIikgeyAkc2hsaWJfdmVyc2lvbl9oaXN0b3J5IC49ICI6IjsgfQoKaWYgKCR2ZXJzaW9uID1+IC8oXlswLTldKilcLihbMC05XC5dKikvKQoJewoJJG1ham9yPSQxOwoJJG1pbm9yPSQyOwoJfQoKaWYgKCRzaGxpYl92ZXJzaW9uX251bWJlciA9fiAvKF5bMC05XSopXC4oWzAtOVwuXSopLykKCXsKCSRzaGxpYl9tYWpvcj0kMTsKCSRzaGxpYl9taW5vcj0kMjsKCX0KCmlmICgkc3RyaWN0X3dhcm5pbmdzKQoJewoJbXkgJHdvcHQ7CglkaWUgIkVSUk9SIC0tc3RyaWN0LXdhcm5pbmdzIHJlcXVpcmVzIGdjYyIgdW5sZXNzICgkY2MgPX4gL2djYyQvKTsKCWZvcmVhY2ggJHdvcHQgKHNwbGl0IC9ccysvLCAkZ2NjX2RldnRlYW1fd2FybikKCQl7CgkJJGNmbGFncyAuPSAiICR3b3B0IiB1bmxlc3MgKCRjZmxhZ3MgPX4gLyR3b3B0LykKCQl9Cgl9CgpteSAkbWZvcmcgPSAkZmlwc2NhbmlzdGVyb25seSA/ICJNYWtlZmlsZS5maXBzIiA6ICJNYWtlZmlsZS5vcmciOwoKb3BlbihJTiwiPCRtZm9yZyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgJG1mb3JnOiQhXG4iOwp1bmxpbmsoIiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byByZW1vdmUgb2xkICRNYWtlZmlsZS5uZXc6JCFcbiIgaWYgLWUgIiRNYWtlZmlsZS5uZXciOwpvcGVuKE9VVCwiPiRNYWtlZmlsZS5uZXciKSB8fCBkaWUgInVuYWJsZSB0byBjcmVhdGUgJE1ha2VmaWxlLm5ldzokIVxuIjsKcHJpbnQgT1VUICIjIyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSAkbWZvcmcgYnkgQ29uZmlndXJlLlxuXG4iOwpteSAkc2RpcnM9MDsKd2hpbGUgKDxJTj4pCgl7CgljaG9tcDsKCSRzZGlycyA9IDEgaWYgL15TRElSUz0vOwoJaWYgKCRzZGlycykgewoJCW15ICRkaXI7CgkJZm9yZWFjaCAkZGlyIChAc2tpcCkgewoJCQlzLyhccykkZGlyIC8kMS87CgkJCXMvXHMkZGlyJC8vOwoJCQl9CgkJfQoJJHNkaXJzID0gMCB1bmxlc3MgL1xcJC87CiAgICAgICAgcy9maXBzIC8vIGlmICgvXkRJUlM9LyAmJiAhJGZpcHMpOwogICAgICAgIHMvZW5naW5lcyAvLyBpZiAoL15ESVJTPS8gJiYgJGRpc2FibGVkeyJlbmdpbmUifSk7CglzL2NjZ29zdC8vIGlmICgvXkVOR0RJUlM9LyAmJiAkZGlzYWJsZWR7Imdvc3QifSk7CglzL15WRVJTSU9OPS4qL1ZFUlNJT049JHZlcnNpb24vOwoJcy9eTUFKT1I9LiovTUFKT1I9JG1ham9yLzsKCXMvXk1JTk9SPS4qL01JTk9SPSRtaW5vci87CglzL15TSExJQl9WRVJTSU9OX05VTUJFUj0uKi9TSExJQl9WRVJTSU9OX05VTUJFUj0kc2hsaWJfdmVyc2lvbl9udW1iZXIvOwoJcy9eU0hMSUJfVkVSU0lPTl9ISVNUT1JZPS4qL1NITElCX1ZFUlNJT05fSElTVE9SWT0kc2hsaWJfdmVyc2lvbl9oaXN0b3J5LzsKCXMvXlNITElCX01BSk9SPS4qL1NITElCX01BSk9SPSRzaGxpYl9tYWpvci87CglzL15TSExJQl9NSU5PUj0uKi9TSExJQl9NSU5PUj0kc2hsaWJfbWlub3IvOwoJcy9eU0hMSUJfRVhUPS4qL1NITElCX0VYVD0kc2hhcmVkX2V4dGVuc2lvbi87CglzL15JTlNUQUxMVE9QPS4qJC9JTlNUQUxMVE9QPSRwcmVmaXgvOwoJcy9eTVVMVElMSUI9LiokL01VTFRJTElCPSRtdWx0aWxpYi87CglzL15PUEVOU1NMRElSPS4qJC9PUEVOU1NMRElSPSRvcGVuc3NsZGlyLzsKCXMvXkxJQkRJUj0uKiQvTElCRElSPSRsaWJkaXIvOwoJcy9eSU5TVEFMTF9QUkVGSVg9LiokL0lOU1RBTExfUFJFRklYPSRpbnN0YWxsX3ByZWZpeC87CglzL15QTEFURk9STT0uKiQvUExBVEZPUk09JHRhcmdldC87CglzL15PUFRJT05TPS4qJC9PUFRJT05TPSRvcHRpb25zLzsKCXMvXkNPTkZJR1VSRV9BUkdTPS4qJC9DT05GSUdVUkVfQVJHUz0kYXJndnN0cmluZy87CglpZiAoJGNyb3NzX2NvbXBpbGVfcHJlZml4KQoJCXsKCQlzL15DQz0uKiQvQ1JPU1NfQ09NUElMRT0gJGNyb3NzX2NvbXBpbGVfcHJlZml4XG5DQz0gXCRcKENST1NTX0NPTVBJTEVcKSRjYy87CgkJcy9eQVI9XHMqL0FSPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15OTT1ccyovTk09IFwkXChDUk9TU19DT01QSUxFXCkvOwoJCXMvXlJBTkxJQj1ccyovUkFOTElCPSBcJFwoQ1JPU1NfQ09NUElMRVwpLzsKCQlzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9IFwkXChDUk9TU19DT01QSUxFXCkkY2MvIGlmICRjYyBlcSAiZ2NjIjsKCQl9CgllbHNlCXsKCQlzL15DQz0uKiQvQ0M9ICRjYy87CgkJcy9eQVI9XHMqYXIvQVI9ICRhci87CgkJcy9eUkFOTElCPS4qL1JBTkxJQj0gJHJhbmxpYi87CgkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSAkY2MvIGlmICRjYyBlcSAiZ2NjIjsKCQl9CglzL15DRkxBRz0uKiQvQ0ZMQUc9ICRjZmxhZ3MvOwoJcy9eREVQRkxBRz0uKiQvREVQRkxBRz0kZGVwZmxhZ3MvOwoJcy9eUEVYX0xJQlM9LiokL1BFWF9MSUJTPSAkcHJlbGZsYWdzLzsKCXMvXkVYX0xJQlM9LiokL0VYX0xJQlM9ICRsZmxhZ3MvOwoJcy9eRVhFX0VYVD0uKiQvRVhFX0VYVD0gJGV4ZV9leHQvOwoJcy9eQ1BVSURfT0JKPS4qJC9DUFVJRF9PQko9ICRjcHVpZF9vYmovOwoJcy9eQk5fQVNNPS4qJC9CTl9BU009ICRibl9vYmovOwoJcy9eREVTX0VOQz0uKiQvREVTX0VOQz0gJGRlc19vYmovOwoJcy9eQUVTX0VOQz0uKiQvQUVTX0VOQz0gJGFlc19vYmovOwoJcy9eQkZfRU5DPS4qJC9CRl9FTkM9ICRiZl9vYmovOwoJcy9eQ0FTVF9FTkM9LiokL0NBU1RfRU5DPSAkY2FzdF9vYmovOwoJcy9eUkM0X0VOQz0uKiQvUkM0X0VOQz0gJHJjNF9vYmovOwoJcy9eUkM1X0VOQz0uKiQvUkM1X0VOQz0gJHJjNV9vYmovOwoJcy9eTUQ1X0FTTV9PQko9LiokL01ENV9BU01fT0JKPSAkbWQ1X29iai87CglzL15TSEExX0FTTV9PQko9LiokL1NIQTFfQVNNX09CSj0gJHNoYTFfb2JqLzsKCXMvXlJNRDE2MF9BU01fT0JKPS4qJC9STUQxNjBfQVNNX09CSj0gJHJtZDE2MF9vYmovOwoJcy9eV1BfQVNNX09CSj0uKiQvV1BfQVNNX09CSj0gJHdwX29iai87CglzL15DTUxMX0VOQz0uKiQvQ01MTF9FTkM9ICRjbWxsX29iai87CglzL15NT0RFU19BU01fT0JKLj0qJC9NT0RFU19BU01fT0JKPSAkbW9kZXNfb2JqLzsKCXMvXlBFUkxBU01fU0NIRU1FPS4qJC9QRVJMQVNNX1NDSEVNRT0gJHBlcmxhc21fc2NoZW1lLzsKCXMvXlBST0NFU1NPUj0uKi9QUk9DRVNTT1I9ICRwcm9jZXNzb3IvOwoJcy9eQVJGTEFHUz0uKi9BUkZMQUdTPSAkYXJmbGFncy87CglzL15QRVJMPS4qL1BFUkw9ICRwZXJsLzsKCXMvXktSQjVfSU5DTFVERVM9LiovS1JCNV9JTkNMVURFUz0kd2l0aGFyZ3N7ImtyYjUtaW5jbHVkZSJ9LzsKCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwoJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxpYi1saWIifS87CglzL15aTElCX0lOQ0xVREU9LiovWkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOwoJcy9eRklQU0xJQkRJUj0uKi9GSVBTTElCRElSPSRmaXBzbGliZGlyLzsKCWlmICgkZmlwc2RzbykKCQl7CgkJcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmZpcHMvOwoJCXMvXlNIQVJFRF9GSVBTPS4qL1NIQVJFRF9GSVBTPWxpYmZpcHNcJChTSExJQl9FWFQpLzsKCQlzL15TSExJQkRJUlM9LiovU0hMSUJESVJTPSBjcnlwdG8gc3NsIGZpcHMvOwoJCX0KCWVsc2UKCQl7CgkJcy9eRklQU0NBTkxJQj0uKi9GSVBTQ0FOTElCPWxpYmNyeXB0by8gaWYgJGZpcHM7CgkJcy9eU0hBUkVEX0ZJUFM9LiovU0hBUkVEX0ZJUFM9LzsKCQlzL15TSExJQkRJUlM9LiovU0hMSUJESVJTPSBjcnlwdG8gc3NsLzsKCQl9CglzL15GSVBTQ0FOSVNURVJJTlRFUk5BTD0uKi9GSVBTQ0FOSVNURVJJTlRFUk5BTD0kZmlwc2NhbmlzdGVyaW50ZXJuYWwvOwoJcy9eQkFTRUFERFI9LiovQkFTRUFERFI9JGJhc2VhZGRyLzsKCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90YXJnZXQvOwoJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87CglzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKCWlmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwucyhbb2xdKVwuW15cLl0qJC8pCgkJewoJCW15ICRzb3RtcCA9ICQxOwoJCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAvOwoJCX0KCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBuZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5keWxpYiQvKQoJCXsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5keWxpYi87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0pXC5bXlwuXSpcLlteXC5dKiQvKQoJCXsKCQlteSAkc290bXAgPSAkMTsKCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX01BSk9SKSAucyRzb3RtcC87CgkJfQoJZWxzaWYgKCRzaGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5bXlwuXSpcLlteXC5dKlwuZHlsaWIkLykKCQl7CgkJcy9eU0hBUkVEX0xJQlNfTElOS19FWFRTPS4qL1NIQVJFRF9MSUJTX0xJTktfRVhUUz0uXCQoU0hMSUJfTUFKT1IpLmR5bGliIC5keWxpYi87CgkJfQoJcy9eU0hBUkVEX0xERkxBR1M9LiovU0hBUkVEX0xERkxBR1M9JHNoYXJlZF9sZGZsYWcvOwoJaWYgKCRmaXBzY2FuaXN0ZXJvbmx5ID09IDIgJiYgZXhpc3RzICRkaXNhYmxlZHsiZWMybSJ9KQoJCXsKCQluZXh0IGlmICgvZWMyXy8gfHwgL2JuX2dmMm0vKTsKCQl9CglwcmludCBPVVQgJF8uIlxuIjsKCX0KY2xvc2UoSU4pOwpjbG9zZShPVVQpOwpyZW5hbWUoJE1ha2VmaWxlLCIkTWFrZWZpbGUuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRNYWtlZmlsZVxuIiBpZiAtZSAkTWFrZWZpbGU7CnJlbmFtZSgiJE1ha2VmaWxlLm5ldyIsJE1ha2VmaWxlKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJE1ha2VmaWxlLm5ld1xuIjsKCnByaW50ICJDQyAgICAgICAgICAgID0kY2NcbiI7CnByaW50ICJDRkxBRyAgICAgICAgID0kY2ZsYWdzXG4iOwpwcmludCAiRVhfTElCUyAgICAgICA9JGxmbGFnc1xuIjsKcHJpbnQgIkNQVUlEX09CSiAgICAgPSRjcHVpZF9vYmpcbiI7CnByaW50ICJCTl9BU00gICAgICAgID0kYm5fb2JqXG4iOwpwcmludCAiREVTX0VOQyAgICAgICA9JGRlc19vYmpcbiI7CnByaW50ICJBRVNfRU5DICAgICAgID0kYWVzX29ialxuIjsKcHJpbnQgIkJGX0VOQyAgICAgICAgPSRiZl9vYmpcbiI7CnByaW50ICJDQVNUX0VOQyAgICAgID0kY2FzdF9vYmpcbiI7CnByaW50ICJSQzRfRU5DICAgICAgID0kcmM0X29ialxuIjsKcHJpbnQgIlJDNV9FTkMgICAgICAgPSRyYzVfb2JqXG4iOwpwcmludCAiTUQ1X09CSl9BU00gICA9JG1kNV9vYmpcbiI7CnByaW50ICJTSEExX09CSl9BU00gID0kc2hhMV9vYmpcbiI7CnByaW50ICJSTUQxNjBfT0JKX0FTTT0kcm1kMTYwX29ialxuIjsKcHJpbnQgIkNNTExfRU5DICAgICAgPSRjbWxsX29ialxuIjsKcHJpbnQgIk1PREVTX09CSiAgICAgPSRtb2Rlc19vYmpcbiI7CnByaW50ICJQUk9DRVNTT1IgICAgID0kcHJvY2Vzc29yXG4iOwpwcmludCAiUkFOTElCICAgICAgICA9JHJhbmxpYlxuIjsKcHJpbnQgIkFSRkxBR1MgICAgICAgPSRhcmZsYWdzXG4iOwpwcmludCAiUEVSTCAgICAgICAgICA9JHBlcmxcbiI7CnByaW50ICJLUkI1X0lOQ0xVREVTID0iLCR3aXRoYXJnc3sia3JiNS1pbmNsdWRlIn0sIlxuIgoJaWYgJHdpdGhhcmdzeyJrcmI1LWluY2x1ZGUifSBuZSAiIjsKCm15ICRkZXNfcHRyPTA7Cm15ICRkZXNfcmlzYzE9MDsKbXkgJGRlc19yaXNjMj0wOwpteSAkZGVzX3Vucm9sbD0wOwpteSAkYm5fbGw9MDsKbXkgJGRlZl9pbnQ9MjsKbXkgJHJjNF9pbnQ9JGRlZl9pbnQ7Cm15ICRtZDJfaW50PSRkZWZfaW50OwpteSAkaWRlYV9pbnQ9JGRlZl9pbnQ7Cm15ICRyYzJfaW50PSRkZWZfaW50OwpteSAkcmM0X2lkeD0wOwpteSAkcmM0X2NodW5rPTA7Cm15ICRiZl9wdHI9MDsKbXkgQHR5cGU9KCJjaGFyIiwic2hvcnQiLCJpbnQiLCJsb25nIik7Cm15ICgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApOwpteSAkZXhwb3J0X3Zhcl9hc19mbj0wOwoKbXkgJGRlc19pbnQ7Cgpmb3JlYWNoIChzb3J0IHNwbGl0KC9ccysvLCRibl9vcHMpKQoJewoJJGRlc19wdHI9MSBpZiAvREVTX1BUUi87CgkkZGVzX3Jpc2MxPTEgaWYgL0RFU19SSVNDMS87CgkkZGVzX3Jpc2MyPTEgaWYgL0RFU19SSVNDMi87CgkkZGVzX3Vucm9sbD0xIGlmIC9ERVNfVU5ST0xMLzsKCSRkZXNfaW50PTEgaWYgL0RFU19JTlQvOwoJJGJuX2xsPTEgaWYgL0JOX0xMT05HLzsKCSRyYzRfaW50PTAgaWYgL1JDNF9DSEFSLzsKCSRyYzRfaW50PTMgaWYgL1JDNF9MT05HLzsKCSRyYzRfaWR4PTEgaWYgL1JDNF9JTkRFWC87CgkkcmM0X2NodW5rPTEgaWYgL1JDNF9DSFVOSy87CgkkcmM0X2NodW5rPTIgaWYgL1JDNF9DSFVOS19MTC87CgkkbWQyX2ludD0wIGlmIC9NRDJfQ0hBUi87CgkkbWQyX2ludD0zIGlmIC9NRDJfTE9ORy87CgkkaWRlYV9pbnQ9MSBpZiAvSURFQV9TSE9SVC87CgkkaWRlYV9pbnQ9MyBpZiAvSURFQV9MT05HLzsKCSRyYzJfaW50PTEgaWYgL1JDMl9TSE9SVC87CgkkcmMyX2ludD0zIGlmIC9SQzJfTE9ORy87CgkkYmZfcHRyPTEgaWYgJF8gZXEgIkJGX1BUUiI7CgkkYmZfcHRyPTIgaWYgJF8gZXEgIkJGX1BUUjIiOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMSwwLDAsMCkgaWYgL1NJWFRZX0ZPVVJfQklULzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgxLDAsMCwwLDApIGlmIC9TSVhUWV9GT1VSX0JJVF9MT05HLzsKCSgkYjY0bCwkYjY0LCRiMzIsJGIxNiwkYjgpPSgwLDAsMSwwLDApIGlmIC9USElSVFlfVFdPX0JJVC87CgkoJGI2NGwsJGI2NCwkYjMyLCRiMTYsJGI4KT0oMCwwLDAsMSwwKSBpZiAvU0lYVEVFTl9CSVQvOwoJKCRiNjRsLCRiNjQsJGIzMiwkYjE2LCRiOCk9KDAsMCwwLDAsMSkgaWYgL0VJR0hUX0JJVC87CgkkZXhwb3J0X3Zhcl9hc19mbj0xIGlmIC9FWFBPUlRfVkFSX0FTX0ZOLzsKCX0KCm9wZW4oSU4sJzxjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbicpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgY3J5cHRvL29wZW5zc2xjb25mLmguaW46JCFcbiI7CnVubGluaygiY3J5cHRvL29wZW5zc2xjb25mLmgubmV3IikgfHwgZGllICJ1bmFibGUgdG8gcmVtb3ZlIG9sZCBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXc6JCFcbiIgaWYgLWUgImNyeXB0by9vcGVuc3NsY29uZi5oLm5ldyI7Cm9wZW4oT1VULCc+Y3J5cHRvL29wZW5zc2xjb25mLmgubmV3JykgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlIGNyeXB0by9vcGVuc3NsY29uZi5oLm5ldzokIVxuIjsKcHJpbnQgT1VUICIvKiBvcGVuc3NsY29uZi5oICovXG4iOwpwcmludCBPVVQgIi8qIFdBUk5JTkc6IEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gb3BlbnNzbGNvbmYuaC5pbiBieSBDb25maWd1cmUuICovXG5cbiI7CgpwcmludCBPVVQgIi8qIE9wZW5TU0wgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6ICovXG4iOwpteSAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lc190cmFucyA9ICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzOwokb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lcyA9fiBzL15ccyojXHMqZGVmaW5lXHMrT1BFTlNTTF9OT18oLiopLyNpZm5kZWYgT1BFTlNTTF9FWFBFUklNRU5UQUxfJDFcbiMgaWZuZGVmIE9QRU5TU0xfTk9fJDFcbiMgIGRlZmluZSBPUEVOU1NMX05PXyQxXG4jIGVuZGlmXG4jZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zID1+IHMvXlxzKiNccypkZWZpbmVccytPUEVOU1NMXyguKikvIyBpZiBkZWZpbmVkKE9QRU5TU0xfJDEpIFwmXCYgIWRlZmluZWQoJDEpXG4jICBkZWZpbmUgJDFcbiMgZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzID0gIiAgIC8qIG5vIGNpcGhlcnMgZXhjbHVkZWQgKi9cbiIgaWYgJG9wZW5zc2xfYWxnb3JpdGhtX2RlZmluZXMgZXEgIiI7CiRvcGVuc3NsX3RocmVhZF9kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX3N5c19kZWZpbmVzID1+IHMvXlxzKiNccypkZWZpbmVccysoLiopLyNpZm5kZWYgJDFcbiMgZGVmaW5lICQxXG4jZW5kaWYvbWc7CiRvcGVuc3NsX290aGVyX2RlZmluZXMgPX4gcy9eXHMqI1xzKmRlZmluZVxzKyguKikvI2lmbmRlZiAkMVxuIyBkZWZpbmUgJDFcbiNlbmRpZi9tZzsKcHJpbnQgT1VUICRvcGVuc3NsX3N5c19kZWZpbmVzOwpwcmludCBPVVQgIiNpZm5kZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5EXG5cbiI7CnByaW50IE9VVCAkb3BlbnNzbF9leHBlcmltZW50YWxfZGVmaW5lczsKcHJpbnQgT1VUICJcbiI7CnByaW50IE9VVCAkb3BlbnNzbF9hbGdvcml0aG1fZGVmaW5lczsKcHJpbnQgT1VUICJcbiNlbmRpZiAvKiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQgKi9cblxuIjsKcHJpbnQgT1VUICRvcGVuc3NsX3RocmVhZF9kZWZpbmVzOwpwcmludCBPVVQgJG9wZW5zc2xfb3RoZXJfZGVmaW5lcywiXG4iOwoKcHJpbnQgT1VUICIvKiBUaGUgT1BFTlNTTF9OT18qIG1hY3JvcyBhcmUgYWxzbyBkZWZpbmVkIGFzIE5PXyogaWYgdGhlIGFwcGxpY2F0aW9uXG4iOwpwcmludCBPVVQgIiAgIGFza3MgZm9yIGl0LiAgVGhpcyBpcyBhIHRyYW5zaWVudCBmZWF0dXJlIHRoYXQgaXMgcHJvdmlkZWQgZm9yIHRob3NlXG4iOwpwcmludCBPVVQgIiAgIHdobyBoYXZlbid0IGhhZCB0aGUgdGltZSB0byBkbyB0aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBpbiB0aGVpclxuIjsKcHJpbnQgT1VUICIgICBhcHBsaWNhdGlvbnMuICAqL1xuIjsKcHJpbnQgT1VUICIjaWZkZWYgT1BFTlNTTF9BTEdPUklUSE1fREVGSU5FU1xuIjsKcHJpbnQgT1VUICRvcGVuc3NsX2FsZ29yaXRobV9kZWZpbmVzX3RyYW5zOwpwcmludCBPVVQgIiNlbmRpZlxuXG4iOwoKcHJpbnQgT1VUICIjZGVmaW5lIE9QRU5TU0xfQ1BVSURfT0JKXG5cbiIgaWYgKCRjcHVpZF9vYmogbmUgIm1lbV9jbHIubyIpOwoKd2hpbGUgKDxJTj4pCgl7CglpZgkoL14jZGVmaW5lXHMrT1BFTlNTTERJUi8pCgkJewoJCW15ICRmb28gPSAkb3BlbnNzbGRpcjsKCQkkZm9vID1+IHMvXFwvXFxcXC9nOwoJCXByaW50IE9VVCAiI2RlZmluZSBPUEVOU1NMRElSIFwiJGZvb1wiXG4iOwoJCX0KCWVsc2lmCSgvXiNkZWZpbmVccytFTkdJTkVTRElSLykKCQl7CgkJbXkgJGZvbyA9ICIkcHJlZml4LyRsaWJkaXIvZW5naW5lcyI7CgkJJGZvbyA9fiBzL1xcL1xcXFwvZzsKCQlwcmludCBPVVQgIiNkZWZpbmUgRU5HSU5FU0RJUiBcIiRmb29cIlxuIjsKCQl9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OLykKCQl7IHByaW50ZiBPVVQgIiN1bmRlZiBPUEVOU1NMX0VYUE9SVF9WQVJfQVNfRlVOQ1RJT05cbiIKCQkJaWYgJGV4cG9ydF92YXJfYXNfZm47CgkJICBwcmludGYgT1VUICIjJXMgT1BFTlNTTF9FWFBPUlRfVkFSX0FTX0ZVTkNUSU9OXG4iLAoJCQkoJGV4cG9ydF92YXJfYXNfZm4pPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytPUEVOU1NMX1VOSVNURC8pCgkJewoJCSR1bmlzdGQgPSAiPHVuaXN0ZC5oPiIgaWYgJHVuaXN0ZCBlcSAiIjsKCQlwcmludCBPVVQgIiNkZWZpbmUgT1BFTlNTTF9VTklTVEQgJHVuaXN0ZFxuIjsKCQl9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrU0lYVFlfRk9VUl9CSVRfTE9ORy8pCgkJeyBwcmludGYgT1VUICIjJXMgU0lYVFlfRk9VUl9CSVRfTE9OR1xuIiwoJGI2NGwpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhUWV9GT1VSX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgU0lYVFlfRk9VUl9CSVRcbiIsKCRiNjQpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytUSElSVFlfVFdPX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgVEhJUlRZX1RXT19CSVRcbiIsKCRiMzIpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytTSVhURUVOX0JJVC8pCgkJeyBwcmludGYgT1VUICIjJXMgU0lYVEVFTl9CSVRcbiIsKCRiMTYpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytFSUdIVF9CSVQvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIEVJR0hUX0JJVFxuIiwoJGI4KT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL14jKChkZWZpbmUpfCh1bmRlZikpXHMrQk5fTExPTkdccyokLykKCQl7IHByaW50ZiBPVVQgIiMlcyBCTl9MTE9OR1xuIiwoJGJuX2xsKT8iZGVmaW5lIjoidW5kZWYiOyB9CgllbHNpZgkoL15cI2RlZmluZVxzK0RFU19MT05HXHMrLiovKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBERVNfTE9ORyB1bnNpZ25lZCAlc1xuIiwKCQkJKCRkZXNfaW50KT8naW50JzonbG9uZyc7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfUFRSLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUFRSXG4iLCgkZGVzX3B0cik/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eXCMoZGVmaW5lfHVuZGVmKVxzK0RFU19SSVNDMS8pCgkJeyBwcmludGYgT1VUICIjJXMgREVTX1JJU0MxXG4iLCgkZGVzX3Jpc2MxKT8nZGVmaW5lJzondW5kZWYnOyB9CgllbHNpZgkoL15cIyhkZWZpbmV8dW5kZWYpXHMrREVTX1JJU0MyLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfUklTQzJcbiIsKCRkZXNfcmlzYzIpPydkZWZpbmUnOid1bmRlZic7IH0KCWVsc2lmCSgvXlwjKGRlZmluZXx1bmRlZilccytERVNfVU5ST0xMLykKCQl7IHByaW50ZiBPVVQgIiMlcyBERVNfVU5ST0xMXG4iLCgkZGVzX3Vucm9sbCk/J2RlZmluZSc6J3VuZGVmJzsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK1JDNF9JTlRccy8pCgkJeyBwcmludGYgT1VUICIjZGVmaW5lIFJDNF9JTlQgdW5zaWduZWQgJXNcbiIsJHR5cGVbJHJjNF9pbnRdOyB9CgllbHNpZgkoL14jdW5kZWZccytSQzRfQ0hVTksvKQoJCXsKCQlwcmludGYgT1VUICIjdW5kZWYgUkM0X0NIVU5LXG4iIGlmICRyYzRfY2h1bms9PTA7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBSQzRfQ0hVTksgdW5zaWduZWQgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0xOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgUkM0X0NIVU5LIHVuc2lnbmVkIGxvbmcgbG9uZ1xuIiBpZiAkcmM0X2NodW5rPT0yOwoJCX0KCWVsc2lmCSgvXiMoKGRlZmluZSl8KHVuZGVmKSlccytSQzRfSU5ERVgvKQoJCXsgcHJpbnRmIE9VVCAiIyVzIFJDNF9JTkRFWFxuIiwoJHJjNF9pZHgpPyJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmICgvXiMoZGVmaW5lfHVuZGVmKVxzK0kzODZfT05MWS8pCgkJeyBwcmludGYgT1VUICIjJXMgSTM4Nl9PTkxZXG4iLCAoJHByb2Nlc3NvciBlcSAiMzg2Iik/CgkJCSJkZWZpbmUiOiJ1bmRlZiI7IH0KCWVsc2lmCSgvXiNkZWZpbmVccytNRDJfSU5UXHMvKQoJCXsgcHJpbnRmIE9VVCAiI2RlZmluZSBNRDJfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRtZDJfaW50XTsgfQoJZWxzaWYJKC9eI2RlZmluZVxzK0lERUFfSU5UXHMvKQoJCXtwcmludGYgT1VUICIjZGVmaW5lIElERUFfSU5UIHVuc2lnbmVkICVzXG4iLCR0eXBlWyRpZGVhX2ludF07fQoJZWxzaWYJKC9eI2RlZmluZVxzK1JDMl9JTlRccy8pCgkJe3ByaW50ZiBPVVQgIiNkZWZpbmUgUkMyX0lOVCB1bnNpZ25lZCAlc1xuIiwkdHlwZVskcmMyX2ludF07fQoJZWxzaWYgKC9eIyhkZWZpbmV8dW5kZWYpXHMrQkZfUFRSLykKCQl7CgkJcHJpbnRmIE9VVCAiI3VuZGVmIEJGX1BUUlxuIiBpZiAkYmZfcHRyID09IDA7CgkJcHJpbnRmIE9VVCAiI2RlZmluZSBCRl9QVFJcbiIgaWYgJGJmX3B0ciA9PSAxOwoJCXByaW50ZiBPVVQgIiNkZWZpbmUgQkZfUFRSMlxuIiBpZiAkYmZfcHRyID09IDI7CgkgICAgICAgIH0KCWVsc2UKCQl7IHByaW50IE9VVCAkXzsgfQoJfQpjbG9zZShJTik7CmNsb3NlKE9VVCk7CnJlbmFtZSgiY3J5cHRvL29wZW5zc2xjb25mLmgiLCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5iYWsiKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgY3J5cHRvL29wZW5zc2xjb25mLmhcbiIgaWYgLWUgImNyeXB0by9vcGVuc3NsY29uZi5oIjsKcmVuYW1lKCJjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXciLCJjcnlwdG8vb3BlbnNzbGNvbmYuaCIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbmFtZSBjcnlwdG8vb3BlbnNzbGNvbmYuaC5uZXdcbiI7CgoKIyBGaXggdGhlIGRhdGUKCnByaW50ICJTSVhUWV9GT1VSX0JJVF9MT05HIG1vZGVcbiIgaWYgJGI2NGw7CnByaW50ICJTSVhUWV9GT1VSX0JJVCBtb2RlXG4iIGlmICRiNjQ7CnByaW50ICJUSElSVFlfVFdPX0JJVCBtb2RlXG4iIGlmICRiMzI7CnByaW50ICJTSVhURUVOX0JJVCBtb2RlXG4iIGlmICRiMTY7CnByaW50ICJFSUdIVF9CSVQgbW9kZVxuIiBpZiAkYjg7CnByaW50ICJERVNfUFRSIHVzZWRcbiIgaWYgJGRlc19wdHI7CnByaW50ICJERVNfUklTQzEgdXNlZFxuIiBpZiAkZGVzX3Jpc2MxOwpwcmludCAiREVTX1JJU0MyIHVzZWRcbiIgaWYgJGRlc19yaXNjMjsKcHJpbnQgIkRFU19VTlJPTEwgdXNlZFxuIiBpZiAkZGVzX3Vucm9sbDsKcHJpbnQgIkRFU19JTlQgdXNlZFxuIiBpZiAkZGVzX2ludDsKcHJpbnQgIkJOX0xMT05HIG1vZGVcbiIgaWYgJGJuX2xsOwpwcmludCAiUkM0IHVzZXMgdSR0eXBlWyRyYzRfaW50XVxuIiBpZiAkcmM0X2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIlJDNF9JTkRFWCBtb2RlXG4iIGlmICRyYzRfaWR4OwpwcmludCAiUkM0X0NIVU5LIGlzIHVuZGVmaW5lZFxuIiBpZiAkcmM0X2NodW5rPT0wOwpwcmludCAiUkM0X0NIVU5LIGlzIHVuc2lnbmVkIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MTsKcHJpbnQgIlJDNF9DSFVOSyBpcyB1bnNpZ25lZCBsb25nIGxvbmdcbiIgaWYgJHJjNF9jaHVuaz09MjsKcHJpbnQgIk1EMiB1c2VzIHUkdHlwZVskbWQyX2ludF1cbiIgaWYgJG1kMl9pbnQgIT0gJGRlZl9pbnQ7CnByaW50ICJJREVBIHVzZXMgdSR0eXBlWyRpZGVhX2ludF1cbiIgaWYgJGlkZWFfaW50ICE9ICRkZWZfaW50OwpwcmludCAiUkMyIHVzZXMgdSR0eXBlWyRyYzJfaW50XVxuIiBpZiAkcmMyX2ludCAhPSAkZGVmX2ludDsKcHJpbnQgIkJGX1BUUiB1c2VkXG4iIGlmICRiZl9wdHIgPT0gMTsgCnByaW50ICJCRl9QVFIyIHVzZWRcbiIgaWYgJGJmX3B0ciA9PSAyOyAKCmlmKCRJc01LMU1GKSB7CglvcGVuIChPVVQsIj5jcnlwdG8vYnVpbGRpbmYuaCIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiBidWlsZGluZi5oIjsKCXByaW50ZiBPVVQgPDxFT0Y7CiNpZm5kZWYgTUsxTUZfQlVJTEQKICAvKiBhdXRvLWdlbmVyYXRlZCBieSBDb25maWd1cmUgZm9yIGNyeXB0by9jdmVyc2lvbi5jOgogICAqIGZvciBVbml4IGJ1aWxkcywgY3J5cHRvL01ha2VmaWxlLnNzbCBnZW5lcmF0ZXMgZnVuY3Rpb25hbCBkZWZpbml0aW9uczsKICAgKiBXaW5kb3dzIGJ1aWxkcyAoYW5kIG90aGVyIG1rMW1mIGJ1aWxkcykgY29tcGlsZSBjdmVyc2lvbi5jIHdpdGgKICAgKiAtRE1LMU1GX0JVSUxEIGFuZCB1c2UgZGVmaW5pdGlvbnMgYWRkZWQgdG8gdGhpcyBmaWxlIGJ5IHV0aWwvbWsxbWYucGwuICovCiAgI2Vycm9yICJXaW5kb3dzIGJ1aWxkcyAoUExBVEZPUk09JHRhcmdldCkgdXNlIG1rMW1mLnBsLWNyZWF0ZWQgTWFrZWZpbGVzIgojZW5kaWYKRU9GCgljbG9zZShPVVQpOwp9IGVsc2UgewoJbXkgJG1ha2VfY29tbWFuZCA9ICIkbWFrZSBQRVJMPVwnJHBlcmxcJyI7CglteSAkbWFrZV90YXJnZXRzID0gIiI7CgkkbWFrZV90YXJnZXRzIC49ICIgbGlua3MiIGlmICRzeW1saW5rOwoJJG1ha2VfdGFyZ2V0cyAuPSAiIGRlcGVuZCIgaWYgJGRlcGZsYWdzIG5lICRkZWZhdWx0X2RlcGZsYWdzICYmICRtYWtlX2RlcGVuZDsKCSRtYWtlX3RhcmdldHMgLj0gIiBnZW50ZXN0cyIgaWYgJHN5bWxpbms7Cgkoc3lzdGVtICRtYWtlX2NvbW1hbmQuJG1ha2VfdGFyZ2V0cykgPT0gMCBvciBleGl0ICQ/CgkJaWYgJG1ha2VfdGFyZ2V0cyBuZSAiIjsKCWlmICggJGZpcHNjYW5pc3Rlcm9ubHkgKQoJCXt9CgllbHNpZiAoICRwZXJsID1+IG1AXi9AKSB7CgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCRwZXJsLCdeIyEvJywgJyMhJXMnLCdebXkgXCRkaXI7JCcsICdteSAkZGlyID0gIicgLiAkb3BlbnNzbGRpciAuICciOycsICdebXkgXCRwcmVmaXg7JCcsICdteSAkcHJlZml4ID0gIicgLiAkcHJlZml4IC4gJyI7Jyk7CgkgICAgJmRvZmlsZSgiYXBwcy9DQS5wbCIsJHBlcmwsJ14jIS8nLCAnIyElcycpOwoJfSBlbHNlIHsKCSAgICAjIE5vIHBhdGggZm9yIFBlcmwga25vd24gLi4uCgkgICAgJmRvZmlsZSgidG9vbHMvY19yZWhhc2giLCcvdXNyL2xvY2FsL2Jpbi9wZXJsJywnXiMhLycsICcjISVzJywnXm15IFwkZGlyOyQnLCAnbXkgJGRpciA9ICInIC4gJG9wZW5zc2xkaXIgLiAnIjsnLCAgJ15teSBcJHByZWZpeDskJywgJ215ICRwcmVmaXggPSAiJyAuICRwcmVmaXggLiAnIjsnKTsKCSAgICAmZG9maWxlKCJhcHBzL0NBLnBsIiwnL3Vzci9sb2NhbC9iaW4vcGVybCcsJ14jIS8nLCAnIyElcycpOwoJfQoJaWYgKCRkZXBmbGFncyBuZSAkZGVmYXVsdF9kZXBmbGFncyAmJiAhJG1ha2VfZGVwZW5kICYmICRmaXBzY2FuaXN0ZXJvbmx5ICE9IDIpIHsKCQlwcmludCA8PEVPRjsKClNpbmNlIHlvdSd2ZSBkaXNhYmxlZCBvciBlbmFibGVkIGF0IGxlYXN0IG9uZSBhbGdvcml0aG0sIHlvdSBuZWVkIHRvIGRvCnRoZSBmb2xsb3dpbmcgYmVmb3JlIGJ1aWxkaW5nOgoKCW1ha2UgZGVwZW5kCkVPRgoJfQp9CgojIGNyZWF0ZSB0aGUgbXMvdmVyc2lvbjMyLnJjIGZpbGUgaWYgbmVlZGVkCmlmICgkSXNNSzFNRiAmJiAoJHRhcmdldCAhfiAvXm5ldHdhcmUvKSkgewoJbXkgKCR2MSwgJHYyLCAkdjMsICR2NCk7CglpZiAoJHZlcnNpb25fbnVtID1+IC8oXlswLTlhLWZdezF9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KS9pKSB7CgkJJHYxPWhleCAkMTsKCQkkdjI9aGV4ICQyOwoJCSR2Mz1oZXggJDM7CgkJJHY0PWhleCAkNDsKCX0KCW9wZW4gKE9VVCwiPm1zL3ZlcnNpb24zMi5yYyIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiBtcy92ZXJzaW9uMzIucmMiOwoJcHJpbnQgT1VUIDw8RU9GOwojaW5jbHVkZSA8d2ludmVyLmg+CgpMQU5HVUFHRSAweDA5LDB4MDEKCjEgVkVSU0lPTklORk8KICBGSUxFVkVSU0lPTiAkdjEsJHYyLCR2MywkdjQKICBQUk9EVUNUVkVSU0lPTiAkdjEsJHYyLCR2MywkdjQKICBGSUxFRkxBR1NNQVNLIDB4M2ZMCiNpZmRlZiBfREVCVUcKICBGSUxFRkxBR1MgMHgwMUwKI2Vsc2UKICBGSUxFRkxBR1MgMHgwMEwKI2VuZGlmCiAgRklMRU9TIFZPU19fV0lORE9XUzMyCiAgRklMRVRZUEUgVkZUX0RMTAogIEZJTEVTVUJUWVBFIDB4MEwKQkVHSU4KICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKICAgIEJFR0lOCglCTE9DSyAiMDQwOTA0YjAiCglCRUdJTgojaWYgZGVmaW5lZChGSVBTKQoJICAgIFZBTFVFICJDb21tZW50cyIsICJXQVJOSU5HOiBURVNUIFZFUlNJT04gT05MWSAqKipOT1QqKiogRklQUyAxNDAtMiBWQUxJREFURUQuXFwwIgojZW5kaWYKCSAgICAvLyBSZXF1aXJlZDoJICAgIAoJICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJUaGUgT3BlblNTTCBQcm9qZWN0LCBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL1xcMCIKI2lmIGRlZmluZWQoRklQUykKCSAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIlRFU1QgVU5WQUxJREFURUQgRklQUzE0MC0yIERMTFxcMCIKI2Vsc2UKCSAgICBWQUxVRSAiRmlsZURlc2NyaXB0aW9uIiwgIk9wZW5TU0wgU2hhcmVkIExpYnJhcnlcXDAiCiNlbmRpZgoJICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIkdmVyc2lvblxcMCIKI2lmIGRlZmluZWQoQ1JZUFRPKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGliZWF5MzJcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGliZWF5MzIuZGxsXFwwIgojZWxpZiBkZWZpbmVkKFNTTCkKCSAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgInNzbGVheTMyXFwwIgoJICAgIFZBTFVFICJPcmlnaW5hbEZpbGVuYW1lIiwgInNzbGVheTMyLmRsbFxcMCIKI2VsaWYgZGVmaW5lZChGSVBTKQoJICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAibGlib3NzbGZpcHNcXDAiCgkgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAibGlib3NzbGZpcHMuZGxsXFwwIgojZW5kaWYKCSAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiVGhlIE9wZW5TU0wgVG9vbGtpdFxcMCIKCSAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCAiJHZlcnNpb25cXDAiCgkgICAgLy8gT3B0aW9uYWw6CgkgICAgLy9WQUxVRSAiQ29tbWVudHMiLCAiXFwwIgoJICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSAxOTk4LTIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gQ29weXJpZ2h0IKkgMTk5NS0xOTk4IEVyaWMgQS4gWW91bmcsIFRpbSBKLiBIdWRzb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFwwIgoJICAgIC8vVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcXDAiCgkgICAgLy9WQUxVRSAiUHJpdmF0ZUJ1aWxkIiwgIlxcMCIKCSAgICAvL1ZBTFVFICJTcGVjaWFsQnVpbGQiLCAiXFwwIgoJRU5ECiAgICBFTkQKICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKICAgIEJFR0lOCiAgICAgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDB4NGIwCiAgICBFTkQKRU5ECkVPRgoJY2xvc2UoT1VUKTsKICB9CiAgCnByaW50IDw8RU9GOwoKQ29uZmlndXJlZCBmb3IgJHRhcmdldC4KRU9GCgpwcmludCA8PFxFT0YgaWYgKCEkbm9fdGhyZWFkcyAmJiAhJHRocmVhZHMpOwoKVGhlIGxpYnJhcnkgY291bGQgbm90IGJlIGNvbmZpZ3VyZWQgZm9yIHN1cHBvcnRpbmcgbXVsdGktdGhyZWFkZWQKYXBwbGljYXRpb25zIGFzIHRoZSBjb21waWxlciBvcHRpb25zIHJlcXVpcmVkIG9uIHRoaXMgc3lzdGVtIGFyZSBub3Qga25vd24uClNlZSBmaWxlIElOU1RBTEwgZm9yIGRldGFpbHMgaWYgeW91IG5lZWQgbXVsdGktdGhyZWFkaW5nLgpFT0YKCnByaW50IDw8XEVPRiBpZiAoJG5vX3NoYXJlZF93YXJuKTsKCllvdSBnYXZlIHRoZSBvcHRpb24gJ3NoYXJlZCcuICBOb3JtYWxseSwgdGhhdCB3b3VsZCBnaXZlIHlvdSBzaGFyZWQgbGlicmFyaWVzLgpVbmZvcnR1bmF0ZWx5LCB0aGUgT3BlblNTTCBjb25maWd1cmF0aW9uIGRvZXNuJ3QgaW5jbHVkZSBzaGFyZWQgbGlicmFyeSBzdXBwb3J0CmZvciB0aGlzIHBsYXRmb3JtIHlldCwgc28gaXQgd2lsbCBwcmV0ZW5kIHlvdSBnYXZlIHRoZSBvcHRpb24gJ25vLXNoYXJlZCcuICBJZgp5b3UgY2FuIGluZm9ybSB0aGUgZGV2ZWxvcHBlcnMgKG9wZW5zc2wtZGV2XEBvcGVuc3NsLm9yZykgaG93IHRvIHN1cHBvcnQgc2hhcmVkCmxpYnJhcmllcyBvbiB0aGlzIHBsYXRmb3JtLCB0aGV5IHdpbGwgYXQgbGVhc3QgbG9vayBhdCBpdCBhbmQgdHJ5IHRoZWlyIGJlc3QKKGJ1dCBwbGVhc2UgZmlyc3QgbWFrZSBzdXJlIHlvdSBoYXZlIHRyaWVkIHdpdGggYSBjdXJyZW50IHZlcnNpb24gb2YgT3BlblNTTCkuCkVPRgoKcHJpbnQgPDxcRU9GIGlmICgkZmlwc2NhbmlzdGVyaW50ZXJuYWwgZXEgInkiKTsKCldBUk5JTkc6IE9wZW5TU0wgaGFzIGJlZW4gY29uZmlndXJlZCB1c2luZyB1bnN1cHBvcnRlZCBvcHRpb24ocykgdG8gaW50ZXJuYWxseQpnZW5lcmF0ZSBhIGZpcHNjYW5pc3Rlci5vIG9iamVjdCBtb2R1bGUgZm9yIFRFU1RJTkcgUFVSUE9TRVMgT05MWTsgdGhhdApjb21waWxlZCBtb2R1bGUgaXMgTk9UIEZJUFMgMTQwLTIgdmFsaWRhdGVkIGFuZCBDQU5OT1QgYmUgdXNlZCB0byByZXBsYWNlIHRoZQpPcGVuU1NMIEZJUFMgT2JqZWN0IE1vZHVsZSBhcyBpZGVudGlmaWVkIGJ5IHRoZSBDTVZQCihodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC8pIGluIGFueSBhcHBsaWNhdGlvbiByZXF1aXJpbmcgdGhlIHVzZSBvZiBGSVBTCjE0MC0yIHZhbGlkYXRlZCBzb2Z0d2FyZS4gCgpUaGlzIGlzIGEgdGVzdCBPcGVuU1NMIDIuMCBGSVBTIG1vZHVsZS4KClNlZSB0aGUgZmlsZSBSRUFETUUuRklQUyBmb3IgZGV0YWlscyBvZiBob3cgdG8gYnVpbGQgYSB0ZXN0IGxpYnJhcnkuCgpFT0YKCmV4aXQoMCk7CgpzdWIgdXNhZ2UKCXsKCXByaW50IFNUREVSUiAkdXNhZ2U7CglwcmludCBTVERFUlIgIlxucGljayBvcy9jb21waWxlciBmcm9tOlxuIjsKCW15ICRqPTA7CglteSAkaTsKICAgICAgICBteSAkaz0wOwoJZm9yZWFjaCAkaSAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJbmV4dCBpZiAkaSA9fiAvXmRlYnVnLzsKCQkkayArPSBsZW5ndGgoJGkpICsgMTsKCQlpZiAoJGsgPiA3OCkKCQkJewoJCQlwcmludCBTVERFUlIgIlxuIjsKCQkJJGs9bGVuZ3RoKCRpKTsKCQkJfQoJCXByaW50IFNUREVSUiAkaSAuICIgIjsKCQl9Cglmb3JlYWNoICRpIChzb3J0IGtleXMgJXRhYmxlKQoJCXsKCQluZXh0IGlmICRpICF+IC9eZGVidWcvOwoJCSRrICs9IGxlbmd0aCgkaSkgKyAxOwoJCWlmICgkayA+IDc4KQoJCQl7CgkJCXByaW50IFNUREVSUiAiXG4iOwoJCQkkaz1sZW5ndGgoJGkpOwoJCQl9CgkJcHJpbnQgU1RERVJSICRpIC4gIiAiOwoJCX0KCXByaW50IFNUREVSUiAiXG5cbk5PVEU6IElmIGluIGRvdWJ0LCBvbiBVbml4LWlzaCBzeXN0ZW1zIHVzZSAnLi9jb25maWcnLlxuIjsKCWV4aXQoMSk7Cgl9CgpzdWIgd2hpY2gKCXsKCW15KCRuYW1lKT1AXzsKCW15ICRwYXRoOwoJZm9yZWFjaCAkcGF0aCAoc3BsaXQgLzovLCAkRU5We1BBVEh9KQoJCXsKCQlpZiAoLWYgIiRwYXRoLyRuYW1lJGV4ZV9leHQiIGFuZCAteCBfKQoJCQl7CgkJCXJldHVybiAiJHBhdGgvJG5hbWUkZXhlX2V4dCIgdW5sZXNzICgkbmFtZSBlcSAicGVybCIgYW5kCgkJCSBzeXN0ZW0oIiRwYXRoLyRuYW1lJGV4ZV9leHQgLWUgIiAuICdcJ2V4aXQoJF08NS4wKTtcJycpKTsKCQkJfQoJCX0KCX0KCnN1YiBkb2ZpbGUKCXsKCW15ICRmOyBteSAkcDsgbXkgJW07IG15IEBhOyBteSAkazsgbXkgJGZmOwoJKCRmLCRwLCVtKT1AXzsKCglvcGVuKElOLCI8JGYuaW4iKSB8fCBvcGVuKElOLCI8JGYiKSB8fCBkaWUgInVuYWJsZSB0byBvcGVuICRmOiQhXG4iOwoJQGE9PElOPjsKCWNsb3NlKElOKTsKCWZvcmVhY2ggJGsgKGtleXMgJW0pCgkJewoJCWdyZXAoLyRrLyAmJiAoJF89c3ByaW50ZigkbXska30uIlxuIiwkcCkpLEBhKTsKCQl9CglvcGVuKE9VVCwiPiRmLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIG9wZW4gJGYubmV3OiQhXG4iOwoJcHJpbnQgT1VUIEBhOwoJY2xvc2UoT1VUKTsKCXJlbmFtZSgkZiwiJGYuYmFrIikgfHwgZGllICJ1bmFibGUgdG8gcmVuYW1lICRmXG4iIGlmIC1lICRmOwoJcmVuYW1lKCIkZi5uZXciLCRmKSB8fCBkaWUgInVuYWJsZSB0byByZW5hbWUgJGYubmV3XG4iOwoJfQoKc3ViIHByaW50X3RhYmxlX2VudHJ5Cgl7CglteSAkdGFyZ2V0ID0gc2hpZnQ7CgoJKG15ICRjYyxteSAkY2ZsYWdzLG15ICR1bmlzdGQsbXkgJHRocmVhZF9jZmxhZyxteSAkc3lzX2lkLG15ICRsZmxhZ3MsCglteSAkYm5fb3BzLG15ICRjcHVpZF9vYmosbXkgJGJuX29iaixteSAkZGVzX29iaixteSAkYWVzX29iaiwgbXkgJGJmX29iaiwKCW15ICRtZDVfb2JqLG15ICRzaGExX29iaixteSAkY2FzdF9vYmosbXkgJHJjNF9vYmosbXkgJHJtZDE2MF9vYmosCglteSAkcmM1X29iaixteSAkd3Bfb2JqLG15ICRjbWxsX29iaixteSAkbW9kZXNfb2JqLG15ICRwZXJsYXNtX3NjaGVtZSxteSAkZHNvX3NjaGVtZSxteSAkc2hhcmVkX3RhcmdldCxteSAkc2hhcmVkX2NmbGFnLAoJbXkgJHNoYXJlZF9sZGZsYWcsbXkgJHNoYXJlZF9leHRlbnNpb24sbXkgJHJhbmxpYixteSAkYXJmbGFncyxteSAkbXVsdGlsaWIpPQoJc3BsaXQoL1xzKjpccyovLCR0YWJsZXskdGFyZ2V0fSAuICI6IiB4IDMwICwgLTEpOwoJCQkKCXByaW50IDw8RU9GCgoqKiogJHRhcmdldApcJGNjICAgICAgICAgICA9ICRjYwpcJGNmbGFncyAgICAgICA9ICRjZmxhZ3MKXCR1bmlzdGQgICAgICAgPSAkdW5pc3RkClwkdGhyZWFkX2NmbGFnID0gJHRocmVhZF9jZmxhZwpcJHN5c19pZCAgICAgICA9ICRzeXNfaWQKXCRsZmxhZ3MgICAgICAgPSAkbGZsYWdzClwkYm5fb3BzICAgICAgID0gJGJuX29wcwpcJGNwdWlkX29iaiAgICA9ICRjcHVpZF9vYmoKXCRibl9vYmogICAgICAgPSAkYm5fb2JqClwkZGVzX29iaiAgICAgID0gJGRlc19vYmoKXCRhZXNfb2JqICAgICAgPSAkYWVzX29iagpcJGJmX29iaiAgICAgICA9ICRiZl9vYmoKXCRtZDVfb2JqICAgICAgPSAkbWQ1X29iagpcJHNoYTFfb2JqICAgICA9ICRzaGExX29iagpcJGNhc3Rfb2JqICAgICA9ICRjYXN0X29iagpcJHJjNF9vYmogICAgICA9ICRyYzRfb2JqClwkcm1kMTYwX29iaiAgID0gJHJtZDE2MF9vYmoKXCRyYzVfb2JqICAgICAgPSAkcmM1X29iagpcJHdwX29iaiAgICAgICA9ICR3cF9vYmoKXCRjbWxsX29iaiAgICAgPSAkY21sbF9vYmoKXCRtb2Rlc19vYmogICAgPSAkbW9kZXNfb2JqClwkcGVybGFzbV9zY2hlbWUgPSAkcGVybGFzbV9zY2hlbWUKXCRkc29fc2NoZW1lICAgPSAkZHNvX3NjaGVtZQpcJHNoYXJlZF90YXJnZXQ9ICRzaGFyZWRfdGFyZ2V0Clwkc2hhcmVkX2NmbGFnID0gJHNoYXJlZF9jZmxhZwpcJHNoYXJlZF9sZGZsYWcgPSAkc2hhcmVkX2xkZmxhZwpcJHNoYXJlZF9leHRlbnNpb24gPSAkc2hhcmVkX2V4dGVuc2lvbgpcJHJhbmxpYiAgICAgICA9ICRyYW5saWIKXCRhcmZsYWdzICAgICAgPSAkYXJmbGFncwpcJG11bHRpbGliICAgICA9ICRtdWx0aWxpYgpFT0YKCX0KCnN1YiB0ZXN0X3Nhbml0eQoJewoJbXkgJGVycm9yY250ID0gMDsKCglwcmludCBTVERFUlIgIj0iIHggNzAsICJcbiI7CglwcmludCBTVERFUlIgIj09PSBTQU5JVFkgVEVTVElORyFcbiI7CglwcmludCBTVERFUlIgIj09PSBObyBjb25maWd1cmF0aW9uIHdpbGwgYmUgZG9uZSwgYWxsIG90aGVyIGFyZ3VtZW50cyB3aWxsIGJlIGlnbm9yZWQhXG4iOwoJcHJpbnQgU1RERVJSICI9IiB4IDcwLCAiXG4iOwoKCWZvcmVhY2ggJHRhcmdldCAoc29ydCBrZXlzICV0YWJsZSkKCQl7CgkJQGZpZWxkcyA9IHNwbGl0KC9ccyo6XHMqLywkdGFibGV7JHRhcmdldH0gLiAiOiIgeCAzMCAsIC0xKTsKCgkJaWYgKCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lLTFdID1+IC9eKGJlb3N8ZGx8ZGxmY258d2luMzJ8dm1zKSQvKQoJCQl7CgkJCSRlcnJvcmNudCsrOwoJCQlwcmludCBTVERFUlIgIlNBTklUWSBFUlJPUjogJyR0YXJnZXQnIGhhcyB0aGUgZHNvX3NjaGVtZSBbJGlkeF9kc29fc2NoZW1lXSB2YWx1ZXNcbiI7CgkJCXByaW50IFNUREVSUiAiICAgICAgICAgICAgICBpbiB0aGUgcHJldmlvdXMgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWUrMV0gPX4gL14oYmVvc3xkbHxkbGZjbnx3aW4zMnx2bXMpJC8pCgkJCXsKCQkJJGVycm9yY250Kys7CgkJCXByaW50IFNUREVSUiAiU0FOSVRZIEVSUk9SOiAnJHRhcmdldCcgaGFzIHRoZSBkc29fc2NoZW1lIFskaWR4X2Rzb19zY2hlbWVdIHZhbHVlc1xuIjsKCQkJcHJpbnQgU1RERVJSICIgICAgICAgICAgICAgIGluIHRoZSBmb2xsb3dpbmcgZmllbGRcbiI7CgkJCX0KCQllbHNpZiAoJGZpZWxkc1skaWR4X2Rzb19zY2hlbWVdICF+IC9eKGJlb3N8ZGx8ZGxmY258d2luMzJ8dm1zfCkkLykKCQkJewoJCQkkZXJyb3JjbnQrKzsKCQkJcHJpbnQgU1RERVJSICJTQU5JVFkgRVJST1I6ICckdGFyZ2V0JyBoYXMgdGhlIGRzb19zY2hlbWUgWyRpZHhfZHNvX3NjaGVtZV0gZmllbGQgPSAiLCRmaWVsZHNbJGlkeF9kc29fc2NoZW1lXSwiXG4iOwoJCQlwcmludCBTVERFUlIgIiAgICAgICAgICAgICAgdmFsaWQgdmFsdWVzIGFyZSAnYmVvcycsICdkbCcsICdkbGZjbicsICd3aW4zMicgYW5kICd2bXMnXG4iOwoJCQl9CgkJfQoJcHJpbnQgU1RERVJSICJObyBzYW5pdHkgZXJyb3JzIGRldGVjdGVkIVxuIiBpZiAkZXJyb3JjbnQgPT0gMDsKCXJldHVybiAkZXJyb3JjbnQ7Cgl9Cg==