IyBjVVJML2xpYmN1cmwgQ01ha2Ugc2NyaXB0CiMgYnkgVGV0ZXRlc3QgYW5kIFN1a2VuZGVyIChCZW5vaXQgTmVpbCkKCiMgVE9ETzoKIyBUaGUgb3V0cHV0IC5zbyBmaWxlIGxhY2tzIHRoZSBzb25hbWUgbnVtYmVyIHdoaWNoIHdlIGN1cnJlbnRseSBoYXZlIHdpdGhpbiB0aGUgbGliL01ha2VmaWxlLmFtIGZpbGUKIyBBZGQgZnVsbCAoNCBvciA1IGxpYnMpIFNTTCBzdXBwb3J0CiMgQWRkIElOU1RBTEwgdGFyZ2V0IChFWFRSQV9ESVNUIHZhcmlhYmxlcyBpbiBNYWtlZmlsZS5hbSBtYXkgYmUgbW92ZWQgdG8gTWFrZWZpbGUuaW5jIHNvIHRoYXQgQ01ha2UvQ1BhY2sgaXMgYXdhcmUgb2Ygd2hhdCdzIHRvIGluY2x1ZGUpLgojIEFkZCBDVGVzdHMoPykKIyBDaGVjayBvbiBhbGwgcG9zc2libGUgcGxhdGZvcm1zCiMgVGVzdCB3aXRoIGFzIG1hbnkgY29uZmlndXJhdGlvbnMgcG9zc2libGUgKFdpdGggb3Igd2l0aG91dCBhbnkgb3B0aW9uKQojIENyZWF0ZSBzY3JpcHRzIHRoYXQgaGVscCBrZWVwaW5nIHRoZSBDTWFrZSBidWlsZCBzeXN0ZW0gdXAgdG8gZGF0ZSAodG8gcmVkdWNlIG1haW50ZW5hbmNlKS4gQWNjb3JkaW5nIHRvIFRldGV0ZXN0OgojICAtIGxpc3RzIG9mIGhlYWRlcnMgdGhhdCAnY29uZmlndXJlJyBjaGVja3MgZm9yOwojICAtIGN1cmwtc3BlY2lmaWMgdGVzdHMgKHRoZSBvbmVzIHRoYXQgYXJlIGluIG00L2N1cmwtKi5tNCBmaWxlcyk7CiMgIC0gKG1vc3Qgb2J2aW91cyB0aGluZzopIGN1cmwgdmVyc2lvbiBudW1iZXJzLgojIEFkZCBkb2N1bWVudGF0aW9uIHN1YnByb2plY3QKIwojIFRvIGNoZWNrOgojIChGcm9tIERhbmllbCBTdGVuYmVyZykgVGhlIGNtYWtlIGJ1aWxkIHNlbGVjdGVkIHRvIHJ1biBnY2Mgd2l0aCAtZlBJQyBvbiBteSBib3ggd2hpbGUgdGhlIHBsYWluIGNvbmZpZ3VyZSBzY3JpcHQgZGlkIG5vdC4KIyAoRnJvbSBEYW5pZWwgU3RlbmJlcmcpIFRoZSBnY2MgY29tbWFuZCBsaW5lIHVzZSBuZWl0aGVyIC1nIG5vciBhbnkgLU8gb3B0aW9ucy4gQXMgYSBkZXZlbG9wZXIsIEkgYWxzbyB0cmVhc3VyZSBvdXIgY29uZmlndXJlIHNjcmlwdHMncyAtLWVuYWJsZS1kZWJ1ZyBvcHRpb24gdGhhdCBzZXRzIGEgbG9uZyByYW5nZSBvZiAicGlja3kiIGNvbXBpbGVyIG9wdGlvbnMuCgpDTUFLRV9NSU5JTVVNX1JFUVVJUkVEKFZFUlNJT04gMi42LjIgRkFUQUxfRVJST1IpClNFVChDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L0NNYWtlOyR7Q01BS0VfTU9EVUxFX1BBVEh9IikKSU5DTFVERShVdGlsaXRpZXMpCgpwcm9qZWN0KCBDVVJMIEMgKQpTRVQoQ1VSTF9NQUpPUl9WRVJTSU9OIDcpClNFVChDVVJMX01JTk9SX1ZFUlNJT04gMTkpClNFVChDVVJMX1BBVENIX1ZFUlNJT04gNCkKCklOQ0xVREVfUkVHVUxBUl9FWFBSRVNTSU9OKCJeLiokIikgICAgIyBTdWtlbmRlcjogSXMgaXQgbmVjZXNzYXJ5PwoKIyBTZXR1cCBwYWNrYWdlIG1ldGEtZGF0YQojIFNFVChQQUNLQUdFICJjdXJsIikKU0VUKENVUkxfVkVSU0lPTiAke0NVUkxfTUFKT1JfVkVSU0lPTn0uJHtDVVJMX01JTk9SX1ZFUlNJT059LiR7Q1VSTF9QQVRDSF9WRVJTSU9OfSkKIyBTRVQoUEFDS0FHRV9UQVJOQU1FICJjdXJsIikKIyBTRVQoUEFDS0FHRV9OQU1FICJjdXJsIikKIyBTRVQoUEFDS0FHRV9WRVJTSU9OICItIikKIyBTRVQoUEFDS0FHRV9TVFJJTkcgImN1cmwtIikKIyBTRVQoUEFDS0FHRV9CVUdSRVBPUlQgImEgc3VpdGFibGUgY3VybCBtYWlsaW5nIGxpc3QgPT4gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsLyIpClNFVChPUEVSQVRJTkdfU1lTVEVNICIke0NNQUtFX1NZU1RFTV9OQU1FfSIpClNFVChPUyAiXCIke0NNQUtFX1NZU1RFTV9OQU1FfVwiIikKCiMgTWFrZSB0aGUgYmFzZSBoZWFkZXJzIHZpc2libGUgdG8gZXZlcnl0aGluZwojIElGKE5PVCAke1BST0pFQ1RfQklOQVJZX0RJUn0gRVFVQUwgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9KQogICAjIElOQ0xVREVfRElSRUNUT1JJRVMoJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2luY2x1ZGUpCiMgRU5ESUYoKQpJTkNMVURFX0RJUkVDVE9SSUVTKCAke0NVUkxfU09VUkNFX0RJUn0vaW5jbHVkZSApCgpJRihXSU4zMikKICBTRVQoTkFUSVZFX1dJTkRPV1MgT04pCkVORElGKCkKCk9QVElPTihCVUlMRF9DVVJMX0VYRSAiU2V0IHRvIE9OIHRvIGJ1aWxkIGNVUkwgZXhlY3V0YWJsZS4iIE9OKQpPUFRJT04oQlVJTERfQ1VSTF9URVNUUyAiU2V0IHRvIE9OIHRvIGJ1aWxkIGNVUkwgdGVzdHMuIiBPTikKT1BUSU9OKENVUkxfU1RBVElDTElCICJTZXQgdG8gT04gdG8gYnVpbGQgbGliY3VybCB3aXRoIHN0YXRpYyBsaW5raW5nLiIgT0ZGKQoKT1BUSU9OKEJVSUxEX0RBU0hCT0FSRF9SRVBPUlRTICJTZXQgdG8gT04gdG8gYWN0aXZhdGUgcmVwb3J0aW5nIG9mIGNVUkwgYnVpbGRzIGhlcmUgaHR0cDovL3d3dy5jZGFzaC5vcmcvQ0Rhc2hQdWJsaWMvaW5kZXgucGhwP3Byb2plY3Q9Q1VSTCIgT0ZGKQpJRihCVUlMRF9EQVNIQk9BUkRfUkVQT1JUUykKICAjSU5DTFVERShEYXJ0KQogIElOQ0xVREUoQ1Rlc3QpCkVORElGKEJVSUxEX0RBU0hCT0FSRF9SRVBPUlRTKQoKSUYoTVNWQykKICBPUFRJT04oQlVJTERfUkVMRUFTRV9ERUJVR19ESVJTICJTZXQgT0ZGIHRvIGJ1aWxkIGVhY2ggY29uZmlndXJhdGlvbiB0byBhIHNlcGFyYXRlIGRpcmVjdG9yeSIgT0ZGKQogIE1BUktfQVNfQURWQU5DRUQoQlVJTERfUkVMRUFTRV9ERUJVR19ESVJTKQpFTkRJRigpCgpPUFRJT04oQ1VSTF9ISURERU5fU1lNQk9MUyAiU2V0IHRvIE9OIHRvIGhpZGUgbGliY3VybCBpbnRlcm5hbCBzeW1ib2xzICg9aGlkZSBhbGwgc3ltYm9scyB0aGF0IGFyZW4ndCBvZmZpY2lhbGx5IGV4dGVybmFsKS4iIE9OKQpNQVJLX0FTX0FEVkFOQ0VEKENVUkxfSElEREVOX1NZTUJPTFMpCgojIElGKFdJTjMyKQogICMgT1BUSU9OKENVUkxfV0lORE9XU19TU1BJICJVc2Ugd2luZG93cyBsaWJyYXJpZXMgdG8gYWxsb3cgTlRMTSBhdXRoZW50aWNhdGlvbiB3aXRob3V0IG9wZW5zc2wiIE9OKQogICMgTUFSS19BU19BRFZBTkNFRChDVVJMX1dJTkRPV1NfU1NQSSkKIyBFTkRJRigpCgpPUFRJT04oSFRUUF9PTkxZICJkaXNhYmxlcyBhbGwgcHJvdG9jb2xzIGV4Y2VwdCBIVFRQIChUaGlzIG92ZXJyaWRlcyBhbGwgQ1VSTF9ESVNBQkxFXyogb3B0aW9ucykiIE9GRikKTUFSS19BU19BRFZBTkNFRChIVFRQX09OTFkpCk9QVElPTihDVVJMX0RJU0FCTEVfRlRQICJkaXNhYmxlcyBGVFAiIE9GRikKTUFSS19BU19BRFZBTkNFRChDVVJMX0RJU0FCTEVfRlRQKQpPUFRJT04oQ1VSTF9ESVNBQkxFX0xEQVAgImRpc2FibGVzIExEQVAiIE9GRikKTUFSS19BU19BRFZBTkNFRChDVVJMX0RJU0FCTEVfTERBUCkKT1BUSU9OKENVUkxfRElTQUJMRV9URUxORVQgImRpc2FibGVzIFRlbG5ldCIgT0ZGKQpNQVJLX0FTX0FEVkFOQ0VEKENVUkxfRElTQUJMRV9URUxORVQpCk9QVElPTihDVVJMX0RJU0FCTEVfRElDVCAiZGlzYWJsZXMgRElDVCIgT0ZGKQpNQVJLX0FTX0FEVkFOQ0VEKENVUkxfRElTQUJMRV9ESUNUKQpPUFRJT04oQ1VSTF9ESVNBQkxFX0ZJTEUgImRpc2FibGVzIEZJTEUiIE9GRikKTUFSS19BU19BRFZBTkNFRChDVVJMX0RJU0FCTEVfRklMRSkKT1BUSU9OKENVUkxfRElTQUJMRV9URlRQICJkaXNhYmxlcyBURlRQIiBPRkYpCk1BUktfQVNfQURWQU5DRUQoQ1VSTF9ESVNBQkxFX1RGVFApCk9QVElPTihDVVJMX0RJU0FCTEVfSFRUUCAiZGlzYWJsZXMgSFRUUCIgT0ZGKQpNQVJLX0FTX0FEVkFOQ0VEKENVUkxfRElTQUJMRV9IVFRQKQoKT1BUSU9OKENVUkxfRElTQUJMRV9MREFQUyAidG8gZGlzYWJsZSBMREFQUyIgT0ZGKQpNQVJLX0FTX0FEVkFOQ0VEKENVUkxfRElTQUJMRV9MREFQUykKSUYoV0lOMzIpCiAgT1BUSU9OKENVUkxfTERBUF9XSU4gIlVzZSBXJCBMREFQIGltcGxlbWVudGF0aW9uIiBPTikKICBNQVJLX0FTX0FEVkFOQ0VEKENVUkxfTERBUF9XSU4pCiAgU0VUKENVUkxfTERBUF9IWUJSSUQgT0ZGKQpFTFNFKCkKICBPUFRJT04oQ1VSTF9MREFQX0hZQlJJRCAiVyQgTERBUCB3aXRoIG5vbi1XJCBjb21waWxlciIgT0ZGKQogIE1BUktfQVNfQURWQU5DRUQoQ1VSTF9MREFQX0hZQlJJRCkKICBTRVQoQ1VSTF9MREFQX1dJTiBPRkYpCkVORElGKCkKCklGKEhUVFBfT05MWSkKICBTRVQoQ1VSTF9ESVNBQkxFX0ZUUCBPTikKICBTRVQoQ1VSTF9ESVNBQkxFX0xEQVAgT04pCiAgU0VUKENVUkxfRElTQUJMRV9URUxORVQgT04pCiAgU0VUKENVUkxfRElTQUJMRV9ESUNUIE9OKQogIFNFVChDVVJMX0RJU0FCTEVfRklMRSBPTikKICBTRVQoQ1VSTF9ESVNBQkxFX1RGVFAgT04pCkVORElGKCkKCk9QVElPTihDVVJMX0RJU0FCTEVfQ09PS0lFUyAidG8gZGlzYWJsZSBjb29raWVzIHN1cHBvcnQiIE9GRikKTUFSS19BU19BRFZBTkNFRChDVVJMX0RJU0FCTEVfQ09PS0lFUykKCk9QVElPTihDVVJMX0RJU0FCTEVfQ1JZUFRPX0FVVEggInRvIGRpc2FibGUgY3J5cHRvZ3JhcGhpYyBhdXRoZW50aWNhdGlvbiIgT0ZGKQpNQVJLX0FTX0FEVkFOQ0VEKENVUkxfRElTQUJMRV9DUllQVE9fQVVUSCkKT1BUSU9OKENVUkxfRElTQUJMRV9WRVJCT1NFX1NUUklOR1MgInRvIGRpc2FibGUgdmVyYm9zZSBzdHJpbmdzIiBPRkYpCk1BUktfQVNfQURWQU5DRUQoQ1VSTF9ESVNBQkxFX1ZFUkJPU0VfU1RSSU5HUykKT1BUSU9OKERJU0FCTEVEX1RIUkVBRFNBRkUgIlNldCB0byBleHBsaWNpdGx5IHNwZWNpZnkgd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhyZWFkLXNhZmUgZnVuY3Rpb25zIiBPRkYpCk1BUktfQVNfQURWQU5DRUQoRElTQUJMRURfVEhSRUFEU0FGRSkKT1BUSU9OKEVOQUJMRV9JUFY2ICJEZWZpbmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIElQdjYgc3VwcG9ydCIgT0ZGKQpNQVJLX0FTX0FEVkFOQ0VEKEVOQUJMRV9JUFY2KQoKSUYoV0lOMzIpCiAgTElTVF9TUEFDRVNfQVBQRU5EX09OQ0UoQ01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVMgd3NvY2szMi5saWIgd3MyXzMyLmxpYikgICMgYnVmZmVyb3ZlcmZsb3d1LmxpYgogIElGKENVUkxfRElTQUJMRV9MREFQKQogICAgIyBSZW1vdmUgd2xkYXAzMi5saWIgZnJvbSBzcGFjZS1zZXBhcmF0ZWQgbGlzdAogICAgU1RSSU5HKFJFUExBQ0UgIiAiICI7IiBfTElTVCAke0NNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTfSkKICAgIExJU1QoUkVNT1ZFX0lURU0gX0xJU1QgIndsZGFwMzIubGliIikKICAgIFRPX0xJU1RfU1BBQ0VTKF9MSVNUIENNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTKQogIEVMU0UoKQogICAgIyBBcHBlbmQgd2xkYXAzMi5saWIKICAgIExJU1RfU1BBQ0VTX0FQUEVORF9PTkNFKENNQUtFX0NfU1RBTkRBUkRfTElCUkFSSUVTIHdsZGFwMzIubGliKQogIEVORElGKCkKICBTRVQoQ01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVMgIiR7Q01BS0VfQ19TVEFOREFSRF9MSUJSQVJJRVN9IiAgIENBQ0hFIFNUUklORyAiIiBGT1JDRSkKRU5ESUYoKQoKCiMgV2UgbmVlZCBhbnNpIGMtZmxhZ3MsIGVzcGVjaWFsbHkgb24gSFAKU0VUKENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQU5TSV9DRkxBR1N9ICR7Q01BS0VfQ19GTEFHU30iKQpTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MgJHtDTUFLRV9BTlNJX0NGTEFHU30pCgojIERpc2FibGUgd2FybmluZ3Mgb24gQm9ybGFuZCB0byBhdm9pZCBjaGFuZ2luZyAzcmQgcGFydHkgY29kZS4KSUYoQk9STEFORCkKICBTRVQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtdy0iKQpFTkRJRihCT1JMQU5EKQoKIyBJZiB3ZSBhcmUgb24gQUlYLCBkbyB0aGUgX0FMTF9TT1VSQ0UgbWFnaWMKSUYoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyBBSVgpCiAgU0VUKF9BTExfU09VUkNFIDEpCkVORElGKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgQUlYKQoKIyBJbmNsdWRlIGFsbCB0aGUgbmVjZXNzYXJ5IGZpbGVzIGZvciBtYWNyb3MKSU5DTFVERSAoQ2hlY2tGdW5jdGlvbkV4aXN0cykKSU5DTFVERSAoQ2hlY2tJbmNsdWRlRmlsZSkKSU5DTFVERSAoQ2hlY2tJbmNsdWRlRmlsZXMpCklOQ0xVREUgKENoZWNrTGlicmFyeUV4aXN0cykKSU5DTFVERSAoQ2hlY2tTeW1ib2xFeGlzdHMpCiMgaWYgY3Jvc3Njb21waWxpbmcgaXMgb24sIHRoZSBDSEVDS19UWVBFX1NJWkUgbWFjcm8gY29taW5nIHdpdGggY21ha2UgdXNlcwojIFRSWV9DT01QSUxFIGluc3RlYWQgb2YgVFJZX1JVTiB3aGljaCBtYWtlcyBjcm9zc2NvbXBpbGluZyBlYXNpZXIsIEFsZXgKSUYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpICAKICBJTkNMVURFICgiJHtDTUFLRV9NT0RVTEVfUEFUSH0vQ2hlY2tUeXBlU2l6ZS5jbWFrZSIpCkVMU0UoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCiAgSU5DTFVERSAoQ2hlY2tUeXBlU2l6ZSkKRU5ESUYoQ01BS0VfQ1JPU1NDT01QSUxJTkcpCgojIE9uIHdpbmRvd3MgcHJlbG9hZCBzZXR0aW5ncwpJRihXSU4zMikKICBJTkNMVURFKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTWFrZS9QbGF0Zm9ybXMvV2luZG93c0NhY2hlLmNtYWtlKQpFTkRJRihXSU4zMikKCiMgVGhpcyBtYWNybyBjaGVja3MgaWYgdGhlIHN5bWJvbCBleGlzdHMgaW4gdGhlIGxpYnJhcnkgYW5kIGlmIGl0CiMgZG9lcywgaXQgYXBwZW5kcyBsaWJyYXJ5IHRvIHRoZSBsaXN0LgpTRVQoQ1VSTF9MSUJTICIiKQpNQUNSTyhDSEVDS19MSUJSQVJZX0VYSVNUU19DT05DQVQgTElCUkFSWSBTWU1CT0wgVkFSSUFCTEUpCiAgQ0hFQ0tfTElCUkFSWV9FWElTVFMoIiR7TElCUkFSWX07JHtDVVJMX0xJQlN9IiAke1NZTUJPTH0gIiIgCiAgICAke1ZBUklBQkxFfSkKICBJRigke1ZBUklBQkxFfSkKICAgIFNFVChDVVJMX0xJQlMgJHtDVVJMX0xJQlN9ICR7TElCUkFSWX0pCiAgRU5ESUYoJHtWQVJJQUJMRX0pCkVORE1BQ1JPKENIRUNLX0xJQlJBUllfRVhJU1RTX0NPTkNBVCkKCiMgQ2hlY2sgZm9yIGFsbCBuZWVkZWQgbGlicmFyaWVzCkNIRUNLX0xJQlJBUllfRVhJU1RTX0NPTkNBVCgiZGwiICAgICBkbG9wZW4gICAgICAgSEFWRV9MSUJETCkKI0NIRUNLX0xJQlJBUllfRVhJU1RTX0NPTkNBVCgidWNiIiAgICBnZXRob3N0bmFtZSAgSEFWRV9MSUJVQ0IpCkNIRUNLX0xJQlJBUllfRVhJU1RTX0NPTkNBVCgic29ja2V0IiBjb25uZWN0ICAgICAgSEFWRV9MSUJTT0NLRVQpCkNIRUNLX0xJQlJBUllfRVhJU1RTKCJjIiBnZXRob3N0YnluYW1lICIiIE5PVF9ORUVEX0xJQk5TTCkKCiMgWWVsbG93dGFiIFpldGEgbmVlZHMgZGlmZmVyZW50IGxpYnJhcmllcyB0aGFuIEJlT1MgNS4KSUYoQkVPUykKICBTRVQoTk9UX05FRURfTElCTlNMIDEpCiAgQ0hFQ0tfTElCUkFSWV9FWElTVFNfQ09OQ0FUKCJiaW5kIiBnZXRob3N0YnluYW1lIEhBVkVfTElCQklORCkKICBDSEVDS19MSUJSQVJZX0VYSVNUU19DT05DQVQoImJuZXRhcGkiIGNsb3Nlc29ja2V0IEhBVkVfTElCQk5FVEFQSSkKRU5ESUYoQkVPUykKCklGKE5PVCBOT1RfTkVFRF9MSUJOU0wpCiAgQ0hFQ0tfTElCUkFSWV9FWElTVFNfQ09OQ0FUKCJuc2wiICAgIGdldGhvc3RieW5hbWUgIEhBVkVfTElCTlNMKQpFTkRJRihOT1QgTk9UX05FRURfTElCTlNMKQoKQ0hFQ0tfTElCUkFSWV9FWElTVFNfQ09OQ0FUKCJ3czJfMzIiIGdldGNoICAgICAgICBIQVZFX0xJQldTMl8zMikKQ0hFQ0tfTElCUkFSWV9FWElTVFNfQ09OQ0FUKCJ3aW5tbSIgIGdldGNoICAgICAgICBIQVZFX0xJQldJTk1NKQojIElGKE5PVCBDVVJMX1NQRUNJQUxfTElCWikKIyAgQ0hFQ0tfTElCUkFSWV9FWElTVFNfQ09OQ0FUKCJ6IiAgICAgIGluZmxhdGVFbmQgICBIQVZFX0xJQlopCiMgRU5ESUYoTk9UIENVUkxfU1BFQ0lBTF9MSUJaKQoKT1BUSU9OKENNQUtFX1VTRV9PUEVOU1NMICJVc2UgT3BlblNTTCBjb2RlLiBFeHBlcmltZW50YWwiIE9OKQpNQVJLX0FTX0FEVkFOQ0VEKENNQUtFX1VTRV9PUEVOU1NMKQpJRihDTUFLRV9VU0VfT1BFTlNTTCkKICBJRihXSU4zMikKICBGSU5EX1BBQ0tBR0UoT3BlblNTTCkKICBJRihPUEVOU1NMX0ZPVU5EKQogICAgU0VUKFVTRV9TU0xFQVkgVFJVRSkKICAgIFNFVChVU0VfT1BFTlNTTCBUUlVFKQogICAgTElTVChBUFBFTkQgQ1VSTF9MSUJTICR7T1BFTlNTTF9MSUJSQVJJRVN9ICkKICBFTkRJRigpCiAgICAjRklORF9MSUJSQVJZKExJQkVBWSBOQU1FUyBsaWJlYXkzMikKICAgICNMSVNUKEFQUEVORCBDVVJMX0xJQlMgJHtMSUJFQVl9ICkKICBFTFNFKFdJTjMyKQogICAgQ0hFQ0tfTElCUkFSWV9FWElTVFNfQ09OQ0FUKCJjcnlwdG8iIENSWVBUT19sb2NrICBIQVZFX0xJQkNSWVBUTykKICAgIENIRUNLX0xJQlJBUllfRVhJU1RTX0NPTkNBVCgic3NsIiAgICBTU0xfY29ubmVjdCAgSEFWRV9MSUJTU0wpCiAgRU5ESUYoV0lOMzIpCkVORElGKENNQUtFX1VTRV9PUEVOU1NMKQoKIyBDaGVjayBmb3IgaWRuCkNIRUNLX0xJQlJBUllfRVhJU1RTX0NPTkNBVCgiaWRuIiBpZG5hX3RvX2FzY2lpX2x6IEhBVkVfTElCSUROKQoKIyBDaGVjayBmb3IgTERBUApDSEVDS19MSUJSQVJZX0VYSVNUU19DT05DQVQoImxkYXAiIGxkYXBfaW5pdCBIQVZFX0xJQkxEQVApCiMgaWYoTk9UIEhBVkVfTElCTERBUCkKICAgICMgU0VUKENVUkxfRElTQUJMRV9MREFQIE9OKQojIGVuZGlmKE5PVCBIQVZFX0xJQkxEQVApCgojIENoZWNrIGZvciBzeW1ib2wgZGxvcGVuIChzYW1lIGFzIEhBVkVfTElCREwpCkNIRUNLX0xJQlJBUllfRVhJU1RTKCIke0NVUkxfTElCU30iIGRsb3BlbiAiIiBIQVZFX0RMT1BFTikKCiMgRm9yIG90aGVyIHRlc3RzIHRvIHVzZSB0aGUgc2FtZSBsaWJyYXJpZXMKU0VUKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyAke0NVUkxfTElCU30pCgpPUFRJT04oQ1VSTF9aTElCICJTZXQgdG8gT04gdG8gZW5hYmxlIGJ1aWxkaW5nIGNVUkwgd2l0aCB6bGliIHN1cHBvcnQuIiBPTikKU0VUKEhBVkVfTElCWiBPRkYpClNFVChIQVZFX1pMSUJfSCBPRkYpClNFVChIQVZFX1pMSUIgT0ZGKQpJRihDVVJMX1pMSUIpICAjIEFORCBDVVJMX0NPTkZJR19IQVNfQkVFTl9SVU5fQkVGT1JFCiAgRklORF9QQUNLQUdFKFpMSUIpCiAgSUYoWkxJQl9GT1VORCkKICAgIFNFVChIQVZFX1pMSUJfSCBPTikKICAgIFNFVChIQVZFX1pMSUIgT04pCiAgICBTRVQoSEFWRV9MSUJaIE9OKQogIEVORElGKCkKRU5ESUYoKQoKIyBJZiB3ZSBoYXZlIGZlYXR1cmVzLmgsIHRoZW4gZG8gdGhlIF9CU0RfU09VUkNFIG1hZ2ljCkNIRUNLX0lOQ0xVREVfRklMRSgiZmVhdHVyZXMuaCIgICAgICAgSEFWRV9GRUFUVVJFU19IKQoKIyBDaGVjayBpZiBoZWFkZXIgZmlsZSBleGlzdHMgYW5kIGFkZCBpdCB0byB0aGUgbGlzdC4KTUFDUk8oQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCBGSUxFIFZBUklBQkxFKQogIENIRUNLX0lOQ0xVREVfRklMRVMoIiR7Q1VSTF9JTkNMVURFU307JHtGSUxFfSIgJHtWQVJJQUJMRX0pCiAgSUYoJHtWQVJJQUJMRX0pCiAgICBTRVQoQ1VSTF9JTkNMVURFUyAke0NVUkxfSU5DTFVERVN9ICR7RklMRX0pCiAgICBTRVQoQ1VSTF9URVNUX0RFRklORVMgIiR7Q1VSTF9URVNUX0RFRklORVN9IC1EJHtWQVJJQUJMRX0iKQogIEVORElGKCR7VkFSSUFCTEV9KQpFTkRNQUNSTyhDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKQoKCiMgQ2hlY2sgZm9yIGhlYWRlciBmaWxlcwpJRihOT1QgVU5JWCkKICBDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJ3czJ0Y3BpcC5oIiAgICAgSEFWRV9XUzJUQ1BJUF9IKQogIENIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIndpbnNvY2syLmgiICAgICBIQVZFX1dJTlNPQ0syX0gpCkVORElGKE5PVCBVTklYKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzdGRpby5oIiAgICAgICAgICBIQVZFX1NURElPX0gpCklGKE5PVCBVTklYKQogIENIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIndpbmRvd3MuaCIgICAgICBIQVZFX1dJTkRPV1NfSCkKICBDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJ3aW5zb2NrLmgiICAgICAgSEFWRV9XSU5TT0NLX0gpCkVORElGKE5PVCBVTklYKQoKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiaW50dHlwZXMuaCIgICAgICAgSEFWRV9JTlRUWVBFU19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzeXMvZmlsaW8uaCIgICAgICBIQVZFX1NZU19GSUxJT19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzeXMvaW9jdGwuaCIgICAgICBIQVZFX1NZU19JT0NUTF9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzeXMvcGFyYW0uaCIgICAgICBIQVZFX1NZU19QQVJBTV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzeXMvcG9sbC5oIiAgICAgICBIQVZFX1NZU19QT0xMX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoInN5cy9yZXNvdXJjZS5oIiAgIEhBVkVfU1lTX1JFU09VUkNFX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoInN5cy9zZWxlY3QuaCIgICAgIEhBVkVfU1lTX1NFTEVDVF9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzeXMvc29ja2V0LmgiICAgICBIQVZFX1NZU19TT0NLRVRfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3lzL3NvY2tpby5oIiAgICAgSEFWRV9TWVNfU09DS0lPX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoInN5cy9zdGF0LmgiICAgICAgIEhBVkVfU1lTX1NUQVRfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3lzL3RpbWUuaCIgICAgICAgSEFWRV9TWVNfVElNRV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzeXMvdHlwZXMuaCIgICAgICBIQVZFX1NZU19UWVBFU19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzeXMvdWlvLmgiICAgICAgICBIQVZFX1NZU19VSU9fSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3lzL3VuLmgiICAgICAgICAgSEFWRV9TWVNfVU5fSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3lzL3V0aW1lLmgiICAgICAgSEFWRV9TWVNfVVRJTUVfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiYWxsb2NhLmgiICAgICAgICAgSEFWRV9BTExPQ0FfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiYXJwYS9pbmV0LmgiICAgICAgSEFWRV9BUlBBX0lORVRfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiYXJwYS90ZnRwLmgiICAgICAgSEFWRV9BUlBBX1RGVFBfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiYXNzZXJ0LmgiICAgICAgICAgSEFWRV9BU1NFUlRfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiY3J5cHRvLmgiICAgICAgICAgSEFWRV9DUllQVE9fSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiZGVzLmgiICAgICAgICAgICAgSEFWRV9ERVNfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiZXJyLmgiICAgICAgICAgICAgSEFWRV9FUlJfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiZXJybm8uaCIgICAgICAgICAgSEFWRV9FUlJOT19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJmY250bC5oIiAgICAgICAgICBIQVZFX0ZDTlRMX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoImdzc2FwaS9nc3NhcGkuaCIgIEhBVkVfR1NTQVBJX0dTU0FQSV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJnc3NhcGkvZ3NzYXBpX2dlbmVyaWMuaCIgSEFWRV9HU1NBUElfR1NTQVBJX0dFTkVSSUNfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiZ3NzYXBpL2dzc2FwaV9rcmI1LmgiIEhBVkVfR1NTQVBJX0dTU0FQSV9LUkI1X0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoImlkbi1mcmVlLmgiICAgICAgIEhBVkVfSUROX0ZSRUVfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgiaWZhZGRycy5oIiAgICAgICAgSEFWRV9JRkFERFJTX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoImlvLmgiICAgICAgICAgICAgIEhBVkVfSU9fSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgia3JiLmgiICAgICAgICAgICAgSEFWRV9LUkJfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgibGliZ2VuLmgiICAgICAgICAgSEFWRV9MSUJHRU5fSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgibGlic3NoMi5oIiAgICAgICAgSEFWRV9MSUJTU0gyX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoImxpbWl0cy5oIiAgICAgICAgIEhBVkVfTElNSVRTX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoImxvY2FsZS5oIiAgICAgICAgIEhBVkVfTE9DQUxFX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIm5ldC9pZi5oIiAgICAgICAgIEhBVkVfTkVUX0lGX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIm5ldGRiLmgiICAgICAgICAgIEhBVkVfTkVUREJfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgibmV0aW5ldC9pbi5oIiAgICAgSEFWRV9ORVRJTkVUX0lOX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIm5ldGluZXQvdGNwLmgiICAgIEhBVkVfTkVUSU5FVF9UQ1BfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgib3BlbnNzbC9jcnlwdG8uaCIgSEFWRV9PUEVOU1NMX0NSWVBUT19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJvcGVuc3NsL2VuZ2luZS5oIiBIQVZFX09QRU5TU0xfRU5HSU5FX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIm9wZW5zc2wvZXJyLmgiICAgIEhBVkVfT1BFTlNTTF9FUlJfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgib3BlbnNzbC9wZW0uaCIgICAgSEFWRV9PUEVOU1NMX1BFTV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJvcGVuc3NsL3BrY3MxMi5oIiBIQVZFX09QRU5TU0xfUEtDUzEyX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIm9wZW5zc2wvcnNhLmgiICAgIEhBVkVfT1BFTlNTTF9SU0FfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgib3BlbnNzbC9zc2wuaCIgICAgSEFWRV9PUEVOU1NMX1NTTF9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJvcGVuc3NsL3g1MDkuaCIgICBIQVZFX09QRU5TU0xfWDUwOV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJwZW0uaCIgICAgICAgICAgICBIQVZFX1BFTV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJwb2xsLmgiICAgICAgICAgICBIQVZFX1BPTExfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgicHdkLmgiICAgICAgICAgICAgSEFWRV9QV0RfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgicnNhLmgiICAgICAgICAgICAgSEFWRV9SU0FfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic2V0am1wLmgiICAgICAgICAgSEFWRV9TRVRKTVBfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic2d0dHkuaCIgICAgICAgICAgSEFWRV9TR1RUWV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzaWduYWwuaCIgICAgICAgICBIQVZFX1NJR05BTF9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzc2wuaCIgICAgICAgICAgICBIQVZFX1NTTF9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzdGRib29sLmgiICAgICAgICBIQVZFX1NUREJPT0xfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3RkaW50LmgiICAgICAgICAgSEFWRV9TVERJTlRfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3RkaW8uaCIgICAgICAgICAgSEFWRV9TVERJT19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzdGRsaWIuaCIgICAgICAgICBIQVZFX1NURExJQl9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzdHJpbmcuaCIgICAgICAgICBIQVZFX1NUUklOR19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzdHJpbmdzLmgiICAgICAgICBIQVZFX1NUUklOR1NfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3Ryb3B0cy5oIiAgICAgICAgSEFWRV9TVFJPUFRTX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoInRlcm1pby5oIiAgICAgICAgIEhBVkVfVEVSTUlPX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoInRlcm1pb3MuaCIgICAgICAgIEhBVkVfVEVSTUlPU19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJ0aW1lLmgiICAgICAgICAgICBIQVZFX1RJTUVfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgidGxkLmgiICAgICAgICAgICAgSEFWRV9UTERfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgidW5pc3RkLmgiICAgICAgICAgSEFWRV9VTklTVERfSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgidXRpbWUuaCIgICAgICAgICAgSEFWRV9VVElNRV9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJ4NTA5LmgiICAgICAgICAgICBIQVZFX1g1MDlfSCkKCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoInByb2Nlc3MuaCIgICAgICAgIEhBVkVfUFJPQ0VTU19IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzdGRkZWYuaCIgICAgICAgICBIQVZFX1NURERFRl9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJkbGZjbi5oIiAgICAgICAgICBIQVZFX0RMRkNOX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIm1hbGxvYy5oIiAgICAgICAgIEhBVkVfTUFMTE9DX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoIm1lbW9yeS5oIiAgICAgICAgIEhBVkVfTUVNT1JZX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoImxkYXAuaCIgICAgICAgICAgIEhBVkVfTERBUF9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJuZXRpbmV0L2lmX2V0aGVyLmgiIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9IKQpDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJzdGRpbnQuaCIgICAgICAgIEhBVkVfU1RESU5UX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoInNvY2tpby5oIiAgICAgICAgSEFWRV9TT0NLSU9fSCkKQ0hFQ0tfSU5DTFVERV9GSUxFX0NPTkNBVCgic3lzL3V0c25hbWUuaCIgICBIQVZFX1NZU19VVFNOQU1FX0gpCkNIRUNLX0lOQ0xVREVfRklMRV9DT05DQVQoImlkbmEuaCIgICAgICAgICAgSEFWRV9JRE5BX0gpCgpJRihDTUFLRV9VU0VfT1BFTlNTTCkKICBDSEVDS19JTkNMVURFX0ZJTEVfQ09OQ0FUKCJvcGVuc3NsL3JhbmQuaCIgICBIQVZFX09QRU5TU0xfUkFORF9IKQpFTkRJRihDTUFLRV9VU0VfT1BFTlNTTCkKCgpDSEVDS19UWVBFX1NJWkUoc2l6ZV90ICBTSVpFT0ZfU0laRV9UKQpDSEVDS19UWVBFX1NJWkUoc3NpemVfdCAgU0laRU9GX1NTSVpFX1QpCkNIRUNLX1RZUEVfU0laRSgibG9uZyBsb25nIiAgU0laRU9GX0xPTkdfTE9ORykKQ0hFQ0tfVFlQRV9TSVpFKCJsb25nIiAgU0laRU9GX0xPTkcpCkNIRUNLX1RZUEVfU0laRSgiaW50IiAgU0laRU9GX0lOVCkKQ0hFQ0tfVFlQRV9TSVpFKCJfX2ludDY0IiAgU0laRU9GX19fSU5UNjQpCkNIRUNLX1RZUEVfU0laRSgibG9uZyBkb3VibGUiICBTSVpFT0ZfTE9OR19ET1VCTEUpCkNIRUNLX1RZUEVfU0laRSgidGltZV90IiAgU0laRU9GX1RJTUVfVCkKSUYoTk9UIEhBVkVfU0laRU9GX1NTSVpFX1QpCiAgSUYoU0laRU9GX0xPTkcgRVFVQUwgU0laRU9GX1NJWkVfVCkKICAgIFNFVChzc2l6ZV90IGxvbmcpCiAgRU5ESUYoU0laRU9GX0xPTkcgRVFVQUwgU0laRU9GX1NJWkVfVCkKICBJRihOT1Qgc3NpemVfdCBBTkQgU0laRU9GX19fSU5UNjQgRVFVQUwgU0laRU9GX1NJWkVfVCkKICAgIFNFVChzc2l6ZV90IF9faW50NjQpCiAgRU5ESUYoTk9UIHNzaXplX3QgQU5EIFNJWkVPRl9fX0lOVDY0IEVRVUFMIFNJWkVPRl9TSVpFX1QpCkVORElGKE5PVCBIQVZFX1NJWkVPRl9TU0laRV9UKQoKIyBEaWZmZXJlbnQgc2l6ZW9mcywgZXRjLgoKIyAgICBkZWZpbmUgQ1VSTF9TSVpFT0ZfTE9ORyAgICAgICAgNAojICAgIGRlZmluZSBDVVJMX1RZUEVPRl9DVVJMX09GRl9UICBsb25nIGxvbmcKIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVCAgImxsZCIKIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfQ1VSTF9PRkZfVFUgImxsdSIKIyAgICBkZWZpbmUgQ1VSTF9GT1JNQVRfT0ZGX1QgICAgICAgIiVsbGQiCiMgICAgZGVmaW5lIENVUkxfU0laRU9GX0NVUkxfT0ZGX1QgIDgKIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVCAgTEwKIyAgICBkZWZpbmUgQ1VSTF9TVUZGSVhfQ1VSTF9PRkZfVFUgVUxMCgpzZXQoQ1VSTF9TSVpFT0ZfTE9ORyAke1NJWkVPRl9MT05HfSkKCmlmKFNJWkVPRl9MT05HIEVRVUFMIDgpCiAgc2V0KENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgbG9uZykKICBzZXQoQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCA4KQogIHNldChDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJsZCIpCiAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICJsdSIpCiAgc2V0KENVUkxfRk9STUFUX09GRl9UICIlbGQiKQogIHNldChDVVJMX1NVRkZJWF9DVVJMX09GRl9UIEwpCiAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIExVKQplbmRpZihTSVpFT0ZfTE9ORyBFUVVBTCA4KQoKaWYoU0laRU9GX0xPTkdfTE9ORyBFUVVBTCA4KQogIHNldChDVVJMX1RZUEVPRl9DVVJMX09GRl9UICJsb25nIGxvbmciKQogIHNldChDVVJMX1NJWkVPRl9DVVJMX09GRl9UIDgpCiAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1QgImxsZCIpCiAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICJsbHUiKQogIHNldChDVVJMX0ZPUk1BVF9PRkZfVCAiJWxsZCIpCiAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1QgTEwpCiAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIExMVSkKZW5kaWYoU0laRU9GX0xPTkdfTE9ORyBFUVVBTCA4KQoKaWYoTk9UIENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QpCiAgc2V0KENVUkxfVFlQRU9GX0NVUkxfT0ZGX1QgJHtzc2l6ZV90fSkKICBzZXQoQ1VSTF9TSVpFT0ZfQ1VSTF9PRkZfVCAke1NJWkVPRl9TU0laRV9UfSkKICAjIFRPRE86IG5lZWQgYWRqdXN0bWVudCBoZXJlLgogIHNldChDVVJMX0ZPUk1BVF9DVVJMX09GRl9UICJsZCIpCiAgc2V0KENVUkxfRk9STUFUX0NVUkxfT0ZGX1RVICJsdSIpCiAgc2V0KENVUkxfRk9STUFUX09GRl9UICIlbGQiKQogIHNldChDVVJMX1NVRkZJWF9DVVJMX09GRl9UIEwpCiAgc2V0KENVUkxfU1VGRklYX0NVUkxfT0ZGX1RVIExVKQplbmRpZihOT1QgQ1VSTF9UWVBFT0ZfQ1VSTF9PRkZfVCkKCklGKEhBVkVfU0laRU9GX0xPTkdfTE9ORykKICBTRVQoSEFWRV9MT05HTE9ORyAxKQogIFNFVChIQVZFX0xMIDEpCkVORElGKEhBVkVfU0laRU9GX0xPTkdfTE9ORykKCkZJTkRfRklMRShSQU5ET01fRklMRSB1cmFuZG9tIC9kZXYpCk1BUktfQVNfQURWQU5DRUQoUkFORE9NX0ZJTEUpCgojIENoZWNrIGZvciBzb21lIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkCkNIRUNLX1NZTUJPTF9FWElTVFMoYmFzZW5hbWUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9CQVNFTkFNRSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzb2NrZXQgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NPQ0tFVCkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhwb2xsICAgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1BPTEwpCkNIRUNLX1NZTUJPTF9FWElTVFMoc2VsZWN0ICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRUxFQ1QpCkNIRUNLX1NZTUJPTF9FWElTVFMoc3RyZHVwICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJEVVApCkNIRUNLX1NZTUJPTF9FWElTVFMoc3Ryc3RyICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJTVFIpCkNIRUNLX1NZTUJPTF9FWElTVFMoc3RydG9rX3IgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJUT0tfUikKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzdHJmdGltZSAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NUUkZUSU1FKQpDSEVDS19TWU1CT0xfRVhJU1RTKHVuYW1lICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVU5BTUUpCkNIRUNLX1NZTUJPTF9FWElTVFMoc3RyY2FzZWNtcCAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJDQVNFQ01QKQpDSEVDS19TWU1CT0xfRVhJU1RTKHN0cmljbXAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU1RSSUNNUCkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzdHJjbXBpICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NUUkNNUEkpCkNIRUNLX1NZTUJPTF9FWElTVFMoc3RybmNtcGkgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJOQ01QSSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhhbGFybSAgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0FMQVJNKQpJRihOT1QgSEFWRV9TVFJOQ01QSSkKICBTRVQoSEFWRV9TVFJDTVBJKQpFTkRJRihOT1QgSEFWRV9TVFJOQ01QSSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhnZXRob3N0YnlhZGRyICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVEhPU1RCWUFERFIpCkNIRUNLX1NZTUJPTF9FWElTVFMoZ2V0aG9zdGJ5YWRkcl9yICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVEhPU1RCWUFERFJfUikKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhnZXR0aW1lb2ZkYXkgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFRJTUVPRkRBWSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhpbmV0X2FkZHIgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lORVRfQUREUikKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhpbmV0X250b2EgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lORVRfTlRPQSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhpbmV0X250b2FfciAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lORVRfTlRPQV9SKQpDSEVDS19TWU1CT0xfRVhJU1RTKHRjc2V0YXR0ciAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVENTRVRBVFRSKQpDSEVDS19TWU1CT0xfRVhJU1RTKHRjZ2V0YXR0ciAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVENHRVRBVFRSKQpDSEVDS19TWU1CT0xfRVhJU1RTKHBlcnJvciAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfUEVSUk9SKQpDSEVDS19TWU1CT0xfRVhJU1RTKGNsb3Nlc29ja2V0ICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfQ0xPU0VTT0NLRVQpCkNIRUNLX1NZTUJPTF9FWElTVFMoc2V0dmJ1ZiAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRVRWQlVGKQpDSEVDS19TWU1CT0xfRVhJU1RTKHNpZ3NldGptcCAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0lHU0VUSk1QKQpDSEVDS19TWU1CT0xfRVhJU1RTKGdldHBhc3NfciAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUEFTU19SKQpDSEVDS19TWU1CT0xfRVhJU1RTKHN0cmxjYXQgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU1RSTENBVCkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhnZXRwd3VpZCAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dFVFBXVUlEKQpDSEVDS19TWU1CT0xfRVhJU1RTKGdldGV1aWQgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VURVVJRCkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyh1dGltZSAgICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1VUSU1FKQpJRihDTUFLRV9VU0VfT1BFTlNTTCkKICBDSEVDS19TWU1CT0xfRVhJU1RTKFJBTkRfc3RhdHVzICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfUkFORF9TVEFUVVMpCiAgQ0hFQ0tfU1lNQk9MX0VYSVNUUyhSQU5EX3NjcmVlbiAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1JBTkRfU0NSRUVOKQogIENIRUNLX1NZTUJPTF9FWElTVFMoUkFORF9lZ2QgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9SQU5EX0VHRCkKICBDSEVDS19TWU1CT0xfRVhJU1RTKENSWVBUT19jbGVhbnVwX2FsbF9leF9kYXRhICIke0NVUkxfSU5DTFVERVN9IiAKICAgIEhBVkVfQ1JZUFRPX0NMRUFOVVBfQUxMX0VYX0RBVEEpCiAgSUYoSEFWRV9MSUJDUllQVE8gQU5EIEhBVkVfTElCU1NMKQogIFNFVChVU0VfT1BFTlNTTCAxKQogIFNFVChVU0VfU1NMRUFZIDEpCiAgRU5ESUYoSEFWRV9MSUJDUllQVE8gQU5EIEhBVkVfTElCU1NMKQpFTkRJRihDTUFLRV9VU0VfT1BFTlNTTCkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhnbXRpbWVfciAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0dNVElNRV9SKQpDSEVDS19TWU1CT0xfRVhJU1RTKGxvY2FsdGltZV9yICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfTE9DQUxUSU1FX1IpCgpDSEVDS19TWU1CT0xfRVhJU1RTKGdldGhvc3RieW5hbWUgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRIT1NUQllOQU1FKQpDSEVDS19TWU1CT0xfRVhJU1RTKGdldGhvc3RieW5hbWVfciAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9HRVRIT1NUQllOQU1FX1IpCgpDSEVDS19TWU1CT0xfRVhJU1RTKHNpZ25hbCAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0lHTkFMX0ZVTkMpCkNIRUNLX1NZTUJPTF9FWElTVFMoU0lHQUxSTSAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TSUdOQUxfTUFDUk8pCklGKEhBVkVfU0lHTkFMX0ZVTkMgQU5EIEhBVkVfU0lHTkFMX01BQ1JPKQogIFNFVChIQVZFX1NJR05BTCAxKQpFTkRJRihIQVZFX1NJR05BTF9GVU5DIEFORCBIQVZFX1NJR05BTF9NQUNSTykKQ0hFQ0tfU1lNQk9MX0VYSVNUUyh1bmFtZSAgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9VTkFNRSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzdHJ0b2xsICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJUT0xMKQpDSEVDS19TWU1CT0xfRVhJU1RTKF9zdHJ0b2k2NCAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX19TVFJUT0k2NCkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzdHJlcnJvcl9yICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TVFJFUlJPUl9SKQpDSEVDS19TWU1CT0xfRVhJU1RTKHNpZ2ludGVycnVwdCAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NJR0lOVEVSUlVQVCkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhwZXJyb3IgICAgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9QRVJST1IpCkNIRUNLX1NZTUJPTF9FWElTVFMoZm9yayAgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfRk9SSykKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhmcmVlYWRkcmluZm8gICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9GUkVFQUREUklORk8pCkNIRUNLX1NZTUJPTF9FWElTVFMoZnJlZWlmYWRkcnMgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfRlJFRUlGQUREUlMpCkNIRUNLX1NZTUJPTF9FWElTVFMocGlwZSAgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfUElQRSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhmdHJ1bmNhdGUgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9GVFJVTkNBVEUpCkNIRUNLX1NZTUJPTF9FWElTVFMoZ2V0cHJvdG9ieW5hbWUgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUFJPVE9CWU5BTUUpCkNIRUNLX1NZTUJPTF9FWElTVFMoZ2V0cmxpbWl0ICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfR0VUUkxJTUlUKQpDSEVDS19TWU1CT0xfRVhJU1RTKGlkbl9mcmVlICAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lETl9GUkVFKQpDSEVDS19TWU1CT0xfRVhJU1RTKGlkbmFfc3RyZXJyb3IgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX0lETkFfU1RSRVJST1IpCkNIRUNLX1NZTUJPTF9FWElTVFModGxkX3N0cmVycm9yICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfVExEX1NUUkVSUk9SKQpDSEVDS19TWU1CT0xfRVhJU1RTKHNldGxvY2FsZSAgICAgICIke0NVUkxfSU5DTFVERVN9IiBIQVZFX1NFVExPQ0FMRSkKQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzZXRybGltaXQgICAgICAiJHtDVVJMX0lOQ0xVREVTfSIgSEFWRV9TRVRSTElNSVQpCkNIRUNLX1NZTUJPTF9FWElTVFMoZmNudGwgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfRkNOVEwpCkNIRUNLX1NZTUJPTF9FWElTVFMoaW9jdGwgICAgICAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfSU9DVEwpCkNIRUNLX1NZTUJPTF9FWElTVFMoc2V0c29ja29wdCAgICAgIiR7Q1VSTF9JTkNMVURFU30iIEhBVkVfU0VUU09DS09QVCkKCiMgc3ltYm9sIGV4aXN0cyBpbiB3aW4zMiwgYnV0IGZ1bmN0aW9uIGRvZXMgbm90LgpDSEVDS19GVU5DVElPTl9FWElTVFMoaW5ldF9wdG9uIEhBVkVfSU5FVF9QVE9OKQoKIyBzaWdhY3Rpb24gYW5kIHNpZ3NldGptcCBhcmUgc3BlY2lhbC4gVXNlIHNwZWNpYWwgbWVjaGFuaXNtIGZvcgojIGRldGVjdGluZyB0aG9zZSwgYnV0IG9ubHkgaWYgcHJldmlvdXMgYXR0ZW1wdCBmYWlsZWQuCklGKEhBVkVfU0lHTkFMX0gpCiAgQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzaWdhY3Rpb24gInNpZ25hbC5oIiBIQVZFX1NJR0FDVElPTikKRU5ESUYoSEFWRV9TSUdOQUxfSCkKCklGKE5PVCBIQVZFX1NJR1NFVEpNUCkKICBJRihIQVZFX1NFVEpNUF9IKQogICAgQ0hFQ0tfU1lNQk9MX0VYSVNUUyhzaWdzZXRqbXAgInNldGptcC5oIiBIQVZFX01BQ1JPX1NJR1NFVEpNUCkKICAgIElGKEhBVkVfTUFDUk9fU0lHU0VUSk1QKQogICAgICBTRVQoSEFWRV9TSUdTRVRKTVAgMSkKICAgIEVORElGKEhBVkVfTUFDUk9fU0lHU0VUSk1QKQogIEVORElGKEhBVkVfU0VUSk1QX0gpCkVORElGKE5PVCBIQVZFX1NJR1NFVEpNUCkKCiMgSWYgdGhlcmUgaXMgbm8gc3RyaWNtcCgpLCBkbyBub3QgYWxsb3cgTERBUCB0byBwYXJzZSBVUkxzCmlmKE5PVCBIQVZFX1NUUklDTVApCiAgICBTRVQoSEFWRV9MREFQX1VSTF9QQVJTRSAxKQplbmRpZihOT1QgSEFWRV9TVFJJQ01QKQoKIyBGb3Igb3RoZXIgY3VybCBzcGVjaWZpYyB0ZXN0cywgdXNlIHRoaXMgbWFjcm8uCk1BQ1JPKENVUkxfSU5URVJOQUxfVEVTVCBDVVJMX1RFU1QpCiAgSUYoIiR7Q1VSTF9URVNUfSIgTUFUQ0hFUyAiXiR7Q1VSTF9URVNUfSQiKQogICAgU0VUKE1BQ1JPX0NIRUNLX0ZVTkNUSU9OX0RFRklOSVRJT05TIAogICAgICAiLUQke0NVUkxfVEVTVH0gJHtDVVJMX1RFU1RfREVGSU5FU30gJHtDTUFLRV9SRVFVSVJFRF9GTEFHU30iKQogICAgSUYoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTKQogICAgICBTRVQoQ1VSTF9URVNUX0FERF9MSUJSQVJJRVMKICAgICAgICAiLURMSU5LX0xJQlJBUklFUzpTVFJJTkc9JHtDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVN9IikKICAgIEVORElGKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKCiAgICBNRVNTQUdFKFNUQVRVUyAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IikKICAgIFRSWV9DT01QSUxFKCR7Q1VSTF9URVNUfQogICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTWFrZS9DdXJsVGVzdHMuYwogICAgICBDTUFLRV9GTEFHUyAtRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7TUFDUk9fQ0hFQ0tfRlVOQ1RJT05fREVGSU5JVElPTlN9CiAgICAgICIke0NVUkxfVEVTVF9BRERfTElCUkFSSUVTfSIKICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKICAgIElGKCR7Q1VSTF9URVNUfSkKICAgICAgU0VUKCR7Q1VSTF9URVNUfSAxIENBQ0hFIElOVEVSTkFMICJDdXJsIHRlc3QgJHtGVU5DVElPTn0iKQogICAgICBNRVNTQUdFKFNUQVRVUyAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IC0gU3VjY2VzcyIpCiAgICAgIEZJTEUoQVBQRU5EICR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VPdXRwdXQubG9nIAogICAgICAgICJQZXJmb3JtaW5nIEN1cmwgVGVzdCAke0NVUkxfVEVTVH0gcGFzc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvdXRwdXQ6XG4iCiAgICAgICAgIiR7T1VUUFVUfVxuIikKICAgIEVMU0UoJHtDVVJMX1RFU1R9KQogICAgICBNRVNTQUdFKFNUQVRVUyAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IC0gRmFpbGVkIikKICAgICAgU0VUKCR7Q1VSTF9URVNUfSAiIiBDQUNIRSBJTlRFUk5BTCAiQ3VybCB0ZXN0ICR7RlVOQ1RJT059IikKICAgICAgRklMRShBUFBFTkQgJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZyAKICAgICAgICAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICIke09VVFBVVH1cbiIpCiAgICBFTkRJRigke0NVUkxfVEVTVH0pCiAgRU5ESUYoIiR7Q1VSTF9URVNUfSIgTUFUQ0hFUyAiXiR7Q1VSTF9URVNUfSQiKQpFTkRNQUNSTyhDVVJMX0lOVEVSTkFMX1RFU1QpIAoKTUFDUk8oQ1VSTF9JTlRFUk5BTF9URVNUX1JVTiBDVVJMX1RFU1QpCiAgSUYoIiR7Q1VSTF9URVNUfV9DT01QSUxFIiBNQVRDSEVTICJeJHtDVVJMX1RFU1R9X0NPTVBJTEUkIikKICAgIFNFVChNQUNST19DSEVDS19GVU5DVElPTl9ERUZJTklUSU9OUyAKICAgICAgIi1EJHtDVVJMX1RFU1R9ICR7Q01BS0VfUkVRVUlSRURfRkxBR1N9IikKICAgIElGKENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUykKICAgICAgU0VUKENVUkxfVEVTVF9BRERfTElCUkFSSUVTCiAgICAgICAgIi1ETElOS19MSUJSQVJJRVM6U1RSSU5HPSR7Q01BS0VfUkVRVUlSRURfTElCUkFSSUVTfSIpCiAgICBFTkRJRihDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMpCgogICAgTUVTU0FHRShTVEFUVVMgIlBlcmZvcm1pbmcgQ3VybCBUZXN0ICR7Q1VSTF9URVNUfSIpCiAgICBUUllfUlVOKCR7Q1VSTF9URVNUfSAke0NVUkxfVEVTVH1fQ09NUElMRQogICAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CiAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTWFrZS9DdXJsVGVzdHMuYwogICAgICBDTUFLRV9GTEFHUyAtRENPTVBJTEVfREVGSU5JVElPTlM6U1RSSU5HPSR7TUFDUk9fQ0hFQ0tfRlVOQ1RJT05fREVGSU5JVElPTlN9CiAgICAgICIke0NVUkxfVEVTVF9BRERfTElCUkFSSUVTfSIKICAgICAgT1VUUFVUX1ZBUklBQkxFIE9VVFBVVCkKICAgIElGKCR7Q1VSTF9URVNUfV9DT01QSUxFIEFORCBOT1QgJHtDVVJMX1RFU1R9KQogICAgICBTRVQoJHtDVVJMX1RFU1R9IDEgQ0FDSEUgSU5URVJOQUwgIkN1cmwgdGVzdCAke0ZVTkNUSU9OfSIpCiAgICAgIE1FU1NBR0UoU1RBVFVTICJQZXJmb3JtaW5nIEN1cmwgVGVzdCAke0NVUkxfVEVTVH0gLSBTdWNjZXNzIikKICAgIEVMU0UoJHtDVVJMX1RFU1R9X0NPTVBJTEUgQU5EIE5PVCAke0NVUkxfVEVTVH0pCiAgICAgIE1FU1NBR0UoU1RBVFVTICJQZXJmb3JtaW5nIEN1cmwgVGVzdCAke0NVUkxfVEVTVH0gLSBGYWlsZWQiKQogICAgICBTRVQoJHtDVVJMX1RFU1R9ICIiIENBQ0hFIElOVEVSTkFMICJDdXJsIHRlc3QgJHtGVU5DVElPTn0iKQogICAgICBGSUxFKEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElSRUNUT1JZfS9DTWFrZUVycm9yLmxvZyIKICAgICAgICAiUGVyZm9ybWluZyBDdXJsIFRlc3QgJHtDVVJMX1RFU1R9IGZhaWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3V0cHV0OlxuIgogICAgICAgICIke09VVFBVVH0iKQogICAgICBJRigke0NVUkxfVEVTVH1fQ09NUElMRSkKICAgICAgICBGSUxFKEFQUEVORCAKICAgICAgICAgICIke0NNQUtFX0JJTkFSWV9ESVJ9JHtDTUFLRV9GSUxFU19ESVJFQ1RPUll9L0NNYWtlRXJyb3IubG9nIiAKICAgICAgICAgICJUaGVyZSB3YXMgYSBwcm9ibGVtIHJ1bm5pbmcgdGhpcyB0ZXN0XG4iKQogICAgICBFTkRJRigke0NVUkxfVEVTVH1fQ09NUElMRSkKICAgICAgRklMRShBUFBFTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01ha2VFcnJvci5sb2ciIAogICAgICAgICJcblxuIikKICAgIEVORElGKCR7Q1VSTF9URVNUfV9DT01QSUxFIEFORCBOT1QgJHtDVVJMX1RFU1R9KQogIEVORElGKCIke0NVUkxfVEVTVH1fQ09NUElMRSIgTUFUQ0hFUyAiXiR7Q1VSTF9URVNUfV9DT01QSUxFJCIpCkVORE1BQ1JPKENVUkxfSU5URVJOQUxfVEVTVF9SVU4pIAoKIyBEbyBjdXJsIHNwZWNpZmljIHRlc3RzCkZPUkVBQ0goQ1VSTF9URVNUIAogICAgSEFWRV9GQ05UTF9PX05PTkJMT0NLCiAgICBIQVZFX0lPQ1RMU09DS0VUCiAgICBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMCiAgICBIQVZFX0lPQ1RMU09DS0VUX0NBTUVMX0ZJT05CSU8KICAgIEhBVkVfSU9DVExTT0NLRVRfRklPTkJJTwogICAgSEFWRV9JT0NUTF9GSU9OQklPCiAgICBIQVZFX0lPQ1RMX1NJT0NHSUZBRERSCiAgICBIQVZFX1NFVFNPQ0tPUFRfU09fTk9OQkxPQ0sKICAgIEhBVkVfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQKICAgIFRJTUVfV0lUSF9TWVNfVElNRQogICAgSEFWRV9PX05PTkJMT0NLCiAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl81CiAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl83CiAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl84CiAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl81X1JFRU5UUkFOVAogICAgSEFWRV9HRVRIT1NUQllBRERSX1JfN19SRUVOVFJBTlQKICAgIEhBVkVfR0VUSE9TVEJZQUREUl9SXzhfUkVFTlRSQU5UCiAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zCiAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CiAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl82CiAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX1JFRU5UUkFOVAogICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9SRUVOVFJBTlQKICAgIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzZfUkVFTlRSQU5UCiAgICBIQVZFX1NPQ0tMRU5fVAogICAgSEFWRV9JTl9BRERSX1QKICAgIEhBVkVfQk9PTF9UCiAgICBTVERDX0hFQURFUlMKICAgIFJFVFNJR1RZUEVfVEVTVAogICAgSEFWRV9JTkVUX05UT0FfUl9ERUNMCiAgICBIQVZFX0lORVRfTlRPQV9SX0RFQ0xfUkVFTlRSQU5UCiAgICBIQVZFX0dFVEFERFJJTkZPCiAgICBIQVZFX0ZJTEVfT0ZGU0VUX0JJVFMKICAgICkKICBDVVJMX0lOVEVSTkFMX1RFU1QoJHtDVVJMX1RFU1R9KQpFTkRGT1JFQUNIKENVUkxfVEVTVCkKSUYoSEFWRV9GSUxFX09GRlNFVF9CSVRTKQogIFNFVChfRklMRV9PRkZTRVRfQklUUyA2NCkKRU5ESUYoSEFWRV9GSUxFX09GRlNFVF9CSVRTKQoKRk9SRUFDSChDVVJMX1RFU1QgCiAgICBIQVZFX0dMSUJDX1NUUkVSUk9SX1IKICAgIEhBVkVfUE9TSVhfU1RSRVJST1JfUgogICAgKQogIENVUkxfSU5URVJOQUxfVEVTVF9SVU4oJHtDVVJMX1RFU1R9KQpFTkRGT1JFQUNIKENVUkxfVEVTVCkKCiMgQ2hlY2sgZm9yIHJlZW50cmFudApGT1JFQUNIKENVUkxfVEVTVAogICAgSEFWRV9HRVRIT1NUQllBRERSX1JfNQogICAgSEFWRV9HRVRIT1NUQllBRERSX1JfNwogICAgSEFWRV9HRVRIT1NUQllBRERSX1JfOAogICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfMwogICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfNQogICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfNgogICAgSEFWRV9JTkVUX05UT0FfUl9ERUNMX1JFRU5UUkFOVCkKICBJRihOT1QgJHtDVVJMX1RFU1R9KQogICAgSUYoJHtDVVJMX1RFU1R9X1JFRU5UUkFOVCkKICAgICAgU0VUKE5FRURfUkVFTlRSQU5UIDEpCiAgICBFTkRJRigke0NVUkxfVEVTVH1fUkVFTlRSQU5UKQogIEVORElGKE5PVCAke0NVUkxfVEVTVH0pCkVOREZPUkVBQ0goQ1VSTF9URVNUKQoKSUYoTkVFRF9SRUVOVFJBTlQpCiAgRk9SRUFDSChDVVJMX1RFU1QKICAgICAgSEFWRV9HRVRIT1NUQllBRERSX1JfNQogICAgICBIQVZFX0dFVEhPU1RCWUFERFJfUl83CiAgICAgIEhBVkVfR0VUSE9TVEJZQUREUl9SXzgKICAgICAgSEFWRV9HRVRIT1NUQllOQU1FX1JfMwogICAgICBIQVZFX0dFVEhPU1RCWU5BTUVfUl81CiAgICAgIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzYpCiAgICBTRVQoJHtDVVJMX1RFU1R9IDApCiAgICBJRigke0NVUkxfVEVTVH1fUkVFTlRSQU5UKQogICAgICBTRVQoJHtDVVJMX1RFU1R9IDEpCiAgICBFTkRJRigke0NVUkxfVEVTVH1fUkVFTlRSQU5UKQogIEVOREZPUkVBQ0goQ1VSTF9URVNUKQpFTkRJRihORUVEX1JFRU5UUkFOVCkKCklGKEhBVkVfSU5FVF9OVE9BX1JfREVDTF9SRUVOVFJBTlQpCiAgU0VUKEhBVkVfSU5FVF9OVE9BX1JfREVDTCAxKQogIFNFVChORUVEX1JFRU5UUkFOVCAxKQpFTkRJRihIQVZFX0lORVRfTlRPQV9SX0RFQ0xfUkVFTlRSQU5UKQoKIyBTb21lIG90aGVyIG1pbm9yIHRlc3RzCgpJRihOT1QgSEFWRV9JTl9BRERSX1QpCiAgU0VUKGluX2FkZHJfdCAidW5zaWduZWQgbG9uZyIpCkVORElGKE5PVCBIQVZFX0lOX0FERFJfVCkKCiMgRml4IGxpYnogLyB6bGliLmgKCklGKE5PVCBDVVJMX1NQRUNJQUxfTElCWikKICBJRihOT1QgSEFWRV9MSUJaKQogICAgU0VUKEhBVkVfWkxJQl9IIDApCiAgRU5ESUYoTk9UIEhBVkVfTElCWikKCiAgSUYoTk9UIEhBVkVfWkxJQl9IKQogICAgU0VUKEhBVkVfTElCWiAwKQogIEVORElGKE5PVCBIQVZFX1pMSUJfSCkKRU5ESUYoTk9UIENVUkxfU1BFQ0lBTF9MSUJaKQoKSUYoX0ZJTEVfT0ZGU0VUX0JJVFMpCiAgU0VUKF9GSUxFX09GRlNFVF9CSVRTIDY0KQpFTkRJRihfRklMRV9PRkZTRVRfQklUUykKU0VUKENNQUtFX1JFUVVJUkVEX0ZMQUdTICItRF9GSUxFX09GRlNFVF9CSVRTPTY0IikKU0VUKENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jdXJsL2N1cmwuaCIpCkNIRUNLX1RZUEVfU0laRSgiY3VybF9vZmZfdCIgU0laRU9GX0NVUkxfT0ZGX1QpClNFVChDTUFLRV9FWFRSQV9JTkNMVURFX0ZJTEVTKQpTRVQoQ01BS0VfUkVRVUlSRURfRkxBR1MpCgoKIyBDaGVjayBmb3Igbm9uYmxvY2tpbmcKU0VUKEhBVkVfRElTQUJMRURfTk9OQkxPQ0tJTkcgMSkKSUYoSEFWRV9GSU9OQklPIE9SIAogICAgSEFWRV9JT0NUTFNPQ0tFVCBPUgogICAgSEFWRV9JT0NUTFNPQ0tFVF9DQVNFIE9SCiAgICBIQVZFX09fTk9OQkxPQ0spCiAgU0VUKEhBVkVfRElTQUJMRURfTk9OQkxPQ0tJTkcpCkVORElGKEhBVkVfRklPTkJJTyBPUiAKICBIQVZFX0lPQ1RMU09DS0VUIE9SCiAgSEFWRV9JT0NUTFNPQ0tFVF9DQVNFIE9SCiAgSEFWRV9PX05PTkJMT0NLKQoKSUYoUkVUU0lHVFlQRV9URVNUKQogIFNFVChSRVRTSUdUWVBFIHZvaWQpCkVMU0UoUkVUU0lHVFlQRV9URVNUKQogIFNFVChSRVRTSUdUWVBFIGludCkKRU5ESUYoUkVUU0lHVFlQRV9URVNUKQoKSUYoQ01BS0VfQ09NUElMRVJfSVNfR05VQ0MgQU5EIEFQUExFKQogIElOQ0xVREUoQ2hlY2tDQ29tcGlsZXJGbGFnKQogIENIRUNLX0NfQ09NUElMRVJfRkxBRygtV25vLWxvbmctZG91YmxlIEhBVkVfQ19GTEFHX1dub19sb25nX2RvdWJsZSkKICBJRihIQVZFX0NfRkxBR19Xbm9fbG9uZ19kb3VibGUpCiAgICAjIFRoZSBNYWMgdmVyc2lvbiBvZiBHQ0Mgd2FybnMgYWJvdXQgdXNlIG9mIGxvbmcgZG91YmxlLiAgRGlzYWJsZSBpdC4KICAgIEdFVF9TT1VSQ0VfRklMRV9QUk9QRVJUWShNUFJJTlRGX0NPTVBJTEVfRkxBR1MgbXByaW50Zi5jIENPTVBJTEVfRkxBR1MpCiAgICBJRihNUFJJTlRGX0NPTVBJTEVfRkxBR1MpCiAgICAgIFNFVChNUFJJTlRGX0NPTVBJTEVfRkxBR1MgIiR7TVBSSU5URl9DT01QSUxFX0ZMQUdTfSAtV25vLWxvbmctZG91YmxlIikKICAgIEVMU0UoTVBSSU5URl9DT01QSUxFX0ZMQUdTKQogICAgICBTRVQoTVBSSU5URl9DT01QSUxFX0ZMQUdTICItV25vLWxvbmctZG91YmxlIikKICAgIEVORElGKE1QUklOVEZfQ09NUElMRV9GTEFHUykKICAgIFNFVF9TT1VSQ0VfRklMRVNfUFJPUEVSVElFUyhtcHJpbnRmLmMgUFJPUEVSVElFUwogICAgICBDT01QSUxFX0ZMQUdTICR7TVBSSU5URl9DT01QSUxFX0ZMQUdTfSkKICBFTkRJRihIQVZFX0NfRkxBR19Xbm9fbG9uZ19kb3VibGUpCkVORElGKENNQUtFX0NPTVBJTEVSX0lTX0dOVUNDIEFORCBBUFBMRSkKCklOQ0xVREUoQ01ha2UvT3RoZXJUZXN0cy5jbWFrZSkKCkFERF9ERUZJTklUSU9OUygtREhBVkVfQ09ORklHX0gpCgojIEZvciB3aW5kb3dzLCBkbyBub3QgYWxsb3cgdGhlIGNvbXBpbGVyIHRvIHVzZSBkZWZhdWx0IHRhcmdldCAoVmlzdGEpLgpJRihXSU4zMikKICBBRERfREVGSU5JVElPTlMoLURfV0lOMzJfV0lOTlQ9MHgwNTAxKQpFTkRJRihXSU4zMikKCklGKE1TVkMpCiAgQUREX0RFRklOSVRJT05TKC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIC1EX0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSkKRU5ESUYoTVNWQykKCiMgU2V0cyB1cCB0aGUgZGVwZW5kZW5jaWVzICh6bGliLCBPcGVuU1NMLCBldGMuKSBvZiBhIGNVUkwgc3VicHJvamVjdCBhY2NvcmRpbmcgdG8gb3B0aW9ucy4KIyBUT0RPIFRoaXMgaXMgZmFyIHRvIGJlIGNvbXBsZXRlIQpGVU5DVElPTihTRVRVUF9DVVJMX0RFUEVOREVOQ0lFUyBUQVJHRVRfTkFNRSkKICBJRihDVVJMX1pMSUIgQU5EIFpMSUJfRk9VTkQpCiAgICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7WkxJQl9JTkNMVURFX0RJUn0pCiAgRU5ESUYoKQogIElGKENVUkxfWkxJQiBBTkQgWkxJQl9GT1VORCkKICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke1RBUkdFVF9OQU1FfSAke1pMSUJfTElCUkFSSUVTfSkKICAgICNBRERfREVGSU5JVElPTlMoIC1ESEFWRV9aTElCX0ggLURIQVZFX1pMSUIgLURIQVZFX0xJQlogKQogIEVORElGKCkKCiAgSUYoQ01BS0VfVVNFX09QRU5TU0wgQU5EIE9QRU5TU0xfRk9VTkQpCiAgICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7T1BFTlNTTF9JTkNMVURFX0RJUn0pCiAgRU5ESUYoKQogIElGKENVUkxfU1NMIEFORCBDVVJMX0NPTkZJR19IQVNfQkVFTl9SVU5fQkVGT1JFKQogICAgVEFSR0VUX0xJTktfTElCUkFSSUVTKCR7VEFSR0VUX05BTUV9ICR7T1BFTlNTTF9MSUJSQVJJRVN9KQogICAgI0FERF9ERUZJTklUSU9OUyggLURVU0VfU1NMRUFZICkKICBFTkRJRigpCkVOREZVTkNUSU9OKCkKCiMgVWdseSAoYnV0IGZ1bmN0aW9uYWwpIHdheSB0byBpbmNsdWRlICJNYWtlZmlsZS5pbmMiIGJ5IHRyYW5zZm9ybWluZyBpdCAoPSByZWdlbmVyYXRlIGl0KS4KRlVOQ1RJT04oVFJBTlNGT1JNX01BS0VGSUxFX0lOQyBJTlBVVF9GSUxFIE9VVFBVVF9GSUxFKQogIEZJTEUoUkVBRCAke0lOUFVUX0ZJTEV9IE1BS0VGSUxFX0lOQ19URVhUKQogIFNUUklORyhSRVBMQUNFICIkKHRvcF9zcmNkaXIpIiAgICJcJHtDVVJMX1NPVVJDRV9ESVJ9IiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKICBTVFJJTkcoUkVQTEFDRSAiJCh0b3BfYnVpbGRkaXIpIiAiXCR7Q1VSTF9CSU5BUllfRElSfSIgTUFLRUZJTEVfSU5DX1RFWFQgJHtNQUtFRklMRV9JTkNfVEVYVH0pCgogIFNUUklORyhSRUdFWCBSRVBMQUNFICJcXFxcXG4iICKnIaciIE1BS0VGSUxFX0lOQ19URVhUICR7TUFLRUZJTEVfSU5DX1RFWFR9KQogIFNUUklORyhSRUdFWCBSRVBMQUNFICIoW2EtekEtWl9dW2EtekEtWjAtOV9dKilbXHQgXSo9W1x0IF0qKFteXG5dKlxuKSIgIlNFVChcXDEgXFwyKVxuIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKICBTVFJJTkcoUkVQTEFDRSAipyGnIiAiXG4iIE1BS0VGSUxFX0lOQ19URVhUICR7TUFLRUZJTEVfSU5DX1RFWFR9KQoKICBTVFJJTkcoUkVHRVggUkVQTEFDRSAiXFwkXFwoKFthLXpBLVpfXVthLXpBLVowLTlfXSopXFwpIiAiXCR7XFwxfSIgTUFLRUZJTEVfSU5DX1RFWFQgJHtNQUtFRklMRV9JTkNfVEVYVH0pICAgICMgUmVwbGFjZSAkKCkgd2l0aCAke30KICBTVFJJTkcoUkVHRVggUkVQTEFDRSAiQChbYS16QS1aX11bYS16QS1aMC05X10qKUAiICJcJHtcXDF9IiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkgICAgIyBSZXBsYWNlIEBAIHdpdGggJHt9LCBldmVuIGlmIHRoYXQgbWF5IG5vdCBiZSByZWFkIGJ5IENNYWtlIHNjcmlwdHMuCiAgRklMRShXUklURSAke09VVFBVVF9GSUxFfSAke01BS0VGSUxFX0lOQ19URVhUfSkKCiAgIyMjIEJVR0dZIE1FVEhPRCAxCiAgIyBGSUxFKFNUUklOR1MgTWFrZWZpbGUuaW5jIE1BS0VGSUxFX0lOQ19URVhUKQogICMgU1RSSU5HKFJFUExBQ0UgIiMgLi9saWIvTWFrZWZpbGUuaW5jIiAiIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKICAjIFNUUklORyhSRVBMQUNFICIgICIgIiAiIE1BS0VGSUxFX0lOQ19URVhUICR7TUFLRUZJTEVfSU5DX1RFWFR9KSAgICAjIFJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcwoKICAjICNTVFJJTkcoUkVHRVggTUFUQ0ggIkNTT1VSQ0VTICo9IiBBQUEgJHtNQUtFRklMRV9JTkNfVEVYVH0pCiAgIyAjTUVTU0FHRShTVEFUVVMgJHtBQUF9KQoKICAjIFNUUklORyhSRVBMQUNFICJDU09VUkNFUyA9IiAiIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKICAjIFNUUklORyhSRVBMQUNFICJISEVBREVSUyA9IiAiIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKCiAgIyBTVFJJTkcoUkVHRVggUkVQTEFDRSAiW14gXStcXC5jIiAiIiAke0hFQURFUlNfVkFSfSAke01BS0VGSUxFX0lOQ19URVhUfSkgICAgIyBSZW1vdmUgc291cmNlIGZpbGVzIGFuZCBzdG9yZSBpbnRvIGhlYWRlcnMgdmFyCiAgIyBTVFJJTkcoUkVHRVggUkVQTEFDRSAiICArIiAiICIgJHtIRUFERVJTX1ZBUn0gJHske0hFQURFUlNfVkFSfX0pCiAgIyBTVFJJTkcoUkVHRVggUkVQTEFDRSAiICIgIjsiICR7SEVBREVSU19WQVJ9ICR7JHtIRUFERVJTX1ZBUn19KQoKICAjIFNUUklORyhSRUdFWCBSRVBMQUNFICJbXiBdK1xcLmgiICIiICR7U09VUkNFU19WQVJ9ICR7TUFLRUZJTEVfSU5DX1RFWFR9KSAgICAjIFJlbW92ZSBoZWFkZXJzIGFuZCBzdG9yZSBpbnRvIHNvdXJjZSBmaWxlcyB2YXIKICAjIFNUUklORyhSRUdFWCBSRVBMQUNFICIgICsiICIgIiAke1NPVVJDRVNfVkFSfSAkeyR7U09VUkNFU19WQVJ9fSkKICAjIFNUUklORyhSRUdFWCBSRVBMQUNFICIgIiAiOyIgJHtTT1VSQ0VTX1ZBUn0gJHske1NPVVJDRVNfVkFSfX0pCgogICMgU0VUKCR7SEVBREVSU19WQVJ9ICR7JHtIRUFERVJTX1ZBUn19IFBBUkVOVF9TQ09QRSkKICAjIFNFVCgke1NPVVJDRVNfVkFSfSAkeyR7U09VUkNFU19WQVJ9fSBQQVJFTlRfU0NPUEUpCgogICMjIyBCVUdHWSBNRVRIT0QgMgogICMgRklMRShSRUFEIE1ha2VmaWxlLmluYyBNQUtFRklMRV9JTkNfVEVYVCkKICAjICNTVFJJTkcoUkVQTEFDRSAiXHQiICIgIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkgICAgIyBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMKICAjICNTVFJJTkcoUkVHRVggUkVQTEFDRSAiXG4rIiAiXG4iIE1BS0VGSUxFX0lOQ19URVhUICR7TUFLRUZJTEVfSU5DX1RFWFR9KSAgICAjIFJlbW92ZSBlbXB0eSBsaW5lcyAoYWxsb3cgYSBzaW1wbGlmaWNhdGlvbiBpbiB0aGUgc2NyaXB0KQogICMgU1RSSU5HKFJFR0VYIFJFUExBQ0UgIihbQS1aXSspW1x0IF0qPVtcdCBdKiIgIlNFVChcXDEgIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKICAjICNTVFJJTkcoUkVHRVggUkVQTEFDRSAiXiguKilbXHQgXSpbXlxcXSQiICIpIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKICAjIFNUUklORyhSRUdFWCBSRVBMQUNFICIoW15cXF0pXG4iICJcXDEpXG4iIE1BS0VGSUxFX0lOQ19URVhUICR7TUFLRUZJTEVfSU5DX1RFWFR9KQogICMgIyBTVFJJTkcoUkVHRVggUkVQTEFDRSAiQ1NPVVJDRVMgKj0iICJTRVQobGliQ3VybF9TUkNTICIgTUFLRUZJTEVfSU5DX1RFWFQgJHtNQUtFRklMRV9JTkNfVEVYVH0pCiAgIyAjIFNUUklORyhSRUdFWCBSRVBMQUNFICJISEVBREVSUyAqPSIgIlNFVChsaWJDdXJsX0hFQURFUlMgIiBNQUtFRklMRV9JTkNfVEVYVCAke01BS0VGSUxFX0lOQ19URVhUfSkKICAjIEZJTEUoV1JJVEUgTWFrZWZpbGUuaW5jLmNtYWtlICR7TUFLRUZJTEVfSU5DX1RFWFR9KQpFTkRGVU5DVElPTigpCgpBRERfU1VCRElSRUNUT1JZKGxpYikKSUYoQlVJTERfQ1VSTF9FWEUpCiAgQUREX1NVQkRJUkVDVE9SWShzcmMpCkVORElGKCkKSUYoQlVJTERfQ1VSTF9URVNUUykKICBBRERfU1VCRElSRUNUT1JZKHRlc3RzKQpFTkRJRigpCgojIFRoaXMgbmVlZHMgdG8gYmUgcnVuIHZlcnkgbGFzdCBzbyBvdGhlciBwYXJ0cyBvZiB0aGUgc2NyaXB0cyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcy4KSUYoTk9UIENVUkxfQ09ORklHX0hBU19CRUVOX1JVTl9CRUZPUkUpCiAgICBTRVQoQ1VSTF9DT05GSUdfSEFTX0JFRU5fUlVOX0JFRk9SRSAxIENBQ0hFIElOVEVSTkFMICJGbGFnIHRvIHRyYWNrIHdoZXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBydW5uaW5nIENNYWtlIG9yIGlmIENNYWtlIGhhcyBiZWVuIGNvbmZpZ3VyZWQgYmVmb3JlIikKRU5ESUYoKQo=